あどけない話

インターネットに関する技術的な話など

String vs ByteString vs Text (その1)

文字列っぽいライブラリの使い方に関するメモ。後でまとめるため。

コーディングの方法は、(ViewPatternを使わないとして)こんな風に変わる。ByteString も Text も IsString のインスタンスなので、OverloadedStrings を指定すると、文字列リテラルが使えることに注意。

{-# LANGUAGE OverloadedStrings #-}

import Data.ByteString (ByteString)
import qualified Data.ByteString as B
import Data.ByteString.Char8 ()

import Data.Text (Text)
import qualified Data.Text as T

foo :: String -> Int
foo ""              = -1
foo "zoo"           = -2
foo ['g','o','o',_] = 8
foo xs              = length xs

bar :: ByteString -> Int
bar ""                      = -1
bar "zoo"                   = -2
bar bs
  | "goo" `B.isPrefixOf` bs = 8
  | otherwise               = B.length bs

baz :: Text -> Int
baz ""                      = -1
baz "zoo"                   = -2
baz ts
  | "goo" `T.isPrefixOf` ts = 8
  | otherwise               = T.length ts