packages feed

witness-0.5: src/Data/Witness.hs

module Data.Witness
    ( module I
    , module Data.Witness
    ) where

import Data.Nat as I
import Data.Proxy as I
import Data.Type.Apply as I
import Data.Type.Equality as I
import Data.Type.Heterogeneous as I
import Data.Type.With as I
import Data.Witness.All as I
import Data.Witness.Any as I
import Data.Witness.ApplyStack as I
import Data.Witness.BigNat as I
import Data.Witness.Concat as I
import Data.Witness.Cons as I
import Data.Witness.Constraint as I
import Data.Witness.Either as I
import Data.Witness.Finite as I
import Data.Witness.HList as I
import Data.Witness.Kind as I
import Data.Witness.List as I
import Data.Witness.ListElement as I
import Data.Witness.Nat as I
import Data.Witness.Representative as I
import Data.Witness.Single as I
import Data.Witness.Submap as I
import Data.Witness.Symbol as I
import Data.Witness.WitnessDict as I
import Data.Witness.WitnessFDict as I
import Data.Witness.WitnessValue as I
import Prelude

-- | See whether two represented and witnessed types are the same.
matchIs ::
       forall w a b. (TestEquality w, Is w a, Is w b)
    => Proxy w
    -> Maybe (a :~: b)
matchIs _ = testEquality r r
  where
    r :: forall t. (Is w t)
      => w t
    r = representative