Я пытаюсь использовать Data.Typeable
для проверки типов компонентов типа функции. Сначала typeRepArgs
выглядит идеально, но я не могу заставить его работать:
Prelude Data.Typeable> typeRepArgs (typeOf2 (id :: Integer -> Integer))
[]
Prelude Data.Typeable> length $ typeRepArgs (typeOf2 (id :: Integer -> Integer))
0
Я в корне не понимаю, как это должно работать? Очевидно, конструктор (->)
применяется к двум аргументам, так почему я не могу их увидеть? Если я попытаюсь подтолкнуть тип функции способом dynApply
из Data.Dynamic
, я получу такой же удивительный результат:
Prelude Data.Typeable> funResultTy (typeOf2 (id :: Integer -> Integer)) (typeOf (0 :: Integer))
Nothing
Я действительно очень озадачен.
Если это поможет, я использую GHC 7.0.4.