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

-- | Constraint manipulation
--   
--   GHC 7.4 gave us the ability to talk about ConstraintKinds.
--   They stopped crashing the compiler in GHC 7.6.
--   
--   This package provides a vocabulary for working with them.
@package constraints
@version 0.14.2

-- | ConstraintKinds made type classes into types of a new kind,
--   Constraint.
--   
--   
--   Eq :: * -> Constraint
--   Ord :: * -> Constraint
--   Monad :: (* -> *) -> Constraint
--   
--   
--   The need for this extension was first publicized in the paper
--   
--   Scrap your boilerplate with class: extensible generic functions
--   
--   by Ralf Lämmel and Simon Peyton Jones in 2005, which shoehorned all
--   the things they needed into a custom Sat typeclass.
--   
--   With ConstraintKinds we can put into code a lot of tools for
--   manipulating these new types without such awkward workarounds.
module Data.Constraint

-- | The kind of lifted constraints
type Constraint = CONSTRAINT LiftedRep

-- | Values of type Dict p capture a dictionary for a
--   constraint of type p.
--   
--   e.g.
--   
--   
--   Dict :: Dict (Eq Int)
--   
--   
--   captures a dictionary that proves we have an:
--   
--   
--   instance Eq Int
--   
--   
--   Pattern matching on the Dict constructor will bring this
--   instance into scope.
data Dict a
[Dict] :: forall a. a => Dict a

-- | Witnesses that a value of type e contains evidence of the
--   constraint c.
--   
--   Mainly intended to allow (\\) to be overloaded, since it's a
--   useful operator.
class HasDict c e | e -> c
evidence :: HasDict c e => e -> Dict c

-- | From a Dict, takes a value in an environment where the instance
--   witnessed by the Dict is in scope, and evaluates it.
--   
--   Essentially a deconstruction of a Dict into its
--   continuation-style form.
--   
--   Can also be used to deconstruct an entailment, a :- b,
--   using a context a.
--   
--   
--   withDict :: Dict c -> (c => r) -> r
--   withDict :: a => (a :- c) -> (c => r) -> r
--   
withDict :: HasDict c e => e -> (c => r) -> r

-- | Operator version of withDict, with the arguments flipped
(\\) :: HasDict c e => (c => r) -> e -> r
infixl 1 \\

-- | This is the type of entailment.
--   
--   a :- b is read as a "entails" b.
--   
--   With this we can actually build a category for Constraint
--   resolution.
--   
--   e.g.
--   
--   Because Eq a is a superclass of Ord a,
--   we can show that Ord a entails Eq a.
--   
--   Because instance Ord a => Ord [a] exists, we
--   can show that Ord a entails Ord [a] as
--   well.
--   
--   This relationship is captured in the :- entailment type here.
--   
--   Since p :- p and entailment composes, :- forms
--   the arrows of a Category of constraints. However,
--   Category only became sufficiently general to support this
--   instance in GHC 7.8, so prior to 7.8 this instance is unavailable.
--   
--   But due to the coherence of instance resolution in Haskell, this
--   Category has some very interesting properties. Notably, in the
--   absence of IncoherentInstances, this category is "thin",
--   which is to say that between any two objects (constraints) there is at
--   most one distinguishable arrow.
--   
--   This means that for instance, even though there are two ways to derive
--   Ord a :- Eq [a], the answers from these
--   two paths _must_ by construction be equal. This is a property that
--   Haskell offers that is pretty much unique in the space of languages
--   with things they call "type classes".
--   
--   What are the two ways?
--   
--   Well, we can go from Ord a :- Eq a via
--   the superclass relationship, and then from Eq a :-
--   Eq [a] via the instance, or we can go from Ord
--   a :- Ord [a] via the instance then from
--   Ord [a] :- Eq [a] through the superclass
--   relationship and this diagram by definition must "commute".
--   
--   Diagrammatically,
--   
--   
--          Ord a
--      ins /     \ cls
--         v       v
--   Ord [a]     Eq a
--      cls \     / ins
--           v   v
--          Eq [a]
--   
--   
--   This safety net ensures that pretty much anything you can write with
--   this library is sensible and can't break any assumptions on the behalf
--   of library authors.
newtype a :- b
Sub :: (a => Dict b) -> (:-) a b
infixr 9 :-

-- | Type entailment, as written with a single character.
type (⊢) = (:-)
infixr 9 ⊢

-- | The internal hom for the category of constraints.
--   
--   This version can be passed around inside Dict, whereas (a => b) is
--   impredicative
--   
--   
--   foo :: Dict (Ord a => Eq a)
--   foo = Dict
--   
--   
--   fails to typecheck due to the lack of impredicative polymorphism, but
--   
--   
--   foo :: Dict (Ord a |- Eq a)
--   foo = Dict
--   
--   
--   typechecks just fine.
class p => q => p |- q

-- | due to the hack for the kind of (,) in the current version of
--   GHC we can't actually make instances for (,) :: Constraint ->
--   Constraint -> Constraint, but we can define an equivalent
--   type, that converts back and forth to (,), and lets you hang
--   instances.
class (p, q) => p & q

-- | Weakening a constraint product
--   
--   The category of constraints is Cartesian. We can forget information.
weaken1 :: (a, b) :- a

-- | Weakening a constraint product
--   
--   The category of constraints is Cartesian. We can forget information.
weaken2 :: (a, b) :- b

-- | Contracting a constraint / diagonal morphism
--   
--   The category of constraints is Cartesian. We can reuse information.
contract :: a :- (a, a)
strengthen1 :: Dict b -> (a :- c) -> a :- (b, c)
strengthen2 :: Dict b -> (a :- c) -> a :- (c, b)

-- | Constraint product
--   
--   
--   trans weaken1 (f &&& g) = f
--   trans weaken2 (f &&& g) = g
--   
(&&&) :: (a :- b) -> (a :- c) -> a :- (b, c)

-- | due to the hack for the kind of (,) in the current version of
--   GHC we can't actually make instances for (,) :: Constraint ->
--   Constraint -> Constraint, but (,) is a bifunctor on
--   the category of constraints. This lets us map over both sides.
(***) :: (a :- b) -> (c :- d) -> (a, c) :- (b, d)

-- | Transitivity of entailment
--   
--   If we view (:-) as a Constraint-indexed category, then
--   this is (.)
trans :: (b :- c) -> (a :- b) -> a :- c

-- | Reflexivity of entailment
--   
--   If we view (:-) as a Constraint-indexed category, then
--   this is id
refl :: a :- a

-- | Convert a quantified constraint into an entailment.
implied :: (a => b) => a :- b

-- | Any inhabits every kind, including Constraint but is
--   uninhabited, making it impossible to define an instance.
class Any :: Constraint => Bottom
no :: Bottom => a

-- | Every constraint implies truth
--   
--   These are the terminal arrows of the category, and () is the
--   terminal object.
--   
--   Given any constraint there is a unique entailment of the ()
--   constraint from that constraint.
top :: a :- ()

-- | This demonstrates the law of classical logic "ex falso
--   quodlibet"
bottom :: Bottom :- a

-- | Apply an entailment to a dictionary.
--   
--   From a category theoretic perspective Dict is a functor that
--   maps from the category of constraints (with arrows in :-) to
--   the category Hask of Haskell data types.
mapDict :: (a :- b) -> Dict a -> Dict b

-- | This functor is fully faithful, which is to say that given any
--   function you can write Dict a -> Dict b there also exists
--   an entailment a :- b in the category of constraints that you
--   can build.
unmapDict :: (Dict a -> Dict b) -> a :- b

-- | Reify the relationship between a class and its superclass constraints
--   as a class
--   
--   Given a definition such as
--   
--   
--   class Foo a => Bar a
--   
--   
--   you can capture the relationship between 'Bar a' and its superclass
--   'Foo a' with
--   
--   
--   instance Class (Foo a) (Bar a) where cls = Sub Dict
--   
--   
--   Now the user can use 'cls :: Bar a :- Foo a'
class Class b h | h -> b
cls :: Class b h => h :- b

