この記事は ML Advent Calendar 2014 7日目の記事です。 ここではSMLによるDynamic(あるいはAny)と呼ばれる*1、任意の型の値を保持出来るテクニックを紹介します。 任意の型の値を保持可能な型という内容は 以前も紹介したことがあります(2) が、前回紹介した実装では例外を使っており、プログラムの作法またはパフォーマンスに懸念があるかも知れません。プログラマの心理的にもよろしくなさそうです。 この記事では例外を使わずポータブルなコードのみで同等の振る舞いを実現するテクニックを紹介し、実装を理解出来るように解説します。 序/Dynamicの必要性 StandardMLでジェネリックなコードを書こうとすると、型に応じて処理を切り替えるということが一切出来ないことがネックになります。(その代わり型が完全に推論される) しかしどうしても型によって振る舞いを変えたい場合
![SMLでDynamic(再び) - ::Eldesh a b = LEFT a | RIGHT b](https://cdn-ak-scissors.b.st-hatena.com/image/square/0672ce226b6180f374264792e54572cd9675e29c/height=288;version=1;width=512/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fe%2Feldesh%2F20141206%2F20141206234757.png)