问题标签 [overlapping-instances]

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 回答
701 浏览

haskell - Haskell 重叠实例和类型函数

我有以下类型类,它模拟了类似 SQL 的查询优化:

问题是我在优化类型函数上收到错误“冲突族实例声明”。为什么会这样,我该如何解决?拥有一个“后备实例”真的很好,而不是必须用尽所有案例(可能很多)......

0 投票
1 回答
399 浏览

haskell - 帮助解释重叠实例错误消息

我被这个重叠的实例错误消息难住了。抱歉,这是一个不平凡的项目,但错误应该是类型签名的本地错误。

首先,我声明f是某种类型,

然后,我尝试pshow :: PrettyShow a => a -> String在它上面调用我的函数。我收到此错误消息。

问题是那CompNode Int不是图表,所以我认为第一个匹配实例不应该触发。(第二个是我想要执行的。)事实上,如果我写一个函数,它的参数是一个图,

然后在f上调用它,我得到预期的 no instance 错误消息,

在此先感谢,抱歉众包。我正在使用 GHC 7.0.4。

0 投票
1 回答
296 浏览

haskell - 是否有任何语言扩展或 Haskell 的语言后代,有利于表现力,特别是在实例处理方面?

有时,我遇到了 Haskell 仅匹配实例头的“功能”,即,

现在将匹配任何类型,即C在您的程序中编写另一个实例声明将是一个错误,即使它不可能由于上下文而发生冲突a ~ NewDataTyp b。有时,需要付出很大的努力才能克服;我不得不重组数百行代码以避免这种限制。

是否有任何语言扩展或后代语言(Curry?Agda?)被设计为具有更高的表达性优先级?这可能会牺牲(a)类型类世界的开放性(b)多项式时间类型检查。

编辑——对于那些对这个问题感兴趣的人,这个页面可能也很有趣:http ://www.haskell.org/haskellwiki/Future_of_Haskell

0 投票
4 回答
1663 浏览

python - 如何在类之间共享共同的上下文?

当前场景:

我有一组类,它们都context在构造函数中使用一个公共参数,并且所有类都继承自一个公共基础。

主要用途:

问题:

  • 是否有一种巧妙的方法可以context隐式地提供给所有类?
  • 我们有一个共同的基类,但我没有看到一种明显的方法来让它为所有类设置上下文。
  • 可以假设我想保持所有类实例通用的上下文。
  • 只是一个随机的想法 - 元类可以以某种方式提供帮助吗?

我知道这看起来很傻,但我只是想以某种方式摆脱冗余,以便我可以以某种方式设置全局上下文并专注于我的对象。

请建议一些方法?

**更新问题**

我无法在基类中设置上下文,因为这是在 Web 应用程序中使用的。因此,许多具有不同上下文的页面将使用类结构。所以,如果我在 base 中设置了一个上下文,那么它将与另一个使用相同 base 的网页实例设置的上下文冲突。因为,在 Web 应用程序中,所有上述类都将在所有页面的内存中。

0 投票
1 回答
325 浏览

haskell - 使用 Numeric Prelude 中的加法类会导致实例重叠

在尝试使用 Numeric prelude 定义一些数学对象时,我遇到了一个问题。Additive 类型类定义了一个实例

我读到“如果 v 是加法,[v] 也是”(显然我在这里错了)。它的实现类似于

所以 [1,2,3] + [4,5,6] = [5,7,9] 这对我想做的事情毫无用处。我以为我不会有问题,因为我的 v 类型不是 Additive。不幸的是,我仍然遇到了一个重叠的实例错误,我发现这非常令人困惑。我做了一些阅读,现在我明白了,出于某种原因,Haskell 忽略了“=>”位之前的所有内容,所以我应该将默认实例阅读为“任何列表在默认实例的意义上都可能是附加的”。尽管这个扩展有“危险”的名声,但我尝试过使用 OverlappingInstances,但即使这样似乎也无济于事。

这是我的测试用例。

产生错误(更新:这似乎只发生在旧版本的 GHC 中。版本 7.2.2 似乎接受它):

这是否意味着我不能使用列表,因为我不想默认 Additive 实例?我真正想做的是告诉 ghc 忘记那个默认实例,这可能吗?如果没有,除了删除列表之外,我不确定从这里去哪里。

