On 13 Jan 2008, at 5:27 PM, Achim Schneider wrote:

"Neil Mitchell" <[EMAIL PROTECTED]> 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? 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.

jcc

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to