eminglorion
Haskell Вопрос про бинарную сериализацию в Haskell, т. е. речь о blaze/binary/cereal. Библиотеки предоставляют два набора функций: для чтения/записи слов в big-endian и в little-endian. Причём для обоих вариантов используется одна и та же техника через сдвиг. С другой стороны, на той же x86 мы знаем, что слова записываются в le и чтение/запись в le равносильны простой сериализации слов. Т. е. на x86 можно вместо

writeWord16le w = exactWrite 2 $ \p -> do
poke p (fromIntegral (w) :: Word8)
poke (p `plusPtr` 1) (fromIntegral (shiftr_w16 w 8) :: Word8)

писать

writeWord16le w16 =
exactWrite (sizeOf (undefined :: Word16)) (\p -> poke (castPtr p) w16)

Однако, ни в одной из указанных библиотек это не используется. Вопрос: почему? Что я упускаю/не понимаю?