Próbuję dokonać serializacji/deserializacji za pomocą odczytu i pokazać (co nie jest problemem per se), ale rozszerzalne w tym sensie, że dane typu można rozszerzyć (ale nie skurczyć) .Rozszerzalna serializacja w Haskell
Załóżmy, że mam tego typu:
data Foo = { bar :: Int } deriving (Show, Read)
a lista:
foos = [Foo 1, Foo 2]
mogę łatwo deserializować go do pliku:
hPutStrLn fileHand . ppShow $ foos
Wtedy możemy szeregować je z powrotem :
!str <- hGetContents fileHand
let foosFromFile = fromMaybe [] $ (readMaybe :: String -> Maybe [Foo]) str
Ale przypuśćmy, że kilka miesięcy później chcę dodać pole "baz" do typu Foo . Bezpośrednia serializacja z pliku w starym formacie nie będzie już działać z czytaniem, będę musiał przekonwertować plik (czego tak naprawdę nie chcę ).
Czy istnieje elegancki (bez wprowadzania jawnej logiki wersjonowania w samym programie) rozwiązanie, aby nadal serializować dane z pliku i wypełniać brakujące pola wartościami domyślnymi? Może niektóre sztuczki?
Dzięki.
Nigdy nie słyszałem o SafeCopy. Nifty :-) – luqui
+1 do zabezpieczenia. Na pewno go użyję. – insitu