Sorry to enter the discussion a little late ...

First, I'm not clear what Simon meant by "first class abstractions" in this comment

Several proposals suggest first class abstractions rather that first-class patterns. Here are the ones I know of ...

Second, I completely agree with Claus in his comment here that my "First Class Patterns"
paper is definitely related to, and not orthogonal to view patterns:

The "big idea" of my paper was to stop the growing complexity of the pattern-language of Haskell. The idea was to use the abstraction capabilities of the language along
  with some simple syntactic sugar to give us 'pattern omnipotence'.

However, my approach could be seen as orthogonal in that I did not propose to change Haskell patterns. Instead, I suggested some additional syntax that could
  serve as a replacement for complicated uses of patterns.

Strangely, for other reasons, I'm planning, within a week or so, to start implementing the "pattern-binder" syntax I discussed in the paper (either in GHC or as a pre-processor).

- Mark

Claus Reinke wrote:
3 what you call first class abstractions are not entirely orthogonal to view patterns.
    taking Tullsen's and my own proposal as examples:

- the way patterns and alternatives are handled needs to fit together. that doesn't seem to be a problem since your and our proposals agree on using what I call a monadic data parsing framework (using a MonadPlus such as Maybe to handle
    pattern match failure and alternatives)

- all three proposals have discussed how to handle patterns as well. For Tullsen, that is central to his proposal, for me, it was only one of the more advanced
    examples because I wanted to focus on match alternatives first.

Tullsen first builds his pattern combinators, then outlines a point-free style that avoids the need for pattern variables althogether but does not seem to scale well, then suggests syntactic sugar for translating patterns with variables into applications of his combinators. So that last part is closely related to, if different from, your
    proposal.

In my example, I build up patterns from de-constructors (which use tests and selectors), so that a cons pattern takes a head pattern and a tail pattern as parameters and applies them to the head and tail if it is applied to a non-empty list. To handle variables, I use an old trick from the early functional logic languages, namely that logic variables can be passed unbound, then bound to values later, just what we need for pattern variables. Since Haskell doesn't have logic variables, I have to simulate them, which is the only awkward bit
    of the example:
http://www.haskell.org/pipermail/haskell-prime/2006-November/ 001915.html

as long as Haskell doesn't support logic variables, some syntactic sugar for variables in nested patterns, such as Tullsen's or your's, is probably inevitable.
_______________________________________________
Haskell-prime mailing list
Haskell-prime@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-prime

Reply via email to