[Haskell-cafe] Speed of Error handling with Continuations vs. Eithers

roconnor at theorem.ca roconnor at theorem.ca
Sun May 16 07:05:17 EDT 2010


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.''


More information about the Haskell-Cafe mailing list