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