当我在 Haskell 中输入以下内容时:
{-# LANGUAGE FlexibleInstances, OverlappingInstances, UndecidableInstances #-}
class Class a
instance Class a
instance Eq a => Class a
将其加载到 GHCi 时出现此错误:
Test.hs:5:10:
Duplicate instance declarations:
instance [overlap ok] Class a -- Defined at Test.hs:5:10
instance [overlap ok] Eq a => Class a -- Defined at Test.hs:6:10
Failed, modules loaded: none.
我有点理解为什么它失败了,看到两者都是实例,a
而且都不是更具体的,假设约束被忽略了。但为什么说重叠是可以的?
此外,是否可以添加语言扩展以允许这些类型的重叠工作,这会有用吗?
最后,我打算在当前的 GHC 中以另一种方式实现吗(我打算将一段代码用于实例,Eq
而将另一段代码用于其余实例)?