[Haskell-cafe] Are there standard idioms for lazy, pure error
handling?
Luke Palmer
lrpalmer at gmail.com
Mon Nov 30 01:16:56 EST 2009
On Sun, Nov 29, 2009 at 11:08 PM, Malcolm Wallace
<malcolm.wallace at cs.york.ac.uk> wrote:
> Are you sure that there can be no error recovery, to continue with events
> after a mal-formed event has been discarded? In many cases, it is possible.
> However, if you really want to terminate the stream at the first error, and
> to reflect this in the type, then I guess you can define your own list type:
>
> data ListThenError e a = Cons a (ListThenError e a)
> | Error e
>
> Of course this has the disadvantage that then your consumer must change to
> use this type too.
If it is correct, there is no disadvantage. Using a list when it is
not the appropriate structure will make both the producer and the
consumer code uglier. You might gain a little notational convenience,
but you bubble implicit assumptions, such as an error terminates a
stream, through the code where they can not be checked.
Of course, when you have a stream from which errors can be recovered,
do not use a type that terminates with errors.
Everything cleans up so nicely when your model perfectly captures your problem.
Luke
More information about the Haskell-Cafe
mailing list