Move MonadIO to base
Heinrich Apfelmus
apfelmus at quantentunnel.de
Mon Apr 19 04:00:49 EDT 2010
David Menendez wrote:
> wren ng thornton wrote:
>> Heinrich Apfelmus wrote:
>>
>>> In particular, it's not possible to implement
>>>
>>> lift :: (Monad m, MonadTrans t) => m a -> t m a
>>
>> Why not?
>> * morph says m(t m a) is a subset of (t m a)
>> * Monad m says we can fmap :: (a->b) -> (m a->m b)
>> * Monad (t m) says we can return :: a -> t m a
>>
>> lift ma = morph (\k -> k (fmap return ma))
>
> Maybe something like this?
>
> lift m = morph (\k -> m >>= k . return)
> -- n.b., return and >>= are from different monads
Nice! And it's consistent with the proposed equation
morph (\down -> m >>= h down) = lift m >>= morph . flip h
which says that effects that happen before applying down can be lifted
out of morph .
Regards,
Heinrich Apfelmus
--
http://apfelmus.nfshost.com
More information about the Libraries
mailing list