witness-0.5: src/Data/Type/Heterogeneous.hs
module Data.Type.Heterogeneous where
import Data.Kind
import Data.Type.Equality
import Prelude
withHRefl :: forall ka (a :: ka) kb (b :: kb) (r :: Type). a :~~: b -> ((a ~~ b) => r) -> r
withHRefl HRefl r = r
-- | somewhat awkwardly named
homoHetEq :: forall (k :: Type) (a :: k) (b :: k). a :~~: b -> a :~: b
homoHetEq HRefl = Refl
class TestHetEquality (w :: forall k. k -> Type) where
testHetEquality :: forall (ka :: Type) (a :: ka) (kb :: Type) (b :: kb). w a -> w b -> Maybe (a :~~: b)