-- | Reify the relationship between an instance head and its body as a
--   class
--   
--   Given a definition such as
--   
--   
--   instance Foo a => Foo [a]
--   
--   
--   you can capture the relationship between the instance head and its
--   body with
--   
--   
--   instance Foo a :=> Foo [a] where ins = Sub Dict
--   
class b :=> h | h -> b
ins :: (:=>) b h => b :- h
infixr 9 :=>
instance (p, q) => p Data.Constraint.& q
instance GHC.Internal.Bits.Bits a Data.Constraint.:=> GHC.Internal.Bits.Bits (GHC.Internal.Data.Functor.Identity.Identity a)
instance forall k a (b :: k). GHC.Internal.Bits.Bits a Data.Constraint.:=> GHC.Internal.Bits.Bits (GHC.Internal.Data.Functor.Const.Const a b)
instance GHC.Internal.Enum.Bounded a Data.Constraint.:=> GHC.Internal.Enum.Bounded (GHC.Internal.Data.Functor.Identity.Identity a)
instance forall k a (b :: k). GHC.Internal.Enum.Bounded a Data.Constraint.:=> GHC.Internal.Enum.Bounded (GHC.Internal.Data.Functor.Const.Const a b)
instance (GHC.Internal.Enum.Bounded a, GHC.Internal.Enum.Bounded b) Data.Constraint.:=> GHC.Internal.Enum.Bounded (a, b)
instance (GHC.Classes.Eq a, GHC.Classes.Eq b) Data.Constraint.:=> GHC.Classes.Eq (a, b)
instance (GHC.Classes.Eq a, GHC.Classes.Eq b) Data.Constraint.:=> GHC.Classes.Eq (GHC.Internal.Data.Either.Either a b)
instance (GHC.Internal.Base.Monoid a, GHC.Internal.Base.Monoid b) Data.Constraint.:=> GHC.Internal.Base.Monoid (a, b)
instance (GHC.Classes.Ord a, GHC.Classes.Ord b) Data.Constraint.:=> GHC.Classes.Ord (a, b)
instance (GHC.Classes.Ord a, GHC.Classes.Ord b) Data.Constraint.:=> GHC.Classes.Ord (GHC.Internal.Data.Either.Either a b)
instance (GHC.Internal.Read.Read a, GHC.Internal.Read.Read b) Data.Constraint.:=> GHC.Internal.Read.Read (a, b)
instance (GHC.Internal.Read.Read a, GHC.Internal.Read.Read b) Data.Constraint.:=> GHC.Internal.Read.Read (GHC.Internal.Data.Either.Either a b)
instance (GHC.Internal.Real.Integral a, GHC.Internal.Read.Read a) Data.Constraint.:=> GHC.Internal.Read.Read (GHC.Internal.Real.Ratio a)
instance (GHC.Internal.Base.Semigroup a, GHC.Internal.Base.Semigroup b) Data.Constraint.:=> GHC.Internal.Base.Semigroup (a, b)
instance (GHC.Internal.Show.Show a, GHC.Internal.Show.Show b) Data.Constraint.:=> GHC.Internal.Show.Show (a, b)
instance (GHC.Internal.Show.Show a, GHC.Internal.Show.Show b) Data.Constraint.:=> GHC.Internal.Show.Show (GHC.Internal.Data.Either.Either a b)
instance (GHC.Internal.Real.Integral a, GHC.Internal.Show.Show a) Data.Constraint.:=> GHC.Internal.Show.Show (GHC.Internal.Real.Ratio a)
instance (b Data.Constraint.:=> a) => (() :: Constraint) Data.Constraint.:=> (b Data.Constraint.:=> a)
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.Alternative []
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.Alternative GHC.Internal.Maybe.Maybe
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.Applicative []
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.Applicative GHC.Internal.Maybe.Maybe
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.Applicative (GHC.Internal.Data.Either.Either a)
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.Applicative ((->) a)
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.Applicative GHC.Types.IO
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Bits.Bits GHC.Types.Bool
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Bits.Bits GHC.Types.Int
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Bits.Bits GHC.Num.Integer.Integer
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Bits.Bits GHC.Types.Word
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Bits.Bits GHC.Num.Natural.Natural
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Enum.Bounded ()
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Enum.Bounded GHC.Types.Ordering
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Enum.Bounded GHC.Types.Bool
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Enum.Bounded GHC.Types.Int
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Enum.Bounded GHC.Types.Char
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Enum.Bounded GHC.Types.Word
instance (() :: Constraint) Data.Constraint.:=> (() :: Constraint)
instance Data.Constraint.Class b a => (() :: Constraint) Data.Constraint.:=> Data.Constraint.Class b a
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Enum.Enum ()
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Enum.Enum GHC.Types.Bool
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Enum.Enum GHC.Types.Ordering
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Enum.Enum GHC.Types.Char
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Enum.Enum GHC.Types.Int
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Enum.Enum GHC.Num.Integer.Integer
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Enum.Enum GHC.Types.Float
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Enum.Enum GHC.Types.Double
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Enum.Enum GHC.Types.Word
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Enum.Enum GHC.Num.Natural.Natural
instance (() :: Constraint) Data.Constraint.:=> GHC.Classes.Eq ()
instance (() :: Constraint) Data.Constraint.:=> GHC.Classes.Eq GHC.Types.Int
instance (() :: Constraint) Data.Constraint.:=> GHC.Classes.Eq GHC.Types.Bool
instance (() :: Constraint) Data.Constraint.:=> GHC.Classes.Eq GHC.Num.Integer.Integer
instance (() :: Constraint) Data.Constraint.:=> GHC.Classes.Eq GHC.Types.Float
instance (() :: Constraint) Data.Constraint.:=> GHC.Classes.Eq GHC.Types.Double
instance (() :: Constraint) Data.Constraint.:=> GHC.Classes.Eq (Data.Constraint.Dict a)
instance (() :: Constraint) Data.Constraint.:=> GHC.Classes.Eq (a Data.Constraint.:- b)
instance (() :: Constraint) Data.Constraint.:=> GHC.Classes.Eq GHC.Types.Word
instance (() :: Constraint) Data.Constraint.:=> GHC.Classes.Eq GHC.Num.Natural.Natural
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Float.Floating GHC.Types.Float
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Float.Floating GHC.Types.Double
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Real.Fractional GHC.Types.Float
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Real.Fractional GHC.Types.Double
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.Functor []
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.Functor GHC.Internal.Maybe.Maybe
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.Functor (GHC.Internal.Data.Either.Either a)
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.Functor ((->) a)
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.Functor ((,) a)
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.Functor GHC.Types.IO
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.Functor GHC.Internal.Data.Functor.Identity.Identity
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.Functor (GHC.Internal.Data.Functor.Const.Const a)
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Real.Integral GHC.Types.Int
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Real.Integral GHC.Num.Integer.Integer
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Real.Integral GHC.Types.Word
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Real.Integral GHC.Num.Natural.Natural
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.Monad []
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.Monad ((->) a)
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.Monad (GHC.Internal.Data.Either.Either a)
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.Monad GHC.Types.IO
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.Monad GHC.Internal.Data.Functor.Identity.Identity
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.MonadPlus []
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.MonadPlus GHC.Internal.Maybe.Maybe
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.Monoid ()
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.Monoid GHC.Types.Ordering
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.Monoid [a]
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Num.Num GHC.Types.Int
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Num.Num GHC.Num.Integer.Integer
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Num.Num GHC.Types.Float
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Num.Num GHC.Types.Double
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Num.Num GHC.Types.Word
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Num.Num GHC.Num.Natural.Natural
instance (() :: Constraint) Data.Constraint.:=> GHC.Classes.Ord ()
instance (() :: Constraint) Data.Constraint.:=> GHC.Classes.Ord GHC.Types.Bool
instance (() :: Constraint) Data.Constraint.:=> GHC.Classes.Ord GHC.Types.Int
instance (() :: Constraint) Data.Constraint.:=> GHC.Classes.Ord GHC.Num.Integer.Integer
instance (() :: Constraint) Data.Constraint.:=> GHC.Classes.Ord GHC.Types.Float
instance (() :: Constraint) Data.Constraint.:=> GHC.Classes.Ord GHC.Types.Double
instance (() :: Constraint) Data.Constraint.:=> GHC.Classes.Ord GHC.Types.Char
instance (() :: Constraint) Data.Constraint.:=> GHC.Classes.Ord (Data.Constraint.Dict a)
instance (() :: Constraint) Data.Constraint.:=> GHC.Classes.Ord (a Data.Constraint.:- b)
instance (() :: Constraint) Data.Constraint.:=> GHC.Classes.Ord GHC.Types.Word
instance (() :: Constraint) Data.Constraint.:=> GHC.Classes.Ord GHC.Num.Natural.Natural
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Read.Read ()
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Read.Read GHC.Types.Bool
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Read.Read GHC.Types.Ordering
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Read.Read GHC.Types.Char
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Read.Read GHC.Types.Int
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Read.Read GHC.Types.Word
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Read.Read GHC.Num.Natural.Natural
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Real.Real GHC.Types.Int
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Real.Real GHC.Num.Integer.Integer
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Real.Real GHC.Types.Float
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Real.Real GHC.Types.Double
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Real.Real GHC.Types.Word
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Real.Real GHC.Num.Natural.Natural
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Float.RealFloat GHC.Types.Float
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Float.RealFloat GHC.Types.Double
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Real.RealFrac GHC.Types.Float
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Real.RealFrac GHC.Types.Double
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.Semigroup ()
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.Semigroup GHC.Types.Ordering
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.Semigroup [a]
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Base.Semigroup (Data.Constraint.Dict a)
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Show.Show ()
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Show.Show GHC.Types.Bool
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Show.Show GHC.Types.Ordering
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Show.Show GHC.Types.Char
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Show.Show GHC.Types.Int
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Show.Show (Data.Constraint.Dict a)
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Show.Show (a Data.Constraint.:- b)
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Show.Show GHC.Types.Word
instance (() :: Constraint) Data.Constraint.:=> GHC.Internal.Show.Show GHC.Num.Natural.Natural
instance GHC.Internal.Enum.Enum a Data.Constraint.:=> GHC.Internal.Enum.Enum (GHC.Internal.Data.Functor.Identity.Identity a)
instance forall k a (b :: k). GHC.Internal.Enum.Enum a Data.Constraint.:=> GHC.Internal.Enum.Enum (GHC.Internal.Data.Functor.Const.Const a b)
instance GHC.Classes.Eq a Data.Constraint.:=> GHC.Classes.Eq [a]
instance GHC.Classes.Eq a Data.Constraint.:=> GHC.Classes.Eq (GHC.Internal.Maybe.Maybe a)
instance GHC.Classes.Eq a Data.Constraint.:=> GHC.Classes.Eq (Data.Complex.Complex a)
instance GHC.Classes.Eq a Data.Constraint.:=> GHC.Classes.Eq (GHC.Internal.Real.Ratio a)
instance GHC.Classes.Eq a Data.Constraint.:=> GHC.Classes.Eq (GHC.Internal.Data.Functor.Identity.Identity a)
instance forall k a (b :: k). GHC.Classes.Eq a Data.Constraint.:=> GHC.Classes.Eq (GHC.Internal.Data.Functor.Const.Const a b)
instance GHC.Internal.Float.Floating a Data.Constraint.:=> GHC.Internal.Float.Floating (GHC.Internal.Data.Functor.Identity.Identity a)
instance forall k a (b :: k). GHC.Internal.Float.Floating a Data.Constraint.:=> GHC.Internal.Float.Floating (GHC.Internal.Data.Functor.Const.Const a b)
instance GHC.Internal.Real.Fractional a Data.Constraint.:=> GHC.Internal.Real.Fractional (GHC.Internal.Data.Functor.Identity.Identity a)
instance forall k a (b :: k). GHC.Internal.Real.Fractional a Data.Constraint.:=> GHC.Internal.Real.Fractional (GHC.Internal.Data.Functor.Const.Const a b)
instance GHC.Internal.Real.Integral a Data.Constraint.:=> GHC.Internal.Enum.Enum (GHC.Internal.Real.Ratio a)
instance GHC.Internal.Real.Integral a Data.Constraint.:=> GHC.Internal.Real.Fractional (GHC.Internal.Real.Ratio a)
instance GHC.Internal.Real.Integral a Data.Constraint.:=> GHC.Internal.Real.Integral (GHC.Internal.Data.Functor.Identity.Identity a)
instance forall k a (b :: k). GHC.Internal.Real.Integral a Data.Constraint.:=> GHC.Internal.Real.Integral (GHC.Internal.Data.Functor.Const.Const a b)
instance GHC.Internal.Real.Integral a Data.Constraint.:=> GHC.Internal.Num.Num (GHC.Internal.Real.Ratio a)
instance GHC.Internal.Real.Integral a Data.Constraint.:=> GHC.Classes.Ord (GHC.Internal.Real.Ratio a)
instance GHC.Internal.Real.Integral a Data.Constraint.:=> GHC.Internal.Real.Real (GHC.Internal.Real.Ratio a)
instance GHC.Internal.Real.Integral a Data.Constraint.:=> GHC.Internal.Real.RealFrac (GHC.Internal.Real.Ratio a)
instance GHC.Internal.Base.Monad m Data.Constraint.:=> GHC.Internal.Base.Applicative (Control.Applicative.WrappedMonad m)
instance GHC.Internal.Base.Monad m Data.Constraint.:=> GHC.Internal.Base.Functor (Control.Applicative.WrappedMonad m)
instance GHC.Internal.Base.MonadPlus m Data.Constraint.:=> GHC.Internal.Base.Alternative (Control.Applicative.WrappedMonad m)
instance GHC.Internal.Base.Monoid a Data.Constraint.:=> GHC.Internal.Base.Applicative ((,) a)
instance GHC.Internal.Base.Monoid a Data.Constraint.:=> GHC.Internal.Base.Applicative (GHC.Internal.Data.Functor.Const.Const a)
instance GHC.Internal.Base.Monoid a Data.Constraint.:=> GHC.Internal.Base.Monoid (GHC.Internal.Maybe.Maybe a)
instance forall k a (b :: k). GHC.Internal.Base.Monoid a Data.Constraint.:=> GHC.Internal.Base.Monoid (GHC.Internal.Data.Functor.Const.Const a b)
instance GHC.Internal.Base.Monoid a Data.Constraint.:=> GHC.Internal.Base.Monoid (GHC.Internal.Data.Functor.Identity.Identity a)
instance GHC.Internal.Base.Monoid a Data.Constraint.:=> GHC.Internal.Base.Monoid (GHC.Types.IO a)
instance GHC.Internal.Num.Num a Data.Constraint.:=> GHC.Internal.Num.Num (GHC.Internal.Data.Functor.Identity.Identity a)
instance forall k a (b :: k). GHC.Internal.Num.Num a Data.Constraint.:=> GHC.Internal.Num.Num (GHC.Internal.Data.Functor.Const.Const a b)
instance GHC.Classes.Ord a Data.Constraint.:=> GHC.Classes.Ord (GHC.Internal.Maybe.Maybe a)
instance GHC.Classes.Ord a Data.Constraint.:=> GHC.Classes.Ord [a]
instance GHC.Classes.Ord a Data.Constraint.:=> GHC.Classes.Ord (GHC.Internal.Data.Functor.Identity.Identity a)
instance forall k a (b :: k). GHC.Classes.Ord a Data.Constraint.:=> GHC.Classes.Ord (GHC.Internal.Data.Functor.Const.Const a b)
instance GHC.Internal.Read.Read a Data.Constraint.:=> GHC.Internal.Read.Read (Data.Complex.Complex a)
instance GHC.Internal.Read.Read a Data.Constraint.:=> GHC.Internal.Read.Read [a]
instance GHC.Internal.Read.Read a Data.Constraint.:=> GHC.Internal.Read.Read (GHC.Internal.Maybe.Maybe a)
instance GHC.Internal.Read.Read a Data.Constraint.:=> GHC.Internal.Read.Read (GHC.Internal.Data.Functor.Identity.Identity a)
instance forall k a (b :: k). GHC.Internal.Read.Read a Data.Constraint.:=> GHC.Internal.Read.Read (GHC.Internal.Data.Functor.Const.Const a b)
instance GHC.Internal.Float.RealFloat a Data.Constraint.:=> GHC.Internal.Float.Floating (Data.Complex.Complex a)
instance GHC.Internal.Float.RealFloat a Data.Constraint.:=> GHC.Internal.Real.Fractional (Data.Complex.Complex a)
instance GHC.Internal.Float.RealFloat a Data.Constraint.:=> GHC.Internal.Num.Num (Data.Complex.Complex a)
instance GHC.Internal.Float.RealFloat a Data.Constraint.:=> GHC.Internal.Float.RealFloat (GHC.Internal.Data.Functor.Identity.Identity a)
instance forall k a (b :: k). GHC.Internal.Float.RealFloat a Data.Constraint.:=> GHC.Internal.Float.RealFloat (GHC.Internal.Data.Functor.Const.Const a b)
instance GHC.Internal.Real.RealFrac a Data.Constraint.:=> GHC.Internal.Real.RealFrac (GHC.Internal.Data.Functor.Identity.Identity a)
instance forall k a (b :: k). GHC.Internal.Real.RealFrac a Data.Constraint.:=> GHC.Internal.Real.RealFrac (GHC.Internal.Data.Functor.Const.Const a b)
instance GHC.Internal.Real.Real a Data.Constraint.:=> GHC.Internal.Real.Real (GHC.Internal.Data.Functor.Identity.Identity a)
instance forall k a (b :: k). GHC.Internal.Real.Real a Data.Constraint.:=> GHC.Internal.Real.Real (GHC.Internal.Data.Functor.Const.Const a b)
instance GHC.Internal.Base.Semigroup a Data.Constraint.:=> GHC.Internal.Base.Semigroup (GHC.Internal.Maybe.Maybe a)
instance forall k a (b :: k). GHC.Internal.Base.Semigroup a Data.Constraint.:=> GHC.Internal.Base.Semigroup (GHC.Internal.Data.Functor.Const.Const a b)
instance GHC.Internal.Base.Semigroup a Data.Constraint.:=> GHC.Internal.Base.Semigroup (GHC.Internal.Data.Functor.Identity.Identity a)
instance GHC.Internal.Base.Semigroup a Data.Constraint.:=> GHC.Internal.Base.Semigroup (GHC.Types.IO a)
instance GHC.Internal.Show.Show a Data.Constraint.:=> GHC.Internal.Show.Show (Data.Complex.Complex a)
instance GHC.Internal.Show.Show a Data.Constraint.:=> GHC.Internal.Show.Show [a]
instance GHC.Internal.Show.Show a Data.Constraint.:=> GHC.Internal.Show.Show (GHC.Internal.Maybe.Maybe a)
instance GHC.Internal.Show.Show a Data.Constraint.:=> GHC.Internal.Show.Show (GHC.Internal.Data.Functor.Identity.Identity a)
instance forall k a (b :: k). GHC.Internal.Show.Show a Data.Constraint.:=> GHC.Internal.Show.Show (GHC.Internal.Data.Functor.Const.Const a b)
instance a Data.Constraint.:=> GHC.Internal.Enum.Bounded (Data.Constraint.Dict a)
instance a Data.Constraint.:=> GHC.Internal.Enum.Enum (Data.Constraint.Dict a)
instance a Data.Constraint.:=> GHC.Internal.Base.Monoid (Data.Constraint.Dict a)
instance a Data.Constraint.:=> GHC.Internal.Read.Read (Data.Constraint.Dict a)
instance c => Data.Boring.Boring (Data.Constraint.Dict c)
instance a => GHC.Internal.Enum.Bounded (Data.Constraint.Dict a)
instance GHC.Internal.Control.Category.Category (Data.Constraint.:-)
instance Data.Constraint.Class (GHC.Internal.Base.Applicative f) (GHC.Internal.Base.Alternative f)
instance Data.Constraint.Class (GHC.Internal.Base.Applicative f) (GHC.Internal.Base.Monad f)
instance Data.Constraint.Class (GHC.Internal.Real.Real a, GHC.Internal.Enum.Enum a) (GHC.Internal.Real.Integral a)
instance Data.Constraint.Class (GHC.Internal.Base.Monad f, GHC.Internal.Base.Alternative f) (GHC.Internal.Base.MonadPlus f)
instance Data.Constraint.Class (GHC.Internal.Num.Num a, GHC.Classes.Ord a) (GHC.Internal.Real.Real a)
instance Data.Constraint.Class (GHC.Internal.Real.RealFrac a, GHC.Internal.Float.Floating a) (GHC.Internal.Float.RealFloat a)
instance Data.Constraint.Class (GHC.Internal.Real.Real a, GHC.Internal.Real.Fractional a) (GHC.Internal.Real.RealFrac a)
instance Data.Constraint.Class (() :: Constraint) (b Data.Constraint.:=> a)
instance Data.Constraint.Class (() :: Constraint) (GHC.Internal.Enum.Bounded a)
instance Data.Constraint.Class (() :: Constraint) (() :: Constraint)
instance Data.Constraint.Class (() :: Constraint) (Data.Constraint.Class b a)
instance Data.Constraint.Class (() :: Constraint) (GHC.Internal.Enum.Enum a)
instance Data.Constraint.Class (() :: Constraint) (GHC.Classes.Eq a)
instance Data.Constraint.Class (() :: Constraint) (GHC.Internal.Base.Functor f)
instance Data.Constraint.Class (() :: Constraint) (GHC.Internal.Num.Num a)
instance Data.Constraint.Class (() :: Constraint) (GHC.Internal.Read.Read a)
instance Data.Constraint.Class (() :: Constraint) (GHC.Internal.Base.Semigroup a)
instance Data.Constraint.Class (() :: Constraint) (GHC.Internal.Show.Show a)
instance Data.Constraint.Class (GHC.Classes.Eq a) (GHC.Internal.Bits.Bits a)
instance Data.Constraint.Class (GHC.Classes.Eq a) (GHC.Classes.Ord a)
instance Data.Constraint.Class (GHC.Internal.Real.Fractional a) (GHC.Internal.Float.Floating a)
instance Data.Constraint.Class (GHC.Internal.Base.Functor f) (GHC.Internal.Base.Applicative f)
instance Data.Constraint.Class (GHC.Internal.Num.Num a) (GHC.Internal.Real.Fractional a)
instance Data.Constraint.Class (GHC.Internal.Base.Semigroup a) (GHC.Internal.Base.Monoid a)
instance (GHC.Internal.Data.Typeable.Internal.Typeable p, GHC.Internal.Data.Typeable.Internal.Typeable q, p => q) => GHC.Internal.Data.Data.Data (p Data.Constraint.:- q)
instance (GHC.Internal.Data.Typeable.Internal.Typeable p, p) => GHC.Internal.Data.Data.Data (Data.Constraint.Dict p)
instance a => GHC.Internal.Enum.Enum (Data.Constraint.Dict a)
instance GHC.Classes.Eq (a Data.Constraint.:- b)
instance GHC.Classes.Eq (Data.Constraint.Dict a)
instance forall k (a :: k). Data.Constraint.HasDict (GHC.Internal.Data.Typeable.Internal.Typeable k, GHC.Internal.Data.Typeable.Internal.Typeable a) (GHC.Internal.Data.Typeable.Internal.TypeRep a)
instance forall k (a :: k) (b :: k). Data.Constraint.HasDict (GHC.Types.Coercible a b) (GHC.Internal.Data.Type.Coercion.Coercion a b)
instance forall k (a :: k) (b :: k). Data.Constraint.HasDict (a GHC.Types.~ b) (a GHC.Internal.Data.Type.Equality.:~: b)
instance forall k1 k2 (a :: k1) (b :: k2). Data.Constraint.HasDict (a GHC.Types.~~ b) (a GHC.Internal.Data.Type.Equality.:~~: b)
instance Data.Constraint.HasDict a (Data.Constraint.Dict a)
instance a => Data.Constraint.HasDict b (a Data.Constraint.:- b)
instance a => GHC.Internal.Base.Monoid (Data.Constraint.Dict a)
instance a => Control.DeepSeq.NFData (a Data.Constraint.:- b)
instance Control.DeepSeq.NFData (Data.Constraint.Dict c)
instance GHC.Classes.Ord (a Data.Constraint.:- b)
instance GHC.Classes.Ord (Data.Constraint.Dict a)
instance a => GHC.Internal.Read.Read (Data.Constraint.Dict a)
instance GHC.Internal.Base.Semigroup (Data.Constraint.Dict a)
instance GHC.Internal.Show.Show (a Data.Constraint.:- b)
instance GHC.Internal.Show.Show (Data.Constraint.Dict a)
instance (p => q) => p Data.Constraint.|- q

