私はクラスSeparate
を書いています。これは、異なる構造の「パーツ」に対して独立した演算を実行します。例えば複素数の実数部と複素数部(後でリストにも必要です)。このようにして、これらの構造のうちのどれが機能しているのかを気にせず、この独立した方法でそれを実行する関数を書くことができます。複合複式のインスタンス
機能は、部品のない構造で正常に機能するはずです。 Double
。
これは、標準偏差(私は実数を与えるが、「独立」1は、私の場合には、より理にかなって複素数のために定義された標準偏差が存在しているはず)を計算するために、他のものの間で使用されます。
しかし、私はいくつかのインスタンス宣言に問題があります。特に、業務の一つが「Double
に掛ける」しなければならない、またの名scale
:*
がDouble
と一般Floating a
間で定義されていないため
class Separate a where
scale :: Double -> a -> a
instance Separate Double where
scale = (*)
instance (Floating a) => Separate (Complex a) where
d `scale` z = (*d) <$> z
もちろんこれはコンパイルされません。しかし、私は直接instance Separate (Complex Double) where...
を定義することはできません。
クラスを持たない関数Double -> Complex Double -> Complex Double
を書くことができますが、異なる構造に対して標準偏差を別々に定義する必要があります。
アイデア?
ちょうどFlexibleInstancesを使用しています。 –