PolyTypeable является аналогом Typeable для полиморфных типов. Но это работает довольно непредсказуемо:
ghci> :t show
show :: Show a => a -> String
ghci> polyTypeOf show
a1 -> [Char]
ghci> :t fromEnum
fromEnum :: Enum a => a -> Int
ghci> polyTypeOf fromEnum
:1:12:
Ambiguous type variable `a0' in the constraint:
(Enum a0) arising from a use of `fromEnum'
Probable fix: add a type signature that fixes these type variable(s)
In the first argument of `polyTypeOf', namely `fromEnum'
In the expression: polyTypeOf fromEnum
In an equation for `it': it = polyTypeOf fromEnum
Исходный код библиотеки довольно сложно понять, не могли бы вы объяснить, почему polyTypeOf
принимает один набор аргументов и не может принимать другие, даже очень похожие?