问题标签 [quantified-constraints]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
83 浏览

haskell - 如何给 GHC 一个构造 QuantifiedConstraints 的提示?

如果我有方法:

那么我如何将其作为上下文传递给:

绑定fooFoo


Dict在这里定义https://hackage.haskell.org/package/constraints-0.10.1/docs/Data-Constraint.html#g:2

0 投票
2 回答
311 浏览

haskell - 量化约束与(封闭)类型族

我正在尝试使用这篇博文的方法来处理更高种类的数据,而不会将普通情况下Identity的函子与量化约束推导一起使用:

这会导致令人发指的自相矛盾的错误消息:

无法Show (HKD f a) 从上下文推断:forall a. Show a => Show (HKD f a)

有没有一种方法可以做到这一点,而不需要冗长而做

?

0 投票
1 回答
116 浏览

haskell - 为什么使用 QuantifiedConstraints 来指定类型类的子类也需要子类的实例?

我正在玩一种多类型的无标签编码Free

我可以为和没有问题编写Semigroup实例:Free SemigroupFree Monoid

这些实例是相同的,并且将用于Semigroup.

我想使用QuantifiedConstraints,所以我可以为所有子类编写一个实例Semigroup

但是编译器(GHC-8.6.3)抱怨它无法推断cls (Free cls u)

当我将它添加为实例的上下文时,它编译得很好:

添加的上下文有点冗长,但因为整个观点Free总是cls (Free cls u)正确的,而不是繁琐的。

我不明白的是为什么GHC 需要能够为实例编译cls (Free cls u)的子类得出结论。我尝试用with替换定义并得到相同的错误,所以我认为问题不在于实现本身,而在于实例的声明;可能是由于我不明白的某些方面。SemigroupSemigroup(<>)undefinedQuantifiedConstraints

0 投票
1 回答
183 浏览

haskell - 使用量化约束导出 Ord (forall a. Ord a => Ord (fa))

有了量化的约束,我可以Eq (A f)很好地推导出来吗?但是,当我尝试导出 Ord (A f) 时,它失败了。当约束类具有超类时,我不明白如何使用量化约束。如何派生Ord (A f)和其他具有超类的类?

PS。我还检查了ghc 提案 0109-quantified-constraints。使用 ghc 8.6.5

0 投票
2 回答
83 浏览

haskell - 让分布式 DSL 实现选择其序列化格式(通过约束族)

我正在编写一个分布式编程 DSL,我希望允许实现选择它们的序列化方法(如果有的话,因为它甚至可能不需要模拟执行)。

尝试通过添加类型族来解决这个问题,导致我拥有的标准函数出现以下问题。我想如果我可以要求它会起作用,并且让类型检查器理解,如果两个值是可序列化的,它们的配对也是可序列化的。但是,将其添加为量化约束似乎不起作用。可以解决这个问题还是有更好的解决方案?

编辑 1

它会检查我是否这样做

必须重复这些类型的约束会很麻烦,所以我尝试了一个类型同义词,但这不起作用:

0 投票
1 回答
54 浏览

haskell - 关联类型族的量化类型相等

Bar在类型类中有一个关联的类型族FooFoo'要求Bar f ~ Bar (f a)所有a,但在另一个函数中test我得到一个错误Couldn't match type 'Bar f' with 'Bar (f a)',即使它取决于Foo' f. 编码:

为什么 GHC 不能弄清楚这种类型的相等性,有没有办法在不断言具体相等的情况下帮助类型检查器test

0 投票
0 回答
102 浏览

haskell - 关联类型族和量化约束之间的交互

为什么是下面的代码:

产生错误:

但以下看似微不足道的修改foo

让编译器高兴?

这两个片段不应该是等价的吗?我所做的只是TheFamily t使用等式约束将别名作为其他一些临时类型变量。

0 投票
3 回答
182 浏览

haskell - 添加约束会导致其他约束超出范围吗?

考虑以下代码,它会进行类型检查:

foo在这里没有做任何有用的事情,但是让我们想象它正在做一些需要Eq (t a a)实例的重要业务。编译器能够接受(Eq2 t, Eq a)约束并详细说明Eq (t a a)字典,因此约束被解除并且一切正常。

现在假设我们想要foo做一些额外的工作,这些工作依赖于以下相当复杂的类的实例:

请注意,在我们的主体中,foo'我们仍然只要求我们在 中所做的foo:一个Eq (t a a)约束。此外,我们没有删除或修改编译器用于详细说明 in 实例的Eq (t a a)约束foo;我们仍然要求(Eq2 t, Eq a)除了新的约束。所以我也希望foo'进行类型检查。

不幸的是,看起来实际发生的是编译器忘记了如何详细说明Eq (t a a). 这是我们在正文中得到的错误foo'

鉴于编译器可以“Eq (t a a)从上下文”很好地“推断” (Eq2 t, Eq a),我不明白为什么更丰富的上下文(Eq2 t, Eq a, SomeClass t)会导致Eq (t a a)不可用。

这是一个错误,还是我只是做错了什么?在这两种情况下,是否有一些解决方法?

0 投票
1 回答
100 浏览

haskell - GHC 9 中量化约束的行为变化

以前,为了对像这样的类型类使用量化约束Ord,您必须在实例中包含超类,如下所示:

(这实际上正是这个问题中给出的解决方案)。

然而,在 GHC 9 中,上述代码不起作用。它失败并出现以下错误:

不幸的是,这个AllowAmbiguousTypes建议不起作用。(你得到相同的错误,然后是类上的每个方法的相同错误)

有谁知道这个的解决方法?

0 投票
3 回答
103 浏览

haskell - 高级类型类的量化约束

假设我想写两个 Typeclass。标题:

第一个类型类 ExClass 是这样定义的:

我将它定义为更高种类的类型类,因为它的一个函数的输出类型取决于其嵌套值的类型a。我也希望有一个默认实现,但它涉及到MonoidexFunc的假设。t a现在我想为以下类型编写一个实例:

ExType a仅当Num a为真时才为 Monoid:

现在我继续为 定义类型类实例ExClass,指定 的约束Num a

上面的代码将毫无问题地编译。但是,如果我尝试像这样使用已实现的功能:

我收到以下投诉:

当我使用不同的实例声明时也会发生这种情况:

有没有办法让这个类型类工作?还是我根本不应该像这样构建我的程序?