{int x, int y} point p = {x:1, y:2} // 型は省略可 レコード(record)。 静的型付きフィールドからなる type option('a) = {none} or {some: 'a} option(string) girlfriend = {none} orでつないだいくつかの異なるレコードになりうる 直和型(sum type)。異形型(variant~)とも type boolean = {true} or {false} type size = {S} or {M} or {L} or {XL} フィールドのない単純な直和型はJavaなどでもお なじみの列挙型(enum type)っぽい type list('e) = {nil} or {'e hd, list('e) tl} 再帰的直和型(recursive sum type)で 隣接リストなんかも定義できる type open_example = {int a, …} フィールド追加できるオープンレコード type shape = {int w, int h} or {int r} ... 異形を追加できるオープン直和型