Jonathan Cast <[EMAIL PROTECTED]> wrote:

> 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? 
> 
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. 

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

Reply via email to