为什么来自decodeFile
的{{1}}在使用Data.Binary
并*** Exception: demandInput: not enough bytes
decode
按预期工作时会抛出错误readFile
?
最小的例子
Data.ByteString.Lazy
我发现了这个可能相关的问题:Using Data.Binary.decodeFile, encountered error "demandInput: not enough bytes"但它并没有真正回答我的问题,这就是为什么使用module Testing where
import Data.Binary
import qualified Data.Map.Strict as Map
import qualified Data.ByteString.Lazy as B
x :: Map.Map Char Int
x = Map.fromList $ zip ['a'..'d'] [1,2,3,4]
main :: IO (Map.Map Char Int)
main = do
encodeFile "testing" (encode x)
r <- decodeFile "testing"
print $ r == x
return r
main2 :: IO (Map.Map Char Int)
main2 = do
B.writeFile "testing2" (encode x)
r <- fmap decode $ B.readFile "testing2"
print $ r == x
return r
无效但decodeFile
无效。
我得到的输出:
readFile
答案 0 :(得分:4)
你有
encodeFile "testing" (encode x)
表示您将x
编码两次。将其更改为
encodeFile "testing" x
按预期工作。