packages feed

open-witness-0.6: src/Data/Type/OpenWitness/Instance.hs

module Data.Type.OpenWitness.Instance where

import Data.Constraint
import Data.Type.Equality
import Data.Type.OpenWitness.TypeRep
import Data.Type.Witness
import Prelude

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 HRefl -> Just Dict
        Nothing -> findInstance ii t