raulraja
03/03/2018, 6:54 PMMonadReader or other abstraction and you are already parametric over F but in my opinion it does not add much value on it's own unless you are in a concrete context.
Reader<D, A> is ReaderT<ForId, D, A>. This means just Reader on it's own can't be threaded on an async context since it's fixed to Id. You would need ReaderT because composition over Reader is done with flatMap whereas in functions is just function application.
Unless you have a specific use case I think in most cases partial application or simply using algebras over a parametric F is always more flexible.