提前为初学者问题道歉,但我一直在努力寻找有用的信息。我正在研究“Learn You Haskell for Great Good”,并试图理解派生关键字,这似乎是 Java 的实现,但由于类别理论或其他原因,它应该具有很酷的自动代码生成。我为 2 向量声明了一个数据结构,例如
data R2 = R2 {x :: Double, y :: Double} deriving (Show)
然后我可以用它来做类似的事情
show (R2 1.0 2.0)
现在我想做的是向量加法和标量乘法,比如
(2.0 * (R2 1.0 2.0)) + (R2 3.0 4.0)
但是当我尝试
Prelude> data R2 = R2 { x :: Double, y :: Double} deriving (Num,Show)
<interactive>:3:52:
Can't make a derived instance of `Num R2':
`Num' is not a derivable class
In the data declaration for `R2'
所以编译器想出了如何显示原始类型的笛卡尔积,但是加法太难了?也许 Num 不是派生的正确类型类?多久可以期望派生一个类型类并在没有额外工作的情况下获得工作代码,例如我如何不必编写自己的 show 函数?
非常感谢,
约翰