Esiste una connessione implementata tra l'uguaglianza propositional e promoted?Esiste una connessione tra `a: ~: b` e` (a: == b): ~: True`?
Diciamo che ho
prf :: x :~: y
portata per alcuni Symbol
s; dal pattern matching su di esso essendo Refl
, posso trasformarla in
prf' :: (x :== y) :~: True
come questo:
fromProp :: (KnownSymbol x, KnownSymbol y) => x :~: y -> (x :== y) :~: True
fromProp Refl = Refl
Ma per quanto riguarda l'altra direzione? Se provo
toProp :: (KnownSymbol x, KnownSymbol y) => (x :== y) :~: True -> x :~: y
toProp Refl = Refl
allora tutto quello che ottiene è
• Could not deduce: x ~ y
from the context: 'True ~ (x :== y)
Certo, 'toProp _ = unsafeCoerce Refl'. 'sameSymbol' è definito in questo modo, quindi dubito che tu possa fare di meglio. – user3237465
Si potrebbe anche scrivere 'toProp Refl = fromJust $ sameSymbol (Proxy :: Proxy x) (Proxy :: Proxy y)' ma questo è solo leggermente migliore dell'uso di 'unsafeCoerce'. – user2407038