我正在编写一个类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。 –