So you have some particular t
s for which you wish to provide a MonadReader
instance?
In that case for each t
which lacks MonadReader
instance (look here for existing instances) you need to implement it:
instance MonadReader r m => MonadReader r (t m) where
ask = lift ask
local = ...
The way to implement local
is individual for each t
, so you might want to specify which transformers are you working with.
Nick
I mean m, not M.On Thu, Oct 31, 2013 at 3:54 PM, David Fox <dsf@seereason.com> wrote:
Hmm, I'm still having trouble implementing local for the MonadReader instance of M.On Thu, Oct 31, 2013 at 11:59 AM, Nickolay Kudasov <nickolay.kudasov@gmail.com> wrote:
Hi David,
I believe the easiest way to do what you want is to use
MonadReader
class instead of explicitt (Reader [String] a)
:push' :: MonadReader [String] m => String -> m a -> m a push' s = local (s:)
Best,
Nick2013/10/31 David Fox <dsf@seereason.com>
_______________________________________________I can write a stack push function in the reader monad like so:import Control.Monad.Readerpush :: String -> Reader [String] a -> Reader [String] apush s action = local (s :) actionHow can I write a push that works inside a monad transformer?push' :: MonadTrans t => String -> t (Reader [String]) a -> t (Reader [String]) apush' s action = ???
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe