[Haskell-cafe] Partial Application
Philippe de Rochambeau
phiroc at free.fr
Thu Jan 18 16:15:07 EST 2007
my original query concerning partial application was triggered by the
following statement from Thomson's "The Craft of Functional
Programming", p. 185:
multiplyUC :: (Int, Int) -> Int
multiplyUC (x,y) = x * y
multiply :: Int -> Int -> Int
multiply x y = x * y
In the case of multiplications we can write expression like multiply 2".
When I read this, I thought that you could partially apply "multiply"
by typing "multiply 2" at the ghci prompt. However, this generated an
No instance for (Show (Int -> Int))
arising from use of `print' at <interactive>:1:0-9
Possible fix: add an instance declaration for (Show (Int -> Int))
In the expression: print it
In a 'do' expression: print it
After reading http://www.haskell.org/hawiki/PartialApplication, I
figured out that you can only partially apply declared functions, in
source files, not at the prompt:
multiplyBy2 = multiply 2
Now "multiplyBy2 50" yields "100"
On page 22 of "Programming in Haskell", Howard says that you can do
the following partial application of the curried function add': add'
1 :: Int -> Int, where add and add' are declared as
add :: (Int,Int) -> Int
add (x,y) = x + y
add' :: Int -> (Int -> Int)
add' x y = x + y
However, typing "add' 1" at the prompt generates an error. If I add
the following to my source file
addOne = add' 1
typing addOne 5" at the prompt yields "6", which is the right answer.
More information about the Haskell-Cafe