Haskell „Ableiten Show“ in F #?
-
21-09-2019 - |
Frage
In Haskell ist es einfach, durch einfaches Hinzufügen deriving Show
die Typdefinition eine algebraischen Typ / diskriminiert union „darstellbaren“ als String zu machen.
In F # Ich schreibe Dinge am Ende wie:
type Pos =
| Pos of int * int
override this.ToString() =
match this with
Pos(startp, endp) -> sprintf "Pos(%d, %d)" startp endp
und natürlich wird es viel schlimmer mit komplizierteren Typen.
Jede Art und Weise so etwas wie deriving Show
in F # zu bekommen?
Lösung
F # Druckfunktionen wie printf
der Lage sind, angemessen Art alle Daten formatiert werden, wenn Sie die %A
Formatbezeichner verwenden (sie verwenden ToString
wenn Sie %O
angeben). Sie können ToString
mit sprintf
implementieren, die den formatierten String zurückgibt:
type Pos =
| Pos of int * int
override x.ToString() = sprintf "%A" x
Diese druckt zum Beispiel "Po (1, 2)" und es funktioniert für die meisten des F # -Typen (Listen, Gewerkschaften, Aufzeichnungen, Tupel). Es ist ein bisschen mehr als nur das Hinzufügen deriving Show
aber zumindest müssen Sie den Druck nicht selbst implementieren.