7

Learn You a Haskell有一个这样的代码示例:

ghci> B.pack [99,97,110]  
Chunk "can" Empty  

B代表Data.ByteString.Lazy

但我ghci没有显示ChunkEmpty数据构造函数。

> B.pack [99,97,110]  
"can"

Haskell 开发人员是否改变了ByteString打印值的方式?

4

2 回答 2

12

看起来 Duncan 在和之间添加了懒惰的手写Show实例。见http://hackage.haskell.org/packages/archive/bytestring/0.10.2.0/doc/html/src/Data-ByteString-Lazy-Internal.html#ByteStringByteString0.9.2.10.10.0.1

添加:这里是相关补丁

于 2013-06-25T19:45:29.940 回答
4

旧版本的BL.ByteStringsimplederiving Show在他们的data声明中有一个。这会产生如 LYAH 中所示的 GHCi 输出,并确保输出是有效的 Haskell 代码。漂亮的纯字符串"can"实际上并不是该字节串的有效 Haskell 表示——也就是说,不是有效的Haskell 98表示。但是,通常{-# LANGUAGE OverloadedStrings #-}在使用字节串的模块中使用,这使其有效。这可能是现在(因为0.10)有这个更易读的手动实例的原因。

于 2013-06-25T19:46:03.000 回答