[Haskell-cafe] Currying: The Rationale

Donald Bruce Stewart dons at cse.unsw.edu.au
Tue May 22 22:40:42 EDT 2007


prstanley:
> 
> >> Hi
> >> What is the rationale behind currying? is it for breaking subroutines 
> >into
> >> pure one-to-one mappings?
> >
> >We don't have 'subroutines' as such, but otherwise yes. Also, it gives us
> >partial application - we don't have to apply all the parameters at once,
> >and we can do interesting and useful things by applying only some to get a
> >new function.
> >
> >> If f x y = f x -> a function which takes y for
> >> argument then does that mean that the second function already has 
> >value x, as
> >> it were, built into it?
> >
> >Yep, though I can't make sense of what your syntax is supposed to mean.
> >I shouldn't take it too literally. It's just to illustrate the point 
> >that f x returns another function with x already in it and y passed 
> >as argument.
> Could you perhaps demonstrate how you can apply parts of curried 
> functions in other functions in Haskell?

(^) applied to 2, produces a new function, we can map over a list:

    Prelude> let sq = (^2)
    Prelude> map sq [1..10]
    [1,4,9,16,25,36,49,64,81,100]

or more explicitly:

    Prelude> let x `to` y = x ^ y
    Prelude> let sq x = x `to` 2
    Prelude> map sq [1..10]
    [1,4,9,16,25,36,49,64,81,100]

-- Don


More information about the Haskell-Cafe mailing list