はてなブログにGistのコードを埋め込んだ際にデザインがおかしくなるのを修正した
DataKinds 言語拡張を使って Typed Heterogeneous List とその基本操作を実装してみた
DataKinds 言語拡張のおかげで、 [String, Bool]
のような型レベルのリストリテラルが扱えるようになり、 異なる型の要素を持つことができるヘテロリスト、それも Dynamic のようなユニバーサル型を使った Untyped なものではなく、各要素ごとに異なる型付けができるヘテロリスト ( Typed Heterogeneous List ) を、以下のようにスマートに定義できるようになった。
ので、このヘテロリストに対する基本的な操作を実装してみた。 次のような感じで使える。 ( 要 GHC 7.6.1 以上 )
実装
参考にしたサイト
Singleton types を使ってみる
型レベルでのプログラミングをする際、よく「値」が存在しない型 ( i.e. EmptyDataDecls な型。 DataKinds で Promoted されたデータコンストラクタとか。 ) を「型レベルでの値」として扱うけれど、これはつまり実体を持っていないということだから、まるで雲を掴むような話になってしまいわけがわからなくなる。
これに対して、 GHC 7.6.1 では、「型レベルの値」を「ランタイムレベルの値」にマップして、便利に使えるように、 Singleton types という型クラス群が用意されたようだ。
そこで、前回の 型レベルで FizzBuzz で定義した Nat, Result 型を題材に、実際にそれぞれのインスタンスを宣言して、「型レベルの値」を「ランタイムレベルの値」にマップしてみた。