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.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to