Alexey,

>>> 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.
>> 
> No I think here we breaking out from _arbitrary_ monad. If monadic
> function works for every monad then it must work for identity monad
> too.

Once, again: no. :)  You're not escaping from an arbitrary monad; you are 
escaping from the identity monad.

>> purify2 :: (forall m . Monad m => m a) -> a
>> purify2 m = runIdentity m

The function you pass into purify2 works for an arbitrary monad.  Purify itself 
instantiates this function to the identify monad—and then escapes from it.

My former boss used to tell me that these are the kinds of things you should 
try to explain yourself while riding you're bike.  If longer you ride your 
bike, the better you'll understand it.

Have fun biking ;-),

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

Reply via email to