[Haskell-cafe] Pattern matching with where free variables can be used more than once

Christopher Done chrisdone at googlemail.com
Sun Jul 26 11:54:29 EDT 2009


Well, as I said previously, in reply to Wolfgang, forget the (==) and/or Eq
instance; just use the constructors. You don't need an Eq instance for them.

You have the expression:

foo (a,b)

and the definition:

foo (X,X) = ..

Let's say the predicate for checking that the value of `a' matches X is
Predicate A.

Likewise, for

foo (x,x) = ...

We can use Predicate A to compare `a' and `b', for determining whether the
(x,x) pattern succeeds.

2009/7/18 Richard O'Keefe <ok at cs.otago.ac.nz>

>
> On Jul 18, 2009, at 6:35 AM, Christopher Done wrote:
> [non-linear patterns]
>
> This kind of matching is provided in Prolog and Erlang.
> Neither of them lets the user define equality.
>
> We find the same issue with
>   n+k   patterns               (e.g., n+1 as a pattern)
>   l++r  patterns               (e.g., "prefix"++tail)
>   (x,x) patterns (hidden ==)
>
> In each case, the question is "what if the Prelude's version
> of the explicit or implied function is not in scope?"  (For
> n+k patterns, is the relevant function "+" or is it ">=" and "-"?
> For l++r patterns, is it "++", or "null", "head", and "tail"?)
>
> My preferred answer would be to say "the only functions in
> scope in a pattern are constructors; these aren't functions,
> they're syntax, and they always relate to the Prelude."
>
> The Haskell' community's preferred answer seems to be
> "avoid the question, ban the lot of them."
>
> It's fair to say that any such pattern _can_ be rewritten to
> something Haskell can handle; it's also fair to say that the
> result is often less readable, but that a rewrite may reduce
> the pain.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20090726/513554ee/attachment.html


More information about the Haskell-Cafe mailing list