Ben*_*ach 6 haskell types operator-overloading fractions
我正在为Haskell中的Fraction数据类型创建一堆实例,我想知道是否有一个地方可以实现^运算符.
我的意思是,我有不同的几个实例Num类型和这些实例中,我定义了常见的操作,如+,-等.
有了它,数据类型就像我想要的那样表现为正常数字(意思是我可以调用类似的东西(Frac 1 2) + (Frac 1 4)并返回Frac 3 4)
我想要做的是^直接实施.现在,我已经将它定义为:
(|^|) :: Fraction -> Int -> Fraction
(|^|) f = foldr (*) mempty . flip replicate f
Run Code Online (Sandbox Code Playgroud)
当我尝试将函数的名称更改^为时,我收到错误,因为它与Prelude的定义冲突^.是否有一种Num类型我可以给我的Fraction类型一个实例允许我^在其上使用运算符?
谢谢!
sep*_*p2k 12
Prelude.^不是任何类型类的一部分,因此您可以定义自己的^函数的唯一方法是隐藏一个类Prelude.
请注意,由于Prelude.^is 的签名,只要它是一个实例(Num a, Integral b) => a -> b -> a,你就可以在你的Frac类型的值上使用它Num.你不会提供自己的实现.