我試圖使用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