Haskell 数据。序列化无法解码编码的字节

Haskell 数据。序列化无法解码编码的字节,haskell,Haskell,为什么GHCI中的简单编码/解码测试失败,如下所示?我正在使用图书馆 5的类型不明确,您将受到默认设置的影响。您可以更改尝试反序列化的类型以匹配所选的默认类型: > decode (encode 5) :: Either String Integer 更改默认规则以选择您喜欢的类型: > default (Int) > decode (encode 5) :: Either String Int 或通过明确其类型来防止发生默认: > decode (encode (5

为什么GHCI中的简单编码/解码测试失败,如下所示?我正在使用图书馆


5
的类型不明确,您将受到默认设置的影响。您可以更改尝试反序列化的类型以匹配所选的默认类型:

> decode (encode 5) :: Either String Integer
更改默认规则以选择您喜欢的类型:

> default (Int)
> decode (encode 5) :: Either String Int
或通过明确其类型来防止发生默认:

> decode (encode (5 :: Int)) :: Either String Int

您可以在中阅读有关默认设置的更多信息。通常,根据报告,这种特定的不明确类型将不可默认,因此,如果您将其粘贴到文件中并尝试加载该文件,您将得到一个错误,而不是这种微妙的错误行为,但在ghci中,有一些错误会使默认更频繁发生。

从未使用过该库,所以我不能提供一个深入的解释,但这对我来说是可行的:
decode(encode(5::Int)):要么字符串Int
,所以我猜类型推断不能通过
decode
encode
达到
5
,可能默认为
5::Integer
,这意味着序列化将不同于
Int
,因此反序列化失败。@lehins您是对的<编码>解码(编码5):任何一个字符串整数都可以工作!
> decode (encode (5 :: Int)) :: Either String Int