这个Haskell unicode变量名有什么问题?

时间:2014-07-24 19:03:43

标签: haskell unicode

这段代码出了什么问题?

Prelude> let xᵀ = "abc"
<interactive>:10:6: lexical error at character '\7488'

根据我对Haskell 2010 report的解读,任何大写或小写的Unicode字母在变量名的末尾都应该有效。 字符(MODIFIER LETTER CAPITAL T)是否不符合大写Unicode字母的条件?

是否有更好的角色来表示矢量的转置?因为我正在评估一个密集的数学公式,所以我想保持简洁。

我正在运行GHC 7.8.3。

2 个答案:

答案 0 :(得分:8)

大写Unicode字母在Unicode字符类别Letter,大写[Lu]。

小写Unicode字母在Unicode字符类别Letter,Lowercase [Ll]。

MODIFIER LETTER CAPITAL T是Unicode字符类别Letter,Modifier [Lm]。

我倾向于坚持ASCII,所以我可能只使用xTransx'之类的名称,具体取决于它在范围内的行数。

答案 1 :(得分:8)

  

不属于ANY类别的字符在Haskell程序中无效,应该会导致错误。

,其中

ANY         →   graphic | whitechar 

graphic     →   small | large | symbol | digit | special | " | '

small       →   ascSmall | uniSmall | _<br>
ascSmall    →   a | b | … | z<br>
uniSmall    →   any Unicode lowercase letter

...

uniDigit    →   any Unicode decimal digit 

...

这样的修饰符字母根本不是合法的Haskell。 (与Number, Other category中的子或上标数字不同,因此a₁的处理方式与a1非常相似。)

我喜欢使用非ASCII Unicode,因为它有助于提高可读性,但是除非你已经为使用它指定了素数符号的其他含义,否则它应该没问题。