why not use `callable` here ? it's more flexible.