inductive Foo where | mk : Nat → Foo | boo : String → Foo instance : ToString Foo where toString o := match o with | .mk n => aux1 n | .boo s => aux2 s where aux1 (n : Nat) : String := s!".mk {n}" aux2 (s : String) : String := s!".boo {s}" example : toString (Foo.mk 10) = ".mk 10" := rfl