ByteStringの残念さを確かめるメモ
『すごいHaskellたのしく学ぼう!』の訳者追補を読んで一応概念的には理解していた「ByteStringの残念さ」を一応たしかめてみた。
[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バージョンの文字列処理では、マルチバイト部分がみごとに破壊されています :(