9

IのようなHaskellのADTを使用している場合:ADT名。ハスケルでは「左翼」とは何か、次に「a」とは何ですか?

data Foo 
= A Int Double 
| B Bool [Integer] 
| C (Maybe String) Float 

AB、及びCデータコンストラクタと呼ばれます。場合によっては値コンストラクタとします。しかし、正確な名前は何ですか:

  1. "行/代替": B Bool [Integer];
  2. 「行/代替」の「フィールド/要素」。 DoubleA、または を[Integer]に、Bを入力してください。
+1

は、私はあなたがB '記述と思う:ブール - > [整数] - > Foo'コンストラクタとその種類など。 'Bool'と' [Integer] 'はその引数になります。 '[Integer]'は単一の引数または引数になります。しかし、これらが一般的に受け入れられている名前であるかどうかはわかりません。 – nobody

+0

私が見たことから、「フィールド」は正しい用語です。 "Parameter"または "argument"は、実際に* *を構築するときにのみ使用されます。 – Nate

+0

私は通常、これらのことを参照する必要はないと思います。通常、「コンストラクタC」または「型Foo」を参照すれば十分です。あなたは、これらのことを参照したいと思うところに、空白の文例がありますか? (おそらく、回答者は、これらの用語を意味のある文章で使用することに挑戦します。) –

答えて

3
data Foo = A Int Double 
    ^^ Type Constructor "data Foo" 
     ^value Constructor "A" 
      ^^ Component "Int" and "Double" 

A | Bは、通常、選択肢またはケースと呼ばれます。駄目なダイアグラムには申し訳ありません。

Source: Real World Haskell ch3

+0

Haskellレポートでは「コンポーネント」も使用されているため、Q2が正しく表示されます。私はまた、 "コンストラクタの定義"を参照してください。 – user2023370

11

読書Haskell98レポートから4.2節(http://www.haskell.org/onlinereport/decls.html):

  1. これは、明示的に綴られていないが、B Bool [Integer]はおそらく最も正しく(Bと呼ばれるコンストラクタの)「コンストラクタ宣言」と呼ばれています
  2. Aの中のDoubleのようなものは、フィールド宣言と呼ばれます(フィールドを単に呼び出してもOKです)。
+0

ありがとうSumudu。そこを見ると、私は "コンストラクタの定義"しか見ることができません。また、[Haskell 2010 report - Section 4.2](http://www.haskell.org/onlinereport/haskell2010/haskellch4.html#x10-680004.2)も同じです。 "field"に関しては、レコード構文を特に議論するときには* only *のように見えます;そこには「ラベル付きフィールド」または「フィールドラベル」があります。 「コンポーネント」は同じページで使用されていますが、正しいと思われます。 – user2023370

+0

十分に良い。私は、 "fielddecl"という構文仕様で使われている名前から "field declaration"を外挿していました。まったく確定的な名前ではないようです(実際に名前を付けるよりも、「コンポーネント」を使用するときはIMOです)。 –

+0

私は同意する、それはより多くの説明のようです。ちなみに、構文仕様の "fielddecl"は、レコード構文のみを参照しています。 – user2023370

関連する問題