[Haskell-cafe] Haskell's

Peter Verswyvelen bf3 at telenet.be
Tue Jul 3 06:53:33 EDT 2007


Ah, thanks for the correction. So if I understand it correctly, this is currying:

when

f :: (a,b) -> c

then

g :: a -> (b,c)

is the curried form of f? So currying has to do with tuples? 

And partial application is just leaving away some tail arguments?






>----- Oorspronkelijk bericht -----
>Van: Jules Bean [mailto:jules at jellybean.co.uk]
>Verzonden: dinsdag, juli 3, 2007 12:19 PM
>Aan: 'peterv'
>CC: Haskell-Cafe at haskell.org
>Onderwerp: Re: [Haskell-cafe] Haskell's "partial application" (not currying!) versus Business Objects Gem	Cutter's "burning"
>
>peterv wrote:
>> In Haskell, currying can only be done on the last (rightmost) function 
>> arguments.
>
>
>You are talking about partial application, not currying.
>
>> foo x y
>> 
>> can be curried as
>> 
>> foo x
>> 
>> but not as
>> 
>> foo ? y
>> 
>> where ? would be a “wilcard” for the x parameter.
>
>(\x -> foo x y)
>
>[snip]
>
>> This burning looks more general to me, but cannot be done using the 
>> textual approach?
>
>Well, it can be done, but basically there are two issues:
>
>1. You need to demarquate the 'scope' of the ?. What 'lump' of 
>expression is the partially evaluated part. An obvious way to do this is 
>with parentheses, but you have to be careful.
>
>2. If you have more than one ?, you need to remember which is which. 
>Think of nested expressions, nested ?s. What if you want to use the 
>'same' ? more than once?
>
>The solution that haskell chooses to (2) is to 'label' the ?s with 
>names. The solution to (1) is to mark the scope with a \, and the list 
>of names bound:
>
>\x z ->  foo (foo x y) z
>
>Jules
>
>
>
>




More information about the Haskell-Cafe mailing list