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