6

Haskell の構文についての混乱を減らしたいと思っており、Haskell の個別の名前空間が何であるかを知りたいと思っています。

コードで定義された名前スコープではなく、コンパイラが管理するさまざまなシンボル テーブルに対応する構文上の名前空間を意味する名前空間。

例えば:

  • 値の名前 (関数名など)
  • データ コンストラクター
  • 型コンストラクタ
  • 型パラメーター (型定義内)
  • インスタンス?
  • ...?

私が興味を持っているのは、Haskell コードを読むのに苦労しているからです (他のどの言語よりも間違いなく)。なぜなら、自分が何を見ているのか (特にデータ/型コンストラクター/型宣言) を正確に理解するのに苦労することがよくあるからです。

Haskellは、多くの場所で一握りの構文構造(特に<name> <name> ...)を再利用しているようで、コンテキストに依存しています-コンパイラは私よりもはるかに優れていることがわかりました...

4

2 に答える 2

13

Haskellレポート§1.4によると

Haskellには6種類の名前があります。変数コンストラクターの名前は値を示します。型変数型構築子、および型クラスの場合は、型システムに関連するエンティティを参照します。モジュール名はモジュールを指します。命名には2つの制約があります。

  1. 変数と型変数の名前は、小文字またはアンダースコアで始まる識別子です。他の4種類の名前は、大文字で始まる識別子です。
  2. 同じスコープ内の型コンストラクターとクラスの名前として識別子を使用することはできません。

これらが唯一の制約です。たとえば、Intは、単一のスコープ内のモジュール、クラス、およびコンストラクターの名前である場合があります。

于 2012-05-18T21:25:40.857 に答える
5

読んでいるものを理解していることを確認すれば、混乱を避けることができます。

  1. 式: ここでは、すべての大文字の名前はデータ コンストラクターまたは修飾された変数またはコンストラクターであり、小文字は値です。
  2. 型: ここで、大文字の名前はすべて型コンストラクターまたはクラス名であり、小文字の名前は型変数です。
于 2012-05-18T22:36:25.720 に答える