ToString
ToString
は,文字列への変換を行う型クラスです.
structure Point (α : Type) where
x : α
y : α
def origin : Point Int := ⟨0, 0⟩
-- 文字列補完により文字列に変換しようとしても,
-- 最初はどう変換したらいいのかわからないのでエラーになる
#check_failure s!"{origin}"
/-- `ToString` のインスタンスを登録する -/
instance : ToString (Point Int) where
toString p := s!"Point: ({p.x}, {p.y})"
-- これで文字列に変換できる
#eval s!"{origin}"
なお,Repr
のインスタンスがないが,ToString
のインスタンスはある状態で #eval
しようとすると,Repr
の代わりに ToString
のインスタンスが使用されます.Repr
のインスタンスを与えればそちらが優先して使用されます.
/-- info: Point: (0, 0) -/
#eval origin
-- `Repr` のインスタンスを自動生成して登録する
-- 以降は,`#eval` 時には `Repr` のインスタンスが使用される
deriving instance Repr for Point
/-- info: { x := 0, y := 0 } -/
#eval origin