[Haskell-cafe] Can we come out of a monad?

Martijn van Steenbergen martijn at van.steenbergen.nl
Fri Jul 30 07:14:48 EDT 2010


On 7/30/10 9:29, Stefan Holdermans wrote:
> Jason,
>
>> There is one case where you can break out of a monad without knowing which monad it is.  Well, kind of.  It's cheating in a way because it does force the use of the Identity monad.  Even if it's cheating, it's still very clever and interesting.
>
> How is this cheating?  Or better, how is this breaking out of a monad "without knowing which monad it is"?  It isn't. You know exactly which monad you're breaking out: it's the identity monad.  That's what happens if you put quantifiers in negative positions: here, you are not escaping out of an arbitrary monad (which you can't), but escaping out of a very specific monad.

Also, the only monadic functions the argument may use are return, bind 
and fail. It's hard to do something useful with only those functions.

>> The specific function is:
>>       >  purify :: (forall m. Monad m =>  ((a ->  m b) ->  m b)) ->  ((a->b)->b)
>>       >  purify f = \k ->  runIdentity (f (return . k))

Martijn.


More information about the Haskell-Cafe mailing list