4. Classes and Typeclasses
4.1. Classes and Typeclasses
A class is a structure that supports typeclass inference.
class DummyClass (α : Type) where
dummy_object : α
def getDummyObject (α : Type) [DummyClass α] : α :=
DummyClass.dummy_object
instance : DummyClass Nat where
dummy_object := 0
#eval getDummyObject Nat
Mathlib class hierarchy examples:
variable {M : Type} [Monoid M]
variable (a b c : M)
#check mul_assoc a b c
#check one_mul a
#check mul_one a
variable {M : Type} [CommMonoid M]
variable (a b : M)
#check mul_comm a b
variable {A : Type} [AddCommMonoid A]
variable (x y z : A)
#check add_assoc x y z
#check zero_add x
#check add_zero x
#check add_comm x y
variable {R : Type} [Semiring R]
variable (a b c : R)
#check add_assoc a b c
#check mul_assoc a b c
#check left_distrib a b c
#check right_distrib a b c
#check zero_mul a
#check mul_zero a
4.2. Exercises
-
Define a typeclass
DefaultElemwith a fielddefaultElem. -
Create an instance
DefaultElem Bool. -
Define
getDefault (α : Type) [DefaultElem α] : αand test it withBool.