在Haskell中查找Char的Unicode脚本

Ale*_*nov 4 unicode haskell

我想编写一个函数来检查a Char代表一个西里尔字母,纯粹出于教学原因.俄语的简单近似是

isCyrillic c = 
    let lc = toLower c 
    in '?' <= lc && lc <= '?'
Run Code Online (Sandbox Code Playgroud)

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

U+0400–U+04FF Cyrillic
U+0500–U+052F Cyrillic Supplement
U+2DE0–U+2DFF Cyrillic Extended-A
U+A640–U+A69F Cyrillic Extended-B
U+1C80–U+1C8F Cyrillic Extended-C
Run Code Online (Sandbox Code Playgroud)

但这似乎也不是很好的做法.

理想情况下,功能就是这样

isCyrillic c = unicodeScript c == Cyrillic
Run Code Online (Sandbox Code Playgroud)

但是这假定存在一个枚举Unicode脚本的类型(Unicode范围也可以).某个地方有吗?

dup*_*ode 7

property来自text-icuData.Text.ICU.Char似乎符合法案:

import Data.Text.ICU.Char

isCyrilic c = property Block c == Cyrillic