Singleton types を使ってみる

型レベルでのプログラミングをする際、よく「値」が存在しない型 ( i.e. EmptyDataDecls な型。 DataKinds で Promoted されたデータコンストラクタとか。 ) を「型レベルでの値」として扱うけれど、これはつまり実体を持っていないということだから、まるで雲を掴むような話になってしまいわけがわからなくなる。

これに対して、 GHC 7.6.1 では、「型レベルの値」を「ランタイムレベルの値」にマップして、便利に使えるように、 Singleton types という型クラス群が用意されたようだ。

そこで、前回の 型レベルで FizzBuzz で定義した Nat, Result 型を題材に、実際にそれぞれのインスタンスを宣言して、「型レベルの値」を「ランタイムレベルの値」にマップしてみた。

参考にしたサイト