Hi,

On 25/04/11 14:21, Stephen Tetley wrote:
On 25 April 2011 14:11, Angel de Vicente<ang...@iac.es>  wrote:

curry :: ((a,b) ->  c) ->  (a ->  b ->  c)
curry g x y = g (x,y)

Is expressing curry this way more illuminating?

curry :: ((a,b) ->  c) ->  (a ->  b ->  c)
curry g = \x y ->  g (x,y)

That is, curry is a function taking one argument that produces a
result function taking two arguments.

In Haskell - the type signature:

curry :: ((a,b) ->  c) ->  (a ->  b ->  c)

... can mean either form.

Though this is a "quirk" of Haskell, in the language Clean, for
example, the parens in the type signature "mean what they" say so only
only my second definition is allowed, the first version won't compile.

This was my first encounter with this syntax, but it was a bit confusing.
curry :: ((a,b) -> c) -> a -> b -> c

is much clearer to me, and once partial application is understood it is no problem to see what curry f or curry f x y mean. But to me (at this point in my Haskell trip) it would make more sense that once you put the parentheses as in the original definition, no partial application is allowed and so the lambda notation is required.

Thanks a lot,
Ángel de Vicente
--
http://www.iac.es/galeria/angelv/

High Performance Computing Support PostDoc
Instituto de Astrofísica de Canarias
---------------------------------------------------------------------------------------------
ADVERTENCIA: Sobre la privacidad y cumplimiento de la Ley de Protección de 
Datos, acceda a http://www.iac.es/disclaimer.php
WARNING: For more information on privacy and fulfilment of the Law concerning 
the Protection of Data, consult http://www.iac.es/disclaimer.php?lang=en


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

Reply via email to