Hãy nói rằng tôi có các loại sau đây:Làm thế nào để tuần tự hóa các POD không đáng kể?
data WaveFormatChunk = WaveFormatChunk {
compression :: Word16,
channels :: Word16,
sampleRate :: Word32,
averageBps :: Word32,
blockAlign :: Word16,
significantBits :: Word16
} deriving (Show)
Có cách nào để chỉ cần đổ tất cả điều đó vào một ByteString (hoặc một cấu trúc tương tự) bán buôn (một cách của cấu trúc Ye Olde C)? Nếu không và tôi phải viết một hàm riêng biệt đặt tất cả chúng vào danh sách, có ít nhất các hàm để gắn giá trị vào một danh sách Word8 dễ không? Một cái gì đó giống như putWordBBxe, ngoại trừ chuỗi byte hoặc danh sách (mặc dù tôi rất có thể bị nhầm lẫn vì tôi chưa đọc chính xác vào Monads, dường như với tôi Get/Put hầu hết được sử dụng với các luồng).
Data.Binary không hoàn toàn là những gì tôi đang tìm kiếm, có vẻ hữu ích hơn khi chỉ đổ dữ liệu trên đĩa so với lưu trữ nó ở định dạng cụ thể với độ dài cụ thể (và "sai").
Viết một phiên bản ['Storable'] (http://hackage.haskell.org/packages/archive/base/latest/doc/html/Foreign-Storable.html) cho' WaveFormatChunk' khá đơn giản. Điều đó sẽ cho phép bạn viết ('poke') và đọc (' peek') 'WaveFormatChunk' đến và từ các vị trí bộ nhớ (như thể chúng là các cấu trúc cũ của C). Sau đó, chúng có thể được chuyển thành 'ByteString's nếu bạn muốn. Tôi không biết đây có phải là điều bạn đang tìm kiếm hay không, nhưng tôi có thể giải thích nếu bạn muốn. Ngoài ra còn có [gói nhị phân] (http://hackage.haskell.org/package/binary) để tuần tự hóa. – gspr
... oh, tôi thấy bản chỉnh sửa của tôi về gói nhị phân khá là vô giá trị vì bạn đã biết về điều đó :-) – gspr
Đáng yêu chắc chắn là con đường để đi. Bạn sẽ không tiến gần hơn đến C hơn thế, cả về phong cách và hiệu quả thực hiện. [Đây là một ví dụ] (http://hpaste.org/76299). –