レコードのラベル
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で検索するとわりと危険なことになりますので、会社や学校、奥様の御前などでは注意された方が良いと思います。