问题标签 [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.
haskell - Haskell 重叠实例和类型函数
我有以下类型类,它模拟了类似 SQL 的查询优化:
问题是我在优化类型函数上收到错误“冲突族实例声明”。为什么会这样,我该如何解决?拥有一个“后备实例”真的很好,而不是必须用尽所有案例(可能很多)......
haskell - 帮助解释重叠实例错误消息
我被这个重叠的实例错误消息难住了。抱歉,这是一个不平凡的项目,但错误应该是类型签名的本地错误。
首先,我声明f是某种类型,
然后,我尝试pshow :: PrettyShow a => a -> String
在它上面调用我的函数。我收到此错误消息。
问题是那CompNode Int
不是图表,所以我认为第一个匹配实例不应该触发。(第二个是我想要执行的。)事实上,如果我写一个函数,它的参数是一个图,
然后在f上调用它,我得到预期的 no instance 错误消息,
在此先感谢,抱歉众包。我正在使用 GHC 7.0.4。
haskell - 是否有任何语言扩展或 Haskell 的语言后代,有利于表现力,特别是在实例处理方面?
有时,我遇到了 Haskell 仅匹配实例头的“功能”,即,
现在将匹配任何类型,即C
在您的程序中编写另一个实例声明将是一个错误,即使它不可能由于上下文而发生冲突a ~ NewDataTyp b
。有时,需要付出很大的努力才能克服;我不得不重组数百行代码以避免这种限制。
是否有任何语言扩展或后代语言(Curry?Agda?)被设计为具有更高的表达性优先级?这可能会牺牲(a)类型类世界的开放性(b)多项式时间类型检查。
编辑——对于那些对这个问题感兴趣的人,这个页面可能也很有趣:http ://www.haskell.org/haskellwiki/Future_of_Haskell
python - 如何在类之间共享共同的上下文?
当前场景:
我有一组类,它们都context
在构造函数中使用一个公共参数,并且所有类都继承自一个公共基础。
主要用途:
问题:
- 是否有一种巧妙的方法可以
context
隐式地提供给所有类? - 我们有一个共同的基类,但我没有看到一种明显的方法来让它为所有类设置上下文。
- 可以假设我想保持所有类实例通用的上下文。
- 只是一个随机的想法 - 元类可以以某种方式提供帮助吗?
我知道这看起来很傻,但我只是想以某种方式摆脱冗余,以便我可以以某种方式设置全局上下文并专注于我的对象。
请建议一些方法?
**更新问题**
我无法在基类中设置上下文,因为这是在 Web 应用程序中使用的。因此,许多具有不同上下文的页面将使用类结构。所以,如果我在 base 中设置了一个上下文,那么它将与另一个使用相同 base 的网页实例设置的上下文冲突。因为,在 Web 应用程序中,所有上述类都将在所有页面的内存中。
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 忘记那个默认实例,这可能吗?如果没有,除了删除列表之外,我不确定从这里去哪里。
haskell - Monad 的 Num 实例;仅在存在看似无关的代码的情况下重叠实例?
Monad
如果我可以将s 视为Num
s(当然,在适用的情况下),我有一些代码会写得更干净。很容易做到:
但是当我将以下函数添加到文件中时......
…我收到以下错误:
这对我来说没有意义,因为 (1)digitToNum
从未被调用, (2)Ratio
不是Monad
. 所以我不确定这是如何或为什么会出现问题。任何有关此的提示将不胜感激。
这是 GHC 7.4.2,使用 Haskell 平台 2012.4.0.0。
haskell - 非法实例声明/重叠实例
给定类 X 和 Y,创建彼此类的实例最惯用的方法是什么?例如 -
我想避免扩展。另外,我知道这可能会导致一些讨厌的无限递归,所以我愿意采用完全不同的方法来完成同样的事情并保持相对干燥。下面给出了一些关于我遇到的确切问题的背景 -
我想这样做——
但看来我必须这样做——
编辑
似乎我最喜欢的方法是保留类型类HasPoints
并改为实现。CardPlayer
data
haskell - 重叠实例的肮脏黑客攻击?
模块 A 导入模块 B 和 C
模块 B 导入实例 X
模块 C 导入实例 Y
X 和 Y 是公共类型类的实例。
实例 X 和 Y 的类型相同,即完全重叠。
当我分别使用 B 或 C 时,一切正常。当我导入它们(在 A 中)进行一些比较测试(或基准测试)时,我在 C 中得到一个重叠实例错误,说 X 和 Y 都匹配。
这让我感到困惑,因为从 C 到 X 的唯一路径是:C -> A -> B
. 这是应该的吗?另外,有没有办法解决这个问题?我可以接受肮脏的黑客攻击,因为这两个实例在正常情况下从不一起使用。特别是,我不想介绍幻像类型等。
haskell - 解决外部库中的重叠实例
我正在尝试在一个也从加速库导入的模块中show
输入某种类型的东西Tagged s b
(Data.Tagged )。不幸的是,加速库定义了显示实例
在 Data.Array.Accelerate.Pretty.hs 中。阅读了一下,我无法避免导入这个实例,它显然与 Data.TaggedShow
实例重叠。事实上,通用加速实例阻止我打印任何类型的东西*->*->*
。
这是一个演示问题的简单示例:
错误:
我有几个问题:
- 我以为
OverlappingInstances
可以让我解决实例,但我得到了同样的错误。 IncoherentInstances
绝对应该让我编译...对吗?但事实并非如此。为什么 GHC 将 Data.Tagged 显示实例报告为
/li>Show (Tagged k s b)
实例(从 Data.Tagged 复制)为:
我相信我以前见过我只能通过添加显式类型签名来解决重叠实例(以强制 GHC 选择最具体的实例),但由于我的示例处于顶层并且不涉及多态性,所以我没有不知道我对这些类型能说得清楚多少。
我的印象是 GHC 应该能够选择 Data.Tagged 实例,因为(我认为)Tagged
不是实例,Accelerate.Base.Kit
因此不符合实例约束(我知道我们只匹配实例的 RHS,但 GHC 应该能够找出其中一个实例不可能适用...)
编辑
我在这里创建了一个错误报告,现在在 repo 头中删除了有问题的实例。下面的#3 有一个很好的答案,但我仍然想知道为什么OverlappingInstances
/IncoherentInstances
不起作用。
haskell - 使用 PolyKinds 和 OverlappingInstances,为 (t :: k) 编写一个完全应用于 k 参数的实例
似乎这是不可能的,但这是我工作的一个例子:
我们inPolyKinds
上面的 and 我们的实例可以是 arity ,或者and 代码可以正常工作,但是支持更高arity 的 s 需要添加任意数量的额外实例。有没有办法将这两个实例组合成一个实例,这意味着“完全应用于任何参数”?t
Proxy t
* -> *
* -> * -> *
t
t
k