generated at
constructor
「〇〇constructor」と言うと、〇〇を作り出すもののことを指す
引数は取ったり取らなかったりする

例えば、Haskellには
がある

値コンストラクタは、0個以上の引数を取って値を作り出す
Haskellの場合は、引数は値
値コンストラクタ :: 引数の値 -> 作り出した値 のイメージ
例えば、 Just は値コンストラクタ
1つの値を引数にとって、値を作り出す
例えば、 1 という値を引数にとって、 Just 1 という値を作る
Just 自体は値ではないことに注意
引数を取らないものもある
例えば、 None
0個の値を引数にとって、値を作り出す
故に、実質的に None は値コンストラクタであり、値でもある


型コンストラクタは、0個以上の引数を取って型を作り出す
Haskellの場合は、引数は型
型コンストラクタ :: 引数の型  -> 作り出した型 のイメージ
例えば、 Maybe は型コンストラクタ
1つの型を引数に取って、型を作り出す
例えば、 Int という型を引数にとって、 Maybe Int という型を作る
Maybe 自体は型でないことに注意
引数を取らないものもある
例えば、 Int
でもこれのことをわざわざ「型コンストラクタ」と言うことは殆どないと思う


OOPのclassのconstructorは?
instanceを生成するので、同じように呼ぶなら「instance constructor」と呼べる
0個以上の値を引数にとって、instanceを作り出す
例えば、
ts
const hoge = new Hoge(42); class Hoge { constructor(n: number) { ... } }
この constructor は1つの値を引数にとって、 Hoge instanceを生成する
classを作っているわけではないよねmrsekut
instanceを作っている
でもOOP言語の文脈で「constructor」と言えば、これ以外に指すものがないので、
わざわざ「instance constructor」とは言わずに、
単に「constructor」と呼ばれる