レコードのラベル

module A = struct
  type t = { x : int; y : int }
end

let x = { A.x = 1; A.y = 2 }

とモジュール名で修飾して書かなくてはいけないいけないことにめんどくささを感じて敬遠していたのだが、

module A = struct
  type t = Foo
         | Bar
end

let x = A.Foo

とモジュール名付きで平気で書いていることを考えれば、別に平気かも*1 *2。と、諦めて実際に使ってみればレコードのなんと便利なことか。

しかし、

{ a with b = c }

と書くのは、なんかダサい。ソースコード上でレコードのコンストラクタがネストしてない?

a with { b = c }

のほうが格好いい気がする。単純に好みの問題だろうけど。

*1:このめんどくささの問題はすでに本質的に解決されていて、例えばSML#(http://www.pllab.riec.tohoku.ac.jp/smlsharp/)などではこんな不条理はありません。

*2:ちなみに有名な話ですが「SML#」とGoogleで検索するとわりと危険なことになりますので、会社や学校、奥様の御前などでは注意された方が良いと思います。