[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