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.

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

Cheers,

  Stefan_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to