On Jan 18, 2007, at 16:15 , Philippe de Rochambeau wrote:

When I read this, I thought that you could partially apply "multiply" by typing "multiply 2" at the ghci prompt. 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

Well, yes and no. Partial application at the prompt works fine; displaying the value of a partially applied function doesn't work so well, because un-applied or partially applied functions don't have nice printable representations (the "No instance for (Show (Int -> Int))" error) by default.

You can actually change that to some extent, by loading something like this into ghci:

> import Data.Typeable
>
> instance (Typeable a, Typeable b) => Show (a -> b) where
>     show f = "<" ++ show (typeOf f) ++ ">"

Now your partially applied function should print as <Integer -> Integer> instead of producing an error. (And because Haskell functions are curried and functions are themselves Typeable, this automatically generalizes to functions taking more than one argument.

(This isn't perfect, since polymorphic functions are not Typeable.)

--
brandon s. allbery    [linux,solaris,freebsd,perl]     [EMAIL PROTECTED]
system administrator [openafs,heimdal,too many hats] [EMAIL PROTECTED]
electrical and computer engineering, carnegie mellon university    KF8NH



_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to