[Haskell-cafe] All equations must have the same arity - why?
ajb at spamcop.net
ajb at spamcop.net
Mon Jan 14 01:42:57 EST 2008
G'day all.
Quoting Neil Mitchell <ndmitchell at gmail.com>:
> I don't believe that. I suspect the type system will mop these up.
As previously noted, anything involving undefined (thanks to seq) is
not equivalent.
While undefined is arguably uncommon, error most certainly isn't:
f1 (x:xs) = {- something -}
f1 [] = error "empty list"
-- add an argument, to get...
f2 (x:xs) y = {- something -}
f2 [] = error "empty list"
f2 is type-correct, but is subtly different from f1, both semantically
and (I think) performance-wise.
On sharing: It's not generally appreciated, but in GHC, there's a subtle
difference between:
g x y = let z = p x in q x y z
and:
g x = \y -> let z = p x in q x y z
the difference being that in the latter, the definition of z can be
let-floated:
g x = let z = p x in \y -> q x y z
GHC does not float lets over lambdas if it would "break" a group of
function arguments. Any proposed desugaring would have to either come
up with a better rule than this, or find a way to preserve it.
Cheers,
Andrew Bromage
More information about the Haskell-Cafe
mailing list