Re: Non-linear patterns.

Noon van der Silk <[email protected]> Tue, 6 May 2025 09:21:47 +0100
Newsgroups gmane.comp.lang.haskell.cafe
Message-ID <CAKBUzA07Jp+vqqkiNX61K-gtNJRQOXXAJ904pb1TRnC6Km0DvQ@mail.gmail.com>
The `Eq` you request there is not quite enough; right? you don't want
merely a to have an Eq; you want a to be exactly equal to (the other) a?

On Tue, 6 May 2025 at 09:11, Simon Thompson via Haskell-Cafe <
[email protected]> wrote:

> Repeated variables in patterns were allowed in Miranda, a predecessor of
> Haskell. In a lazy context there are interesting questions about how
> pattern matches fail, and in particular the point at which equality tests
> take place in matching a complex pattern. This paper
>
> [image: preview.png]
>
> BF01887213 <https://dl.acm.org/doi/pdf/10.1007/BF01887213>
> PDF Document ยท 1.5 MB <https://dl.acm.org/doi/pdf/10.1007/BF01887213>
> <https://dl.acm.org/doi/pdf/10.1007/BF01887213>
>
> section 6.2 explains how these two definitions differ in meaning
>
> g [x,x] = 37
> g z = 42
>
> h [x,y] = 37 , x=y
> h z = 42
>
> Simon
>
> On 6 May 2025, at 10:01, Serguey Zefirov <[email protected]> wrote:
>
> There are artifacts of old Haskell standards that are a matching against
> integer value (2 + 2 = 5) and a matching against arithmetic expression (f
> (n+1) = f n).
>
> Both are interesting in requiring a class over type to match.
>
> f 10 = 11 has type f :: (Eq a1, Num a1, Num a2) => a1 -> a2
>
> f (n+1) = f n has type f :: Integral t1 => t1 -> t2
>
> In that vein it is possible to add non-linear patterns by adding an
> equality constraint on the non-linear matches.
>
> E.g., f x x = x would have type f :: Eq a => a -> a -> a
>
> For example:
>
> data Logic = True | False | Not Logic | Or Logic Logic | And Logic Logic
> deriving Eq
>
> simplify (And x x) = simplify x
> simplify (Or x x) = simplify x
> simplify (Not (Not x)) = simplify x
> simplify x = x
>
> Patterns like that are common in simplification/optimization rules. Also,
> by making them legal, it would be possible to use them in Template Haskell
> to make better embedded languages.
>
> On the implementation side, it can be implemented much like the (n+k)
> pattern. I also think that pattern matching completeness checker should not
> change.
>
> What would you say?
> _______________________________________________
> Haskell-Cafe mailing list
> To (un)subscribe, modify options or view archives go to:
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Only members subscribed via the mailman list are allowed to post.
>
>
> Simon Thompson | Professor of Logic and Computation
> School of Computing | University of Kent | Canterbury, CT2 7NF, UK
> [email protected] | M +44 7986 085754 | W www.cs.kent.ac.uk/~sjt
>
> _______________________________________________
> Haskell-Cafe mailing list
> To (un)subscribe, modify options or view archives go to:
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Only members subscribed via the mailman list are allowed to post.



-- 
Noon van der Silk

http://silky.github.io/

"My programming language is kindness."

_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
Only members subscribed via the mailman list are allowed to post.
preview.png (image/png, 204.3 KB) - not displayed