11

Data.HList の簡単な使用例はどこにありますか? ウィキで読んだことによると、このツールは、存在型よりも異種リストの「優れた」ソリューションであり、その理由がわかりません。

4

1 に答える 1

12

記事は、型付けされているため、HList の方が優れていると言っています。

存在型を使用すると、すべての型情報が失われ、そのデータでできることはあまりありません。

それらをすべて、便利な機能を持つクラスのインスタンスにすることができCanDoStuffます (GADT を使用してこれを行うと、見栄えが良くなります)。

(ただし、それは実存的な型クラスのアンチパターンに向かって急速に実行されており、すべての面倒を避けて typeclass を記述する代わりに、実際に使用する関数とデータでCanDoStuffデータ型を作成し、型クラスを使用して単純にオーバーロードすることができます)HandyStuff関数の名前toHandyStuff. そうすれば、通常のリストを使用できます.)

シンプルな HList の使用法

HList を使用する最も簡単な方法は、Data.HList.GhcSyntaxの演算子を使用することだと思います。例えば

andrew = name .=. "Andrew" .*.
         awesomeness .=. 8000 .*.
         glasses .=. True .*.
         emptyRecord

番号をandrew .!. awesomeness回復して取得するために使用できます。うれしいことに、これらはすべて型付けされているので便利です。8000andrew .!. name"Andrew"

私たちはawesomeness .=. 4000000 .@. andrew私の素晴らしさをバンプすることができました。

通常のレコードとは異なり、HList レコードは、好きなタイプのデータを追加していつでも拡張できます。

続きを読む

ここにHList に関する Ralf Lämmel のページへのリンクと、論文自体へのリンクがあります。

于 2013-07-19T00:30:05.363 に答える