(変なタイトルで申し訳ありませんが、これ以上のタイトルが思いつきませんでした。)
個人的な Haskell プロジェクトでは、「絶対値」(周波数など) と相対値 (2 つの周波数の比率など) の概念が必要です。私のコンテキストでは、2 つの絶対値を加算することは意味がありません。1 つは相対値を加算して新しい相対値を生成し、絶対値に相対値を加算して新しい絶対値を生成することができます (減算についても同様です)。
これらの型クラスを定義しました: 以下を参照してください。ただし、演算子##+
と#+
は同様の構造を持っていることに注意してください (および も同様です##-
) #-
。したがって、これらの演算子をマージして、相対値を加算する単一の加算演算子 (および同様に、相対値になる単一の減算演算子) を使用することをお勧めします。 更新:明確にするために、私の目標は my ##+
and#+
を単一の演算子に統合することです。私の目標は、これを既存の ( )演算子と統合することではありません。Num
+
ただし、型クラスでこれを行う方法がわかりません。
質問:これを行うことはできますか。それとも挑戦しなくていいの?
以下は私が現在持っているものです:
{-# LANGUAGE MultiParamTypeClasses #-}
class Abs a where
nullPoint :: a
class Rel r where
zero :: r
(##+) :: r -> r -> r
neg :: r -> r
(##-) :: Rel r => r -> r -> r
r ##- s = r ##+ neg s
class (Abs a, Rel r) => AbsRel a r where
(#+) :: a -> r -> a
(#-) :: a -> a -> r