enum
の定義としてtype Modes = LightMode | StandardMode | ...
としていますが、これだとenum
ではなく判別共用体(すべてのケースが値を持たない判別共用体)になります。
enum
はすべての値を=
で指定する必要があります。
Item1
やItem2
によるアクセスはできません
System.Tuple<...>
で表されてはいるのですが、別物と考えておいた方が色々といいかもしれません。
type 'a list =
| []
| (::) of 'a * 'a list
( <op> )
のようにして関数化可能ですが、どちらも不可能です
:?
はパターン、[| ... |]
は配列式を構成する文法です
次に複数の値を持ったケースを持つ判別共用体の定義方法ですが、
// タプルで定義
type Node =
| Element of (string * (Node seq))
| Text of string
// タプルを使わずに定義
type Node =
| Element of string * Node seq
| Text of string
の2種類があって、後者の方がより効率的な型を生成します。
match
式でタプルとして受け取れない、というものがあります。
type t = Hoge of Xxx:(int * string)