Sto tentando di effettuare una serializzazione/deserializzazione utilizzando read e show (che non è un problema di per sé), ma estensibile nel senso che il tipo di dati può essere esteso (ma non ridotto) .Serializzazione estendibile in Haskell
Supponiamo che io sono questo tipo:
data Foo = { bar :: Int } deriving (Show, Read)
E l'elenco:
foos = [Foo 1, Foo 2]
mi può facilmente deserializzare in un file:
hPutStrLn fileHand . ppShow $ foos
allora posso serializzare indietro :
!str <- hGetContents fileHand
let foosFromFile = fromMaybe [] $ (readMaybe :: String -> Maybe [Foo]) str
Ma supponiamo che mesi dopo voglio aggiungere un campo "baz" nel tipo di Foo . La serializzazione diretta dal file di vecchio formato non funzionerà più con con lettura, sarà necessario convertire il file (che in realtà non lo desidero ).
Quindi, esiste una soluzione elegante (senza inserire una logica esplicita di versioni nel programma stesso) per serializzare ancora i dati da un file e riempire i campi mancanti con i valori predefiniti? Forse alcuni tipi di trucchi?
Grazie.
Non avevo mai sentito parlare di SafeCopy. Nifty :-) – luqui
+1 per safecopy. Lo userò sicuramente. – insitu