型の定義このページは最後に更新されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。 last mod. 2012-08-10 (金) 01:39:43
OCamltype宣言によって宣言できます。 type t = int;; type x = X of int;; type 'a option = None | Some of 'a;; type 'a pt = Point of 'a * 'a;; 多相バリアントは全体を [] で囲む必要があります。 type 'a pt = [ `point of 'a * 'a ];; コンストラクタは構文であって、関数ではありません。 # X;; The constructor X expects 1 argument(s), but is here applied to 0 argument(s) コンストラクタは大文字で始まり、多相バリアントのコンストラクタはバッククォートで始まる必要があります。型変数名はシングルクォートで始まる必要があります。 そのままでは、 type t = t -> t の様な再帰的な型は定義できません。t の中で t を使う場合は、 type t = T of t のようにバリアントを挟むか、--rectypes オプションを付けて起動する必要があります。 SML型の別名はtype宣言を、バリアントはdatatype宣言を使う必要があります。 type t = int; datatype x = X of int; datatype 'a option = None | Some of 'a; datatype 'a pt = Point of 'a * 'a; コンストラクタは関数です。 - X; val it = fn : int -> x コンストラクタの名前に制限はありません。 また、型名とコンストラクタ名の名前空間は分離しています。 datatype x = x of int; 型変数名はシングルクォートで始まる必要があります。 Haskell型の別名はtype 宣言を、バリアントの定義はdata宣言を使います。 type T = Integer data x = X int data Maybe a = Nothing | Just a data Pt a = Point a a (データ)コンストラクタは関数です。 Main> :t X X :: Integer -> X 部分適用も可能です。 Main> :t Point Point :: a -> a -> Pt a Main> :t Point 1 Point 1 :: Num a => a -> Pt a 型名と(データ)コンストラクタはともに大文字で始まる必要があります。 型名と構築子名の名前空間は分離しています。 型変数名は小文字で始まる必要があります。 |