例えば、以下のような式をエラーを出さずに出力したいと思います。

  • \x -> x ^ 4
  • (^4)
  • map (^4)

ghci(対話環境) で試していたところ show (\x -> x ^ 4) では、 以下のようなエラーがでてしまいます。

Prelude> show (\x -> x ^ 4)

<interactive>:6:1:
    No instance for (Show (a0 -> a0)) arising from a use of ‘show’
    In the expression: show (\ x -> x ^ 4)
    In an equation for ‘it’: it = show (\ x -> x ^ 4)

<interactive>:6:15:
    No instance for (Num a0) arising from a use of ‘^’
    The type variable ‘a0’ is ambiguous
    Relevant bindings include x :: a0 (bound at <interactive>:6:8)
    Note: there are several potential instances:
      instance Num Double -- Defined in ‘GHC.Float’
      instance Num Float -- Defined in ‘GHC.Float’
      instance Integral a => Num (GHC.Real.Ratio a)
        -- Defined in ‘GHC.Real’
      ...plus three others
    In the expression: x ^ 4
    In the first argument of ‘show’, namely ‘(\ x -> x ^ 4)’
    In the expression: show (\ x -> x ^ 4)

追記: 2014-12-16

コメントで頂いたように、 :type を利用すると ghci では型が表示でき、良好な結果が得られます。

Prelude> :type (\x -> x ^ 4)
(\x -> x ^ 4) :: Num a => a -> a

Prelude> :type (^4)
(^4) :: Num a => a -> a

Prelude> :type map (^4)
map (^4) :: Num b => [b] -> [b]

一方、対話環境以外でも同様の結果を得たくなります。例えば以下のようなコードです。しかし、エラーとなってしまうわけです。

main = do
    print $ (\x -> x ^ 4)
    print $ (^4)
    print $ map (^4) [1..4]

環境

  • GHC version 7.8.3
  • Windows 8.1

Note: 用語の間違いがあればぜひご指摘ください。