Gibt es eine Verbindung zwischen propositional und promoted Gleichheit?Gibt es eine Verbindung zwischen `a: ~: b` und` (a: == b): ~: True`?
Lassen Sie uns sagen, ich habe
prf :: x :~: y
in Rahmen für einige Symbol
s; von Pattern-Matching auf sie Refl
ist, kann ich das in
prf' :: (x :== y) :~: True
wie diese Transformation:
fromProp :: (KnownSymbol x, KnownSymbol y) => x :~: y -> (x :== y) :~: True
fromProp Refl = Refl
Aber was ist die andere Richtung? Wenn ich versuche,
toProp :: (KnownSymbol x, KnownSymbol y) => (x :== y) :~: True -> x :~: y
toProp Refl = Refl
dann alles, was ich bekommen ist
• Could not deduce: x ~ y
from the context: 'True ~ (x :== y)
Sicher, 'toProp _ = unsafeCoerce Refl'. 'sameSymbol' ist auf diese Weise definiert, also bezweifle ich, dass Sie es besser machen können. – user3237465
Sie könnten auch 'toProp Refl = fromJust $ sameSymbol (Proxy :: Proxy x) (Proxy :: Proxy y)' schreiben, aber das ist nur geringfügig besser als mit 'unsafeCoerce'. – user2407038