Haskell函数名中允许哪些字符?

mrs*_*eve 25 haskell

什么是函数的有效名称?

例子

-- works
let µ x = x * x  
let ö x = x * x

-- doesn't work  
let € x = x * x  
let § x = x * x
Run Code Online (Sandbox Code Playgroud)

我不确定,但我的预感是Haskell不允许使用Unicode函数名称,是吗?(如http://www.cse.chalmers.se/~nad/listings/lib-0.4/Data.List.html中的 Unicode )

Rom*_*aka 29

来自Haskell的报告:

Haskell使用Unicode字符集.但是,源程序目前偏向于早期版本的Haskell中使用的ASCII字符集.

最近版本的GHC似乎没有unicode(至少以UTF-8的形式):

Prelude> let ????=5; ???=2; ????????=(*); ??=id in ???? `????????` ?? ???
10
Run Code Online (Sandbox Code Playgroud)

(如果你想知道,«пять`умножить`надва»意味着"五"乘以两个»俄语.)

您的示例不起作用,因为这些字符是"符号",可以在中缀运算符中使用,但不能在函数名称中使用.请参阅报告中的"uniSymbol"类别.

Prelude> let x € y = x * y in 2 € 5
10
Run Code Online (Sandbox Code Playgroud)

  • 特别是,'isAlphaNum'='= False`,而`isAlphaNum'ж'== True`.€和§都在ISO/IEC_8859-15,顺便说一句,这是非常标准的(在非美国西部世界) (10认同)