对于使用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