В Haskell легко сделать алгебраический тип/дискриминационный союз "отображаемым" как строку, просто добавив deriving Show
к определению типа.
В F # я в конечном итоге пишу вещи вроде:
type Pos =
| Pos of int * int
override this.ToString() =
match this with
Pos(startp, endp) -> sprintf "Pos(%d, %d)" startp endp
и, очевидно, он становится намного хуже с более сложными типами.
Любой способ получить что-то вроде deriving Show
в F #?