對於使用Data.Typeable的所有函數,有一個部分解決方案不僅僅是一個固定字符串。
{-# LANGUAGE ScopedTypeVariables #-}
import Data.Typeable
instance (Typeable a, Typeable b) => Show (a->b) where
show _ = show $ typeOf (undefined :: a -> b)
在ghci中
> let test :: Int->Int; test x = x + x
> test
Int -> Int
遺憾的是沒有一個類型簽名的類型會去它違約。
> let test x = x + x
> test
Integer -> Integer
該解決方案適用於多種功能arities因爲a -> b -> c
相同a -> (b -> c)
,你還不如寫爲a -> d
其中d = b -> c
。
> 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
不會。
> map (+1)
[Integer] -> [Integer]
> map
<interactive>:233:1:
...
在Data.Data
的內部和實驗兩一眼後,它似乎是它可以進行重構是一個小更廣義的覆蓋更多的功能。
您希望爲該功能生成什麼'String'? Jynx! – 2013-04-06 15:43:04