-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Unary natural numbers relying on the singletons infrastructure.
--   
--   Unary natural number relying on the <a>singletons</a> infrastructure.
--   More information about the general usage of singletons can be found on
--   the <a>singletons github</a> page.
@package singleton-nats
@version 0.4.2

module Data.Nat
data Nat
Z :: Nat
S :: Nat -> Nat
type family NatPlus (a_an6Y :: Nat) (a_an6Z :: Nat) :: Nat
type family NatMul (a_an75 :: Nat) (a_an76 :: Nat) :: Nat
type family NatMinus (a_an6R :: Nat) (a_an6S :: Nat) :: Nat
type family NatAbs (a_an6O :: Nat) :: Nat
type family NatSignum (a_an6M :: Nat) :: Nat
natPlus :: Nat -> Nat -> Nat
natMul :: Nat -> Nat -> Nat
natMinus :: Nat -> Nat -> Nat
natAbs :: Nat -> Nat
natSignum :: Nat -> Nat

-- | Converts a runtime <a>Integer</a> to an existentially wrapped
--   <a>Nat</a>. Returns <a>Nothing</a> if the argument is negative
someNatVal :: Integer -> Maybe (SomeSing Nat)
type SNat = (Sing :: Nat -> Type)

-- | The singleton kind-indexed data family.
data family Sing (a :: k) :: Type
class PNum a
class SNum a
data SSym0 :: (~>) Nat Nat
[SSym0KindInference] :: forall t6989586621679098622 arg_an6L. SameKind (Apply SSym0 arg_an6L) (SSym1 arg_an6L) => SSym0 t6989586621679098622
type SSym1 (t6989586621679098622 :: Nat) = S t6989586621679098622
type ZSym0 = Z

-- | Provides a shorthand for <a>Nat</a>-s using <a>GHC.TypeLits</a>, for
--   example:
--   
--   <pre>
--   &gt;&gt;&gt; :kind! Lit 3
--   Lit 3 :: Nat
--   = 'S ('S ('S 'Z))
--   </pre>
type family Lit n
data LitSym0 :: (~>) Nat Nat
[LitSym0KindInference] :: forall n6989586621679117734 arg_aHrc. SameKind (Apply LitSym0 arg_aHrc) (LitSym1 arg_aHrc) => LitSym0 n6989586621679117734
type LitSym1 (n6989586621679117734 :: Nat) = Lit n6989586621679117734
type SLit n = Sing (Lit n)

-- | Shorthand for <a>SNat</a> literals using <tt>TypeApplications</tt>.
--   
--   <pre>
--   &gt;&gt;&gt; :set -XTypeApplications
--   
--   &gt;&gt;&gt; sLit @5
--   SS (SS (SS (SS (SS SZ))))
--   </pre>
sLit :: forall (n :: Nat). SingI (Lit n) => Sing (Lit n)
instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.LitSym0
instance GHC.Classes.Ord Data.Nat.Nat
instance GHC.Show.Show Data.Nat.Nat
instance GHC.Classes.Eq Data.Nat.Nat
instance Data.Singletons.ShowSing.ShowSing Data.Nat.Nat => GHC.Show.Show (Data.Singletons.Internal.Sing z)
instance GHC.Classes.Eq (Data.Nat.SNat n)
instance GHC.Classes.Ord (Data.Nat.SNat n)
instance Data.Singletons.Prelude.Eq.PEq Data.Nat.Nat
instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.FromInteger_6989586621679104751Sym0
instance Data.Singletons.Prelude.Num.PNum Data.Nat.Nat
instance Data.Singletons.Prelude.Num.SNum Data.Nat.Nat
instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.Let6989586621679104745Scrutinee_6989586621679090021Sym0
instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.Signum_6989586621679104739Sym0
instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.Abs_6989586621679104730Sym0
instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.TFHelper_6989586621679104720Sym0
instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings (Data.Nat.TFHelper_6989586621679104720Sym1 a6989586621679104718)
instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.TFHelper_6989586621679104704Sym0
instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings (Data.Nat.TFHelper_6989586621679104704Sym1 a6989586621679104702)
instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.TFHelper_6989586621679104688Sym0
instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings (Data.Nat.TFHelper_6989586621679104688Sym1 a6989586621679104686)
instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.Compare_6989586621679104102Sym0
instance Data.Singletons.Prelude.Ord.POrd Data.Nat.Nat
instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings (Data.Nat.Compare_6989586621679104102Sym1 a6989586621679104100)
instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.ShowsPrec_6989586621679102404Sym0
instance Data.Singletons.Prelude.Show.PShow Data.Nat.Nat
instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings (Data.Nat.ShowsPrec_6989586621679102404Sym1 a6989586621679102401)
instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings (Data.Nat.ShowsPrec_6989586621679102404Sym2 a6989586621679102402 a6989586621679102401)
instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings (Data.Nat.NatMulSym1 a6989586621679098643)
instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.NatMulSym0
instance Data.Singletons.Internal.SingI Data.Nat.NatMulSym0
instance Data.Singletons.Internal.SingI d => Data.Singletons.Internal.SingI (Data.Nat.NatMulSym1 d)
instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings (Data.Nat.NatPlusSym1 a6989586621679098636)
instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.NatPlusSym0
instance Data.Singletons.Internal.SingI Data.Nat.NatPlusSym0
instance Data.Singletons.Internal.SingI d => Data.Singletons.Internal.SingI (Data.Nat.NatPlusSym1 d)
instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings (Data.Nat.NatMinusSym1 a6989586621679098629)
instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.NatMinusSym0
instance Data.Singletons.Internal.SingI Data.Nat.NatMinusSym0
instance Data.Singletons.Internal.SingI d => Data.Singletons.Internal.SingI (Data.Nat.NatMinusSym1 d)
instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.NatAbsSym0
instance Data.Singletons.Internal.SingI Data.Nat.NatAbsSym0
instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.NatSignumSym0
instance Data.Singletons.Internal.SingI Data.Nat.NatSignumSym0
instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.SSym0
instance Data.Singletons.Internal.SingI Data.Nat.SSym0
instance GHC.Num.Num Data.Nat.Nat
instance Data.Singletons.Internal.SingKind Data.Nat.Nat
instance Data.Singletons.Prelude.Show.SShow Data.Nat.Nat => Data.Singletons.Prelude.Show.SShow Data.Nat.Nat
instance Data.Singletons.Prelude.Ord.SOrd Data.Nat.Nat => Data.Singletons.Prelude.Ord.SOrd Data.Nat.Nat
instance Data.Singletons.Prelude.Eq.SEq Data.Nat.Nat => Data.Singletons.Prelude.Eq.SEq Data.Nat.Nat
instance Data.Singletons.Decide.SDecide Data.Nat.Nat => Data.Singletons.Decide.SDecide Data.Nat.Nat
instance Data.Singletons.Internal.SingI 'Data.Nat.Z
instance Data.Singletons.Internal.SingI n => Data.Singletons.Internal.SingI ('Data.Nat.S n)
instance Data.Singletons.Internal.SingI (Data.Singletons.Internal.TyCon1 'Data.Nat.S)
