2

Unicode のサポートを必要とする Haskell でのアプリケーションの開発を開始しようとしています。

HaskellでUnicodeパターンマッチングを実行するには? GHC の構文拡張を見ました。しかし、これを実行するための言語レベルのサポートはありますか (必要な GHC の特別な拡張なしで)?

この質問を見ましたが、そこで与えられた答えは拡張ベースのアプローチを使用しています。また、Unicode を扱うのに最適な Haskell ライブラリは何ですか? バイト文字列またはテキスト? 両方の長所と短所は何ですか?

4

1 に答える 1

4

私の知る限り、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 コンパイラであるため他のものを使用してコードをコンパイルする必要がある可能性はほとんどありません。

于 2013-06-05T18:09:37.317 に答える