Cách tiếp cận tốt nhất tùy thuộc vào định dạng của tệp nhị phân.
Nhiều định dạng nhị phân được thiết kế để dễ dàng phân tích cú pháp (không giống như định dạng văn bản chủ yếu được đọc bởi con người). Vì vậy, bất kỳ loại dữ liệu công đoàn nào sẽ được bắt đầu bởi một phân biệt đối xử cho bạn biết loại mong đợi nào, tất cả các trường đều có độ dài cố định hoặc trước bởi một trường độ dài, v.v. Đối với loại dữ liệu này tôi muốn giới thiệu Data.Binary; thông thường bạn tạo một kiểu dữ liệu Haskell phù hợp cho mỗi loại trong tệp, và sau đó làm cho mỗi loại đó là một thể hiện của Nhị phân. Xác định phương thức "get" để đọc; nó trả về một hành động đơn giản "Get" mà về cơ bản là một trình phân tích cú pháp rất đơn giản. Bạn cũng cần xác định phương thức "put".
Mặt khác, nếu dữ liệu nhị phân của bạn không phù hợp với loại thế giới này thì bạn sẽ cần attoparsec. Tôi chưa bao giờ sử dụng nó, vì vậy tôi không thể bình luận thêm, nhưng this blog post là rất tích cực.
Nguồn
2010-03-11 18:20:41
Parsec đó là trong Text.Parsec ngụ ý nó là chủ yếu cho văn bản, không phải nhị phân, phải không? Ngay cả đối với ByteStrings, nó chỉ làm cho loại một thể hiện của Stream và Char. Những gì bạn có nghĩa là nó hoạt động tốt? – me2