我正在为Haskell中的Fraction数据类型创建一堆实例,我想知道是否有一个地方可以实现^
运算符。
我的意思是,我有多个Num
类型的实例,在这些情况下,我定义了常见的操作,例如+
,-
等。
这样,数据类型就像我想要的那样表现为正常数字(意思是我可以调用(Frac 1 2) + (Frac 1 4)
之类的内容并返回Frac 3 4
)
我要做的是直接实施^
。现在,我已经将它定义为:
(|^|) :: Fraction -> Int -> Fraction
(|^|) f = foldr (*) mempty . flip replicate f
当我尝试将函数名称更改为^
时,我收到错误,因为它与Prelude的^
定义冲突。是否有Num
类型我可以为Fraction
类型提供一个允许我在其上使用^
运算符的实例?
谢谢!
答案 0 :(得分:12)
Prelude.^
不属于任何类型类,因此您定义自己的^
函数的唯一方法是隐藏Prelude
中的一个。
请注意,由于Prelude.^
的签名为(Num a, Integral b) => a -> b -> a
,因此您可以在Frac
类型的值上使用它,只要它是{Num
的实例1}}。你不会提供自己的实现。