Partial function implementation


#1

In book ‘Functional Programming In Scala’, following function is to be implemented :

def partial1[A,B,C](a: A, f: (A,B) => C): B => C

My implementation is as follows

def partial1[A,B,C](a: A, f: (A,B) => C): B => C = {
val g = (b: B) => f(a, b)
g
}

Book states that the function is called partial as it is being applied to some but not all of its required
arguments.

I am not able to relate this statement to the implementation above.
Is implementation wrong?


#2

Your implementation is right (though though some unnecessary ceremony: for any

val foo = x
foo

you can just write x, so you can replace

val g = (b: B) => f(a, b)
g

with (b: B) => f(a, b)
)

Also note that usually a “partially applied” function is something other than a partial function.

partial1 partially applies the function: given a function f: (A, B) => C, the method partial1 uses argument a to partially apply f, so that you now get a function that still needs to be applied to some B (but no longer to some A)


#3

So basically a call to partial1 gives a function which has been restricted to a particular value of A, hence the name.