New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types Arthur A. Gleckler 02 Jul 2020 05:56 UTC
Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types Shiro Kawai 02 Jul 2020 12:50 UTC
Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types John Cowan 02 Jul 2020 13:19 UTC
Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types Marc Nieper-Wißkirchen 07 Jul 2020 14:23 UTC
Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types John Cowan 07 Jul 2020 20:32 UTC
Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types Marc Nieper-Wißkirchen 08 Jul 2020 14:27 UTC
Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types Wolfgang Corcoran-Mathe 08 Jul 2020 19:47 UTC
Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types Marc Nieper-Wißkirchen 08 Jul 2020 20:21 UTC
Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types John Cowan 09 Jul 2020 04:32 UTC
Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types Marc Nieper-Wißkirchen 09 Jul 2020 09:30 UTC
Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types John Cowan 10 Jul 2020 14:05 UTC
Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types Marc Nieper-Wißkirchen 10 Jul 2020 14:39 UTC
Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types Wolfgang Corcoran-Mathe 10 Jul 2020 17:30 UTC
Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types Marc Nieper-Wißkirchen 10 Jul 2020 17:50 UTC
Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types Wolfgang Corcoran-Mathe 11 Jul 2020 15:22 UTC
Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types Marc Nieper-Wißkirchen 11 Jul 2020 15:30 UTC
Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types Wolfgang Corcoran-Mathe 11 Jul 2020 16:17 UTC
Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types Alex Shinn 11 Jul 2020 22:20 UTC
Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types Marc Nieper-Wißkirchen 11 Jul 2020 22:29 UTC
Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types Wolfgang Corcoran-Mathe 12 Jul 2020 03:35 UTC
Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types Marc Nieper-Wißkirchen 11 Jul 2020 16:33 UTC
Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types John Cowan 11 Jul 2020 18:44 UTC
Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types Marc Nieper-Wißkirchen 11 Jul 2020 19:26 UTC
Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types Arthur A. Gleckler 11 Jul 2020 19:59 UTC
Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types Marc Nieper-Wißkirchen 11 Jul 2020 20:06 UTC
Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types Arthur A. Gleckler 11 Jul 2020 20:08 UTC
Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types Marc Nieper-Wißkirchen 14 Jul 2020 09:13 UTC
Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types John Cowan 14 Jul 2020 21:15 UTC
Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types Alex Shinn 15 Jul 2020 00:07 UTC

Re: New draft (#8) of and new "last call" for SRFI 189: Maybe and Either: optional container types Marc Nieper-Wißkirchen 08 Jul 2020 20:21 UTC

Am Mi., 8. Juli 2020 um 21:47 Uhr schrieb Wolfgang Corcoran-Mathe
<xxxxxx@sigwinch.xyz>:
>
> On 2020-07-08 16:27 +0200, Marc Nieper-Wißkirchen wrote:
> > While it is true that this syntax can always be added later (as can,
> > in principle, every part of this SRFI), it would be unfortunate to
> > leave out exactly 'either-guard' because it will certainly be used
> > much more often than a number of other procedures in this SRFI and
> > sets a clear style for idiomatic code:
>
> The more I think about a form for converting exceptions to Eithers,
> the more there seems to be something fundamentally flawed about the
> idea.  The exception-based and data-directed approaches to
> error-handling seem to me to be very difficult to reconcile, at
> least in the exception->data direction; you're taking an exception,
> possibly asynchronous, signalled outside the normal flow of control
> of a program, and jumping back into that flow with a datum encapsulating
> that exception.  In contrast, going the other way (e.g. by raising
> the payload of a Left) is simple and idiomatic.  This suggests to
> me that converting exceptions to Eithers, as an idiom, is the Wrong
> Thing.

I don't think so (at least as long not arbitrary exceptions but only
well-defined are caught).

The guard form or any C++/Java/Python exception handler that does not
reraise the caught exception does this exactly, namely turning an
exception into data.

This is certainly an important language construct.

One can also see it as protocol conversion, from exception-style
programming to a C-style programming where the return value decides
about success:

(define (delete-file-and-return-success filename)
  (guard (exc ((file-error? exc) #f)) (delete-file filename) #t))

The point of Eithers is to reason about success and failure (with
payloads) in a data-driven style. Many existing APIs, however, use
different code paths through exceptions and not data. We want an
adapter to the world of Eithers.

We can put Eithers in data structures (e.g. to create a list of
results). We cannot put raised exceptions in lists. This is just
another use case.