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

时间:2012-05-18 21:20:24

标签: haskell

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

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

例如:

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

我很感兴趣,因为我在阅读Haskell代码时遇到了麻烦(绝对比其他任何语言都要多)因为我经常很难搞清楚我正在看什么 with data / type constructors / type declarations)。

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

2 个答案:

答案 0 :(得分:13)

The Haskell Report §1.4 says

  

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

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

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

答案 1 :(得分:5)

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

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