Coqで型クラス
Show.v
Require Import String.
Open Scope string_scope.
(* 型クラスShowの定義 *)
Class Show (A: Set) := {
show : A -> string
}.
(* フィールドshowの型 *)
Check @show.
(*
show
: forall A : Set, Show A -> A -> string
((A:Set)と(s:Show A)の部分は暗黙引数となり、省略可能)
*)
(* string型をShowクラスのインスタンスとする *)
Instance ShowString : Show string := {
show s := s
}.
(* bool型をShowクラスのインスタンスとする *)
Instance ShowBool : Show bool := {
show b := match b with | true => "true" | false => "false" end
}.
(* 文字列はShowクラスのインスタンス *)
Definition foo := show "hello".
(* ブール型はShowクラスのインスタンス *)
Definition bar := show true.
(* 混ぜても使える *)
Definition hoge := show "hello" ++ show false.
Author And Source
この問題について(Coqで型クラス), 我々は、より多くの情報をここで見つけました https://qiita.com/yoshihiro503/items/a6fe93ae0d867129f7b1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .