文字列っぽいライブラリの使い方に関するメモ。後でまとめるため。
コーディングの方法は、(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