~ patterns

On 27 January 2006 10:50, John Hughes wrote:
> I'd be fairly horrified at the removal of ~ patterns. I've used them
> to fix very serious space-leaks that would have been awkward to fix
> in any other way.
You use them to *fix* space leaks? Can you give an example? I'm
genuinely surprised and interested - I don't think I've ever seen a case
of this before, but I've seen the opposite many times (lazy pattern
matching being the cause of space leaks).
The reasoning behind removing ~ patterns, for me, is that the number of
times they are used doesn't justify stealing the ~ symbol and the extra
complexity in the language design, when you can get the same effect with
let bindings. With pattern guards there's even less justification for
keeping ~, eg.
f (a, ~(x:xs)) = e
turns into
f (a,b) | let (x:xs) = b = e
you can translate any equation this way. I would probably write the
second form in prefernce to the first, because the strict pattern
matches are clearly separated from the lazy.
I admit to being slightly biased though, in the type of Haskell
programming I do I have almost never needed to use ~. Very occasionally
when doing cyclic programming, is all.
Cheers,
Simon