据我所知,Data.Constraint.Forall背后的想法是在实施中使用强制,但使用类型系统确保安全。关于后者,我有两个问题。
答案 0 :(得分:11)
通过使用约束参数化的约束,可以通过MPTC和函数依赖来识别Skolem当它是单个变量时。我曾经这样做的技巧在有两个时不起作用。
从本模块外部编写的代码的角度来看,变量是 Skolemized。它们实际上是一种“新鲜”类型的构造函数。
但鉴于您不能在模块之外明确引用这些类型,因为它们不会被导出,因此任何涵盖这些Skolems的实例都必须进行普遍量化。
这就是我从存在主义升级到普遍主义的方式。 “标志翻转”来自他们未被发现的性质,而不是技术上来自他们作为Skolems的角色。