Data.Typeableを使用するすべての関数の固定ストリングを超える部分的な解決策があります。 GHCiの
残念ながら
> let test :: Int->Int; test x = x + x
> test
Int -> Int
で
{-# LANGUAGE ScopedTypeVariables #-}
import Data.Typeable
instance (Typeable a, Typeable b) => Show (a->b) where
show _ = show $ typeOf (undefined :: a -> b)
型シグネチャなしのタイプがデフォルトとそれに行きます。 a -> b -> c
はあなたにもa -> d
d = b -> c
として書くかもしれないa -> (b -> c)
と同じであるため、
> let test x = x + x
> test
Integer -> Integer
このソリューションは、複数の関数アリティに取り組んでいます。
> let m10 a b c d e f g h i j = a * b * c * d * e * f * g * h* i * j
> m10
Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> Integer
-> Integer -> Integer -> Integer -> Integer
map (+1)
がmap
はしません動作しますが、関数のパラメータはのでしかしtypeableクラスを持っている場合、それが不明な場合、この方法は、しかし、動作しません。
> map (+1)
[Integer] -> [Integer]
> map
<interactive>:233:1:
...
より多くの機能をもう少し一般的なカバーであることをリファクタリングすることができようにData.Data
と実験や2の内部をちらっと見た後に思えます。
その関数で生成される文字列は、どのようなものでしょうか? –