我试图使用Data.Typeable
检查函数类型的组件类型。起初,typeRepArgs
看起来很完美,但我似乎无法得到它的工作:分裂类型应用构造函数
Prelude Data.Typeable> typeRepArgs (typeOf2 (id :: Integer -> Integer))
[]
Prelude Data.Typeable> length $ typeRepArgs (typeOf2 (id :: Integer -> Integer))
0
我是从根本上误解,这是如何工作的?显然(->)
构造函数被应用于两个参数,所以为什么我看不到它们?如果我尝试从Data.Dynamic
捅了捅在dynApply
方式的功能类型,我得到一个令人费解的类似结果:
Prelude Data.Typeable> funResultTy (typeOf2 (id :: Integer -> Integer)) (typeOf (0 :: Integer))
Nothing
我真的很为难。
如果有帮助,我使用GHC 7.0.4。
D'oh。这正是我期望'typeOf2'做的。我马上使用它,期待它成为'* - > * - > *'构造函数的正确选择,但忘记了我正在检查的值实际上是'*'种类。 – acfoltzer