overloadingの価値

いやーいーわ、これ。あとは変なバグが残ってないことを祈るだけ。

let assert_equal =
  let printer = generic
      string_of_int
    | :string -> string => (fun x -> x)
  in
    assert_equal ~printer:printer

let foo () = 
  assert_equal 2 (1+1);
  assert_equal "11" ("1" ^ "1")

こう書けるだけでも、overloadingを導入する価値があると思う。

overloadingは式から静的に型を判断してディスパッチするので、もちろんassert_equal_intとかassert_equal_strとか定義すれば良いんですが、やっぱりこうかけるとすげー気持ち良いわけです。

例えば、型スキームや型環境に対する代入を定義するとき、subst_typescmとかsubst_typeenvとか書くのが嫌で、TypeScm.substとかTypeEnv.substとか定義してることを考えると、モジュール間の依存関係もずいぶんすっきりしてプログラミングも楽になります。

古瀬さんがなにを考えてoverloadingをMLに入れようと考えられたのか知らないが、しかしプログラミングする側からすればもう大変な嬉しさですよ、これは。