6

我试图减少我对 Haskell 语法的困惑,并想了解 Haskell 中单独的命名空间是什么。

命名空间是指与编译器管理的各种符号表相对应的语法命名空间,而不是代码中定义的名称范围。

例如:

  • 值名称(如函数名称)
  • 数据构造函数
  • 类型构造函数
  • 类型参数(在类型定义中)
  • 实例?
  • ...?

我之所以感兴趣,是因为我在阅读 Haskell 代码时遇到了问题(肯定比任何其他语言都多),因为我经常很难弄清楚到底在看什么(尤其是数据/类型构造函数/类型声明)。

Haskell 似乎<name> <name> ...在许多地方重用了一些句法结构(尤其是 )并依赖于上下文 - 结果证明编译器在这方面比我好得多......

4

2 回答 2

13

Haskell 报告§1.4 说

Haskell 中有六种名称:变量构造函数的名称表示值;类型变量类型构造函数类型类的那些是指与类型系统相关的实体;和模块名称是指模块。命名有两个限制:

  1. 变量和类型变量的名称是以小写字母或下划线开头的标识符;其他四种名称都是以大写字母开头的标识符。
  2. 标识符不能用作同一范围内的类型构造函数和类的名称。

这些是唯一的限制;例如,Int 可能同时是单个范围内的模块、类和构造函数的名称。

于 2012-05-18T21:25:40.857 回答
5

如果您确保了解您正在阅读的内容,则可以避免混淆:

  1. 表达式:这里每个大写名称都是数据构造函数或限定变量或构造函数,而小写字母是值
  2. 类型:这里每个大写名称都是类型构造函数或类名称,而小写名称是类型变量。
于 2012-05-18T22:36:25.720 回答