Extensibility (and the lack thereof) Marc Nieper-Wißkirchen (28 Aug 2020 11:49 UTC)
Re: Extensibility (and the lack thereof) Felix Thibault (28 Aug 2020 18:06 UTC)
Re: Extensibility (and the lack thereof) Marc Nieper-Wißkirchen (28 Aug 2020 19:22 UTC)
Re: Extensibility (and the lack thereof) John Cowan (29 Aug 2020 00:46 UTC)
Re: Extensibility (and the lack thereof) Marc Nieper-Wißkirchen (29 Aug 2020 08:14 UTC)
Re: Extensibility (and the lack thereof) Wolfgang Corcoran-Mathe (26 Oct 2020 17:50 UTC)
Re: Extensibility (and the lack thereof) John Cowan (26 Oct 2020 20:04 UTC)
Re: Extensibility (and the lack thereof) Marc Nieper-Wißkirchen (26 Oct 2020 20:33 UTC)
Re: Extensibility (and the lack thereof) Felix Thibault (26 Oct 2020 21:17 UTC)
Re: Extensibility (and the lack thereof) Marc Nieper-Wißkirchen (26 Oct 2020 21:30 UTC)
Re: Extensibility (and the lack thereof) Felix Thibault (26 Oct 2020 22:42 UTC)
Re: Extensibility (and the lack thereof) Felix Thibault (26 Oct 2020 22:49 UTC)
Re: Extensibility (and the lack thereof) John Cowan (27 Oct 2020 00:05 UTC)
Re: Extensibility (and the lack thereof) Felix Thibault (27 Oct 2020 00:35 UTC)
Re: Extensibility (and the lack thereof) John Cowan (27 Oct 2020 01:59 UTC)
Re: Extensibility (and the lack thereof) Felix Thibault (27 Oct 2020 02:18 UTC)
Re: Extensibility (and the lack thereof) Wolfgang Corcoran-Mathe (27 Oct 2020 19:38 UTC)
Re: Extensibility (and the lack thereof) Marc Nieper-Wißkirchen (27 Oct 2020 19:46 UTC)
Re: Extensibility (and the lack thereof) Marc Nieper-Wißkirchen (28 Oct 2020 06:31 UTC)
Re: Extensibility (and the lack thereof) Felix Thibault (28 Oct 2020 21:30 UTC)
Re: Extensibility (and the lack thereof) John Cowan (29 Oct 2020 00:17 UTC)
Re: Extensibility (and the lack thereof) Marc Nieper-Wißkirchen (29 Oct 2020 16:42 UTC)
Re: Extensibility (and the lack thereof) Marc Nieper-Wißkirchen (27 Oct 2020 17:20 UTC)
Re: Extensibility (and the lack thereof) Felix Thibault (27 Oct 2020 18:42 UTC)

Re: Extensibility (and the lack thereof) Marc Nieper-Wißkirchen 28 Oct 2020 06:31 UTC

When extending the matcher, we shouldn't forget that the matcher
naturally applies to *coinductive* values, not to *inductive* values.
Coinductive values are characterized through their deconstructors,
inductive values are characterized through their constructors. And the
matcher basically calls deconstructors and only a finite number of
them in each step.

Directly translating the view concept from Haskell to Scheme destroys
this concept because a view is naturally lazy in Haskell but eager in
Scheme. Whatever general solution we agree on, it also has to be able
to handle streams, for example. The next thing, a possible solution
should be tested against is a lazy, infinite tree.

Am Di., 27. Okt. 2020 um 20:45 Uhr schrieb Marc Nieper-Wißkirchen
<xxxxxx@nieper-wisskirchen.de>:
>
> Am Di., 27. Okt. 2020 um 20:38 Uhr schrieb Wolfgang Corcoran-Mathe
> <xxxxxx@sigwinch.xyz>:
> >
> > On 2020-10-26 21:58 -0400, John Cowan wrote:
> > > On Mon, Oct 26, 2020 at 8:35 PM Felix Thibault <xxxxxx@gmail.com>
> > > wrote:n
> > >
> > > Wait, is this like (match (view-proc obj) pattern ...)) ?
> > > >
> > >
> > > That was my original idea, but now I think it's better to do it
> > > differently.  I'm going to stick with -> for now, as I think it helps
> > > readability.  Here's an example:
> > >
> > > (define-record-type <point>
> > >   (make-point x y)
> > >   point?
> > >   (x point-x)
> > >   (y point-y))
> > >
> > > (define (point-view pt)
> > >   (if (point? pt)
> > >    (values (point-x pt) (point-y pt))
> > >    (values))
> > >
> > > (define p (make-point 10 20))
> > >
> > > (match p
> > >   ((-> point? point-view 10 y)
> > >     (+ y 1))) => 21
> >
> > This looks very nice!  Maybe this relates to Marc's point about tree
> > patterns, but it seems that we'd want to recursively bring the whole
> > power of the matcher to bear on the patterns appearing after
> > <view-proc>, so that complex structures can be matched without nested
> > matches.  e.g., the pattern grammar would be extended in something like
> > the following manner:
> >
> >     pat :
> >         ⋮
> >         | (-> predicate proc pat1 ... patN)
>
> Yes, something like this. (The predicate may be superfluous if we know
> what we are matching against, but this is secondary.)
>
> The only thing that should be changed in my opinion is the `proc`
> argument, which should become an expand-time object (like a
> record-type descriptor can be).
>
> In some sense, the matching for pat1, ..., patN will be delegated this
> expand-time object (which can, in turn, cause match to be invoked
> recursively).
>
> Marc