Pregunta

En Haskell es fácil hacer un / unión discriminada tipo algebraica "visualizable" como una cadena, simplemente añadiendo deriving Show a la definición de tipo.

En F # termino de escribir 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, se pone mucho peor con tipos más complicados.

Cualquier forma de obtener algo así como deriving Show en F #?

¿Fue útil?

Solución

F # impresión de funciones tales como printf son capaces de dar formato razonablemente cualquier tipo de datos si se utiliza el especificador de formato %A (utilizan ToString si especifica %O). Se puede implementar usando ToString sprintf que devuelve la cadena con formato:

type Pos =  
    | Pos of int * int 
    override x.ToString() = sprintf "%A" x 

Esta impresora, por ejemplo, "POS (1, 2)" y funciona para la mayoría de los tipos F # (listas, sindicatos, registros, tuplas). Es un poco más largo que acaba de añadir deriving Show pero al menos no tiene que poner en práctica la impresión de sí mismo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top