[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:
>> 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))
More information about the Haskell-Cafe