【发布时间】:2016-08-09 09:57:21
【问题描述】:
在编写about how to do subtyping in Haskell 时,我突然想到,能够“使用”诸如True ~ False 之类的矛盾证据来告知编译器有关死分支的信息会非常方便。对于另一种标准空类型Void,EmptyCase 扩展允许您以这种方式标记死分支(即包含类型为 Void 的值):
use :: Void -> a
use x = case x of
我想对不满意的Constraints 做类似的事情。
是否有一个术语可以指定为True ~ False => a,但不能指定为a?
【问题讨论】:
-
我不是专家,但我猜只要约束不涉及变量,GHC 就会尝试为其生成字典/证明。如果失败,则会生成类型错误。看看如果例如会发生什么会很有趣。
'c' && True :: Bool ~ Char => Bool,允许约束浮动。也许故障早期方法更有效或产生更好的错误(?) -
您可以在
Dict上EmptyCase。