{-# LANGUAGE TypeOperators #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE FlexibleInstances #-} module Data.Tapioca.Internal.Types.Match where import GHC.TypeLits import Data.Kind -- | Type family to determine whether an arbitrary selector matches that of our mapping type family Match (t :: Type) (s :: Symbol) :: Bool type family OrdBool (o :: Ordering) :: Bool where OrdBool 'LT = 'False OrdBool 'EQ = 'True OrdBool 'GT = 'False type EqSymbol s s' = OrdBool (CmpSymbol s s')