Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Haskell: Does ghci show "Chunk .. Empty"?

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?

like image 702
Tengu Avatar asked Jun 25 '13 19:06

Tengu


2 Answers

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

like image 65
Yuras Avatar answered Oct 06 '22 00:10

Yuras


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.

like image 30
leftaroundabout Avatar answered Oct 05 '22 23:10

leftaroundabout