セクション7.9.2 of the GHC user guideで説明されているデータ型昇格の制限の背後にある動機を誰かが説明したり推測したりすることはできますか?データ型昇進の制限の動機
次の制限事項がプロモーションに適用されます。
- 私たちは、その種類のフォーム
* -> ... -> * -> *
のあるデータ型を促進します。特に、data Fix f = In (f (Fix f))
などの上位のデータ型や、Vec :: * -> Nat -> *
などのプロモートされたデータ型を持つデータ型は宣伝しません。特に
、私はそのようなVec :: * -> Nat -> *
として昇格の種類についての最後のビットに興味があります。そのようないくつかのタイプを宣伝するのは当然のようです。私はかなり速くそれに遭遇していましたが、私のライブラリの1つを、より良いドキュメントなどを提供するために、すべて種類の*
を使用する代わりに、さまざまなファントムタイプに対して特定のプロモートされた種類を使用するように変換しようとしました。
これらのようなコンパイラの制限の理由は、しばしば少し考えて飛び出してしまいますが、私はこれを見ていません。だから私はそれが "まだ必要ではないので、私たちはそれを構築しなかった"または "それは不可能/決める/推論を破壊する"というカテゴリーに入るのだろうかと思っています。
大変ありがとうございます。 –
+1は鉱山よりはるかに良い答えですが、異種均等効果はGADTだけに影響しますか? – jozefg
乾杯! GADTは、等価制約が導入される主要な場所ですが、インスタンス宣言にも表示されることがあります。 'インスタンスC t => C(p→t)'よりも積極的なコミットメントを強制するためには、インスタンス(x〜p、C t)=> C(x - > t) 'のようなことをするトリックがあります。私は異質な平等がそのようなことにも現れるだろうと思う。 – pigworker