How do I lift Control.Monad.Reader.local?
I can write a stack push function in the reader monad like so: import Control.Monad.Reader push :: String -> Reader [String] a -> Reader [String] a push s action = local (s :) action How can I write a push that works inside a monad transformer? push' :: MonadTrans t => String -> t (Reader [String]) a -> t (Reader [String]) a push' s action = ???
Hi David, I believe the easiest way to do what you want is to use MonadReader class instead of explicit t (Reader [String] a): push' :: MonadReader [String] m => String -> m a -> m apush' s = local (s:) Best, Nick 2013/10/31 David Fox <dsf@seereason.com>
I can write a stack push function in the reader monad like so:
import Control.Monad.Reader
push :: String -> Reader [String] a -> Reader [String] a push s action = local (s :) action
How can I write a push that works inside a monad transformer?
push' :: MonadTrans t => String -> t (Reader [String]) a -> t (Reader [String]) a push' s action = ???
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
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 explicit t (Reader [String] a):
push' :: MonadReader [String] m => String -> m a -> m apush' s = local (s:)
Best, Nick
2013/10/31 David Fox <dsf@seereason.com>
I can write a stack push function in the reader monad like so:
import Control.Monad.Reader
push :: String -> Reader [String] a -> Reader [String] a push s action = local (s :) action
How can I write a push that works inside a monad transformer?
push' :: MonadTrans t => String -> t (Reader [String]) a -> t (Reader [String]) a push' s action = ???
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
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 MonadReaderclass instead of explicit t (Reader [String] a):
push' :: MonadReader [String] m => String -> m a -> m apush' s = local (s:)
Best, Nick
2013/10/31 David Fox <dsf@seereason.com>
I can write a stack push function in the reader monad like so:
import Control.Monad.Reader
push :: String -> Reader [String] a -> Reader [String] a push s action = local (s :) action
How can I write a push that works inside a monad transformer?
push' :: MonadTrans t => String -> t (Reader [String]) a -> t (Reader [String]) a push' s action = ???
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
So you have some particular ts for which you wish to provide a MonadReaderinstance? In that case for each t which lacks MonadReader instance (look here<http://hackage.haskell.org/package/mtl-2.1.2/docs/Control-Monad-Reader-Class.html#t:MonadReader>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 2013/11/1 David Fox <dsf@seereason.com>
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 MonadReaderclass instead of explicit t (Reader [String] a):
push' :: MonadReader [String] m => String -> m a -> m apush' s = local (s:)
Best, Nick
2013/10/31 David Fox <dsf@seereason.com>
I can write a stack push function in the reader monad like so:
import Control.Monad.Reader
push :: String -> Reader [String] a -> Reader [String] a push s action = local (s :) action
How can I write a push that works inside a monad transformer?
push' :: MonadTrans t => String -> t (Reader [String]) a -> t (Reader [String]) a push' s action = ???
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
participants (2)
-
David Fox -
Nickolay Kudasov