6

我正在为 Haskell 中的 Fraction 数据类型创建一堆实例,我想知道是否有一个地方可以实现该^运算符。

我的意思是,我有几个不同Num类型的实例,在这些实例中,我定义了常见的操作,例如+,-等。

有了它,数据类型就像我想要的那样表现得像一个普通数字(这意味着我可以调用类似的东西(Frac 1 2) + (Frac 1 4)并返回Frac 3 4

我想做的是^直接实施。现在,我已经将它定义为:

(|^|) :: Fraction -> Int -> Fraction
(|^|) f = foldr (*) mempty . flip replicate f  

当我尝试将函数的名称更改为 时^,我收到一个错误,因为它与 Prelude 的定义冲突^。有没有一种Num类型可以给我的Fraction类型一个实例以允许我^在其上使用运算符?

谢谢!

4

1 回答 1

12

Prelude.^不是任何类型类的一部分,因此您可以定义自己的^函数的唯一方法是将其隐藏在Prelude.

请注意,由于Prelude.^is的签名(Num a, Integral b) => a -> b -> a,您可以在您的Frac类型的值上使用它,只要它是Num. 您只是不会提供自己的实现。

于 2012-08-15T20:33:58.933 回答