我正在为 Haskell 中的 Fraction 数据类型创建一堆实例,我想知道是否有一个地方可以实现 ^
运算符(operator)。
我的意思是,我有几个不同的实例 Num
类型,在这些实例中,我定义了常见的操作,例如 +
, -
, ETC。
有了它,数据类型就像我想要的那样表现出正常的数字(这意味着我可以调用 (Frac 1 2) + (Frac 1 4)
之类的东西并返回 Frac 3 4
)
我要做的是实现 ^
直接地。现在,我已经将它定义为:
(|^|) :: Fraction -> Int -> Fraction
(|^|) f = foldr (*) mempty . flip replicate f
当我尝试将函数名称更改为
^
,我收到一个错误,因为它与 Prelude 对 ^
的定义冲突.有没有Num
输入我可以给我的Fraction
输入一个实例以允许我使用 ^
运营商就可以了?谢谢!
最佳答案
Prelude.^
不是任何类型类的一部分,因此您可以定义自己的^
的唯一方法功能是隐藏 Prelude
.
请注意,由于 Prelude.^
的签名是 (Num a, Integral b) => a -> b -> a
,您将能够在 Frac
的值上使用它只要是 Num
的实例,输入就可以了.您只是不会提供自己的实现。
关于haskell - 如何在 Haskell 中实现 ^ 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11976713/