我正在編寫一個類Separate
,它在不同結構的「部分」上獨立執行某些操作;例如一個複數的真實和複雜的部分(後來我還需要它的列表)。通過這種方式,我可以編寫不關心他們正在執行的這些結構中的哪一個的函數,但會以這種獨立的方式執行。複雜對偶實例
這些功能應該在沒有零件的結構上正常工作,例如, Double
。 (我知道有一個標準偏差定義爲複數,它給出了一個實數,但「獨立」一個在我的情況下更有意義)。
但我遇到了一些實例聲明的問題。在操作中尤其應該是「乘用Double
」,又名scale
:
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
當然這並不編譯,因爲*
是不是一個Double
和一般Floating a
之間定義。但我不能直接定義instance Separate (Complex Double) where...
。
我可以只寫一個函數Double -> Complex Double -> Complex Double
沒有類,但標準偏差必須分別爲不同的結構定義。
任何想法?
只需使用FlexibleInstances。 –