open-witness-0.4: src/Data/OpenWitness/Instance.hs
module Data.OpenWitness.Instance where
{
import Data.Kind;
import Data.Constraint;
import Data.Type.Heterogeneous;
import Data.OpenWitness.TypeRep;
data Instance = forall (t :: Constraint). t => MkInstance (TypeRep t);
findInstance :: [Instance] -> TypeRep t -> Maybe (Dict t);
findInstance [] _ = Nothing;
findInstance (MkInstance ti:ii) t = case testHetEquality ti t of
{
Just ReflH -> Just Dict;
Nothing -> findInstance ii t;
};
}