module Data.Witness.SimpleWitness where { import Data.Witness.EqualType; -- | @w@ is a simple witness type if each value witnesses to a single type. Thus if two values are the same, then they have the same type. ; class SimpleWitness w where { -- | If the two values are the same, then @a@ and @b@ are the same type. -- -- As an equivalence relation, 'matchWitness' must be reflexive, commutative, and transitive. ; matchWitness :: w a -> w b -> Maybe (EqualType a b); }; }