【问题标题】:What characters are allowed in Haskell function names?Haskell 函数名称中允许使用哪些字符?
【发布时间】:2018-03-22 03:22:40
【问题描述】:

什么是函数的有效名称?

例子

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

-- doesn't work  
let € x = x * x  
let § x = x * x

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

【问题讨论】:

  • 我认为这会因编译器而异。你用的是哪一个?
  • 你的键盘布局告诉我你是德国人;)美国键盘既没有“§”也没有“ö”、“µ”或“€”。
  • @fuz 瑞典语/芬兰语布局也包含所有这些。

标签: haskell


【解决方案1】:

来自the Haskell report

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

最近版本的 GHC 似乎可以使用 unicode(至少是 UTF-8 的形式):

Prelude> let пять=5; два=2; умножить=(*); на=id in пять `умножить` на два
10

(如果您想知道,«пять `умножить` на два» 在俄语中的意思是“五乘以二”。)

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

Prelude> let x € y = x * y in 2 € 5
10

【讨论】:

  • tl;dr @mrsteve:Haskell 将由标点符号(' 除外)组成的标识符视为中缀运算符。
  • 特别是isAlphaNum '€' == False,而isAlphaNum 'ж' == True。 € 和 § 都在 ISO/IEC_8859-15 中,顺便说一句,这是相当标准的(在非美国的西方世界)
  • 当您使用非ASCII字符作为参数名称并将函数绑定到参数时,您可以将其用作中缀运算符。这是一个检查函数是否关联的示例:asc (♥) a b c = a ♥ (b ♥ c) == (a ♥ b) ♥ c。像这样称呼它:asc (+) 1 2 3
猜你喜欢
  • 2012-05-19
  • 1970-01-01
  • 2010-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
相关资源
最近更新 更多