2011-05-10 20 views
22

¿Cómo puedo crear una nueva línea dentro de un tipo de cadena? ¿Es posible sin usar IO()?Newline en Haskell String?

formatRow :: Car -> String 
formatRow (a, d:ds, c, x:xs) = a ++ " | " ++ x ++ concat xs ++ " | " ++ show C++ " | " ++ d ++ concat ds ++ (show '\n') 
+2

Puede aclarar su pregunta 1) proporcionándonos la definición del tipo "Coche", y 2) dando un ejemplo del resultado deseado. Podemos suponer por la forma en que los usa que 'xs' y' ds' son cadenas, y 'a',' d' y 'x' son Chars, pero el código de ejemplo completo es bastante extraño sin más contexto. –

Respuesta

43

Para crear una cadena que contiene un salto de línea, acaba de escribir "\n".

Tenga en cuenta que llamar show en él escapará a la nueva línea (o cualquier otro-meta-caracteres), por lo que no hacer foo ++ (show "\n") o foo ++ (show '\n') - sólo tiene que utilizar foo ++ "\n".

También tenga en cuenta que si sólo se evalúa una expresión de cadena en ghci sin utilizar putStr o putStrLn, sólo se llamará show en él, así que por ejemplo la cadena "foo\n" se mostrará como "foo\n" en ghci, pero eso no cambia el hecho de que es una cadena que contiene una nueva línea y se imprimirá de esa manera, una vez que la genere usando putStr.

+0

Entonces, ¿debería usar putStrLn y esto se mostrará correctamente? – Ash

+0

@Ash: ¿En lugar de qué? Si desea imprimir sus filas una a la vez, puede simplemente usar 'putStrLn' en lugar de agregar una nueva línea a la cadena. Si desea concatenar las líneas juntas antes de imprimirlas, aún necesita agregar la nueva línea (usando '" \ n "', no 'mostrar '\ n')' y luego imprimir la cadena resultante usando 'putStr' o' putStrLn '. – sepp2k

+3

O use 'unlines' – pat