我很困惑,Put
monad提供的優惠直接使用Builder
,在Data.Binary
。我讀了處理二進制數據的Binary Generation部分,它似乎假定你應該使用Put
,但它很短並不能解釋爲什麼。Haskell中的ByteStrings:我應該使用Put還是Builder?
Data.Binary.Put
認沽單子。一個monad用於有效地構造懶惰的字節串。
type Put = PutM()
把電梯Builder放入Writer monad中,應用於()。
Data.Binary.Builder
懶字節字符串的高效施工。
什麼是適用於()
一個Writer
單子的意義呢?
我可以看到Put
是(A型同義詞)一個單子,而Builder
是沒有,但我真的不知道爲什麼Put
是必要的。在我的情況下,我渲染一個3D場景,並將每個像素寫爲3個字節,然後將PPM格式的標題添加到開頭(稍後將使用PNG)。
Binary
看起來像它是爲了實例化的類型,可以序列化和從二進制數據反序列化。這不正是我在做什麼,但感覺自然實例Binary
我的色彩類型
instance (Binary a) => Binary (Colour a) where
put (Colour r g b) = put r >> put g >> put b
get = Colour <$> get <*> get <*> get
這可以很容易地put
一個Colour Word8
到24位。但是接下來我也必須加上頭,我不知道我該怎麼做。
是Builder
意味着隱藏在幕後,還是取決於? Binary
類僅用於(反)序列化數據,還是用於所有二進制生成目的?
不是一個答案,但你可能想看看使用blaze-builder(和朋友)而不是二進制。 – 2012-07-16 21:15:08
@TiloWiklund:之前我曾見過。它有什麼不同?效率更高嗎? – mk12 2012-07-16 21:16:44
等等。其中一位作者寫了一篇很好的文章:http://lambda-view.blogspot.se/2010/11/blaze-builder-library-faster.html – 2012-07-16 21:29:32