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

wren ng thornton wren at freegeek.org
Thu May 13 05:13:15 EDT 2010


Antoine Latter wrote:
>> While I also offer a transformer version of MaybeCPS, the transformer *does*
>> suffer from significant slowdown. Also, for MaybeCPS it's better to leave
>> the handlers inline in client code rather than to abstract them out; that
>> helps to keep things concrete. So perhaps you should first try a direct CPS
>> translation:
> 
> Is the CPS transformed MaybeT slower because it's done in 2-CPS,
> rather than in 1-CPS like the MaybeCPS? I only did MaybeT in 2-CPS
> because it was the easiest, not because I thought it would be easiest.

I'm not sure how much of it is due to the 2-CPS vs how much is due to 
the loss of concrete case-analysis and tail-calls in crucial areas. As I 
noted in comments on the non-transformer version, there are a number of 
subtle issues such as the choice between let-binding and case analysis 
which have major effects on performance, so it's tricky to make a 
MaybeCPS which doesn't impose a performance overhead.

A big part of the problem is that once you move to the transformer 
version, you can't just jump to the next handler--- you also need to 
carry around whatever the other monad would add to Nothing. Once you 
move to 2-CPS, the representation is similar enough to LogicT 
(==ListCPST) that you seem to loose the benefits of Maybe over [].

-- 
Live well,
~wren


More information about the Haskell-Cafe mailing list