3
次のことを考えてみましょう:部分的に適用された等式制約
class (a ~ b) => Equal a b
instance (a ~ b) => Equal a b
は、私は後でデータ型考えてみましょう:
data D (c :: * -> Constraint) where
D :: Proxy c -> D c
を次に、このようなものが有効である:
D (Proxy :: (Proxy (Equal Int)))
私の質問私が使った繰返しクラス/インスタンス表記以外のEqual
を書く方法はありますか?
タイプファミリとしてEqual
を定義すると、Equal Int
は不完全なアプリケーションなので動作しないようです。
クラス/インスタンスのハックは悪く見えますが、少なくとも動作しますが、これを達成するための他の多分もっとクリーンな方法がありますか?
注意実際のコードでは等価よりも複雑な制約を使用していますが、これは良い例だと思っています。
私は 'Proxy((〜)Int)'はうまくいかないかもしれないと思う。 – chi