テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

(ocaml report) 多相バリアントの使い道

OCamlの多相バリアントは, バリアントに柔軟性をもたらす. 以下のブログシリーズ(1-4)では, 多相バリアントが便利なケースの紹介と, 多相バリアントがExpression Problemというコードの拡張性に関する問題への有力な解であることが分かりやすく述べられている.

http://d.hatena.ne.jp/osiire/touch/20090510/1241957550

しかし, どういう場合に通常のバリアントと多相バリアントを使い分けるべきなのかが書いてない. 多相バリアントは通常のバリアントより柔軟であり, あらゆるケースでこちらを使うべきでは?と思ったが, RWOにはこの疑問に対する解が書かれている(ちなみに, RWOにも上のブログシリーズと同じようなこれが書かれているが, シンプルに書けていない).

端的にいうと, 「多相バリアントは確かに柔軟だし, 場合によっては簡潔なコードを書くことを助けるけど, 型づけが複雑になってコンパイルエラーがカオスになって発狂するし, タイポなどにも弱いのでバグりやすくなる. おまけに, (これは大した問題じゃないけど)性能も若干悪い. 多相バリアントは, 通常のバリアントを使うとあまりにだるい場合にのみ使うのがいい」という感じ.

https://realworldocaml.org/v1/en/html/variants.html#when-to-use-polymorphic-variants