Philippe de Rochambeau wrote: > 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.
(This has already been said but to re-iterate:) You can (partially apply "multiply") but not by typing "multiply 2" at the ghci prompt. The latter is interpreted by ghci as a command to evaluate and then /print/ the resulting value, which means it must convert it to a textual representation, using the Show class, which is normally not instantiated for function values. > However, this generated an > error: > > <interactive>:1:0: > 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 Just import (:load) the module Text.Show.Functions which defines a Show instance for functions. Prelude> :m Text.Show.Functions Prelude Text.Show.Functions> let multiply x y = x * y Prelude Text.Show.Functions> multiply 2 <function> Or, use let to bind the result to a variable, like Prelude> let multiply x y = x * y Prelude> let f = multiply 2 Prelude> f 3 6 Cheers Ben _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe