deriving

deriving は,型クラスのインスタンスを自動的に生成します.

以下に示すように, deriving instance C for T とすると型 T に対して型クラス C のインスタンスを生成します.

inductive Color : Type where
  | red
  | green
  | blue

deriving instance Repr for Color

#eval Color.red

対象の型の直後であれば,省略して deriving C だけ書けば十分です.また複数の型クラスに対してインスタンスを生成するには,クラス名をカンマで続けます.

structure People where
  name : String
  age : Nat

deriving Inhabited, Repr

#eval (default : People)

よくあるエラー

なお,deriving で実装を生成できるのは,決まりきったやり方で実装できて,実装方法が指定されている型クラスのみです.実装方法が指定されていなければ使うことはできません.

/-- 自前で定義した型クラス -/
class Callable (α : Type) where
  call : α → String

/--
error: default handlers have not been implemented yet, class: 'Deriving.Callable' types: [Deriving.People]
-/
deriving instance Callable for People