问题
Learn You a Haskell has a code example like this:
ghci> B.pack [99,97,110]
Chunk "can" Empty
(B
stands for Data.ByteString.Lazy
)
But my ghci
does not show Chunk
and Empty
data constructors.
> B.pack [99,97,110]
"can"
Did Haskell developers change the way the values of ByteString
are printed?
回答1:
Looks like Duncan added hand-written Show
instance for lazy ByteString
somewhere between 0.9.2.1
and 0.10.0.1
. See http://hackage.haskell.org/packages/archive/bytestring/0.10.2.0/doc/html/src/Data-ByteString-Lazy-Internal.html#ByteString
Add: Here is the relevant patch
回答2:
Old versions of BL.ByteString
simple have a deriving Show in their data
declaration. This results in the GHCi output as shown in LYAH, and ensures the output is valid Haskell code. The nice plain string "can"
isn't really a valid Haskell representation of that bytestring – that is, not a valid Haskell 98 representation. However, it is common to use {-# LANGUAGE OverloadedStrings #-}
in modules that use bytestrings, which makes it valid. Which is probably the reason that there is now (since 0.10
) this nicer-to-read manual instance.
来源:https://stackoverflow.com/questions/17305832/haskell-does-ghci-show-chunk-empty