polyTypeOf загадочен

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

6
задан Michael J. Barber 30 October 2011 в 21:39
поделиться