-- | The idea for this trick comes from Dimitrios Vytiniotis.
module Data.Constraint.Deferrable
newtype UnsatisfiedConstraint
UnsatisfiedConstraint :: String -> UnsatisfiedConstraint

-- | Allow an attempt at resolution of a constraint at a later time
class Deferrable p

-- | Resolve a Deferrable constraint with observable failure.
deferEither :: Deferrable p => (p => r) -> Either String r
defer :: Deferrable p => (p => r) -> r
deferred :: Deferrable p :- p

-- | Kind heterogeneous propositional equality. Like :~:, a :~~:
--   b is inhabited by a terminating value if and only if a
--   is the same type as b.
data (a :: k1) :~~: (b :: k2)
[HRefl] :: forall {k1} (a :: k1). a :~~: a
infix 4 :~~:

-- | Propositional equality. If a :~: b is inhabited by some
--   terminating value, then the type a is the same as the type
--   b. To use this equality in practice, pattern-match on the
--   a :~: b to get out the Refl constructor; in the body
--   of the pattern-match, the compiler knows that a ~ b.
data (a :: k) :~: (b :: k)
[Refl] :: forall {k} (a :: k). a :~: a
infix 4 :~:
instance (Data.Constraint.Deferrable.Deferrable a, Data.Constraint.Deferrable.Deferrable b) => Data.Constraint.Deferrable.Deferrable (a, b)
instance (Data.Constraint.Deferrable.Deferrable a, Data.Constraint.Deferrable.Deferrable b, Data.Constraint.Deferrable.Deferrable c) => Data.Constraint.Deferrable.Deferrable (a, b, c)
instance Data.Constraint.Deferrable.Deferrable (() :: Constraint)
instance forall k (a :: k) (b :: k). (GHC.Internal.Data.Typeable.Internal.Typeable k, GHC.Internal.Data.Typeable.Internal.Typeable a, GHC.Internal.Data.Typeable.Internal.Typeable b) => Data.Constraint.Deferrable.Deferrable (a GHC.Types.~ b)
instance forall i j (a :: i) (b :: j). (GHC.Internal.Data.Typeable.Internal.Typeable i, GHC.Internal.Data.Typeable.Internal.Typeable j, GHC.Internal.Data.Typeable.Internal.Typeable a, GHC.Internal.Data.Typeable.Internal.Typeable b) => Data.Constraint.Deferrable.Deferrable (a GHC.Types.~~ b)
instance GHC.Internal.Exception.Type.Exception Data.Constraint.Deferrable.UnsatisfiedConstraint
instance GHC.Internal.Show.Show Data.Constraint.Deferrable.UnsatisfiedConstraint

-- | This module uses a trick to provide quantification over constraints.
module Data.Constraint.Forall
class forall (a :: k). () => p a => Forall (p :: k -> Constraint)

-- | Instantiate a quantified Forall p constraint at type
--   a.
inst :: forall {k} p (a :: k). Forall p :- p a

-- | A representation of the quantified constraint forall a. p (f
--   a).
class Forall ComposeC p f => ForallF (p :: k2 -> Constraint) (f :: k1 -> k2)

-- | Instantiate a quantified ForallF p f constraint at
--   type a.
instF :: forall {k2} {k1} p (f :: k1 -> k2) (a :: k1). ForallF p f :- p (f a)
type Forall1 (p :: k -> Constraint) = Forall p

-- | Instantiate a quantified constraint on kind * -> *. This
--   is now redundant since inst became polykinded.
inst1 :: forall p (f :: Type -> Type). Forall p :- p f

-- | A representation of the quantified constraint forall f a. p (t f
--   a).
class Forall Q p t => ForallT (p :: k4 -> Constraint) (t :: k1 -> k2 -> k3 -> k4)

-- | Instantiate a quantified ForallT p t constraint at
--   types f and a.
instT :: forall k1 k2 k3 k4 p (t :: (k1 -> k2) -> k3 -> k4) (f :: k1 -> k2) (a :: k3). ForallT p t :- p (t f a)

-- | A representation of the quantified constraint forall a1 a2 ... an
--   . p a1 a2 ... an, supporting a variable number of parameters.
type family ForallV :: k -> Constraint

-- | Instantiate a quantified ForallV p constraint as
--   c, where c ~ p a1 a2 ... an.
class InstV (p :: k) c | k c -> p
instV :: InstV p c => ForallV p :- c
forall_ :: (forall (a :: k). () => Dict (p a)) -> Dict (Forall p)
instance forall k2 k1 (p :: k2 -> GHC.Types.Constraint) (f :: k1 -> k2) (a :: k1). p (f a) => Data.Constraint.Forall.ComposeC p f a
instance forall k2 k1 (p :: k2 -> GHC.Types.Constraint) (f :: k1 -> k2). Data.Constraint.Forall.Forall (Data.Constraint.Forall.ComposeC p f) => Data.Constraint.Forall.ForallF p f
instance forall k4 k1 k2 k3 (p :: k4 -> GHC.Types.Constraint) (t :: (k1 -> k2) -> k3 -> k4). Data.Constraint.Forall.Forall (Data.Constraint.Forall.Q p t) => Data.Constraint.Forall.ForallT p t
instance forall k (p :: k). Data.Constraint.Forall.ForallV' p => Data.Constraint.Forall.ForallV_ p
instance forall k (p :: k -> GHC.Types.Constraint). (forall (a :: k). p a) => Data.Constraint.Forall.Forall p
instance (p GHC.Types.~ c) => Data.Constraint.Forall.InstV p c
instance forall k (p :: k -> GHC.Types.Constraint) (a :: k) (c :: GHC.Types.Constraint). (p a GHC.Types.~ c) => Data.Constraint.Forall.InstV p c
instance forall k1 k2 k3 (p :: k1 -> k2 -> k3) (a :: k1) (c :: GHC.Types.Constraint). Data.Constraint.Forall.InstV (p a) c => Data.Constraint.Forall.InstV p c
instance forall k3 k1 k2 (p :: k3 -> GHC.Types.Constraint) (t :: k1 -> k2 -> k3) (a :: k1). Data.Constraint.Forall.Forall (Data.Constraint.Forall.R p t a) => Data.Constraint.Forall.Q p t a
instance forall k3 k1 k2 (p :: k3 -> GHC.Types.Constraint) (t :: k1 -> k2 -> k3) (a :: k1) (b :: k2). p (t a b) => Data.Constraint.Forall.R p t a b

