.net - Haskell''s "deriving Show" en F#?
discriminated-union object-to-string (1)
Las funciones de impresión F # como printf
pueden formatear razonablemente cualquier tipo de datos si usa el especificador de formato %A
(usan ToString
si especifica %O
). Puede implementar ToString
usando sprintf
que devuelve la cadena formateada:
type Pos =
| Pos of int * int
override x.ToString() = sprintf "%A" x
Esto imprime, por ejemplo, "Pos (1, 2)" y funciona para la mayoría de los tipos F # (listas, uniones, registros, tuplas). Es un poco más largo que simplemente agregar deriving Show
pero al menos no tiene que implementar la impresión usted mismo.
En Haskell es fácil hacer que una unión algebraica tipo / discriminada sea "desplegable" como una cadena simplemente agregando deriving Show
a la definición de tipo.
En F # termino escribiendo cosas como:
type Pos =
| Pos of int * int
override this.ToString() =
match this with
Pos(startp, endp) -> sprintf "Pos(%d, %d)" startp endp
y obviamente empeora con tipos más complicados.
¿Alguna forma de obtener algo como deriving Show
in F #?