4

该课程TypeCast可以追溯到 2004 年,因此是相当“老”的 Haskell(即使仍然非常出色)。我的问题是:如果今天在最先进的 GHC 中重新实现 [最好是 7.6,但继续,如果这会使事情变得更好,请使用 HEAD],它会是什么样子?

如果我了解一些最近的扩展,那么正确的答案很可能是:甚至不再需要它,只需使用 X。知道 X 的值会很好;)

4

1 回答 1

3

我不熟悉 的所有用法TypeCast,但是在我最近所做的事情中,您可以将其替换为从扩展~中获得的类型相等断言 ( ) 。TypeFamilies我第一次在 Oleg 的文章中看到了这一点

 class  TypeEq x y b | x y -> b
 instance               TypeEq x x HTrue
 instance b ~ HFalse => TypeEq x y b

奥列格解释了这个巫术如何比我更好地工作:

如果类型检查器可以看到两个类型 t1 和 t2 相同,从而可以选择第一个 TypeEq 实例,则约束 TypeEq t1 t2 b 简化为 b ~ HTrue。否则 TypeEq 的第三个参数与 HFalse 统一。“默认情况”一词otherwise' betrays the complementation,,是重叠实例的核心。我们首先看到了重叠实例的有用性以及它们与类型相等性的关系。

以下片段中的“高级重叠”维基页面也提到了这一点:

-- instance TypeCast flag HFalse => ShowPred a flag -- before -XTypeFamilies
instance (flag ~ HFalse) => ShowPred a flag
于 2013-10-29T16:05:55.397 回答