[Haskell-cafe] How do I lift Control.Monad.Reader.local?

Nickolay Kudasov nickolay.kudasov at gmail.com
Fri Nov 1 20:23:29 UTC 2013


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 at seereason.com>

> I mean m, not M.
>
>
> On Thu, Oct 31, 2013 at 3:54 PM, David Fox <dsf at 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 at 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 at 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 at haskell.org
>>>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20131102/6d19a90c/attachment.html>


More information about the Haskell-Cafe mailing list