初心者の質問で申し訳ありませんが、これに関する有用な情報を見つけるのに苦労しました。私は「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 関数を作成する必要がなかったのと同じように、型クラスを派生させ、追加の作業なしで機能するコードを取得できる頻度はどれくらいでしょうか?
どうもありがとう、
ジョン