M12i.

学術書・マンガ・アニメ・映画の消費活動とプログラミングについて

ByteStringの残念さを確かめるメモ

すごいHaskellたのしく学ぼう!』の訳者追補を読んで一応概念的には理解していた「ByteStringの残念さ」を一応たしかめてみた。

ViでHaskellソースコードを作成。

[mzk@localhost ~]$ vi bytestring_study.hs


やっつけなプログラムを書く……。Study.Join モジュールについては前回のポストを参照。

import Prelude as P
import System.Environment
import Study.Join
import Data.ByteString.Lazy.Char8 as L (putStrLn, pack)
import Data.Text as T (pack)
import Data.Text.IO as TIO (putStrLn)

main :: IO ()
main = do
	args <- getArgs
	putStrLn $ join ", " args
	putBytesLn $ join (packInBytes ", ") (map packInBytes args)
	putTextLn $ join (packInText ", ") (map packInText args)

	where
		putStrLn = P.putStrLn
		putBytesLn = L.putStrLn
		putTextLn = TIO.putStrLn
		packInBytes = L.pack
		packInText = T.pack


コンパイルして実行!

[mzk@localhost]$ ghc bytestring_study.hs 
[2 of 2] Compiling Main             ( bytestring_study.hs, bytestring_study.o )
Linking bytestring_study ...
[mzk@localhost]$ ./bytestring_study hello bonjour こんにちは
hello, bonjour, こんにちは
hello, bonjour, S?kao
hello, bonjour, こんにちは


うわぁ……。ByteStringバージョンの文字列処理では、マルチバイト部分がみごとに破壊されています :(