[Haskell-cafe] Re: All equations must have the same arity - why?

Jonathan Cast jonathanccast at fastmail.fm
Sun Jan 13 20:36:13 EST 2008


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

> "Neil Mitchell" <ndmitchell at gmail.com> 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



More information about the Haskell-Cafe mailing list