module Data.Constraint.Lifting
class Lifting (p :: k -> Constraint) (f :: k -> k)
lifting :: forall (a :: k). Lifting p f => p a :- p (f a)
class Lifting2 (p :: k -> Constraint) (f :: k -> k -> k)
lifting2 :: forall (a :: k). Lifting2 p f => p a :- Lifting p (f a)
instance Data.Constraint.Lifting.Lifting2 GHC.Internal.Base.Alternative Data.Functor.Compose.Compose
instance Data.Constraint.Lifting.Lifting2 GHC.Internal.Base.Alternative Data.Functor.Product.Product
instance Data.Constraint.Lifting.Lifting2 GHC.Internal.Base.Applicative Data.Functor.Compose.Compose
instance Data.Constraint.Lifting.Lifting2 GHC.Internal.Base.Applicative Data.Functor.Product.Product
instance Data.Constraint.Lifting.Lifting2 Data.Functor.Classes.Eq1 Data.Functor.Product.Product
instance Data.Constraint.Lifting.Lifting2 Data.Functor.Classes.Eq1 Data.Functor.Sum.Sum
instance Data.Constraint.Lifting.Lifting2 GHC.Internal.Data.Foldable.Foldable Data.Functor.Compose.Compose
instance Data.Constraint.Lifting.Lifting2 GHC.Internal.Data.Foldable.Foldable Data.Functor.Product.Product
instance Data.Constraint.Lifting.Lifting2 GHC.Internal.Data.Foldable.Foldable Data.Functor.Sum.Sum
instance Data.Constraint.Lifting.Lifting2 GHC.Internal.Base.Functor Data.Functor.Compose.Compose
instance Data.Constraint.Lifting.Lifting2 GHC.Internal.Base.Functor Data.Functor.Product.Product
instance Data.Constraint.Lifting.Lifting2 GHC.Internal.Base.Functor Data.Functor.Sum.Sum
instance Data.Constraint.Lifting.Lifting2 GHC.Internal.Control.Monad.Fix.MonadFix Data.Functor.Product.Product
instance Data.Constraint.Lifting.Lifting2 GHC.Internal.Base.MonadPlus Data.Functor.Product.Product
instance Data.Constraint.Lifting.Lifting2 GHC.Internal.Base.Monad Data.Functor.Product.Product
instance Data.Constraint.Lifting.Lifting2 Data.Functor.Classes.Ord1 Data.Functor.Product.Product
instance Data.Constraint.Lifting.Lifting2 Data.Functor.Classes.Ord1 Data.Functor.Sum.Sum
instance Data.Constraint.Lifting.Lifting2 Data.Functor.Classes.Read1 Data.Functor.Product.Product
instance Data.Constraint.Lifting.Lifting2 Data.Functor.Classes.Read1 Data.Functor.Sum.Sum
instance Data.Constraint.Lifting.Lifting2 Data.Functor.Classes.Show1 Data.Functor.Product.Product
instance Data.Constraint.Lifting.Lifting2 Data.Functor.Classes.Show1 Data.Functor.Sum.Sum
instance Data.Constraint.Lifting.Lifting2 GHC.Internal.Data.Traversable.Traversable Data.Functor.Compose.Compose
instance Data.Constraint.Lifting.Lifting2 GHC.Internal.Data.Traversable.Traversable Data.Functor.Product.Product
instance Data.Constraint.Lifting.Lifting2 GHC.Internal.Data.Traversable.Traversable Data.Functor.Sum.Sum
instance Data.Constraint.Lifting.Lifting2 Data.Binary.Class.Binary GHC.Internal.Data.Either.Either
instance Data.Constraint.Lifting.Lifting2 Data.Binary.Class.Binary (,)
instance Data.Constraint.Lifting.Lifting2 GHC.Internal.Enum.Bounded (,)
instance Data.Constraint.Lifting.Lifting2 GHC.Classes.Eq GHC.Internal.Data.Either.Either
instance Data.Constraint.Lifting.Lifting2 GHC.Classes.Eq (,)
instance Data.Constraint.Lifting.Lifting2 Data.Hashable.Class.Hashable GHC.Internal.Data.Either.Either
instance Data.Constraint.Lifting.Lifting2 Data.Hashable.Class.Hashable (,)
instance Data.Constraint.Lifting.Lifting2 GHC.Internal.Ix.Ix (,)
instance Data.Constraint.Lifting.Lifting2 GHC.Internal.Base.Monoid (,)
instance Data.Constraint.Lifting.Lifting2 Control.DeepSeq.NFData GHC.Internal.Data.Either.Either
instance Data.Constraint.Lifting.Lifting2 Control.DeepSeq.NFData (,)
instance Data.Constraint.Lifting.Lifting2 GHC.Classes.Ord GHC.Internal.Data.Either.Either
instance Data.Constraint.Lifting.Lifting2 GHC.Classes.Ord (,)
instance Data.Constraint.Lifting.Lifting2 GHC.Internal.Read.Read GHC.Internal.Data.Either.Either
instance Data.Constraint.Lifting.Lifting2 GHC.Internal.Read.Read (,)
instance Data.Constraint.Lifting.Lifting2 GHC.Internal.Base.Semigroup (,)
instance Data.Constraint.Lifting.Lifting2 GHC.Internal.Show.Show GHC.Internal.Data.Either.Either
instance Data.Constraint.Lifting.Lifting2 GHC.Internal.Show.Show (,)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Alternative Control.Applicative.Backwards.Backwards
instance GHC.Internal.Base.Alternative f => Data.Constraint.Lifting.Lifting GHC.Internal.Base.Alternative (Data.Functor.Compose.Compose f)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Alternative Control.Monad.Trans.Identity.IdentityT
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Alternative Control.Applicative.Lift.Lift
instance GHC.Internal.Base.Alternative f => Data.Constraint.Lifting.Lifting GHC.Internal.Base.Alternative (Data.Functor.Product.Product f)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Alternative (Control.Monad.Trans.Reader.ReaderT e)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Alternative Data.Functor.Reverse.Reverse
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting GHC.Internal.Base.Alternative (Control.Monad.Trans.Writer.Lazy.WriterT w)
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting GHC.Internal.Base.Alternative (Control.Monad.Trans.Writer.Strict.WriterT w)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Applicative Control.Applicative.Backwards.Backwards
instance GHC.Internal.Base.Applicative f => Data.Constraint.Lifting.Lifting GHC.Internal.Base.Applicative (Data.Functor.Compose.Compose f)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Applicative (Control.Monad.Trans.Cont.ContT r)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Applicative Control.Monad.Trans.Identity.IdentityT
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Applicative Control.Applicative.Lift.Lift
instance GHC.Internal.Base.Applicative f => Data.Constraint.Lifting.Lifting GHC.Internal.Base.Applicative (Data.Functor.Product.Product f)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Applicative (Control.Monad.Trans.Reader.ReaderT e)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Applicative Data.Functor.Reverse.Reverse
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting GHC.Internal.Base.Applicative (Control.Monad.Trans.Writer.Lazy.WriterT w)
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting GHC.Internal.Base.Applicative (Control.Monad.Trans.Writer.Strict.WriterT w)
instance Data.Constraint.Lifting.Lifting Data.Functor.Classes.Eq1 Control.Applicative.Backwards.Backwards
instance Data.Functor.Classes.Eq1 f => Data.Constraint.Lifting.Lifting Data.Functor.Classes.Eq1 (Data.Functor.Compose.Compose f)
instance GHC.Classes.Eq e => Data.Constraint.Lifting.Lifting Data.Functor.Classes.Eq1 (Control.Monad.Trans.Except.ExceptT e)
instance Data.Constraint.Lifting.Lifting Data.Functor.Classes.Eq1 Control.Monad.Trans.Identity.IdentityT
instance Data.Constraint.Lifting.Lifting Data.Functor.Classes.Eq1 Control.Applicative.Lift.Lift
instance Data.Constraint.Lifting.Lifting Data.Functor.Classes.Eq1 Control.Monad.Trans.Maybe.MaybeT
instance Data.Functor.Classes.Eq1 f => Data.Constraint.Lifting.Lifting Data.Functor.Classes.Eq1 (Data.Functor.Product.Product f)
instance Data.Constraint.Lifting.Lifting Data.Functor.Classes.Eq1 Data.Functor.Reverse.Reverse
instance Data.Functor.Classes.Eq1 f => Data.Constraint.Lifting.Lifting Data.Functor.Classes.Eq1 (Data.Functor.Sum.Sum f)
instance GHC.Classes.Eq w => Data.Constraint.Lifting.Lifting Data.Functor.Classes.Eq1 (Control.Monad.Trans.Writer.Lazy.WriterT w)
instance GHC.Classes.Eq w => Data.Constraint.Lifting.Lifting Data.Functor.Classes.Eq1 (Control.Monad.Trans.Writer.Strict.WriterT w)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Data.Foldable.Foldable Control.Applicative.Backwards.Backwards
instance GHC.Internal.Data.Foldable.Foldable f => Data.Constraint.Lifting.Lifting GHC.Internal.Data.Foldable.Foldable (Data.Functor.Compose.Compose f)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Data.Foldable.Foldable (Control.Monad.Trans.Except.ExceptT e)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Data.Foldable.Foldable Control.Monad.Trans.Identity.IdentityT
instance Data.Constraint.Lifting.Lifting GHC.Internal.Data.Foldable.Foldable Control.Applicative.Lift.Lift
instance Data.Constraint.Lifting.Lifting GHC.Internal.Data.Foldable.Foldable Control.Monad.Trans.Maybe.MaybeT
instance GHC.Internal.Data.Foldable.Foldable f => Data.Constraint.Lifting.Lifting GHC.Internal.Data.Foldable.Foldable (Data.Functor.Product.Product f)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Data.Foldable.Foldable Data.Functor.Reverse.Reverse
instance GHC.Internal.Data.Foldable.Foldable f => Data.Constraint.Lifting.Lifting GHC.Internal.Data.Foldable.Foldable (Data.Functor.Sum.Sum f)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Data.Foldable.Foldable (Control.Monad.Trans.Writer.Lazy.WriterT w)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Data.Foldable.Foldable (Control.Monad.Trans.Writer.Strict.WriterT w)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Functor Control.Applicative.Backwards.Backwards
instance GHC.Internal.Base.Functor f => Data.Constraint.Lifting.Lifting GHC.Internal.Base.Functor (Data.Functor.Compose.Compose f)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Functor (Control.Monad.Trans.Cont.ContT r)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Functor (Control.Monad.Trans.Except.ExceptT e)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Functor Control.Monad.Trans.Identity.IdentityT
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Functor Control.Applicative.Lift.Lift
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Functor Control.Monad.Trans.Maybe.MaybeT
instance GHC.Internal.Base.Functor f => Data.Constraint.Lifting.Lifting GHC.Internal.Base.Functor (Data.Functor.Product.Product f)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Functor (Control.Monad.Trans.RWS.Strict.RWST r w s)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Functor (Control.Monad.Trans.RWS.Lazy.RWST r w s)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Functor (Control.Monad.Trans.Reader.ReaderT e)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Functor Data.Functor.Reverse.Reverse
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Functor (Control.Monad.Trans.State.Lazy.StateT s)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Functor (Control.Monad.Trans.State.Strict.StateT s)
instance GHC.Internal.Base.Functor f => Data.Constraint.Lifting.Lifting GHC.Internal.Base.Functor (Data.Functor.Sum.Sum f)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Functor (Control.Monad.Trans.Writer.Lazy.WriterT w)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Functor (Control.Monad.Trans.Writer.Strict.WriterT w)
instance Data.Constraint.Lifting.Lifting Control.Monad.Cont.Class.MonadCont (Control.Monad.Trans.Except.ExceptT w)
instance Data.Constraint.Lifting.Lifting Control.Monad.Cont.Class.MonadCont Control.Monad.Trans.Identity.IdentityT
instance Data.Constraint.Lifting.Lifting Control.Monad.Cont.Class.MonadCont Control.Monad.Trans.Maybe.MaybeT
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting Control.Monad.Cont.Class.MonadCont (Control.Monad.Trans.RWS.Lazy.RWST r w s)
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting Control.Monad.Cont.Class.MonadCont (Control.Monad.Trans.RWS.Strict.RWST r w s)
instance Data.Constraint.Lifting.Lifting Control.Monad.Cont.Class.MonadCont (Control.Monad.Trans.Reader.ReaderT e)
instance Data.Constraint.Lifting.Lifting Control.Monad.Cont.Class.MonadCont (Control.Monad.Trans.State.Lazy.StateT s)
instance Data.Constraint.Lifting.Lifting Control.Monad.Cont.Class.MonadCont (Control.Monad.Trans.State.Strict.StateT s)
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting Control.Monad.Cont.Class.MonadCont (Control.Monad.Trans.Writer.Lazy.WriterT w)
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting Control.Monad.Cont.Class.MonadCont (Control.Monad.Trans.Writer.Strict.WriterT w)
instance Data.Constraint.Lifting.Lifting (Control.Monad.Error.Class.MonadError e) Control.Monad.Trans.Identity.IdentityT
instance Data.Constraint.Lifting.Lifting (Control.Monad.Error.Class.MonadError e) Control.Monad.Trans.Maybe.MaybeT
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting (Control.Monad.Error.Class.MonadError e) (Control.Monad.Trans.RWS.Lazy.RWST r w s)
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting (Control.Monad.Error.Class.MonadError e) (Control.Monad.Trans.RWS.Strict.RWST r w s)
instance Data.Constraint.Lifting.Lifting (Control.Monad.Error.Class.MonadError e) (Control.Monad.Trans.Reader.ReaderT r)
instance Data.Constraint.Lifting.Lifting (Control.Monad.Error.Class.MonadError e) (Control.Monad.Trans.State.Lazy.StateT s)
instance Data.Constraint.Lifting.Lifting (Control.Monad.Error.Class.MonadError e) (Control.Monad.Trans.State.Strict.StateT s)
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting (Control.Monad.Error.Class.MonadError e) (Control.Monad.Trans.Writer.Lazy.WriterT w)
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting (Control.Monad.Error.Class.MonadError e) (Control.Monad.Trans.Writer.Strict.WriterT w)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Control.Monad.Fix.MonadFix (Control.Monad.Trans.Except.ExceptT e)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Control.Monad.Fix.MonadFix Control.Monad.Trans.Identity.IdentityT
instance GHC.Internal.Control.Monad.Fix.MonadFix f => Data.Constraint.Lifting.Lifting GHC.Internal.Control.Monad.Fix.MonadFix (Data.Functor.Product.Product f)
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting GHC.Internal.Control.Monad.Fix.MonadFix (Control.Monad.Trans.RWS.Strict.RWST r w s)
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting GHC.Internal.Control.Monad.Fix.MonadFix (Control.Monad.Trans.RWS.Lazy.RWST r w s)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Control.Monad.Fix.MonadFix (Control.Monad.Trans.Reader.ReaderT e)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Control.Monad.Fix.MonadFix (Control.Monad.Trans.State.Lazy.StateT s)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Control.Monad.Fix.MonadFix (Control.Monad.Trans.State.Strict.StateT s)
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting GHC.Internal.Control.Monad.Fix.MonadFix (Control.Monad.Trans.Writer.Lazy.WriterT w)
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting GHC.Internal.Control.Monad.Fix.MonadFix (Control.Monad.Trans.Writer.Strict.WriterT w)
instance Data.Constraint.Lifting.Lifting Control.Monad.IO.Class.MonadIO (Control.Monad.Trans.Cont.ContT r)
instance Data.Constraint.Lifting.Lifting Control.Monad.IO.Class.MonadIO (Control.Monad.Trans.Except.ExceptT e)
instance Data.Constraint.Lifting.Lifting Control.Monad.IO.Class.MonadIO Control.Monad.Trans.Identity.IdentityT
instance Data.Constraint.Lifting.Lifting Control.Monad.IO.Class.MonadIO Control.Monad.Trans.Maybe.MaybeT
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting Control.Monad.IO.Class.MonadIO (Control.Monad.Trans.RWS.Strict.RWST r w s)
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting Control.Monad.IO.Class.MonadIO (Control.Monad.Trans.RWS.Lazy.RWST r w s)
instance Data.Constraint.Lifting.Lifting Control.Monad.IO.Class.MonadIO (Control.Monad.Trans.Reader.ReaderT e)
instance Data.Constraint.Lifting.Lifting Control.Monad.IO.Class.MonadIO (Control.Monad.Trans.State.Lazy.StateT s)
instance Data.Constraint.Lifting.Lifting Control.Monad.IO.Class.MonadIO (Control.Monad.Trans.State.Strict.StateT s)
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting Control.Monad.IO.Class.MonadIO (Control.Monad.Trans.Writer.Lazy.WriterT w)
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting Control.Monad.IO.Class.MonadIO (Control.Monad.Trans.Writer.Strict.WriterT w)
instance GHC.Internal.Base.Monoid e => Data.Constraint.Lifting.Lifting GHC.Internal.Base.MonadPlus (Control.Monad.Trans.Except.ExceptT e)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.MonadPlus Control.Monad.Trans.Identity.IdentityT
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.MonadPlus Control.Monad.Trans.Maybe.MaybeT
instance GHC.Internal.Base.MonadPlus f => Data.Constraint.Lifting.Lifting GHC.Internal.Base.MonadPlus (Data.Functor.Product.Product f)
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting GHC.Internal.Base.MonadPlus (Control.Monad.Trans.RWS.Strict.RWST r w s)
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting GHC.Internal.Base.MonadPlus (Control.Monad.Trans.RWS.Lazy.RWST r w s)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.MonadPlus (Control.Monad.Trans.Reader.ReaderT e)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.MonadPlus (Control.Monad.Trans.State.Lazy.StateT s)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.MonadPlus (Control.Monad.Trans.State.Strict.StateT s)
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting GHC.Internal.Base.MonadPlus (Control.Monad.Trans.Writer.Lazy.WriterT w)
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting GHC.Internal.Base.MonadPlus (Control.Monad.Trans.Writer.Strict.WriterT w)
instance Data.Constraint.Lifting.Lifting (Control.Monad.RWS.Class.MonadRWS r w s) (Control.Monad.Trans.Except.ExceptT e)
instance Data.Constraint.Lifting.Lifting (Control.Monad.RWS.Class.MonadRWS r w s) Control.Monad.Trans.Identity.IdentityT
instance Data.Constraint.Lifting.Lifting (Control.Monad.RWS.Class.MonadRWS r w s) Control.Monad.Trans.Maybe.MaybeT
instance Data.Constraint.Lifting.Lifting (Control.Monad.Reader.Class.MonadReader r) (Control.Monad.Trans.Cont.ContT r')
instance Data.Constraint.Lifting.Lifting (Control.Monad.Reader.Class.MonadReader r) (Control.Monad.Trans.Except.ExceptT e)
instance Data.Constraint.Lifting.Lifting (Control.Monad.Reader.Class.MonadReader r) Control.Monad.Trans.Identity.IdentityT
instance Data.Constraint.Lifting.Lifting (Control.Monad.Reader.Class.MonadReader r) Control.Monad.Trans.Maybe.MaybeT
instance Data.Constraint.Lifting.Lifting (Control.Monad.Reader.Class.MonadReader r) (Control.Monad.Trans.State.Lazy.StateT s)
instance Data.Constraint.Lifting.Lifting (Control.Monad.Reader.Class.MonadReader r) (Control.Monad.Trans.State.Strict.StateT s)
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting (Control.Monad.Reader.Class.MonadReader r) (Control.Monad.Trans.Writer.Lazy.WriterT w)
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting (Control.Monad.Reader.Class.MonadReader r) (Control.Monad.Trans.Writer.Strict.WriterT w)
instance Data.Constraint.Lifting.Lifting (Control.Monad.State.Class.MonadState s) (Control.Monad.Trans.Cont.ContT r')
instance Data.Constraint.Lifting.Lifting (Control.Monad.State.Class.MonadState s) (Control.Monad.Trans.Except.ExceptT e)
instance Data.Constraint.Lifting.Lifting (Control.Monad.State.Class.MonadState s) Control.Monad.Trans.Identity.IdentityT
instance Data.Constraint.Lifting.Lifting (Control.Monad.State.Class.MonadState s) Control.Monad.Trans.Maybe.MaybeT
instance Data.Constraint.Lifting.Lifting (Control.Monad.State.Class.MonadState s) (Control.Monad.Trans.Reader.ReaderT r)
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting (Control.Monad.State.Class.MonadState s) (Control.Monad.Trans.Writer.Lazy.WriterT w)
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting (Control.Monad.State.Class.MonadState s) (Control.Monad.Trans.Writer.Strict.WriterT w)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Monad (Control.Monad.Trans.Cont.ContT r)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Monad (Control.Monad.Trans.Except.ExceptT e)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Monad Control.Monad.Trans.Identity.IdentityT
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Monad Control.Monad.Trans.Maybe.MaybeT
instance GHC.Internal.Base.Monad f => Data.Constraint.Lifting.Lifting GHC.Internal.Base.Monad (Data.Functor.Product.Product f)
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting GHC.Internal.Base.Monad (Control.Monad.Trans.RWS.Strict.RWST r w s)
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting GHC.Internal.Base.Monad (Control.Monad.Trans.RWS.Lazy.RWST r w s)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Monad (Control.Monad.Trans.Reader.ReaderT e)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Monad (Control.Monad.Trans.State.Lazy.StateT s)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Monad (Control.Monad.Trans.State.Strict.StateT s)
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting GHC.Internal.Base.Monad (Control.Monad.Trans.Writer.Lazy.WriterT w)
instance GHC.Internal.Base.Monoid w => Data.Constraint.Lifting.Lifting GHC.Internal.Base.Monad (Control.Monad.Trans.Writer.Strict.WriterT w)
instance Data.Constraint.Lifting.Lifting Data.Functor.Classes.Ord1 Control.Applicative.Backwards.Backwards
instance Data.Functor.Classes.Ord1 f => Data.Constraint.Lifting.Lifting Data.Functor.Classes.Ord1 (Data.Functor.Compose.Compose f)
instance GHC.Classes.Ord e => Data.Constraint.Lifting.Lifting Data.Functor.Classes.Ord1 (Control.Monad.Trans.Except.ExceptT e)
instance Data.Constraint.Lifting.Lifting Data.Functor.Classes.Ord1 Control.Monad.Trans.Identity.IdentityT
instance Data.Constraint.Lifting.Lifting Data.Functor.Classes.Ord1 Control.Applicative.Lift.Lift
instance Data.Constraint.Lifting.Lifting Data.Functor.Classes.Ord1 Control.Monad.Trans.Maybe.MaybeT
instance Data.Functor.Classes.Ord1 f => Data.Constraint.Lifting.Lifting Data.Functor.Classes.Ord1 (Data.Functor.Product.Product f)
instance Data.Constraint.Lifting.Lifting Data.Functor.Classes.Ord1 Data.Functor.Reverse.Reverse
instance Data.Functor.Classes.Ord1 f => Data.Constraint.Lifting.Lifting Data.Functor.Classes.Ord1 (Data.Functor.Sum.Sum f)
instance GHC.Classes.Ord w => Data.Constraint.Lifting.Lifting Data.Functor.Classes.Ord1 (Control.Monad.Trans.Writer.Lazy.WriterT w)
instance GHC.Classes.Ord w => Data.Constraint.Lifting.Lifting Data.Functor.Classes.Ord1 (Control.Monad.Trans.Writer.Strict.WriterT w)
instance Data.Constraint.Lifting.Lifting Data.Functor.Classes.Read1 Control.Applicative.Backwards.Backwards
instance Data.Functor.Classes.Read1 f => Data.Constraint.Lifting.Lifting Data.Functor.Classes.Read1 (Data.Functor.Compose.Compose f)
instance GHC.Internal.Read.Read e => Data.Constraint.Lifting.Lifting Data.Functor.Classes.Read1 (Control.Monad.Trans.Except.ExceptT e)
instance Data.Constraint.Lifting.Lifting Data.Functor.Classes.Read1 Control.Monad.Trans.Identity.IdentityT
instance Data.Constraint.Lifting.Lifting Data.Functor.Classes.Read1 Control.Applicative.Lift.Lift
instance Data.Constraint.Lifting.Lifting Data.Functor.Classes.Read1 Control.Monad.Trans.Maybe.MaybeT
instance Data.Functor.Classes.Read1 f => Data.Constraint.Lifting.Lifting Data.Functor.Classes.Read1 (Data.Functor.Product.Product f)
instance Data.Constraint.Lifting.Lifting Data.Functor.Classes.Read1 Data.Functor.Reverse.Reverse
instance Data.Functor.Classes.Read1 f => Data.Constraint.Lifting.Lifting Data.Functor.Classes.Read1 (Data.Functor.Sum.Sum f)
instance GHC.Internal.Read.Read w => Data.Constraint.Lifting.Lifting Data.Functor.Classes.Read1 (Control.Monad.Trans.Writer.Lazy.WriterT w)
instance GHC.Internal.Read.Read w => Data.Constraint.Lifting.Lifting Data.Functor.Classes.Read1 (Control.Monad.Trans.Writer.Strict.WriterT w)
instance Data.Constraint.Lifting.Lifting Data.Functor.Classes.Show1 Control.Applicative.Backwards.Backwards
instance Data.Functor.Classes.Show1 f => Data.Constraint.Lifting.Lifting Data.Functor.Classes.Show1 (Data.Functor.Compose.Compose f)
instance GHC.Internal.Show.Show e => Data.Constraint.Lifting.Lifting Data.Functor.Classes.Show1 (Control.Monad.Trans.Except.ExceptT e)
instance Data.Constraint.Lifting.Lifting Data.Functor.Classes.Show1 Control.Monad.Trans.Identity.IdentityT
instance Data.Constraint.Lifting.Lifting Data.Functor.Classes.Show1 Control.Applicative.Lift.Lift
instance Data.Constraint.Lifting.Lifting Data.Functor.Classes.Show1 Control.Monad.Trans.Maybe.MaybeT
instance Data.Functor.Classes.Show1 f => Data.Constraint.Lifting.Lifting Data.Functor.Classes.Show1 (Data.Functor.Product.Product f)
instance Data.Constraint.Lifting.Lifting Data.Functor.Classes.Show1 Data.Functor.Reverse.Reverse
instance Data.Functor.Classes.Show1 f => Data.Constraint.Lifting.Lifting Data.Functor.Classes.Show1 (Data.Functor.Sum.Sum f)
instance GHC.Internal.Show.Show w => Data.Constraint.Lifting.Lifting Data.Functor.Classes.Show1 (Control.Monad.Trans.Writer.Lazy.WriterT w)
instance GHC.Internal.Show.Show w => Data.Constraint.Lifting.Lifting Data.Functor.Classes.Show1 (Control.Monad.Trans.Writer.Strict.WriterT w)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Data.Traversable.Traversable Control.Applicative.Backwards.Backwards
instance GHC.Internal.Data.Traversable.Traversable f => Data.Constraint.Lifting.Lifting GHC.Internal.Data.Traversable.Traversable (Data.Functor.Compose.Compose f)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Data.Traversable.Traversable (Control.Monad.Trans.Except.ExceptT e)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Data.Traversable.Traversable Control.Monad.Trans.Identity.IdentityT
instance Data.Constraint.Lifting.Lifting GHC.Internal.Data.Traversable.Traversable Control.Applicative.Lift.Lift
instance Data.Constraint.Lifting.Lifting GHC.Internal.Data.Traversable.Traversable Control.Monad.Trans.Maybe.MaybeT
instance GHC.Internal.Data.Traversable.Traversable f => Data.Constraint.Lifting.Lifting GHC.Internal.Data.Traversable.Traversable (Data.Functor.Product.Product f)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Data.Traversable.Traversable Data.Functor.Reverse.Reverse
instance GHC.Internal.Data.Traversable.Traversable f => Data.Constraint.Lifting.Lifting GHC.Internal.Data.Traversable.Traversable (Data.Functor.Sum.Sum f)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Data.Traversable.Traversable (Control.Monad.Trans.Writer.Lazy.WriterT w)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Data.Traversable.Traversable (Control.Monad.Trans.Writer.Strict.WriterT w)
instance Data.Binary.Class.Binary a => Data.Constraint.Lifting.Lifting Data.Binary.Class.Binary (GHC.Internal.Data.Either.Either a)
instance Data.Constraint.Lifting.Lifting Data.Binary.Class.Binary []
instance Data.Constraint.Lifting.Lifting Data.Binary.Class.Binary GHC.Internal.Maybe.Maybe
instance Data.Binary.Class.Binary a => Data.Constraint.Lifting.Lifting Data.Binary.Class.Binary ((,) a)
instance GHC.Internal.Enum.Bounded a => Data.Constraint.Lifting.Lifting GHC.Internal.Enum.Bounded ((,) a)
instance Data.Functor.Classes.Eq1 f => Data.Constraint.Lifting.Lifting GHC.Classes.Eq (Control.Applicative.Backwards.Backwards f)
instance Data.Constraint.Lifting.Lifting GHC.Classes.Eq Data.Complex.Complex
instance (Data.Functor.Classes.Eq1 f, Data.Functor.Classes.Eq1 g) => Data.Constraint.Lifting.Lifting GHC.Classes.Eq (Data.Functor.Compose.Compose f g)
instance GHC.Classes.Eq a => Data.Constraint.Lifting.Lifting GHC.Classes.Eq (GHC.Internal.Data.Either.Either a)
instance (GHC.Classes.Eq e, Data.Functor.Classes.Eq1 m) => Data.Constraint.Lifting.Lifting GHC.Classes.Eq (Control.Monad.Trans.Except.ExceptT e m)
instance Data.Constraint.Lifting.Lifting GHC.Classes.Eq GHC.Internal.Data.Functor.Identity.Identity
instance Data.Functor.Classes.Eq1 m => Data.Constraint.Lifting.Lifting GHC.Classes.Eq (Control.Monad.Trans.Identity.IdentityT m)
instance Data.Functor.Classes.Eq1 f => Data.Constraint.Lifting.Lifting GHC.Classes.Eq (Control.Applicative.Lift.Lift f)
instance Data.Constraint.Lifting.Lifting GHC.Classes.Eq []
instance Data.Constraint.Lifting.Lifting GHC.Classes.Eq GHC.Internal.Maybe.Maybe
instance Data.Functor.Classes.Eq1 m => Data.Constraint.Lifting.Lifting GHC.Classes.Eq (Control.Monad.Trans.Maybe.MaybeT m)
instance (Data.Functor.Classes.Eq1 f, Data.Functor.Classes.Eq1 g) => Data.Constraint.Lifting.Lifting GHC.Classes.Eq (Data.Functor.Product.Product f g)
instance Data.Constraint.Lifting.Lifting GHC.Classes.Eq GHC.Internal.Real.Ratio
instance Data.Functor.Classes.Eq1 f => Data.Constraint.Lifting.Lifting GHC.Classes.Eq (Data.Functor.Reverse.Reverse f)
instance (Data.Functor.Classes.Eq1 f, Data.Functor.Classes.Eq1 g) => Data.Constraint.Lifting.Lifting GHC.Classes.Eq (Data.Functor.Sum.Sum f g)
instance GHC.Classes.Eq a => Data.Constraint.Lifting.Lifting GHC.Classes.Eq ((,) a)
instance (GHC.Classes.Eq w, Data.Functor.Classes.Eq1 m) => Data.Constraint.Lifting.Lifting GHC.Classes.Eq (Control.Monad.Trans.Writer.Lazy.WriterT w m)
instance (GHC.Classes.Eq w, Data.Functor.Classes.Eq1 m) => Data.Constraint.Lifting.Lifting GHC.Classes.Eq (Control.Monad.Trans.Writer.Strict.WriterT w m)
instance Data.Hashable.Class.Hashable a => Data.Constraint.Lifting.Lifting Data.Hashable.Class.Hashable (GHC.Internal.Data.Either.Either a)
instance Data.Constraint.Lifting.Lifting Data.Hashable.Class.Hashable []
instance Data.Constraint.Lifting.Lifting Data.Hashable.Class.Hashable GHC.Internal.Maybe.Maybe
instance Data.Hashable.Class.Hashable a => Data.Constraint.Lifting.Lifting Data.Hashable.Class.Hashable ((,) a)
instance GHC.Internal.Ix.Ix a => Data.Constraint.Lifting.Lifting GHC.Internal.Ix.Ix ((,) a)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Monoid ((->) a)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Monoid GHC.Internal.Maybe.Maybe
instance GHC.Internal.Base.Monoid a => Data.Constraint.Lifting.Lifting GHC.Internal.Base.Monoid ((,) a)
instance Control.DeepSeq.NFData a => Data.Constraint.Lifting.Lifting Control.DeepSeq.NFData (GHC.Internal.Data.Either.Either a)
instance Data.Constraint.Lifting.Lifting Control.DeepSeq.NFData []
instance Data.Constraint.Lifting.Lifting Control.DeepSeq.NFData GHC.Internal.Maybe.Maybe
instance Control.DeepSeq.NFData a => Data.Constraint.Lifting.Lifting Control.DeepSeq.NFData ((,) a)
instance Data.Functor.Classes.Ord1 f => Data.Constraint.Lifting.Lifting GHC.Classes.Ord (Control.Applicative.Backwards.Backwards f)
instance (Data.Functor.Classes.Ord1 f, Data.Functor.Classes.Ord1 g) => Data.Constraint.Lifting.Lifting GHC.Classes.Ord (Data.Functor.Compose.Compose f g)
instance GHC.Classes.Ord a => Data.Constraint.Lifting.Lifting GHC.Classes.Ord (GHC.Internal.Data.Either.Either a)
instance (GHC.Classes.Ord e, Data.Functor.Classes.Ord1 m) => Data.Constraint.Lifting.Lifting GHC.Classes.Ord (Control.Monad.Trans.Except.ExceptT e m)
instance Data.Constraint.Lifting.Lifting GHC.Classes.Ord GHC.Internal.Data.Functor.Identity.Identity
instance Data.Functor.Classes.Ord1 m => Data.Constraint.Lifting.Lifting GHC.Classes.Ord (Control.Monad.Trans.Identity.IdentityT m)
instance Data.Functor.Classes.Ord1 f => Data.Constraint.Lifting.Lifting GHC.Classes.Ord (Control.Applicative.Lift.Lift f)
instance Data.Constraint.Lifting.Lifting GHC.Classes.Ord []
instance Data.Constraint.Lifting.Lifting GHC.Classes.Ord GHC.Internal.Maybe.Maybe
instance Data.Functor.Classes.Ord1 m => Data.Constraint.Lifting.Lifting GHC.Classes.Ord (Control.Monad.Trans.Maybe.MaybeT m)
instance (Data.Functor.Classes.Ord1 f, Data.Functor.Classes.Ord1 g) => Data.Constraint.Lifting.Lifting GHC.Classes.Ord (Data.Functor.Product.Product f g)
instance Data.Functor.Classes.Ord1 f => Data.Constraint.Lifting.Lifting GHC.Classes.Ord (Data.Functor.Reverse.Reverse f)
instance (Data.Functor.Classes.Ord1 f, Data.Functor.Classes.Ord1 g) => Data.Constraint.Lifting.Lifting GHC.Classes.Ord (Data.Functor.Sum.Sum f g)
instance GHC.Classes.Ord a => Data.Constraint.Lifting.Lifting GHC.Classes.Ord ((,) a)
instance (GHC.Classes.Ord w, Data.Functor.Classes.Ord1 m) => Data.Constraint.Lifting.Lifting GHC.Classes.Ord (Control.Monad.Trans.Writer.Lazy.WriterT w m)
instance (GHC.Classes.Ord w, Data.Functor.Classes.Ord1 m) => Data.Constraint.Lifting.Lifting GHC.Classes.Ord (Control.Monad.Trans.Writer.Strict.WriterT w m)
instance Data.Functor.Classes.Read1 f => Data.Constraint.Lifting.Lifting GHC.Internal.Read.Read (Control.Applicative.Backwards.Backwards f)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Read.Read Data.Complex.Complex
instance (Data.Functor.Classes.Read1 f, Data.Functor.Classes.Read1 g) => Data.Constraint.Lifting.Lifting GHC.Internal.Read.Read (Data.Functor.Compose.Compose f g)
instance GHC.Internal.Read.Read a => Data.Constraint.Lifting.Lifting GHC.Internal.Read.Read (GHC.Internal.Data.Either.Either a)
instance (GHC.Internal.Read.Read e, Data.Functor.Classes.Read1 m) => Data.Constraint.Lifting.Lifting GHC.Internal.Read.Read (Control.Monad.Trans.Except.ExceptT e m)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Read.Read GHC.Internal.Data.Functor.Identity.Identity
instance Data.Functor.Classes.Read1 m => Data.Constraint.Lifting.Lifting GHC.Internal.Read.Read (Control.Monad.Trans.Identity.IdentityT m)
instance Data.Functor.Classes.Read1 f => Data.Constraint.Lifting.Lifting GHC.Internal.Read.Read (Control.Applicative.Lift.Lift f)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Read.Read []
instance Data.Constraint.Lifting.Lifting GHC.Internal.Read.Read GHC.Internal.Maybe.Maybe
instance Data.Functor.Classes.Read1 m => Data.Constraint.Lifting.Lifting GHC.Internal.Read.Read (Control.Monad.Trans.Maybe.MaybeT m)
instance (Data.Functor.Classes.Read1 f, Data.Functor.Classes.Read1 g) => Data.Constraint.Lifting.Lifting GHC.Internal.Read.Read (Data.Functor.Product.Product f g)
instance Data.Functor.Classes.Read1 f => Data.Constraint.Lifting.Lifting GHC.Internal.Read.Read (Data.Functor.Reverse.Reverse f)
instance (Data.Functor.Classes.Read1 f, Data.Functor.Classes.Read1 g) => Data.Constraint.Lifting.Lifting GHC.Internal.Read.Read (Data.Functor.Sum.Sum f g)
instance GHC.Internal.Read.Read a => Data.Constraint.Lifting.Lifting GHC.Internal.Read.Read ((,) a)
instance (GHC.Internal.Read.Read w, Data.Functor.Classes.Read1 m) => Data.Constraint.Lifting.Lifting GHC.Internal.Read.Read (Control.Monad.Trans.Writer.Lazy.WriterT w m)
instance (GHC.Internal.Read.Read w, Data.Functor.Classes.Read1 m) => Data.Constraint.Lifting.Lifting GHC.Internal.Read.Read (Control.Monad.Trans.Writer.Strict.WriterT w m)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Semigroup ((->) a)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Base.Semigroup GHC.Internal.Maybe.Maybe
instance GHC.Internal.Base.Semigroup a => Data.Constraint.Lifting.Lifting GHC.Internal.Base.Semigroup ((,) a)
instance Data.Functor.Classes.Show1 f => Data.Constraint.Lifting.Lifting GHC.Internal.Show.Show (Control.Applicative.Backwards.Backwards f)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Show.Show Data.Complex.Complex
instance (Data.Functor.Classes.Show1 f, Data.Functor.Classes.Show1 g) => Data.Constraint.Lifting.Lifting GHC.Internal.Show.Show (Data.Functor.Compose.Compose f g)
instance GHC.Internal.Show.Show a => Data.Constraint.Lifting.Lifting GHC.Internal.Show.Show (GHC.Internal.Data.Either.Either a)
instance (GHC.Internal.Show.Show e, Data.Functor.Classes.Show1 m) => Data.Constraint.Lifting.Lifting GHC.Internal.Show.Show (Control.Monad.Trans.Except.ExceptT e m)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Show.Show GHC.Internal.Data.Functor.Identity.Identity
instance Data.Functor.Classes.Show1 m => Data.Constraint.Lifting.Lifting GHC.Internal.Show.Show (Control.Monad.Trans.Identity.IdentityT m)
instance Data.Functor.Classes.Show1 f => Data.Constraint.Lifting.Lifting GHC.Internal.Show.Show (Control.Applicative.Lift.Lift f)
instance Data.Constraint.Lifting.Lifting GHC.Internal.Show.Show []
instance Data.Constraint.Lifting.Lifting GHC.Internal.Show.Show GHC.Internal.Maybe.Maybe
instance Data.Functor.Classes.Show1 m => Data.Constraint.Lifting.Lifting GHC.Internal.Show.Show (Control.Monad.Trans.Maybe.MaybeT m)
instance (Data.Functor.Classes.Show1 f, Data.Functor.Classes.Show1 g) => Data.Constraint.Lifting.Lifting GHC.Internal.Show.Show (Data.Functor.Product.Product f g)
instance Data.Functor.Classes.Show1 f => Data.Constraint.Lifting.Lifting GHC.Internal.Show.Show (Data.Functor.Reverse.Reverse f)
instance (Data.Functor.Classes.Show1 f, Data.Functor.Classes.Show1 g) => Data.Constraint.Lifting.Lifting GHC.Internal.Show.Show (Data.Functor.Sum.Sum f g)
instance GHC.Internal.Show.Show a => Data.Constraint.Lifting.Lifting GHC.Internal.Show.Show ((,) a)
instance (GHC.Internal.Show.Show w, Data.Functor.Classes.Show1 m) => Data.Constraint.Lifting.Lifting GHC.Internal.Show.Show (Control.Monad.Trans.Writer.Lazy.WriterT w m)
instance (GHC.Internal.Show.Show w, Data.Functor.Classes.Show1 m) => Data.Constraint.Lifting.Lifting GHC.Internal.Show.Show (Control.Monad.Trans.Writer.Strict.WriterT w m)

-- | Unsafe utilities used throughout constraints. As the names
--   suggest, these functions are unsafe in general and can cause your
--   program to segfault if used improperly. Handle with care.
module Data.Constraint.Unsafe

-- | Coercible is a two-parameter class that has instances for
--   types a and b if the compiler can infer that they
--   have the same representation. This class does not have regular
--   instances; instead they are created on-the-fly during type-checking.
--   Trying to manually declare an instance of Coercible is an
--   error.
--   
--   Nevertheless one can pretend that the following three kinds of
--   instances exist. First, as a trivial base-case:
--   
--   
--   instance Coercible a a
--   
--   
--   Furthermore, for every type constructor there is an instance that
--   allows to coerce under the type constructor. For example, let
--   D be a prototypical type constructor (data or
--   newtype) with three type arguments, which have roles
--   nominal, representational resp. phantom.
--   Then there is an instance of the form
--   
--   
--   instance Coercible b b' => Coercible (D a b c) (D a b' c')
--   
--   
--   Note that the nominal type arguments are equal, the
--   representational type arguments can differ, but need to have
--   a Coercible instance themself, and the phantom type
--   arguments can be changed arbitrarily.
--   
--   The third kind of instance exists for every newtype NT = MkNT
--   T and comes in two variants, namely
--   
--   
--   instance Coercible a T => Coercible a NT
--   
--   
--   
--   instance Coercible T b => Coercible NT b
--   
--   
--   This instance is only usable if the constructor MkNT is in
--   scope.
--   
--   If, as a library author of a type constructor like Set a, you
--   want to prevent a user of your module to write coerce :: Set T
--   -> Set NT, you need to set the role of Set's type
--   parameter to nominal, by writing
--   
--   
--   type role Set nominal
--   
--   
--   For more details about this feature, please refer to Safe
--   Coercions by Joachim Breitner, Richard A. Eisenberg, Simon Peyton
--   Jones and Stephanie Weirich.
class a ~R# b => Coercible (a :: k) (b :: k)

-- | Unsafely create a dictionary for any constraint.
unsafeAxiom :: Dict c

-- | Coerce a dictionary unsafely from one type to another
unsafeCoerceConstraint :: a :- b

-- | Coerce a dictionary unsafely from one type to a newtype of that type
unsafeDerive :: Coercible n o => (o -> n) -> t o :- t n

-- | Coerce a dictionary unsafely from a newtype of a type to the base type
unsafeUnderive :: Coercible n o => (o -> n) -> t n :- t o

-- | Unsafely create an SChar value directly from a Char. Use
--   this function with care:
--   
--   
--   
- The Char value must match the Char c
--   encoded in the return type SChar c.
--   
- Be wary of using this function to create multiple values of type
--   SChar T, where T is a type family that does
--   not reduce (e.g., Any from GHC.Exts). If you do, GHC
--   is liable to optimize away one of the values and replace it with the
--   other during a common subexpression elimination pass. If the two
--   values have different underlying Char values, this could be
--   disastrous.
--   
unsafeSChar :: forall (c :: Char). Char -> SChar c

-- | Unsafely create an SNat value directly from a Natural.
--   Use this function with care:
--   
--   
--   
- The Natural value must match the Nat n
--   encoded in the return type SNat n.
--   
- Be wary of using this function to create multiple values of type
--   SNat T, where T is a type family that does
--   not reduce (e.g., Any from GHC.Exts). If you do, GHC
--   is liable to optimize away one of the values and replace it with the
--   other during a common subexpression elimination pass. If the two
--   values have different underlying Natural values, this could be
--   disastrous.
--   
unsafeSNat :: forall (n :: Nat). Natural -> SNat n

-- | Unsafely create an SSymbol value directly from a String.
--   Use this function with care:
--   
--   
--   
- The String value must match the Symbol s
--   encoded in the return type SSymbol s.
--   
- Be wary of using this function to create multiple values of type
--   SSymbol T, where T is a type family that does
--   not reduce (e.g., Any from GHC.Exts). If you do, GHC
--   is liable to optimize away one of the values and replace it with the
--   other during a common subexpression elimination pass. If the two
--   values have different underlying String values, this could be
--   disastrous.
--   
unsafeSSymbol :: forall (s :: Symbol). String -> SSymbol s

-- | Utilities for working with KnownNat constraints.
--   
--   This module is only available on GHC 8.0 or later.
module Data.Constraint.Nat
type family Min (m :: Nat) (n :: Nat) :: Nat
type family Max (m :: Nat) (n :: Nat) :: Nat
type family Lcm (m :: Nat) (n :: Nat) :: Nat
type family Gcd (m :: Nat) (n :: Nat) :: Nat
type Divides (n :: Nat) (m :: Nat) = n ~ Gcd n m

-- | Division (round down) of natural numbers. Div x 0 is
--   undefined (i.e., it cannot be reduced).
type family Div (a :: Natural) (b :: Natural) :: Natural
infixl 7 `Div`

-- | Modulus of natural numbers. Mod x 0 is undefined (i.e., it
--   cannot be reduced).
type family Mod (a :: Natural) (b :: Natural) :: Natural
infixl 7 `Mod`

-- | Log base 2 (round down) of natural numbers. Log 0 is
--   undefined (i.e., it cannot be reduced).
type family Log2 (a :: Natural) :: Natural
plusNat :: forall (n :: Nat) (m :: Nat). (KnownNat n, KnownNat m) :- KnownNat (n + m)
minusNat :: forall (n :: Nat) (m :: Nat). (KnownNat n, KnownNat m, m <= n) :- KnownNat (n - m)
timesNat :: forall (n :: Nat) (m :: Nat). (KnownNat n, KnownNat m) :- KnownNat (n * m)
powNat :: forall (n :: Nat) (m :: Nat). (KnownNat n, KnownNat m) :- KnownNat (n ^ m)
minNat :: forall (n :: Nat) (m :: Nat). (KnownNat n, KnownNat m) :- KnownNat (Min n m)
maxNat :: forall (n :: Nat) (m :: Nat). (KnownNat n, KnownNat m) :- KnownNat (Max n m)
gcdNat :: forall (n :: Nat) (m :: Nat). (KnownNat n, KnownNat m) :- KnownNat (Gcd n m)
lcmNat :: forall (n :: Nat) (m :: Nat). (KnownNat n, KnownNat m) :- KnownNat (Lcm n m)
divNat :: forall (n :: Nat) (m :: Nat). (KnownNat n, KnownNat m, 1 <= m) :- KnownNat (Div n m)
modNat :: forall (n :: Nat) (m :: Nat). (KnownNat n, KnownNat m, 1 <= m) :- KnownNat (Mod n m)
log2Nat :: forall (n :: Nat). (KnownNat n, 1 <= n) :- KnownNat (Log2 n)
plusZero :: forall (n :: Natural). Dict ((n + 0) ~ n)
minusZero :: forall (n :: Natural). Dict ((n - 0) ~ n)
timesZero :: forall (n :: Natural). Dict ((n * 0) ~ 0)
timesOne :: forall (n :: Natural). Dict ((n * 1) ~ n)
powZero :: forall (n :: Natural). Dict ((n ^ 0) ~ 1)
powOne :: forall (n :: Natural). Dict ((n ^ 1) ~ n)
maxZero :: forall (n :: Nat). Dict (Max n 0 ~ n)
minZero :: forall (n :: Nat). Dict (Min n 0 ~ 0)
gcdZero :: forall (a :: Nat). Dict (Gcd 0 a ~ a)
gcdOne :: forall (a :: Nat). Dict (Gcd 1 a ~ 1)
lcmZero :: forall (a :: Nat). Dict (Lcm 0 a ~ 0)
lcmOne :: forall (a :: Nat). Dict (Lcm 1 a ~ a)
plusAssociates :: forall (m :: Natural) (n :: Natural) (o :: Natural). Dict (((m + n) + o) ~ (m + (n + o)))
timesAssociates :: forall (m :: Natural) (n :: Natural) (o :: Natural). Dict (((m * n) * o) ~ (m * (n * o)))
minAssociates :: forall (m :: Nat) (n :: Nat) (o :: Nat). Dict (Min (Min m n) o ~ Min m (Min n o))
maxAssociates :: forall (m :: Nat) (n :: Nat) (o :: Nat). Dict (Max (Max m n) o ~ Max m (Max n o))
gcdAssociates :: forall (a :: Nat) (b :: Nat) (c :: Nat). Dict (Gcd (Gcd a b) c ~ Gcd a (Gcd b c))
lcmAssociates :: forall (a :: Nat) (b :: Nat) (c :: Nat). Dict (Lcm (Lcm a b) c ~ Lcm a (Lcm b c))
plusCommutes :: forall (n :: Natural) (m :: Natural). Dict ((m + n) ~ (n + m))
timesCommutes :: forall (n :: Natural) (m :: Natural). Dict ((m * n) ~ (n * m))
minCommutes :: forall (n :: Nat) (m :: Nat). Dict (Min m n ~ Min n m)
maxCommutes :: forall (n :: Nat) (m :: Nat). Dict (Max m n ~ Max n m)
gcdCommutes :: forall (a :: Nat) (b :: Nat). Dict (Gcd a b ~ Gcd b a)
lcmCommutes :: forall (a :: Nat) (b :: Nat). Dict (Lcm a b ~ Lcm b a)
plusDistributesOverTimes :: forall (n :: Natural) (m :: Natural) (o :: Natural). Dict ((n * (m + o)) ~ ((n * m) + (n * o)))
timesDistributesOverPow :: forall (n :: Natural) (m :: Natural) (o :: Natural). Dict ((n ^ (m + o)) ~ ((n ^ m) * (n ^ o)))
timesDistributesOverGcd :: forall (n :: Natural) (m :: Nat) (o :: Nat). Dict ((n * Gcd m o) ~ Gcd (n * m) (n * o))
timesDistributesOverLcm :: forall (n :: Natural) (m :: Nat) (o :: Nat). Dict ((n * Lcm m o) ~ Lcm (n * m) (n * o))
minDistributesOverPlus :: forall (n :: Natural) (m :: Nat) (o :: Nat). Dict ((n + Min m o) ~ Min (n + m) (n + o))
minDistributesOverTimes :: forall (n :: Natural) (m :: Nat) (o :: Nat). Dict ((n * Min m o) ~ Min (n * m) (n * o))
minDistributesOverPow1 :: forall (n :: Nat) (m :: Nat) (o :: Natural). Dict ((Min n m ^ o) ~ Min (n ^ o) (m ^ o))
minDistributesOverPow2 :: forall (n :: Natural) (m :: Nat) (o :: Nat). Dict ((n ^ Min m o) ~ Min (n ^ m) (n ^ o))
minDistributesOverMax :: forall (n :: Nat) (m :: Nat) (o :: Nat). Dict (Max n (Min m o) ~ Min (Max n m) (Max n o))
maxDistributesOverPlus :: forall (n :: Natural) (m :: Nat) (o :: Nat). Dict ((n + Max m o) ~ Max (n + m) (n + o))
maxDistributesOverTimes :: forall (n :: Natural) (m :: Nat) (o :: Nat). Dict ((n * Max m o) ~ Max (n * m) (n * o))
maxDistributesOverPow1 :: forall (n :: Nat) (m :: Nat) (o :: Natural). Dict ((Max n m ^ o) ~ Max (n ^ o) (m ^ o))
maxDistributesOverPow2 :: forall (n :: Natural) (m :: Nat) (o :: Nat). Dict ((n ^ Max m o) ~ Max (n ^ m) (n ^ o))
maxDistributesOverMin :: forall (n :: Nat) (m :: Nat) (o :: Nat). Dict (Min n (Max m o) ~ Max (Min n m) (Min n o))
gcdDistributesOverLcm :: forall (a :: Nat) (b :: Nat) (c :: Nat). Dict (Gcd (Lcm a b) c ~ Lcm (Gcd a c) (Gcd b c))
lcmDistributesOverGcd :: forall (a :: Nat) (b :: Nat) (c :: Nat). Dict (Lcm (Gcd a b) c ~ Gcd (Lcm a c) (Lcm b c))
minIsIdempotent :: forall (n :: Nat). Dict (Min n n ~ n)
maxIsIdempotent :: forall (n :: Nat). Dict (Max n n ~ n)
lcmIsIdempotent :: forall (n :: Nat). Dict (Lcm n n ~ n)
gcdIsIdempotent :: forall (n :: Nat). Dict (Gcd n n ~ n)
plusIsCancellative :: forall (n :: Natural) (m :: Natural) (o :: Natural). ((n + m) ~ (n + o)) :- (m ~ o)
timesIsCancellative :: forall (n :: Natural) (m :: Natural) (o :: Natural). (1 <= n, (n * m) ~ (n * o)) :- (m ~ o)
dividesPlus :: forall (a :: Nat) (b :: Nat) (c :: Nat). (Divides a b, Divides a c) :- Divides a (b + c)
dividesTimes :: forall (a :: Nat) (b :: Nat) (c :: Natural). Divides a b :- Divides a (b * c)
dividesMin :: forall (a :: Nat) (b :: Nat) (c :: Nat). (Divides a b, Divides a c) :- Divides a (Min b c)
dividesMax :: forall (a :: Nat) (b :: Nat) (c :: Nat). (Divides a b, Divides a c) :- Divides a (Max b c)
dividesPow :: forall (n :: Natural) (a :: Nat) (b :: Nat). (1 <= n, Divides a b) :- Divides a (b ^ n)
dividesGcd :: forall (a :: Nat) (b :: Nat) (c :: Nat). (Divides a b, Divides a c) :- Divides a (Gcd b c)
dividesLcm :: forall (a :: Nat) (b :: Nat) (c :: Nat). (Divides a c, Divides b c) :- Divides (Lcm a b) c
plusMonotone1 :: forall (a :: Natural) (b :: Natural) (c :: Natural). (a <= b) :- ((a + c) <= (b + c))
plusMonotone2 :: forall (a :: Natural) (b :: Natural) (c :: Natural). (b <= c) :- ((a + b) <= (a + c))
timesMonotone1 :: forall (a :: Natural) (b :: Natural) (c :: Natural). (a <= b) :- ((a * c) <= (b * c))
timesMonotone2 :: forall (a :: Natural) (b :: Natural) (c :: Natural). (b <= c) :- ((a * b) <= (a * c))
powMonotone1 :: forall (a :: Natural) (b :: Natural) (c :: Natural). (a <= b) :- ((a ^ c) <= (b ^ c))
powMonotone2 :: forall (a :: Natural) (b :: Natural) (c :: Natural). (b <= c) :- ((a ^ b) <= (a ^ c))
minMonotone1 :: forall (a :: Nat) (b :: Nat) (c :: Nat). (a <= b) :- (Min a c <= Min b c)
minMonotone2 :: forall (a :: Nat) (b :: Nat) (c :: Nat). (b <= c) :- (Min a b <= Min a c)
maxMonotone1 :: forall (a :: Nat) (b :: Nat) (c :: Nat). (a <= b) :- (Max a c <= Max b c)
maxMonotone2 :: forall (a :: Nat) (b :: Nat) (c :: Nat). (b <= c) :- (Max a b <= Max a c)
divMonotone1 :: forall (a :: Natural) (b :: Natural) (c :: Natural). (a <= b) :- (Div a c <= Div b c)
divMonotone2 :: forall (a :: Natural) (b :: Natural) (c :: Natural). (b <= c) :- (Div a c <= Div a b)
euclideanNat :: forall (c :: Natural) (a :: Natural). (1 <= c) :- (a ~ ((c * Div a c) + Mod a c))
plusMod :: forall (a :: Natural) (b :: Natural) (c :: Natural). (1 <= c) :- (Mod (a + b) c ~ Mod (Mod a c + Mod b c) c)
timesMod :: forall (a :: Natural) (b :: Natural) (c :: Natural). (1 <= c) :- (Mod (a * b) c ~ Mod (Mod a c * Mod b c) c)
modBound :: forall (m :: Natural) (n :: Natural). (1 <= n) :- (Mod m n <= n)
log2Pow :: forall (n :: Natural). Dict (Log2 (2 ^ n) ~ n)
dividesDef :: forall (a :: Nat) (b :: Nat). Divides a b :- (Mod b a ~ 0)
timesDiv :: forall (a :: Natural) (b :: Natural). Dict ((a * Div b a) <= b)
eqLe :: forall (a :: Nat) (b :: Nat). (a ~ b) :- (a <= b)
leEq :: forall (a :: Nat) (b :: Nat). (a <= b, b <= a) :- (a ~ b)
leId :: forall (a :: Nat). Dict (a <= a)
leTrans :: forall (a :: Nat) (b :: Nat) (c :: Nat). (b <= c, a <= b) :- (a <= c)
leZero :: forall (a :: Natural). (a <= 0) :- (a ~ 0)
zeroLe :: forall (a :: Nat). Dict (0 <= a)
plusMinusInverse1 :: forall (n :: Natural) (m :: Natural). Dict (((m + n) - n) ~ m)
plusMinusInverse2 :: forall (n :: Natural) (m :: Natural). (m <= n) :- (((m + n) - m) ~ n)
plusMinusInverse3 :: forall (n :: Natural) (m :: Natural). (n <= m) :- (((m - n) + n) ~ m)

-- | Utilities for working with KnownSymbol constraints.
module Data.Constraint.Symbol

-- | Concatenation of type-level symbols.
type family AppendSymbol (a :: Symbol) (b :: Symbol) :: Symbol

-- | An infix synonym for AppendSymbol.
type (m :: Symbol) ++ (n :: Symbol) = AppendSymbol m n
infixr 5 ++
type family Take :: Nat -> Symbol -> Symbol
type family Drop :: Nat -> Symbol -> Symbol
type family Length :: Symbol -> Nat
appendSymbol :: forall (a :: Symbol) (b :: Symbol). (KnownSymbol a, KnownSymbol b) :- KnownSymbol (AppendSymbol a b)
appendUnit1 :: forall (a :: Symbol). Dict (AppendSymbol "" a ~ a)
appendUnit2 :: forall (a :: Symbol). Dict (AppendSymbol a "" ~ a)
appendAssociates :: forall (a :: Symbol) (b :: Symbol) (c :: Symbol). Dict (AppendSymbol (AppendSymbol a b) c ~ AppendSymbol a (AppendSymbol b c))
takeSymbol :: forall (n :: Nat) (a :: Symbol). (KnownNat n, KnownSymbol a) :- KnownSymbol (Take n a)
dropSymbol :: forall (n :: Nat) (a :: Symbol). (KnownNat n, KnownSymbol a) :- KnownSymbol (Drop n a)
takeAppendDrop :: forall (n :: Nat) (a :: Symbol). Dict (AppendSymbol (Take n a) (Drop n a) ~ a)
lengthSymbol :: forall (a :: Symbol). KnownSymbol a :- KnownNat (Length a)
takeLength :: forall (n :: Nat) (a :: Symbol). (Length a <= n) :- (Take n a ~ a)
take0 :: forall (a :: Symbol). Dict (Take 0 a ~ "")
takeEmpty :: forall (n :: Nat). Dict (Take n "" ~ "")
dropLength :: forall (n :: Nat) (a :: Symbol). (Length a <= n) :- (Drop n a ~ "")
drop0 :: forall (a :: Symbol). Dict (Drop 0 a ~ a)
dropEmpty :: forall (n :: Nat). Dict (Drop n "" ~ "")
lengthTake :: forall (n :: Nat) (a :: Symbol). Dict (Length (Take n a) <= n)
lengthDrop :: forall (n :: Nat) (a :: Symbol). Dict (Length a <= (Length (Drop n a) + n))
dropDrop :: forall (n :: Nat) (m :: Nat) (a :: Symbol). Dict (Drop n (Drop m a) ~ Drop (n + m) a)
takeTake :: forall (n :: Nat) (m :: Nat) (a :: Symbol). Dict (Take n (Take m a) ~ Take (Min n m) a)

-- | Utilities for working with KnownChar constraints.
--   
--   This module is only available on GHC 9.2 or later.
module Data.Constraint.Char

-- | Convert a character to its Unicode code point (cf. ord)
type family CharToNat (a :: Char) :: Natural

-- | Convert a Unicode code point to a character (cf. chr)
type family NatToChar (a :: Natural) :: Char
charToNat :: forall (c :: Char). KnownChar c :- KnownNat (CharToNat c)
natToChar :: forall (n :: Natural). (n <= 1114111, KnownNat n) :- KnownChar (NatToChar n)
