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; }; }