
Jonathan Cast
On 13 Jan 2008, at 5:27 PM, Achim Schneider wrote:
"Neil Mitchell"
wrote: Hi,
It's nice to write functions in point free style:
f = sort . nub
But sometimes I have to add an extra case, on a certain value:
f [] = [1] f = sort . nub
But now these equations have different arities, and its rejected by Haskell. Why does this not simply desugar to:
f [] = [1] f x = (sort . nub) x
i.e. lift the arities to the longest argument list.
Is there a reason this isn't done?
Answer #2:
Because you can't write
f x = case x of [] -> [1] -> sort.nub
But why not?
Because arities aren't lifted to the longest argument list.
Treating case as syntax sugar for a higher-order function, so that all binding occurrences of lambdas in the unsugared code are associated with lambdas, is a good thing, and offers a natural way of desugaring the above, one case at a time.
What about f x = [1] f - = sort.nub ? You could also do things like f - x = (foo x).bar with it. No more rewriting of pointfree code because of added arguments... -- (c) this sig last receiving data processing entity. Inspect headers for past copyright information. All rights reserved. Unauthorised copying, hiring, renting, public performance and/or broadcasting of this signature prohibited.