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、型の値に対して問題なく使用できることに注意してください。独自の実装を提供していないだけです。FracNum

于 2012-08-15T20:33:58.933 に答える