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


-- | A library for working with .cabal files
--   
--   This library provides tools for reading and manipulating the .cabal
--   file format.
@package Cabal-syntax
@version 3.12.0.0

module Distribution.Compat.Binary
decodeOrFailIO :: Binary a => ByteString -> IO (Either String a)

-- | Lazily reconstruct a value previously written to a file.
decodeFileOrFail' :: Binary a => FilePath -> IO (Either String a)

module Distribution.Compat.Exception

-- | Catch <tt>IOException</tt>.
catchIO :: IO a -> (IOException -> IO a) -> IO a

-- | Catch <a>ExitCode</a>
catchExit :: IO a -> (ExitCode -> IO a) -> IO a

-- | Try <tt>IOException</tt>.
tryIO :: IO a -> IO (Either IOException a)
displayException :: Exception e => e -> String


-- | Compatibility layer for <a>Control.Monad.Fail</a>
module Distribution.Compat.MonadFail
class Monad m => MonadFail (m :: Type -> Type)
fail :: MonadFail m => String -> m a


-- | Per Conor McBride, the <a>Newtype</a> typeclass represents the packing
--   and unpacking of a newtype, and allows you to operate under that
--   newtype with functions such as <a>ala</a>.
module Distribution.Compat.Newtype

-- | The <tt>FunctionalDependencies</tt> version of <a>Newtype</a>
--   type-class.
--   
--   Since Cabal-3.0 class arguments are in a different order than in
--   <tt>newtype</tt> package. This change is to allow usage with
--   <tt>DeriveAnyClass</tt> (and <tt>DerivingStrategies</tt>, in GHC-8.2).
--   Unfortunately one has to repeat inner type.
--   
--   <pre>
--   newtype New = New Old
--     deriving anyclass (Newtype Old)
--   </pre>
--   
--   Another approach would be to use <tt>TypeFamilies</tt> (and possibly
--   compute inner type using <a>GHC.Generics</a>), but we think
--   <tt>FunctionalDependencies</tt> version gives cleaner type signatures.
class Newtype o n | n -> o
pack :: Newtype o n => o -> n
($dmpack) :: (Newtype o n, Coercible o n) => o -> n
unpack :: Newtype o n => n -> o
($dmunpack) :: (Newtype o n, Coercible n o) => n -> o

-- | <pre>
--   &gt;&gt;&gt; ala Sum foldMap [1, 2, 3, 4 :: Int]
--   10
--   </pre>
--   
--   <i>Note:</i> the user supplied function for the newtype is
--   <i>ignored</i>.
--   
--   <pre>
--   &gt;&gt;&gt; ala (Sum . (+1)) foldMap [1, 2, 3, 4 :: Int]
--   10
--   </pre>
ala :: (Newtype o n, Newtype o' n') => (o -> n) -> ((o -> n) -> b -> n') -> b -> o'

-- | <pre>
--   &gt;&gt;&gt; alaf Sum foldMap length ["cabal", "install"]
--   12
--   </pre>
--   
--   <i>Note:</i> as with <a>ala</a>, the user supplied function for the
--   newtype is <i>ignored</i>.
alaf :: (Newtype o n, Newtype o' n') => (o -> n) -> ((a -> n) -> b -> n') -> (a -> o) -> b -> o'

-- | Variant of <a>pack</a>, which takes a phantom type.
pack' :: Newtype o n => (o -> n) -> o -> n

-- | Variant of <a>unpack</a>, which takes a phantom type.
unpack' :: Newtype o n => (o -> n) -> n -> o
instance Distribution.Compat.Newtype.Newtype (a -> a) (GHC.Internal.Data.Semigroup.Internal.Endo a)
instance Distribution.Compat.Newtype.Newtype a (GHC.Internal.Data.Functor.Identity.Identity a)
instance Distribution.Compat.Newtype.Newtype a (GHC.Internal.Data.Semigroup.Internal.Product a)
instance Distribution.Compat.Newtype.Newtype a (GHC.Internal.Data.Semigroup.Internal.Sum a)

module Distribution.Compat.Typeable
class Typeable (a :: k)
type TypeRep = SomeTypeRep
typeRep :: forall {k} proxy (a :: k). Typeable a => proxy a -> TypeRep


-- | Common utils used by modules under Distribution.PackageDescription.*.
module Distribution.PackageDescription.Utils
cabalBug :: String -> a
userBug :: String -> a


-- | Implementation of base-62 encoding, which we use when computing hashes
--   for fully instantiated unit ids.
module Distribution.Utils.Base62

-- | Hash a string using GHC's fingerprinting algorithm (a 128-bit MD5
--   hash) and then encode the resulting hash in base 62.
hashToBase62 :: String -> String

module Distribution.Utils.MD5
type MD5 = Fingerprint

-- | Show <a>MD5</a> in human readable form
--   
--   <pre>
--   &gt;&gt;&gt; showMD5 (Fingerprint 123 456)
--   "000000000000007b00000000000001c8"
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; showMD5 $ md5 $ BS.pack [0..127]
--   "37eff01866ba3f538421b30b7cbefcac"
--   </pre>
--   
--   @since 3.2.0.0
showMD5 :: MD5 -> String

-- | @since 3.2.0.0
md5 :: ByteString -> MD5

-- | <pre>
--   &gt;&gt;&gt; showMD5 $ md5FromInteger 0x37eff01866ba3f538421b30b7cbefcac
--   "37eff01866ba3f538421b30b7cbefcac"
--   </pre>
--   
--   Note: the input is truncated:
--   
--   <pre>
--   &gt;&gt;&gt; showMD5 $ md5FromInteger 0x1230000037eff01866ba3f538421b30b7cbefcac
--   "37eff01866ba3f538421b30b7cbefcac"
--   </pre>
--   
--   Yet, negative numbers are not a problem...
--   
--   <pre>
--   &gt;&gt;&gt; showMD5 $ md5FromInteger (-1)
--   "ffffffffffffffffffffffffffffffff"
--   </pre>
md5FromInteger :: Integer -> MD5

-- | @since 3.2.0.0
binaryPutMD5 :: MD5 -> Put

-- | @since 3.2.0.0
binaryGetMD5 :: Get MD5

module Distribution.Utils.String

-- | Decode <a>String</a> from UTF8-encoded octets.
--   
--   Invalid data in the UTF8 stream (this includes code-points
--   <tt>U+D800</tt> through <tt>U+DFFF</tt>) will be decoded as the
--   replacement character (<tt>U+FFFD</tt>).
--   
--   See also <a>encodeStringUtf8</a>
decodeStringUtf8 :: [Word8] -> String

-- | Encode <a>String</a> to a list of UTF8-encoded octets
--   
--   Code-points in the <tt>U+D800</tt>-<tt>U+DFFF</tt> range will be
--   encoded as the replacement character (i.e. <tt>U+FFFD</tt>).
--   
--   See also <tt>decodeUtf8</tt>
encodeStringUtf8 :: String -> [Word8]
trim :: String -> String


-- | Structurally tag binary serialisation stream. Useful when most
--   <tt>Binary</tt> instances are <a>Generic</a> derived.
--   
--   Say you have a data type
--   
--   <pre>
--   data Record = Record
--     { _recordFields  :: HM.HashMap Text (Integer, ByteString)
--     , _recordEnabled :: Bool
--     }
--     deriving (Eq, Show, Generic)
--   
--   instance <tt>Binary</tt> Record
--   instance <a>Structured</a> Record
--   </pre>
--   
--   then you can serialise and deserialise <tt>Record</tt> values with a
--   structure tag by simply
--   
--   <pre>
--   <a>structuredEncode</a> record :: <a>ByteString</a>
--   <a>structuredDecode</a> lbs :: IO Record
--   </pre>
--   
--   If structure of <tt>Record</tt> changes in between, deserialisation
--   will fail early.
--   
--   Technically, <a>Structured</a> is not related to <tt>Binary</tt>, and
--   may be useful in other uses.
module Distribution.Utils.Structured

-- | Structured <a>encode</a>. Encode a value to using binary serialisation
--   to a lazy <a>ByteString</a>. Encoding starts with 16 byte large
--   structure hash.
structuredEncode :: (Binary a, Structured a) => a -> ByteString

-- | Lazily serialise a value to a file
structuredEncodeFile :: (Binary a, Structured a) => FilePath -> a -> IO ()

-- | Structured <a>decode</a>. Decode a value from a lazy
--   <a>ByteString</a>, reconstructing the original structure. Throws pure
--   exception on invalid inputs.
structuredDecode :: (Binary a, Structured a) => ByteString -> a
structuredDecodeOrFailIO :: (Binary a, Structured a) => ByteString -> IO (Either String a)

-- | Lazily reconstruct a value previously written to a file.
structuredDecodeFileOrFail :: (Binary a, Structured a) => FilePath -> IO (Either String a)

-- | Class of types with a known <a>Structure</a>.
--   
--   For regular data types <a>Structured</a> can be derived generically.
--   
--   <pre>
--   data Record = Record { a :: Int, b :: Bool, c :: [Char] } deriving (<a>Generic</a>)
--   instance <a>Structured</a> Record
--   </pre>
class Typeable a => Structured a
structure :: Structured a => Proxy a -> Structure
($dmstructure) :: (Structured a, Generic a, GStructured (Rep a)) => Proxy a -> Structure
type MD5 = Fingerprint

-- | Semantically <tt><a>hashStructure</a> . <a>structure</a></tt>.
structureHash :: Structured a => Proxy a -> MD5

-- | Flatten <a>Structure</a> into something we can calculate hash of.
--   
--   As <a>Structure</a> can be potentially infinite. For mutually
--   recursive types, we keep track of <a>TypeRep</a>s, and put just
--   <a>TypeRep</a> name when it's occurred another time.
structureBuilder :: Structure -> Builder

-- | Derive <a>structure</a> generically.
genericStructure :: (Typeable a, Generic a, GStructured (Rep a)) => Proxy a -> Structure

-- | Used to implement <a>genericStructure</a>.
class GStructured (f :: Type -> Type)

-- | Use <a>Typeable</a> to infer name
nominalStructure :: forall {k} (a :: k). Typeable a => Proxy a -> Structure
containerStructure :: forall {k} (f :: Type -> k) a. (Typeable f, Structured a) => Proxy (f a) -> Structure

-- | Structure of a datatype.
--   
--   It can be infinite, as far as <a>TypeRep</a>s involved are finite.
--   (e.g. polymorphic recursion might cause troubles).
data Structure

-- | nominal, yet can be parametrised by other structures.
Nominal :: !TypeRep -> !TypeVersion -> TypeName -> [Structure] -> Structure

-- | a newtype wrapper
Newtype :: !TypeRep -> !TypeVersion -> TypeName -> Structure -> Structure

-- | sum-of-products structure
Structure :: !TypeRep -> !TypeVersion -> TypeName -> SopStructure -> Structure
data Tag (a :: k)
Tag :: Tag (a :: k)
type TypeName = String
type ConstructorName = String

-- | A semantic version of a data type. Usually 0.
type TypeVersion = Word32
type SopStructure = [(ConstructorName, [Structure])]

-- | A MD5 hash digest of <a>Structure</a>.
hashStructure :: Structure -> MD5

-- | A van-Laarhoven lens into <a>TypeVersion</a> of <a>Structure</a>
--   
--   <pre>
--   <a>typeVersion</a> :: Lens' <a>Structure</a> <a>TypeVersion</a>
--   </pre>
typeVersion :: Functor f => (TypeVersion -> f TypeVersion) -> Structure -> f Structure

-- | A van-Laarhoven lens into <a>TypeName</a> of <a>Structure</a>
--   
--   <pre>
--   <a>typeName</a> :: Lens' <a>Structure</a> <a>TypeName</a>
--   </pre>
typeName :: Functor f => (TypeName -> f TypeName) -> Structure -> f Structure
instance Distribution.Utils.Structured.Structured a => Data.Binary.Class.Binary (Distribution.Utils.Structured.Tag a)
instance GHC.Classes.Eq Distribution.Utils.Structured.Structure
instance (i GHC.Types.~ GHC.Internal.Generics.D, GHC.Internal.Generics.Datatype c, Distribution.Utils.Structured.GStructuredSum f) => Distribution.Utils.Structured.GStructured (GHC.Internal.Generics.M1 i c f)
instance (Distribution.Utils.Structured.GStructuredProd f, Distribution.Utils.Structured.GStructuredProd g) => Distribution.Utils.Structured.GStructuredProd (f GHC.Internal.Generics.:*: g)
instance Distribution.Utils.Structured.Structured c => Distribution.Utils.Structured.GStructuredProd (GHC.Internal.Generics.K1 i c)
instance (i GHC.Types.~ GHC.Internal.Generics.S, Distribution.Utils.Structured.GStructuredProd f) => Distribution.Utils.Structured.GStructuredProd (GHC.Internal.Generics.M1 i c f)
instance Distribution.Utils.Structured.GStructuredProd GHC.Internal.Generics.U1
instance (Distribution.Utils.Structured.GStructuredSum f, Distribution.Utils.Structured.GStructuredSum g) => Distribution.Utils.Structured.GStructuredSum (f GHC.Internal.Generics.:+: g)
instance (i GHC.Types.~ GHC.Internal.Generics.C, GHC.Internal.Generics.Constructor c, Distribution.Utils.Structured.GStructuredProd f) => Distribution.Utils.Structured.GStructuredSum (GHC.Internal.Generics.M1 i c f)
instance Distribution.Utils.Structured.GStructuredSum GHC.Internal.Generics.V1
instance GHC.Internal.Generics.Generic Distribution.Utils.Structured.Structure
instance GHC.Classes.Ord Distribution.Utils.Structured.Structure
instance GHC.Internal.Show.Show Distribution.Utils.Structured.Structure
instance Distribution.Utils.Structured.Structured GHC.Types.Bool
instance Distribution.Utils.Structured.Structured Data.ByteString.Lazy.Internal.ByteString
instance Distribution.Utils.Structured.Structured Data.ByteString.Internal.Type.ByteString
instance Distribution.Utils.Structured.Structured GHC.Types.Char
instance Distribution.Utils.Structured.Structured Data.Time.Calendar.Days.Day
instance Distribution.Utils.Structured.Structured Data.Time.Clock.Internal.DiffTime.DiffTime
instance Distribution.Utils.Structured.Structured GHC.Types.Double
instance (Distribution.Utils.Structured.Structured a, Distribution.Utils.Structured.Structured b) => Distribution.Utils.Structured.Structured (GHC.Internal.Data.Either.Either a b)
instance Distribution.Utils.Structured.Structured GHC.Types.Float
instance Distribution.Utils.Structured.Structured GHC.Types.Int
instance Distribution.Utils.Structured.Structured GHC.Internal.Int.Int16
instance Distribution.Utils.Structured.Structured GHC.Internal.Int.Int32
instance Distribution.Utils.Structured.Structured GHC.Internal.Int.Int64
instance Distribution.Utils.Structured.Structured GHC.Internal.Int.Int8
instance Distribution.Utils.Structured.Structured v => Distribution.Utils.Structured.Structured (Data.IntMap.Internal.IntMap v)
instance Distribution.Utils.Structured.Structured Data.IntSet.Internal.IntSet
instance Distribution.Utils.Structured.Structured GHC.Num.Integer.Integer
instance Distribution.Utils.Structured.Structured a => Distribution.Utils.Structured.Structured [a]
instance Distribution.Utils.Structured.Structured Data.Time.LocalTime.Internal.LocalTime.LocalTime
instance (Distribution.Utils.Structured.Structured k, Distribution.Utils.Structured.Structured v) => Distribution.Utils.Structured.Structured (Data.Map.Internal.Map k v)
instance Distribution.Utils.Structured.Structured a => Distribution.Utils.Structured.Structured (GHC.Internal.Maybe.Maybe a)
instance Distribution.Utils.Structured.Structured Data.Time.Clock.Internal.NominalDiffTime.NominalDiffTime
instance Distribution.Utils.Structured.Structured a => Distribution.Utils.Structured.Structured (GHC.Internal.Base.NonEmpty a)
instance Distribution.Utils.Structured.Structured GHC.Types.Ordering
instance Distribution.Utils.Structured.Structured a => Distribution.Utils.Structured.Structured (GHC.Internal.Real.Ratio a)
instance Distribution.Utils.Structured.Structured v => Distribution.Utils.Structured.Structured (Data.Sequence.Internal.Seq v)
instance Distribution.Utils.Structured.Structured k => Distribution.Utils.Structured.Structured (Data.Set.Internal.Set k)
instance Distribution.Utils.Structured.Structured Data.Text.Internal.Lazy.Text
instance Distribution.Utils.Structured.Structured Data.Text.Internal.Text
instance Distribution.Utils.Structured.Structured Data.Time.LocalTime.Internal.TimeOfDay.TimeOfDay
instance Distribution.Utils.Structured.Structured Data.Time.LocalTime.Internal.TimeZone.TimeZone
instance (Distribution.Utils.Structured.Structured a1, Distribution.Utils.Structured.Structured a2) => Distribution.Utils.Structured.Structured (a1, a2)
instance (Distribution.Utils.Structured.Structured a1, Distribution.Utils.Structured.Structured a2, Distribution.Utils.Structured.Structured a3) => Distribution.Utils.Structured.Structured (a1, a2, a3)
instance (Distribution.Utils.Structured.Structured a1, Distribution.Utils.Structured.Structured a2, Distribution.Utils.Structured.Structured a3, Distribution.Utils.Structured.Structured a4) => Distribution.Utils.Structured.Structured (a1, a2, a3, a4)
instance (Distribution.Utils.Structured.Structured a1, Distribution.Utils.Structured.Structured a2, Distribution.Utils.Structured.Structured a3, Distribution.Utils.Structured.Structured a4, Distribution.Utils.Structured.Structured a5) => Distribution.Utils.Structured.Structured (a1, a2, a3, a4, a5)
instance (Distribution.Utils.Structured.Structured a1, Distribution.Utils.Structured.Structured a2, Distribution.Utils.Structured.Structured a3, Distribution.Utils.Structured.Structured a4, Distribution.Utils.Structured.Structured a5, Distribution.Utils.Structured.Structured a6) => Distribution.Utils.Structured.Structured (a1, a2, a3, a4, a5, a6)
instance (Distribution.Utils.Structured.Structured a1, Distribution.Utils.Structured.Structured a2, Distribution.Utils.Structured.Structured a3, Distribution.Utils.Structured.Structured a4, Distribution.Utils.Structured.Structured a5, Distribution.Utils.Structured.Structured a6, Distribution.Utils.Structured.Structured a7) => Distribution.Utils.Structured.Structured (a1, a2, a3, a4, a5, a6, a7)
instance Distribution.Utils.Structured.Structured Data.Time.Clock.Internal.UTCTime.UTCTime
instance Distribution.Utils.Structured.Structured ()
instance Distribution.Utils.Structured.Structured Data.Time.Clock.Internal.UniversalTime.UniversalTime
instance Distribution.Utils.Structured.Structured GHC.Types.Word
instance Distribution.Utils.Structured.Structured GHC.Internal.Word.Word16
instance Distribution.Utils.Structured.Structured GHC.Internal.Word.Word32
instance Distribution.Utils.Structured.Structured GHC.Internal.Word.Word64
instance Distribution.Utils.Structured.Structured GHC.Internal.Word.Word8


-- | Compatibility layer for <a>Data.Semigroup</a>
module Distribution.Compat.Semigroup
class Semigroup a
(<>) :: Semigroup a => a -> a -> a
class Semigroup a => Monoid a
mempty :: Monoid a => a
mappend :: Monoid a => a -> a -> a
mconcat :: Monoid a => [a] -> a
newtype All
All :: Bool -> All
[getAll] :: All -> Bool
newtype Any
Any :: Bool -> Any
[getAny] :: Any -> Bool

-- | A copy of <a>First</a>.
newtype First' a
First' :: a -> First' a
[getFirst'] :: First' a -> a

-- | A copy of <a>Last</a>.
newtype Last' a
Last' :: a -> Last' a
[getLast'] :: Last' a -> a

-- | A wrapper around <a>Maybe</a>, providing the <a>Semigroup</a> and
--   <a>Monoid</a> instances implemented for <a>Maybe</a> since
--   <tt>base-4.11</tt>.
newtype Option' a
Option' :: Maybe a -> Option' a
[getOption'] :: Option' a -> Maybe a

-- | Generically generate a <a>Semigroup</a> (<a>&lt;&gt;</a>) operation
--   for any type implementing <a>Generic</a>. This operation will append
--   two values by point-wise appending their component fields. It is only
--   defined for product types.
--   
--   <pre>
--   <a>gmappend</a> a (<a>gmappend</a> b c) = <a>gmappend</a> (<a>gmappend</a> a b) c
--   </pre>
gmappend :: (Generic a, GSemigroup (Rep a)) => a -> a -> a

-- | Generically generate a <a>Monoid</a> <a>mempty</a> for any
--   product-like type implementing <a>Generic</a>.
--   
--   It is only defined for product types.
--   
--   <pre>
--   <a>gmappend</a> <a>gmempty</a> a = a = <a>gmappend</a> a <a>gmempty</a>
--   </pre>
gmempty :: (Generic a, GMonoid (Rep a)) => a
instance Data.Binary.Class.Binary a => Data.Binary.Class.Binary (Distribution.Compat.Semigroup.Last' a)
instance Data.Binary.Class.Binary a => Data.Binary.Class.Binary (Distribution.Compat.Semigroup.Option' a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (Distribution.Compat.Semigroup.First' a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (Distribution.Compat.Semigroup.Last' a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (Distribution.Compat.Semigroup.Option' a)
instance GHC.Internal.Base.Functor Distribution.Compat.Semigroup.Last'
instance GHC.Internal.Base.Functor Distribution.Compat.Semigroup.Option'
instance (Distribution.Compat.Semigroup.GMonoid f, Distribution.Compat.Semigroup.GMonoid g) => Distribution.Compat.Semigroup.GMonoid (f GHC.Internal.Generics.:*: g)
instance (GHC.Internal.Base.Semigroup a, GHC.Internal.Base.Monoid a) => Distribution.Compat.Semigroup.GMonoid (GHC.Internal.Generics.K1 i a)
instance Distribution.Compat.Semigroup.GMonoid f => Distribution.Compat.Semigroup.GMonoid (GHC.Internal.Generics.M1 i c f)
instance (Distribution.Compat.Semigroup.GSemigroup f, Distribution.Compat.Semigroup.GSemigroup g) => Distribution.Compat.Semigroup.GSemigroup (f GHC.Internal.Generics.:*: g)
instance GHC.Internal.Base.Semigroup a => Distribution.Compat.Semigroup.GSemigroup (GHC.Internal.Generics.K1 i a)
instance Distribution.Compat.Semigroup.GSemigroup f => Distribution.Compat.Semigroup.GSemigroup (GHC.Internal.Generics.M1 i c f)
instance GHC.Internal.Generics.Generic (Distribution.Compat.Semigroup.Last' a)
instance GHC.Internal.Generics.Generic (Distribution.Compat.Semigroup.Option' a)
instance GHC.Internal.Base.Semigroup a => GHC.Internal.Base.Monoid (Distribution.Compat.Semigroup.Option' a)
instance GHC.Classes.Ord a => GHC.Classes.Ord (Distribution.Compat.Semigroup.First' a)
instance GHC.Classes.Ord a => GHC.Classes.Ord (Distribution.Compat.Semigroup.Last' a)
instance GHC.Classes.Ord a => GHC.Classes.Ord (Distribution.Compat.Semigroup.Option' a)
instance GHC.Internal.Read.Read a => GHC.Internal.Read.Read (Distribution.Compat.Semigroup.Last' a)
instance GHC.Internal.Read.Read a => GHC.Internal.Read.Read (Distribution.Compat.Semigroup.Option' a)
instance GHC.Internal.Base.Semigroup (Distribution.Compat.Semigroup.First' a)
instance GHC.Internal.Base.Semigroup (Distribution.Compat.Semigroup.Last' a)
instance GHC.Internal.Base.Semigroup a => GHC.Internal.Base.Semigroup (Distribution.Compat.Semigroup.Option' a)
instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Distribution.Compat.Semigroup.First' a)
instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Distribution.Compat.Semigroup.Last' a)
instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Distribution.Compat.Semigroup.Option' a)
instance Distribution.Utils.Structured.Structured a => Distribution.Utils.Structured.Structured (Distribution.Compat.Semigroup.Last' a)
instance Distribution.Utils.Structured.Structured a => Distribution.Utils.Structured.Structured (Distribution.Compat.Semigroup.Option' a)

module Distribution.Compat.NonEmptySet

data NonEmptySet a
singleton :: a -> NonEmptySet a
insert :: Ord a => a -> NonEmptySet a -> NonEmptySet a
delete :: Ord a => a -> NonEmptySet a -> Maybe (NonEmptySet a)
toNonEmpty :: NonEmptySet a -> NonEmpty a
fromNonEmpty :: Ord a => NonEmpty a -> NonEmptySet a
toList :: NonEmptySet a -> [a]
toSet :: NonEmptySet a -> Set a
member :: Ord a => a -> NonEmptySet a -> Bool
map :: Ord b => (a -> b) -> NonEmptySet a -> NonEmptySet b
instance Data.Binary.Class.Binary a => Data.Binary.Class.Binary (Distribution.Compat.NonEmptySet.NonEmptySet a)
instance (GHC.Internal.Data.Data.Data a, GHC.Classes.Ord a) => GHC.Internal.Data.Data.Data (Distribution.Compat.NonEmptySet.NonEmptySet a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (Distribution.Compat.NonEmptySet.NonEmptySet a)
instance GHC.Internal.Data.Foldable.Foldable Distribution.Compat.NonEmptySet.NonEmptySet
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Distribution.Compat.NonEmptySet.NonEmptySet a)
instance GHC.Classes.Ord a => GHC.Classes.Ord (Distribution.Compat.NonEmptySet.NonEmptySet a)
instance (GHC.Internal.Read.Read a, GHC.Classes.Ord a) => GHC.Internal.Read.Read (Distribution.Compat.NonEmptySet.NonEmptySet a)
instance GHC.Classes.Ord a => GHC.Internal.Base.Semigroup (Distribution.Compat.NonEmptySet.NonEmptySet a)
instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Distribution.Compat.NonEmptySet.NonEmptySet a)
instance Distribution.Utils.Structured.Structured a => Distribution.Utils.Structured.Structured (Distribution.Compat.NonEmptySet.NonEmptySet a)


-- | This module does two things:
--   
--   <ul>
--   <li>Acts as a compatibility layer, like <tt>base-compat</tt>.</li>
--   <li>Provides commonly used imports.</li>
--   </ul>
module Distribution.Compat.Prelude
data Int
data Float
data Char
data Maybe a
Nothing :: Maybe a
Just :: a -> Maybe a
data IO a
data Bool
False :: Bool
True :: Bool
data Double
data Ordering
LT :: Ordering
EQ :: Ordering
GT :: Ordering
class a ~# b => (a :: k) ~ (b :: k)
data Integer
cycle :: HasCallStack => [a] -> [a]
const :: a -> b -> a
(++) :: [a] -> [a] -> [a]
seq :: a -> b -> b
concat :: Foldable t => t [a] -> [a]
filter :: (a -> Bool) -> [a] -> [a]
zip :: [a] -> [b] -> [(a, b)]
print :: Show a => a -> IO ()
otherwise :: Bool
map :: (a -> b) -> [a] -> [b]
($) :: (a -> b) -> a -> b
class Num a
(+) :: Num a => a -> a -> a
(-) :: Num a => a -> a -> a
(*) :: Num a => a -> a -> a
negate :: Num a => a -> a
abs :: Num a => a -> a
signum :: Num a => a -> a
fromInteger :: Num a => Integer -> a
class Num a => Fractional a
(/) :: Fractional a => a -> a -> a
recip :: Fractional a => a -> a
fromRational :: Fractional a => Rational -> a
class Enum a
succ :: Enum a => a -> a
pred :: Enum a => a -> a
toEnum :: Enum a => Int -> a
fromEnum :: Enum a => a -> Int
enumFrom :: Enum a => a -> [a]
enumFromThen :: Enum a => a -> a -> [a]
enumFromTo :: Enum a => a -> a -> [a]
enumFromThenTo :: Enum a => a -> a -> a -> [a]
class Eq a
(==) :: Eq a => a -> a -> Bool
(/=) :: Eq a => a -> a -> Bool
class Eq a => Ord a
compare :: Ord a => a -> a -> Ordering
(<) :: Ord a => a -> a -> Bool
(<=) :: Ord a => a -> a -> Bool
(>) :: Ord a => a -> a -> Bool
(>=) :: Ord a => a -> a -> Bool
max :: Ord a => a -> a -> a
min :: Ord a => a -> a -> a
class Applicative m => Monad (m :: Type -> Type)
(>>=) :: Monad m => m a -> (a -> m b) -> m b
(>>) :: Monad m => m a -> m b -> m b
return :: Monad m => a -> m a
class Functor (f :: Type -> Type)
fmap :: Functor f => (a -> b) -> f a -> f b
(<$) :: Functor f => a -> f b -> f a
class Monad m => MonadFail (m :: Type -> Type)
fail :: MonadFail m => String -> m a
fromIntegral :: (Integral a, Num b) => a -> b
realToFrac :: (Real a, Fractional b) => a -> b
class (Real a, Enum a) => Integral a
quot :: Integral a => a -> a -> a
rem :: Integral a => a -> a -> a
div :: Integral a => a -> a -> a
mod :: Integral a => a -> a -> a
quotRem :: Integral a => a -> a -> (a, a)
divMod :: Integral a => a -> a -> (a, a)
toInteger :: Integral a => a -> Integer
class (Num a, Ord a) => Real a
toRational :: Real a => a -> Rational
class Semigroup a => Monoid a
mempty :: Monoid a => a
mappend :: Monoid a => a -> a -> a
mconcat :: Monoid a => [a] -> a
class Functor f => Applicative (f :: Type -> Type)
pure :: Applicative f => a -> f a
(<*>) :: Applicative f => f (a -> b) -> f a -> f b
liftA2 :: Applicative f => (a -> b -> c) -> f a -> f b -> f c
(*>) :: Applicative f => f a -> f b -> f b
(<*) :: Applicative f => f a -> f b -> f a
class Bounded a
minBound :: Bounded a => a
maxBound :: Bounded a => a
class Fractional a => Floating a
pi :: Floating a => a
exp :: Floating a => a -> a
log :: Floating a => a -> a
sqrt :: Floating a => a -> a
(**) :: Floating a => a -> a -> a
logBase :: Floating a => a -> a -> a
sin :: Floating a => a -> a
cos :: Floating a => a -> a
tan :: Floating a => a -> a
asin :: Floating a => a -> a
acos :: Floating a => a -> a
atan :: Floating a => a -> a
sinh :: Floating a => a -> a
cosh :: Floating a => a -> a
tanh :: Floating a => a -> a
asinh :: Floating a => a -> a
acosh :: Floating a => a -> a
atanh :: Floating a => a -> a
class Read a
readsPrec :: Read a => Int -> ReadS a
readList :: Read a => ReadS [a]
class (RealFrac a, Floating a) => RealFloat a
floatRadix :: RealFloat a => a -> Integer
floatDigits :: RealFloat a => a -> Int
floatRange :: RealFloat a => a -> (Int, Int)
decodeFloat :: RealFloat a => a -> (Integer, Int)
encodeFloat :: RealFloat a => Integer -> Int -> a
exponent :: RealFloat a => a -> Int
significand :: RealFloat a => a -> a
scaleFloat :: RealFloat a => Int -> a -> a
isNaN :: RealFloat a => a -> Bool
isInfinite :: RealFloat a => a -> Bool
isDenormalized :: RealFloat a => a -> Bool
isNegativeZero :: RealFloat a => a -> Bool
isIEEE :: RealFloat a => a -> Bool
atan2 :: RealFloat a => a -> a -> a
class (Real a, Fractional a) => RealFrac a
properFraction :: (RealFrac a, Integral b) => a -> (b, a)
truncate :: (RealFrac a, Integral b) => a -> b
round :: (RealFrac a, Integral b) => a -> b
ceiling :: (RealFrac a, Integral b) => a -> b
floor :: (RealFrac a, Integral b) => a -> b
class Show a
showsPrec :: Show a => Int -> a -> ShowS
show :: Show a => a -> String
showList :: Show a => [a] -> ShowS
type String = [Char]
type Rational = Ratio Integer
data Either a b
Left :: a -> Either a b
Right :: b -> Either a b
(^) :: (Num a, Integral b) => a -> b -> a
(&&) :: Bool -> Bool -> Bool
(||) :: Bool -> Bool -> Bool
not :: Bool -> Bool
error :: HasCallStack => [Char] -> a
errorWithoutStackTrace :: [Char] -> a
undefined :: HasCallStack => a
(=<<) :: Monad m => (a -> m b) -> m a -> m b
id :: a -> a
(.) :: (b -> c) -> (a -> b) -> a -> c
flip :: (a -> b -> c) -> b -> a -> c
($!) :: (a -> b) -> a -> b
until :: (a -> Bool) -> (a -> a) -> a -> a
asTypeOf :: a -> a -> a
subtract :: Num a => a -> a -> a
maybe :: b -> (a -> b) -> Maybe a -> b
foldl :: Foldable t => (b -> a -> b) -> b -> t a -> b
sum :: (Foldable t, Num a) => t a -> a
product :: (Foldable t, Num a) => t a -> a
maximum :: (Foldable t, Ord a) => t a -> a
minimum :: (Foldable t, Ord a) => t a -> a
elem :: (Foldable t, Eq a) => a -> t a -> Bool
scanl :: (b -> a -> b) -> b -> [a] -> [b]
scanl1 :: (a -> a -> a) -> [a] -> [a]
scanr :: (a -> b -> b) -> b -> [a] -> [b]
scanr1 :: (a -> a -> a) -> [a] -> [a]
iterate :: (a -> a) -> a -> [a]
repeat :: a -> [a]
replicate :: Int -> a -> [a]
takeWhile :: (a -> Bool) -> [a] -> [a]
dropWhile :: (a -> Bool) -> [a] -> [a]
take :: Int -> [a] -> [a]
drop :: Int -> [a] -> [a]
splitAt :: Int -> [a] -> ([a], [a])
span :: (a -> Bool) -> [a] -> ([a], [a])
break :: (a -> Bool) -> [a] -> ([a], [a])
reverse :: [a] -> [a]
and :: Foldable t => t Bool -> Bool
or :: Foldable t => t Bool -> Bool
notElem :: (Foldable t, Eq a) => a -> t a -> Bool
lookup :: Eq a => a -> [(a, b)] -> Maybe b
concatMap :: Foldable t => (a -> [b]) -> t a -> [b]
(!!) :: HasCallStack => [a] -> Int -> a
zip3 :: [a] -> [b] -> [c] -> [(a, b, c)]
zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
zipWith3 :: (a -> b -> c -> d) -> [a] -> [b] -> [c] -> [d]
unzip :: [(a, b)] -> ([a], [b])
unzip3 :: [(a, b, c)] -> ([a], [b], [c])
type ShowS = String -> String
shows :: Show a => a -> ShowS
showChar :: Char -> ShowS
showString :: String -> ShowS
showParen :: Bool -> ShowS -> ShowS
even :: Integral a => a -> Bool
odd :: Integral a => a -> Bool
(^^) :: (Fractional a, Integral b) => a -> b -> a
gcd :: Integral a => a -> a -> a
lcm :: Integral a => a -> a -> a
fst :: (a, b) -> a
snd :: (a, b) -> b
curry :: ((a, b) -> c) -> a -> b -> c
uncurry :: (a -> b -> c) -> (a, b) -> c
(<$>) :: Functor f => (a -> b) -> f a -> f b
type ReadS a = String -> [(a, String)]
lex :: ReadS String
readParen :: Bool -> ReadS a -> ReadS a
either :: (a -> c) -> (b -> c) -> Either a b -> c
reads :: Read a => ReadS a
sequence_ :: (Foldable t, Monad m) => t (m a) -> m ()
lines :: String -> [String]
unlines :: [String] -> String
words :: String -> [String]
unwords :: [String] -> String
type IOError = IOException
userError :: String -> IOError
type FilePath = String
ioError :: IOError -> IO a
putChar :: Char -> IO ()
putStr :: String -> IO ()
putStrLn :: String -> IO ()
getChar :: IO Char
getLine :: IO String
getContents :: IO String
interact :: (String -> String) -> IO ()
readFile :: FilePath -> IO String
writeFile :: FilePath -> String -> IO ()
appendFile :: FilePath -> String -> IO ()
readLn :: Read a => IO a
readIO :: Read a => String -> IO a
class Semigroup a
(<>) :: Semigroup a => a -> a -> a

-- | Generically generate a <a>Semigroup</a> (<a>&lt;&gt;</a>) operation
--   for any type implementing <a>Generic</a>. This operation will append
--   two values by point-wise appending their component fields. It is only
--   defined for product types.
--   
--   <pre>
--   <a>gmappend</a> a (<a>gmappend</a> b c) = <a>gmappend</a> (<a>gmappend</a> a b) c
--   </pre>
gmappend :: (Generic a, GSemigroup (Rep a)) => a -> a -> a

-- | Generically generate a <a>Monoid</a> <a>mempty</a> for any
--   product-like type implementing <a>Generic</a>.
--   
--   It is only defined for product types.
--   
--   <pre>
--   <a>gmappend</a> <a>gmempty</a> a = a = <a>gmappend</a> a <a>gmempty</a>
--   </pre>
gmempty :: (Generic a, GMonoid (Rep a)) => a
class Typeable (a :: k)
type TypeRep = SomeTypeRep
typeRep :: forall {k} proxy (a :: k). Typeable a => proxy a -> TypeRep
class Typeable a => Data a
class Generic a

-- | A class of types that can be fully evaluated.
class NFData a

-- | <a>rnf</a> should reduce its argument to normal form (that is, fully
--   evaluate all sub-components), and then return <tt>()</tt>.
--   
--   <h3><a>Generic</a> <a>NFData</a> deriving</h3>
--   
--   Starting with GHC 7.2, you can automatically derive instances for
--   types possessing a <a>Generic</a> instance.
--   
--   Note: <a>Generic1</a> can be auto-derived starting with GHC 7.4
--   
--   <pre>
--   {-# LANGUAGE DeriveGeneric #-}
--   
--   import GHC.Generics (Generic, Generic1)
--   import Control.DeepSeq
--   
--   data Foo a = Foo a String
--                deriving (Eq, Generic, Generic1)
--   
--   instance NFData a =&gt; NFData (Foo a)
--   instance NFData1 Foo
--   
--   data Colour = Red | Green | Blue
--                 deriving Generic
--   
--   instance NFData Colour
--   </pre>
--   
--   Starting with GHC 7.10, the example above can be written more
--   concisely by enabling the new <tt>DeriveAnyClass</tt> extension:
--   
--   <pre>
--   {-# LANGUAGE DeriveGeneric, DeriveAnyClass #-}
--   
--   import GHC.Generics (Generic)
--   import Control.DeepSeq
--   
--   data Foo a = Foo a String
--                deriving (Eq, Generic, Generic1, NFData, NFData1)
--   
--   data Colour = Red | Green | Blue
--                 deriving (Generic, NFData)
--   </pre>
--   
--   <h3>Compatibility with previous <tt>deepseq</tt> versions</h3>
--   
--   Prior to version 1.4.0.0, the default implementation of the <a>rnf</a>
--   method was defined as
--   
--   <pre>
--   <a>rnf</a> a = <a>seq</a> a ()
--   </pre>
--   
--   However, starting with <tt>deepseq-1.4.0.0</tt>, the default
--   implementation is based on <tt>DefaultSignatures</tt> allowing for
--   more accurate auto-derived <a>NFData</a> instances. If you need the
--   previously used exact default <a>rnf</a> method implementation
--   semantics, use
--   
--   <pre>
--   instance NFData Colour where rnf x = seq x ()
--   </pre>
--   
--   or alternatively
--   
--   <pre>
--   instance NFData Colour where rnf = rwhnf
--   </pre>
--   
--   or
--   
--   <pre>
--   {-# LANGUAGE BangPatterns #-}
--   instance NFData Colour where rnf !_ = ()
--   </pre>
rnf :: NFData a => a -> ()
($dmrnf) :: (NFData a, Generic a, GNFData Zero (Rep a)) => a -> ()

-- | <a>GHC.Generics</a>-based <a>rnf</a> implementation
--   
--   This is needed in order to support <tt>deepseq &lt; 1.4</tt> which
--   didn't have a <a>Generic</a>-based default <a>rnf</a> implementation
--   yet.
--   
--   In order to define instances, use e.g.
--   
--   <pre>
--   instance NFData MyType where rnf = genericRnf
--   </pre>
--   
--   The implementation has been taken from <tt>deepseq-1.4.2</tt>'s
--   default <a>rnf</a> implementation.
genericRnf :: (Generic a, GNFData (Rep a)) => a -> ()

-- | The <a>Binary</a> class provides <a>put</a> and <a>get</a>, methods to
--   encode and decode a Haskell value to a lazy <a>ByteString</a>. It
--   mirrors the <a>Read</a> and <a>Show</a> classes for textual
--   representation of Haskell types, and is suitable for serialising
--   Haskell values to disk, over the network.
--   
--   For decoding and generating simple external binary formats (e.g. C
--   structures), Binary may be used, but in general is not suitable for
--   complex protocols. Instead use the <a>Put</a> and <a>Get</a>
--   primitives directly.
--   
--   Instances of Binary should satisfy the following property:
--   
--   <pre>
--   decode . encode == id
--   </pre>
--   
--   That is, the <a>get</a> and <a>put</a> methods should be the inverse
--   of each other. A range of instances are provided for basic Haskell
--   types.
class Binary t

-- | Encode a value in the Put monad.
put :: Binary t => t -> Put
($dmput) :: (Binary t, Generic t, GBinaryPut (Rep t)) => t -> Put

-- | Decode a value in the Get monad
get :: Binary t => Get t
($dmget) :: (Binary t, Generic t, GBinaryGet (Rep t)) => Get t

-- | Encode a list of values in the Put monad. The default implementation
--   may be overridden to be more efficient but must still have the same
--   encoding format.
putList :: Binary t => [t] -> Put

-- | Class of types with a known <a>Structure</a>.
--   
--   For regular data types <a>Structured</a> can be derived generically.
--   
--   <pre>
--   data Record = Record { a :: Int, b :: Bool, c :: [Char] } deriving (<a>Generic</a>)
--   instance <a>Structured</a> Record
--   </pre>
class Typeable a => Structured a
class Applicative f => Alternative (f :: Type -> Type)
empty :: Alternative f => f a
(<|>) :: Alternative f => f a -> f a -> f a
some :: Alternative f => f a -> f [a]
many :: Alternative f => f a -> f [a]
class (Alternative m, Monad m) => MonadPlus (m :: Type -> Type)
mzero :: MonadPlus m => m a
mplus :: MonadPlus m => m a -> m a -> m a
class IsString a
fromString :: IsString a => String -> a

-- | A Map from keys <tt>k</tt> to values <tt>a</tt>.
--   
--   The <a>Semigroup</a> operation for <a>Map</a> is <a>union</a>, which
--   prefers values from the left operand. If <tt>m1</tt> maps a key
--   <tt>k</tt> to a value <tt>a1</tt>, and <tt>m2</tt> maps the same key
--   to a different value <tt>a2</tt>, then their union <tt>m1 &lt;&gt;
--   m2</tt> maps <tt>k</tt> to <tt>a1</tt>.
data Map k a

-- | A set of values <tt>a</tt>.
data Set a

data NonEmptySet a
newtype Identity a
Identity :: a -> Identity a
[runIdentity] :: Identity a -> a
data Proxy (t :: k)
Proxy :: Proxy (t :: k)
newtype Const a (b :: k)
Const :: a -> Const a (b :: k)
[getConst] :: Const a (b :: k) -> a
data Void
partitionEithers :: [Either a b] -> ([a], [b])
catMaybes :: [Maybe a] -> [a]
mapMaybe :: (a -> Maybe b) -> [a] -> [b]
fromMaybe :: a -> Maybe a -> a
maybeToList :: Maybe a -> [a]
listToMaybe :: [a] -> Maybe a
isNothing :: Maybe a -> Bool
isJust :: Maybe a -> Bool
unfoldr :: (b -> Maybe (a, b)) -> b -> [a]
isPrefixOf :: Eq a => [a] -> [a] -> Bool
isSuffixOf :: Eq a => [a] -> [a] -> Bool
intercalate :: [a] -> [[a]] -> [a]
intersperse :: a -> [a] -> [a]
sort :: Ord a => [a] -> [a]
sortBy :: (a -> a -> Ordering) -> [a] -> [a]
nub :: Eq a => [a] -> [a]
nubBy :: (a -> a -> Bool) -> [a] -> [a]
partition :: (a -> Bool) -> [a] -> ([a], [a])
dropWhileEnd :: (a -> Bool) -> [a] -> [a]
data NonEmpty a
(:|) :: a -> [a] -> NonEmpty a

-- | <a>nonEmpty</a> efficiently turns a normal list into a <a>NonEmpty</a>
--   stream, producing <a>Nothing</a> if the input is empty.
nonEmpty :: [a] -> Maybe (NonEmpty a)
foldl1 :: (a -> a -> a) -> NonEmpty a -> a
foldr1 :: (a -> a -> a) -> NonEmpty a -> a

-- | Extract the first element of the stream.
head :: NonEmpty a -> a

-- | Extract the possibly-empty tail of the stream.
tail :: NonEmpty a -> [a]

-- | Extract the last element of the stream.
last :: NonEmpty a -> a

-- | Extract everything except the last element of the stream.
init :: NonEmpty a -> [a]
class Foldable (t :: Type -> Type)
foldMap :: (Foldable t, Monoid m) => (a -> m) -> t a -> m
foldr :: Foldable t => (a -> b -> b) -> b -> t a -> b
null :: Foldable t => t a -> Bool
length :: Foldable t => t a -> Int
find :: Foldable t => (a -> Bool) -> t a -> Maybe a
foldl' :: Foldable t => (b -> a -> b) -> b -> t a -> b
traverse_ :: (Foldable t, Applicative f) => (a -> f b) -> t a -> f ()
for_ :: (Foldable t, Applicative f) => t a -> (a -> f b) -> f ()
any :: Foldable t => (a -> Bool) -> t a -> Bool
all :: Foldable t => (a -> Bool) -> t a -> Bool
toList :: Foldable t => t a -> [a]
class (Functor t, Foldable t) => Traversable (t :: Type -> Type)
traverse :: (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b)
sequenceA :: (Traversable t, Applicative f) => t (f a) -> f (t a)
for :: (Traversable t, Applicative f) => t a -> (a -> f b) -> f (t b)
on :: (b -> b -> c) -> (a -> b) -> a -> a -> c
comparing :: Ord a => (b -> a) -> b -> b -> Ordering
first :: Arrow a => a b c -> a (b, d) (c, d)
liftM :: Monad m => (a1 -> r) -> m a1 -> m r
liftM2 :: Monad m => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r
unless :: Applicative f => Bool -> f () -> f ()
when :: Applicative f => Bool -> f () -> f ()
ap :: Monad m => m (a -> b) -> m a -> m b
void :: Functor f => f a -> f ()
foldM :: (Foldable t, Monad m) => (b -> a -> m b) -> b -> t a -> m b
filterM :: Applicative m => (a -> m Bool) -> [a] -> m [a]
join :: Monad m => m (m a) -> m a
guard :: Alternative f => Bool -> f ()
catch :: Exception e => IO a -> (e -> IO a) -> IO a
throwIO :: (HasCallStack, Exception e) => e -> IO a
evaluate :: a -> IO a
class (Typeable e, Show e) => Exception e
toException :: Exception e => e -> SomeException
fromException :: Exception e => SomeException -> Maybe e
displayException :: Exception e => e -> String
backtraceDesired :: Exception e => e -> Bool
data IOException
data SomeException
SomeException :: e -> SomeException

-- | Try <tt>IOException</tt>.
tryIO :: IO a -> IO (Either IOException a)

-- | Catch <tt>IOException</tt>.
catchIO :: IO a -> (IOException -> IO a) -> IO a

-- | Catch <a>ExitCode</a>
catchExit :: IO a -> (ExitCode -> IO a) -> IO a

-- | <a>deepseq</a>: fully evaluates the first argument, before returning
--   the second.
--   
--   The name <a>deepseq</a> is used to illustrate the relationship to
--   <a>seq</a>: where <a>seq</a> is shallow in the sense that it only
--   evaluates the top level of its argument, <a>deepseq</a> traverses the
--   entire data structure evaluating it completely.
--   
--   <a>deepseq</a> can be useful for forcing pending exceptions,
--   eradicating space leaks, or forcing lazy I/O to happen. It is also
--   useful in conjunction with parallel Strategies (see the
--   <tt>parallel</tt> package).
--   
--   There is no guarantee about the ordering of evaluation. The
--   implementation may evaluate the components of the structure in any
--   order or in parallel. To impose an actual order on evaluation, use
--   <tt>pseq</tt> from <a>Control.Parallel</a> in the <tt>parallel</tt>
--   package.
deepseq :: NFData a => a -> b -> b
infixr 0 `deepseq`

-- | a variant of <a>deepseq</a> that is useful in some circumstances:
--   
--   <pre>
--   force x = x `deepseq` x
--   </pre>
--   
--   <tt>force x</tt> fully evaluates <tt>x</tt>, and then returns it. Note
--   that <tt>force x</tt> only performs evaluation when the value of
--   <tt>force x</tt> itself is demanded, so essentially it turns shallow
--   evaluation into deep evaluation.
--   
--   <a>force</a> can be conveniently used in combination with
--   <tt>ViewPatterns</tt>:
--   
--   <pre>
--   {-# LANGUAGE BangPatterns, ViewPatterns #-}
--   import Control.DeepSeq
--   
--   someFun :: ComplexData -&gt; SomeResult
--   someFun (force -&gt; !arg) = {- 'arg' will be fully evaluated -}
--   </pre>
--   
--   Another useful application is to combine <a>force</a> with
--   <a>evaluate</a> in order to force deep evaluation relative to other
--   <a>IO</a> operations:
--   
--   <pre>
--   import Control.Exception (evaluate)
--   import Control.DeepSeq
--   
--   main = do
--     result &lt;- evaluate $ force $ pureComputation
--     {- 'result' will be fully evaluated at this point -}
--     return ()
--   </pre>
--   
--   Finally, here's an exception safe variant of the <tt>readFile'</tt>
--   example:
--   
--   <pre>
--   readFile' :: FilePath -&gt; IO String
--   readFile' fn = bracket (openFile fn ReadMode) hClose $ \h -&gt;
--                          evaluate . force =&lt;&lt; hGetContents h
--   </pre>
force :: NFData a => a -> a
isSpace :: Char -> Bool
isDigit :: Char -> Bool
isUpper :: Char -> Bool
isAlpha :: Char -> Bool
isAlphaNum :: Char -> Bool
chr :: Int -> Char
ord :: Char -> Int
toLower :: Char -> Char
toUpper :: Char -> Char
absurd :: Void -> a
vacuous :: Functor f => f Void -> f a
data Word
data Word8
data Word16
data Word32
data Word64
data Int8
data Int16
data Int32
data Int64

-- | New name for <a>&lt;&gt;</a>
(<<>>) :: Doc -> Doc -> Doc

-- | Beside, separated by space, unless one of the arguments is
--   <a>empty</a>. <a>&lt;+&gt;</a> is associative, with identity
--   <a>empty</a>.
(<+>) :: Doc -> Doc -> Doc
infixl 6 <+>
data ExitCode
ExitSuccess :: ExitCode
ExitFailure :: Int -> ExitCode
exitWith :: ExitCode -> IO a
exitSuccess :: IO a
exitFailure :: IO a
readMaybe :: Read a => String -> Maybe a

-- | <i>Deprecated: Don't leave me in the code</i>
trace :: String -> a -> a

-- | <i>Deprecated: Don't leave me in the code</i>
traceShow :: Show a => a -> b -> b

-- | <i>Deprecated: Don't leave me in the code</i>
traceShowId :: Show a => a -> a

-- | <i>Deprecated: Don't leave me in the code</i>
traceM :: Applicative f => String -> f ()

-- | <i>Deprecated: Don't leave me in the code</i>
traceShowM :: (Show a, Applicative f) => a -> f ()
instance (Distribution.Compat.Prelude.GNFData a, Distribution.Compat.Prelude.GNFData b) => Distribution.Compat.Prelude.GNFData (a GHC.Internal.Generics.:*: b)
instance (Distribution.Compat.Prelude.GNFData a, Distribution.Compat.Prelude.GNFData b) => Distribution.Compat.Prelude.GNFData (a GHC.Internal.Generics.:+: b)
instance Control.DeepSeq.NFData a => Distribution.Compat.Prelude.GNFData (GHC.Internal.Generics.K1 i a)
instance Distribution.Compat.Prelude.GNFData a => Distribution.Compat.Prelude.GNFData (GHC.Internal.Generics.M1 i c a)
instance Distribution.Compat.Prelude.GNFData GHC.Internal.Generics.U1
instance Distribution.Compat.Prelude.GNFData GHC.Internal.Generics.V1


-- | Compact representation of short <tt>Strings</tt>
--   
--   This module is designed to be import qualified
--   
--   <pre>
--   import Distribution.Utils.ShortText (ShortText)
--   import qualified Distribution.Utils.ShortText as ShortText
--   </pre>
module Distribution.Utils.ShortText

-- | Compact representation of short <tt>Strings</tt>
--   
--   The data is stored internally as UTF8 in an <a>ShortByteString</a>
--   when compiled against <tt>bytestring &gt;= 0.10.4</tt>, and otherwise
--   the fallback is to use plain old non-compat '[Char]'.
--   
--   Note: This type is for internal uses (such as e.g.
--   <tt>PackageName</tt>) and shall not be exposed in Cabal's API
data ShortText

-- | Construct <a>ShortText</a> from <a>String</a>
toShortText :: String -> ShortText

-- | Convert <a>ShortText</a> to <a>String</a>
fromShortText :: ShortText -> String

-- | Convert from UTF-8 encoded strict <tt>ByteString</tt>.
unsafeFromUTF8BS :: ByteString -> ShortText

-- | Text whether <a>ShortText</a> is empty.
null :: ShortText -> Bool

-- | <i>O(n)</i>. Length in characters. <i>Slow</i> as converts to string.
length :: ShortText -> Int

-- | Decode <a>String</a> from UTF8-encoded octets.
--   
--   Invalid data in the UTF8 stream (this includes code-points
--   <tt>U+D800</tt> through <tt>U+DFFF</tt>) will be decoded as the
--   replacement character (<tt>U+FFFD</tt>).
--   
--   See also <a>encodeStringUtf8</a>
decodeStringUtf8 :: [Word8] -> String

-- | Encode <a>String</a> to a list of UTF8-encoded octets
--   
--   Code-points in the <tt>U+D800</tt>-<tt>U+DFFF</tt> range will be
--   encoded as the replacement character (i.e. <tt>U+FFFD</tt>).
--   
--   See also <tt>decodeUtf8</tt>
encodeStringUtf8 :: String -> [Word8]
instance Data.Binary.Class.Binary Distribution.Utils.ShortText.ShortText
instance GHC.Internal.Data.Data.Data Distribution.Utils.ShortText.ShortText
instance GHC.Classes.Eq Distribution.Utils.ShortText.ShortText
instance GHC.Internal.Generics.Generic Distribution.Utils.ShortText.ShortText
instance GHC.Internal.Data.String.IsString Distribution.Utils.ShortText.ShortText
instance GHC.Internal.Base.Monoid Distribution.Utils.ShortText.ShortText
instance Control.DeepSeq.NFData Distribution.Utils.ShortText.ShortText
instance GHC.Classes.Ord Distribution.Utils.ShortText.ShortText
instance GHC.Internal.Read.Read Distribution.Utils.ShortText.ShortText
instance GHC.Internal.Base.Semigroup Distribution.Utils.ShortText.ShortText
instance GHC.Internal.Show.Show Distribution.Utils.ShortText.ShortText
instance Distribution.Utils.Structured.Structured Distribution.Utils.ShortText.ShortText


-- | A large and somewhat miscellaneous collection of utility functions
--   used throughout the rest of the Cabal lib and in other tools that use
--   the Cabal lib like <tt>cabal-install</tt>. It has a very simple set of
--   logging actions. It has low level functions for running programs, a
--   bunch of wrappers for various directory and file functions that do
--   extra logging.
module Distribution.Utils.Generic

-- | Gets the contents of a file, but guarantee that it gets closed.
--   
--   The file is read lazily but if it is not fully consumed by the action
--   then the remaining input is truncated and the file is closed.
withFileContents :: FilePath -> (String -> IO a) -> IO a

-- | Writes a file atomically.
--   
--   The file is either written successfully or an IO exception is raised
--   and the original file is left unchanged.
--   
--   On windows it is not possible to delete a file that is open by a
--   process. This case will give an IO exception but the atomic property
--   is not affected.
writeFileAtomic :: FilePath -> ByteString -> IO ()

-- | Decode <a>String</a> from UTF8-encoded <a>ByteString</a>
--   
--   Invalid data in the UTF8 stream (this includes code-points
--   <tt>U+D800</tt> through <tt>U+DFFF</tt>) will be decoded as the
--   replacement character (<tt>U+FFFD</tt>).
fromUTF8BS :: ByteString -> String

-- | Variant of <a>fromUTF8BS</a> for lazy <a>ByteString</a>s
fromUTF8LBS :: ByteString -> String

-- | Encode <a>String</a> to UTF8-encoded <a>ByteString</a>
--   
--   Code-points in the <tt>U+D800</tt>-<tt>U+DFFF</tt> range will be
--   encoded as the replacement character (i.e. <tt>U+FFFD</tt>).
toUTF8BS :: String -> ByteString

-- | Variant of <a>toUTF8BS</a> for lazy <a>ByteString</a>s
toUTF8LBS :: String -> ByteString

-- | Check that strict <tt>ByteString</tt> is valid UTF8. Returns 'Just
--   offset' if it's not.
validateUTF8 :: ByteString -> Maybe Int

-- | Reads a UTF8 encoded text file as a Unicode String
--   
--   Reads lazily using ordinary <a>readFile</a>.
readUTF8File :: FilePath -> IO String

-- | Reads a UTF8 encoded text file as a Unicode String
--   
--   Same behaviour as <a>withFileContents</a>.
withUTF8FileContents :: FilePath -> (String -> IO a) -> IO a

-- | Writes a Unicode String as a UTF8 encoded text file.
--   
--   Uses <a>writeFileAtomic</a>, so provides the same guarantees.
writeUTF8File :: FilePath -> String -> IO ()

-- | Ignore a Unicode byte order mark (BOM) at the beginning of the input
ignoreBOM :: String -> String

-- | Fix different systems silly line ending conventions
normaliseLineEndings :: String -> String

-- | <tt>dropWhileEndLE p</tt> is equivalent to <tt>reverse . dropWhile p .
--   reverse</tt>, but quite a bit faster. The difference between
--   "Data.List.dropWhileEnd" and this version is that the one in
--   <a>Data.List</a> is strict in elements, but spine-lazy, while this one
--   is spine-strict but lazy in elements. That's what <tt>LE</tt> stands
--   for - "lazy in elements".
--   
--   Example:
--   
--   <pre>
--   &gt;&gt;&gt; safeTail $ Data.List.dropWhileEnd (&lt;3) [undefined, 5, 4, 3, 2, 1]
--   *** Exception: Prelude.undefined
--   ...
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; safeTail $ dropWhileEndLE (&lt;3) [undefined, 5, 4, 3, 2, 1]
--   [5,4,3]
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; take 3 $ Data.List.dropWhileEnd (&lt;3) [5, 4, 3, 2, 1, undefined]
--   [5,4,3]
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; take 3 $ dropWhileEndLE (&lt;3) [5, 4, 3, 2, 1, undefined]
--   *** Exception: Prelude.undefined
--   ...
--   </pre>
dropWhileEndLE :: (a -> Bool) -> [a] -> [a]

-- | <tt>takeWhileEndLE p</tt> is equivalent to <tt>reverse . takeWhile p .
--   reverse</tt>, but is usually faster (as well as being easier to read).
takeWhileEndLE :: (a -> Bool) -> [a] -> [a]
equating :: Eq a => (b -> a) -> b -> b -> Bool
comparing :: Ord a => (b -> a) -> b -> b -> Ordering
isInfixOf :: Eq a => [a] -> [a] -> Bool
intercalate :: [a] -> [[a]] -> [a]

-- | Lower case string
--   
--   <pre>
--   &gt;&gt;&gt; lowercase "Foobar"
--   "foobar"
--   </pre>
lowercase :: String -> String

-- | Ascii characters
isAscii :: Char -> Bool

-- | Ascii letters.
isAsciiAlpha :: Char -> Bool

-- | Ascii letters and digits.
--   
--   <pre>
--   &gt;&gt;&gt; isAsciiAlphaNum 'a'
--   True
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; isAsciiAlphaNum 'ä'
--   False
--   </pre>
isAsciiAlphaNum :: Char -> Bool

-- | Like "Data.List.union", but has <tt>O(n log n)</tt> complexity instead
--   of <tt>O(n^2)</tt>.
listUnion :: Ord a => [a] -> [a] -> [a]

-- | A right-biased version of <a>listUnion</a>.
--   
--   Example:
--   
--   <pre>
--   &gt;&gt;&gt; listUnion [1,2,3,4,3] [2,1,1]
--   [1,2,3,4,3]
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; listUnionRight [1,2,3,4,3] [2,1,1]
--   [4,3,2,1,1]
--   </pre>
listUnionRight :: Ord a => [a] -> [a] -> [a]

-- | Like <a>nub</a>, but has <tt>O(n log n)</tt> complexity instead of
--   <tt>O(n^2)</tt>. Code for <a>ordNub</a> and <a>listUnion</a> taken
--   from Niklas Hambüchen's <a>ordnub</a> package.
ordNub :: Ord a => [a] -> [a]

-- | Like <a>ordNub</a> and <a>nubBy</a>. Selects a key for each element
--   and takes the nub based on that key.
ordNubBy :: Ord b => (a -> b) -> [a] -> [a]

-- | A right-biased version of <a>ordNub</a>.
--   
--   Example:
--   
--   <pre>
--   &gt;&gt;&gt; ordNub [1,2,1] :: [Int]
--   [1,2]
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; ordNubRight [1,2,1] :: [Int]
--   [2,1]
--   </pre>
ordNubRight :: Ord a => [a] -> [a]

-- | A total variant of <a>head</a>.
safeHead :: [a] -> Maybe a

-- | A total variant of <a>tail</a>.
safeTail :: [a] -> [a]

-- | A total variant of <a>last</a>.
safeLast :: [a] -> Maybe a

-- | A total variant of <a>init</a>.
safeInit :: [a] -> [a]
unintersperse :: Char -> String -> [String]

-- | Wraps text to the default line width. Existing newlines are preserved.
wrapText :: String -> String

-- | Wraps a list of words to a list of lines of words of a particular
--   width.
wrapLine :: Int -> [String] -> [[String]]

-- | <a>unfoldr</a> with monadic action.
--   
--   <pre>
--   &gt;&gt;&gt; take 5 $ unfoldrM (\b r -&gt; Just (r + b, b + 1)) (1 :: Int) 2
--   [3,4,5,6,7]
--   </pre>
unfoldrM :: Monad m => (b -> m (Maybe (a, b))) -> b -> m [a]

-- | Like <a>span</a> but with <a>Maybe</a> predicate
--   
--   <pre>
--   &gt;&gt;&gt; spanMaybe listToMaybe [[1,2],[3],[],[4,5],[6,7]]
--   ([1,3],[[],[4,5],[6,7]])
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; spanMaybe (readMaybe :: String -&gt; Maybe Int) ["1", "2", "foo"]
--   ([1,2],["foo"])
--   </pre>
spanMaybe :: (a -> Maybe b) -> [a] -> ([b], [a])

-- | Like <a>break</a>, but with <a>Maybe</a> predicate
--   
--   <pre>
--   &gt;&gt;&gt; breakMaybe (readMaybe :: String -&gt; Maybe Int) ["foo", "bar", "1", "2", "quu"]
--   (["foo","bar"],Just (1,["2","quu"]))
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; breakMaybe (readMaybe :: String -&gt; Maybe Int) ["foo", "bar"]
--   (["foo","bar"],Nothing)
--   </pre>
breakMaybe :: (a -> Maybe b) -> [a] -> ([a], Maybe (b, [a]))

-- | The opposite of <tt>snoc</tt>, which is the reverse of <tt>cons</tt>
--   
--   Example:
--   
--   <pre>
--   &gt;&gt;&gt; unsnoc [1, 2, 3]
--   Just ([1,2],3)
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; unsnoc []
--   Nothing
--   </pre>
unsnoc :: [a] -> Maybe ([a], a)

-- | Like <a>unsnoc</a>, but for <a>NonEmpty</a> so without the
--   <a>Maybe</a>
--   
--   Example:
--   
--   <pre>
--   &gt;&gt;&gt; unsnocNE (1 :| [2, 3])
--   ([1,2],3)
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; unsnocNE (1 :| [])
--   ([],1)
--   </pre>
unsnocNE :: NonEmpty a -> ([a], a)

fstOf3 :: (a, b, c) -> a

sndOf3 :: (a, b, c) -> b

trdOf3 :: (a, b, c) -> c

-- | <a>isAbsoluteOnAnyPlatform</a> and <a>isRelativeOnAnyPlatform</a> are
--   like <a>isAbsolute</a> and <a>isRelative</a> but have platform
--   independent heuristics. The System.FilePath exists in two versions,
--   Windows and Posix. The two versions don't agree on what is a relative
--   path and we don't know if we're given Windows or Posix paths. This
--   results in false positives when running on Posix and inspecting
--   Windows paths, like the hackage server does.
--   System.FilePath.Posix.isAbsolute "C:\hello" == False
--   System.FilePath.Windows.isAbsolute "/hello" == False This means that
--   we would treat paths that start with "/" to be absolute. On Posix they
--   are indeed absolute, while on Windows they are not.
--   
--   The portable versions should be used when we might deal with paths
--   that are from another OS than the host OS. For example, the Hackage
--   Server deals with both Windows and Posix paths while performing the
--   PackageDescription checks. In contrast, when we run 'cabal configure'
--   we do expect the paths to be correct for our OS and we should not have
--   to use the platform independent heuristics.
isAbsoluteOnAnyPlatform :: FilePath -> Bool

-- | <pre>
--   isRelativeOnAnyPlatform = not . <a>isAbsoluteOnAnyPlatform</a>
--   </pre>
isRelativeOnAnyPlatform :: FilePath -> Bool

module Distribution.Types.Condition

-- | A boolean expression parameterized over the variable type used.
data Condition c
Var :: c -> Condition c
Lit :: Bool -> Condition c
CNot :: Condition c -> Condition c
COr :: Condition c -> Condition c -> Condition c
CAnd :: Condition c -> Condition c -> Condition c

-- | Boolean negation of a <a>Condition</a> value.
cNot :: Condition a -> Condition a

-- | Boolean AND of two <a>Condition</a> values.
cAnd :: Condition a -> Condition a -> Condition a

-- | Boolean OR of two <a>Condition</a> values.
cOr :: Eq v => Condition v -> Condition v -> Condition v

-- | Simplify the condition and return its free variables.
simplifyCondition :: Condition c -> (c -> Either d Bool) -> (Condition d, [d])
instance GHC.Internal.Base.Alternative Distribution.Types.Condition.Condition
instance GHC.Internal.Base.Applicative Distribution.Types.Condition.Condition
instance Data.Binary.Class.Binary c => Data.Binary.Class.Binary (Distribution.Types.Condition.Condition c)
instance GHC.Internal.Data.Data.Data c => GHC.Internal.Data.Data.Data (Distribution.Types.Condition.Condition c)
instance GHC.Classes.Eq c => GHC.Classes.Eq (Distribution.Types.Condition.Condition c)
instance GHC.Internal.Data.Foldable.Foldable Distribution.Types.Condition.Condition
instance GHC.Internal.Base.Functor Distribution.Types.Condition.Condition
instance GHC.Internal.Generics.Generic (Distribution.Types.Condition.Condition c)
instance GHC.Internal.Base.Monad Distribution.Types.Condition.Condition
instance GHC.Internal.Base.MonadPlus Distribution.Types.Condition.Condition
instance GHC.Internal.Base.Monoid (Distribution.Types.Condition.Condition a)
instance Control.DeepSeq.NFData c => Control.DeepSeq.NFData (Distribution.Types.Condition.Condition c)
instance GHC.Internal.Base.Semigroup (Distribution.Types.Condition.Condition a)
instance GHC.Internal.Show.Show c => GHC.Internal.Show.Show (Distribution.Types.Condition.Condition c)
instance Distribution.Utils.Structured.Structured c => Distribution.Utils.Structured.Structured (Distribution.Types.Condition.Condition c)
instance GHC.Internal.Data.Traversable.Traversable Distribution.Types.Condition.Condition

module Distribution.Parsec.Position

-- | 1-indexed row and column positions in a file.
data Position
Position :: {-# UNPACK #-} !Int -> {-# UNPACK #-} !Int -> Position

-- | Shift position by n columns to the right.
incPos :: Int -> Position -> Position

-- | Shift position to beginning of next row.
retPos :: Position -> Position
showPos :: Position -> String
zeroPos :: Position

positionCol :: Position -> Int

positionRow :: Position -> Int
instance Data.Binary.Class.Binary Distribution.Parsec.Position.Position
instance GHC.Classes.Eq Distribution.Parsec.Position.Position
instance GHC.Internal.Generics.Generic Distribution.Parsec.Position.Position
instance Control.DeepSeq.NFData Distribution.Parsec.Position.Position
instance GHC.Classes.Ord Distribution.Parsec.Position.Position
instance GHC.Internal.Show.Show Distribution.Parsec.Position.Position

module Distribution.Parsec.Warning

-- | Parser warning.
data PWarning
PWarning :: !PWarnType -> !Position -> String -> PWarning

-- | Type of parser warning. We do classify warnings.
--   
--   Different application may decide not to show some, or have fatal
--   behaviour on others
data PWarnType

-- | Unclassified warning
PWTOther :: PWarnType

-- | Invalid UTF encoding
PWTUTF :: PWarnType

-- | <tt>true</tt> or <tt>false</tt>, not <tt>True</tt> or <tt>False</tt>
PWTBoolCase :: PWarnType

-- | there are version with tags
PWTVersionTag :: PWarnType

-- | New syntax used, but no <tt>cabal-version: &gt;= 1.2</tt> specified
PWTNewSyntax :: PWarnType

-- | Old syntax used, and <tt>cabal-version &gt;= 1.2</tt> specified
PWTOldSyntax :: PWarnType
PWTDeprecatedField :: PWarnType
PWTInvalidSubsection :: PWarnType
PWTUnknownField :: PWarnType
PWTUnknownSection :: PWarnType
PWTTrailingFields :: PWarnType

-- | extra main-is field
PWTExtraMainIs :: PWarnType

-- | extra test-module field
PWTExtraTestModule :: PWarnType

-- | extra benchmark-module field
PWTExtraBenchmarkModule :: PWarnType
PWTLexNBSP :: PWarnType
PWTLexBOM :: PWarnType
PWTLexTab :: PWarnType

-- | legacy cabal file that we know how to patch
PWTQuirkyCabalFile :: PWarnType

-- | Double dash token, most likely it's a mistake - it's not a comment
PWTDoubleDash :: PWarnType

-- | e.g. name or version should be specified only once.
PWTMultipleSingularField :: PWarnType

-- | Workaround for derive-package having build-type: Default. See
--   <a>https://github.com/haskell/cabal/issues/5020</a>.
PWTBuildTypeDefault :: PWarnType

-- | Version operators used (without cabal-version: 1.8)
PWTVersionOperator :: PWarnType

-- | Version wildcard used (without cabal-version: 1.6)
PWTVersionWildcard :: PWarnType

-- | Warnings about cabal-version format.
PWTSpecVersion :: PWarnType

-- | Empty filepath, i.e. literally ""
PWTEmptyFilePath :: PWarnType

-- | sections contents (sections and fields) are indented inconsistently
PWTInconsistentIndentation :: PWarnType

-- | Experimental feature
PWTExperimental :: PWarnType
showPWarning :: FilePath -> PWarning -> String
instance Data.Binary.Class.Binary Distribution.Parsec.Warning.PWarnType
instance Data.Binary.Class.Binary Distribution.Parsec.Warning.PWarning
instance GHC.Internal.Enum.Bounded Distribution.Parsec.Warning.PWarnType
instance GHC.Internal.Enum.Enum Distribution.Parsec.Warning.PWarnType
instance GHC.Classes.Eq Distribution.Parsec.Warning.PWarnType
instance GHC.Classes.Eq Distribution.Parsec.Warning.PWarning
instance GHC.Internal.Generics.Generic Distribution.Parsec.Warning.PWarnType
instance GHC.Internal.Generics.Generic Distribution.Parsec.Warning.PWarning
instance Control.DeepSeq.NFData Distribution.Parsec.Warning.PWarnType
instance Control.DeepSeq.NFData Distribution.Parsec.Warning.PWarning
instance GHC.Classes.Ord Distribution.Parsec.Warning.PWarnType
instance GHC.Classes.Ord Distribution.Parsec.Warning.PWarning
instance GHC.Internal.Show.Show Distribution.Parsec.Warning.PWarnType
instance GHC.Internal.Show.Show Distribution.Parsec.Warning.PWarning

module Distribution.Parsec.FieldLineStream

-- | This is essentially a lazy bytestring, but chunks are glued with
--   newline <tt>'\n'</tt>.
data FieldLineStream
FLSLast :: !ByteString -> FieldLineStream
FLSCons :: {-# UNPACK #-} !ByteString -> FieldLineStream -> FieldLineStream

-- | Convert <a>String</a> to <a>FieldLineStream</a>.
--   
--   <i>Note:</i> inefficient!
fieldLineStreamFromString :: String -> FieldLineStream
fieldLineStreamFromBS :: ByteString -> FieldLineStream
fieldLineStreamEnd :: FieldLineStream
instance GHC.Internal.Show.Show Distribution.Parsec.FieldLineStream.FieldLineStream
instance GHC.Internal.Base.Monad m => Text.Parsec.Prim.Stream Distribution.Parsec.FieldLineStream.FieldLineStream m GHC.Types.Char

module Distribution.Parsec.Error

-- | Parser error.
data PError
PError :: Position -> String -> PError
showPError :: FilePath -> PError -> String
instance Data.Binary.Class.Binary Distribution.Parsec.Error.PError
instance GHC.Internal.Generics.Generic Distribution.Parsec.Error.PError
instance Control.DeepSeq.NFData Distribution.Parsec.Error.PError
instance GHC.Internal.Show.Show Distribution.Parsec.Error.PError


module Distribution.PackageDescription.Quirks

-- | Patch legacy <tt>.cabal</tt> file contents to allow parsec parser to
--   accept all of Hackage.
--   
--   Bool part of the result tells whether the output is modified.
patchQuirks :: ByteString -> (Bool, ByteString)


module Distribution.Fields.LexerMonad
type InputStream = ByteString
data LexState
LexState :: {-# UNPACK #-} !Position -> {-# UNPACK #-} !InputStream -> {-# UNPACK #-} !StartCode -> [LexWarning] -> LexState

-- | position at current input location
[curPos] :: LexState -> {-# UNPACK #-} !Position

-- | the current input
[curInput] :: LexState -> {-# UNPACK #-} !InputStream

-- | lexer code
[curCode] :: LexState -> {-# UNPACK #-} !StartCode
[warnings] :: LexState -> [LexWarning]
data LexResult a
LexResult :: {-# UNPACK #-} !LexState -> a -> LexResult a
newtype Lex a
Lex :: (LexState -> LexResult a) -> Lex a
[unLex] :: Lex a -> LexState -> LexResult a

-- | Execute the given lexer on the supplied input stream.
execLexer :: Lex a -> InputStream -> ([LexWarning], a)
getPos :: Lex Position
setPos :: Position -> Lex ()
adjustPos :: (Position -> Position) -> Lex ()
getInput :: Lex InputStream
setInput :: InputStream -> Lex ()
getStartCode :: Lex Int
setStartCode :: Int -> Lex ()
data LexWarning
LexWarning :: !LexWarningType -> {-# UNPACK #-} !Position -> LexWarning
data LexWarningType

-- | Encountered non breaking space
LexWarningNBSP :: LexWarningType

-- | BOM at the start of the cabal file
LexWarningBOM :: LexWarningType

-- | Leading tags
LexWarningTab :: LexWarningType

-- | indentation decreases
LexInconsistentIndentation :: LexWarningType

-- | Brace syntax used
LexBraces :: LexWarningType

-- | Add warning at the current position
addWarning :: LexWarningType -> Lex ()

-- | Add warning at specific position
addWarningAt :: Position -> LexWarningType -> Lex ()
toPWarnings :: [LexWarning] -> [PWarning]
instance GHC.Internal.Base.Applicative Distribution.Fields.LexerMonad.Lex
instance GHC.Classes.Eq Distribution.Fields.LexerMonad.LexWarningType
instance GHC.Internal.Base.Functor Distribution.Fields.LexerMonad.Lex
instance GHC.Internal.Base.Monad Distribution.Fields.LexerMonad.Lex
instance GHC.Classes.Ord Distribution.Fields.LexerMonad.LexWarningType
instance GHC.Internal.Show.Show Distribution.Fields.LexerMonad.LexWarning
instance GHC.Internal.Show.Show Distribution.Fields.LexerMonad.LexWarningType


-- | Lexer for the cabal files.
module Distribution.Fields.Lexer
ltest :: Int -> String -> IO ()
lexToken :: Lex LToken

-- | Tokens of outer cabal file structure. Field values are treated
--   opaquely.
data Token

-- | Haskell-like identifier, number or operator
TokSym :: !ByteString -> Token

-- | String in quotes
TokStr :: !ByteString -> Token

-- | Operators and parens
TokOther :: !ByteString -> Token

-- | Indentation token
Indent :: !Int -> Token

-- | Lines after <tt>:</tt>
TokFieldLine :: !ByteString -> Token
Colon :: Token
OpenBrace :: Token
CloseBrace :: Token
EOF :: Token
LexicalError :: InputStream -> Token
data LToken
L :: !Position -> !Token -> LToken
bol_section :: Int
in_section :: Int
in_field_layout :: Int
in_field_braces :: Int
mkLexState :: ByteString -> LexState
instance GHC.Internal.Show.Show Distribution.Fields.Lexer.LToken
instance GHC.Internal.Show.Show Distribution.Fields.Lexer.Token


-- | Alternative parser combinators.
--   
--   Originally in <tt>parsers</tt> package.
module Distribution.Compat.Parsing

-- | <tt>choice ps</tt> tries to apply the parsers in the list <tt>ps</tt>
--   in order, until one of them succeeds. Returns the value of the
--   succeeding parser.
choice :: Alternative m => [m a] -> m a

-- | <tt>option x p</tt> tries to apply parser <tt>p</tt>. If <tt>p</tt>
--   fails without consuming input, it returns the value <tt>x</tt>,
--   otherwise the value returned by <tt>p</tt>.
--   
--   <pre>
--   priority = option 0 (digitToInt &lt;$&gt; digit)
--   </pre>
option :: Alternative m => a -> m a -> m a

-- | One or none.
--   
--   It is useful for modelling any computation that is allowed to fail.
--   
--   <h4><b>Examples</b></h4>
--   
--   Using the <a>Alternative</a> instance of <a>Control.Monad.Except</a>,
--   the following functions:
--   
--   <pre>
--   &gt;&gt;&gt; import Control.Monad.Except
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; canFail = throwError "it failed" :: Except String Int
--   
--   &gt;&gt;&gt; final = return 42                :: Except String Int
--   </pre>
--   
--   Can be combined by allowing the first function to fail:
--   
--   <pre>
--   &gt;&gt;&gt; runExcept $ canFail *&gt; final
--   Left "it failed"
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; runExcept $ optional canFail *&gt; final
--   Right 42
--   </pre>
optional :: Alternative f => f a -> f (Maybe a)

-- | <tt>skipOptional p</tt> tries to apply parser <tt>p</tt>. It will
--   parse <tt>p</tt> or nothing. It only fails if <tt>p</tt> fails after
--   consuming input. It discards the result of <tt>p</tt>. (Plays the role
--   of parsec's optional, which conflicts with Applicative's optional)
skipOptional :: Alternative m => m a -> m ()

-- | <tt>between open close p</tt> parses <tt>open</tt>, followed by
--   <tt>p</tt> and <tt>close</tt>. Returns the value returned by
--   <tt>p</tt>.
--   
--   <pre>
--   braces  = between (symbol "{") (symbol "}")
--   </pre>
between :: Applicative m => m bra -> m ket -> m a -> m a
some :: Alternative f => f a -> f [a]
many :: Alternative f => f a -> f [a]

-- | <tt>sepBy p sep</tt> parses <i>zero</i> or more occurrences of
--   <tt>p</tt>, separated by <tt>sep</tt>. Returns a list of values
--   returned by <tt>p</tt>.
--   
--   <pre>
--   commaSep p  = p `sepBy` (symbol ",")
--   </pre>
sepBy :: Alternative m => m a -> m sep -> m [a]

-- | <tt>sepByNonEmpty p sep</tt> parses <i>one</i> or more occurrences of
--   <tt>p</tt>, separated by <tt>sep</tt>. Returns a non-empty list of
--   values returned by <tt>p</tt>.
sepByNonEmpty :: Alternative m => m a -> m sep -> m (NonEmpty a)

-- | <tt>sepEndByNonEmpty p sep</tt> parses <i>one</i> or more occurrences
--   of <tt>p</tt>, separated and optionally ended by <tt>sep</tt>. Returns
--   a non-empty list of values returned by <tt>p</tt>.
sepEndByNonEmpty :: Alternative m => m a -> m sep -> m (NonEmpty a)

-- | <tt>sepEndBy p sep</tt> parses <i>zero</i> or more occurrences of
--   <tt>p</tt>, separated and optionally ended by <tt>sep</tt>, ie.
--   haskell style statements. Returns a list of values returned by
--   <tt>p</tt>.
--   
--   <pre>
--   haskellStatements  = haskellStatement `sepEndBy` semi
--   </pre>
sepEndBy :: Alternative m => m a -> m sep -> m [a]

-- | <tt>endByNonEmpty p sep</tt> parses <i>one</i> or more occurrences of
--   <tt>p</tt>, separated and ended by <tt>sep</tt>. Returns a non-empty
--   list of values returned by <tt>p</tt>.
endByNonEmpty :: Alternative m => m a -> m sep -> m (NonEmpty a)

-- | <tt>endBy p sep</tt> parses <i>zero</i> or more occurrences of
--   <tt>p</tt>, separated and ended by <tt>sep</tt>. Returns a list of
--   values returned by <tt>p</tt>.
--   
--   <pre>
--   cStatements  = cStatement `endBy` semi
--   </pre>
endBy :: Alternative m => m a -> m sep -> m [a]

-- | <tt>count n p</tt> parses <tt>n</tt> occurrences of <tt>p</tt>. If
--   <tt>n</tt> is smaller or equal to zero, the parser equals to
--   <tt>return []</tt>. Returns a list of <tt>n</tt> values returned by
--   <tt>p</tt>.
count :: Applicative m => Int -> m a -> m [a]

-- | <tt>chainl p op x</tt> parses <i>zero</i> or more occurrences of
--   <tt>p</tt>, separated by <tt>op</tt>. Returns a value obtained by a
--   <i>left</i> associative application of all functions returned by
--   <tt>op</tt> to the values returned by <tt>p</tt>. If there are zero
--   occurrences of <tt>p</tt>, the value <tt>x</tt> is returned.
chainl :: Alternative m => m a -> m (a -> a -> a) -> a -> m a

-- | <tt>chainr p op x</tt> parses <i>zero</i> or more occurrences of
--   <tt>p</tt>, separated by <tt>op</tt> Returns a value obtained by a
--   <i>right</i> associative application of all functions returned by
--   <tt>op</tt> to the values returned by <tt>p</tt>. If there are no
--   occurrences of <tt>p</tt>, the value <tt>x</tt> is returned.
chainr :: Alternative m => m a -> m (a -> a -> a) -> a -> m a

-- | <tt>chainl1 p op x</tt> parses <i>one</i> or more occurrences of
--   <tt>p</tt>, separated by <tt>op</tt> Returns a value obtained by a
--   <i>left</i> associative application of all functions returned by
--   <tt>op</tt> to the values returned by <tt>p</tt>. . This parser can
--   for example be used to eliminate left recursion which typically occurs
--   in expression grammars.
--   
--   <pre>
--   expr   = term   `chainl1` addop
--   term   = factor `chainl1` mulop
--   factor = parens expr &lt;|&gt; integer
--   
--   mulop  = (*) &lt;$ symbol "*"
--        &lt;|&gt; div &lt;$ symbol "/"
--   
--   addop  = (+) &lt;$ symbol "+"
--        &lt;|&gt; (-) &lt;$ symbol "-"
--   </pre>
chainl1 :: Alternative m => m a -> m (a -> a -> a) -> m a

-- | <tt>chainr1 p op x</tt> parses <i>one</i> or more occurrences of
--   <tt>p</tt>, separated by <tt>op</tt> Returns a value obtained by a
--   <i>right</i> associative application of all functions returned by
--   <tt>op</tt> to the values returned by <tt>p</tt>.
chainr1 :: Alternative m => m a -> m (a -> a -> a) -> m a

-- | <tt>manyTill p end</tt> applies parser <tt>p</tt> <i>zero</i> or more
--   times until parser <tt>end</tt> succeeds. Returns the list of values
--   returned by <tt>p</tt>. This parser can be used to scan comments:
--   
--   <pre>
--   simpleComment   = do{ string "&lt;!--"
--                       ; manyTill anyChar (try (string "--&gt;"))
--                       }
--   </pre>
--   
--   Note the overlapping parsers <tt>anyChar</tt> and <tt>string
--   "--&gt;"</tt>, and therefore the use of the <a>try</a> combinator.
manyTill :: Alternative m => m a -> m end -> m [a]

-- | Additional functionality needed to describe parsers independent of
--   input type.
class Alternative m => Parsing (m :: Type -> Type)

-- | Take a parser that may consume input, and on failure, go back to where
--   we started and fail as if we didn't consume input.
try :: Parsing m => m a -> m a

-- | Give a parser a name
(<?>) :: Parsing m => m a -> String -> m a

-- | A version of many that discards its input. Specialized because it can
--   often be implemented more cheaply.
skipMany :: Parsing m => m a -> m ()

-- | <tt>skipSome p</tt> applies the parser <tt>p</tt> <i>one</i> or more
--   times, skipping its result. (aka skipMany1 in parsec)
skipSome :: Parsing m => m a -> m ()

-- | Used to emit an error on an unexpected token
unexpected :: Parsing m => String -> m a

-- | This parser only succeeds at the end of the input. This is not a
--   primitive parser but it is defined using <a>notFollowedBy</a>.
--   
--   <pre>
--   eof  = notFollowedBy anyChar &lt;?&gt; "end of input"
--   </pre>
eof :: Parsing m => m ()

-- | <tt>notFollowedBy p</tt> only succeeds when parser <tt>p</tt> fails.
--   This parser does not consume any input. This parser can be used to
--   implement the 'longest match' rule. For example, when recognizing
--   keywords (for example <tt>let</tt>), we want to make sure that a
--   keyword is not followed by a legal identifier character, in which case
--   the keyword is actually an identifier (for example <tt>lets</tt>). We
--   can program this behaviour as follows:
--   
--   <pre>
--   keywordLet  = try $ string "let" &lt;* notFollowedBy alphaNum
--   </pre>
notFollowedBy :: (Parsing m, Show a) => m a -> m ()
infixr 0 <?>
instance (Distribution.Compat.Parsing.Parsing m, GHC.Internal.Base.Monad m) => Distribution.Compat.Parsing.Parsing (Control.Monad.Trans.Identity.IdentityT m)
instance (Text.Parsec.Prim.Stream s m t, GHC.Internal.Show.Show t) => Distribution.Compat.Parsing.Parsing (Text.Parsec.Prim.ParsecT s u m)
instance (Distribution.Compat.Parsing.Parsing m, GHC.Internal.Base.MonadPlus m, GHC.Internal.Base.Monoid w) => Distribution.Compat.Parsing.Parsing (Control.Monad.Trans.RWS.Strict.RWST r w s m)
instance (Distribution.Compat.Parsing.Parsing m, GHC.Internal.Base.MonadPlus m, GHC.Internal.Base.Monoid w) => Distribution.Compat.Parsing.Parsing (Control.Monad.Trans.RWS.Lazy.RWST r w s m)
instance (Distribution.Compat.Parsing.Parsing m, GHC.Internal.Base.MonadPlus m) => Distribution.Compat.Parsing.Parsing (Control.Monad.Trans.Reader.ReaderT e m)
instance (Distribution.Compat.Parsing.Parsing m, GHC.Internal.Base.MonadPlus m) => Distribution.Compat.Parsing.Parsing (Control.Monad.Trans.State.Strict.StateT s m)
instance (Distribution.Compat.Parsing.Parsing m, GHC.Internal.Base.MonadPlus m) => Distribution.Compat.Parsing.Parsing (Control.Monad.Trans.State.Lazy.StateT s m)
instance (Distribution.Compat.Parsing.Parsing m, GHC.Internal.Base.MonadPlus m, GHC.Internal.Base.Monoid w) => Distribution.Compat.Parsing.Parsing (Control.Monad.Trans.Writer.Lazy.WriterT w m)
instance (Distribution.Compat.Parsing.Parsing m, GHC.Internal.Base.MonadPlus m, GHC.Internal.Base.Monoid w) => Distribution.Compat.Parsing.Parsing (Control.Monad.Trans.Writer.Strict.WriterT w m)


-- | A very simple difference list.
module Distribution.Compat.DList

-- | Difference list.
data DList a
runDList :: DList a -> [a]

empty :: DList a

-- | Make <a>DList</a> containing single element.
singleton :: a -> DList a
fromList :: [a] -> DList a
toList :: DList a -> [a]
snoc :: DList a -> a -> DList a
instance GHC.Internal.Base.Monoid (Distribution.Compat.DList.DList a)
instance GHC.Internal.Base.Semigroup (Distribution.Compat.DList.DList a)


-- | This module provides very basic lens functionality, without extra
--   dependencies.
--   
--   For the documentation of the combinators see <a>lens</a> package. This
--   module uses the same vocabulary.
module Distribution.Compat.Lens
type Lens s t a b = forall (f :: Type -> Type). Functor f => LensLike f s t a b
type Lens' s a = Lens s s a a
type Traversal s t a b = forall (f :: Type -> Type). Applicative f => LensLike f s t a b
type Traversal' s a = Traversal s s a a
type LensLike (f :: Type -> Type) s t a b = a -> f b -> s -> f t
type LensLike' (f :: Type -> Type) s a = a -> f a -> s -> f s
type Getting r s a = LensLike Const r :: Type -> Type s s a a
type AGetter s a = LensLike Const a :: Type -> Type s s a a
type ASetter s t a b = LensLike Identity s t a b
type ALens s t a b = LensLike Pretext a b s t a b
type ALens' s a = ALens s s a a
view :: Getting a s a -> s -> a
use :: MonadState s m => Getting a s a -> m a

-- | <pre>
--   &gt;&gt;&gt; (3 :: Int) ^. getting (+2) . getting show
--   "5"
--   </pre>
getting :: (s -> a) -> Getting r s a
set :: ASetter s t a b -> b -> s -> t
over :: ASetter s t a b -> (a -> b) -> s -> t
toDListOf :: Getting (DList a) s a -> s -> DList a
toListOf :: Getting (DList a) s a -> s -> [a]
toSetOf :: Getting (Set a) s a -> s -> Set a
cloneLens :: Functor f => ALens s t a b -> LensLike f s t a b
aview :: ALens s t a b -> s -> a
_1 :: forall a c b f. Functor f => LensLike f (a, c) (b, c) a b
_2 :: forall c a b f. Functor f => LensLike f (c, a) (c, b) a b

-- | <a>&amp;</a> is a reverse application operator
(&) :: a -> (a -> b) -> b
infixl 1 &
(^.) :: s -> Getting a s a -> a
infixl 8 ^.
(.~) :: ASetter s t a b -> b -> s -> t
infixr 4 .~
(?~) :: ASetter s t a (Maybe b) -> b -> s -> t
infixr 4 ?~
(%~) :: ASetter s t a b -> (a -> b) -> s -> t
infixr 4 %~
(.=) :: MonadState s m => ASetter s s a b -> b -> m ()
infixr 4 .=
(?=) :: MonadState s m => ASetter s s a (Maybe b) -> b -> m ()
infixr 4 ?=
(%=) :: MonadState s m => ASetter s s a b -> (a -> b) -> m ()
infixr 4 %=
(^#) :: s -> ALens s t a b -> a
infixl 8 ^#
(#~) :: ALens s t a b -> b -> s -> t
infixr 4 #~
(#%~) :: ALens s t a b -> (a -> b) -> s -> t
infixr 4 #%~

-- | <tt>lens</tt> variant is also parametrised by profunctor.
data Pretext a b t
Pretext :: (forall (f :: Type -> Type). Functor f => (a -> f b) -> f t) -> Pretext a b t
[runPretext] :: Pretext a b t -> forall (f :: Type -> Type). Functor f => (a -> f b) -> f t
instance GHC.Internal.Base.Functor (Distribution.Compat.Lens.Pretext a b)

module Distribution.Types.CondTree

-- | A <a>CondTree</a> is used to represent the conditional structure of a
--   Cabal file, reflecting a syntax element subject to constraints, and
--   then any number of sub-elements which may be enabled subject to some
--   condition. Both <tt>a</tt> and <tt>c</tt> are usually <a>Monoid</a>s.
--   
--   To be more concrete, consider the following fragment of a
--   <tt>Cabal</tt> file:
--   
--   <pre>
--   build-depends: base &gt;= 4.0
--   if flag(extra)
--       build-depends: base &gt;= 4.2
--   </pre>
--   
--   One way to represent this is to have <tt><a>CondTree</a>
--   <tt>ConfVar</tt> [<tt>Dependency</tt>] <tt>BuildInfo</tt></tt>. Here,
--   <a>condTreeData</a> represents the actual fields which are not behind
--   any conditional, while <a>condTreeComponents</a> recursively records
--   any further fields which are behind a conditional.
--   <a>condTreeConstraints</a> records the constraints (in this case,
--   <tt>base &gt;= 4.0</tt>) which would be applied if you use this
--   syntax; in general, this is derived off of <tt>targetBuildInfo</tt>
--   (perhaps a good refactoring would be to convert this into an opaque
--   type, with a smart constructor that pre-computes the dependencies.)
data CondTree v c a
CondNode :: a -> c -> [CondBranch v c a] -> CondTree v c a
[condTreeData] :: CondTree v c a -> a
[condTreeConstraints] :: CondTree v c a -> c
[condTreeComponents] :: CondTree v c a -> [CondBranch v c a]

-- | A <a>CondBranch</a> represents a conditional branch, e.g., <tt>if
--   flag(foo)</tt> on some syntax <tt>a</tt>. It also has an optional
--   false branch.
data CondBranch v c a
CondBranch :: Condition v -> CondTree v c a -> Maybe (CondTree v c a) -> CondBranch v c a
[condBranchCondition] :: CondBranch v c a -> Condition v
[condBranchIfTrue] :: CondBranch v c a -> CondTree v c a
[condBranchIfFalse] :: CondBranch v c a -> Maybe (CondTree v c a)
condIfThen :: Condition v -> CondTree v c a -> CondBranch v c a
condIfThenElse :: Condition v -> CondTree v c a -> CondTree v c a -> CondBranch v c a

-- | Flatten a CondTree. This will traverse the CondTree by taking all
--   possible paths into account, but merging inclusive when two paths may
--   co-exist, and exclusively when the paths are an if/else
foldCondTree :: b -> ((c, a) -> b) -> (b -> b -> b) -> (b -> b -> b) -> CondTree v c a -> b
mapCondTree :: (a -> b) -> (c -> d) -> (Condition v -> Condition w) -> CondTree v c a -> CondTree w d b
mapTreeConstrs :: (c -> d) -> CondTree v c a -> CondTree v d a
mapTreeConds :: (Condition v -> Condition w) -> CondTree v c a -> CondTree w c a
mapTreeData :: (a -> b) -> CondTree v c a -> CondTree v c b

-- | @<tt>Traversal</tt>@ for the variables
traverseCondTreeV :: forall v c a w f. Applicative f => LensLike f (CondTree v c a) (CondTree w c a) v w

-- | @<tt>Traversal</tt>@ for the variables
traverseCondBranchV :: forall v c a w f. Applicative f => LensLike f (CondBranch v c a) (CondBranch w c a) v w

-- | @<tt>Traversal</tt>@ for the aggregated constraints
traverseCondTreeC :: forall v c a d f. Applicative f => LensLike f (CondTree v c a) (CondTree v d a) c d

-- | @<tt>Traversal</tt>@ for the aggregated constraints
traverseCondBranchC :: forall v c a d f. Applicative f => LensLike f (CondBranch v c a) (CondBranch v d a) c d

-- | Extract the condition matched by the given predicate from a cond tree.
--   
--   We use this mainly for extracting buildable conditions (see the Note
--   in Distribution.PackageDescription.Configuration), but the function is
--   in fact more general.
extractCondition :: Eq v => (a -> Bool) -> CondTree v c a -> Condition v

-- | Flattens a CondTree using a partial flag assignment. When a condition
--   cannot be evaluated, both branches are ignored.
simplifyCondTree :: (Semigroup a, Semigroup d) => (v -> Either v Bool) -> CondTree v d a -> (d, a)

-- | Realizes a <a>CondBranch</a> using partial flag assignment. When a
--   condition cannot be evaluated, returns <a>Nothing</a>.
simplifyCondBranch :: (Semigroup a, Semigroup d) => (v -> Either v Bool) -> CondBranch v d a -> Maybe (d, a)

-- | Flatten a CondTree. This will resolve the CondTree by taking all
--   possible paths into account. Note that since branches represent
--   exclusive choices this may not result in a "sane" result.
ignoreConditions :: (Semigroup a, Semigroup c) => CondTree v c a -> (a, c)
instance (Data.Binary.Class.Binary v, Data.Binary.Class.Binary c, Data.Binary.Class.Binary a) => Data.Binary.Class.Binary (Distribution.Types.CondTree.CondBranch v c a)
instance (Data.Binary.Class.Binary v, Data.Binary.Class.Binary c, Data.Binary.Class.Binary a) => Data.Binary.Class.Binary (Distribution.Types.CondTree.CondTree v c a)
instance (GHC.Internal.Data.Data.Data v, GHC.Internal.Data.Data.Data c, GHC.Internal.Data.Data.Data a) => GHC.Internal.Data.Data.Data (Distribution.Types.CondTree.CondBranch v c a)
instance (GHC.Internal.Data.Data.Data v, GHC.Internal.Data.Data.Data a, GHC.Internal.Data.Data.Data c) => GHC.Internal.Data.Data.Data (Distribution.Types.CondTree.CondTree v c a)
instance (GHC.Classes.Eq v, GHC.Classes.Eq a, GHC.Classes.Eq c) => GHC.Classes.Eq (Distribution.Types.CondTree.CondBranch v c a)
instance (GHC.Classes.Eq a, GHC.Classes.Eq c, GHC.Classes.Eq v) => GHC.Classes.Eq (Distribution.Types.CondTree.CondTree v c a)
instance GHC.Internal.Data.Foldable.Foldable (Distribution.Types.CondTree.CondBranch v c)
instance GHC.Internal.Data.Foldable.Foldable (Distribution.Types.CondTree.CondTree v c)
instance GHC.Internal.Base.Functor (Distribution.Types.CondTree.CondBranch v c)
instance GHC.Internal.Base.Functor (Distribution.Types.CondTree.CondTree v c)
instance GHC.Internal.Generics.Generic (Distribution.Types.CondTree.CondBranch v c a)
instance GHC.Internal.Generics.Generic (Distribution.Types.CondTree.CondTree v c a)
instance (GHC.Internal.Base.Semigroup a, GHC.Internal.Base.Semigroup c, GHC.Internal.Base.Monoid a, GHC.Internal.Base.Monoid c) => GHC.Internal.Base.Monoid (Distribution.Types.CondTree.CondTree v c a)
instance (Control.DeepSeq.NFData v, Control.DeepSeq.NFData c, Control.DeepSeq.NFData a) => Control.DeepSeq.NFData (Distribution.Types.CondTree.CondBranch v c a)
instance (Control.DeepSeq.NFData v, Control.DeepSeq.NFData c, Control.DeepSeq.NFData a) => Control.DeepSeq.NFData (Distribution.Types.CondTree.CondTree v c a)
instance (GHC.Internal.Base.Semigroup a, GHC.Internal.Base.Semigroup c) => GHC.Internal.Base.Semigroup (Distribution.Types.CondTree.CondTree v c a)
instance (GHC.Internal.Show.Show v, GHC.Internal.Show.Show a, GHC.Internal.Show.Show c) => GHC.Internal.Show.Show (Distribution.Types.CondTree.CondBranch v c a)
instance (GHC.Internal.Show.Show a, GHC.Internal.Show.Show c, GHC.Internal.Show.Show v) => GHC.Internal.Show.Show (Distribution.Types.CondTree.CondTree v c a)
instance (Distribution.Utils.Structured.Structured v, Distribution.Utils.Structured.Structured c, Distribution.Utils.Structured.Structured a) => Distribution.Utils.Structured.Structured (Distribution.Types.CondTree.CondBranch v c a)
instance (Distribution.Utils.Structured.Structured v, Distribution.Utils.Structured.Structured c, Distribution.Utils.Structured.Structured a) => Distribution.Utils.Structured.Structured (Distribution.Types.CondTree.CondTree v c a)
instance GHC.Internal.Data.Traversable.Traversable (Distribution.Types.CondTree.CondBranch v c)
instance GHC.Internal.Data.Traversable.Traversable (Distribution.Types.CondTree.CondTree v c)


-- | Parsers for character streams
--   
--   Originally in <tt>parsers</tt> package.
module Distribution.Compat.CharParsing

-- | <tt>oneOf cs</tt> succeeds if the current character is in the supplied
--   list of characters <tt>cs</tt>. Returns the parsed character. See also
--   <a>satisfy</a>.
--   
--   <pre>
--   vowel  = oneOf "aeiou"
--   </pre>
oneOf :: CharParsing m => [Char] -> m Char

-- | As the dual of <a>oneOf</a>, <tt>noneOf cs</tt> succeeds if the
--   current character is <i>not</i> in the supplied list of characters
--   <tt>cs</tt>. Returns the parsed character.
--   
--   <pre>
--   consonant = noneOf "aeiou"
--   </pre>
noneOf :: CharParsing m => [Char] -> m Char

-- | Skips <i>zero</i> or more white space characters. See also
--   <a>skipMany</a>.
spaces :: CharParsing m => m ()

-- | Parses a white space character (any character which satisfies
--   <a>isSpace</a>) Returns the parsed character.
space :: CharParsing m => m Char

-- | Parses a newline character ('\n'). Returns a newline character.
newline :: CharParsing m => m Char

-- | Parses a tab character ('\t'). Returns a tab character.
tab :: CharParsing m => m Char

-- | Parses an upper case letter. Returns the parsed character.
upper :: CharParsing m => m Char

-- | Parses a lower case character. Returns the parsed character.
lower :: CharParsing m => m Char

-- | Parses a letter or digit. Returns the parsed character.
alphaNum :: CharParsing m => m Char

-- | Parses a letter (an upper case or lower case character). Returns the
--   parsed character.
letter :: CharParsing m => m Char

-- | Parses a digit. Returns the parsed character.
digit :: CharParsing m => m Char

-- | Parses a hexadecimal digit (a digit or a letter between 'a' and 'f' or
--   'A' and 'F'). Returns the parsed character.
hexDigit :: CharParsing m => m Char

-- | Parses an octal digit (a character between '0' and '7'). Returns the
--   parsed character.
octDigit :: CharParsing m => m Char
satisfyRange :: CharParsing m => Char -> Char -> m Char

-- | Additional functionality needed to parse character streams.
class Parsing m => CharParsing (m :: Type -> Type)

-- | Parse a single character of the input, with UTF-8 decoding
satisfy :: CharParsing m => (Char -> Bool) -> m Char

-- | <tt>char c</tt> parses a single character <tt>c</tt>. Returns the
--   parsed character (i.e. <tt>c</tt>).
--   
--   <i>e.g.</i>
--   
--   <pre>
--   semiColon = <a>char</a> ';'
--   </pre>
char :: CharParsing m => Char -> m Char

-- | <tt>notChar c</tt> parses any single character other than <tt>c</tt>.
--   Returns the parsed character.
notChar :: CharParsing m => Char -> m Char

-- | This parser succeeds for any character. Returns the parsed character.
anyChar :: CharParsing m => m Char

-- | <tt>string s</tt> parses a sequence of characters given by <tt>s</tt>.
--   Returns the parsed string (i.e. <tt>s</tt>).
--   
--   <pre>
--   divOrMod    =   string "div"
--               &lt;|&gt; string "mod"
--   </pre>
string :: CharParsing m => String -> m String

-- | <tt>text t</tt> parses a sequence of characters determined by the text
--   <tt>t</tt> Returns the parsed text fragment (i.e. <tt>t</tt>).
--   
--   Using <tt>OverloadedStrings</tt>:
--   
--   <pre>
--   divOrMod    =   text "div"
--               &lt;|&gt; text "mod"
--   </pre>
text :: CharParsing m => Text -> m Text
integral :: (CharParsing m, Integral a) => m a

-- | Accepts negative (starting with <tt>-</tt>) and positive (without
--   sign) integral numbers.
signedIntegral :: (CharParsing m, Integral a) => m a

-- | Greedily munch characters while predicate holds. Require at least one
--   character.
munch1 :: CharParsing m => (Char -> Bool) -> m String

-- | Greedily munch characters while predicate holds. Always succeeds.
munch :: CharParsing m => (Char -> Bool) -> m String
skipSpaces1 :: CharParsing m => m ()
instance (Distribution.Compat.CharParsing.CharParsing m, GHC.Internal.Base.MonadPlus m) => Distribution.Compat.CharParsing.CharParsing (Control.Monad.Trans.Identity.IdentityT m)
instance Text.Parsec.Prim.Stream s m GHC.Types.Char => Distribution.Compat.CharParsing.CharParsing (Text.Parsec.Prim.ParsecT s u m)
instance (Distribution.Compat.CharParsing.CharParsing m, GHC.Internal.Base.MonadPlus m, GHC.Internal.Base.Monoid w) => Distribution.Compat.CharParsing.CharParsing (Control.Monad.Trans.RWS.Strict.RWST r w s m)
instance (Distribution.Compat.CharParsing.CharParsing m, GHC.Internal.Base.MonadPlus m, GHC.Internal.Base.Monoid w) => Distribution.Compat.CharParsing.CharParsing (Control.Monad.Trans.RWS.Lazy.RWST r w s m)
instance (Distribution.Compat.CharParsing.CharParsing m, GHC.Internal.Base.MonadPlus m) => Distribution.Compat.CharParsing.CharParsing (Control.Monad.Trans.Reader.ReaderT e m)
instance (Distribution.Compat.CharParsing.CharParsing m, GHC.Internal.Base.MonadPlus m) => Distribution.Compat.CharParsing.CharParsing (Control.Monad.Trans.State.Strict.StateT s m)
instance (Distribution.Compat.CharParsing.CharParsing m, GHC.Internal.Base.MonadPlus m) => Distribution.Compat.CharParsing.CharParsing (Control.Monad.Trans.State.Lazy.StateT s m)
instance (Distribution.Compat.CharParsing.CharParsing m, GHC.Internal.Base.MonadPlus m, GHC.Internal.Base.Monoid w) => Distribution.Compat.CharParsing.CharParsing (Control.Monad.Trans.Writer.Lazy.WriterT w m)
instance (Distribution.Compat.CharParsing.CharParsing m, GHC.Internal.Base.MonadPlus m, GHC.Internal.Base.Monoid w) => Distribution.Compat.CharParsing.CharParsing (Control.Monad.Trans.Writer.Strict.WriterT w m)

module Distribution.CabalSpecVersion

-- | Different Cabal-the-spec versions.
--   
--   We branch based on this at least in the parser.
data CabalSpecVersion

-- | this is older than <a>CabalSpecV1_2</a>
CabalSpecV1_0 :: CabalSpecVersion

-- | new syntax (sections)
CabalSpecV1_2 :: CabalSpecVersion
CabalSpecV1_4 :: CabalSpecVersion
CabalSpecV1_6 :: CabalSpecVersion
CabalSpecV1_8 :: CabalSpecVersion
CabalSpecV1_10 :: CabalSpecVersion
CabalSpecV1_12 :: CabalSpecVersion
CabalSpecV1_18 :: CabalSpecVersion
CabalSpecV1_20 :: CabalSpecVersion
CabalSpecV1_22 :: CabalSpecVersion
CabalSpecV1_24 :: CabalSpecVersion
CabalSpecV2_0 :: CabalSpecVersion
CabalSpecV2_2 :: CabalSpecVersion
CabalSpecV2_4 :: CabalSpecVersion
CabalSpecV3_0 :: CabalSpecVersion
CabalSpecV3_4 :: CabalSpecVersion
CabalSpecV3_6 :: CabalSpecVersion
CabalSpecV3_8 :: CabalSpecVersion
CabalSpecV3_12 :: CabalSpecVersion

-- | Show cabal spec version, but not the way in the .cabal files
showCabalSpecVersion :: CabalSpecVersion -> String
cabalSpecLatest :: CabalSpecVersion

-- | Parse <a>CabalSpecVersion</a> from version digits.
--   
--   It may fail if for recent versions the version is not exact.
cabalSpecFromVersionDigits :: [Int] -> Maybe CabalSpecVersion

cabalSpecToVersionDigits :: CabalSpecVersion -> [Int]

-- | What is the minimum Cabal library version which knows how handle this
--   spec version.
--   
--   <i>Note:</i> this is a point where we could decouple cabal-spec and
--   Cabal versions, if we ever want that.
--   
--   <pre>
--   &gt;&gt;&gt; cabalSpecMinimumLibraryVersion CabalSpecV3_0
--   [2,5]
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; cabalSpecMinimumLibraryVersion CabalSpecV2_4
--   [2,3]
--   </pre>
cabalSpecMinimumLibraryVersion :: CabalSpecVersion -> [Int]
specHasCommonStanzas :: CabalSpecVersion -> HasCommonStanzas
specHasElif :: CabalSpecVersion -> HasElif
data HasElif
HasElif :: HasElif
NoElif :: HasElif
data HasCommonStanzas
HasCommonStanzas :: HasCommonStanzas
NoCommonStanzas :: HasCommonStanzas
data HasGlobstar
HasGlobstar :: HasGlobstar
NoGlobstar :: HasGlobstar
instance Data.Binary.Class.Binary Distribution.CabalSpecVersion.CabalSpecVersion
instance GHC.Internal.Enum.Bounded Distribution.CabalSpecVersion.CabalSpecVersion
instance GHC.Internal.Data.Data.Data Distribution.CabalSpecVersion.CabalSpecVersion
instance GHC.Internal.Enum.Enum Distribution.CabalSpecVersion.CabalSpecVersion
instance GHC.Classes.Eq Distribution.CabalSpecVersion.CabalSpecVersion
instance GHC.Classes.Eq Distribution.CabalSpecVersion.HasCommonStanzas
instance GHC.Classes.Eq Distribution.CabalSpecVersion.HasElif
instance GHC.Internal.Generics.Generic Distribution.CabalSpecVersion.CabalSpecVersion
instance Control.DeepSeq.NFData Distribution.CabalSpecVersion.CabalSpecVersion
instance GHC.Classes.Ord Distribution.CabalSpecVersion.CabalSpecVersion
instance GHC.Internal.Read.Read Distribution.CabalSpecVersion.CabalSpecVersion
instance GHC.Internal.Show.Show Distribution.CabalSpecVersion.CabalSpecVersion
instance GHC.Internal.Show.Show Distribution.CabalSpecVersion.HasCommonStanzas
instance GHC.Internal.Show.Show Distribution.CabalSpecVersion.HasElif
instance Distribution.Utils.Structured.Structured Distribution.CabalSpecVersion.CabalSpecVersion

module Distribution.SPDX.LicenseListVersion

-- | SPDX License List version <tt>Cabal</tt> is aware of.
data LicenseListVersion
LicenseListVersion_3_0 :: LicenseListVersion
LicenseListVersion_3_2 :: LicenseListVersion
LicenseListVersion_3_6 :: LicenseListVersion
LicenseListVersion_3_9 :: LicenseListVersion
LicenseListVersion_3_10 :: LicenseListVersion
LicenseListVersion_3_16 :: LicenseListVersion
LicenseListVersion_3_23 :: LicenseListVersion
cabalSpecVersionToSPDXListVersion :: CabalSpecVersion -> LicenseListVersion
instance GHC.Internal.Enum.Bounded Distribution.SPDX.LicenseListVersion.LicenseListVersion
instance GHC.Internal.Enum.Enum Distribution.SPDX.LicenseListVersion.LicenseListVersion
instance GHC.Classes.Eq Distribution.SPDX.LicenseListVersion.LicenseListVersion
instance GHC.Classes.Ord Distribution.SPDX.LicenseListVersion.LicenseListVersion
instance GHC.Internal.Show.Show Distribution.SPDX.LicenseListVersion.LicenseListVersion

module Distribution.Pretty
class Pretty a
pretty :: Pretty a => a -> Doc
prettyVersioned :: Pretty a => CabalSpecVersion -> a -> Doc
prettyShow :: Pretty a => a -> String

-- | The default rendering style used in Cabal for console output. It has a
--   fixed page width and adds line breaks automatically.
defaultStyle :: Style

-- | A style for rendering all on one line.
flatStyle :: Style
showFilePath :: FilePath -> Doc
showToken :: String -> Doc
showTokenStr :: String -> String

-- | Pretty-print free-format text, ensuring that it is vertically aligned,
--   and with blank lines replaced by dots for correct re-parsing.
showFreeText :: String -> Doc

-- | Pretty-print free-format text. Since <tt>cabal-version: 3.0</tt> we
--   don't replace blank lines with dots.
showFreeTextV3 :: String -> Doc
type Separator = [Doc] -> Doc
instance Distribution.Pretty.Pretty GHC.Types.Bool
instance Distribution.Pretty.Pretty Text.PrettyPrint.HughesPJ.Doc
instance Distribution.Pretty.Pretty a => Distribution.Pretty.Pretty (GHC.Internal.Data.Functor.Identity.Identity a)
instance Distribution.Pretty.Pretty GHC.Types.Int


-- | Cabal-like file AST types: <a>Field</a>, <a>Section</a> etc
--   
--   These types are parametrized by an annotation.
module Distribution.Fields.Field

-- | A Cabal-like file consists of a series of fields (<tt>foo: bar</tt>)
--   and sections (<tt>library ...</tt>).
data Field ann
Field :: !Name ann -> [FieldLine ann] -> Field ann
Section :: !Name ann -> [SectionArg ann] -> [Field ann] -> Field ann

-- | Section of field name
fieldName :: Field ann -> Name ann
fieldAnn :: Field ann -> ann

-- | All transitive descendants of <a>Field</a>, including itself.
--   
--   <i>Note:</i> the resulting list is never empty.
fieldUniverse :: Field ann -> [Field ann]

-- | A line of text representing the value of a field from a Cabal file. A
--   field may contain multiple lines.
--   
--   <i>Invariant:</i> <a>ByteString</a> has no newlines.
data FieldLine ann
FieldLine :: !ann -> !ByteString -> FieldLine ann

fieldLineAnn :: FieldLine ann -> ann

fieldLineBS :: FieldLine ann -> ByteString

-- | Section arguments, e.g. name of the library
data SectionArg ann

-- | identifier, or something which looks like number. Also many dot
--   numbers, i.e. "7.6.3"
SecArgName :: !ann -> !ByteString -> SectionArg ann

-- | quoted string
SecArgStr :: !ann -> !ByteString -> SectionArg ann

-- | everything else, mm. operators (e.g. in if-section conditionals)
SecArgOther :: !ann -> !ByteString -> SectionArg ann

-- | Extract annotation from <a>SectionArg</a>.
sectionArgAnn :: SectionArg ann -> ann
type FieldName = ByteString

-- | A field name.
--   
--   <i>Invariant</i>: <a>ByteString</a> is lower-case ASCII.
data Name ann
Name :: !ann -> !FieldName -> Name ann
mkName :: ann -> FieldName -> Name ann
getName :: Name ann -> FieldName
nameAnn :: Name ann -> ann

sectionArgsToString :: [SectionArg ann] -> String

-- | Convert <tt>[<a>FieldLine</a>]</tt> into String.
--   
--   <i>Note:</i> this doesn't preserve indentation or empty lines, as the
--   annotations (e.g. positions) are ignored.
fieldLinesToString :: [FieldLine ann] -> String
instance GHC.Classes.Eq ann => GHC.Classes.Eq (Distribution.Fields.Field.Field ann)
instance GHC.Classes.Eq ann => GHC.Classes.Eq (Distribution.Fields.Field.FieldLine ann)
instance GHC.Classes.Eq ann => GHC.Classes.Eq (Distribution.Fields.Field.Name ann)
instance GHC.Classes.Eq ann => GHC.Classes.Eq (Distribution.Fields.Field.SectionArg ann)
instance Data.Foldable1.Foldable1 Distribution.Fields.Field.Field
instance Data.Foldable1.Foldable1 Distribution.Fields.Field.FieldLine
instance Data.Foldable1.Foldable1 Distribution.Fields.Field.Name
instance Data.Foldable1.Foldable1 Distribution.Fields.Field.SectionArg
instance GHC.Internal.Data.Foldable.Foldable Distribution.Fields.Field.Field
instance GHC.Internal.Data.Foldable.Foldable Distribution.Fields.Field.FieldLine
instance GHC.Internal.Data.Foldable.Foldable Distribution.Fields.Field.Name
instance GHC.Internal.Data.Foldable.Foldable Distribution.Fields.Field.SectionArg
instance GHC.Internal.Base.Functor Distribution.Fields.Field.Field
instance GHC.Internal.Base.Functor Distribution.Fields.Field.FieldLine
instance GHC.Internal.Base.Functor Distribution.Fields.Field.Name
instance GHC.Internal.Base.Functor Distribution.Fields.Field.SectionArg
instance GHC.Classes.Ord ann => GHC.Classes.Ord (Distribution.Fields.Field.Field ann)
instance GHC.Classes.Ord ann => GHC.Classes.Ord (Distribution.Fields.Field.FieldLine ann)
instance GHC.Classes.Ord ann => GHC.Classes.Ord (Distribution.Fields.Field.Name ann)
instance GHC.Classes.Ord ann => GHC.Classes.Ord (Distribution.Fields.Field.SectionArg ann)
instance GHC.Internal.Show.Show ann => GHC.Internal.Show.Show (Distribution.Fields.Field.Field ann)
instance GHC.Internal.Show.Show ann => GHC.Internal.Show.Show (Distribution.Fields.Field.FieldLine ann)
instance GHC.Internal.Show.Show ann => GHC.Internal.Show.Show (Distribution.Fields.Field.Name ann)
instance GHC.Internal.Show.Show ann => GHC.Internal.Show.Show (Distribution.Fields.Field.SectionArg ann)
instance GHC.Internal.Data.Traversable.Traversable Distribution.Fields.Field.Field
instance GHC.Internal.Data.Traversable.Traversable Distribution.Fields.Field.FieldLine
instance GHC.Internal.Data.Traversable.Traversable Distribution.Fields.Field.Name
instance GHC.Internal.Data.Traversable.Traversable Distribution.Fields.Field.SectionArg


module Distribution.Fields.Parser

-- | A Cabal-like file consists of a series of fields (<tt>foo: bar</tt>)
--   and sections (<tt>library ...</tt>).
data Field ann
Field :: !Name ann -> [FieldLine ann] -> Field ann
Section :: !Name ann -> [SectionArg ann] -> [Field ann] -> Field ann

-- | A field name.
--   
--   <i>Invariant</i>: <a>ByteString</a> is lower-case ASCII.
data Name ann
Name :: !ann -> !FieldName -> Name ann

-- | A line of text representing the value of a field from a Cabal file. A
--   field may contain multiple lines.
--   
--   <i>Invariant:</i> <a>ByteString</a> has no newlines.
data FieldLine ann
FieldLine :: !ann -> !ByteString -> FieldLine ann

-- | Section arguments, e.g. name of the library
data SectionArg ann

-- | identifier, or something which looks like number. Also many dot
--   numbers, i.e. "7.6.3"
SecArgName :: !ann -> !ByteString -> SectionArg ann

-- | quoted string
SecArgStr :: !ann -> !ByteString -> SectionArg ann

-- | everything else, mm. operators (e.g. in if-section conditionals)
SecArgOther :: !ann -> !ByteString -> SectionArg ann

-- | Parse cabal style <a>ByteString</a> into list of <a>Field</a>s, i.e.
--   the cabal AST.
--   
--   <a>readFields</a> assumes that input <a>ByteString</a> is valid UTF8,
--   specifically it doesn't validate that file is valid UTF8. Therefore
--   bytestrings inside returned <a>Field</a> will be invalid as UTF8 if
--   the input were.
--   
--   <pre>
--   &gt;&gt;&gt; readFields "foo: \223"
--   Right [Field (Name (Position 1 1) "foo") [FieldLine (Position 1 6) "\223"]]
--   </pre>
--   
--   <a>readFields</a> won't (necessarily) fail on invalid UTF8 data, but
--   the reported positions may be off.
--   
--   <b>You may get weird errors on non-UTF8 input</b>, for example
--   <a>readFields</a> will fail on latin1 encoded non-breaking space:
--   
--   <pre>
--   &gt;&gt;&gt; isLeft (readFields "\xa0 foo: bar")
--   True
--   </pre>
--   
--   That is rejected because parser thinks <tt>\xa0</tt> is a section
--   name, and section arguments may not contain colon. If there are just
--   latin1 non-breaking spaces, they become part of the name:
--   
--   <pre>
--   &gt;&gt;&gt; readFields "\xa0\&amp;foo: bar"
--   Right [Field (Name (Position 1 1) "\160foo") [FieldLine (Position 1 7) "bar"]]
--   </pre>
--   
--   The UTF8 non-breaking space is accepted as an indentation character
--   (but warned about by <a>readFields'</a>).
--   
--   <pre>
--   &gt;&gt;&gt; readFields' "\xc2\xa0 foo: bar"
--   Right ([Field (Name (Position 1 3) "foo") [FieldLine (Position 1 8) "bar"]],[LexWarning LexWarningNBSP (Position 1 1)])
--   </pre>
readFields :: ByteString -> Either ParseError [Field Position]

-- | Like <a>readFields</a> but also return lexer warnings.
readFields' :: ByteString -> Either ParseError ([Field Position], [LexWarning])
instance Text.Parsec.Prim.Stream Distribution.Fields.Parser.LexState' GHC.Internal.Data.Functor.Identity.Identity Distribution.Fields.Lexer.LToken


-- | Cabal-like file AST types: <tt>Field</tt>, <tt>Section</tt> etc,
--   
--   This (intermediate) data type is used for pretty-printing.
module Distribution.Fields.Pretty

-- | This type is used to discern when a comment block should go before or
--   after a cabal-like file field, otherwise it would be hardcoded to a
--   single position. It is often used in conjunction with
--   <tt>PrettyField</tt>.
data CommentPosition
CommentBefore :: [String] -> CommentPosition
CommentAfter :: [String] -> CommentPosition
NoComment :: CommentPosition
data PrettyField ann
PrettyField :: ann -> FieldName -> Doc -> PrettyField ann
PrettySection :: ann -> FieldName -> [Doc] -> [PrettyField ann] -> PrettyField ann
PrettyEmpty :: PrettyField ann

-- | Prettyprint a list of fields.
--   
--   Note: the first argument should return <a>String</a>s without newlines
--   and properly prefixes (with <tt>--</tt>) to count as comments. This
--   unsafety is left in place so one could generate empty lines between
--   comment lines.
showFields :: (ann -> CommentPosition) -> [PrettyField ann] -> String

-- | <a>showFields</a> with user specified indentation.
showFields' :: (ann -> CommentPosition) -> (ann -> [String] -> [String]) -> Int -> [PrettyField ann] -> String

-- | Simple variant of <tt>genericFromParsecField</tt>
fromParsecFields :: [Field ann] -> [PrettyField ann]
genericFromParsecFields :: Applicative f => (FieldName -> [FieldLine ann] -> f Doc) -> (FieldName -> [SectionArg ann] -> f [Doc]) -> [Field ann] -> f [PrettyField ann]

-- | Used in <a>fromParsecFields</a>.
prettyFieldLines :: FieldName -> [FieldLine ann] -> Doc

-- | Used in <a>fromParsecFields</a>.
prettySectionArgs :: FieldName -> [SectionArg ann] -> [Doc]
instance GHC.Classes.Eq Distribution.Fields.Pretty.Margin
instance GHC.Internal.Data.Foldable.Foldable Distribution.Fields.Pretty.PrettyField
instance GHC.Internal.Base.Functor Distribution.Fields.Pretty.PrettyField
instance GHC.Internal.Base.Semigroup Distribution.Fields.Pretty.Margin
instance GHC.Internal.Data.Traversable.Traversable Distribution.Fields.Pretty.PrettyField

module Distribution.Parsec

-- | Class for parsing with <tt>parsec</tt>. Mainly used for
--   <tt>.cabal</tt> file fields.
--   
--   For parsing <tt>.cabal</tt> like file structure, see
--   <a>Distribution.Fields</a>.
class Parsec a
parsec :: (Parsec a, CabalParsing m) => m a
newtype ParsecParser a
PP :: (CabalSpecVersion -> Parsec FieldLineStream [PWarning] a) -> ParsecParser a
[unPP] :: ParsecParser a -> CabalSpecVersion -> Parsec FieldLineStream [PWarning] a

-- | Run <a>ParsecParser</a> with <a>cabalSpecLatest</a>.
runParsecParser :: ParsecParser a -> FilePath -> FieldLineStream -> Either ParseError a

-- | Like <a>runParsecParser</a> but lets specify <a>CabalSpecVersion</a>
--   used.
runParsecParser' :: CabalSpecVersion -> ParsecParser a -> FilePath -> FieldLineStream -> Either ParseError a

-- | Parse a <a>String</a> with <a>lexemeParsec</a>.
simpleParsec :: Parsec a => String -> Maybe a

-- | Like <a>simpleParsec</a> but for <a>ByteString</a>
simpleParsecBS :: Parsec a => ByteString -> Maybe a

-- | Parse a <a>String</a> with <a>lexemeParsec</a> using specific
--   <a>CabalSpecVersion</a>.
simpleParsec' :: Parsec a => CabalSpecVersion -> String -> Maybe a

-- | Parse a <a>String</a> with <a>lexemeParsec</a> using specific
--   <a>CabalSpecVersion</a>. Fail if there are any warnings.
simpleParsecW' :: Parsec a => CabalSpecVersion -> String -> Maybe a

-- | <a>parsec</a> <i>could</i> consume trailing spaces, this function
--   <i>will</i> consume.
lexemeParsec :: (CabalParsing m, Parsec a) => m a

-- | Parse a <a>String</a> with <a>lexemeParsec</a>.
eitherParsec :: Parsec a => String -> Either String a

-- | Parse a <a>String</a> with given <a>ParsecParser</a>. Trailing
--   whitespace is accepted.
explicitEitherParsec :: ParsecParser a -> String -> Either String a

-- | Parse a <a>String</a> with given <a>ParsecParser</a> and
--   <a>CabalSpecVersion</a>. Trailing whitespace is accepted. See
--   <a>explicitEitherParsec</a>.
explicitEitherParsec' :: CabalSpecVersion -> ParsecParser a -> String -> Either String a

-- | Parsing class which
--   
--   <ul>
--   <li>can report Cabal parser warnings.</li>
--   <li>knows <tt>cabal-version</tt> we work with</li>
--   </ul>
class (CharParsing m, MonadPlus m, MonadFail m) => CabalParsing (m :: Type -> Type)
parsecWarning :: CabalParsing m => PWarnType -> String -> m ()
parsecHaskellString :: CabalParsing m => m String
askCabalSpecVersion :: CabalParsing m => m CabalSpecVersion

-- | Type of parser warning. We do classify warnings.
--   
--   Different application may decide not to show some, or have fatal
--   behaviour on others
data PWarnType

-- | Unclassified warning
PWTOther :: PWarnType

-- | Invalid UTF encoding
PWTUTF :: PWarnType

-- | <tt>true</tt> or <tt>false</tt>, not <tt>True</tt> or <tt>False</tt>
PWTBoolCase :: PWarnType

-- | there are version with tags
PWTVersionTag :: PWarnType

-- | New syntax used, but no <tt>cabal-version: &gt;= 1.2</tt> specified
PWTNewSyntax :: PWarnType

-- | Old syntax used, and <tt>cabal-version &gt;= 1.2</tt> specified
PWTOldSyntax :: PWarnType
PWTDeprecatedField :: PWarnType
PWTInvalidSubsection :: PWarnType
PWTUnknownField :: PWarnType
PWTUnknownSection :: PWarnType
PWTTrailingFields :: PWarnType

-- | extra main-is field
PWTExtraMainIs :: PWarnType

-- | extra test-module field
PWTExtraTestModule :: PWarnType

-- | extra benchmark-module field
PWTExtraBenchmarkModule :: PWarnType
PWTLexNBSP :: PWarnType
PWTLexBOM :: PWarnType
PWTLexTab :: PWarnType

-- | legacy cabal file that we know how to patch
PWTQuirkyCabalFile :: PWarnType

-- | Double dash token, most likely it's a mistake - it's not a comment
PWTDoubleDash :: PWarnType

-- | e.g. name or version should be specified only once.
PWTMultipleSingularField :: PWarnType

-- | Workaround for derive-package having build-type: Default. See
--   <a>https://github.com/haskell/cabal/issues/5020</a>.
PWTBuildTypeDefault :: PWarnType

-- | Version operators used (without cabal-version: 1.8)
PWTVersionOperator :: PWarnType

-- | Version wildcard used (without cabal-version: 1.6)
PWTVersionWildcard :: PWarnType

-- | Warnings about cabal-version format.
PWTSpecVersion :: PWarnType

-- | Empty filepath, i.e. literally ""
PWTEmptyFilePath :: PWarnType

-- | sections contents (sections and fields) are indented inconsistently
PWTInconsistentIndentation :: PWarnType

-- | Experimental feature
PWTExperimental :: PWarnType

-- | Parser warning.
data PWarning
PWarning :: !PWarnType -> !Position -> String -> PWarning
showPWarning :: FilePath -> PWarning -> String

-- | Parser error.
data PError
PError :: Position -> String -> PError
showPError :: FilePath -> PError -> String

-- | 1-indexed row and column positions in a file.
data Position
Position :: {-# UNPACK #-} !Int -> {-# UNPACK #-} !Int -> Position

-- | Shift position by n columns to the right.
incPos :: Int -> Position -> Position

-- | Shift position to beginning of next row.
retPos :: Position -> Position
showPos :: Position -> String
zeroPos :: Position

-- | <pre>
--   [^ ,]
--   </pre>
parsecToken :: CabalParsing m => m String

-- | <pre>
--   [^ ]
--   </pre>
parsecToken' :: CabalParsing m => m String
parsecFilePath :: CabalParsing m => m FilePath

-- | Content isn't unquoted
parsecQuoted :: CabalParsing m => m a -> m a

-- | <tt>parsecMaybeQuoted p = <a>parsecQuoted</a> p <a>|</a> p</tt>.
parsecMaybeQuoted :: CabalParsing m => m a -> m a
parsecCommaList :: CabalParsing m => m a -> m [a]
parsecCommaNonEmpty :: CabalParsing m => m a -> m (NonEmpty a)

-- | Like <a>parsecCommaList</a> but accept leading or trailing comma.
--   
--   <pre>
--   p (comma p)*  -- p <tt>sepBy</tt> comma
--   (comma p)*    -- leading comma
--   (p comma)*    -- trailing comma
--   </pre>
parsecLeadingCommaList :: CabalParsing m => m a -> m [a]

parsecLeadingCommaNonEmpty :: CabalParsing m => m a -> m (NonEmpty a)
parsecOptCommaList :: CabalParsing m => m a -> m [a]

-- | Like <a>parsecOptCommaList</a> but
--   
--   <ul>
--   <li>require all or none commas</li>
--   <li>accept leading or trailing comma.</li>
--   </ul>
--   
--   <pre>
--   p (comma p)*  -- p <tt>sepBy</tt> comma
--   (comma p)*    -- leading comma
--   (p comma)*    -- trailing comma
--   p*            -- no commas: many p
--   </pre>
parsecLeadingOptCommaList :: CabalParsing m => m a -> m [a]

-- | Parse a benchmark/test-suite types.
parsecStandard :: (CabalParsing m, Parsec ver) => (ver -> String -> a) -> m a
parsecUnqualComponentName :: CabalParsing m => m String
instance GHC.Internal.Base.Alternative Distribution.Parsec.ParsecParser
instance GHC.Internal.Base.Applicative Distribution.Parsec.ParsecParser
instance Distribution.Parsec.CabalParsing Distribution.Parsec.ParsecParser
instance Distribution.Compat.CharParsing.CharParsing Distribution.Parsec.ParsecParser
instance GHC.Internal.Base.Functor Distribution.Parsec.ParsecParser
instance GHC.Internal.Control.Monad.Fail.MonadFail Distribution.Parsec.ParsecParser
instance GHC.Internal.Base.Monad Distribution.Parsec.ParsecParser
instance GHC.Internal.Base.MonadPlus Distribution.Parsec.ParsecParser
instance Distribution.Parsec.Parsec GHC.Types.Bool
instance Distribution.Parsec.Parsec a => Distribution.Parsec.Parsec (GHC.Internal.Data.Functor.Identity.Identity a)
instance Distribution.Compat.Parsing.Parsing Distribution.Parsec.ParsecParser

module Distribution.Utils.Path

-- | Symbolic paths.
--   
--   These paths are system independent and relative. They are *symbolic*
--   which means we cannot perform any <a>IO</a> until we interpret them.
data SymbolicPath from to

-- | Extract underlying <a>FilePath</a>.
--   
--   Avoid using this in new code.
getSymbolicPath :: SymbolicPath from to -> FilePath
sameDirectory :: (IsDir from, IsDir to) => SymbolicPath from to

-- | Make <a>SymbolicPath</a> without performing any checks.
unsafeMakeSymbolicPath :: FilePath -> SymbolicPath from to
data PackageDir
data SourceDir
data LicenseFile

-- | Class telling that index is for directories.
class IsDir dir
instance Data.Binary.Class.Binary (Distribution.Utils.Path.SymbolicPath from to)
instance GHC.Internal.Data.Data.Data Distribution.Utils.Path.LicenseFile
instance GHC.Internal.Data.Data.Data Distribution.Utils.Path.PackageDir
instance GHC.Internal.Data.Data.Data Distribution.Utils.Path.SourceDir
instance (GHC.Internal.Data.Data.Data from, GHC.Internal.Data.Data.Data to) => GHC.Internal.Data.Data.Data (Distribution.Utils.Path.SymbolicPath from to)
instance GHC.Classes.Eq (Distribution.Utils.Path.SymbolicPath from to)
instance GHC.Internal.Generics.Generic (Distribution.Utils.Path.SymbolicPath from to)
instance Distribution.Utils.Path.IsDir Distribution.Utils.Path.PackageDir
instance Distribution.Utils.Path.IsDir Distribution.Utils.Path.SourceDir
instance Control.DeepSeq.NFData (Distribution.Utils.Path.SymbolicPath from to)
instance GHC.Classes.Ord (Distribution.Utils.Path.SymbolicPath from to)
instance Distribution.Parsec.Parsec (Distribution.Utils.Path.SymbolicPath from to)
instance Distribution.Pretty.Pretty (Distribution.Utils.Path.SymbolicPath from to)
instance GHC.Internal.Read.Read (Distribution.Utils.Path.SymbolicPath from to)
instance GHC.Internal.Show.Show (Distribution.Utils.Path.SymbolicPath from to)
instance (GHC.Internal.Data.Typeable.Internal.Typeable from, GHC.Internal.Data.Typeable.Internal.Typeable to) => Distribution.Utils.Structured.Structured (Distribution.Utils.Path.SymbolicPath from to)

module Distribution.Types.Version

-- | A <a>Version</a> represents the version of a software entity.
--   
--   Instances of <a>Eq</a> and <a>Ord</a> are provided, which gives exact
--   equality and lexicographic ordering of the version number components
--   (i.e. 2.1 &gt; 2.0, 1.2.3 &gt; 1.2.2, etc.).
--   
--   This type is opaque and distinct from the <a>Version</a> type in
--   <a>Data.Version</a> since <tt>Cabal-2.0</tt>. The difference extends
--   to the <a>Binary</a> instance using a different (and more compact)
--   encoding.
data Version

-- | Construct <a>Version</a> from list of version number components.
--   
--   For instance, <tt>mkVersion [3,2,1]</tt> constructs a <a>Version</a>
--   representing the version <tt>3.2.1</tt>.
--   
--   All version components must be non-negative. <tt>mkVersion []</tt>
--   currently represents the special <i>null</i> version; see also
--   <a>nullVersion</a>.
mkVersion :: [Int] -> Version

-- | Variant of <a>mkVersion</a> which converts a <a>Data.Version</a>
--   <a>Version</a> into Cabal's <a>Version</a> type.
mkVersion' :: Version -> Version

-- | Unpack <a>Version</a> into list of version number components.
--   
--   This is the inverse to <a>mkVersion</a>, so the following holds:
--   
--   <pre>
--   (versionNumbers . mkVersion) vs == vs
--   </pre>
versionNumbers :: Version -> [Int]

-- | Constant representing the special <i>null</i> <a>Version</a>
--   
--   The <a>nullVersion</a> compares (via <a>Ord</a>) as less than every
--   proper <a>Version</a> value.
nullVersion :: Version

-- | Apply function to list of version number components
--   
--   <pre>
--   alterVersion f == mkVersion . f . versionNumbers
--   </pre>
alterVersion :: ([Int] -> [Int]) -> Version -> Version

-- | Version 0. A lower bound of <a>Version</a>.
version0 :: Version
validVersion :: Version -> Bool

-- | An integral without leading zeroes.
versionDigitParser :: CabalParsing m => m Int
instance Data.Binary.Class.Binary Distribution.Types.Version.Version
instance GHC.Internal.Data.Data.Data Distribution.Types.Version.Version
instance GHC.Classes.Eq Distribution.Types.Version.Version
instance GHC.Internal.Generics.Generic Distribution.Types.Version.Version
instance Control.DeepSeq.NFData Distribution.Types.Version.Version
instance GHC.Classes.Ord Distribution.Types.Version.Version
instance Distribution.Parsec.Parsec Distribution.Types.Version.Version
instance Distribution.Pretty.Pretty Distribution.Types.Version.Version
instance GHC.Internal.Read.Read Distribution.Types.Version.Version
instance GHC.Internal.Show.Show Distribution.Types.Version.Version
instance Distribution.Utils.Structured.Structured Distribution.Types.Version.Version


-- | The only purpose of this module is to prevent the export of
--   <a>VersionRange</a> constructors from
--   <a>Distribution.Types.VersionRange</a>. To avoid creating orphan
--   instances, a lot of related code had to be moved here too.
module Distribution.Types.VersionRange.Internal
data VersionRange
ThisVersion :: Version -> VersionRange
LaterVersion :: Version -> VersionRange
OrLaterVersion :: Version -> VersionRange
EarlierVersion :: Version -> VersionRange
OrEarlierVersion :: Version -> VersionRange
MajorBoundVersion :: Version -> VersionRange
UnionVersionRanges :: VersionRange -> VersionRange -> VersionRange
IntersectVersionRanges :: VersionRange -> VersionRange -> VersionRange

-- | The version range <tt>-any</tt>. That is, a version range containing
--   all versions.
--   
--   <pre>
--   withinRange v anyVersion = True
--   </pre>
anyVersion :: VersionRange

-- | The empty version range <tt>-none</tt>, that is a version range
--   containing no versions.
--   
--   This can be constructed using any unsatisfiable version range
--   expression, for example <tt>&lt; 0</tt>.
--   
--   <pre>
--   withinRange v noVersion = False
--   </pre>
noVersion :: VersionRange

-- | The version range <tt>== v</tt>.
--   
--   <pre>
--   withinRange v' (thisVersion v) = v' == v
--   </pre>
thisVersion :: Version -> VersionRange

-- | The version range <tt>/= v</tt>.
--   
--   <pre>
--   withinRange v' (notThisVersion v) = v' /= v
--   </pre>
notThisVersion :: Version -> VersionRange

-- | The version range <tt>&gt; v</tt>.
--   
--   <pre>
--   withinRange v' (laterVersion v) = v' &gt; v
--   </pre>
laterVersion :: Version -> VersionRange

-- | The version range <tt>&lt; v</tt>.
--   
--   <pre>
--   withinRange v' (earlierVersion v) = v' &lt; v
--   </pre>
earlierVersion :: Version -> VersionRange

-- | The version range <tt>&gt;= v</tt>.
--   
--   <pre>
--   withinRange v' (orLaterVersion v) = v' &gt;= v
--   </pre>
orLaterVersion :: Version -> VersionRange

-- | The version range <tt>&lt;= v</tt>.
--   
--   <pre>
--   withinRange v' (orEarlierVersion v) = v' &lt;= v
--   </pre>
orEarlierVersion :: Version -> VersionRange

-- | The version range <tt>vr1 || vr2</tt>.
--   
--   <pre>
--     withinRange v' (unionVersionRanges vr1 vr2)
--   = withinRange v' vr1 || withinRange v' vr2
--   </pre>
unionVersionRanges :: VersionRange -> VersionRange -> VersionRange

-- | The version range <tt>vr1 &amp;&amp; vr2</tt>.
--   
--   <pre>
--     withinRange v' (intersectVersionRanges vr1 vr2)
--   = withinRange v' vr1 &amp;&amp; withinRange v' vr2
--   </pre>
intersectVersionRanges :: VersionRange -> VersionRange -> VersionRange

-- | The version range <tt>== v.*</tt>.
--   
--   For example, for version <tt>1.2</tt>, the version range <tt>==
--   1.2.*</tt> is the same as <tt>&gt;= 1.2 &amp;&amp; &lt; 1.3</tt>.
--   
--   <pre>
--   withinRange v' (withinVersion v) = v' &gt;= v &amp;&amp; v' &lt; upper v
--     where
--       upper (Version lower t) = Version (init lower ++ [last lower + 1]) t
--   </pre>
withinVersion :: Version -> VersionRange

-- | The version range <tt>^&gt;= v</tt>.
--   
--   For example, for version <tt>1.2.3.4</tt>, the version range
--   <tt>^&gt;= 1.2.3.4</tt> is the same as <tt>&gt;= 1.2.3.4 &amp;&amp;
--   &lt; 1.3</tt>.
--   
--   Note that <tt>^&gt;= 1</tt> is equivalent to <tt>&gt;= 1 &amp;&amp;
--   &lt; 1.1</tt>.
majorBoundVersion :: Version -> VersionRange

-- | F-Algebra of <a>VersionRange</a>. See <a>cataVersionRange</a>.
data VersionRangeF a

-- | <tt>== version</tt>.
ThisVersionF :: Version -> VersionRangeF a

-- | <tt>&gt; version</tt>. NB: not <tt>&gt;=</tt>
LaterVersionF :: Version -> VersionRangeF a

-- | <tt>&gt;= version</tt>.
OrLaterVersionF :: Version -> VersionRangeF a

-- | <tt>&lt; version</tt>.
EarlierVersionF :: Version -> VersionRangeF a

-- | <tt>&lt;= version</tt>.
OrEarlierVersionF :: Version -> VersionRangeF a

-- | <tt>^&gt;= version</tt>, same as <tt>&gt;= version &amp;&amp; &lt;
--   MAJ(version)+1</tt>.
MajorBoundVersionF :: Version -> VersionRangeF a

-- | <tt>||</tt>.
UnionVersionRangesF :: a -> a -> VersionRangeF a

-- | <tt>&amp;&amp;</tt>.
IntersectVersionRangesF :: a -> a -> VersionRangeF a

-- | Generic destructor for <a>VersionRange</a>.
projectVersionRange :: VersionRange -> VersionRangeF VersionRange

-- | Generic constructor for <a>VersionRange</a>.
embedVersionRange :: VersionRangeF VersionRange -> VersionRange

-- | Fold <a>VersionRange</a>.
cataVersionRange :: (VersionRangeF a -> a) -> VersionRange -> a

-- | Unfold <a>VersionRange</a>.
anaVersionRange :: (a -> VersionRangeF a) -> a -> VersionRange

-- | Refold <a>VersionRange</a>.
hyloVersionRange :: (VersionRangeF VersionRange -> VersionRange) -> (VersionRange -> VersionRangeF VersionRange) -> VersionRange -> VersionRange

-- | <a>VersionRange</a> parser parametrised by version digit parser.
--   
--   <ul>
--   <li><a>versionDigitParser</a> is used for all
--   <a>VersionRange</a>.</li>
--   <li><a>integral</a> is used for backward-compat
--   <tt>pkgconfig-depends</tt> versions,
--   <tt>PkgConfigVersionRange</tt>.</li>
--   </ul>
versionRangeParser :: CabalParsing m => m Int -> CabalSpecVersion -> m VersionRange

-- | Compute next greater major version to be used as upper bound.
--   
--   Example: <tt>0.4.1</tt> produces the version <tt>0.5</tt> which then
--   can be used to construct a range <tt>&gt;= 0.4.1 &amp;&amp; &lt;
--   0.5</tt>
majorUpperBound :: Version -> Version

-- | Increment the last version number.
--   
--   Example: For <tt>1.2</tt> this returns <tt>1.3</tt> so that it can be
--   used as upper bound when resolving <tt>== 1.2.*</tt>. For
--   <tt>0.4.1</tt> it returns <tt>0.4.2</tt>.
wildcardUpperBound :: Version -> Version
instance Data.Binary.Class.Binary Distribution.Types.VersionRange.Internal.VersionRange
instance GHC.Internal.Data.Data.Data Distribution.Types.VersionRange.Internal.VersionRange
instance GHC.Internal.Data.Data.Data a => GHC.Internal.Data.Data.Data (Distribution.Types.VersionRange.Internal.VersionRangeF a)
instance GHC.Classes.Eq Distribution.Types.VersionRange.Internal.VersionRange
instance GHC.Classes.Eq a => GHC.Classes.Eq (Distribution.Types.VersionRange.Internal.VersionRangeF a)
instance GHC.Internal.Data.Foldable.Foldable Distribution.Types.VersionRange.Internal.VersionRangeF
instance GHC.Internal.Base.Functor Distribution.Types.VersionRange.Internal.VersionRangeF
instance GHC.Internal.Generics.Generic Distribution.Types.VersionRange.Internal.VersionRange
instance GHC.Internal.Generics.Generic (Distribution.Types.VersionRange.Internal.VersionRangeF a)
instance Control.DeepSeq.NFData Distribution.Types.VersionRange.Internal.VersionRange
instance GHC.Classes.Ord Distribution.Types.VersionRange.Internal.VersionRange
instance Distribution.Parsec.Parsec Distribution.Types.VersionRange.Internal.VersionRange
instance Distribution.Pretty.Pretty Distribution.Types.VersionRange.Internal.VersionRange
instance GHC.Internal.Read.Read Distribution.Types.VersionRange.Internal.VersionRange
instance GHC.Internal.Read.Read a => GHC.Internal.Read.Read (Distribution.Types.VersionRange.Internal.VersionRangeF a)
instance GHC.Internal.Show.Show Distribution.Types.VersionRange.Internal.VersionRange
instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Distribution.Types.VersionRange.Internal.VersionRangeF a)
instance Distribution.Utils.Structured.Structured Distribution.Types.VersionRange.Internal.VersionRange
instance GHC.Internal.Data.Traversable.Traversable Distribution.Types.VersionRange.Internal.VersionRangeF


-- | This module implements a view of a <a>VersionRange</a> as a finite
--   list of separated version intervals and provides the Boolean algebra
--   operations union, intersection, and complement.
--   
--   It interprets the caret operator <tt>^&gt;=x.y</tt> as simply
--   <tt>==x.y.*</tt>. Until <tt>Cabal &lt; 3.6</tt>, this module was
--   called <a>Distribution.Types.VersionInterval</a>. The current module
--   <a>Distribution.Types.VersionInterval</a> (refurbished since <tt>Cabal
--   &gt;= 3.6</tt>) makes some effort to preserve the caret operator, but
--   so far does not expose the Boolean algebra structure.
module Distribution.Types.VersionInterval.Legacy

-- | A complementary representation of a <a>VersionRange</a>, using an
--   increasing sequence of separated (i.e., non-overlapping, non-touching)
--   non-empty intervals. The represented range is the union of these
--   intervals, meaning that the empty sequence denotes the empty range.
--   
--   As ranges form a Boolean algebra, we can compute union, intersection,
--   and complement. These operations are all linear in the size of the
--   input, thanks to the ordered representation.
--   
--   The interval-sequence representation gives a canonical representation
--   for the semantics of <a>VersionRange</a>s. This makes it easier to
--   check things like whether a version range is empty, covers all
--   versions, or requires a certain minimum or maximum version. It also
--   makes it easy to check equality (just <a>==</a>) or containment. It
--   also makes it easier to identify 'simple' version predicates for
--   translation into foreign packaging systems that do not support complex
--   version range expressions.
data VersionIntervals

-- | Convert a <a>VersionRange</a> to a sequence of version intervals.
toVersionIntervals :: VersionRange -> VersionIntervals

-- | Convert a <a>VersionIntervals</a> value back into a
--   <a>VersionRange</a> expression representing the version intervals.
fromVersionIntervals :: VersionIntervals -> VersionRange

-- | Test if a version falls within the version intervals.
--   
--   It exists mostly for completeness and testing. It satisfies the
--   following properties:
--   
--   <pre>
--   withinIntervals v (toVersionIntervals vr) = withinRange v vr
--   withinIntervals v ivs = withinRange v (fromVersionIntervals ivs)
--   </pre>
withinIntervals :: Version -> VersionIntervals -> Bool

-- | Inspect the list of version intervals.
versionIntervals :: VersionIntervals -> [VersionInterval]

-- | Directly construct a <a>VersionIntervals</a> from a list of intervals.
mkVersionIntervals :: [VersionInterval] -> VersionIntervals

-- | Union two interval sequences, fusing intervals where necessary.
--   Computed &lt;math&gt; time, resulting in sequence of length
--   &lt;math&gt;.
unionVersionIntervals :: VersionIntervals -> VersionIntervals -> VersionIntervals

-- | The intersection &lt;math&gt; of two interval sequences &lt;math&gt;
--   and &lt;math&gt; of lengths &lt;math&gt; and &lt;math&gt;, resp.,
--   satisfies the specification &lt;math&gt;. Thanks to the ordered
--   representation of intervals it can be computed in &lt;math&gt; (rather
--   than the naive &lt;math&gt;.
--   
--   The length of &lt;math&gt; is &lt;math&gt;.
intersectVersionIntervals :: VersionIntervals -> VersionIntervals -> VersionIntervals

-- | Compute the complement. &lt;math&gt;.
invertVersionIntervals :: VersionIntervals -> VersionIntervals

-- | Remove the last upper bound, enlarging the range. But empty ranges
--   stay empty. &lt;math&gt;.
relaxLastInterval :: VersionIntervals -> VersionIntervals

-- | Remove the first lower bound (i.e, make it &lt;math&gt;. Empty ranges
--   stay empty. &lt;math&gt;.
relaxHeadInterval :: VersionIntervals -> VersionIntervals

-- | View a <a>VersionRange</a> as a sequence of separated intervals.
--   
--   This provides a canonical view of the semantics of a
--   <a>VersionRange</a> as opposed to the syntax of the expression used to
--   define it. For the syntactic view use <tt>foldVersionRange</tt>.
--   
--   <i>Canonical</i> means that two semantically equal ranges translate to
--   the <i>same</i> <tt>[<a>VersionInterval</a>]</tt>, thus its <a>Eq</a>
--   instance can decide semantical equality of ranges.
--   
--   In the returned sequence, each interval is non-empty. The sequence is
--   in increasing order and the intervals are separated, i.e., they
--   neither overlap nor touch. Therefore only the first and last interval
--   can be unbounded. The sequence can be empty if the range is empty
--   (e.g. a range expression like <tt>&gt; 2 &amp;&amp; &lt; 1</tt>).
--   
--   Other checks are trivial to implement using this view. For example:
--   
--   <pre>
--   isNoVersion vr | [] &lt;- asVersionIntervals vr = True
--                  | otherwise                   = False
--   </pre>
--   
--   <pre>
--   isSpecificVersion vr
--      | [(LowerBound v  InclusiveBound
--         ,UpperBound v' InclusiveBound)] &lt;- asVersionIntervals vr
--      , v == v'   = Just v
--      | otherwise = Nothing
--   </pre>
asVersionIntervals :: VersionRange -> [VersionInterval]

-- | Version intervals with exclusive or inclusive bounds, in all
--   combinations:
--   
--   <ol>
--   <li>&lt;math&gt; meaning &lt;math&gt;.</li>
--   <li>&lt;math&gt; meaning &lt;math&gt;.</li>
--   <li>&lt;math&gt; meaning &lt;math&gt;.</li>
--   <li>&lt;math&gt; meaning &lt;math&gt;.</li>
--   </ol>
--   
--   The upper bound can also be missing, meaning "&lt;math&gt;".
type VersionInterval = (LowerBound, UpperBound)
data LowerBound

-- | Either exclusive <tt>(v,..</tt> or inclusive <tt>[v,..</tt>.
LowerBound :: Version -> !Bound -> LowerBound
data UpperBound

-- | <pre>
--   ..,∞)
--   </pre>
NoUpperBound :: UpperBound

-- | Either exclusive <tt>..,v)</tt> or inclusive <tt>..,v]</tt>.
UpperBound :: Version -> !Bound -> UpperBound
data Bound

-- | <tt>(v,..</tt> if used as lower bound, <tt>..,v)</tt> if used as upper
--   bound.
ExclusiveBound :: Bound

-- | <tt>[v,..</tt> if used as lower bound, <tt>..,v]</tt> if used as upper
--   bound.
InclusiveBound :: Bound
instance GHC.Classes.Eq Distribution.Types.VersionInterval.Legacy.Bound
instance GHC.Classes.Eq Distribution.Types.VersionInterval.Legacy.LowerBound
instance GHC.Classes.Eq Distribution.Types.VersionInterval.Legacy.UpperBound
instance GHC.Classes.Eq Distribution.Types.VersionInterval.Legacy.VersionIntervals
instance GHC.Classes.Ord Distribution.Types.VersionInterval.Legacy.LowerBound
instance GHC.Classes.Ord Distribution.Types.VersionInterval.Legacy.UpperBound
instance GHC.Internal.Show.Show Distribution.Types.VersionInterval.Legacy.Bound
instance GHC.Internal.Show.Show Distribution.Types.VersionInterval.Legacy.LowerBound
instance GHC.Internal.Show.Show Distribution.Types.VersionInterval.Legacy.UpperBound
instance GHC.Internal.Show.Show Distribution.Types.VersionInterval.Legacy.VersionIntervals


-- | This module implements a view of a <a>VersionRange</a> as a finite
--   list of separated version intervals.
--   
--   In conversion from and to <a>VersionRange</a> it makes some effort to
--   preserve the caret operator <tt>^&gt;=x.y</tt>. This constraint a
--   priori specifies the same interval as <tt>==x.y.*</tt>, but indicates
--   that newer versions could be acceptable (<tt>allow-newer: ^</tt>).
module Distribution.Types.VersionInterval

-- | A complementary representation of a <a>VersionRange</a>. Instead of a
--   boolean version predicate it uses an increasing sequence of
--   non-overlapping, non-empty intervals.
--   
--   The key point is that this representation gives a canonical
--   representation for the semantics of <a>VersionRange</a>s. This makes
--   it easier to check things like whether a version range is empty,
--   covers all versions, or requires a certain minimum or maximum version.
--   It also makes it easy to check equality or containment. It also makes
--   it easier to identify 'simple' version predicates for translation into
--   foreign packaging systems that do not support complex version range
--   expressions.
data VersionIntervals

-- | Inspect the list of version intervals.
unVersionIntervals :: VersionIntervals -> [VersionInterval]

-- | Directly construct a <a>VersionIntervals</a> from a list of intervals.
mkVersionIntervals :: [VersionInterval] -> Maybe VersionIntervals

-- | Convert a <a>VersionRange</a> to a sequence of version intervals.
toVersionIntervals :: VersionRange -> VersionIntervals

-- | Convert a <a>VersionIntervals</a> value back into a
--   <a>VersionRange</a> expression representing the version intervals.
fromVersionIntervals :: VersionIntervals -> VersionRange

-- | Since <tt>Cabal-3.6</tt> this function.. TODO
normaliseVersionRange2 :: VersionRange -> VersionRange
relaxLastInterval :: VersionIntervals -> VersionIntervals
relaxHeadInterval :: VersionIntervals -> VersionIntervals

-- | View a <a>VersionRange</a> as a union of intervals.
--   
--   This provides a canonical view of the semantics of a
--   <a>VersionRange</a> as opposed to the syntax of the expression used to
--   define it. For the syntactic view use <tt>foldVersionRange</tt>.
--   
--   Each interval is non-empty. The sequence is in increasing order and no
--   intervals overlap or touch. Therefore only the first and last can be
--   unbounded. The sequence can be empty if the range is empty (e.g. a
--   range expression like <tt><a>&amp;&amp;</a> 2</tt>).
--   
--   Other checks are trivial to implement using this view. For example:
--   
--   <pre>
--   isNoVersion vr | [] &lt;- asVersionIntervals vr = True
--                  | otherwise                   = False
--   </pre>
--   
--   <pre>
--   isSpecificVersion vr
--      | [(LowerBound v  InclusiveBound
--         ,UpperBound v' InclusiveBound)] &lt;- asVersionIntervals vr
--      , v == v'   = Just v
--      | otherwise = Nothing
--   </pre>
asVersionIntervals :: VersionRange -> [VersionInterval]
data VersionInterval
VersionInterval :: !LowerBound -> !UpperBound -> VersionInterval
data LowerBound
LowerBound :: !Version -> !Bound -> LowerBound
data UpperBound
NoUpperBound :: UpperBound
UpperBound :: !Version -> !Bound -> UpperBound
data Bound
ExclusiveBound :: Bound
InclusiveBound :: Bound

-- | <a>VersionIntervals</a> invariant:
--   
--   <ul>
--   <li>all intervals are valid (lower bound is less then upper bound,
--   i.e. non-empty)</li>
--   <li>intervals doesn't touch each other (distinct)</li>
--   </ul>
invariantVersionIntervals :: VersionIntervals -> Bool
instance GHC.Classes.Eq Distribution.Types.VersionInterval.Bound
instance GHC.Classes.Eq Distribution.Types.VersionInterval.LowerBound
instance GHC.Classes.Eq Distribution.Types.VersionInterval.UpperBound
instance GHC.Classes.Eq Distribution.Types.VersionInterval.VersionInterval
instance GHC.Classes.Eq Distribution.Types.VersionInterval.VersionIntervals
instance GHC.Internal.Show.Show Distribution.Types.VersionInterval.Bound
instance GHC.Internal.Show.Show Distribution.Types.VersionInterval.LowerBound
instance GHC.Internal.Show.Show Distribution.Types.VersionInterval.UpperBound
instance GHC.Internal.Show.Show Distribution.Types.VersionInterval.VersionInterval
instance GHC.Internal.Show.Show Distribution.Types.VersionInterval.VersionIntervals

module Distribution.Types.VersionRange
data VersionRange

-- | The version range <tt>-any</tt>. That is, a version range containing
--   all versions.
--   
--   <pre>
--   withinRange v anyVersion = True
--   </pre>
anyVersion :: VersionRange

-- | The empty version range <tt>-none</tt>, that is a version range
--   containing no versions.
--   
--   This can be constructed using any unsatisfiable version range
--   expression, for example <tt>&lt; 0</tt>.
--   
--   <pre>
--   withinRange v noVersion = False
--   </pre>
noVersion :: VersionRange

-- | The version range <tt>== v</tt>.
--   
--   <pre>
--   withinRange v' (thisVersion v) = v' == v
--   </pre>
thisVersion :: Version -> VersionRange

-- | The version range <tt>/= v</tt>.
--   
--   <pre>
--   withinRange v' (notThisVersion v) = v' /= v
--   </pre>
notThisVersion :: Version -> VersionRange

-- | The version range <tt>&gt; v</tt>.
--   
--   <pre>
--   withinRange v' (laterVersion v) = v' &gt; v
--   </pre>
laterVersion :: Version -> VersionRange

-- | The version range <tt>&lt; v</tt>.
--   
--   <pre>
--   withinRange v' (earlierVersion v) = v' &lt; v
--   </pre>
earlierVersion :: Version -> VersionRange

-- | The version range <tt>&gt;= v</tt>.
--   
--   <pre>
--   withinRange v' (orLaterVersion v) = v' &gt;= v
--   </pre>
orLaterVersion :: Version -> VersionRange

-- | The version range <tt>&lt;= v</tt>.
--   
--   <pre>
--   withinRange v' (orEarlierVersion v) = v' &lt;= v
--   </pre>
orEarlierVersion :: Version -> VersionRange

-- | The version range <tt>vr1 || vr2</tt>.
--   
--   <pre>
--     withinRange v' (unionVersionRanges vr1 vr2)
--   = withinRange v' vr1 || withinRange v' vr2
--   </pre>
unionVersionRanges :: VersionRange -> VersionRange -> VersionRange

-- | The version range <tt>vr1 &amp;&amp; vr2</tt>.
--   
--   <pre>
--     withinRange v' (intersectVersionRanges vr1 vr2)
--   = withinRange v' vr1 &amp;&amp; withinRange v' vr2
--   </pre>
intersectVersionRanges :: VersionRange -> VersionRange -> VersionRange

-- | The version range <tt>== v.*</tt>.
--   
--   For example, for version <tt>1.2</tt>, the version range <tt>==
--   1.2.*</tt> is the same as <tt>&gt;= 1.2 &amp;&amp; &lt; 1.3</tt>.
--   
--   <pre>
--   withinRange v' (withinVersion v) = v' &gt;= v &amp;&amp; v' &lt; upper v
--     where
--       upper (Version lower t) = Version (init lower ++ [last lower + 1]) t
--   </pre>
withinVersion :: Version -> VersionRange

-- | The version range <tt>^&gt;= v</tt>.
--   
--   For example, for version <tt>1.2.3.4</tt>, the version range
--   <tt>^&gt;= 1.2.3.4</tt> is the same as <tt>&gt;= 1.2.3.4 &amp;&amp;
--   &lt; 1.3</tt>.
--   
--   Note that <tt>^&gt;= 1</tt> is equivalent to <tt>&gt;= 1 &amp;&amp;
--   &lt; 1.1</tt>.
majorBoundVersion :: Version -> VersionRange

-- | Does this version fall within the given range?
--   
--   This is the evaluation function for the <a>VersionRange</a> type.
withinRange :: Version -> VersionRange -> Bool

-- | Fold over the basic syntactic structure of a <a>VersionRange</a>.
--   
--   This provides a syntactic view of the expression defining the version
--   range. The syntactic sugar <tt>"&gt;= v"</tt>, <tt>"&lt;= v"</tt> and
--   <tt>"== v.*"</tt> is presented in terms of the other basic syntax.
--   
--   For a semantic view use <a>asVersionIntervals</a>.
foldVersionRange :: a -> (Version -> a) -> (Version -> a) -> (Version -> a) -> (a -> a -> a) -> (a -> a -> a) -> VersionRange -> a

-- | Normalise <a>VersionRange</a>.
--   
--   In particular collapse <tt>(== v || &gt; v)</tt> into <tt>&gt;=
--   v</tt>, and so on.
normaliseVersionRange :: VersionRange -> VersionRange

-- | Remove <tt>VersionRangeParens</tt> constructors.
--   
--   Since version 3.4 this function is <a>id</a>, there aren't
--   <tt>VersionRangeParens</tt> constructor in <a>VersionRange</a>
--   anymore.
stripParensVersionRange :: VersionRange -> VersionRange

-- | Does the version range have an upper bound?
hasUpperBound :: VersionRange -> Bool

-- | Does the version range have an explicit lower bound?
--   
--   Note: this function only considers the user-specified lower bounds,
--   but not the implicit &gt;=0 lower bound.
hasLowerBound :: VersionRange -> Bool

-- | F-Algebra of <a>VersionRange</a>. See <a>cataVersionRange</a>.
data VersionRangeF a

-- | <tt>== version</tt>.
ThisVersionF :: Version -> VersionRangeF a

-- | <tt>&gt; version</tt>. NB: not <tt>&gt;=</tt>
LaterVersionF :: Version -> VersionRangeF a

-- | <tt>&gt;= version</tt>.
OrLaterVersionF :: Version -> VersionRangeF a

-- | <tt>&lt; version</tt>.
EarlierVersionF :: Version -> VersionRangeF a

-- | <tt>&lt;= version</tt>.
OrEarlierVersionF :: Version -> VersionRangeF a

-- | <tt>^&gt;= version</tt>, same as <tt>&gt;= version &amp;&amp; &lt;
--   MAJ(version)+1</tt>.
MajorBoundVersionF :: Version -> VersionRangeF a

-- | <tt>||</tt>.
UnionVersionRangesF :: a -> a -> VersionRangeF a

-- | <tt>&amp;&amp;</tt>.
IntersectVersionRangesF :: a -> a -> VersionRangeF a

-- | Fold <a>VersionRange</a>.
cataVersionRange :: (VersionRangeF a -> a) -> VersionRange -> a

-- | Unfold <a>VersionRange</a>.
anaVersionRange :: (a -> VersionRangeF a) -> a -> VersionRange

-- | Refold <a>VersionRange</a>.
hyloVersionRange :: (VersionRangeF VersionRange -> VersionRange) -> (VersionRange -> VersionRangeF VersionRange) -> VersionRange -> VersionRange

-- | Generic destructor for <a>VersionRange</a>.
projectVersionRange :: VersionRange -> VersionRangeF VersionRange

-- | Generic constructor for <a>VersionRange</a>.
embedVersionRange :: VersionRangeF VersionRange -> VersionRange

-- | Does this <a>VersionRange</a> place any restriction on the
--   <a>Version</a> or is it in fact equivalent to <tt>AnyVersion</tt>.
--   
--   Note this is a semantic check, not simply a syntactic check. So for
--   example the following is <tt>True</tt> (for all <tt>v</tt>).
--   
--   <pre>
--   isAnyVersion (EarlierVersion v `UnionVersionRanges` orLaterVersion v)
--   </pre>
isAnyVersion :: VersionRange -> Bool
isAnyVersionLight :: VersionRange -> Bool

-- | Increment the last version number.
--   
--   Example: For <tt>1.2</tt> this returns <tt>1.3</tt> so that it can be
--   used as upper bound when resolving <tt>== 1.2.*</tt>. For
--   <tt>0.4.1</tt> it returns <tt>0.4.2</tt>.
wildcardUpperBound :: Version -> Version

-- | Compute next greater major version to be used as upper bound.
--   
--   Example: <tt>0.4.1</tt> produces the version <tt>0.5</tt> which then
--   can be used to construct a range <tt>&gt;= 0.4.1 &amp;&amp; &lt;
--   0.5</tt>
majorUpperBound :: Version -> Version
isWildcardRange :: Version -> Version -> Bool

-- | <a>VersionRange</a> parser parametrised by version digit parser.
--   
--   <ul>
--   <li><a>versionDigitParser</a> is used for all
--   <a>VersionRange</a>.</li>
--   <li><a>integral</a> is used for backward-compat
--   <tt>pkgconfig-depends</tt> versions,
--   <tt>PkgConfigVersionRange</tt>.</li>
--   </ul>
versionRangeParser :: CabalParsing m => m Int -> CabalSpecVersion -> m VersionRange

module Distribution.Types.SourceRepo

-- | Information about the source revision control system for a package.
--   
--   When specifying a repo it is useful to know the meaning or intention
--   of the information as doing so enables automation. There are two
--   obvious common purposes: one is to find the repo for the latest
--   development version, the other is to find the repo for this specific
--   release. The <tt>ReopKind</tt> specifies which one we mean (or another
--   custom one).
--   
--   A package can specify one or the other kind or both. Most will specify
--   just a head repo but some may want to specify a repo to reconstruct
--   the sources for this package release.
--   
--   The required information is the <a>RepoType</a> which tells us if it's
--   using <a>Darcs</a>, <a>Git</a> for example. The <a>repoLocation</a>
--   and other details are interpreted according to the repo type.
data SourceRepo
SourceRepo :: RepoKind -> Maybe RepoType -> Maybe String -> Maybe String -> Maybe String -> Maybe String -> Maybe FilePath -> SourceRepo

-- | The kind of repo. This field is required.
[repoKind] :: SourceRepo -> RepoKind

-- | The type of the source repository system for this repo, eg
--   <a>Darcs</a> or <a>Git</a>. This field is required.
[repoType] :: SourceRepo -> Maybe RepoType

-- | The location of the repository. For most <a>RepoType</a>s this is a
--   URL. This field is required.
[repoLocation] :: SourceRepo -> Maybe String

-- | <a>CVS</a> can put multiple "modules" on one server and requires a
--   module name in addition to the location to identify a particular repo.
--   Logically this is part of the location but unfortunately has to be
--   specified separately. This field is required for the <a>CVS</a>
--   <a>RepoType</a> and should not be given otherwise.
[repoModule] :: SourceRepo -> Maybe String

-- | The name or identifier of the branch, if any. Many source control
--   systems have the notion of multiple branches in a repo that exist in
--   the same location. For example <a>Git</a> and <a>CVS</a> use this
--   while systems like <a>Darcs</a> use different locations for different
--   branches. This field is optional but should be used if necessary to
--   identify the sources, especially for the <a>RepoThis</a> repo kind.
[repoBranch] :: SourceRepo -> Maybe String

-- | The tag identify a particular state of the repository. This should be
--   given for the <a>RepoThis</a> repo kind and not for <a>RepoHead</a>
--   kind.
[repoTag] :: SourceRepo -> Maybe String

-- | Some repositories contain multiple projects in different
--   subdirectories This field specifies the subdirectory where this
--   packages sources can be found, eg the subdirectory containing the
--   <tt>.cabal</tt> file. It is interpreted relative to the root of the
--   repository. This field is optional. If not given the default is "." ie
--   no subdirectory.
[repoSubdir] :: SourceRepo -> Maybe FilePath

-- | What this repo info is for, what it represents.
data RepoKind

-- | The repository for the "head" or development version of the project.
--   This repo is where we should track the latest development activity or
--   the usual repo people should get to contribute patches.
RepoHead :: RepoKind

-- | The repository containing the sources for this exact package version
--   or release. For this kind of repo a tag should be given to give enough
--   information to re-create the exact sources.
RepoThis :: RepoKind
RepoKindUnknown :: String -> RepoKind
data RepoType
KnownRepoType :: KnownRepoType -> RepoType
OtherRepoType :: String -> RepoType

-- | An enumeration of common source control systems. The fields used in
--   the <a>SourceRepo</a> depend on the type of repo. The tools and
--   methods used to obtain and track the repo depend on the repo type.
data KnownRepoType
Darcs :: KnownRepoType
Git :: KnownRepoType
SVN :: KnownRepoType
CVS :: KnownRepoType
Mercurial :: KnownRepoType
GnuArch :: KnownRepoType
Bazaar :: KnownRepoType
Monotone :: KnownRepoType

Pijul :: KnownRepoType
knownRepoTypes :: [KnownRepoType]
emptySourceRepo :: RepoKind -> SourceRepo
classifyRepoType :: String -> RepoType
classifyRepoKind :: String -> RepoKind
instance Data.Binary.Class.Binary Distribution.Types.SourceRepo.KnownRepoType
instance Data.Binary.Class.Binary Distribution.Types.SourceRepo.RepoKind
instance Data.Binary.Class.Binary Distribution.Types.SourceRepo.RepoType
instance Data.Binary.Class.Binary Distribution.Types.SourceRepo.SourceRepo
instance GHC.Internal.Enum.Bounded Distribution.Types.SourceRepo.KnownRepoType
instance GHC.Internal.Data.Data.Data Distribution.Types.SourceRepo.KnownRepoType
instance GHC.Internal.Data.Data.Data Distribution.Types.SourceRepo.RepoKind
instance GHC.Internal.Data.Data.Data Distribution.Types.SourceRepo.RepoType
instance GHC.Internal.Data.Data.Data Distribution.Types.SourceRepo.SourceRepo
instance GHC.Internal.Enum.Enum Distribution.Types.SourceRepo.KnownRepoType
instance GHC.Classes.Eq Distribution.Types.SourceRepo.KnownRepoType
instance GHC.Classes.Eq Distribution.Types.SourceRepo.RepoKind
instance GHC.Classes.Eq Distribution.Types.SourceRepo.RepoType
instance GHC.Classes.Eq Distribution.Types.SourceRepo.SourceRepo
instance GHC.Internal.Generics.Generic Distribution.Types.SourceRepo.KnownRepoType
instance GHC.Internal.Generics.Generic Distribution.Types.SourceRepo.RepoKind
instance GHC.Internal.Generics.Generic Distribution.Types.SourceRepo.RepoType
instance GHC.Internal.Generics.Generic Distribution.Types.SourceRepo.SourceRepo
instance Control.DeepSeq.NFData Distribution.Types.SourceRepo.KnownRepoType
instance Control.DeepSeq.NFData Distribution.Types.SourceRepo.RepoKind
instance Control.DeepSeq.NFData Distribution.Types.SourceRepo.RepoType
instance Control.DeepSeq.NFData Distribution.Types.SourceRepo.SourceRepo
instance GHC.Classes.Ord Distribution.Types.SourceRepo.KnownRepoType
instance GHC.Classes.Ord Distribution.Types.SourceRepo.RepoKind
instance GHC.Classes.Ord Distribution.Types.SourceRepo.RepoType
instance GHC.Classes.Ord Distribution.Types.SourceRepo.SourceRepo
instance Distribution.Parsec.Parsec Distribution.Types.SourceRepo.KnownRepoType
instance Distribution.Parsec.Parsec Distribution.Types.SourceRepo.RepoKind
instance Distribution.Parsec.Parsec Distribution.Types.SourceRepo.RepoType
instance Distribution.Pretty.Pretty Distribution.Types.SourceRepo.KnownRepoType
instance Distribution.Pretty.Pretty Distribution.Types.SourceRepo.RepoKind
instance Distribution.Pretty.Pretty Distribution.Types.SourceRepo.RepoType
instance GHC.Internal.Read.Read Distribution.Types.SourceRepo.KnownRepoType
instance GHC.Internal.Read.Read Distribution.Types.SourceRepo.RepoKind
instance GHC.Internal.Read.Read Distribution.Types.SourceRepo.RepoType
instance GHC.Internal.Read.Read Distribution.Types.SourceRepo.SourceRepo
instance GHC.Internal.Show.Show Distribution.Types.SourceRepo.KnownRepoType
instance GHC.Internal.Show.Show Distribution.Types.SourceRepo.RepoKind
instance GHC.Internal.Show.Show Distribution.Types.SourceRepo.RepoType
instance GHC.Internal.Show.Show Distribution.Types.SourceRepo.SourceRepo
instance Distribution.Utils.Structured.Structured Distribution.Types.SourceRepo.KnownRepoType
instance Distribution.Utils.Structured.Structured Distribution.Types.SourceRepo.RepoKind
instance Distribution.Utils.Structured.Structured Distribution.Types.SourceRepo.RepoType
instance Distribution.Utils.Structured.Structured Distribution.Types.SourceRepo.SourceRepo

module Distribution.Types.SourceRepo.Lens

-- | Information about the source revision control system for a package.
--   
--   When specifying a repo it is useful to know the meaning or intention
--   of the information as doing so enables automation. There are two
--   obvious common purposes: one is to find the repo for the latest
--   development version, the other is to find the repo for this specific
--   release. The <tt>ReopKind</tt> specifies which one we mean (or another
--   custom one).
--   
--   A package can specify one or the other kind or both. Most will specify
--   just a head repo but some may want to specify a repo to reconstruct
--   the sources for this package release.
--   
--   The required information is the <a>RepoType</a> which tells us if it's
--   using <a>Darcs</a>, <a>Git</a> for example. The <a>repoLocation</a>
--   and other details are interpreted according to the repo type.
data SourceRepo
repoKind :: Lens' SourceRepo RepoKind
repoType :: Lens' SourceRepo (Maybe RepoType)
repoLocation :: Lens' SourceRepo (Maybe String)
repoModule :: Lens' SourceRepo (Maybe String)
repoBranch :: Lens' SourceRepo (Maybe String)
repoTag :: Lens' SourceRepo (Maybe String)
repoSubdir :: Lens' SourceRepo (Maybe FilePath)

module Distribution.Types.PkgconfigVersion

-- | <tt>pkg-config</tt> versions.
--   
--   In fact, this can be arbitrary <a>ByteString</a>, but <a>Parsec</a>
--   instance is a little pickier.
newtype PkgconfigVersion
PkgconfigVersion :: ByteString -> PkgconfigVersion

-- | Compare two version strings as <tt>pkg-config</tt> would compare them.
rpmvercmp :: ByteString -> ByteString -> Ordering
instance Data.Binary.Class.Binary Distribution.Types.PkgconfigVersion.PkgconfigVersion
instance GHC.Internal.Data.Data.Data Distribution.Types.PkgconfigVersion.PkgconfigVersion
instance GHC.Classes.Eq Distribution.Types.PkgconfigVersion.PkgconfigVersion
instance GHC.Internal.Generics.Generic Distribution.Types.PkgconfigVersion.PkgconfigVersion
instance Control.DeepSeq.NFData Distribution.Types.PkgconfigVersion.PkgconfigVersion
instance GHC.Classes.Ord Distribution.Types.PkgconfigVersion.PkgconfigVersion
instance Distribution.Parsec.Parsec Distribution.Types.PkgconfigVersion.PkgconfigVersion
instance Distribution.Pretty.Pretty Distribution.Types.PkgconfigVersion.PkgconfigVersion
instance GHC.Internal.Read.Read Distribution.Types.PkgconfigVersion.PkgconfigVersion
instance GHC.Internal.Show.Show Distribution.Types.PkgconfigVersion.PkgconfigVersion
instance Distribution.Utils.Structured.Structured Distribution.Types.PkgconfigVersion.PkgconfigVersion

module Distribution.Types.PkgconfigVersionRange

data PkgconfigVersionRange
PcAnyVersion :: PkgconfigVersionRange
PcThisVersion :: PkgconfigVersion -> PkgconfigVersionRange
PcLaterVersion :: PkgconfigVersion -> PkgconfigVersionRange
PcEarlierVersion :: PkgconfigVersion -> PkgconfigVersionRange
PcOrLaterVersion :: PkgconfigVersion -> PkgconfigVersionRange
PcOrEarlierVersion :: PkgconfigVersion -> PkgconfigVersionRange
PcUnionVersionRanges :: PkgconfigVersionRange -> PkgconfigVersionRange -> PkgconfigVersionRange
PcIntersectVersionRanges :: PkgconfigVersionRange -> PkgconfigVersionRange -> PkgconfigVersionRange
anyPkgconfigVersion :: PkgconfigVersionRange

-- | TODO: this is not precise, but used only to prettify output.
isAnyPkgconfigVersion :: PkgconfigVersionRange -> Bool
withinPkgconfigVersionRange :: PkgconfigVersion -> PkgconfigVersionRange -> Bool
versionToPkgconfigVersion :: Version -> PkgconfigVersion
versionRangeToPkgconfigVersionRange :: VersionRange -> PkgconfigVersionRange
instance Data.Binary.Class.Binary Distribution.Types.PkgconfigVersionRange.PkgconfigVersionRange
instance GHC.Internal.Data.Data.Data Distribution.Types.PkgconfigVersionRange.PkgconfigVersionRange
instance GHC.Classes.Eq Distribution.Types.PkgconfigVersionRange.PkgconfigVersionRange
instance GHC.Internal.Generics.Generic Distribution.Types.PkgconfigVersionRange.PkgconfigVersionRange
instance Control.DeepSeq.NFData Distribution.Types.PkgconfigVersionRange.PkgconfigVersionRange
instance GHC.Classes.Ord Distribution.Types.PkgconfigVersionRange.PkgconfigVersionRange
instance Distribution.Parsec.Parsec Distribution.Types.PkgconfigVersionRange.PkgconfigVersionRange
instance Distribution.Pretty.Pretty Distribution.Types.PkgconfigVersionRange.PkgconfigVersionRange
instance GHC.Internal.Read.Read Distribution.Types.PkgconfigVersionRange.PkgconfigVersionRange
instance GHC.Internal.Show.Show Distribution.Types.PkgconfigVersionRange.PkgconfigVersionRange
instance Distribution.Utils.Structured.Structured Distribution.Types.PkgconfigVersionRange.PkgconfigVersionRange

module Distribution.Types.PkgconfigName

-- | A pkg-config library name
--   
--   This is parsed as any valid argument to the pkg-config utility.
data PkgconfigName

-- | Convert <a>PkgconfigName</a> to <a>String</a>
unPkgconfigName :: PkgconfigName -> String

-- | Construct a <a>PkgconfigName</a> from a <a>String</a>
--   
--   <a>mkPkgconfigName</a> is the inverse to <a>unPkgconfigName</a>
--   
--   Note: No validations are performed to ensure that the resulting
--   <a>PkgconfigName</a> is valid
mkPkgconfigName :: String -> PkgconfigName
instance Data.Binary.Class.Binary Distribution.Types.PkgconfigName.PkgconfigName
instance GHC.Internal.Data.Data.Data Distribution.Types.PkgconfigName.PkgconfigName
instance GHC.Classes.Eq Distribution.Types.PkgconfigName.PkgconfigName
instance GHC.Internal.Generics.Generic Distribution.Types.PkgconfigName.PkgconfigName
instance GHC.Internal.Data.String.IsString Distribution.Types.PkgconfigName.PkgconfigName
instance Control.DeepSeq.NFData Distribution.Types.PkgconfigName.PkgconfigName
instance GHC.Classes.Ord Distribution.Types.PkgconfigName.PkgconfigName
instance Distribution.Parsec.Parsec Distribution.Types.PkgconfigName.PkgconfigName
instance Distribution.Pretty.Pretty Distribution.Types.PkgconfigName.PkgconfigName
instance GHC.Internal.Read.Read Distribution.Types.PkgconfigName.PkgconfigName
instance GHC.Internal.Show.Show Distribution.Types.PkgconfigName.PkgconfigName
instance Distribution.Utils.Structured.Structured Distribution.Types.PkgconfigName.PkgconfigName

module Distribution.Types.PkgconfigDependency

-- | Describes a dependency on a pkg-config library
data PkgconfigDependency
PkgconfigDependency :: PkgconfigName -> PkgconfigVersionRange -> PkgconfigDependency
instance Data.Binary.Class.Binary Distribution.Types.PkgconfigDependency.PkgconfigDependency
instance GHC.Internal.Data.Data.Data Distribution.Types.PkgconfigDependency.PkgconfigDependency
instance GHC.Classes.Eq Distribution.Types.PkgconfigDependency.PkgconfigDependency
instance GHC.Internal.Generics.Generic Distribution.Types.PkgconfigDependency.PkgconfigDependency
instance Control.DeepSeq.NFData Distribution.Types.PkgconfigDependency.PkgconfigDependency
instance GHC.Classes.Ord Distribution.Types.PkgconfigDependency.PkgconfigDependency
instance Distribution.Parsec.Parsec Distribution.Types.PkgconfigDependency.PkgconfigDependency
instance Distribution.Pretty.Pretty Distribution.Types.PkgconfigDependency.PkgconfigDependency
instance GHC.Internal.Read.Read Distribution.Types.PkgconfigDependency.PkgconfigDependency
instance GHC.Internal.Show.Show Distribution.Types.PkgconfigDependency.PkgconfigDependency
instance Distribution.Utils.Structured.Structured Distribution.Types.PkgconfigDependency.PkgconfigDependency

module Distribution.Types.PackageName

-- | A package name.
--   
--   Use <a>mkPackageName</a> and <a>unPackageName</a> to convert from/to a
--   <a>String</a>.
--   
--   This type is opaque since <tt>Cabal-2.0</tt>
data PackageName

-- | Convert <a>PackageName</a> to <a>String</a>
unPackageName :: PackageName -> String

-- | Construct a <a>PackageName</a> from a <a>String</a>
--   
--   <a>mkPackageName</a> is the inverse to <a>unPackageName</a>
--   
--   Note: No validations are performed to ensure that the resulting
--   <a>PackageName</a> is valid
mkPackageName :: String -> PackageName

unPackageNameST :: PackageName -> ShortText

-- | Construct a <a>PackageName</a> from a <a>ShortText</a>
--   
--   Note: No validations are performed to ensure that the resulting
--   <a>PackageName</a> is valid
mkPackageNameST :: ShortText -> PackageName
instance Data.Binary.Class.Binary Distribution.Types.PackageName.PackageName
instance GHC.Internal.Data.Data.Data Distribution.Types.PackageName.PackageName
instance GHC.Classes.Eq Distribution.Types.PackageName.PackageName
instance GHC.Internal.Generics.Generic Distribution.Types.PackageName.PackageName
instance GHC.Internal.Data.String.IsString Distribution.Types.PackageName.PackageName
instance Control.DeepSeq.NFData Distribution.Types.PackageName.PackageName
instance GHC.Classes.Ord Distribution.Types.PackageName.PackageName
instance Distribution.Parsec.Parsec Distribution.Types.PackageName.PackageName
instance Distribution.Pretty.Pretty Distribution.Types.PackageName.PackageName
instance GHC.Internal.Read.Read Distribution.Types.PackageName.PackageName
instance GHC.Internal.Show.Show Distribution.Types.PackageName.PackageName
instance Distribution.Utils.Structured.Structured Distribution.Types.PackageName.PackageName

module Distribution.Types.UnqualComponentName

-- | An unqualified component name, for any kind of component.
--   
--   This is distinguished from a <tt>ComponentName</tt> and
--   <tt>ComponentId</tt>. The former also states which of a library,
--   executable, etc the name refers too. The later uniquely identifiers a
--   component and its closure.
data UnqualComponentName

-- | Convert <a>UnqualComponentName</a> to <a>String</a>
unUnqualComponentName :: UnqualComponentName -> String

unUnqualComponentNameST :: UnqualComponentName -> ShortText

-- | Construct a <a>UnqualComponentName</a> from a <a>String</a>
--   
--   <a>mkUnqualComponentName</a> is the inverse to
--   <a>unUnqualComponentName</a>
--   
--   Note: No validations are performed to ensure that the resulting
--   <a>UnqualComponentName</a> is valid
mkUnqualComponentName :: String -> UnqualComponentName

-- | Converts a package name to an unqualified component name
--   
--   Useful in legacy situations where a package name may refer to an
--   internal component, if one is defined with that name.
--   
--   2018-12-21: These "legacy" situations are not legacy. We can
--   <tt>build-depends</tt> on the internal library. However Now dependency
--   contains <tt>Set LibraryName</tt>, and we should use that.
packageNameToUnqualComponentName :: PackageName -> UnqualComponentName

-- | Converts an unqualified component name to a package name
--   
--   <a>packageNameToUnqualComponentName</a> is the inverse of
--   <a>unqualComponentNameToPackageName</a>.
--   
--   Useful in legacy situations where a package name may refer to an
--   internal component, if one is defined with that name.
unqualComponentNameToPackageName :: UnqualComponentName -> PackageName

-- | Combine names in targets if one name is empty or both names are equal
--   (partial function). Useful in <a>Semigroup</a> and similar instances.
combineNames :: (Monoid b, Eq b, Show b) => a -> a -> (a -> b) -> String -> b
instance Data.Binary.Class.Binary Distribution.Types.UnqualComponentName.UnqualComponentName
instance GHC.Internal.Data.Data.Data Distribution.Types.UnqualComponentName.UnqualComponentName
instance GHC.Classes.Eq Distribution.Types.UnqualComponentName.UnqualComponentName
instance GHC.Internal.Generics.Generic Distribution.Types.UnqualComponentName.UnqualComponentName
instance GHC.Internal.Data.String.IsString Distribution.Types.UnqualComponentName.UnqualComponentName
instance GHC.Internal.Base.Monoid Distribution.Types.UnqualComponentName.UnqualComponentName
instance Control.DeepSeq.NFData Distribution.Types.UnqualComponentName.UnqualComponentName
instance GHC.Classes.Ord Distribution.Types.UnqualComponentName.UnqualComponentName
instance Distribution.Parsec.Parsec Distribution.Types.UnqualComponentName.UnqualComponentName
instance Distribution.Pretty.Pretty Distribution.Types.UnqualComponentName.UnqualComponentName
instance GHC.Internal.Read.Read Distribution.Types.UnqualComponentName.UnqualComponentName
instance GHC.Internal.Base.Semigroup Distribution.Types.UnqualComponentName.UnqualComponentName
instance GHC.Internal.Show.Show Distribution.Types.UnqualComponentName.UnqualComponentName
instance Distribution.Utils.Structured.Structured Distribution.Types.UnqualComponentName.UnqualComponentName

module Distribution.Types.LibraryVisibility

-- | Multi-lib visibility
data LibraryVisibility

-- | Can be used as a dependency for other packages
LibraryVisibilityPublic :: LibraryVisibility

-- | Internal library, default
LibraryVisibilityPrivate :: LibraryVisibility
instance Data.Binary.Class.Binary Distribution.Types.LibraryVisibility.LibraryVisibility
instance GHC.Internal.Data.Data.Data Distribution.Types.LibraryVisibility.LibraryVisibility
instance GHC.Classes.Eq Distribution.Types.LibraryVisibility.LibraryVisibility
instance GHC.Internal.Generics.Generic Distribution.Types.LibraryVisibility.LibraryVisibility
instance GHC.Internal.Base.Monoid Distribution.Types.LibraryVisibility.LibraryVisibility
instance Control.DeepSeq.NFData Distribution.Types.LibraryVisibility.LibraryVisibility
instance GHC.Classes.Ord Distribution.Types.LibraryVisibility.LibraryVisibility
instance Distribution.Parsec.Parsec Distribution.Types.LibraryVisibility.LibraryVisibility
instance Distribution.Pretty.Pretty Distribution.Types.LibraryVisibility.LibraryVisibility
instance GHC.Internal.Read.Read Distribution.Types.LibraryVisibility.LibraryVisibility
instance GHC.Internal.Base.Semigroup Distribution.Types.LibraryVisibility.LibraryVisibility
instance GHC.Internal.Show.Show Distribution.Types.LibraryVisibility.LibraryVisibility
instance Distribution.Utils.Structured.Structured Distribution.Types.LibraryVisibility.LibraryVisibility

module Distribution.Types.LibraryName
data LibraryName
LMainLibName :: LibraryName
LSubLibName :: UnqualComponentName -> LibraryName
defaultLibName :: LibraryName

-- | Convert the <a>UnqualComponentName</a> of a library into a
--   <a>LibraryName</a>.
maybeToLibraryName :: Maybe UnqualComponentName -> LibraryName
showLibraryName :: LibraryName -> String
libraryNameStanza :: LibraryName -> String
libraryNameString :: LibraryName -> Maybe UnqualComponentName

-- | Pretty print <a>LibraryName</a> in build-target-ish syntax.
--   
--   <i>Note:</i> there are no <a>Pretty</a> or <a>Parsec</a> instances, as
--   there's other way to represent <a>LibraryName</a>, namely as bare
--   <a>UnqualComponentName</a>.
prettyLibraryNameComponent :: LibraryName -> Doc
parsecLibraryNameComponent :: CabalParsing m => m LibraryName
instance Data.Binary.Class.Binary Distribution.Types.LibraryName.LibraryName
instance GHC.Internal.Data.Data.Data Distribution.Types.LibraryName.LibraryName
instance GHC.Classes.Eq Distribution.Types.LibraryName.LibraryName
instance GHC.Internal.Generics.Generic Distribution.Types.LibraryName.LibraryName
instance Control.DeepSeq.NFData Distribution.Types.LibraryName.LibraryName
instance GHC.Classes.Ord Distribution.Types.LibraryName.LibraryName
instance GHC.Internal.Read.Read Distribution.Types.LibraryName.LibraryName
instance GHC.Internal.Show.Show Distribution.Types.LibraryName.LibraryName
instance Distribution.Utils.Structured.Structured Distribution.Types.LibraryName.LibraryName

module Distribution.Types.MungedPackageName

-- | A combination of a package and component name used in various legacy
--   interfaces, chiefly bundled with a version as
--   <tt>MungedPackageId</tt>. It's generally better to use a
--   <tt>UnitId</tt> to opaquely refer to some compilation/packing unit,
--   but that doesn't always work, e.g. where a "name" is needed, in which
--   case this can be used as a fallback.
--   
--   Use <tt>mkMungedPackageName</tt> and <tt>unMungedPackageName</tt> to
--   convert from/to a <a>String</a>.
--   
--   In <tt>3.0.0.0</tt> representation was changed from opaque (string) to
--   semantic representation.
data MungedPackageName
MungedPackageName :: !PackageName -> !LibraryName -> MungedPackageName

-- | Intended for internal use only
--   
--   <pre>
--   &gt;&gt;&gt; decodeCompatPackageName "z-servant-z-lackey"
--   MungedPackageName (PackageName "servant") (LSubLibName (UnqualComponentName "lackey"))
--   </pre>
decodeCompatPackageName :: PackageName -> MungedPackageName

-- | Intended for internal use only
--   
--   <pre>
--   &gt;&gt;&gt; encodeCompatPackageName $ MungedPackageName "servant" (LSubLibName "lackey")
--   PackageName "z-servant-z-lackey"
--   </pre>
--   
--   This is used in <tt>cabal-install</tt> in the Solver. May become
--   obsolete as solver moves to per-component solving.
encodeCompatPackageName :: MungedPackageName -> PackageName
instance Data.Binary.Class.Binary Distribution.Types.MungedPackageName.MungedPackageName
instance GHC.Internal.Data.Data.Data Distribution.Types.MungedPackageName.MungedPackageName
instance GHC.Classes.Eq Distribution.Types.MungedPackageName.MungedPackageName
instance GHC.Internal.Generics.Generic Distribution.Types.MungedPackageName.MungedPackageName
instance Control.DeepSeq.NFData Distribution.Types.MungedPackageName.MungedPackageName
instance GHC.Classes.Ord Distribution.Types.MungedPackageName.MungedPackageName
instance Distribution.Parsec.Parsec Distribution.Types.MungedPackageName.MungedPackageName
instance Distribution.Pretty.Pretty Distribution.Types.MungedPackageName.MungedPackageName
instance GHC.Internal.Read.Read Distribution.Types.MungedPackageName.MungedPackageName
instance GHC.Internal.Show.Show Distribution.Types.MungedPackageName.MungedPackageName
instance Distribution.Utils.Structured.Structured Distribution.Types.MungedPackageName.MungedPackageName

module Distribution.Types.ForeignLibType

-- | What kind of foreign library is to be built?
data ForeignLibType

-- | A native shared library (<tt>.so</tt> on Linux, <tt>.dylib</tt> on
--   OSX, or <tt>.dll</tt> on Windows).
ForeignLibNativeShared :: ForeignLibType

-- | A native static library (not currently supported.)
ForeignLibNativeStatic :: ForeignLibType
ForeignLibTypeUnknown :: ForeignLibType
knownForeignLibTypes :: [ForeignLibType]
foreignLibTypeIsShared :: ForeignLibType -> Bool
instance Data.Binary.Class.Binary Distribution.Types.ForeignLibType.ForeignLibType
instance GHC.Internal.Data.Data.Data Distribution.Types.ForeignLibType.ForeignLibType
instance GHC.Classes.Eq Distribution.Types.ForeignLibType.ForeignLibType
instance GHC.Internal.Generics.Generic Distribution.Types.ForeignLibType.ForeignLibType
instance GHC.Internal.Base.Monoid Distribution.Types.ForeignLibType.ForeignLibType
instance Control.DeepSeq.NFData Distribution.Types.ForeignLibType.ForeignLibType
instance GHC.Classes.Ord Distribution.Types.ForeignLibType.ForeignLibType
instance Distribution.Parsec.Parsec Distribution.Types.ForeignLibType.ForeignLibType
instance Distribution.Pretty.Pretty Distribution.Types.ForeignLibType.ForeignLibType
instance GHC.Internal.Read.Read Distribution.Types.ForeignLibType.ForeignLibType
instance GHC.Internal.Base.Semigroup Distribution.Types.ForeignLibType.ForeignLibType
instance GHC.Internal.Show.Show Distribution.Types.ForeignLibType.ForeignLibType
instance Distribution.Utils.Structured.Structured Distribution.Types.ForeignLibType.ForeignLibType

module Distribution.Types.ForeignLibOption
data ForeignLibOption

-- | Merge in all dependent libraries (i.e., use <tt>ghc -shared
--   -static</tt> rather than just record the dependencies, ala <tt>ghc
--   -shared -dynamic</tt>). This option is compulsory on Windows and
--   unsupported on other platforms.
ForeignLibStandalone :: ForeignLibOption
instance Data.Binary.Class.Binary Distribution.Types.ForeignLibOption.ForeignLibOption
instance GHC.Internal.Data.Data.Data Distribution.Types.ForeignLibOption.ForeignLibOption
instance GHC.Classes.Eq Distribution.Types.ForeignLibOption.ForeignLibOption
instance GHC.Internal.Generics.Generic Distribution.Types.ForeignLibOption.ForeignLibOption
instance Control.DeepSeq.NFData Distribution.Types.ForeignLibOption.ForeignLibOption
instance GHC.Classes.Ord Distribution.Types.ForeignLibOption.ForeignLibOption
instance Distribution.Parsec.Parsec Distribution.Types.ForeignLibOption.ForeignLibOption
instance Distribution.Pretty.Pretty Distribution.Types.ForeignLibOption.ForeignLibOption
instance GHC.Internal.Read.Read Distribution.Types.ForeignLibOption.ForeignLibOption
instance GHC.Internal.Show.Show Distribution.Types.ForeignLibOption.ForeignLibOption
instance Distribution.Utils.Structured.Structured Distribution.Types.ForeignLibOption.ForeignLibOption

module Distribution.Types.Flag

-- | A flag can represent a feature to be included, or a way of linking a
--   target against its dependencies, or in fact whatever you can think of.
data PackageFlag
MkPackageFlag :: FlagName -> String -> Bool -> Bool -> PackageFlag
[flagName] :: PackageFlag -> FlagName
[flagDescription] :: PackageFlag -> String
[flagDefault] :: PackageFlag -> Bool
[flagManual] :: PackageFlag -> Bool

-- | A <a>PackageFlag</a> initialized with default parameters.
emptyFlag :: FlagName -> PackageFlag

-- | A <a>FlagName</a> is the name of a user-defined configuration flag
--   
--   Use <a>mkFlagName</a> and <a>unFlagName</a> to convert from/to a
--   <a>String</a>.
--   
--   This type is opaque since <tt>Cabal-2.0</tt>
data FlagName

-- | Construct a <a>FlagName</a> from a <a>String</a>
--   
--   <a>mkFlagName</a> is the inverse to <a>unFlagName</a>
--   
--   Note: No validations are performed to ensure that the resulting
--   <a>FlagName</a> is valid
mkFlagName :: String -> FlagName

-- | Convert <a>FlagName</a> to <a>String</a>
unFlagName :: FlagName -> String

-- | A <a>FlagAssignment</a> is a total or partial mapping of
--   <a>FlagName</a>s to <a>Bool</a> flag values. It represents the flags
--   chosen by the user or discovered during configuration. For example
--   <tt>--flags=foo --flags=-bar</tt> becomes <tt>[("foo", True), ("bar",
--   False)]</tt>
--   
--   TODO: Why we record the multiplicity of the flag?
data FlagAssignment

-- | Construct a <a>FlagAssignment</a> from a list of flag/value pairs.
--   
--   If duplicate flags occur in the input list, the later entries in the
--   list will take precedence.
mkFlagAssignment :: [(FlagName, Bool)] -> FlagAssignment

-- | Deconstruct a <a>FlagAssignment</a> into a list of flag/value pairs.
--   
--   <pre>
--   <a>null</a> (<a>findDuplicateFlagAssignments</a> fa) ==&gt; (<a>mkFlagAssignment</a> . <a>unFlagAssignment</a>) fa == fa
--   </pre>
unFlagAssignment :: FlagAssignment -> [(FlagName, Bool)]

-- | Lookup the value for a flag
--   
--   Returns <a>Nothing</a> if the flag isn't contained in the
--   <a>FlagAssignment</a>.
lookupFlagAssignment :: FlagName -> FlagAssignment -> Maybe Bool

-- | Insert or update the boolean value of a flag.
--   
--   If the flag is already present in the <a>FlagAssignment</a>, the value
--   will be updated and the fact that multiple values have been provided
--   for that flag will be recorded so that a warning can be generated
--   later on.
insertFlagAssignment :: FlagName -> Bool -> FlagAssignment -> FlagAssignment

-- | Remove all flag-assignments from the first <a>FlagAssignment</a> that
--   are contained in the second <a>FlagAssignment</a>
--   
--   NB/TODO: This currently only removes flag assignments which also match
--   the value assignment! We should review the code which uses this
--   operation to figure out if this it's not enough to only compare the
--   flagnames without the values.
diffFlagAssignment :: FlagAssignment -> FlagAssignment -> FlagAssignment

-- | Find the <a>FlagName</a>s that have been listed more than once.
findDuplicateFlagAssignments :: FlagAssignment -> [FlagName]

-- | Test whether <a>FlagAssignment</a> is empty.
nullFlagAssignment :: FlagAssignment -> Bool

-- | String representation of a flag-value pair.
showFlagValue :: (FlagName, Bool) -> String

-- | Pretty-prints a flag assignment.
dispFlagAssignment :: FlagAssignment -> Doc

-- | Show flag assignment.
showFlagAssignment :: FlagAssignment -> String

-- | Parses a flag assignment.
parsecFlagAssignment :: CabalParsing m => m FlagAssignment

-- | Parse a non-empty flag assignment
--   
--   The flags have to explicitly start with minus or plus.
parsecFlagAssignmentNonEmpty :: CabalParsing m => m FlagAssignment

-- | We need this as far as we support custom setups older than 2.2.0.0
legacyShowFlagAssignment :: FlagAssignment -> String

legacyShowFlagAssignment' :: FlagAssignment -> [String]

-- | We need this as far as we support custom setups older than 2.2.0.0
legacyParsecFlagAssignment :: CabalParsing m => m FlagAssignment
instance Data.Binary.Class.Binary Distribution.Types.Flag.FlagAssignment
instance Data.Binary.Class.Binary Distribution.Types.Flag.FlagName
instance Data.Binary.Class.Binary Distribution.Types.Flag.PackageFlag
instance GHC.Internal.Data.Data.Data Distribution.Types.Flag.FlagName
instance GHC.Internal.Data.Data.Data Distribution.Types.Flag.PackageFlag
instance GHC.Classes.Eq Distribution.Types.Flag.FlagAssignment
instance GHC.Classes.Eq Distribution.Types.Flag.FlagName
instance GHC.Classes.Eq Distribution.Types.Flag.PackageFlag
instance GHC.Internal.Generics.Generic Distribution.Types.Flag.FlagAssignment
instance GHC.Internal.Generics.Generic Distribution.Types.Flag.FlagName
instance GHC.Internal.Generics.Generic Distribution.Types.Flag.PackageFlag
instance GHC.Internal.Data.String.IsString Distribution.Types.Flag.FlagName
instance GHC.Internal.Base.Monoid Distribution.Types.Flag.FlagAssignment
instance Control.DeepSeq.NFData Distribution.Types.Flag.FlagAssignment
instance Control.DeepSeq.NFData Distribution.Types.Flag.FlagName
instance Control.DeepSeq.NFData Distribution.Types.Flag.PackageFlag
instance GHC.Classes.Ord Distribution.Types.Flag.FlagAssignment
instance GHC.Classes.Ord Distribution.Types.Flag.FlagName
instance Distribution.Parsec.Parsec Distribution.Types.Flag.FlagAssignment
instance Distribution.Parsec.Parsec Distribution.Types.Flag.FlagName
instance Distribution.Pretty.Pretty Distribution.Types.Flag.FlagAssignment
instance Distribution.Pretty.Pretty Distribution.Types.Flag.FlagName
instance GHC.Internal.Read.Read Distribution.Types.Flag.FlagAssignment
instance GHC.Internal.Read.Read Distribution.Types.Flag.FlagName
instance GHC.Internal.Base.Semigroup Distribution.Types.Flag.FlagAssignment
instance GHC.Internal.Show.Show Distribution.Types.Flag.FlagAssignment
instance GHC.Internal.Show.Show Distribution.Types.Flag.FlagName
instance GHC.Internal.Show.Show Distribution.Types.Flag.PackageFlag
instance Distribution.Utils.Structured.Structured Distribution.Types.Flag.FlagAssignment
instance Distribution.Utils.Structured.Structured Distribution.Types.Flag.FlagName
instance Distribution.Utils.Structured.Structured Distribution.Types.Flag.PackageFlag

module Distribution.Types.ExecutableScope
data ExecutableScope
ExecutablePublic :: ExecutableScope
ExecutablePrivate :: ExecutableScope
instance Data.Binary.Class.Binary Distribution.Types.ExecutableScope.ExecutableScope
instance GHC.Internal.Data.Data.Data Distribution.Types.ExecutableScope.ExecutableScope
instance GHC.Classes.Eq Distribution.Types.ExecutableScope.ExecutableScope
instance GHC.Internal.Generics.Generic Distribution.Types.ExecutableScope.ExecutableScope
instance GHC.Internal.Base.Monoid Distribution.Types.ExecutableScope.ExecutableScope
instance Control.DeepSeq.NFData Distribution.Types.ExecutableScope.ExecutableScope
instance GHC.Classes.Ord Distribution.Types.ExecutableScope.ExecutableScope
instance Distribution.Parsec.Parsec Distribution.Types.ExecutableScope.ExecutableScope
instance Distribution.Pretty.Pretty Distribution.Types.ExecutableScope.ExecutableScope
instance GHC.Internal.Read.Read Distribution.Types.ExecutableScope.ExecutableScope
instance GHC.Internal.Base.Semigroup Distribution.Types.ExecutableScope.ExecutableScope
instance GHC.Internal.Show.Show Distribution.Types.ExecutableScope.ExecutableScope
instance Distribution.Utils.Structured.Structured Distribution.Types.ExecutableScope.ExecutableScope

module Distribution.Types.ComponentName
data ComponentName
CLibName :: LibraryName -> ComponentName
CNotLibName :: NotLibComponentName -> ComponentName
pattern CFLibName :: UnqualComponentName -> ComponentName
pattern CExeName :: UnqualComponentName -> ComponentName
pattern CTestName :: UnqualComponentName -> ComponentName
pattern CBenchName :: UnqualComponentName -> ComponentName
showComponentName :: ComponentName -> String
componentNameRaw :: ComponentName -> String
componentNameStanza :: ComponentName -> String

-- | This gets the underlying unqualified component name. In fact, it is
--   guaranteed to uniquely identify a component, returning
--   <tt>Nothing</tt> if the <a>ComponentName</a> was for the public
--   library.
componentNameString :: ComponentName -> Maybe UnqualComponentName
instance Data.Binary.Class.Binary Distribution.Types.ComponentName.ComponentName
instance Data.Binary.Class.Binary Distribution.Types.ComponentName.NotLibComponentName
instance GHC.Classes.Eq Distribution.Types.ComponentName.ComponentName
instance GHC.Classes.Eq Distribution.Types.ComponentName.NotLibComponentName
instance GHC.Internal.Generics.Generic Distribution.Types.ComponentName.ComponentName
instance GHC.Internal.Generics.Generic Distribution.Types.ComponentName.NotLibComponentName
instance GHC.Classes.Ord Distribution.Types.ComponentName.ComponentName
instance GHC.Classes.Ord Distribution.Types.ComponentName.NotLibComponentName
instance Distribution.Parsec.Parsec Distribution.Types.ComponentName.ComponentName
instance Distribution.Pretty.Pretty Distribution.Types.ComponentName.ComponentName
instance GHC.Internal.Read.Read Distribution.Types.ComponentName.ComponentName
instance GHC.Internal.Read.Read Distribution.Types.ComponentName.NotLibComponentName
instance GHC.Internal.Show.Show Distribution.Types.ComponentName.ComponentName
instance GHC.Internal.Show.Show Distribution.Types.ComponentName.NotLibComponentName
instance Distribution.Utils.Structured.Structured Distribution.Types.ComponentName.ComponentName
instance Distribution.Utils.Structured.Structured Distribution.Types.ComponentName.NotLibComponentName

module Distribution.Types.ComponentId

-- | A <a>ComponentId</a> uniquely identifies the transitive source code
--   closure of a component (i.e. libraries, executables).
--   
--   For non-Backpack components, this corresponds one to one with the
--   <tt>UnitId</tt>, which serves as the basis for install paths, linker
--   symbols, etc.
--   
--   Use <a>mkComponentId</a> and <a>unComponentId</a> to convert from/to a
--   <a>String</a>.
--   
--   This type is opaque since <tt>Cabal-2.0</tt>
data ComponentId

-- | Convert <a>ComponentId</a> to <a>String</a>
unComponentId :: ComponentId -> String

-- | Construct a <a>ComponentId</a> from a <a>String</a>
--   
--   <a>mkComponentId</a> is the inverse to <a>unComponentId</a>
--   
--   Note: No validations are performed to ensure that the resulting
--   <a>ComponentId</a> is valid
mkComponentId :: String -> ComponentId
instance Data.Binary.Class.Binary Distribution.Types.ComponentId.ComponentId
instance GHC.Internal.Data.Data.Data Distribution.Types.ComponentId.ComponentId
instance GHC.Classes.Eq Distribution.Types.ComponentId.ComponentId
instance GHC.Internal.Generics.Generic Distribution.Types.ComponentId.ComponentId
instance GHC.Internal.Data.String.IsString Distribution.Types.ComponentId.ComponentId
instance Control.DeepSeq.NFData Distribution.Types.ComponentId.ComponentId
instance GHC.Classes.Ord Distribution.Types.ComponentId.ComponentId
instance Distribution.Parsec.Parsec Distribution.Types.ComponentId.ComponentId
instance Distribution.Pretty.Pretty Distribution.Types.ComponentId.ComponentId
instance GHC.Internal.Read.Read Distribution.Types.ComponentId.ComponentId
instance GHC.Internal.Show.Show Distribution.Types.ComponentId.ComponentId
instance Distribution.Utils.Structured.Structured Distribution.Types.ComponentId.ComponentId

module Distribution.Types.BuildType

-- | The type of build system used by this package.
data BuildType

-- | calls <tt>Distribution.Simple.defaultMain</tt>
Simple :: BuildType

-- | calls <tt>Distribution.Simple.defaultMainWithHooks
--   defaultUserHooks</tt>, which invokes <tt>configure</tt> to generate
--   additional build information used by later phases.
Configure :: BuildType

-- | calls <tt>Distribution.Make.defaultMain</tt>
Make :: BuildType

-- | uses user-supplied <tt>Setup.hs</tt> or <tt>Setup.lhs</tt> (default)
Custom :: BuildType
knownBuildTypes :: [BuildType]
instance Data.Binary.Class.Binary Distribution.Types.BuildType.BuildType
instance GHC.Internal.Data.Data.Data Distribution.Types.BuildType.BuildType
instance GHC.Classes.Eq Distribution.Types.BuildType.BuildType
instance GHC.Internal.Generics.Generic Distribution.Types.BuildType.BuildType
instance Control.DeepSeq.NFData Distribution.Types.BuildType.BuildType
instance GHC.Classes.Ord Distribution.Types.BuildType.BuildType
instance Distribution.Parsec.Parsec Distribution.Types.BuildType.BuildType
instance Distribution.Pretty.Pretty Distribution.Types.BuildType.BuildType
instance GHC.Internal.Read.Read Distribution.Types.BuildType.BuildType
instance GHC.Internal.Show.Show Distribution.Types.BuildType.BuildType
instance Distribution.Utils.Structured.Structured Distribution.Types.BuildType.BuildType

module Distribution.Types.AbiHash

-- | ABI Hashes
--   
--   Use <a>mkAbiHash</a> and <a>unAbiHash</a> to convert from/to a
--   <a>String</a>.
--   
--   This type is opaque since <tt>Cabal-2.0</tt>
data AbiHash

-- | Convert <a>AbiHash</a> to <a>String</a>
unAbiHash :: AbiHash -> String

-- | Construct a <a>AbiHash</a> from a <a>String</a>
--   
--   <a>mkAbiHash</a> is the inverse to <a>unAbiHash</a>
--   
--   Note: No validations are performed to ensure that the resulting
--   <a>AbiHash</a> is valid
mkAbiHash :: String -> AbiHash
instance Data.Binary.Class.Binary Distribution.Types.AbiHash.AbiHash
instance GHC.Classes.Eq Distribution.Types.AbiHash.AbiHash
instance GHC.Internal.Generics.Generic Distribution.Types.AbiHash.AbiHash
instance GHC.Internal.Data.String.IsString Distribution.Types.AbiHash.AbiHash
instance Control.DeepSeq.NFData Distribution.Types.AbiHash.AbiHash
instance Distribution.Parsec.Parsec Distribution.Types.AbiHash.AbiHash
instance Distribution.Pretty.Pretty Distribution.Types.AbiHash.AbiHash
instance GHC.Internal.Read.Read Distribution.Types.AbiHash.AbiHash
instance GHC.Internal.Show.Show Distribution.Types.AbiHash.AbiHash
instance Distribution.Utils.Structured.Structured Distribution.Types.AbiHash.AbiHash

module Distribution.Text
display :: Pretty a => a -> String
simpleParse :: Parsec a => String -> Maybe a


-- | Cabal often needs to do slightly different things on specific
--   platforms. You probably know about the <a>os</a> however using that is
--   very inconvenient because it is a string and different Haskell
--   implementations do not agree on using the same strings for the same
--   platforms! (In particular see the controversy over "windows" vs
--   "mingw32"). So to make it more consistent and easy to use we have an
--   <a>OS</a> enumeration.
module Distribution.System

-- | These are the known OS names: Linux, Windows, OSX ,FreeBSD, OpenBSD,
--   NetBSD, DragonFly ,Solaris, AIX, HPUX, IRIX ,HaLVM ,Hurd ,IOS,
--   Android, Ghcjs, Wasi
--   
--   The following aliases can also be used:, * Windows aliases: mingw32,
--   win32, cygwin32 * OSX alias: darwin * Hurd alias: gnu * FreeBSD alias:
--   kfreebsdgnu * Solaris alias: solaris2
data OS
Linux :: OS
Windows :: OS
OSX :: OS
FreeBSD :: OS
OpenBSD :: OS
NetBSD :: OS
DragonFly :: OS
Solaris :: OS
AIX :: OS
HPUX :: OS
IRIX :: OS
HaLVM :: OS
Hurd :: OS
IOS :: OS
Android :: OS
Ghcjs :: OS
Wasi :: OS
Haiku :: OS
OtherOS :: String -> OS
buildOS :: OS

-- | These are the known Arches: I386, X86_64, PPC, PPC64, PPC64LE, Sparc,
--   Sparc64, Arm, AArch64, Mips, SH, IA64, S390, S390X, Alpha, Hppa,
--   Rs6000, M68k, Vax, RISCV64, LoongArch64, JavaScript and Wasm32.
--   
--   The following aliases can also be used: * PPC alias: powerpc * PPC64
--   alias : powerpc64 * PPC64LE alias : powerpc64le * Mips aliases:
--   mipsel, mipseb * Arm aliases: armeb, armel * AArch64 aliases: arm64
data Arch
I386 :: Arch
X86_64 :: Arch
PPC :: Arch
PPC64 :: Arch
PPC64LE :: Arch
Sparc :: Arch
Sparc64 :: Arch
Arm :: Arch
AArch64 :: Arch
Mips :: Arch
SH :: Arch
IA64 :: Arch
S390 :: Arch
S390X :: Arch
Alpha :: Arch
Hppa :: Arch
Rs6000 :: Arch
M68k :: Arch
Vax :: Arch
RISCV64 :: Arch
LoongArch64 :: Arch
JavaScript :: Arch
Wasm32 :: Arch
OtherArch :: String -> Arch
buildArch :: Arch
data Platform
Platform :: Arch -> OS -> Platform

-- | The platform Cabal was compiled on. In most cases,
--   <tt>LocalBuildInfo.hostPlatform</tt> should be used instead (the
--   platform we're targeting).
buildPlatform :: Platform
platformFromTriple :: String -> Maybe Platform
knownOSs :: [OS]
knownArches :: [Arch]

-- | How strict to be when classifying strings into the <a>OS</a> and
--   <a>Arch</a> enums.
--   
--   The reason we have multiple ways to do the classification is because
--   there are two situations where we need to do it.
--   
--   For parsing OS and arch names in .cabal files we really want everyone
--   to be referring to the same or arch by the same name. Variety is not a
--   virtue in this case. We don't mind about case though.
--   
--   For the System.Info.os/arch different Haskell implementations use
--   different names for the same or/arch. Also they tend to distinguish
--   versions of an OS/arch which we just don't care about.
--   
--   The <a>Compat</a> classification allows us to recognise aliases that
--   are already in common use but it allows us to distinguish them from
--   the canonical name which enables us to warn about such deprecated
--   aliases.
data ClassificationStrictness
Permissive :: ClassificationStrictness
Compat :: ClassificationStrictness
Strict :: ClassificationStrictness
classifyOS :: ClassificationStrictness -> String -> OS
classifyArch :: ClassificationStrictness -> String -> Arch
instance Data.Binary.Class.Binary Distribution.System.Arch
instance Data.Binary.Class.Binary Distribution.System.OS
instance Data.Binary.Class.Binary Distribution.System.Platform
instance GHC.Internal.Data.Data.Data Distribution.System.Arch
instance GHC.Internal.Data.Data.Data Distribution.System.OS
instance GHC.Internal.Data.Data.Data Distribution.System.Platform
instance GHC.Classes.Eq Distribution.System.Arch
instance GHC.Classes.Eq Distribution.System.OS
instance GHC.Classes.Eq Distribution.System.Platform
instance GHC.Internal.Generics.Generic Distribution.System.Arch
instance GHC.Internal.Generics.Generic Distribution.System.OS
instance GHC.Internal.Generics.Generic Distribution.System.Platform
instance Control.DeepSeq.NFData Distribution.System.Arch
instance Control.DeepSeq.NFData Distribution.System.OS
instance Control.DeepSeq.NFData Distribution.System.Platform
instance GHC.Classes.Ord Distribution.System.Arch
instance GHC.Classes.Ord Distribution.System.OS
instance GHC.Classes.Ord Distribution.System.Platform
instance Distribution.Parsec.Parsec Distribution.System.Arch
instance Distribution.Parsec.Parsec Distribution.System.OS
instance Distribution.Parsec.Parsec Distribution.System.Platform
instance Distribution.Pretty.Pretty Distribution.System.Arch
instance Distribution.Pretty.Pretty Distribution.System.OS
instance Distribution.Pretty.Pretty Distribution.System.Platform
instance GHC.Internal.Read.Read Distribution.System.Arch
instance GHC.Internal.Read.Read Distribution.System.OS
instance GHC.Internal.Read.Read Distribution.System.Platform
instance GHC.Internal.Show.Show Distribution.System.Arch
instance GHC.Internal.Show.Show Distribution.System.OS
instance GHC.Internal.Show.Show Distribution.System.Platform
instance Distribution.Utils.Structured.Structured Distribution.System.Arch
instance Distribution.Utils.Structured.Structured Distribution.System.OS
instance Distribution.Utils.Structured.Structured Distribution.System.Platform

module Distribution.SPDX.LicenseReference

-- | A user defined license reference denoted by
--   <tt>LicenseRef-[idstring]</tt> (for a license not on the SPDX License
--   List);
data LicenseRef

-- | License reference.
licenseRef :: LicenseRef -> String

-- | Document reference.
licenseDocumentRef :: LicenseRef -> Maybe String

-- | Create <a>LicenseRef</a> from optional document ref and name.
mkLicenseRef :: Maybe String -> String -> Maybe LicenseRef

-- | Like <a>mkLicenseRef</a> but convert invalid characters into
--   <tt>-</tt>.
mkLicenseRef' :: Maybe String -> String -> LicenseRef
instance Data.Binary.Class.Binary Distribution.SPDX.LicenseReference.LicenseRef
instance GHC.Internal.Data.Data.Data Distribution.SPDX.LicenseReference.LicenseRef
instance GHC.Classes.Eq Distribution.SPDX.LicenseReference.LicenseRef
instance GHC.Internal.Generics.Generic Distribution.SPDX.LicenseReference.LicenseRef
instance Control.DeepSeq.NFData Distribution.SPDX.LicenseReference.LicenseRef
instance GHC.Classes.Ord Distribution.SPDX.LicenseReference.LicenseRef
instance Distribution.Parsec.Parsec Distribution.SPDX.LicenseReference.LicenseRef
instance Distribution.Pretty.Pretty Distribution.SPDX.LicenseReference.LicenseRef
instance GHC.Internal.Read.Read Distribution.SPDX.LicenseReference.LicenseRef
instance GHC.Internal.Show.Show Distribution.SPDX.LicenseReference.LicenseRef
instance Distribution.Utils.Structured.Structured Distribution.SPDX.LicenseReference.LicenseRef

module Distribution.SPDX.LicenseId

-- | SPDX License identifiers list v3.23
data LicenseId

-- | <tt>0BSD</tt>, BSD Zero Clause License
NullBSD :: LicenseId

-- | <tt>AAL</tt>, Attribution Assurance License
AAL :: LicenseId

-- | <tt>Abstyles</tt>, Abstyles License
Abstyles :: LicenseId

-- | <tt>AdaCore-doc</tt>, AdaCore Doc License, SPDX License List 3.23
AdaCore_doc :: LicenseId

-- | <tt>Adobe-2006</tt>, Adobe Systems Incorporated Source Code License
--   Agreement
Adobe_2006 :: LicenseId

-- | <tt>Adobe-Display-PostScript</tt>, Adobe Display PostScript License,
--   SPDX License List 3.23
Adobe_Display_PostScript :: LicenseId

-- | <tt>Adobe-Glyph</tt>, Adobe Glyph List License
Adobe_Glyph :: LicenseId

-- | <tt>Adobe-Utopia</tt>, Adobe Utopia Font License, SPDX License List
--   3.23
Adobe_Utopia :: LicenseId

-- | <tt>ADSL</tt>, Amazon Digital Services License
ADSL :: LicenseId

-- | <tt>AFL-1.1</tt>, Academic Free License v1.1
AFL_1_1 :: LicenseId

-- | <tt>AFL-1.2</tt>, Academic Free License v1.2
AFL_1_2 :: LicenseId

-- | <tt>AFL-2.0</tt>, Academic Free License v2.0
AFL_2_0 :: LicenseId

-- | <tt>AFL-2.1</tt>, Academic Free License v2.1
AFL_2_1 :: LicenseId

-- | <tt>AFL-3.0</tt>, Academic Free License v3.0
AFL_3_0 :: LicenseId

-- | <tt>Afmparse</tt>, Afmparse License
Afmparse :: LicenseId

-- | <tt>AGPL-1.0</tt>, Affero General Public License v1.0, SPDX License
--   List 3.0
AGPL_1_0 :: LicenseId

-- | <tt>AGPL-1.0-only</tt>, Affero General Public License v1.0 only, SPDX
--   License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX
--   License List 3.10, SPDX License List 3.16, SPDX License List 3.23
AGPL_1_0_only :: LicenseId

-- | <tt>AGPL-1.0-or-later</tt>, Affero General Public License v1.0 or
--   later, SPDX License List 3.2, SPDX License List 3.6, SPDX License List
--   3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List
--   3.23
AGPL_1_0_or_later :: LicenseId

-- | <tt>AGPL-3.0-only</tt>, GNU Affero General Public License v3.0 only
AGPL_3_0_only :: LicenseId

-- | <tt>AGPL-3.0-or-later</tt>, GNU Affero General Public License v3.0 or
--   later
AGPL_3_0_or_later :: LicenseId

-- | <tt>Aladdin</tt>, Aladdin Free Public License
Aladdin :: LicenseId

-- | <tt>AMDPLPA</tt>, AMD's plpa_map.c License
AMDPLPA :: LicenseId

-- | <tt>AML-glslang</tt>, AML glslang variant License, SPDX License List
--   3.23
AML_glslang :: LicenseId

-- | <tt>AML</tt>, Apple MIT License
AML :: LicenseId

-- | <tt>AMPAS</tt>, Academy of Motion Picture Arts and Sciences BSD
AMPAS :: LicenseId

-- | <tt>ANTLR-PD-fallback</tt>, ANTLR Software Rights Notice with license
--   fallback, SPDX License List 3.16, SPDX License List 3.23
ANTLR_PD_fallback :: LicenseId

-- | <tt>ANTLR-PD</tt>, ANTLR Software Rights Notice
ANTLR_PD :: LicenseId

-- | <tt>Apache-1.0</tt>, Apache License 1.0
Apache_1_0 :: LicenseId

-- | <tt>Apache-1.1</tt>, Apache License 1.1
Apache_1_1 :: LicenseId

-- | <tt>Apache-2.0</tt>, Apache License 2.0
Apache_2_0 :: LicenseId

-- | <tt>APAFML</tt>, Adobe Postscript AFM License
APAFML :: LicenseId

-- | <tt>APL-1.0</tt>, Adaptive Public License 1.0
APL_1_0 :: LicenseId

-- | <tt>App-s2p</tt>, App::s2p License, SPDX License List 3.16, SPDX
--   License List 3.23
App_s2p :: LicenseId

-- | <tt>APSL-1.0</tt>, Apple Public Source License 1.0
APSL_1_0 :: LicenseId

-- | <tt>APSL-1.1</tt>, Apple Public Source License 1.1
APSL_1_1 :: LicenseId

-- | <tt>APSL-1.2</tt>, Apple Public Source License 1.2
APSL_1_2 :: LicenseId

-- | <tt>APSL-2.0</tt>, Apple Public Source License 2.0
APSL_2_0 :: LicenseId

-- | <tt>Arphic-1999</tt>, Arphic Public License, SPDX License List 3.23
Arphic_1999 :: LicenseId

-- | <tt>Artistic-1.0-cl8</tt>, Artistic License 1.0 w/clause 8
Artistic_1_0_cl8 :: LicenseId

-- | <tt>Artistic-1.0-Perl</tt>, Artistic License 1.0 (Perl)
Artistic_1_0_Perl :: LicenseId

-- | <tt>Artistic-1.0</tt>, Artistic License 1.0
Artistic_1_0 :: LicenseId

-- | <tt>Artistic-2.0</tt>, Artistic License 2.0
Artistic_2_0 :: LicenseId

-- | <tt>ASWF-Digital-Assets-1.0</tt>, ASWF Digital Assets License version
--   1.0, SPDX License List 3.23
ASWF_Digital_Assets_1_0 :: LicenseId

-- | <tt>ASWF-Digital-Assets-1.1</tt>, ASWF Digital Assets License 1.1,
--   SPDX License List 3.23
ASWF_Digital_Assets_1_1 :: LicenseId

-- | <tt>Baekmuk</tt>, Baekmuk License, SPDX License List 3.23
Baekmuk :: LicenseId

-- | <tt>Bahyph</tt>, Bahyph License
Bahyph :: LicenseId

-- | <tt>Barr</tt>, Barr License
Barr :: LicenseId

-- | <tt>bcrypt-Solar-Designer</tt>, bcrypt Solar Designer License, SPDX
--   License List 3.23
Bcrypt_Solar_Designer :: LicenseId

-- | <tt>Beerware</tt>, Beerware License
Beerware :: LicenseId

-- | <tt>Bitstream-Charter</tt>, Bitstream Charter Font License, SPDX
--   License List 3.23
Bitstream_Charter :: LicenseId

-- | <tt>Bitstream-Vera</tt>, Bitstream Vera Font License, SPDX License
--   List 3.23
Bitstream_Vera :: LicenseId

-- | <tt>BitTorrent-1.0</tt>, BitTorrent Open Source License v1.0
BitTorrent_1_0 :: LicenseId

-- | <tt>BitTorrent-1.1</tt>, BitTorrent Open Source License v1.1
BitTorrent_1_1 :: LicenseId

-- | <tt>blessing</tt>, SQLite Blessing, SPDX License List 3.6, SPDX
--   License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX
--   License List 3.23
Blessing :: LicenseId

-- | <tt>BlueOak-1.0.0</tt>, Blue Oak Model License 1.0.0, SPDX License
--   List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License
--   List 3.16, SPDX License List 3.23
BlueOak_1_0_0 :: LicenseId

-- | <tt>Boehm-GC</tt>, Boehm-Demers-Weiser GC License, SPDX License List
--   3.23
Boehm_GC :: LicenseId

-- | <tt>Borceux</tt>, Borceux license
Borceux :: LicenseId

-- | <tt>Brian-Gladman-2-Clause</tt>, Brian Gladman 2-Clause License, SPDX
--   License List 3.23
Brian_Gladman_2_Clause :: LicenseId

-- | <tt>Brian-Gladman-3-Clause</tt>, Brian Gladman 3-Clause License, SPDX
--   License List 3.23
Brian_Gladman_3_Clause :: LicenseId

-- | <tt>BSD-1-Clause</tt>, BSD 1-Clause License
BSD_1_Clause :: LicenseId

-- | <tt>BSD-2-Clause-FreeBSD</tt>, BSD 2-Clause FreeBSD License, SPDX
--   License List 3.0, SPDX License List 3.2, SPDX License List 3.6, SPDX
--   License List 3.9
BSD_2_Clause_FreeBSD :: LicenseId

-- | <tt>BSD-2-Clause-NetBSD</tt>, BSD 2-Clause NetBSD License, SPDX
--   License List 3.0, SPDX License List 3.2, SPDX License List 3.6
BSD_2_Clause_NetBSD :: LicenseId

-- | <tt>BSD-2-Clause-Darwin</tt>, BSD 2-Clause - Ian Darwin variant, SPDX
--   License List 3.23
BSD_2_Clause_Darwin :: LicenseId

-- | <tt>BSD-2-Clause-Patent</tt>, BSD-2-Clause Plus Patent License
BSD_2_Clause_Patent :: LicenseId

-- | <tt>BSD-2-Clause-Views</tt>, BSD 2-Clause with views sentence, SPDX
--   License List 3.10, SPDX License List 3.16, SPDX License List 3.23
BSD_2_Clause_Views :: LicenseId

-- | <tt>BSD-2-Clause</tt>, BSD 2-Clause <a>Simplified</a> License
BSD_2_Clause :: LicenseId

-- | <tt>BSD-3-Clause-acpica</tt>, BSD 3-Clause acpica variant, SPDX
--   License List 3.23
BSD_3_Clause_acpica :: LicenseId

-- | <tt>BSD-3-Clause-Attribution</tt>, BSD with attribution
BSD_3_Clause_Attribution :: LicenseId

-- | <tt>BSD-3-Clause-Clear</tt>, BSD 3-Clause Clear License
BSD_3_Clause_Clear :: LicenseId

-- | <tt>BSD-3-Clause-flex</tt>, BSD 3-Clause Flex variant, SPDX License
--   List 3.23
BSD_3_Clause_flex :: LicenseId

-- | <tt>BSD-3-Clause-HP</tt>, Hewlett-Packard BSD variant license, SPDX
--   License List 3.23
BSD_3_Clause_HP :: LicenseId

-- | <tt>BSD-3-Clause-LBNL</tt>, Lawrence Berkeley National Labs BSD
--   variant license
BSD_3_Clause_LBNL :: LicenseId

-- | <tt>BSD-3-Clause-Modification</tt>, BSD 3-Clause Modification, SPDX
--   License List 3.16, SPDX License List 3.23
BSD_3_Clause_Modification :: LicenseId

-- | <tt>BSD-3-Clause-No-Military-License</tt>, BSD 3-Clause No Military
--   License, SPDX License List 3.16, SPDX License List 3.23
BSD_3_Clause_No_Military_License :: LicenseId

-- | <tt>BSD-3-Clause-No-Nuclear-License-2014</tt>, BSD 3-Clause No Nuclear
--   License 2014
BSD_3_Clause_No_Nuclear_License_2014 :: LicenseId

-- | <tt>BSD-3-Clause-No-Nuclear-License</tt>, BSD 3-Clause No Nuclear
--   License
BSD_3_Clause_No_Nuclear_License :: LicenseId

-- | <tt>BSD-3-Clause-No-Nuclear-Warranty</tt>, BSD 3-Clause No Nuclear
--   Warranty
BSD_3_Clause_No_Nuclear_Warranty :: LicenseId

-- | <tt>BSD-3-Clause-Open-MPI</tt>, BSD 3-Clause Open MPI variant, SPDX
--   License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX
--   License List 3.16, SPDX License List 3.23
BSD_3_Clause_Open_MPI :: LicenseId

-- | <tt>BSD-3-Clause-Sun</tt>, BSD 3-Clause Sun Microsystems, SPDX License
--   List 3.23
BSD_3_Clause_Sun :: LicenseId

-- | <tt>BSD-3-Clause</tt>, BSD 3-Clause <a>New</a> or <a>Revised</a>
--   License
BSD_3_Clause :: LicenseId

-- | <tt>BSD-4-Clause-Shortened</tt>, BSD 4 Clause Shortened, SPDX License
--   List 3.16, SPDX License List 3.23
BSD_4_Clause_Shortened :: LicenseId

-- | <tt>BSD-4-Clause-UC</tt>, BSD-4-Clause (University of
--   California-Specific)
BSD_4_Clause_UC :: LicenseId

-- | <tt>BSD-4-Clause</tt>, BSD 4-Clause <a>Original</a> or <a>Old</a>
--   License
BSD_4_Clause :: LicenseId

-- | <tt>BSD-4.3RENO</tt>, BSD 4.3 RENO License, SPDX License List 3.23
BSD_4_3RENO :: LicenseId

-- | <tt>BSD-4.3TAHOE</tt>, BSD 4.3 TAHOE License, SPDX License List 3.23
BSD_4_3TAHOE :: LicenseId

-- | <tt>BSD-Advertising-Acknowledgement</tt>, BSD Advertising
--   Acknowledgement License, SPDX License List 3.23
BSD_Advertising_Acknowledgement :: LicenseId

-- | <tt>BSD-Attribution-HPND-disclaimer</tt>, BSD with Attribution and
--   HPND disclaimer, SPDX License List 3.23
BSD_Attribution_HPND_disclaimer :: LicenseId

-- | <tt>BSD-Inferno-Nettverk</tt>, BSD-Inferno-Nettverk, SPDX License List
--   3.23
BSD_Inferno_Nettverk :: LicenseId

-- | <tt>BSD-Protection</tt>, BSD Protection License
BSD_Protection :: LicenseId

-- | <tt>BSD-Source-beginning-file</tt>, BSD Source Code Attribution -
--   beginning of file variant, SPDX License List 3.23
BSD_Source_beginning_file :: LicenseId

-- | <tt>BSD-Source-Code</tt>, BSD Source Code Attribution
BSD_Source_Code :: LicenseId

-- | <tt>BSD-Systemics-W3Works</tt>, Systemics W3Works BSD variant license,
--   SPDX License List 3.23
BSD_Systemics_W3Works :: LicenseId

-- | <tt>BSD-Systemics</tt>, Systemics BSD variant license, SPDX License
--   List 3.23
BSD_Systemics :: LicenseId

-- | <tt>BSL-1.0</tt>, Boost Software License 1.0
BSL_1_0 :: LicenseId

-- | <tt>bzip2-1.0.5</tt>, bzip2 and libbzip2 License v1.0.5, SPDX License
--   List 3.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License
--   List 3.9, SPDX License List 3.10
Bzip2_1_0_5 :: LicenseId

-- | <tt>BUSL-1.1</tt>, Business Source License 1.1, SPDX License List
--   3.16, SPDX License List 3.23
BUSL_1_1 :: LicenseId

-- | <tt>bzip2-1.0.6</tt>, bzip2 and libbzip2 License v1.0.6
Bzip2_1_0_6 :: LicenseId

-- | <tt>C-UDA-1.0</tt>, Computational Use of Data Agreement v1.0, SPDX
--   License List 3.16, SPDX License List 3.23
C_UDA_1_0 :: LicenseId

-- | <tt>CAL-1.0-Combined-Work-Exception</tt>, Cryptographic Autonomy
--   License 1.0 (Combined Work Exception), SPDX License List 3.9, SPDX
--   License List 3.10, SPDX License List 3.16, SPDX License List 3.23
CAL_1_0_Combined_Work_Exception :: LicenseId

-- | <tt>CAL-1.0</tt>, Cryptographic Autonomy License 1.0, SPDX License
--   List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License
--   List 3.23
CAL_1_0 :: LicenseId

-- | <tt>Caldera-no-preamble</tt>, Caldera License (without preamble), SPDX
--   License List 3.23
Caldera_no_preamble :: LicenseId

-- | <tt>Caldera</tt>, Caldera License
Caldera :: LicenseId

-- | <tt>CATOSL-1.1</tt>, Computer Associates Trusted Open Source License
--   1.1
CATOSL_1_1 :: LicenseId

-- | <tt>CC-BY-1.0</tt>, Creative Commons Attribution 1.0 Generic
CC_BY_1_0 :: LicenseId

-- | <tt>CC-BY-2.0</tt>, Creative Commons Attribution 2.0 Generic
CC_BY_2_0 :: LicenseId

-- | <tt>CC-BY-2.5-AU</tt>, Creative Commons Attribution 2.5 Australia,
--   SPDX License List 3.16, SPDX License List 3.23
CC_BY_2_5_AU :: LicenseId

-- | <tt>CC-BY-2.5</tt>, Creative Commons Attribution 2.5 Generic
CC_BY_2_5 :: LicenseId

-- | <tt>CC-BY-3.0-AT</tt>, Creative Commons Attribution 3.0 Austria, SPDX
--   License List 3.10, SPDX License List 3.16, SPDX License List 3.23
CC_BY_3_0_AT :: LicenseId

-- | <tt>CC-BY-3.0-AU</tt>, Creative Commons Attribution 3.0 Australia,
--   SPDX License List 3.23
CC_BY_3_0_AU :: LicenseId

-- | <tt>CC-BY-3.0-DE</tt>, Creative Commons Attribution 3.0 Germany, SPDX
--   License List 3.16, SPDX License List 3.23
CC_BY_3_0_DE :: LicenseId

-- | <tt>CC-BY-3.0-IGO</tt>, Creative Commons Attribution 3.0 IGO, SPDX
--   License List 3.23
CC_BY_3_0_IGO :: LicenseId

-- | <tt>CC-BY-3.0-NL</tt>, Creative Commons Attribution 3.0 Netherlands,
--   SPDX License List 3.16, SPDX License List 3.23
CC_BY_3_0_NL :: LicenseId

-- | <tt>CC-BY-3.0-US</tt>, Creative Commons Attribution 3.0 United States,
--   SPDX License List 3.16, SPDX License List 3.23
CC_BY_3_0_US :: LicenseId

-- | <tt>CC-BY-3.0</tt>, Creative Commons Attribution 3.0 Unported
CC_BY_3_0 :: LicenseId

-- | <tt>CC-BY-4.0</tt>, Creative Commons Attribution 4.0 International
CC_BY_4_0 :: LicenseId

-- | <tt>CC-BY-NC-1.0</tt>, Creative Commons Attribution Non Commercial 1.0
--   Generic
CC_BY_NC_1_0 :: LicenseId

-- | <tt>CC-BY-NC-2.0</tt>, Creative Commons Attribution Non Commercial 2.0
--   Generic
CC_BY_NC_2_0 :: LicenseId

-- | <tt>CC-BY-NC-2.5</tt>, Creative Commons Attribution Non Commercial 2.5
--   Generic
CC_BY_NC_2_5 :: LicenseId

-- | <tt>CC-BY-NC-3.0-DE</tt>, Creative Commons Attribution Non Commercial
--   3.0 Germany, SPDX License List 3.16, SPDX License List 3.23
CC_BY_NC_3_0_DE :: LicenseId

-- | <tt>CC-BY-NC-3.0</tt>, Creative Commons Attribution Non Commercial 3.0
--   Unported
CC_BY_NC_3_0 :: LicenseId

-- | <tt>CC-BY-NC-4.0</tt>, Creative Commons Attribution Non Commercial 4.0
--   International
CC_BY_NC_4_0 :: LicenseId

-- | <tt>CC-BY-NC-ND-1.0</tt>, Creative Commons Attribution Non Commercial
--   No Derivatives 1.0 Generic
CC_BY_NC_ND_1_0 :: LicenseId

-- | <tt>CC-BY-NC-ND-2.0</tt>, Creative Commons Attribution Non Commercial
--   No Derivatives 2.0 Generic
CC_BY_NC_ND_2_0 :: LicenseId

-- | <tt>CC-BY-NC-ND-2.5</tt>, Creative Commons Attribution Non Commercial
--   No Derivatives 2.5 Generic
CC_BY_NC_ND_2_5 :: LicenseId

-- | <tt>CC-BY-NC-ND-3.0-DE</tt>, Creative Commons Attribution Non
--   Commercial No Derivatives 3.0 Germany, SPDX License List 3.16, SPDX
--   License List 3.23
CC_BY_NC_ND_3_0_DE :: LicenseId

-- | <tt>CC-BY-NC-ND-3.0-IGO</tt>, Creative Commons Attribution Non
--   Commercial No Derivatives 3.0 IGO, SPDX License List 3.10, SPDX
--   License List 3.16, SPDX License List 3.23
CC_BY_NC_ND_3_0_IGO :: LicenseId

-- | <tt>CC-BY-NC-ND-3.0</tt>, Creative Commons Attribution Non Commercial
--   No Derivatives 3.0 Unported
CC_BY_NC_ND_3_0 :: LicenseId

-- | <tt>CC-BY-NC-ND-4.0</tt>, Creative Commons Attribution Non Commercial
--   No Derivatives 4.0 International
CC_BY_NC_ND_4_0 :: LicenseId

-- | <tt>CC-BY-NC-SA-1.0</tt>, Creative Commons Attribution Non Commercial
--   Share Alike 1.0 Generic
CC_BY_NC_SA_1_0 :: LicenseId

-- | <tt>CC-BY-NC-SA-2.0-DE</tt>, Creative Commons Attribution Non
--   Commercial Share Alike 2.0 Germany, SPDX License List 3.23
CC_BY_NC_SA_2_0_DE :: LicenseId

-- | <tt>CC-BY-NC-SA-2.0-FR</tt>, Creative Commons
--   Attribution-NonCommercial-ShareAlike 2.0 France, SPDX License List
--   3.16, SPDX License List 3.23
CC_BY_NC_SA_2_0_FR :: LicenseId

-- | <tt>CC-BY-NC-SA-2.0-UK</tt>, Creative Commons Attribution Non
--   Commercial Share Alike 2.0 England and Wales, SPDX License List 3.16,
--   SPDX License List 3.23
CC_BY_NC_SA_2_0_UK :: LicenseId

-- | <tt>CC-BY-NC-SA-2.0</tt>, Creative Commons Attribution Non Commercial
--   Share Alike 2.0 Generic
CC_BY_NC_SA_2_0 :: LicenseId

-- | <tt>CC-BY-NC-SA-2.5</tt>, Creative Commons Attribution Non Commercial
--   Share Alike 2.5 Generic
CC_BY_NC_SA_2_5 :: LicenseId

-- | <tt>CC-BY-NC-SA-3.0-DE</tt>, Creative Commons Attribution Non
--   Commercial Share Alike 3.0 Germany, SPDX License List 3.16, SPDX
--   License List 3.23
CC_BY_NC_SA_3_0_DE :: LicenseId

-- | <tt>CC-BY-NC-SA-3.0-IGO</tt>, Creative Commons Attribution Non
--   Commercial Share Alike 3.0 IGO, SPDX License List 3.16, SPDX License
--   List 3.23
CC_BY_NC_SA_3_0_IGO :: LicenseId

-- | <tt>CC-BY-NC-SA-3.0</tt>, Creative Commons Attribution Non Commercial
--   Share Alike 3.0 Unported
CC_BY_NC_SA_3_0 :: LicenseId

-- | <tt>CC-BY-NC-SA-4.0</tt>, Creative Commons Attribution Non Commercial
--   Share Alike 4.0 International
CC_BY_NC_SA_4_0 :: LicenseId

-- | <tt>CC-BY-ND-1.0</tt>, Creative Commons Attribution No Derivatives 1.0
--   Generic
CC_BY_ND_1_0 :: LicenseId

-- | <tt>CC-BY-ND-2.0</tt>, Creative Commons Attribution No Derivatives 2.0
--   Generic
CC_BY_ND_2_0 :: LicenseId

-- | <tt>CC-BY-ND-2.5</tt>, Creative Commons Attribution No Derivatives 2.5
--   Generic
CC_BY_ND_2_5 :: LicenseId

-- | <tt>CC-BY-ND-3.0-DE</tt>, Creative Commons Attribution No Derivatives
--   3.0 Germany, SPDX License List 3.16, SPDX License List 3.23
CC_BY_ND_3_0_DE :: LicenseId

-- | <tt>CC-BY-ND-3.0</tt>, Creative Commons Attribution No Derivatives 3.0
--   Unported
CC_BY_ND_3_0 :: LicenseId

-- | <tt>CC-BY-ND-4.0</tt>, Creative Commons Attribution No Derivatives 4.0
--   International
CC_BY_ND_4_0 :: LicenseId

-- | <tt>CC-BY-SA-1.0</tt>, Creative Commons Attribution Share Alike 1.0
--   Generic
CC_BY_SA_1_0 :: LicenseId

-- | <tt>CC-BY-SA-2.0-UK</tt>, Creative Commons Attribution Share Alike 2.0
--   England and Wales, SPDX License List 3.16, SPDX License List 3.23
CC_BY_SA_2_0_UK :: LicenseId

-- | <tt>CC-BY-SA-2.0</tt>, Creative Commons Attribution Share Alike 2.0
--   Generic
CC_BY_SA_2_0 :: LicenseId

-- | <tt>CC-BY-SA-2.1-JP</tt>, Creative Commons Attribution Share Alike 2.1
--   Japan, SPDX License List 3.16, SPDX License List 3.23
CC_BY_SA_2_1_JP :: LicenseId

-- | <tt>CC-BY-SA-2.5</tt>, Creative Commons Attribution Share Alike 2.5
--   Generic
CC_BY_SA_2_5 :: LicenseId

-- | <tt>CC-BY-SA-3.0-AT</tt>, Creative Commons Attribution Share Alike 3.0
--   Austria, SPDX License List 3.10, SPDX License List 3.16, SPDX License
--   List 3.23
CC_BY_SA_3_0_AT :: LicenseId

-- | <tt>CC-BY-SA-3.0-DE</tt>, Creative Commons Attribution Share Alike 3.0
--   Germany, SPDX License List 3.16, SPDX License List 3.23
CC_BY_SA_3_0_DE :: LicenseId

-- | <tt>CC-BY-SA-3.0-IGO</tt>, Creative Commons Attribution-ShareAlike 3.0
--   IGO, SPDX License List 3.23
CC_BY_SA_3_0_IGO :: LicenseId

-- | <tt>CC-BY-SA-3.0</tt>, Creative Commons Attribution Share Alike 3.0
--   Unported
CC_BY_SA_3_0 :: LicenseId

-- | <tt>CC-BY-SA-4.0</tt>, Creative Commons Attribution Share Alike 4.0
--   International
CC_BY_SA_4_0 :: LicenseId

-- | <tt>CC-PDDC</tt>, Creative Commons Public Domain Dedication and
--   Certification, SPDX License List 3.6, SPDX License List 3.9, SPDX
--   License List 3.10, SPDX License List 3.16, SPDX License List 3.23
CC_PDDC :: LicenseId

-- | <tt>CC0-1.0</tt>, Creative Commons Zero v1.0 Universal
CC0_1_0 :: LicenseId

-- | <tt>CDDL-1.0</tt>, Common Development and Distribution License 1.0
CDDL_1_0 :: LicenseId

-- | <tt>CDDL-1.1</tt>, Common Development and Distribution License 1.1
CDDL_1_1 :: LicenseId

-- | <tt>CDL-1.0</tt>, Common Documentation License 1.0, SPDX License List
--   3.16, SPDX License List 3.23
CDL_1_0 :: LicenseId

-- | <tt>CDLA-Permissive-1.0</tt>, Community Data License Agreement
--   Permissive 1.0
CDLA_Permissive_1_0 :: LicenseId

-- | <tt>CDLA-Permissive-2.0</tt>, Community Data License Agreement
--   Permissive 2.0, SPDX License List 3.16, SPDX License List 3.23
CDLA_Permissive_2_0 :: LicenseId

-- | <tt>CDLA-Sharing-1.0</tt>, Community Data License Agreement Sharing
--   1.0
CDLA_Sharing_1_0 :: LicenseId

-- | <tt>CECILL-1.0</tt>, CeCILL Free Software License Agreement v1.0
CECILL_1_0 :: LicenseId

-- | <tt>CECILL-1.1</tt>, CeCILL Free Software License Agreement v1.1
CECILL_1_1 :: LicenseId

-- | <tt>CECILL-2.0</tt>, CeCILL Free Software License Agreement v2.0
CECILL_2_0 :: LicenseId

-- | <tt>CECILL-2.1</tt>, CeCILL Free Software License Agreement v2.1
CECILL_2_1 :: LicenseId

-- | <tt>CECILL-B</tt>, CeCILL-B Free Software License Agreement
CECILL_B :: LicenseId

-- | <tt>CECILL-C</tt>, CeCILL-C Free Software License Agreement
CECILL_C :: LicenseId

-- | <tt>CERN-OHL-1.1</tt>, CERN Open Hardware Licence v1.1, SPDX License
--   List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License
--   List 3.16, SPDX License List 3.23
CERN_OHL_1_1 :: LicenseId

-- | <tt>CERN-OHL-1.2</tt>, CERN Open Hardware Licence v1.2, SPDX License
--   List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License
--   List 3.16, SPDX License List 3.23
CERN_OHL_1_2 :: LicenseId

-- | <tt>CERN-OHL-P-2.0</tt>, CERN Open Hardware Licence Version 2 -
--   Permissive, SPDX License List 3.9, SPDX License List 3.10, SPDX
--   License List 3.16, SPDX License List 3.23
CERN_OHL_P_2_0 :: LicenseId

-- | <tt>CERN-OHL-S-2.0</tt>, CERN Open Hardware Licence Version 2 -
--   Strongly Reciprocal, SPDX License List 3.9, SPDX License List 3.10,
--   SPDX License List 3.16, SPDX License List 3.23
CERN_OHL_S_2_0 :: LicenseId

-- | <tt>CERN-OHL-W-2.0</tt>, CERN Open Hardware Licence Version 2 - Weakly
--   Reciprocal, SPDX License List 3.9, SPDX License List 3.10, SPDX
--   License List 3.16, SPDX License List 3.23
CERN_OHL_W_2_0 :: LicenseId

-- | <tt>CFITSIO</tt>, CFITSIO License, SPDX License List 3.23
CFITSIO :: LicenseId

-- | <tt>check-cvs</tt>, check-cvs License, SPDX License List 3.23
Check_cvs :: LicenseId

-- | <tt>checkmk</tt>, Checkmk License, SPDX License List 3.23
Checkmk :: LicenseId

-- | <tt>ClArtistic</tt>, Clarified Artistic License
ClArtistic :: LicenseId

-- | <tt>Clips</tt>, Clips License, SPDX License List 3.23
Clips :: LicenseId

-- | <tt>CMU-Mach-nodoc</tt>, CMU Mach - no notices-in-documentation
--   variant, SPDX License List 3.23
CMU_Mach_nodoc :: LicenseId

-- | <tt>CMU-Mach</tt>, CMU Mach License, SPDX License List 3.23
CMU_Mach :: LicenseId

-- | <tt>CNRI-Jython</tt>, CNRI Jython License
CNRI_Jython :: LicenseId

-- | <tt>CNRI-Python-GPL-Compatible</tt>, CNRI Python Open Source GPL
--   Compatible License Agreement
CNRI_Python_GPL_Compatible :: LicenseId

-- | <tt>CNRI-Python</tt>, CNRI Python License
CNRI_Python :: LicenseId

-- | <tt>COIL-1.0</tt>, Copyfree Open Innovation License, SPDX License List
--   3.16, SPDX License List 3.23
COIL_1_0 :: LicenseId

-- | <tt>Community-Spec-1.0</tt>, Community Specification License 1.0, SPDX
--   License List 3.16, SPDX License List 3.23
Community_Spec_1_0 :: LicenseId

-- | <tt>Condor-1.1</tt>, Condor Public License v1.1
Condor_1_1 :: LicenseId

-- | <tt>copyleft-next-0.3.0</tt>, copyleft-next 0.3.0, SPDX License List
--   3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
Copyleft_next_0_3_0 :: LicenseId

-- | <tt>copyleft-next-0.3.1</tt>, copyleft-next 0.3.1, SPDX License List
--   3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
Copyleft_next_0_3_1 :: LicenseId

-- | <tt>Cornell-Lossless-JPEG</tt>, Cornell Lossless JPEG License, SPDX
--   License List 3.23
Cornell_Lossless_JPEG :: LicenseId

-- | <tt>CPAL-1.0</tt>, Common Public Attribution License 1.0
CPAL_1_0 :: LicenseId

-- | <tt>CPL-1.0</tt>, Common Public License 1.0
CPL_1_0 :: LicenseId

-- | <tt>CPOL-1.02</tt>, Code Project Open License 1.02
CPOL_1_02 :: LicenseId

-- | <tt>Cronyx</tt>, Cronyx License, SPDX License List 3.23
Cronyx :: LicenseId

-- | <tt>Crossword</tt>, Crossword License
Crossword :: LicenseId

-- | <tt>CrystalStacker</tt>, CrystalStacker License
CrystalStacker :: LicenseId

-- | <tt>CUA-OPL-1.0</tt>, CUA Office Public License v1.0
CUA_OPL_1_0 :: LicenseId

-- | <tt>Cube</tt>, Cube License
Cube :: LicenseId

-- | <tt>curl</tt>, curl License
Curl :: LicenseId

-- | <tt>D-FSL-1.0</tt>, Deutsche Freie Software Lizenz
D_FSL_1_0 :: LicenseId

-- | <tt>DEC-3-Clause</tt>, DEC 3-Clause License, SPDX License List 3.23
DEC_3_Clause :: LicenseId

-- | <tt>diffmark</tt>, diffmark license
Diffmark :: LicenseId

-- | <tt>DL-DE-BY-2.0</tt>, Data licence Germany – attribution – version
--   2.0, SPDX License List 3.16, SPDX License List 3.23
DL_DE_BY_2_0 :: LicenseId

-- | <tt>DL-DE-ZERO-2.0</tt>, Data licence Germany – zero – version 2.0,
--   SPDX License List 3.23
DL_DE_ZERO_2_0 :: LicenseId

-- | <tt>DOC</tt>, DOC License
DOC :: LicenseId

-- | <tt>Dotseqn</tt>, Dotseqn License
Dotseqn :: LicenseId

-- | <tt>DRL-1.0</tt>, Detection Rule License 1.0, SPDX License List 3.16,
--   SPDX License List 3.23
DRL_1_0 :: LicenseId

-- | <tt>DRL-1.1</tt>, Detection Rule License 1.1, SPDX License List 3.23
DRL_1_1 :: LicenseId

-- | <tt>DSDP</tt>, DSDP License
DSDP :: LicenseId

-- | <tt>dtoa</tt>, David M. Gay dtoa License, SPDX License List 3.23
Dtoa :: LicenseId

-- | <tt>dvipdfm</tt>, dvipdfm License
Dvipdfm :: LicenseId

-- | <tt>ECL-1.0</tt>, Educational Community License v1.0
ECL_1_0 :: LicenseId

-- | <tt>ECL-2.0</tt>, Educational Community License v2.0
ECL_2_0 :: LicenseId

-- | <tt>EFL-1.0</tt>, Eiffel Forum License v1.0
EFL_1_0 :: LicenseId

-- | <tt>EFL-2.0</tt>, Eiffel Forum License v2.0
EFL_2_0 :: LicenseId

-- | <tt>eGenix</tt>, eGenix.com Public License 1.1.0
EGenix :: LicenseId

-- | <tt>Elastic-2.0</tt>, Elastic License 2.0, SPDX License List 3.16,
--   SPDX License List 3.23
Elastic_2_0 :: LicenseId

-- | <tt>Entessa</tt>, Entessa Public License v1.0
Entessa :: LicenseId

-- | <tt>EPICS</tt>, EPICS Open License, SPDX License List 3.10, SPDX
--   License List 3.16, SPDX License List 3.23
EPICS :: LicenseId

-- | <tt>EPL-1.0</tt>, Eclipse Public License 1.0
EPL_1_0 :: LicenseId

-- | <tt>EPL-2.0</tt>, Eclipse Public License 2.0
EPL_2_0 :: LicenseId

-- | <tt>ErlPL-1.1</tt>, Erlang Public License v1.1
ErlPL_1_1 :: LicenseId

-- | <tt>etalab-2.0</tt>, Etalab Open License 2.0, SPDX License List 3.9,
--   SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23
Etalab_2_0 :: LicenseId

-- | <tt>EUDatagrid</tt>, EU DataGrid Software License
EUDatagrid :: LicenseId

-- | <tt>EUPL-1.0</tt>, European Union Public License 1.0
EUPL_1_0 :: LicenseId

-- | <tt>EUPL-1.1</tt>, European Union Public License 1.1
EUPL_1_1 :: LicenseId

-- | <tt>EUPL-1.2</tt>, European Union Public License 1.2
EUPL_1_2 :: LicenseId

-- | <tt>Eurosym</tt>, Eurosym License
Eurosym :: LicenseId

-- | <tt>Fair</tt>, Fair License
Fair :: LicenseId

-- | <tt>FBM</tt>, Fuzzy Bitmap License, SPDX License List 3.23
FBM :: LicenseId

-- | <tt>FDK-AAC</tt>, Fraunhofer FDK AAC Codec Library, SPDX License List
--   3.16, SPDX License List 3.23
FDK_AAC :: LicenseId

-- | <tt>Ferguson-Twofish</tt>, Ferguson Twofish License, SPDX License List
--   3.23
Ferguson_Twofish :: LicenseId

-- | <tt>Frameworx-1.0</tt>, Frameworx Open License 1.0
Frameworx_1_0 :: LicenseId

-- | <tt>FreeBSD-DOC</tt>, FreeBSD Documentation License, SPDX License List
--   3.16, SPDX License List 3.23
FreeBSD_DOC :: LicenseId

-- | <tt>FreeImage</tt>, FreeImage Public License v1.0
FreeImage :: LicenseId

-- | <tt>FSFAP-no-warranty-disclaimer</tt>, FSF All Permissive License
--   (without Warranty), SPDX License List 3.23
FSFAP_no_warranty_disclaimer :: LicenseId

-- | <tt>FSFAP</tt>, FSF All Permissive License
FSFAP :: LicenseId

-- | <tt>FSFULLRWD</tt>, FSF Unlimited License (With License Retention and
--   Warranty Disclaimer), SPDX License List 3.23
FSFULLRWD :: LicenseId

-- | <tt>FSFULLR</tt>, FSF Unlimited License (with License Retention)
FSFULLR :: LicenseId

-- | <tt>FSFUL</tt>, FSF Unlimited License
FSFUL :: LicenseId

-- | <tt>FTL</tt>, Freetype Project License
FTL :: LicenseId

-- | <tt>Furuseth</tt>, Furuseth License, SPDX License List 3.23
Furuseth :: LicenseId

-- | <tt>fwlw</tt>, fwlw License, SPDX License List 3.23
Fwlw :: LicenseId

-- | <tt>GCR-docs</tt>, Gnome GCR Documentation License, SPDX License List
--   3.23
GCR_docs :: LicenseId

-- | <tt>GD</tt>, GD License, SPDX License List 3.16, SPDX License List
--   3.23
GD :: LicenseId

-- | <tt>GFDL-1.1-invariants-only</tt>, GNU Free Documentation License v1.1
--   only - invariants, SPDX License List 3.10, SPDX License List 3.16,
--   SPDX License List 3.23
GFDL_1_1_invariants_only :: LicenseId

-- | <tt>GFDL-1.1-invariants-or-later</tt>, GNU Free Documentation License
--   v1.1 or later - invariants, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
GFDL_1_1_invariants_or_later :: LicenseId

-- | <tt>GFDL-1.1-no-invariants-only</tt>, GNU Free Documentation License
--   v1.1 only - no invariants, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
GFDL_1_1_no_invariants_only :: LicenseId

-- | <tt>GFDL-1.1-no-invariants-or-later</tt>, GNU Free Documentation
--   License v1.1 or later - no invariants, SPDX License List 3.10, SPDX
--   License List 3.16, SPDX License List 3.23
GFDL_1_1_no_invariants_or_later :: LicenseId

-- | <tt>GFDL-1.1-only</tt>, GNU Free Documentation License v1.1 only
GFDL_1_1_only :: LicenseId

-- | <tt>GFDL-1.1-or-later</tt>, GNU Free Documentation License v1.1 or
--   later
GFDL_1_1_or_later :: LicenseId

-- | <tt>GFDL-1.2-invariants-only</tt>, GNU Free Documentation License v1.2
--   only - invariants, SPDX License List 3.10, SPDX License List 3.16,
--   SPDX License List 3.23
GFDL_1_2_invariants_only :: LicenseId

-- | <tt>GFDL-1.2-invariants-or-later</tt>, GNU Free Documentation License
--   v1.2 or later - invariants, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
GFDL_1_2_invariants_or_later :: LicenseId

-- | <tt>GFDL-1.2-no-invariants-only</tt>, GNU Free Documentation License
--   v1.2 only - no invariants, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
GFDL_1_2_no_invariants_only :: LicenseId

-- | <tt>GFDL-1.2-no-invariants-or-later</tt>, GNU Free Documentation
--   License v1.2 or later - no invariants, SPDX License List 3.10, SPDX
--   License List 3.16, SPDX License List 3.23
GFDL_1_2_no_invariants_or_later :: LicenseId

-- | <tt>GFDL-1.2-only</tt>, GNU Free Documentation License v1.2 only
GFDL_1_2_only :: LicenseId

-- | <tt>GFDL-1.2-or-later</tt>, GNU Free Documentation License v1.2 or
--   later
GFDL_1_2_or_later :: LicenseId

-- | <tt>GFDL-1.3-invariants-only</tt>, GNU Free Documentation License v1.3
--   only - invariants, SPDX License List 3.10, SPDX License List 3.16,
--   SPDX License List 3.23
GFDL_1_3_invariants_only :: LicenseId

-- | <tt>GFDL-1.3-invariants-or-later</tt>, GNU Free Documentation License
--   v1.3 or later - invariants, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
GFDL_1_3_invariants_or_later :: LicenseId

-- | <tt>GFDL-1.3-no-invariants-only</tt>, GNU Free Documentation License
--   v1.3 only - no invariants, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
GFDL_1_3_no_invariants_only :: LicenseId

-- | <tt>GFDL-1.3-no-invariants-or-later</tt>, GNU Free Documentation
--   License v1.3 or later - no invariants, SPDX License List 3.10, SPDX
--   License List 3.16, SPDX License List 3.23
GFDL_1_3_no_invariants_or_later :: LicenseId

-- | <tt>GFDL-1.3-only</tt>, GNU Free Documentation License v1.3 only
GFDL_1_3_only :: LicenseId

-- | <tt>GFDL-1.3-or-later</tt>, GNU Free Documentation License v1.3 or
--   later
GFDL_1_3_or_later :: LicenseId

-- | <tt>Giftware</tt>, Giftware License
Giftware :: LicenseId

-- | <tt>GL2PS</tt>, GL2PS License
GL2PS :: LicenseId

-- | <tt>Glide</tt>, 3dfx Glide License
Glide :: LicenseId

-- | <tt>Glulxe</tt>, Glulxe License
Glulxe :: LicenseId

-- | <tt>GLWTPL</tt>, Good Luck With That Public License, SPDX License List
--   3.10, SPDX License List 3.16, SPDX License List 3.23
GLWTPL :: LicenseId

-- | <tt>gnuplot</tt>, gnuplot License
Gnuplot :: LicenseId

-- | <tt>GPL-1.0-only</tt>, GNU General Public License v1.0 only
GPL_1_0_only :: LicenseId

-- | <tt>GPL-1.0-or-later</tt>, GNU General Public License v1.0 or later
GPL_1_0_or_later :: LicenseId

-- | <tt>GPL-2.0-only</tt>, GNU General Public License v2.0 only
GPL_2_0_only :: LicenseId

-- | <tt>GPL-2.0-or-later</tt>, GNU General Public License v2.0 or later
GPL_2_0_or_later :: LicenseId

-- | <tt>GPL-3.0-only</tt>, GNU General Public License v3.0 only
GPL_3_0_only :: LicenseId

-- | <tt>GPL-3.0-or-later</tt>, GNU General Public License v3.0 or later
GPL_3_0_or_later :: LicenseId

-- | <tt>Graphics-Gems</tt>, Graphics Gems License, SPDX License List 3.23
Graphics_Gems :: LicenseId

-- | <tt>gSOAP-1.3b</tt>, gSOAP Public License v1.3b
GSOAP_1_3b :: LicenseId

-- | <tt>gtkbook</tt>, gtkbook License, SPDX License List 3.23
Gtkbook :: LicenseId

-- | <tt>HaskellReport</tt>, Haskell Language Report License
HaskellReport :: LicenseId

-- | <tt>hdparm</tt>, hdparm License, SPDX License List 3.23
Hdparm :: LicenseId

-- | <tt>Hippocratic-2.1</tt>, Hippocratic License 2.1, SPDX License List
--   3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List
--   3.23
Hippocratic_2_1 :: LicenseId

-- | <tt>HP-1986</tt>, Hewlett-Packard 1986 License, SPDX License List 3.23
HP_1986 :: LicenseId

-- | <tt>HP-1989</tt>, Hewlett-Packard 1989 License, SPDX License List 3.23
HP_1989 :: LicenseId

-- | <tt>HPND-DEC</tt>, Historical Permission Notice and Disclaimer - DEC
--   variant, SPDX License List 3.23
HPND_DEC :: LicenseId

-- | <tt>HPND-doc-sell</tt>, Historical Permission Notice and Disclaimer -
--   documentation sell variant, SPDX License List 3.23
HPND_doc_sell :: LicenseId

-- | <tt>HPND-doc</tt>, Historical Permission Notice and Disclaimer -
--   documentation variant, SPDX License List 3.23
HPND_doc :: LicenseId

-- | <tt>HPND-export-US-modify</tt>, HPND with US Government export control
--   warning and modification rqmt, SPDX License List 3.23
HPND_export_US_modify :: LicenseId

-- | <tt>HPND-export-US</tt>, HPND with US Government export control
--   warning, SPDX License List 3.23
HPND_export_US :: LicenseId

-- | <tt>HPND-Fenneberg-Livingston</tt>, Historical Permission Notice and
--   Disclaimer - Fenneberg-Livingston variant, SPDX License List 3.23
HPND_Fenneberg_Livingston :: LicenseId

-- | <tt>HPND-INRIA-IMAG</tt>, Historical Permission Notice and Disclaimer
--   - INRIA-IMAG variant, SPDX License List 3.23
HPND_INRIA_IMAG :: LicenseId

-- | <tt>HPND-Kevlin-Henney</tt>, Historical Permission Notice and
--   Disclaimer - Kevlin Henney variant, SPDX License List 3.23
HPND_Kevlin_Henney :: LicenseId

-- | <tt>HPND-Markus-Kuhn</tt>, Historical Permission Notice and Disclaimer
--   - Markus Kuhn variant, SPDX License List 3.23
HPND_Markus_Kuhn :: LicenseId

-- | <tt>HPND-MIT-disclaimer</tt>, Historical Permission Notice and
--   Disclaimer with MIT disclaimer, SPDX License List 3.23
HPND_MIT_disclaimer :: LicenseId

-- | <tt>HPND-Pbmplus</tt>, Historical Permission Notice and Disclaimer -
--   Pbmplus variant, SPDX License List 3.23
HPND_Pbmplus :: LicenseId

-- | <tt>HPND-sell-MIT-disclaimer-xserver</tt>, Historical Permission
--   Notice and Disclaimer - sell xserver variant with MIT disclaimer, SPDX
--   License List 3.23
HPND_sell_MIT_disclaimer_xserver :: LicenseId

-- | <tt>HPND-sell-regexpr</tt>, Historical Permission Notice and
--   Disclaimer - sell regexpr variant, SPDX License List 3.23
HPND_sell_regexpr :: LicenseId

-- | <tt>HPND-sell-variant-MIT-disclaimer</tt>, HPND sell variant with MIT
--   disclaimer, SPDX License List 3.23
HPND_sell_variant_MIT_disclaimer :: LicenseId

-- | <tt>HPND-sell-variant</tt>, Historical Permission Notice and
--   Disclaimer - sell variant, SPDX License List 3.6, SPDX License List
--   3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List
--   3.23
HPND_sell_variant :: LicenseId

-- | <tt>HPND-UC</tt>, Historical Permission Notice and Disclaimer -
--   University of California variant, SPDX License List 3.23
HPND_UC :: LicenseId

-- | <tt>HPND</tt>, Historical Permission Notice and Disclaimer
HPND :: LicenseId

-- | <tt>HTMLTIDY</tt>, HTML Tidy License, SPDX License List 3.16, SPDX
--   License List 3.23
HTMLTIDY :: LicenseId

-- | <tt>IBM-pibs</tt>, IBM PowerPC Initialization and Boot Software
IBM_pibs :: LicenseId

-- | <tt>ICU</tt>, ICU License
ICU :: LicenseId

-- | <tt>IEC-Code-Components-EULA</tt>, IEC Code Components End-user
--   licence agreement, SPDX License List 3.23
IEC_Code_Components_EULA :: LicenseId

-- | <tt>IJG-short</tt>, Independent JPEG Group License - short, SPDX
--   License List 3.23
IJG_short :: LicenseId

-- | <tt>IJG</tt>, Independent JPEG Group License
IJG :: LicenseId

-- | <tt>ImageMagick</tt>, ImageMagick License
ImageMagick :: LicenseId

-- | <tt>iMatix</tt>, iMatix Standard Function Library Agreement
IMatix :: LicenseId

-- | <tt>Imlib2</tt>, Imlib2 License
Imlib2 :: LicenseId

-- | <tt>Info-ZIP</tt>, Info-ZIP License
Info_ZIP :: LicenseId

-- | <tt>Inner-Net-2.0</tt>, Inner Net License v2.0, SPDX License List 3.23
Inner_Net_2_0 :: LicenseId

-- | <tt>Intel-ACPI</tt>, Intel ACPI Software License Agreement
Intel_ACPI :: LicenseId

-- | <tt>Intel</tt>, Intel Open Source License
Intel :: LicenseId

-- | <tt>Interbase-1.0</tt>, Interbase Public License v1.0
Interbase_1_0 :: LicenseId

-- | <tt>IPA</tt>, IPA Font License
IPA :: LicenseId

-- | <tt>IPL-1.0</tt>, IBM Public License v1.0
IPL_1_0 :: LicenseId

-- | <tt>ISC-Veillard</tt>, ISC Veillard variant, SPDX License List 3.23
ISC_Veillard :: LicenseId

-- | <tt>ISC</tt>, ISC License
ISC :: LicenseId

-- | <tt>Jam</tt>, Jam License, SPDX License List 3.16, SPDX License List
--   3.23
Jam :: LicenseId

-- | <tt>JasPer-2.0</tt>, JasPer License
JasPer_2_0 :: LicenseId

-- | <tt>JPL-image</tt>, JPL Image Use Policy, SPDX License List 3.23
JPL_image :: LicenseId

-- | <tt>JPNIC</tt>, Japan Network Information Center License, SPDX License
--   List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License
--   List 3.16, SPDX License List 3.23
JPNIC :: LicenseId

-- | <tt>JSON</tt>, JSON License
JSON :: LicenseId

-- | <tt>Kastrup</tt>, Kastrup License, SPDX License List 3.23
Kastrup :: LicenseId

-- | <tt>Kazlib</tt>, Kazlib License, SPDX License List 3.23
Kazlib :: LicenseId

-- | <tt>Knuth-CTAN</tt>, Knuth CTAN License, SPDX License List 3.23
Knuth_CTAN :: LicenseId

-- | <tt>LAL-1.2</tt>, Licence Art Libre 1.2
LAL_1_2 :: LicenseId

-- | <tt>LAL-1.3</tt>, Licence Art Libre 1.3
LAL_1_3 :: LicenseId

-- | <tt>Latex2e-translated-notice</tt>, Latex2e with translated notice
--   permission, SPDX License List 3.23
Latex2e_translated_notice :: LicenseId

-- | <tt>Latex2e</tt>, Latex2e License
Latex2e :: LicenseId

-- | <tt>Leptonica</tt>, Leptonica License
Leptonica :: LicenseId

-- | <tt>LGPL-2.0-only</tt>, GNU Library General Public License v2 only
LGPL_2_0_only :: LicenseId

-- | <tt>LGPL-2.0-or-later</tt>, GNU Library General Public License v2 or
--   later
LGPL_2_0_or_later :: LicenseId

-- | <tt>LGPL-2.1-only</tt>, GNU Lesser General Public License v2.1 only
LGPL_2_1_only :: LicenseId

-- | <tt>LGPL-2.1-or-later</tt>, GNU Lesser General Public License v2.1 or
--   later
LGPL_2_1_or_later :: LicenseId

-- | <tt>LGPL-3.0-only</tt>, GNU Lesser General Public License v3.0 only
LGPL_3_0_only :: LicenseId

-- | <tt>LGPL-3.0-or-later</tt>, GNU Lesser General Public License v3.0 or
--   later
LGPL_3_0_or_later :: LicenseId

-- | <tt>LGPLLR</tt>, Lesser General Public License For Linguistic
--   Resources
LGPLLR :: LicenseId

-- | <tt>libpng-2.0</tt>, PNG Reference Library version 2, SPDX License
--   List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License
--   List 3.16, SPDX License List 3.23
Libpng_2_0 :: LicenseId

-- | <tt>Libpng</tt>, libpng License
Libpng :: LicenseId

-- | <tt>libselinux-1.0</tt>, libselinux public domain notice, SPDX License
--   List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License
--   List 3.23
Libselinux_1_0 :: LicenseId

-- | <tt>libtiff</tt>, libtiff License
Libtiff :: LicenseId

-- | <tt>libutil-David-Nugent</tt>, libutil David Nugent License, SPDX
--   License List 3.23
Libutil_David_Nugent :: LicenseId

-- | <tt>LiLiQ-P-1.1</tt>, Licence Libre du Québec – Permissive version 1.1
LiLiQ_P_1_1 :: LicenseId

-- | <tt>LiLiQ-R-1.1</tt>, Licence Libre du Québec – Réciprocité version
--   1.1
LiLiQ_R_1_1 :: LicenseId

-- | <tt>LiLiQ-Rplus-1.1</tt>, Licence Libre du Québec – Réciprocité forte
--   version 1.1
LiLiQ_Rplus_1_1 :: LicenseId

-- | <tt>Linux-man-pages-1-para</tt>, Linux man-pages - 1 paragraph, SPDX
--   License List 3.23
Linux_man_pages_1_para :: LicenseId

-- | <tt>Linux-man-pages-copyleft-2-para</tt>, Linux man-pages Copyleft - 2
--   paragraphs, SPDX License List 3.23
Linux_man_pages_copyleft_2_para :: LicenseId

-- | <tt>Linux-man-pages-copyleft-var</tt>, Linux man-pages Copyleft
--   Variant, SPDX License List 3.23
Linux_man_pages_copyleft_var :: LicenseId

-- | <tt>Linux-man-pages-copyleft</tt>, Linux man-pages Copyleft, SPDX
--   License List 3.16, SPDX License List 3.23
Linux_man_pages_copyleft :: LicenseId

-- | <tt>Linux-OpenIB</tt>, Linux Kernel Variant of OpenIB.org license,
--   SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9,
--   SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23
Linux_OpenIB :: LicenseId

-- | <tt>LOOP</tt>, Common Lisp LOOP License, SPDX License List 3.23
LOOP :: LicenseId

-- | <tt>LPD-document</tt>, LPD Documentation License, SPDX License List
--   3.23
LPD_document :: LicenseId

-- | <tt>LPL-1.02</tt>, Lucent Public License v1.02
LPL_1_02 :: LicenseId

-- | <tt>LPL-1.0</tt>, Lucent Public License Version 1.0
LPL_1_0 :: LicenseId

-- | <tt>LPPL-1.0</tt>, LaTeX Project Public License v1.0
LPPL_1_0 :: LicenseId

-- | <tt>LPPL-1.1</tt>, LaTeX Project Public License v1.1
LPPL_1_1 :: LicenseId

-- | <tt>LPPL-1.2</tt>, LaTeX Project Public License v1.2
LPPL_1_2 :: LicenseId

-- | <tt>LPPL-1.3a</tt>, LaTeX Project Public License v1.3a
LPPL_1_3a :: LicenseId

-- | <tt>LPPL-1.3c</tt>, LaTeX Project Public License v1.3c
LPPL_1_3c :: LicenseId

-- | <tt>lsof</tt>, lsof License, SPDX License List 3.23
Lsof :: LicenseId

-- | <tt>Lucida-Bitmap-Fonts</tt>, Lucida Bitmap Fonts License, SPDX
--   License List 3.23
Lucida_Bitmap_Fonts :: LicenseId

-- | <tt>LZMA-SDK-9.11-to-9.20</tt>, LZMA SDK License (versions 9.11 to
--   9.20), SPDX License List 3.23
LZMA_SDK_9_11_to_9_20 :: LicenseId

-- | <tt>LZMA-SDK-9.22</tt>, LZMA SDK License (versions 9.22 and beyond),
--   SPDX License List 3.23
LZMA_SDK_9_22 :: LicenseId

-- | <tt>Mackerras-3-Clause-acknowledgment</tt>, Mackerras 3-Clause -
--   acknowledgment variant, SPDX License List 3.23
Mackerras_3_Clause_acknowledgment :: LicenseId

-- | <tt>Mackerras-3-Clause</tt>, Mackerras 3-Clause License, SPDX License
--   List 3.23
Mackerras_3_Clause :: LicenseId

-- | <tt>magaz</tt>, magaz License, SPDX License List 3.23
Magaz :: LicenseId

-- | <tt>mailprio</tt>, mailprio License, SPDX License List 3.23
Mailprio :: LicenseId

-- | <tt>MakeIndex</tt>, MakeIndex License
MakeIndex :: LicenseId

-- | <tt>Martin-Birgmeier</tt>, Martin Birgmeier License, SPDX License List
--   3.23
Martin_Birgmeier :: LicenseId

-- | <tt>McPhee-slideshow</tt>, McPhee Slideshow License, SPDX License List
--   3.23
McPhee_slideshow :: LicenseId

-- | <tt>metamail</tt>, metamail License, SPDX License List 3.23
Metamail :: LicenseId

-- | <tt>Minpack</tt>, Minpack License, SPDX License List 3.23
Minpack :: LicenseId

-- | <tt>MirOS</tt>, The MirOS Licence
MirOS :: LicenseId

-- | <tt>MIT-0</tt>, MIT No Attribution, SPDX License List 3.2, SPDX
--   License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX
--   License List 3.16, SPDX License List 3.23
MIT_0 :: LicenseId

-- | <tt>MIT-advertising</tt>, Enlightenment License (e16)
MIT_advertising :: LicenseId

-- | <tt>MIT-CMU</tt>, CMU License
MIT_CMU :: LicenseId

-- | <tt>MIT-enna</tt>, enna License
MIT_enna :: LicenseId

-- | <tt>MIT-feh</tt>, feh License
MIT_feh :: LicenseId

-- | <tt>MIT-Festival</tt>, MIT Festival Variant, SPDX License List 3.23
MIT_Festival :: LicenseId

-- | <tt>MIT-Modern-Variant</tt>, MIT License Modern Variant, SPDX License
--   List 3.16, SPDX License List 3.23
MIT_Modern_Variant :: LicenseId

-- | <tt>MIT-open-group</tt>, MIT Open Group variant, SPDX License List
--   3.16, SPDX License List 3.23
MIT_open_group :: LicenseId

-- | <tt>MIT-testregex</tt>, MIT testregex Variant, SPDX License List 3.23
MIT_testregex :: LicenseId

-- | <tt>MIT-Wu</tt>, MIT Tom Wu Variant, SPDX License List 3.23
MIT_Wu :: LicenseId

-- | <tt>MITNFA</tt>, MIT +no-false-attribs license
MITNFA :: LicenseId

-- | <tt>MIT</tt>, MIT License
MIT :: LicenseId

-- | <tt>MMIXware</tt>, MMIXware License, SPDX License List 3.23
MMIXware :: LicenseId

-- | <tt>Motosoto</tt>, Motosoto License
Motosoto :: LicenseId

-- | <tt>MPEG-SSG</tt>, MPEG Software Simulation, SPDX License List 3.23
MPEG_SSG :: LicenseId

-- | <tt>mpi-permissive</tt>, mpi Permissive License, SPDX License List
--   3.23
Mpi_permissive :: LicenseId

-- | <tt>mpich2</tt>, mpich2 License
Mpich2 :: LicenseId

-- | <tt>MPL-1.0</tt>, Mozilla Public License 1.0
MPL_1_0 :: LicenseId

-- | <tt>MPL-1.1</tt>, Mozilla Public License 1.1
MPL_1_1 :: LicenseId

-- | <tt>MPL-2.0-no-copyleft-exception</tt>, Mozilla Public License 2.0 (no
--   copyleft exception)
MPL_2_0_no_copyleft_exception :: LicenseId

-- | <tt>MPL-2.0</tt>, Mozilla Public License 2.0
MPL_2_0 :: LicenseId

-- | <tt>mplus</tt>, mplus Font License, SPDX License List 3.23
Mplus :: LicenseId

-- | <tt>MS-LPL</tt>, Microsoft Limited Public License, SPDX License List
--   3.23
MS_LPL :: LicenseId

-- | <tt>MS-PL</tt>, Microsoft Public License
MS_PL :: LicenseId

-- | <tt>MS-RL</tt>, Microsoft Reciprocal License
MS_RL :: LicenseId

-- | <tt>MTLL</tt>, Matrix Template Library License
MTLL :: LicenseId

-- | <tt>MulanPSL-1.0</tt>, Mulan Permissive Software License, Version 1,
--   SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16,
--   SPDX License List 3.23
MulanPSL_1_0 :: LicenseId

-- | <tt>MulanPSL-2.0</tt>, Mulan Permissive Software License, Version 2,
--   SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16,
--   SPDX License List 3.23
MulanPSL_2_0 :: LicenseId

-- | <tt>Multics</tt>, Multics License
Multics :: LicenseId

-- | <tt>Mup</tt>, Mup License
Mup :: LicenseId

-- | <tt>NAIST-2003</tt>, Nara Institute of Science and Technology License
--   (2003), SPDX License List 3.16, SPDX License List 3.23
NAIST_2003 :: LicenseId

-- | <tt>NASA-1.3</tt>, NASA Open Source Agreement 1.3
NASA_1_3 :: LicenseId

-- | <tt>Naumen</tt>, Naumen Public License
Naumen :: LicenseId

-- | <tt>NBPL-1.0</tt>, Net Boolean Public License v1
NBPL_1_0 :: LicenseId

-- | <tt>NCGL-UK-2.0</tt>, Non-Commercial Government Licence, SPDX License
--   List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License
--   List 3.23
NCGL_UK_2_0 :: LicenseId

-- | <tt>NCSA</tt>, University of Illinois/NCSA Open Source License
NCSA :: LicenseId

-- | <tt>Net-SNMP</tt>, Net-SNMP License
Net_SNMP :: LicenseId

-- | <tt>NetCDF</tt>, NetCDF license
NetCDF :: LicenseId

-- | <tt>Newsletr</tt>, Newsletr License
Newsletr :: LicenseId

-- | <tt>NGPL</tt>, Nethack General Public License
NGPL :: LicenseId

-- | <tt>NICTA-1.0</tt>, NICTA Public Software License, Version 1.0, SPDX
--   License List 3.23
NICTA_1_0 :: LicenseId

-- | <tt>NIST-PD-fallback</tt>, NIST Public Domain Notice with license
--   fallback, SPDX License List 3.10, SPDX License List 3.16, SPDX License
--   List 3.23
NIST_PD_fallback :: LicenseId

-- | <tt>NIST-PD</tt>, NIST Public Domain Notice, SPDX License List 3.10,
--   SPDX License List 3.16, SPDX License List 3.23
NIST_PD :: LicenseId

-- | <tt>NIST-Software</tt>, NIST Software License, SPDX License List 3.23
NIST_Software :: LicenseId

-- | <tt>NLOD-1.0</tt>, Norwegian Licence for Open Government Data (NLOD)
--   1.0
NLOD_1_0 :: LicenseId

-- | <tt>NLOD-2.0</tt>, Norwegian Licence for Open Government Data (NLOD)
--   2.0, SPDX License List 3.16, SPDX License List 3.23
NLOD_2_0 :: LicenseId

-- | <tt>NLPL</tt>, No Limit Public License
NLPL :: LicenseId

-- | <tt>Nokia</tt>, Nokia Open Source License
Nokia :: LicenseId

-- | <tt>NOSL</tt>, Netizen Open Source License
NOSL :: LicenseId

-- | <tt>Noweb</tt>, Noweb License
Noweb :: LicenseId

-- | <tt>NPL-1.0</tt>, Netscape Public License v1.0
NPL_1_0 :: LicenseId

-- | <tt>NPL-1.1</tt>, Netscape Public License v1.1
NPL_1_1 :: LicenseId

-- | <tt>NPOSL-3.0</tt>, Non-Profit Open Software License 3.0
NPOSL_3_0 :: LicenseId

-- | <tt>NRL</tt>, NRL License
NRL :: LicenseId

-- | <tt>NTP-0</tt>, NTP No Attribution, SPDX License List 3.9, SPDX
--   License List 3.10, SPDX License List 3.16, SPDX License List 3.23
NTP_0 :: LicenseId

-- | <tt>NTP</tt>, NTP License
NTP :: LicenseId

-- | <tt>O-UDA-1.0</tt>, Open Use of Data Agreement v1.0, SPDX License List
--   3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List
--   3.23
O_UDA_1_0 :: LicenseId

-- | <tt>OCCT-PL</tt>, Open CASCADE Technology Public License
OCCT_PL :: LicenseId

-- | <tt>OCLC-2.0</tt>, OCLC Research Public License 2.0
OCLC_2_0 :: LicenseId

-- | <tt>ODbL-1.0</tt>, Open Data Commons Open Database License v1.0
ODbL_1_0 :: LicenseId

-- | <tt>ODC-By-1.0</tt>, Open Data Commons Attribution License v1.0, SPDX
--   License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX
--   License List 3.10, SPDX License List 3.16, SPDX License List 3.23
ODC_By_1_0 :: LicenseId

-- | <tt>OFFIS</tt>, OFFIS License, SPDX License List 3.23
OFFIS :: LicenseId

-- | <tt>OFL-1.0-no-RFN</tt>, SIL Open Font License 1.0 with no Reserved
--   Font Name, SPDX License List 3.9, SPDX License List 3.10, SPDX License
--   List 3.16, SPDX License List 3.23
OFL_1_0_no_RFN :: LicenseId

-- | <tt>OFL-1.0-RFN</tt>, SIL Open Font License 1.0 with Reserved Font
--   Name, SPDX License List 3.9, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
OFL_1_0_RFN :: LicenseId

-- | <tt>OFL-1.0</tt>, SIL Open Font License 1.0
OFL_1_0 :: LicenseId

-- | <tt>OFL-1.1-no-RFN</tt>, SIL Open Font License 1.1 with no Reserved
--   Font Name, SPDX License List 3.9, SPDX License List 3.10, SPDX License
--   List 3.16, SPDX License List 3.23
OFL_1_1_no_RFN :: LicenseId

-- | <tt>OFL-1.1-RFN</tt>, SIL Open Font License 1.1 with Reserved Font
--   Name, SPDX License List 3.9, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
OFL_1_1_RFN :: LicenseId

-- | <tt>OFL-1.1</tt>, SIL Open Font License 1.1
OFL_1_1 :: LicenseId

-- | <tt>OGC-1.0</tt>, OGC Software License, Version 1.0, SPDX License List
--   3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List
--   3.23
OGC_1_0 :: LicenseId

-- | <tt>OGDL-Taiwan-1.0</tt>, Taiwan Open Government Data License, version
--   1.0, SPDX License List 3.16, SPDX License List 3.23
OGDL_Taiwan_1_0 :: LicenseId

-- | <tt>OGL-Canada-2.0</tt>, Open Government Licence - Canada, SPDX
--   License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX
--   License List 3.23
OGL_Canada_2_0 :: LicenseId

-- | <tt>OGL-UK-1.0</tt>, Open Government Licence v1.0, SPDX License List
--   3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
OGL_UK_1_0 :: LicenseId

-- | <tt>OGL-UK-2.0</tt>, Open Government Licence v2.0, SPDX License List
--   3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
OGL_UK_2_0 :: LicenseId

-- | <tt>OGL-UK-3.0</tt>, Open Government Licence v3.0, SPDX License List
--   3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
OGL_UK_3_0 :: LicenseId

-- | <tt>OGTSL</tt>, Open Group Test Suite License
OGTSL :: LicenseId

-- | <tt>OLDAP-1.1</tt>, Open LDAP Public License v1.1
OLDAP_1_1 :: LicenseId

-- | <tt>OLDAP-1.2</tt>, Open LDAP Public License v1.2
OLDAP_1_2 :: LicenseId

-- | <tt>OLDAP-1.3</tt>, Open LDAP Public License v1.3
OLDAP_1_3 :: LicenseId

-- | <tt>OLDAP-1.4</tt>, Open LDAP Public License v1.4
OLDAP_1_4 :: LicenseId

-- | <tt>OLDAP-2.0.1</tt>, Open LDAP Public License v2.0.1
OLDAP_2_0_1 :: LicenseId

-- | <tt>OLDAP-2.0</tt>, Open LDAP Public License v2.0 (or possibly 2.0A
--   and 2.0B)
OLDAP_2_0 :: LicenseId

-- | <tt>OLDAP-2.1</tt>, Open LDAP Public License v2.1
OLDAP_2_1 :: LicenseId

-- | <tt>OLDAP-2.2.1</tt>, Open LDAP Public License v2.2.1
OLDAP_2_2_1 :: LicenseId

-- | <tt>OLDAP-2.2.2</tt>, Open LDAP Public License 2.2.2
OLDAP_2_2_2 :: LicenseId

-- | <tt>OLDAP-2.2</tt>, Open LDAP Public License v2.2
OLDAP_2_2 :: LicenseId

-- | <tt>OLDAP-2.3</tt>, Open LDAP Public License v2.3
OLDAP_2_3 :: LicenseId

-- | <tt>OLDAP-2.4</tt>, Open LDAP Public License v2.4
OLDAP_2_4 :: LicenseId

-- | <tt>OLDAP-2.5</tt>, Open LDAP Public License v2.5
OLDAP_2_5 :: LicenseId

-- | <tt>OLDAP-2.6</tt>, Open LDAP Public License v2.6
OLDAP_2_6 :: LicenseId

-- | <tt>OLDAP-2.7</tt>, Open LDAP Public License v2.7
OLDAP_2_7 :: LicenseId

-- | <tt>OLDAP-2.8</tt>, Open LDAP Public License v2.8
OLDAP_2_8 :: LicenseId

-- | <tt>OLFL-1.3</tt>, Open Logistics Foundation License Version 1.3, SPDX
--   License List 3.23
OLFL_1_3 :: LicenseId

-- | <tt>OML</tt>, Open Market License
OML :: LicenseId

-- | <tt>OpenPBS-2.3</tt>, OpenPBS v2.3 Software License, SPDX License List
--   3.23
OpenPBS_2_3 :: LicenseId

-- | <tt>OpenSSL-standalone</tt>, OpenSSL License - standalone, SPDX
--   License List 3.23
OpenSSL_standalone :: LicenseId

-- | <tt>OpenSSL</tt>, OpenSSL License
OpenSSL :: LicenseId

-- | <tt>OpenVision</tt>, OpenVision License, SPDX License List 3.23
OpenVision :: LicenseId

-- | <tt>OPL-1.0</tt>, Open Public License v1.0
OPL_1_0 :: LicenseId

-- | <tt>OPL-UK-3.0</tt>, United Kingdom Open Parliament Licence v3.0, SPDX
--   License List 3.23
OPL_UK_3_0 :: LicenseId

-- | <tt>OPUBL-1.0</tt>, Open Publication License v1.0, SPDX License List
--   3.16, SPDX License List 3.23
OPUBL_1_0 :: LicenseId

-- | <tt>OSET-PL-2.1</tt>, OSET Public License version 2.1
OSET_PL_2_1 :: LicenseId

-- | <tt>OSL-1.0</tt>, Open Software License 1.0
OSL_1_0 :: LicenseId

-- | <tt>OSL-1.1</tt>, Open Software License 1.1
OSL_1_1 :: LicenseId

-- | <tt>OSL-2.0</tt>, Open Software License 2.0
OSL_2_0 :: LicenseId

-- | <tt>OSL-2.1</tt>, Open Software License 2.1
OSL_2_1 :: LicenseId

-- | <tt>OSL-3.0</tt>, Open Software License 3.0
OSL_3_0 :: LicenseId

-- | <tt>PADL</tt>, PADL License, SPDX License List 3.23
PADL :: LicenseId

-- | <tt>Parity-6.0.0</tt>, The Parity Public License 6.0.0, SPDX License
--   List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License
--   List 3.16, SPDX License List 3.23
Parity_6_0_0 :: LicenseId

-- | <tt>Parity-7.0.0</tt>, The Parity Public License 7.0.0, SPDX License
--   List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License
--   List 3.23
Parity_7_0_0 :: LicenseId

-- | <tt>PDDL-1.0</tt>, Open Data Commons Public Domain Dedication &amp;
--   License 1.0
PDDL_1_0 :: LicenseId

-- | <tt>PHP-3.01</tt>, PHP License v3.01
PHP_3_01 :: LicenseId

-- | <tt>PHP-3.0</tt>, PHP License v3.0
PHP_3_0 :: LicenseId

-- | <tt>Pixar</tt>, Pixar License, SPDX License List 3.23
Pixar :: LicenseId

-- | <tt>Plexus</tt>, Plexus Classworlds License
Plexus :: LicenseId

-- | <tt>pnmstitch</tt>, pnmstitch License, SPDX License List 3.23
Pnmstitch :: LicenseId

-- | <tt>PolyForm-Noncommercial-1.0.0</tt>, PolyForm Noncommercial License
--   1.0.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License
--   List 3.16, SPDX License List 3.23
PolyForm_Noncommercial_1_0_0 :: LicenseId

-- | <tt>PolyForm-Small-Business-1.0.0</tt>, PolyForm Small Business
--   License 1.0.0, SPDX License List 3.9, SPDX License List 3.10, SPDX
--   License List 3.16, SPDX License List 3.23
PolyForm_Small_Business_1_0_0 :: LicenseId

-- | <tt>PostgreSQL</tt>, PostgreSQL License
PostgreSQL :: LicenseId

-- | <tt>PSF-2.0</tt>, Python Software Foundation License 2.0, SPDX License
--   List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License
--   List 3.23
PSF_2_0 :: LicenseId

-- | <tt>psfrag</tt>, psfrag License
Psfrag :: LicenseId

-- | <tt>psutils</tt>, psutils License
Psutils :: LicenseId

-- | <tt>Python-2.0.1</tt>, Python License 2.0.1, SPDX License List 3.23
Python_2_0_1 :: LicenseId

-- | <tt>Python-2.0</tt>, Python License 2.0
Python_2_0 :: LicenseId

-- | <tt>python-ldap</tt>, Python ldap License, SPDX License List 3.23
Python_ldap :: LicenseId

-- | <tt>Qhull</tt>, Qhull License
Qhull :: LicenseId

-- | <tt>QPL-1.0-INRIA-2004</tt>, Q Public License 1.0 - INRIA 2004
--   variant, SPDX License List 3.23
QPL_1_0_INRIA_2004 :: LicenseId

-- | <tt>QPL-1.0</tt>, Q Public License 1.0
QPL_1_0 :: LicenseId

-- | <tt>radvd</tt>, radvd License, SPDX License List 3.23
Radvd :: LicenseId

-- | <tt>Rdisc</tt>, Rdisc License
Rdisc :: LicenseId

-- | <tt>RHeCos-1.1</tt>, Red Hat eCos Public License v1.1
RHeCos_1_1 :: LicenseId

-- | <tt>RPL-1.1</tt>, Reciprocal Public License 1.1
RPL_1_1 :: LicenseId

-- | <tt>RPL-1.5</tt>, Reciprocal Public License 1.5
RPL_1_5 :: LicenseId

-- | <tt>RPSL-1.0</tt>, RealNetworks Public Source License v1.0
RPSL_1_0 :: LicenseId

-- | <tt>RSA-MD</tt>, RSA Message-Digest License
RSA_MD :: LicenseId

-- | <tt>RSCPL</tt>, Ricoh Source Code Public License
RSCPL :: LicenseId

-- | <tt>Ruby</tt>, Ruby License
Ruby :: LicenseId

-- | <tt>SAX-PD-2.0</tt>, Sax Public Domain Notice 2.0, SPDX License List
--   3.23
SAX_PD_2_0 :: LicenseId

-- | <tt>SAX-PD</tt>, Sax Public Domain Notice
SAX_PD :: LicenseId

-- | <tt>Saxpath</tt>, Saxpath License
Saxpath :: LicenseId

-- | <tt>SCEA</tt>, SCEA Shared Source License
SCEA :: LicenseId

-- | <tt>SchemeReport</tt>, Scheme Language Report License, SPDX License
--   List 3.16, SPDX License List 3.23
SchemeReport :: LicenseId

-- | <tt>Sendmail-8.23</tt>, Sendmail License 8.23, SPDX License List 3.6,
--   SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16,
--   SPDX License List 3.23
Sendmail_8_23 :: LicenseId

-- | <tt>Sendmail</tt>, Sendmail License
Sendmail :: LicenseId

-- | <tt>SGI-B-1.0</tt>, SGI Free Software License B v1.0
SGI_B_1_0 :: LicenseId

-- | <tt>SGI-B-1.1</tt>, SGI Free Software License B v1.1
SGI_B_1_1 :: LicenseId

-- | <tt>SGI-B-2.0</tt>, SGI Free Software License B v2.0
SGI_B_2_0 :: LicenseId

-- | <tt>SGI-OpenGL</tt>, SGI OpenGL License, SPDX License List 3.23
SGI_OpenGL :: LicenseId

-- | <tt>SGP4</tt>, SGP4 Permission Notice, SPDX License List 3.23
SGP4 :: LicenseId

-- | <tt>SHL-0.51</tt>, Solderpad Hardware License, Version 0.51, SPDX
--   License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX
--   License List 3.16, SPDX License List 3.23
SHL_0_51 :: LicenseId

-- | <tt>SHL-0.5</tt>, Solderpad Hardware License v0.5, SPDX License List
--   3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
SHL_0_5 :: LicenseId

-- | <tt>SimPL-2.0</tt>, Simple Public License 2.0
SimPL_2_0 :: LicenseId

-- | <tt>SISSL-1.2</tt>, Sun Industry Standards Source License v1.2
SISSL_1_2 :: LicenseId

-- | <tt>SISSL</tt>, Sun Industry Standards Source License v1.1
SISSL :: LicenseId

-- | <tt>Sleepycat</tt>, Sleepycat License
Sleepycat :: LicenseId

-- | <tt>SL</tt>, SL License, SPDX License List 3.23
SL :: LicenseId

-- | <tt>SMLNJ</tt>, Standard ML of New Jersey License
SMLNJ :: LicenseId

-- | <tt>SMPPL</tt>, Secure Messaging Protocol Public License
SMPPL :: LicenseId

-- | <tt>SNIA</tt>, SNIA Public License 1.1
SNIA :: LicenseId

-- | <tt>snprintf</tt>, snprintf License, SPDX License List 3.23
Snprintf :: LicenseId

-- | <tt>softSurfer</tt>, softSurfer License, SPDX License List 3.23
SoftSurfer :: LicenseId

-- | <tt>Soundex</tt>, Soundex License, SPDX License List 3.23
Soundex :: LicenseId

-- | <tt>Spencer-86</tt>, Spencer License 86
Spencer_86 :: LicenseId

-- | <tt>Spencer-94</tt>, Spencer License 94
Spencer_94 :: LicenseId

-- | <tt>Spencer-99</tt>, Spencer License 99
Spencer_99 :: LicenseId

-- | <tt>SPL-1.0</tt>, Sun Public License v1.0
SPL_1_0 :: LicenseId

-- | <tt>ssh-keyscan</tt>, ssh-keyscan License, SPDX License List 3.23
Ssh_keyscan :: LicenseId

-- | <tt>SSH-OpenSSH</tt>, SSH OpenSSH license, SPDX License List 3.9, SPDX
--   License List 3.10, SPDX License List 3.16, SPDX License List 3.23
SSH_OpenSSH :: LicenseId

-- | <tt>SSH-short</tt>, SSH short notice, SPDX License List 3.9, SPDX
--   License List 3.10, SPDX License List 3.16, SPDX License List 3.23
SSH_short :: LicenseId

-- | <tt>SSLeay-standalone</tt>, SSLeay License - standalone, SPDX License
--   List 3.23
SSLeay_standalone :: LicenseId

-- | <tt>SSPL-1.0</tt>, Server Side Public License, v 1, SPDX License List
--   3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
SSPL_1_0 :: LicenseId

-- | <tt>SugarCRM-1.1.3</tt>, SugarCRM Public License v1.1.3
SugarCRM_1_1_3 :: LicenseId

-- | <tt>Sun-PPP</tt>, Sun PPP License, SPDX License List 3.23
Sun_PPP :: LicenseId

-- | <tt>SunPro</tt>, SunPro License, SPDX License List 3.23
SunPro :: LicenseId

-- | <tt>SWL</tt>, Scheme Widget Library (SWL) Software License Agreement
SWL :: LicenseId

-- | <tt>swrule</tt>, swrule License, SPDX License List 3.23
Swrule :: LicenseId

-- | <tt>Symlinks</tt>, Symlinks License, SPDX License List 3.23
Symlinks :: LicenseId

-- | <tt>TAPR-OHL-1.0</tt>, TAPR Open Hardware License v1.0, SPDX License
--   List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License
--   List 3.16, SPDX License List 3.23
TAPR_OHL_1_0 :: LicenseId

-- | <tt>TCL</tt>, TCL/TK License
TCL :: LicenseId

-- | <tt>TCP-wrappers</tt>, TCP Wrappers License
TCP_wrappers :: LicenseId

-- | <tt>TermReadKey</tt>, TermReadKey License, SPDX License List 3.23
TermReadKey :: LicenseId

-- | <tt>TGPPL-1.0</tt>, Transitive Grace Period Public Licence 1.0, SPDX
--   License List 3.23
TGPPL_1_0 :: LicenseId

-- | <tt>TMate</tt>, TMate Open Source License
TMate :: LicenseId

-- | <tt>TORQUE-1.1</tt>, TORQUE v2.5+ Software License v1.1
TORQUE_1_1 :: LicenseId

-- | <tt>TOSL</tt>, Trusster Open Source License
TOSL :: LicenseId

-- | <tt>TPDL</tt>, Time::ParseDate License, SPDX License List 3.23
TPDL :: LicenseId

-- | <tt>TPL-1.0</tt>, THOR Public License 1.0, SPDX License List 3.23
TPL_1_0 :: LicenseId

-- | <tt>TTWL</tt>, Text-Tabs+Wrap License, SPDX License List 3.23
TTWL :: LicenseId

-- | <tt>TTYP0</tt>, TTYP0 License, SPDX License List 3.23
TTYP0 :: LicenseId

-- | <tt>TU-Berlin-1.0</tt>, Technische Universitaet Berlin License 1.0,
--   SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9,
--   SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23
TU_Berlin_1_0 :: LicenseId

-- | <tt>TU-Berlin-2.0</tt>, Technische Universitaet Berlin License 2.0,
--   SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9,
--   SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23
TU_Berlin_2_0 :: LicenseId

-- | <tt>UCAR</tt>, UCAR License, SPDX License List 3.23
UCAR :: LicenseId

-- | <tt>UCL-1.0</tt>, Upstream Compatibility License v1.0, SPDX License
--   List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License
--   List 3.23
UCL_1_0 :: LicenseId

-- | <tt>ulem</tt>, ulem License, SPDX License List 3.23
Ulem :: LicenseId

-- | <tt>UMich-Merit</tt>, Michigan/Merit Networks License, SPDX License
--   List 3.23
UMich_Merit :: LicenseId

-- | <tt>Unicode-3.0</tt>, Unicode License v3, SPDX License List 3.23
Unicode_3_0 :: LicenseId

-- | <tt>Unicode-DFS-2015</tt>, Unicode License Agreement - Data Files and
--   Software (2015)
Unicode_DFS_2015 :: LicenseId

-- | <tt>Unicode-DFS-2016</tt>, Unicode License Agreement - Data Files and
--   Software (2016)
Unicode_DFS_2016 :: LicenseId

-- | <tt>Unicode-TOU</tt>, Unicode Terms of Use
Unicode_TOU :: LicenseId

-- | <tt>UnixCrypt</tt>, UnixCrypt License, SPDX License List 3.23
UnixCrypt :: LicenseId

-- | <tt>Unlicense</tt>, The Unlicense
Unlicense :: LicenseId

-- | <tt>UPL-1.0</tt>, Universal Permissive License v1.0
UPL_1_0 :: LicenseId

-- | <tt>URT-RLE</tt>, Utah Raster Toolkit Run Length Encoded License, SPDX
--   License List 3.23
URT_RLE :: LicenseId

-- | <tt>Vim</tt>, Vim License
Vim :: LicenseId

-- | <tt>VOSTROM</tt>, VOSTROM Public License for Open Source
VOSTROM :: LicenseId

-- | <tt>VSL-1.0</tt>, Vovida Software License v1.0
VSL_1_0 :: LicenseId

-- | <tt>W3C-19980720</tt>, W3C Software Notice and License (1998-07-20)
W3C_19980720 :: LicenseId

-- | <tt>W3C-20150513</tt>, W3C Software Notice and Document License
--   (2015-05-13)
W3C_20150513 :: LicenseId

-- | <tt>W3C</tt>, W3C Software Notice and License (2002-12-31)
W3C :: LicenseId

-- | <tt>w3m</tt>, w3m License, SPDX License List 3.23
W3m :: LicenseId

-- | <tt>Watcom-1.0</tt>, Sybase Open Watcom Public License 1.0
Watcom_1_0 :: LicenseId

-- | <tt>Widget-Workshop</tt>, Widget Workshop License, SPDX License List
--   3.23
Widget_Workshop :: LicenseId

-- | <tt>Wsuipa</tt>, Wsuipa License
Wsuipa :: LicenseId

-- | <tt>WTFPL</tt>, Do What The F*ck You Want To Public License
WTFPL :: LicenseId

-- | <tt>X11-distribute-modifications-variant</tt>, X11 License
--   Distribution Modification Variant, SPDX License List 3.16, SPDX
--   License List 3.23
X11_distribute_modifications_variant :: LicenseId

-- | <tt>X11</tt>, X11 License
X11 :: LicenseId

-- | <tt>Xdebug-1.03</tt>, Xdebug License v 1.03, SPDX License List 3.23
Xdebug_1_03 :: LicenseId

-- | <tt>Xerox</tt>, Xerox License
Xerox :: LicenseId

-- | <tt>Xfig</tt>, Xfig License, SPDX License List 3.23
Xfig :: LicenseId

-- | <tt>XFree86-1.1</tt>, XFree86 License 1.1
XFree86_1_1 :: LicenseId

-- | <tt>xinetd</tt>, xinetd License
Xinetd :: LicenseId

-- | <tt>xkeyboard-config-Zinoviev</tt>, xkeyboard-config Zinoviev License,
--   SPDX License List 3.23
Xkeyboard_config_Zinoviev :: LicenseId

-- | <tt>xlock</tt>, xlock License, SPDX License List 3.23
Xlock :: LicenseId

-- | <tt>Xnet</tt>, X.Net License
Xnet :: LicenseId

-- | <tt>xpp</tt>, XPP License
Xpp :: LicenseId

-- | <tt>XSkat</tt>, XSkat License
XSkat :: LicenseId

-- | <tt>YPL-1.0</tt>, Yahoo! Public License v1.0
YPL_1_0 :: LicenseId

-- | <tt>YPL-1.1</tt>, Yahoo! Public License v1.1
YPL_1_1 :: LicenseId

-- | <tt>Zed</tt>, Zed License
Zed :: LicenseId

-- | <tt>Zeeff</tt>, Zeeff License, SPDX License List 3.23
Zeeff :: LicenseId

-- | <tt>Zend-2.0</tt>, Zend License v2.0
Zend_2_0 :: LicenseId

-- | <tt>Zimbra-1.3</tt>, Zimbra Public License v1.3
Zimbra_1_3 :: LicenseId

-- | <tt>Zimbra-1.4</tt>, Zimbra Public License v1.4
Zimbra_1_4 :: LicenseId

-- | <tt>zlib-acknowledgement</tt>, zlib/libpng License with
--   Acknowledgement
Zlib_acknowledgement :: LicenseId

-- | <tt>Zlib</tt>, zlib License
Zlib :: LicenseId

-- | <tt>ZPL-1.1</tt>, Zope Public License 1.1
ZPL_1_1 :: LicenseId

-- | <tt>ZPL-2.0</tt>, Zope Public License 2.0
ZPL_2_0 :: LicenseId

-- | <tt>ZPL-2.1</tt>, Zope Public License 2.1
ZPL_2_1 :: LicenseId

-- | License SPDX identifier, e.g. <tt>"BSD-3-Clause"</tt>.
licenseId :: LicenseId -> String

-- | License name, e.g. <tt>"GNU General Public License v2.0 only"</tt>
licenseName :: LicenseId -> String

-- | Whether the license is approved by Open Source Initiative (OSI).
--   
--   See <a>https://opensource.org/licenses/alphabetical</a>.
licenseIsOsiApproved :: LicenseId -> Bool

-- | Whether the license is considered libre by Free Software Foundation
--   (FSF).
--   
--   See <a>https://www.gnu.org/licenses/license-list.en.html</a>
licenseIsFsfLibre :: LicenseId -> Bool

-- | Create a <a>LicenseId</a> from a <a>String</a>.
mkLicenseId :: LicenseListVersion -> String -> Maybe LicenseId
licenseIdList :: LicenseListVersion -> [LicenseId]

-- | Help message for migrating from non-SPDX license identifiers.
--   
--   Old <tt>License</tt> is almost SPDX, except for <tt>BSD2</tt>,
--   <tt>BSD3</tt>. This function suggests SPDX variant:
--   
--   <pre>
--   &gt;&gt;&gt; licenseIdMigrationMessage "BSD3"
--   "Do you mean BSD-3-Clause?"
--   </pre>
--   
--   Also <tt>OtherLicense</tt>, <tt>AllRightsReserved</tt>, and
--   <tt>PublicDomain</tt> aren't valid SPDX identifiers
--   
--   <pre>
--   &gt;&gt;&gt; traverse_ (print . licenseIdMigrationMessage) [ "OtherLicense", "AllRightsReserved", "PublicDomain" ]
--   "SPDX license list contains plenty of licenses. See https://spdx.org/licenses/. Also they can be combined into complex expressions with AND and OR."
--   "You can use NONE as a value of license field."
--   "Public Domain is a complex matter. See https://wiki.spdx.org/view/Legal_Team/Decisions/Dealing_with_Public_Domain_within_SPDX_Files. Consider using a proper license."
--   </pre>
--   
--   SPDX License list version 3.0 introduced "-only" and "-or-later"
--   variants for GNU family of licenses. See
--   <a>https://spdx.org/news/news/2018/01/license-list-30-released</a>
--   &gt;&gt;&gt; licenseIdMigrationMessage "GPL-2.0" "SPDX license list
--   3.0 deprecated suffixless variants of GNU family of licenses. Use
--   GPL-2.0-only or GPL-2.0-or-later."
--   
--   For other common licenses their old license format coincides with the
--   SPDX identifiers:
--   
--   <pre>
--   &gt;&gt;&gt; traverse eitherParsec ["GPL-2.0-only", "GPL-3.0-only", "LGPL-2.1-only", "MIT", "ISC", "MPL-2.0", "Apache-2.0"] :: Either String [LicenseId]
--   Right [GPL_2_0_only,GPL_3_0_only,LGPL_2_1_only,MIT,ISC,MPL_2_0,Apache_2_0]
--   </pre>
licenseIdMigrationMessage :: String -> String
instance Data.Binary.Class.Binary Distribution.SPDX.LicenseId.LicenseId
instance GHC.Internal.Enum.Bounded Distribution.SPDX.LicenseId.LicenseId
instance GHC.Internal.Data.Data.Data Distribution.SPDX.LicenseId.LicenseId
instance GHC.Internal.Enum.Enum Distribution.SPDX.LicenseId.LicenseId
instance GHC.Classes.Eq Distribution.SPDX.LicenseId.LicenseId
instance Control.DeepSeq.NFData Distribution.SPDX.LicenseId.LicenseId
instance GHC.Classes.Ord Distribution.SPDX.LicenseId.LicenseId
instance Distribution.Parsec.Parsec Distribution.SPDX.LicenseId.LicenseId
instance Distribution.Pretty.Pretty Distribution.SPDX.LicenseId.LicenseId
instance GHC.Internal.Read.Read Distribution.SPDX.LicenseId.LicenseId
instance GHC.Internal.Show.Show Distribution.SPDX.LicenseId.LicenseId
instance Distribution.Utils.Structured.Structured Distribution.SPDX.LicenseId.LicenseId

module Distribution.SPDX.LicenseExceptionId

-- | SPDX License Exceptions identifiers list v3.23
data LicenseExceptionId

-- | <tt>389-exception</tt>, 389 Directory Server Exception
DS389_exception :: LicenseExceptionId

-- | <tt>Asterisk-exception</tt>, Asterisk exception, SPDX License List
--   3.23
Asterisk_exception :: LicenseExceptionId

-- | <tt>Autoconf-exception-2.0</tt>, Autoconf exception 2.0
Autoconf_exception_2_0 :: LicenseExceptionId

-- | <tt>Autoconf-exception-3.0</tt>, Autoconf exception 3.0
Autoconf_exception_3_0 :: LicenseExceptionId

-- | <tt>Autoconf-exception-generic-3.0</tt>, Autoconf generic exception
--   for GPL-3.0, SPDX License List 3.23
Autoconf_exception_generic_3_0 :: LicenseExceptionId

-- | <tt>Autoconf-exception-generic</tt>, Autoconf generic exception, SPDX
--   License List 3.23
Autoconf_exception_generic :: LicenseExceptionId

-- | <tt>Autoconf-exception-macro</tt>, Autoconf macro exception, SPDX
--   License List 3.23
Autoconf_exception_macro :: LicenseExceptionId

-- | <tt>Bison-exception-1.24</tt>, Bison exception 1.24, SPDX License List
--   3.23
Bison_exception_1_24 :: LicenseExceptionId

-- | <tt>Bison-exception-2.2</tt>, Bison exception 2.2
Bison_exception_2_2 :: LicenseExceptionId

-- | <tt>Bootloader-exception</tt>, Bootloader Distribution Exception
Bootloader_exception :: LicenseExceptionId

-- | <tt>Classpath-exception-2.0</tt>, Classpath exception 2.0
Classpath_exception_2_0 :: LicenseExceptionId

-- | <tt>CLISP-exception-2.0</tt>, CLISP exception 2.0
CLISP_exception_2_0 :: LicenseExceptionId

-- | <tt>cryptsetup-OpenSSL-exception</tt>, cryptsetup OpenSSL exception,
--   SPDX License List 3.23
Cryptsetup_OpenSSL_exception :: LicenseExceptionId

-- | <tt>DigiRule-FOSS-exception</tt>, DigiRule FOSS License Exception
DigiRule_FOSS_exception :: LicenseExceptionId

-- | <tt>eCos-exception-2.0</tt>, eCos exception 2.0
ECos_exception_2_0 :: LicenseExceptionId

-- | <tt>Fawkes-Runtime-exception</tt>, Fawkes Runtime Exception
Fawkes_Runtime_exception :: LicenseExceptionId

-- | <tt>FLTK-exception</tt>, FLTK exception
FLTK_exception :: LicenseExceptionId

-- | <tt>fmt-exception</tt>, fmt exception, SPDX License List 3.23
Fmt_exception :: LicenseExceptionId

-- | <tt>Font-exception-2.0</tt>, Font exception 2.0
Font_exception_2_0 :: LicenseExceptionId

-- | <tt>freertos-exception-2.0</tt>, FreeRTOS Exception 2.0
Freertos_exception_2_0 :: LicenseExceptionId

-- | <tt>GCC-exception-2.0-note</tt>, GCC Runtime Library exception 2.0 -
--   note variant, SPDX License List 3.23
GCC_exception_2_0_note :: LicenseExceptionId

-- | <tt>GCC-exception-2.0</tt>, GCC Runtime Library exception 2.0
GCC_exception_2_0 :: LicenseExceptionId

-- | <tt>GCC-exception-3.1</tt>, GCC Runtime Library exception 3.1
GCC_exception_3_1 :: LicenseExceptionId

-- | <tt>Gmsh-exception</tt>, Gmsh exception&gt;, SPDX License List 3.23
Gmsh_exception :: LicenseExceptionId

-- | <tt>GNAT-exception</tt>, GNAT exception, SPDX License List 3.23
GNAT_exception :: LicenseExceptionId

-- | <tt>GNOME-examples-exception</tt>, GNOME examples exception, SPDX
--   License List 3.23
GNOME_examples_exception :: LicenseExceptionId

-- | <tt>GNU-compiler-exception</tt>, GNU Compiler Exception, SPDX License
--   List 3.23
GNU_compiler_exception :: LicenseExceptionId

-- | <tt>gnu-javamail-exception</tt>, GNU JavaMail exception
Gnu_javamail_exception :: LicenseExceptionId

-- | <tt>GPL-3.0-interface-exception</tt>, GPL-3.0 Interface Exception,
--   SPDX License List 3.23
GPL_3_0_interface_exception :: LicenseExceptionId

-- | <tt>GPL-3.0-linking-exception</tt>, GPL-3.0 Linking Exception, SPDX
--   License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX
--   License List 3.23
GPL_3_0_linking_exception :: LicenseExceptionId

-- | <tt>GPL-3.0-linking-source-exception</tt>, GPL-3.0 Linking Exception
--   (with Corresponding Source), SPDX License List 3.9, SPDX License List
--   3.10, SPDX License List 3.16, SPDX License List 3.23
GPL_3_0_linking_source_exception :: LicenseExceptionId

-- | <tt>GPL-CC-1.0</tt>, GPL Cooperation Commitment 1.0, SPDX License List
--   3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
GPL_CC_1_0 :: LicenseExceptionId

-- | <tt>GStreamer-exception-2005</tt>, GStreamer Exception (2005), SPDX
--   License List 3.23
GStreamer_exception_2005 :: LicenseExceptionId

-- | <tt>GStreamer-exception-2008</tt>, GStreamer Exception (2008), SPDX
--   License List 3.23
GStreamer_exception_2008 :: LicenseExceptionId

-- | <tt>i2p-gpl-java-exception</tt>, i2p GPL+Java Exception
I2p_gpl_java_exception :: LicenseExceptionId

-- | <tt>KiCad-libraries-exception</tt>, KiCad Libraries Exception, SPDX
--   License List 3.23
KiCad_libraries_exception :: LicenseExceptionId

-- | <tt>LGPL-3.0-linking-exception</tt>, LGPL-3.0 Linking Exception, SPDX
--   License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX
--   License List 3.23
LGPL_3_0_linking_exception :: LicenseExceptionId

-- | <tt>libpri-OpenH323-exception</tt>, libpri OpenH323 exception, SPDX
--   License List 3.23
Libpri_OpenH323_exception :: LicenseExceptionId

-- | <tt>Libtool-exception</tt>, Libtool Exception
Libtool_exception :: LicenseExceptionId

-- | <tt>Linux-syscall-note</tt>, Linux Syscall Note
Linux_syscall_note :: LicenseExceptionId

-- | <tt>LLGPL</tt>, LLGPL Preamble, SPDX License List 3.23
LLGPL :: LicenseExceptionId

-- | <tt>LLVM-exception</tt>, LLVM Exception, SPDX License List 3.2, SPDX
--   License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX
--   License List 3.16, SPDX License List 3.23
LLVM_exception :: LicenseExceptionId

-- | <tt>LZMA-exception</tt>, LZMA exception
LZMA_exception :: LicenseExceptionId

-- | <tt>mif-exception</tt>, Macros and Inline Functions Exception
Mif_exception :: LicenseExceptionId

-- | <tt>Nokia-Qt-exception-1.1</tt>, Nokia Qt LGPL exception 1.1, SPDX
--   License List 3.0, SPDX License List 3.2
Nokia_Qt_exception_1_1 :: LicenseExceptionId

-- | <tt>OCaml-LGPL-linking-exception</tt>, OCaml LGPL Linking Exception,
--   SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10,
--   SPDX License List 3.16, SPDX License List 3.23
OCaml_LGPL_linking_exception :: LicenseExceptionId

-- | <tt>OCCT-exception-1.0</tt>, Open CASCADE Exception 1.0
OCCT_exception_1_0 :: LicenseExceptionId

-- | <tt>OpenJDK-assembly-exception-1.0</tt>, OpenJDK Assembly exception
--   1.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License List
--   3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List
--   3.23
OpenJDK_assembly_exception_1_0 :: LicenseExceptionId

-- | <tt>openvpn-openssl-exception</tt>, OpenVPN OpenSSL Exception
Openvpn_openssl_exception :: LicenseExceptionId

-- | <tt>PS-or-PDF-font-exception-20170817</tt>, PS/PDF font exception
--   (2017-08-17), SPDX License List 3.2, SPDX License List 3.6, SPDX
--   License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX
--   License List 3.23
PS_or_PDF_font_exception_20170817 :: LicenseExceptionId

-- | <tt>QPL-1.0-INRIA-2004-exception</tt>, INRIA QPL 1.0 2004 variant
--   exception, SPDX License List 3.23
QPL_1_0_INRIA_2004_exception :: LicenseExceptionId

-- | <tt>Qt-GPL-exception-1.0</tt>, Qt GPL exception 1.0, SPDX License List
--   3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List
--   3.10, SPDX License List 3.16, SPDX License List 3.23
Qt_GPL_exception_1_0 :: LicenseExceptionId

-- | <tt>Qt-LGPL-exception-1.1</tt>, Qt LGPL exception 1.1, SPDX License
--   List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License
--   List 3.10, SPDX License List 3.16, SPDX License List 3.23
Qt_LGPL_exception_1_1 :: LicenseExceptionId

-- | <tt>Qwt-exception-1.0</tt>, Qwt exception 1.0
Qwt_exception_1_0 :: LicenseExceptionId

-- | <tt>SANE-exception</tt>, SANE Exception, SPDX License List 3.23
SANE_exception :: LicenseExceptionId

-- | <tt>SHL-2.0</tt>, Solderpad Hardware License v2.0, SPDX License List
--   3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List
--   3.23
SHL_2_0 :: LicenseExceptionId

-- | <tt>SHL-2.1</tt>, Solderpad Hardware License v2.1, SPDX License List
--   3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List
--   3.23
SHL_2_1 :: LicenseExceptionId

-- | <tt>stunnel-exception</tt>, stunnel Exception, SPDX License List 3.23
Stunnel_exception :: LicenseExceptionId

-- | <tt>SWI-exception</tt>, SWI exception, SPDX License List 3.23
SWI_exception :: LicenseExceptionId

-- | <tt>Swift-exception</tt>, Swift Exception, SPDX License List 3.6, SPDX
--   License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX
--   License List 3.23
Swift_exception :: LicenseExceptionId

-- | <tt>Texinfo-exception</tt>, Texinfo exception, SPDX License List 3.23
Texinfo_exception :: LicenseExceptionId

-- | <tt>u-boot-exception-2.0</tt>, U-Boot exception 2.0
U_boot_exception_2_0 :: LicenseExceptionId

-- | <tt>UBDL-exception</tt>, Unmodified Binary Distribution exception,
--   SPDX License List 3.23
UBDL_exception :: LicenseExceptionId

-- | <tt>Universal-FOSS-exception-1.0</tt>, Universal FOSS Exception,
--   Version 1.0, SPDX License List 3.6, SPDX License List 3.9, SPDX
--   License List 3.10, SPDX License List 3.16, SPDX License List 3.23
Universal_FOSS_exception_1_0 :: LicenseExceptionId

-- | <tt>vsftpd-openssl-exception</tt>, vsftpd OpenSSL exception, SPDX
--   License List 3.23
Vsftpd_openssl_exception :: LicenseExceptionId

-- | <tt>WxWindows-exception-3.1</tt>, WxWindows Library Exception 3.1
WxWindows_exception_3_1 :: LicenseExceptionId

-- | <tt>x11vnc-openssl-exception</tt>, x11vnc OpenSSL Exception, SPDX
--   License List 3.23
X11vnc_openssl_exception :: LicenseExceptionId

-- | License SPDX identifier, e.g. <tt>"BSD-3-Clause"</tt>.
licenseExceptionId :: LicenseExceptionId -> String

-- | License name, e.g. <tt>"GNU General Public License v2.0 only"</tt>
licenseExceptionName :: LicenseExceptionId -> String

-- | Create a <a>LicenseExceptionId</a> from a <a>String</a>.
mkLicenseExceptionId :: LicenseListVersion -> String -> Maybe LicenseExceptionId
licenseExceptionIdList :: LicenseListVersion -> [LicenseExceptionId]
instance Data.Binary.Class.Binary Distribution.SPDX.LicenseExceptionId.LicenseExceptionId
instance GHC.Internal.Enum.Bounded Distribution.SPDX.LicenseExceptionId.LicenseExceptionId
instance GHC.Internal.Data.Data.Data Distribution.SPDX.LicenseExceptionId.LicenseExceptionId
instance GHC.Internal.Enum.Enum Distribution.SPDX.LicenseExceptionId.LicenseExceptionId
instance GHC.Classes.Eq Distribution.SPDX.LicenseExceptionId.LicenseExceptionId
instance GHC.Internal.Generics.Generic Distribution.SPDX.LicenseExceptionId.LicenseExceptionId
instance Control.DeepSeq.NFData Distribution.SPDX.LicenseExceptionId.LicenseExceptionId
instance GHC.Classes.Ord Distribution.SPDX.LicenseExceptionId.LicenseExceptionId
instance Distribution.Parsec.Parsec Distribution.SPDX.LicenseExceptionId.LicenseExceptionId
instance Distribution.Pretty.Pretty Distribution.SPDX.LicenseExceptionId.LicenseExceptionId
instance GHC.Internal.Read.Read Distribution.SPDX.LicenseExceptionId.LicenseExceptionId
instance GHC.Internal.Show.Show Distribution.SPDX.LicenseExceptionId.LicenseExceptionId
instance Distribution.Utils.Structured.Structured Distribution.SPDX.LicenseExceptionId.LicenseExceptionId

module Distribution.SPDX.LicenseExpression

-- | SPDX License Expression.
--   
--   <pre>
--   idstring              = 1*(ALPHA / DIGIT / "-" / "." )
--   license id            = &lt;short form license identifier inAppendix I.1&gt;
--   license exception id  = &lt;short form license exception identifier inAppendix I.2&gt;
--   license ref           = ["DocumentRef-"1*(idstring)":"]"LicenseRef-"1*(idstring)
--   
--   simple expression     = license id / license id"+" / license ref
--   
--   compound expression   = 1*1(simple expression /
--                           simple expression "WITH" license exception id /
--                           compound expression "AND" compound expression /
--                           compound expression "OR" compound expression ) /
--                           "(" compound expression ")" )
--   
--   license expression    = 1*1(simple expression / compound expression)
--   </pre>
data LicenseExpression
ELicense :: !SimpleLicenseExpression -> !Maybe LicenseExceptionId -> LicenseExpression
EAnd :: !LicenseExpression -> !LicenseExpression -> LicenseExpression
EOr :: !LicenseExpression -> !LicenseExpression -> LicenseExpression

-- | Simple License Expressions.
data SimpleLicenseExpression

-- | An SPDX License List Short Form Identifier. For example:
--   <tt>GPL-2.0-only</tt>
ELicenseId :: LicenseId -> SimpleLicenseExpression

-- | An SPDX License List Short Form Identifier with a unary"+" operator
--   suffix to represent the current version of the license or any later
--   version. For example: <tt>GPL-2.0+</tt>
ELicenseIdPlus :: LicenseId -> SimpleLicenseExpression

-- | A SPDX user defined license reference: For example:
--   <tt>LicenseRef-23</tt>, <tt>LicenseRef-MIT-Style-1</tt>, or
--   <tt>DocumentRef-spdx-tool-1.2:LicenseRef-MIT-Style-2</tt>
ELicenseRef :: LicenseRef -> SimpleLicenseExpression
simpleLicenseExpression :: LicenseId -> LicenseExpression
instance Data.Binary.Class.Binary Distribution.SPDX.LicenseExpression.LicenseExpression
instance Data.Binary.Class.Binary Distribution.SPDX.LicenseExpression.SimpleLicenseExpression
instance GHC.Internal.Data.Data.Data Distribution.SPDX.LicenseExpression.LicenseExpression
instance GHC.Internal.Data.Data.Data Distribution.SPDX.LicenseExpression.SimpleLicenseExpression
instance GHC.Classes.Eq Distribution.SPDX.LicenseExpression.LicenseExpression
instance GHC.Classes.Eq Distribution.SPDX.LicenseExpression.SimpleLicenseExpression
instance GHC.Internal.Generics.Generic Distribution.SPDX.LicenseExpression.LicenseExpression
instance GHC.Internal.Generics.Generic Distribution.SPDX.LicenseExpression.SimpleLicenseExpression
instance Control.DeepSeq.NFData Distribution.SPDX.LicenseExpression.LicenseExpression
instance Control.DeepSeq.NFData Distribution.SPDX.LicenseExpression.SimpleLicenseExpression
instance GHC.Classes.Ord Distribution.SPDX.LicenseExpression.LicenseExpression
instance GHC.Classes.Ord Distribution.SPDX.LicenseExpression.SimpleLicenseExpression
instance Distribution.Parsec.Parsec Distribution.SPDX.LicenseExpression.LicenseExpression
instance Distribution.Parsec.Parsec Distribution.SPDX.LicenseExpression.SimpleLicenseExpression
instance Distribution.Pretty.Pretty Distribution.SPDX.LicenseExpression.LicenseExpression
instance Distribution.Pretty.Pretty Distribution.SPDX.LicenseExpression.SimpleLicenseExpression
instance GHC.Internal.Read.Read Distribution.SPDX.LicenseExpression.LicenseExpression
instance GHC.Internal.Read.Read Distribution.SPDX.LicenseExpression.SimpleLicenseExpression
instance GHC.Internal.Show.Show Distribution.SPDX.LicenseExpression.LicenseExpression
instance GHC.Internal.Show.Show Distribution.SPDX.LicenseExpression.SimpleLicenseExpression
instance Distribution.Utils.Structured.Structured Distribution.SPDX.LicenseExpression.LicenseExpression
instance Distribution.Utils.Structured.Structured Distribution.SPDX.LicenseExpression.SimpleLicenseExpression

module Distribution.SPDX.License

-- | Declared license. See <a>section 3.15 of SPDX Specification 2.1</a>
--   
--   <i>Note:</i> the NOASSERTION case is omitted.
--   
--   Old <a>License</a> can be migrated using following rules:
--   
--   <ul>
--   <li><tt>AllRightsReserved</tt> and <tt>UnspecifiedLicense</tt> to
--   <a>NONE</a>. No license specified which legally defaults to <i>All
--   Rights Reserved</i>. The package may not be legally modified or
--   redistributed by anyone but the rightsholder.</li>
--   <li><tt>OtherLicense</tt> can be converted to <tt>LicenseRef</tt>
--   pointing to the file in the package.</li>
--   <li><tt>UnknownLicense</tt> i.e. other licenses of the form
--   <tt>name-x.y</tt>, should be covered by SPDX license list, otherwise
--   use <tt>LicenseRef</tt>.</li>
--   <li><tt>PublicDomain</tt> isn't covered. Consider using CC0. See
--   <a>https://wiki.spdx.org/view/Legal_Team/Decisions/Dealing_with_Public_Domain_within_SPDX_Files</a>
--   for more information.</li>
--   </ul>
data License

-- | if the package contains no license information whatsoever; or
NONE :: License

-- | A valid SPDX License Expression as defined in Appendix IV.
License :: LicenseExpression -> License
instance Data.Binary.Class.Binary Distribution.SPDX.License.License
instance GHC.Internal.Data.Data.Data Distribution.SPDX.License.License
instance GHC.Classes.Eq Distribution.SPDX.License.License
instance GHC.Internal.Generics.Generic Distribution.SPDX.License.License
instance Control.DeepSeq.NFData Distribution.SPDX.License.License
instance GHC.Classes.Ord Distribution.SPDX.License.License
instance Distribution.Parsec.Parsec Distribution.SPDX.License.License
instance Distribution.Pretty.Pretty Distribution.SPDX.License.License
instance GHC.Internal.Read.Read Distribution.SPDX.License.License
instance GHC.Internal.Show.Show Distribution.SPDX.License.License
instance Distribution.Utils.Structured.Structured Distribution.SPDX.License.License


-- | This module implements SPDX specification version 2.1 with a version
--   3.0 license list.
--   
--   Specification is available on <a>https://spdx.org/specifications</a>
module Distribution.SPDX

-- | Declared license. See <a>section 3.15 of SPDX Specification 2.1</a>
--   
--   <i>Note:</i> the NOASSERTION case is omitted.
--   
--   Old <a>License</a> can be migrated using following rules:
--   
--   <ul>
--   <li><tt>AllRightsReserved</tt> and <tt>UnspecifiedLicense</tt> to
--   <a>NONE</a>. No license specified which legally defaults to <i>All
--   Rights Reserved</i>. The package may not be legally modified or
--   redistributed by anyone but the rightsholder.</li>
--   <li><tt>OtherLicense</tt> can be converted to <tt>LicenseRef</tt>
--   pointing to the file in the package.</li>
--   <li><tt>UnknownLicense</tt> i.e. other licenses of the form
--   <tt>name-x.y</tt>, should be covered by SPDX license list, otherwise
--   use <tt>LicenseRef</tt>.</li>
--   <li><tt>PublicDomain</tt> isn't covered. Consider using CC0. See
--   <a>https://wiki.spdx.org/view/Legal_Team/Decisions/Dealing_with_Public_Domain_within_SPDX_Files</a>
--   for more information.</li>
--   </ul>
data License

-- | if the package contains no license information whatsoever; or
NONE :: License

-- | A valid SPDX License Expression as defined in Appendix IV.
License :: LicenseExpression -> License

-- | SPDX License Expression.
--   
--   <pre>
--   idstring              = 1*(ALPHA / DIGIT / "-" / "." )
--   license id            = &lt;short form license identifier inAppendix I.1&gt;
--   license exception id  = &lt;short form license exception identifier inAppendix I.2&gt;
--   license ref           = ["DocumentRef-"1*(idstring)":"]"LicenseRef-"1*(idstring)
--   
--   simple expression     = license id / license id"+" / license ref
--   
--   compound expression   = 1*1(simple expression /
--                           simple expression "WITH" license exception id /
--                           compound expression "AND" compound expression /
--                           compound expression "OR" compound expression ) /
--                           "(" compound expression ")" )
--   
--   license expression    = 1*1(simple expression / compound expression)
--   </pre>
data LicenseExpression
ELicense :: !SimpleLicenseExpression -> !Maybe LicenseExceptionId -> LicenseExpression
EAnd :: !LicenseExpression -> !LicenseExpression -> LicenseExpression
EOr :: !LicenseExpression -> !LicenseExpression -> LicenseExpression

-- | Simple License Expressions.
data SimpleLicenseExpression

-- | An SPDX License List Short Form Identifier. For example:
--   <tt>GPL-2.0-only</tt>
ELicenseId :: LicenseId -> SimpleLicenseExpression

-- | An SPDX License List Short Form Identifier with a unary"+" operator
--   suffix to represent the current version of the license or any later
--   version. For example: <tt>GPL-2.0+</tt>
ELicenseIdPlus :: LicenseId -> SimpleLicenseExpression

-- | A SPDX user defined license reference: For example:
--   <tt>LicenseRef-23</tt>, <tt>LicenseRef-MIT-Style-1</tt>, or
--   <tt>DocumentRef-spdx-tool-1.2:LicenseRef-MIT-Style-2</tt>
ELicenseRef :: LicenseRef -> SimpleLicenseExpression
simpleLicenseExpression :: LicenseId -> LicenseExpression

-- | SPDX License identifiers list v3.23
data LicenseId

-- | <tt>0BSD</tt>, BSD Zero Clause License
NullBSD :: LicenseId

-- | <tt>AAL</tt>, Attribution Assurance License
AAL :: LicenseId

-- | <tt>Abstyles</tt>, Abstyles License
Abstyles :: LicenseId

-- | <tt>AdaCore-doc</tt>, AdaCore Doc License, SPDX License List 3.23
AdaCore_doc :: LicenseId

-- | <tt>Adobe-2006</tt>, Adobe Systems Incorporated Source Code License
--   Agreement
Adobe_2006 :: LicenseId

-- | <tt>Adobe-Display-PostScript</tt>, Adobe Display PostScript License,
--   SPDX License List 3.23
Adobe_Display_PostScript :: LicenseId

-- | <tt>Adobe-Glyph</tt>, Adobe Glyph List License
Adobe_Glyph :: LicenseId

-- | <tt>Adobe-Utopia</tt>, Adobe Utopia Font License, SPDX License List
--   3.23
Adobe_Utopia :: LicenseId

-- | <tt>ADSL</tt>, Amazon Digital Services License
ADSL :: LicenseId

-- | <tt>AFL-1.1</tt>, Academic Free License v1.1
AFL_1_1 :: LicenseId

-- | <tt>AFL-1.2</tt>, Academic Free License v1.2
AFL_1_2 :: LicenseId

-- | <tt>AFL-2.0</tt>, Academic Free License v2.0
AFL_2_0 :: LicenseId

-- | <tt>AFL-2.1</tt>, Academic Free License v2.1
AFL_2_1 :: LicenseId

-- | <tt>AFL-3.0</tt>, Academic Free License v3.0
AFL_3_0 :: LicenseId

-- | <tt>Afmparse</tt>, Afmparse License
Afmparse :: LicenseId

-- | <tt>AGPL-1.0</tt>, Affero General Public License v1.0, SPDX License
--   List 3.0
AGPL_1_0 :: LicenseId

-- | <tt>AGPL-1.0-only</tt>, Affero General Public License v1.0 only, SPDX
--   License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX
--   License List 3.10, SPDX License List 3.16, SPDX License List 3.23
AGPL_1_0_only :: LicenseId

-- | <tt>AGPL-1.0-or-later</tt>, Affero General Public License v1.0 or
--   later, SPDX License List 3.2, SPDX License List 3.6, SPDX License List
--   3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List
--   3.23
AGPL_1_0_or_later :: LicenseId

-- | <tt>AGPL-3.0-only</tt>, GNU Affero General Public License v3.0 only
AGPL_3_0_only :: LicenseId

-- | <tt>AGPL-3.0-or-later</tt>, GNU Affero General Public License v3.0 or
--   later
AGPL_3_0_or_later :: LicenseId

-- | <tt>Aladdin</tt>, Aladdin Free Public License
Aladdin :: LicenseId

-- | <tt>AMDPLPA</tt>, AMD's plpa_map.c License
AMDPLPA :: LicenseId

-- | <tt>AML-glslang</tt>, AML glslang variant License, SPDX License List
--   3.23
AML_glslang :: LicenseId

-- | <tt>AML</tt>, Apple MIT License
AML :: LicenseId

-- | <tt>AMPAS</tt>, Academy of Motion Picture Arts and Sciences BSD
AMPAS :: LicenseId

-- | <tt>ANTLR-PD-fallback</tt>, ANTLR Software Rights Notice with license
--   fallback, SPDX License List 3.16, SPDX License List 3.23
ANTLR_PD_fallback :: LicenseId

-- | <tt>ANTLR-PD</tt>, ANTLR Software Rights Notice
ANTLR_PD :: LicenseId

-- | <tt>Apache-1.0</tt>, Apache License 1.0
Apache_1_0 :: LicenseId

-- | <tt>Apache-1.1</tt>, Apache License 1.1
Apache_1_1 :: LicenseId

-- | <tt>Apache-2.0</tt>, Apache License 2.0
Apache_2_0 :: LicenseId

-- | <tt>APAFML</tt>, Adobe Postscript AFM License
APAFML :: LicenseId

-- | <tt>APL-1.0</tt>, Adaptive Public License 1.0
APL_1_0 :: LicenseId

-- | <tt>App-s2p</tt>, App::s2p License, SPDX License List 3.16, SPDX
--   License List 3.23
App_s2p :: LicenseId

-- | <tt>APSL-1.0</tt>, Apple Public Source License 1.0
APSL_1_0 :: LicenseId

-- | <tt>APSL-1.1</tt>, Apple Public Source License 1.1
APSL_1_1 :: LicenseId

-- | <tt>APSL-1.2</tt>, Apple Public Source License 1.2
APSL_1_2 :: LicenseId

-- | <tt>APSL-2.0</tt>, Apple Public Source License 2.0
APSL_2_0 :: LicenseId

-- | <tt>Arphic-1999</tt>, Arphic Public License, SPDX License List 3.23
Arphic_1999 :: LicenseId

-- | <tt>Artistic-1.0-cl8</tt>, Artistic License 1.0 w/clause 8
Artistic_1_0_cl8 :: LicenseId

-- | <tt>Artistic-1.0-Perl</tt>, Artistic License 1.0 (Perl)
Artistic_1_0_Perl :: LicenseId

-- | <tt>Artistic-1.0</tt>, Artistic License 1.0
Artistic_1_0 :: LicenseId

-- | <tt>Artistic-2.0</tt>, Artistic License 2.0
Artistic_2_0 :: LicenseId

-- | <tt>ASWF-Digital-Assets-1.0</tt>, ASWF Digital Assets License version
--   1.0, SPDX License List 3.23
ASWF_Digital_Assets_1_0 :: LicenseId

-- | <tt>ASWF-Digital-Assets-1.1</tt>, ASWF Digital Assets License 1.1,
--   SPDX License List 3.23
ASWF_Digital_Assets_1_1 :: LicenseId

-- | <tt>Baekmuk</tt>, Baekmuk License, SPDX License List 3.23
Baekmuk :: LicenseId

-- | <tt>Bahyph</tt>, Bahyph License
Bahyph :: LicenseId

-- | <tt>Barr</tt>, Barr License
Barr :: LicenseId

-- | <tt>bcrypt-Solar-Designer</tt>, bcrypt Solar Designer License, SPDX
--   License List 3.23
Bcrypt_Solar_Designer :: LicenseId

-- | <tt>Beerware</tt>, Beerware License
Beerware :: LicenseId

-- | <tt>Bitstream-Charter</tt>, Bitstream Charter Font License, SPDX
--   License List 3.23
Bitstream_Charter :: LicenseId

-- | <tt>Bitstream-Vera</tt>, Bitstream Vera Font License, SPDX License
--   List 3.23
Bitstream_Vera :: LicenseId

-- | <tt>BitTorrent-1.0</tt>, BitTorrent Open Source License v1.0
BitTorrent_1_0 :: LicenseId

-- | <tt>BitTorrent-1.1</tt>, BitTorrent Open Source License v1.1
BitTorrent_1_1 :: LicenseId

-- | <tt>blessing</tt>, SQLite Blessing, SPDX License List 3.6, SPDX
--   License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX
--   License List 3.23
Blessing :: LicenseId

-- | <tt>BlueOak-1.0.0</tt>, Blue Oak Model License 1.0.0, SPDX License
--   List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License
--   List 3.16, SPDX License List 3.23
BlueOak_1_0_0 :: LicenseId

-- | <tt>Boehm-GC</tt>, Boehm-Demers-Weiser GC License, SPDX License List
--   3.23
Boehm_GC :: LicenseId

-- | <tt>Borceux</tt>, Borceux license
Borceux :: LicenseId

-- | <tt>Brian-Gladman-2-Clause</tt>, Brian Gladman 2-Clause License, SPDX
--   License List 3.23
Brian_Gladman_2_Clause :: LicenseId

-- | <tt>Brian-Gladman-3-Clause</tt>, Brian Gladman 3-Clause License, SPDX
--   License List 3.23
Brian_Gladman_3_Clause :: LicenseId

-- | <tt>BSD-1-Clause</tt>, BSD 1-Clause License
BSD_1_Clause :: LicenseId

-- | <tt>BSD-2-Clause-FreeBSD</tt>, BSD 2-Clause FreeBSD License, SPDX
--   License List 3.0, SPDX License List 3.2, SPDX License List 3.6, SPDX
--   License List 3.9
BSD_2_Clause_FreeBSD :: LicenseId

-- | <tt>BSD-2-Clause-NetBSD</tt>, BSD 2-Clause NetBSD License, SPDX
--   License List 3.0, SPDX License List 3.2, SPDX License List 3.6
BSD_2_Clause_NetBSD :: LicenseId

-- | <tt>BSD-2-Clause-Darwin</tt>, BSD 2-Clause - Ian Darwin variant, SPDX
--   License List 3.23
BSD_2_Clause_Darwin :: LicenseId

-- | <tt>BSD-2-Clause-Patent</tt>, BSD-2-Clause Plus Patent License
BSD_2_Clause_Patent :: LicenseId

-- | <tt>BSD-2-Clause-Views</tt>, BSD 2-Clause with views sentence, SPDX
--   License List 3.10, SPDX License List 3.16, SPDX License List 3.23
BSD_2_Clause_Views :: LicenseId

-- | <tt>BSD-2-Clause</tt>, BSD 2-Clause <a>Simplified</a> License
BSD_2_Clause :: LicenseId

-- | <tt>BSD-3-Clause-acpica</tt>, BSD 3-Clause acpica variant, SPDX
--   License List 3.23
BSD_3_Clause_acpica :: LicenseId

-- | <tt>BSD-3-Clause-Attribution</tt>, BSD with attribution
BSD_3_Clause_Attribution :: LicenseId

-- | <tt>BSD-3-Clause-Clear</tt>, BSD 3-Clause Clear License
BSD_3_Clause_Clear :: LicenseId

-- | <tt>BSD-3-Clause-flex</tt>, BSD 3-Clause Flex variant, SPDX License
--   List 3.23
BSD_3_Clause_flex :: LicenseId

-- | <tt>BSD-3-Clause-HP</tt>, Hewlett-Packard BSD variant license, SPDX
--   License List 3.23
BSD_3_Clause_HP :: LicenseId

-- | <tt>BSD-3-Clause-LBNL</tt>, Lawrence Berkeley National Labs BSD
--   variant license
BSD_3_Clause_LBNL :: LicenseId

-- | <tt>BSD-3-Clause-Modification</tt>, BSD 3-Clause Modification, SPDX
--   License List 3.16, SPDX License List 3.23
BSD_3_Clause_Modification :: LicenseId

-- | <tt>BSD-3-Clause-No-Military-License</tt>, BSD 3-Clause No Military
--   License, SPDX License List 3.16, SPDX License List 3.23
BSD_3_Clause_No_Military_License :: LicenseId

-- | <tt>BSD-3-Clause-No-Nuclear-License-2014</tt>, BSD 3-Clause No Nuclear
--   License 2014
BSD_3_Clause_No_Nuclear_License_2014 :: LicenseId

-- | <tt>BSD-3-Clause-No-Nuclear-License</tt>, BSD 3-Clause No Nuclear
--   License
BSD_3_Clause_No_Nuclear_License :: LicenseId

-- | <tt>BSD-3-Clause-No-Nuclear-Warranty</tt>, BSD 3-Clause No Nuclear
--   Warranty
BSD_3_Clause_No_Nuclear_Warranty :: LicenseId

-- | <tt>BSD-3-Clause-Open-MPI</tt>, BSD 3-Clause Open MPI variant, SPDX
--   License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX
--   License List 3.16, SPDX License List 3.23
BSD_3_Clause_Open_MPI :: LicenseId

-- | <tt>BSD-3-Clause-Sun</tt>, BSD 3-Clause Sun Microsystems, SPDX License
--   List 3.23
BSD_3_Clause_Sun :: LicenseId

-- | <tt>BSD-3-Clause</tt>, BSD 3-Clause <a>New</a> or <a>Revised</a>
--   License
BSD_3_Clause :: LicenseId

-- | <tt>BSD-4-Clause-Shortened</tt>, BSD 4 Clause Shortened, SPDX License
--   List 3.16, SPDX License List 3.23
BSD_4_Clause_Shortened :: LicenseId

-- | <tt>BSD-4-Clause-UC</tt>, BSD-4-Clause (University of
--   California-Specific)
BSD_4_Clause_UC :: LicenseId

-- | <tt>BSD-4-Clause</tt>, BSD 4-Clause <a>Original</a> or <a>Old</a>
--   License
BSD_4_Clause :: LicenseId

-- | <tt>BSD-4.3RENO</tt>, BSD 4.3 RENO License, SPDX License List 3.23
BSD_4_3RENO :: LicenseId

-- | <tt>BSD-4.3TAHOE</tt>, BSD 4.3 TAHOE License, SPDX License List 3.23
BSD_4_3TAHOE :: LicenseId

-- | <tt>BSD-Advertising-Acknowledgement</tt>, BSD Advertising
--   Acknowledgement License, SPDX License List 3.23
BSD_Advertising_Acknowledgement :: LicenseId

-- | <tt>BSD-Attribution-HPND-disclaimer</tt>, BSD with Attribution and
--   HPND disclaimer, SPDX License List 3.23
BSD_Attribution_HPND_disclaimer :: LicenseId

-- | <tt>BSD-Inferno-Nettverk</tt>, BSD-Inferno-Nettverk, SPDX License List
--   3.23
BSD_Inferno_Nettverk :: LicenseId

-- | <tt>BSD-Protection</tt>, BSD Protection License
BSD_Protection :: LicenseId

-- | <tt>BSD-Source-beginning-file</tt>, BSD Source Code Attribution -
--   beginning of file variant, SPDX License List 3.23
BSD_Source_beginning_file :: LicenseId

-- | <tt>BSD-Source-Code</tt>, BSD Source Code Attribution
BSD_Source_Code :: LicenseId

-- | <tt>BSD-Systemics-W3Works</tt>, Systemics W3Works BSD variant license,
--   SPDX License List 3.23
BSD_Systemics_W3Works :: LicenseId

-- | <tt>BSD-Systemics</tt>, Systemics BSD variant license, SPDX License
--   List 3.23
BSD_Systemics :: LicenseId

-- | <tt>BSL-1.0</tt>, Boost Software License 1.0
BSL_1_0 :: LicenseId

-- | <tt>bzip2-1.0.5</tt>, bzip2 and libbzip2 License v1.0.5, SPDX License
--   List 3.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License
--   List 3.9, SPDX License List 3.10
Bzip2_1_0_5 :: LicenseId

-- | <tt>BUSL-1.1</tt>, Business Source License 1.1, SPDX License List
--   3.16, SPDX License List 3.23
BUSL_1_1 :: LicenseId

-- | <tt>bzip2-1.0.6</tt>, bzip2 and libbzip2 License v1.0.6
Bzip2_1_0_6 :: LicenseId

-- | <tt>C-UDA-1.0</tt>, Computational Use of Data Agreement v1.0, SPDX
--   License List 3.16, SPDX License List 3.23
C_UDA_1_0 :: LicenseId

-- | <tt>CAL-1.0-Combined-Work-Exception</tt>, Cryptographic Autonomy
--   License 1.0 (Combined Work Exception), SPDX License List 3.9, SPDX
--   License List 3.10, SPDX License List 3.16, SPDX License List 3.23
CAL_1_0_Combined_Work_Exception :: LicenseId

-- | <tt>CAL-1.0</tt>, Cryptographic Autonomy License 1.0, SPDX License
--   List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License
--   List 3.23
CAL_1_0 :: LicenseId

-- | <tt>Caldera-no-preamble</tt>, Caldera License (without preamble), SPDX
--   License List 3.23
Caldera_no_preamble :: LicenseId

-- | <tt>Caldera</tt>, Caldera License
Caldera :: LicenseId

-- | <tt>CATOSL-1.1</tt>, Computer Associates Trusted Open Source License
--   1.1
CATOSL_1_1 :: LicenseId

-- | <tt>CC-BY-1.0</tt>, Creative Commons Attribution 1.0 Generic
CC_BY_1_0 :: LicenseId

-- | <tt>CC-BY-2.0</tt>, Creative Commons Attribution 2.0 Generic
CC_BY_2_0 :: LicenseId

-- | <tt>CC-BY-2.5-AU</tt>, Creative Commons Attribution 2.5 Australia,
--   SPDX License List 3.16, SPDX License List 3.23
CC_BY_2_5_AU :: LicenseId

-- | <tt>CC-BY-2.5</tt>, Creative Commons Attribution 2.5 Generic
CC_BY_2_5 :: LicenseId

-- | <tt>CC-BY-3.0-AT</tt>, Creative Commons Attribution 3.0 Austria, SPDX
--   License List 3.10, SPDX License List 3.16, SPDX License List 3.23
CC_BY_3_0_AT :: LicenseId

-- | <tt>CC-BY-3.0-AU</tt>, Creative Commons Attribution 3.0 Australia,
--   SPDX License List 3.23
CC_BY_3_0_AU :: LicenseId

-- | <tt>CC-BY-3.0-DE</tt>, Creative Commons Attribution 3.0 Germany, SPDX
--   License List 3.16, SPDX License List 3.23
CC_BY_3_0_DE :: LicenseId

-- | <tt>CC-BY-3.0-IGO</tt>, Creative Commons Attribution 3.0 IGO, SPDX
--   License List 3.23
CC_BY_3_0_IGO :: LicenseId

-- | <tt>CC-BY-3.0-NL</tt>, Creative Commons Attribution 3.0 Netherlands,
--   SPDX License List 3.16, SPDX License List 3.23
CC_BY_3_0_NL :: LicenseId

-- | <tt>CC-BY-3.0-US</tt>, Creative Commons Attribution 3.0 United States,
--   SPDX License List 3.16, SPDX License List 3.23
CC_BY_3_0_US :: LicenseId

-- | <tt>CC-BY-3.0</tt>, Creative Commons Attribution 3.0 Unported
CC_BY_3_0 :: LicenseId

-- | <tt>CC-BY-4.0</tt>, Creative Commons Attribution 4.0 International
CC_BY_4_0 :: LicenseId

-- | <tt>CC-BY-NC-1.0</tt>, Creative Commons Attribution Non Commercial 1.0
--   Generic
CC_BY_NC_1_0 :: LicenseId

-- | <tt>CC-BY-NC-2.0</tt>, Creative Commons Attribution Non Commercial 2.0
--   Generic
CC_BY_NC_2_0 :: LicenseId

-- | <tt>CC-BY-NC-2.5</tt>, Creative Commons Attribution Non Commercial 2.5
--   Generic
CC_BY_NC_2_5 :: LicenseId

-- | <tt>CC-BY-NC-3.0-DE</tt>, Creative Commons Attribution Non Commercial
--   3.0 Germany, SPDX License List 3.16, SPDX License List 3.23
CC_BY_NC_3_0_DE :: LicenseId

-- | <tt>CC-BY-NC-3.0</tt>, Creative Commons Attribution Non Commercial 3.0
--   Unported
CC_BY_NC_3_0 :: LicenseId

-- | <tt>CC-BY-NC-4.0</tt>, Creative Commons Attribution Non Commercial 4.0
--   International
CC_BY_NC_4_0 :: LicenseId

-- | <tt>CC-BY-NC-ND-1.0</tt>, Creative Commons Attribution Non Commercial
--   No Derivatives 1.0 Generic
CC_BY_NC_ND_1_0 :: LicenseId

-- | <tt>CC-BY-NC-ND-2.0</tt>, Creative Commons Attribution Non Commercial
--   No Derivatives 2.0 Generic
CC_BY_NC_ND_2_0 :: LicenseId

-- | <tt>CC-BY-NC-ND-2.5</tt>, Creative Commons Attribution Non Commercial
--   No Derivatives 2.5 Generic
CC_BY_NC_ND_2_5 :: LicenseId

-- | <tt>CC-BY-NC-ND-3.0-DE</tt>, Creative Commons Attribution Non
--   Commercial No Derivatives 3.0 Germany, SPDX License List 3.16, SPDX
--   License List 3.23
CC_BY_NC_ND_3_0_DE :: LicenseId

-- | <tt>CC-BY-NC-ND-3.0-IGO</tt>, Creative Commons Attribution Non
--   Commercial No Derivatives 3.0 IGO, SPDX License List 3.10, SPDX
--   License List 3.16, SPDX License List 3.23
CC_BY_NC_ND_3_0_IGO :: LicenseId

-- | <tt>CC-BY-NC-ND-3.0</tt>, Creative Commons Attribution Non Commercial
--   No Derivatives 3.0 Unported
CC_BY_NC_ND_3_0 :: LicenseId

-- | <tt>CC-BY-NC-ND-4.0</tt>, Creative Commons Attribution Non Commercial
--   No Derivatives 4.0 International
CC_BY_NC_ND_4_0 :: LicenseId

-- | <tt>CC-BY-NC-SA-1.0</tt>, Creative Commons Attribution Non Commercial
--   Share Alike 1.0 Generic
CC_BY_NC_SA_1_0 :: LicenseId

-- | <tt>CC-BY-NC-SA-2.0-DE</tt>, Creative Commons Attribution Non
--   Commercial Share Alike 2.0 Germany, SPDX License List 3.23
CC_BY_NC_SA_2_0_DE :: LicenseId

-- | <tt>CC-BY-NC-SA-2.0-FR</tt>, Creative Commons
--   Attribution-NonCommercial-ShareAlike 2.0 France, SPDX License List
--   3.16, SPDX License List 3.23
CC_BY_NC_SA_2_0_FR :: LicenseId

-- | <tt>CC-BY-NC-SA-2.0-UK</tt>, Creative Commons Attribution Non
--   Commercial Share Alike 2.0 England and Wales, SPDX License List 3.16,
--   SPDX License List 3.23
CC_BY_NC_SA_2_0_UK :: LicenseId

-- | <tt>CC-BY-NC-SA-2.0</tt>, Creative Commons Attribution Non Commercial
--   Share Alike 2.0 Generic
CC_BY_NC_SA_2_0 :: LicenseId

-- | <tt>CC-BY-NC-SA-2.5</tt>, Creative Commons Attribution Non Commercial
--   Share Alike 2.5 Generic
CC_BY_NC_SA_2_5 :: LicenseId

-- | <tt>CC-BY-NC-SA-3.0-DE</tt>, Creative Commons Attribution Non
--   Commercial Share Alike 3.0 Germany, SPDX License List 3.16, SPDX
--   License List 3.23
CC_BY_NC_SA_3_0_DE :: LicenseId

-- | <tt>CC-BY-NC-SA-3.0-IGO</tt>, Creative Commons Attribution Non
--   Commercial Share Alike 3.0 IGO, SPDX License List 3.16, SPDX License
--   List 3.23
CC_BY_NC_SA_3_0_IGO :: LicenseId

-- | <tt>CC-BY-NC-SA-3.0</tt>, Creative Commons Attribution Non Commercial
--   Share Alike 3.0 Unported
CC_BY_NC_SA_3_0 :: LicenseId

-- | <tt>CC-BY-NC-SA-4.0</tt>, Creative Commons Attribution Non Commercial
--   Share Alike 4.0 International
CC_BY_NC_SA_4_0 :: LicenseId

-- | <tt>CC-BY-ND-1.0</tt>, Creative Commons Attribution No Derivatives 1.0
--   Generic
CC_BY_ND_1_0 :: LicenseId

-- | <tt>CC-BY-ND-2.0</tt>, Creative Commons Attribution No Derivatives 2.0
--   Generic
CC_BY_ND_2_0 :: LicenseId

-- | <tt>CC-BY-ND-2.5</tt>, Creative Commons Attribution No Derivatives 2.5
--   Generic
CC_BY_ND_2_5 :: LicenseId

-- | <tt>CC-BY-ND-3.0-DE</tt>, Creative Commons Attribution No Derivatives
--   3.0 Germany, SPDX License List 3.16, SPDX License List 3.23
CC_BY_ND_3_0_DE :: LicenseId

-- | <tt>CC-BY-ND-3.0</tt>, Creative Commons Attribution No Derivatives 3.0
--   Unported
CC_BY_ND_3_0 :: LicenseId

-- | <tt>CC-BY-ND-4.0</tt>, Creative Commons Attribution No Derivatives 4.0
--   International
CC_BY_ND_4_0 :: LicenseId

-- | <tt>CC-BY-SA-1.0</tt>, Creative Commons Attribution Share Alike 1.0
--   Generic
CC_BY_SA_1_0 :: LicenseId

-- | <tt>CC-BY-SA-2.0-UK</tt>, Creative Commons Attribution Share Alike 2.0
--   England and Wales, SPDX License List 3.16, SPDX License List 3.23
CC_BY_SA_2_0_UK :: LicenseId

-- | <tt>CC-BY-SA-2.0</tt>, Creative Commons Attribution Share Alike 2.0
--   Generic
CC_BY_SA_2_0 :: LicenseId

-- | <tt>CC-BY-SA-2.1-JP</tt>, Creative Commons Attribution Share Alike 2.1
--   Japan, SPDX License List 3.16, SPDX License List 3.23
CC_BY_SA_2_1_JP :: LicenseId

-- | <tt>CC-BY-SA-2.5</tt>, Creative Commons Attribution Share Alike 2.5
--   Generic
CC_BY_SA_2_5 :: LicenseId

-- | <tt>CC-BY-SA-3.0-AT</tt>, Creative Commons Attribution Share Alike 3.0
--   Austria, SPDX License List 3.10, SPDX License List 3.16, SPDX License
--   List 3.23
CC_BY_SA_3_0_AT :: LicenseId

-- | <tt>CC-BY-SA-3.0-DE</tt>, Creative Commons Attribution Share Alike 3.0
--   Germany, SPDX License List 3.16, SPDX License List 3.23
CC_BY_SA_3_0_DE :: LicenseId

-- | <tt>CC-BY-SA-3.0-IGO</tt>, Creative Commons Attribution-ShareAlike 3.0
--   IGO, SPDX License List 3.23
CC_BY_SA_3_0_IGO :: LicenseId

-- | <tt>CC-BY-SA-3.0</tt>, Creative Commons Attribution Share Alike 3.0
--   Unported
CC_BY_SA_3_0 :: LicenseId

-- | <tt>CC-BY-SA-4.0</tt>, Creative Commons Attribution Share Alike 4.0
--   International
CC_BY_SA_4_0 :: LicenseId

-- | <tt>CC-PDDC</tt>, Creative Commons Public Domain Dedication and
--   Certification, SPDX License List 3.6, SPDX License List 3.9, SPDX
--   License List 3.10, SPDX License List 3.16, SPDX License List 3.23
CC_PDDC :: LicenseId

-- | <tt>CC0-1.0</tt>, Creative Commons Zero v1.0 Universal
CC0_1_0 :: LicenseId

-- | <tt>CDDL-1.0</tt>, Common Development and Distribution License 1.0
CDDL_1_0 :: LicenseId

-- | <tt>CDDL-1.1</tt>, Common Development and Distribution License 1.1
CDDL_1_1 :: LicenseId

-- | <tt>CDL-1.0</tt>, Common Documentation License 1.0, SPDX License List
--   3.16, SPDX License List 3.23
CDL_1_0 :: LicenseId

-- | <tt>CDLA-Permissive-1.0</tt>, Community Data License Agreement
--   Permissive 1.0
CDLA_Permissive_1_0 :: LicenseId

-- | <tt>CDLA-Permissive-2.0</tt>, Community Data License Agreement
--   Permissive 2.0, SPDX License List 3.16, SPDX License List 3.23
CDLA_Permissive_2_0 :: LicenseId

-- | <tt>CDLA-Sharing-1.0</tt>, Community Data License Agreement Sharing
--   1.0
CDLA_Sharing_1_0 :: LicenseId

-- | <tt>CECILL-1.0</tt>, CeCILL Free Software License Agreement v1.0
CECILL_1_0 :: LicenseId

-- | <tt>CECILL-1.1</tt>, CeCILL Free Software License Agreement v1.1
CECILL_1_1 :: LicenseId

-- | <tt>CECILL-2.0</tt>, CeCILL Free Software License Agreement v2.0
CECILL_2_0 :: LicenseId

-- | <tt>CECILL-2.1</tt>, CeCILL Free Software License Agreement v2.1
CECILL_2_1 :: LicenseId

-- | <tt>CECILL-B</tt>, CeCILL-B Free Software License Agreement
CECILL_B :: LicenseId

-- | <tt>CECILL-C</tt>, CeCILL-C Free Software License Agreement
CECILL_C :: LicenseId

-- | <tt>CERN-OHL-1.1</tt>, CERN Open Hardware Licence v1.1, SPDX License
--   List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License
--   List 3.16, SPDX License List 3.23
CERN_OHL_1_1 :: LicenseId

-- | <tt>CERN-OHL-1.2</tt>, CERN Open Hardware Licence v1.2, SPDX License
--   List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License
--   List 3.16, SPDX License List 3.23
CERN_OHL_1_2 :: LicenseId

-- | <tt>CERN-OHL-P-2.0</tt>, CERN Open Hardware Licence Version 2 -
--   Permissive, SPDX License List 3.9, SPDX License List 3.10, SPDX
--   License List 3.16, SPDX License List 3.23
CERN_OHL_P_2_0 :: LicenseId

-- | <tt>CERN-OHL-S-2.0</tt>, CERN Open Hardware Licence Version 2 -
--   Strongly Reciprocal, SPDX License List 3.9, SPDX License List 3.10,
--   SPDX License List 3.16, SPDX License List 3.23
CERN_OHL_S_2_0 :: LicenseId

-- | <tt>CERN-OHL-W-2.0</tt>, CERN Open Hardware Licence Version 2 - Weakly
--   Reciprocal, SPDX License List 3.9, SPDX License List 3.10, SPDX
--   License List 3.16, SPDX License List 3.23
CERN_OHL_W_2_0 :: LicenseId

-- | <tt>CFITSIO</tt>, CFITSIO License, SPDX License List 3.23
CFITSIO :: LicenseId

-- | <tt>check-cvs</tt>, check-cvs License, SPDX License List 3.23
Check_cvs :: LicenseId

-- | <tt>checkmk</tt>, Checkmk License, SPDX License List 3.23
Checkmk :: LicenseId

-- | <tt>ClArtistic</tt>, Clarified Artistic License
ClArtistic :: LicenseId

-- | <tt>Clips</tt>, Clips License, SPDX License List 3.23
Clips :: LicenseId

-- | <tt>CMU-Mach-nodoc</tt>, CMU Mach - no notices-in-documentation
--   variant, SPDX License List 3.23
CMU_Mach_nodoc :: LicenseId

-- | <tt>CMU-Mach</tt>, CMU Mach License, SPDX License List 3.23
CMU_Mach :: LicenseId

-- | <tt>CNRI-Jython</tt>, CNRI Jython License
CNRI_Jython :: LicenseId

-- | <tt>CNRI-Python-GPL-Compatible</tt>, CNRI Python Open Source GPL
--   Compatible License Agreement
CNRI_Python_GPL_Compatible :: LicenseId

-- | <tt>CNRI-Python</tt>, CNRI Python License
CNRI_Python :: LicenseId

-- | <tt>COIL-1.0</tt>, Copyfree Open Innovation License, SPDX License List
--   3.16, SPDX License List 3.23
COIL_1_0 :: LicenseId

-- | <tt>Community-Spec-1.0</tt>, Community Specification License 1.0, SPDX
--   License List 3.16, SPDX License List 3.23
Community_Spec_1_0 :: LicenseId

-- | <tt>Condor-1.1</tt>, Condor Public License v1.1
Condor_1_1 :: LicenseId

-- | <tt>copyleft-next-0.3.0</tt>, copyleft-next 0.3.0, SPDX License List
--   3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
Copyleft_next_0_3_0 :: LicenseId

-- | <tt>copyleft-next-0.3.1</tt>, copyleft-next 0.3.1, SPDX License List
--   3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
Copyleft_next_0_3_1 :: LicenseId

-- | <tt>Cornell-Lossless-JPEG</tt>, Cornell Lossless JPEG License, SPDX
--   License List 3.23
Cornell_Lossless_JPEG :: LicenseId

-- | <tt>CPAL-1.0</tt>, Common Public Attribution License 1.0
CPAL_1_0 :: LicenseId

-- | <tt>CPL-1.0</tt>, Common Public License 1.0
CPL_1_0 :: LicenseId

-- | <tt>CPOL-1.02</tt>, Code Project Open License 1.02
CPOL_1_02 :: LicenseId

-- | <tt>Cronyx</tt>, Cronyx License, SPDX License List 3.23
Cronyx :: LicenseId

-- | <tt>Crossword</tt>, Crossword License
Crossword :: LicenseId

-- | <tt>CrystalStacker</tt>, CrystalStacker License
CrystalStacker :: LicenseId

-- | <tt>CUA-OPL-1.0</tt>, CUA Office Public License v1.0
CUA_OPL_1_0 :: LicenseId

-- | <tt>Cube</tt>, Cube License
Cube :: LicenseId

-- | <tt>curl</tt>, curl License
Curl :: LicenseId

-- | <tt>D-FSL-1.0</tt>, Deutsche Freie Software Lizenz
D_FSL_1_0 :: LicenseId

-- | <tt>DEC-3-Clause</tt>, DEC 3-Clause License, SPDX License List 3.23
DEC_3_Clause :: LicenseId

-- | <tt>diffmark</tt>, diffmark license
Diffmark :: LicenseId

-- | <tt>DL-DE-BY-2.0</tt>, Data licence Germany – attribution – version
--   2.0, SPDX License List 3.16, SPDX License List 3.23
DL_DE_BY_2_0 :: LicenseId

-- | <tt>DL-DE-ZERO-2.0</tt>, Data licence Germany – zero – version 2.0,
--   SPDX License List 3.23
DL_DE_ZERO_2_0 :: LicenseId

-- | <tt>DOC</tt>, DOC License
DOC :: LicenseId

-- | <tt>Dotseqn</tt>, Dotseqn License
Dotseqn :: LicenseId

-- | <tt>DRL-1.0</tt>, Detection Rule License 1.0, SPDX License List 3.16,
--   SPDX License List 3.23
DRL_1_0 :: LicenseId

-- | <tt>DRL-1.1</tt>, Detection Rule License 1.1, SPDX License List 3.23
DRL_1_1 :: LicenseId

-- | <tt>DSDP</tt>, DSDP License
DSDP :: LicenseId

-- | <tt>dtoa</tt>, David M. Gay dtoa License, SPDX License List 3.23
Dtoa :: LicenseId

-- | <tt>dvipdfm</tt>, dvipdfm License
Dvipdfm :: LicenseId

-- | <tt>ECL-1.0</tt>, Educational Community License v1.0
ECL_1_0 :: LicenseId

-- | <tt>ECL-2.0</tt>, Educational Community License v2.0
ECL_2_0 :: LicenseId

-- | <tt>EFL-1.0</tt>, Eiffel Forum License v1.0
EFL_1_0 :: LicenseId

-- | <tt>EFL-2.0</tt>, Eiffel Forum License v2.0
EFL_2_0 :: LicenseId

-- | <tt>eGenix</tt>, eGenix.com Public License 1.1.0
EGenix :: LicenseId

-- | <tt>Elastic-2.0</tt>, Elastic License 2.0, SPDX License List 3.16,
--   SPDX License List 3.23
Elastic_2_0 :: LicenseId

-- | <tt>Entessa</tt>, Entessa Public License v1.0
Entessa :: LicenseId

-- | <tt>EPICS</tt>, EPICS Open License, SPDX License List 3.10, SPDX
--   License List 3.16, SPDX License List 3.23
EPICS :: LicenseId

-- | <tt>EPL-1.0</tt>, Eclipse Public License 1.0
EPL_1_0 :: LicenseId

-- | <tt>EPL-2.0</tt>, Eclipse Public License 2.0
EPL_2_0 :: LicenseId

-- | <tt>ErlPL-1.1</tt>, Erlang Public License v1.1
ErlPL_1_1 :: LicenseId

-- | <tt>etalab-2.0</tt>, Etalab Open License 2.0, SPDX License List 3.9,
--   SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23
Etalab_2_0 :: LicenseId

-- | <tt>EUDatagrid</tt>, EU DataGrid Software License
EUDatagrid :: LicenseId

-- | <tt>EUPL-1.0</tt>, European Union Public License 1.0
EUPL_1_0 :: LicenseId

-- | <tt>EUPL-1.1</tt>, European Union Public License 1.1
EUPL_1_1 :: LicenseId

-- | <tt>EUPL-1.2</tt>, European Union Public License 1.2
EUPL_1_2 :: LicenseId

-- | <tt>Eurosym</tt>, Eurosym License
Eurosym :: LicenseId

-- | <tt>Fair</tt>, Fair License
Fair :: LicenseId

-- | <tt>FBM</tt>, Fuzzy Bitmap License, SPDX License List 3.23
FBM :: LicenseId

-- | <tt>FDK-AAC</tt>, Fraunhofer FDK AAC Codec Library, SPDX License List
--   3.16, SPDX License List 3.23
FDK_AAC :: LicenseId

-- | <tt>Ferguson-Twofish</tt>, Ferguson Twofish License, SPDX License List
--   3.23
Ferguson_Twofish :: LicenseId

-- | <tt>Frameworx-1.0</tt>, Frameworx Open License 1.0
Frameworx_1_0 :: LicenseId

-- | <tt>FreeBSD-DOC</tt>, FreeBSD Documentation License, SPDX License List
--   3.16, SPDX License List 3.23
FreeBSD_DOC :: LicenseId

-- | <tt>FreeImage</tt>, FreeImage Public License v1.0
FreeImage :: LicenseId

-- | <tt>FSFAP-no-warranty-disclaimer</tt>, FSF All Permissive License
--   (without Warranty), SPDX License List 3.23
FSFAP_no_warranty_disclaimer :: LicenseId

-- | <tt>FSFAP</tt>, FSF All Permissive License
FSFAP :: LicenseId

-- | <tt>FSFULLRWD</tt>, FSF Unlimited License (With License Retention and
--   Warranty Disclaimer), SPDX License List 3.23
FSFULLRWD :: LicenseId

-- | <tt>FSFULLR</tt>, FSF Unlimited License (with License Retention)
FSFULLR :: LicenseId

-- | <tt>FSFUL</tt>, FSF Unlimited License
FSFUL :: LicenseId

-- | <tt>FTL</tt>, Freetype Project License
FTL :: LicenseId

-- | <tt>Furuseth</tt>, Furuseth License, SPDX License List 3.23
Furuseth :: LicenseId

-- | <tt>fwlw</tt>, fwlw License, SPDX License List 3.23
Fwlw :: LicenseId

-- | <tt>GCR-docs</tt>, Gnome GCR Documentation License, SPDX License List
--   3.23
GCR_docs :: LicenseId

-- | <tt>GD</tt>, GD License, SPDX License List 3.16, SPDX License List
--   3.23
GD :: LicenseId

-- | <tt>GFDL-1.1-invariants-only</tt>, GNU Free Documentation License v1.1
--   only - invariants, SPDX License List 3.10, SPDX License List 3.16,
--   SPDX License List 3.23
GFDL_1_1_invariants_only :: LicenseId

-- | <tt>GFDL-1.1-invariants-or-later</tt>, GNU Free Documentation License
--   v1.1 or later - invariants, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
GFDL_1_1_invariants_or_later :: LicenseId

-- | <tt>GFDL-1.1-no-invariants-only</tt>, GNU Free Documentation License
--   v1.1 only - no invariants, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
GFDL_1_1_no_invariants_only :: LicenseId

-- | <tt>GFDL-1.1-no-invariants-or-later</tt>, GNU Free Documentation
--   License v1.1 or later - no invariants, SPDX License List 3.10, SPDX
--   License List 3.16, SPDX License List 3.23
GFDL_1_1_no_invariants_or_later :: LicenseId

-- | <tt>GFDL-1.1-only</tt>, GNU Free Documentation License v1.1 only
GFDL_1_1_only :: LicenseId

-- | <tt>GFDL-1.1-or-later</tt>, GNU Free Documentation License v1.1 or
--   later
GFDL_1_1_or_later :: LicenseId

-- | <tt>GFDL-1.2-invariants-only</tt>, GNU Free Documentation License v1.2
--   only - invariants, SPDX License List 3.10, SPDX License List 3.16,
--   SPDX License List 3.23
GFDL_1_2_invariants_only :: LicenseId

-- | <tt>GFDL-1.2-invariants-or-later</tt>, GNU Free Documentation License
--   v1.2 or later - invariants, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
GFDL_1_2_invariants_or_later :: LicenseId

-- | <tt>GFDL-1.2-no-invariants-only</tt>, GNU Free Documentation License
--   v1.2 only - no invariants, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
GFDL_1_2_no_invariants_only :: LicenseId

-- | <tt>GFDL-1.2-no-invariants-or-later</tt>, GNU Free Documentation
--   License v1.2 or later - no invariants, SPDX License List 3.10, SPDX
--   License List 3.16, SPDX License List 3.23
GFDL_1_2_no_invariants_or_later :: LicenseId

-- | <tt>GFDL-1.2-only</tt>, GNU Free Documentation License v1.2 only
GFDL_1_2_only :: LicenseId

-- | <tt>GFDL-1.2-or-later</tt>, GNU Free Documentation License v1.2 or
--   later
GFDL_1_2_or_later :: LicenseId

-- | <tt>GFDL-1.3-invariants-only</tt>, GNU Free Documentation License v1.3
--   only - invariants, SPDX License List 3.10, SPDX License List 3.16,
--   SPDX License List 3.23
GFDL_1_3_invariants_only :: LicenseId

-- | <tt>GFDL-1.3-invariants-or-later</tt>, GNU Free Documentation License
--   v1.3 or later - invariants, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
GFDL_1_3_invariants_or_later :: LicenseId

-- | <tt>GFDL-1.3-no-invariants-only</tt>, GNU Free Documentation License
--   v1.3 only - no invariants, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
GFDL_1_3_no_invariants_only :: LicenseId

-- | <tt>GFDL-1.3-no-invariants-or-later</tt>, GNU Free Documentation
--   License v1.3 or later - no invariants, SPDX License List 3.10, SPDX
--   License List 3.16, SPDX License List 3.23
GFDL_1_3_no_invariants_or_later :: LicenseId

-- | <tt>GFDL-1.3-only</tt>, GNU Free Documentation License v1.3 only
GFDL_1_3_only :: LicenseId

-- | <tt>GFDL-1.3-or-later</tt>, GNU Free Documentation License v1.3 or
--   later
GFDL_1_3_or_later :: LicenseId

-- | <tt>Giftware</tt>, Giftware License
Giftware :: LicenseId

-- | <tt>GL2PS</tt>, GL2PS License
GL2PS :: LicenseId

-- | <tt>Glide</tt>, 3dfx Glide License
Glide :: LicenseId

-- | <tt>Glulxe</tt>, Glulxe License
Glulxe :: LicenseId

-- | <tt>GLWTPL</tt>, Good Luck With That Public License, SPDX License List
--   3.10, SPDX License List 3.16, SPDX License List 3.23
GLWTPL :: LicenseId

-- | <tt>gnuplot</tt>, gnuplot License
Gnuplot :: LicenseId

-- | <tt>GPL-1.0-only</tt>, GNU General Public License v1.0 only
GPL_1_0_only :: LicenseId

-- | <tt>GPL-1.0-or-later</tt>, GNU General Public License v1.0 or later
GPL_1_0_or_later :: LicenseId

-- | <tt>GPL-2.0-only</tt>, GNU General Public License v2.0 only
GPL_2_0_only :: LicenseId

-- | <tt>GPL-2.0-or-later</tt>, GNU General Public License v2.0 or later
GPL_2_0_or_later :: LicenseId

-- | <tt>GPL-3.0-only</tt>, GNU General Public License v3.0 only
GPL_3_0_only :: LicenseId

-- | <tt>GPL-3.0-or-later</tt>, GNU General Public License v3.0 or later
GPL_3_0_or_later :: LicenseId

-- | <tt>Graphics-Gems</tt>, Graphics Gems License, SPDX License List 3.23
Graphics_Gems :: LicenseId

-- | <tt>gSOAP-1.3b</tt>, gSOAP Public License v1.3b
GSOAP_1_3b :: LicenseId

-- | <tt>gtkbook</tt>, gtkbook License, SPDX License List 3.23
Gtkbook :: LicenseId

-- | <tt>HaskellReport</tt>, Haskell Language Report License
HaskellReport :: LicenseId

-- | <tt>hdparm</tt>, hdparm License, SPDX License List 3.23
Hdparm :: LicenseId

-- | <tt>Hippocratic-2.1</tt>, Hippocratic License 2.1, SPDX License List
--   3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List
--   3.23
Hippocratic_2_1 :: LicenseId

-- | <tt>HP-1986</tt>, Hewlett-Packard 1986 License, SPDX License List 3.23
HP_1986 :: LicenseId

-- | <tt>HP-1989</tt>, Hewlett-Packard 1989 License, SPDX License List 3.23
HP_1989 :: LicenseId

-- | <tt>HPND-DEC</tt>, Historical Permission Notice and Disclaimer - DEC
--   variant, SPDX License List 3.23
HPND_DEC :: LicenseId

-- | <tt>HPND-doc-sell</tt>, Historical Permission Notice and Disclaimer -
--   documentation sell variant, SPDX License List 3.23
HPND_doc_sell :: LicenseId

-- | <tt>HPND-doc</tt>, Historical Permission Notice and Disclaimer -
--   documentation variant, SPDX License List 3.23
HPND_doc :: LicenseId

-- | <tt>HPND-export-US-modify</tt>, HPND with US Government export control
--   warning and modification rqmt, SPDX License List 3.23
HPND_export_US_modify :: LicenseId

-- | <tt>HPND-export-US</tt>, HPND with US Government export control
--   warning, SPDX License List 3.23
HPND_export_US :: LicenseId

-- | <tt>HPND-Fenneberg-Livingston</tt>, Historical Permission Notice and
--   Disclaimer - Fenneberg-Livingston variant, SPDX License List 3.23
HPND_Fenneberg_Livingston :: LicenseId

-- | <tt>HPND-INRIA-IMAG</tt>, Historical Permission Notice and Disclaimer
--   - INRIA-IMAG variant, SPDX License List 3.23
HPND_INRIA_IMAG :: LicenseId

-- | <tt>HPND-Kevlin-Henney</tt>, Historical Permission Notice and
--   Disclaimer - Kevlin Henney variant, SPDX License List 3.23
HPND_Kevlin_Henney :: LicenseId

-- | <tt>HPND-Markus-Kuhn</tt>, Historical Permission Notice and Disclaimer
--   - Markus Kuhn variant, SPDX License List 3.23
HPND_Markus_Kuhn :: LicenseId

-- | <tt>HPND-MIT-disclaimer</tt>, Historical Permission Notice and
--   Disclaimer with MIT disclaimer, SPDX License List 3.23
HPND_MIT_disclaimer :: LicenseId

-- | <tt>HPND-Pbmplus</tt>, Historical Permission Notice and Disclaimer -
--   Pbmplus variant, SPDX License List 3.23
HPND_Pbmplus :: LicenseId

-- | <tt>HPND-sell-MIT-disclaimer-xserver</tt>, Historical Permission
--   Notice and Disclaimer - sell xserver variant with MIT disclaimer, SPDX
--   License List 3.23
HPND_sell_MIT_disclaimer_xserver :: LicenseId

-- | <tt>HPND-sell-regexpr</tt>, Historical Permission Notice and
--   Disclaimer - sell regexpr variant, SPDX License List 3.23
HPND_sell_regexpr :: LicenseId

-- | <tt>HPND-sell-variant-MIT-disclaimer</tt>, HPND sell variant with MIT
--   disclaimer, SPDX License List 3.23
HPND_sell_variant_MIT_disclaimer :: LicenseId

-- | <tt>HPND-sell-variant</tt>, Historical Permission Notice and
--   Disclaimer - sell variant, SPDX License List 3.6, SPDX License List
--   3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List
--   3.23
HPND_sell_variant :: LicenseId

-- | <tt>HPND-UC</tt>, Historical Permission Notice and Disclaimer -
--   University of California variant, SPDX License List 3.23
HPND_UC :: LicenseId

-- | <tt>HPND</tt>, Historical Permission Notice and Disclaimer
HPND :: LicenseId

-- | <tt>HTMLTIDY</tt>, HTML Tidy License, SPDX License List 3.16, SPDX
--   License List 3.23
HTMLTIDY :: LicenseId

-- | <tt>IBM-pibs</tt>, IBM PowerPC Initialization and Boot Software
IBM_pibs :: LicenseId

-- | <tt>ICU</tt>, ICU License
ICU :: LicenseId

-- | <tt>IEC-Code-Components-EULA</tt>, IEC Code Components End-user
--   licence agreement, SPDX License List 3.23
IEC_Code_Components_EULA :: LicenseId

-- | <tt>IJG-short</tt>, Independent JPEG Group License - short, SPDX
--   License List 3.23
IJG_short :: LicenseId

-- | <tt>IJG</tt>, Independent JPEG Group License
IJG :: LicenseId

-- | <tt>ImageMagick</tt>, ImageMagick License
ImageMagick :: LicenseId

-- | <tt>iMatix</tt>, iMatix Standard Function Library Agreement
IMatix :: LicenseId

-- | <tt>Imlib2</tt>, Imlib2 License
Imlib2 :: LicenseId

-- | <tt>Info-ZIP</tt>, Info-ZIP License
Info_ZIP :: LicenseId

-- | <tt>Inner-Net-2.0</tt>, Inner Net License v2.0, SPDX License List 3.23
Inner_Net_2_0 :: LicenseId

-- | <tt>Intel-ACPI</tt>, Intel ACPI Software License Agreement
Intel_ACPI :: LicenseId

-- | <tt>Intel</tt>, Intel Open Source License
Intel :: LicenseId

-- | <tt>Interbase-1.0</tt>, Interbase Public License v1.0
Interbase_1_0 :: LicenseId

-- | <tt>IPA</tt>, IPA Font License
IPA :: LicenseId

-- | <tt>IPL-1.0</tt>, IBM Public License v1.0
IPL_1_0 :: LicenseId

-- | <tt>ISC-Veillard</tt>, ISC Veillard variant, SPDX License List 3.23
ISC_Veillard :: LicenseId

-- | <tt>ISC</tt>, ISC License
ISC :: LicenseId

-- | <tt>Jam</tt>, Jam License, SPDX License List 3.16, SPDX License List
--   3.23
Jam :: LicenseId

-- | <tt>JasPer-2.0</tt>, JasPer License
JasPer_2_0 :: LicenseId

-- | <tt>JPL-image</tt>, JPL Image Use Policy, SPDX License List 3.23
JPL_image :: LicenseId

-- | <tt>JPNIC</tt>, Japan Network Information Center License, SPDX License
--   List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License
--   List 3.16, SPDX License List 3.23
JPNIC :: LicenseId

-- | <tt>JSON</tt>, JSON License
JSON :: LicenseId

-- | <tt>Kastrup</tt>, Kastrup License, SPDX License List 3.23
Kastrup :: LicenseId

-- | <tt>Kazlib</tt>, Kazlib License, SPDX License List 3.23
Kazlib :: LicenseId

-- | <tt>Knuth-CTAN</tt>, Knuth CTAN License, SPDX License List 3.23
Knuth_CTAN :: LicenseId

-- | <tt>LAL-1.2</tt>, Licence Art Libre 1.2
LAL_1_2 :: LicenseId

-- | <tt>LAL-1.3</tt>, Licence Art Libre 1.3
LAL_1_3 :: LicenseId

-- | <tt>Latex2e-translated-notice</tt>, Latex2e with translated notice
--   permission, SPDX License List 3.23
Latex2e_translated_notice :: LicenseId

-- | <tt>Latex2e</tt>, Latex2e License
Latex2e :: LicenseId

-- | <tt>Leptonica</tt>, Leptonica License
Leptonica :: LicenseId

-- | <tt>LGPL-2.0-only</tt>, GNU Library General Public License v2 only
LGPL_2_0_only :: LicenseId

-- | <tt>LGPL-2.0-or-later</tt>, GNU Library General Public License v2 or
--   later
LGPL_2_0_or_later :: LicenseId

-- | <tt>LGPL-2.1-only</tt>, GNU Lesser General Public License v2.1 only
LGPL_2_1_only :: LicenseId

-- | <tt>LGPL-2.1-or-later</tt>, GNU Lesser General Public License v2.1 or
--   later
LGPL_2_1_or_later :: LicenseId

-- | <tt>LGPL-3.0-only</tt>, GNU Lesser General Public License v3.0 only
LGPL_3_0_only :: LicenseId

-- | <tt>LGPL-3.0-or-later</tt>, GNU Lesser General Public License v3.0 or
--   later
LGPL_3_0_or_later :: LicenseId

-- | <tt>LGPLLR</tt>, Lesser General Public License For Linguistic
--   Resources
LGPLLR :: LicenseId

-- | <tt>libpng-2.0</tt>, PNG Reference Library version 2, SPDX License
--   List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License
--   List 3.16, SPDX License List 3.23
Libpng_2_0 :: LicenseId

-- | <tt>Libpng</tt>, libpng License
Libpng :: LicenseId

-- | <tt>libselinux-1.0</tt>, libselinux public domain notice, SPDX License
--   List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License
--   List 3.23
Libselinux_1_0 :: LicenseId

-- | <tt>libtiff</tt>, libtiff License
Libtiff :: LicenseId

-- | <tt>libutil-David-Nugent</tt>, libutil David Nugent License, SPDX
--   License List 3.23
Libutil_David_Nugent :: LicenseId

-- | <tt>LiLiQ-P-1.1</tt>, Licence Libre du Québec – Permissive version 1.1
LiLiQ_P_1_1 :: LicenseId

-- | <tt>LiLiQ-R-1.1</tt>, Licence Libre du Québec – Réciprocité version
--   1.1
LiLiQ_R_1_1 :: LicenseId

-- | <tt>LiLiQ-Rplus-1.1</tt>, Licence Libre du Québec – Réciprocité forte
--   version 1.1
LiLiQ_Rplus_1_1 :: LicenseId

-- | <tt>Linux-man-pages-1-para</tt>, Linux man-pages - 1 paragraph, SPDX
--   License List 3.23
Linux_man_pages_1_para :: LicenseId

-- | <tt>Linux-man-pages-copyleft-2-para</tt>, Linux man-pages Copyleft - 2
--   paragraphs, SPDX License List 3.23
Linux_man_pages_copyleft_2_para :: LicenseId

-- | <tt>Linux-man-pages-copyleft-var</tt>, Linux man-pages Copyleft
--   Variant, SPDX License List 3.23
Linux_man_pages_copyleft_var :: LicenseId

-- | <tt>Linux-man-pages-copyleft</tt>, Linux man-pages Copyleft, SPDX
--   License List 3.16, SPDX License List 3.23
Linux_man_pages_copyleft :: LicenseId

-- | <tt>Linux-OpenIB</tt>, Linux Kernel Variant of OpenIB.org license,
--   SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9,
--   SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23
Linux_OpenIB :: LicenseId

-- | <tt>LOOP</tt>, Common Lisp LOOP License, SPDX License List 3.23
LOOP :: LicenseId

-- | <tt>LPD-document</tt>, LPD Documentation License, SPDX License List
--   3.23
LPD_document :: LicenseId

-- | <tt>LPL-1.02</tt>, Lucent Public License v1.02
LPL_1_02 :: LicenseId

-- | <tt>LPL-1.0</tt>, Lucent Public License Version 1.0
LPL_1_0 :: LicenseId

-- | <tt>LPPL-1.0</tt>, LaTeX Project Public License v1.0
LPPL_1_0 :: LicenseId

-- | <tt>LPPL-1.1</tt>, LaTeX Project Public License v1.1
LPPL_1_1 :: LicenseId

-- | <tt>LPPL-1.2</tt>, LaTeX Project Public License v1.2
LPPL_1_2 :: LicenseId

-- | <tt>LPPL-1.3a</tt>, LaTeX Project Public License v1.3a
LPPL_1_3a :: LicenseId

-- | <tt>LPPL-1.3c</tt>, LaTeX Project Public License v1.3c
LPPL_1_3c :: LicenseId

-- | <tt>lsof</tt>, lsof License, SPDX License List 3.23
Lsof :: LicenseId

-- | <tt>Lucida-Bitmap-Fonts</tt>, Lucida Bitmap Fonts License, SPDX
--   License List 3.23
Lucida_Bitmap_Fonts :: LicenseId

-- | <tt>LZMA-SDK-9.11-to-9.20</tt>, LZMA SDK License (versions 9.11 to
--   9.20), SPDX License List 3.23
LZMA_SDK_9_11_to_9_20 :: LicenseId

-- | <tt>LZMA-SDK-9.22</tt>, LZMA SDK License (versions 9.22 and beyond),
--   SPDX License List 3.23
LZMA_SDK_9_22 :: LicenseId

-- | <tt>Mackerras-3-Clause-acknowledgment</tt>, Mackerras 3-Clause -
--   acknowledgment variant, SPDX License List 3.23
Mackerras_3_Clause_acknowledgment :: LicenseId

-- | <tt>Mackerras-3-Clause</tt>, Mackerras 3-Clause License, SPDX License
--   List 3.23
Mackerras_3_Clause :: LicenseId

-- | <tt>magaz</tt>, magaz License, SPDX License List 3.23
Magaz :: LicenseId

-- | <tt>mailprio</tt>, mailprio License, SPDX License List 3.23
Mailprio :: LicenseId

-- | <tt>MakeIndex</tt>, MakeIndex License
MakeIndex :: LicenseId

-- | <tt>Martin-Birgmeier</tt>, Martin Birgmeier License, SPDX License List
--   3.23
Martin_Birgmeier :: LicenseId

-- | <tt>McPhee-slideshow</tt>, McPhee Slideshow License, SPDX License List
--   3.23
McPhee_slideshow :: LicenseId

-- | <tt>metamail</tt>, metamail License, SPDX License List 3.23
Metamail :: LicenseId

-- | <tt>Minpack</tt>, Minpack License, SPDX License List 3.23
Minpack :: LicenseId

-- | <tt>MirOS</tt>, The MirOS Licence
MirOS :: LicenseId

-- | <tt>MIT-0</tt>, MIT No Attribution, SPDX License List 3.2, SPDX
--   License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX
--   License List 3.16, SPDX License List 3.23
MIT_0 :: LicenseId

-- | <tt>MIT-advertising</tt>, Enlightenment License (e16)
MIT_advertising :: LicenseId

-- | <tt>MIT-CMU</tt>, CMU License
MIT_CMU :: LicenseId

-- | <tt>MIT-enna</tt>, enna License
MIT_enna :: LicenseId

-- | <tt>MIT-feh</tt>, feh License
MIT_feh :: LicenseId

-- | <tt>MIT-Festival</tt>, MIT Festival Variant, SPDX License List 3.23
MIT_Festival :: LicenseId

-- | <tt>MIT-Modern-Variant</tt>, MIT License Modern Variant, SPDX License
--   List 3.16, SPDX License List 3.23
MIT_Modern_Variant :: LicenseId

-- | <tt>MIT-open-group</tt>, MIT Open Group variant, SPDX License List
--   3.16, SPDX License List 3.23
MIT_open_group :: LicenseId

-- | <tt>MIT-testregex</tt>, MIT testregex Variant, SPDX License List 3.23
MIT_testregex :: LicenseId

-- | <tt>MIT-Wu</tt>, MIT Tom Wu Variant, SPDX License List 3.23
MIT_Wu :: LicenseId

-- | <tt>MITNFA</tt>, MIT +no-false-attribs license
MITNFA :: LicenseId

-- | <tt>MIT</tt>, MIT License
MIT :: LicenseId

-- | <tt>MMIXware</tt>, MMIXware License, SPDX License List 3.23
MMIXware :: LicenseId

-- | <tt>Motosoto</tt>, Motosoto License
Motosoto :: LicenseId

-- | <tt>MPEG-SSG</tt>, MPEG Software Simulation, SPDX License List 3.23
MPEG_SSG :: LicenseId

-- | <tt>mpi-permissive</tt>, mpi Permissive License, SPDX License List
--   3.23
Mpi_permissive :: LicenseId

-- | <tt>mpich2</tt>, mpich2 License
Mpich2 :: LicenseId

-- | <tt>MPL-1.0</tt>, Mozilla Public License 1.0
MPL_1_0 :: LicenseId

-- | <tt>MPL-1.1</tt>, Mozilla Public License 1.1
MPL_1_1 :: LicenseId

-- | <tt>MPL-2.0-no-copyleft-exception</tt>, Mozilla Public License 2.0 (no
--   copyleft exception)
MPL_2_0_no_copyleft_exception :: LicenseId

-- | <tt>MPL-2.0</tt>, Mozilla Public License 2.0
MPL_2_0 :: LicenseId

-- | <tt>mplus</tt>, mplus Font License, SPDX License List 3.23
Mplus :: LicenseId

-- | <tt>MS-LPL</tt>, Microsoft Limited Public License, SPDX License List
--   3.23
MS_LPL :: LicenseId

-- | <tt>MS-PL</tt>, Microsoft Public License
MS_PL :: LicenseId

-- | <tt>MS-RL</tt>, Microsoft Reciprocal License
MS_RL :: LicenseId

-- | <tt>MTLL</tt>, Matrix Template Library License
MTLL :: LicenseId

-- | <tt>MulanPSL-1.0</tt>, Mulan Permissive Software License, Version 1,
--   SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16,
--   SPDX License List 3.23
MulanPSL_1_0 :: LicenseId

-- | <tt>MulanPSL-2.0</tt>, Mulan Permissive Software License, Version 2,
--   SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16,
--   SPDX License List 3.23
MulanPSL_2_0 :: LicenseId

-- | <tt>Multics</tt>, Multics License
Multics :: LicenseId

-- | <tt>Mup</tt>, Mup License
Mup :: LicenseId

-- | <tt>NAIST-2003</tt>, Nara Institute of Science and Technology License
--   (2003), SPDX License List 3.16, SPDX License List 3.23
NAIST_2003 :: LicenseId

-- | <tt>NASA-1.3</tt>, NASA Open Source Agreement 1.3
NASA_1_3 :: LicenseId

-- | <tt>Naumen</tt>, Naumen Public License
Naumen :: LicenseId

-- | <tt>NBPL-1.0</tt>, Net Boolean Public License v1
NBPL_1_0 :: LicenseId

-- | <tt>NCGL-UK-2.0</tt>, Non-Commercial Government Licence, SPDX License
--   List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License
--   List 3.23
NCGL_UK_2_0 :: LicenseId

-- | <tt>NCSA</tt>, University of Illinois/NCSA Open Source License
NCSA :: LicenseId

-- | <tt>Net-SNMP</tt>, Net-SNMP License
Net_SNMP :: LicenseId

-- | <tt>NetCDF</tt>, NetCDF license
NetCDF :: LicenseId

-- | <tt>Newsletr</tt>, Newsletr License
Newsletr :: LicenseId

-- | <tt>NGPL</tt>, Nethack General Public License
NGPL :: LicenseId

-- | <tt>NICTA-1.0</tt>, NICTA Public Software License, Version 1.0, SPDX
--   License List 3.23
NICTA_1_0 :: LicenseId

-- | <tt>NIST-PD-fallback</tt>, NIST Public Domain Notice with license
--   fallback, SPDX License List 3.10, SPDX License List 3.16, SPDX License
--   List 3.23
NIST_PD_fallback :: LicenseId

-- | <tt>NIST-PD</tt>, NIST Public Domain Notice, SPDX License List 3.10,
--   SPDX License List 3.16, SPDX License List 3.23
NIST_PD :: LicenseId

-- | <tt>NIST-Software</tt>, NIST Software License, SPDX License List 3.23
NIST_Software :: LicenseId

-- | <tt>NLOD-1.0</tt>, Norwegian Licence for Open Government Data (NLOD)
--   1.0
NLOD_1_0 :: LicenseId

-- | <tt>NLOD-2.0</tt>, Norwegian Licence for Open Government Data (NLOD)
--   2.0, SPDX License List 3.16, SPDX License List 3.23
NLOD_2_0 :: LicenseId

-- | <tt>NLPL</tt>, No Limit Public License
NLPL :: LicenseId

-- | <tt>Nokia</tt>, Nokia Open Source License
Nokia :: LicenseId

-- | <tt>NOSL</tt>, Netizen Open Source License
NOSL :: LicenseId

-- | <tt>Noweb</tt>, Noweb License
Noweb :: LicenseId

-- | <tt>NPL-1.0</tt>, Netscape Public License v1.0
NPL_1_0 :: LicenseId

-- | <tt>NPL-1.1</tt>, Netscape Public License v1.1
NPL_1_1 :: LicenseId

-- | <tt>NPOSL-3.0</tt>, Non-Profit Open Software License 3.0
NPOSL_3_0 :: LicenseId

-- | <tt>NRL</tt>, NRL License
NRL :: LicenseId

-- | <tt>NTP-0</tt>, NTP No Attribution, SPDX License List 3.9, SPDX
--   License List 3.10, SPDX License List 3.16, SPDX License List 3.23
NTP_0 :: LicenseId

-- | <tt>NTP</tt>, NTP License
NTP :: LicenseId

-- | <tt>O-UDA-1.0</tt>, Open Use of Data Agreement v1.0, SPDX License List
--   3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List
--   3.23
O_UDA_1_0 :: LicenseId

-- | <tt>OCCT-PL</tt>, Open CASCADE Technology Public License
OCCT_PL :: LicenseId

-- | <tt>OCLC-2.0</tt>, OCLC Research Public License 2.0
OCLC_2_0 :: LicenseId

-- | <tt>ODbL-1.0</tt>, Open Data Commons Open Database License v1.0
ODbL_1_0 :: LicenseId

-- | <tt>ODC-By-1.0</tt>, Open Data Commons Attribution License v1.0, SPDX
--   License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX
--   License List 3.10, SPDX License List 3.16, SPDX License List 3.23
ODC_By_1_0 :: LicenseId

-- | <tt>OFFIS</tt>, OFFIS License, SPDX License List 3.23
OFFIS :: LicenseId

-- | <tt>OFL-1.0-no-RFN</tt>, SIL Open Font License 1.0 with no Reserved
--   Font Name, SPDX License List 3.9, SPDX License List 3.10, SPDX License
--   List 3.16, SPDX License List 3.23
OFL_1_0_no_RFN :: LicenseId

-- | <tt>OFL-1.0-RFN</tt>, SIL Open Font License 1.0 with Reserved Font
--   Name, SPDX License List 3.9, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
OFL_1_0_RFN :: LicenseId

-- | <tt>OFL-1.0</tt>, SIL Open Font License 1.0
OFL_1_0 :: LicenseId

-- | <tt>OFL-1.1-no-RFN</tt>, SIL Open Font License 1.1 with no Reserved
--   Font Name, SPDX License List 3.9, SPDX License List 3.10, SPDX License
--   List 3.16, SPDX License List 3.23
OFL_1_1_no_RFN :: LicenseId

-- | <tt>OFL-1.1-RFN</tt>, SIL Open Font License 1.1 with Reserved Font
--   Name, SPDX License List 3.9, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
OFL_1_1_RFN :: LicenseId

-- | <tt>OFL-1.1</tt>, SIL Open Font License 1.1
OFL_1_1 :: LicenseId

-- | <tt>OGC-1.0</tt>, OGC Software License, Version 1.0, SPDX License List
--   3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List
--   3.23
OGC_1_0 :: LicenseId

-- | <tt>OGDL-Taiwan-1.0</tt>, Taiwan Open Government Data License, version
--   1.0, SPDX License List 3.16, SPDX License List 3.23
OGDL_Taiwan_1_0 :: LicenseId

-- | <tt>OGL-Canada-2.0</tt>, Open Government Licence - Canada, SPDX
--   License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX
--   License List 3.23
OGL_Canada_2_0 :: LicenseId

-- | <tt>OGL-UK-1.0</tt>, Open Government Licence v1.0, SPDX License List
--   3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
OGL_UK_1_0 :: LicenseId

-- | <tt>OGL-UK-2.0</tt>, Open Government Licence v2.0, SPDX License List
--   3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
OGL_UK_2_0 :: LicenseId

-- | <tt>OGL-UK-3.0</tt>, Open Government Licence v3.0, SPDX License List
--   3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
OGL_UK_3_0 :: LicenseId

-- | <tt>OGTSL</tt>, Open Group Test Suite License
OGTSL :: LicenseId

-- | <tt>OLDAP-1.1</tt>, Open LDAP Public License v1.1
OLDAP_1_1 :: LicenseId

-- | <tt>OLDAP-1.2</tt>, Open LDAP Public License v1.2
OLDAP_1_2 :: LicenseId

-- | <tt>OLDAP-1.3</tt>, Open LDAP Public License v1.3
OLDAP_1_3 :: LicenseId

-- | <tt>OLDAP-1.4</tt>, Open LDAP Public License v1.4
OLDAP_1_4 :: LicenseId

-- | <tt>OLDAP-2.0.1</tt>, Open LDAP Public License v2.0.1
OLDAP_2_0_1 :: LicenseId

-- | <tt>OLDAP-2.0</tt>, Open LDAP Public License v2.0 (or possibly 2.0A
--   and 2.0B)
OLDAP_2_0 :: LicenseId

-- | <tt>OLDAP-2.1</tt>, Open LDAP Public License v2.1
OLDAP_2_1 :: LicenseId

-- | <tt>OLDAP-2.2.1</tt>, Open LDAP Public License v2.2.1
OLDAP_2_2_1 :: LicenseId

-- | <tt>OLDAP-2.2.2</tt>, Open LDAP Public License 2.2.2
OLDAP_2_2_2 :: LicenseId

-- | <tt>OLDAP-2.2</tt>, Open LDAP Public License v2.2
OLDAP_2_2 :: LicenseId

-- | <tt>OLDAP-2.3</tt>, Open LDAP Public License v2.3
OLDAP_2_3 :: LicenseId

-- | <tt>OLDAP-2.4</tt>, Open LDAP Public License v2.4
OLDAP_2_4 :: LicenseId

-- | <tt>OLDAP-2.5</tt>, Open LDAP Public License v2.5
OLDAP_2_5 :: LicenseId

-- | <tt>OLDAP-2.6</tt>, Open LDAP Public License v2.6
OLDAP_2_6 :: LicenseId

-- | <tt>OLDAP-2.7</tt>, Open LDAP Public License v2.7
OLDAP_2_7 :: LicenseId

-- | <tt>OLDAP-2.8</tt>, Open LDAP Public License v2.8
OLDAP_2_8 :: LicenseId

-- | <tt>OLFL-1.3</tt>, Open Logistics Foundation License Version 1.3, SPDX
--   License List 3.23
OLFL_1_3 :: LicenseId

-- | <tt>OML</tt>, Open Market License
OML :: LicenseId

-- | <tt>OpenPBS-2.3</tt>, OpenPBS v2.3 Software License, SPDX License List
--   3.23
OpenPBS_2_3 :: LicenseId

-- | <tt>OpenSSL-standalone</tt>, OpenSSL License - standalone, SPDX
--   License List 3.23
OpenSSL_standalone :: LicenseId

-- | <tt>OpenSSL</tt>, OpenSSL License
OpenSSL :: LicenseId

-- | <tt>OpenVision</tt>, OpenVision License, SPDX License List 3.23
OpenVision :: LicenseId

-- | <tt>OPL-1.0</tt>, Open Public License v1.0
OPL_1_0 :: LicenseId

-- | <tt>OPL-UK-3.0</tt>, United Kingdom Open Parliament Licence v3.0, SPDX
--   License List 3.23
OPL_UK_3_0 :: LicenseId

-- | <tt>OPUBL-1.0</tt>, Open Publication License v1.0, SPDX License List
--   3.16, SPDX License List 3.23
OPUBL_1_0 :: LicenseId

-- | <tt>OSET-PL-2.1</tt>, OSET Public License version 2.1
OSET_PL_2_1 :: LicenseId

-- | <tt>OSL-1.0</tt>, Open Software License 1.0
OSL_1_0 :: LicenseId

-- | <tt>OSL-1.1</tt>, Open Software License 1.1
OSL_1_1 :: LicenseId

-- | <tt>OSL-2.0</tt>, Open Software License 2.0
OSL_2_0 :: LicenseId

-- | <tt>OSL-2.1</tt>, Open Software License 2.1
OSL_2_1 :: LicenseId

-- | <tt>OSL-3.0</tt>, Open Software License 3.0
OSL_3_0 :: LicenseId

-- | <tt>PADL</tt>, PADL License, SPDX License List 3.23
PADL :: LicenseId

-- | <tt>Parity-6.0.0</tt>, The Parity Public License 6.0.0, SPDX License
--   List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License
--   List 3.16, SPDX License List 3.23
Parity_6_0_0 :: LicenseId

-- | <tt>Parity-7.0.0</tt>, The Parity Public License 7.0.0, SPDX License
--   List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License
--   List 3.23
Parity_7_0_0 :: LicenseId

-- | <tt>PDDL-1.0</tt>, Open Data Commons Public Domain Dedication &amp;
--   License 1.0
PDDL_1_0 :: LicenseId

-- | <tt>PHP-3.01</tt>, PHP License v3.01
PHP_3_01 :: LicenseId

-- | <tt>PHP-3.0</tt>, PHP License v3.0
PHP_3_0 :: LicenseId

-- | <tt>Pixar</tt>, Pixar License, SPDX License List 3.23
Pixar :: LicenseId

-- | <tt>Plexus</tt>, Plexus Classworlds License
Plexus :: LicenseId

-- | <tt>pnmstitch</tt>, pnmstitch License, SPDX License List 3.23
Pnmstitch :: LicenseId

-- | <tt>PolyForm-Noncommercial-1.0.0</tt>, PolyForm Noncommercial License
--   1.0.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License
--   List 3.16, SPDX License List 3.23
PolyForm_Noncommercial_1_0_0 :: LicenseId

-- | <tt>PolyForm-Small-Business-1.0.0</tt>, PolyForm Small Business
--   License 1.0.0, SPDX License List 3.9, SPDX License List 3.10, SPDX
--   License List 3.16, SPDX License List 3.23
PolyForm_Small_Business_1_0_0 :: LicenseId

-- | <tt>PostgreSQL</tt>, PostgreSQL License
PostgreSQL :: LicenseId

-- | <tt>PSF-2.0</tt>, Python Software Foundation License 2.0, SPDX License
--   List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License
--   List 3.23
PSF_2_0 :: LicenseId

-- | <tt>psfrag</tt>, psfrag License
Psfrag :: LicenseId

-- | <tt>psutils</tt>, psutils License
Psutils :: LicenseId

-- | <tt>Python-2.0.1</tt>, Python License 2.0.1, SPDX License List 3.23
Python_2_0_1 :: LicenseId

-- | <tt>Python-2.0</tt>, Python License 2.0
Python_2_0 :: LicenseId

-- | <tt>python-ldap</tt>, Python ldap License, SPDX License List 3.23
Python_ldap :: LicenseId

-- | <tt>Qhull</tt>, Qhull License
Qhull :: LicenseId

-- | <tt>QPL-1.0-INRIA-2004</tt>, Q Public License 1.0 - INRIA 2004
--   variant, SPDX License List 3.23
QPL_1_0_INRIA_2004 :: LicenseId

-- | <tt>QPL-1.0</tt>, Q Public License 1.0
QPL_1_0 :: LicenseId

-- | <tt>radvd</tt>, radvd License, SPDX License List 3.23
Radvd :: LicenseId

-- | <tt>Rdisc</tt>, Rdisc License
Rdisc :: LicenseId

-- | <tt>RHeCos-1.1</tt>, Red Hat eCos Public License v1.1
RHeCos_1_1 :: LicenseId

-- | <tt>RPL-1.1</tt>, Reciprocal Public License 1.1
RPL_1_1 :: LicenseId

-- | <tt>RPL-1.5</tt>, Reciprocal Public License 1.5
RPL_1_5 :: LicenseId

-- | <tt>RPSL-1.0</tt>, RealNetworks Public Source License v1.0
RPSL_1_0 :: LicenseId

-- | <tt>RSA-MD</tt>, RSA Message-Digest License
RSA_MD :: LicenseId

-- | <tt>RSCPL</tt>, Ricoh Source Code Public License
RSCPL :: LicenseId

-- | <tt>Ruby</tt>, Ruby License
Ruby :: LicenseId

-- | <tt>SAX-PD-2.0</tt>, Sax Public Domain Notice 2.0, SPDX License List
--   3.23
SAX_PD_2_0 :: LicenseId

-- | <tt>SAX-PD</tt>, Sax Public Domain Notice
SAX_PD :: LicenseId

-- | <tt>Saxpath</tt>, Saxpath License
Saxpath :: LicenseId

-- | <tt>SCEA</tt>, SCEA Shared Source License
SCEA :: LicenseId

-- | <tt>SchemeReport</tt>, Scheme Language Report License, SPDX License
--   List 3.16, SPDX License List 3.23
SchemeReport :: LicenseId

-- | <tt>Sendmail-8.23</tt>, Sendmail License 8.23, SPDX License List 3.6,
--   SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16,
--   SPDX License List 3.23
Sendmail_8_23 :: LicenseId

-- | <tt>Sendmail</tt>, Sendmail License
Sendmail :: LicenseId

-- | <tt>SGI-B-1.0</tt>, SGI Free Software License B v1.0
SGI_B_1_0 :: LicenseId

-- | <tt>SGI-B-1.1</tt>, SGI Free Software License B v1.1
SGI_B_1_1 :: LicenseId

-- | <tt>SGI-B-2.0</tt>, SGI Free Software License B v2.0
SGI_B_2_0 :: LicenseId

-- | <tt>SGI-OpenGL</tt>, SGI OpenGL License, SPDX License List 3.23
SGI_OpenGL :: LicenseId

-- | <tt>SGP4</tt>, SGP4 Permission Notice, SPDX License List 3.23
SGP4 :: LicenseId

-- | <tt>SHL-0.51</tt>, Solderpad Hardware License, Version 0.51, SPDX
--   License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX
--   License List 3.16, SPDX License List 3.23
SHL_0_51 :: LicenseId

-- | <tt>SHL-0.5</tt>, Solderpad Hardware License v0.5, SPDX License List
--   3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
SHL_0_5 :: LicenseId

-- | <tt>SimPL-2.0</tt>, Simple Public License 2.0
SimPL_2_0 :: LicenseId

-- | <tt>SISSL-1.2</tt>, Sun Industry Standards Source License v1.2
SISSL_1_2 :: LicenseId

-- | <tt>SISSL</tt>, Sun Industry Standards Source License v1.1
SISSL :: LicenseId

-- | <tt>Sleepycat</tt>, Sleepycat License
Sleepycat :: LicenseId

-- | <tt>SL</tt>, SL License, SPDX License List 3.23
SL :: LicenseId

-- | <tt>SMLNJ</tt>, Standard ML of New Jersey License
SMLNJ :: LicenseId

-- | <tt>SMPPL</tt>, Secure Messaging Protocol Public License
SMPPL :: LicenseId

-- | <tt>SNIA</tt>, SNIA Public License 1.1
SNIA :: LicenseId

-- | <tt>snprintf</tt>, snprintf License, SPDX License List 3.23
Snprintf :: LicenseId

-- | <tt>softSurfer</tt>, softSurfer License, SPDX License List 3.23
SoftSurfer :: LicenseId

-- | <tt>Soundex</tt>, Soundex License, SPDX License List 3.23
Soundex :: LicenseId

-- | <tt>Spencer-86</tt>, Spencer License 86
Spencer_86 :: LicenseId

-- | <tt>Spencer-94</tt>, Spencer License 94
Spencer_94 :: LicenseId

-- | <tt>Spencer-99</tt>, Spencer License 99
Spencer_99 :: LicenseId

-- | <tt>SPL-1.0</tt>, Sun Public License v1.0
SPL_1_0 :: LicenseId

-- | <tt>ssh-keyscan</tt>, ssh-keyscan License, SPDX License List 3.23
Ssh_keyscan :: LicenseId

-- | <tt>SSH-OpenSSH</tt>, SSH OpenSSH license, SPDX License List 3.9, SPDX
--   License List 3.10, SPDX License List 3.16, SPDX License List 3.23
SSH_OpenSSH :: LicenseId

-- | <tt>SSH-short</tt>, SSH short notice, SPDX License List 3.9, SPDX
--   License List 3.10, SPDX License List 3.16, SPDX License List 3.23
SSH_short :: LicenseId

-- | <tt>SSLeay-standalone</tt>, SSLeay License - standalone, SPDX License
--   List 3.23
SSLeay_standalone :: LicenseId

-- | <tt>SSPL-1.0</tt>, Server Side Public License, v 1, SPDX License List
--   3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
SSPL_1_0 :: LicenseId

-- | <tt>SugarCRM-1.1.3</tt>, SugarCRM Public License v1.1.3
SugarCRM_1_1_3 :: LicenseId

-- | <tt>Sun-PPP</tt>, Sun PPP License, SPDX License List 3.23
Sun_PPP :: LicenseId

-- | <tt>SunPro</tt>, SunPro License, SPDX License List 3.23
SunPro :: LicenseId

-- | <tt>SWL</tt>, Scheme Widget Library (SWL) Software License Agreement
SWL :: LicenseId

-- | <tt>swrule</tt>, swrule License, SPDX License List 3.23
Swrule :: LicenseId

-- | <tt>Symlinks</tt>, Symlinks License, SPDX License List 3.23
Symlinks :: LicenseId

-- | <tt>TAPR-OHL-1.0</tt>, TAPR Open Hardware License v1.0, SPDX License
--   List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License
--   List 3.16, SPDX License List 3.23
TAPR_OHL_1_0 :: LicenseId

-- | <tt>TCL</tt>, TCL/TK License
TCL :: LicenseId

-- | <tt>TCP-wrappers</tt>, TCP Wrappers License
TCP_wrappers :: LicenseId

-- | <tt>TermReadKey</tt>, TermReadKey License, SPDX License List 3.23
TermReadKey :: LicenseId

-- | <tt>TGPPL-1.0</tt>, Transitive Grace Period Public Licence 1.0, SPDX
--   License List 3.23
TGPPL_1_0 :: LicenseId

-- | <tt>TMate</tt>, TMate Open Source License
TMate :: LicenseId

-- | <tt>TORQUE-1.1</tt>, TORQUE v2.5+ Software License v1.1
TORQUE_1_1 :: LicenseId

-- | <tt>TOSL</tt>, Trusster Open Source License
TOSL :: LicenseId

-- | <tt>TPDL</tt>, Time::ParseDate License, SPDX License List 3.23
TPDL :: LicenseId

-- | <tt>TPL-1.0</tt>, THOR Public License 1.0, SPDX License List 3.23
TPL_1_0 :: LicenseId

-- | <tt>TTWL</tt>, Text-Tabs+Wrap License, SPDX License List 3.23
TTWL :: LicenseId

-- | <tt>TTYP0</tt>, TTYP0 License, SPDX License List 3.23
TTYP0 :: LicenseId

-- | <tt>TU-Berlin-1.0</tt>, Technische Universitaet Berlin License 1.0,
--   SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9,
--   SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23
TU_Berlin_1_0 :: LicenseId

-- | <tt>TU-Berlin-2.0</tt>, Technische Universitaet Berlin License 2.0,
--   SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9,
--   SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23
TU_Berlin_2_0 :: LicenseId

-- | <tt>UCAR</tt>, UCAR License, SPDX License List 3.23
UCAR :: LicenseId

-- | <tt>UCL-1.0</tt>, Upstream Compatibility License v1.0, SPDX License
--   List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License
--   List 3.23
UCL_1_0 :: LicenseId

-- | <tt>ulem</tt>, ulem License, SPDX License List 3.23
Ulem :: LicenseId

-- | <tt>UMich-Merit</tt>, Michigan/Merit Networks License, SPDX License
--   List 3.23
UMich_Merit :: LicenseId

-- | <tt>Unicode-3.0</tt>, Unicode License v3, SPDX License List 3.23
Unicode_3_0 :: LicenseId

-- | <tt>Unicode-DFS-2015</tt>, Unicode License Agreement - Data Files and
--   Software (2015)
Unicode_DFS_2015 :: LicenseId

-- | <tt>Unicode-DFS-2016</tt>, Unicode License Agreement - Data Files and
--   Software (2016)
Unicode_DFS_2016 :: LicenseId

-- | <tt>Unicode-TOU</tt>, Unicode Terms of Use
Unicode_TOU :: LicenseId

-- | <tt>UnixCrypt</tt>, UnixCrypt License, SPDX License List 3.23
UnixCrypt :: LicenseId

-- | <tt>Unlicense</tt>, The Unlicense
Unlicense :: LicenseId

-- | <tt>UPL-1.0</tt>, Universal Permissive License v1.0
UPL_1_0 :: LicenseId

-- | <tt>URT-RLE</tt>, Utah Raster Toolkit Run Length Encoded License, SPDX
--   License List 3.23
URT_RLE :: LicenseId

-- | <tt>Vim</tt>, Vim License
Vim :: LicenseId

-- | <tt>VOSTROM</tt>, VOSTROM Public License for Open Source
VOSTROM :: LicenseId

-- | <tt>VSL-1.0</tt>, Vovida Software License v1.0
VSL_1_0 :: LicenseId

-- | <tt>W3C-19980720</tt>, W3C Software Notice and License (1998-07-20)
W3C_19980720 :: LicenseId

-- | <tt>W3C-20150513</tt>, W3C Software Notice and Document License
--   (2015-05-13)
W3C_20150513 :: LicenseId

-- | <tt>W3C</tt>, W3C Software Notice and License (2002-12-31)
W3C :: LicenseId

-- | <tt>w3m</tt>, w3m License, SPDX License List 3.23
W3m :: LicenseId

-- | <tt>Watcom-1.0</tt>, Sybase Open Watcom Public License 1.0
Watcom_1_0 :: LicenseId

-- | <tt>Widget-Workshop</tt>, Widget Workshop License, SPDX License List
--   3.23
Widget_Workshop :: LicenseId

-- | <tt>Wsuipa</tt>, Wsuipa License
Wsuipa :: LicenseId

-- | <tt>WTFPL</tt>, Do What The F*ck You Want To Public License
WTFPL :: LicenseId

-- | <tt>X11-distribute-modifications-variant</tt>, X11 License
--   Distribution Modification Variant, SPDX License List 3.16, SPDX
--   License List 3.23
X11_distribute_modifications_variant :: LicenseId

-- | <tt>X11</tt>, X11 License
X11 :: LicenseId

-- | <tt>Xdebug-1.03</tt>, Xdebug License v 1.03, SPDX License List 3.23
Xdebug_1_03 :: LicenseId

-- | <tt>Xerox</tt>, Xerox License
Xerox :: LicenseId

-- | <tt>Xfig</tt>, Xfig License, SPDX License List 3.23
Xfig :: LicenseId

-- | <tt>XFree86-1.1</tt>, XFree86 License 1.1
XFree86_1_1 :: LicenseId

-- | <tt>xinetd</tt>, xinetd License
Xinetd :: LicenseId

-- | <tt>xkeyboard-config-Zinoviev</tt>, xkeyboard-config Zinoviev License,
--   SPDX License List 3.23
Xkeyboard_config_Zinoviev :: LicenseId

-- | <tt>xlock</tt>, xlock License, SPDX License List 3.23
Xlock :: LicenseId

-- | <tt>Xnet</tt>, X.Net License
Xnet :: LicenseId

-- | <tt>xpp</tt>, XPP License
Xpp :: LicenseId

-- | <tt>XSkat</tt>, XSkat License
XSkat :: LicenseId

-- | <tt>YPL-1.0</tt>, Yahoo! Public License v1.0
YPL_1_0 :: LicenseId

-- | <tt>YPL-1.1</tt>, Yahoo! Public License v1.1
YPL_1_1 :: LicenseId

-- | <tt>Zed</tt>, Zed License
Zed :: LicenseId

-- | <tt>Zeeff</tt>, Zeeff License, SPDX License List 3.23
Zeeff :: LicenseId

-- | <tt>Zend-2.0</tt>, Zend License v2.0
Zend_2_0 :: LicenseId

-- | <tt>Zimbra-1.3</tt>, Zimbra Public License v1.3
Zimbra_1_3 :: LicenseId

-- | <tt>Zimbra-1.4</tt>, Zimbra Public License v1.4
Zimbra_1_4 :: LicenseId

-- | <tt>zlib-acknowledgement</tt>, zlib/libpng License with
--   Acknowledgement
Zlib_acknowledgement :: LicenseId

-- | <tt>Zlib</tt>, zlib License
Zlib :: LicenseId

-- | <tt>ZPL-1.1</tt>, Zope Public License 1.1
ZPL_1_1 :: LicenseId

-- | <tt>ZPL-2.0</tt>, Zope Public License 2.0
ZPL_2_0 :: LicenseId

-- | <tt>ZPL-2.1</tt>, Zope Public License 2.1
ZPL_2_1 :: LicenseId

-- | License SPDX identifier, e.g. <tt>"BSD-3-Clause"</tt>.
licenseId :: LicenseId -> String

-- | License name, e.g. <tt>"GNU General Public License v2.0 only"</tt>
licenseName :: LicenseId -> String

-- | Whether the license is approved by Open Source Initiative (OSI).
--   
--   See <a>https://opensource.org/licenses/alphabetical</a>.
licenseIsOsiApproved :: LicenseId -> Bool

-- | Create a <a>LicenseId</a> from a <a>String</a>.
mkLicenseId :: LicenseListVersion -> String -> Maybe LicenseId
licenseIdList :: LicenseListVersion -> [LicenseId]

-- | SPDX License Exceptions identifiers list v3.23
data LicenseExceptionId

-- | <tt>389-exception</tt>, 389 Directory Server Exception
DS389_exception :: LicenseExceptionId

-- | <tt>Asterisk-exception</tt>, Asterisk exception, SPDX License List
--   3.23
Asterisk_exception :: LicenseExceptionId

-- | <tt>Autoconf-exception-2.0</tt>, Autoconf exception 2.0
Autoconf_exception_2_0 :: LicenseExceptionId

-- | <tt>Autoconf-exception-3.0</tt>, Autoconf exception 3.0
Autoconf_exception_3_0 :: LicenseExceptionId

-- | <tt>Autoconf-exception-generic-3.0</tt>, Autoconf generic exception
--   for GPL-3.0, SPDX License List 3.23
Autoconf_exception_generic_3_0 :: LicenseExceptionId

-- | <tt>Autoconf-exception-generic</tt>, Autoconf generic exception, SPDX
--   License List 3.23
Autoconf_exception_generic :: LicenseExceptionId

-- | <tt>Autoconf-exception-macro</tt>, Autoconf macro exception, SPDX
--   License List 3.23
Autoconf_exception_macro :: LicenseExceptionId

-- | <tt>Bison-exception-1.24</tt>, Bison exception 1.24, SPDX License List
--   3.23
Bison_exception_1_24 :: LicenseExceptionId

-- | <tt>Bison-exception-2.2</tt>, Bison exception 2.2
Bison_exception_2_2 :: LicenseExceptionId

-- | <tt>Bootloader-exception</tt>, Bootloader Distribution Exception
Bootloader_exception :: LicenseExceptionId

-- | <tt>Classpath-exception-2.0</tt>, Classpath exception 2.0
Classpath_exception_2_0 :: LicenseExceptionId

-- | <tt>CLISP-exception-2.0</tt>, CLISP exception 2.0
CLISP_exception_2_0 :: LicenseExceptionId

-- | <tt>cryptsetup-OpenSSL-exception</tt>, cryptsetup OpenSSL exception,
--   SPDX License List 3.23
Cryptsetup_OpenSSL_exception :: LicenseExceptionId

-- | <tt>DigiRule-FOSS-exception</tt>, DigiRule FOSS License Exception
DigiRule_FOSS_exception :: LicenseExceptionId

-- | <tt>eCos-exception-2.0</tt>, eCos exception 2.0
ECos_exception_2_0 :: LicenseExceptionId

-- | <tt>Fawkes-Runtime-exception</tt>, Fawkes Runtime Exception
Fawkes_Runtime_exception :: LicenseExceptionId

-- | <tt>FLTK-exception</tt>, FLTK exception
FLTK_exception :: LicenseExceptionId

-- | <tt>fmt-exception</tt>, fmt exception, SPDX License List 3.23
Fmt_exception :: LicenseExceptionId

-- | <tt>Font-exception-2.0</tt>, Font exception 2.0
Font_exception_2_0 :: LicenseExceptionId

-- | <tt>freertos-exception-2.0</tt>, FreeRTOS Exception 2.0
Freertos_exception_2_0 :: LicenseExceptionId

-- | <tt>GCC-exception-2.0-note</tt>, GCC Runtime Library exception 2.0 -
--   note variant, SPDX License List 3.23
GCC_exception_2_0_note :: LicenseExceptionId

-- | <tt>GCC-exception-2.0</tt>, GCC Runtime Library exception 2.0
GCC_exception_2_0 :: LicenseExceptionId

-- | <tt>GCC-exception-3.1</tt>, GCC Runtime Library exception 3.1
GCC_exception_3_1 :: LicenseExceptionId

-- | <tt>Gmsh-exception</tt>, Gmsh exception&gt;, SPDX License List 3.23
Gmsh_exception :: LicenseExceptionId

-- | <tt>GNAT-exception</tt>, GNAT exception, SPDX License List 3.23
GNAT_exception :: LicenseExceptionId

-- | <tt>GNOME-examples-exception</tt>, GNOME examples exception, SPDX
--   License List 3.23
GNOME_examples_exception :: LicenseExceptionId

-- | <tt>GNU-compiler-exception</tt>, GNU Compiler Exception, SPDX License
--   List 3.23
GNU_compiler_exception :: LicenseExceptionId

-- | <tt>gnu-javamail-exception</tt>, GNU JavaMail exception
Gnu_javamail_exception :: LicenseExceptionId

-- | <tt>GPL-3.0-interface-exception</tt>, GPL-3.0 Interface Exception,
--   SPDX License List 3.23
GPL_3_0_interface_exception :: LicenseExceptionId

-- | <tt>GPL-3.0-linking-exception</tt>, GPL-3.0 Linking Exception, SPDX
--   License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX
--   License List 3.23
GPL_3_0_linking_exception :: LicenseExceptionId

-- | <tt>GPL-3.0-linking-source-exception</tt>, GPL-3.0 Linking Exception
--   (with Corresponding Source), SPDX License List 3.9, SPDX License List
--   3.10, SPDX License List 3.16, SPDX License List 3.23
GPL_3_0_linking_source_exception :: LicenseExceptionId

-- | <tt>GPL-CC-1.0</tt>, GPL Cooperation Commitment 1.0, SPDX License List
--   3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List
--   3.16, SPDX License List 3.23
GPL_CC_1_0 :: LicenseExceptionId

-- | <tt>GStreamer-exception-2005</tt>, GStreamer Exception (2005), SPDX
--   License List 3.23
GStreamer_exception_2005 :: LicenseExceptionId

-- | <tt>GStreamer-exception-2008</tt>, GStreamer Exception (2008), SPDX
--   License List 3.23
GStreamer_exception_2008 :: LicenseExceptionId

-- | <tt>i2p-gpl-java-exception</tt>, i2p GPL+Java Exception
I2p_gpl_java_exception :: LicenseExceptionId

-- | <tt>KiCad-libraries-exception</tt>, KiCad Libraries Exception, SPDX
--   License List 3.23
KiCad_libraries_exception :: LicenseExceptionId

-- | <tt>LGPL-3.0-linking-exception</tt>, LGPL-3.0 Linking Exception, SPDX
--   License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX
--   License List 3.23
LGPL_3_0_linking_exception :: LicenseExceptionId

-- | <tt>libpri-OpenH323-exception</tt>, libpri OpenH323 exception, SPDX
--   License List 3.23
Libpri_OpenH323_exception :: LicenseExceptionId

-- | <tt>Libtool-exception</tt>, Libtool Exception
Libtool_exception :: LicenseExceptionId

-- | <tt>Linux-syscall-note</tt>, Linux Syscall Note
Linux_syscall_note :: LicenseExceptionId

-- | <tt>LLGPL</tt>, LLGPL Preamble, SPDX License List 3.23
LLGPL :: LicenseExceptionId

-- | <tt>LLVM-exception</tt>, LLVM Exception, SPDX License List 3.2, SPDX
--   License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX
--   License List 3.16, SPDX License List 3.23
LLVM_exception :: LicenseExceptionId

-- | <tt>LZMA-exception</tt>, LZMA exception
LZMA_exception :: LicenseExceptionId

-- | <tt>mif-exception</tt>, Macros and Inline Functions Exception
Mif_exception :: LicenseExceptionId

-- | <tt>Nokia-Qt-exception-1.1</tt>, Nokia Qt LGPL exception 1.1, SPDX
--   License List 3.0, SPDX License List 3.2
Nokia_Qt_exception_1_1 :: LicenseExceptionId

-- | <tt>OCaml-LGPL-linking-exception</tt>, OCaml LGPL Linking Exception,
--   SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10,
--   SPDX License List 3.16, SPDX License List 3.23
OCaml_LGPL_linking_exception :: LicenseExceptionId

-- | <tt>OCCT-exception-1.0</tt>, Open CASCADE Exception 1.0
OCCT_exception_1_0 :: LicenseExceptionId

-- | <tt>OpenJDK-assembly-exception-1.0</tt>, OpenJDK Assembly exception
--   1.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License List
--   3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List
--   3.23
OpenJDK_assembly_exception_1_0 :: LicenseExceptionId

-- | <tt>openvpn-openssl-exception</tt>, OpenVPN OpenSSL Exception
Openvpn_openssl_exception :: LicenseExceptionId

-- | <tt>PS-or-PDF-font-exception-20170817</tt>, PS/PDF font exception
--   (2017-08-17), SPDX License List 3.2, SPDX License List 3.6, SPDX
--   License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX
--   License List 3.23
PS_or_PDF_font_exception_20170817 :: LicenseExceptionId

-- | <tt>QPL-1.0-INRIA-2004-exception</tt>, INRIA QPL 1.0 2004 variant
--   exception, SPDX License List 3.23
QPL_1_0_INRIA_2004_exception :: LicenseExceptionId

-- | <tt>Qt-GPL-exception-1.0</tt>, Qt GPL exception 1.0, SPDX License List
--   3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List
--   3.10, SPDX License List 3.16, SPDX License List 3.23
Qt_GPL_exception_1_0 :: LicenseExceptionId

-- | <tt>Qt-LGPL-exception-1.1</tt>, Qt LGPL exception 1.1, SPDX License
--   List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License
--   List 3.10, SPDX License List 3.16, SPDX License List 3.23
Qt_LGPL_exception_1_1 :: LicenseExceptionId

-- | <tt>Qwt-exception-1.0</tt>, Qwt exception 1.0
Qwt_exception_1_0 :: LicenseExceptionId

-- | <tt>SANE-exception</tt>, SANE Exception, SPDX License List 3.23
SANE_exception :: LicenseExceptionId

-- | <tt>SHL-2.0</tt>, Solderpad Hardware License v2.0, SPDX License List
--   3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List
--   3.23
SHL_2_0 :: LicenseExceptionId

-- | <tt>SHL-2.1</tt>, Solderpad Hardware License v2.1, SPDX License List
--   3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List
--   3.23
SHL_2_1 :: LicenseExceptionId

-- | <tt>stunnel-exception</tt>, stunnel Exception, SPDX License List 3.23
Stunnel_exception :: LicenseExceptionId

-- | <tt>SWI-exception</tt>, SWI exception, SPDX License List 3.23
SWI_exception :: LicenseExceptionId

-- | <tt>Swift-exception</tt>, Swift Exception, SPDX License List 3.6, SPDX
--   License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX
--   License List 3.23
Swift_exception :: LicenseExceptionId

-- | <tt>Texinfo-exception</tt>, Texinfo exception, SPDX License List 3.23
Texinfo_exception :: LicenseExceptionId

-- | <tt>u-boot-exception-2.0</tt>, U-Boot exception 2.0
U_boot_exception_2_0 :: LicenseExceptionId

-- | <tt>UBDL-exception</tt>, Unmodified Binary Distribution exception,
--   SPDX License List 3.23
UBDL_exception :: LicenseExceptionId

-- | <tt>Universal-FOSS-exception-1.0</tt>, Universal FOSS Exception,
--   Version 1.0, SPDX License List 3.6, SPDX License List 3.9, SPDX
--   License List 3.10, SPDX License List 3.16, SPDX License List 3.23
Universal_FOSS_exception_1_0 :: LicenseExceptionId

-- | <tt>vsftpd-openssl-exception</tt>, vsftpd OpenSSL exception, SPDX
--   License List 3.23
Vsftpd_openssl_exception :: LicenseExceptionId

-- | <tt>WxWindows-exception-3.1</tt>, WxWindows Library Exception 3.1
WxWindows_exception_3_1 :: LicenseExceptionId

-- | <tt>x11vnc-openssl-exception</tt>, x11vnc OpenSSL Exception, SPDX
--   License List 3.23
X11vnc_openssl_exception :: LicenseExceptionId

-- | License SPDX identifier, e.g. <tt>"BSD-3-Clause"</tt>.
licenseExceptionId :: LicenseExceptionId -> String

-- | License name, e.g. <tt>"GNU General Public License v2.0 only"</tt>
licenseExceptionName :: LicenseExceptionId -> String

-- | Create a <a>LicenseExceptionId</a> from a <a>String</a>.
mkLicenseExceptionId :: LicenseListVersion -> String -> Maybe LicenseExceptionId
licenseExceptionIdList :: LicenseListVersion -> [LicenseExceptionId]

-- | A user defined license reference denoted by
--   <tt>LicenseRef-[idstring]</tt> (for a license not on the SPDX License
--   List);
data LicenseRef

-- | License reference.
licenseRef :: LicenseRef -> String

-- | Document reference.
licenseDocumentRef :: LicenseRef -> Maybe String

-- | Create <a>LicenseRef</a> from optional document ref and name.
mkLicenseRef :: Maybe String -> String -> Maybe LicenseRef

-- | Like <a>mkLicenseRef</a> but convert invalid characters into
--   <tt>-</tt>.
mkLicenseRef' :: Maybe String -> String -> LicenseRef

-- | SPDX License List version <tt>Cabal</tt> is aware of.
data LicenseListVersion
LicenseListVersion_3_0 :: LicenseListVersion
LicenseListVersion_3_2 :: LicenseListVersion
LicenseListVersion_3_6 :: LicenseListVersion
LicenseListVersion_3_9 :: LicenseListVersion
LicenseListVersion_3_10 :: LicenseListVersion
LicenseListVersion_3_16 :: LicenseListVersion
LicenseListVersion_3_23 :: LicenseListVersion
cabalSpecVersionToSPDXListVersion :: CabalSpecVersion -> LicenseListVersion


-- | Data type for Haskell module names.
module Distribution.ModuleName

-- | A valid Haskell module name.
data ModuleName
fromString :: IsString a => String -> a

-- | Construct a <a>ModuleName</a> from valid module components, i.e. parts
--   separated by dots.

-- | <i>Deprecated: Exists for cabal-install only</i>
fromComponents :: [String] -> ModuleName

-- | The individual components of a hierarchical module name. For example
--   
--   <pre>
--   components (fromString "A.B.C") = ["A", "B", "C"]
--   </pre>
components :: ModuleName -> [String]

-- | Convert a module name to a file path, but without any file extension.
--   For example:
--   
--   <pre>
--   toFilePath (fromString "A.B.C") = "A/B/C"
--   </pre>
toFilePath :: ModuleName -> FilePath

-- | The module name <tt>Main</tt>.
main :: ModuleName
validModuleComponent :: String -> Bool
instance Data.Binary.Class.Binary Distribution.ModuleName.ModuleName
instance GHC.Internal.Data.Data.Data Distribution.ModuleName.ModuleName
instance GHC.Classes.Eq Distribution.ModuleName.ModuleName
instance GHC.Internal.Generics.Generic Distribution.ModuleName.ModuleName
instance GHC.Internal.Data.String.IsString Distribution.ModuleName.ModuleName
instance Control.DeepSeq.NFData Distribution.ModuleName.ModuleName
instance GHC.Classes.Ord Distribution.ModuleName.ModuleName
instance Distribution.Parsec.Parsec Distribution.ModuleName.ModuleName
instance Distribution.Pretty.Pretty Distribution.ModuleName.ModuleName
instance GHC.Internal.Read.Read Distribution.ModuleName.ModuleName
instance GHC.Internal.Show.Show Distribution.ModuleName.ModuleName
instance Distribution.Utils.Structured.Structured Distribution.ModuleName.ModuleName

module Distribution.Types.ModuleRenaming

-- | Renaming applied to the modules provided by a package. The boolean
--   indicates whether or not to also include all of the original names of
--   modules. Thus, <tt>ModuleRenaming False []</tt> is "don't expose any
--   modules, and <tt>ModuleRenaming True [(<a>Data.Bool</a>,
--   <a>Bool</a>)]</tt> is, "expose all modules, but also expose
--   <tt>Data.Bool</tt> as <tt>Bool</tt>". If a renaming is omitted you get
--   the <a>DefaultRenaming</a>.
--   
--   (NB: This is a list not a map so that we can preserve order.)
data ModuleRenaming

-- | A module renaming/thinning; e.g., <tt>(A as B, C as C)</tt> brings
--   <tt>B</tt> and <tt>C</tt> into scope.
ModuleRenaming :: [(ModuleName, ModuleName)] -> ModuleRenaming

-- | The default renaming, bringing all exported modules into scope.
DefaultRenaming :: ModuleRenaming

-- | Hiding renaming, e.g., <tt>hiding (A, B)</tt>, bringing all exported
--   modules into scope except the hidden ones.
HidingRenaming :: [ModuleName] -> ModuleRenaming

-- | Interpret a <a>ModuleRenaming</a> as a partial map from
--   <a>ModuleName</a> to <a>ModuleName</a>. For efficiency, you should
--   partially apply it with <a>ModuleRenaming</a> and then reuse it.
interpModuleRenaming :: ModuleRenaming -> ModuleName -> Maybe ModuleName

-- | The default renaming, if something is specified in
--   <tt>build-depends</tt> only.
defaultRenaming :: ModuleRenaming

-- | Tests if its the default renaming; we can use a more compact syntax in
--   <a>IncludeRenaming</a> in this case.
isDefaultRenaming :: ModuleRenaming -> Bool
instance Data.Binary.Class.Binary Distribution.Types.ModuleRenaming.ModuleRenaming
instance GHC.Internal.Data.Data.Data Distribution.Types.ModuleRenaming.ModuleRenaming
instance GHC.Classes.Eq Distribution.Types.ModuleRenaming.ModuleRenaming
instance GHC.Internal.Generics.Generic Distribution.Types.ModuleRenaming.ModuleRenaming
instance Control.DeepSeq.NFData Distribution.Types.ModuleRenaming.ModuleRenaming
instance GHC.Classes.Ord Distribution.Types.ModuleRenaming.ModuleRenaming
instance Distribution.Parsec.Parsec Distribution.Types.ModuleRenaming.ModuleRenaming
instance Distribution.Pretty.Pretty Distribution.Types.ModuleRenaming.ModuleRenaming
instance GHC.Internal.Read.Read Distribution.Types.ModuleRenaming.ModuleRenaming
instance GHC.Internal.Show.Show Distribution.Types.ModuleRenaming.ModuleRenaming
instance Distribution.Utils.Structured.Structured Distribution.Types.ModuleRenaming.ModuleRenaming

module Distribution.Types.IncludeRenaming

-- | A renaming on an include: (provides renaming, requires renaming)
data IncludeRenaming
IncludeRenaming :: ModuleRenaming -> ModuleRenaming -> IncludeRenaming
[includeProvidesRn] :: IncludeRenaming -> ModuleRenaming
[includeRequiresRn] :: IncludeRenaming -> ModuleRenaming

-- | The <a>defaultIncludeRenaming</a> applied when you only
--   <tt>build-depends</tt> on a package.
defaultIncludeRenaming :: IncludeRenaming

-- | Is an <a>IncludeRenaming</a> the default one?
isDefaultIncludeRenaming :: IncludeRenaming -> Bool
instance Data.Binary.Class.Binary Distribution.Types.IncludeRenaming.IncludeRenaming
instance GHC.Internal.Data.Data.Data Distribution.Types.IncludeRenaming.IncludeRenaming
instance GHC.Classes.Eq Distribution.Types.IncludeRenaming.IncludeRenaming
instance GHC.Internal.Generics.Generic Distribution.Types.IncludeRenaming.IncludeRenaming
instance Control.DeepSeq.NFData Distribution.Types.IncludeRenaming.IncludeRenaming
instance GHC.Classes.Ord Distribution.Types.IncludeRenaming.IncludeRenaming
instance Distribution.Parsec.Parsec Distribution.Types.IncludeRenaming.IncludeRenaming
instance Distribution.Pretty.Pretty Distribution.Types.IncludeRenaming.IncludeRenaming
instance GHC.Internal.Read.Read Distribution.Types.IncludeRenaming.IncludeRenaming
instance GHC.Internal.Show.Show Distribution.Types.IncludeRenaming.IncludeRenaming
instance Distribution.Utils.Structured.Structured Distribution.Types.IncludeRenaming.IncludeRenaming

module Distribution.Types.Mixin

-- | <i>Invariant:</i> if <a>mixinLibraryName</a> is <a>LSubLibName</a>,
--   it's not the same as <a>mixinPackageName</a>. In other words, the same
--   invariant as <tt>Dependency</tt> has.
data Mixin
Mixin :: PackageName -> LibraryName -> IncludeRenaming -> Mixin
[mixinPackageName] :: Mixin -> PackageName
[mixinLibraryName] :: Mixin -> LibraryName
[mixinIncludeRenaming] :: Mixin -> IncludeRenaming

-- | Smart constructor of <a>Mixin</a>, enforces invariant.
mkMixin :: PackageName -> LibraryName -> IncludeRenaming -> Mixin

-- | Restore invariant
normaliseMixin :: Mixin -> Mixin
instance Data.Binary.Class.Binary Distribution.Types.Mixin.Mixin
instance GHC.Internal.Data.Data.Data Distribution.Types.Mixin.Mixin
instance GHC.Classes.Eq Distribution.Types.Mixin.Mixin
instance GHC.Internal.Generics.Generic Distribution.Types.Mixin.Mixin
instance Control.DeepSeq.NFData Distribution.Types.Mixin.Mixin
instance GHC.Classes.Ord Distribution.Types.Mixin.Mixin
instance Distribution.Parsec.Parsec Distribution.Types.Mixin.Mixin
instance Distribution.Pretty.Pretty Distribution.Types.Mixin.Mixin
instance GHC.Internal.Read.Read Distribution.Types.Mixin.Mixin
instance GHC.Internal.Show.Show Distribution.Types.Mixin.Mixin
instance Distribution.Utils.Structured.Structured Distribution.Types.Mixin.Mixin

module Distribution.Types.ModuleReexport
data ModuleReexport
ModuleReexport :: Maybe PackageName -> ModuleName -> ModuleName -> ModuleReexport
[moduleReexportOriginalPackage] :: ModuleReexport -> Maybe PackageName
[moduleReexportOriginalName] :: ModuleReexport -> ModuleName
[moduleReexportName] :: ModuleReexport -> ModuleName
instance Data.Binary.Class.Binary Distribution.Types.ModuleReexport.ModuleReexport
instance GHC.Internal.Data.Data.Data Distribution.Types.ModuleReexport.ModuleReexport
instance GHC.Classes.Eq Distribution.Types.ModuleReexport.ModuleReexport
instance GHC.Internal.Generics.Generic Distribution.Types.ModuleReexport.ModuleReexport
instance Control.DeepSeq.NFData Distribution.Types.ModuleReexport.ModuleReexport
instance GHC.Classes.Ord Distribution.Types.ModuleReexport.ModuleReexport
instance Distribution.Parsec.Parsec Distribution.Types.ModuleReexport.ModuleReexport
instance Distribution.Pretty.Pretty Distribution.Types.ModuleReexport.ModuleReexport
instance GHC.Internal.Read.Read Distribution.Types.ModuleReexport.ModuleReexport
instance GHC.Internal.Show.Show Distribution.Types.ModuleReexport.ModuleReexport
instance Distribution.Utils.Structured.Structured Distribution.Types.ModuleReexport.ModuleReexport


-- | A data type representing directed graphs, backed by <a>Data.Graph</a>.
--   It is strict in the node type.
--   
--   This is an alternative interface to <a>Data.Graph</a>. In this
--   interface, nodes (identified by the <a>IsNode</a> type class) are
--   associated with a key and record the keys of their neighbors. This
--   interface is more convenient than <a>Graph</a>, which requires
--   vertices to be explicitly handled by integer indexes.
--   
--   The current implementation has somewhat peculiar performance
--   characteristics. The asymptotics of all map-like operations mirror
--   their counterparts in <a>Data.Map</a>. However, to perform a graph
--   operation, we first must build the <a>Data.Graph</a> representation,
--   an operation that takes <i>O(V + E log V)</i>. However, this operation
--   can be amortized across all queries on that particular graph.
--   
--   Some nodes may be broken, i.e., refer to neighbors which are not
--   stored in the graph. In our graph algorithms, we transparently ignore
--   such edges; however, you can easily query for the broken vertices of a
--   graph using <a>broken</a> (and should, e.g., to ensure that a closure
--   of a graph is well-formed.) It's possible to take a closed subset of a
--   broken graph and get a well-formed graph.
module Distribution.Compat.Graph

-- | A graph of nodes <tt>a</tt>. The nodes are expected to have instance
--   of class <a>IsNode</a>.
data Graph a

-- | The <a>IsNode</a> class is used for datatypes which represent directed
--   graph nodes. A node of type <tt>a</tt> is associated with some unique
--   key of type <tt><a>Key</a> a</tt>; given a node we can determine its
--   key (<a>nodeKey</a>) and the keys of its neighbors
--   (<a>nodeNeighbors</a>).
class Ord Key a => IsNode a where {
    type Key a;
}
nodeKey :: IsNode a => a -> Key a
nodeNeighbors :: IsNode a => a -> [Key a]

-- | <i>O(1)</i>. Is the graph empty?
null :: Graph a -> Bool

-- | <i>O(1)</i>. The number of nodes in the graph.
size :: Graph a -> Int

-- | <i>O(log V)</i>. Check if the key is in the graph.
member :: IsNode a => Key a -> Graph a -> Bool

-- | <i>O(log V)</i>. Lookup the node at a key in the graph.
lookup :: IsNode a => Key a -> Graph a -> Maybe a

-- | <i>O(1)</i>. The empty graph.
empty :: IsNode a => Graph a

-- | <i>O(log V)</i>. Insert a node into a graph.
insert :: IsNode a => a -> Graph a -> Graph a

-- | <i>O(log V)</i>. Delete the node at a key from the graph.
deleteKey :: IsNode a => Key a -> Graph a -> Graph a

-- | <i>O(log V)</i>. Lookup and delete. This function returns the deleted
--   value if it existed.
deleteLookup :: IsNode a => Key a -> Graph a -> (Maybe a, Graph a)

-- | <i>O(V + V')</i>. Left-biased union, preferring entries from the first
--   map when conflicts occur.
unionLeft :: IsNode a => Graph a -> Graph a -> Graph a

-- | <i>O(V + V')</i>. Right-biased union, preferring entries from the
--   second map when conflicts occur. <tt><a>nodeKey</a> x = <a>nodeKey</a>
--   (f x)</tt>.
unionRight :: IsNode a => Graph a -> Graph a -> Graph a

-- | <i>Ω(V + E)</i>. Compute the strongly connected components of a graph.
--   Requires amortized construction of graph.
stronglyConnComp :: Graph a -> [SCC a]

-- | Strongly connected component.
data SCC vertex

-- | A single vertex that is not in any cycle.
AcyclicSCC :: vertex -> SCC vertex

-- | A maximal set of mutually reachable vertices.
NECyclicSCC :: {-# UNPACK #-} !NonEmpty vertex -> SCC vertex

-- | Partial pattern synonym for backward compatibility with <tt>containers
--   &lt; 0.7</tt>.
pattern CyclicSCC :: [vertex] -> SCC vertex

-- | <i>Ω(V + E)</i>. Compute the cycles of a graph. Requires amortized
--   construction of graph.
cycles :: Graph a -> [[a]]

-- | <i>O(1)</i>. Return a list of nodes paired with their broken neighbors
--   (i.e., neighbor keys which are not in the graph). Requires amortized
--   construction of graph.
broken :: Graph a -> [(a, [Key a])]

-- | Lookup the immediate neighbors from a key in the graph. Requires
--   amortized construction of graph.
neighbors :: Graph a -> Key a -> Maybe [a]

-- | Lookup the immediate reverse neighbors from a key in the graph.
--   Requires amortized construction of graph.
revNeighbors :: Graph a -> Key a -> Maybe [a]

-- | Compute the subgraph which is the closure of some set of keys. Returns
--   <tt>Nothing</tt> if one (or more) keys are not present in the graph.
--   Requires amortized construction of graph.
closure :: Graph a -> [Key a] -> Maybe [a]

-- | Compute the reverse closure of a graph from some set of keys. Returns
--   <tt>Nothing</tt> if one (or more) keys are not present in the graph.
--   Requires amortized construction of graph.
revClosure :: Graph a -> [Key a] -> Maybe [a]

-- | Topologically sort the nodes of a graph. Requires amortized
--   construction of graph.
topSort :: Graph a -> [a]

-- | Reverse topologically sort the nodes of a graph. Requires amortized
--   construction of graph.
revTopSort :: Graph a -> [a]

-- | <i>O(1)</i>. Convert a graph into a map from keys to nodes. The
--   resulting map <tt>m</tt> is guaranteed to have the property that
--   <tt><a>all</a> ((k,n) -&gt; k == <a>nodeKey</a> n) (<a>toList</a>
--   m)</tt>.
toMap :: Graph a -> Map (Key a) a

-- | <i>O(V log V)</i>. Convert a list of nodes (with distinct keys) into a
--   graph.
fromDistinctList :: (IsNode a, Show (Key a)) => [a] -> Graph a

-- | <i>O(V)</i>. Convert a graph into a list of nodes.
toList :: Graph a -> [a]

-- | <i>O(V)</i>. Convert a graph into a list of keys.
keys :: Graph a -> [Key a]

-- | <i>O(V)</i>. Convert a graph into a set of keys.
keysSet :: Graph a -> Set (Key a)

-- | <i>O(1)</i>. Convert a graph into a <a>Graph</a>. Requires amortized
--   construction of graph.
toGraph :: Graph a -> (Graph, Vertex -> a, Key a -> Maybe Vertex)

-- | A simple, trivial data type which admits an <a>IsNode</a> instance.
data Node k a
N :: a -> k -> [k] -> Node k a

-- | Get the value from a <a>Node</a>.
nodeValue :: Node k a -> a
instance (Distribution.Compat.Graph.IsNode a, Data.Binary.Class.Binary a, GHC.Internal.Show.Show (Distribution.Compat.Graph.Key a)) => Data.Binary.Class.Binary (Distribution.Compat.Graph.Graph a)
instance (GHC.Classes.Eq (Distribution.Compat.Graph.Key a), GHC.Classes.Eq a) => GHC.Classes.Eq (Distribution.Compat.Graph.Graph a)
instance (GHC.Classes.Eq a, GHC.Classes.Eq k) => GHC.Classes.Eq (Distribution.Compat.Graph.Node k a)
instance GHC.Internal.Data.Foldable.Foldable Distribution.Compat.Graph.Graph
instance GHC.Internal.Base.Functor (Distribution.Compat.Graph.Node k)
instance (Distribution.Compat.Graph.IsNode a, Distribution.Compat.Graph.IsNode b, Distribution.Compat.Graph.Key a GHC.Types.~ Distribution.Compat.Graph.Key b) => Distribution.Compat.Graph.IsNode (GHC.Internal.Data.Either.Either a b)
instance GHC.Classes.Ord k => Distribution.Compat.Graph.IsNode (Distribution.Compat.Graph.Node k a)
instance (Control.DeepSeq.NFData a, Control.DeepSeq.NFData (Distribution.Compat.Graph.Key a)) => Control.DeepSeq.NFData (Distribution.Compat.Graph.Graph a)
instance (Distribution.Compat.Graph.IsNode a, GHC.Internal.Read.Read a, GHC.Internal.Show.Show (Distribution.Compat.Graph.Key a)) => GHC.Internal.Read.Read (Distribution.Compat.Graph.Graph a)
instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Distribution.Compat.Graph.Graph a)
instance (GHC.Internal.Show.Show a, GHC.Internal.Show.Show k) => GHC.Internal.Show.Show (Distribution.Compat.Graph.Node k a)
instance Distribution.Utils.Structured.Structured a => Distribution.Utils.Structured.Structured (Distribution.Compat.Graph.Graph a)


-- | Exports the <a>Version</a> type along with a parser and pretty
--   printer. A version is something like <tt>"1.3.3"</tt>. It also defines
--   the <a>VersionRange</a> data types. Version ranges are like <tt>"&gt;=
--   1.2 &amp;&amp; &lt; 2"</tt>.
module Distribution.Version

-- | A <a>Version</a> represents the version of a software entity.
--   
--   Instances of <a>Eq</a> and <a>Ord</a> are provided, which gives exact
--   equality and lexicographic ordering of the version number components
--   (i.e. 2.1 &gt; 2.0, 1.2.3 &gt; 1.2.2, etc.).
--   
--   This type is opaque and distinct from the <a>Version</a> type in
--   <a>Data.Version</a> since <tt>Cabal-2.0</tt>. The difference extends
--   to the <a>Binary</a> instance using a different (and more compact)
--   encoding.
data Version

-- | Version 0. A lower bound of <a>Version</a>.
version0 :: Version

-- | Construct <a>Version</a> from list of version number components.
--   
--   For instance, <tt>mkVersion [3,2,1]</tt> constructs a <a>Version</a>
--   representing the version <tt>3.2.1</tt>.
--   
--   All version components must be non-negative. <tt>mkVersion []</tt>
--   currently represents the special <i>null</i> version; see also
--   <a>nullVersion</a>.
mkVersion :: [Int] -> Version

-- | Variant of <a>mkVersion</a> which converts a <a>Data.Version</a>
--   <a>Version</a> into Cabal's <a>Version</a> type.
mkVersion' :: Version -> Version

-- | Unpack <a>Version</a> into list of version number components.
--   
--   This is the inverse to <a>mkVersion</a>, so the following holds:
--   
--   <pre>
--   (versionNumbers . mkVersion) vs == vs
--   </pre>
versionNumbers :: Version -> [Int]

-- | Constant representing the special <i>null</i> <a>Version</a>
--   
--   The <a>nullVersion</a> compares (via <a>Ord</a>) as less than every
--   proper <a>Version</a> value.
nullVersion :: Version

-- | Apply function to list of version number components
--   
--   <pre>
--   alterVersion f == mkVersion . f . versionNumbers
--   </pre>
alterVersion :: ([Int] -> [Int]) -> Version -> Version
data VersionRange

-- | The version range <tt>-any</tt>. That is, a version range containing
--   all versions.
--   
--   <pre>
--   withinRange v anyVersion = True
--   </pre>
anyVersion :: VersionRange

-- | The empty version range <tt>-none</tt>, that is a version range
--   containing no versions.
--   
--   This can be constructed using any unsatisfiable version range
--   expression, for example <tt>&lt; 0</tt>.
--   
--   <pre>
--   withinRange v noVersion = False
--   </pre>
noVersion :: VersionRange

-- | The version range <tt>== v</tt>.
--   
--   <pre>
--   withinRange v' (thisVersion v) = v' == v
--   </pre>
thisVersion :: Version -> VersionRange

-- | The version range <tt>/= v</tt>.
--   
--   <pre>
--   withinRange v' (notThisVersion v) = v' /= v
--   </pre>
notThisVersion :: Version -> VersionRange

-- | The version range <tt>&gt; v</tt>.
--   
--   <pre>
--   withinRange v' (laterVersion v) = v' &gt; v
--   </pre>
laterVersion :: Version -> VersionRange

-- | The version range <tt>&lt; v</tt>.
--   
--   <pre>
--   withinRange v' (earlierVersion v) = v' &lt; v
--   </pre>
earlierVersion :: Version -> VersionRange

-- | The version range <tt>&gt;= v</tt>.
--   
--   <pre>
--   withinRange v' (orLaterVersion v) = v' &gt;= v
--   </pre>
orLaterVersion :: Version -> VersionRange

-- | The version range <tt>&lt;= v</tt>.
--   
--   <pre>
--   withinRange v' (orEarlierVersion v) = v' &lt;= v
--   </pre>
orEarlierVersion :: Version -> VersionRange

-- | The version range <tt>vr1 || vr2</tt>.
--   
--   <pre>
--     withinRange v' (unionVersionRanges vr1 vr2)
--   = withinRange v' vr1 || withinRange v' vr2
--   </pre>
unionVersionRanges :: VersionRange -> VersionRange -> VersionRange

-- | The version range <tt>vr1 &amp;&amp; vr2</tt>.
--   
--   <pre>
--     withinRange v' (intersectVersionRanges vr1 vr2)
--   = withinRange v' vr1 &amp;&amp; withinRange v' vr2
--   </pre>
intersectVersionRanges :: VersionRange -> VersionRange -> VersionRange

-- | The version range <tt>== v.*</tt>.
--   
--   For example, for version <tt>1.2</tt>, the version range <tt>==
--   1.2.*</tt> is the same as <tt>&gt;= 1.2 &amp;&amp; &lt; 1.3</tt>.
--   
--   <pre>
--   withinRange v' (withinVersion v) = v' &gt;= v &amp;&amp; v' &lt; upper v
--     where
--       upper (Version lower t) = Version (init lower ++ [last lower + 1]) t
--   </pre>
withinVersion :: Version -> VersionRange

-- | The version range <tt>^&gt;= v</tt>.
--   
--   For example, for version <tt>1.2.3.4</tt>, the version range
--   <tt>^&gt;= 1.2.3.4</tt> is the same as <tt>&gt;= 1.2.3.4 &amp;&amp;
--   &lt; 1.3</tt>.
--   
--   Note that <tt>^&gt;= 1</tt> is equivalent to <tt>&gt;= 1 &amp;&amp;
--   &lt; 1.1</tt>.
majorBoundVersion :: Version -> VersionRange

-- | Does this version fall within the given range?
--   
--   This is the evaluation function for the <a>VersionRange</a> type.
withinRange :: Version -> VersionRange -> Bool

-- | Does this <a>VersionRange</a> place any restriction on the
--   <a>Version</a> or is it in fact equivalent to <tt>AnyVersion</tt>.
--   
--   Note this is a semantic check, not simply a syntactic check. So for
--   example the following is <tt>True</tt> (for all <tt>v</tt>).
--   
--   <pre>
--   isAnyVersion (EarlierVersion v `UnionVersionRanges` orLaterVersion v)
--   </pre>
isAnyVersion :: VersionRange -> Bool

-- | This is the converse of <a>isAnyVersion</a>. It check if the version
--   range is empty, if there is no possible version that satisfies the
--   version range.
--   
--   For example this is <tt>True</tt> (for all <tt>v</tt>):
--   
--   <pre>
--   isNoVersion (EarlierVersion v `IntersectVersionRanges` LaterVersion v)
--   </pre>
isNoVersion :: VersionRange -> Bool

-- | Is this version range in fact just a specific version?
--   
--   For example the version range <tt>"&gt;= 3 &amp;&amp; &lt;= 3"</tt>
--   contains only the version <tt>3</tt>.
isSpecificVersion :: VersionRange -> Maybe Version

-- | Simplify a <a>VersionRange</a> expression. For non-empty version
--   ranges this produces a canonical form. Empty or inconsistent version
--   ranges are left as-is because that provides more information.
--   
--   If you need a canonical form use <tt>fromVersionIntervals .
--   toVersionIntervals</tt>
--   
--   It satisfies the following properties:
--   
--   <pre>
--   withinRange v (simplifyVersionRange r) = withinRange v r
--   </pre>
--   
--   <pre>
--       withinRange v r = withinRange v r'
--   ==&gt; simplifyVersionRange r = simplifyVersionRange r'
--    || isNoVersion r
--    || isNoVersion r'
--   </pre>
simplifyVersionRange :: VersionRange -> VersionRange

-- | Fold over the basic syntactic structure of a <a>VersionRange</a>.
--   
--   This provides a syntactic view of the expression defining the version
--   range. The syntactic sugar <tt>"&gt;= v"</tt>, <tt>"&lt;= v"</tt> and
--   <tt>"== v.*"</tt> is presented in terms of the other basic syntax.
--   
--   For a semantic view use <a>asVersionIntervals</a>.
foldVersionRange :: a -> (Version -> a) -> (Version -> a) -> (Version -> a) -> (a -> a -> a) -> (a -> a -> a) -> VersionRange -> a

-- | Normalise <a>VersionRange</a>.
--   
--   In particular collapse <tt>(== v || &gt; v)</tt> into <tt>&gt;=
--   v</tt>, and so on.
normaliseVersionRange :: VersionRange -> VersionRange

-- | Remove <tt>VersionRangeParens</tt> constructors.
--   
--   Since version 3.4 this function is <a>id</a>, there aren't
--   <tt>VersionRangeParens</tt> constructor in <a>VersionRange</a>
--   anymore.
stripParensVersionRange :: VersionRange -> VersionRange

-- | Does the version range have an upper bound?
hasUpperBound :: VersionRange -> Bool

-- | Does the version range have an explicit lower bound?
--   
--   Note: this function only considers the user-specified lower bounds,
--   but not the implicit &gt;=0 lower bound.
hasLowerBound :: VersionRange -> Bool

-- | F-Algebra of <a>VersionRange</a>. See <a>cataVersionRange</a>.
data VersionRangeF a

-- | <tt>== version</tt>.
ThisVersionF :: Version -> VersionRangeF a

-- | <tt>&gt; version</tt>. NB: not <tt>&gt;=</tt>
LaterVersionF :: Version -> VersionRangeF a

-- | <tt>&gt;= version</tt>.
OrLaterVersionF :: Version -> VersionRangeF a

-- | <tt>&lt; version</tt>.
EarlierVersionF :: Version -> VersionRangeF a

-- | <tt>&lt;= version</tt>.
OrEarlierVersionF :: Version -> VersionRangeF a

-- | <tt>^&gt;= version</tt>, same as <tt>&gt;= version &amp;&amp; &lt;
--   MAJ(version)+1</tt>.
MajorBoundVersionF :: Version -> VersionRangeF a

-- | <tt>||</tt>.
UnionVersionRangesF :: a -> a -> VersionRangeF a

-- | <tt>&amp;&amp;</tt>.
IntersectVersionRangesF :: a -> a -> VersionRangeF a

-- | Fold <a>VersionRange</a>.
cataVersionRange :: (VersionRangeF a -> a) -> VersionRange -> a

-- | Unfold <a>VersionRange</a>.
anaVersionRange :: (a -> VersionRangeF a) -> a -> VersionRange

-- | Refold <a>VersionRange</a>.
hyloVersionRange :: (VersionRangeF VersionRange -> VersionRange) -> (VersionRange -> VersionRangeF VersionRange) -> VersionRange -> VersionRange

-- | Generic destructor for <a>VersionRange</a>.
projectVersionRange :: VersionRange -> VersionRangeF VersionRange

-- | Generic constructor for <a>VersionRange</a>.
embedVersionRange :: VersionRangeF VersionRange -> VersionRange

-- | Increment the last version number.
--   
--   Example: For <tt>1.2</tt> this returns <tt>1.3</tt> so that it can be
--   used as upper bound when resolving <tt>== 1.2.*</tt>. For
--   <tt>0.4.1</tt> it returns <tt>0.4.2</tt>.
wildcardUpperBound :: Version -> Version

-- | Compute next greater major version to be used as upper bound.
--   
--   Example: <tt>0.4.1</tt> produces the version <tt>0.5</tt> which then
--   can be used to construct a range <tt>&gt;= 0.4.1 &amp;&amp; &lt;
--   0.5</tt>
majorUpperBound :: Version -> Version

-- | Given a version range, remove the highest upper bound. Example:
--   <tt>(&gt;= 1 &amp;&amp; &lt; 3) || (&gt;= 4 &amp;&amp; &lt; 5)</tt> is
--   converted to <tt>(&gt;= 1 &amp;&amp; <a>|| (</a>= 4)</tt>.
removeUpperBound :: VersionRange -> VersionRange

-- | Given a version range, remove the lowest lower bound. Example:
--   <tt>(&gt;= 1 &amp;&amp; <a>|| (</a>= 4 &amp;&amp; &lt; 5)</tt> is
--   converted to <tt>(&gt;= 0 &amp;&amp; <a>|| (</a>= 4 &amp;&amp; &lt;
--   5)</tt>.
removeLowerBound :: VersionRange -> VersionRange

-- | Rewrite <tt>^&gt;= x.y.z</tt> into <tt>&gt;= x.y.z &amp;&amp; &lt;
--   x.(y+1)</tt>
transformCaret :: VersionRange -> VersionRange

-- | Rewrite <tt>^&gt;= x.y.z</tt> into <tt>&gt;= x.y.z</tt>
transformCaretUpper :: VersionRange -> VersionRange

-- | Rewrite <tt>^&gt;= x.y.z</tt> into <tt>&lt;x.(y+1)</tt>
transformCaretLower :: VersionRange -> VersionRange

-- | View a <a>VersionRange</a> as a union of intervals.
--   
--   This provides a canonical view of the semantics of a
--   <a>VersionRange</a> as opposed to the syntax of the expression used to
--   define it. For the syntactic view use <tt>foldVersionRange</tt>.
--   
--   Each interval is non-empty. The sequence is in increasing order and no
--   intervals overlap or touch. Therefore only the first and last can be
--   unbounded. The sequence can be empty if the range is empty (e.g. a
--   range expression like <tt><a>&amp;&amp;</a> 2</tt>).
--   
--   Other checks are trivial to implement using this view. For example:
--   
--   <pre>
--   isNoVersion vr | [] &lt;- asVersionIntervals vr = True
--                  | otherwise                   = False
--   </pre>
--   
--   <pre>
--   isSpecificVersion vr
--      | [(LowerBound v  InclusiveBound
--         ,UpperBound v' InclusiveBound)] &lt;- asVersionIntervals vr
--      , v == v'   = Just v
--      | otherwise = Nothing
--   </pre>
asVersionIntervals :: VersionRange -> [VersionInterval]
data VersionInterval
VersionInterval :: !LowerBound -> !UpperBound -> VersionInterval
data LowerBound
LowerBound :: !Version -> !Bound -> LowerBound
data UpperBound
NoUpperBound :: UpperBound
UpperBound :: !Version -> !Bound -> UpperBound
data Bound
ExclusiveBound :: Bound
InclusiveBound :: Bound

-- | A complementary representation of a <a>VersionRange</a>. Instead of a
--   boolean version predicate it uses an increasing sequence of
--   non-overlapping, non-empty intervals.
--   
--   The key point is that this representation gives a canonical
--   representation for the semantics of <a>VersionRange</a>s. This makes
--   it easier to check things like whether a version range is empty,
--   covers all versions, or requires a certain minimum or maximum version.
--   It also makes it easy to check equality or containment. It also makes
--   it easier to identify 'simple' version predicates for translation into
--   foreign packaging systems that do not support complex version range
--   expressions.
data VersionIntervals

-- | Convert a <a>VersionRange</a> to a sequence of version intervals.
toVersionIntervals :: VersionRange -> VersionIntervals

-- | Convert a <a>VersionIntervals</a> value back into a
--   <a>VersionRange</a> expression representing the version intervals.
fromVersionIntervals :: VersionIntervals -> VersionRange

-- | Inspect the list of version intervals.
unVersionIntervals :: VersionIntervals -> [VersionInterval]

module Distribution.Types.TestType

-- | The "test-type" field in the test suite stanza.
data TestType

-- | "type: exitcode-stdio-x.y"
TestTypeExe :: Version -> TestType

-- | "type: detailed-x.y"
TestTypeLib :: Version -> TestType

-- | Some unknown test type e.g. "type: foo"
TestTypeUnknown :: String -> Version -> TestType
knownTestTypes :: [TestType]
testTypeExe :: TestType
testTypeLib :: TestType
instance Data.Binary.Class.Binary Distribution.Types.TestType.TestType
instance GHC.Internal.Data.Data.Data Distribution.Types.TestType.TestType
instance GHC.Classes.Eq Distribution.Types.TestType.TestType
instance GHC.Internal.Generics.Generic Distribution.Types.TestType.TestType
instance Control.DeepSeq.NFData Distribution.Types.TestType.TestType
instance GHC.Classes.Ord Distribution.Types.TestType.TestType
instance Distribution.Parsec.Parsec Distribution.Types.TestType.TestType
instance Distribution.Pretty.Pretty Distribution.Types.TestType.TestType
instance GHC.Internal.Read.Read Distribution.Types.TestType.TestType
instance GHC.Internal.Show.Show Distribution.Types.TestType.TestType
instance Distribution.Utils.Structured.Structured Distribution.Types.TestType.TestType

module Distribution.Types.TestSuiteInterface

-- | The test suite interfaces that are currently defined.
--   
--   More interfaces may be defined in future, either new revisions or
--   totally new interfaces.
data TestSuiteInterface

-- | Test interface "exitcode-stdio-1.0". The test-suite takes the form of
--   an executable. It returns a zero exit code for success, non-zero for
--   failure. The stdout and stderr channels may be logged. Test tooling
--   may pass command line arguments and/or connect the stdin channel to
--   the test.
TestSuiteExeV10 :: Version -> FilePath -> TestSuiteInterface

-- | Test interface "detailed-0.9". The test-suite takes the form of a
--   library containing a designated module that exports "tests :: [Test]".
TestSuiteLibV09 :: Version -> ModuleName -> TestSuiteInterface

-- | A test suite that does not conform to one of the above interfaces for
--   the given reason (e.g. unknown test type).
TestSuiteUnsupported :: TestType -> TestSuiteInterface
instance Data.Binary.Class.Binary Distribution.Types.TestSuiteInterface.TestSuiteInterface
instance GHC.Internal.Data.Data.Data Distribution.Types.TestSuiteInterface.TestSuiteInterface
instance GHC.Classes.Eq Distribution.Types.TestSuiteInterface.TestSuiteInterface
instance GHC.Internal.Generics.Generic Distribution.Types.TestSuiteInterface.TestSuiteInterface
instance GHC.Internal.Base.Monoid Distribution.Types.TestSuiteInterface.TestSuiteInterface
instance Control.DeepSeq.NFData Distribution.Types.TestSuiteInterface.TestSuiteInterface
instance GHC.Classes.Ord Distribution.Types.TestSuiteInterface.TestSuiteInterface
instance GHC.Internal.Read.Read Distribution.Types.TestSuiteInterface.TestSuiteInterface
instance GHC.Internal.Base.Semigroup Distribution.Types.TestSuiteInterface.TestSuiteInterface
instance GHC.Internal.Show.Show Distribution.Types.TestSuiteInterface.TestSuiteInterface
instance Distribution.Utils.Structured.Structured Distribution.Types.TestSuiteInterface.TestSuiteInterface

module Distribution.Types.PackageId

-- | The name and version of a package.
data PackageIdentifier
PackageIdentifier :: PackageName -> Version -> PackageIdentifier

-- | The name of this package, eg. foo
[pkgName] :: PackageIdentifier -> PackageName

-- | the version of this package, eg 1.2
[pkgVersion] :: PackageIdentifier -> Version

-- | Type alias so we can use the shorter name PackageId.
type PackageId = PackageIdentifier
instance Data.Binary.Class.Binary Distribution.Types.PackageId.PackageIdentifier
instance GHC.Internal.Data.Data.Data Distribution.Types.PackageId.PackageIdentifier
instance GHC.Classes.Eq Distribution.Types.PackageId.PackageIdentifier
instance GHC.Internal.Generics.Generic Distribution.Types.PackageId.PackageIdentifier
instance Control.DeepSeq.NFData Distribution.Types.PackageId.PackageIdentifier
instance GHC.Classes.Ord Distribution.Types.PackageId.PackageIdentifier
instance Distribution.Parsec.Parsec Distribution.Types.PackageId.PackageIdentifier
instance Distribution.Pretty.Pretty Distribution.Types.PackageId.PackageIdentifier
instance GHC.Internal.Read.Read Distribution.Types.PackageId.PackageIdentifier
instance GHC.Internal.Show.Show Distribution.Types.PackageId.PackageIdentifier
instance Distribution.Utils.Structured.Structured Distribution.Types.PackageId.PackageIdentifier

module Distribution.Types.UnitId

-- | A unit identifier identifies a (possibly instantiated)
--   package/component that can be installed the installed package
--   database. There are several types of components that can be installed:
--   
--   <ul>
--   <li>A traditional library with no holes, so that <tt>unitIdHash</tt>
--   is <tt>Nothing</tt>. In the absence of Backpack, <a>UnitId</a> is the
--   same as a <a>ComponentId</a>.</li>
--   <li>An indefinite, Backpack library with holes. In this case,
--   <tt>unitIdHash</tt> is still <tt>Nothing</tt>, but in the install,
--   there are only interfaces, no compiled objects.</li>
--   <li>An instantiated Backpack library with all the holes filled in.
--   <tt>unitIdHash</tt> is a <tt>Just</tt> a hash of the instantiating
--   mapping.</li>
--   </ul>
--   
--   A unit is a component plus the additional information on how the holes
--   are filled in. Thus there is a one to many relationship: for a
--   particular component there are many different ways of filling in the
--   holes, and each different combination is a unit (and has a separate
--   <a>UnitId</a>).
--   
--   <a>UnitId</a> is distinct from <tt>OpenUnitId</tt>, in that it is
--   always installed, whereas <tt>OpenUnitId</tt> are intermediate unit
--   identities that arise during mixin linking, and don't necessarily
--   correspond to any actually installed unit. Since the mapping is not
--   actually recorded in a <a>UnitId</a>, you can't actually substitute
--   over them (but you can substitute over <tt>OpenUnitId</tt>). See also
--   <a>Distribution.Backpack.FullUnitId</a> for a mechanism for expanding
--   an instantiated <a>UnitId</a> to retrieve its mapping.
--   
--   Backwards compatibility note: if you need to get the string
--   representation of a UnitId to pass, e.g., as a <tt>-package-id</tt>
--   flag, use the <tt>display</tt> function, which will work on all
--   versions of Cabal.
data UnitId

-- | If you need backwards compatibility, consider using <tt>display</tt>
--   instead, which is supported by all versions of Cabal.
unUnitId :: UnitId -> String
mkUnitId :: String -> UnitId

-- | A <a>UnitId</a> for a definite package. The <a>DefUnitId</a> invariant
--   says that a <a>UnitId</a> identified this way is definite; i.e., it
--   has no unfilled holes.
data DefUnitId

-- | Unsafely create a <a>DefUnitId</a> from a <a>UnitId</a>. Your
--   responsibility is to ensure that the <a>DefUnitId</a> invariant holds.
unsafeMkDefUnitId :: UnitId -> DefUnitId
unDefUnitId :: DefUnitId -> UnitId

-- | Create a unit identity with no associated hash directly from a
--   <a>ComponentId</a>.
newSimpleUnitId :: ComponentId -> UnitId

-- | Make an old-style UnitId from a package identifier. Assumed to be for
--   the public library
mkLegacyUnitId :: PackageId -> UnitId

-- | Returns library name prefixed with HS, suitable for filenames
getHSLibraryName :: UnitId -> String
instance Data.Binary.Class.Binary Distribution.Types.UnitId.DefUnitId
instance Data.Binary.Class.Binary Distribution.Types.UnitId.UnitId
instance GHC.Internal.Data.Data.Data Distribution.Types.UnitId.DefUnitId
instance GHC.Internal.Data.Data.Data Distribution.Types.UnitId.UnitId
instance GHC.Classes.Eq Distribution.Types.UnitId.DefUnitId
instance GHC.Classes.Eq Distribution.Types.UnitId.UnitId
instance GHC.Internal.Generics.Generic Distribution.Types.UnitId.DefUnitId
instance GHC.Internal.Generics.Generic Distribution.Types.UnitId.UnitId
instance GHC.Internal.Data.String.IsString Distribution.Types.UnitId.UnitId
instance Control.DeepSeq.NFData Distribution.Types.UnitId.DefUnitId
instance Control.DeepSeq.NFData Distribution.Types.UnitId.UnitId
instance GHC.Classes.Ord Distribution.Types.UnitId.DefUnitId
instance GHC.Classes.Ord Distribution.Types.UnitId.UnitId
instance Distribution.Parsec.Parsec Distribution.Types.UnitId.DefUnitId
instance Distribution.Parsec.Parsec Distribution.Types.UnitId.UnitId
instance Distribution.Pretty.Pretty Distribution.Types.UnitId.DefUnitId
instance Distribution.Pretty.Pretty Distribution.Types.UnitId.UnitId
instance GHC.Internal.Read.Read Distribution.Types.UnitId.DefUnitId
instance GHC.Internal.Read.Read Distribution.Types.UnitId.UnitId
instance GHC.Internal.Show.Show Distribution.Types.UnitId.DefUnitId
instance GHC.Internal.Show.Show Distribution.Types.UnitId.UnitId
instance Distribution.Utils.Structured.Structured Distribution.Types.UnitId.DefUnitId
instance Distribution.Utils.Structured.Structured Distribution.Types.UnitId.UnitId

module Distribution.Types.Module

-- | A module identity uniquely identifies a Haskell module by qualifying a
--   <a>ModuleName</a> with the <a>UnitId</a> which defined it. This type
--   distinguishes between two packages which provide a module with the
--   same name, or a module from the same package compiled with different
--   dependencies. There are a few cases where Cabal needs to know about
--   module identities, e.g., when writing out reexported modules in the
--   <tt>InstalledPackageInfo</tt>.
data Module
Module :: DefUnitId -> ModuleName -> Module
instance Data.Binary.Class.Binary Distribution.Types.Module.Module
instance GHC.Internal.Data.Data.Data Distribution.Types.Module.Module
instance GHC.Classes.Eq Distribution.Types.Module.Module
instance GHC.Internal.Generics.Generic Distribution.Types.Module.Module
instance Control.DeepSeq.NFData Distribution.Types.Module.Module
instance GHC.Classes.Ord Distribution.Types.Module.Module
instance Distribution.Parsec.Parsec Distribution.Types.Module.Module
instance Distribution.Pretty.Pretty Distribution.Types.Module.Module
instance GHC.Internal.Read.Read Distribution.Types.Module.Module
instance GHC.Internal.Show.Show Distribution.Types.Module.Module
instance Distribution.Utils.Structured.Structured Distribution.Types.Module.Module


-- | This module defines the core data types for Backpack. For more
--   details, see:
--   
--   
--   <a>https://github.com/ezyang/ghc-proposals/blob/backpack/proposals/0000-backpack.rst</a>
module Distribution.Backpack

-- | An <a>OpenUnitId</a> describes a (possibly partially) instantiated
--   Backpack component, with a description of how the holes are filled in.
--   Unlike <a>OpenUnitId</a>, the <tt>ModuleSubst</tt> is kept in a
--   structured form that allows for substitution (which fills in holes.)
--   This form of unit cannot be installed. It must first be converted to a
--   <a>UnitId</a>.
--   
--   In the absence of Backpack, there are no holes to fill, so any such
--   component always has an empty module substitution; thus we can lossily
--   represent it as a 'DefiniteUnitId uid'.
--   
--   For a source component using Backpack, however, there is more
--   structure as components may be parametrized over some signatures, and
--   these "holes" may be partially or wholly filled.
--   
--   OpenUnitId plays an important role when we are mix-in linking, and is
--   recorded to the installed packaged database for indefinite packages;
--   however, for compiled packages that are fully instantiated, we
--   instantiate <a>OpenUnitId</a> into <a>UnitId</a>.
--   
--   For more details see the Backpack spec
--   <a>https://github.com/ezyang/ghc-proposals/blob/backpack/proposals/0000-backpack.rst</a>
data OpenUnitId

-- | Identifies a component which may have some unfilled holes; specifying
--   its <a>ComponentId</a> and its <a>OpenModuleSubst</a>. TODO: Invariant
--   that <a>OpenModuleSubst</a> is non-empty? See also the Text instance.
IndefFullUnitId :: ComponentId -> OpenModuleSubst -> OpenUnitId

-- | Identifies a fully instantiated component, which has been compiled and
--   abbreviated as a hash. The embedded <a>UnitId</a> MUST NOT be for an
--   indefinite component; an <a>OpenUnitId</a> is guaranteed not to have
--   any holes.
DefiniteUnitId :: DefUnitId -> OpenUnitId

-- | Get the set of holes (<tt>ModuleVar</tt>) embedded in a <a>UnitId</a>.
openUnitIdFreeHoles :: OpenUnitId -> Set ModuleName

-- | Safe constructor from a UnitId. The only way to do this safely is if
--   the instantiation is provided.
mkOpenUnitId :: UnitId -> ComponentId -> OpenModuleSubst -> OpenUnitId

-- | A <a>UnitId</a> for a definite package. The <a>DefUnitId</a> invariant
--   says that a <a>UnitId</a> identified this way is definite; i.e., it
--   has no unfilled holes.
data DefUnitId
unDefUnitId :: DefUnitId -> UnitId

-- | Create a <a>DefUnitId</a> from a <a>ComponentId</a> and an
--   instantiation with no holes.
mkDefUnitId :: ComponentId -> Map ModuleName Module -> DefUnitId

-- | Unlike a <a>Module</a>, an <a>OpenModule</a> is either an ordinary
--   module from some unit, OR an <a>OpenModuleVar</a>, representing a hole
--   that needs to be filled in. Substitutions are over module variables.
data OpenModule
OpenModule :: OpenUnitId -> ModuleName -> OpenModule
OpenModuleVar :: ModuleName -> OpenModule

-- | Get the set of holes (<tt>ModuleVar</tt>) embedded in a <a>Module</a>.
openModuleFreeHoles :: OpenModule -> Set ModuleName

-- | An explicit substitution on modules.
--   
--   NB: These substitutions are NOT idempotent, for example, a valid
--   substitution is (A -&gt; B, B -&gt; A).
type OpenModuleSubst = Map ModuleName OpenModule

-- | Pretty-print the entries of a module substitution, suitable for
--   embedding into a <a>OpenUnitId</a> or passing to GHC via
--   <tt>--instantiate-with</tt>.
dispOpenModuleSubst :: OpenModuleSubst -> Doc

-- | Pretty-print a single entry of a module substitution.
dispOpenModuleSubstEntry :: (ModuleName, OpenModule) -> Doc

-- | Inverse to <tt>dispModSubst</tt>.
parsecOpenModuleSubst :: CabalParsing m => m OpenModuleSubst

-- | Inverse to <tt>dispModSubstEntry</tt>.
parsecOpenModuleSubstEntry :: CabalParsing m => m (ModuleName, OpenModule)

-- | Get the set of holes (<tt>ModuleVar</tt>) embedded in a
--   <a>OpenModuleSubst</a>. This is NOT the domain of the substitution.
openModuleSubstFreeHoles :: OpenModuleSubst -> Set ModuleName

-- | When typechecking, we don't demand that a freshly instantiated
--   <a>IndefFullUnitId</a> be compiled; instead, we just depend on the
--   installed indefinite unit installed at the <a>ComponentId</a>.
abstractUnitId :: OpenUnitId -> UnitId

-- | Take a module substitution and hash it into a string suitable for
--   <a>UnitId</a>. Note that since this takes <a>Module</a>, not
--   <a>OpenModule</a>, you are responsible for recursively converting
--   <a>OpenModule</a> into <a>Module</a>. See also
--   <a>Distribution.Backpack.ReadyComponent</a>.
hashModuleSubst :: Map ModuleName Module -> Maybe String
instance Data.Binary.Class.Binary Distribution.Backpack.OpenModule
instance Data.Binary.Class.Binary Distribution.Backpack.OpenUnitId
instance GHC.Internal.Data.Data.Data Distribution.Backpack.OpenModule
instance GHC.Internal.Data.Data.Data Distribution.Backpack.OpenUnitId
instance GHC.Classes.Eq Distribution.Backpack.OpenModule
instance GHC.Classes.Eq Distribution.Backpack.OpenUnitId
instance GHC.Internal.Generics.Generic Distribution.Backpack.OpenModule
instance GHC.Internal.Generics.Generic Distribution.Backpack.OpenUnitId
instance Control.DeepSeq.NFData Distribution.Backpack.OpenModule
instance Control.DeepSeq.NFData Distribution.Backpack.OpenUnitId
instance GHC.Classes.Ord Distribution.Backpack.OpenModule
instance GHC.Classes.Ord Distribution.Backpack.OpenUnitId
instance Distribution.Parsec.Parsec Distribution.Backpack.OpenModule
instance Distribution.Parsec.Parsec Distribution.Backpack.OpenUnitId
instance Distribution.Pretty.Pretty Distribution.Backpack.OpenModule
instance Distribution.Pretty.Pretty Distribution.Backpack.OpenUnitId
instance GHC.Internal.Read.Read Distribution.Backpack.OpenModule
instance GHC.Internal.Read.Read Distribution.Backpack.OpenUnitId
instance GHC.Internal.Show.Show Distribution.Backpack.OpenModule
instance GHC.Internal.Show.Show Distribution.Backpack.OpenUnitId
instance Distribution.Utils.Structured.Structured Distribution.Backpack.OpenModule
instance Distribution.Utils.Structured.Structured Distribution.Backpack.OpenUnitId

module Distribution.Types.ExposedModule
data ExposedModule
ExposedModule :: ModuleName -> Maybe OpenModule -> ExposedModule
[exposedName] :: ExposedModule -> ModuleName
[exposedReexport] :: ExposedModule -> Maybe OpenModule
instance Data.Binary.Class.Binary Distribution.Types.ExposedModule.ExposedModule
instance GHC.Classes.Eq Distribution.Types.ExposedModule.ExposedModule
instance GHC.Internal.Generics.Generic Distribution.Types.ExposedModule.ExposedModule
instance Control.DeepSeq.NFData Distribution.Types.ExposedModule.ExposedModule
instance Distribution.Parsec.Parsec Distribution.Types.ExposedModule.ExposedModule
instance Distribution.Pretty.Pretty Distribution.Types.ExposedModule.ExposedModule
instance GHC.Internal.Read.Read Distribution.Types.ExposedModule.ExposedModule
instance GHC.Internal.Show.Show Distribution.Types.ExposedModule.ExposedModule
instance Distribution.Utils.Structured.Structured Distribution.Types.ExposedModule.ExposedModule

module Distribution.Types.PackageVersionConstraint

-- | A version constraint on a package. Different from
--   <tt>ExeDependency</tt> and <tt>Dependency</tt> since it does not
--   specify the need for a component, not even the main library. There are
--   a few places in the codebase where <tt>Dependency</tt> was used where
--   <a>PackageVersionConstraint</a> is not used instead (#5570).
data PackageVersionConstraint
PackageVersionConstraint :: PackageName -> VersionRange -> PackageVersionConstraint

thisPackageVersionConstraint :: PackageIdentifier -> PackageVersionConstraint

simplifyPackageVersionConstraint :: PackageVersionConstraint -> PackageVersionConstraint
instance Data.Binary.Class.Binary Distribution.Types.PackageVersionConstraint.PackageVersionConstraint
instance GHC.Internal.Data.Data.Data Distribution.Types.PackageVersionConstraint.PackageVersionConstraint
instance GHC.Classes.Eq Distribution.Types.PackageVersionConstraint.PackageVersionConstraint
instance GHC.Internal.Generics.Generic Distribution.Types.PackageVersionConstraint.PackageVersionConstraint
instance Control.DeepSeq.NFData Distribution.Types.PackageVersionConstraint.PackageVersionConstraint
instance Distribution.Parsec.Parsec Distribution.Types.PackageVersionConstraint.PackageVersionConstraint
instance Distribution.Pretty.Pretty Distribution.Types.PackageVersionConstraint.PackageVersionConstraint
instance GHC.Internal.Read.Read Distribution.Types.PackageVersionConstraint.PackageVersionConstraint
instance GHC.Internal.Show.Show Distribution.Types.PackageVersionConstraint.PackageVersionConstraint
instance Distribution.Utils.Structured.Structured Distribution.Types.PackageVersionConstraint.PackageVersionConstraint

module Distribution.Types.PackageId.Lens

-- | The name and version of a package.
data PackageIdentifier
pkgName :: Lens' PackageIdentifier PackageName
pkgVersion :: Lens' PackageIdentifier Version

module Distribution.Types.MungedPackageId

-- | A simple pair of a <a>MungedPackageName</a> and <a>Version</a>.
--   <a>MungedPackageName</a> is to <a>MungedPackageId</a> as
--   <tt>PackageName</tt> is to <a>PackageId</a>. See
--   <a>MungedPackageName</a> for more info.
data MungedPackageId
MungedPackageId :: MungedPackageName -> Version -> MungedPackageId

-- | The combined package and component name. see documentation for
--   <a>MungedPackageName</a>.
[mungedName] :: MungedPackageId -> MungedPackageName

-- | The version of this package / component, eg 1.2
[mungedVersion] :: MungedPackageId -> Version
computeCompatPackageId :: PackageId -> LibraryName -> MungedPackageId
instance Data.Binary.Class.Binary Distribution.Types.MungedPackageId.MungedPackageId
instance GHC.Internal.Data.Data.Data Distribution.Types.MungedPackageId.MungedPackageId
instance GHC.Classes.Eq Distribution.Types.MungedPackageId.MungedPackageId
instance GHC.Internal.Generics.Generic Distribution.Types.MungedPackageId.MungedPackageId
instance Control.DeepSeq.NFData Distribution.Types.MungedPackageId.MungedPackageId
instance GHC.Classes.Ord Distribution.Types.MungedPackageId.MungedPackageId
instance Distribution.Parsec.Parsec Distribution.Types.MungedPackageId.MungedPackageId
instance Distribution.Pretty.Pretty Distribution.Types.MungedPackageId.MungedPackageId
instance GHC.Internal.Read.Read Distribution.Types.MungedPackageId.MungedPackageId
instance GHC.Internal.Show.Show Distribution.Types.MungedPackageId.MungedPackageId
instance Distribution.Utils.Structured.Structured Distribution.Types.MungedPackageId.MungedPackageId

module Distribution.Types.LegacyExeDependency

-- | Describes a legacy `build-tools`-style dependency on an executable
--   
--   It is "legacy" because we do not know what the build-tool referred to.
--   It could refer to a pkg-config executable (PkgconfigName), or an
--   internal executable (UnqualComponentName). Thus the name is stringly
--   typed.
data LegacyExeDependency
LegacyExeDependency :: String -> VersionRange -> LegacyExeDependency
instance Data.Binary.Class.Binary Distribution.Types.LegacyExeDependency.LegacyExeDependency
instance GHC.Internal.Data.Data.Data Distribution.Types.LegacyExeDependency.LegacyExeDependency
instance GHC.Classes.Eq Distribution.Types.LegacyExeDependency.LegacyExeDependency
instance GHC.Internal.Generics.Generic Distribution.Types.LegacyExeDependency.LegacyExeDependency
instance Control.DeepSeq.NFData Distribution.Types.LegacyExeDependency.LegacyExeDependency
instance GHC.Classes.Ord Distribution.Types.LegacyExeDependency.LegacyExeDependency
instance Distribution.Parsec.Parsec Distribution.Types.LegacyExeDependency.LegacyExeDependency
instance Distribution.Pretty.Pretty Distribution.Types.LegacyExeDependency.LegacyExeDependency
instance GHC.Internal.Read.Read Distribution.Types.LegacyExeDependency.LegacyExeDependency
instance GHC.Internal.Show.Show Distribution.Types.LegacyExeDependency.LegacyExeDependency
instance Distribution.Utils.Structured.Structured Distribution.Types.LegacyExeDependency.LegacyExeDependency

module Distribution.Types.ExeDependency

-- | Describes a dependency on an executable from a package
data ExeDependency
ExeDependency :: PackageName -> UnqualComponentName -> VersionRange -> ExeDependency
qualifiedExeName :: ExeDependency -> ComponentName
instance Data.Binary.Class.Binary Distribution.Types.ExeDependency.ExeDependency
instance GHC.Internal.Data.Data.Data Distribution.Types.ExeDependency.ExeDependency
instance GHC.Classes.Eq Distribution.Types.ExeDependency.ExeDependency
instance GHC.Internal.Generics.Generic Distribution.Types.ExeDependency.ExeDependency
instance Control.DeepSeq.NFData Distribution.Types.ExeDependency.ExeDependency
instance GHC.Classes.Ord Distribution.Types.ExeDependency.ExeDependency
instance Distribution.Parsec.Parsec Distribution.Types.ExeDependency.ExeDependency
instance Distribution.Pretty.Pretty Distribution.Types.ExeDependency.ExeDependency
instance GHC.Internal.Read.Read Distribution.Types.ExeDependency.ExeDependency
instance GHC.Internal.Show.Show Distribution.Types.ExeDependency.ExeDependency
instance Distribution.Utils.Structured.Structured Distribution.Types.ExeDependency.ExeDependency

module Distribution.Types.Dependency

-- | Describes a dependency on a source package (API)
--   
--   <i>Invariant:</i> package name does not appear as <a>LSubLibName</a>
--   in set of library names.
--   
--   <i>Note:</i> <a>Dependency</a> is not an instance of <a>Ord</a>, and
--   so it cannot be used in <a>Set</a> or as the key to a <a>Map</a>. For
--   these and similar use cases see <tt>DependencyMap</tt>.
data Dependency

-- | The set of libraries required from the package. Only the selected
--   libraries will be built. It does not affect the cabal-install solver
--   yet.
Dependency :: PackageName -> VersionRange -> NonEmptySet LibraryName -> Dependency

-- | Smart constructor of <a>Dependency</a>.
--   
--   If <a>PackageName</a> is appears as <a>LSubLibName</a> in a set of
--   sublibraries, it is automatically converted to <a>LMainLibName</a>.
mkDependency :: PackageName -> VersionRange -> NonEmptySet LibraryName -> Dependency
depPkgName :: Dependency -> PackageName
depVerRange :: Dependency -> VersionRange
depLibraries :: Dependency -> NonEmptySet LibraryName

-- | Simplify the <a>VersionRange</a> expression in a <a>Dependency</a>.
--   See <a>simplifyVersionRange</a>.
simplifyDependency :: Dependency -> Dependency

-- | Library set with main library.
mainLibSet :: NonEmptySet LibraryName
instance Data.Binary.Class.Binary Distribution.Types.Dependency.Dependency
instance GHC.Internal.Data.Data.Data Distribution.Types.Dependency.Dependency
instance GHC.Classes.Eq Distribution.Types.Dependency.Dependency
instance GHC.Internal.Generics.Generic Distribution.Types.Dependency.Dependency
instance Control.DeepSeq.NFData Distribution.Types.Dependency.Dependency
instance GHC.Classes.Ord Distribution.Types.Dependency.Dependency
instance Distribution.Parsec.Parsec Distribution.Types.Dependency.Dependency
instance Distribution.Pretty.Pretty Distribution.Types.Dependency.Dependency
instance GHC.Internal.Read.Read Distribution.Types.Dependency.Dependency
instance GHC.Internal.Show.Show Distribution.Types.Dependency.Dependency
instance Distribution.Utils.Structured.Structured Distribution.Types.Dependency.Dependency

module Distribution.Types.SetupBuildInfo
data SetupBuildInfo
SetupBuildInfo :: [Dependency] -> Bool -> SetupBuildInfo
[setupDepends] :: SetupBuildInfo -> [Dependency]

-- | Is this a default 'custom-setup' section added by the cabal-install
--   code (as opposed to user-provided)? This field is only used
--   internally, and doesn't correspond to anything in the .cabal file. See
--   #3199.
[defaultSetupDepends] :: SetupBuildInfo -> Bool
instance Data.Binary.Class.Binary Distribution.Types.SetupBuildInfo.SetupBuildInfo
instance GHC.Internal.Data.Data.Data Distribution.Types.SetupBuildInfo.SetupBuildInfo
instance GHC.Classes.Eq Distribution.Types.SetupBuildInfo.SetupBuildInfo
instance GHC.Internal.Generics.Generic Distribution.Types.SetupBuildInfo.SetupBuildInfo
instance GHC.Internal.Base.Monoid Distribution.Types.SetupBuildInfo.SetupBuildInfo
instance Control.DeepSeq.NFData Distribution.Types.SetupBuildInfo.SetupBuildInfo
instance GHC.Classes.Ord Distribution.Types.SetupBuildInfo.SetupBuildInfo
instance GHC.Internal.Read.Read Distribution.Types.SetupBuildInfo.SetupBuildInfo
instance GHC.Internal.Base.Semigroup Distribution.Types.SetupBuildInfo.SetupBuildInfo
instance GHC.Internal.Show.Show Distribution.Types.SetupBuildInfo.SetupBuildInfo
instance Distribution.Utils.Structured.Structured Distribution.Types.SetupBuildInfo.SetupBuildInfo

module Distribution.Types.SetupBuildInfo.Lens
data SetupBuildInfo
setupDepends :: Lens' SetupBuildInfo [Dependency]
defaultSetupDepends :: Lens' SetupBuildInfo Bool

module Distribution.Types.DependencyMap

-- | A map of dependencies. Newtyped since the default monoid instance is
--   not appropriate. The monoid instance uses
--   <a>intersectVersionRanges</a>.
data DependencyMap
toDepMap :: [Dependency] -> DependencyMap
fromDepMap :: DependencyMap -> [Dependency]
constrainBy :: DependencyMap -> [PackageVersionConstraint] -> DependencyMap
instance GHC.Classes.Eq Distribution.Types.DependencyMap.DependencyMap
instance GHC.Internal.Base.Monoid Distribution.Types.DependencyMap.DependencyMap
instance GHC.Internal.Read.Read Distribution.Types.DependencyMap.DependencyMap
instance GHC.Internal.Base.Semigroup Distribution.Types.DependencyMap.DependencyMap
instance GHC.Internal.Show.Show Distribution.Types.DependencyMap.DependencyMap

module Distribution.Types.BenchmarkType

-- | The "benchmark-type" field in the benchmark stanza.
data BenchmarkType

-- | "type: exitcode-stdio-x.y"
BenchmarkTypeExe :: Version -> BenchmarkType

-- | Some unknown benchmark type e.g. "type: foo"
BenchmarkTypeUnknown :: String -> Version -> BenchmarkType
knownBenchmarkTypes :: [BenchmarkType]
benchmarkTypeExe :: BenchmarkType
instance Data.Binary.Class.Binary Distribution.Types.BenchmarkType.BenchmarkType
instance GHC.Internal.Data.Data.Data Distribution.Types.BenchmarkType.BenchmarkType
instance GHC.Classes.Eq Distribution.Types.BenchmarkType.BenchmarkType
instance GHC.Internal.Generics.Generic Distribution.Types.BenchmarkType.BenchmarkType
instance Control.DeepSeq.NFData Distribution.Types.BenchmarkType.BenchmarkType
instance GHC.Classes.Ord Distribution.Types.BenchmarkType.BenchmarkType
instance Distribution.Parsec.Parsec Distribution.Types.BenchmarkType.BenchmarkType
instance Distribution.Pretty.Pretty Distribution.Types.BenchmarkType.BenchmarkType
instance GHC.Internal.Read.Read Distribution.Types.BenchmarkType.BenchmarkType
instance GHC.Internal.Show.Show Distribution.Types.BenchmarkType.BenchmarkType
instance Distribution.Utils.Structured.Structured Distribution.Types.BenchmarkType.BenchmarkType

module Distribution.Types.BenchmarkInterface

-- | The benchmark interfaces that are currently defined.
--   
--   More interfaces may be defined in future, either new revisions or
--   totally new interfaces.
data BenchmarkInterface

-- | Benchmark interface "exitcode-stdio-1.0". The benchmark takes the form
--   of an executable. It returns a zero exit code for success, non-zero
--   for failure. The stdout and stderr channels may be logged. Test
--   tooling may pass command line arguments and/or connect the stdin
--   channel to the test.
BenchmarkExeV10 :: Version -> FilePath -> BenchmarkInterface

-- | A benchmark that does not conform to one of the above interfaces for
--   the given reason (e.g. unknown benchmark type).
BenchmarkUnsupported :: BenchmarkType -> BenchmarkInterface
instance Data.Binary.Class.Binary Distribution.Types.BenchmarkInterface.BenchmarkInterface
instance GHC.Internal.Data.Data.Data Distribution.Types.BenchmarkInterface.BenchmarkInterface
instance GHC.Classes.Eq Distribution.Types.BenchmarkInterface.BenchmarkInterface
instance GHC.Internal.Generics.Generic Distribution.Types.BenchmarkInterface.BenchmarkInterface
instance GHC.Internal.Base.Monoid Distribution.Types.BenchmarkInterface.BenchmarkInterface
instance Control.DeepSeq.NFData Distribution.Types.BenchmarkInterface.BenchmarkInterface
instance GHC.Classes.Ord Distribution.Types.BenchmarkInterface.BenchmarkInterface
instance GHC.Internal.Read.Read Distribution.Types.BenchmarkInterface.BenchmarkInterface
instance GHC.Internal.Base.Semigroup Distribution.Types.BenchmarkInterface.BenchmarkInterface
instance GHC.Internal.Show.Show Distribution.Types.BenchmarkInterface.BenchmarkInterface
instance Distribution.Utils.Structured.Structured Distribution.Types.BenchmarkInterface.BenchmarkInterface


-- | Defines a package identifier along with a parser and pretty printer
--   for it. <a>PackageIdentifier</a>s consist of a name and an exact
--   version. It also defines a <a>Dependency</a> data type. A dependency
--   is a package name and a version range, like <tt>"foo &gt;= 1.2
--   &amp;&amp; &lt; 2"</tt>.
module Distribution.Package

-- | Class of things that have a <a>PackageIdentifier</a>
--   
--   Types in this class are all notions of a package. This allows us to
--   have different types for the different phases that packages go though,
--   from simple name/id, package description, configured or installed
--   packages.
--   
--   Not all kinds of packages can be uniquely identified by a
--   <a>PackageIdentifier</a>. In particular, installed packages cannot,
--   there may be many installed instances of the same source package.
class Package pkg
packageId :: Package pkg => pkg -> PackageIdentifier
packageName :: Package pkg => pkg -> PackageName
packageVersion :: Package pkg => pkg -> Version
class HasMungedPackageId pkg
mungedId :: HasMungedPackageId pkg => pkg -> MungedPackageId
mungedName' :: HasMungedPackageId pkg => pkg -> MungedPackageName
mungedVersion' :: HasMungedPackageId munged => munged -> Version

-- | Packages that have an installed unit ID
class Package pkg => HasUnitId pkg
installedUnitId :: HasUnitId pkg => pkg -> UnitId

-- | Class of installed packages.
--   
--   The primary data type which is an instance of this package is
--   <tt>InstalledPackageInfo</tt>, but when we are doing install plans in
--   Cabal install we may have other, installed package-like things which
--   contain more metadata. Installed packages have exact dependencies
--   <a>installedDepends</a>.
class HasUnitId pkg => PackageInstalled pkg
installedDepends :: PackageInstalled pkg => pkg -> [UnitId]
instance Distribution.Package.HasMungedPackageId Distribution.Types.MungedPackageId.MungedPackageId
instance Distribution.Package.Package Distribution.Types.PackageId.PackageIdentifier

module Distribution.Types.AbiDependency

-- | An ABI dependency is a dependency on a library which also records the
--   ABI hash (<tt>abiHash</tt>) of the library it depends on.
--   
--   The primary utility of this is to enable an extra sanity when GHC
--   loads libraries: it can check if the dependency has a matching ABI and
--   if not, refuse to load this library. This information is critical if
--   we are shadowing libraries; differences in the ABI hash let us know
--   what packages get shadowed by the new version of a package.
data AbiDependency
AbiDependency :: UnitId -> AbiHash -> AbiDependency
[depUnitId] :: AbiDependency -> UnitId
[depAbiHash] :: AbiDependency -> AbiHash
instance Data.Binary.Class.Binary Distribution.Types.AbiDependency.AbiDependency
instance GHC.Classes.Eq Distribution.Types.AbiDependency.AbiDependency
instance GHC.Internal.Generics.Generic Distribution.Types.AbiDependency.AbiDependency
instance Control.DeepSeq.NFData Distribution.Types.AbiDependency.AbiDependency
instance Distribution.Parsec.Parsec Distribution.Types.AbiDependency.AbiDependency
instance Distribution.Pretty.Pretty Distribution.Types.AbiDependency.AbiDependency
instance GHC.Internal.Read.Read Distribution.Types.AbiDependency.AbiDependency
instance GHC.Internal.Show.Show Distribution.Types.AbiDependency.AbiDependency
instance Distribution.Utils.Structured.Structured Distribution.Types.AbiDependency.AbiDependency


-- | Package descriptions contain fields for specifying the name of a
--   software license and the name of the file containing the text of that
--   license. While package authors may choose any license they like, Cabal
--   provides an enumeration of a small set of common free and open source
--   software licenses. This is done so that Hackage can recognise
--   licenses, so that tools can detect <a>licensing conflicts</a>, and to
--   deter <a>license proliferation</a>.
--   
--   It is recommended that all package authors use the
--   <tt>license-file</tt> or <tt>license-files</tt> fields in their
--   package descriptions. Further information about these fields can be
--   found in the <a>Cabal users guide</a>.
--   
--   <h1>Additional resources</h1>
--   
--   The following websites provide information about free and open source
--   software licenses:
--   
--   <ul>
--   <li><a>The Open Source Initiative (OSI)</a></li>
--   <li><a>The Free Software Foundation (FSF)</a></li>
--   </ul>
--   
--   <h1>Disclaimer</h1>
--   
--   The descriptions of software licenses provided by this documentation
--   are intended for informational purposes only and in no way constitute
--   legal advice. Please read the text of the licenses and consult a
--   lawyer for any advice regarding software licensing.
module Distribution.License

-- | Indicates the license under which a package's source code is released.
--   Versions of the licenses not listed here will be rejected by Hackage
--   and cause <tt>cabal check</tt> to issue a warning.
data License

-- | GNU General Public License, <a>version 2</a> or <a>version 3</a>.
GPL :: Maybe Version -> License

-- | <a>GNU Affero General Public License, version 3</a>.
AGPL :: Maybe Version -> License

-- | GNU Lesser General Public License, <a>version 2.1</a> or <a>version
--   3</a>.
LGPL :: Maybe Version -> License

-- | <a>2-clause BSD license</a>.
BSD2 :: License

-- | <a>3-clause BSD license</a>.
BSD3 :: License

-- | <a>4-clause BSD license</a>. This license has not been approved by the
--   OSI and is incompatible with the GNU GPL. It is provided for
--   historical reasons and should be avoided.
BSD4 :: License

-- | <a>MIT license</a>.
MIT :: License

-- | <a>ISC license</a>
ISC :: License

-- | <a>Mozilla Public License, version 2.0</a>.
MPL :: Version -> License

-- | <a>Apache License, version 2.0</a>.
Apache :: Maybe Version -> License

-- | The author of a package disclaims any copyright to its source code and
--   dedicates it to the public domain. This is not a software license.
--   Please note that it is not possible to dedicate works to the public
--   domain in every jurisdiction, nor is a work that is in the public
--   domain in one jurisdiction necessarily in the public domain elsewhere.
PublicDomain :: License

-- | Explicitly 'All Rights Reserved', eg for proprietary software. The
--   package may not be legally modified or redistributed by anyone but the
--   rightsholder.
AllRightsReserved :: License

-- | No license specified which legally defaults to 'All Rights Reserved'.
--   The package may not be legally modified or redistributed by anyone but
--   the rightsholder.
UnspecifiedLicense :: License

-- | Any other software license.
OtherLicense :: License

-- | Indicates an erroneous license name.
UnknownLicense :: String -> License

-- | The list of all currently recognised licenses.
knownLicenses :: [License]

-- | Convert old <a>License</a> to SPDX <a>License</a>. Non-SPDX licenses
--   are converted to <a>LicenseRef</a>.
licenseToSPDX :: License -> License

-- | Convert <a>License</a> to <a>License</a>,
--   
--   This is lossy conversion. We try our best.
--   
--   <pre>
--   &gt;&gt;&gt; licenseFromSPDX . licenseToSPDX $ BSD3
--   BSD3
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; licenseFromSPDX . licenseToSPDX $ GPL (Just (mkVersion [3]))
--   GPL (Just (mkVersion [3]))
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; licenseFromSPDX . licenseToSPDX $ PublicDomain
--   UnknownLicense "LicenseRefPublicDomain"
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; licenseFromSPDX $ SPDX.License $ SPDX.simpleLicenseExpression SPDX.EUPL_1_1
--   UnknownLicense "EUPL-1.1"
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; licenseFromSPDX . licenseToSPDX $ AllRightsReserved
--   AllRightsReserved
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; licenseFromSPDX &lt;$&gt; simpleParsec "BSD-3-Clause OR GPL-3.0-only"
--   Just (UnknownLicense "BSD3ClauseORGPL30only")
--   </pre>
licenseFromSPDX :: License -> License
instance Data.Binary.Class.Binary Distribution.License.License
instance GHC.Internal.Data.Data.Data Distribution.License.License
instance GHC.Classes.Eq Distribution.License.License
instance GHC.Internal.Generics.Generic Distribution.License.License
instance Control.DeepSeq.NFData Distribution.License.License
instance GHC.Classes.Ord Distribution.License.License
instance Distribution.Parsec.Parsec Distribution.License.License
instance Distribution.Pretty.Pretty Distribution.License.License
instance GHC.Internal.Read.Read Distribution.License.License
instance GHC.Internal.Show.Show Distribution.License.License
instance Distribution.Utils.Structured.Structured Distribution.License.License

module Distribution.Types.InstalledPackageInfo
data InstalledPackageInfo
InstalledPackageInfo :: PackageId -> LibraryName -> ComponentId -> LibraryVisibility -> UnitId -> [(ModuleName, OpenModule)] -> String -> Either License License -> !ShortText -> !ShortText -> !ShortText -> !ShortText -> !ShortText -> !ShortText -> !ShortText -> !ShortText -> !ShortText -> AbiHash -> Bool -> Bool -> [ExposedModule] -> [ModuleName] -> Bool -> [FilePath] -> [FilePath] -> [FilePath] -> [FilePath] -> FilePath -> [String] -> [String] -> [String] -> [String] -> [FilePath] -> [String] -> [UnitId] -> [AbiDependency] -> [String] -> [String] -> [String] -> [FilePath] -> [String] -> [FilePath] -> [FilePath] -> Maybe FilePath -> InstalledPackageInfo
[sourcePackageId] :: InstalledPackageInfo -> PackageId
[sourceLibName] :: InstalledPackageInfo -> LibraryName
[installedComponentId_] :: InstalledPackageInfo -> ComponentId
[libVisibility] :: InstalledPackageInfo -> LibraryVisibility
[installedUnitId] :: InstalledPackageInfo -> UnitId
[instantiatedWith] :: InstalledPackageInfo -> [(ModuleName, OpenModule)]
[compatPackageKey] :: InstalledPackageInfo -> String
[license] :: InstalledPackageInfo -> Either License License
[copyright] :: InstalledPackageInfo -> !ShortText
[maintainer] :: InstalledPackageInfo -> !ShortText
[author] :: InstalledPackageInfo -> !ShortText
[stability] :: InstalledPackageInfo -> !ShortText
[homepage] :: InstalledPackageInfo -> !ShortText
[pkgUrl] :: InstalledPackageInfo -> !ShortText
[synopsis] :: InstalledPackageInfo -> !ShortText
[description] :: InstalledPackageInfo -> !ShortText
[category] :: InstalledPackageInfo -> !ShortText
[abiHash] :: InstalledPackageInfo -> AbiHash
[indefinite] :: InstalledPackageInfo -> Bool
[exposed] :: InstalledPackageInfo -> Bool
[exposedModules] :: InstalledPackageInfo -> [ExposedModule]
[hiddenModules] :: InstalledPackageInfo -> [ModuleName]
[trusted] :: InstalledPackageInfo -> Bool
[importDirs] :: InstalledPackageInfo -> [FilePath]
[libraryDirs] :: InstalledPackageInfo -> [FilePath]
[libraryDirsStatic] :: InstalledPackageInfo -> [FilePath]

-- | overrides <a>libraryDirs</a>
[libraryDynDirs] :: InstalledPackageInfo -> [FilePath]
[dataDir] :: InstalledPackageInfo -> FilePath
[hsLibraries] :: InstalledPackageInfo -> [String]
[extraLibraries] :: InstalledPackageInfo -> [String]
[extraLibrariesStatic] :: InstalledPackageInfo -> [String]
[extraGHCiLibraries] :: InstalledPackageInfo -> [String]
[includeDirs] :: InstalledPackageInfo -> [FilePath]
[includes] :: InstalledPackageInfo -> [String]
[depends] :: InstalledPackageInfo -> [UnitId]
[abiDepends] :: InstalledPackageInfo -> [AbiDependency]
[ccOptions] :: InstalledPackageInfo -> [String]
[cxxOptions] :: InstalledPackageInfo -> [String]
[ldOptions] :: InstalledPackageInfo -> [String]
[frameworkDirs] :: InstalledPackageInfo -> [FilePath]
[frameworks] :: InstalledPackageInfo -> [String]
[haddockInterfaces] :: InstalledPackageInfo -> [FilePath]
[haddockHTMLs] :: InstalledPackageInfo -> [FilePath]
[pkgRoot] :: InstalledPackageInfo -> Maybe FilePath
emptyInstalledPackageInfo :: InstalledPackageInfo
mungedPackageId :: InstalledPackageInfo -> MungedPackageId

-- | Returns the munged package name, which we write into <tt>name</tt> for
--   compatibility with old versions of GHC.
mungedPackageName :: InstalledPackageInfo -> MungedPackageName

-- | An ABI dependency is a dependency on a library which also records the
--   ABI hash (<tt>abiHash</tt>) of the library it depends on.
--   
--   The primary utility of this is to enable an extra sanity when GHC
--   loads libraries: it can check if the dependency has a matching ABI and
--   if not, refuse to load this library. This information is critical if
--   we are shadowing libraries; differences in the ABI hash let us know
--   what packages get shadowed by the new version of a package.
data AbiDependency
AbiDependency :: UnitId -> AbiHash -> AbiDependency
[depUnitId] :: AbiDependency -> UnitId
[depAbiHash] :: AbiDependency -> AbiHash
data ExposedModule
ExposedModule :: ModuleName -> Maybe OpenModule -> ExposedModule
[exposedName] :: ExposedModule -> ModuleName
[exposedReexport] :: ExposedModule -> Maybe OpenModule
instance Data.Binary.Class.Binary Distribution.Types.InstalledPackageInfo.InstalledPackageInfo
instance GHC.Classes.Eq Distribution.Types.InstalledPackageInfo.InstalledPackageInfo
instance GHC.Internal.Generics.Generic Distribution.Types.InstalledPackageInfo.InstalledPackageInfo
instance Distribution.Package.HasMungedPackageId Distribution.Types.InstalledPackageInfo.InstalledPackageInfo
instance Distribution.Package.HasUnitId Distribution.Types.InstalledPackageInfo.InstalledPackageInfo
instance Distribution.Compat.Graph.IsNode Distribution.Types.InstalledPackageInfo.InstalledPackageInfo
instance Control.DeepSeq.NFData Distribution.Types.InstalledPackageInfo.InstalledPackageInfo
instance Distribution.Package.PackageInstalled Distribution.Types.InstalledPackageInfo.InstalledPackageInfo
instance Distribution.Package.Package Distribution.Types.InstalledPackageInfo.InstalledPackageInfo
instance GHC.Internal.Read.Read Distribution.Types.InstalledPackageInfo.InstalledPackageInfo
instance GHC.Internal.Show.Show Distribution.Types.InstalledPackageInfo.InstalledPackageInfo
instance Distribution.Utils.Structured.Structured Distribution.Types.InstalledPackageInfo.InstalledPackageInfo

module Distribution.Types.InstalledPackageInfo.Lens
data InstalledPackageInfo
installedUnitId :: Lens' InstalledPackageInfo UnitId
sourcePackageId :: Lens' InstalledPackageInfo PackageIdentifier
license :: Lens' InstalledPackageInfo (Either License License)
abiHash :: Lens' InstalledPackageInfo AbiHash
sourceLibName :: Lens' InstalledPackageInfo LibraryName
installedComponentId_ :: Lens' InstalledPackageInfo ComponentId
libVisibility :: Lens' InstalledPackageInfo LibraryVisibility
instantiatedWith :: Lens' InstalledPackageInfo [(ModuleName, OpenModule)]
compatPackageKey :: Lens' InstalledPackageInfo String
copyright :: Lens' InstalledPackageInfo ShortText
maintainer :: Lens' InstalledPackageInfo ShortText
author :: Lens' InstalledPackageInfo ShortText
stability :: Lens' InstalledPackageInfo ShortText
homepage :: Lens' InstalledPackageInfo ShortText
pkgUrl :: Lens' InstalledPackageInfo ShortText
synopsis :: Lens' InstalledPackageInfo ShortText
description :: Lens' InstalledPackageInfo ShortText
category :: Lens' InstalledPackageInfo ShortText
indefinite :: Lens' InstalledPackageInfo Bool
exposed :: Lens' InstalledPackageInfo Bool
exposedModules :: Lens' InstalledPackageInfo [ExposedModule]
hiddenModules :: Lens' InstalledPackageInfo [ModuleName]
trusted :: Lens' InstalledPackageInfo Bool
importDirs :: Lens' InstalledPackageInfo [FilePath]
libraryDirs :: Lens' InstalledPackageInfo [FilePath]
libraryDirsStatic :: Lens' InstalledPackageInfo [FilePath]
libraryDynDirs :: Lens' InstalledPackageInfo [FilePath]
dataDir :: Lens' InstalledPackageInfo FilePath
hsLibraries :: Lens' InstalledPackageInfo [String]
extraLibraries :: Lens' InstalledPackageInfo [String]
extraLibrariesStatic :: Lens' InstalledPackageInfo [String]
extraGHCiLibraries :: Lens' InstalledPackageInfo [String]
includeDirs :: Lens' InstalledPackageInfo [FilePath]
includes :: Lens' InstalledPackageInfo [String]
depends :: Lens' InstalledPackageInfo [UnitId]
abiDepends :: Lens' InstalledPackageInfo [AbiDependency]
ccOptions :: Lens' InstalledPackageInfo [String]
cxxOptions :: Lens' InstalledPackageInfo [String]
ldOptions :: Lens' InstalledPackageInfo [String]
frameworkDirs :: Lens' InstalledPackageInfo [FilePath]
frameworks :: Lens' InstalledPackageInfo [String]
haddockInterfaces :: Lens' InstalledPackageInfo [FilePath]
haddockHTMLs :: Lens' InstalledPackageInfo [FilePath]
pkgRoot :: Lens' InstalledPackageInfo (Maybe FilePath)


-- | A parse result type for parsers from AST to Haskell types.
module Distribution.Fields.ParseResult

-- | A monad with failure and accumulating errors and warnings.
data ParseResult a

-- | Destruct a <a>ParseResult</a> into the emitted warnings and either a
--   successful value or list of errors and possibly recovered a
--   spec-version declaration.
runParseResult :: ParseResult a -> ([PWarning], Either (Maybe Version, NonEmpty PError) a)

-- | <a>Recover</a> the parse result, so we can proceed parsing.
--   <a>runParseResult</a> will still result in <a>Nothing</a>, if there
--   are recorded errors.
recoverWith :: ParseResult a -> a -> ParseResult a

-- | Add a warning. This doesn't fail the parsing process.
parseWarning :: Position -> PWarnType -> String -> ParseResult ()

-- | Add multiple warnings at once.
parseWarnings :: [PWarning] -> ParseResult ()

-- | Add an error, but not fail the parser yet.
--   
--   For fatal failure use <a>parseFatalFailure</a>
parseFailure :: Position -> String -> ParseResult ()

-- | Add an fatal error.
parseFatalFailure :: Position -> String -> ParseResult a

-- | A <a>mzero</a>.
parseFatalFailure' :: ParseResult a

-- | Get cabal spec version.
getCabalSpecVersion :: ParseResult (Maybe Version)

-- | Set cabal spec version.
setCabalSpecVersion :: Maybe Version -> ParseResult ()

-- | Forget <a>ParseResult</a>s warnings.
withoutWarnings :: ParseResult a -> ParseResult a
instance GHC.Internal.Base.Applicative Distribution.Fields.ParseResult.ParseResult
instance GHC.Internal.Base.Functor Distribution.Fields.ParseResult.ParseResult
instance GHC.Internal.Base.Monad Distribution.Fields.ParseResult.ParseResult


-- | Utilities to work with <tt>.cabal</tt> like file structure.
module Distribution.Fields

-- | A Cabal-like file consists of a series of fields (<tt>foo: bar</tt>)
--   and sections (<tt>library ...</tt>).
data Field ann
Field :: !Name ann -> [FieldLine ann] -> Field ann
Section :: !Name ann -> [SectionArg ann] -> [Field ann] -> Field ann

-- | A field name.
--   
--   <i>Invariant</i>: <a>ByteString</a> is lower-case ASCII.
data Name ann
Name :: !ann -> !FieldName -> Name ann

-- | A line of text representing the value of a field from a Cabal file. A
--   field may contain multiple lines.
--   
--   <i>Invariant:</i> <a>ByteString</a> has no newlines.
data FieldLine ann
FieldLine :: !ann -> !ByteString -> FieldLine ann

-- | Section arguments, e.g. name of the library
data SectionArg ann

-- | identifier, or something which looks like number. Also many dot
--   numbers, i.e. "7.6.3"
SecArgName :: !ann -> !ByteString -> SectionArg ann

-- | quoted string
SecArgStr :: !ann -> !ByteString -> SectionArg ann

-- | everything else, mm. operators (e.g. in if-section conditionals)
SecArgOther :: !ann -> !ByteString -> SectionArg ann
type FieldName = ByteString

-- | Parse cabal style <a>ByteString</a> into list of <a>Field</a>s, i.e.
--   the cabal AST.
--   
--   <a>readFields</a> assumes that input <a>ByteString</a> is valid UTF8,
--   specifically it doesn't validate that file is valid UTF8. Therefore
--   bytestrings inside returned <a>Field</a> will be invalid as UTF8 if
--   the input were.
--   
--   <pre>
--   &gt;&gt;&gt; readFields "foo: \223"
--   Right [Field (Name (Position 1 1) "foo") [FieldLine (Position 1 6) "\223"]]
--   </pre>
--   
--   <a>readFields</a> won't (necessarily) fail on invalid UTF8 data, but
--   the reported positions may be off.
--   
--   <b>You may get weird errors on non-UTF8 input</b>, for example
--   <a>readFields</a> will fail on latin1 encoded non-breaking space:
--   
--   <pre>
--   &gt;&gt;&gt; isLeft (readFields "\xa0 foo: bar")
--   True
--   </pre>
--   
--   That is rejected because parser thinks <tt>\xa0</tt> is a section
--   name, and section arguments may not contain colon. If there are just
--   latin1 non-breaking spaces, they become part of the name:
--   
--   <pre>
--   &gt;&gt;&gt; readFields "\xa0\&amp;foo: bar"
--   Right [Field (Name (Position 1 1) "\160foo") [FieldLine (Position 1 7) "bar"]]
--   </pre>
--   
--   The UTF8 non-breaking space is accepted as an indentation character
--   (but warned about by <a>readFields'</a>).
--   
--   <pre>
--   &gt;&gt;&gt; readFields' "\xc2\xa0 foo: bar"
--   Right ([Field (Name (Position 1 3) "foo") [FieldLine (Position 1 8) "bar"]],[LexWarning LexWarningNBSP (Position 1 1)])
--   </pre>
readFields :: ByteString -> Either ParseError [Field Position]

-- | Like <a>readFields</a> but also return lexer warnings.
readFields' :: ByteString -> Either ParseError ([Field Position], [LexWarning])

-- | A monad with failure and accumulating errors and warnings.
data ParseResult a

-- | Destruct a <a>ParseResult</a> into the emitted warnings and either a
--   successful value or list of errors and possibly recovered a
--   spec-version declaration.
runParseResult :: ParseResult a -> ([PWarning], Either (Maybe Version, NonEmpty PError) a)

-- | Add a warning. This doesn't fail the parsing process.
parseWarning :: Position -> PWarnType -> String -> ParseResult ()

-- | Add multiple warnings at once.
parseWarnings :: [PWarning] -> ParseResult ()

-- | Add an error, but not fail the parser yet.
--   
--   For fatal failure use <a>parseFatalFailure</a>
parseFailure :: Position -> String -> ParseResult ()

-- | Add an fatal error.
parseFatalFailure :: Position -> String -> ParseResult a

-- | Type of parser warning. We do classify warnings.
--   
--   Different application may decide not to show some, or have fatal
--   behaviour on others
data PWarnType

-- | Unclassified warning
PWTOther :: PWarnType

-- | Invalid UTF encoding
PWTUTF :: PWarnType

-- | <tt>true</tt> or <tt>false</tt>, not <tt>True</tt> or <tt>False</tt>
PWTBoolCase :: PWarnType

-- | there are version with tags
PWTVersionTag :: PWarnType

-- | New syntax used, but no <tt>cabal-version: &gt;= 1.2</tt> specified
PWTNewSyntax :: PWarnType

-- | Old syntax used, and <tt>cabal-version &gt;= 1.2</tt> specified
PWTOldSyntax :: PWarnType
PWTDeprecatedField :: PWarnType
PWTInvalidSubsection :: PWarnType
PWTUnknownField :: PWarnType
PWTUnknownSection :: PWarnType
PWTTrailingFields :: PWarnType

-- | extra main-is field
PWTExtraMainIs :: PWarnType

-- | extra test-module field
PWTExtraTestModule :: PWarnType

-- | extra benchmark-module field
PWTExtraBenchmarkModule :: PWarnType
PWTLexNBSP :: PWarnType
PWTLexBOM :: PWarnType
PWTLexTab :: PWarnType

-- | legacy cabal file that we know how to patch
PWTQuirkyCabalFile :: PWarnType

-- | Double dash token, most likely it's a mistake - it's not a comment
PWTDoubleDash :: PWarnType

-- | e.g. name or version should be specified only once.
PWTMultipleSingularField :: PWarnType

-- | Workaround for derive-package having build-type: Default. See
--   <a>https://github.com/haskell/cabal/issues/5020</a>.
PWTBuildTypeDefault :: PWarnType

-- | Version operators used (without cabal-version: 1.8)
PWTVersionOperator :: PWarnType

-- | Version wildcard used (without cabal-version: 1.6)
PWTVersionWildcard :: PWarnType

-- | Warnings about cabal-version format.
PWTSpecVersion :: PWarnType

-- | Empty filepath, i.e. literally ""
PWTEmptyFilePath :: PWarnType

-- | sections contents (sections and fields) are indented inconsistently
PWTInconsistentIndentation :: PWarnType

-- | Experimental feature
PWTExperimental :: PWarnType

-- | Parser warning.
data PWarning
PWarning :: !PWarnType -> !Position -> String -> PWarning
showPWarning :: FilePath -> PWarning -> String

-- | Parser error.
data PError
PError :: Position -> String -> PError
showPError :: FilePath -> PError -> String

-- | This type is used to discern when a comment block should go before or
--   after a cabal-like file field, otherwise it would be hardcoded to a
--   single position. It is often used in conjunction with
--   <tt>PrettyField</tt>.
data CommentPosition
CommentBefore :: [String] -> CommentPosition
CommentAfter :: [String] -> CommentPosition
NoComment :: CommentPosition
data PrettyField ann
PrettyField :: ann -> FieldName -> Doc -> PrettyField ann
PrettySection :: ann -> FieldName -> [Doc] -> [PrettyField ann] -> PrettyField ann
PrettyEmpty :: PrettyField ann

-- | Prettyprint a list of fields.
--   
--   Note: the first argument should return <a>String</a>s without newlines
--   and properly prefixes (with <tt>--</tt>) to count as comments. This
--   unsafety is left in place so one could generate empty lines between
--   comment lines.
showFields :: (ann -> CommentPosition) -> [PrettyField ann] -> String
genericFromParsecFields :: Applicative f => (FieldName -> [FieldLine ann] -> f Doc) -> (FieldName -> [SectionArg ann] -> f [Doc]) -> [Field ann] -> f [PrettyField ann]

-- | Simple variant of <tt>genericFromParsecField</tt>
fromParsecFields :: [Field ann] -> [PrettyField ann]


-- | Haskell language dialects and extensions
module Language.Haskell.Extension

-- | This represents a Haskell language dialect.
--   
--   Language <a>Extension</a>s are interpreted relative to one of these
--   base languages.
data Language

-- | The Haskell 98 language as defined by the Haskell 98 report.
--   <a>http://haskell.org/onlinereport/</a>
Haskell98 :: Language

-- | The Haskell 2010 language as defined by the Haskell 2010 report.
--   <a>http://www.haskell.org/onlinereport/haskell2010</a>
Haskell2010 :: Language

-- | The GHC2021 collection of language extensions.
--   <a>https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0380-ghc2021.rst</a>
GHC2021 :: Language

-- | The GHC2024 collection of language extensions.
--   <a>https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0613-ghc2024.rst</a>
GHC2024 :: Language

-- | An unknown language, identified by its name.
UnknownLanguage :: String -> Language

-- | List of known (supported) languages for GHC, oldest first.
knownLanguages :: [Language]
classifyLanguage :: String -> Language

-- | This represents language extensions beyond a base <a>Language</a>
--   definition (such as <a>Haskell98</a>) that are supported by some
--   implementations, usually in some special mode.
--   
--   Where applicable, references are given to an implementation's official
--   documentation.
data Extension

-- | Enable a known extension
EnableExtension :: KnownExtension -> Extension

-- | Disable a known extension
DisableExtension :: KnownExtension -> Extension

-- | An unknown extension, identified by the name of its <tt>LANGUAGE</tt>
--   pragma.
UnknownExtension :: String -> Extension

-- | Known Haskell language extensions, including deprecated and
--   undocumented ones.
--   
--   Check <a>“Overview of all language extensions” in GHC User’s Guide</a>
--   for more information.
data KnownExtension

-- | Allow overlapping class instances, provided there is a unique most
--   specific instance for each use.
OverlappingInstances :: KnownExtension

-- | Ignore structural rules guaranteeing the termination of class instance
--   resolution. Termination is guaranteed by a fixed-depth recursion
--   stack, and compilation may fail if this depth is exceeded.
UndecidableInstances :: KnownExtension

-- | Implies <a>OverlappingInstances</a>. Allow the implementation to
--   choose an instance even when it is possible that further instantiation
--   of types will lead to a more specific instance being applicable.
IncoherentInstances :: KnownExtension

-- | <i>(deprecated)</i> Deprecated in favour of <a>RecursiveDo</a>.
--   
--   Old description: Allow recursive bindings in <tt>do</tt> blocks, using
--   the <tt>rec</tt> keyword. See also <a>RecursiveDo</a>.
DoRec :: KnownExtension

-- | Allow recursive bindings in <tt>do</tt> blocks, using the <tt>rec</tt>
--   keyword, or <tt>mdo</tt>, a variant of <tt>do</tt>.
RecursiveDo :: KnownExtension

-- | Provide syntax for writing list comprehensions which iterate over
--   several lists together, like the <a>zipWith</a> family of functions.
ParallelListComp :: KnownExtension

-- | Allow multiple parameters in a type class.
MultiParamTypeClasses :: KnownExtension

-- | Enable the dreaded monomorphism restriction.
MonomorphismRestriction :: KnownExtension

-- | Enable deep subsumption, relaxing the simple subsumption rules,
--   implicitly inserting eta-expansions when matching up function types
--   with different quantification structures.
DeepSubsumption :: KnownExtension

-- | Allow a specification attached to a multi-parameter type class which
--   indicates that some parameters are entirely determined by others. The
--   implementation will check that this property holds for the declared
--   instances, and will use this property to reduce ambiguity in instance
--   resolution.
FunctionalDependencies :: KnownExtension

-- | <i>(deprecated)</i> A synonym for <a>RankNTypes</a>.
--   
--   Old description: Like <a>RankNTypes</a> but does not allow a
--   higher-rank type to itself appear on the left of a function arrow.
Rank2Types :: KnownExtension

-- | Allow a universally-quantified type to occur on the left of a function
--   arrow.
RankNTypes :: KnownExtension

-- | <i>(deprecated)</i> A synonym for <a>RankNTypes</a>.
--   
--   Old description: Allow data constructors to have polymorphic
--   arguments. Unlike <a>RankNTypes</a>, does not allow this for ordinary
--   functions.
PolymorphicComponents :: KnownExtension

-- | Allow existentially-quantified data constructors.
ExistentialQuantification :: KnownExtension

-- | Cause a type variable in a signature, which has an explicit
--   <tt>forall</tt> quantifier, to scope over the definition of the
--   accompanying value declaration.
ScopedTypeVariables :: KnownExtension

-- | Deprecated, use <a>ScopedTypeVariables</a> instead.
PatternSignatures :: KnownExtension

-- | Enable implicit function parameters with dynamic scope.
ImplicitParams :: KnownExtension

-- | Relax some restrictions on the form of the context of a type
--   signature.
FlexibleContexts :: KnownExtension

-- | Relax some restrictions on the form of the context of an instance
--   declaration.
FlexibleInstances :: KnownExtension

-- | Allow data type declarations with no constructors.
EmptyDataDecls :: KnownExtension

-- | Run the C preprocessor on Haskell source code.
CPP :: KnownExtension

-- | Allow an explicit kind signature giving the kind of types over which a
--   type variable ranges.
KindSignatures :: KnownExtension

-- | Enable a form of pattern which forces evaluation before an attempted
--   match, and a form of strict <tt>let</tt>/<tt>where</tt> binding.
BangPatterns :: KnownExtension

-- | Allow type synonyms in instance heads.
TypeSynonymInstances :: KnownExtension

-- | Enable Template Haskell, a system for compile-time metaprogramming.
TemplateHaskell :: KnownExtension

-- | Enable the Foreign Function Interface. In GHC, implements the standard
--   Haskell 98 Foreign Function Interface Addendum, plus some GHC-specific
--   extensions.
ForeignFunctionInterface :: KnownExtension

-- | Enable arrow notation.
Arrows :: KnownExtension

-- | <i>(deprecated)</i> Enable generic type classes, with default
--   instances defined in terms of the algebraic structure of a type.
Generics :: KnownExtension

-- | Enable the implicit importing of the module <a>Prelude</a>. When
--   disabled, when desugaring certain built-in syntax into ordinary
--   identifiers, use whatever is in scope rather than the <a>Prelude</a>
--   -- version.
ImplicitPrelude :: KnownExtension

-- | Enable syntax for implicitly binding local names corresponding to the
--   field names of a record. Puns bind specific names, unlike
--   <a>RecordWildCards</a>.
NamedFieldPuns :: KnownExtension

-- | Enable a form of guard which matches a pattern and binds variables.
PatternGuards :: KnownExtension

-- | Allow a type declared with <tt>newtype</tt> to use <tt>deriving</tt>
--   for any class with an instance for the underlying type.
GeneralizedNewtypeDeriving :: KnownExtension
GeneralisedNewtypeDeriving :: KnownExtension

-- | Enable the "Trex" extensible records system.
ExtensibleRecords :: KnownExtension

-- | Enable type synonyms which are transparent in some definitions and
--   opaque elsewhere, as a way of implementing abstract datatypes.
RestrictedTypeSynonyms :: KnownExtension

-- | Enable an alternate syntax for string literals, with string
--   templating.
HereDocuments :: KnownExtension

-- | Allow the character <tt>#</tt> as a postfix modifier on identifiers.
--   Also enables literal syntax for unboxed values.
MagicHash :: KnownExtension

-- | Allow data types and type synonyms which are indexed by types, i.e.
--   ad-hoc polymorphism for types.
TypeFamilies :: KnownExtension

-- | Allow a standalone declaration which invokes the type class
--   <tt>deriving</tt> mechanism.
StandaloneDeriving :: KnownExtension

-- | Allow certain Unicode characters to stand for certain ASCII character
--   sequences, e.g. keywords and punctuation.
UnicodeSyntax :: KnownExtension

-- | Allow the use of unboxed types as foreign types, e.g. in <tt>foreign
--   import</tt> and <tt>foreign export</tt>.
UnliftedFFITypes :: KnownExtension

-- | Enable interruptible FFI.
InterruptibleFFI :: KnownExtension

-- | Allow use of CAPI FFI calling convention (<tt>foreign import
--   capi</tt>).
CApiFFI :: KnownExtension

-- | Defer validity checking of types until after expanding type synonyms,
--   relaxing the constraints on how synonyms may be used.
LiberalTypeSynonyms :: KnownExtension

-- | Allow the name of a type constructor, type class, or type variable to
--   be an infix operator.
TypeOperators :: KnownExtension

-- | Enable syntax for implicitly binding local names corresponding to the
--   field names of a record. A wildcard binds all unmentioned names,
--   unlike <a>NamedFieldPuns</a>.
RecordWildCards :: KnownExtension

-- | Deprecated, use <a>NamedFieldPuns</a> instead.
RecordPuns :: KnownExtension

-- | Allow a record field name to be disambiguated by the type of the
--   record it's in.
DisambiguateRecordFields :: KnownExtension

-- | Enable traditional record syntax (as supported by Haskell 98)
TraditionalRecordSyntax :: KnownExtension

-- | Enable overloading of string literals using a type class, much like
--   integer literals.
OverloadedStrings :: KnownExtension

-- | Enable generalized algebraic data types, in which type variables may
--   be instantiated on a per-constructor basis. Implies <a>GADTSyntax</a>.
GADTs :: KnownExtension

-- | Enable GADT syntax for declaring ordinary algebraic datatypes.
GADTSyntax :: KnownExtension

-- | <i>(deprecated)</i> Has no effect.
--   
--   Old description: Make pattern bindings monomorphic.
MonoPatBinds :: KnownExtension

-- | Relax the requirements on mutually-recursive polymorphic functions.
RelaxedPolyRec :: KnownExtension

-- | Allow default instantiation of polymorphic types in more situations.
ExtendedDefaultRules :: KnownExtension

-- | Enable unboxed tuples.
UnboxedTuples :: KnownExtension

-- | Enable <tt>deriving</tt> for classes <a>Typeable</a> and <a>Data</a>.
DeriveDataTypeable :: KnownExtension

-- | Enable <tt>deriving</tt> for <a>Generic</a> and <a>Generic1</a>.
DeriveGeneric :: KnownExtension

-- | Enable support for default signatures.
DefaultSignatures :: KnownExtension

-- | Allow type signatures to be specified in instance declarations.
InstanceSigs :: KnownExtension

-- | Allow a class method's type to place additional constraints on a class
--   type variable.
ConstrainedClassMethods :: KnownExtension

-- | Allow imports to be qualified by the package name the module is
--   intended to be imported from, e.g.
--   
--   <pre>
--   import "network" Network.Socket
--   </pre>
PackageImports :: KnownExtension

-- | <i>(deprecated)</i> Allow a type variable to be instantiated at a
--   polymorphic type.
ImpredicativeTypes :: KnownExtension

-- | <i>(deprecated)</i> Change the syntax for qualified infix operators.
NewQualifiedOperators :: KnownExtension

-- | Relax the interpretation of left operator sections to allow unary
--   postfix operators.
PostfixOperators :: KnownExtension

-- | Enable quasi-quotation, a mechanism for defining new concrete syntax
--   for expressions and patterns.
QuasiQuotes :: KnownExtension

-- | Enable generalized list comprehensions, supporting operations such as
--   sorting and grouping.
TransformListComp :: KnownExtension

-- | Enable monad comprehensions, which generalise the list comprehension
--   syntax to work for any monad.
MonadComprehensions :: KnownExtension

-- | Enable view patterns, which match a value by applying a function and
--   matching on the result.
ViewPatterns :: KnownExtension

-- | Allow concrete XML syntax to be used in expressions and patterns, as
--   per the Haskell Server Pages extension language:
--   <a>http://www.haskell.org/haskellwiki/HSP</a>. The ideas behind it are
--   discussed in the paper "Haskell Server Pages through Dynamic Loading"
--   by Niklas Broberg, from Haskell Workshop '05.
XmlSyntax :: KnownExtension

-- | Allow regular pattern matching over lists, as discussed in the paper
--   "Regular Expression Patterns" by Niklas Broberg, Andreas Farre and
--   Josef Svenningsson, from ICFP '04.
RegularPatterns :: KnownExtension

-- | Enable the use of tuple sections, e.g. <tt>(, True)</tt> desugars into
--   <tt>x -&gt; (x, True)</tt>.
TupleSections :: KnownExtension

-- | Allow GHC primops, written in C--, to be imported into a Haskell file.
GHCForeignImportPrim :: KnownExtension

-- | Support for patterns of the form <tt>n + k</tt>, where <tt>k</tt> is
--   an integer literal.
NPlusKPatterns :: KnownExtension

-- | Improve the layout rule when <tt>if</tt> expressions are used in a
--   <tt>do</tt> block.
DoAndIfThenElse :: KnownExtension

-- | Enable support for multi-way <tt>if</tt>-expressions.
MultiWayIf :: KnownExtension

-- | Enable support lambda-<tt>case</tt> expressions.
LambdaCase :: KnownExtension

-- | Makes much of the Haskell sugar be desugared into calls to the
--   function with a particular name that is in scope.
RebindableSyntax :: KnownExtension

-- | Make <tt>forall</tt> a keyword in types, which can be used to give the
--   generalisation explicitly.
ExplicitForAll :: KnownExtension

-- | Allow contexts to be put on datatypes, e.g. the <tt>Eq a</tt> in
--   <tt>data Eq a =&gt; Set a = NilSet | ConsSet a (Set a)</tt>.
DatatypeContexts :: KnownExtension

-- | Local (<tt>let</tt> and <tt>where</tt>) bindings are monomorphic.
MonoLocalBinds :: KnownExtension

-- | Enable <tt>deriving</tt> for the <a>Functor</a> class.
DeriveFunctor :: KnownExtension

-- | Enable <tt>deriving</tt> for the <a>Traversable</a> class.
DeriveTraversable :: KnownExtension

-- | Enable <tt>deriving</tt> for the <a>Foldable</a> class.
DeriveFoldable :: KnownExtension

-- | Enable non-decreasing indentation for <tt>do</tt> blocks.
NondecreasingIndentation :: KnownExtension

-- | Allow imports to be qualified with a safe keyword that requires the
--   imported module be trusted as according to the Safe Haskell definition
--   of trust.
--   
--   <pre>
--   import safe Network.Socket
--   </pre>
SafeImports :: KnownExtension

-- | Compile a module in the Safe, Safe Haskell mode -- a restricted form
--   of the Haskell language to ensure type safety.
Safe :: KnownExtension

-- | Compile a module in the Trustworthy, Safe Haskell mode -- no
--   restrictions apply but the module is marked as trusted as long as the
--   package the module resides in is trusted.
Trustworthy :: KnownExtension

-- | Compile a module in the Unsafe, Safe Haskell mode so that modules
--   compiled using Safe, Safe Haskell mode can't import it.
Unsafe :: KnownExtension

-- | Allow type class<i>implicit parameter</i>equality constraints to be
--   used as types with the special kind constraint. Also generalise the
--   <tt>(ctxt =&gt; ty)</tt> syntax so that any type of kind constraint
--   can occur before the arrow.
ConstraintKinds :: KnownExtension

-- | Enable kind polymorphism.
PolyKinds :: KnownExtension

-- | Enable datatype promotion.
DataKinds :: KnownExtension

-- | Enable <tt>type data</tt> declarations, defining constructors at the
--   type level.
TypeData :: KnownExtension

-- | Enable parallel arrays syntax (<tt>[:</tt>, <tt>:]</tt>) for <i>Data
--   Parallel Haskell</i>.
ParallelArrays :: KnownExtension

-- | Enable explicit role annotations, like in (<tt>type role Foo
--   representational representational</tt>).
RoleAnnotations :: KnownExtension

-- | Enable overloading of list literals, arithmetic sequences and list
--   patterns using the <tt>IsList</tt> type class.
OverloadedLists :: KnownExtension

-- | Enable case expressions that have no alternatives. Also applies to
--   lambda-case expressions if they are enabled.
EmptyCase :: KnownExtension

-- | <i>(deprecated)</i> Deprecated in favour of <a>DeriveDataTypeable</a>.
--   
--   Old description: Triggers the generation of derived <a>Typeable</a>
--   instances for every datatype and type class declaration.
AutoDeriveTypeable :: KnownExtension

-- | Desugars negative literals directly (without using negate).
NegativeLiterals :: KnownExtension

-- | Allow the use of binary integer literal syntax (e.g.
--   <tt>0b11001001</tt> to denote <tt>201</tt>).
BinaryLiterals :: KnownExtension

-- | Allow the use of floating literal syntax for all instances of
--   <a>Num</a>, including <a>Int</a> and <a>Integer</a>.
NumDecimals :: KnownExtension

-- | Enable support for type classes with no type parameter.
NullaryTypeClasses :: KnownExtension

-- | Enable explicit namespaces in module import/export lists.
ExplicitNamespaces :: KnownExtension

-- | Allow the user to write ambiguous types, and the type inference engine
--   to infer them.
AllowAmbiguousTypes :: KnownExtension

-- | Enable <tt>foreign import javascript</tt>.
JavaScriptFFI :: KnownExtension

-- | Allow giving names to and abstracting over patterns.
PatternSynonyms :: KnownExtension

-- | Allow anonymous placeholders (underscore) inside type signatures. The
--   type inference engine will generate a message describing the type
--   inferred at the hole's location.
PartialTypeSignatures :: KnownExtension

-- | Allow named placeholders written with a leading underscore inside type
--   signatures. Wildcards with the same name unify to the same type.
NamedWildCards :: KnownExtension

-- | Enable <tt>deriving</tt> for any class.
DeriveAnyClass :: KnownExtension

-- | Enable <tt>deriving</tt> for the <a>Lift</a> class.
DeriveLift :: KnownExtension

-- | Enable support for 'static pointers' (and the <tt>static</tt> keyword)
--   to refer to globally stable names, even across different programs.
StaticPointers :: KnownExtension

-- | Switches data type declarations to be strict by default (as if they
--   had a bang using <tt>BangPatterns</tt>), and allow opt-in field
--   laziness using <tt>~</tt>.
StrictData :: KnownExtension

-- | Switches all pattern bindings to be strict by default (as if they had
--   a bang using <tt>BangPatterns</tt>), ordinary patterns are recovered
--   using <tt>~</tt>. Implies <tt>StrictData</tt>.
Strict :: KnownExtension

-- | Allows <tt>do</tt>-notation for types that are
--   <tt><a>Applicative</a></tt> as well as <tt><a>Monad</a></tt>. When
--   enabled, desugaring <tt>do</tt> notation tries to use
--   <tt>(<a>*</a>)</tt> and <tt><a>fmap</a></tt> and <tt><a>join</a></tt>
--   as far as possible.
ApplicativeDo :: KnownExtension

-- | Allow records to use duplicated field labels for accessors.
DuplicateRecordFields :: KnownExtension

-- | Enable explicit type applications with the syntax <tt>id @Int</tt>.
TypeApplications :: KnownExtension

-- | Dissolve the distinction between types and kinds, allowing the
--   compiler to reason about kind equality and therefore enabling GADTs to
--   be promoted to the type-level.
TypeInType :: KnownExtension

-- | Allow recursive (and therefore undecidable) super-class relationships.
UndecidableSuperClasses :: KnownExtension

-- | A temporary extension to help library authors check if their code will
--   compile with the new planned desugaring of fail.
MonadFailDesugaring :: KnownExtension

-- | A subset of <tt>TemplateHaskell</tt> including only quoting.
TemplateHaskellQuotes :: KnownExtension

-- | Allows use of the <tt>#label</tt> syntax.
OverloadedLabels :: KnownExtension

-- | Allow functional dependency annotations on type families to declare
--   them as injective.
TypeFamilyDependencies :: KnownExtension

-- | Allow multiple <tt>deriving</tt> clauses, each optionally qualified
--   with a <i>strategy</i>.
DerivingStrategies :: KnownExtension

-- | Enable deriving instances via types of the same runtime
--   representation. Implies <a>DerivingStrategies</a>.
DerivingVia :: KnownExtension

-- | Enable the use of unboxed sum syntax.
UnboxedSums :: KnownExtension

-- | Allow use of hexadecimal literal notation for floating-point values.
HexFloatLiterals :: KnownExtension

-- | Allow <tt>do</tt> blocks etc. in argument position.
BlockArguments :: KnownExtension

-- | Allow use of underscores in numeric literals.
NumericUnderscores :: KnownExtension

-- | Allow <tt>forall</tt> in constraints.
QuantifiedConstraints :: KnownExtension

-- | Have <tt>*</tt> refer to <tt>Type</tt>.
StarIsType :: KnownExtension

-- | Liberalises deriving to provide instances for empty data types.
EmptyDataDeriving :: KnownExtension

-- | Enable detection of complete user-supplied kind signatures.
CUSKs :: KnownExtension

-- | Allows the syntax <tt>import M qualified</tt>.
ImportQualifiedPost :: KnownExtension

-- | Allow the use of standalone kind signatures.
StandaloneKindSignatures :: KnownExtension

-- | Enable unlifted newtypes.
UnliftedNewtypes :: KnownExtension

-- | Use whitespace to determine whether the minus sign stands for negation
--   or subtraction.
LexicalNegation :: KnownExtension

-- | Enable qualified do-notation desugaring.
QualifiedDo :: KnownExtension

-- | Enable linear types.
LinearTypes :: KnownExtension

-- | Allow the use of visible forall in types of terms.
RequiredTypeArguments :: KnownExtension

-- | Enable the generation of selector functions corresponding to record
--   fields.
FieldSelectors :: KnownExtension

-- | Enable the use of record dot-accessor and updater syntax
OverloadedRecordDot :: KnownExtension

-- | Provides record <tt>.</tt> syntax in record updates, e.g. <tt>x
--   {foo.bar = 1}</tt>.
OverloadedRecordUpdate :: KnownExtension

-- | Enable data types for which an unlifted or levity-polymorphic result
--   kind is inferred.
UnliftedDatatypes :: KnownExtension

-- | Enable syntax for primitive numeric literals, e.g. <tt>3#Int8</tt>
ExtendedLiterals :: KnownExtension

-- | Undocumented parsing-related extensions introduced in GHC 7.0.
AlternativeLayoutRule :: KnownExtension

-- | Undocumented parsing-related extensions introduced in GHC 7.0.
AlternativeLayoutRuleTransitional :: KnownExtension

-- | Undocumented parsing-related extensions introduced in GHC 7.2.
RelaxedLayout :: KnownExtension

-- | Allow the use of type abstraction syntax.
TypeAbstractions :: KnownExtension

-- | Allow the use of built-in syntax for list, tuple and sum type
--   constructors rather than being exclusive to data constructors.
ListTuplePuns :: KnownExtension

-- | Extensions that have been deprecated, possibly paired with another
--   extension that replaces it.
deprecatedExtensions :: [(Extension, Maybe Extension)]
classifyExtension :: String -> Extension
knownExtensions :: [KnownExtension]
instance Data.Binary.Class.Binary Language.Haskell.Extension.Extension
instance Data.Binary.Class.Binary Language.Haskell.Extension.KnownExtension
instance Data.Binary.Class.Binary Language.Haskell.Extension.Language
instance GHC.Internal.Enum.Bounded Language.Haskell.Extension.KnownExtension
instance GHC.Internal.Data.Data.Data Language.Haskell.Extension.Extension
instance GHC.Internal.Data.Data.Data Language.Haskell.Extension.KnownExtension
instance GHC.Internal.Data.Data.Data Language.Haskell.Extension.Language
instance GHC.Internal.Enum.Enum Language.Haskell.Extension.KnownExtension
instance GHC.Classes.Eq Language.Haskell.Extension.Extension
instance GHC.Classes.Eq Language.Haskell.Extension.KnownExtension
instance GHC.Classes.Eq Language.Haskell.Extension.Language
instance GHC.Internal.Generics.Generic Language.Haskell.Extension.Extension
instance GHC.Internal.Generics.Generic Language.Haskell.Extension.KnownExtension
instance GHC.Internal.Generics.Generic Language.Haskell.Extension.Language
instance Control.DeepSeq.NFData Language.Haskell.Extension.Extension
instance Control.DeepSeq.NFData Language.Haskell.Extension.KnownExtension
instance Control.DeepSeq.NFData Language.Haskell.Extension.Language
instance GHC.Classes.Ord Language.Haskell.Extension.Extension
instance GHC.Classes.Ord Language.Haskell.Extension.KnownExtension
instance GHC.Classes.Ord Language.Haskell.Extension.Language
instance Distribution.Parsec.Parsec Language.Haskell.Extension.Extension
instance Distribution.Parsec.Parsec Language.Haskell.Extension.Language
instance Distribution.Pretty.Pretty Language.Haskell.Extension.Extension
instance Distribution.Pretty.Pretty Language.Haskell.Extension.KnownExtension
instance Distribution.Pretty.Pretty Language.Haskell.Extension.Language
instance GHC.Internal.Read.Read Language.Haskell.Extension.Extension
instance GHC.Internal.Read.Read Language.Haskell.Extension.KnownExtension
instance GHC.Internal.Read.Read Language.Haskell.Extension.Language
instance GHC.Internal.Show.Show Language.Haskell.Extension.Extension
instance GHC.Internal.Show.Show Language.Haskell.Extension.KnownExtension
instance GHC.Internal.Show.Show Language.Haskell.Extension.Language
instance Distribution.Utils.Structured.Structured Language.Haskell.Extension.Extension
instance Distribution.Utils.Structured.Structured Language.Haskell.Extension.KnownExtension
instance Distribution.Utils.Structured.Structured Language.Haskell.Extension.Language


-- | This has an enumeration of the various compilers that Cabal knows
--   about. It also specifies the default compiler. Sadly you'll often see
--   code that does case analysis on this compiler flavour enumeration
--   like:
--   
--   <pre>
--   case compilerFlavor comp of
--     GHC -&gt; GHC.getInstalledPackages verbosity packageDb progdb
--   </pre>
--   
--   Obviously it would be better to use the proper <tt>Compiler</tt>
--   abstraction because that would keep all the compiler-specific code
--   together. Unfortunately we cannot make this change yet without
--   breaking the <tt>UserHooks</tt> api, which would break all custom
--   <tt>Setup.hs</tt> files, so for the moment we just have to live with
--   this deficiency. If you're interested, see ticket #57.
module Distribution.Compiler
data CompilerFlavor
GHC :: CompilerFlavor
GHCJS :: CompilerFlavor
NHC :: CompilerFlavor
YHC :: CompilerFlavor
Hugs :: CompilerFlavor
HBC :: CompilerFlavor
Helium :: CompilerFlavor
JHC :: CompilerFlavor
LHC :: CompilerFlavor
UHC :: CompilerFlavor
Eta :: CompilerFlavor
HaskellSuite :: String -> CompilerFlavor
OtherCompiler :: String -> CompilerFlavor
buildCompilerId :: CompilerId
buildCompilerFlavor :: CompilerFlavor

-- | The default compiler flavour to pick when compiling stuff. This
--   defaults to the compiler used to build the Cabal lib.
--   
--   However if it's not a recognised compiler then it's <a>Nothing</a> and
--   the user will have to specify which compiler they want.
defaultCompilerFlavor :: Maybe CompilerFlavor
classifyCompilerFlavor :: String -> CompilerFlavor
knownCompilerFlavors :: [CompilerFlavor]

-- | <a>PerCompilerFlavor</a> carries only info per GHC and GHCJS
--   
--   Cabal parses only <tt>ghc-options</tt> and <tt>ghcjs-options</tt>,
--   others are omitted.
data PerCompilerFlavor v
PerCompilerFlavor :: v -> v -> PerCompilerFlavor v
perCompilerFlavorToList :: PerCompilerFlavor v -> [(CompilerFlavor, v)]
data CompilerId
CompilerId :: CompilerFlavor -> Version -> CompilerId

-- | Compiler information used for resolving configurations. Some fields
--   can be set to Nothing to indicate that the information is unknown.
data CompilerInfo
CompilerInfo :: CompilerId -> AbiTag -> Maybe [CompilerId] -> Maybe [Language] -> Maybe [Extension] -> CompilerInfo

-- | Compiler flavour and version.
[compilerInfoId] :: CompilerInfo -> CompilerId

-- | Tag for distinguishing incompatible ABI's on the same architecture/os.
[compilerInfoAbiTag] :: CompilerInfo -> AbiTag

-- | Other implementations that this compiler claims to be compatible with,
--   if known.
[compilerInfoCompat] :: CompilerInfo -> Maybe [CompilerId]

-- | Supported language standards, if known.
[compilerInfoLanguages] :: CompilerInfo -> Maybe [Language]

-- | Supported extensions, if known.
[compilerInfoExtensions] :: CompilerInfo -> Maybe [Extension]

-- | Make a CompilerInfo of which only the known information is its
--   CompilerId, its AbiTag and that it does not claim to be compatible
--   with other compiler id's.
unknownCompilerInfo :: CompilerId -> AbiTag -> CompilerInfo
data AbiTag
NoAbiTag :: AbiTag
AbiTag :: String -> AbiTag
abiTagString :: AbiTag -> String
instance Data.Binary.Class.Binary Distribution.Compiler.AbiTag
instance Data.Binary.Class.Binary Distribution.Compiler.CompilerFlavor
instance Data.Binary.Class.Binary Distribution.Compiler.CompilerId
instance Data.Binary.Class.Binary Distribution.Compiler.CompilerInfo
instance Data.Binary.Class.Binary a => Data.Binary.Class.Binary (Distribution.Compiler.PerCompilerFlavor a)
instance GHC.Internal.Data.Data.Data Distribution.Compiler.CompilerFlavor
instance GHC.Internal.Data.Data.Data v => GHC.Internal.Data.Data.Data (Distribution.Compiler.PerCompilerFlavor v)
instance GHC.Classes.Eq Distribution.Compiler.AbiTag
instance GHC.Classes.Eq Distribution.Compiler.CompilerFlavor
instance GHC.Classes.Eq Distribution.Compiler.CompilerId
instance GHC.Classes.Eq v => GHC.Classes.Eq (Distribution.Compiler.PerCompilerFlavor v)
instance GHC.Internal.Data.Foldable.Foldable Distribution.Compiler.PerCompilerFlavor
instance GHC.Internal.Base.Functor Distribution.Compiler.PerCompilerFlavor
instance GHC.Internal.Generics.Generic Distribution.Compiler.AbiTag
instance GHC.Internal.Generics.Generic Distribution.Compiler.CompilerFlavor
instance GHC.Internal.Generics.Generic Distribution.Compiler.CompilerId
instance GHC.Internal.Generics.Generic Distribution.Compiler.CompilerInfo
instance GHC.Internal.Generics.Generic (Distribution.Compiler.PerCompilerFlavor v)
instance (GHC.Internal.Base.Semigroup a, GHC.Internal.Base.Monoid a) => GHC.Internal.Base.Monoid (Distribution.Compiler.PerCompilerFlavor a)
instance Control.DeepSeq.NFData Distribution.Compiler.CompilerFlavor
instance Control.DeepSeq.NFData Distribution.Compiler.CompilerId
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Distribution.Compiler.PerCompilerFlavor a)
instance GHC.Classes.Ord Distribution.Compiler.CompilerFlavor
instance GHC.Classes.Ord Distribution.Compiler.CompilerId
instance GHC.Classes.Ord v => GHC.Classes.Ord (Distribution.Compiler.PerCompilerFlavor v)
instance Distribution.Parsec.Parsec Distribution.Compiler.AbiTag
instance Distribution.Parsec.Parsec Distribution.Compiler.CompilerFlavor
instance Distribution.Parsec.Parsec Distribution.Compiler.CompilerId
instance Distribution.Pretty.Pretty Distribution.Compiler.AbiTag
instance Distribution.Pretty.Pretty Distribution.Compiler.CompilerFlavor
instance Distribution.Pretty.Pretty Distribution.Compiler.CompilerId
instance GHC.Internal.Read.Read Distribution.Compiler.AbiTag
instance GHC.Internal.Read.Read Distribution.Compiler.CompilerFlavor
instance GHC.Internal.Read.Read Distribution.Compiler.CompilerId
instance GHC.Internal.Read.Read Distribution.Compiler.CompilerInfo
instance GHC.Internal.Read.Read v => GHC.Internal.Read.Read (Distribution.Compiler.PerCompilerFlavor v)
instance GHC.Internal.Base.Semigroup a => GHC.Internal.Base.Semigroup (Distribution.Compiler.PerCompilerFlavor a)
instance GHC.Internal.Show.Show Distribution.Compiler.AbiTag
instance GHC.Internal.Show.Show Distribution.Compiler.CompilerFlavor
instance GHC.Internal.Show.Show Distribution.Compiler.CompilerId
instance GHC.Internal.Show.Show Distribution.Compiler.CompilerInfo
instance GHC.Internal.Show.Show v => GHC.Internal.Show.Show (Distribution.Compiler.PerCompilerFlavor v)
instance Distribution.Utils.Structured.Structured Distribution.Compiler.AbiTag
instance Distribution.Utils.Structured.Structured Distribution.Compiler.CompilerFlavor
instance Distribution.Utils.Structured.Structured Distribution.Compiler.CompilerId
instance Distribution.Utils.Structured.Structured a => Distribution.Utils.Structured.Structured (Distribution.Compiler.PerCompilerFlavor a)
instance GHC.Internal.Data.Traversable.Traversable Distribution.Compiler.PerCompilerFlavor

module Distribution.Types.ConfVar

-- | A <tt>ConfVar</tt> represents the variable type used.
data ConfVar
OS :: OS -> ConfVar
Arch :: Arch -> ConfVar
PackageFlag :: FlagName -> ConfVar
Impl :: CompilerFlavor -> VersionRange -> ConfVar
instance Data.Binary.Class.Binary Distribution.Types.ConfVar.ConfVar
instance GHC.Internal.Data.Data.Data Distribution.Types.ConfVar.ConfVar
instance GHC.Classes.Eq Distribution.Types.ConfVar.ConfVar
instance GHC.Internal.Generics.Generic Distribution.Types.ConfVar.ConfVar
instance Control.DeepSeq.NFData Distribution.Types.ConfVar.ConfVar
instance GHC.Internal.Show.Show Distribution.Types.ConfVar.ConfVar
instance Distribution.Utils.Structured.Structured Distribution.Types.ConfVar.ConfVar

module Distribution.Fields.ConfVar

-- | Parse <tt><a>Condition</a> <a>ConfVar</a></tt> from section arguments
--   provided by parsec based outline parser.
parseConditionConfVar :: [SectionArg Position] -> ParseResult (Condition ConfVar)
parseConditionConfVarFromClause :: ByteString -> Either ParseError (Condition ConfVar)

module Distribution.Types.BuildInfo
data BuildInfo
BuildInfo :: Bool -> [LegacyExeDependency] -> [ExeDependency] -> [String] -> [String] -> [String] -> [String] -> [String] -> [String] -> [String] -> [PkgconfigDependency] -> [String] -> [String] -> [FilePath] -> [FilePath] -> [FilePath] -> [FilePath] -> [FilePath] -> [SymbolicPath PackageDir SourceDir] -> [ModuleName] -> [ModuleName] -> [ModuleName] -> Maybe Language -> [Language] -> [Extension] -> [Extension] -> [Extension] -> [String] -> [String] -> [String] -> [String] -> [String] -> [String] -> [String] -> [String] -> [FilePath] -> [FilePath] -> [FilePath] -> [FilePath] -> PerCompilerFlavor [String] -> PerCompilerFlavor [String] -> PerCompilerFlavor [String] -> PerCompilerFlavor [String] -> [(String, String)] -> [Dependency] -> [Mixin] -> BuildInfo

-- | component is buildable here
[buildable] :: BuildInfo -> Bool

-- | Tools needed to build this bit.
--   
--   This is a legacy field that <a>buildToolDepends</a> largely
--   supersedes.
--   
--   Unless use are very sure what you are doing, use the functions in
--   <a>Distribution.Simple.BuildToolDepends</a> rather than accessing this
--   field directly.
[buildTools] :: BuildInfo -> [LegacyExeDependency]

-- | Haskell tools needed to build this bit
--   
--   This field is better than <a>buildTools</a> because it allows one to
--   precisely specify an executable in a package.
--   
--   Unless use are very sure what you are doing, use the functions in
--   <a>Distribution.Simple.BuildToolDepends</a> rather than accessing this
--   field directly.
[buildToolDepends] :: BuildInfo -> [ExeDependency]

-- | options for pre-processing Haskell code
[cppOptions] :: BuildInfo -> [String]

-- | options for assembler
[asmOptions] :: BuildInfo -> [String]

-- | options for C-- compiler
[cmmOptions] :: BuildInfo -> [String]

-- | options for C compiler
[ccOptions] :: BuildInfo -> [String]

-- | options for C++ compiler
[cxxOptions] :: BuildInfo -> [String]

-- | options for linker
[ldOptions] :: BuildInfo -> [String]

-- | options for hsc2hs
[hsc2hsOptions] :: BuildInfo -> [String]

-- | pkg-config packages that are used
[pkgconfigDepends] :: BuildInfo -> [PkgconfigDependency]

-- | support frameworks for Mac OS X
[frameworks] :: BuildInfo -> [String]

-- | extra locations to find frameworks.
[extraFrameworkDirs] :: BuildInfo -> [String]

-- | Assembly files.
[asmSources] :: BuildInfo -> [FilePath]

-- | C-- files.
[cmmSources] :: BuildInfo -> [FilePath]
[cSources] :: BuildInfo -> [FilePath]
[cxxSources] :: BuildInfo -> [FilePath]
[jsSources] :: BuildInfo -> [FilePath]

-- | where to look for the Haskell module hierarchy
[hsSourceDirs] :: BuildInfo -> [SymbolicPath PackageDir SourceDir]

-- | non-exposed or non-main modules
[otherModules] :: BuildInfo -> [ModuleName]

-- | exposed modules that do not have a source file (e.g. <tt>GHC.Prim</tt>
--   from <tt>ghc-prim</tt> package)
[virtualModules] :: BuildInfo -> [ModuleName]

-- | not present on sdist, Paths_* or user-generated with a custom Setup.hs
[autogenModules] :: BuildInfo -> [ModuleName]

-- | language used when not explicitly specified
[defaultLanguage] :: BuildInfo -> Maybe Language

-- | other languages used within the package
[otherLanguages] :: BuildInfo -> [Language]

-- | language extensions used by all modules
[defaultExtensions] :: BuildInfo -> [Extension]

-- | other language extensions used within the package
[otherExtensions] :: BuildInfo -> [Extension]

-- | the old extensions field, treated same as <a>defaultExtensions</a>
[oldExtensions] :: BuildInfo -> [Extension]

-- | what libraries to link with when compiling a program that uses your
--   package
[extraLibs] :: BuildInfo -> [String]

-- | what libraries to link with when compiling a program fully statically
--   that uses your package
[extraLibsStatic] :: BuildInfo -> [String]

-- | if present, overrides extraLibs when package is loaded with GHCi.
[extraGHCiLibs] :: BuildInfo -> [String]

-- | if present, adds libs to hs-libraries, which become part of the
--   package. Example 1: the Cffi library shipping with the rts, alongside
--   the HSrts-1.0.a,.o,... Example 2: a library that is being built by a
--   foreign tool (e.g. rust) and copied and registered together with this
--   library. The logic on how this library is built will have to be
--   encoded in a custom Setup for now. Otherwise cabal would need to learn
--   how to call arbitrary library builders.
[extraBundledLibs] :: BuildInfo -> [String]

-- | Hidden Flag. This set of strings, will be appended to all libraries
--   when copying. E.g. [libHS<a>name</a>_<a>flavour</a> | flavour &lt;-
--   extraLibFlavours]. This should only be needed in very specific cases,
--   e.g. the <tt>rts</tt> package, where there are multiple copies of
--   slightly differently built libs.
[extraLibFlavours] :: BuildInfo -> [String]

-- | Hidden Flag. This set of strings will be appended to all
--   <i>dynamic</i> libraries when copying. This is particularly useful
--   with the <tt>rts</tt> package, where we want different dynamic
--   flavours of the RTS library to be installed.
[extraDynLibFlavours] :: BuildInfo -> [String]
[extraLibDirs] :: BuildInfo -> [String]
[extraLibDirsStatic] :: BuildInfo -> [String]

-- | directories to find .h files
[includeDirs] :: BuildInfo -> [FilePath]

-- | The .h files to be found in includeDirs
[includes] :: BuildInfo -> [FilePath]

-- | The .h files to be generated (e.g. by <tt>autoconf</tt>)
[autogenIncludes] :: BuildInfo -> [FilePath]

-- | .h files to install with the package
[installIncludes] :: BuildInfo -> [FilePath]
[options] :: BuildInfo -> PerCompilerFlavor [String]
[profOptions] :: BuildInfo -> PerCompilerFlavor [String]
[sharedOptions] :: BuildInfo -> PerCompilerFlavor [String]
[staticOptions] :: BuildInfo -> PerCompilerFlavor [String]

-- | Custom fields starting with x-, stored in a simple assoc-list.
[customFieldsBI] :: BuildInfo -> [(String, String)]

-- | Dependencies specific to a library or executable target
[targetBuildDepends] :: BuildInfo -> [Dependency]
[mixins] :: BuildInfo -> [Mixin]
emptyBuildInfo :: BuildInfo

-- | The <a>Language</a>s used by this component
allLanguages :: BuildInfo -> [Language]

-- | The <a>Extension</a>s that are used somewhere by this component
allExtensions :: BuildInfo -> [Extension]

-- | The <tt>Extensions</tt> that are used by all modules in this component
usedExtensions :: BuildInfo -> [Extension]

-- | Whether any modules in this component use Template Haskell or Quasi
--   Quotes
usesTemplateHaskellOrQQ :: BuildInfo -> Bool

-- | Select options for a particular Haskell compiler.
hcOptions :: CompilerFlavor -> BuildInfo -> [String]
hcProfOptions :: CompilerFlavor -> BuildInfo -> [String]
hcSharedOptions :: CompilerFlavor -> BuildInfo -> [String]
hcStaticOptions :: CompilerFlavor -> BuildInfo -> [String]
instance Data.Binary.Class.Binary Distribution.Types.BuildInfo.BuildInfo
instance GHC.Internal.Data.Data.Data Distribution.Types.BuildInfo.BuildInfo
instance GHC.Classes.Eq Distribution.Types.BuildInfo.BuildInfo
instance GHC.Internal.Generics.Generic Distribution.Types.BuildInfo.BuildInfo
instance GHC.Internal.Base.Monoid Distribution.Types.BuildInfo.BuildInfo
instance Control.DeepSeq.NFData Distribution.Types.BuildInfo.BuildInfo
instance GHC.Classes.Ord Distribution.Types.BuildInfo.BuildInfo
instance GHC.Internal.Read.Read Distribution.Types.BuildInfo.BuildInfo
instance GHC.Internal.Base.Semigroup Distribution.Types.BuildInfo.BuildInfo
instance GHC.Internal.Show.Show Distribution.Types.BuildInfo.BuildInfo
instance Distribution.Utils.Structured.Structured Distribution.Types.BuildInfo.BuildInfo

module Distribution.Types.HookedBuildInfo

-- | <a>HookedBuildInfo</a> is mechanism that hooks can use to override the
--   <a>BuildInfo</a>s inside packages. One example use-case (which is used
--   in core libraries today) is as a way of passing flags which are
--   computed by a configure script into Cabal. In this case, the autoconf
--   build type adds hooks to read in a textual <a>HookedBuildInfo</a>
--   format prior to doing any operations.
--   
--   Quite honestly, this mechanism is a massive hack since we shouldn't be
--   editing the <tt>PackageDescription</tt> data structure (it's easy to
--   assume that this data structure shouldn't change and run into bugs,
--   see for example 1c20a6328579af9e37677d507e2e9836ef70ab9d). But it's a
--   bit convenient, because there isn't another data structure that allows
--   adding extra <a>BuildInfo</a> style things.
--   
--   In any case, a lot of care has to be taken to make sure the
--   <a>HookedBuildInfo</a> is applied to the <tt>PackageDescription</tt>.
--   In general this process occurs in <a>Distribution.Simple</a>, which is
--   responsible for orchestrating the hooks mechanism. The general
--   strategy:
--   
--   <ol>
--   <li>We run the pre-hook, which produces a <a>HookedBuildInfo</a>
--   (e.g., in the Autoconf case, it reads it out from a file).</li>
--   <li>We sanity-check the hooked build info with
--   <tt>sanityCheckHookedBuildInfo</tt>.</li>
--   <li>We update our <tt>PackageDescription</tt> (either freshly read or
--   cached from <tt>LocalBuildInfo</tt>) with
--   <tt>updatePackageDescription</tt>.</li>
--   </ol>
--   
--   In principle, we are also supposed to update the copy of the
--   <tt>PackageDescription</tt> stored in <tt>LocalBuildInfo</tt> at
--   <tt>localPkgDescr</tt>. Unfortunately, in practice, there are lots of
--   Custom setup scripts which fail to update <tt>localPkgDescr</tt> so
--   you really shouldn't rely on it. It's not DEPRECATED because there are
--   legitimate uses for it, but... yeah. Sharp knife. See
--   <a>https://github.com/haskell/cabal/issues/3606</a> for more
--   information on the issue.
--   
--   It is not well-specified whether or not a <a>HookedBuildInfo</a>
--   applied at configure time is persistent to the
--   <tt>LocalBuildInfo</tt>. The fact that <a>HookedBuildInfo</a> is
--   passed to <tt>confHook</tt> MIGHT SUGGEST that the
--   <a>HookedBuildInfo</a> is applied at this time, but actually since
--   9317b67e6122ab14e53f81b573bd0ecb388eca5a it has been ONLY used to
--   create a modified package description that we check for problems: it
--   is never actually saved to the LBI. Since <a>HookedBuildInfo</a> is
--   applied monoidally to the existing build infos (and it is not an
--   idempotent monoid), it could break things to save it, since we are
--   obligated to apply any new <a>HookedBuildInfo</a> and then we'd get
--   the effect twice. But this does mean we have to re-apply it every
--   time. Hey, it's more flexibility.
type HookedBuildInfo = (Maybe BuildInfo, [(UnqualComponentName, BuildInfo)])
emptyHookedBuildInfo :: HookedBuildInfo

module Distribution.Types.BuildInfo.Lens
data BuildInfo

-- | Classy lenses for <a>BuildInfo</a>.
class HasBuildInfo a
buildInfo :: HasBuildInfo a => Lens' a BuildInfo
buildable :: HasBuildInfo a => Lens' a Bool
buildTools :: HasBuildInfo a => Lens' a [LegacyExeDependency]
buildToolDepends :: HasBuildInfo a => Lens' a [ExeDependency]
cppOptions :: HasBuildInfo a => Lens' a [String]
asmOptions :: HasBuildInfo a => Lens' a [String]
cmmOptions :: HasBuildInfo a => Lens' a [String]
ccOptions :: HasBuildInfo a => Lens' a [String]
cxxOptions :: HasBuildInfo a => Lens' a [String]
ldOptions :: HasBuildInfo a => Lens' a [String]
hsc2hsOptions :: HasBuildInfo a => Lens' a [String]
pkgconfigDepends :: HasBuildInfo a => Lens' a [PkgconfigDependency]
frameworks :: HasBuildInfo a => Lens' a [String]
extraFrameworkDirs :: HasBuildInfo a => Lens' a [String]
asmSources :: HasBuildInfo a => Lens' a [FilePath]
cmmSources :: HasBuildInfo a => Lens' a [FilePath]
cSources :: HasBuildInfo a => Lens' a [FilePath]
cxxSources :: HasBuildInfo a => Lens' a [FilePath]
jsSources :: HasBuildInfo a => Lens' a [FilePath]
hsSourceDirs :: HasBuildInfo a => Lens' a [SymbolicPath PackageDir SourceDir]
otherModules :: HasBuildInfo a => Lens' a [ModuleName]
virtualModules :: HasBuildInfo a => Lens' a [ModuleName]
autogenModules :: HasBuildInfo a => Lens' a [ModuleName]
defaultLanguage :: HasBuildInfo a => Lens' a (Maybe Language)
otherLanguages :: HasBuildInfo a => Lens' a [Language]
defaultExtensions :: HasBuildInfo a => Lens' a [Extension]
otherExtensions :: HasBuildInfo a => Lens' a [Extension]
oldExtensions :: HasBuildInfo a => Lens' a [Extension]
extraLibs :: HasBuildInfo a => Lens' a [String]
extraLibsStatic :: HasBuildInfo a => Lens' a [String]
extraGHCiLibs :: HasBuildInfo a => Lens' a [String]
extraBundledLibs :: HasBuildInfo a => Lens' a [String]
extraLibFlavours :: HasBuildInfo a => Lens' a [String]
extraDynLibFlavours :: HasBuildInfo a => Lens' a [String]
extraLibDirs :: HasBuildInfo a => Lens' a [String]
extraLibDirsStatic :: HasBuildInfo a => Lens' a [String]
includeDirs :: HasBuildInfo a => Lens' a [FilePath]
includes :: HasBuildInfo a => Lens' a [FilePath]
autogenIncludes :: HasBuildInfo a => Lens' a [FilePath]
installIncludes :: HasBuildInfo a => Lens' a [FilePath]
options :: HasBuildInfo a => Lens' a (PerCompilerFlavor [String])
profOptions :: HasBuildInfo a => Lens' a (PerCompilerFlavor [String])
sharedOptions :: HasBuildInfo a => Lens' a (PerCompilerFlavor [String])
staticOptions :: HasBuildInfo a => Lens' a (PerCompilerFlavor [String])
customFieldsBI :: HasBuildInfo a => Lens' a [(String, String)]
targetBuildDepends :: HasBuildInfo a => Lens' a [Dependency]
mixins :: HasBuildInfo a => Lens' a [Mixin]
class HasBuildInfos a
traverseBuildInfos :: HasBuildInfos a => Traversal' a BuildInfo
instance Distribution.Types.BuildInfo.Lens.HasBuildInfo Distribution.Types.BuildInfo.BuildInfo

module Distribution.Types.TestSuite

-- | A "test-suite" stanza in a cabal file.
data TestSuite
TestSuite :: UnqualComponentName -> TestSuiteInterface -> BuildInfo -> [String] -> TestSuite
[testName] :: TestSuite -> UnqualComponentName
[testInterface] :: TestSuite -> TestSuiteInterface
[testBuildInfo] :: TestSuite -> BuildInfo
[testCodeGenerators] :: TestSuite -> [String]
emptyTestSuite :: TestSuite
testType :: TestSuite -> TestType

-- | Get all the module names from a test suite.
testModules :: TestSuite -> [ModuleName]

-- | Get all the auto generated module names from a test suite. This are a
--   subset of <a>testModules</a>.
testModulesAutogen :: TestSuite -> [ModuleName]
instance Data.Binary.Class.Binary Distribution.Types.TestSuite.TestSuite
instance GHC.Internal.Data.Data.Data Distribution.Types.TestSuite.TestSuite
instance GHC.Classes.Eq Distribution.Types.TestSuite.TestSuite
instance GHC.Internal.Generics.Generic Distribution.Types.TestSuite.TestSuite
instance Distribution.Types.BuildInfo.Lens.HasBuildInfo Distribution.Types.TestSuite.TestSuite
instance GHC.Internal.Base.Monoid Distribution.Types.TestSuite.TestSuite
instance Control.DeepSeq.NFData Distribution.Types.TestSuite.TestSuite
instance GHC.Classes.Ord Distribution.Types.TestSuite.TestSuite
instance GHC.Internal.Read.Read Distribution.Types.TestSuite.TestSuite
instance GHC.Internal.Base.Semigroup Distribution.Types.TestSuite.TestSuite
instance GHC.Internal.Show.Show Distribution.Types.TestSuite.TestSuite
instance Distribution.Utils.Structured.Structured Distribution.Types.TestSuite.TestSuite

module Distribution.Types.TestSuite.Lens

-- | A "test-suite" stanza in a cabal file.
data TestSuite
testBuildInfo :: Lens' TestSuite BuildInfo
testName :: Lens' TestSuite UnqualComponentName
testInterface :: Lens' TestSuite TestSuiteInterface

module Distribution.Types.Library
data Library
Library :: LibraryName -> [ModuleName] -> [ModuleReexport] -> [ModuleName] -> Bool -> LibraryVisibility -> BuildInfo -> Library
[libName] :: Library -> LibraryName
[exposedModules] :: Library -> [ModuleName]
[reexportedModules] :: Library -> [ModuleReexport]

-- | What sigs need implementations?
[signatures] :: Library -> [ModuleName]

-- | Is the lib to be exposed by default? (i.e. whether its modules
--   available in GHCi for example)
[libExposed] :: Library -> Bool

-- | Whether this multilib can be used as a dependency for other packages.
[libVisibility] :: Library -> LibraryVisibility
[libBuildInfo] :: Library -> BuildInfo
emptyLibrary :: Library

-- | Get all the module names from the library (exposed and internal
--   modules) which are explicitly listed in the package description which
--   would need to be compiled. (This does not include reexports, which do
--   not need to be compiled.) This may not include all modules for which
--   GHC generated interface files (i.e., implicit modules.)
explicitLibModules :: Library -> [ModuleName]

-- | Get all the auto generated module names from the library, exposed or
--   not. This are a subset of <tt>libModules</tt>.
libModulesAutogen :: Library -> [ModuleName]
instance Data.Binary.Class.Binary Distribution.Types.Library.Library
instance GHC.Internal.Data.Data.Data Distribution.Types.Library.Library
instance GHC.Classes.Eq Distribution.Types.Library.Library
instance GHC.Internal.Generics.Generic Distribution.Types.Library.Library
instance Distribution.Types.BuildInfo.Lens.HasBuildInfo Distribution.Types.Library.Library
instance GHC.Internal.Base.Monoid Distribution.Types.Library.Library
instance Control.DeepSeq.NFData Distribution.Types.Library.Library
instance GHC.Classes.Ord Distribution.Types.Library.Library
instance GHC.Internal.Read.Read Distribution.Types.Library.Library
instance GHC.Internal.Base.Semigroup Distribution.Types.Library.Library
instance GHC.Internal.Show.Show Distribution.Types.Library.Library
instance Distribution.Utils.Structured.Structured Distribution.Types.Library.Library

module Distribution.Types.Library.Lens
data Library
libName :: Lens' Library LibraryName
libBuildInfo :: Lens' Library BuildInfo
libVisibility :: Lens' Library LibraryVisibility
exposedModules :: Lens' Library [ModuleName]
reexportedModules :: Lens' Library [ModuleReexport]
signatures :: Lens' Library [ModuleName]
libExposed :: Lens' Library Bool

module Distribution.Types.ForeignLib

-- | A foreign library stanza is like a library stanza, except that the
--   built code is intended for consumption by a non-Haskell client.
data ForeignLib
ForeignLib :: UnqualComponentName -> ForeignLibType -> [ForeignLibOption] -> BuildInfo -> Maybe LibVersionInfo -> Maybe Version -> [FilePath] -> ForeignLib

-- | Name of the foreign library
[foreignLibName] :: ForeignLib -> UnqualComponentName

-- | What kind of foreign library is this (static or dynamic).
[foreignLibType] :: ForeignLib -> ForeignLibType

-- | What options apply to this foreign library (e.g., are we merging in
--   all foreign dependencies.)
[foreignLibOptions] :: ForeignLib -> [ForeignLibOption]

-- | Build information for this foreign library.
[foreignLibBuildInfo] :: ForeignLib -> BuildInfo

-- | Libtool-style version-info data to compute library version. Refer to
--   the libtool documentation on the current:revision:age versioning
--   scheme.
[foreignLibVersionInfo] :: ForeignLib -> Maybe LibVersionInfo

-- | Linux library version
[foreignLibVersionLinux] :: ForeignLib -> Maybe Version

-- | (Windows-specific) module definition files
--   
--   This is a list rather than a maybe field so that we can flatten the
--   condition trees (for instance, when creating an sdist)
[foreignLibModDefFile] :: ForeignLib -> [FilePath]

-- | An empty foreign library.
emptyForeignLib :: ForeignLib

-- | Modules defined by a foreign library.
foreignLibModules :: ForeignLib -> [ModuleName]

-- | Is the foreign library shared?
foreignLibIsShared :: ForeignLib -> Bool

-- | Get a version number for a foreign library. If we're on Linux, and a
--   Linux version is specified, use that. If we're on Linux, and
--   libtool-style version-info is specified, translate that field into
--   appropriate version numbers. Otherwise, this feature is unsupported so
--   we don't return any version data.
foreignLibVersion :: ForeignLib -> OS -> [Int]
data LibVersionInfo

-- | Construct <a>LibVersionInfo</a> from <tt>(current, revision, age)</tt>
--   numbers.
--   
--   For instance, <tt>mkLibVersionInfo (3,0,0)</tt> constructs a
--   <a>LibVersionInfo</a> representing the version-info <tt>3:0:0</tt>.
--   
--   All version components must be non-negative.
mkLibVersionInfo :: (Int, Int, Int) -> LibVersionInfo

-- | From a given <a>LibVersionInfo</a>, extract the <tt>(current,
--   revision, age)</tt> numbers.
libVersionInfoCRA :: LibVersionInfo -> (Int, Int, Int)

-- | Given a version-info field, produce a <tt>major.minor.build</tt>
--   version
libVersionNumber :: LibVersionInfo -> (Int, Int, Int)

-- | Given a version-info field, return <tt>"major.minor.build"</tt> as a
--   <a>String</a>
libVersionNumberShow :: LibVersionInfo -> String

-- | Return the <tt>major</tt> version of a version-info field.
libVersionMajor :: LibVersionInfo -> Int
instance Data.Binary.Class.Binary Distribution.Types.ForeignLib.ForeignLib
instance Data.Binary.Class.Binary Distribution.Types.ForeignLib.LibVersionInfo
instance GHC.Internal.Data.Data.Data Distribution.Types.ForeignLib.ForeignLib
instance GHC.Internal.Data.Data.Data Distribution.Types.ForeignLib.LibVersionInfo
instance GHC.Classes.Eq Distribution.Types.ForeignLib.ForeignLib
instance GHC.Classes.Eq Distribution.Types.ForeignLib.LibVersionInfo
instance GHC.Internal.Generics.Generic Distribution.Types.ForeignLib.ForeignLib
instance GHC.Internal.Generics.Generic Distribution.Types.ForeignLib.LibVersionInfo
instance Distribution.Types.BuildInfo.Lens.HasBuildInfo Distribution.Types.ForeignLib.ForeignLib
instance GHC.Internal.Base.Monoid Distribution.Types.ForeignLib.ForeignLib
instance Control.DeepSeq.NFData Distribution.Types.ForeignLib.ForeignLib
instance Control.DeepSeq.NFData Distribution.Types.ForeignLib.LibVersionInfo
instance GHC.Classes.Ord Distribution.Types.ForeignLib.ForeignLib
instance GHC.Classes.Ord Distribution.Types.ForeignLib.LibVersionInfo
instance Distribution.Parsec.Parsec Distribution.Types.ForeignLib.LibVersionInfo
instance Distribution.Pretty.Pretty Distribution.Types.ForeignLib.LibVersionInfo
instance GHC.Internal.Read.Read Distribution.Types.ForeignLib.ForeignLib
instance GHC.Internal.Read.Read Distribution.Types.ForeignLib.LibVersionInfo
instance GHC.Internal.Base.Semigroup Distribution.Types.ForeignLib.ForeignLib
instance GHC.Internal.Show.Show Distribution.Types.ForeignLib.ForeignLib
instance GHC.Internal.Show.Show Distribution.Types.ForeignLib.LibVersionInfo
instance Distribution.Utils.Structured.Structured Distribution.Types.ForeignLib.ForeignLib
instance Distribution.Utils.Structured.Structured Distribution.Types.ForeignLib.LibVersionInfo

module Distribution.Types.ForeignLib.Lens

-- | A foreign library stanza is like a library stanza, except that the
--   built code is intended for consumption by a non-Haskell client.
data ForeignLib
foreignLibName :: Lens' ForeignLib UnqualComponentName
foreignLibBuildInfo :: Lens' ForeignLib BuildInfo
foreignLibType :: Lens' ForeignLib ForeignLibType
foreignLibOptions :: Lens' ForeignLib [ForeignLibOption]
foreignLibVersionInfo :: Lens' ForeignLib (Maybe LibVersionInfo)
foreignLibVersionLinux :: Lens' ForeignLib (Maybe Version)
foreignLibModDefFile :: Lens' ForeignLib [FilePath]

module Distribution.Types.Executable
data Executable
Executable :: UnqualComponentName -> FilePath -> ExecutableScope -> BuildInfo -> Executable
[exeName] :: Executable -> UnqualComponentName
[modulePath] :: Executable -> FilePath
[exeScope] :: Executable -> ExecutableScope
[buildInfo] :: Executable -> BuildInfo
emptyExecutable :: Executable

-- | Get all the module names from an exe
exeModules :: Executable -> [ModuleName]

-- | Get all the auto generated module names from an exe This are a subset
--   of <a>exeModules</a>.
exeModulesAutogen :: Executable -> [ModuleName]
instance Data.Binary.Class.Binary Distribution.Types.Executable.Executable
instance GHC.Internal.Data.Data.Data Distribution.Types.Executable.Executable
instance GHC.Classes.Eq Distribution.Types.Executable.Executable
instance GHC.Internal.Generics.Generic Distribution.Types.Executable.Executable
instance Distribution.Types.BuildInfo.Lens.HasBuildInfo Distribution.Types.Executable.Executable
instance GHC.Internal.Base.Monoid Distribution.Types.Executable.Executable
instance Control.DeepSeq.NFData Distribution.Types.Executable.Executable
instance GHC.Classes.Ord Distribution.Types.Executable.Executable
instance GHC.Internal.Read.Read Distribution.Types.Executable.Executable
instance GHC.Internal.Base.Semigroup Distribution.Types.Executable.Executable
instance GHC.Internal.Show.Show Distribution.Types.Executable.Executable
instance Distribution.Utils.Structured.Structured Distribution.Types.Executable.Executable

module Distribution.Types.Executable.Lens
data Executable
exeName :: Lens' Executable UnqualComponentName
exeBuildInfo :: Lens' Executable BuildInfo
modulePath :: Lens' Executable String
exeScope :: Lens' Executable ExecutableScope

module Distribution.Types.Benchmark

-- | A "benchmark" stanza in a cabal file.
data Benchmark
Benchmark :: UnqualComponentName -> BenchmarkInterface -> BuildInfo -> Benchmark
[benchmarkName] :: Benchmark -> UnqualComponentName
[benchmarkInterface] :: Benchmark -> BenchmarkInterface
[benchmarkBuildInfo] :: Benchmark -> BuildInfo
emptyBenchmark :: Benchmark
benchmarkType :: Benchmark -> BenchmarkType

-- | Get all the module names from a benchmark.
benchmarkModules :: Benchmark -> [ModuleName]

-- | Get all the auto generated module names from a benchmark. This are a
--   subset of <a>benchmarkModules</a>.
benchmarkModulesAutogen :: Benchmark -> [ModuleName]
instance Data.Binary.Class.Binary Distribution.Types.Benchmark.Benchmark
instance GHC.Internal.Data.Data.Data Distribution.Types.Benchmark.Benchmark
instance GHC.Classes.Eq Distribution.Types.Benchmark.Benchmark
instance GHC.Internal.Generics.Generic Distribution.Types.Benchmark.Benchmark
instance Distribution.Types.BuildInfo.Lens.HasBuildInfo Distribution.Types.Benchmark.Benchmark
instance GHC.Internal.Base.Monoid Distribution.Types.Benchmark.Benchmark
instance Control.DeepSeq.NFData Distribution.Types.Benchmark.Benchmark
instance GHC.Classes.Ord Distribution.Types.Benchmark.Benchmark
instance GHC.Internal.Read.Read Distribution.Types.Benchmark.Benchmark
instance GHC.Internal.Base.Semigroup Distribution.Types.Benchmark.Benchmark
instance GHC.Internal.Show.Show Distribution.Types.Benchmark.Benchmark
instance Distribution.Utils.Structured.Structured Distribution.Types.Benchmark.Benchmark

module Distribution.Types.Component
data Component
CLib :: Library -> Component
CFLib :: ForeignLib -> Component
CExe :: Executable -> Component
CTest :: TestSuite -> Component
CBench :: Benchmark -> Component
foldComponent :: (Library -> a) -> (ForeignLib -> a) -> (Executable -> a) -> (TestSuite -> a) -> (Benchmark -> a) -> Component -> a
componentBuildInfo :: Component -> BuildInfo

-- | Is a component buildable (i.e., not marked with <tt>buildable:
--   False</tt>)? See also this note in
--   <a>Distribution.Types.ComponentRequestedSpec#buildable_vs_enabled_components</a>.
componentBuildable :: Component -> Bool
componentName :: Component -> ComponentName
partitionComponents :: [Component] -> ([Library], [ForeignLib], [Executable], [TestSuite], [Benchmark])
instance Data.Binary.Class.Binary Distribution.Types.Component.Component
instance GHC.Classes.Eq Distribution.Types.Component.Component
instance GHC.Internal.Generics.Generic Distribution.Types.Component.Component
instance Distribution.Types.BuildInfo.Lens.HasBuildInfo Distribution.Types.Component.Component
instance GHC.Internal.Read.Read Distribution.Types.Component.Component
instance GHC.Internal.Base.Semigroup Distribution.Types.Component.Component
instance GHC.Internal.Show.Show Distribution.Types.Component.Component
instance Distribution.Utils.Structured.Structured Distribution.Types.Component.Component

module Distribution.Types.ComponentRequestedSpec

-- | Describes what components are enabled by user-interaction. See also
--   this note in
--   <a>Distribution.Types.ComponentRequestedSpec#buildable_vs_enabled_components</a>.
data ComponentRequestedSpec
ComponentRequestedSpec :: Bool -> Bool -> ComponentRequestedSpec
[testsRequested] :: ComponentRequestedSpec -> Bool
[benchmarksRequested] :: ComponentRequestedSpec -> Bool
OneComponentRequestedSpec :: ComponentName -> ComponentRequestedSpec

-- | A reason explaining why a component is disabled.
data ComponentDisabledReason
DisabledComponent :: ComponentDisabledReason
DisabledAllTests :: ComponentDisabledReason
DisabledAllBenchmarks :: ComponentDisabledReason
DisabledAllButOne :: String -> ComponentDisabledReason

-- | The default set of enabled components. Historically tests and
--   benchmarks are NOT enabled by default.
defaultComponentRequestedSpec :: ComponentRequestedSpec

-- | Is this component name enabled? See also this note in
--   <a>Distribution.Types.ComponentRequestedSpec#buildable_vs_enabled_components</a>.
componentNameRequested :: ComponentRequestedSpec -> ComponentName -> Bool

-- | Is this component enabled? See also this note in
--   <a>Distribution.Types.ComponentRequestedSpec#buildable_vs_enabled_components</a>.
componentEnabled :: ComponentRequestedSpec -> Component -> Bool

-- | Is this component disabled, and if so, why?
componentDisabledReason :: ComponentRequestedSpec -> Component -> Maybe ComponentDisabledReason
instance Data.Binary.Class.Binary Distribution.Types.ComponentRequestedSpec.ComponentRequestedSpec
instance GHC.Classes.Eq Distribution.Types.ComponentRequestedSpec.ComponentRequestedSpec
instance GHC.Internal.Generics.Generic Distribution.Types.ComponentRequestedSpec.ComponentRequestedSpec
instance GHC.Internal.Read.Read Distribution.Types.ComponentRequestedSpec.ComponentRequestedSpec
instance GHC.Internal.Show.Show Distribution.Types.ComponentRequestedSpec.ComponentRequestedSpec
instance Distribution.Utils.Structured.Structured Distribution.Types.ComponentRequestedSpec.ComponentRequestedSpec


-- | This defines the data structure for the <tt>.cabal</tt> file format.
--   There are several parts to this structure. It has top level info and
--   then <a>Library</a>, <a>Executable</a>, <a>TestSuite</a>, and
--   <a>Benchmark</a> sections each of which have associated
--   <a>BuildInfo</a> data that's used to build the library, exe, test, or
--   benchmark. To further complicate things there is both a
--   <a>PackageDescription</a> and a <tt>GenericPackageDescription</tt>.
--   This distinction relates to cabal configurations. When we initially
--   read a <tt>.cabal</tt> file we get a
--   <tt>GenericPackageDescription</tt> which has all the conditional
--   sections. Before actually building a package we have to decide on each
--   conditional. Once we've done that we get a <a>PackageDescription</a>.
--   It was done this way initially to avoid breaking too much stuff when
--   the feature was introduced. It could probably do with being
--   rationalised at some point to make it simpler.
module Distribution.Types.PackageDescription

-- | This data type is the internal representation of the file
--   <tt>pkg.cabal</tt>. It contains two kinds of information about the
--   package: information which is needed for all packages, such as the
--   package name and version, and information which is needed for the
--   simple build system only, such as the compiler options and library
--   name.
data PackageDescription
PackageDescription :: CabalSpecVersion -> PackageIdentifier -> Either License License -> [SymbolicPath PackageDir LicenseFile] -> !ShortText -> !ShortText -> !ShortText -> !ShortText -> [(CompilerFlavor, VersionRange)] -> !ShortText -> !ShortText -> !ShortText -> [SourceRepo] -> !ShortText -> !ShortText -> !ShortText -> [(String, String)] -> Maybe BuildType -> Maybe SetupBuildInfo -> Maybe Library -> [Library] -> [Executable] -> [ForeignLib] -> [TestSuite] -> [Benchmark] -> [FilePath] -> FilePath -> [FilePath] -> [FilePath] -> [FilePath] -> PackageDescription

-- | The version of the Cabal spec that this package description uses.
[specVersion] :: PackageDescription -> CabalSpecVersion
[package] :: PackageDescription -> PackageIdentifier
[licenseRaw] :: PackageDescription -> Either License License
[licenseFiles] :: PackageDescription -> [SymbolicPath PackageDir LicenseFile]
[copyright] :: PackageDescription -> !ShortText
[maintainer] :: PackageDescription -> !ShortText
[author] :: PackageDescription -> !ShortText
[stability] :: PackageDescription -> !ShortText
[testedWith] :: PackageDescription -> [(CompilerFlavor, VersionRange)]
[homepage] :: PackageDescription -> !ShortText
[pkgUrl] :: PackageDescription -> !ShortText
[bugReports] :: PackageDescription -> !ShortText
[sourceRepos] :: PackageDescription -> [SourceRepo]

-- | A one-line summary of this package
[synopsis] :: PackageDescription -> !ShortText

-- | A more verbose description of this package
[description] :: PackageDescription -> !ShortText
[category] :: PackageDescription -> !ShortText

-- | Custom fields starting with x-, stored in a simple assoc-list.
[customFieldsPD] :: PackageDescription -> [(String, String)]

-- | The original <tt>build-type</tt> value as parsed from the
--   <tt>.cabal</tt> file without defaulting. See also <a>buildType</a>.
[buildTypeRaw] :: PackageDescription -> Maybe BuildType
[setupBuildInfo] :: PackageDescription -> Maybe SetupBuildInfo
[library] :: PackageDescription -> Maybe Library
[subLibraries] :: PackageDescription -> [Library]
[executables] :: PackageDescription -> [Executable]
[foreignLibs] :: PackageDescription -> [ForeignLib]
[testSuites] :: PackageDescription -> [TestSuite]
[benchmarks] :: PackageDescription -> [Benchmark]
[dataFiles] :: PackageDescription -> [FilePath]
[dataDir] :: PackageDescription -> FilePath
[extraSrcFiles] :: PackageDescription -> [FilePath]
[extraTmpFiles] :: PackageDescription -> [FilePath]
[extraDocFiles] :: PackageDescription -> [FilePath]

-- | The SPDX <tt>LicenseExpression</tt> of the package.
license :: PackageDescription -> License

-- | See <a>license</a>.
license' :: Either License License -> License

-- | The effective <tt>build-type</tt> after applying defaulting rules.
--   
--   The original <tt>build-type</tt> value parsed is stored in the
--   <a>buildTypeRaw</a> field. However, the <tt>build-type</tt> field is
--   optional and can therefore be empty in which case we need to compute
--   the <i>effective</i> <tt>build-type</tt>. This function implements the
--   following defaulting rules:
--   
--   <ul>
--   <li>For <tt>cabal-version:2.0</tt> and below, default to the
--   <tt>Custom</tt> build-type unconditionally.</li>
--   <li>Otherwise, if a <tt>custom-setup</tt> stanza is defined, default
--   to the <tt>Custom</tt> build-type; else default to <tt>Simple</tt>
--   build-type.</li>
--   </ul>
buildType :: PackageDescription -> BuildType
emptyPackageDescription :: PackageDescription

-- | Does this package have a buildable PUBLIC library?
hasPublicLib :: PackageDescription -> Bool

-- | Does this package have any libraries?
hasLibs :: PackageDescription -> Bool
allLibraries :: PackageDescription -> [Library]

-- | If the package description has a buildable library section, call the
--   given function with the library build info as argument. You probably
--   want <tt>withLibLBI</tt> if you have a <tt>LocalBuildInfo</tt>, see
--   the note in
--   <a>Distribution.Types.ComponentRequestedSpec#buildable_vs_enabled_components</a>
--   for more information.
withLib :: PackageDescription -> (Library -> IO ()) -> IO ()

-- | does this package have any executables?
hasExes :: PackageDescription -> Bool

-- | Perform the action on each buildable <a>Executable</a> in the package
--   description. You probably want <tt>withExeLBI</tt> if you have a
--   <tt>LocalBuildInfo</tt>, see the note in
--   <a>Distribution.Types.ComponentRequestedSpec#buildable_vs_enabled_components</a>
--   for more information.
withExe :: PackageDescription -> (Executable -> IO ()) -> IO ()

-- | Does this package have any test suites?
hasTests :: PackageDescription -> Bool

-- | Perform an action on each buildable <a>TestSuite</a> in a package. You
--   probably want <tt>withTestLBI</tt> if you have a
--   <tt>LocalBuildInfo</tt>, see the note in
--   <a>Distribution.Types.ComponentRequestedSpec#buildable_vs_enabled_components</a>
--   for more information.
withTest :: PackageDescription -> (TestSuite -> IO ()) -> IO ()

-- | Does this package have any benchmarks?
hasBenchmarks :: PackageDescription -> Bool

-- | Perform an action on each buildable <a>Benchmark</a> in a package. You
--   probably want <tt>withBenchLBI</tt> if you have a
--   <tt>LocalBuildInfo</tt>, see the note in
--   <a>Distribution.Types.ComponentRequestedSpec#buildable_vs_enabled_components</a>
--   for more information.
withBenchmark :: PackageDescription -> (Benchmark -> IO ()) -> IO ()

-- | Does this package have any foreign libraries?
hasForeignLibs :: PackageDescription -> Bool

-- | Perform the action on each buildable <a>ForeignLib</a> in the package
--   description.
withForeignLib :: PackageDescription -> (ForeignLib -> IO ()) -> IO ()

-- | All <a>BuildInfo</a> in the <a>PackageDescription</a>: libraries,
--   executables, test-suites and benchmarks.
--   
--   Useful for implementing package checks.
allBuildInfo :: PackageDescription -> [BuildInfo]

-- | Return all of the <a>BuildInfo</a>s of enabled components, i.e., all
--   of the ones that would be built if you run <tt>./Setup build</tt>.
enabledBuildInfos :: PackageDescription -> ComponentRequestedSpec -> [BuildInfo]

-- | Get the combined build-depends entries of all components.
allBuildDepends :: PackageDescription -> [Dependency]

-- | Get the combined build-depends entries of all enabled components, per
--   the given request spec.
enabledBuildDepends :: PackageDescription -> ComponentRequestedSpec -> [Dependency]
updatePackageDescription :: HookedBuildInfo -> PackageDescription -> PackageDescription

-- | All the components in the package.
pkgComponents :: PackageDescription -> [Component]

-- | A list of all components in the package that are buildable, i.e., were
--   not marked with <tt>buildable: False</tt>. This does NOT indicate if
--   we are actually going to build the component, see
--   <a>enabledComponents</a> instead.
pkgBuildableComponents :: PackageDescription -> [Component]

-- | A list of all components in the package that are enabled.
enabledComponents :: PackageDescription -> ComponentRequestedSpec -> [Component]
lookupComponent :: PackageDescription -> ComponentName -> Maybe Component
getComponent :: PackageDescription -> ComponentName -> Component
instance Data.Binary.Class.Binary Distribution.Types.PackageDescription.PackageDescription
instance GHC.Internal.Data.Data.Data Distribution.Types.PackageDescription.PackageDescription
instance GHC.Classes.Eq Distribution.Types.PackageDescription.PackageDescription
instance GHC.Internal.Generics.Generic Distribution.Types.PackageDescription.PackageDescription
instance Distribution.Types.BuildInfo.Lens.HasBuildInfos Distribution.Types.PackageDescription.PackageDescription
instance Control.DeepSeq.NFData Distribution.Types.PackageDescription.PackageDescription
instance GHC.Classes.Ord Distribution.Types.PackageDescription.PackageDescription
instance Distribution.Package.Package Distribution.Types.PackageDescription.PackageDescription
instance GHC.Internal.Read.Read Distribution.Types.PackageDescription.PackageDescription
instance GHC.Internal.Show.Show Distribution.Types.PackageDescription.PackageDescription
instance Distribution.Utils.Structured.Structured Distribution.Types.PackageDescription.PackageDescription

module Distribution.Types.GenericPackageDescription
data GenericPackageDescription
GenericPackageDescription :: PackageDescription -> Maybe Version -> [PackageFlag] -> Maybe (CondTree ConfVar [Dependency] Library) -> [(UnqualComponentName, CondTree ConfVar [Dependency] Library)] -> [(UnqualComponentName, CondTree ConfVar [Dependency] ForeignLib)] -> [(UnqualComponentName, CondTree ConfVar [Dependency] Executable)] -> [(UnqualComponentName, CondTree ConfVar [Dependency] TestSuite)] -> [(UnqualComponentName, CondTree ConfVar [Dependency] Benchmark)] -> GenericPackageDescription
[packageDescription] :: GenericPackageDescription -> PackageDescription

-- | This is a version as specified in source. We populate this field in
--   index reading for dummy GPDs, only when GPD reading failed, but
--   scanning haven't.
--   
--   Cabal-the-library never produces GPDs with Just as gpdScannedVersion.
--   
--   Perfectly, PackageIndex should have sum type, so we don't need to have
--   dummy GPDs.
[gpdScannedVersion] :: GenericPackageDescription -> Maybe Version
[genPackageFlags] :: GenericPackageDescription -> [PackageFlag]
[condLibrary] :: GenericPackageDescription -> Maybe (CondTree ConfVar [Dependency] Library)
[condSubLibraries] :: GenericPackageDescription -> [(UnqualComponentName, CondTree ConfVar [Dependency] Library)]
[condForeignLibs] :: GenericPackageDescription -> [(UnqualComponentName, CondTree ConfVar [Dependency] ForeignLib)]
[condExecutables] :: GenericPackageDescription -> [(UnqualComponentName, CondTree ConfVar [Dependency] Executable)]
[condTestSuites] :: GenericPackageDescription -> [(UnqualComponentName, CondTree ConfVar [Dependency] TestSuite)]
[condBenchmarks] :: GenericPackageDescription -> [(UnqualComponentName, CondTree ConfVar [Dependency] Benchmark)]
emptyGenericPackageDescription :: GenericPackageDescription
instance Data.Binary.Class.Binary Distribution.Types.GenericPackageDescription.GenericPackageDescription
instance GHC.Internal.Data.Data.Data Distribution.Types.GenericPackageDescription.GenericPackageDescription
instance GHC.Classes.Eq Distribution.Types.GenericPackageDescription.GenericPackageDescription
instance GHC.Internal.Generics.Generic Distribution.Types.GenericPackageDescription.GenericPackageDescription
instance Distribution.Types.BuildInfo.Lens.HasBuildInfos Distribution.Types.GenericPackageDescription.GenericPackageDescription
instance Control.DeepSeq.NFData Distribution.Types.GenericPackageDescription.GenericPackageDescription
instance Distribution.Package.Package Distribution.Types.GenericPackageDescription.GenericPackageDescription
instance GHC.Internal.Show.Show Distribution.Types.GenericPackageDescription.GenericPackageDescription
instance Distribution.Utils.Structured.Structured Distribution.Types.GenericPackageDescription.GenericPackageDescription

module Distribution.Types.GenericPackageDescription.Lens
data GenericPackageDescription

-- | A flag can represent a feature to be included, or a way of linking a
--   target against its dependencies, or in fact whatever you can think of.
data PackageFlag

-- | A <a>FlagName</a> is the name of a user-defined configuration flag
--   
--   Use <a>mkFlagName</a> and <a>unFlagName</a> to convert from/to a
--   <a>String</a>.
--   
--   This type is opaque since <tt>Cabal-2.0</tt>
data FlagName

-- | A <tt>ConfVar</tt> represents the variable type used.
data ConfVar
OS :: OS -> ConfVar
Arch :: Arch -> ConfVar
PackageFlag :: FlagName -> ConfVar
Impl :: CompilerFlavor -> VersionRange -> ConfVar
packageDescription :: Lens' GenericPackageDescription PackageDescription
flagName :: Lens' PackageFlag FlagName
flagDescription :: Lens' PackageFlag String
flagDefault :: Lens' PackageFlag Bool
flagManual :: Lens' PackageFlag Bool
gpdScannedVersion :: Lens' GenericPackageDescription (Maybe Version)
genPackageFlags :: Lens' GenericPackageDescription [PackageFlag]
condLibrary :: Lens' GenericPackageDescription (Maybe (CondTree ConfVar [Dependency] Library))
condSubLibraries :: Lens' GenericPackageDescription [(UnqualComponentName, CondTree ConfVar [Dependency] Library)]
condForeignLibs :: Lens' GenericPackageDescription [(UnqualComponentName, CondTree ConfVar [Dependency] ForeignLib)]
condExecutables :: Lens' GenericPackageDescription [(UnqualComponentName, CondTree ConfVar [Dependency] Executable)]
condTestSuites :: Lens' GenericPackageDescription [(UnqualComponentName, CondTree ConfVar [Dependency] TestSuite)]
condBenchmarks :: Lens' GenericPackageDescription [(UnqualComponentName, CondTree ConfVar [Dependency] Benchmark)]
allCondTrees :: Applicative f => (forall a. () => CondTree ConfVar [Dependency] a -> f (CondTree ConfVar [Dependency] a)) -> GenericPackageDescription -> f GenericPackageDescription
_OS :: Traversal' ConfVar OS
_Arch :: Traversal' ConfVar Arch
_PackageFlag :: Traversal' ConfVar FlagName
_Impl :: Traversal' ConfVar (CompilerFlavor, VersionRange)

module Distribution.Types.Benchmark.Lens

-- | A "benchmark" stanza in a cabal file.
data Benchmark
benchmarkName :: Lens' Benchmark UnqualComponentName
benchmarkBuildInfo :: Lens' Benchmark BuildInfo
benchmarkInterface :: Lens' Benchmark BenchmarkInterface

module Distribution.Types.PackageDescription.Lens

-- | This data type is the internal representation of the file
--   <tt>pkg.cabal</tt>. It contains two kinds of information about the
--   package: information which is needed for all packages, such as the
--   package name and version, and information which is needed for the
--   simple build system only, such as the compiler options and library
--   name.
data PackageDescription

componentBuildInfo :: ComponentName -> Traversal' PackageDescription BuildInfo

allLibraries :: Traversal' PackageDescription Library
package :: Lens' PackageDescription PackageIdentifier
copyright :: Lens' PackageDescription ShortText
maintainer :: Lens' PackageDescription ShortText
author :: Lens' PackageDescription ShortText
stability :: Lens' PackageDescription ShortText
homepage :: Lens' PackageDescription ShortText
pkgUrl :: Lens' PackageDescription ShortText
synopsis :: Lens' PackageDescription ShortText
description :: Lens' PackageDescription ShortText
category :: Lens' PackageDescription ShortText
dataDir :: Lens' PackageDescription FilePath
specVersion :: Lens' PackageDescription CabalSpecVersion
licenseRaw :: Lens' PackageDescription (Either License License)
licenseFiles :: Lens' PackageDescription [SymbolicPath PackageDir LicenseFile]
testedWith :: Lens' PackageDescription [(CompilerFlavor, VersionRange)]
bugReports :: Lens' PackageDescription ShortText
sourceRepos :: Lens' PackageDescription [SourceRepo]
customFieldsPD :: Lens' PackageDescription [(String, String)]
buildTypeRaw :: Lens' PackageDescription (Maybe BuildType)
setupBuildInfo :: Lens' PackageDescription (Maybe SetupBuildInfo)
library :: Lens' PackageDescription (Maybe Library)
subLibraries :: Lens' PackageDescription [Library]
executables :: Lens' PackageDescription [Executable]
foreignLibs :: Lens' PackageDescription [ForeignLib]
testSuites :: Lens' PackageDescription [TestSuite]
benchmarks :: Lens' PackageDescription [Benchmark]
dataFiles :: Lens' PackageDescription [FilePath]
extraSrcFiles :: Lens' PackageDescription [String]
extraTmpFiles :: Lens' PackageDescription [String]
extraDocFiles :: Lens' PackageDescription [String]

componentModules :: Monoid r => ComponentName -> Getting r PackageDescription [ModuleName]

module Distribution.Types.Lens


-- | Backwards compatibility reexport of most things you need to know about
--   <tt>.cabal</tt> files.
module Distribution.PackageDescription


-- | This is about the cabal configurations feature. It exports
--   <a>finalizePD</a> and <a>flattenPackageDescription</a> which are
--   functions for converting <a>GenericPackageDescription</a>s down to
--   <a>PackageDescription</a>s. It has code for working with the tree of
--   conditions and resolving or flattening conditions.
module Distribution.PackageDescription.Configuration

-- | Create a package description with all configurations resolved.
--   
--   This function takes a <a>GenericPackageDescription</a> and several
--   environment parameters and tries to generate <a>PackageDescription</a>
--   by finding a flag assignment that result in satisfiable dependencies.
--   
--   It takes as inputs a not necessarily complete specifications of flags
--   assignments, an optional package index as well as platform parameters.
--   If some flags are not assigned explicitly, this function will try to
--   pick an assignment that causes this function to succeed. The package
--   index is optional since on some platforms we cannot determine which
--   packages have been installed before. When no package index is
--   supplied, every dependency is assumed to be satisfiable, therefore all
--   not explicitly assigned flags will get their default values.
--   
--   This function will fail if it cannot find a flag assignment that leads
--   to satisfiable dependencies. (It will not try alternative assignments
--   for explicitly specified flags.) In case of failure it will return the
--   missing dependencies that it encountered when trying different flag
--   assignments. On success, it will return the package description and
--   the full flag assignment chosen.
--   
--   Note that this drops any stanzas which have <tt>buildable: False</tt>.
--   While this is arguably the right thing to do, it means we give bad
--   error messages in some situations, see #3858.
finalizePD :: FlagAssignment -> ComponentRequestedSpec -> (Dependency -> Bool) -> Platform -> CompilerInfo -> [PackageVersionConstraint] -> GenericPackageDescription -> Either [Dependency] (PackageDescription, FlagAssignment)

-- | Flatten a generic package description by ignoring all conditions and
--   just join the field descriptors into on package description. Note,
--   however, that this may lead to inconsistent field values, since all
--   values are joined into one field, which may not be possible in the
--   original package description, due to the use of exclusive choices (if
--   ... else ...).
--   
--   TODO: One particularly tricky case is defaulting. In the original
--   package description, e.g., the source directory might either be the
--   default or a certain, explicitly set path. Since defaults are filled
--   in only after the package has been resolved and when no explicit value
--   has been set, the default path will be missing from the package
--   description returned by this function.
flattenPackageDescription :: GenericPackageDescription -> PackageDescription

-- | Parse a configuration condition from a string.
parseCondition :: CabalParsing m => m (Condition ConfVar)
freeVars :: CondTree ConfVar c a -> [FlagName]

-- | Extract the condition matched by the given predicate from a cond tree.
--   
--   We use this mainly for extracting buildable conditions (see the Note
--   in Distribution.PackageDescription.Configuration), but the function is
--   in fact more general.
extractCondition :: Eq v => (a -> Bool) -> CondTree v c a -> Condition v

-- | Extract conditions matched by the given predicate from all cond trees
--   in a <a>GenericPackageDescription</a>.
extractConditions :: (BuildInfo -> Bool) -> GenericPackageDescription -> [Condition ConfVar]

-- | Transforms a <a>CondTree</a> by putting the input under the "then"
--   branch of a conditional that is True when Buildable is True. If
--   <a>addBuildableCondition</a> can determine that Buildable is always
--   True, it returns the input unchanged. If Buildable is always False, it
--   returns the empty <a>CondTree</a>.
addBuildableCondition :: (Eq v, Monoid a, Monoid c) => (a -> BuildInfo) -> CondTree v c a -> CondTree v c a
mapCondTree :: (a -> b) -> (c -> d) -> (Condition v -> Condition w) -> CondTree v c a -> CondTree w d b
mapTreeData :: (a -> b) -> CondTree v c a -> CondTree v c b
mapTreeConds :: (Condition v -> Condition w) -> CondTree v c a -> CondTree w c a
mapTreeConstrs :: (c -> d) -> CondTree v c a -> CondTree v d a
transformAllBuildInfos :: (BuildInfo -> BuildInfo) -> (SetupBuildInfo -> SetupBuildInfo) -> GenericPackageDescription -> GenericPackageDescription

-- | Walk a <a>GenericPackageDescription</a> and apply <tt>f</tt> to all
--   nested <tt>build-depends</tt> fields.
transformAllBuildDepends :: (Dependency -> Dependency) -> GenericPackageDescription -> GenericPackageDescription

-- | Walk a <a>GenericPackageDescription</a> and apply <tt>f</tt> to all
--   nested <tt>build-depends</tt> fields.
transformAllBuildDependsN :: ([Dependency] -> [Dependency]) -> GenericPackageDescription -> GenericPackageDescription

-- | Simplify a configuration condition using the OS and arch names.
--   Returns the names of all the flags occurring in the condition.
simplifyWithSysParams :: OS -> Arch -> CompilerInfo -> Condition ConfVar -> (Condition FlagName, [FlagName])
instance GHC.Internal.Base.Semigroup d => GHC.Internal.Base.Monoid (Distribution.PackageDescription.Configuration.DepTestRslt d)
instance GHC.Internal.Base.Monoid Distribution.PackageDescription.Configuration.PDTagged
instance GHC.Internal.Base.Semigroup Distribution.PackageDescription.Configuration.DepMapUnion
instance GHC.Internal.Base.Semigroup d => GHC.Internal.Base.Semigroup (Distribution.PackageDescription.Configuration.DepTestRslt d)
instance GHC.Internal.Base.Semigroup Distribution.PackageDescription.Configuration.PDTagged
instance GHC.Internal.Show.Show Distribution.PackageDescription.Configuration.PDTagged


-- | This module provides <tt>newtype</tt> wrappers to be used with
--   <a>Distribution.FieldGrammar</a>.
module Distribution.FieldGrammar.Newtypes

-- | <a>alaList</a> and <a>alaList'</a> are simply <a>List</a>, with
--   additional phantom arguments to constrain the resulting type
--   
--   <pre>
--   &gt;&gt;&gt; :t alaList VCat
--   alaList VCat :: [a] -&gt; List VCat (Identity a) a
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; :t alaList' FSep Token
--   alaList' FSep Token :: [String] -&gt; List FSep Token String
--   </pre>
alaList :: sep -> [a] -> List sep (Identity a) a

-- | More general version of <a>alaList</a>.
alaList' :: sep -> (a -> b) -> [a] -> List sep b a

-- | Vertical list with commas. Displayed with <a>vcat</a>
data CommaVCat
CommaVCat :: CommaVCat

-- | Paragraph fill list with commas. Displayed with <a>fsep</a>
data CommaFSep
CommaFSep :: CommaFSep

-- | Vertical list with optional commas. Displayed with <a>vcat</a>.
data VCat
VCat :: VCat

-- | Paragraph fill list with optional commas. Displayed with <a>fsep</a>.
data FSep
FSep :: FSep

-- | Paragraph fill list without commas. Displayed with <a>fsep</a>.
data NoCommaFSep
NoCommaFSep :: NoCommaFSep
class Sep sep
prettySep :: Sep sep => Proxy sep -> [Doc] -> Doc
parseSep :: (Sep sep, CabalParsing m) => Proxy sep -> m a -> m [a]
parseSepNE :: (Sep sep, CabalParsing m) => Proxy sep -> m a -> m (NonEmpty a)

-- | List separated with optional commas. Displayed with <tt>sep</tt>,
--   arguments of type <tt>a</tt> are parsed and pretty-printed as
--   <tt>b</tt>.
data List sep b a

-- | <a>alaSet</a> and <a>alaSet'</a> are simply <a>Set'</a> constructor,
--   with additional phantom arguments to constrain the resulting type
--   
--   <pre>
--   &gt;&gt;&gt; :t alaSet VCat
--   alaSet VCat :: Set a -&gt; Set' VCat (Identity a) a
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; :t alaSet' FSep Token
--   alaSet' FSep Token :: Set String -&gt; Set' FSep Token String
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; unpack' (alaSet' FSep Token) &lt;$&gt; eitherParsec "foo bar foo"
--   Right (fromList ["bar","foo"])
--   </pre>
alaSet :: sep -> Set a -> Set' sep (Identity a) a

-- | More general version of <a>alaSet</a>.
alaSet' :: sep -> (a -> b) -> Set a -> Set' sep b a

-- | Like <a>List</a>, but for <a>Set</a>.
data Set' sep b a

-- | <a>alaNonEmpty</a> and <a>alaNonEmpty'</a> are simply <a>NonEmpty'</a>
--   constructor, with additional phantom arguments to constrain the
--   resulting type
--   
--   <pre>
--   &gt;&gt;&gt; :t alaNonEmpty VCat
--   alaNonEmpty VCat :: NonEmpty a -&gt; NonEmpty' VCat (Identity a) a
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; unpack' (alaNonEmpty' FSep Token) &lt;$&gt; eitherParsec "foo bar foo"
--   Right ("foo" :| ["bar","foo"])
--   </pre>
alaNonEmpty :: sep -> NonEmpty a -> NonEmpty' sep (Identity a) a

-- | More general version of <a>alaNonEmpty</a>.
alaNonEmpty' :: sep -> (a -> b) -> NonEmpty a -> NonEmpty' sep b a

-- | Like <a>List</a>, but for <a>NonEmpty</a>.
data NonEmpty' sep b a

-- | Version range or just version, i.e. <tt>cabal-version</tt> field.
--   
--   There are few things to consider:
--   
--   <ul>
--   <li>Starting with 2.2 the cabal-version field should be the first
--   field in the file and only exact version is accepted. Therefore if we
--   get e.g. <tt>&gt;= 2.2</tt>, we fail. See
--   <a>https://github.com/haskell/cabal/issues/4899</a></li>
--   </ul>
--   
--   We have this newtype, as writing Parsec and Pretty instances for
--   CabalSpecVersion would cause cycle in modules: Version -&gt;
--   CabalSpecVersion -&gt; Parsec -&gt; ...
newtype SpecVersion
SpecVersion :: CabalSpecVersion -> SpecVersion
[getSpecVersion] :: SpecVersion -> CabalSpecVersion

-- | Version range or just version
newtype TestedWith
TestedWith :: (CompilerFlavor, VersionRange) -> TestedWith
[getTestedWith] :: TestedWith -> (CompilerFlavor, VersionRange)

-- | SPDX License expression or legacy license
newtype SpecLicense
SpecLicense :: Either License License -> SpecLicense
[getSpecLicense] :: SpecLicense -> Either License License

-- | Haskell string or <tt>[^ ,]+</tt>
newtype Token
Token :: String -> Token
[getToken] :: Token -> String

-- | Haskell string or <tt>[^ ]+</tt>
newtype Token'
Token' :: String -> Token'
[getToken'] :: Token' -> String

-- | Either <tt>"quoted"</tt> or <tt>un-quoted</tt>.
newtype MQuoted a
MQuoted :: a -> MQuoted a
[getMQuoted] :: MQuoted a -> a

-- | Filepath are parsed as <a>Token</a>.
newtype FilePathNT
FilePathNT :: String -> FilePathNT
[getFilePathNT] :: FilePathNT -> String
instance GHC.Classes.Eq Distribution.FieldGrammar.Newtypes.SpecLicense
instance GHC.Classes.Eq Distribution.FieldGrammar.Newtypes.SpecVersion
instance Distribution.Compat.Newtype.Newtype Distribution.CabalSpecVersion.CabalSpecVersion Distribution.FieldGrammar.Newtypes.SpecVersion
instance Distribution.Compat.Newtype.Newtype (GHC.Internal.Data.Either.Either Distribution.SPDX.License.License Distribution.License.License) Distribution.FieldGrammar.Newtypes.SpecLicense
instance Distribution.Compat.Newtype.Newtype GHC.Internal.Base.String Distribution.FieldGrammar.Newtypes.FilePathNT
instance Distribution.Compat.Newtype.Newtype [a] (Distribution.FieldGrammar.Newtypes.List sep wrapper a)
instance Distribution.Compat.Newtype.Newtype GHC.Internal.Base.String Distribution.FieldGrammar.Newtypes.Token
instance Distribution.Compat.Newtype.Newtype GHC.Internal.Base.String Distribution.FieldGrammar.Newtypes.Token'
instance Distribution.Compat.Newtype.Newtype (GHC.Internal.Base.NonEmpty a) (Distribution.FieldGrammar.Newtypes.NonEmpty' sep wrapper a)
instance Distribution.Compat.Newtype.Newtype (Data.Set.Internal.Set a) (Distribution.FieldGrammar.Newtypes.Set' sep wrapper a)
instance Distribution.Compat.Newtype.Newtype (Distribution.Compiler.CompilerFlavor, Distribution.Types.VersionRange.Internal.VersionRange) Distribution.FieldGrammar.Newtypes.TestedWith
instance Distribution.Compat.Newtype.Newtype a (Distribution.FieldGrammar.Newtypes.MQuoted a)
instance Distribution.Parsec.Parsec Distribution.FieldGrammar.Newtypes.FilePathNT
instance (Distribution.Compat.Newtype.Newtype a b, Distribution.FieldGrammar.Newtypes.Sep sep, Distribution.Parsec.Parsec b) => Distribution.Parsec.Parsec (Distribution.FieldGrammar.Newtypes.List sep b a)
instance Distribution.Parsec.Parsec a => Distribution.Parsec.Parsec (Distribution.FieldGrammar.Newtypes.MQuoted a)
instance (Distribution.Compat.Newtype.Newtype a b, Distribution.FieldGrammar.Newtypes.Sep sep, Distribution.Parsec.Parsec b) => Distribution.Parsec.Parsec (Distribution.FieldGrammar.Newtypes.NonEmpty' sep b a)
instance (Distribution.Compat.Newtype.Newtype a b, GHC.Classes.Ord a, Distribution.FieldGrammar.Newtypes.Sep sep, Distribution.Parsec.Parsec b) => Distribution.Parsec.Parsec (Distribution.FieldGrammar.Newtypes.Set' sep b a)
instance Distribution.Parsec.Parsec Distribution.FieldGrammar.Newtypes.SpecLicense
instance Distribution.Parsec.Parsec Distribution.FieldGrammar.Newtypes.SpecVersion
instance Distribution.Parsec.Parsec Distribution.FieldGrammar.Newtypes.TestedWith
instance Distribution.Parsec.Parsec Distribution.FieldGrammar.Newtypes.Token
instance Distribution.Parsec.Parsec Distribution.FieldGrammar.Newtypes.Token'
instance Distribution.Pretty.Pretty Distribution.FieldGrammar.Newtypes.FilePathNT
instance (Distribution.Compat.Newtype.Newtype a b, Distribution.FieldGrammar.Newtypes.Sep sep, Distribution.Pretty.Pretty b) => Distribution.Pretty.Pretty (Distribution.FieldGrammar.Newtypes.List sep b a)
instance Distribution.Pretty.Pretty a => Distribution.Pretty.Pretty (Distribution.FieldGrammar.Newtypes.MQuoted a)
instance (Distribution.Compat.Newtype.Newtype a b, Distribution.FieldGrammar.Newtypes.Sep sep, Distribution.Pretty.Pretty b) => Distribution.Pretty.Pretty (Distribution.FieldGrammar.Newtypes.NonEmpty' sep b a)
instance (Distribution.Compat.Newtype.Newtype a b, Distribution.FieldGrammar.Newtypes.Sep sep, Distribution.Pretty.Pretty b) => Distribution.Pretty.Pretty (Distribution.FieldGrammar.Newtypes.Set' sep b a)
instance Distribution.Pretty.Pretty Distribution.FieldGrammar.Newtypes.SpecLicense
instance Distribution.Pretty.Pretty Distribution.FieldGrammar.Newtypes.SpecVersion
instance Distribution.Pretty.Pretty Distribution.FieldGrammar.Newtypes.TestedWith
instance Distribution.Pretty.Pretty Distribution.FieldGrammar.Newtypes.Token
instance Distribution.Pretty.Pretty Distribution.FieldGrammar.Newtypes.Token'
instance Distribution.FieldGrammar.Newtypes.Sep Distribution.FieldGrammar.Newtypes.CommaFSep
instance Distribution.FieldGrammar.Newtypes.Sep Distribution.FieldGrammar.Newtypes.CommaVCat
instance Distribution.FieldGrammar.Newtypes.Sep Distribution.FieldGrammar.Newtypes.FSep
instance Distribution.FieldGrammar.Newtypes.Sep Distribution.FieldGrammar.Newtypes.NoCommaFSep
instance Distribution.FieldGrammar.Newtypes.Sep Distribution.FieldGrammar.Newtypes.VCat
instance GHC.Internal.Show.Show Distribution.FieldGrammar.Newtypes.SpecLicense
instance GHC.Internal.Show.Show Distribution.FieldGrammar.Newtypes.SpecVersion

module Distribution.FieldGrammar.Class

-- | <a>FieldGrammar</a> is parametrised by
--   
--   <ul>
--   <li><tt>s</tt> which is a structure we are parsing. We need this to
--   provide prettyprinter functionality</li>
--   <li><tt>a</tt> type of the field.</li>
--   </ul>
--   
--   <i>Note:</i> We'd like to have <tt>forall s. Applicative (f s)</tt>
--   context.
class (c SpecVersion, c TestedWith, c SpecLicense, c Token, c Token', c FilePathNT) => FieldGrammar (c :: Type -> Constraint) (g :: Type -> Type -> Type) | g -> c

-- | Unfocus, zoom out, <i>blur</i> <a>FieldGrammar</a>.
blurFieldGrammar :: FieldGrammar c g => ALens' a b -> g b d -> g a d

-- | Field which should be defined, exactly once.
uniqueFieldAla :: (FieldGrammar c g, c b, Newtype a b) => FieldName -> (a -> b) -> ALens' s a -> g s a

-- | Boolean field with a default value.
booleanFieldDef :: FieldGrammar c g => FieldName -> ALens' s Bool -> Bool -> g s Bool

-- | Optional field.
optionalFieldAla :: (FieldGrammar c g, c b, Newtype a b) => FieldName -> (a -> b) -> ALens' s (Maybe a) -> g s (Maybe a)

-- | Optional field with default value.
optionalFieldDefAla :: (FieldGrammar c g, c b, Newtype a b, Eq a) => FieldName -> (a -> b) -> ALens' s a -> a -> g s a
freeTextField :: FieldGrammar c g => FieldName -> ALens' s (Maybe String) -> g s (Maybe String)
freeTextFieldDef :: FieldGrammar c g => FieldName -> ALens' s String -> g s String

freeTextFieldDefST :: FieldGrammar c g => FieldName -> ALens' s ShortText -> g s ShortText

-- | Monoidal field.
--   
--   Values are combined with <a>mappend</a>.
--   
--   <i>Note:</i> <a>optionalFieldAla</a> is a <tt>monoidalField</tt> with
--   <tt>Last</tt> monoid.
monoidalFieldAla :: (FieldGrammar c g, c b, Monoid a, Newtype a b) => FieldName -> (a -> b) -> ALens' s a -> g s a

-- | Parser matching all fields with a name starting with a prefix.
prefixedFields :: FieldGrammar c g => FieldName -> ALens' s [(String, String)] -> g s [(String, String)]

-- | Known field, which we don't parse, nor pretty print.
knownField :: FieldGrammar c g => FieldName -> g s ()

-- | Field which is parsed but not pretty printed.
hiddenField :: FieldGrammar c g => g s a -> g s a

-- | Deprecated since
deprecatedSince :: FieldGrammar c g => CabalSpecVersion -> String -> g s a -> g s a

-- | Removed in. If we encounter removed field, parsing fails.
removedIn :: FieldGrammar c g => CabalSpecVersion -> String -> g s a -> g s a

-- | Annotate field with since spec-version.
availableSince :: FieldGrammar c g => CabalSpecVersion -> a -> g s a -> g s a

-- | Annotate field with since spec-version. This is used to recognise, but
--   warn about the field. It is used to process <tt>other-extensions</tt>
--   field.
--   
--   Default implementation is to not warn.
availableSinceWarn :: FieldGrammar c g => CabalSpecVersion -> g s a -> g s a

-- | Field which can be defined at most once.
uniqueField :: forall (c :: Type -> Constraint) g a s. (FieldGrammar c g, c (Identity a)) => FieldName -> ALens' s a -> g s a

-- | Field which can be defined at most once.
optionalField :: forall (c :: Type -> Constraint) g a s. (FieldGrammar c g, c (Identity a)) => FieldName -> ALens' s (Maybe a) -> g s (Maybe a)

-- | Optional field with default value.
optionalFieldDef :: forall (c :: Type -> Constraint) g s a. (FieldGrammar c g, Functor (g s), c (Identity a), Eq a) => FieldName -> ALens' s a -> a -> g s a

-- | Field which can be define multiple times, and the results are
--   <tt>mappend</tt>ed.
monoidalField :: forall (c :: Type -> Constraint) g a s. (FieldGrammar c g, c (Identity a), Monoid a) => FieldName -> ALens' s a -> g s a

-- | Default implementation for <a>freeTextFieldDefST</a>.
defaultFreeTextFieldDefST :: forall g s (c :: Type -> Constraint). (Functor (g s), FieldGrammar c g) => FieldName -> ALens' s ShortText -> g s ShortText

module Distribution.FieldGrammar.Pretty
data PrettyFieldGrammar s a

-- | We can use <a>PrettyFieldGrammar</a> to pp print the <tt>s</tt>.
--   
--   <i>Note:</i> there is not trailing <tt>($+$ text "")</tt>.
prettyFieldGrammar :: CabalSpecVersion -> PrettyFieldGrammar s a -> s -> [PrettyField ()]
instance GHC.Internal.Base.Applicative (Distribution.FieldGrammar.Pretty.PrettyFieldGrammar s)
instance Distribution.FieldGrammar.Class.FieldGrammar Distribution.Pretty.Pretty Distribution.FieldGrammar.Pretty.PrettyFieldGrammar
instance GHC.Internal.Base.Functor (Distribution.FieldGrammar.Pretty.PrettyFieldGrammar s)


-- | This module provides a <tt>FieldGrammarParser</tt>, one way to parse
--   <tt>.cabal</tt> -like files.
--   
--   Fields can be specified multiple times in the .cabal files. The order
--   of such entries is important, but the mutual ordering of different
--   fields is not.Also conditional sections are considered after
--   non-conditional data. The example of this silent-commutation quirk is
--   the fact that
--   
--   <pre>
--   buildable: True
--   if os(linux)
--     buildable: False
--   </pre>
--   
--   and
--   
--   <pre>
--   if os(linux)
--     buildable: False
--   buildable: True
--   </pre>
--   
--   behave the same! This is the limitation of
--   <tt>GeneralPackageDescription</tt> structure.
--   
--   So we transform the list of fields <tt>[<a>Field</a> ann]</tt> into a
--   map of grouped ordinary fields and a list of lists of sections:
--   <tt><a>Fields</a> ann = <a>Map</a> <a>FieldName</a>
--   [<a>NamelessField</a> ann]</tt> and <tt>[[<a>Section</a> ann]]</tt>.
--   
--   We need list of list of sections, because we need to distinguish
--   situations where there are fields in between. For example
--   
--   <pre>
--   if flag(bytestring-lt-0_10_4)
--     build-depends: bytestring &lt; 0.10.4
--   
--   default-language: Haskell2020
--   
--   else
--     build-depends: bytestring &gt;= 0.10.4
--   </pre>
--   
--   is obviously invalid specification.
--   
--   We can parse <a>Fields</a> like we parse <tt>aeson</tt> objects, yet
--   we use slightly higher-level API, so we can process unspecified
--   fields, to report unknown fields and save custom <tt>x-fields</tt>.
module Distribution.FieldGrammar.Parsec
data ParsecFieldGrammar s a
parseFieldGrammar :: CabalSpecVersion -> Fields Position -> ParsecFieldGrammar s a -> ParseResult a
fieldGrammarKnownFieldList :: ParsecFieldGrammar s a -> [FieldName]
type Fields ann = Map FieldName [NamelessField ann]

-- | Single field, without name, but with its annotation.
data NamelessField ann
MkNamelessField :: !ann -> [FieldLine ann] -> NamelessField ann
namelessFieldAnn :: NamelessField ann -> ann

-- | The <a>Section</a> constructor of <a>Field</a>.
data Section ann
MkSection :: !Name ann -> [SectionArg ann] -> [Field ann] -> Section ann
runFieldParser :: Position -> ParsecParser a -> CabalSpecVersion -> [FieldLine Position] -> ParseResult a
runFieldParser' :: [Position] -> ParsecParser a -> CabalSpecVersion -> FieldLineStream -> ParseResult a
fieldLinesToStream :: [FieldLine ann] -> FieldLineStream
instance GHC.Internal.Base.Applicative (Distribution.FieldGrammar.Parsec.ParsecFieldGrammar s)
instance GHC.Classes.Eq ann => GHC.Classes.Eq (Distribution.FieldGrammar.Parsec.NamelessField ann)
instance GHC.Classes.Eq ann => GHC.Classes.Eq (Distribution.FieldGrammar.Parsec.Section ann)
instance Distribution.FieldGrammar.Class.FieldGrammar Distribution.Parsec.Parsec Distribution.FieldGrammar.Parsec.ParsecFieldGrammar
instance GHC.Internal.Base.Functor Distribution.FieldGrammar.Parsec.NamelessField
instance GHC.Internal.Base.Functor (Distribution.FieldGrammar.Parsec.ParsecFieldGrammar s)
instance GHC.Internal.Base.Functor Distribution.FieldGrammar.Parsec.Section
instance GHC.Internal.Show.Show ann => GHC.Internal.Show.Show (Distribution.FieldGrammar.Parsec.NamelessField ann)
instance GHC.Internal.Show.Show ann => GHC.Internal.Show.Show (Distribution.FieldGrammar.Parsec.Section ann)


-- | This module provides a way to specify a grammar of <tt>.cabal</tt>
--   -like files.
module Distribution.FieldGrammar

-- | <a>FieldGrammar</a> is parametrised by
--   
--   <ul>
--   <li><tt>s</tt> which is a structure we are parsing. We need this to
--   provide prettyprinter functionality</li>
--   <li><tt>a</tt> type of the field.</li>
--   </ul>
--   
--   <i>Note:</i> We'd like to have <tt>forall s. Applicative (f s)</tt>
--   context.
class (c SpecVersion, c TestedWith, c SpecLicense, c Token, c Token', c FilePathNT) => FieldGrammar (c :: Type -> Constraint) (g :: Type -> Type -> Type) | g -> c

-- | Unfocus, zoom out, <i>blur</i> <a>FieldGrammar</a>.
blurFieldGrammar :: FieldGrammar c g => ALens' a b -> g b d -> g a d

-- | Field which should be defined, exactly once.
uniqueFieldAla :: (FieldGrammar c g, c b, Newtype a b) => FieldName -> (a -> b) -> ALens' s a -> g s a

-- | Boolean field with a default value.
booleanFieldDef :: FieldGrammar c g => FieldName -> ALens' s Bool -> Bool -> g s Bool

-- | Optional field.
optionalFieldAla :: (FieldGrammar c g, c b, Newtype a b) => FieldName -> (a -> b) -> ALens' s (Maybe a) -> g s (Maybe a)

-- | Optional field with default value.
optionalFieldDefAla :: (FieldGrammar c g, c b, Newtype a b, Eq a) => FieldName -> (a -> b) -> ALens' s a -> a -> g s a
freeTextField :: FieldGrammar c g => FieldName -> ALens' s (Maybe String) -> g s (Maybe String)
freeTextFieldDef :: FieldGrammar c g => FieldName -> ALens' s String -> g s String

freeTextFieldDefST :: FieldGrammar c g => FieldName -> ALens' s ShortText -> g s ShortText

-- | Monoidal field.
--   
--   Values are combined with <a>mappend</a>.
--   
--   <i>Note:</i> <a>optionalFieldAla</a> is a <tt>monoidalField</tt> with
--   <tt>Last</tt> monoid.
monoidalFieldAla :: (FieldGrammar c g, c b, Monoid a, Newtype a b) => FieldName -> (a -> b) -> ALens' s a -> g s a

-- | Parser matching all fields with a name starting with a prefix.
prefixedFields :: FieldGrammar c g => FieldName -> ALens' s [(String, String)] -> g s [(String, String)]

-- | Known field, which we don't parse, nor pretty print.
knownField :: FieldGrammar c g => FieldName -> g s ()

-- | Field which is parsed but not pretty printed.
hiddenField :: FieldGrammar c g => g s a -> g s a

-- | Deprecated since
deprecatedSince :: FieldGrammar c g => CabalSpecVersion -> String -> g s a -> g s a

-- | Removed in. If we encounter removed field, parsing fails.
removedIn :: FieldGrammar c g => CabalSpecVersion -> String -> g s a -> g s a

-- | Annotate field with since spec-version.
availableSince :: FieldGrammar c g => CabalSpecVersion -> a -> g s a -> g s a

-- | Annotate field with since spec-version. This is used to recognise, but
--   warn about the field. It is used to process <tt>other-extensions</tt>
--   field.
--   
--   Default implementation is to not warn.
availableSinceWarn :: FieldGrammar c g => CabalSpecVersion -> g s a -> g s a

-- | Field which can be defined at most once.
uniqueField :: forall (c :: Type -> Constraint) g a s. (FieldGrammar c g, c (Identity a)) => FieldName -> ALens' s a -> g s a

-- | Field which can be defined at most once.
optionalField :: forall (c :: Type -> Constraint) g a s. (FieldGrammar c g, c (Identity a)) => FieldName -> ALens' s (Maybe a) -> g s (Maybe a)

-- | Optional field with default value.
optionalFieldDef :: forall (c :: Type -> Constraint) g s a. (FieldGrammar c g, Functor (g s), c (Identity a), Eq a) => FieldName -> ALens' s a -> a -> g s a

-- | Field which can be define multiple times, and the results are
--   <tt>mappend</tt>ed.
monoidalField :: forall (c :: Type -> Constraint) g a s. (FieldGrammar c g, c (Identity a), Monoid a) => FieldName -> ALens' s a -> g s a
data ParsecFieldGrammar s a
type ParsecFieldGrammar' a = ParsecFieldGrammar a a
parseFieldGrammar :: CabalSpecVersion -> Fields Position -> ParsecFieldGrammar s a -> ParseResult a
fieldGrammarKnownFieldList :: ParsecFieldGrammar s a -> [FieldName]
data PrettyFieldGrammar s a
type PrettyFieldGrammar' a = PrettyFieldGrammar a a

-- | We can use <a>PrettyFieldGrammar</a> to pp print the <tt>s</tt>.
--   
--   <i>Note:</i> there is not trailing <tt>($+$ text "")</tt>.
prettyFieldGrammar :: CabalSpecVersion -> PrettyFieldGrammar s a -> s -> [PrettyField ()]

-- | Reverse function application which binds tighter than <a>&lt;$&gt;</a>
--   and <a>&lt;*&gt;</a>. Useful for refining grammar specification.
--   
--   <pre>
--   &lt;*&gt; <a>monoidalFieldAla</a> "extensions"           (alaList' FSep MQuoted)       oldExtensions
--       ^^^ <a>deprecatedSince</a> [1,12] "Please use 'default-extensions' or 'other-extensions' fields."
--   </pre>
(^^^) :: a -> (a -> b) -> b
infixl 5 ^^^

-- | The <a>Section</a> constructor of <a>Field</a>.
data Section ann
MkSection :: !Name ann -> [SectionArg ann] -> [Field ann] -> Section ann
type Fields ann = Map FieldName [NamelessField ann]

-- | Partition field list into field map and groups of sections.
partitionFields :: [Field ann] -> (Fields ann, [[Section ann]])

-- | Take all fields from the front.
takeFields :: [Field ann] -> (Fields ann, [Field ann])
runFieldParser :: Position -> ParsecParser a -> CabalSpecVersion -> [FieldLine Position] -> ParseResult a
runFieldParser' :: [Position] -> ParsecParser a -> CabalSpecVersion -> FieldLineStream -> ParseResult a

-- | Default implementation for <a>freeTextFieldDefST</a>.
defaultFreeTextFieldDefST :: forall g s (c :: Type -> Constraint). (Functor (g s), FieldGrammar c g) => FieldName -> ALens' s ShortText -> g s ShortText


-- | <a>GenericPackageDescription</a> Field descriptions
module Distribution.PackageDescription.FieldGrammar
packageDescriptionFieldGrammar :: forall (c :: Type -> Constraint) g. (FieldGrammar c g, Applicative (g PackageDescription), Applicative (g PackageIdentifier), c (Identity BuildType), c (Identity PackageName), c (Identity Version), c (List FSep FilePathNT String), c (List FSep CompatFilePath String), c (List FSep (Identity (SymbolicPath PackageDir LicenseFile)) (SymbolicPath PackageDir LicenseFile)), c (List FSep TestedWith (CompilerFlavor, VersionRange)), c (List VCat FilePathNT String), c FilePathNT, c CompatLicenseFile, c CompatFilePath, c SpecLicense, c SpecVersion) => g PackageDescription PackageDescription

-- | Compat FilePath accepts empty file path, but issues a warning.
--   
--   There are simply too many (~1200) package definition files
--   
--   <pre>
--   license-file: ""
--   </pre>
--   
--   and
--   
--   <pre>
--   data-dir: ""
--   </pre>
--   
--   across Hackage to outrule them completely. I suspect some of them are
--   generated (e.g. formatted) by machine.
newtype CompatFilePath
CompatFilePath :: FilePath -> CompatFilePath
[getCompatFilePath] :: CompatFilePath -> FilePath
newtype CompatLicenseFile
CompatLicenseFile :: [SymbolicPath PackageDir LicenseFile] -> CompatLicenseFile
[getCompatLicenseFile] :: CompatLicenseFile -> [SymbolicPath PackageDir LicenseFile]
libraryFieldGrammar :: forall (c :: Type -> Constraint) g. (FieldGrammar c g, Applicative (g Library), Applicative (g BuildInfo), c (Identity LibraryVisibility), c (List CommaFSep (Identity ExeDependency) ExeDependency), c (List CommaFSep (Identity LegacyExeDependency) LegacyExeDependency), c (List CommaFSep (Identity PkgconfigDependency) PkgconfigDependency), c (List CommaVCat (Identity Dependency) Dependency), c (List CommaVCat (Identity Mixin) Mixin), c (List CommaVCat (Identity ModuleReexport) ModuleReexport), c (List FSep (MQuoted Extension) Extension), c (List FSep (MQuoted Language) Language), c (List FSep FilePathNT String), c (List FSep Token String), c (List NoCommaFSep Token' String), c (List VCat (MQuoted ModuleName) ModuleName), c (List VCat FilePathNT String), c (List FSep (Identity (SymbolicPath PackageDir SourceDir)) (SymbolicPath PackageDir SourceDir)), c (List VCat Token String), c (MQuoted Language)) => LibraryName -> g Library Library
foreignLibFieldGrammar :: forall (c :: Type -> Constraint) g. (FieldGrammar c g, Applicative (g ForeignLib), Applicative (g BuildInfo), c (Identity ForeignLibType), c (Identity LibVersionInfo), c (Identity Version), c (List CommaFSep (Identity ExeDependency) ExeDependency), c (List CommaFSep (Identity LegacyExeDependency) LegacyExeDependency), c (List CommaFSep (Identity PkgconfigDependency) PkgconfigDependency), c (List CommaVCat (Identity Dependency) Dependency), c (List CommaVCat (Identity Mixin) Mixin), c (List FSep (Identity ForeignLibOption) ForeignLibOption), c (List FSep (MQuoted Extension) Extension), c (List FSep (MQuoted Language) Language), c (List FSep FilePathNT String), c (List FSep Token String), c (List FSep (Identity (SymbolicPath PackageDir SourceDir)) (SymbolicPath PackageDir SourceDir)), c (List NoCommaFSep Token' String), c (List VCat (MQuoted ModuleName) ModuleName), c (List VCat FilePathNT String), c (List VCat Token String), c (MQuoted Language)) => UnqualComponentName -> g ForeignLib ForeignLib
executableFieldGrammar :: forall (c :: Type -> Constraint) g. (FieldGrammar c g, Applicative (g Executable), Applicative (g BuildInfo), c (Identity ExecutableScope), c (List CommaFSep (Identity ExeDependency) ExeDependency), c (List CommaFSep (Identity LegacyExeDependency) LegacyExeDependency), c (List CommaFSep (Identity PkgconfigDependency) PkgconfigDependency), c (List CommaVCat (Identity Dependency) Dependency), c (List CommaVCat (Identity Mixin) Mixin), c (List FSep (MQuoted Extension) Extension), c (List FSep (MQuoted Language) Language), c (List FSep FilePathNT String), c (List FSep Token String), c (List FSep (Identity (SymbolicPath PackageDir SourceDir)) (SymbolicPath PackageDir SourceDir)), c (List NoCommaFSep Token' String), c (List VCat (MQuoted ModuleName) ModuleName), c (List VCat FilePathNT String), c (List VCat Token String), c (MQuoted Language)) => UnqualComponentName -> g Executable Executable

-- | An intermediate type just used for parsing the test-suite stanza.
--   After validation it is converted into the proper <a>TestSuite</a>
--   type.
data TestSuiteStanza
TestSuiteStanza :: Maybe TestType -> Maybe FilePath -> Maybe ModuleName -> BuildInfo -> [String] -> TestSuiteStanza
[_testStanzaTestType] :: TestSuiteStanza -> Maybe TestType
[_testStanzaMainIs] :: TestSuiteStanza -> Maybe FilePath
[_testStanzaTestModule] :: TestSuiteStanza -> Maybe ModuleName
[_testStanzaBuildInfo] :: TestSuiteStanza -> BuildInfo
[_testStanzaCodeGenerators] :: TestSuiteStanza -> [String]
testSuiteFieldGrammar :: forall (c :: Type -> Constraint) g. (FieldGrammar c g, Applicative (g TestSuiteStanza), Applicative (g BuildInfo), c (Identity ModuleName), c (Identity TestType), c (List CommaFSep (Identity ExeDependency) ExeDependency), c (List CommaFSep (Identity LegacyExeDependency) LegacyExeDependency), c (List CommaFSep (Identity PkgconfigDependency) PkgconfigDependency), c (List CommaFSep Token String), c (List CommaVCat (Identity Dependency) Dependency), c (List CommaVCat (Identity Mixin) Mixin), c (List FSep (MQuoted Extension) Extension), c (List FSep (MQuoted Language) Language), c (List FSep FilePathNT String), c (List FSep Token String), c (List NoCommaFSep Token' String), c (List VCat (MQuoted ModuleName) ModuleName), c (List VCat FilePathNT String), c (List FSep (Identity (SymbolicPath PackageDir SourceDir)) (SymbolicPath PackageDir SourceDir)), c (List VCat Token String), c (MQuoted Language)) => g TestSuiteStanza TestSuiteStanza
validateTestSuite :: CabalSpecVersion -> Position -> TestSuiteStanza -> ParseResult TestSuite
unvalidateTestSuite :: TestSuite -> TestSuiteStanza
testStanzaTestType :: Lens' TestSuiteStanza (Maybe TestType)
testStanzaMainIs :: Lens' TestSuiteStanza (Maybe FilePath)
testStanzaTestModule :: Lens' TestSuiteStanza (Maybe ModuleName)
testStanzaBuildInfo :: Lens' TestSuiteStanza BuildInfo

-- | An intermediate type just used for parsing the benchmark stanza. After
--   validation it is converted into the proper <a>Benchmark</a> type.
data BenchmarkStanza
BenchmarkStanza :: Maybe BenchmarkType -> Maybe FilePath -> Maybe ModuleName -> BuildInfo -> BenchmarkStanza
[_benchmarkStanzaBenchmarkType] :: BenchmarkStanza -> Maybe BenchmarkType
[_benchmarkStanzaMainIs] :: BenchmarkStanza -> Maybe FilePath
[_benchmarkStanzaBenchmarkModule] :: BenchmarkStanza -> Maybe ModuleName
[_benchmarkStanzaBuildInfo] :: BenchmarkStanza -> BuildInfo
benchmarkFieldGrammar :: forall (c :: Type -> Constraint) g. (FieldGrammar c g, Applicative (g BenchmarkStanza), Applicative (g BuildInfo), c (Identity BenchmarkType), c (Identity ModuleName), c (List CommaFSep (Identity ExeDependency) ExeDependency), c (List CommaFSep (Identity LegacyExeDependency) LegacyExeDependency), c (List CommaFSep (Identity PkgconfigDependency) PkgconfigDependency), c (List CommaVCat (Identity Dependency) Dependency), c (List CommaVCat (Identity Mixin) Mixin), c (List FSep (MQuoted Extension) Extension), c (List FSep (MQuoted Language) Language), c (List FSep FilePathNT String), c (List FSep Token String), c (List NoCommaFSep Token' String), c (List VCat (MQuoted ModuleName) ModuleName), c (List VCat FilePathNT String), c (List FSep (Identity (SymbolicPath PackageDir SourceDir)) (SymbolicPath PackageDir SourceDir)), c (List VCat Token String), c (MQuoted Language)) => g BenchmarkStanza BenchmarkStanza
validateBenchmark :: CabalSpecVersion -> Position -> BenchmarkStanza -> ParseResult Benchmark
unvalidateBenchmark :: Benchmark -> BenchmarkStanza
formatDependencyList :: [Dependency] -> List CommaVCat (Identity Dependency) Dependency
formatExposedModules :: [ModuleName] -> List VCat (MQuoted ModuleName) ModuleName
formatExtraSourceFiles :: [FilePath] -> List VCat FilePathNT FilePath
formatHsSourceDirs :: [SymbolicPath PackageDir SourceDir] -> List FSep (Identity (SymbolicPath PackageDir SourceDir)) (SymbolicPath PackageDir SourceDir)
formatMixinList :: [Mixin] -> List CommaVCat (Identity Mixin) Mixin
formatOtherExtensions :: [Extension] -> List FSep (MQuoted Extension) Extension
formatOtherModules :: [ModuleName] -> List VCat (MQuoted ModuleName) ModuleName
benchmarkStanzaBenchmarkType :: Lens' BenchmarkStanza (Maybe BenchmarkType)
benchmarkStanzaMainIs :: Lens' BenchmarkStanza (Maybe FilePath)
benchmarkStanzaBenchmarkModule :: Lens' BenchmarkStanza (Maybe ModuleName)
benchmarkStanzaBuildInfo :: Lens' BenchmarkStanza BuildInfo
flagFieldGrammar :: forall (c :: Type -> Constraint) g. (FieldGrammar c g, Applicative (g PackageFlag)) => FlagName -> g PackageFlag PackageFlag
sourceRepoFieldGrammar :: forall (c :: Type -> Constraint) g. (FieldGrammar c g, Applicative (g SourceRepo), c (Identity RepoType), c Token, c FilePathNT) => RepoKind -> g SourceRepo SourceRepo
setupBInfoFieldGrammar :: forall (c :: Type -> Constraint) g. (FieldGrammar c g, Functor (g SetupBuildInfo), c (List CommaVCat (Identity Dependency) Dependency)) => Bool -> g SetupBuildInfo SetupBuildInfo
buildInfoFieldGrammar :: forall (c :: Type -> Constraint) g. (FieldGrammar c g, Applicative (g BuildInfo), c (List CommaFSep (Identity ExeDependency) ExeDependency), c (List CommaFSep (Identity LegacyExeDependency) LegacyExeDependency), c (List CommaFSep (Identity PkgconfigDependency) PkgconfigDependency), c (List CommaVCat (Identity Dependency) Dependency), c (List CommaVCat (Identity Mixin) Mixin), c (List FSep (MQuoted Extension) Extension), c (List FSep (MQuoted Language) Language), c (List FSep FilePathNT String), c (List FSep Token String), c (List NoCommaFSep Token' String), c (List VCat (MQuoted ModuleName) ModuleName), c (List VCat FilePathNT String), c (List FSep (Identity (SymbolicPath PackageDir SourceDir)) (SymbolicPath PackageDir SourceDir)), c (List VCat Token String), c (MQuoted Language)) => g BuildInfo BuildInfo
instance Distribution.Types.BuildInfo.Lens.HasBuildInfo Distribution.PackageDescription.FieldGrammar.BenchmarkStanza
instance Distribution.Types.BuildInfo.Lens.HasBuildInfo Distribution.PackageDescription.FieldGrammar.TestSuiteStanza
instance Distribution.Compat.Newtype.Newtype GHC.Internal.Base.String Distribution.PackageDescription.FieldGrammar.CompatFilePath
instance Distribution.Compat.Newtype.Newtype [Distribution.Utils.Path.SymbolicPath Distribution.Utils.Path.PackageDir Distribution.Utils.Path.LicenseFile] Distribution.PackageDescription.FieldGrammar.CompatLicenseFile
instance Distribution.Parsec.Parsec Distribution.PackageDescription.FieldGrammar.CompatFilePath
instance Distribution.Parsec.Parsec Distribution.PackageDescription.FieldGrammar.CompatLicenseFile
instance Distribution.Pretty.Pretty Distribution.PackageDescription.FieldGrammar.CompatFilePath
instance Distribution.Pretty.Pretty Distribution.PackageDescription.FieldGrammar.CompatLicenseFile


-- | Pretty printing for cabal files
module Distribution.PackageDescription.PrettyPrint

-- | Writes a .cabal file from a generic package description
writeGenericPackageDescription :: FilePath -> GenericPackageDescription -> IO ()

-- | Writes a generic package description to a string
showGenericPackageDescription :: GenericPackageDescription -> String

-- | Convert a generic package description to <a>PrettyField</a>s.
ppGenericPackageDescription :: CabalSpecVersion -> GenericPackageDescription -> [PrettyField ()]

writePackageDescription :: FilePath -> PackageDescription -> IO ()

showPackageDescription :: PackageDescription -> String

writeHookedBuildInfo :: FilePath -> HookedBuildInfo -> IO ()

showHookedBuildInfo :: HookedBuildInfo -> String


-- | This defined parsers and partial pretty printers for the
--   <tt>.cabal</tt> format.
module Distribution.PackageDescription.Parsec

-- | Parses the given file into a <a>GenericPackageDescription</a>.
--   
--   In Cabal 1.2 the syntax for package descriptions was changed to a
--   format with sections and possibly indented property descriptions.
parseGenericPackageDescription :: ByteString -> ParseResult GenericPackageDescription

-- | <a>Maybe</a> variant of <a>parseGenericPackageDescription</a>
parseGenericPackageDescriptionMaybe :: ByteString -> Maybe GenericPackageDescription

-- | A monad with failure and accumulating errors and warnings.
data ParseResult a

-- | Destruct a <a>ParseResult</a> into the emitted warnings and either a
--   successful value or list of errors and possibly recovered a
--   spec-version declaration.
runParseResult :: ParseResult a -> ([PWarning], Either (Maybe Version, NonEmpty PError) a)

-- | Quickly scan new-style spec-version
--   
--   A new-style spec-version declaration begins the .cabal file and follow
--   the following case-insensitive grammar (expressed in RFC5234 ABNF):
--   
--   <pre>
--   newstyle-spec-version-decl = "cabal-version" *WS ":" *WS newstyle-pec-version *WS
--   
--   spec-version               = NUM "." NUM [ "." NUM ]
--   
--   NUM    = DIGIT0 / DIGITP 1*DIGIT0
--   DIGIT0 = %x30-39
--   DIGITP = %x31-39
--   WS = %20
--   </pre>
scanSpecVersion :: ByteString -> Maybe Version
parseHookedBuildInfo :: ByteString -> ParseResult HookedBuildInfo
instance GHC.Classes.Eq Distribution.PackageDescription.Parsec.Syntax
instance Distribution.PackageDescription.Parsec.FromBuildInfo Distribution.PackageDescription.FieldGrammar.BenchmarkStanza
instance Distribution.PackageDescription.Parsec.FromBuildInfo Distribution.Types.BuildInfo.BuildInfo
instance Distribution.PackageDescription.Parsec.FromBuildInfo Distribution.Types.Executable.Executable
instance Distribution.PackageDescription.Parsec.FromBuildInfo Distribution.Types.ForeignLib.ForeignLib
instance Distribution.PackageDescription.Parsec.FromBuildInfo Distribution.PackageDescription.FieldGrammar.TestSuiteStanza
instance GHC.Internal.Show.Show Distribution.PackageDescription.Parsec.Syntax

module Distribution.FieldGrammar.FieldDescrs

-- | A collection of field parsers and pretty-printers.
data FieldDescrs s a

-- | Lookup a field value pretty-printer.
fieldDescrPretty :: FieldDescrs s a -> FieldName -> Maybe (s -> Doc)

-- | Lookup a field value parser.
fieldDescrParse :: CabalParsing m => FieldDescrs s a -> FieldName -> Maybe (s -> m s)
fieldDescrsToList :: CabalParsing m => FieldDescrs s a -> [(FieldName, s -> Doc, s -> m s)]
instance GHC.Internal.Base.Applicative (Distribution.FieldGrammar.FieldDescrs.FieldDescrs s)
instance Distribution.FieldGrammar.Class.FieldGrammar Distribution.FieldGrammar.FieldDescrs.ParsecPretty Distribution.FieldGrammar.FieldDescrs.FieldDescrs
instance GHC.Internal.Base.Functor (Distribution.FieldGrammar.FieldDescrs.FieldDescrs s)
instance (Distribution.Parsec.Parsec a, Distribution.Pretty.Pretty a) => Distribution.FieldGrammar.FieldDescrs.ParsecPretty a

module Distribution.Types.InstalledPackageInfo.FieldGrammar
ipiFieldGrammar :: forall (c :: Type -> Constraint) g. (FieldGrammar c g, Applicative (g InstalledPackageInfo), Applicative (g Basic), c (Identity AbiHash), c (Identity LibraryVisibility), c (Identity PackageName), c (Identity UnitId), c (Identity UnqualComponentName), c (List FSep (Identity AbiDependency) AbiDependency), c (List FSep (Identity UnitId) UnitId), c (List FSep (MQuoted ModuleName) ModuleName), c (List FSep FilePathNT String), c (List FSep Token String), c (MQuoted MungedPackageName), c (MQuoted Version), c CompatPackageKey, c ExposedModules, c InstWith, c SpecLicenseLenient) => g InstalledPackageInfo InstalledPackageInfo
instance Distribution.Compat.Newtype.Newtype (GHC.Internal.Data.Either.Either Distribution.SPDX.License.License Distribution.License.License) Distribution.Types.InstalledPackageInfo.FieldGrammar.SpecLicenseLenient
instance Distribution.Compat.Newtype.Newtype GHC.Internal.Base.String Distribution.Types.InstalledPackageInfo.FieldGrammar.CompatPackageKey
instance Distribution.Compat.Newtype.Newtype [Distribution.Types.ExposedModule.ExposedModule] Distribution.Types.InstalledPackageInfo.FieldGrammar.ExposedModules
instance Distribution.Compat.Newtype.Newtype [(Distribution.ModuleName.ModuleName, Distribution.Backpack.OpenModule)] Distribution.Types.InstalledPackageInfo.FieldGrammar.InstWith
instance Distribution.Parsec.Parsec Distribution.Types.InstalledPackageInfo.FieldGrammar.CompatPackageKey
instance Distribution.Parsec.Parsec Distribution.Types.InstalledPackageInfo.FieldGrammar.ExposedModules
instance Distribution.Parsec.Parsec Distribution.Types.InstalledPackageInfo.FieldGrammar.InstWith
instance Distribution.Parsec.Parsec Distribution.Types.InstalledPackageInfo.FieldGrammar.SpecLicenseLenient
instance Distribution.Pretty.Pretty Distribution.Types.InstalledPackageInfo.FieldGrammar.CompatPackageKey
instance Distribution.Pretty.Pretty Distribution.Types.InstalledPackageInfo.FieldGrammar.ExposedModules
instance Distribution.Pretty.Pretty Distribution.Types.InstalledPackageInfo.FieldGrammar.InstWith
instance Distribution.Pretty.Pretty Distribution.Types.InstalledPackageInfo.FieldGrammar.SpecLicenseLenient


-- | This is the information about an <i>installed</i> package that is
--   communicated to the <tt>ghc-pkg</tt> program in order to register a
--   package. <tt>ghc-pkg</tt> now consumes this package format (as of
--   version 6.4). This is specific to GHC at the moment.
--   
--   The <tt>.cabal</tt> file format is for describing a package that is
--   not yet installed. It has a lot of flexibility, like conditionals and
--   dependency ranges. As such, that format is not at all suitable for
--   describing a package that has already been built and installed. By the
--   time we get to that stage, we have resolved all conditionals and
--   resolved dependency version constraints to exact versions of dependent
--   packages. So, this module defines the <a>InstalledPackageInfo</a> data
--   structure that contains all the info we keep about an installed
--   package. There is a parser and pretty printer. The textual format is
--   rather simpler than the <tt>.cabal</tt> format: there are no sections,
--   for example.
module Distribution.InstalledPackageInfo
data InstalledPackageInfo
InstalledPackageInfo :: PackageId -> LibraryName -> ComponentId -> LibraryVisibility -> UnitId -> [(ModuleName, OpenModule)] -> String -> Either License License -> !ShortText -> !ShortText -> !ShortText -> !ShortText -> !ShortText -> !ShortText -> !ShortText -> !ShortText -> !ShortText -> AbiHash -> Bool -> Bool -> [ExposedModule] -> [ModuleName] -> Bool -> [FilePath] -> [FilePath] -> [FilePath] -> [FilePath] -> FilePath -> [String] -> [String] -> [String] -> [String] -> [FilePath] -> [String] -> [UnitId] -> [AbiDependency] -> [String] -> [String] -> [String] -> [FilePath] -> [String] -> [FilePath] -> [FilePath] -> Maybe FilePath -> InstalledPackageInfo
[sourcePackageId] :: InstalledPackageInfo -> PackageId
[sourceLibName] :: InstalledPackageInfo -> LibraryName
[installedComponentId_] :: InstalledPackageInfo -> ComponentId
[libVisibility] :: InstalledPackageInfo -> LibraryVisibility
[installedUnitId] :: InstalledPackageInfo -> UnitId
[instantiatedWith] :: InstalledPackageInfo -> [(ModuleName, OpenModule)]
[compatPackageKey] :: InstalledPackageInfo -> String
[license] :: InstalledPackageInfo -> Either License License
[copyright] :: InstalledPackageInfo -> !ShortText
[maintainer] :: InstalledPackageInfo -> !ShortText
[author] :: InstalledPackageInfo -> !ShortText
[stability] :: InstalledPackageInfo -> !ShortText
[homepage] :: InstalledPackageInfo -> !ShortText
[pkgUrl] :: InstalledPackageInfo -> !ShortText
[synopsis] :: InstalledPackageInfo -> !ShortText
[description] :: InstalledPackageInfo -> !ShortText
[category] :: InstalledPackageInfo -> !ShortText
[abiHash] :: InstalledPackageInfo -> AbiHash
[indefinite] :: InstalledPackageInfo -> Bool
[exposed] :: InstalledPackageInfo -> Bool
[exposedModules] :: InstalledPackageInfo -> [ExposedModule]
[hiddenModules] :: InstalledPackageInfo -> [ModuleName]
[trusted] :: InstalledPackageInfo -> Bool
[importDirs] :: InstalledPackageInfo -> [FilePath]
[libraryDirs] :: InstalledPackageInfo -> [FilePath]
[libraryDirsStatic] :: InstalledPackageInfo -> [FilePath]

-- | overrides <a>libraryDirs</a>
[libraryDynDirs] :: InstalledPackageInfo -> [FilePath]
[dataDir] :: InstalledPackageInfo -> FilePath
[hsLibraries] :: InstalledPackageInfo -> [String]
[extraLibraries] :: InstalledPackageInfo -> [String]
[extraLibrariesStatic] :: InstalledPackageInfo -> [String]
[extraGHCiLibraries] :: InstalledPackageInfo -> [String]
[includeDirs] :: InstalledPackageInfo -> [FilePath]
[includes] :: InstalledPackageInfo -> [String]
[depends] :: InstalledPackageInfo -> [UnitId]
[abiDepends] :: InstalledPackageInfo -> [AbiDependency]
[ccOptions] :: InstalledPackageInfo -> [String]
[cxxOptions] :: InstalledPackageInfo -> [String]
[ldOptions] :: InstalledPackageInfo -> [String]
[frameworkDirs] :: InstalledPackageInfo -> [FilePath]
[frameworks] :: InstalledPackageInfo -> [String]
[haddockInterfaces] :: InstalledPackageInfo -> [FilePath]
[haddockHTMLs] :: InstalledPackageInfo -> [FilePath]
[pkgRoot] :: InstalledPackageInfo -> Maybe FilePath
installedComponentId :: InstalledPackageInfo -> ComponentId

-- | Get the indefinite unit identity representing this package. This IS
--   NOT guaranteed to give you a substitution; for instantiated packages
--   you will get <tt>DefiniteUnitId (installedUnitId ipi)</tt>. For
--   indefinite libraries, however, you will correctly get an
--   <tt>OpenUnitId</tt> with the appropriate <a>OpenModuleSubst</a>.
installedOpenUnitId :: InstalledPackageInfo -> OpenUnitId
sourceComponentName :: InstalledPackageInfo -> ComponentName

-- | Returns the set of module names which need to be filled for an
--   indefinite package, or the empty set if the package is definite.
requiredSignatures :: InstalledPackageInfo -> Set ModuleName
data ExposedModule
ExposedModule :: ModuleName -> Maybe OpenModule -> ExposedModule
[exposedName] :: ExposedModule -> ModuleName
[exposedReexport] :: ExposedModule -> Maybe OpenModule

-- | An ABI dependency is a dependency on a library which also records the
--   ABI hash (<tt>abiHash</tt>) of the library it depends on.
--   
--   The primary utility of this is to enable an extra sanity when GHC
--   loads libraries: it can check if the dependency has a matching ABI and
--   if not, refuse to load this library. This information is critical if
--   we are shadowing libraries; differences in the ABI hash let us know
--   what packages get shadowed by the new version of a package.
data AbiDependency
AbiDependency :: UnitId -> AbiHash -> AbiDependency
[depUnitId] :: AbiDependency -> UnitId
[depAbiHash] :: AbiDependency -> AbiHash
emptyInstalledPackageInfo :: InstalledPackageInfo

-- | Return either errors, or IPI with list of warnings
parseInstalledPackageInfo :: ByteString -> Either (NonEmpty String) ([String], InstalledPackageInfo)

-- | Pretty print <a>InstalledPackageInfo</a>.
--   
--   <tt>pkgRoot</tt> isn't printed, as ghc-pkg prints it manually (as
--   GHC-8.4).
showInstalledPackageInfo :: InstalledPackageInfo -> String

-- | The variant of <a>showInstalledPackageInfo</a> which outputs
--   <tt>pkgroot</tt> field too.
showFullInstalledPackageInfo :: InstalledPackageInfo -> String

-- | <pre>
--   &gt;&gt;&gt; let ipi = emptyInstalledPackageInfo { maintainer = fromString "Tester" }
--   
--   &gt;&gt;&gt; fmap ($ ipi) $ showInstalledPackageInfoField "maintainer"
--   Just "maintainer: Tester"
--   </pre>
showInstalledPackageInfoField :: String -> Maybe (InstalledPackageInfo -> String)
showSimpleInstalledPackageInfoField :: String -> Maybe (InstalledPackageInfo -> String)
