Haskell にて、無名関数(anonymous function)を表示する方法はありませんでしょうか
例えば、以下のような式をエラーを出さずに出力したいと思います。
\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: 用語の間違いがあればぜひご指摘ください。