这也许无助于家务劳动,但你实际上写了这样的声明。 您只得允许<代码>-XFlexibleInstances/code>这样做。 至少在德国赫尔辛基委员会,你可以这样做,在你档案的顶端放置一个 p:
{-# LANGUAGE FlexibleInstances #-}
如果你仔细研究你所传递的错误信息,它就说“如果你想要消除这些错误,那么我们会这样做”。
在这种特定情况下,您还需要使<代码>> 无法计量的Instances和OverlappingInstances
:
{-# LANGUAGE FlexibleInstances, UndecidableInstances, OverlappingInstances #-}
由于标准,需要<条码>。 Haskell不允许以任何形式出现这种类型变数在头上不止一次的情况。 这是完全细致的——一是使用的最普通推广方法之一(按,问题)。
您需要<条码>,因为您的申述可能会导致打字员永远停机。 我认为,使用<条码>可恶的Instances来防止这种情况,限制它在试图减少这种情况时将如何深入检查。 这通常是——包括在这种个案中,但理论上可以确定某一方案是否经过了类型的检查执行取决于<>。 然而,它应当就你的情况开展工作。
As hammar pointed out, you need to enable OverlappingInstances
because the "context" of the instance is ignored when checking whether they overlap. The context is the Num a
bit in this case. So the instances--for checking if it overlaps--is read as instance Truthy a...
and overlaps with everything. With OverlappingInstances
enabled, you just need to have one instance that is the most specific for this to work.