Ho una domanda: Come posso eseguire l'override del metodo show per String o Char? Grazie.Metodo di override show per String/Char in Haskell
risposta
Se vuoi farlo, allora stai sbagliando.
Per un motivo più tecnico, vedere my answer a una domanda precedente.
È davvero dovrebbe utilizzare sia le proprie funzioni a -> String
(eventualmente tramite il proprio tipo di classe) o di utilizzare una libreria pretty-stampa per le uscite più dettagliate (alcuni dei quali hanno già integrato Pretty
classe).
Dal momento che le persone sembrano apprezzare il mio commento, qui è come una risposta:
Se si vuole reimplementare le classi di tipo sui tipi esistenti, si può avvolgere in un tipo, dichiarata newtype
. Ciò consente di definire le proprie implementazioni, senza alcun overhead effettivo in fase di esecuzione (poiché newtype
è isomorfo al tipo originale, non è possibile eseguire il boxing effettivo in fase di esecuzione).
Questo potrebbe essere simile a questa:
newtype MyChar = MyChar Char
instance Show MyChar where
show (MyChar c) = "head \"" ++ c : "\""
È possibile utilizzare questo avvolgendo Char
s con MyChar
, in questo modo:
print $ fmap MyChar "test"
Questo stamperà
[head "t",head "e",head "s",head "t"]
Puoi anche definire showList, quindi gli elenchi di MyChar avranno anche la formattazione personalizzata. In effetti, questo è il motivo per cui gli elenchi di caratteri ([Char]) si comportano in modo diverso rispetto agli altri elenchi ([a]). – sdcvvc
C'è una ragione per cui non si desidera semplicemente definire alcune altre funzioni di tipo 'Char -> String' o' String -> String'? Perché vuoi ignorare 'show'? – hammar
Penso che si debba avvolgere in un [nuovo tipo] (http://www.haskell.org/haskellwiki/Newtype) e definire Mostra per quel tipo. –