私の知る限り、Unicode 文字のパターン マッチングはそのままで機能します。これを試して:
f ('薬':rest) = rest
f _ = "Your string doesn't begin with 薬"
main = do
putStrLn (f "薬は絶対飲まへん!")
putStrLn (f "なぜ?死にたいのか?")
ライブラリに関しては、間違いなく ByteString ではなく Text が必要です。その理由は、Text は実際にはテキストを操作し、文字列の長さをバイト単位ではなく文字単位でカウントすることなどを目的としているためです。一方、ByteString は、余分なフリルはほとんどなく、バイナリデータの保存と送信により適しています。
ByteString や Text などのパターン マッチングに関しては、意図的に非表示の実装を持つ不透明な型であるため、拡張機能なしでは不可能です。ただし、Text/ByteString で動作する多くの高次関数を使用して、文字のパターン マッチを行うことができます。
import Data.Text as T
countTs n 't' = n+1
countTs n 'T' = n+1
countTs n _ = n
main = do
putStr "Please enter some text> "
str <- T.pack `fmap` getLine
let ts = T.foldl countTs 0 str
putStrLn ("Your text contains " ++ show ts ++ " letters t!")
私があなただったとしても、拡張機能の使用について心配することはありません。GHC は単にHaskell コンパイラであるため、他のものを使用してコードをコンパイルする必要がある可能性はほとんどありません。