在Haskell中查找字符的Unicode脚本

4

我想编写一个函数,检查一个Char是否代表一个西里尔字母,纯粹出于教育目的。对于俄语来说,简单的近似方法是:

isCyrillic c = 
    let lc = toLower c 
    in 'а' <= lc && lc <= 'я'

但我不喜欢它,因为它不能处理其他使用西里尔字母的语言。我可以硬编码范围:

U+0400U+04FF Cyrillic
U+0500U+052F Cyrillic Supplement
U+2DE0–U+2DFF Cyrillic Extended-A
U+A640U+A69F Cyrillic Extended-B
U+1C80–U+1C8F Cyrillic Extended-C

但是这种方法似乎也不是很好的实践。

理想情况下,函数应该只是:

isCyrillic c = unicodeScript c == Cyrillic

但是这假设存在一种列举Unicode脚本(Unicode范围也可以)的类型。有这样的类型吗?

关于资源请求关闭投票,我认为应该对标准库类似的东西(如日期和时间或Unicode)有一定的宽限。我还想说,在Haskell的特定情况下,这尤其相关,因为它的实际标准库相对而言范围非常狭窄。 - duplode
1个回答

7

propertytext-icuData.Text.ICU.Char 中似乎符合要求:

import Data.Text.ICU.Char

isCyrilic c = property Block c == Cyrillic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接