
Hi all, I was creating "bigger" uncurries which I am simply extending from an existing uncurry I found some where, e.g. uncurry4 :: (a -> b -> c -> d -> e) -> ((a, b, c, d) -> e) uncurry4 f ~(a,b,c,d) = f a b c d when I realized, what's the "~" for ? I've only been able to find a partial explanation that it involves preserving laziness, or something, maybe ? I was hoping someone could enlighten me. Thanks Brian

On 18/02/13 19:02, briand@aracnet.com wrote:
Hi all,
I was creating "bigger" uncurries which I am simply extending from an existing uncurry I found some where, e.g.
uncurry4 :: (a -> b -> c -> d -> e) -> ((a, b, c, d) -> e) uncurry4 f ~(a,b,c,d) = f a b c d
when I realized, what's the "~" for ?
I've only been able to find a partial explanation that it involves preserving laziness, or something, maybe ?
I was hoping someone could enlighten me.
Thanks
Brian
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[1] explains it in section 4.4 — ‘Lazy patterns’. [1] - http://www.haskell.org/tutorial/patterns.html -- Mateusz K.

On Mon, 18 Feb 2013 19:13:13 +0000
Mateusz Kowalczyk
On 18/02/13 19:02, briand@aracnet.com wrote:
Hi all,
I was creating "bigger" uncurries which I am simply extending from an existing uncurry I found some where, e.g.
uncurry4 :: (a -> b -> c -> d -> e) -> ((a, b, c, d) -> e) uncurry4 f ~(a,b,c,d) = f a b c d
when I realized, what's the "~" for ?
I've only been able to find a partial explanation that it involves preserving laziness, or something, maybe ?
I was hoping someone could enlighten me.
Thanks
Brian
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[1] explains it in section 4.4 — ‘Lazy patterns’.
how strange - I was sure I looked through the tutorial... Thanks Mateusz and Patrick. Brian

The difference the ~ makes in this case is that `uncurry4 (\_ _ _ _ -> ())
undefined` evaluates to `()` instead of bottom. The ~ is called an
irrefutable pattern, and it helps make code that pattern matches on
constructors more lazy. This seems like a good explanation of the subject:
http://en.wikibooks.org/wiki/Haskell/Laziness#Lazy_pattern_matching
On Mon, Feb 18, 2013 at 2:02 PM,
Hi all,
I was creating "bigger" uncurries which I am simply extending from an existing uncurry I found some where, e.g.
uncurry4 :: (a -> b -> c -> d -> e) -> ((a, b, c, d) -> e) uncurry4 f ~(a,b,c,d) = f a b c d
when I realized, what's the "~" for ?
I've only been able to find a partial explanation that it involves preserving laziness, or something, maybe ?
I was hoping someone could enlighten me.
Thanks
Brian
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
participants (3)
-
briand@aracnet.com
-
Mateusz Kowalczyk
-
Patrick Palka