HaskellのData.Typeable
への参照に出くわしましたが、コードでそれを使用したい理由がわかりません。
それはどのような問題をどのように解決しますか?
Data.Typeable
は、静的に型付けされた言語で遅延(動的)型チェックを実装するためのよく知られたアプローチ(Harperなどを参照)のエンコーディングですniversal型を使用します。
このような型は、後のフェーズまで型チェックが成功しないコードをラップします。コンパイラは、プログラムを不正な型として拒否するのではなく、実行時チェックに渡します。
このスタイルはAbadiet al。に端を発し、CheneyとHinzeによってHaskellのために開発され、すべての動的タイプを表すラッパーとして使用され、Typeable
クラスはSPJとLammelのSYB作業の一部として表示されます。
参照
教科書でも:動的型(入力可能な表現を含む)は静的に型付けされた言語であり、Harper ch 20:
20.4タイプなしとはユニタイプを意味します
型なしのλ計算は、再帰型を使用して型付き言語に忠実に埋め込むことができます。これは、すべての型なしλ-termが、λ-termの表現の実行が用語自体の実行に対応するように、型付き式としての表現を持っていることを意味します。この埋め込みはではなくℒ{+×⇀µ}でλ計算のインタープリターを作成する問題ではなく(確かに実行できます)、型なしの直接表現です。再帰型を持つ言語の型付き式としてのλ-terms。
重要な観察は、untypedλ-calculusが実際にはuni-typedλ-calculusであるということです!その力を与えるのは型の不在ではなく、1つの型、つまり再帰型だけを持っているということです。
D = µt.t→t。
これは、とりわけ、型の命名を可能にするライブラリです。タイプa
がTypeable
と宣言されている場合、show $ typeOf x
を使用してその名前を取得できます。ここで、x
はタイプa
の任意の値です。また、 限定型キャスト も備えています。
(これは、C++のRTTIまたは動的言語の反映にいくぶん似ています。)
HaskellのData.Typeable
のようなライブラリについて私が見つけた最も初期の説明の1つは、1992年のJohn Petersonによるものです: http://www.cs.yale.edu/publications/techreports/tr1022.pdf
実際のData.Typeable
ライブラリを紹介することを私が知っている最初の「公式」論文は、2003年からの最初のScrap Your Boilerplate論文です: http://research.Microsoft.com/en-us/um/people/ simonpj/Papers/hmap/index.htm
ここの誰かがチャイムを鳴らすことができる多くの介在する歴史があると確信しています!
Data.Typeable クラスは、主に Scrap Your Boilerplate (SYB)スタイルのジェネリックプログラミングに使用されます。参照 Data.Data
SYBは、印刷、カウント、検索、置換などの操作を、ユーザーが作成したさまざまなタイプに対して統一された方法で実行するためのコレクションコンビネータを定義するという考え方です。 Typeable
型クラスは、必要な配管を提供します。
最新のGHCでは、必要なインスタンスを提供するために、独自の型を定義するときにderiving Data.Typeable
と言うことができます。