2014-07-09 83 views
16

比方說,我有兩個types是否可以比較兩種類型,如果一種可以從另一種類型中指定的話?

t1 <- [t| (Functor f) => (a -> b) -> f a -> f b |] 
t2 <- [t| (Int -> Char) -> [Int] -> [Char] |] 

是否有可能在模板哈斯克爾確定的t1的表達也可以是t2? (如果沒有實現類型的統一嘍。)

+0

如果可能的話,你不得不使用新的鍵入的模板haskell的東西,但我不知道任何關於這一點。您可以通過生成一些死代碼來進行編譯時斷言:'a =(undefined ::(Functor f)=>(a - > b) - > f a - > f b); b ::(Int - > Char) - > [Int] - > [Char]; b = a' – jberryman

回答

-4

是的,你可以強制轉換所有其他變量來使用

1

由於jberryman在評論中說,最抽象類,你可以生成代碼,將迫使typechecker統一這兩種類型。但是,您無法鎖定類型檢查器來實際檢查您自己並分析結果。在TH擴展階段,您根本無法正確訪問完整的類型檢測器環境。

相關問題