2014-07-09 60 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扩展阶段,您根本无法正确访问完整的类型检测器环境。

相关问题