{-# LANGUAGE Safe #-}
{-# LANGUAGE ExplicitNamespaces #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE NoStarIsType #-}

-- |
--
-- GHC's @DataKinds@ language extension lifts data constructors, natural
-- numbers, and strings to the type level. This module provides the
-- primitives needed for working with type-level numbers (the 'Nat' kind),
-- strings (the 'Symbol' kind), and characters (the 'Char' kind). It also defines the 'TypeError' type
-- family, a feature that makes use of type-level strings to support user
-- defined type errors.
--
-- For now, this module is the API for working with type-level literals.
-- However, please note that it is a work in progress and is subject to change.
-- Once the design of the @DataKinds@ feature is more stable, this will be
-- considered only an internal GHC module, and the programmer interface for
-- working with type-level data will be defined in a separate library.
--
-- @since 4.6.0.0
--

module GHC.TypeLits
    (-- *  Kinds
     Natural,
     Nat,
     Symbol,
     -- *  Linking type and value level
     KnownNat(natSing),
     natVal,
     natVal',
     KnownSymbol(symbolSing),
     symbolVal,
     symbolVal',
     KnownChar(charSing),
     charVal,
     charVal',
     SomeNat(..),
     SomeSymbol(..),
     SomeChar(..),
     someNatVal,
     someSymbolVal,
     someCharVal,
     sameNat,
     sameSymbol,
     sameChar,
     decideNat,
     decideSymbol,
     decideChar,
     OrderingI(..),
     cmpNat,
     cmpSymbol,
     cmpChar,
     -- **  Singleton values
     SNat,
     SSymbol,
     SChar,
     pattern SNat,
     pattern SSymbol,
     pattern SChar,
     fromSNat,
     fromSSymbol,
     fromSChar,
     withSomeSNat,
     withSomeSSymbol,
     withSomeSChar,
     withKnownNat,
     withKnownSymbol,
     withKnownChar,
     -- *  Functions on type literals
     type (<=),
     type (<=?),
     type (+),
     type (*),
     type (^),
     type (-),
     type Div,
     type Mod,
     type Log2,
     AppendSymbol,
     CmpNat,
     CmpSymbol,
     CmpChar,
     ConsSymbol,
     UnconsSymbol,
     CharToNat,
     NatToChar,
     -- *  User-defined type errors
     TypeError,
     ErrorMessage(..)
     ) where

import GHC.Internal.TypeLits