On Fri, 14 May 2010, Derek Elkins wrote:

You did it wrong.  All you did was Church encode the Either type.
Your bind is still doing a case-analysis.  All you have to do is use
ContT r (Either e).  The bind implementation for ContT is completely
independent of the underlying monad.  It doesn't even require the m in
ContT r m to be a functor, let alone a monad.  Therefore the ContT
bind doesn't do any case-analysis because it doesn't know anything
about the underlying monad.  One way to look at what is happening is
to compare it to Andrzej Filiniski's work in "Representing Monads" and
"Representing Layered Monads".

What I don't get is that the bind operation for ContT and ErrCPS look so similar to me

ContT (stripping off the newtype constructor/destructors):
m >>= k  = \c -> m (\a -> k a c)

ErrCPS (stripping off the newtype constructor/destructors):
m >>= f = \err good -> m err (\x -> f x err good)

I don't get why one is slow but not the other?

--
Russell O'Connor                                      <http://r6.ca/>
``All talk about `theft,''' the general counsel of the American Graphophone
Company wrote, ``is the merest claptrap, for there exists no property in
ideas musical, literary or artistic, except as defined by statute.''
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to