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
<interactive>: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
принимает определенный набор аргументов и не принимает другие, даже очень похожие?