0 投票
2 回答
309 浏览

haskell - Monad 的 Num 实例;仅在存在看似无关的代码的情况下重叠实例?

Monad如果我可以将s 视为Nums(当然,在适用的情况下),我有一些代码会写得更干净。很容易做到:

但是当我将以下函数添加到文件中时......

…我收到以下错误:

这对我来说没有意义,因为 (1)digitToNum从未被调用, (2)Ratio不是Monad. 所以我不确定这是如何或为什么会出现问题。任何有关此的提示将不胜感激。

这是 GHC 7.4.2,使用 Haskell 平台 2012.4.0.0。

0 投票
2 回答
229 浏览

haskell - 非法实例声明/重叠实例

给定类 X 和 Y,创建彼此类的实例最惯用的方法是什么?例如 -

我想避免扩展。另外,我知道这可能会导致一些讨厌的无限递归,所以我愿意采用完全不同的方法来完成同样的事情并保持相对干燥。下面给出了一些关于我遇到的确切问题的背景 -

我想这样做——

但看来我必须这样做——

编辑

似乎我最喜欢的方法是保留类型类HasPoints并改为实现。CardPlayerdata

0 投票
2 回答
174 浏览

haskell - 重叠实例的肮脏黑客攻击?

模块 A 导入模块 B 和 C

模块 B 导入实例 X

模块 C 导入实例 Y

X 和 Y 是公共类型类的实例。

实例 X 和 Y 的类型相同,即完全重叠。

当我分别使用 B 或 C 时,一切正常。当我导入它们(在 A 中)进行一些比较测试(或基准测试)时,我在 C 中得到一个重叠实例错误,说 X 和 Y 都匹配。

这让我感到困惑,因为从 C 到 X 的唯一路径是:C -> A -> B. 这是应该的吗?另外,有没有办法解决这个问题?我可以接受肮脏的黑客攻击,因为这两个实例在正常情况下从不一起使用。特别是,我不想介绍幻像类型等。

0 投票
1 回答
307 浏览

haskell - 解决外部库中的重叠实例

我正在尝试在一个也从加速库导入的模块中show输入某种类型的东西Tagged s bData.Tagged )。不幸的是,加速库定义了显示实例

在 Data.Array.Accelerate.Pretty.hs 中。阅读了一下,我无法避免导入这个实例,它显然与 Data.TaggedShow实例重叠。事实上,通用加速实例阻止我打印任何类型的东西*->*->*

这是一个演示问题的简单示例:

错误:

我有几个问题:

  1. 我以为OverlappingInstances可以让我解决实例,但我得到了同样的错误。
  2. IncoherentInstances绝对应该让我编译...对吗?但事实并非如此。
  3. 为什么 GHC 将 Data.Tagged 显示实例报告为Show (Tagged k s b) 实例(从 Data.Tagged 复制)为:

    /li>

我相信我以前见过我只能通过添加显式类型签名来解决重叠实例(以强制 GHC 选择最具体的实例),但由于我的示例处于顶层并且不涉及多态性,所以我没有不知道我对这些类型能说得清楚多少。

我的印象是 GHC 应该能够选择 Data.Tagged 实例,因为(我认为)Tagged不是实例,Accelerate.Base.Kit因此不符合实例约束(我知道我们只匹配实例的 RHS,但 GHC 应该能够找出其中一个实例不可能适用...)

编辑

我在这里创建了一个错误报告,现在在 repo 头中删除了有问题的实例。下面的#3 有一个很好的答案,但我仍然想知道为什么OverlappingInstances/IncoherentInstances不起作用。

0 投票
1 回答
144 浏览

haskell - 使用 PolyKinds 和 OverlappingInstances,为 (t :: k) 编写一个完全应用于 k 参数的实例

似乎这是不可能的,但这是我工作的一个例子:

我们inPolyKinds上面的 and 我们的实例可以是 arity ,或者and 代码可以正常工作,但是支持更高arity 的 s 需要添加任意数量的额外实例。有没有办法将这两个实例组合成一个实例,这意味着“完全应用于任何参数”?tProxy t* -> ** -> * -> *ttk