可以|用作变量名的一部分?

时间:2015-07-22 23:21:37

标签: haskell

此代码导致编译器错误:

Prelude> let probBorA = 3
probBorA :: Num a => a
Prelude> let probB|A = 3

<interactive>:25:11: Not in scope: data constructor ‘A’
Prelude> 

|不能在Haskell中用作变量名的一部分吗?

1 个答案:

答案 0 :(得分:6)

它不能是包含字母数字字符的名称的一部分,如示例中所示。不是中缀运算符的绑定名称只能包含字母数字字符,单引号和下划线。对于可能以大写字母或小写字母开头的内容以及对单引号出现位置的几个小限制有进一步的限制。名称也不能以数字开头。

特定字符|具有特殊含义,因为它是the syntax for guards。您的示例与:

相同
Prelude> let prob | A = 3

有关详细信息,请参阅评论中提供的the link Eric。

camelCase是推荐的(并且,通过一个非常大的边缘,最流行的)命名约定,但您也可以命名为like_thiseven'like'this

'(单引号)最常用于变量名的末尾,通常表示它是没有单引号的绑定的修改版本。例如,你可能有

ghci> :{
   |> let x   = 3
   |>     x'  = x + 1
   |>     x'' = x' * 2
   |> in (x, x', x'') 
   |> :}
(3,4,8)

可以在Haskell中创建新的运算符(使用新名称),如下所示:

ghci> let a .|. b = a + b
ghci> 2 .|. 2
4

甚至,如果你真的想要

ghci> let a !@#$%^&* b = a - b
ghci> 7 !@#$%^&* 4
3

(通常你会尝试使用更清晰的运算符名称)

但是,正如我所说,|本身具有特殊意义。