propositionalとpromotedの間に等しい接続が実装されていますか?`a:〜:b`と`(a:== b):〜:True`の間には何らかの関係がありますか?
のは、私はいくつかのSymbol
のためのスコープに
prf :: x :~: y
があるとしましょう。
fromProp :: (KnownSymbol x, KnownSymbol y) => x :~: y -> (x :== y) :~: True
fromProp Refl = Refl
しかし、どのような他の方向について:それはRefl
であることにパターンマッチングによって、私はこのような
prf' :: (x :== y) :~: True
にそれを変換することができますか?私は
toProp :: (KnownSymbol x, KnownSymbol y) => (x :== y) :~: True -> x :~: y
toProp Refl = Refl
を試す場合は、私が得るすべては
• Could not deduce: x ~ y
from the context: 'True ~ (x :== y)
確かに、 'toProp _ = unsafeCoerce Refl'です。 'sameSymbol'はこのように定義されていますので、あなたがうまくいくかどうかは疑問です。 – user3237465
'toProp Refl = fromJust $ sameSymbol(Proxy :: Proxy x)(Proxy :: Proxy y)'と書くこともできますが、これは 'unsafeCoerce'を使うよりもわずかに優れています。 – user2407038