私は純粋な型システム、特に構造の計算を研究しており、フィリップワドラーによれば、再帰型のエンコーディングを使用してそれを可能にしようとしています。例として、私はMorte Haskellライブラリを使用して、Cardelliによって指定されたスコット数値をエンコードしています。
エンコーディングの概要は次のとおりです:(正の)再帰型が与えられた場合...
...システムFのタイプとしてエンコードする場合があります...
...または、純粋な型システムの表記法(明示的な)...
... は型コンストラクターであるため(は型の型)。
これをエンコードするには、Wadlerによると、、、outの 3つの関数を宣言する必要があり、スコット数値のエンコードでCardelliによって使用されます。
fold:すべてX(FX-> X)-> T-> X
fold = \ X。\ k:FX->X。\ t:T。t X k
in:FT-> T
in = \ s:F T. \ X。\ k:FX-> X. k(F(fold X k)s)。
(はです。)
与えられたように関数を書くのは簡単です。しかし、関数を書き込もうとすると、型チェックされないようです。式型はであり、の型はでなければなりません。次に、は(aのように見えるの型であると推測します。型コンストラクタ()であるため、型チェックは行われません。fmap
F
これはタイプミスのようではありません ...何か不足していますか?
fmap
です!カテゴリ理論についてはまったく経験がありませんでしたが、実際には約10分前に「カテゴリデータタイプに関するメモ」(GC Wralth)でそれを見つけました。私は今、正しい関数を書くことができ、魅力のように働きました。どうもありがとう、博士。ワドラー!:D