Haskell中有哪些符号命名空间?

Mar*_*tin 6 haskell

我正在努力减少对Haskell语法的困惑,并希望找出Haskell中单独的命名空间.

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

例如:

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

我很感兴趣,因为我在阅读Haskell代码时遇到了麻烦(肯定比其他任何语言都要多),因为我经常很难搞清楚我在看什么(尤其是数据/类型构造函数/类型声明).

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

dav*_*420 13

Haskell报告§1.4说

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

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

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

  • 值和类型级别也有中缀名称.对于变量(在两个级别),它们由符号组成,并以除`:`之外的任何字符开头.对于构造函数(在两个级别),它们由符号组成,并以`:`开头.Infix类型构造函数我记得只有GHC扩展. (3认同)

Ing*_*ngo 5

如果你确定你明白你在读什么,就可以避免混淆:

  1. 表达式:此处每个大写名称都是数据构造函数或限定变量或构造函数,而小写是值
  2. 类型:此处每个大写的名称都是类型构造函数或类名,而小写名称是类型变量.