cmptype-0.1.0.0: src/Type/Compare.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
module Type.Compare where
import GHC.TypeLits
------------------------------------------------------------------------------
-- | Compare two types. For 'Nat's and 'Symbol's, this uses the built-in
-- comparisons. For all other types, "Type.Compare.Plugin" will solve it.
--
-- The actual /meaning/ of comparing types is left to your imagination. But it's
-- deterministic so that's good enough.
type family CmpType (a :: k) (b :: k) :: Ordering where
CmpType a a = 'EQ
CmpType (a :: Nat) b = CmpNat a b
CmpType (a :: Symbol) b = CmpSymbol a b