Data.HList の簡単な使用例はどこにありますか? ウィキで読んだことによると、このツールは、存在型よりも異種リストの「優れた」ソリューションであり、その理由がわかりません。
1 に答える
記事は、型付けされているため、HList の方が優れていると言っています。
存在型を使用すると、すべての型情報が失われ、そのデータでできることはあまりありません。
それらをすべて、便利な機能を持つクラスのインスタンスにすることができCanDoStuff
ます (GADT を使用してこれを行うと、見栄えが良くなります)。
(ただし、それは実存的な型クラスのアンチパターンに向かって急速に実行されており、すべての面倒を避けて typeclass を記述する代わりに、実際に使用する関数とデータでCanDoStuff
データ型を作成し、型クラスを使用して単純にオーバーロードすることができます)HandyStuff
関数の名前toHandyStuff
. そうすれば、通常のリストを使用できます.)
シンプルな HList の使用法
HList を使用する最も簡単な方法は、Data.HList.GhcSyntaxの演算子を使用することだと思います。例えば
andrew = name .=. "Andrew" .*.
awesomeness .=. 8000 .*.
glasses .=. True .*.
emptyRecord
番号をandrew .!. awesomeness
回復して取得するために使用できます。うれしいことに、これらはすべて型付けされているので便利です。8000
andrew .!. name
"Andrew"
私たちはawesomeness .=. 4000000 .@. andrew
私の素晴らしさをバンプすることができました。
通常のレコードとは異なり、HList レコードは、好きなタイプのデータを追加していつでも拡張できます。
続きを読む
ここにHList に関する Ralf Lämmel のページへのリンクと、論文自体へのリンクがあります。