packages feed

witness-0.5: src/Data/Type/With.hs

module Data.Type.With where

import Control.Category
import Data.Kind
import Data.Type.Equality

withRefl :: forall k (a :: k) (b :: k) (r :: Type). a :~: b -> (a ~ b => r) -> r
withRefl Refl r = r

reflCat ::
       forall k (cat :: k -> k -> Type) (a :: k) (b :: k). Category cat
    => a :~: b -> cat a b
reflCat Refl = id

reflWitCat ::
       forall kq (cat :: kq -> kq -> Type) kp (w :: kp -> kq) (a :: kp) (b :: kp). Category cat
    => a :~: b -> cat (w a) (w b)
reflWitCat Refl = id