假设我正在尝试在Haskell中定义一个新的类型类,除此之外,它必须有一个+操作:
class Foo a where
(+) :: a -> a -> a
Run Code Online (Sandbox Code Playgroud)
(在实践中,类型类Foo会有更多的东西,但让我在这里停下来保持这个最小.)
现在,我想让基本的"整数"类型成为Foo的一个实例; 就+操作而言,我只想保留已经定义的常规添加.我怎么做?
毋庸置疑,以下内容毫无意义:
instance Foo Integer where
(+) x y = x+y
Run Code Online (Sandbox Code Playgroud)
当我要求Haskell计算2 + 3时,它会永远循环,但我想这是预期的!我也试过什么都不做:
instance Foo Integer
Run Code Online (Sandbox Code Playgroud)
这个编译,但是当我要求2 + 3时,我得到"没有实例也没有类操作的默认方法+".再次,它是有道理的......
但那我们怎么做呢?
我想这是关于命名空间的一般性问题,我的意思是,当两个类型使用相同的名称时,会发生什么?在我的例子中,当我尝试使用这样的名称冲突(Num和Foo)创建一个类型(Integer)的两个类型类的实例时,我遇到了问题.
从阅读这个问题开始,我现在害怕我所要求的只是被禁止......
haskell ×1