HAdd
HAdd
(heterogeneous addition)は、+
という二項演算子のための型クラスです。
+
記法が何を意味するかについては制約はありません。
任意の型 α, β, γ : Type
に対して足し算 (· + ·) : α → β → γ
を定義することができます。
-- 最初は `+` 記号が定義されていないのでエラーになる
#check_failure 1 + (· + 2)
/-- HAdd 型クラスのインスタンスを実装する -/
instance : HAdd Nat (Nat → Nat) (Nat → Nat) where
hAdd n f := fun m => n + f m
-- 足し算記号が使えるようになった
#check 1 + (· + 2)
足し算 (· + ·) : α → β → γ
が一つの型の中で閉じているとき、つまり α = β = γ
のときは Add
が使用できます。