.net haskell f# discriminated-union object-to-string

.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 #?