【发布时间】:2014-02-08 02:38:57
【问题描述】:
为什么不能在 GHC 中定义运算符 :=?在未来的版本中可以消除此限制吗?
这是输出:
[1 of 1] Compiling Images ( Images.hs, interpreted )
Images.hs:19:1:
Invalid type signature: (:=) :: HasSetter s => s a -> a -> IO ()
Should be of form <variable> :: <type>
【问题讨论】:
-
以
:开头的名称保留给数据类型命名空间:data (:=) a b = (:=) a b -
@danbst,Haskell 通常不允许类型/数据构造函数和函数具有相同的名称格式。例如,类型/数据构造函数必须以大写(或:)开头,函数名称必须以小写(或有效的值级运算符字符)开头。不过,您可以使用
.=或=:作为中缀函数名。 -
从本质上讲,冒号是“大写”,用于命名规则。
-
@danbst 函数空间和数据构造函数空间绝对重叠。所有数据构造函数都是函数。 Haskell 指定模式匹配的方式需要能够在语法上区分数据构造函数和其他值。
-
@jcarpenter 您可以在运算符中使用冒号,但不能在开头使用。例如,
(=:) = ()是一个有效的定义。
标签: haskell