Ответ 1
Функции печати F #, такие как printf
, могут форматировать любой тип данных, если вы используете спецификатор формата %A
(они используют ToString
, если вы указываете %O
). Вы можете реализовать ToString
с помощью sprintf
, который возвращает форматированную строку:
type Pos =
| Pos of int * int
override x.ToString() = sprintf "%A" x
Это печатает, например, "Pos (1, 2)", и он работает для большинства типов F # (списки, союзы, записи, кортежи). Это немного дольше, чем просто добавление deriving Show
, но по крайней мере вам не нужно выполнять печать самостоятельно.