Tôi đang cố gắng tạo tuần tự hóa/deserialization bằng cách đọc và hiển thị (không phải là vấn đề), nhưng có thể mở rộng theo nghĩa là dữ liệu có thể được mở rộng (nhưng không bị thu hẹp) .Nối tiếp có thể mở rộng trong Haskell
Giả sử tôi có loại này:
data Foo = { bar :: Int } deriving (Show, Read)
Và danh sách:
foos = [Foo 1, Foo 2]
tôi có thể dễ dàng deserialize nó thành một tập tin:
hPutStrLn fileHand . ppShow $ foos
Sau đó, tôi có thể serialize nó trở lại :
!str <- hGetContents fileHand
let foosFromFile = fromMaybe [] $ (readMaybe :: String -> Maybe [Foo]) str
Nhưng giả sử rằng vài tháng sau, tôi muốn thêm trường 'baz' vào loại Foo . Việc serialization trực tiếp từ tập tin định dạng cũ sẽ không còn làm việc với đọc, tôi sẽ cần phải chuyển đổi các tập tin (mà tôi không thực sự muốn).
Vì vậy, có một giải pháp thanh lịch (không đặt một phiên bản rõ ràng trong chính chương trình) để vẫn tuần tự hóa dữ liệu từ một tệp và điền vào các trường bị thiếu với các giá trị mặc định không? Có lẽ một số loại thủ thuật?
Cảm ơn.
Tôi chưa bao giờ nghe nói về SafeCopy. Tiện lợi :-) – luqui
+1 để chụp an toàn. Chắc chắn sẽ sử dụng nó. – insitu