班级TypeCast
的历史可以追溯到2004年,因此它已经相当老了。哈斯克尔(即使仍然相当辉煌)。我的问题是:如果今天在最先进的GHC中重新实施[最好是7.6,但是继续使用HEAD,如果能让事情变得更好],它会是什么样子?
如果我理解了一些最新的扩展,很可能正确答案是:它甚至不再需要,只需使用X.知道X的值会很好;)
答案 0 :(得分:3)
我不熟悉TypeCast
的所有用法,但在我最近所做的事情中,你可以用{~
来替换它,它可以从{{TypeFamilies
获得。 1}}扩展名。我第一次看到Oleg的东西here:
class TypeEq x y b | x y -> b
instance TypeEq x x HTrue
instance b ~ HFalse => TypeEq x y b
Oleg解释了这个伏都教如何比我更好地工作:
如果类型检查器可以看到两种类型t1和t2是相同的 可以选择第一个TypeEq实例,约束TypeEq t1 t2 b简化为b~HTrue。否则是TypeEq的第三个参数 与HFalse统一。单词
otherwise' betrays the complementation,
是默认情况',它是核心的 重叠的实例。我们看到了有用性的第一个暗示 重叠实例及其与类型等式的关系。
以下代码段中的"advanced overlap" wiki page也提到了这一点:
-- instance TypeCast flag HFalse => ShowPred a flag -- before -XTypeFamilies
instance (flag ~ HFalse) => ShowPred a flag