Tôi không chắc chắn nếu sử dụng Generics là một bức ảnh tốt nhất đạt được hiệu suất cao. đặt cược tốt nhất của tôi thực sự sẽ có văn bản dụ của riêng bạn cho Serializable như thế này:
instance (Serializable a) => Serializable (HashMap a) where
...
Để tránh tạo ra các trường hợp trẻ mồ côi, bạn có thể sử dụng Newtype lừa:
newtype SerializableHashMap a = SerializableHashMap { toHashMap :: HashMap a }
instance (Serializable a) => SerializableHashMap a where
...
Câu hỏi đặt ra là làm thế nào để xác định ...
?
Không có câu trả lời xác định trước khi bạn thực sự thử và triển khai và đánh giá các giải pháp có thể có.
Một giải pháp có thể là sử dụng các chức năng toList
/fromList
và lưu trữ/đọc kích thước của HashMap
.
Loại khác (tương tự như sử dụng Generics) sẽ viết chuỗi tuần tự trực tiếp dựa trên cấu trúc HashMap bên trong. Do thực tế là bạn không thực sự có các internals xuất khẩu mà sẽ là một công việc cho Generics chỉ.
Sự cố xảy ra với Generic là gì? – Cubic
Để lấy được Generic, cho một kiểu tùy chỉnh, chúng tôi cần phải viết một cái gì đó như: 'Something data = Something Int Int bắt nguồn Generic' Làm thế nào điều này có thể được thực hiện nếu datatype là trong một thư viện trên Hackage (trừ nộp một bản vá cho người bảo trì của thư viện)? – donatello
Hmm ...Vâng, cá nhân tôi nghi ngờ rằng Serializing HashMaps như thế này sẽ không hoạt động, và bạn sẽ phải sử dụng một triển khai khác hỗ trợ kiểu serialization mà bạn muốn, nhưng hãy xem những gì người khác nói. – Cubic