Почему decodeFile
от Data.Binary
выбросить ошибку *** Exception: demandInput: not enough bytes
, при использовании decode
и readFile
от Data.ByteString.Lazy
работает должным образом?Почему decodeFile выбрасывает ошибку «недостаточно байт»?
Минимальный пример
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
Я нашел это потенциально важный вопрос: Using Data.Binary.decodeFile, encountered error "demandInput: not enough bytes", но это не реально ответить на мой вопрос, поэтому с помощью decodeFile
не работает, но readFile
делает.
Выход я получаю:
[1 of 1] Compiling Testing (testing.hs, interpreted)
Ok, modules loaded: Testing.
*Testing> main
*** Exception: demandInput: not enough bytes
*Testing> main2
True
fromList [('a',1),('b',2),('c',3),('d',4)]