Il mostrano funzione in Haskell non sembra fare quello che dovrebbe:Haskell: Show avvitato?
Prelude> let str = "stack\n\noverflow"
Prelude> putStrLn str
stack
overflow
Prelude> show str
"\"Stack\\n\\n\\noverflow\""
Prelude>
Quando dichiaro funzioni, io di solito mettere le firme di tipo come Mostra, che non si occupa correttamente con a capo . Voglio trattare lo \n
come newline, non letteralmente "\n"
. Quando cambio il tipo in String, le funzioni funzionano correttamente. Ma avrei dovuto implementare una funzione separata per gli interi, galleggianti, ecc, ecc
Per esempio, posso dichiarare una funzione:
foo :: (Show x) => x -> IO()
foo x = do
putStrLn $ show x
... e lo chiamo in questo modo:
foo "stack\n\noverflow"
foo 6
foo [1..]
Come si ottiene la funzione per restituire cosa è previsto? Cioè quale funzione è simile a show
ma può restituire stringhe contenenti newline?
puoi darci un caso di questo uso specifico? Renderebbe più facile comprendere la tua intenzione. – Martijn
Si potrebbe semplicemente aggiungere un segno di spunta per vedere se l'input è una stringa, e basta stamparlo. La corrispondenza di modelli è una cosa molto utile. – Rayne
"show" è come 'repr()' in Python e 'inspect' in Ruby, se hai già usato quelle lingue. –