2

我即将开始在 Haskell 中开发一个需要一些 Unicode 支持的应用程序。

如何在 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 "なぜ?死にたいのか?")

关于库,您肯定需要 Text 而不是 ByteString,原因是 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 回答