-- 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.1.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 IOException. catchIO :: IO a -> (IOException -> IO a) -> IO a -- | Catch ExitCode catchExit :: IO a -> (ExitCode -> IO a) -> IO a -- | Try IOException. tryIO :: IO a -> IO (Either IOException a) -- | Render this exception value in a human-friendly manner. -- -- Default implementation: show. displayException :: Exception e => e -> String -- | Compatibility layer for Control.Monad.Fail module Distribution.Compat.MonadFail -- | When a value is bound in do-notation, the pattern on the left -- hand side of <- might not match. In this case, this class -- provides a function to recover. -- -- A Monad without a MonadFail instance may only be used in -- conjunction with pattern that always match, such as newtypes, tuples, -- data types with only a single data constructor, and irrefutable -- patterns (~pat). -- -- Instances of MonadFail should satisfy the following law: -- fail s should be a left zero for >>=, -- --
-- fail s >>= f = fail s ---- -- If your Monad is also MonadPlus, a popular definition is -- --
-- fail _ = mzero ---- -- fail s should be an action that runs in the monad itself, not -- an exception (except in instances of MonadIO). In particular, -- fail should not be implemented in terms of error. class Monad m => MonadFail (m :: Type -> Type) fail :: MonadFail m => String -> m a -- | Per Conor McBride, the Newtype typeclass represents the packing -- and unpacking of a newtype, and allows you to operate under that -- newtype with functions such as ala. module Distribution.Compat.Newtype -- | The FunctionalDependencies version of Newtype -- type-class. -- -- Since Cabal-3.0 class arguments are in a different order than in -- newtype package. This change is to allow usage with -- DeriveAnyClass (and DerivingStrategies, in GHC-8.2). -- Unfortunately one has to repeat inner type. -- --
-- newtype New = New Old -- deriving anyclass (Newtype Old) ---- -- Another approach would be to use TypeFamilies (and possibly -- compute inner type using GHC.Generics), but we think -- FunctionalDependencies version gives cleaner type signatures. class Newtype o n | n -> o pack :: Newtype o n => o -> n pack :: (Newtype o n, Coercible o n) => o -> n unpack :: Newtype o n => n -> o unpack :: (Newtype o n, Coercible n o) => n -> o -- |
-- >>> ala Sum foldMap [1, 2, 3, 4 :: Int] -- 10 ---- -- Note: the user supplied function for the newtype is -- ignored. -- --
-- >>> ala (Sum . (+1)) foldMap [1, 2, 3, 4 :: Int] -- 10 --ala :: (Newtype o n, Newtype o' n') => (o -> n) -> ((o -> n) -> b -> n') -> b -> o' -- |
-- >>> alaf Sum foldMap length ["cabal", "install"] -- 12 ---- -- Note: as with ala, the user supplied function for the -- newtype is ignored. alaf :: (Newtype o n, Newtype o' n') => (o -> n) -> ((a -> n) -> b -> n') -> (a -> o) -> b -> o' -- | Variant of pack, which takes a phantom type. pack' :: Newtype o n => (o -> n) -> o -> n -- | Variant of unpack, which takes a phantom type. unpack' :: Newtype o n => (o -> n) -> n -> o instance Distribution.Compat.Newtype.Newtype a (Data.Functor.Identity.Identity a) instance Distribution.Compat.Newtype.Newtype a (Data.Semigroup.Internal.Sum a) instance Distribution.Compat.Newtype.Newtype a (Data.Semigroup.Internal.Product a) instance Distribution.Compat.Newtype.Newtype (a -> a) (Data.Semigroup.Internal.Endo a) module Distribution.Compat.Typeable -- | The class Typeable allows a concrete representation of a type -- to be calculated. class () => Typeable (a :: k) -- | A quantified type representation. type TypeRep = SomeTypeRep -- | Takes a value of type a and returns a concrete representation -- of that type. 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 MD5 in human readable form -- --
-- >>> showMD5 (Fingerprint 123 456) -- "000000000000007b00000000000001c8" ---- --
-- >>> showMD5 $ md5 $ BS.pack [0..127] -- "37eff01866ba3f538421b30b7cbefcac" ---- -- @since 3.2.0.0 showMD5 :: MD5 -> String -- | @since 3.2.0.0 md5 :: ByteString -> MD5 -- |
-- >>> showMD5 $ md5FromInteger 0x37eff01866ba3f538421b30b7cbefcac -- "37eff01866ba3f538421b30b7cbefcac" ---- -- Note: the input is truncated: -- --
-- >>> showMD5 $ md5FromInteger 0x1230000037eff01866ba3f538421b30b7cbefcac -- "37eff01866ba3f538421b30b7cbefcac" ---- -- Yet, negative numbers are not a problem... -- --
-- >>> showMD5 $ md5FromInteger (-1) -- "ffffffffffffffffffffffffffffffff" --md5FromInteger :: Integer -> MD5 -- | @since 3.2.0.0 binaryPutMD5 :: MD5 -> Put -- | @since 3.2.0.0 binaryGetMD5 :: Get MD5 module Distribution.Utils.String -- | Decode String from UTF8-encoded octets. -- -- Invalid data in the UTF8 stream (this includes code-points -- U+D800 through U+DFFF) will be decoded as the -- replacement character (U+FFFD). -- -- See also encodeStringUtf8 decodeStringUtf8 :: [Word8] -> String -- | Encode String to a list of UTF8-encoded octets -- -- Code-points in the U+D800-U+DFFF range will be -- encoded as the replacement character (i.e. U+FFFD). -- -- See also decodeUtf8 encodeStringUtf8 :: String -> [Word8] trim :: String -> String -- | Structurally tag binary serialisation stream. Useful when most -- Binary instances are Generic derived. -- -- Say you have a data type -- --
-- data Record = Record
-- { _recordFields :: HM.HashMap Text (Integer, ByteString)
-- , _recordEnabled :: Bool
-- }
-- deriving (Eq, Show, Generic)
--
-- instance Binary Record
-- instance Structured Record
--
--
-- then you can serialise and deserialise Record values with a
-- structure tag by simply
--
-- -- structuredEncode record :: ByteString -- structuredDecode lbs :: IO Record ---- -- If structure of Record changes in between, deserialisation -- will fail early. -- -- Technically, Structured is not related to Binary, and -- may be useful in other uses. module Distribution.Utils.Structured -- | Structured encode. Encode a value to using binary serialisation -- to a lazy ByteString. Encoding starts with 16 byte large -- structure hash. structuredEncode :: forall a. (Binary a, Structured a) => a -> ByteString -- | Lazily serialise a value to a file structuredEncodeFile :: (Binary a, Structured a) => FilePath -> a -> IO () -- | Structured decode. Decode a value from a lazy -- ByteString, reconstructing the original structure. Throws pure -- exception on invalid inputs. structuredDecode :: forall a. (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 Structure. -- -- For regular data types Structured can be derived generically. -- --
-- data Record = Record { a :: Int, b :: Bool, c :: [Char] } deriving (Generic)
-- instance Structured Record
--
class Typeable a => Structured a
structure :: Structured a => Proxy a -> Structure
structure :: (Structured a, Generic a, GStructured (Rep a)) => Proxy a -> Structure
type MD5 = Fingerprint
-- | Semantically hashStructure . structure.
structureHash :: forall a. Structured a => Proxy a -> MD5
-- | Flatten Structure into something we can calculate hash of.
--
-- As Structure can be potentially infinite. For mutually
-- recursive types, we keep track of TypeReps, and put just
-- TypeRep name when it's occurred another time.
structureBuilder :: Structure -> Builder
-- | Derive structure generically.
genericStructure :: forall a. (Typeable a, Generic a, GStructured (Rep a)) => Proxy a -> Structure
-- | Used to implement genericStructure.
class GStructured (f :: Type -> Type)
-- | Use Typeable to infer name
nominalStructure :: Typeable a => Proxy a -> Structure
containerStructure :: forall f a. (Typeable f, Structured a) => Proxy (f a) -> Structure
-- | Structure of a datatype.
--
-- It can be infinite, as far as TypeReps 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
Tag :: Tag a
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 Structure.
hashStructure :: Structure -> MD5
-- | A van-Laarhoven lens into TypeVersion of Structure
--
-- -- typeVersion :: Lens' Structure TypeVersion --typeVersion :: Functor f => (TypeVersion -> f TypeVersion) -> Structure -> f Structure -- | A van-Laarhoven lens into TypeName of Structure -- --
-- typeName :: Lens' Structure TypeName --typeName :: Functor f => (TypeName -> f TypeName) -> Structure -> f Structure instance GHC.Generics.Generic Distribution.Utils.Structured.Structure instance GHC.Show.Show Distribution.Utils.Structured.Structure instance GHC.Classes.Ord Distribution.Utils.Structured.Structure instance GHC.Classes.Eq Distribution.Utils.Structured.Structure instance (i GHC.Types.~ GHC.Generics.C, GHC.Generics.Constructor c, Distribution.Utils.Structured.GStructuredProd f) => Distribution.Utils.Structured.GStructuredSum (GHC.Generics.M1 i c f) instance (i GHC.Types.~ GHC.Generics.S, Distribution.Utils.Structured.GStructuredProd f) => Distribution.Utils.Structured.GStructuredProd (GHC.Generics.M1 i c f) instance Distribution.Utils.Structured.Structured c => Distribution.Utils.Structured.GStructuredProd (GHC.Generics.K1 i c) instance Distribution.Utils.Structured.GStructuredProd GHC.Generics.U1 instance (Distribution.Utils.Structured.GStructuredProd f, Distribution.Utils.Structured.GStructuredProd g) => Distribution.Utils.Structured.GStructuredProd (f GHC.Generics.:*: g) instance (i GHC.Types.~ GHC.Generics.D, GHC.Generics.Datatype c, Distribution.Utils.Structured.GStructuredSum f) => Distribution.Utils.Structured.GStructured (GHC.Generics.M1 i c f) instance (Distribution.Utils.Structured.GStructuredSum f, Distribution.Utils.Structured.GStructuredSum g) => Distribution.Utils.Structured.GStructuredSum (f GHC.Generics.:+: g) instance Distribution.Utils.Structured.GStructuredSum GHC.Generics.V1 instance Distribution.Utils.Structured.Structured a => Data.Binary.Class.Binary (Distribution.Utils.Structured.Tag a) instance Distribution.Utils.Structured.Structured () instance Distribution.Utils.Structured.Structured GHC.Types.Bool instance Distribution.Utils.Structured.Structured GHC.Types.Ordering instance Distribution.Utils.Structured.Structured GHC.Types.Char instance Distribution.Utils.Structured.Structured GHC.Types.Int instance Distribution.Utils.Structured.Structured GHC.Num.Integer.Integer instance Distribution.Utils.Structured.Structured GHC.Types.Word instance Distribution.Utils.Structured.Structured GHC.Int.Int8 instance Distribution.Utils.Structured.Structured GHC.Int.Int16 instance Distribution.Utils.Structured.Structured GHC.Int.Int32 instance Distribution.Utils.Structured.Structured GHC.Int.Int64 instance Distribution.Utils.Structured.Structured GHC.Word.Word8 instance Distribution.Utils.Structured.Structured GHC.Word.Word16 instance Distribution.Utils.Structured.Structured GHC.Word.Word32 instance Distribution.Utils.Structured.Structured GHC.Word.Word64 instance Distribution.Utils.Structured.Structured GHC.Types.Float instance Distribution.Utils.Structured.Structured GHC.Types.Double instance Distribution.Utils.Structured.Structured a => Distribution.Utils.Structured.Structured (GHC.Maybe.Maybe a) instance (Distribution.Utils.Structured.Structured a, Distribution.Utils.Structured.Structured b) => Distribution.Utils.Structured.Structured (Data.Either.Either a b) instance Distribution.Utils.Structured.Structured a => Distribution.Utils.Structured.Structured (GHC.Real.Ratio a) instance Distribution.Utils.Structured.Structured a => Distribution.Utils.Structured.Structured [a] instance Distribution.Utils.Structured.Structured a => Distribution.Utils.Structured.Structured (GHC.Base.NonEmpty a) 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.ByteString.Internal.Type.ByteString instance Distribution.Utils.Structured.Structured Data.ByteString.Lazy.Internal.ByteString instance Distribution.Utils.Structured.Structured Data.Text.Internal.Text instance Distribution.Utils.Structured.Structured Data.Text.Internal.Lazy.Text 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 k => Distribution.Utils.Structured.Structured (Data.Set.Internal.Set k) 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 v => Distribution.Utils.Structured.Structured (Data.Sequence.Internal.Seq v) instance Distribution.Utils.Structured.Structured Data.Time.Clock.Internal.UTCTime.UTCTime instance Distribution.Utils.Structured.Structured Data.Time.Clock.Internal.DiffTime.DiffTime instance Distribution.Utils.Structured.Structured Data.Time.Clock.Internal.UniversalTime.UniversalTime instance Distribution.Utils.Structured.Structured Data.Time.Clock.Internal.NominalDiffTime.NominalDiffTime instance Distribution.Utils.Structured.Structured Data.Time.Calendar.Days.Day instance Distribution.Utils.Structured.Structured Data.Time.LocalTime.Internal.TimeZone.TimeZone instance Distribution.Utils.Structured.Structured Data.Time.LocalTime.Internal.TimeOfDay.TimeOfDay instance Distribution.Utils.Structured.Structured Data.Time.LocalTime.Internal.LocalTime.LocalTime -- | Compatibility layer for Data.Semigroup module Distribution.Compat.Semigroup -- | The class of semigroups (types with an associative binary operation). -- -- Instances should satisfy the following: -- -- -- -- You can alternatively define sconcat instead of -- (<>), in which case the laws are: -- --
-- >>> [1,2,3] <> [4,5,6] -- [1,2,3,4,5,6] --(<>) :: Semigroup a => a -> a -> a infixr 6 <> -- | The class of monoids (types with an associative binary operation that -- has an identity). Instances should satisfy the following: -- --
-- >>> "Hello world" <> mempty -- "Hello world" --mempty :: Monoid a => a -- | An associative operation -- -- NOTE: This method is redundant and has the default -- implementation mappend = (<>) since -- base-4.11.0.0. Should it be implemented manually, since -- mappend is a synonym for (<>), it is expected that -- the two functions are defined the same way. In a future GHC release -- mappend will be removed from Monoid. mappend :: Monoid a => a -> a -> a -- | Fold a list using the monoid. -- -- For most types, the default definition for mconcat will be -- used, but the function is included in the class definition so that an -- optimized version can be provided for specific types. -- --
-- >>> mconcat ["Hello", " ", "Haskell", "!"] -- "Hello Haskell!" --mconcat :: Monoid a => [a] -> a -- | Boolean monoid under conjunction (&&). -- --
-- >>> getAll (All True <> mempty <> All False) -- False ---- --
-- >>> getAll (mconcat (map (\x -> All (even x)) [2,4,6,7,8])) -- False --newtype () => All All :: Bool -> All [getAll] :: All -> Bool -- | Boolean monoid under disjunction (||). -- --
-- >>> getAny (Any True <> mempty <> Any False) -- True ---- --
-- >>> getAny (mconcat (map (\x -> Any (even x)) [2,4,6,7,8])) -- True --newtype () => Any Any :: Bool -> Any [getAny] :: Any -> Bool -- | A copy of First. newtype First' a First' :: a -> First' a [getFirst'] :: First' a -> a -- | A copy of Last. newtype Last' a Last' :: a -> Last' a [getLast'] :: Last' a -> a -- | A wrapper around Maybe, providing the Semigroup and -- Monoid instances implemented for Maybe since -- base-4.11. newtype Option' a Option' :: Maybe a -> Option' a [getOption'] :: Option' a -> Maybe a -- | Generically generate a Semigroup (<>) operation -- for any type implementing Generic. This operation will append -- two values by point-wise appending their component fields. It is only -- defined for product types. -- --
-- gmappend a (gmappend b c) = gmappend (gmappend a b) c --gmappend :: (Generic a, GSemigroup (Rep a)) => a -> a -> a -- | Generically generate a Monoid mempty for any -- product-like type implementing Generic. -- -- It is only defined for product types. -- --
-- gmappend gmempty a = a = gmappend a gmempty --gmempty :: (Generic a, GMonoid (Rep a)) => a instance GHC.Show.Show a => GHC.Show.Show (Distribution.Compat.Semigroup.First' a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Distribution.Compat.Semigroup.First' a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Distribution.Compat.Semigroup.First' a) instance Data.Binary.Class.Binary a => Data.Binary.Class.Binary (Distribution.Compat.Semigroup.Last' a) instance GHC.Generics.Generic (Distribution.Compat.Semigroup.Last' a) instance GHC.Show.Show a => GHC.Show.Show (Distribution.Compat.Semigroup.Last' a) instance GHC.Read.Read a => GHC.Read.Read (Distribution.Compat.Semigroup.Last' a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Distribution.Compat.Semigroup.Last' a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Distribution.Compat.Semigroup.Last' a) instance GHC.Base.Functor Distribution.Compat.Semigroup.Option' instance GHC.Generics.Generic (Distribution.Compat.Semigroup.Option' a) instance Data.Binary.Class.Binary a => Data.Binary.Class.Binary (Distribution.Compat.Semigroup.Option' a) instance GHC.Show.Show a => GHC.Show.Show (Distribution.Compat.Semigroup.Option' a) instance GHC.Read.Read a => GHC.Read.Read (Distribution.Compat.Semigroup.Option' a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Distribution.Compat.Semigroup.Option' a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Distribution.Compat.Semigroup.Option' a) instance (GHC.Base.Semigroup a, GHC.Base.Monoid a) => Distribution.Compat.Semigroup.GMonoid (GHC.Generics.K1 i a) instance Distribution.Compat.Semigroup.GMonoid f => Distribution.Compat.Semigroup.GMonoid (GHC.Generics.M1 i c f) instance (Distribution.Compat.Semigroup.GMonoid f, Distribution.Compat.Semigroup.GMonoid g) => Distribution.Compat.Semigroup.GMonoid (f GHC.Generics.:*: g) instance GHC.Base.Semigroup a => Distribution.Compat.Semigroup.GSemigroup (GHC.Generics.K1 i a) instance Distribution.Compat.Semigroup.GSemigroup f => Distribution.Compat.Semigroup.GSemigroup (GHC.Generics.M1 i c f) instance (Distribution.Compat.Semigroup.GSemigroup f, Distribution.Compat.Semigroup.GSemigroup g) => Distribution.Compat.Semigroup.GSemigroup (f GHC.Generics.:*: g) instance Distribution.Utils.Structured.Structured a => Distribution.Utils.Structured.Structured (Distribution.Compat.Semigroup.Option' a) instance GHC.Base.Semigroup a => GHC.Base.Semigroup (Distribution.Compat.Semigroup.Option' a) instance GHC.Base.Semigroup a => GHC.Base.Monoid (Distribution.Compat.Semigroup.Option' a) instance Distribution.Utils.Structured.Structured a => Distribution.Utils.Structured.Structured (Distribution.Compat.Semigroup.Last' a) instance GHC.Base.Semigroup (Distribution.Compat.Semigroup.Last' a) instance GHC.Base.Functor Distribution.Compat.Semigroup.Last' instance GHC.Base.Semigroup (Distribution.Compat.Semigroup.First' 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 (GHC.Read.Read a, GHC.Classes.Ord a) => GHC.Read.Read (Distribution.Compat.NonEmptySet.NonEmptySet a) instance (Data.Data.Data a, GHC.Classes.Ord a) => Data.Data.Data (Distribution.Compat.NonEmptySet.NonEmptySet a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Distribution.Compat.NonEmptySet.NonEmptySet a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Distribution.Compat.NonEmptySet.NonEmptySet a) instance GHC.Show.Show a => GHC.Show.Show (Distribution.Compat.NonEmptySet.NonEmptySet a) instance Data.Binary.Class.Binary a => Data.Binary.Class.Binary (Distribution.Compat.NonEmptySet.NonEmptySet a) instance Distribution.Utils.Structured.Structured a => Distribution.Utils.Structured.Structured (Distribution.Compat.NonEmptySet.NonEmptySet a) instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Distribution.Compat.NonEmptySet.NonEmptySet a) instance GHC.Classes.Ord a => GHC.Base.Semigroup (Distribution.Compat.NonEmptySet.NonEmptySet a) instance Data.Foldable.Foldable Distribution.Compat.NonEmptySet.NonEmptySet -- | This module does two things: -- --
-- >>> let s = Left "foo" :: Either String Int -- -- >>> s -- Left "foo" -- -- >>> let n = Right 3 :: Either String Int -- -- >>> n -- Right 3 -- -- >>> :type s -- s :: Either String Int -- -- >>> :type n -- n :: Either String Int ---- -- The fmap from our Functor instance will ignore -- Left values, but will apply the supplied function to values -- contained in a Right: -- --
-- >>> let s = Left "foo" :: Either String Int -- -- >>> let n = Right 3 :: Either String Int -- -- >>> fmap (*2) s -- Left "foo" -- -- >>> fmap (*2) n -- Right 6 ---- -- The Monad instance for Either allows us to chain -- together multiple actions which may fail, and fail overall if any of -- the individual steps failed. First we'll write a function that can -- either parse an Int from a Char, or fail. -- --
-- >>> import Data.Char ( digitToInt, isDigit )
--
-- >>> :{
-- let parseEither :: Char -> Either String Int
-- parseEither c
-- | isDigit c = Right (digitToInt c)
-- | otherwise = Left "parse error"
--
-- >>> :}
--
--
-- The following should work, since both '1' and '2'
-- can be parsed as Ints.
--
--
-- >>> :{
-- let parseMultiple :: Either String Int
-- parseMultiple = do
-- x <- parseEither '1'
-- y <- parseEither '2'
-- return (x + y)
--
-- >>> :}
--
--
-- -- >>> parseMultiple -- Right 3 ---- -- But the following should fail overall, since the first operation where -- we attempt to parse 'm' as an Int will fail: -- --
-- >>> :{
-- let parseMultiple :: Either String Int
-- parseMultiple = do
-- x <- parseEither 'm'
-- y <- parseEither '2'
-- return (x + y)
--
-- >>> :}
--
--
-- -- >>> parseMultiple -- Left "parse error" --data () => Either a b Left :: a -> Either a b Right :: b -> Either a b -- | Integral numbers, supporting integer division. -- -- The Haskell Report defines no laws for Integral. However, -- Integral instances are customarily expected to define a -- Euclidean domain and have the following properties for the -- div/mod and quot/rem pairs, given suitable -- Euclidean functions f and g: -- --
-- (x `quot` y)*y + (x `rem` y) == x ---- -- WARNING: This function is partial (because it throws when 0 is passed -- as the divisor) for all the integer types in base. rem :: Integral a => a -> a -> a -- | integer division truncated toward negative infinity -- -- WARNING: This function is partial (because it throws when 0 is passed -- as the divisor) for all the integer types in base. div :: Integral a => a -> a -> a -- | integer modulus, satisfying -- --
-- (x `div` y)*y + (x `mod` y) == x ---- -- WARNING: This function is partial (because it throws when 0 is passed -- as the divisor) for all the integer types in base. mod :: Integral a => a -> a -> a -- | simultaneous quot and rem -- -- WARNING: This function is partial (because it throws when 0 is passed -- as the divisor) for all the integer types in base. quotRem :: Integral a => a -> a -> (a, a) -- | simultaneous div and mod -- -- WARNING: This function is partial (because it throws when 0 is passed -- as the divisor) for all the integer types in base. divMod :: Integral a => a -> a -> (a, a) -- | conversion to Integer toInteger :: Integral a => a -> Integer infixl 7 `quot` infixl 7 `rem` infixl 7 `div` infixl 7 `mod` -- | Arbitrary-precision rational numbers, represented as a ratio of two -- Integer values. A rational number may be constructed using the -- % operator. type Rational = Ratio Integer -- | A String is a list of characters. String constants in Haskell -- are values of type String. -- -- See Data.List for operations on lists. type String = [Char] -- | Parsing of Strings, producing values. -- -- Derived instances of Read make the following assumptions, which -- derived instances of Show obey: -- --
-- infixr 5 :^: -- data Tree a = Leaf a | Tree a :^: Tree a ---- -- the derived instance of Read in Haskell 2010 is equivalent to -- --
-- instance (Read a) => Read (Tree a) where
--
-- readsPrec d r = readParen (d > app_prec)
-- (\r -> [(Leaf m,t) |
-- ("Leaf",s) <- lex r,
-- (m,t) <- readsPrec (app_prec+1) s]) r
--
-- ++ readParen (d > up_prec)
-- (\r -> [(u:^:v,w) |
-- (u,s) <- readsPrec (up_prec+1) r,
-- (":^:",t) <- lex s,
-- (v,w) <- readsPrec (up_prec+1) t]) r
--
-- where app_prec = 10
-- up_prec = 5
--
--
-- Note that right-associativity of :^: is unused.
--
-- The derived instance in GHC is equivalent to
--
-- -- instance (Read a) => Read (Tree a) where -- -- readPrec = parens $ (prec app_prec $ do -- Ident "Leaf" <- lexP -- m <- step readPrec -- return (Leaf m)) -- -- +++ (prec up_prec $ do -- u <- step readPrec -- Symbol ":^:" <- lexP -- v <- step readPrec -- return (u :^: v)) -- -- where app_prec = 10 -- up_prec = 5 -- -- readListPrec = readListPrecDefault ---- -- Why do both readsPrec and readPrec exist, and why does -- GHC opt to implement readPrec in derived Read instances -- instead of readsPrec? The reason is that readsPrec is -- based on the ReadS type, and although ReadS is mentioned -- in the Haskell 2010 Report, it is not a very efficient parser data -- structure. -- -- readPrec, on the other hand, is based on a much more efficient -- ReadPrec datatype (a.k.a "new-style parsers"), but its -- definition relies on the use of the RankNTypes language -- extension. Therefore, readPrec (and its cousin, -- readListPrec) are marked as GHC-only. Nevertheless, it is -- recommended to use readPrec instead of readsPrec -- whenever possible for the efficiency improvements it brings. -- -- As mentioned above, derived Read instances in GHC will -- implement readPrec instead of readsPrec. The default -- implementations of readsPrec (and its cousin, readList) -- will simply use readPrec under the hood. If you are writing a -- Read instance by hand, it is recommended to write it like so: -- --
-- instance Read T where -- readPrec = ... -- readListPrec = readListPrecDefault --class () => Read a -- | attempts to parse a value from the front of the string, returning a -- list of (parsed value, remaining string) pairs. If there is no -- successful parse, the returned list is empty. -- -- Derived instances of Read and Show satisfy the -- following: -- -- -- -- That is, readsPrec parses the string produced by -- showsPrec, and delivers the value that showsPrec started -- with. readsPrec :: Read a => Int -> ReadS a -- | The method readList is provided to allow the programmer to give -- a specialised way of parsing lists of values. For example, this is -- used by the predefined Read instance of the Char type, -- where values of type String should be are expected to use -- double quotes, rather than square brackets. readList :: Read a => ReadS [a] -- | Conversion of values to readable Strings. -- -- Derived instances of Show have the following properties, which -- are compatible with derived instances of Read: -- --
-- infixr 5 :^: -- data Tree a = Leaf a | Tree a :^: Tree a ---- -- the derived instance of Show is equivalent to -- --
-- instance (Show a) => Show (Tree a) where -- -- showsPrec d (Leaf m) = showParen (d > app_prec) $ -- showString "Leaf " . showsPrec (app_prec+1) m -- where app_prec = 10 -- -- showsPrec d (u :^: v) = showParen (d > up_prec) $ -- showsPrec (up_prec+1) u . -- showString " :^: " . -- showsPrec (up_prec+1) v -- where up_prec = 5 ---- -- Note that right-associativity of :^: is ignored. For example, -- --
-- showsPrec d x r ++ s == showsPrec d x (r ++ s) ---- -- Derived instances of Read and Show satisfy the -- following: -- -- -- -- That is, readsPrec parses the string produced by -- showsPrec, and delivers the value that showsPrec started -- with. showsPrec :: Show a => Int -> a -> ShowS -- | A specialised variant of showsPrec, using precedence context -- zero, and returning an ordinary String. show :: Show a => a -> String -- | The method showList is provided to allow the programmer to give -- a specialised way of showing lists of values. For example, this is -- used by the predefined Show instance of the Char type, -- where values of type String should be shown in double quotes, -- rather than between square brackets. showList :: Show a => [a] -> ShowS -- | The Haskell 2010 type for exceptions in the IO monad. Any I/O -- operation may raise an IOException instead of returning a -- result. For a more general type of exception, including also those -- that arise in pure code, see Exception. -- -- In Haskell 2010, this is an opaque type. type IOError = IOException -- | The Bounded class is used to name the upper and lower limits of -- a type. Ord is not a superclass of Bounded since types -- that are not totally ordered may also have upper and lower bounds. -- -- The Bounded class may be derived for any enumeration type; -- minBound is the first constructor listed in the data -- declaration and maxBound is the last. Bounded may also -- be derived for single-constructor datatypes whose constituent types -- are in Bounded. class () => Bounded a minBound :: Bounded a => a maxBound :: Bounded a => a -- | Class Enum defines operations on sequentially ordered types. -- -- The enumFrom... methods are used in Haskell's translation of -- arithmetic sequences. -- -- Instances of Enum may be derived for any enumeration type -- (types whose constructors have no fields). The nullary constructors -- are assumed to be numbered left-to-right by fromEnum from -- 0 through n-1. See Chapter 10 of the Haskell -- Report for more details. -- -- For any type that is an instance of class Bounded as well as -- Enum, the following should hold: -- --
-- enumFrom x = enumFromTo x maxBound -- enumFromThen x y = enumFromThenTo x y bound -- where -- bound | fromEnum y >= fromEnum x = maxBound -- | otherwise = minBound --class () => Enum a -- | the successor of a value. For numeric types, succ adds 1. succ :: Enum a => a -> a -- | the predecessor of a value. For numeric types, pred subtracts -- 1. pred :: Enum a => a -> a -- | Convert from an Int. toEnum :: Enum a => Int -> a -- | Convert to an Int. It is implementation-dependent what -- fromEnum returns when applied to a value that is too large to -- fit in an Int. fromEnum :: Enum a => a -> Int -- | Used in Haskell's translation of [n..] with [n..] = -- enumFrom n, a possible implementation being enumFrom n = n : -- enumFrom (succ n). For example: -- --
enumFrom 4 :: [Integer] = [4,5,6,7,...]
enumFrom 6 :: [Int] = [6,7,8,9,...,maxBound :: -- Int]
enumFromThen 4 6 :: [Integer] = [4,6,8,10...]
enumFromThen 6 2 :: [Int] = [6,2,-2,-6,...,minBound :: -- Int]
enumFromTo 6 10 :: [Int] = [6,7,8,9,10]
enumFromTo 42 1 :: [Integer] = []
enumFromThenTo 4 2 -6 :: [Integer] = -- [4,2,0,-2,-4,-6]
enumFromThenTo 6 8 2 :: [Int] = []
-- do a <- as -- bs a --(>>=) :: Monad m => m a -> (a -> m b) -> m b -- | Sequentially compose two actions, discarding any value produced by the -- first, like sequencing operators (such as the semicolon) in imperative -- languages. -- -- 'as >> bs' can be understood as the do -- expression -- --
-- do as -- bs --(>>) :: Monad m => m a -> m b -> m b -- | Inject a value into the monadic type. return :: Monad m => a -> m a infixl 1 >>= infixl 1 >> -- | A type f is a Functor if it provides a function fmap -- which, given any types a and b lets you apply any -- function from (a -> b) to turn an f a into an -- f b, preserving the structure of f. Furthermore -- f needs to adhere to the following: -- -- -- -- Note, that the second law follows from the free theorem of the type -- fmap and the first law, so you need only check that the former -- condition holds. See -- https://www.schoolofhaskell.com/user/edwardk/snippets/fmap or -- https://github.com/quchen/articles/blob/master/second_functor_law.md -- for an explanation. class () => Functor (f :: Type -> Type) -- | fmap is used to apply a function of type (a -> b) -- to a value of type f a, where f is a functor, to produce a -- value of type f b. Note that for any type constructor with -- more than one parameter (e.g., Either), only the last type -- parameter can be modified with fmap (e.g., b in -- `Either a b`). -- -- Some type constructors with two parameters or more have a -- Bifunctor instance that allows both the last and the -- penultimate parameters to be mapped over. -- --
-- >>> fmap show Nothing -- Nothing -- -- >>> fmap show (Just 3) -- Just "3" ---- -- Convert from an Either Int Int to an Either Int -- String using show: -- --
-- >>> fmap show (Left 17) -- Left 17 -- -- >>> fmap show (Right 17) -- Right "17" ---- -- Double each element of a list: -- --
-- >>> fmap (*2) [1,2,3] -- [2,4,6] ---- -- Apply even to the second element of a pair: -- --
-- >>> fmap even (2,2) -- (2,True) ---- -- It may seem surprising that the function is only applied to the last -- element of the tuple compared to the list example above which applies -- it to every element in the list. To understand, remember that tuples -- are type constructors with multiple type parameters: a tuple of 3 -- elements (a,b,c) can also be written (,,) a b c and -- its Functor instance is defined for Functor ((,,) a -- b) (i.e., only the third parameter is free to be mapped over with -- fmap). -- -- It explains why fmap can be used with tuples containing -- values of different types as in the following example: -- --
-- >>> fmap even ("hello", 1.0, 4)
-- ("hello",1.0,True)
--
fmap :: Functor f => (a -> b) -> f a -> f b
-- | Replace all locations in the input with the same value. The default
-- definition is fmap . const, but this may be
-- overridden with a more efficient version.
--
-- -- >>> 'a' <$ Just 2 -- Just 'a' -- -- >>> 'a' <$ Nothing -- Nothing --(<$) :: Functor f => a -> f b -> f a infixl 4 <$ -- | Basic numeric class. -- -- The Haskell Report defines no laws for Num. However, -- (+) and (*) are customarily expected -- to define a ring and have the following properties: -- --
-- abs x * signum x == x ---- -- For real numbers, the signum is either -1 (negative), -- 0 (zero) or 1 (positive). signum :: Num a => a -> a -- | Conversion from an Integer. An integer literal represents the -- application of the function fromInteger to the appropriate -- value of type Integer, so such literals have type -- (Num a) => a. fromInteger :: Num a => Integer -> a infixl 6 - infixl 6 + infixl 7 * -- | The Ord class is used for totally ordered datatypes. -- -- Instances of Ord can be derived for any user-defined datatype -- whose constituent types are in Ord. The declared order of the -- constructors in the data declaration determines the ordering in -- derived Ord instances. The Ordering datatype allows a -- single comparison to determine the precise ordering of two objects. -- -- Ord, as defined by the Haskell report, implements a total order -- and has the following properties: -- --
-- fail s >>= f = fail s ---- -- If your Monad is also MonadPlus, a popular definition is -- --
-- fail _ = mzero ---- -- fail s should be an action that runs in the monad itself, not -- an exception (except in instances of MonadIO). In particular, -- fail should not be implemented in terms of error. class Monad m => MonadFail (m :: Type -> Type) fail :: MonadFail m => String -> m a -- | A functor with application, providing operations to -- --
-- (<*>) = liftA2 id ---- --
-- liftA2 f x y = f <$> x <*> y ---- -- Further, any definition must satisfy the following: -- --
pure id <*> v = -- v
pure (.) <*> u -- <*> v <*> w = u <*> (v -- <*> w)
pure f <*> -- pure x = pure (f x)
u <*> pure y = -- pure ($ y) <*> u
-- forall x y. p (q x y) = f x . g y ---- -- it follows from the above that -- --
-- liftA2 p (liftA2 q u v) = liftA2 f u . liftA2 g v ---- -- If f is also a Monad, it should satisfy -- -- -- -- (which implies that pure and <*> satisfy the -- applicative functor laws). class Functor f => Applicative (f :: Type -> Type) -- | Lift a value. pure :: Applicative f => a -> f a -- | Sequential application. -- -- A few functors support an implementation of <*> that is -- more efficient than the default one. -- --
-- >>> data MyState = MyState {arg1 :: Foo, arg2 :: Bar, arg3 :: Baz}
--
--
-- -- >>> produceFoo :: Applicative f => f Foo ---- --
-- >>> produceBar :: Applicative f => f Bar -- -- >>> produceBaz :: Applicative f => f Baz ---- --
-- >>> mkState :: Applicative f => f MyState -- -- >>> mkState = MyState <$> produceFoo <*> produceBar <*> produceBaz --(<*>) :: Applicative f => f (a -> b) -> f a -> f b -- | Lift a binary function to actions. -- -- Some functors support an implementation of liftA2 that is more -- efficient than the default one. In particular, if fmap is an -- expensive operation, it is likely better to use liftA2 than to -- fmap over the structure and then use <*>. -- -- This became a typeclass method in 4.10.0.0. Prior to that, it was a -- function defined in terms of <*> and fmap. -- --
-- >>> liftA2 (,) (Just 3) (Just 5) -- Just (3,5) --liftA2 :: Applicative f => (a -> b -> c) -> f a -> f b -> f c -- | Sequence actions, discarding the value of the first argument. -- --
-- >>> Just 2 *> Just 3 -- Just 3 ---- --
-- >>> Nothing *> Just 3 -- Nothing ---- -- Of course a more interesting use case would be to have effectful -- computations instead of just returning pure values. -- --
-- >>> import Data.Char
--
-- >>> import Text.ParserCombinators.ReadP
--
-- >>> let p = string "my name is " *> munch1 isAlpha <* eof
--
-- >>> readP_to_S p "my name is Simon"
-- [("Simon","")]
--
(*>) :: Applicative f => f a -> f b -> f b
-- | Sequence actions, discarding the value of the second argument.
(<*) :: Applicative f => f a -> f b -> f a
infixl 4 <*>
infixl 4 *>
infixl 4 <*
-- | The class of monoids (types with an associative binary operation that
-- has an identity). Instances should satisfy the following:
--
-- -- >>> "Hello world" <> mempty -- "Hello world" --mempty :: Monoid a => a -- | An associative operation -- -- NOTE: This method is redundant and has the default -- implementation mappend = (<>) since -- base-4.11.0.0. Should it be implemented manually, since -- mappend is a synonym for (<>), it is expected that -- the two functions are defined the same way. In a future GHC release -- mappend will be removed from Monoid. mappend :: Monoid a => a -> a -> a -- | Fold a list using the monoid. -- -- For most types, the default definition for mconcat will be -- used, but the function is included in the class definition so that an -- optimized version can be provided for specific types. -- --
-- >>> mconcat ["Hello", " ", "Haskell", "!"] -- "Hello Haskell!" --mconcat :: Monoid a => [a] -> a -- | The shows functions return a function that prepends the -- output String to an existing String. This allows -- constant-time concatenation of results using function composition. type ShowS = String -> String -- | A parser for a type a, represented as a function that takes a -- String and returns a list of possible parses as -- (a,String) pairs. -- -- Note that this kind of backtracking parser is very inefficient; -- reading a large structure may be quite slow (cf ReadP). type ReadS a = String -> [(a, String)] -- | File and directory names are values of type String, whose -- precise meaning is operating system dependent. Files can be opened, -- yielding a handle which can then be used to operate on the contents of -- that file. type FilePath = String -- | error stops execution and displays an error message. error :: forall (r :: RuntimeRep) (a :: TYPE r). HasCallStack => [Char] -> a -- | <math>. zipWith generalises zip by zipping with -- the function given as the first argument, instead of a tupling -- function. -- --
-- zipWith (,) xs ys == zip xs ys -- zipWith f [x1,x2,x3..] [y1,y2,y3..] == [f x1 y1, f x2 y2, f x3 y3..] ---- -- For example, zipWith (+) is applied to two lists to -- produce the list of corresponding sums: -- --
-- >>> zipWith (+) [1, 2, 3] [4, 5, 6] -- [5,7,9] ---- -- zipWith is right-lazy: -- --
-- >>> let f = undefined -- -- >>> zipWith f [] undefined -- [] ---- -- zipWith is capable of list fusion, but it is restricted to its -- first list argument and its resulting list. zipWith :: (a -> b -> c) -> [a] -> [b] -> [c] even :: Integral a => a -> Bool -- | An infix synonym for fmap. -- -- The name of this operator is an allusion to $. Note the -- similarities between their types: -- --
-- ($) :: (a -> b) -> a -> b -- (<$>) :: Functor f => (a -> b) -> f a -> f b ---- -- Whereas $ is function application, <$> is function -- application lifted over a Functor. -- --
-- >>> show <$> Nothing -- Nothing -- -- >>> show <$> Just 3 -- Just "3" ---- -- Convert from an Either Int Int to an -- Either Int String using show: -- --
-- >>> show <$> Left 17 -- Left 17 -- -- >>> show <$> Right 17 -- Right "17" ---- -- Double each element of a list: -- --
-- >>> (*2) <$> [1,2,3] -- [2,4,6] ---- -- Apply even to the second element of a pair: -- --
-- >>> even <$> (2,2) -- (2,True) --(<$>) :: Functor f => (a -> b) -> f a -> f b infixl 4 <$> -- | Application operator. This operator is redundant, since ordinary -- application (f x) means the same as (f $ x). -- However, $ has low, right-associative binding precedence, so it -- sometimes allows parentheses to be omitted; for example: -- --
-- f $ g $ h x = f (g (h x)) ---- -- It is also useful in higher-order situations, such as map -- ($ 0) xs, or zipWith ($) fs xs. -- -- Note that ($) is representation-polymorphic in its -- result type, so that foo $ True where foo :: Bool -- -> Int# is well-typed. ($) :: forall (r :: RuntimeRep) a (b :: TYPE r). (a -> b) -> a -> b infixr 0 $ -- | Extract the first component of a pair. fst :: (a, b) -> a -- | uncurry converts a curried function to a function on pairs. -- --
-- >>> uncurry (+) (1,2) -- 3 ---- --
-- >>> uncurry ($) (show, 1) -- "1" ---- --
-- >>> map (uncurry max) [(1,2), (3,4), (6,8)] -- [2,4,8] --uncurry :: (a -> b -> c) -> (a, b) -> c -- | Identity function. -- --
-- id x = x --id :: a -> a -- | The computation writeFile file str function writes the -- string str, to the file file. writeFile :: FilePath -> String -> IO () -- | Read a line from the standard input device (same as hGetLine -- stdin). getLine :: IO String -- | The same as putStr, but adds a newline character. putStrLn :: String -> IO () -- | <math>. filter, applied to a predicate and a list, -- returns the list of those elements that satisfy the predicate; i.e., -- --
-- filter p xs = [ x | x <- xs, p x] ---- --
-- >>> filter odd [1, 2, 3] -- [1,3] --filter :: (a -> Bool) -> [a] -> [a] -- | Left-associative fold of a structure, lazy in the accumulator. This is -- rarely what you want, but can work well for structures with efficient -- right-to-left sequencing and an operator that is lazy in its left -- argument. -- -- In the case of lists, foldl, when applied to a binary operator, -- a starting value (typically the left-identity of the operator), and a -- list, reduces the list using the binary operator, from left to right: -- --
-- foldl f z [x1, x2, ..., xn] == (...((z `f` x1) `f` x2) `f`...) `f` xn ---- -- Note that to produce the outermost application of the operator the -- entire input list must be traversed. Like all left-associative folds, -- foldl will diverge if given an infinite list. -- -- If you want an efficient strict left-fold, you probably want to use -- foldl' instead of foldl. The reason for this is that the -- latter does not force the inner results (e.g. z `f` x1 -- in the above example) before applying them to the operator (e.g. to -- (`f` x2)). This results in a thunk chain O(n) elements -- long, which then must be evaluated from the outside-in. -- -- For a general Foldable structure this should be semantically -- identical to: -- --
-- foldl f z = foldl f z . toList ---- --
-- >>> foldl (+) 42 [1,2,3,4] -- 52 ---- -- Though the result below is lazy, the input is reversed before -- prepending it to the initial accumulator, so corecursion begins only -- after traversing the entire input string. -- --
-- >>> foldl (\acc c -> c : acc) "abcd" "efgh" -- "hgfeabcd" ---- -- A left fold of a structure that is infinite on the right cannot -- terminate, even when for any finite input the fold just returns the -- initial accumulator: -- --
-- >>> foldl (\a _ -> a) 0 $ repeat 1 -- * Hangs forever * ---- -- WARNING: When it comes to lists, you always want to use either -- foldl' or foldr instead. foldl :: Foldable t => (b -> a -> b) -> b -> t a -> b -- | The sum function computes the sum of the numbers of a -- structure. -- --
-- >>> sum [] -- 0 ---- --
-- >>> sum [42] -- 42 ---- --
-- >>> sum [1..10] -- 55 ---- --
-- >>> sum [4.1, 2.0, 1.7] -- 7.8 ---- --
-- >>> sum [1..] -- * Hangs forever * --sum :: (Foldable t, Num a) => t a -> a -- | The product function computes the product of the numbers of a -- structure. -- --
-- >>> product [] -- 1 ---- --
-- >>> product [42] -- 42 ---- --
-- >>> product [1..10] -- 3628800 ---- --
-- >>> product [4.1, 2.0, 1.7] -- 13.939999999999998 ---- --
-- >>> product [1..] -- * Hangs forever * --product :: (Foldable t, Num a) => t a -> a -- | The largest element of a non-empty structure. -- -- This function is non-total and will raise a runtime exception if the -- structure happens to be empty. A structure that supports random access -- and maintains its elements in order should provide a specialised -- implementation to return the maximum in faster than linear time. -- --
-- >>> maximum [1..10] -- 10 ---- --
-- >>> maximum [] -- *** Exception: Prelude.maximum: empty list ---- --
-- >>> maximum Nothing -- *** Exception: maximum: empty structure ---- -- WARNING: This function is partial for possibly-empty structures like -- lists. maximum :: (Foldable t, Ord a) => t a -> a -- | The least element of a non-empty structure. -- -- This function is non-total and will raise a runtime exception if the -- structure happens to be empty. A structure that supports random access -- and maintains its elements in order should provide a specialised -- implementation to return the minimum in faster than linear time. -- --
-- >>> minimum [1..10] -- 1 ---- --
-- >>> minimum [] -- *** Exception: Prelude.minimum: empty list ---- --
-- >>> minimum Nothing -- *** Exception: minimum: empty structure ---- -- WARNING: This function is partial for possibly-empty structures like -- lists. minimum :: (Foldable t, Ord a) => t a -> a -- | Does the element occur in the structure? -- -- Note: elem is often used in infix form. -- --
-- >>> 3 `elem` [] -- False ---- --
-- >>> 3 `elem` [1,2] -- False ---- --
-- >>> 3 `elem` [1,2,3,4,5] -- True ---- -- For infinite structures, the default implementation of elem -- terminates if the sought-after value exists at a finite distance from -- the left side of the structure: -- --
-- >>> 3 `elem` [1..] -- True ---- --
-- >>> 3 `elem` ([4..] ++ [3]) -- * Hangs forever * --elem :: (Foldable t, Eq a) => a -> t a -> Bool infix 4 `elem` -- | cycle ties a finite list into a circular one, or equivalently, -- the infinite repetition of the original list. It is the identity on -- infinite lists. -- --
-- >>> cycle [] -- *** Exception: Prelude.cycle: empty list -- -- >>> cycle [42] -- [42,42,42,42,42,42,42,42,42,42... -- -- >>> cycle [2, 5, 7] -- [2,5,7,2,5,7,2,5,7,2,5,7... --cycle :: HasCallStack => [a] -> [a] -- | Append two lists, i.e., -- --
-- [x1, ..., xm] ++ [y1, ..., yn] == [x1, ..., xm, y1, ..., yn] -- [x1, ..., xm] ++ [y1, ...] == [x1, ..., xm, y1, ...] ---- -- If the first list is not finite, the result is the first list. -- -- WARNING: This function takes linear time in the number of elements of -- the first list. (++) :: [a] -> [a] -> [a] infixr 5 ++ -- | The value of seq a b is bottom if a is -- bottom, and otherwise equal to b. In other words, it -- evaluates the first argument a to weak head normal form -- (WHNF). seq is usually introduced to improve performance by -- avoiding unneeded laziness. -- -- A note on evaluation order: the expression seq a b -- does not guarantee that a will be evaluated before -- b. The only guarantee given by seq is that the both -- a and b will be evaluated before seq returns -- a value. In particular, this means that b may be evaluated -- before a. If you need to guarantee a specific order of -- evaluation, you must use the function pseq from the -- "parallel" package. seq :: forall {r :: RuntimeRep} a (b :: TYPE r). a -> b -> b infixr 0 `seq` -- | The concatenation of all the elements of a container of lists. -- --
-- >>> concat (Just [1, 2, 3]) -- [1,2,3] ---- --
-- >>> concat (Left 42) -- [] ---- --
-- >>> concat [[1, 2, 3], [4, 5], [6], []] -- [1,2,3,4,5,6] --concat :: Foldable t => t [a] -> [a] -- | <math>. zip takes two lists and returns a list of -- corresponding pairs. -- --
-- >>> zip [1, 2] ['a', 'b'] -- [(1,'a'),(2,'b')] ---- -- If one input list is shorter than the other, excess elements of the -- longer list are discarded, even if one of the lists is infinite: -- --
-- >>> zip [1] ['a', 'b'] -- [(1,'a')] -- -- >>> zip [1, 2] ['a'] -- [(1,'a')] -- -- >>> zip [] [1..] -- [] -- -- >>> zip [1..] [] -- [] ---- -- zip is right-lazy: -- --
-- >>> zip [] undefined -- [] -- -- >>> zip undefined [] -- *** Exception: Prelude.undefined -- ... ---- -- zip is capable of list fusion, but it is restricted to its -- first list argument and its resulting list. zip :: [a] -> [b] -> [(a, b)] -- | The print function outputs a value of any printable type to the -- standard output device. Printable types are those that are instances -- of class Show; print converts values to strings for -- output using the show operation and adds a newline. -- -- For example, a program to print the first 20 integers and their powers -- of 2 could be written as: -- --
-- main = print ([(n, 2^n) | n <- [0..19]]) --print :: Show a => a -> IO () -- | otherwise is defined as the value True. It helps to make -- guards more readable. eg. -- --
-- f x | x < 0 = ... -- | otherwise = ... --otherwise :: Bool -- | <math>. map f xs is the list obtained by -- applying f to each element of xs, i.e., -- --
-- map f [x1, x2, ..., xn] == [f x1, f x2, ..., f xn] -- map f [x1, x2, ...] == [f x1, f x2, ...] ---- --
-- >>> map (+1) [1, 2, 3] -- [2,3,4] --map :: (a -> b) -> [a] -> [b] -- | General coercion from Integral types. -- -- WARNING: This function performs silent truncation if the result type -- is not at least as big as the argument's type. fromIntegral :: (Integral a, Num b) => a -> b -- | General coercion to Fractional types. -- -- WARNING: This function goes through the Rational type, which -- does not have values for NaN for example. This means it does -- not round-trip. -- -- For Double it also behaves differently with or without -O0: -- --
-- Prelude> realToFrac nan -- With -O0 -- -Infinity -- Prelude> realToFrac nan -- NaN --realToFrac :: (Real a, Fractional b) => a -> b -- | raise a number to a non-negative integral power (^) :: (Num a, Integral b) => a -> b -> a infixr 8 ^ -- | Boolean "and", lazy in the second argument (&&) :: Bool -> Bool -> Bool infixr 3 && -- | Boolean "or", lazy in the second argument (||) :: Bool -> Bool -> Bool infixr 2 || -- | Boolean "not" not :: Bool -> Bool -- | A variant of error that does not produce a stack trace. errorWithoutStackTrace :: forall (r :: RuntimeRep) (a :: TYPE r). [Char] -> a -- | A special case of error. It is expected that compilers will -- recognize this and insert error messages which are more appropriate to -- the context in which undefined appears. undefined :: forall (r :: RuntimeRep) (a :: TYPE r). HasCallStack => a -- | Same as >>=, but with the arguments interchanged. (=<<) :: Monad m => (a -> m b) -> m a -> m b infixr 1 =<< -- | const x y always evaluates to x, ignoring its second -- argument. -- --
-- >>> const 42 "hello" -- 42 ---- --
-- >>> map (const 42) [0..3] -- [42,42,42,42] --const :: a -> b -> a -- | Function composition. (.) :: (b -> c) -> (a -> b) -> a -> c infixr 9 . -- | flip f takes its (first) two arguments in the reverse -- order of f. -- --
-- >>> flip (++) "hello" "world" -- "worldhello" --flip :: (a -> b -> c) -> b -> a -> c -- | Strict (call-by-value) application operator. It takes a function and -- an argument, evaluates the argument to weak head normal form (WHNF), -- then calls the function with that value. ($!) :: forall (r :: RuntimeRep) a (b :: TYPE r). (a -> b) -> a -> b infixr 0 $! -- | until p f yields the result of applying f -- until p holds. until :: (a -> Bool) -> (a -> a) -> a -> a -- | asTypeOf is a type-restricted version of const. It is -- usually used as an infix operator, and its typing forces its first -- argument (which is usually overloaded) to have the same type as the -- second. asTypeOf :: a -> a -> a -- | the same as flip (-). -- -- Because - is treated specially in the Haskell grammar, -- (- e) is not a section, but an application of -- prefix negation. However, (subtract -- exp) is equivalent to the disallowed section. subtract :: Num a => a -> a -> a -- | The maybe function takes a default value, a function, and a -- Maybe value. If the Maybe value is Nothing, the -- function returns the default value. Otherwise, it applies the function -- to the value inside the Just and returns the result. -- --
-- >>> maybe False odd (Just 3) -- True ---- --
-- >>> maybe False odd Nothing -- False ---- -- Read an integer from a string using readMaybe. If we succeed, -- return twice the integer; that is, apply (*2) to it. If -- instead we fail to parse an integer, return 0 by default: -- --
-- >>> import Text.Read ( readMaybe ) -- -- >>> maybe 0 (*2) (readMaybe "5") -- 10 -- -- >>> maybe 0 (*2) (readMaybe "") -- 0 ---- -- Apply show to a Maybe Int. If we have Just n, -- we want to show the underlying Int n. But if we have -- Nothing, we return the empty string instead of (for example) -- "Nothing": -- --
-- >>> maybe "" show (Just 5) -- "5" -- -- >>> maybe "" show Nothing -- "" --maybe :: b -> (a -> b) -> Maybe a -> b -- | <math>. scanl is similar to foldl, but returns a -- list of successive reduced values from the left: -- --
-- scanl f z [x1, x2, ...] == [z, z `f` x1, (z `f` x1) `f` x2, ...] ---- -- Note that -- --
-- last (scanl f z xs) == foldl f z xs ---- --
-- >>> scanl (+) 0 [1..4] -- [0,1,3,6,10] -- -- >>> scanl (+) 42 [] -- [42] -- -- >>> scanl (-) 100 [1..4] -- [100,99,97,94,90] -- -- >>> scanl (\reversedString nextChar -> nextChar : reversedString) "foo" ['a', 'b', 'c', 'd'] -- ["foo","afoo","bafoo","cbafoo","dcbafoo"] -- -- >>> scanl (+) 0 [1..] -- * Hangs forever * --scanl :: (b -> a -> b) -> b -> [a] -> [b] -- | <math>. scanl1 is a variant of scanl that has no -- starting value argument: -- --
-- scanl1 f [x1, x2, ...] == [x1, x1 `f` x2, ...] ---- --
-- >>> scanl1 (+) [1..4] -- [1,3,6,10] -- -- >>> scanl1 (+) [] -- [] -- -- >>> scanl1 (-) [1..4] -- [1,-1,-4,-8] -- -- >>> scanl1 (&&) [True, False, True, True] -- [True,False,False,False] -- -- >>> scanl1 (||) [False, False, True, True] -- [False,False,True,True] -- -- >>> scanl1 (+) [1..] -- * Hangs forever * --scanl1 :: (a -> a -> a) -> [a] -> [a] -- | <math>. scanr is the right-to-left dual of scanl. -- Note that the order of parameters on the accumulating function are -- reversed compared to scanl. Also note that -- --
-- head (scanr f z xs) == foldr f z xs. ---- --
-- >>> scanr (+) 0 [1..4] -- [10,9,7,4,0] -- -- >>> scanr (+) 42 [] -- [42] -- -- >>> scanr (-) 100 [1..4] -- [98,-97,99,-96,100] -- -- >>> scanr (\nextChar reversedString -> nextChar : reversedString) "foo" ['a', 'b', 'c', 'd'] -- ["abcdfoo","bcdfoo","cdfoo","dfoo","foo"] -- -- >>> force $ scanr (+) 0 [1..] -- *** Exception: stack overflow --scanr :: (a -> b -> b) -> b -> [a] -> [b] -- | <math>. scanr1 is a variant of scanr that has no -- starting value argument. -- --
-- >>> scanr1 (+) [1..4] -- [10,9,7,4] -- -- >>> scanr1 (+) [] -- [] -- -- >>> scanr1 (-) [1..4] -- [-2,3,-1,4] -- -- >>> scanr1 (&&) [True, False, True, True] -- [False,False,True,True] -- -- >>> scanr1 (||) [True, True, False, False] -- [True,True,False,False] -- -- >>> force $ scanr1 (+) [1..] -- *** Exception: stack overflow --scanr1 :: (a -> a -> a) -> [a] -> [a] -- | iterate f x returns an infinite list of repeated -- applications of f to x: -- --
-- iterate f x == [x, f x, f (f x), ...] ---- -- Note that iterate is lazy, potentially leading to thunk -- build-up if the consumer doesn't force each iterate. See -- iterate' for a strict variant of this function. -- --
-- >>> take 10 $ iterate not True -- [True,False,True,False... -- -- >>> take 10 $ iterate (+3) 42 -- [42,45,48,51,54,57,60,63... --iterate :: (a -> a) -> a -> [a] -- | repeat x is an infinite list, with x the -- value of every element. -- --
-- >>> repeat 17 -- [17,17,17,17,17,17,17,17,17... --repeat :: a -> [a] -- | replicate n x is a list of length n with -- x the value of every element. It is an instance of the more -- general genericReplicate, in which n may be of any -- integral type. -- --
-- >>> replicate 0 True -- [] -- -- >>> replicate (-1) True -- [] -- -- >>> replicate 4 True -- [True,True,True,True] --replicate :: Int -> a -> [a] -- | takeWhile, applied to a predicate p and a list -- xs, returns the longest prefix (possibly empty) of -- xs of elements that satisfy p. -- --
-- >>> takeWhile (< 3) [1,2,3,4,1,2,3,4] -- [1,2] -- -- >>> takeWhile (< 9) [1,2,3] -- [1,2,3] -- -- >>> takeWhile (< 0) [1,2,3] -- [] --takeWhile :: (a -> Bool) -> [a] -> [a] -- | dropWhile p xs returns the suffix remaining after -- takeWhile p xs. -- --
-- >>> dropWhile (< 3) [1,2,3,4,5,1,2,3] -- [3,4,5,1,2,3] -- -- >>> dropWhile (< 9) [1,2,3] -- [] -- -- >>> dropWhile (< 0) [1,2,3] -- [1,2,3] --dropWhile :: (a -> Bool) -> [a] -> [a] -- | take n, applied to a list xs, returns the -- prefix of xs of length n, or xs itself if -- n >= length xs. -- --
-- >>> take 5 "Hello World!" -- "Hello" -- -- >>> take 3 [1,2,3,4,5] -- [1,2,3] -- -- >>> take 3 [1,2] -- [1,2] -- -- >>> take 3 [] -- [] -- -- >>> take (-1) [1,2] -- [] -- -- >>> take 0 [1,2] -- [] ---- -- It is an instance of the more general genericTake, in which -- n may be of any integral type. take :: Int -> [a] -> [a] -- | drop n xs returns the suffix of xs after the -- first n elements, or [] if n >= length -- xs. -- --
-- >>> drop 6 "Hello World!" -- "World!" -- -- >>> drop 3 [1,2,3,4,5] -- [4,5] -- -- >>> drop 3 [1,2] -- [] -- -- >>> drop 3 [] -- [] -- -- >>> drop (-1) [1,2] -- [1,2] -- -- >>> drop 0 [1,2] -- [1,2] ---- -- It is an instance of the more general genericDrop, in which -- n may be of any integral type. drop :: Int -> [a] -> [a] -- | splitAt n xs returns a tuple where first element is -- xs prefix of length n and second element is the -- remainder of the list: -- --
-- >>> splitAt 6 "Hello World!"
-- ("Hello ","World!")
--
-- >>> splitAt 3 [1,2,3,4,5]
-- ([1,2,3],[4,5])
--
-- >>> splitAt 1 [1,2,3]
-- ([1],[2,3])
--
-- >>> splitAt 3 [1,2,3]
-- ([1,2,3],[])
--
-- >>> splitAt 4 [1,2,3]
-- ([1,2,3],[])
--
-- >>> splitAt 0 [1,2,3]
-- ([],[1,2,3])
--
-- >>> splitAt (-1) [1,2,3]
-- ([],[1,2,3])
--
--
-- It is equivalent to (take n xs, drop n xs) when
-- n is not _|_ (splitAt _|_ xs = _|_).
-- splitAt is an instance of the more general
-- genericSplitAt, in which n may be of any integral
-- type.
splitAt :: Int -> [a] -> ([a], [a])
-- | span, applied to a predicate p and a list xs,
-- returns a tuple where first element is longest prefix (possibly empty)
-- of xs of elements that satisfy p and second element
-- is the remainder of the list:
--
-- -- >>> span (< 3) [1,2,3,4,1,2,3,4] -- ([1,2],[3,4,1,2,3,4]) -- -- >>> span (< 9) [1,2,3] -- ([1,2,3],[]) -- -- >>> span (< 0) [1,2,3] -- ([],[1,2,3]) ---- -- span p xs is equivalent to (takeWhile p xs, -- dropWhile p xs) span :: (a -> Bool) -> [a] -> ([a], [a]) -- | break, applied to a predicate p and a list -- xs, returns a tuple where first element is longest prefix -- (possibly empty) of xs of elements that do not satisfy -- p and second element is the remainder of the list: -- --
-- >>> break (> 3) [1,2,3,4,1,2,3,4] -- ([1,2,3],[4,1,2,3,4]) -- -- >>> break (< 9) [1,2,3] -- ([],[1,2,3]) -- -- >>> break (> 9) [1,2,3] -- ([1,2,3],[]) ---- -- break p is equivalent to span (not . -- p). break :: (a -> Bool) -> [a] -> ([a], [a]) -- | reverse xs returns the elements of xs in -- reverse order. xs must be finite. -- --
-- >>> reverse [] -- [] -- -- >>> reverse [42] -- [42] -- -- >>> reverse [2,5,7] -- [7,5,2] -- -- >>> reverse [1..] -- * Hangs forever * --reverse :: [a] -> [a] -- | and returns the conjunction of a container of Bools. For the -- result to be True, the container must be finite; False, -- however, results from a False value finitely far from the left -- end. -- --
-- >>> and [] -- True ---- --
-- >>> and [True] -- True ---- --
-- >>> and [False] -- False ---- --
-- >>> and [True, True, False] -- False ---- --
-- >>> and (False : repeat True) -- Infinite list [False,True,True,True,... -- False ---- --
-- >>> and (repeat True) -- * Hangs forever * --and :: Foldable t => t Bool -> Bool -- | or returns the disjunction of a container of Bools. For the -- result to be False, the container must be finite; True, -- however, results from a True value finitely far from the left -- end. -- --
-- >>> or [] -- False ---- --
-- >>> or [True] -- True ---- --
-- >>> or [False] -- False ---- --
-- >>> or [True, True, False] -- True ---- --
-- >>> or (True : repeat False) -- Infinite list [True,False,False,False,... -- True ---- --
-- >>> or (repeat False) -- * Hangs forever * --or :: Foldable t => t Bool -> Bool -- | notElem is the negation of elem. -- --
-- >>> 3 `notElem` [] -- True ---- --
-- >>> 3 `notElem` [1,2] -- True ---- --
-- >>> 3 `notElem` [1,2,3,4,5] -- False ---- -- For infinite structures, notElem terminates if the value exists -- at a finite distance from the left side of the structure: -- --
-- >>> 3 `notElem` [1..] -- False ---- --
-- >>> 3 `notElem` ([4..] ++ [3]) -- * Hangs forever * --notElem :: (Foldable t, Eq a) => a -> t a -> Bool infix 4 `notElem` -- | <math>. lookup key assocs looks up a key in an -- association list. For the result to be Nothing, the list must -- be finite. -- --
-- >>> lookup 2 [] -- Nothing -- -- >>> lookup 2 [(1, "first")] -- Nothing -- -- >>> lookup 2 [(1, "first"), (2, "second"), (3, "third")] -- Just "second" --lookup :: Eq a => a -> [(a, b)] -> Maybe b -- | Map a function over all the elements of a container and concatenate -- the resulting lists. -- --
-- >>> concatMap (take 3) [[1..], [10..], [100..], [1000..]] -- [1,2,3,10,11,12,100,101,102,1000,1001,1002] ---- --
-- >>> concatMap (take 3) (Just [1..]) -- [1,2,3] --concatMap :: Foldable t => (a -> [b]) -> t a -> [b] -- | List index (subscript) operator, starting from 0. It is an instance of -- the more general genericIndex, which takes an index of any -- integral type. -- --
-- >>> ['a', 'b', 'c'] !! 0 -- 'a' -- -- >>> ['a', 'b', 'c'] !! 2 -- 'c' -- -- >>> ['a', 'b', 'c'] !! 3 -- *** Exception: Prelude.!!: index too large -- -- >>> ['a', 'b', 'c'] !! (-1) -- *** Exception: Prelude.!!: negative index ---- -- WARNING: This function is partial. You can use atMay instead. (!!) :: HasCallStack => [a] -> Int -> a infixl 9 !! -- | zip3 takes three lists and returns a list of triples, analogous -- to zip. It is capable of list fusion, but it is restricted to -- its first list argument and its resulting list. zip3 :: [a] -> [b] -> [c] -> [(a, b, c)] -- | The zipWith3 function takes a function which combines three -- elements, as well as three lists and returns a list of the function -- applied to corresponding elements, analogous to zipWith. It is -- capable of list fusion, but it is restricted to its first list -- argument and its resulting list. -- --
-- zipWith3 (,,) xs ys zs == zip3 xs ys zs -- zipWith3 f [x1,x2,x3..] [y1,y2,y3..] [z1,z2,z3..] == [f x1 y1 z1, f x2 y2 z2, f x3 y3 z3..] --zipWith3 :: (a -> b -> c -> d) -> [a] -> [b] -> [c] -> [d] -- | unzip transforms a list of pairs into a list of first -- components and a list of second components. -- --
-- >>> unzip [] -- ([],[]) -- -- >>> unzip [(1, 'a'), (2, 'b')] -- ([1,2],"ab") --unzip :: [(a, b)] -> ([a], [b]) -- | The unzip3 function takes a list of triples and returns three -- lists, analogous to unzip. -- --
-- >>> unzip3 [] -- ([],[],[]) -- -- >>> unzip3 [(1, 'a', True), (2, 'b', False)] -- ([1,2],"ab",[True,False]) --unzip3 :: [(a, b, c)] -> ([a], [b], [c]) -- | equivalent to showsPrec with a precedence of 0. shows :: Show a => a -> ShowS -- | utility function converting a Char to a show function that -- simply prepends the character unchanged. showChar :: Char -> ShowS -- | utility function converting a String to a show function that -- simply prepends the string unchanged. showString :: String -> ShowS -- | utility function that surrounds the inner show function with -- parentheses when the Bool parameter is True. showParen :: Bool -> ShowS -> ShowS odd :: Integral a => a -> Bool -- | raise a number to an integral power (^^) :: (Fractional a, Integral b) => a -> b -> a infixr 8 ^^ -- | gcd x y is the non-negative factor of both x -- and y of which every common factor of x and -- y is also a factor; for example gcd 4 2 = 2, -- gcd (-4) 6 = 2, gcd 0 4 = 4. -- gcd 0 0 = 0. (That is, the common divisor -- that is "greatest" in the divisibility preordering.) -- -- Note: Since for signed fixed-width integer types, abs -- minBound < 0, the result may be negative if one of the -- arguments is minBound (and necessarily is if the other -- is 0 or minBound) for such types. gcd :: Integral a => a -> a -> a -- | lcm x y is the smallest positive integer that both -- x and y divide. lcm :: Integral a => a -> a -> a -- | Extract the second component of a pair. snd :: (a, b) -> b -- | curry converts an uncurried function to a curried function. -- --
-- >>> curry fst 1 2 -- 1 --curry :: ((a, b) -> c) -> a -> b -> c -- | The lex function reads a single lexeme from the input, -- discarding initial white space, and returning the characters that -- constitute the lexeme. If the input string contains only white space, -- lex returns a single successful `lexeme' consisting of the -- empty string. (Thus lex "" = [("","")].) If there is -- no legal lexeme at the beginning of the input string, lex fails -- (i.e. returns []). -- -- This lexer is not completely faithful to the Haskell lexical syntax in -- the following respects: -- --
-- >>> let s = Left "foo" :: Either String Int -- -- >>> let n = Right 3 :: Either String Int -- -- >>> either length (*2) s -- 3 -- -- >>> either length (*2) n -- 6 --either :: (a -> c) -> (b -> c) -> Either a b -> c -- | equivalent to readsPrec with a precedence of 0. reads :: Read a => ReadS a -- | Evaluate each monadic action in the structure from left to right, and -- ignore the results. For a version that doesn't ignore the results see -- sequence. -- -- sequence_ is just like sequenceA_, but specialised to -- monadic actions. sequence_ :: (Foldable t, Monad m) => t (m a) -> m () -- | Splits the argument into a list of lines stripped of their -- terminating \n characters. The \n terminator is -- optional in a final non-empty line of the argument string. -- -- For example: -- --
-- >>> lines "" -- empty input contains no lines -- [] -- -- >>> lines "\n" -- single empty line -- [""] -- -- >>> lines "one" -- single unterminated line -- ["one"] -- -- >>> lines "one\n" -- single non-empty line -- ["one"] -- -- >>> lines "one\n\n" -- second line is empty -- ["one",""] -- -- >>> lines "one\ntwo" -- second line is unterminated -- ["one","two"] -- -- >>> lines "one\ntwo\n" -- two non-empty lines -- ["one","two"] ---- -- When the argument string is empty, or ends in a \n character, -- it can be recovered by passing the result of lines to the -- unlines function. Otherwise, unlines appends the missing -- terminating \n. This makes unlines . lines -- idempotent: -- --
-- (unlines . lines) . (unlines . lines) = (unlines . lines) --lines :: String -> [String] -- | Appends a \n character to each input string, then -- concatenates the results. Equivalent to foldMap (s -> -- s ++ "\n"). -- --
-- >>> unlines ["Hello", "World", "!"] -- "Hello\nWorld\n!\n" ---- -- Note that unlines . lines /= -- id when the input is not \n-terminated: -- --
-- >>> unlines . lines $ "foo\nbar" -- "foo\nbar\n" --unlines :: [String] -> String -- | words breaks a string up into a list of words, which were -- delimited by white space (as defined by isSpace). This function -- trims any white spaces at the beginning and at the end. -- --
-- >>> words "Lorem ipsum\ndolor" -- ["Lorem","ipsum","dolor"] -- -- >>> words " foo bar " -- ["foo","bar"] --words :: String -> [String] -- | unwords joins words with separating spaces (U+0020 SPACE). -- --
-- >>> unwords ["Lorem", "ipsum", "dolor"] -- "Lorem ipsum dolor" ---- -- unwords is neither left nor right inverse of words: -- --
-- >>> words (unwords [" "]) -- [] -- -- >>> unwords (words "foo\nbar") -- "foo bar" --unwords :: [String] -> String -- | Construct an IOException value with a string describing the -- error. The fail method of the IO instance of the -- Monad class raises a userError, thus: -- --
-- instance Monad IO where -- ... -- fail s = ioError (userError s) --userError :: String -> IOError -- | Raise an IOException in the IO monad. ioError :: IOError -> IO a -- | Write a character to the standard output device (same as -- hPutChar stdout). putChar :: Char -> IO () -- | Write a string to the standard output device (same as hPutStr -- stdout). putStr :: String -> IO () -- | Read a character from the standard input device (same as -- hGetChar stdin). getChar :: IO Char -- | The getContents operation returns all user input as a single -- string, which is read lazily as it is needed (same as -- hGetContents stdin). getContents :: IO String -- | The interact function takes a function of type -- String->String as its argument. The entire input from the -- standard input device is passed to this function as its argument, and -- the resulting string is output on the standard output device. interact :: (String -> String) -> IO () -- | The readFile function reads a file and returns the contents of -- the file as a string. The file is read lazily, on demand, as with -- getContents. readFile :: FilePath -> IO String -- | The computation appendFile file str function appends -- the string str, to the file file. -- -- Note that writeFile and appendFile write a literal -- string to a file. To write a value of any printable type, as with -- print, use the show function to convert the value to a -- string first. -- --
-- main = appendFile "squares" (show [(x,x*x) | x <- [0,0.1..2]]) --appendFile :: FilePath -> String -> IO () -- | The readLn function combines getLine and readIO. readLn :: Read a => IO a -- | The readIO function is similar to read except that it -- signals parse failure to the IO monad instead of terminating -- the program. readIO :: Read a => String -> IO a -- | The class of semigroups (types with an associative binary operation). -- -- Instances should satisfy the following: -- -- -- -- You can alternatively define sconcat instead of -- (<>), in which case the laws are: -- --
-- >>> [1,2,3] <> [4,5,6] -- [1,2,3,4,5,6] --(<>) :: Semigroup a => a -> a -> a infixr 6 <> -- | Generically generate a Semigroup (<>) operation -- for any type implementing Generic. This operation will append -- two values by point-wise appending their component fields. It is only -- defined for product types. -- --
-- gmappend a (gmappend b c) = gmappend (gmappend a b) c --gmappend :: (Generic a, GSemigroup (Rep a)) => a -> a -> a -- | Generically generate a Monoid mempty for any -- product-like type implementing Generic. -- -- It is only defined for product types. -- --
-- gmappend gmempty a = a = gmappend a gmempty --gmempty :: (Generic a, GMonoid (Rep a)) => a -- | The class Typeable allows a concrete representation of a type -- to be calculated. class () => Typeable (a :: k) -- | A quantified type representation. type TypeRep = SomeTypeRep -- | Takes a value of type a and returns a concrete representation -- of that type. typeRep :: forall {k} proxy (a :: k). Typeable a => proxy a -> TypeRep -- | The Data class comprehends a fundamental primitive -- gfoldl for folding over constructor applications, say terms. -- This primitive can be instantiated in several ways to map over the -- immediate subterms of a term; see the gmap combinators later -- in this class. Indeed, a generic programmer does not necessarily need -- to use the ingenious gfoldl primitive but rather the intuitive -- gmap combinators. The gfoldl primitive is completed by -- means to query top-level constructors, to turn constructor -- representations into proper terms, and to list all possible datatype -- constructors. This completion allows us to serve generic programming -- scenarios like read, show, equality, term generation. -- -- The combinators gmapT, gmapQ, gmapM, etc are all -- provided with default definitions in terms of gfoldl, leaving -- open the opportunity to provide datatype-specific definitions. (The -- inclusion of the gmap combinators as members of class -- Data allows the programmer or the compiler to derive -- specialised, and maybe more efficient code per datatype. Note: -- gfoldl is more higher-order than the gmap combinators. -- This is subject to ongoing benchmarking experiments. It might turn out -- that the gmap combinators will be moved out of the class -- Data.) -- -- Conceptually, the definition of the gmap combinators in terms -- of the primitive gfoldl requires the identification of the -- gfoldl function arguments. Technically, we also need to -- identify the type constructor c for the construction of the -- result type from the folded term type. -- -- In the definition of gmapQx combinators, we use -- phantom type constructors for the c in the type of -- gfoldl because the result type of a query does not involve the -- (polymorphic) type of the term argument. In the definition of -- gmapQl we simply use the plain constant type constructor -- because gfoldl is left-associative anyway and so it is readily -- suited to fold a left-associative binary operation over the immediate -- subterms. In the definition of gmapQr, extra effort is needed. We use -- a higher-order accumulation trick to mediate between left-associative -- constructor application vs. right-associative binary operation (e.g., -- (:)). When the query is meant to compute a value of type -- r, then the result type within generic folding is r -> -- r. So the result of folding is a function to which we finally -- pass the right unit. -- -- With the -XDeriveDataTypeable option, GHC can generate -- instances of the Data class automatically. For example, given -- the declaration -- --
-- data T a b = C1 a b | C2 deriving (Typeable, Data) ---- -- GHC will generate an instance that is equivalent to -- --
-- instance (Data a, Data b) => Data (T a b) where -- gfoldl k z (C1 a b) = z C1 `k` a `k` b -- gfoldl k z C2 = z C2 -- -- gunfold k z c = case constrIndex c of -- 1 -> k (k (z C1)) -- 2 -> z C2 -- -- toConstr (C1 _ _) = con_C1 -- toConstr C2 = con_C2 -- -- dataTypeOf _ = ty_T -- -- con_C1 = mkConstr ty_T "C1" [] Prefix -- con_C2 = mkConstr ty_T "C2" [] Prefix -- ty_T = mkDataType "Module.T" [con_C1, con_C2] ---- -- This is suitable for datatypes that are exported transparently. class Typeable a => Data a -- | Representable types of kind *. This class is derivable in GHC -- with the DeriveGeneric flag on. -- -- A Generic instance must satisfy the following laws: -- --
-- from . to ≡ id -- to . from ≡ id --class () => Generic a -- | A class of types that can be fully evaluated. class () => NFData a -- | rnf should reduce its argument to normal form (that is, fully -- evaluate all sub-components), and then return (). -- --
-- {-# LANGUAGE DeriveGeneric #-}
--
-- import GHC.Generics (Generic, Generic1)
-- import Control.DeepSeq
--
-- data Foo a = Foo a String
-- deriving (Eq, Generic, Generic1)
--
-- instance NFData a => NFData (Foo a)
-- instance NFData1 Foo
--
-- data Colour = Red | Green | Blue
-- deriving Generic
--
-- instance NFData Colour
--
--
-- Starting with GHC 7.10, the example above can be written more
-- concisely by enabling the new DeriveAnyClass extension:
--
--
-- {-# 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)
--
--
-- -- rnf a = seq a () ---- -- However, starting with deepseq-1.4.0.0, the default -- implementation is based on DefaultSignatures allowing for -- more accurate auto-derived NFData instances. If you need the -- previously used exact default rnf method implementation -- semantics, use -- --
-- instance NFData Colour where rnf x = seq x () ---- -- or alternatively -- --
-- instance NFData Colour where rnf = rwhnf ---- -- or -- --
-- {-# LANGUAGE BangPatterns #-}
-- instance NFData Colour where rnf !_ = ()
--
rnf :: NFData a => a -> ()
-- | GHC.Generics-based rnf implementation
--
-- This is needed in order to support deepseq < 1.4 which
-- didn't have a Generic-based default rnf implementation
-- yet.
--
-- In order to define instances, use e.g.
--
-- -- instance NFData MyType where rnf = genericRnf ---- -- The implementation has been taken from deepseq-1.4.2's -- default rnf implementation. genericRnf :: (Generic a, GNFData (Rep a)) => a -> () -- | The Binary class provides put and get, methods to -- encode and decode a Haskell value to a lazy ByteString. It -- mirrors the Read and Show 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 PutM and Get -- primitives directly. -- -- Instances of Binary should satisfy the following property: -- --
-- decode . encode == id ---- -- That is, the get and put 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 -- | Decode a value in the Get monad get :: Binary 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 Structure. -- -- For regular data types Structured can be derived generically. -- --
-- data Record = Record { a :: Int, b :: Bool, c :: [Char] } deriving (Generic)
-- instance Structured Record
--
class Typeable a => Structured a
-- | A monoid on applicative functors.
--
-- If defined, some and many should be the least solutions
-- of the equations:
--
--
class Applicative f => Alternative (f :: Type -> Type)
-- | The identity of <|>
empty :: Alternative f => f a
-- | An associative binary operation
(<|>) :: Alternative f => f a -> f a -> f a
-- | One or more.
some :: Alternative f => f a -> f [a]
-- | Zero or more.
many :: Alternative f => f a -> f [a]
infixl 3 <|>
-- | Monads that also support choice and failure.
class (Alternative m, Monad m) => MonadPlus (m :: Type -> Type)
-- | The identity of mplus. It should also satisfy the equations
--
-- -- mzero >>= f = mzero -- v >> mzero = mzero ---- -- The default definition is -- --
-- mzero = empty --mzero :: MonadPlus m => m a -- | An associative operation. The default definition is -- --
-- mplus = (<|>) --mplus :: MonadPlus m => m a -> m a -> m a -- | Class for string-like datastructures; used by the overloaded string -- extension (-XOverloadedStrings in GHC). class () => IsString a fromString :: IsString a => String -> a -- | A Map from keys k to values a. -- -- The Semigroup operation for Map is union, which -- prefers values from the left operand. If m1 maps a key -- k to a value a1, and m2 maps the same key -- to a different value a2, then their union m1 <> -- m2 maps k to a1. data () => Map k a -- | A set of values a. data () => Set a data NonEmptySet a -- | Identity functor and monad. (a non-strict monad) newtype () => Identity a Identity :: a -> Identity a [runIdentity] :: Identity a -> a -- | Proxy is a type that holds no data, but has a phantom parameter -- of arbitrary type (or even kind). Its use is to provide type -- information, even though there is no value available of that type (or -- it may be too costly to create one). -- -- Historically, Proxy :: Proxy a is a safer -- alternative to the undefined :: a idiom. -- --
-- >>> Proxy :: Proxy (Void, Int -> Int) -- Proxy ---- -- Proxy can even hold types of higher kinds, -- --
-- >>> Proxy :: Proxy Either -- Proxy ---- --
-- >>> Proxy :: Proxy Functor -- Proxy ---- --
-- >>> Proxy :: Proxy complicatedStructure -- Proxy --data () => Proxy (t :: k) Proxy :: Proxy (t :: k) -- | The Const functor. newtype () => Const a (b :: k) Const :: a -> Const a (b :: k) [getConst] :: Const a (b :: k) -> a -- | Uninhabited data type data () => Void -- | Partitions a list of Either into two lists. All the Left -- elements are extracted, in order, to the first component of the -- output. Similarly the Right elements are extracted to the -- second component of the output. -- --
-- >>> let list = [ Left "foo", Right 3, Left "bar", Right 7, Left "baz" ] -- -- >>> partitionEithers list -- (["foo","bar","baz"],[3,7]) ---- -- The pair returned by partitionEithers x should be the -- same pair as (lefts x, rights x): -- --
-- >>> let list = [ Left "foo", Right 3, Left "bar", Right 7, Left "baz" ] -- -- >>> partitionEithers list == (lefts list, rights list) -- True --partitionEithers :: [Either a b] -> ([a], [b]) -- | The catMaybes function takes a list of Maybes and -- returns a list of all the Just values. -- --
-- >>> catMaybes [Just 1, Nothing, Just 3] -- [1,3] ---- -- When constructing a list of Maybe values, catMaybes can -- be used to return all of the "success" results (if the list is the -- result of a map, then mapMaybe would be more -- appropriate): -- --
-- >>> import Text.Read ( readMaybe ) -- -- >>> [readMaybe x :: Maybe Int | x <- ["1", "Foo", "3"] ] -- [Just 1,Nothing,Just 3] -- -- >>> catMaybes $ [readMaybe x :: Maybe Int | x <- ["1", "Foo", "3"] ] -- [1,3] --catMaybes :: [Maybe a] -> [a] -- | The mapMaybe function is a version of map which can -- throw out elements. In particular, the functional argument returns -- something of type Maybe b. If this is Nothing, -- no element is added on to the result list. If it is Just -- b, then b is included in the result list. -- --
-- >>> import Text.Read ( readMaybe ) -- -- >>> let readMaybeInt = readMaybe :: String -> Maybe Int -- -- >>> mapMaybe readMaybeInt ["1", "Foo", "3"] -- [1,3] -- -- >>> catMaybes $ map readMaybeInt ["1", "Foo", "3"] -- [1,3] ---- -- If we map the Just constructor, the entire list should be -- returned: -- --
-- >>> mapMaybe Just [1,2,3] -- [1,2,3] --mapMaybe :: (a -> Maybe b) -> [a] -> [b] -- | The fromMaybe function takes a default value and a Maybe -- value. If the Maybe is Nothing, it returns the default -- value; otherwise, it returns the value contained in the Maybe. -- --
-- >>> fromMaybe "" (Just "Hello, World!") -- "Hello, World!" ---- --
-- >>> fromMaybe "" Nothing -- "" ---- -- Read an integer from a string using readMaybe. If we fail to -- parse an integer, we want to return 0 by default: -- --
-- >>> import Text.Read ( readMaybe ) -- -- >>> fromMaybe 0 (readMaybe "5") -- 5 -- -- >>> fromMaybe 0 (readMaybe "") -- 0 --fromMaybe :: a -> Maybe a -> a -- | The maybeToList function returns an empty list when given -- Nothing or a singleton list when given Just. -- --
-- >>> maybeToList (Just 7) -- [7] ---- --
-- >>> maybeToList Nothing -- [] ---- -- One can use maybeToList to avoid pattern matching when combined -- with a function that (safely) works on lists: -- --
-- >>> import Text.Read ( readMaybe ) -- -- >>> sum $ maybeToList (readMaybe "3") -- 3 -- -- >>> sum $ maybeToList (readMaybe "") -- 0 --maybeToList :: Maybe a -> [a] -- | The listToMaybe function returns Nothing on an empty -- list or Just a where a is the first element -- of the list. -- --
-- >>> listToMaybe [] -- Nothing ---- --
-- >>> listToMaybe [9] -- Just 9 ---- --
-- >>> listToMaybe [1,2,3] -- Just 1 ---- -- Composing maybeToList with listToMaybe should be the -- identity on singleton/empty lists: -- --
-- >>> maybeToList $ listToMaybe [5] -- [5] -- -- >>> maybeToList $ listToMaybe [] -- [] ---- -- But not on lists with more than one element: -- --
-- >>> maybeToList $ listToMaybe [1,2,3] -- [1] --listToMaybe :: [a] -> Maybe a -- | The isNothing function returns True iff its argument is -- Nothing. -- --
-- >>> isNothing (Just 3) -- False ---- --
-- >>> isNothing (Just ()) -- False ---- --
-- >>> isNothing Nothing -- True ---- -- Only the outer constructor is taken into consideration: -- --
-- >>> isNothing (Just Nothing) -- False --isNothing :: Maybe a -> Bool -- | The isJust function returns True iff its argument is of -- the form Just _. -- --
-- >>> isJust (Just 3) -- True ---- --
-- >>> isJust (Just ()) -- True ---- --
-- >>> isJust Nothing -- False ---- -- Only the outer constructor is taken into consideration: -- --
-- >>> isJust (Just Nothing) -- True --isJust :: Maybe a -> Bool -- | The unfoldr function is a `dual' to foldr: while -- foldr reduces a list to a summary value, unfoldr builds -- a list from a seed value. The function takes the element and returns -- Nothing if it is done producing the list or returns Just -- (a,b), in which case, a is a prepended to the list -- and b is used as the next element in a recursive call. For -- example, -- --
-- iterate f == unfoldr (\x -> Just (x, f x)) ---- -- In some cases, unfoldr can undo a foldr operation: -- --
-- unfoldr f' (foldr f z xs) == xs ---- -- if the following holds: -- --
-- f' (f x y) = Just (x,y) -- f' z = Nothing ---- -- A simple use of unfoldr: -- --
-- >>> unfoldr (\b -> if b == 0 then Nothing else Just (b, b-1)) 10 -- [10,9,8,7,6,5,4,3,2,1] --unfoldr :: (b -> Maybe (a, b)) -> b -> [a] -- | <math>. The isPrefixOf function takes two lists and -- returns True iff the first list is a prefix of the second. -- --
-- >>> "Hello" `isPrefixOf` "Hello World!" -- True -- -- >>> "Hello" `isPrefixOf` "Wello Horld!" -- False ---- -- For the result to be True, the first list must be finite; -- False, however, results from any mismatch: -- --
-- >>> [0..] `isPrefixOf` [1..] -- False -- -- >>> [0..] `isPrefixOf` [0..99] -- False -- -- >>> [0..99] `isPrefixOf` [0..] -- True -- -- >>> [0..] `isPrefixOf` [0..] -- * Hangs forever * --isPrefixOf :: Eq a => [a] -> [a] -> Bool -- | The isSuffixOf function takes two lists and returns True -- iff the first list is a suffix of the second. -- --
-- >>> "ld!" `isSuffixOf` "Hello World!" -- True -- -- >>> "World" `isSuffixOf` "Hello World!" -- False ---- -- The second list must be finite; however the first list may be -- infinite: -- --
-- >>> [0..] `isSuffixOf` [0..99] -- False -- -- >>> [0..99] `isSuffixOf` [0..] -- * Hangs forever * --isSuffixOf :: Eq a => [a] -> [a] -> Bool -- | intercalate xs xss is equivalent to (concat -- (intersperse xs xss)). It inserts the list xs in -- between the lists in xss and concatenates the result. -- --
-- >>> intercalate ", " ["Lorem", "ipsum", "dolor"] -- "Lorem, ipsum, dolor" --intercalate :: [a] -> [[a]] -> [a] -- | <math>. The intersperse function takes an element and a -- list and `intersperses' that element between the elements of the list. -- For example, -- --
-- >>> intersperse ',' "abcde" -- "a,b,c,d,e" --intersperse :: a -> [a] -> [a] -- | The sort function implements a stable sorting algorithm. It is -- a special case of sortBy, which allows the programmer to supply -- their own comparison function. -- -- Elements are arranged from lowest to highest, keeping duplicates in -- the order they appeared in the input. -- --
-- >>> sort [1,6,4,3,2,5] -- [1,2,3,4,5,6] ---- -- The argument must be finite. sort :: Ord a => [a] -> [a] -- | The sortBy function is the non-overloaded version of -- sort. The argument must be finite. -- --
-- >>> sortBy (\(a,_) (b,_) -> compare a b) [(2, "world"), (4, "!"), (1, "Hello")] -- [(1,"Hello"),(2,"world"),(4,"!")] ---- -- The supplied comparison relation is supposed to be reflexive and -- antisymmetric, otherwise, e. g., for _ _ -> GT, the -- ordered list simply does not exist. The relation is also expected to -- be transitive: if it is not then sortBy might fail to find an -- ordered permutation, even if it exists. sortBy :: (a -> a -> Ordering) -> [a] -> [a] -- | <math>. The nub function removes duplicate elements from -- a list. In particular, it keeps only the first occurrence of each -- element. (The name nub means `essence'.) It is a special case -- of nubBy, which allows the programmer to supply their own -- equality test. -- --
-- >>> nub [1,2,3,4,3,2,1,2,4,3,5] -- [1,2,3,4,5] ---- -- If the order of outputs does not matter and there exists instance -- Ord a, it's faster to use map -- Data.List.NonEmpty.head . -- Data.List.NonEmpty.group . sort, which takes -- only <math> time. nub :: Eq a => [a] -> [a] -- | The nubBy function behaves just like nub, except it uses -- a user-supplied equality predicate instead of the overloaded == -- function. -- --
-- >>> nubBy (\x y -> mod x 3 == mod y 3) [1,2,4,5,6] -- [1,2,6] --nubBy :: (a -> a -> Bool) -> [a] -> [a] -- | The partition function takes a predicate and a list, and -- returns the pair of lists of elements which do and do not satisfy the -- predicate, respectively; i.e., -- --
-- partition p xs == (filter p xs, filter (not . p) xs) ---- --
-- >>> partition (`elem` "aeiou") "Hello World!"
-- ("eoo","Hll Wrld!")
--
partition :: (a -> Bool) -> [a] -> ([a], [a])
-- | The dropWhileEnd function drops the largest suffix of a list in
-- which the given predicate holds for all elements. For example:
--
-- -- >>> dropWhileEnd isSpace "foo\n" -- "foo" ---- --
-- >>> dropWhileEnd isSpace "foo bar" -- "foo bar" ---- --
-- dropWhileEnd isSpace ("foo\n" ++ undefined) == "foo" ++ undefined
--
dropWhileEnd :: (a -> Bool) -> [a] -> [a]
-- | Non-empty (and non-strict) list type.
data () => NonEmpty a
(:|) :: a -> [a] -> NonEmpty a
infixr 5 :|
-- | nonEmpty efficiently turns a normal list into a NonEmpty
-- stream, producing Nothing 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]
-- | The Foldable class represents data structures that can be reduced to a
-- summary value one element at a time. Strict left-associative folds are
-- a good fit for space-efficient reduction, while lazy right-associative
-- folds are a good fit for corecursive iteration, or for folds that
-- short-circuit after processing an initial subsequence of the
-- structure's elements.
--
-- Instances can be derived automatically by enabling the
-- DeriveFoldable extension. For example, a derived instance for
-- a binary tree might be:
--
--
-- {-# LANGUAGE DeriveFoldable #-}
-- data Tree a = Empty
-- | Leaf a
-- | Node (Tree a) a (Tree a)
-- deriving Foldable
--
--
-- A more detailed description can be found in the Overview
-- section of Data.Foldable#overview.
--
-- For the class laws see the Laws section of
-- Data.Foldable#laws.
class () => Foldable (t :: Type -> Type)
-- | Map each element of the structure into a monoid, and combine the
-- results with (<>). This fold is
-- right-associative and lazy in the accumulator. For strict
-- left-associative folds consider foldMap' instead.
--
--
-- >>> foldMap Sum [1, 3, 5]
-- Sum {getSum = 9}
--
--
--
-- >>> foldMap Product [1, 3, 5]
-- Product {getProduct = 15}
--
--
-- -- >>> foldMap (replicate 3) [1, 2, 3] -- [1,1,1,2,2,2,3,3,3] ---- -- When a Monoid's (<>) is lazy in its second -- argument, foldMap can return a result even from an unbounded -- structure. For example, lazy accumulation enables -- Data.ByteString.Builder to efficiently serialise large data -- structures and produce the output incrementally: -- --
-- >>> import qualified Data.ByteString.Lazy as L -- -- >>> import qualified Data.ByteString.Builder as B -- -- >>> let bld :: Int -> B.Builder; bld i = B.intDec i <> B.word8 0x20 -- -- >>> let lbs = B.toLazyByteString $ foldMap bld [0..] -- -- >>> L.take 64 lbs -- "0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24" --foldMap :: (Foldable t, Monoid m) => (a -> m) -> t a -> m -- | Right-associative fold of a structure, lazy in the accumulator. -- -- In the case of lists, foldr, when applied to a binary operator, -- a starting value (typically the right-identity of the operator), and a -- list, reduces the list using the binary operator, from right to left: -- --
-- foldr f z [x1, x2, ..., xn] == x1 `f` (x2 `f` ... (xn `f` z)...) ---- -- Note that since the head of the resulting expression is produced by an -- application of the operator to the first element of the list, given an -- operator lazy in its right argument, foldr can produce a -- terminating expression from an unbounded list. -- -- For a general Foldable structure this should be semantically -- identical to, -- --
-- foldr f z = foldr f z . toList ---- --
-- >>> foldr (||) False [False, True, False] -- True ---- --
-- >>> foldr (||) False [] -- False ---- --
-- >>> foldr (\c acc -> acc ++ [c]) "foo" ['a', 'b', 'c', 'd'] -- "foodcba" ---- --
-- >>> foldr (||) False (True : repeat False) -- True ---- -- But the following doesn't terminate: -- --
-- >>> foldr (||) False (repeat False ++ [True]) -- * Hangs forever * ---- --
-- >>> take 5 $ foldr (\i acc -> i : fmap (+3) acc) [] (repeat 1) -- [1,4,7,10,13] --foldr :: Foldable t => (a -> b -> b) -> b -> t a -> b -- | Test whether the structure is empty. The default implementation is -- Left-associative and lazy in both the initial element and the -- accumulator. Thus optimised for structures where the first element can -- be accessed in constant time. Structures where this is not the case -- should have a non-default implementation. -- --
-- >>> null [] -- True ---- --
-- >>> null [1] -- False ---- -- null is expected to terminate even for infinite structures. The -- default implementation terminates provided the structure is bounded on -- the left (there is a leftmost element). -- --
-- >>> null [1..] -- False --null :: Foldable t => t a -> Bool -- | Returns the size/length of a finite structure as an Int. The -- default implementation just counts elements starting with the -- leftmost. Instances for structures that can compute the element count -- faster than via element-by-element counting, should provide a -- specialised implementation. -- --
-- >>> length [] -- 0 ---- --
-- >>> length ['a', 'b', 'c'] -- 3 -- -- >>> length [1..] -- * Hangs forever * --length :: Foldable t => t a -> Int -- | The find function takes a predicate and a structure and returns -- the leftmost element of the structure matching the predicate, or -- Nothing if there is no such element. -- --
-- >>> find (> 42) [0, 5..] -- Just 45 ---- --
-- >>> find (> 12) [1..7] -- Nothing --find :: Foldable t => (a -> Bool) -> t a -> Maybe a -- | Left-associative fold of a structure but with strict application of -- the operator. -- -- This ensures that each step of the fold is forced to Weak Head Normal -- Form before being applied, avoiding the collection of thunks that -- would otherwise occur. This is often what you want to strictly reduce -- a finite structure to a single strict result (e.g. sum). -- -- For a general Foldable structure this should be semantically -- identical to, -- --
-- foldl' f z = foldl' f z . toList --foldl' :: Foldable t => (b -> a -> b) -> b -> t a -> b -- | Map each element of a structure to an Applicative action, -- evaluate these actions from left to right, and ignore the results. For -- a version that doesn't ignore the results see traverse. -- -- traverse_ is just like mapM_, but generalised to -- Applicative actions. -- --
-- >>> traverse_ print ["Hello", "world", "!"] -- "Hello" -- "world" -- "!" --traverse_ :: (Foldable t, Applicative f) => (a -> f b) -> t a -> f () -- | for_ is traverse_ with its arguments flipped. For a -- version that doesn't ignore the results see for. This is -- forM_ generalised to Applicative actions. -- -- for_ is just like forM_, but generalised to -- Applicative actions. -- --
-- >>> for_ [1..4] print -- 1 -- 2 -- 3 -- 4 --for_ :: (Foldable t, Applicative f) => t a -> (a -> f b) -> f () -- | Determines whether any element of the structure satisfies the -- predicate. -- --
-- >>> any (> 3) [] -- False ---- --
-- >>> any (> 3) [1,2] -- False ---- --
-- >>> any (> 3) [1,2,3,4,5] -- True ---- --
-- >>> any (> 3) [1..] -- True ---- --
-- >>> any (> 3) [0, -1..] -- * Hangs forever * --any :: Foldable t => (a -> Bool) -> t a -> Bool -- | Determines whether all elements of the structure satisfy the -- predicate. -- --
-- >>> all (> 3) [] -- True ---- --
-- >>> all (> 3) [1,2] -- False ---- --
-- >>> all (> 3) [1,2,3,4,5] -- False ---- --
-- >>> all (> 3) [1..] -- False ---- --
-- >>> all (> 3) [4..] -- * Hangs forever * --all :: Foldable t => (a -> Bool) -> t a -> Bool -- | List of elements of a structure, from left to right. If the entire -- list is intended to be reduced via a fold, just fold the structure -- directly bypassing the list. -- --
-- >>> toList Nothing -- [] ---- --
-- >>> toList (Just 42) -- [42] ---- --
-- >>> toList (Left "foo") -- [] ---- --
-- >>> toList (Node (Leaf 5) 17 (Node Empty 12 (Leaf 8))) -- [5,17,12,8] ---- -- For lists, toList is the identity: -- --
-- >>> toList [1, 2, 3] -- [1,2,3] --toList :: Foldable t => t a -> [a] -- | Functors representing data structures that can be transformed to -- structures of the same shape by performing an -- Applicative (or, therefore, Monad) action on each -- element from left to right. -- -- A more detailed description of what same shape means, the -- various methods, how traversals are constructed, and example advanced -- use-cases can be found in the Overview section of -- Data.Traversable#overview. -- -- For the class laws see the Laws section of -- Data.Traversable#laws. class (Functor t, Foldable t) => Traversable (t :: Type -> Type) -- | Map each element of a structure to an action, evaluate these actions -- from left to right, and collect the results. For a version that -- ignores the results see traverse_. -- --
-- >>> traverse Just [1,2,3,4] -- Just [1,2,3,4] ---- --
-- >>> traverse id [Right 1, Right 2, Right 3, Right 4] -- Right [1,2,3,4] ---- -- In the next examples, we show that Nothing and Left -- values short circuit the created structure. -- --
-- >>> traverse (const Nothing) [1,2,3,4] -- Nothing ---- --
-- >>> traverse (\x -> if odd x then Just x else Nothing) [1,2,3,4] -- Nothing ---- --
-- >>> traverse id [Right 1, Right 2, Right 3, Right 4, Left 0] -- Left 0 --traverse :: (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b) -- | Evaluate each action in the structure from left to right, and collect -- the results. For a version that ignores the results see -- sequenceA_. -- --
-- >>> sequenceA [Just 1, Just 2, Just 3] -- Just [1,2,3] ---- --
-- >>> sequenceA [Right 1, Right 2, Right 3] -- Right [1,2,3] ---- -- The next two example show Nothing and Just will short -- circuit the resulting structure if present in the input. For more -- context, check the Traversable instances for Either and -- Maybe. -- --
-- >>> sequenceA [Just 1, Just 2, Just 3, Nothing] -- Nothing ---- --
-- >>> sequenceA [Right 1, Right 2, Right 3, Left 4] -- Left 4 --sequenceA :: (Traversable t, Applicative f) => t (f a) -> f (t a) -- | for is traverse with its arguments flipped. For a -- version that ignores the results see for_. for :: (Traversable t, Applicative f) => t a -> (a -> f b) -> f (t b) -- | on b u x y runs the binary function b -- on the results of applying unary function u to two -- arguments x and y. From the opposite perspective, it -- transforms two inputs and combines the outputs. -- --
-- ((+) `on` f) x y = f x + f y ---- -- Typical usage: sortBy (compare `on` -- fst). -- -- Algebraic properties: -- --
(*) `on` id = (*) -- (if (*) ∉ {⊥, const -- ⊥})
((*) `on` f) `on` g = (*) `on` (f . g)
flip on f . flip on g = flip on (g . -- f)
-- comparing p x y = compare (p x) (p y) ---- -- Useful combinator for use in conjunction with the xxxBy -- family of functions from Data.List, for example: -- --
-- ... sortBy (comparing fst) ... --comparing :: Ord a => (b -> a) -> b -> b -> Ordering -- | Send the first component of the input through the argument arrow, and -- copy the rest unchanged to the output. first :: Arrow a => a b c -> a (b, d) (c, d) -- | Promote a function to a monad. liftM :: Monad m => (a1 -> r) -> m a1 -> m r -- | Promote a function to a monad, scanning the monadic arguments from -- left to right. For example, -- --
-- liftM2 (+) [0,1] [0,2] = [0,2,1,3] -- liftM2 (+) (Just 1) Nothing = Nothing --liftM2 :: Monad m => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r -- | The reverse of when. unless :: Applicative f => Bool -> f () -> f () -- | Conditional execution of Applicative expressions. For example, -- --
-- when debug (putStrLn "Debugging") ---- -- will output the string Debugging if the Boolean value -- debug is True, and otherwise do nothing. when :: Applicative f => Bool -> f () -> f () -- | In many situations, the liftM operations can be replaced by -- uses of ap, which promotes function application. -- --
-- return f `ap` x1 `ap` ... `ap` xn ---- -- is equivalent to -- --
-- liftMn f x1 x2 ... xn --ap :: Monad m => m (a -> b) -> m a -> m b -- | void value discards or ignores the result of -- evaluation, such as the return value of an IO action. -- --
-- >>> void Nothing -- Nothing -- -- >>> void (Just 3) -- Just () ---- -- Replace the contents of an Either Int -- Int with unit, resulting in an Either -- Int (): -- --
-- >>> void (Left 8675309) -- Left 8675309 -- -- >>> void (Right 8675309) -- Right () ---- -- Replace every element of a list with unit: -- --
-- >>> void [1,2,3] -- [(),(),()] ---- -- Replace the second element of a pair with unit: -- --
-- >>> void (1,2) -- (1,()) ---- -- Discard the result of an IO action: -- --
-- >>> mapM print [1,2] -- 1 -- 2 -- [(),()] -- -- >>> void $ mapM print [1,2] -- 1 -- 2 --void :: Functor f => f a -> f () -- | The foldM function is analogous to foldl, except that -- its result is encapsulated in a monad. Note that foldM works -- from left-to-right over the list arguments. This could be an issue -- where (>>) and the `folded function' are not -- commutative. -- --
-- foldM f a1 [x1, x2, ..., xm] -- -- == -- -- do -- a2 <- f a1 x1 -- a3 <- f a2 x2 -- ... -- f am xm ---- -- If right-to-left evaluation is required, the input list should be -- reversed. -- -- Note: foldM is the same as foldlM foldM :: (Foldable t, Monad m) => (b -> a -> m b) -> b -> t a -> m b -- | This generalizes the list-based filter function. filterM :: Applicative m => (a -> m Bool) -> [a] -> m [a] -- | The join function is the conventional monad join operator. It -- is used to remove one level of monadic structure, projecting its bound -- argument into the outer level. -- -- 'join bss' can be understood as the do -- expression -- --
-- do bs <- bss -- bs ---- --
-- atomically :: STM a -> IO a ---- -- is used to run STM transactions atomically. So, by specializing -- the types of atomically and join to -- --
-- atomically :: STM (IO b) -> IO (IO b) -- join :: IO (IO b) -> IO b ---- -- we can compose them as -- --
-- join . atomically :: STM (IO b) -> IO b ---- -- to run an STM transaction and the IO action it returns. join :: Monad m => m (m a) -> m a -- | Conditional failure of Alternative computations. Defined by -- --
-- guard True = pure () -- guard False = empty ---- --
-- >>> safeDiv 4 0 -- Nothing ---- --
-- >>> safeDiv 4 2 -- Just 2 ---- -- A definition of safeDiv using guards, but not guard: -- --
-- safeDiv :: Int -> Int -> Maybe Int -- safeDiv x y | y /= 0 = Just (x `div` y) -- | otherwise = Nothing ---- -- A definition of safeDiv using guard and Monad -- do-notation: -- --
-- safeDiv :: Int -> Int -> Maybe Int -- safeDiv x y = do -- guard (y /= 0) -- return (x `div` y) --guard :: Alternative f => Bool -> f () -- | This is the simplest of the exception-catching functions. It takes a -- single argument, runs it, and if an exception is raised the "handler" -- is executed, with the value of the exception passed as an argument. -- Otherwise, the result is returned as normal. For example: -- --
-- catch (readFile f)
-- (\e -> do let err = show (e :: IOException)
-- hPutStr stderr ("Warning: Couldn't open " ++ f ++ ": " ++ err)
-- return "")
--
--
-- Note that we have to give a type signature to e, or the
-- program will not typecheck as the type is ambiguous. While it is
-- possible to catch exceptions of any type, see the section "Catching
-- all exceptions" (in Control.Exception) for an explanation of
-- the problems with doing so.
--
-- For catching exceptions in pure (non-IO) expressions, see the
-- function evaluate.
--
-- Note that due to Haskell's unspecified evaluation order, an expression
-- may throw one of several possible exceptions: consider the expression
-- (error "urk") + (1 `div` 0). Does the expression throw
-- ErrorCall "urk", or DivideByZero?
--
-- The answer is "it might throw either"; the choice is
-- non-deterministic. If you are catching any type of exception then you
-- might catch either. If you are calling catch with type IO
-- Int -> (ArithException -> IO Int) -> IO Int then the
-- handler may get run with DivideByZero as an argument, or an
-- ErrorCall "urk" exception may be propagated further up. If
-- you call it again, you might get the opposite behaviour. This is ok,
-- because catch is an IO computation.
catch :: Exception e => IO a -> (e -> IO a) -> IO a
-- | A variant of throw that can only be used within the IO
-- monad.
--
-- Although throwIO has a type that is an instance of the type of
-- throw, the two functions are subtly different:
--
-- -- throw e `seq` () ===> throw e -- throwIO e `seq` () ===> () ---- -- The first example will cause the exception e to be raised, -- whereas the second one won't. In fact, throwIO will only cause -- an exception to be raised when it is used within the IO monad. -- -- The throwIO variant should be used in preference to -- throw to raise an exception within the IO monad because -- it guarantees ordering with respect to other operations, whereas -- throw does not. We say that throwIO throws *precise* -- exceptions and throw, error, etc. all throw *imprecise* -- exceptions. For example -- --
-- throw e + error "boom" ===> error "boom" -- throw e + error "boom" ===> throw e ---- -- are both valid reductions and the compiler may pick any (loop, even), -- whereas -- --
-- throwIO e >> error "boom" ===> throwIO e ---- -- will always throw e when executed. -- -- See also the GHC wiki page on precise exceptions for a more -- technical introduction to how GHC optimises around precise vs. -- imprecise exceptions. throwIO :: Exception e => e -> IO a -- | Evaluate the argument to weak head normal form. -- -- evaluate is typically used to uncover any exceptions that a -- lazy value may contain, and possibly handle them. -- -- evaluate only evaluates to weak head normal form. If -- deeper evaluation is needed, the force function from -- Control.DeepSeq may be handy: -- --
-- evaluate $ force x ---- -- There is a subtle difference between evaluate x and -- return $! x, analogous to the difference -- between throwIO and throw. If the lazy value x -- throws an exception, return $! x will fail to -- return an IO action and will throw an exception instead. -- evaluate x, on the other hand, always produces an -- IO action; that action will throw an exception upon -- execution iff x throws an exception upon -- evaluation. -- -- The practical implication of this difference is that due to the -- imprecise exceptions semantics, -- --
-- (return $! error "foo") >> error "bar" ---- -- may throw either "foo" or "bar", depending on the -- optimizations performed by the compiler. On the other hand, -- --
-- evaluate (error "foo") >> error "bar" ---- -- is guaranteed to throw "foo". -- -- The rule of thumb is to use evaluate to force or handle -- exceptions in lazy values. If, on the other hand, you are forcing a -- lazy value for efficiency reasons only and do not care about -- exceptions, you may use return $! x. evaluate :: a -> IO a -- | Any type that you wish to throw or catch as an exception must be an -- instance of the Exception class. The simplest case is a new -- exception type directly below the root: -- --
-- data MyException = ThisException | ThatException -- deriving Show -- -- instance Exception MyException ---- -- The default method definitions in the Exception class do what -- we need in this case. You can now throw and catch -- ThisException and ThatException as exceptions: -- --
-- *Main> throw ThisException `catch` \e -> putStrLn ("Caught " ++ show (e :: MyException))
-- Caught ThisException
--
--
-- In more complicated examples, you may wish to define a whole hierarchy
-- of exceptions:
--
-- -- --------------------------------------------------------------------- -- -- Make the root exception type for all the exceptions in a compiler -- -- data SomeCompilerException = forall e . Exception e => SomeCompilerException e -- -- instance Show SomeCompilerException where -- show (SomeCompilerException e) = show e -- -- instance Exception SomeCompilerException -- -- compilerExceptionToException :: Exception e => e -> SomeException -- compilerExceptionToException = toException . SomeCompilerException -- -- compilerExceptionFromException :: Exception e => SomeException -> Maybe e -- compilerExceptionFromException x = do -- SomeCompilerException a <- fromException x -- cast a -- -- --------------------------------------------------------------------- -- -- Make a subhierarchy for exceptions in the frontend of the compiler -- -- data SomeFrontendException = forall e . Exception e => SomeFrontendException e -- -- instance Show SomeFrontendException where -- show (SomeFrontendException e) = show e -- -- instance Exception SomeFrontendException where -- toException = compilerExceptionToException -- fromException = compilerExceptionFromException -- -- frontendExceptionToException :: Exception e => e -> SomeException -- frontendExceptionToException = toException . SomeFrontendException -- -- frontendExceptionFromException :: Exception e => SomeException -> Maybe e -- frontendExceptionFromException x = do -- SomeFrontendException a <- fromException x -- cast a -- -- --------------------------------------------------------------------- -- -- Make an exception type for a particular frontend compiler exception -- -- data MismatchedParentheses = MismatchedParentheses -- deriving Show -- -- instance Exception MismatchedParentheses where -- toException = frontendExceptionToException -- fromException = frontendExceptionFromException ---- -- We can now catch a MismatchedParentheses exception as -- MismatchedParentheses, SomeFrontendException or -- SomeCompilerException, but not other types, e.g. -- IOException: -- --
-- *Main> throw MismatchedParentheses `catch` \e -> putStrLn ("Caught " ++ show (e :: MismatchedParentheses))
-- Caught MismatchedParentheses
-- *Main> throw MismatchedParentheses `catch` \e -> putStrLn ("Caught " ++ show (e :: SomeFrontendException))
-- Caught MismatchedParentheses
-- *Main> throw MismatchedParentheses `catch` \e -> putStrLn ("Caught " ++ show (e :: SomeCompilerException))
-- Caught MismatchedParentheses
-- *Main> throw MismatchedParentheses `catch` \e -> putStrLn ("Caught " ++ show (e :: IOException))
-- *** Exception: MismatchedParentheses
--
class (Typeable e, Show e) => Exception e
toException :: Exception e => e -> SomeException
fromException :: Exception e => SomeException -> Maybe e
-- | Render this exception value in a human-friendly manner.
--
-- Default implementation: show.
displayException :: Exception e => e -> String
-- | Exceptions that occur in the IO monad. An
-- IOException records a more specific error type, a descriptive
-- string and maybe the handle that was used when the error was flagged.
data () => IOException
-- | The SomeException type is the root of the exception type
-- hierarchy. When an exception of type e is thrown, behind the
-- scenes it is encapsulated in a SomeException.
data () => SomeException
SomeException :: e -> SomeException
-- | Try IOException.
tryIO :: IO a -> IO (Either IOException a)
-- | Catch IOException.
catchIO :: IO a -> (IOException -> IO a) -> IO a
-- | Catch ExitCode
catchExit :: IO a -> (ExitCode -> IO a) -> IO a
-- | deepseq: fully evaluates the first argument, before returning
-- the second.
--
-- The name deepseq is used to illustrate the relationship to
-- seq: where seq is shallow in the sense that it only
-- evaluates the top level of its argument, deepseq traverses the
-- entire data structure evaluating it completely.
--
-- deepseq 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
-- parallel 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
-- pseq from Control.Parallel in the parallel
-- package.
deepseq :: NFData a => a -> b -> b
infixr 0 `deepseq`
-- | a variant of deepseq that is useful in some circumstances:
--
-- -- force x = x `deepseq` x ---- -- force x fully evaluates x, and then returns it. Note -- that force x only performs evaluation when the value of -- force x itself is demanded, so essentially it turns shallow -- evaluation into deep evaluation. -- -- force can be conveniently used in combination with -- ViewPatterns: -- --
-- {-# LANGUAGE BangPatterns, ViewPatterns #-}
-- import Control.DeepSeq
--
-- someFun :: ComplexData -> SomeResult
-- someFun (force -> !arg) = {- 'arg' will be fully evaluated -}
--
--
-- Another useful application is to combine force with
-- evaluate in order to force deep evaluation relative to other
-- IO operations:
--
--
-- import Control.Exception (evaluate)
-- import Control.DeepSeq
--
-- main = do
-- result <- evaluate $ force $ pureComputation
-- {- 'result' will be fully evaluated at this point -}
-- return ()
--
--
-- Finally, here's an exception safe variant of the readFile'
-- example:
--
-- -- readFile' :: FilePath -> IO String -- readFile' fn = bracket (openFile fn ReadMode) hClose $ \h -> -- evaluate . force =<< hGetContents h --force :: NFData a => a -> a -- | Returns True for any Unicode space character, and the control -- characters \t, \n, \r, \f, -- \v. isSpace :: Char -> Bool -- | Selects ASCII digits, i.e. '0'..'9'. isDigit :: Char -> Bool -- | Selects upper-case or title-case alphabetic Unicode characters -- (letters). Title case is used by a small number of letter ligatures -- like the single-character form of Lj. -- -- Note: this predicate does not work for letter-like -- characters such as: 'Ⓐ' (U+24B6 circled Latin -- capital letter A) and 'Ⅳ' (U+2163 Roman numeral -- four). This is due to selecting only characters with the -- GeneralCategory UppercaseLetter or -- TitlecaseLetter. -- -- See isUpperCase for a more intuitive predicate. Note that -- unlike isUpperCase, isUpper does select -- title-case characters such as 'Dž' (U+01C5 -- Latin capital letter d with small letter z with caron) or 'ᾯ' -- (U+1FAF Greek capital letter omega with dasia and perispomeni -- and prosgegrammeni). isUpper :: Char -> Bool -- | Selects alphabetic Unicode characters (lower-case, upper-case and -- title-case letters, plus letters of caseless scripts and modifiers -- letters). This function is equivalent to isLetter. isAlpha :: Char -> Bool -- | Selects alphabetic or numeric Unicode characters. -- -- Note that numeric digits outside the ASCII range, as well as numeric -- characters which aren't digits, are selected by this function but not -- by isDigit. Such characters may be part of identifiers but are -- not used by the printer and reader to represent numbers. isAlphaNum :: Char -> Bool -- | The toEnum method restricted to the type Char. chr :: Int -> Char -- | The fromEnum method restricted to the type Char. ord :: Char -> Int -- | Convert a letter to the corresponding lower-case letter, if any. Any -- other character is returned unchanged. toLower :: Char -> Char -- | Convert a letter to the corresponding upper-case letter, if any. Any -- other character is returned unchanged. toUpper :: Char -> Char -- | Since Void values logically don't exist, this witnesses the -- logical reasoning tool of "ex falso quodlibet". -- --
-- >>> let x :: Either Void Int; x = Right 5
--
-- >>> :{
-- case x of
-- Right r -> r
-- Left l -> absurd l
-- :}
-- 5
--
absurd :: Void -> a
-- | If Void is uninhabited then any Functor that holds only
-- values of type Void is holding no values. It is implemented in
-- terms of fmap absurd.
vacuous :: Functor f => f Void -> f a
-- | A Word is an unsigned integral type, with the same size as
-- Int.
data () => Word
-- | 8-bit unsigned integer type
data () => Word8
-- | 16-bit unsigned integer type
data () => Word16
-- | 32-bit unsigned integer type
data () => Word32
-- | 64-bit unsigned integer type
data () => Word64
-- | 8-bit signed integer type
data () => Int8
-- | 16-bit signed integer type
data () => Int16
-- | 32-bit signed integer type
data () => Int32
-- | 64-bit signed integer type
data () => Int64
-- | New name for <>
(<<>>) :: Doc -> Doc -> Doc
-- | Beside, separated by space, unless one of the arguments is
-- empty. <+> is associative, with identity
-- empty.
(<+>) :: Doc -> Doc -> Doc
infixl 6 <+>
-- | Defines the exit codes that a program can return.
data () => ExitCode
-- | indicates successful termination;
ExitSuccess :: ExitCode
-- | indicates program failure with an exit code. The exact interpretation
-- of the code is operating-system dependent. In particular, some values
-- may be prohibited (e.g. 0 on a POSIX-compliant system).
ExitFailure :: Int -> ExitCode
-- | Computation exitWith code throws ExitCode
-- code. Normally this terminates the program, returning
-- code to the program's caller.
--
-- On program termination, the standard Handles stdout and
-- stderr are flushed automatically; any other buffered
-- Handles need to be flushed manually, otherwise the buffered
-- data will be discarded.
--
-- A program that fails in any other way is treated as if it had called
-- exitFailure. A program that terminates successfully without
-- calling exitWith explicitly is treated as if it had called
-- exitWith ExitSuccess.
--
-- As an ExitCode is an Exception, it can be caught using
-- the functions of Control.Exception. This means that cleanup
-- computations added with bracket (from Control.Exception)
-- are also executed properly on exitWith.
--
-- Note: in GHC, exitWith should be called from the main program
-- thread in order to exit the process. When called from another thread,
-- exitWith will throw an ExitCode as normal, but the
-- exception will not cause the process itself to exit.
exitWith :: ExitCode -> IO a
-- | The computation exitSuccess is equivalent to exitWith
-- ExitSuccess, It terminates the program successfully.
exitSuccess :: IO a
-- | The computation exitFailure is equivalent to exitWith
-- (ExitFailure exitfail), where
-- exitfail is implementation-dependent.
exitFailure :: IO a
-- | Parse a string using the Read instance. Succeeds if there is
-- exactly one valid result.
--
-- -- >>> readMaybe "123" :: Maybe Int -- Just 123 ---- --
-- >>> readMaybe "hello" :: Maybe Int -- Nothing --readMaybe :: Read a => String -> Maybe a -- | Deprecated: Don't leave me in the code trace :: String -> a -> a -- | Deprecated: Don't leave me in the code traceShow :: Show a => a -> b -> b -- | Deprecated: Don't leave me in the code traceShowId :: Show a => a -> a -- | Deprecated: Don't leave me in the code traceM :: Applicative f => String -> f () -- | Deprecated: Don't leave me in the code traceShowM :: (Show a, Applicative f) => a -> f () instance Distribution.Compat.Prelude.GNFData GHC.Generics.V1 instance Distribution.Compat.Prelude.GNFData GHC.Generics.U1 instance Control.DeepSeq.NFData a => Distribution.Compat.Prelude.GNFData (GHC.Generics.K1 i a) instance Distribution.Compat.Prelude.GNFData a => Distribution.Compat.Prelude.GNFData (GHC.Generics.M1 i c a) instance (Distribution.Compat.Prelude.GNFData a, Distribution.Compat.Prelude.GNFData b) => Distribution.Compat.Prelude.GNFData (a GHC.Generics.:*: b) instance (Distribution.Compat.Prelude.GNFData a, Distribution.Compat.Prelude.GNFData b) => Distribution.Compat.Prelude.GNFData (a GHC.Generics.:+: b) -- | Compact representation of short Strings -- -- This module is designed to be import qualified -- --
-- import Distribution.Utils.ShortText (ShortText) -- import qualified Distribution.Utils.ShortText as ShortText --module Distribution.Utils.ShortText -- | Compact representation of short Strings -- -- The data is stored internally as UTF8 in an ShortByteString -- when compiled against bytestring >= 0.10.4, and otherwise -- the fallback is to use plain old non-compat '[Char]'. -- -- Note: This type is for internal uses (such as e.g. -- PackageName) and shall not be exposed in Cabal's API data ShortText -- | Construct ShortText from String toShortText :: String -> ShortText -- | Convert ShortText to String fromShortText :: ShortText -> String -- | Convert from UTF-8 encoded strict ByteString. unsafeFromUTF8BS :: ByteString -> ShortText -- | Text whether ShortText is empty. null :: ShortText -> Bool -- | O(n). Length in characters. Slow as converts to string. length :: ShortText -> Int -- | Decode String from UTF8-encoded octets. -- -- Invalid data in the UTF8 stream (this includes code-points -- U+D800 through U+DFFF) will be decoded as the -- replacement character (U+FFFD). -- -- See also encodeStringUtf8 decodeStringUtf8 :: [Word8] -> String -- | Encode String to a list of UTF8-encoded octets -- -- Code-points in the U+D800-U+DFFF range will be -- encoded as the replacement character (i.e. U+FFFD). -- -- See also decodeUtf8 encodeStringUtf8 :: String -> [Word8] instance Data.Data.Data Distribution.Utils.ShortText.ShortText instance GHC.Generics.Generic Distribution.Utils.ShortText.ShortText instance GHC.Classes.Ord Distribution.Utils.ShortText.ShortText instance GHC.Classes.Eq Distribution.Utils.ShortText.ShortText instance Data.Binary.Class.Binary Distribution.Utils.ShortText.ShortText instance Distribution.Utils.Structured.Structured Distribution.Utils.ShortText.ShortText instance Control.DeepSeq.NFData Distribution.Utils.ShortText.ShortText instance GHC.Show.Show Distribution.Utils.ShortText.ShortText instance GHC.Read.Read Distribution.Utils.ShortText.ShortText instance GHC.Base.Semigroup Distribution.Utils.ShortText.ShortText instance GHC.Base.Monoid Distribution.Utils.ShortText.ShortText instance Data.String.IsString 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 cabal-install. 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 String from UTF8-encoded ByteString -- -- Invalid data in the UTF8 stream (this includes code-points -- U+D800 through U+DFFF) will be decoded as the -- replacement character (U+FFFD). fromUTF8BS :: ByteString -> String -- | Variant of fromUTF8BS for lazy ByteStrings fromUTF8LBS :: ByteString -> String -- | Encode String to UTF8-encoded ByteString -- -- Code-points in the U+D800-U+DFFF range will be -- encoded as the replacement character (i.e. U+FFFD). toUTF8BS :: String -> ByteString -- | Variant of toUTF8BS for lazy ByteStrings toUTF8LBS :: String -> ByteString -- | Check that strict ByteString 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 readFile. readUTF8File :: FilePath -> IO String -- | Reads a UTF8 encoded text file as a Unicode String -- -- Same behaviour as withFileContents. withUTF8FileContents :: FilePath -> (String -> IO a) -> IO a -- | Writes a Unicode String as a UTF8 encoded text file. -- -- Uses writeFileAtomic, 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 -- | dropWhileEndLE p is equivalent to reverse . dropWhile p . -- reverse, but quite a bit faster. The difference between -- "Data.List.dropWhileEnd" and this version is that the one in -- Data.List is strict in elements, but spine-lazy, while this one -- is spine-strict but lazy in elements. That's what LE stands -- for - "lazy in elements". -- -- Example: -- --
-- >>> safeTail $ Data.List.dropWhileEnd (<3) [undefined, 5, 4, 3, 2, 1] -- *** Exception: Prelude.undefined -- ... ---- --
-- >>> safeTail $ dropWhileEndLE (<3) [undefined, 5, 4, 3, 2, 1] -- [5,4,3] ---- --
-- >>> take 3 $ Data.List.dropWhileEnd (<3) [5, 4, 3, 2, 1, undefined] -- [5,4,3] ---- --
-- >>> take 3 $ dropWhileEndLE (<3) [5, 4, 3, 2, 1, undefined] -- *** Exception: Prelude.undefined -- ... --dropWhileEndLE :: (a -> Bool) -> [a] -> [a] -- | takeWhileEndLE p is equivalent to reverse . takeWhile p . -- reverse, 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 p x y = compare (p x) (p y) ---- -- Useful combinator for use in conjunction with the xxxBy -- family of functions from Data.List, for example: -- --
-- ... sortBy (comparing fst) ... --comparing :: Ord a => (b -> a) -> b -> b -> Ordering -- | The isInfixOf function takes two lists and returns True -- iff the first list is contained, wholly and intact, anywhere within -- the second. -- --
-- >>> isInfixOf "Haskell" "I really like Haskell." -- True -- -- >>> isInfixOf "Ial" "I really like Haskell." -- False ---- -- For the result to be True, the first list must be finite; for -- the result to be False, the second list must be finite: -- --
-- >>> [20..50] `isInfixOf` [0..] -- True -- -- >>> [0..] `isInfixOf` [20..50] -- False -- -- >>> [0..] `isInfixOf` [0..] -- * Hangs forever * --isInfixOf :: Eq a => [a] -> [a] -> Bool -- | intercalate xs xss is equivalent to (concat -- (intersperse xs xss)). It inserts the list xs in -- between the lists in xss and concatenates the result. -- --
-- >>> intercalate ", " ["Lorem", "ipsum", "dolor"] -- "Lorem, ipsum, dolor" --intercalate :: [a] -> [[a]] -> [a] -- | Lower case string -- --
-- >>> lowercase "Foobar" -- "foobar" --lowercase :: String -> String -- | Ascii characters isAscii :: Char -> Bool -- | Ascii letters. isAsciiAlpha :: Char -> Bool -- | Ascii letters and digits. -- --
-- >>> isAsciiAlphaNum 'a' -- True ---- --
-- >>> isAsciiAlphaNum 'ä' -- False --isAsciiAlphaNum :: Char -> Bool -- | Like "Data.List.union", but has O(n log n) complexity instead -- of O(n^2). listUnion :: Ord a => [a] -> [a] -> [a] -- | A right-biased version of listUnion. -- -- Example: -- --
-- >>> listUnion [1,2,3,4,3] [2,1,1] -- [1,2,3,4,3] ---- --
-- >>> listUnionRight [1,2,3,4,3] [2,1,1] -- [4,3,2,1,1] --listUnionRight :: Ord a => [a] -> [a] -> [a] -- | Like nub, but has O(n log n) complexity instead of -- O(n^2). Code for ordNub and listUnion taken -- from Niklas Hambüchen's ordnub package. ordNub :: Ord a => [a] -> [a] -- | Like ordNub and nubBy. 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 ordNub. -- -- Example: -- --
-- >>> ordNub [1,2,1] :: [Int] -- [1,2] ---- --
-- >>> ordNubRight [1,2,1] :: [Int] -- [2,1] --ordNubRight :: Ord a => [a] -> [a] -- | A total variant of head. safeHead :: [a] -> Maybe a -- | A total variant of tail. safeTail :: [a] -> [a] -- | A total variant of last. safeLast :: [a] -> Maybe a -- | A total variant of init. 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]] -- | unfoldr with monadic action. -- --
-- >>> take 5 $ unfoldrM (\b r -> Just (r + b, b + 1)) (1 :: Int) 2 -- [3,4,5,6,7] --unfoldrM :: Monad m => (b -> m (Maybe (a, b))) -> b -> m [a] -- | Like span but with Maybe predicate -- --
-- >>> spanMaybe listToMaybe [[1,2],[3],[],[4,5],[6,7]] -- ([1,3],[[],[4,5],[6,7]]) ---- --
-- >>> spanMaybe (readMaybe :: String -> Maybe Int) ["1", "2", "foo"] -- ([1,2],["foo"]) --spanMaybe :: (a -> Maybe b) -> [a] -> ([b], [a]) -- | Like break, but with Maybe predicate -- --
-- >>> breakMaybe (readMaybe :: String -> Maybe Int) ["foo", "bar", "1", "2", "quu"] -- (["foo","bar"],Just (1,["2","quu"])) ---- --
-- >>> breakMaybe (readMaybe :: String -> Maybe Int) ["foo", "bar"] -- (["foo","bar"],Nothing) --breakMaybe :: (a -> Maybe b) -> [a] -> ([a], Maybe (b, [a])) -- | The opposite of snoc, which is the reverse of cons -- -- Example: -- --
-- >>> unsnoc [1, 2, 3] -- Just ([1,2],3) ---- --
-- >>> unsnoc [] -- Nothing --unsnoc :: [a] -> Maybe ([a], a) -- | Like unsnoc, but for NonEmpty so without the -- Maybe -- -- Example: -- --
-- >>> unsnocNE (1 :| [2, 3]) -- ([1,2],3) ---- --
-- >>> unsnocNE (1 :| []) -- ([],1) --unsnocNE :: NonEmpty a -> ([a], a) fstOf3 :: (a, b, c) -> a sndOf3 :: (a, b, c) -> b trdOf3 :: (a, b, c) -> c -- | isAbsoluteOnAnyPlatform and isRelativeOnAnyPlatform are -- like isAbsolute and isRelative 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 -- |
-- isRelativeOnAnyPlatform = not . isAbsoluteOnAnyPlatform --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 Condition value. cNot :: Condition a -> Condition a -- | Boolean AND of two Condition values. cAnd :: Condition a -> Condition a -> Condition a -- | Boolean OR of two Condition 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.Generics.Generic (Distribution.Types.Condition.Condition c) instance Data.Data.Data c => Data.Data.Data (Distribution.Types.Condition.Condition c) instance GHC.Classes.Eq c => GHC.Classes.Eq (Distribution.Types.Condition.Condition c) instance GHC.Show.Show c => GHC.Show.Show (Distribution.Types.Condition.Condition c) instance GHC.Base.Functor Distribution.Types.Condition.Condition instance Data.Foldable.Foldable Distribution.Types.Condition.Condition instance Data.Traversable.Traversable Distribution.Types.Condition.Condition instance GHC.Base.Applicative Distribution.Types.Condition.Condition instance GHC.Base.Monad Distribution.Types.Condition.Condition instance GHC.Base.Monoid (Distribution.Types.Condition.Condition a) instance GHC.Base.Semigroup (Distribution.Types.Condition.Condition a) instance GHC.Base.Alternative Distribution.Types.Condition.Condition instance GHC.Base.MonadPlus Distribution.Types.Condition.Condition instance Data.Binary.Class.Binary c => Data.Binary.Class.Binary (Distribution.Types.Condition.Condition c) instance Distribution.Utils.Structured.Structured c => Distribution.Utils.Structured.Structured (Distribution.Types.Condition.Condition c) instance Control.DeepSeq.NFData c => Control.DeepSeq.NFData (Distribution.Types.Condition.Condition c) 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 GHC.Generics.Generic Distribution.Parsec.Position.Position instance GHC.Show.Show Distribution.Parsec.Position.Position instance GHC.Classes.Ord Distribution.Parsec.Position.Position instance GHC.Classes.Eq Distribution.Parsec.Position.Position instance Data.Binary.Class.Binary Distribution.Parsec.Position.Position instance Control.DeepSeq.NFData 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 -- | true or false, not True or False PWTBoolCase :: PWarnType -- | there are version with tags PWTVersionTag :: PWarnType -- | New syntax used, but no cabal-version: >= 1.2 specified PWTNewSyntax :: PWarnType -- | Old syntax used, and cabal-version >= 1.2 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 -- https://github.com/haskell/cabal/issues/5020. 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 GHC.Generics.Generic Distribution.Parsec.Warning.PWarnType instance GHC.Enum.Bounded Distribution.Parsec.Warning.PWarnType instance GHC.Enum.Enum Distribution.Parsec.Warning.PWarnType instance GHC.Show.Show Distribution.Parsec.Warning.PWarnType instance GHC.Classes.Ord Distribution.Parsec.Warning.PWarnType instance GHC.Classes.Eq Distribution.Parsec.Warning.PWarnType instance GHC.Generics.Generic Distribution.Parsec.Warning.PWarning instance GHC.Show.Show Distribution.Parsec.Warning.PWarning instance GHC.Classes.Ord Distribution.Parsec.Warning.PWarning instance GHC.Classes.Eq Distribution.Parsec.Warning.PWarning instance Data.Binary.Class.Binary Distribution.Parsec.Warning.PWarning instance Control.DeepSeq.NFData Distribution.Parsec.Warning.PWarning instance Data.Binary.Class.Binary Distribution.Parsec.Warning.PWarnType instance Control.DeepSeq.NFData Distribution.Parsec.Warning.PWarnType module Distribution.Parsec.FieldLineStream -- | This is essentially a lazy bytestring, but chunks are glued with -- newline '\n'. data FieldLineStream FLSLast :: !ByteString -> FieldLineStream FLSCons :: {-# UNPACK #-} !ByteString -> FieldLineStream -> FieldLineStream -- | Convert String to FieldLineStream. -- -- Note: inefficient! fieldLineStreamFromString :: String -> FieldLineStream fieldLineStreamFromBS :: ByteString -> FieldLineStream fieldLineStreamEnd :: FieldLineStream instance GHC.Show.Show Distribution.Parsec.FieldLineStream.FieldLineStream instance GHC.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 GHC.Generics.Generic Distribution.Parsec.Error.PError instance GHC.Show.Show Distribution.Parsec.Error.PError instance Data.Binary.Class.Binary Distribution.Parsec.Error.PError instance Control.DeepSeq.NFData Distribution.Parsec.Error.PError module Distribution.PackageDescription.Quirks -- | Patch legacy .cabal 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.Show.Show Distribution.Fields.LexerMonad.LexWarningType instance GHC.Classes.Ord Distribution.Fields.LexerMonad.LexWarningType instance GHC.Classes.Eq Distribution.Fields.LexerMonad.LexWarningType instance GHC.Show.Show Distribution.Fields.LexerMonad.LexWarning instance GHC.Base.Functor Distribution.Fields.LexerMonad.Lex instance GHC.Base.Applicative Distribution.Fields.LexerMonad.Lex instance GHC.Base.Monad Distribution.Fields.LexerMonad.Lex -- | 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 : 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.Show.Show Distribution.Fields.Lexer.Token instance GHC.Show.Show Distribution.Fields.Lexer.LToken -- | Alternative parser combinators. -- -- Originally in parsers package. module Distribution.Compat.Parsing -- | choice ps tries to apply the parsers in the list ps -- in order, until one of them succeeds. Returns the value of the -- succeeding parser. choice :: Alternative m => [m a] -> m a -- | option x p tries to apply parser p. If p -- fails without consuming input, it returns the value x, -- otherwise the value returned by p. -- --
-- priority = option 0 (digitToInt <$> digit) --option :: Alternative m => a -> m a -> m a -- | One or none. -- -- It is useful for modelling any computation that is allowed to fail. -- --
-- >>> import Control.Monad.Except ---- --
-- >>> canFail = throwError "it failed" :: Except String Int -- -- >>> final = return 42 :: Except String Int ---- -- Can be combined by allowing the first function to fail: -- --
-- >>> runExcept $ canFail *> final -- Left "it failed" -- -- >>> runExcept $ optional canFail *> final -- Right 42 --optional :: Alternative f => f a -> f (Maybe a) -- | skipOptional p tries to apply parser p. It will -- parse p or nothing. It only fails if p fails after -- consuming input. It discards the result of p. (Plays the role -- of parsec's optional, which conflicts with Applicative's optional) skipOptional :: Alternative m => m a -> m () -- | between open close p parses open, followed by -- p and close. Returns the value returned by -- p. -- --
-- braces = between (symbol "{") (symbol "}")
--
between :: Applicative m => m bra -> m ket -> m a -> m a
-- | One or more.
some :: Alternative f => f a -> f [a]
-- | Zero or more.
many :: Alternative f => f a -> f [a]
-- | sepBy p sep parses zero or more occurrences of
-- p, separated by sep. Returns a list of values
-- returned by p.
--
-- -- commaSep p = p `sepBy` (symbol ",") --sepBy :: Alternative m => m a -> m sep -> m [a] -- | sepByNonEmpty p sep parses one or more occurrences of -- p, separated by sep. Returns a non-empty list of -- values returned by p. sepByNonEmpty :: Alternative m => m a -> m sep -> m (NonEmpty a) -- | sepEndByNonEmpty p sep parses one or more occurrences -- of p, separated and optionally ended by sep. Returns -- a non-empty list of values returned by p. sepEndByNonEmpty :: Alternative m => m a -> m sep -> m (NonEmpty a) -- | sepEndBy p sep parses zero or more occurrences of -- p, separated and optionally ended by sep, ie. -- haskell style statements. Returns a list of values returned by -- p. -- --
-- haskellStatements = haskellStatement `sepEndBy` semi --sepEndBy :: Alternative m => m a -> m sep -> m [a] -- | endByNonEmpty p sep parses one or more occurrences of -- p, separated and ended by sep. Returns a non-empty -- list of values returned by p. endByNonEmpty :: Alternative m => m a -> m sep -> m (NonEmpty a) -- | endBy p sep parses zero or more occurrences of -- p, separated and ended by sep. Returns a list of -- values returned by p. -- --
-- cStatements = cStatement `endBy` semi --endBy :: Alternative m => m a -> m sep -> m [a] -- | count n p parses n occurrences of p. If -- n is smaller or equal to zero, the parser equals to -- return []. Returns a list of n values returned by -- p. count :: Applicative m => Int -> m a -> m [a] -- | chainl p op x parses zero or more occurrences of -- p, separated by op. Returns a value obtained by a -- left associative application of all functions returned by -- op to the values returned by p. If there are zero -- occurrences of p, the value x is returned. chainl :: Alternative m => m a -> m (a -> a -> a) -> a -> m a -- | chainr p op x parses zero or more occurrences of -- p, separated by op Returns a value obtained by a -- right associative application of all functions returned by -- op to the values returned by p. If there are no -- occurrences of p, the value x is returned. chainr :: Alternative m => m a -> m (a -> a -> a) -> a -> m a -- | chainl1 p op x parses one or more occurrences of -- p, separated by op Returns a value obtained by a -- left associative application of all functions returned by -- op to the values returned by p. . This parser can -- for example be used to eliminate left recursion which typically occurs -- in expression grammars. -- --
-- expr = term `chainl1` addop -- term = factor `chainl1` mulop -- factor = parens expr <|> integer -- -- mulop = (*) <$ symbol "*" -- <|> div <$ symbol "/" -- -- addop = (+) <$ symbol "+" -- <|> (-) <$ symbol "-" --chainl1 :: Alternative m => m a -> m (a -> a -> a) -> m a -- | chainr1 p op x parses one or more occurrences of -- p, separated by op Returns a value obtained by a -- right associative application of all functions returned by -- op to the values returned by p. chainr1 :: Alternative m => m a -> m (a -> a -> a) -> m a -- | manyTill p end applies parser p zero or more -- times until parser end succeeds. Returns the list of values -- returned by p. This parser can be used to scan comments: -- --
-- simpleComment = do{ string "<!--"
-- ; manyTill anyChar (try (string "-->"))
-- }
--
--
-- Note the overlapping parsers anyChar and string
-- "-->", and therefore the use of the try 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
-- | 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 ()
-- | skipSome p applies the parser p one 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 notFollowedBy.
--
-- -- eof = notFollowedBy anyChar <?> "end of input" --eof :: Parsing m => m () -- | notFollowedBy p only succeeds when parser p 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 let), 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 lets). We -- can program this behaviour as follows: -- --
-- keywordLet = try $ string "let" <* notFollowedBy alphaNum --notFollowedBy :: (Parsing m, Show a) => m a -> m () infixr 0 > instance (Distribution.Compat.Parsing.Parsing m, GHC.Base.MonadPlus m) => Distribution.Compat.Parsing.Parsing (Control.Monad.Trans.State.Lazy.StateT s m) instance (Distribution.Compat.Parsing.Parsing m, GHC.Base.MonadPlus m) => Distribution.Compat.Parsing.Parsing (Control.Monad.Trans.State.Strict.StateT s m) instance (Distribution.Compat.Parsing.Parsing m, GHC.Base.MonadPlus m) => Distribution.Compat.Parsing.Parsing (Control.Monad.Trans.Reader.ReaderT e m) instance (Distribution.Compat.Parsing.Parsing m, GHC.Base.MonadPlus m, GHC.Base.Monoid w) => Distribution.Compat.Parsing.Parsing (Control.Monad.Trans.Writer.Strict.WriterT w m) instance (Distribution.Compat.Parsing.Parsing m, GHC.Base.MonadPlus m, GHC.Base.Monoid w) => Distribution.Compat.Parsing.Parsing (Control.Monad.Trans.Writer.Lazy.WriterT w m) instance (Distribution.Compat.Parsing.Parsing m, GHC.Base.MonadPlus m, GHC.Base.Monoid w) => Distribution.Compat.Parsing.Parsing (Control.Monad.Trans.RWS.Lazy.RWST r w s m) instance (Distribution.Compat.Parsing.Parsing m, GHC.Base.MonadPlus m, GHC.Base.Monoid w) => Distribution.Compat.Parsing.Parsing (Control.Monad.Trans.RWS.Strict.RWST r w s m) instance (Distribution.Compat.Parsing.Parsing m, GHC.Base.Monad m) => Distribution.Compat.Parsing.Parsing (Control.Monad.Trans.Identity.IdentityT m) instance (Text.Parsec.Prim.Stream s m t, GHC.Show.Show t) => Distribution.Compat.Parsing.Parsing (Text.Parsec.Prim.ParsecT s u m) -- | A very simple difference list. module Distribution.Compat.DList -- | Difference list. data DList a runDList :: DList a -> [a] empty :: DList a -- | Make DList containing single element. singleton :: a -> DList a fromList :: [a] -> DList a toList :: DList a -> [a] snoc :: DList a -> a -> DList a instance GHC.Base.Monoid (Distribution.Compat.DList.DList a) instance GHC.Base.Semigroup (Distribution.Compat.DList.DList a) -- | This module provides very basic lens functionality, without extra -- dependencies. -- -- For the documentation of the combinators see lens package. This -- module uses the same vocabulary. module Distribution.Compat.Lens type Lens s t a b = forall f. 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. Applicative f => LensLike f s t a b type Traversal' s a = Traversal s s a a type LensLike f s t a b = (a -> f b) -> s -> f t type LensLike' f s a = (a -> f a) -> s -> f s type Getting r s a = LensLike (Const r) s s a a type AGetter s a = LensLike (Const a) 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 -- |
-- >>> (3 :: Int) ^. getting (+2) . getting show -- "5" --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 :: Lens (a, c) (b, c) a b _2 :: Lens (c, a) (c, b) a b -- | & 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 #%~ -- | lens variant is also parametrised by profunctor. data Pretext a b t Pretext :: (forall f. Functor f => (a -> f b) -> f t) -> Pretext a b t [runPretext] :: Pretext a b t -> forall f. Functor f => (a -> f b) -> f t instance GHC.Base.Functor (Distribution.Compat.Lens.Pretext a b) module Distribution.Types.CondTree -- | A CondTree 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 a and c are usually Monoids. -- -- To be more concrete, consider the following fragment of a -- Cabal file: -- --
-- build-depends: base >= 4.0 -- if flag(extra) -- build-depends: base >= 4.2 ---- -- One way to represent this is to have CondTree -- ConfVar [Dependency] BuildInfo. Here, -- condTreeData represents the actual fields which are not behind -- any conditional, while condTreeComponents recursively records -- any further fields which are behind a conditional. -- condTreeConstraints records the constraints (in this case, -- base >= 4.0) which would be applied if you use this -- syntax; in general, this is derived off of targetBuildInfo -- (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 CondBranch represents a conditional branch, e.g., if -- flag(foo) on some syntax a. 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 :: forall b c a v. 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 -- | @Traversal@ for the variables traverseCondTreeV :: Traversal (CondTree v c a) (CondTree w c a) v w -- | @Traversal@ for the variables traverseCondBranchV :: Traversal (CondBranch v c a) (CondBranch w c a) v w -- | @Traversal@ for the aggregated constraints traverseCondTreeC :: Traversal (CondTree v c a) (CondTree v d a) c d -- | @Traversal@ for the aggregated constraints traverseCondBranchC :: Traversal (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 CondBranch using partial flag assignment. When a -- condition cannot be evaluated, returns Nothing. 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.Traversable.Traversable (Distribution.Types.CondTree.CondTree v c) instance Data.Foldable.Foldable (Distribution.Types.CondTree.CondTree v c) instance GHC.Base.Functor (Distribution.Types.CondTree.CondTree v c) instance GHC.Generics.Generic (Distribution.Types.CondTree.CondTree v c a) instance (Data.Data.Data v, Data.Data.Data a, Data.Data.Data c) => Data.Data.Data (Distribution.Types.CondTree.CondTree 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.Show.Show a, GHC.Show.Show c, GHC.Show.Show v) => GHC.Show.Show (Distribution.Types.CondTree.CondTree v c a) instance Data.Traversable.Traversable (Distribution.Types.CondTree.CondBranch v c) instance GHC.Base.Functor (Distribution.Types.CondTree.CondBranch v c) instance GHC.Generics.Generic (Distribution.Types.CondTree.CondBranch v c a) instance (Data.Data.Data v, Data.Data.Data c, Data.Data.Data a) => Data.Data.Data (Distribution.Types.CondTree.CondBranch 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.Show.Show v, GHC.Show.Show a, GHC.Show.Show c) => GHC.Show.Show (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 (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 (Control.DeepSeq.NFData v, Control.DeepSeq.NFData c, Control.DeepSeq.NFData a) => Control.DeepSeq.NFData (Distribution.Types.CondTree.CondTree v c a) instance (GHC.Base.Semigroup a, GHC.Base.Semigroup c) => GHC.Base.Semigroup (Distribution.Types.CondTree.CondTree v c a) instance (GHC.Base.Semigroup a, GHC.Base.Semigroup c, GHC.Base.Monoid a, GHC.Base.Monoid c) => GHC.Base.Monoid (Distribution.Types.CondTree.CondTree v c a) instance Data.Foldable.Foldable (Distribution.Types.CondTree.CondBranch v 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 (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 (Control.DeepSeq.NFData v, Control.DeepSeq.NFData c, Control.DeepSeq.NFData a) => Control.DeepSeq.NFData (Distribution.Types.CondTree.CondBranch v c a) -- | Parsers for character streams -- -- Originally in parsers package. module Distribution.Compat.CharParsing -- | oneOf cs succeeds if the current character is in the supplied -- list of characters cs. Returns the parsed character. See also -- satisfy. -- --
-- vowel = oneOf "aeiou" --oneOf :: CharParsing m => [Char] -> m Char -- | As the dual of oneOf, noneOf cs succeeds if the -- current character is not in the supplied list of characters -- cs. Returns the parsed character. -- --
-- consonant = noneOf "aeiou" --noneOf :: CharParsing m => [Char] -> m Char -- | Skips zero or more white space characters. See also -- skipMany. spaces :: CharParsing m => m () -- | Parses a white space character (any character which satisfies -- isSpace) 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 -- | Parse a single character of the input, with UTF-8 decoding satisfy :: CharParsing m => (Char -> Bool) -> m Char -- | char c parses a single character c. Returns the -- parsed character (i.e. c). -- -- e.g. -- --
-- semiColon = char ';' --char :: CharParsing m => Char -> m Char -- | notChar c parses any single character other than c. -- 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 -- | string s parses a sequence of characters given by s. -- Returns the parsed string (i.e. s). -- --
-- divOrMod = string "div" -- <|> string "mod" --string :: CharParsing m => String -> m String -- | text t parses a sequence of characters determined by the text -- t Returns the parsed text fragment (i.e. t). -- -- Using OverloadedStrings: -- --
-- divOrMod = text "div" -- <|> text "mod" --text :: CharParsing m => Text -> m Text integral :: (CharParsing m, Integral a) => m a -- | Accepts negative (starting with -) 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.Base.MonadPlus m) => Distribution.Compat.CharParsing.CharParsing (Control.Monad.Trans.State.Lazy.StateT s m) instance (Distribution.Compat.CharParsing.CharParsing m, GHC.Base.MonadPlus m) => Distribution.Compat.CharParsing.CharParsing (Control.Monad.Trans.State.Strict.StateT s m) instance (Distribution.Compat.CharParsing.CharParsing m, GHC.Base.MonadPlus m) => Distribution.Compat.CharParsing.CharParsing (Control.Monad.Trans.Reader.ReaderT e m) instance (Distribution.Compat.CharParsing.CharParsing m, GHC.Base.MonadPlus m, GHC.Base.Monoid w) => Distribution.Compat.CharParsing.CharParsing (Control.Monad.Trans.Writer.Strict.WriterT w m) instance (Distribution.Compat.CharParsing.CharParsing m, GHC.Base.MonadPlus m, GHC.Base.Monoid w) => Distribution.Compat.CharParsing.CharParsing (Control.Monad.Trans.Writer.Lazy.WriterT w m) instance (Distribution.Compat.CharParsing.CharParsing m, GHC.Base.MonadPlus m, GHC.Base.Monoid w) => Distribution.Compat.CharParsing.CharParsing (Control.Monad.Trans.RWS.Lazy.RWST r w s m) instance (Distribution.Compat.CharParsing.CharParsing m, GHC.Base.MonadPlus m, GHC.Base.Monoid w) => Distribution.Compat.CharParsing.CharParsing (Control.Monad.Trans.RWS.Strict.RWST r w s m) instance (Distribution.Compat.CharParsing.CharParsing m, GHC.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) module Distribution.CabalSpecVersion -- | Different Cabal-the-spec versions. -- -- We branch based on this at least in the parser. data CabalSpecVersion -- | this is older than CabalSpecV1_2 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 CabalSpecVersion 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. -- -- Note: this is a point where we could decouple cabal-spec and -- Cabal versions, if we ever want that. -- --
-- >>> cabalSpecMinimumLibraryVersion CabalSpecV3_0 -- [2,5] ---- --
-- >>> cabalSpecMinimumLibraryVersion CabalSpecV2_4 -- [2,3] --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 GHC.Generics.Generic Distribution.CabalSpecVersion.CabalSpecVersion instance Data.Data.Data Distribution.CabalSpecVersion.CabalSpecVersion instance GHC.Enum.Bounded Distribution.CabalSpecVersion.CabalSpecVersion instance GHC.Enum.Enum Distribution.CabalSpecVersion.CabalSpecVersion instance GHC.Read.Read Distribution.CabalSpecVersion.CabalSpecVersion instance GHC.Show.Show Distribution.CabalSpecVersion.CabalSpecVersion instance GHC.Classes.Ord Distribution.CabalSpecVersion.CabalSpecVersion instance GHC.Classes.Eq Distribution.CabalSpecVersion.CabalSpecVersion instance GHC.Show.Show Distribution.CabalSpecVersion.HasElif instance GHC.Classes.Eq Distribution.CabalSpecVersion.HasElif instance GHC.Show.Show Distribution.CabalSpecVersion.HasCommonStanzas instance GHC.Classes.Eq Distribution.CabalSpecVersion.HasCommonStanzas instance Data.Binary.Class.Binary Distribution.CabalSpecVersion.CabalSpecVersion instance Distribution.Utils.Structured.Structured Distribution.CabalSpecVersion.CabalSpecVersion instance Control.DeepSeq.NFData Distribution.CabalSpecVersion.CabalSpecVersion module Distribution.SPDX.LicenseListVersion -- | SPDX License List version Cabal 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.Enum.Bounded Distribution.SPDX.LicenseListVersion.LicenseListVersion instance GHC.Enum.Enum Distribution.SPDX.LicenseListVersion.LicenseListVersion instance GHC.Show.Show Distribution.SPDX.LicenseListVersion.LicenseListVersion instance GHC.Classes.Ord Distribution.SPDX.LicenseListVersion.LicenseListVersion instance GHC.Classes.Eq 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 cabal-version: 3.0 we -- don't replace blank lines with dots. showFreeTextV3 :: String -> Doc type Separator = [Doc] -> Doc instance Distribution.Pretty.Pretty Text.PrettyPrint.HughesPJ.Doc instance Distribution.Pretty.Pretty GHC.Types.Bool instance Distribution.Pretty.Pretty GHC.Types.Int instance Distribution.Pretty.Pretty a => Distribution.Pretty.Pretty (Data.Functor.Identity.Identity a) -- | Cabal-like file AST types: Field, Section etc -- -- These types are parametrized by an annotation. module Distribution.Fields.Field -- | A Cabal-like file consists of a series of fields (foo: bar) -- and sections (library ...). 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 Field, including itself. -- -- Note: 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. -- -- Invariant: ByteString 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 SectionArg. sectionArgAnn :: SectionArg ann -> ann type FieldName = ByteString -- | A field name. -- -- Invariant: ByteString 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 [FieldLine] into String. -- -- Note: this doesn't preserve indentation or empty lines, as the -- annotations (e.g. positions) are ignored. fieldLinesToString :: [FieldLine ann] -> String instance Data.Traversable.Traversable Distribution.Fields.Field.FieldLine instance Data.Foldable.Foldable Distribution.Fields.Field.FieldLine instance GHC.Base.Functor Distribution.Fields.Field.FieldLine instance GHC.Show.Show ann => GHC.Show.Show (Distribution.Fields.Field.FieldLine ann) instance GHC.Classes.Eq ann => GHC.Classes.Eq (Distribution.Fields.Field.FieldLine ann) instance Data.Traversable.Traversable Distribution.Fields.Field.SectionArg instance Data.Foldable.Foldable Distribution.Fields.Field.SectionArg instance GHC.Base.Functor Distribution.Fields.Field.SectionArg instance GHC.Show.Show ann => GHC.Show.Show (Distribution.Fields.Field.SectionArg ann) instance GHC.Classes.Eq ann => GHC.Classes.Eq (Distribution.Fields.Field.SectionArg ann) instance Data.Traversable.Traversable Distribution.Fields.Field.Name instance Data.Foldable.Foldable Distribution.Fields.Field.Name instance GHC.Base.Functor Distribution.Fields.Field.Name instance GHC.Show.Show ann => GHC.Show.Show (Distribution.Fields.Field.Name ann) instance GHC.Classes.Eq ann => GHC.Classes.Eq (Distribution.Fields.Field.Name ann) instance Data.Traversable.Traversable Distribution.Fields.Field.Field instance Data.Foldable.Foldable Distribution.Fields.Field.Field instance GHC.Base.Functor Distribution.Fields.Field.Field instance GHC.Show.Show ann => GHC.Show.Show (Distribution.Fields.Field.Field ann) instance GHC.Classes.Eq ann => GHC.Classes.Eq (Distribution.Fields.Field.Field ann) 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.SectionArg ann) instance GHC.Classes.Ord ann => GHC.Classes.Ord (Distribution.Fields.Field.Name ann) instance Data.Foldable1.Foldable1 Distribution.Fields.Field.Field instance Data.Foldable1.Foldable1 Distribution.Fields.Field.Name instance Data.Foldable1.Foldable1 Distribution.Fields.Field.SectionArg instance Data.Foldable1.Foldable1 Distribution.Fields.Field.FieldLine module Distribution.Fields.Parser -- | A Cabal-like file consists of a series of fields (foo: bar) -- and sections (library ...). data Field ann Field :: !Name ann -> [FieldLine ann] -> Field ann Section :: !Name ann -> [SectionArg ann] -> [Field ann] -> Field ann -- | A field name. -- -- Invariant: ByteString 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. -- -- Invariant: ByteString 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 ByteString into list of Fields, i.e. -- the cabal AST. -- -- readFields assumes that input ByteString is valid UTF8, -- specifically it doesn't validate that file is valid UTF8. Therefore -- bytestrings inside returned Field will be invalid as UTF8 if -- the input were. -- --
-- >>> readFields "foo: \223" -- Right [Field (Name (Position 1 1) "foo") [FieldLine (Position 1 6) "\223"]] ---- -- readFields won't (necessarily) fail on invalid UTF8 data, but -- the reported positions may be off. -- -- You may get weird errors on non-UTF8 input, for example -- readFields will fail on latin1 encoded non-breaking space: -- --
-- >>> isLeft (readFields "\xa0 foo: bar") -- True ---- -- That is rejected because parser thinks \xa0 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: -- --
-- >>> readFields "\xa0\&foo: bar" -- Right [Field (Name (Position 1 1) "\160foo") [FieldLine (Position 1 7) "bar"]] ---- -- The UTF8 non-breaking space is accepted as an indentation character -- (but warned about by readFields'). -- --
-- >>> readFields' "\xc2\xa0 foo: bar" -- Right ([Field (Name (Position 1 3) "foo") [FieldLine (Position 1 8) "bar"]],[LexWarning LexWarningNBSP (Position 1 1)]) --readFields :: ByteString -> Either ParseError [Field Position] -- | Like readFields but also return lexer warnings. readFields' :: ByteString -> Either ParseError ([Field Position], [LexWarning]) instance Text.Parsec.Prim.Stream Distribution.Fields.Parser.LexState' Data.Functor.Identity.Identity Distribution.Fields.Lexer.LToken -- | Cabal-like file AST types: Field, Section 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 -- PrettyField. 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 Strings without newlines -- and properly prefixes (with --) 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 -- | showFields with user specified indentation. showFields' :: (ann -> CommentPosition) -> (ann -> [String] -> [String]) -> Int -> [PrettyField ann] -> String -- | Simple variant of genericFromParsecField 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 fromParsecFields. prettyFieldLines :: FieldName -> [FieldLine ann] -> Doc -- | Used in fromParsecFields. prettySectionArgs :: FieldName -> [SectionArg ann] -> [Doc] instance Data.Traversable.Traversable Distribution.Fields.Pretty.PrettyField instance Data.Foldable.Foldable Distribution.Fields.Pretty.PrettyField instance GHC.Base.Functor Distribution.Fields.Pretty.PrettyField instance GHC.Classes.Eq Distribution.Fields.Pretty.Margin instance GHC.Base.Semigroup Distribution.Fields.Pretty.Margin module Distribution.Parsec -- | Class for parsing with parsec. Mainly used for -- .cabal file fields. -- -- For parsing .cabal like file structure, see -- Distribution.Fields. 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 ParsecParser with cabalSpecLatest. runParsecParser :: ParsecParser a -> FilePath -> FieldLineStream -> Either ParseError a -- | Like runParsecParser but lets specify CabalSpecVersion -- used. runParsecParser' :: CabalSpecVersion -> ParsecParser a -> FilePath -> FieldLineStream -> Either ParseError a -- | Parse a String with lexemeParsec. simpleParsec :: Parsec a => String -> Maybe a -- | Like simpleParsec but for ByteString simpleParsecBS :: Parsec a => ByteString -> Maybe a -- | Parse a String with lexemeParsec using specific -- CabalSpecVersion. simpleParsec' :: Parsec a => CabalSpecVersion -> String -> Maybe a -- | Parse a String with lexemeParsec using specific -- CabalSpecVersion. Fail if there are any warnings. simpleParsecW' :: Parsec a => CabalSpecVersion -> String -> Maybe a -- | parsec could consume trailing spaces, this function -- will consume. lexemeParsec :: (CabalParsing m, Parsec a) => m a -- | Parse a String with lexemeParsec. eitherParsec :: Parsec a => String -> Either String a -- | Parse a String with given ParsecParser. Trailing -- whitespace is accepted. explicitEitherParsec :: ParsecParser a -> String -> Either String a -- | Parse a String with given ParsecParser and -- CabalSpecVersion. Trailing whitespace is accepted. See -- explicitEitherParsec. explicitEitherParsec' :: CabalSpecVersion -> ParsecParser a -> String -> Either String a -- | Parsing class which -- --
-- [^ ,] --parsecToken :: CabalParsing m => m String -- |
-- [^ ] --parsecToken' :: CabalParsing m => m String parsecFilePath :: CabalParsing m => m FilePath -- | Content isn't unquoted parsecQuoted :: CabalParsing m => m a -> m a -- | parsecMaybeQuoted p = parsecQuoted p | p. parsecMaybeQuoted :: CabalParsing m => m a -> m a parsecCommaList :: CabalParsing m => m a -> m [a] parsecCommaNonEmpty :: CabalParsing m => m a -> m (NonEmpty a) -- | Like parsecCommaList but accept leading or trailing comma. -- --
-- p (comma p)* -- p sepBy comma -- (comma p)* -- leading comma -- (p comma)* -- trailing comma --parsecLeadingCommaList :: CabalParsing m => m a -> m [a] parsecLeadingCommaNonEmpty :: CabalParsing m => m a -> m (NonEmpty a) parsecOptCommaList :: CabalParsing m => m a -> m [a] -- | Like parsecOptCommaList but -- --
-- p (comma p)* -- p sepBy comma -- (comma p)* -- leading comma -- (p comma)* -- trailing comma -- p* -- no commas: many p --parsecLeadingOptCommaList :: CabalParsing m => m a -> m [a] -- | Parse a benchmark/test-suite types. parsecStandard :: (CabalParsing m, Parsec ver) => (ver -> String -> a) -> m a parsecUnqualComponentName :: forall m. CabalParsing m => m String instance GHC.Base.Functor Distribution.Parsec.ParsecParser instance GHC.Base.Applicative Distribution.Parsec.ParsecParser instance GHC.Base.Alternative Distribution.Parsec.ParsecParser instance GHC.Base.Monad Distribution.Parsec.ParsecParser instance GHC.Base.MonadPlus Distribution.Parsec.ParsecParser instance Control.Monad.Fail.MonadFail Distribution.Parsec.ParsecParser instance Distribution.Compat.Parsing.Parsing Distribution.Parsec.ParsecParser instance Distribution.Compat.CharParsing.CharParsing Distribution.Parsec.ParsecParser instance Distribution.Parsec.CabalParsing Distribution.Parsec.ParsecParser instance Distribution.Parsec.Parsec a => Distribution.Parsec.Parsec (Data.Functor.Identity.Identity a) instance Distribution.Parsec.Parsec GHC.Types.Bool module Distribution.Utils.Path -- | Symbolic paths. -- -- These paths are system independent and relative. They are *symbolic* -- which means we cannot perform any IO until we interpret them. data SymbolicPath from to -- | Extract underlying FilePath. -- -- Avoid using this in new code. getSymbolicPath :: SymbolicPath from to -> FilePath sameDirectory :: (IsDir from, IsDir to) => SymbolicPath from to -- | Make SymbolicPath 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.Data.Data from, Data.Data.Data to) => Data.Data.Data (Distribution.Utils.Path.SymbolicPath from to) instance GHC.Classes.Ord (Distribution.Utils.Path.SymbolicPath from to) instance GHC.Classes.Eq (Distribution.Utils.Path.SymbolicPath from to) instance GHC.Read.Read (Distribution.Utils.Path.SymbolicPath from to) instance GHC.Show.Show (Distribution.Utils.Path.SymbolicPath from to) instance GHC.Generics.Generic (Distribution.Utils.Path.SymbolicPath from to) instance Data.Data.Data Distribution.Utils.Path.PackageDir instance Data.Data.Data Distribution.Utils.Path.SourceDir instance Data.Data.Data Distribution.Utils.Path.LicenseFile instance Distribution.Utils.Path.IsDir Distribution.Utils.Path.SourceDir instance Distribution.Utils.Path.IsDir Distribution.Utils.Path.PackageDir instance Data.Binary.Class.Binary (Distribution.Utils.Path.SymbolicPath from to) instance (Data.Typeable.Internal.Typeable from, Data.Typeable.Internal.Typeable to) => Distribution.Utils.Structured.Structured (Distribution.Utils.Path.SymbolicPath from to) instance Control.DeepSeq.NFData (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) module Distribution.Types.Version -- | A Version represents the version of a software entity. -- -- Instances of Eq and Ord are provided, which gives exact -- equality and lexicographic ordering of the version number components -- (i.e. 2.1 > 2.0, 1.2.3 > 1.2.2, etc.). -- -- This type is opaque and distinct from the Version type in -- Data.Version since Cabal-2.0. The difference extends -- to the Binary instance using a different (and more compact) -- encoding. data Version -- | Construct Version from list of version number components. -- -- For instance, mkVersion [3,2,1] constructs a Version -- representing the version 3.2.1. -- -- All version components must be non-negative. mkVersion [] -- currently represents the special null version; see also -- nullVersion. mkVersion :: [Int] -> Version -- | Variant of mkVersion which converts a Data.Version -- Version into Cabal's Version type. mkVersion' :: Version -> Version -- | Unpack Version into list of version number components. -- -- This is the inverse to mkVersion, so the following holds: -- --
-- (versionNumbers . mkVersion) vs == vs --versionNumbers :: Version -> [Int] -- | Constant representing the special null Version -- -- The nullVersion compares (via Ord) as less than every -- proper Version value. nullVersion :: Version -- | Apply function to list of version number components -- --
-- alterVersion f == mkVersion . f . versionNumbers --alterVersion :: ([Int] -> [Int]) -> Version -> Version -- | Version 0. A lower bound of Version. version0 :: Version validVersion :: Version -> Bool -- | An integral without leading zeroes. versionDigitParser :: CabalParsing m => m Int instance GHC.Generics.Generic Distribution.Types.Version.Version instance GHC.Classes.Eq Distribution.Types.Version.Version instance Data.Data.Data Distribution.Types.Version.Version instance GHC.Classes.Ord Distribution.Types.Version.Version instance GHC.Show.Show Distribution.Types.Version.Version instance GHC.Read.Read Distribution.Types.Version.Version instance Data.Binary.Class.Binary Distribution.Types.Version.Version instance Distribution.Utils.Structured.Structured Distribution.Types.Version.Version instance Control.DeepSeq.NFData Distribution.Types.Version.Version instance Distribution.Pretty.Pretty Distribution.Types.Version.Version instance Distribution.Parsec.Parsec Distribution.Types.Version.Version -- | The only purpose of this module is to prevent the export of -- VersionRange constructors from -- Distribution.Types.VersionRange. 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 -any. That is, a version range containing -- all versions. -- --
-- withinRange v anyVersion = True --anyVersion :: VersionRange -- | The empty version range -none, that is a version range -- containing no versions. -- -- This can be constructed using any unsatisfiable version range -- expression, for example < 0. -- --
-- withinRange v noVersion = False --noVersion :: VersionRange -- | The version range == v. -- --
-- withinRange v' (thisVersion v) = v' == v --thisVersion :: Version -> VersionRange -- | The version range /= v. -- --
-- withinRange v' (notThisVersion v) = v' /= v --notThisVersion :: Version -> VersionRange -- | The version range > v. -- --
-- withinRange v' (laterVersion v) = v' > v --laterVersion :: Version -> VersionRange -- | The version range < v. -- --
-- withinRange v' (earlierVersion v) = v' < v --earlierVersion :: Version -> VersionRange -- | The version range >= v. -- --
-- withinRange v' (orLaterVersion v) = v' >= v --orLaterVersion :: Version -> VersionRange -- | The version range <= v. -- --
-- withinRange v' (orEarlierVersion v) = v' <= v --orEarlierVersion :: Version -> VersionRange -- | The version range vr1 || vr2. -- --
-- withinRange v' (unionVersionRanges vr1 vr2) -- = withinRange v' vr1 || withinRange v' vr2 --unionVersionRanges :: VersionRange -> VersionRange -> VersionRange -- | The version range vr1 && vr2. -- --
-- withinRange v' (intersectVersionRanges vr1 vr2) -- = withinRange v' vr1 && withinRange v' vr2 --intersectVersionRanges :: VersionRange -> VersionRange -> VersionRange -- | The version range == v.*. -- -- For example, for version 1.2, the version range == -- 1.2.* is the same as >= 1.2 && < 1.3. -- --
-- withinRange v' (withinVersion v) = v' >= v && v' < upper v -- where -- upper (Version lower t) = Version (init lower ++ [last lower + 1]) t --withinVersion :: Version -> VersionRange -- | The version range ^>= v. -- -- For example, for version 1.2.3.4, the version range -- ^>= 1.2.3.4 is the same as >= 1.2.3.4 && -- < 1.3. -- -- Note that ^>= 1 is equivalent to >= 1 && -- < 1.1. majorBoundVersion :: Version -> VersionRange -- | F-Algebra of VersionRange. See cataVersionRange. data VersionRangeF a -- | == version. ThisVersionF :: Version -> VersionRangeF a -- | > version. NB: not >= LaterVersionF :: Version -> VersionRangeF a -- | >= version. OrLaterVersionF :: Version -> VersionRangeF a -- | < version. EarlierVersionF :: Version -> VersionRangeF a -- | <= version. OrEarlierVersionF :: Version -> VersionRangeF a -- | ^>= version, same as >= version && < -- MAJ(version)+1. MajorBoundVersionF :: Version -> VersionRangeF a -- | ||. UnionVersionRangesF :: a -> a -> VersionRangeF a -- | &&. IntersectVersionRangesF :: a -> a -> VersionRangeF a -- | Generic destructor for VersionRange. projectVersionRange :: VersionRange -> VersionRangeF VersionRange -- | Generic constructor for VersionRange. embedVersionRange :: VersionRangeF VersionRange -> VersionRange -- | Fold VersionRange. cataVersionRange :: (VersionRangeF a -> a) -> VersionRange -> a -- | Unfold VersionRange. anaVersionRange :: (a -> VersionRangeF a) -> a -> VersionRange -- | Refold VersionRange. hyloVersionRange :: (VersionRangeF VersionRange -> VersionRange) -> (VersionRange -> VersionRangeF VersionRange) -> VersionRange -> VersionRange -- | VersionRange parser parametrised by version digit parser. -- --
-- withinIntervals v (toVersionIntervals vr) = withinRange v vr -- withinIntervals v ivs = withinRange v (fromVersionIntervals ivs) --withinIntervals :: Version -> VersionIntervals -> Bool -- | Inspect the list of version intervals. versionIntervals :: VersionIntervals -> [VersionInterval] -- | Directly construct a VersionIntervals from a list of intervals. mkVersionIntervals :: [VersionInterval] -> VersionIntervals -- | Union two interval sequences, fusing intervals where necessary. -- Computed <math> time, resulting in sequence of length -- <math>. unionVersionIntervals :: VersionIntervals -> VersionIntervals -> VersionIntervals -- | The intersection <math> of two interval sequences <math> -- and <math> of lengths <math> and <math>, resp., -- satisfies the specification <math>. Thanks to the ordered -- representation of intervals it can be computed in <math> (rather -- than the naive <math>. -- -- The length of <math> is <math>. intersectVersionIntervals :: VersionIntervals -> VersionIntervals -> VersionIntervals -- | Compute the complement. <math>. invertVersionIntervals :: VersionIntervals -> VersionIntervals -- | Remove the last upper bound, enlarging the range. But empty ranges -- stay empty. <math>. relaxLastInterval :: VersionIntervals -> VersionIntervals -- | Remove the first lower bound (i.e, make it <math>. Empty ranges -- stay empty. <math>. relaxHeadInterval :: VersionIntervals -> VersionIntervals -- | View a VersionRange as a sequence of separated intervals. -- -- This provides a canonical view of the semantics of a -- VersionRange as opposed to the syntax of the expression used to -- define it. For the syntactic view use foldVersionRange. -- -- Canonical means that two semantically equal ranges translate to -- the same [VersionInterval], thus its Eq -- 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 > 2 && < 1). -- -- Other checks are trivial to implement using this view. For example: -- --
-- isNoVersion vr | [] <- asVersionIntervals vr = True -- | otherwise = False ---- --
-- isSpecificVersion vr -- | [(LowerBound v InclusiveBound -- ,UpperBound v' InclusiveBound)] <- asVersionIntervals vr -- , v == v' = Just v -- | otherwise = Nothing --asVersionIntervals :: VersionRange -> [VersionInterval] -- | Version intervals with exclusive or inclusive bounds, in all -- combinations: -- --
-- ..,∞) --NoUpperBound :: UpperBound -- | Either exclusive ..,v) or inclusive ..,v]. UpperBound :: Version -> !Bound -> UpperBound data Bound -- | (v,.. if used as lower bound, ..,v) if used as upper -- bound. ExclusiveBound :: Bound -- | [v,.. if used as lower bound, ..,v] if used as upper -- bound. InclusiveBound :: Bound instance GHC.Show.Show Distribution.Types.VersionInterval.Legacy.Bound instance GHC.Classes.Eq Distribution.Types.VersionInterval.Legacy.Bound instance GHC.Show.Show Distribution.Types.VersionInterval.Legacy.UpperBound instance GHC.Classes.Eq Distribution.Types.VersionInterval.Legacy.UpperBound instance GHC.Show.Show Distribution.Types.VersionInterval.Legacy.LowerBound instance GHC.Classes.Eq Distribution.Types.VersionInterval.Legacy.LowerBound instance GHC.Show.Show Distribution.Types.VersionInterval.Legacy.VersionIntervals 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 -- | This module implements a view of a VersionRange as a finite -- list of separated version intervals. -- -- In conversion from and to VersionRange it makes some effort to -- preserve the caret operator ^>=x.y. This constraint a -- priori specifies the same interval as ==x.y.*, but indicates -- that newer versions could be acceptable (allow-newer: ^). module Distribution.Types.VersionInterval -- | A complementary representation of a VersionRange. 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 VersionRanges. 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 VersionIntervals from a list of intervals. mkVersionIntervals :: [VersionInterval] -> Maybe VersionIntervals -- | Convert a VersionRange to a sequence of version intervals. toVersionIntervals :: VersionRange -> VersionIntervals -- | Convert a VersionIntervals value back into a -- VersionRange expression representing the version intervals. fromVersionIntervals :: VersionIntervals -> VersionRange -- | Since Cabal-3.6 this function.. TODO normaliseVersionRange2 :: VersionRange -> VersionRange relaxLastInterval :: VersionIntervals -> VersionIntervals relaxHeadInterval :: VersionIntervals -> VersionIntervals -- | View a VersionRange as a union of intervals. -- -- This provides a canonical view of the semantics of a -- VersionRange as opposed to the syntax of the expression used to -- define it. For the syntactic view use foldVersionRange. -- -- 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 && 2). -- -- Other checks are trivial to implement using this view. For example: -- --
-- isNoVersion vr | [] <- asVersionIntervals vr = True -- | otherwise = False ---- --
-- isSpecificVersion vr -- | [(LowerBound v InclusiveBound -- ,UpperBound v' InclusiveBound)] <- asVersionIntervals vr -- , v == v' = Just v -- | otherwise = Nothing --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 -- | VersionIntervals invariant: -- --
-- withinRange v anyVersion = True --anyVersion :: VersionRange -- | The empty version range -none, that is a version range -- containing no versions. -- -- This can be constructed using any unsatisfiable version range -- expression, for example < 0. -- --
-- withinRange v noVersion = False --noVersion :: VersionRange -- | The version range == v. -- --
-- withinRange v' (thisVersion v) = v' == v --thisVersion :: Version -> VersionRange -- | The version range /= v. -- --
-- withinRange v' (notThisVersion v) = v' /= v --notThisVersion :: Version -> VersionRange -- | The version range > v. -- --
-- withinRange v' (laterVersion v) = v' > v --laterVersion :: Version -> VersionRange -- | The version range < v. -- --
-- withinRange v' (earlierVersion v) = v' < v --earlierVersion :: Version -> VersionRange -- | The version range >= v. -- --
-- withinRange v' (orLaterVersion v) = v' >= v --orLaterVersion :: Version -> VersionRange -- | The version range <= v. -- --
-- withinRange v' (orEarlierVersion v) = v' <= v --orEarlierVersion :: Version -> VersionRange -- | The version range vr1 || vr2. -- --
-- withinRange v' (unionVersionRanges vr1 vr2) -- = withinRange v' vr1 || withinRange v' vr2 --unionVersionRanges :: VersionRange -> VersionRange -> VersionRange -- | The version range vr1 && vr2. -- --
-- withinRange v' (intersectVersionRanges vr1 vr2) -- = withinRange v' vr1 && withinRange v' vr2 --intersectVersionRanges :: VersionRange -> VersionRange -> VersionRange -- | The version range == v.*. -- -- For example, for version 1.2, the version range == -- 1.2.* is the same as >= 1.2 && < 1.3. -- --
-- withinRange v' (withinVersion v) = v' >= v && v' < upper v -- where -- upper (Version lower t) = Version (init lower ++ [last lower + 1]) t --withinVersion :: Version -> VersionRange -- | The version range ^>= v. -- -- For example, for version 1.2.3.4, the version range -- ^>= 1.2.3.4 is the same as >= 1.2.3.4 && -- < 1.3. -- -- Note that ^>= 1 is equivalent to >= 1 && -- < 1.1. majorBoundVersion :: Version -> VersionRange -- | Does this version fall within the given range? -- -- This is the evaluation function for the VersionRange type. withinRange :: Version -> VersionRange -> Bool -- | Fold over the basic syntactic structure of a VersionRange. -- -- This provides a syntactic view of the expression defining the version -- range. The syntactic sugar ">= v", "<= v" and -- "== v.*" is presented in terms of the other basic syntax. -- -- For a semantic view use asVersionIntervals. foldVersionRange :: a -> (Version -> a) -> (Version -> a) -> (Version -> a) -> (a -> a -> a) -> (a -> a -> a) -> VersionRange -> a -- | Normalise VersionRange. -- -- In particular collapse (== v || > v) into >= -- v, and so on. normaliseVersionRange :: VersionRange -> VersionRange -- | Remove VersionRangeParens constructors. -- -- Since version 3.4 this function is id, there aren't -- VersionRangeParens constructor in VersionRange -- 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 >=0 lower bound. hasLowerBound :: VersionRange -> Bool -- | F-Algebra of VersionRange. See cataVersionRange. data VersionRangeF a -- | == version. ThisVersionF :: Version -> VersionRangeF a -- | > version. NB: not >= LaterVersionF :: Version -> VersionRangeF a -- | >= version. OrLaterVersionF :: Version -> VersionRangeF a -- | < version. EarlierVersionF :: Version -> VersionRangeF a -- | <= version. OrEarlierVersionF :: Version -> VersionRangeF a -- | ^>= version, same as >= version && < -- MAJ(version)+1. MajorBoundVersionF :: Version -> VersionRangeF a -- | ||. UnionVersionRangesF :: a -> a -> VersionRangeF a -- | &&. IntersectVersionRangesF :: a -> a -> VersionRangeF a -- | Fold VersionRange. cataVersionRange :: (VersionRangeF a -> a) -> VersionRange -> a -- | Unfold VersionRange. anaVersionRange :: (a -> VersionRangeF a) -> a -> VersionRange -- | Refold VersionRange. hyloVersionRange :: (VersionRangeF VersionRange -> VersionRange) -> (VersionRange -> VersionRangeF VersionRange) -> VersionRange -> VersionRange -- | Generic destructor for VersionRange. projectVersionRange :: VersionRange -> VersionRangeF VersionRange -- | Generic constructor for VersionRange. embedVersionRange :: VersionRangeF VersionRange -> VersionRange -- | Does this VersionRange place any restriction on the -- Version or is it in fact equivalent to AnyVersion. -- -- Note this is a semantic check, not simply a syntactic check. So for -- example the following is True (for all v). -- --
-- isAnyVersion (EarlierVersion v `UnionVersionRanges` orLaterVersion v) --isAnyVersion :: VersionRange -> Bool isAnyVersionLight :: VersionRange -> Bool -- | Increment the last version number. -- -- Example: For 1.2 this returns 1.3 so that it can be -- used as upper bound when resolving == 1.2.*. For -- 0.4.1 it returns 0.4.2. wildcardUpperBound :: Version -> Version -- | Compute next greater major version to be used as upper bound. -- -- Example: 0.4.1 produces the version 0.5 which then -- can be used to construct a range >= 0.4.1 && < -- 0.5 majorUpperBound :: Version -> Version isWildcardRange :: Version -> Version -> Bool -- | VersionRange parser parametrised by version digit parser. -- --
-- >>> decodeCompatPackageName "z-servant-z-lackey" -- MungedPackageName (PackageName "servant") (LSubLibName (UnqualComponentName "lackey")) --decodeCompatPackageName :: PackageName -> MungedPackageName -- | Intended for internal use only -- --
-- >>> encodeCompatPackageName $ MungedPackageName "servant" (LSubLibName "lackey") -- PackageName "z-servant-z-lackey" ---- -- This is used in cabal-install in the Solver. May become -- obsolete as solver moves to per-component solving. encodeCompatPackageName :: MungedPackageName -> PackageName instance Data.Data.Data Distribution.Types.MungedPackageName.MungedPackageName instance GHC.Classes.Ord Distribution.Types.MungedPackageName.MungedPackageName instance GHC.Classes.Eq Distribution.Types.MungedPackageName.MungedPackageName instance GHC.Show.Show Distribution.Types.MungedPackageName.MungedPackageName instance GHC.Read.Read Distribution.Types.MungedPackageName.MungedPackageName instance GHC.Generics.Generic Distribution.Types.MungedPackageName.MungedPackageName instance Data.Binary.Class.Binary Distribution.Types.MungedPackageName.MungedPackageName instance Distribution.Utils.Structured.Structured Distribution.Types.MungedPackageName.MungedPackageName instance Control.DeepSeq.NFData Distribution.Types.MungedPackageName.MungedPackageName instance Distribution.Pretty.Pretty Distribution.Types.MungedPackageName.MungedPackageName instance Distribution.Parsec.Parsec Distribution.Types.MungedPackageName.MungedPackageName module Distribution.Types.ForeignLibType -- | What kind of foreign library is to be built? data ForeignLibType -- | A native shared library (.so on Linux, .dylib on -- OSX, or .dll on Windows). ForeignLibNativeShared :: ForeignLibType -- | A native static library (not currently supported.) ForeignLibNativeStatic :: ForeignLibType ForeignLibTypeUnknown :: ForeignLibType knownForeignLibTypes :: [ForeignLibType] foreignLibTypeIsShared :: ForeignLibType -> Bool instance Data.Data.Data Distribution.Types.ForeignLibType.ForeignLibType instance GHC.Classes.Ord Distribution.Types.ForeignLibType.ForeignLibType instance GHC.Classes.Eq Distribution.Types.ForeignLibType.ForeignLibType instance GHC.Read.Read Distribution.Types.ForeignLibType.ForeignLibType instance GHC.Show.Show Distribution.Types.ForeignLibType.ForeignLibType instance GHC.Generics.Generic Distribution.Types.ForeignLibType.ForeignLibType instance Distribution.Pretty.Pretty Distribution.Types.ForeignLibType.ForeignLibType instance Distribution.Parsec.Parsec Distribution.Types.ForeignLibType.ForeignLibType instance Data.Binary.Class.Binary Distribution.Types.ForeignLibType.ForeignLibType instance Distribution.Utils.Structured.Structured Distribution.Types.ForeignLibType.ForeignLibType instance Control.DeepSeq.NFData Distribution.Types.ForeignLibType.ForeignLibType instance GHC.Base.Semigroup Distribution.Types.ForeignLibType.ForeignLibType instance GHC.Base.Monoid Distribution.Types.ForeignLibType.ForeignLibType module Distribution.Types.ForeignLibOption data ForeignLibOption -- | Merge in all dependent libraries (i.e., use ghc -shared -- -static rather than just record the dependencies, ala ghc -- -shared -dynamic). This option is compulsory on Windows and -- unsupported on other platforms. ForeignLibStandalone :: ForeignLibOption instance Data.Data.Data Distribution.Types.ForeignLibOption.ForeignLibOption instance GHC.Classes.Ord Distribution.Types.ForeignLibOption.ForeignLibOption instance GHC.Classes.Eq Distribution.Types.ForeignLibOption.ForeignLibOption instance GHC.Read.Read Distribution.Types.ForeignLibOption.ForeignLibOption instance GHC.Show.Show Distribution.Types.ForeignLibOption.ForeignLibOption instance GHC.Generics.Generic Distribution.Types.ForeignLibOption.ForeignLibOption instance Distribution.Pretty.Pretty Distribution.Types.ForeignLibOption.ForeignLibOption instance Distribution.Parsec.Parsec Distribution.Types.ForeignLibOption.ForeignLibOption instance Data.Binary.Class.Binary Distribution.Types.ForeignLibOption.ForeignLibOption instance Distribution.Utils.Structured.Structured Distribution.Types.ForeignLibOption.ForeignLibOption instance Control.DeepSeq.NFData 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 PackageFlag initialized with default parameters. emptyFlag :: FlagName -> PackageFlag -- | A FlagName is the name of a user-defined configuration flag -- -- Use mkFlagName and unFlagName to convert from/to a -- String. -- -- This type is opaque since Cabal-2.0 data FlagName -- | Construct a FlagName from a String -- -- mkFlagName is the inverse to unFlagName -- -- Note: No validations are performed to ensure that the resulting -- FlagName is valid mkFlagName :: String -> FlagName -- | Convert FlagName to String unFlagName :: FlagName -> String -- | A FlagAssignment is a total or partial mapping of -- FlagNames to Bool flag values. It represents the flags -- chosen by the user or discovered during configuration. For example -- --flags=foo --flags=-bar becomes [("foo", True), ("bar", -- False)] -- -- TODO: Why we record the multiplicity of the flag? data FlagAssignment -- | Construct a FlagAssignment 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 FlagAssignment into a list of flag/value pairs. -- --
-- null (findDuplicateFlagAssignments fa) ==> (mkFlagAssignment . unFlagAssignment) fa == fa --unFlagAssignment :: FlagAssignment -> [(FlagName, Bool)] -- | Lookup the value for a flag -- -- Returns Nothing if the flag isn't contained in the -- FlagAssignment. lookupFlagAssignment :: FlagName -> FlagAssignment -> Maybe Bool -- | Insert or update the boolean value of a flag. -- -- If the flag is already present in the FlagAssignment, 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 FlagAssignment that -- are contained in the second FlagAssignment -- -- 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 FlagNames that have been listed more than once. findDuplicateFlagAssignments :: FlagAssignment -> [FlagName] -- | Test whether FlagAssignment 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 Control.DeepSeq.NFData Distribution.Types.Flag.FlagName instance Data.Data.Data Distribution.Types.Flag.FlagName instance GHC.Read.Read Distribution.Types.Flag.FlagName instance GHC.Show.Show Distribution.Types.Flag.FlagName instance GHC.Classes.Ord Distribution.Types.Flag.FlagName instance GHC.Generics.Generic Distribution.Types.Flag.FlagName instance GHC.Classes.Eq Distribution.Types.Flag.FlagName instance GHC.Generics.Generic Distribution.Types.Flag.PackageFlag instance Data.Data.Data Distribution.Types.Flag.PackageFlag instance GHC.Classes.Eq Distribution.Types.Flag.PackageFlag instance GHC.Show.Show Distribution.Types.Flag.PackageFlag instance Control.DeepSeq.NFData Distribution.Types.Flag.FlagAssignment instance GHC.Generics.Generic Distribution.Types.Flag.FlagAssignment instance Data.Binary.Class.Binary Distribution.Types.Flag.FlagAssignment instance Distribution.Utils.Structured.Structured Distribution.Types.Flag.FlagAssignment instance GHC.Classes.Eq Distribution.Types.Flag.FlagAssignment instance GHC.Classes.Ord Distribution.Types.Flag.FlagAssignment instance GHC.Base.Semigroup Distribution.Types.Flag.FlagAssignment instance GHC.Base.Monoid Distribution.Types.Flag.FlagAssignment instance GHC.Read.Read Distribution.Types.Flag.FlagAssignment instance GHC.Show.Show Distribution.Types.Flag.FlagAssignment instance Distribution.Pretty.Pretty Distribution.Types.Flag.FlagAssignment instance Distribution.Parsec.Parsec Distribution.Types.Flag.FlagAssignment instance Data.Binary.Class.Binary Distribution.Types.Flag.PackageFlag instance Distribution.Utils.Structured.Structured Distribution.Types.Flag.PackageFlag instance Control.DeepSeq.NFData Distribution.Types.Flag.PackageFlag instance Data.String.IsString Distribution.Types.Flag.FlagName instance Data.Binary.Class.Binary Distribution.Types.Flag.FlagName instance Distribution.Utils.Structured.Structured Distribution.Types.Flag.FlagName instance Distribution.Pretty.Pretty Distribution.Types.Flag.FlagName instance Distribution.Parsec.Parsec Distribution.Types.Flag.FlagName module Distribution.Types.ExecutableScope data ExecutableScope ExecutablePublic :: ExecutableScope ExecutablePrivate :: ExecutableScope instance Data.Data.Data Distribution.Types.ExecutableScope.ExecutableScope instance GHC.Classes.Ord Distribution.Types.ExecutableScope.ExecutableScope instance GHC.Classes.Eq Distribution.Types.ExecutableScope.ExecutableScope instance GHC.Read.Read Distribution.Types.ExecutableScope.ExecutableScope instance GHC.Show.Show Distribution.Types.ExecutableScope.ExecutableScope instance GHC.Generics.Generic Distribution.Types.ExecutableScope.ExecutableScope instance Distribution.Pretty.Pretty Distribution.Types.ExecutableScope.ExecutableScope instance Distribution.Parsec.Parsec Distribution.Types.ExecutableScope.ExecutableScope instance Data.Binary.Class.Binary Distribution.Types.ExecutableScope.ExecutableScope instance Distribution.Utils.Structured.Structured Distribution.Types.ExecutableScope.ExecutableScope instance Control.DeepSeq.NFData Distribution.Types.ExecutableScope.ExecutableScope instance GHC.Base.Semigroup Distribution.Types.ExecutableScope.ExecutableScope instance GHC.Base.Monoid 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 -- Nothing if the ComponentName was for the public -- library. componentNameString :: ComponentName -> Maybe UnqualComponentName instance GHC.Show.Show Distribution.Types.ComponentName.NotLibComponentName instance GHC.Read.Read Distribution.Types.ComponentName.NotLibComponentName instance GHC.Classes.Ord Distribution.Types.ComponentName.NotLibComponentName instance GHC.Generics.Generic Distribution.Types.ComponentName.NotLibComponentName instance GHC.Classes.Eq Distribution.Types.ComponentName.NotLibComponentName instance GHC.Show.Show Distribution.Types.ComponentName.ComponentName instance GHC.Read.Read Distribution.Types.ComponentName.ComponentName instance GHC.Classes.Ord Distribution.Types.ComponentName.ComponentName instance GHC.Generics.Generic Distribution.Types.ComponentName.ComponentName instance GHC.Classes.Eq Distribution.Types.ComponentName.ComponentName instance Data.Binary.Class.Binary Distribution.Types.ComponentName.ComponentName instance Distribution.Utils.Structured.Structured Distribution.Types.ComponentName.ComponentName instance Distribution.Pretty.Pretty Distribution.Types.ComponentName.ComponentName instance Distribution.Parsec.Parsec Distribution.Types.ComponentName.ComponentName instance Data.Binary.Class.Binary Distribution.Types.ComponentName.NotLibComponentName instance Distribution.Utils.Structured.Structured Distribution.Types.ComponentName.NotLibComponentName module Distribution.Types.ComponentId -- | A ComponentId 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 -- UnitId, which serves as the basis for install paths, linker -- symbols, etc. -- -- Use mkComponentId and unComponentId to convert from/to a -- String. -- -- This type is opaque since Cabal-2.0 data ComponentId -- | Convert ComponentId to String unComponentId :: ComponentId -> String -- | Construct a ComponentId from a String -- -- mkComponentId is the inverse to unComponentId -- -- Note: No validations are performed to ensure that the resulting -- ComponentId is valid mkComponentId :: String -> ComponentId instance Data.Data.Data Distribution.Types.ComponentId.ComponentId instance GHC.Classes.Ord Distribution.Types.ComponentId.ComponentId instance GHC.Classes.Eq Distribution.Types.ComponentId.ComponentId instance GHC.Show.Show Distribution.Types.ComponentId.ComponentId instance GHC.Read.Read Distribution.Types.ComponentId.ComponentId instance GHC.Generics.Generic Distribution.Types.ComponentId.ComponentId instance Data.String.IsString Distribution.Types.ComponentId.ComponentId instance Data.Binary.Class.Binary Distribution.Types.ComponentId.ComponentId instance Distribution.Utils.Structured.Structured Distribution.Types.ComponentId.ComponentId instance Distribution.Pretty.Pretty Distribution.Types.ComponentId.ComponentId instance Distribution.Parsec.Parsec Distribution.Types.ComponentId.ComponentId instance Control.DeepSeq.NFData Distribution.Types.ComponentId.ComponentId module Distribution.Types.BuildType -- | The type of build system used by this package. data BuildType -- | calls Distribution.Simple.defaultMain Simple :: BuildType -- | calls Distribution.Simple.defaultMainWithHooks -- defaultUserHooks, which invokes configure to generate -- additional build information used by later phases. Configure :: BuildType -- | calls Distribution.Make.defaultMain Make :: BuildType -- | uses user-supplied Setup.hs or Setup.lhs (default) Custom :: BuildType knownBuildTypes :: [BuildType] instance Data.Data.Data Distribution.Types.BuildType.BuildType instance GHC.Classes.Ord Distribution.Types.BuildType.BuildType instance GHC.Classes.Eq Distribution.Types.BuildType.BuildType instance GHC.Read.Read Distribution.Types.BuildType.BuildType instance GHC.Show.Show Distribution.Types.BuildType.BuildType instance GHC.Generics.Generic Distribution.Types.BuildType.BuildType instance Data.Binary.Class.Binary Distribution.Types.BuildType.BuildType instance Distribution.Utils.Structured.Structured Distribution.Types.BuildType.BuildType instance Control.DeepSeq.NFData Distribution.Types.BuildType.BuildType instance Distribution.Pretty.Pretty Distribution.Types.BuildType.BuildType instance Distribution.Parsec.Parsec Distribution.Types.BuildType.BuildType module Distribution.Types.AbiHash -- | ABI Hashes -- -- Use mkAbiHash and unAbiHash to convert from/to a -- String. -- -- This type is opaque since Cabal-2.0 data AbiHash -- | Convert AbiHash to String unAbiHash :: AbiHash -> String -- | Construct a AbiHash from a String -- -- mkAbiHash is the inverse to unAbiHash -- -- Note: No validations are performed to ensure that the resulting -- AbiHash is valid mkAbiHash :: String -> AbiHash instance GHC.Generics.Generic Distribution.Types.AbiHash.AbiHash instance GHC.Read.Read Distribution.Types.AbiHash.AbiHash instance GHC.Show.Show Distribution.Types.AbiHash.AbiHash instance GHC.Classes.Eq Distribution.Types.AbiHash.AbiHash instance Data.String.IsString Distribution.Types.AbiHash.AbiHash instance Data.Binary.Class.Binary Distribution.Types.AbiHash.AbiHash instance Distribution.Utils.Structured.Structured Distribution.Types.AbiHash.AbiHash instance Control.DeepSeq.NFData Distribution.Types.AbiHash.AbiHash instance Distribution.Pretty.Pretty Distribution.Types.AbiHash.AbiHash instance Distribution.Parsec.Parsec 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 os 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 -- OS 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, -- LocalBuildInfo.hostPlatform 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 OS and -- Arch 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 Compat 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.Data.Data Distribution.System.OS instance GHC.Read.Read Distribution.System.OS instance GHC.Show.Show Distribution.System.OS instance GHC.Classes.Ord Distribution.System.OS instance GHC.Generics.Generic Distribution.System.OS instance GHC.Classes.Eq Distribution.System.OS instance Data.Data.Data Distribution.System.Arch instance GHC.Read.Read Distribution.System.Arch instance GHC.Show.Show Distribution.System.Arch instance GHC.Classes.Ord Distribution.System.Arch instance GHC.Generics.Generic Distribution.System.Arch instance GHC.Classes.Eq Distribution.System.Arch instance Data.Data.Data Distribution.System.Platform instance GHC.Read.Read Distribution.System.Platform instance GHC.Show.Show Distribution.System.Platform instance GHC.Classes.Ord Distribution.System.Platform instance GHC.Generics.Generic Distribution.System.Platform instance GHC.Classes.Eq Distribution.System.Platform instance Data.Binary.Class.Binary Distribution.System.Platform instance Distribution.Utils.Structured.Structured Distribution.System.Platform instance Control.DeepSeq.NFData Distribution.System.Platform instance Distribution.Pretty.Pretty Distribution.System.Platform instance Distribution.Parsec.Parsec Distribution.System.Platform instance Data.Binary.Class.Binary Distribution.System.Arch instance Distribution.Utils.Structured.Structured Distribution.System.Arch instance Control.DeepSeq.NFData Distribution.System.Arch instance Distribution.Pretty.Pretty Distribution.System.Arch instance Distribution.Parsec.Parsec Distribution.System.Arch instance Data.Binary.Class.Binary Distribution.System.OS instance Distribution.Utils.Structured.Structured Distribution.System.OS instance Control.DeepSeq.NFData Distribution.System.OS instance Distribution.Pretty.Pretty Distribution.System.OS instance Distribution.Parsec.Parsec Distribution.System.OS module Distribution.SPDX.LicenseReference -- | A user defined license reference denoted by -- LicenseRef-[idstring] (for a license not on the SPDX License -- List); data LicenseRef -- | License reference. licenseRef :: LicenseRef -> String -- | Document reference. licenseDocumentRef :: LicenseRef -> Maybe String -- | Create LicenseRef from optional document ref and name. mkLicenseRef :: Maybe String -> String -> Maybe LicenseRef -- | Like mkLicenseRef but convert invalid characters into -- -. mkLicenseRef' :: Maybe String -> String -> LicenseRef instance GHC.Generics.Generic Distribution.SPDX.LicenseReference.LicenseRef instance Data.Data.Data Distribution.SPDX.LicenseReference.LicenseRef instance GHC.Classes.Ord Distribution.SPDX.LicenseReference.LicenseRef instance GHC.Classes.Eq Distribution.SPDX.LicenseReference.LicenseRef instance GHC.Read.Read Distribution.SPDX.LicenseReference.LicenseRef instance GHC.Show.Show Distribution.SPDX.LicenseReference.LicenseRef instance Data.Binary.Class.Binary Distribution.SPDX.LicenseReference.LicenseRef instance Distribution.Utils.Structured.Structured Distribution.SPDX.LicenseReference.LicenseRef instance Control.DeepSeq.NFData Distribution.SPDX.LicenseReference.LicenseRef instance Distribution.Pretty.Pretty Distribution.SPDX.LicenseReference.LicenseRef instance Distribution.Parsec.Parsec Distribution.SPDX.LicenseReference.LicenseRef module Distribution.SPDX.LicenseId -- | SPDX License identifiers list v3.23 data LicenseId -- | 0BSD, BSD Zero Clause License NullBSD :: LicenseId -- | AAL, Attribution Assurance License AAL :: LicenseId -- | Abstyles, Abstyles License Abstyles :: LicenseId -- | AdaCore-doc, AdaCore Doc License, SPDX License List 3.23 AdaCore_doc :: LicenseId -- | Adobe-2006, Adobe Systems Incorporated Source Code License -- Agreement Adobe_2006 :: LicenseId -- | Adobe-Display-PostScript, Adobe Display PostScript License, -- SPDX License List 3.23 Adobe_Display_PostScript :: LicenseId -- | Adobe-Glyph, Adobe Glyph List License Adobe_Glyph :: LicenseId -- | Adobe-Utopia, Adobe Utopia Font License, SPDX License List -- 3.23 Adobe_Utopia :: LicenseId -- | ADSL, Amazon Digital Services License ADSL :: LicenseId -- | AFL-1.1, Academic Free License v1.1 AFL_1_1 :: LicenseId -- | AFL-1.2, Academic Free License v1.2 AFL_1_2 :: LicenseId -- | AFL-2.0, Academic Free License v2.0 AFL_2_0 :: LicenseId -- | AFL-2.1, Academic Free License v2.1 AFL_2_1 :: LicenseId -- | AFL-3.0, Academic Free License v3.0 AFL_3_0 :: LicenseId -- | Afmparse, Afmparse License Afmparse :: LicenseId -- | AGPL-1.0, Affero General Public License v1.0, SPDX License -- List 3.0 AGPL_1_0 :: LicenseId -- | AGPL-1.0-only, 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 -- | AGPL-1.0-or-later, 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 -- | AGPL-3.0-only, GNU Affero General Public License v3.0 only AGPL_3_0_only :: LicenseId -- | AGPL-3.0-or-later, GNU Affero General Public License v3.0 or -- later AGPL_3_0_or_later :: LicenseId -- | Aladdin, Aladdin Free Public License Aladdin :: LicenseId -- | AMDPLPA, AMD's plpa_map.c License AMDPLPA :: LicenseId -- | AML-glslang, AML glslang variant License, SPDX License List -- 3.23 AML_glslang :: LicenseId -- | AML, Apple MIT License AML :: LicenseId -- | AMPAS, Academy of Motion Picture Arts and Sciences BSD AMPAS :: LicenseId -- | ANTLR-PD-fallback, ANTLR Software Rights Notice with license -- fallback, SPDX License List 3.16, SPDX License List 3.23 ANTLR_PD_fallback :: LicenseId -- | ANTLR-PD, ANTLR Software Rights Notice ANTLR_PD :: LicenseId -- | Apache-1.0, Apache License 1.0 Apache_1_0 :: LicenseId -- | Apache-1.1, Apache License 1.1 Apache_1_1 :: LicenseId -- | Apache-2.0, Apache License 2.0 Apache_2_0 :: LicenseId -- | APAFML, Adobe Postscript AFM License APAFML :: LicenseId -- | APL-1.0, Adaptive Public License 1.0 APL_1_0 :: LicenseId -- | App-s2p, App::s2p License, SPDX License List 3.16, SPDX -- License List 3.23 App_s2p :: LicenseId -- | APSL-1.0, Apple Public Source License 1.0 APSL_1_0 :: LicenseId -- | APSL-1.1, Apple Public Source License 1.1 APSL_1_1 :: LicenseId -- | APSL-1.2, Apple Public Source License 1.2 APSL_1_2 :: LicenseId -- | APSL-2.0, Apple Public Source License 2.0 APSL_2_0 :: LicenseId -- | Arphic-1999, Arphic Public License, SPDX License List 3.23 Arphic_1999 :: LicenseId -- | Artistic-1.0-cl8, Artistic License 1.0 w/clause 8 Artistic_1_0_cl8 :: LicenseId -- | Artistic-1.0-Perl, Artistic License 1.0 (Perl) Artistic_1_0_Perl :: LicenseId -- | Artistic-1.0, Artistic License 1.0 Artistic_1_0 :: LicenseId -- | Artistic-2.0, Artistic License 2.0 Artistic_2_0 :: LicenseId -- | ASWF-Digital-Assets-1.0, ASWF Digital Assets License version -- 1.0, SPDX License List 3.23 ASWF_Digital_Assets_1_0 :: LicenseId -- | ASWF-Digital-Assets-1.1, ASWF Digital Assets License 1.1, -- SPDX License List 3.23 ASWF_Digital_Assets_1_1 :: LicenseId -- | Baekmuk, Baekmuk License, SPDX License List 3.23 Baekmuk :: LicenseId -- | Bahyph, Bahyph License Bahyph :: LicenseId -- | Barr, Barr License Barr :: LicenseId -- | bcrypt-Solar-Designer, bcrypt Solar Designer License, SPDX -- License List 3.23 Bcrypt_Solar_Designer :: LicenseId -- | Beerware, Beerware License Beerware :: LicenseId -- | Bitstream-Charter, Bitstream Charter Font License, SPDX -- License List 3.23 Bitstream_Charter :: LicenseId -- | Bitstream-Vera, Bitstream Vera Font License, SPDX License -- List 3.23 Bitstream_Vera :: LicenseId -- | BitTorrent-1.0, BitTorrent Open Source License v1.0 BitTorrent_1_0 :: LicenseId -- | BitTorrent-1.1, BitTorrent Open Source License v1.1 BitTorrent_1_1 :: LicenseId -- | blessing, 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 -- | BlueOak-1.0.0, 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 -- | Boehm-GC, Boehm-Demers-Weiser GC License, SPDX License List -- 3.23 Boehm_GC :: LicenseId -- | Borceux, Borceux license Borceux :: LicenseId -- | Brian-Gladman-2-Clause, Brian Gladman 2-Clause License, SPDX -- License List 3.23 Brian_Gladman_2_Clause :: LicenseId -- | Brian-Gladman-3-Clause, Brian Gladman 3-Clause License, SPDX -- License List 3.23 Brian_Gladman_3_Clause :: LicenseId -- | BSD-1-Clause, BSD 1-Clause License BSD_1_Clause :: LicenseId -- | BSD-2-Clause-FreeBSD, 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 -- | BSD-2-Clause-NetBSD, 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 -- | BSD-2-Clause-Darwin, BSD 2-Clause - Ian Darwin variant, SPDX -- License List 3.23 BSD_2_Clause_Darwin :: LicenseId -- | BSD-2-Clause-Patent, BSD-2-Clause Plus Patent License BSD_2_Clause_Patent :: LicenseId -- | BSD-2-Clause-Views, 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 -- | BSD-2-Clause, BSD 2-Clause Simplified License BSD_2_Clause :: LicenseId -- | BSD-3-Clause-acpica, BSD 3-Clause acpica variant, SPDX -- License List 3.23 BSD_3_Clause_acpica :: LicenseId -- | BSD-3-Clause-Attribution, BSD with attribution BSD_3_Clause_Attribution :: LicenseId -- | BSD-3-Clause-Clear, BSD 3-Clause Clear License BSD_3_Clause_Clear :: LicenseId -- | BSD-3-Clause-flex, BSD 3-Clause Flex variant, SPDX License -- List 3.23 BSD_3_Clause_flex :: LicenseId -- | BSD-3-Clause-HP, Hewlett-Packard BSD variant license, SPDX -- License List 3.23 BSD_3_Clause_HP :: LicenseId -- | BSD-3-Clause-LBNL, Lawrence Berkeley National Labs BSD -- variant license BSD_3_Clause_LBNL :: LicenseId -- | BSD-3-Clause-Modification, BSD 3-Clause Modification, SPDX -- License List 3.16, SPDX License List 3.23 BSD_3_Clause_Modification :: LicenseId -- | BSD-3-Clause-No-Military-License, BSD 3-Clause No Military -- License, SPDX License List 3.16, SPDX License List 3.23 BSD_3_Clause_No_Military_License :: LicenseId -- | BSD-3-Clause-No-Nuclear-License-2014, BSD 3-Clause No Nuclear -- License 2014 BSD_3_Clause_No_Nuclear_License_2014 :: LicenseId -- | BSD-3-Clause-No-Nuclear-License, BSD 3-Clause No Nuclear -- License BSD_3_Clause_No_Nuclear_License :: LicenseId -- | BSD-3-Clause-No-Nuclear-Warranty, BSD 3-Clause No Nuclear -- Warranty BSD_3_Clause_No_Nuclear_Warranty :: LicenseId -- | BSD-3-Clause-Open-MPI, 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 -- | BSD-3-Clause-Sun, BSD 3-Clause Sun Microsystems, SPDX License -- List 3.23 BSD_3_Clause_Sun :: LicenseId -- | BSD-3-Clause, BSD 3-Clause New or Revised -- License BSD_3_Clause :: LicenseId -- | BSD-4-Clause-Shortened, BSD 4 Clause Shortened, SPDX License -- List 3.16, SPDX License List 3.23 BSD_4_Clause_Shortened :: LicenseId -- | BSD-4-Clause-UC, BSD-4-Clause (University of -- California-Specific) BSD_4_Clause_UC :: LicenseId -- | BSD-4-Clause, BSD 4-Clause Original or Old -- License BSD_4_Clause :: LicenseId -- | BSD-4.3RENO, BSD 4.3 RENO License, SPDX License List 3.23 BSD_4_3RENO :: LicenseId -- | BSD-4.3TAHOE, BSD 4.3 TAHOE License, SPDX License List 3.23 BSD_4_3TAHOE :: LicenseId -- | BSD-Advertising-Acknowledgement, BSD Advertising -- Acknowledgement License, SPDX License List 3.23 BSD_Advertising_Acknowledgement :: LicenseId -- | BSD-Attribution-HPND-disclaimer, BSD with Attribution and -- HPND disclaimer, SPDX License List 3.23 BSD_Attribution_HPND_disclaimer :: LicenseId -- | BSD-Inferno-Nettverk, BSD-Inferno-Nettverk, SPDX License List -- 3.23 BSD_Inferno_Nettverk :: LicenseId -- | BSD-Protection, BSD Protection License BSD_Protection :: LicenseId -- | BSD-Source-beginning-file, BSD Source Code Attribution - -- beginning of file variant, SPDX License List 3.23 BSD_Source_beginning_file :: LicenseId -- | BSD-Source-Code, BSD Source Code Attribution BSD_Source_Code :: LicenseId -- | BSD-Systemics-W3Works, Systemics W3Works BSD variant license, -- SPDX License List 3.23 BSD_Systemics_W3Works :: LicenseId -- | BSD-Systemics, Systemics BSD variant license, SPDX License -- List 3.23 BSD_Systemics :: LicenseId -- | BSL-1.0, Boost Software License 1.0 BSL_1_0 :: LicenseId -- | bzip2-1.0.5, 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 -- | BUSL-1.1, Business Source License 1.1, SPDX License List -- 3.16, SPDX License List 3.23 BUSL_1_1 :: LicenseId -- | bzip2-1.0.6, bzip2 and libbzip2 License v1.0.6 Bzip2_1_0_6 :: LicenseId -- | C-UDA-1.0, Computational Use of Data Agreement v1.0, SPDX -- License List 3.16, SPDX License List 3.23 C_UDA_1_0 :: LicenseId -- | CAL-1.0-Combined-Work-Exception, 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 -- | CAL-1.0, 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 -- | Caldera-no-preamble, Caldera License (without preamble), SPDX -- License List 3.23 Caldera_no_preamble :: LicenseId -- | Caldera, Caldera License Caldera :: LicenseId -- | CATOSL-1.1, Computer Associates Trusted Open Source License -- 1.1 CATOSL_1_1 :: LicenseId -- | CC-BY-1.0, Creative Commons Attribution 1.0 Generic CC_BY_1_0 :: LicenseId -- | CC-BY-2.0, Creative Commons Attribution 2.0 Generic CC_BY_2_0 :: LicenseId -- | CC-BY-2.5-AU, Creative Commons Attribution 2.5 Australia, -- SPDX License List 3.16, SPDX License List 3.23 CC_BY_2_5_AU :: LicenseId -- | CC-BY-2.5, Creative Commons Attribution 2.5 Generic CC_BY_2_5 :: LicenseId -- | CC-BY-3.0-AT, 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 -- | CC-BY-3.0-AU, Creative Commons Attribution 3.0 Australia, -- SPDX License List 3.23 CC_BY_3_0_AU :: LicenseId -- | CC-BY-3.0-DE, Creative Commons Attribution 3.0 Germany, SPDX -- License List 3.16, SPDX License List 3.23 CC_BY_3_0_DE :: LicenseId -- | CC-BY-3.0-IGO, Creative Commons Attribution 3.0 IGO, SPDX -- License List 3.23 CC_BY_3_0_IGO :: LicenseId -- | CC-BY-3.0-NL, Creative Commons Attribution 3.0 Netherlands, -- SPDX License List 3.16, SPDX License List 3.23 CC_BY_3_0_NL :: LicenseId -- | CC-BY-3.0-US, Creative Commons Attribution 3.0 United States, -- SPDX License List 3.16, SPDX License List 3.23 CC_BY_3_0_US :: LicenseId -- | CC-BY-3.0, Creative Commons Attribution 3.0 Unported CC_BY_3_0 :: LicenseId -- | CC-BY-4.0, Creative Commons Attribution 4.0 International CC_BY_4_0 :: LicenseId -- | CC-BY-NC-1.0, Creative Commons Attribution Non Commercial 1.0 -- Generic CC_BY_NC_1_0 :: LicenseId -- | CC-BY-NC-2.0, Creative Commons Attribution Non Commercial 2.0 -- Generic CC_BY_NC_2_0 :: LicenseId -- | CC-BY-NC-2.5, Creative Commons Attribution Non Commercial 2.5 -- Generic CC_BY_NC_2_5 :: LicenseId -- | CC-BY-NC-3.0-DE, 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 -- | CC-BY-NC-3.0, Creative Commons Attribution Non Commercial 3.0 -- Unported CC_BY_NC_3_0 :: LicenseId -- | CC-BY-NC-4.0, Creative Commons Attribution Non Commercial 4.0 -- International CC_BY_NC_4_0 :: LicenseId -- | CC-BY-NC-ND-1.0, Creative Commons Attribution Non Commercial -- No Derivatives 1.0 Generic CC_BY_NC_ND_1_0 :: LicenseId -- | CC-BY-NC-ND-2.0, Creative Commons Attribution Non Commercial -- No Derivatives 2.0 Generic CC_BY_NC_ND_2_0 :: LicenseId -- | CC-BY-NC-ND-2.5, Creative Commons Attribution Non Commercial -- No Derivatives 2.5 Generic CC_BY_NC_ND_2_5 :: LicenseId -- | CC-BY-NC-ND-3.0-DE, 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 -- | CC-BY-NC-ND-3.0-IGO, 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 -- | CC-BY-NC-ND-3.0, Creative Commons Attribution Non Commercial -- No Derivatives 3.0 Unported CC_BY_NC_ND_3_0 :: LicenseId -- | CC-BY-NC-ND-4.0, Creative Commons Attribution Non Commercial -- No Derivatives 4.0 International CC_BY_NC_ND_4_0 :: LicenseId -- | CC-BY-NC-SA-1.0, Creative Commons Attribution Non Commercial -- Share Alike 1.0 Generic CC_BY_NC_SA_1_0 :: LicenseId -- | CC-BY-NC-SA-2.0-DE, Creative Commons Attribution Non -- Commercial Share Alike 2.0 Germany, SPDX License List 3.23 CC_BY_NC_SA_2_0_DE :: LicenseId -- | CC-BY-NC-SA-2.0-FR, 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 -- | CC-BY-NC-SA-2.0-UK, 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 -- | CC-BY-NC-SA-2.0, Creative Commons Attribution Non Commercial -- Share Alike 2.0 Generic CC_BY_NC_SA_2_0 :: LicenseId -- | CC-BY-NC-SA-2.5, Creative Commons Attribution Non Commercial -- Share Alike 2.5 Generic CC_BY_NC_SA_2_5 :: LicenseId -- | CC-BY-NC-SA-3.0-DE, 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 -- | CC-BY-NC-SA-3.0-IGO, 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 -- | CC-BY-NC-SA-3.0, Creative Commons Attribution Non Commercial -- Share Alike 3.0 Unported CC_BY_NC_SA_3_0 :: LicenseId -- | CC-BY-NC-SA-4.0, Creative Commons Attribution Non Commercial -- Share Alike 4.0 International CC_BY_NC_SA_4_0 :: LicenseId -- | CC-BY-ND-1.0, Creative Commons Attribution No Derivatives 1.0 -- Generic CC_BY_ND_1_0 :: LicenseId -- | CC-BY-ND-2.0, Creative Commons Attribution No Derivatives 2.0 -- Generic CC_BY_ND_2_0 :: LicenseId -- | CC-BY-ND-2.5, Creative Commons Attribution No Derivatives 2.5 -- Generic CC_BY_ND_2_5 :: LicenseId -- | CC-BY-ND-3.0-DE, 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 -- | CC-BY-ND-3.0, Creative Commons Attribution No Derivatives 3.0 -- Unported CC_BY_ND_3_0 :: LicenseId -- | CC-BY-ND-4.0, Creative Commons Attribution No Derivatives 4.0 -- International CC_BY_ND_4_0 :: LicenseId -- | CC-BY-SA-1.0, Creative Commons Attribution Share Alike 1.0 -- Generic CC_BY_SA_1_0 :: LicenseId -- | CC-BY-SA-2.0-UK, 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 -- | CC-BY-SA-2.0, Creative Commons Attribution Share Alike 2.0 -- Generic CC_BY_SA_2_0 :: LicenseId -- | CC-BY-SA-2.1-JP, 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 -- | CC-BY-SA-2.5, Creative Commons Attribution Share Alike 2.5 -- Generic CC_BY_SA_2_5 :: LicenseId -- | CC-BY-SA-3.0-AT, 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 -- | CC-BY-SA-3.0-DE, 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 -- | CC-BY-SA-3.0-IGO, Creative Commons Attribution-ShareAlike 3.0 -- IGO, SPDX License List 3.23 CC_BY_SA_3_0_IGO :: LicenseId -- | CC-BY-SA-3.0, Creative Commons Attribution Share Alike 3.0 -- Unported CC_BY_SA_3_0 :: LicenseId -- | CC-BY-SA-4.0, Creative Commons Attribution Share Alike 4.0 -- International CC_BY_SA_4_0 :: LicenseId -- | CC-PDDC, 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 -- | CC0-1.0, Creative Commons Zero v1.0 Universal CC0_1_0 :: LicenseId -- | CDDL-1.0, Common Development and Distribution License 1.0 CDDL_1_0 :: LicenseId -- | CDDL-1.1, Common Development and Distribution License 1.1 CDDL_1_1 :: LicenseId -- | CDL-1.0, Common Documentation License 1.0, SPDX License List -- 3.16, SPDX License List 3.23 CDL_1_0 :: LicenseId -- | CDLA-Permissive-1.0, Community Data License Agreement -- Permissive 1.0 CDLA_Permissive_1_0 :: LicenseId -- | CDLA-Permissive-2.0, Community Data License Agreement -- Permissive 2.0, SPDX License List 3.16, SPDX License List 3.23 CDLA_Permissive_2_0 :: LicenseId -- | CDLA-Sharing-1.0, Community Data License Agreement Sharing -- 1.0 CDLA_Sharing_1_0 :: LicenseId -- | CECILL-1.0, CeCILL Free Software License Agreement v1.0 CECILL_1_0 :: LicenseId -- | CECILL-1.1, CeCILL Free Software License Agreement v1.1 CECILL_1_1 :: LicenseId -- | CECILL-2.0, CeCILL Free Software License Agreement v2.0 CECILL_2_0 :: LicenseId -- | CECILL-2.1, CeCILL Free Software License Agreement v2.1 CECILL_2_1 :: LicenseId -- | CECILL-B, CeCILL-B Free Software License Agreement CECILL_B :: LicenseId -- | CECILL-C, CeCILL-C Free Software License Agreement CECILL_C :: LicenseId -- | CERN-OHL-1.1, 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 -- | CERN-OHL-1.2, 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 -- | CERN-OHL-P-2.0, 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 -- | CERN-OHL-S-2.0, 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 -- | CERN-OHL-W-2.0, 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 -- | CFITSIO, CFITSIO License, SPDX License List 3.23 CFITSIO :: LicenseId -- | check-cvs, check-cvs License, SPDX License List 3.23 Check_cvs :: LicenseId -- | checkmk, Checkmk License, SPDX License List 3.23 Checkmk :: LicenseId -- | ClArtistic, Clarified Artistic License ClArtistic :: LicenseId -- | Clips, Clips License, SPDX License List 3.23 Clips :: LicenseId -- | CMU-Mach-nodoc, CMU Mach - no notices-in-documentation -- variant, SPDX License List 3.23 CMU_Mach_nodoc :: LicenseId -- | CMU-Mach, CMU Mach License, SPDX License List 3.23 CMU_Mach :: LicenseId -- | CNRI-Jython, CNRI Jython License CNRI_Jython :: LicenseId -- | CNRI-Python-GPL-Compatible, CNRI Python Open Source GPL -- Compatible License Agreement CNRI_Python_GPL_Compatible :: LicenseId -- | CNRI-Python, CNRI Python License CNRI_Python :: LicenseId -- | COIL-1.0, Copyfree Open Innovation License, SPDX License List -- 3.16, SPDX License List 3.23 COIL_1_0 :: LicenseId -- | Community-Spec-1.0, Community Specification License 1.0, SPDX -- License List 3.16, SPDX License List 3.23 Community_Spec_1_0 :: LicenseId -- | Condor-1.1, Condor Public License v1.1 Condor_1_1 :: LicenseId -- | copyleft-next-0.3.0, 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 -- | copyleft-next-0.3.1, 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 -- | Cornell-Lossless-JPEG, Cornell Lossless JPEG License, SPDX -- License List 3.23 Cornell_Lossless_JPEG :: LicenseId -- | CPAL-1.0, Common Public Attribution License 1.0 CPAL_1_0 :: LicenseId -- | CPL-1.0, Common Public License 1.0 CPL_1_0 :: LicenseId -- | CPOL-1.02, Code Project Open License 1.02 CPOL_1_02 :: LicenseId -- | Cronyx, Cronyx License, SPDX License List 3.23 Cronyx :: LicenseId -- | Crossword, Crossword License Crossword :: LicenseId -- | CrystalStacker, CrystalStacker License CrystalStacker :: LicenseId -- | CUA-OPL-1.0, CUA Office Public License v1.0 CUA_OPL_1_0 :: LicenseId -- | Cube, Cube License Cube :: LicenseId -- | curl, curl License Curl :: LicenseId -- | D-FSL-1.0, Deutsche Freie Software Lizenz D_FSL_1_0 :: LicenseId -- | DEC-3-Clause, DEC 3-Clause License, SPDX License List 3.23 DEC_3_Clause :: LicenseId -- | diffmark, diffmark license Diffmark :: LicenseId -- | DL-DE-BY-2.0, Data licence Germany – attribution – version -- 2.0, SPDX License List 3.16, SPDX License List 3.23 DL_DE_BY_2_0 :: LicenseId -- | DL-DE-ZERO-2.0, Data licence Germany – zero – version 2.0, -- SPDX License List 3.23 DL_DE_ZERO_2_0 :: LicenseId -- | DOC, DOC License DOC :: LicenseId -- | Dotseqn, Dotseqn License Dotseqn :: LicenseId -- | DRL-1.0, Detection Rule License 1.0, SPDX License List 3.16, -- SPDX License List 3.23 DRL_1_0 :: LicenseId -- | DRL-1.1, Detection Rule License 1.1, SPDX License List 3.23 DRL_1_1 :: LicenseId -- | DSDP, DSDP License DSDP :: LicenseId -- | dtoa, David M. Gay dtoa License, SPDX License List 3.23 Dtoa :: LicenseId -- | dvipdfm, dvipdfm License Dvipdfm :: LicenseId -- | ECL-1.0, Educational Community License v1.0 ECL_1_0 :: LicenseId -- | ECL-2.0, Educational Community License v2.0 ECL_2_0 :: LicenseId -- | EFL-1.0, Eiffel Forum License v1.0 EFL_1_0 :: LicenseId -- | EFL-2.0, Eiffel Forum License v2.0 EFL_2_0 :: LicenseId -- | eGenix, eGenix.com Public License 1.1.0 EGenix :: LicenseId -- | Elastic-2.0, Elastic License 2.0, SPDX License List 3.16, -- SPDX License List 3.23 Elastic_2_0 :: LicenseId -- | Entessa, Entessa Public License v1.0 Entessa :: LicenseId -- | EPICS, EPICS Open License, SPDX License List 3.10, SPDX -- License List 3.16, SPDX License List 3.23 EPICS :: LicenseId -- | EPL-1.0, Eclipse Public License 1.0 EPL_1_0 :: LicenseId -- | EPL-2.0, Eclipse Public License 2.0 EPL_2_0 :: LicenseId -- | ErlPL-1.1, Erlang Public License v1.1 ErlPL_1_1 :: LicenseId -- | etalab-2.0, 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 -- | EUDatagrid, EU DataGrid Software License EUDatagrid :: LicenseId -- | EUPL-1.0, European Union Public License 1.0 EUPL_1_0 :: LicenseId -- | EUPL-1.1, European Union Public License 1.1 EUPL_1_1 :: LicenseId -- | EUPL-1.2, European Union Public License 1.2 EUPL_1_2 :: LicenseId -- | Eurosym, Eurosym License Eurosym :: LicenseId -- | Fair, Fair License Fair :: LicenseId -- | FBM, Fuzzy Bitmap License, SPDX License List 3.23 FBM :: LicenseId -- | FDK-AAC, Fraunhofer FDK AAC Codec Library, SPDX License List -- 3.16, SPDX License List 3.23 FDK_AAC :: LicenseId -- | Ferguson-Twofish, Ferguson Twofish License, SPDX License List -- 3.23 Ferguson_Twofish :: LicenseId -- | Frameworx-1.0, Frameworx Open License 1.0 Frameworx_1_0 :: LicenseId -- | FreeBSD-DOC, FreeBSD Documentation License, SPDX License List -- 3.16, SPDX License List 3.23 FreeBSD_DOC :: LicenseId -- | FreeImage, FreeImage Public License v1.0 FreeImage :: LicenseId -- | FSFAP-no-warranty-disclaimer, FSF All Permissive License -- (without Warranty), SPDX License List 3.23 FSFAP_no_warranty_disclaimer :: LicenseId -- | FSFAP, FSF All Permissive License FSFAP :: LicenseId -- | FSFULLRWD, FSF Unlimited License (With License Retention and -- Warranty Disclaimer), SPDX License List 3.23 FSFULLRWD :: LicenseId -- | FSFULLR, FSF Unlimited License (with License Retention) FSFULLR :: LicenseId -- | FSFUL, FSF Unlimited License FSFUL :: LicenseId -- | FTL, Freetype Project License FTL :: LicenseId -- | Furuseth, Furuseth License, SPDX License List 3.23 Furuseth :: LicenseId -- | fwlw, fwlw License, SPDX License List 3.23 Fwlw :: LicenseId -- | GCR-docs, Gnome GCR Documentation License, SPDX License List -- 3.23 GCR_docs :: LicenseId -- | GD, GD License, SPDX License List 3.16, SPDX License List -- 3.23 GD :: LicenseId -- | GFDL-1.1-invariants-only, 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 -- | GFDL-1.1-invariants-or-later, 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 -- | GFDL-1.1-no-invariants-only, 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 -- | GFDL-1.1-no-invariants-or-later, 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 -- | GFDL-1.1-only, GNU Free Documentation License v1.1 only GFDL_1_1_only :: LicenseId -- | GFDL-1.1-or-later, GNU Free Documentation License v1.1 or -- later GFDL_1_1_or_later :: LicenseId -- | GFDL-1.2-invariants-only, 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 -- | GFDL-1.2-invariants-or-later, 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 -- | GFDL-1.2-no-invariants-only, 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 -- | GFDL-1.2-no-invariants-or-later, 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 -- | GFDL-1.2-only, GNU Free Documentation License v1.2 only GFDL_1_2_only :: LicenseId -- | GFDL-1.2-or-later, GNU Free Documentation License v1.2 or -- later GFDL_1_2_or_later :: LicenseId -- | GFDL-1.3-invariants-only, 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 -- | GFDL-1.3-invariants-or-later, 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 -- | GFDL-1.3-no-invariants-only, 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 -- | GFDL-1.3-no-invariants-or-later, 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 -- | GFDL-1.3-only, GNU Free Documentation License v1.3 only GFDL_1_3_only :: LicenseId -- | GFDL-1.3-or-later, GNU Free Documentation License v1.3 or -- later GFDL_1_3_or_later :: LicenseId -- | Giftware, Giftware License Giftware :: LicenseId -- | GL2PS, GL2PS License GL2PS :: LicenseId -- | Glide, 3dfx Glide License Glide :: LicenseId -- | Glulxe, Glulxe License Glulxe :: LicenseId -- | GLWTPL, Good Luck With That Public License, SPDX License List -- 3.10, SPDX License List 3.16, SPDX License List 3.23 GLWTPL :: LicenseId -- | gnuplot, gnuplot License Gnuplot :: LicenseId -- | GPL-1.0-only, GNU General Public License v1.0 only GPL_1_0_only :: LicenseId -- | GPL-1.0-or-later, GNU General Public License v1.0 or later GPL_1_0_or_later :: LicenseId -- | GPL-2.0-only, GNU General Public License v2.0 only GPL_2_0_only :: LicenseId -- | GPL-2.0-or-later, GNU General Public License v2.0 or later GPL_2_0_or_later :: LicenseId -- | GPL-3.0-only, GNU General Public License v3.0 only GPL_3_0_only :: LicenseId -- | GPL-3.0-or-later, GNU General Public License v3.0 or later GPL_3_0_or_later :: LicenseId -- | Graphics-Gems, Graphics Gems License, SPDX License List 3.23 Graphics_Gems :: LicenseId -- | gSOAP-1.3b, gSOAP Public License v1.3b GSOAP_1_3b :: LicenseId -- | gtkbook, gtkbook License, SPDX License List 3.23 Gtkbook :: LicenseId -- | HaskellReport, Haskell Language Report License HaskellReport :: LicenseId -- | hdparm, hdparm License, SPDX License List 3.23 Hdparm :: LicenseId -- | Hippocratic-2.1, 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 -- | HP-1986, Hewlett-Packard 1986 License, SPDX License List 3.23 HP_1986 :: LicenseId -- | HP-1989, Hewlett-Packard 1989 License, SPDX License List 3.23 HP_1989 :: LicenseId -- | HPND-DEC, Historical Permission Notice and Disclaimer - DEC -- variant, SPDX License List 3.23 HPND_DEC :: LicenseId -- | HPND-doc-sell, Historical Permission Notice and Disclaimer - -- documentation sell variant, SPDX License List 3.23 HPND_doc_sell :: LicenseId -- | HPND-doc, Historical Permission Notice and Disclaimer - -- documentation variant, SPDX License List 3.23 HPND_doc :: LicenseId -- | HPND-export-US-modify, HPND with US Government export control -- warning and modification rqmt, SPDX License List 3.23 HPND_export_US_modify :: LicenseId -- | HPND-export-US, HPND with US Government export control -- warning, SPDX License List 3.23 HPND_export_US :: LicenseId -- | HPND-Fenneberg-Livingston, Historical Permission Notice and -- Disclaimer - Fenneberg-Livingston variant, SPDX License List 3.23 HPND_Fenneberg_Livingston :: LicenseId -- | HPND-INRIA-IMAG, Historical Permission Notice and Disclaimer -- - INRIA-IMAG variant, SPDX License List 3.23 HPND_INRIA_IMAG :: LicenseId -- | HPND-Kevlin-Henney, Historical Permission Notice and -- Disclaimer - Kevlin Henney variant, SPDX License List 3.23 HPND_Kevlin_Henney :: LicenseId -- | HPND-Markus-Kuhn, Historical Permission Notice and Disclaimer -- - Markus Kuhn variant, SPDX License List 3.23 HPND_Markus_Kuhn :: LicenseId -- | HPND-MIT-disclaimer, Historical Permission Notice and -- Disclaimer with MIT disclaimer, SPDX License List 3.23 HPND_MIT_disclaimer :: LicenseId -- | HPND-Pbmplus, Historical Permission Notice and Disclaimer - -- Pbmplus variant, SPDX License List 3.23 HPND_Pbmplus :: LicenseId -- | HPND-sell-MIT-disclaimer-xserver, Historical Permission -- Notice and Disclaimer - sell xserver variant with MIT disclaimer, SPDX -- License List 3.23 HPND_sell_MIT_disclaimer_xserver :: LicenseId -- | HPND-sell-regexpr, Historical Permission Notice and -- Disclaimer - sell regexpr variant, SPDX License List 3.23 HPND_sell_regexpr :: LicenseId -- | HPND-sell-variant-MIT-disclaimer, HPND sell variant with MIT -- disclaimer, SPDX License List 3.23 HPND_sell_variant_MIT_disclaimer :: LicenseId -- | HPND-sell-variant, 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 -- | HPND-UC, Historical Permission Notice and Disclaimer - -- University of California variant, SPDX License List 3.23 HPND_UC :: LicenseId -- | HPND, Historical Permission Notice and Disclaimer HPND :: LicenseId -- | HTMLTIDY, HTML Tidy License, SPDX License List 3.16, SPDX -- License List 3.23 HTMLTIDY :: LicenseId -- | IBM-pibs, IBM PowerPC Initialization and Boot Software IBM_pibs :: LicenseId -- | ICU, ICU License ICU :: LicenseId -- | IEC-Code-Components-EULA, IEC Code Components End-user -- licence agreement, SPDX License List 3.23 IEC_Code_Components_EULA :: LicenseId -- | IJG-short, Independent JPEG Group License - short, SPDX -- License List 3.23 IJG_short :: LicenseId -- | IJG, Independent JPEG Group License IJG :: LicenseId -- | ImageMagick, ImageMagick License ImageMagick :: LicenseId -- | iMatix, iMatix Standard Function Library Agreement IMatix :: LicenseId -- | Imlib2, Imlib2 License Imlib2 :: LicenseId -- | Info-ZIP, Info-ZIP License Info_ZIP :: LicenseId -- | Inner-Net-2.0, Inner Net License v2.0, SPDX License List 3.23 Inner_Net_2_0 :: LicenseId -- | Intel-ACPI, Intel ACPI Software License Agreement Intel_ACPI :: LicenseId -- | Intel, Intel Open Source License Intel :: LicenseId -- | Interbase-1.0, Interbase Public License v1.0 Interbase_1_0 :: LicenseId -- | IPA, IPA Font License IPA :: LicenseId -- | IPL-1.0, IBM Public License v1.0 IPL_1_0 :: LicenseId -- | ISC-Veillard, ISC Veillard variant, SPDX License List 3.23 ISC_Veillard :: LicenseId -- | ISC, ISC License ISC :: LicenseId -- | Jam, Jam License, SPDX License List 3.16, SPDX License List -- 3.23 Jam :: LicenseId -- | JasPer-2.0, JasPer License JasPer_2_0 :: LicenseId -- | JPL-image, JPL Image Use Policy, SPDX License List 3.23 JPL_image :: LicenseId -- | JPNIC, 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 -- | JSON, JSON License JSON :: LicenseId -- | Kastrup, Kastrup License, SPDX License List 3.23 Kastrup :: LicenseId -- | Kazlib, Kazlib License, SPDX License List 3.23 Kazlib :: LicenseId -- | Knuth-CTAN, Knuth CTAN License, SPDX License List 3.23 Knuth_CTAN :: LicenseId -- | LAL-1.2, Licence Art Libre 1.2 LAL_1_2 :: LicenseId -- | LAL-1.3, Licence Art Libre 1.3 LAL_1_3 :: LicenseId -- | Latex2e-translated-notice, Latex2e with translated notice -- permission, SPDX License List 3.23 Latex2e_translated_notice :: LicenseId -- | Latex2e, Latex2e License Latex2e :: LicenseId -- | Leptonica, Leptonica License Leptonica :: LicenseId -- | LGPL-2.0-only, GNU Library General Public License v2 only LGPL_2_0_only :: LicenseId -- | LGPL-2.0-or-later, GNU Library General Public License v2 or -- later LGPL_2_0_or_later :: LicenseId -- | LGPL-2.1-only, GNU Lesser General Public License v2.1 only LGPL_2_1_only :: LicenseId -- | LGPL-2.1-or-later, GNU Lesser General Public License v2.1 or -- later LGPL_2_1_or_later :: LicenseId -- | LGPL-3.0-only, GNU Lesser General Public License v3.0 only LGPL_3_0_only :: LicenseId -- | LGPL-3.0-or-later, GNU Lesser General Public License v3.0 or -- later LGPL_3_0_or_later :: LicenseId -- | LGPLLR, Lesser General Public License For Linguistic -- Resources LGPLLR :: LicenseId -- | libpng-2.0, 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 -- | Libpng, libpng License Libpng :: LicenseId -- | libselinux-1.0, 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 -- | libtiff, libtiff License Libtiff :: LicenseId -- | libutil-David-Nugent, libutil David Nugent License, SPDX -- License List 3.23 Libutil_David_Nugent :: LicenseId -- | LiLiQ-P-1.1, Licence Libre du Québec – Permissive version 1.1 LiLiQ_P_1_1 :: LicenseId -- | LiLiQ-R-1.1, Licence Libre du Québec – Réciprocité version -- 1.1 LiLiQ_R_1_1 :: LicenseId -- | LiLiQ-Rplus-1.1, Licence Libre du Québec – Réciprocité forte -- version 1.1 LiLiQ_Rplus_1_1 :: LicenseId -- | Linux-man-pages-1-para, Linux man-pages - 1 paragraph, SPDX -- License List 3.23 Linux_man_pages_1_para :: LicenseId -- | Linux-man-pages-copyleft-2-para, Linux man-pages Copyleft - 2 -- paragraphs, SPDX License List 3.23 Linux_man_pages_copyleft_2_para :: LicenseId -- | Linux-man-pages-copyleft-var, Linux man-pages Copyleft -- Variant, SPDX License List 3.23 Linux_man_pages_copyleft_var :: LicenseId -- | Linux-man-pages-copyleft, Linux man-pages Copyleft, SPDX -- License List 3.16, SPDX License List 3.23 Linux_man_pages_copyleft :: LicenseId -- | Linux-OpenIB, 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 -- | LOOP, Common Lisp LOOP License, SPDX License List 3.23 LOOP :: LicenseId -- | LPD-document, LPD Documentation License, SPDX License List -- 3.23 LPD_document :: LicenseId -- | LPL-1.02, Lucent Public License v1.02 LPL_1_02 :: LicenseId -- | LPL-1.0, Lucent Public License Version 1.0 LPL_1_0 :: LicenseId -- | LPPL-1.0, LaTeX Project Public License v1.0 LPPL_1_0 :: LicenseId -- | LPPL-1.1, LaTeX Project Public License v1.1 LPPL_1_1 :: LicenseId -- | LPPL-1.2, LaTeX Project Public License v1.2 LPPL_1_2 :: LicenseId -- | LPPL-1.3a, LaTeX Project Public License v1.3a LPPL_1_3a :: LicenseId -- | LPPL-1.3c, LaTeX Project Public License v1.3c LPPL_1_3c :: LicenseId -- | lsof, lsof License, SPDX License List 3.23 Lsof :: LicenseId -- | Lucida-Bitmap-Fonts, Lucida Bitmap Fonts License, SPDX -- License List 3.23 Lucida_Bitmap_Fonts :: LicenseId -- | LZMA-SDK-9.11-to-9.20, LZMA SDK License (versions 9.11 to -- 9.20), SPDX License List 3.23 LZMA_SDK_9_11_to_9_20 :: LicenseId -- | LZMA-SDK-9.22, LZMA SDK License (versions 9.22 and beyond), -- SPDX License List 3.23 LZMA_SDK_9_22 :: LicenseId -- | Mackerras-3-Clause-acknowledgment, Mackerras 3-Clause - -- acknowledgment variant, SPDX License List 3.23 Mackerras_3_Clause_acknowledgment :: LicenseId -- | Mackerras-3-Clause, Mackerras 3-Clause License, SPDX License -- List 3.23 Mackerras_3_Clause :: LicenseId -- | magaz, magaz License, SPDX License List 3.23 Magaz :: LicenseId -- | mailprio, mailprio License, SPDX License List 3.23 Mailprio :: LicenseId -- | MakeIndex, MakeIndex License MakeIndex :: LicenseId -- | Martin-Birgmeier, Martin Birgmeier License, SPDX License List -- 3.23 Martin_Birgmeier :: LicenseId -- | McPhee-slideshow, McPhee Slideshow License, SPDX License List -- 3.23 McPhee_slideshow :: LicenseId -- | metamail, metamail License, SPDX License List 3.23 Metamail :: LicenseId -- | Minpack, Minpack License, SPDX License List 3.23 Minpack :: LicenseId -- | MirOS, The MirOS Licence MirOS :: LicenseId -- | MIT-0, 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 -- | MIT-advertising, Enlightenment License (e16) MIT_advertising :: LicenseId -- | MIT-CMU, CMU License MIT_CMU :: LicenseId -- | MIT-enna, enna License MIT_enna :: LicenseId -- | MIT-feh, feh License MIT_feh :: LicenseId -- | MIT-Festival, MIT Festival Variant, SPDX License List 3.23 MIT_Festival :: LicenseId -- | MIT-Modern-Variant, MIT License Modern Variant, SPDX License -- List 3.16, SPDX License List 3.23 MIT_Modern_Variant :: LicenseId -- | MIT-open-group, MIT Open Group variant, SPDX License List -- 3.16, SPDX License List 3.23 MIT_open_group :: LicenseId -- | MIT-testregex, MIT testregex Variant, SPDX License List 3.23 MIT_testregex :: LicenseId -- | MIT-Wu, MIT Tom Wu Variant, SPDX License List 3.23 MIT_Wu :: LicenseId -- | MITNFA, MIT +no-false-attribs license MITNFA :: LicenseId -- | MIT, MIT License MIT :: LicenseId -- | MMIXware, MMIXware License, SPDX License List 3.23 MMIXware :: LicenseId -- | Motosoto, Motosoto License Motosoto :: LicenseId -- | MPEG-SSG, MPEG Software Simulation, SPDX License List 3.23 MPEG_SSG :: LicenseId -- | mpi-permissive, mpi Permissive License, SPDX License List -- 3.23 Mpi_permissive :: LicenseId -- | mpich2, mpich2 License Mpich2 :: LicenseId -- | MPL-1.0, Mozilla Public License 1.0 MPL_1_0 :: LicenseId -- | MPL-1.1, Mozilla Public License 1.1 MPL_1_1 :: LicenseId -- | MPL-2.0-no-copyleft-exception, Mozilla Public License 2.0 (no -- copyleft exception) MPL_2_0_no_copyleft_exception :: LicenseId -- | MPL-2.0, Mozilla Public License 2.0 MPL_2_0 :: LicenseId -- | mplus, mplus Font License, SPDX License List 3.23 Mplus :: LicenseId -- | MS-LPL, Microsoft Limited Public License, SPDX License List -- 3.23 MS_LPL :: LicenseId -- | MS-PL, Microsoft Public License MS_PL :: LicenseId -- | MS-RL, Microsoft Reciprocal License MS_RL :: LicenseId -- | MTLL, Matrix Template Library License MTLL :: LicenseId -- | MulanPSL-1.0, 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 -- | MulanPSL-2.0, 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 -- | Multics, Multics License Multics :: LicenseId -- | Mup, Mup License Mup :: LicenseId -- | NAIST-2003, Nara Institute of Science and Technology License -- (2003), SPDX License List 3.16, SPDX License List 3.23 NAIST_2003 :: LicenseId -- | NASA-1.3, NASA Open Source Agreement 1.3 NASA_1_3 :: LicenseId -- | Naumen, Naumen Public License Naumen :: LicenseId -- | NBPL-1.0, Net Boolean Public License v1 NBPL_1_0 :: LicenseId -- | NCGL-UK-2.0, 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 -- | NCSA, University of Illinois/NCSA Open Source License NCSA :: LicenseId -- | Net-SNMP, Net-SNMP License Net_SNMP :: LicenseId -- | NetCDF, NetCDF license NetCDF :: LicenseId -- | Newsletr, Newsletr License Newsletr :: LicenseId -- | NGPL, Nethack General Public License NGPL :: LicenseId -- | NICTA-1.0, NICTA Public Software License, Version 1.0, SPDX -- License List 3.23 NICTA_1_0 :: LicenseId -- | NIST-PD-fallback, 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 -- | NIST-PD, NIST Public Domain Notice, SPDX License List 3.10, -- SPDX License List 3.16, SPDX License List 3.23 NIST_PD :: LicenseId -- | NIST-Software, NIST Software License, SPDX License List 3.23 NIST_Software :: LicenseId -- | NLOD-1.0, Norwegian Licence for Open Government Data (NLOD) -- 1.0 NLOD_1_0 :: LicenseId -- | NLOD-2.0, Norwegian Licence for Open Government Data (NLOD) -- 2.0, SPDX License List 3.16, SPDX License List 3.23 NLOD_2_0 :: LicenseId -- | NLPL, No Limit Public License NLPL :: LicenseId -- | Nokia, Nokia Open Source License Nokia :: LicenseId -- | NOSL, Netizen Open Source License NOSL :: LicenseId -- | Noweb, Noweb License Noweb :: LicenseId -- | NPL-1.0, Netscape Public License v1.0 NPL_1_0 :: LicenseId -- | NPL-1.1, Netscape Public License v1.1 NPL_1_1 :: LicenseId -- | NPOSL-3.0, Non-Profit Open Software License 3.0 NPOSL_3_0 :: LicenseId -- | NRL, NRL License NRL :: LicenseId -- | NTP-0, 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 -- | NTP, NTP License NTP :: LicenseId -- | O-UDA-1.0, 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 -- | OCCT-PL, Open CASCADE Technology Public License OCCT_PL :: LicenseId -- | OCLC-2.0, OCLC Research Public License 2.0 OCLC_2_0 :: LicenseId -- | ODbL-1.0, Open Data Commons Open Database License v1.0 ODbL_1_0 :: LicenseId -- | ODC-By-1.0, 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 -- | OFFIS, OFFIS License, SPDX License List 3.23 OFFIS :: LicenseId -- | OFL-1.0-no-RFN, 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 -- | OFL-1.0-RFN, 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 -- | OFL-1.0, SIL Open Font License 1.0 OFL_1_0 :: LicenseId -- | OFL-1.1-no-RFN, 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 -- | OFL-1.1-RFN, 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 -- | OFL-1.1, SIL Open Font License 1.1 OFL_1_1 :: LicenseId -- | OGC-1.0, 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 -- | OGDL-Taiwan-1.0, Taiwan Open Government Data License, version -- 1.0, SPDX License List 3.16, SPDX License List 3.23 OGDL_Taiwan_1_0 :: LicenseId -- | OGL-Canada-2.0, 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 -- | OGL-UK-1.0, 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 -- | OGL-UK-2.0, 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 -- | OGL-UK-3.0, 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 -- | OGTSL, Open Group Test Suite License OGTSL :: LicenseId -- | OLDAP-1.1, Open LDAP Public License v1.1 OLDAP_1_1 :: LicenseId -- | OLDAP-1.2, Open LDAP Public License v1.2 OLDAP_1_2 :: LicenseId -- | OLDAP-1.3, Open LDAP Public License v1.3 OLDAP_1_3 :: LicenseId -- | OLDAP-1.4, Open LDAP Public License v1.4 OLDAP_1_4 :: LicenseId -- | OLDAP-2.0.1, Open LDAP Public License v2.0.1 OLDAP_2_0_1 :: LicenseId -- | OLDAP-2.0, Open LDAP Public License v2.0 (or possibly 2.0A -- and 2.0B) OLDAP_2_0 :: LicenseId -- | OLDAP-2.1, Open LDAP Public License v2.1 OLDAP_2_1 :: LicenseId -- | OLDAP-2.2.1, Open LDAP Public License v2.2.1 OLDAP_2_2_1 :: LicenseId -- | OLDAP-2.2.2, Open LDAP Public License 2.2.2 OLDAP_2_2_2 :: LicenseId -- | OLDAP-2.2, Open LDAP Public License v2.2 OLDAP_2_2 :: LicenseId -- | OLDAP-2.3, Open LDAP Public License v2.3 OLDAP_2_3 :: LicenseId -- | OLDAP-2.4, Open LDAP Public License v2.4 OLDAP_2_4 :: LicenseId -- | OLDAP-2.5, Open LDAP Public License v2.5 OLDAP_2_5 :: LicenseId -- | OLDAP-2.6, Open LDAP Public License v2.6 OLDAP_2_6 :: LicenseId -- | OLDAP-2.7, Open LDAP Public License v2.7 OLDAP_2_7 :: LicenseId -- | OLDAP-2.8, Open LDAP Public License v2.8 OLDAP_2_8 :: LicenseId -- | OLFL-1.3, Open Logistics Foundation License Version 1.3, SPDX -- License List 3.23 OLFL_1_3 :: LicenseId -- | OML, Open Market License OML :: LicenseId -- | OpenPBS-2.3, OpenPBS v2.3 Software License, SPDX License List -- 3.23 OpenPBS_2_3 :: LicenseId -- | OpenSSL-standalone, OpenSSL License - standalone, SPDX -- License List 3.23 OpenSSL_standalone :: LicenseId -- | OpenSSL, OpenSSL License OpenSSL :: LicenseId -- | OpenVision, OpenVision License, SPDX License List 3.23 OpenVision :: LicenseId -- | OPL-1.0, Open Public License v1.0 OPL_1_0 :: LicenseId -- | OPL-UK-3.0, United Kingdom Open Parliament Licence v3.0, SPDX -- License List 3.23 OPL_UK_3_0 :: LicenseId -- | OPUBL-1.0, Open Publication License v1.0, SPDX License List -- 3.16, SPDX License List 3.23 OPUBL_1_0 :: LicenseId -- | OSET-PL-2.1, OSET Public License version 2.1 OSET_PL_2_1 :: LicenseId -- | OSL-1.0, Open Software License 1.0 OSL_1_0 :: LicenseId -- | OSL-1.1, Open Software License 1.1 OSL_1_1 :: LicenseId -- | OSL-2.0, Open Software License 2.0 OSL_2_0 :: LicenseId -- | OSL-2.1, Open Software License 2.1 OSL_2_1 :: LicenseId -- | OSL-3.0, Open Software License 3.0 OSL_3_0 :: LicenseId -- | PADL, PADL License, SPDX License List 3.23 PADL :: LicenseId -- | Parity-6.0.0, 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 -- | Parity-7.0.0, 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 -- | PDDL-1.0, Open Data Commons Public Domain Dedication & -- License 1.0 PDDL_1_0 :: LicenseId -- | PHP-3.01, PHP License v3.01 PHP_3_01 :: LicenseId -- | PHP-3.0, PHP License v3.0 PHP_3_0 :: LicenseId -- | Pixar, Pixar License, SPDX License List 3.23 Pixar :: LicenseId -- | Plexus, Plexus Classworlds License Plexus :: LicenseId -- | pnmstitch, pnmstitch License, SPDX License List 3.23 Pnmstitch :: LicenseId -- | PolyForm-Noncommercial-1.0.0, 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 -- | PolyForm-Small-Business-1.0.0, 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 -- | PostgreSQL, PostgreSQL License PostgreSQL :: LicenseId -- | PSF-2.0, 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 -- | psfrag, psfrag License Psfrag :: LicenseId -- | psutils, psutils License Psutils :: LicenseId -- | Python-2.0.1, Python License 2.0.1, SPDX License List 3.23 Python_2_0_1 :: LicenseId -- | Python-2.0, Python License 2.0 Python_2_0 :: LicenseId -- | python-ldap, Python ldap License, SPDX License List 3.23 Python_ldap :: LicenseId -- | Qhull, Qhull License Qhull :: LicenseId -- | QPL-1.0-INRIA-2004, Q Public License 1.0 - INRIA 2004 -- variant, SPDX License List 3.23 QPL_1_0_INRIA_2004 :: LicenseId -- | QPL-1.0, Q Public License 1.0 QPL_1_0 :: LicenseId -- | radvd, radvd License, SPDX License List 3.23 Radvd :: LicenseId -- | Rdisc, Rdisc License Rdisc :: LicenseId -- | RHeCos-1.1, Red Hat eCos Public License v1.1 RHeCos_1_1 :: LicenseId -- | RPL-1.1, Reciprocal Public License 1.1 RPL_1_1 :: LicenseId -- | RPL-1.5, Reciprocal Public License 1.5 RPL_1_5 :: LicenseId -- | RPSL-1.0, RealNetworks Public Source License v1.0 RPSL_1_0 :: LicenseId -- | RSA-MD, RSA Message-Digest License RSA_MD :: LicenseId -- | RSCPL, Ricoh Source Code Public License RSCPL :: LicenseId -- | Ruby, Ruby License Ruby :: LicenseId -- | SAX-PD-2.0, Sax Public Domain Notice 2.0, SPDX License List -- 3.23 SAX_PD_2_0 :: LicenseId -- | SAX-PD, Sax Public Domain Notice SAX_PD :: LicenseId -- | Saxpath, Saxpath License Saxpath :: LicenseId -- | SCEA, SCEA Shared Source License SCEA :: LicenseId -- | SchemeReport, Scheme Language Report License, SPDX License -- List 3.16, SPDX License List 3.23 SchemeReport :: LicenseId -- | Sendmail-8.23, 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 -- | Sendmail, Sendmail License Sendmail :: LicenseId -- | SGI-B-1.0, SGI Free Software License B v1.0 SGI_B_1_0 :: LicenseId -- | SGI-B-1.1, SGI Free Software License B v1.1 SGI_B_1_1 :: LicenseId -- | SGI-B-2.0, SGI Free Software License B v2.0 SGI_B_2_0 :: LicenseId -- | SGI-OpenGL, SGI OpenGL License, SPDX License List 3.23 SGI_OpenGL :: LicenseId -- | SGP4, SGP4 Permission Notice, SPDX License List 3.23 SGP4 :: LicenseId -- | SHL-0.51, 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 -- | SHL-0.5, 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 -- | SimPL-2.0, Simple Public License 2.0 SimPL_2_0 :: LicenseId -- | SISSL-1.2, Sun Industry Standards Source License v1.2 SISSL_1_2 :: LicenseId -- | SISSL, Sun Industry Standards Source License v1.1 SISSL :: LicenseId -- | Sleepycat, Sleepycat License Sleepycat :: LicenseId -- | SL, SL License, SPDX License List 3.23 SL :: LicenseId -- | SMLNJ, Standard ML of New Jersey License SMLNJ :: LicenseId -- | SMPPL, Secure Messaging Protocol Public License SMPPL :: LicenseId -- | SNIA, SNIA Public License 1.1 SNIA :: LicenseId -- | snprintf, snprintf License, SPDX License List 3.23 Snprintf :: LicenseId -- | softSurfer, softSurfer License, SPDX License List 3.23 SoftSurfer :: LicenseId -- | Soundex, Soundex License, SPDX License List 3.23 Soundex :: LicenseId -- | Spencer-86, Spencer License 86 Spencer_86 :: LicenseId -- | Spencer-94, Spencer License 94 Spencer_94 :: LicenseId -- | Spencer-99, Spencer License 99 Spencer_99 :: LicenseId -- | SPL-1.0, Sun Public License v1.0 SPL_1_0 :: LicenseId -- | ssh-keyscan, ssh-keyscan License, SPDX License List 3.23 Ssh_keyscan :: LicenseId -- | SSH-OpenSSH, 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 -- | SSH-short, 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 -- | SSLeay-standalone, SSLeay License - standalone, SPDX License -- List 3.23 SSLeay_standalone :: LicenseId -- | SSPL-1.0, 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 -- | SugarCRM-1.1.3, SugarCRM Public License v1.1.3 SugarCRM_1_1_3 :: LicenseId -- | Sun-PPP, Sun PPP License, SPDX License List 3.23 Sun_PPP :: LicenseId -- | SunPro, SunPro License, SPDX License List 3.23 SunPro :: LicenseId -- | SWL, Scheme Widget Library (SWL) Software License Agreement SWL :: LicenseId -- | swrule, swrule License, SPDX License List 3.23 Swrule :: LicenseId -- | Symlinks, Symlinks License, SPDX License List 3.23 Symlinks :: LicenseId -- | TAPR-OHL-1.0, 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 -- | TCL, TCL/TK License TCL :: LicenseId -- | TCP-wrappers, TCP Wrappers License TCP_wrappers :: LicenseId -- | TermReadKey, TermReadKey License, SPDX License List 3.23 TermReadKey :: LicenseId -- | TGPPL-1.0, Transitive Grace Period Public Licence 1.0, SPDX -- License List 3.23 TGPPL_1_0 :: LicenseId -- | TMate, TMate Open Source License TMate :: LicenseId -- | TORQUE-1.1, TORQUE v2.5+ Software License v1.1 TORQUE_1_1 :: LicenseId -- | TOSL, Trusster Open Source License TOSL :: LicenseId -- | TPDL, Time::ParseDate License, SPDX License List 3.23 TPDL :: LicenseId -- | TPL-1.0, THOR Public License 1.0, SPDX License List 3.23 TPL_1_0 :: LicenseId -- | TTWL, Text-Tabs+Wrap License, SPDX License List 3.23 TTWL :: LicenseId -- | TTYP0, TTYP0 License, SPDX License List 3.23 TTYP0 :: LicenseId -- | TU-Berlin-1.0, 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 -- | TU-Berlin-2.0, 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 -- | UCAR, UCAR License, SPDX License List 3.23 UCAR :: LicenseId -- | UCL-1.0, 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 -- | ulem, ulem License, SPDX License List 3.23 Ulem :: LicenseId -- | UMich-Merit, Michigan/Merit Networks License, SPDX License -- List 3.23 UMich_Merit :: LicenseId -- | Unicode-3.0, Unicode License v3, SPDX License List 3.23 Unicode_3_0 :: LicenseId -- | Unicode-DFS-2015, Unicode License Agreement - Data Files and -- Software (2015) Unicode_DFS_2015 :: LicenseId -- | Unicode-DFS-2016, Unicode License Agreement - Data Files and -- Software (2016) Unicode_DFS_2016 :: LicenseId -- | Unicode-TOU, Unicode Terms of Use Unicode_TOU :: LicenseId -- | UnixCrypt, UnixCrypt License, SPDX License List 3.23 UnixCrypt :: LicenseId -- | Unlicense, The Unlicense Unlicense :: LicenseId -- | UPL-1.0, Universal Permissive License v1.0 UPL_1_0 :: LicenseId -- | URT-RLE, Utah Raster Toolkit Run Length Encoded License, SPDX -- License List 3.23 URT_RLE :: LicenseId -- | Vim, Vim License Vim :: LicenseId -- | VOSTROM, VOSTROM Public License for Open Source VOSTROM :: LicenseId -- | VSL-1.0, Vovida Software License v1.0 VSL_1_0 :: LicenseId -- | W3C-19980720, W3C Software Notice and License (1998-07-20) W3C_19980720 :: LicenseId -- | W3C-20150513, W3C Software Notice and Document License -- (2015-05-13) W3C_20150513 :: LicenseId -- | W3C, W3C Software Notice and License (2002-12-31) W3C :: LicenseId -- | w3m, w3m License, SPDX License List 3.23 W3m :: LicenseId -- | Watcom-1.0, Sybase Open Watcom Public License 1.0 Watcom_1_0 :: LicenseId -- | Widget-Workshop, Widget Workshop License, SPDX License List -- 3.23 Widget_Workshop :: LicenseId -- | Wsuipa, Wsuipa License Wsuipa :: LicenseId -- | WTFPL, Do What The F*ck You Want To Public License WTFPL :: LicenseId -- | X11-distribute-modifications-variant, X11 License -- Distribution Modification Variant, SPDX License List 3.16, SPDX -- License List 3.23 X11_distribute_modifications_variant :: LicenseId -- | X11, X11 License X11 :: LicenseId -- | Xdebug-1.03, Xdebug License v 1.03, SPDX License List 3.23 Xdebug_1_03 :: LicenseId -- | Xerox, Xerox License Xerox :: LicenseId -- | Xfig, Xfig License, SPDX License List 3.23 Xfig :: LicenseId -- | XFree86-1.1, XFree86 License 1.1 XFree86_1_1 :: LicenseId -- | xinetd, xinetd License Xinetd :: LicenseId -- | xkeyboard-config-Zinoviev, xkeyboard-config Zinoviev License, -- SPDX License List 3.23 Xkeyboard_config_Zinoviev :: LicenseId -- | xlock, xlock License, SPDX License List 3.23 Xlock :: LicenseId -- | Xnet, X.Net License Xnet :: LicenseId -- | xpp, XPP License Xpp :: LicenseId -- | XSkat, XSkat License XSkat :: LicenseId -- | YPL-1.0, Yahoo! Public License v1.0 YPL_1_0 :: LicenseId -- | YPL-1.1, Yahoo! Public License v1.1 YPL_1_1 :: LicenseId -- | Zed, Zed License Zed :: LicenseId -- | Zeeff, Zeeff License, SPDX License List 3.23 Zeeff :: LicenseId -- | Zend-2.0, Zend License v2.0 Zend_2_0 :: LicenseId -- | Zimbra-1.3, Zimbra Public License v1.3 Zimbra_1_3 :: LicenseId -- | Zimbra-1.4, Zimbra Public License v1.4 Zimbra_1_4 :: LicenseId -- | zlib-acknowledgement, zlib/libpng License with -- Acknowledgement Zlib_acknowledgement :: LicenseId -- | Zlib, zlib License Zlib :: LicenseId -- | ZPL-1.1, Zope Public License 1.1 ZPL_1_1 :: LicenseId -- | ZPL-2.0, Zope Public License 2.0 ZPL_2_0 :: LicenseId -- | ZPL-2.1, Zope Public License 2.1 ZPL_2_1 :: LicenseId -- | License SPDX identifier, e.g. "BSD-3-Clause". licenseId :: LicenseId -> String -- | License name, e.g. "GNU General Public License v2.0 only" licenseName :: LicenseId -> String -- | Whether the license is approved by Open Source Initiative (OSI). -- -- See https://opensource.org/licenses/alphabetical. licenseIsOsiApproved :: LicenseId -> Bool -- | Whether the license is considered libre by Free Software Foundation -- (FSF). -- -- See https://www.gnu.org/licenses/license-list.en.html licenseIsFsfLibre :: LicenseId -> Bool -- | Create a LicenseId from a String. mkLicenseId :: LicenseListVersion -> String -> Maybe LicenseId licenseIdList :: LicenseListVersion -> [LicenseId] -- | Help message for migrating from non-SPDX license identifiers. -- -- Old License is almost SPDX, except for BSD2, -- BSD3. This function suggests SPDX variant: -- --
-- >>> licenseIdMigrationMessage "BSD3" -- "Do you mean BSD-3-Clause?" ---- -- Also OtherLicense, AllRightsReserved, and -- PublicDomain aren't valid SPDX identifiers -- --
-- >>> 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." ---- -- SPDX License list version 3.0 introduced "-only" and "-or-later" -- variants for GNU family of licenses. See -- https://spdx.org/news/news/2018/01/license-list-30-released -- >>> 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: -- --
-- >>> 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] --licenseIdMigrationMessage :: String -> String instance Data.Data.Data Distribution.SPDX.LicenseId.LicenseId instance GHC.Read.Read Distribution.SPDX.LicenseId.LicenseId instance GHC.Show.Show Distribution.SPDX.LicenseId.LicenseId instance GHC.Enum.Bounded Distribution.SPDX.LicenseId.LicenseId instance GHC.Enum.Enum Distribution.SPDX.LicenseId.LicenseId instance GHC.Classes.Ord Distribution.SPDX.LicenseId.LicenseId instance GHC.Classes.Eq Distribution.SPDX.LicenseId.LicenseId instance Data.Binary.Class.Binary Distribution.SPDX.LicenseId.LicenseId instance Distribution.Utils.Structured.Structured Distribution.SPDX.LicenseId.LicenseId instance Distribution.Pretty.Pretty Distribution.SPDX.LicenseId.LicenseId instance Distribution.Parsec.Parsec Distribution.SPDX.LicenseId.LicenseId instance Control.DeepSeq.NFData Distribution.SPDX.LicenseId.LicenseId module Distribution.SPDX.LicenseExceptionId -- | SPDX License Exceptions identifiers list v3.23 data LicenseExceptionId -- | 389-exception, 389 Directory Server Exception DS389_exception :: LicenseExceptionId -- | Asterisk-exception, Asterisk exception, SPDX License List -- 3.23 Asterisk_exception :: LicenseExceptionId -- | Autoconf-exception-2.0, Autoconf exception 2.0 Autoconf_exception_2_0 :: LicenseExceptionId -- | Autoconf-exception-3.0, Autoconf exception 3.0 Autoconf_exception_3_0 :: LicenseExceptionId -- | Autoconf-exception-generic-3.0, Autoconf generic exception -- for GPL-3.0, SPDX License List 3.23 Autoconf_exception_generic_3_0 :: LicenseExceptionId -- | Autoconf-exception-generic, Autoconf generic exception, SPDX -- License List 3.23 Autoconf_exception_generic :: LicenseExceptionId -- | Autoconf-exception-macro, Autoconf macro exception, SPDX -- License List 3.23 Autoconf_exception_macro :: LicenseExceptionId -- | Bison-exception-1.24, Bison exception 1.24, SPDX License List -- 3.23 Bison_exception_1_24 :: LicenseExceptionId -- | Bison-exception-2.2, Bison exception 2.2 Bison_exception_2_2 :: LicenseExceptionId -- | Bootloader-exception, Bootloader Distribution Exception Bootloader_exception :: LicenseExceptionId -- | Classpath-exception-2.0, Classpath exception 2.0 Classpath_exception_2_0 :: LicenseExceptionId -- | CLISP-exception-2.0, CLISP exception 2.0 CLISP_exception_2_0 :: LicenseExceptionId -- | cryptsetup-OpenSSL-exception, cryptsetup OpenSSL exception, -- SPDX License List 3.23 Cryptsetup_OpenSSL_exception :: LicenseExceptionId -- | DigiRule-FOSS-exception, DigiRule FOSS License Exception DigiRule_FOSS_exception :: LicenseExceptionId -- | eCos-exception-2.0, eCos exception 2.0 ECos_exception_2_0 :: LicenseExceptionId -- | Fawkes-Runtime-exception, Fawkes Runtime Exception Fawkes_Runtime_exception :: LicenseExceptionId -- | FLTK-exception, FLTK exception FLTK_exception :: LicenseExceptionId -- | fmt-exception, fmt exception, SPDX License List 3.23 Fmt_exception :: LicenseExceptionId -- | Font-exception-2.0, Font exception 2.0 Font_exception_2_0 :: LicenseExceptionId -- | freertos-exception-2.0, FreeRTOS Exception 2.0 Freertos_exception_2_0 :: LicenseExceptionId -- | GCC-exception-2.0-note, GCC Runtime Library exception 2.0 - -- note variant, SPDX License List 3.23 GCC_exception_2_0_note :: LicenseExceptionId -- | GCC-exception-2.0, GCC Runtime Library exception 2.0 GCC_exception_2_0 :: LicenseExceptionId -- | GCC-exception-3.1, GCC Runtime Library exception 3.1 GCC_exception_3_1 :: LicenseExceptionId -- | Gmsh-exception, Gmsh exception>, SPDX License List 3.23 Gmsh_exception :: LicenseExceptionId -- | GNAT-exception, GNAT exception, SPDX License List 3.23 GNAT_exception :: LicenseExceptionId -- | GNOME-examples-exception, GNOME examples exception, SPDX -- License List 3.23 GNOME_examples_exception :: LicenseExceptionId -- | GNU-compiler-exception, GNU Compiler Exception, SPDX License -- List 3.23 GNU_compiler_exception :: LicenseExceptionId -- | gnu-javamail-exception, GNU JavaMail exception Gnu_javamail_exception :: LicenseExceptionId -- | GPL-3.0-interface-exception, GPL-3.0 Interface Exception, -- SPDX License List 3.23 GPL_3_0_interface_exception :: LicenseExceptionId -- | GPL-3.0-linking-exception, 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 -- | GPL-3.0-linking-source-exception, 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 -- | GPL-CC-1.0, 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 -- | GStreamer-exception-2005, GStreamer Exception (2005), SPDX -- License List 3.23 GStreamer_exception_2005 :: LicenseExceptionId -- | GStreamer-exception-2008, GStreamer Exception (2008), SPDX -- License List 3.23 GStreamer_exception_2008 :: LicenseExceptionId -- | i2p-gpl-java-exception, i2p GPL+Java Exception I2p_gpl_java_exception :: LicenseExceptionId -- | KiCad-libraries-exception, KiCad Libraries Exception, SPDX -- License List 3.23 KiCad_libraries_exception :: LicenseExceptionId -- | LGPL-3.0-linking-exception, 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 -- | libpri-OpenH323-exception, libpri OpenH323 exception, SPDX -- License List 3.23 Libpri_OpenH323_exception :: LicenseExceptionId -- | Libtool-exception, Libtool Exception Libtool_exception :: LicenseExceptionId -- | Linux-syscall-note, Linux Syscall Note Linux_syscall_note :: LicenseExceptionId -- | LLGPL, LLGPL Preamble, SPDX License List 3.23 LLGPL :: LicenseExceptionId -- | LLVM-exception, 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 -- | LZMA-exception, LZMA exception LZMA_exception :: LicenseExceptionId -- | mif-exception, Macros and Inline Functions Exception Mif_exception :: LicenseExceptionId -- | Nokia-Qt-exception-1.1, Nokia Qt LGPL exception 1.1, SPDX -- License List 3.0, SPDX License List 3.2 Nokia_Qt_exception_1_1 :: LicenseExceptionId -- | OCaml-LGPL-linking-exception, 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 -- | OCCT-exception-1.0, Open CASCADE Exception 1.0 OCCT_exception_1_0 :: LicenseExceptionId -- | OpenJDK-assembly-exception-1.0, 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 -- | openvpn-openssl-exception, OpenVPN OpenSSL Exception Openvpn_openssl_exception :: LicenseExceptionId -- | PS-or-PDF-font-exception-20170817, 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 -- | QPL-1.0-INRIA-2004-exception, INRIA QPL 1.0 2004 variant -- exception, SPDX License List 3.23 QPL_1_0_INRIA_2004_exception :: LicenseExceptionId -- | Qt-GPL-exception-1.0, 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 -- | Qt-LGPL-exception-1.1, 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 -- | Qwt-exception-1.0, Qwt exception 1.0 Qwt_exception_1_0 :: LicenseExceptionId -- | SANE-exception, SANE Exception, SPDX License List 3.23 SANE_exception :: LicenseExceptionId -- | SHL-2.0, 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 -- | SHL-2.1, 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 -- | stunnel-exception, stunnel Exception, SPDX License List 3.23 Stunnel_exception :: LicenseExceptionId -- | SWI-exception, SWI exception, SPDX License List 3.23 SWI_exception :: LicenseExceptionId -- | Swift-exception, 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 -- | Texinfo-exception, Texinfo exception, SPDX License List 3.23 Texinfo_exception :: LicenseExceptionId -- | u-boot-exception-2.0, U-Boot exception 2.0 U_boot_exception_2_0 :: LicenseExceptionId -- | UBDL-exception, Unmodified Binary Distribution exception, -- SPDX License List 3.23 UBDL_exception :: LicenseExceptionId -- | Universal-FOSS-exception-1.0, 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 -- | vsftpd-openssl-exception, vsftpd OpenSSL exception, SPDX -- License List 3.23 Vsftpd_openssl_exception :: LicenseExceptionId -- | WxWindows-exception-3.1, WxWindows Library Exception 3.1 WxWindows_exception_3_1 :: LicenseExceptionId -- | x11vnc-openssl-exception, x11vnc OpenSSL Exception, SPDX -- License List 3.23 X11vnc_openssl_exception :: LicenseExceptionId -- | License SPDX identifier, e.g. "BSD-3-Clause". licenseExceptionId :: LicenseExceptionId -> String -- | License name, e.g. "GNU General Public License v2.0 only" licenseExceptionName :: LicenseExceptionId -> String -- | Create a LicenseExceptionId from a String. mkLicenseExceptionId :: LicenseListVersion -> String -> Maybe LicenseExceptionId licenseExceptionIdList :: LicenseListVersion -> [LicenseExceptionId] instance GHC.Generics.Generic Distribution.SPDX.LicenseExceptionId.LicenseExceptionId instance Data.Data.Data Distribution.SPDX.LicenseExceptionId.LicenseExceptionId instance GHC.Read.Read Distribution.SPDX.LicenseExceptionId.LicenseExceptionId instance GHC.Show.Show Distribution.SPDX.LicenseExceptionId.LicenseExceptionId instance GHC.Enum.Bounded Distribution.SPDX.LicenseExceptionId.LicenseExceptionId instance GHC.Enum.Enum Distribution.SPDX.LicenseExceptionId.LicenseExceptionId instance GHC.Classes.Ord Distribution.SPDX.LicenseExceptionId.LicenseExceptionId instance GHC.Classes.Eq Distribution.SPDX.LicenseExceptionId.LicenseExceptionId instance Data.Binary.Class.Binary Distribution.SPDX.LicenseExceptionId.LicenseExceptionId instance Distribution.Utils.Structured.Structured Distribution.SPDX.LicenseExceptionId.LicenseExceptionId instance Distribution.Pretty.Pretty Distribution.SPDX.LicenseExceptionId.LicenseExceptionId instance Distribution.Parsec.Parsec Distribution.SPDX.LicenseExceptionId.LicenseExceptionId instance Control.DeepSeq.NFData Distribution.SPDX.LicenseExceptionId.LicenseExceptionId module Distribution.SPDX.LicenseExpression -- | SPDX License Expression. -- --
-- idstring = 1*(ALPHA / DIGIT / "-" / "." )
-- license id = <short form license identifier inAppendix I.1>
-- license exception id = <short form license exception identifier inAppendix I.2>
-- 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)
--
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:
-- GPL-2.0-only
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: GPL-2.0+
ELicenseIdPlus :: LicenseId -> SimpleLicenseExpression
-- | A SPDX user defined license reference: For example:
-- LicenseRef-23, LicenseRef-MIT-Style-1, or
-- DocumentRef-spdx-tool-1.2:LicenseRef-MIT-Style-2
ELicenseRef :: LicenseRef -> SimpleLicenseExpression
simpleLicenseExpression :: LicenseId -> LicenseExpression
instance GHC.Generics.Generic Distribution.SPDX.LicenseExpression.SimpleLicenseExpression
instance Data.Data.Data Distribution.SPDX.LicenseExpression.SimpleLicenseExpression
instance GHC.Classes.Ord Distribution.SPDX.LicenseExpression.SimpleLicenseExpression
instance GHC.Classes.Eq Distribution.SPDX.LicenseExpression.SimpleLicenseExpression
instance GHC.Read.Read Distribution.SPDX.LicenseExpression.SimpleLicenseExpression
instance GHC.Show.Show Distribution.SPDX.LicenseExpression.SimpleLicenseExpression
instance GHC.Generics.Generic Distribution.SPDX.LicenseExpression.LicenseExpression
instance Data.Data.Data Distribution.SPDX.LicenseExpression.LicenseExpression
instance GHC.Classes.Ord Distribution.SPDX.LicenseExpression.LicenseExpression
instance GHC.Classes.Eq Distribution.SPDX.LicenseExpression.LicenseExpression
instance GHC.Read.Read Distribution.SPDX.LicenseExpression.LicenseExpression
instance GHC.Show.Show Distribution.SPDX.LicenseExpression.LicenseExpression
instance Data.Binary.Class.Binary Distribution.SPDX.LicenseExpression.LicenseExpression
instance Distribution.Utils.Structured.Structured Distribution.SPDX.LicenseExpression.LicenseExpression
instance Distribution.Pretty.Pretty Distribution.SPDX.LicenseExpression.LicenseExpression
instance Distribution.Parsec.Parsec Distribution.SPDX.LicenseExpression.LicenseExpression
instance Control.DeepSeq.NFData Distribution.SPDX.LicenseExpression.LicenseExpression
instance Data.Binary.Class.Binary Distribution.SPDX.LicenseExpression.SimpleLicenseExpression
instance Distribution.Utils.Structured.Structured Distribution.SPDX.LicenseExpression.SimpleLicenseExpression
instance Distribution.Pretty.Pretty Distribution.SPDX.LicenseExpression.SimpleLicenseExpression
instance Distribution.Parsec.Parsec Distribution.SPDX.LicenseExpression.SimpleLicenseExpression
instance Control.DeepSeq.NFData Distribution.SPDX.LicenseExpression.SimpleLicenseExpression
module Distribution.SPDX.License
-- | Declared license. See section 3.15 of SPDX Specification 2.1
--
-- Note: the NOASSERTION case is omitted.
--
-- Old License can be migrated using following rules:
--
--
-- idstring = 1*(ALPHA / DIGIT / "-" / "." )
-- license id = <short form license identifier inAppendix I.1>
-- license exception id = <short form license exception identifier inAppendix I.2>
-- 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)
--
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:
-- GPL-2.0-only
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: GPL-2.0+
ELicenseIdPlus :: LicenseId -> SimpleLicenseExpression
-- | A SPDX user defined license reference: For example:
-- LicenseRef-23, LicenseRef-MIT-Style-1, or
-- DocumentRef-spdx-tool-1.2:LicenseRef-MIT-Style-2
ELicenseRef :: LicenseRef -> SimpleLicenseExpression
simpleLicenseExpression :: LicenseId -> LicenseExpression
-- | SPDX License identifiers list v3.23
data LicenseId
-- | 0BSD, BSD Zero Clause License
NullBSD :: LicenseId
-- | AAL, Attribution Assurance License
AAL :: LicenseId
-- | Abstyles, Abstyles License
Abstyles :: LicenseId
-- | AdaCore-doc, AdaCore Doc License, SPDX License List 3.23
AdaCore_doc :: LicenseId
-- | Adobe-2006, Adobe Systems Incorporated Source Code License
-- Agreement
Adobe_2006 :: LicenseId
-- | Adobe-Display-PostScript, Adobe Display PostScript License,
-- SPDX License List 3.23
Adobe_Display_PostScript :: LicenseId
-- | Adobe-Glyph, Adobe Glyph List License
Adobe_Glyph :: LicenseId
-- | Adobe-Utopia, Adobe Utopia Font License, SPDX License List
-- 3.23
Adobe_Utopia :: LicenseId
-- | ADSL, Amazon Digital Services License
ADSL :: LicenseId
-- | AFL-1.1, Academic Free License v1.1
AFL_1_1 :: LicenseId
-- | AFL-1.2, Academic Free License v1.2
AFL_1_2 :: LicenseId
-- | AFL-2.0, Academic Free License v2.0
AFL_2_0 :: LicenseId
-- | AFL-2.1, Academic Free License v2.1
AFL_2_1 :: LicenseId
-- | AFL-3.0, Academic Free License v3.0
AFL_3_0 :: LicenseId
-- | Afmparse, Afmparse License
Afmparse :: LicenseId
-- | AGPL-1.0, Affero General Public License v1.0, SPDX License
-- List 3.0
AGPL_1_0 :: LicenseId
-- | AGPL-1.0-only, 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
-- | AGPL-1.0-or-later, 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
-- | AGPL-3.0-only, GNU Affero General Public License v3.0 only
AGPL_3_0_only :: LicenseId
-- | AGPL-3.0-or-later, GNU Affero General Public License v3.0 or
-- later
AGPL_3_0_or_later :: LicenseId
-- | Aladdin, Aladdin Free Public License
Aladdin :: LicenseId
-- | AMDPLPA, AMD's plpa_map.c License
AMDPLPA :: LicenseId
-- | AML-glslang, AML glslang variant License, SPDX License List
-- 3.23
AML_glslang :: LicenseId
-- | AML, Apple MIT License
AML :: LicenseId
-- | AMPAS, Academy of Motion Picture Arts and Sciences BSD
AMPAS :: LicenseId
-- | ANTLR-PD-fallback, ANTLR Software Rights Notice with license
-- fallback, SPDX License List 3.16, SPDX License List 3.23
ANTLR_PD_fallback :: LicenseId
-- | ANTLR-PD, ANTLR Software Rights Notice
ANTLR_PD :: LicenseId
-- | Apache-1.0, Apache License 1.0
Apache_1_0 :: LicenseId
-- | Apache-1.1, Apache License 1.1
Apache_1_1 :: LicenseId
-- | Apache-2.0, Apache License 2.0
Apache_2_0 :: LicenseId
-- | APAFML, Adobe Postscript AFM License
APAFML :: LicenseId
-- | APL-1.0, Adaptive Public License 1.0
APL_1_0 :: LicenseId
-- | App-s2p, App::s2p License, SPDX License List 3.16, SPDX
-- License List 3.23
App_s2p :: LicenseId
-- | APSL-1.0, Apple Public Source License 1.0
APSL_1_0 :: LicenseId
-- | APSL-1.1, Apple Public Source License 1.1
APSL_1_1 :: LicenseId
-- | APSL-1.2, Apple Public Source License 1.2
APSL_1_2 :: LicenseId
-- | APSL-2.0, Apple Public Source License 2.0
APSL_2_0 :: LicenseId
-- | Arphic-1999, Arphic Public License, SPDX License List 3.23
Arphic_1999 :: LicenseId
-- | Artistic-1.0-cl8, Artistic License 1.0 w/clause 8
Artistic_1_0_cl8 :: LicenseId
-- | Artistic-1.0-Perl, Artistic License 1.0 (Perl)
Artistic_1_0_Perl :: LicenseId
-- | Artistic-1.0, Artistic License 1.0
Artistic_1_0 :: LicenseId
-- | Artistic-2.0, Artistic License 2.0
Artistic_2_0 :: LicenseId
-- | ASWF-Digital-Assets-1.0, ASWF Digital Assets License version
-- 1.0, SPDX License List 3.23
ASWF_Digital_Assets_1_0 :: LicenseId
-- | ASWF-Digital-Assets-1.1, ASWF Digital Assets License 1.1,
-- SPDX License List 3.23
ASWF_Digital_Assets_1_1 :: LicenseId
-- | Baekmuk, Baekmuk License, SPDX License List 3.23
Baekmuk :: LicenseId
-- | Bahyph, Bahyph License
Bahyph :: LicenseId
-- | Barr, Barr License
Barr :: LicenseId
-- | bcrypt-Solar-Designer, bcrypt Solar Designer License, SPDX
-- License List 3.23
Bcrypt_Solar_Designer :: LicenseId
-- | Beerware, Beerware License
Beerware :: LicenseId
-- | Bitstream-Charter, Bitstream Charter Font License, SPDX
-- License List 3.23
Bitstream_Charter :: LicenseId
-- | Bitstream-Vera, Bitstream Vera Font License, SPDX License
-- List 3.23
Bitstream_Vera :: LicenseId
-- | BitTorrent-1.0, BitTorrent Open Source License v1.0
BitTorrent_1_0 :: LicenseId
-- | BitTorrent-1.1, BitTorrent Open Source License v1.1
BitTorrent_1_1 :: LicenseId
-- | blessing, 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
-- | BlueOak-1.0.0, 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
-- | Boehm-GC, Boehm-Demers-Weiser GC License, SPDX License List
-- 3.23
Boehm_GC :: LicenseId
-- | Borceux, Borceux license
Borceux :: LicenseId
-- | Brian-Gladman-2-Clause, Brian Gladman 2-Clause License, SPDX
-- License List 3.23
Brian_Gladman_2_Clause :: LicenseId
-- | Brian-Gladman-3-Clause, Brian Gladman 3-Clause License, SPDX
-- License List 3.23
Brian_Gladman_3_Clause :: LicenseId
-- | BSD-1-Clause, BSD 1-Clause License
BSD_1_Clause :: LicenseId
-- | BSD-2-Clause-FreeBSD, 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
-- | BSD-2-Clause-NetBSD, 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
-- | BSD-2-Clause-Darwin, BSD 2-Clause - Ian Darwin variant, SPDX
-- License List 3.23
BSD_2_Clause_Darwin :: LicenseId
-- | BSD-2-Clause-Patent, BSD-2-Clause Plus Patent License
BSD_2_Clause_Patent :: LicenseId
-- | BSD-2-Clause-Views, 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
-- | BSD-2-Clause, BSD 2-Clause Simplified License
BSD_2_Clause :: LicenseId
-- | BSD-3-Clause-acpica, BSD 3-Clause acpica variant, SPDX
-- License List 3.23
BSD_3_Clause_acpica :: LicenseId
-- | BSD-3-Clause-Attribution, BSD with attribution
BSD_3_Clause_Attribution :: LicenseId
-- | BSD-3-Clause-Clear, BSD 3-Clause Clear License
BSD_3_Clause_Clear :: LicenseId
-- | BSD-3-Clause-flex, BSD 3-Clause Flex variant, SPDX License
-- List 3.23
BSD_3_Clause_flex :: LicenseId
-- | BSD-3-Clause-HP, Hewlett-Packard BSD variant license, SPDX
-- License List 3.23
BSD_3_Clause_HP :: LicenseId
-- | BSD-3-Clause-LBNL, Lawrence Berkeley National Labs BSD
-- variant license
BSD_3_Clause_LBNL :: LicenseId
-- | BSD-3-Clause-Modification, BSD 3-Clause Modification, SPDX
-- License List 3.16, SPDX License List 3.23
BSD_3_Clause_Modification :: LicenseId
-- | BSD-3-Clause-No-Military-License, BSD 3-Clause No Military
-- License, SPDX License List 3.16, SPDX License List 3.23
BSD_3_Clause_No_Military_License :: LicenseId
-- | BSD-3-Clause-No-Nuclear-License-2014, BSD 3-Clause No Nuclear
-- License 2014
BSD_3_Clause_No_Nuclear_License_2014 :: LicenseId
-- | BSD-3-Clause-No-Nuclear-License, BSD 3-Clause No Nuclear
-- License
BSD_3_Clause_No_Nuclear_License :: LicenseId
-- | BSD-3-Clause-No-Nuclear-Warranty, BSD 3-Clause No Nuclear
-- Warranty
BSD_3_Clause_No_Nuclear_Warranty :: LicenseId
-- | BSD-3-Clause-Open-MPI, 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
-- | BSD-3-Clause-Sun, BSD 3-Clause Sun Microsystems, SPDX License
-- List 3.23
BSD_3_Clause_Sun :: LicenseId
-- | BSD-3-Clause, BSD 3-Clause New or Revised
-- License
BSD_3_Clause :: LicenseId
-- | BSD-4-Clause-Shortened, BSD 4 Clause Shortened, SPDX License
-- List 3.16, SPDX License List 3.23
BSD_4_Clause_Shortened :: LicenseId
-- | BSD-4-Clause-UC, BSD-4-Clause (University of
-- California-Specific)
BSD_4_Clause_UC :: LicenseId
-- | BSD-4-Clause, BSD 4-Clause Original or Old
-- License
BSD_4_Clause :: LicenseId
-- | BSD-4.3RENO, BSD 4.3 RENO License, SPDX License List 3.23
BSD_4_3RENO :: LicenseId
-- | BSD-4.3TAHOE, BSD 4.3 TAHOE License, SPDX License List 3.23
BSD_4_3TAHOE :: LicenseId
-- | BSD-Advertising-Acknowledgement, BSD Advertising
-- Acknowledgement License, SPDX License List 3.23
BSD_Advertising_Acknowledgement :: LicenseId
-- | BSD-Attribution-HPND-disclaimer, BSD with Attribution and
-- HPND disclaimer, SPDX License List 3.23
BSD_Attribution_HPND_disclaimer :: LicenseId
-- | BSD-Inferno-Nettverk, BSD-Inferno-Nettverk, SPDX License List
-- 3.23
BSD_Inferno_Nettverk :: LicenseId
-- | BSD-Protection, BSD Protection License
BSD_Protection :: LicenseId
-- | BSD-Source-beginning-file, BSD Source Code Attribution -
-- beginning of file variant, SPDX License List 3.23
BSD_Source_beginning_file :: LicenseId
-- | BSD-Source-Code, BSD Source Code Attribution
BSD_Source_Code :: LicenseId
-- | BSD-Systemics-W3Works, Systemics W3Works BSD variant license,
-- SPDX License List 3.23
BSD_Systemics_W3Works :: LicenseId
-- | BSD-Systemics, Systemics BSD variant license, SPDX License
-- List 3.23
BSD_Systemics :: LicenseId
-- | BSL-1.0, Boost Software License 1.0
BSL_1_0 :: LicenseId
-- | bzip2-1.0.5, 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
-- | BUSL-1.1, Business Source License 1.1, SPDX License List
-- 3.16, SPDX License List 3.23
BUSL_1_1 :: LicenseId
-- | bzip2-1.0.6, bzip2 and libbzip2 License v1.0.6
Bzip2_1_0_6 :: LicenseId
-- | C-UDA-1.0, Computational Use of Data Agreement v1.0, SPDX
-- License List 3.16, SPDX License List 3.23
C_UDA_1_0 :: LicenseId
-- | CAL-1.0-Combined-Work-Exception, 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
-- | CAL-1.0, 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
-- | Caldera-no-preamble, Caldera License (without preamble), SPDX
-- License List 3.23
Caldera_no_preamble :: LicenseId
-- | Caldera, Caldera License
Caldera :: LicenseId
-- | CATOSL-1.1, Computer Associates Trusted Open Source License
-- 1.1
CATOSL_1_1 :: LicenseId
-- | CC-BY-1.0, Creative Commons Attribution 1.0 Generic
CC_BY_1_0 :: LicenseId
-- | CC-BY-2.0, Creative Commons Attribution 2.0 Generic
CC_BY_2_0 :: LicenseId
-- | CC-BY-2.5-AU, Creative Commons Attribution 2.5 Australia,
-- SPDX License List 3.16, SPDX License List 3.23
CC_BY_2_5_AU :: LicenseId
-- | CC-BY-2.5, Creative Commons Attribution 2.5 Generic
CC_BY_2_5 :: LicenseId
-- | CC-BY-3.0-AT, 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
-- | CC-BY-3.0-AU, Creative Commons Attribution 3.0 Australia,
-- SPDX License List 3.23
CC_BY_3_0_AU :: LicenseId
-- | CC-BY-3.0-DE, Creative Commons Attribution 3.0 Germany, SPDX
-- License List 3.16, SPDX License List 3.23
CC_BY_3_0_DE :: LicenseId
-- | CC-BY-3.0-IGO, Creative Commons Attribution 3.0 IGO, SPDX
-- License List 3.23
CC_BY_3_0_IGO :: LicenseId
-- | CC-BY-3.0-NL, Creative Commons Attribution 3.0 Netherlands,
-- SPDX License List 3.16, SPDX License List 3.23
CC_BY_3_0_NL :: LicenseId
-- | CC-BY-3.0-US, Creative Commons Attribution 3.0 United States,
-- SPDX License List 3.16, SPDX License List 3.23
CC_BY_3_0_US :: LicenseId
-- | CC-BY-3.0, Creative Commons Attribution 3.0 Unported
CC_BY_3_0 :: LicenseId
-- | CC-BY-4.0, Creative Commons Attribution 4.0 International
CC_BY_4_0 :: LicenseId
-- | CC-BY-NC-1.0, Creative Commons Attribution Non Commercial 1.0
-- Generic
CC_BY_NC_1_0 :: LicenseId
-- | CC-BY-NC-2.0, Creative Commons Attribution Non Commercial 2.0
-- Generic
CC_BY_NC_2_0 :: LicenseId
-- | CC-BY-NC-2.5, Creative Commons Attribution Non Commercial 2.5
-- Generic
CC_BY_NC_2_5 :: LicenseId
-- | CC-BY-NC-3.0-DE, 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
-- | CC-BY-NC-3.0, Creative Commons Attribution Non Commercial 3.0
-- Unported
CC_BY_NC_3_0 :: LicenseId
-- | CC-BY-NC-4.0, Creative Commons Attribution Non Commercial 4.0
-- International
CC_BY_NC_4_0 :: LicenseId
-- | CC-BY-NC-ND-1.0, Creative Commons Attribution Non Commercial
-- No Derivatives 1.0 Generic
CC_BY_NC_ND_1_0 :: LicenseId
-- | CC-BY-NC-ND-2.0, Creative Commons Attribution Non Commercial
-- No Derivatives 2.0 Generic
CC_BY_NC_ND_2_0 :: LicenseId
-- | CC-BY-NC-ND-2.5, Creative Commons Attribution Non Commercial
-- No Derivatives 2.5 Generic
CC_BY_NC_ND_2_5 :: LicenseId
-- | CC-BY-NC-ND-3.0-DE, 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
-- | CC-BY-NC-ND-3.0-IGO, 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
-- | CC-BY-NC-ND-3.0, Creative Commons Attribution Non Commercial
-- No Derivatives 3.0 Unported
CC_BY_NC_ND_3_0 :: LicenseId
-- | CC-BY-NC-ND-4.0, Creative Commons Attribution Non Commercial
-- No Derivatives 4.0 International
CC_BY_NC_ND_4_0 :: LicenseId
-- | CC-BY-NC-SA-1.0, Creative Commons Attribution Non Commercial
-- Share Alike 1.0 Generic
CC_BY_NC_SA_1_0 :: LicenseId
-- | CC-BY-NC-SA-2.0-DE, Creative Commons Attribution Non
-- Commercial Share Alike 2.0 Germany, SPDX License List 3.23
CC_BY_NC_SA_2_0_DE :: LicenseId
-- | CC-BY-NC-SA-2.0-FR, 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
-- | CC-BY-NC-SA-2.0-UK, 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
-- | CC-BY-NC-SA-2.0, Creative Commons Attribution Non Commercial
-- Share Alike 2.0 Generic
CC_BY_NC_SA_2_0 :: LicenseId
-- | CC-BY-NC-SA-2.5, Creative Commons Attribution Non Commercial
-- Share Alike 2.5 Generic
CC_BY_NC_SA_2_5 :: LicenseId
-- | CC-BY-NC-SA-3.0-DE, 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
-- | CC-BY-NC-SA-3.0-IGO, 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
-- | CC-BY-NC-SA-3.0, Creative Commons Attribution Non Commercial
-- Share Alike 3.0 Unported
CC_BY_NC_SA_3_0 :: LicenseId
-- | CC-BY-NC-SA-4.0, Creative Commons Attribution Non Commercial
-- Share Alike 4.0 International
CC_BY_NC_SA_4_0 :: LicenseId
-- | CC-BY-ND-1.0, Creative Commons Attribution No Derivatives 1.0
-- Generic
CC_BY_ND_1_0 :: LicenseId
-- | CC-BY-ND-2.0, Creative Commons Attribution No Derivatives 2.0
-- Generic
CC_BY_ND_2_0 :: LicenseId
-- | CC-BY-ND-2.5, Creative Commons Attribution No Derivatives 2.5
-- Generic
CC_BY_ND_2_5 :: LicenseId
-- | CC-BY-ND-3.0-DE, 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
-- | CC-BY-ND-3.0, Creative Commons Attribution No Derivatives 3.0
-- Unported
CC_BY_ND_3_0 :: LicenseId
-- | CC-BY-ND-4.0, Creative Commons Attribution No Derivatives 4.0
-- International
CC_BY_ND_4_0 :: LicenseId
-- | CC-BY-SA-1.0, Creative Commons Attribution Share Alike 1.0
-- Generic
CC_BY_SA_1_0 :: LicenseId
-- | CC-BY-SA-2.0-UK, 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
-- | CC-BY-SA-2.0, Creative Commons Attribution Share Alike 2.0
-- Generic
CC_BY_SA_2_0 :: LicenseId
-- | CC-BY-SA-2.1-JP, 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
-- | CC-BY-SA-2.5, Creative Commons Attribution Share Alike 2.5
-- Generic
CC_BY_SA_2_5 :: LicenseId
-- | CC-BY-SA-3.0-AT, 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
-- | CC-BY-SA-3.0-DE, 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
-- | CC-BY-SA-3.0-IGO, Creative Commons Attribution-ShareAlike 3.0
-- IGO, SPDX License List 3.23
CC_BY_SA_3_0_IGO :: LicenseId
-- | CC-BY-SA-3.0, Creative Commons Attribution Share Alike 3.0
-- Unported
CC_BY_SA_3_0 :: LicenseId
-- | CC-BY-SA-4.0, Creative Commons Attribution Share Alike 4.0
-- International
CC_BY_SA_4_0 :: LicenseId
-- | CC-PDDC, 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
-- | CC0-1.0, Creative Commons Zero v1.0 Universal
CC0_1_0 :: LicenseId
-- | CDDL-1.0, Common Development and Distribution License 1.0
CDDL_1_0 :: LicenseId
-- | CDDL-1.1, Common Development and Distribution License 1.1
CDDL_1_1 :: LicenseId
-- | CDL-1.0, Common Documentation License 1.0, SPDX License List
-- 3.16, SPDX License List 3.23
CDL_1_0 :: LicenseId
-- | CDLA-Permissive-1.0, Community Data License Agreement
-- Permissive 1.0
CDLA_Permissive_1_0 :: LicenseId
-- | CDLA-Permissive-2.0, Community Data License Agreement
-- Permissive 2.0, SPDX License List 3.16, SPDX License List 3.23
CDLA_Permissive_2_0 :: LicenseId
-- | CDLA-Sharing-1.0, Community Data License Agreement Sharing
-- 1.0
CDLA_Sharing_1_0 :: LicenseId
-- | CECILL-1.0, CeCILL Free Software License Agreement v1.0
CECILL_1_0 :: LicenseId
-- | CECILL-1.1, CeCILL Free Software License Agreement v1.1
CECILL_1_1 :: LicenseId
-- | CECILL-2.0, CeCILL Free Software License Agreement v2.0
CECILL_2_0 :: LicenseId
-- | CECILL-2.1, CeCILL Free Software License Agreement v2.1
CECILL_2_1 :: LicenseId
-- | CECILL-B, CeCILL-B Free Software License Agreement
CECILL_B :: LicenseId
-- | CECILL-C, CeCILL-C Free Software License Agreement
CECILL_C :: LicenseId
-- | CERN-OHL-1.1, 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
-- | CERN-OHL-1.2, 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
-- | CERN-OHL-P-2.0, 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
-- | CERN-OHL-S-2.0, 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
-- | CERN-OHL-W-2.0, 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
-- | CFITSIO, CFITSIO License, SPDX License List 3.23
CFITSIO :: LicenseId
-- | check-cvs, check-cvs License, SPDX License List 3.23
Check_cvs :: LicenseId
-- | checkmk, Checkmk License, SPDX License List 3.23
Checkmk :: LicenseId
-- | ClArtistic, Clarified Artistic License
ClArtistic :: LicenseId
-- | Clips, Clips License, SPDX License List 3.23
Clips :: LicenseId
-- | CMU-Mach-nodoc, CMU Mach - no notices-in-documentation
-- variant, SPDX License List 3.23
CMU_Mach_nodoc :: LicenseId
-- | CMU-Mach, CMU Mach License, SPDX License List 3.23
CMU_Mach :: LicenseId
-- | CNRI-Jython, CNRI Jython License
CNRI_Jython :: LicenseId
-- | CNRI-Python-GPL-Compatible, CNRI Python Open Source GPL
-- Compatible License Agreement
CNRI_Python_GPL_Compatible :: LicenseId
-- | CNRI-Python, CNRI Python License
CNRI_Python :: LicenseId
-- | COIL-1.0, Copyfree Open Innovation License, SPDX License List
-- 3.16, SPDX License List 3.23
COIL_1_0 :: LicenseId
-- | Community-Spec-1.0, Community Specification License 1.0, SPDX
-- License List 3.16, SPDX License List 3.23
Community_Spec_1_0 :: LicenseId
-- | Condor-1.1, Condor Public License v1.1
Condor_1_1 :: LicenseId
-- | copyleft-next-0.3.0, 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
-- | copyleft-next-0.3.1, 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
-- | Cornell-Lossless-JPEG, Cornell Lossless JPEG License, SPDX
-- License List 3.23
Cornell_Lossless_JPEG :: LicenseId
-- | CPAL-1.0, Common Public Attribution License 1.0
CPAL_1_0 :: LicenseId
-- | CPL-1.0, Common Public License 1.0
CPL_1_0 :: LicenseId
-- | CPOL-1.02, Code Project Open License 1.02
CPOL_1_02 :: LicenseId
-- | Cronyx, Cronyx License, SPDX License List 3.23
Cronyx :: LicenseId
-- | Crossword, Crossword License
Crossword :: LicenseId
-- | CrystalStacker, CrystalStacker License
CrystalStacker :: LicenseId
-- | CUA-OPL-1.0, CUA Office Public License v1.0
CUA_OPL_1_0 :: LicenseId
-- | Cube, Cube License
Cube :: LicenseId
-- | curl, curl License
Curl :: LicenseId
-- | D-FSL-1.0, Deutsche Freie Software Lizenz
D_FSL_1_0 :: LicenseId
-- | DEC-3-Clause, DEC 3-Clause License, SPDX License List 3.23
DEC_3_Clause :: LicenseId
-- | diffmark, diffmark license
Diffmark :: LicenseId
-- | DL-DE-BY-2.0, Data licence Germany – attribution – version
-- 2.0, SPDX License List 3.16, SPDX License List 3.23
DL_DE_BY_2_0 :: LicenseId
-- | DL-DE-ZERO-2.0, Data licence Germany – zero – version 2.0,
-- SPDX License List 3.23
DL_DE_ZERO_2_0 :: LicenseId
-- | DOC, DOC License
DOC :: LicenseId
-- | Dotseqn, Dotseqn License
Dotseqn :: LicenseId
-- | DRL-1.0, Detection Rule License 1.0, SPDX License List 3.16,
-- SPDX License List 3.23
DRL_1_0 :: LicenseId
-- | DRL-1.1, Detection Rule License 1.1, SPDX License List 3.23
DRL_1_1 :: LicenseId
-- | DSDP, DSDP License
DSDP :: LicenseId
-- | dtoa, David M. Gay dtoa License, SPDX License List 3.23
Dtoa :: LicenseId
-- | dvipdfm, dvipdfm License
Dvipdfm :: LicenseId
-- | ECL-1.0, Educational Community License v1.0
ECL_1_0 :: LicenseId
-- | ECL-2.0, Educational Community License v2.0
ECL_2_0 :: LicenseId
-- | EFL-1.0, Eiffel Forum License v1.0
EFL_1_0 :: LicenseId
-- | EFL-2.0, Eiffel Forum License v2.0
EFL_2_0 :: LicenseId
-- | eGenix, eGenix.com Public License 1.1.0
EGenix :: LicenseId
-- | Elastic-2.0, Elastic License 2.0, SPDX License List 3.16,
-- SPDX License List 3.23
Elastic_2_0 :: LicenseId
-- | Entessa, Entessa Public License v1.0
Entessa :: LicenseId
-- | EPICS, EPICS Open License, SPDX License List 3.10, SPDX
-- License List 3.16, SPDX License List 3.23
EPICS :: LicenseId
-- | EPL-1.0, Eclipse Public License 1.0
EPL_1_0 :: LicenseId
-- | EPL-2.0, Eclipse Public License 2.0
EPL_2_0 :: LicenseId
-- | ErlPL-1.1, Erlang Public License v1.1
ErlPL_1_1 :: LicenseId
-- | etalab-2.0, 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
-- | EUDatagrid, EU DataGrid Software License
EUDatagrid :: LicenseId
-- | EUPL-1.0, European Union Public License 1.0
EUPL_1_0 :: LicenseId
-- | EUPL-1.1, European Union Public License 1.1
EUPL_1_1 :: LicenseId
-- | EUPL-1.2, European Union Public License 1.2
EUPL_1_2 :: LicenseId
-- | Eurosym, Eurosym License
Eurosym :: LicenseId
-- | Fair, Fair License
Fair :: LicenseId
-- | FBM, Fuzzy Bitmap License, SPDX License List 3.23
FBM :: LicenseId
-- | FDK-AAC, Fraunhofer FDK AAC Codec Library, SPDX License List
-- 3.16, SPDX License List 3.23
FDK_AAC :: LicenseId
-- | Ferguson-Twofish, Ferguson Twofish License, SPDX License List
-- 3.23
Ferguson_Twofish :: LicenseId
-- | Frameworx-1.0, Frameworx Open License 1.0
Frameworx_1_0 :: LicenseId
-- | FreeBSD-DOC, FreeBSD Documentation License, SPDX License List
-- 3.16, SPDX License List 3.23
FreeBSD_DOC :: LicenseId
-- | FreeImage, FreeImage Public License v1.0
FreeImage :: LicenseId
-- | FSFAP-no-warranty-disclaimer, FSF All Permissive License
-- (without Warranty), SPDX License List 3.23
FSFAP_no_warranty_disclaimer :: LicenseId
-- | FSFAP, FSF All Permissive License
FSFAP :: LicenseId
-- | FSFULLRWD, FSF Unlimited License (With License Retention and
-- Warranty Disclaimer), SPDX License List 3.23
FSFULLRWD :: LicenseId
-- | FSFULLR, FSF Unlimited License (with License Retention)
FSFULLR :: LicenseId
-- | FSFUL, FSF Unlimited License
FSFUL :: LicenseId
-- | FTL, Freetype Project License
FTL :: LicenseId
-- | Furuseth, Furuseth License, SPDX License List 3.23
Furuseth :: LicenseId
-- | fwlw, fwlw License, SPDX License List 3.23
Fwlw :: LicenseId
-- | GCR-docs, Gnome GCR Documentation License, SPDX License List
-- 3.23
GCR_docs :: LicenseId
-- | GD, GD License, SPDX License List 3.16, SPDX License List
-- 3.23
GD :: LicenseId
-- | GFDL-1.1-invariants-only, 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
-- | GFDL-1.1-invariants-or-later, 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
-- | GFDL-1.1-no-invariants-only, 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
-- | GFDL-1.1-no-invariants-or-later, 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
-- | GFDL-1.1-only, GNU Free Documentation License v1.1 only
GFDL_1_1_only :: LicenseId
-- | GFDL-1.1-or-later, GNU Free Documentation License v1.1 or
-- later
GFDL_1_1_or_later :: LicenseId
-- | GFDL-1.2-invariants-only, 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
-- | GFDL-1.2-invariants-or-later, 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
-- | GFDL-1.2-no-invariants-only, 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
-- | GFDL-1.2-no-invariants-or-later, 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
-- | GFDL-1.2-only, GNU Free Documentation License v1.2 only
GFDL_1_2_only :: LicenseId
-- | GFDL-1.2-or-later, GNU Free Documentation License v1.2 or
-- later
GFDL_1_2_or_later :: LicenseId
-- | GFDL-1.3-invariants-only, 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
-- | GFDL-1.3-invariants-or-later, 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
-- | GFDL-1.3-no-invariants-only, 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
-- | GFDL-1.3-no-invariants-or-later, 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
-- | GFDL-1.3-only, GNU Free Documentation License v1.3 only
GFDL_1_3_only :: LicenseId
-- | GFDL-1.3-or-later, GNU Free Documentation License v1.3 or
-- later
GFDL_1_3_or_later :: LicenseId
-- | Giftware, Giftware License
Giftware :: LicenseId
-- | GL2PS, GL2PS License
GL2PS :: LicenseId
-- | Glide, 3dfx Glide License
Glide :: LicenseId
-- | Glulxe, Glulxe License
Glulxe :: LicenseId
-- | GLWTPL, Good Luck With That Public License, SPDX License List
-- 3.10, SPDX License List 3.16, SPDX License List 3.23
GLWTPL :: LicenseId
-- | gnuplot, gnuplot License
Gnuplot :: LicenseId
-- | GPL-1.0-only, GNU General Public License v1.0 only
GPL_1_0_only :: LicenseId
-- | GPL-1.0-or-later, GNU General Public License v1.0 or later
GPL_1_0_or_later :: LicenseId
-- | GPL-2.0-only, GNU General Public License v2.0 only
GPL_2_0_only :: LicenseId
-- | GPL-2.0-or-later, GNU General Public License v2.0 or later
GPL_2_0_or_later :: LicenseId
-- | GPL-3.0-only, GNU General Public License v3.0 only
GPL_3_0_only :: LicenseId
-- | GPL-3.0-or-later, GNU General Public License v3.0 or later
GPL_3_0_or_later :: LicenseId
-- | Graphics-Gems, Graphics Gems License, SPDX License List 3.23
Graphics_Gems :: LicenseId
-- | gSOAP-1.3b, gSOAP Public License v1.3b
GSOAP_1_3b :: LicenseId
-- | gtkbook, gtkbook License, SPDX License List 3.23
Gtkbook :: LicenseId
-- | HaskellReport, Haskell Language Report License
HaskellReport :: LicenseId
-- | hdparm, hdparm License, SPDX License List 3.23
Hdparm :: LicenseId
-- | Hippocratic-2.1, 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
-- | HP-1986, Hewlett-Packard 1986 License, SPDX License List 3.23
HP_1986 :: LicenseId
-- | HP-1989, Hewlett-Packard 1989 License, SPDX License List 3.23
HP_1989 :: LicenseId
-- | HPND-DEC, Historical Permission Notice and Disclaimer - DEC
-- variant, SPDX License List 3.23
HPND_DEC :: LicenseId
-- | HPND-doc-sell, Historical Permission Notice and Disclaimer -
-- documentation sell variant, SPDX License List 3.23
HPND_doc_sell :: LicenseId
-- | HPND-doc, Historical Permission Notice and Disclaimer -
-- documentation variant, SPDX License List 3.23
HPND_doc :: LicenseId
-- | HPND-export-US-modify, HPND with US Government export control
-- warning and modification rqmt, SPDX License List 3.23
HPND_export_US_modify :: LicenseId
-- | HPND-export-US, HPND with US Government export control
-- warning, SPDX License List 3.23
HPND_export_US :: LicenseId
-- | HPND-Fenneberg-Livingston, Historical Permission Notice and
-- Disclaimer - Fenneberg-Livingston variant, SPDX License List 3.23
HPND_Fenneberg_Livingston :: LicenseId
-- | HPND-INRIA-IMAG, Historical Permission Notice and Disclaimer
-- - INRIA-IMAG variant, SPDX License List 3.23
HPND_INRIA_IMAG :: LicenseId
-- | HPND-Kevlin-Henney, Historical Permission Notice and
-- Disclaimer - Kevlin Henney variant, SPDX License List 3.23
HPND_Kevlin_Henney :: LicenseId
-- | HPND-Markus-Kuhn, Historical Permission Notice and Disclaimer
-- - Markus Kuhn variant, SPDX License List 3.23
HPND_Markus_Kuhn :: LicenseId
-- | HPND-MIT-disclaimer, Historical Permission Notice and
-- Disclaimer with MIT disclaimer, SPDX License List 3.23
HPND_MIT_disclaimer :: LicenseId
-- | HPND-Pbmplus, Historical Permission Notice and Disclaimer -
-- Pbmplus variant, SPDX License List 3.23
HPND_Pbmplus :: LicenseId
-- | HPND-sell-MIT-disclaimer-xserver, Historical Permission
-- Notice and Disclaimer - sell xserver variant with MIT disclaimer, SPDX
-- License List 3.23
HPND_sell_MIT_disclaimer_xserver :: LicenseId
-- | HPND-sell-regexpr, Historical Permission Notice and
-- Disclaimer - sell regexpr variant, SPDX License List 3.23
HPND_sell_regexpr :: LicenseId
-- | HPND-sell-variant-MIT-disclaimer, HPND sell variant with MIT
-- disclaimer, SPDX License List 3.23
HPND_sell_variant_MIT_disclaimer :: LicenseId
-- | HPND-sell-variant, 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
-- | HPND-UC, Historical Permission Notice and Disclaimer -
-- University of California variant, SPDX License List 3.23
HPND_UC :: LicenseId
-- | HPND, Historical Permission Notice and Disclaimer
HPND :: LicenseId
-- | HTMLTIDY, HTML Tidy License, SPDX License List 3.16, SPDX
-- License List 3.23
HTMLTIDY :: LicenseId
-- | IBM-pibs, IBM PowerPC Initialization and Boot Software
IBM_pibs :: LicenseId
-- | ICU, ICU License
ICU :: LicenseId
-- | IEC-Code-Components-EULA, IEC Code Components End-user
-- licence agreement, SPDX License List 3.23
IEC_Code_Components_EULA :: LicenseId
-- | IJG-short, Independent JPEG Group License - short, SPDX
-- License List 3.23
IJG_short :: LicenseId
-- | IJG, Independent JPEG Group License
IJG :: LicenseId
-- | ImageMagick, ImageMagick License
ImageMagick :: LicenseId
-- | iMatix, iMatix Standard Function Library Agreement
IMatix :: LicenseId
-- | Imlib2, Imlib2 License
Imlib2 :: LicenseId
-- | Info-ZIP, Info-ZIP License
Info_ZIP :: LicenseId
-- | Inner-Net-2.0, Inner Net License v2.0, SPDX License List 3.23
Inner_Net_2_0 :: LicenseId
-- | Intel-ACPI, Intel ACPI Software License Agreement
Intel_ACPI :: LicenseId
-- | Intel, Intel Open Source License
Intel :: LicenseId
-- | Interbase-1.0, Interbase Public License v1.0
Interbase_1_0 :: LicenseId
-- | IPA, IPA Font License
IPA :: LicenseId
-- | IPL-1.0, IBM Public License v1.0
IPL_1_0 :: LicenseId
-- | ISC-Veillard, ISC Veillard variant, SPDX License List 3.23
ISC_Veillard :: LicenseId
-- | ISC, ISC License
ISC :: LicenseId
-- | Jam, Jam License, SPDX License List 3.16, SPDX License List
-- 3.23
Jam :: LicenseId
-- | JasPer-2.0, JasPer License
JasPer_2_0 :: LicenseId
-- | JPL-image, JPL Image Use Policy, SPDX License List 3.23
JPL_image :: LicenseId
-- | JPNIC, 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
-- | JSON, JSON License
JSON :: LicenseId
-- | Kastrup, Kastrup License, SPDX License List 3.23
Kastrup :: LicenseId
-- | Kazlib, Kazlib License, SPDX License List 3.23
Kazlib :: LicenseId
-- | Knuth-CTAN, Knuth CTAN License, SPDX License List 3.23
Knuth_CTAN :: LicenseId
-- | LAL-1.2, Licence Art Libre 1.2
LAL_1_2 :: LicenseId
-- | LAL-1.3, Licence Art Libre 1.3
LAL_1_3 :: LicenseId
-- | Latex2e-translated-notice, Latex2e with translated notice
-- permission, SPDX License List 3.23
Latex2e_translated_notice :: LicenseId
-- | Latex2e, Latex2e License
Latex2e :: LicenseId
-- | Leptonica, Leptonica License
Leptonica :: LicenseId
-- | LGPL-2.0-only, GNU Library General Public License v2 only
LGPL_2_0_only :: LicenseId
-- | LGPL-2.0-or-later, GNU Library General Public License v2 or
-- later
LGPL_2_0_or_later :: LicenseId
-- | LGPL-2.1-only, GNU Lesser General Public License v2.1 only
LGPL_2_1_only :: LicenseId
-- | LGPL-2.1-or-later, GNU Lesser General Public License v2.1 or
-- later
LGPL_2_1_or_later :: LicenseId
-- | LGPL-3.0-only, GNU Lesser General Public License v3.0 only
LGPL_3_0_only :: LicenseId
-- | LGPL-3.0-or-later, GNU Lesser General Public License v3.0 or
-- later
LGPL_3_0_or_later :: LicenseId
-- | LGPLLR, Lesser General Public License For Linguistic
-- Resources
LGPLLR :: LicenseId
-- | libpng-2.0, 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
-- | Libpng, libpng License
Libpng :: LicenseId
-- | libselinux-1.0, 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
-- | libtiff, libtiff License
Libtiff :: LicenseId
-- | libutil-David-Nugent, libutil David Nugent License, SPDX
-- License List 3.23
Libutil_David_Nugent :: LicenseId
-- | LiLiQ-P-1.1, Licence Libre du Québec – Permissive version 1.1
LiLiQ_P_1_1 :: LicenseId
-- | LiLiQ-R-1.1, Licence Libre du Québec – Réciprocité version
-- 1.1
LiLiQ_R_1_1 :: LicenseId
-- | LiLiQ-Rplus-1.1, Licence Libre du Québec – Réciprocité forte
-- version 1.1
LiLiQ_Rplus_1_1 :: LicenseId
-- | Linux-man-pages-1-para, Linux man-pages - 1 paragraph, SPDX
-- License List 3.23
Linux_man_pages_1_para :: LicenseId
-- | Linux-man-pages-copyleft-2-para, Linux man-pages Copyleft - 2
-- paragraphs, SPDX License List 3.23
Linux_man_pages_copyleft_2_para :: LicenseId
-- | Linux-man-pages-copyleft-var, Linux man-pages Copyleft
-- Variant, SPDX License List 3.23
Linux_man_pages_copyleft_var :: LicenseId
-- | Linux-man-pages-copyleft, Linux man-pages Copyleft, SPDX
-- License List 3.16, SPDX License List 3.23
Linux_man_pages_copyleft :: LicenseId
-- | Linux-OpenIB, 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
-- | LOOP, Common Lisp LOOP License, SPDX License List 3.23
LOOP :: LicenseId
-- | LPD-document, LPD Documentation License, SPDX License List
-- 3.23
LPD_document :: LicenseId
-- | LPL-1.02, Lucent Public License v1.02
LPL_1_02 :: LicenseId
-- | LPL-1.0, Lucent Public License Version 1.0
LPL_1_0 :: LicenseId
-- | LPPL-1.0, LaTeX Project Public License v1.0
LPPL_1_0 :: LicenseId
-- | LPPL-1.1, LaTeX Project Public License v1.1
LPPL_1_1 :: LicenseId
-- | LPPL-1.2, LaTeX Project Public License v1.2
LPPL_1_2 :: LicenseId
-- | LPPL-1.3a, LaTeX Project Public License v1.3a
LPPL_1_3a :: LicenseId
-- | LPPL-1.3c, LaTeX Project Public License v1.3c
LPPL_1_3c :: LicenseId
-- | lsof, lsof License, SPDX License List 3.23
Lsof :: LicenseId
-- | Lucida-Bitmap-Fonts, Lucida Bitmap Fonts License, SPDX
-- License List 3.23
Lucida_Bitmap_Fonts :: LicenseId
-- | LZMA-SDK-9.11-to-9.20, LZMA SDK License (versions 9.11 to
-- 9.20), SPDX License List 3.23
LZMA_SDK_9_11_to_9_20 :: LicenseId
-- | LZMA-SDK-9.22, LZMA SDK License (versions 9.22 and beyond),
-- SPDX License List 3.23
LZMA_SDK_9_22 :: LicenseId
-- | Mackerras-3-Clause-acknowledgment, Mackerras 3-Clause -
-- acknowledgment variant, SPDX License List 3.23
Mackerras_3_Clause_acknowledgment :: LicenseId
-- | Mackerras-3-Clause, Mackerras 3-Clause License, SPDX License
-- List 3.23
Mackerras_3_Clause :: LicenseId
-- | magaz, magaz License, SPDX License List 3.23
Magaz :: LicenseId
-- | mailprio, mailprio License, SPDX License List 3.23
Mailprio :: LicenseId
-- | MakeIndex, MakeIndex License
MakeIndex :: LicenseId
-- | Martin-Birgmeier, Martin Birgmeier License, SPDX License List
-- 3.23
Martin_Birgmeier :: LicenseId
-- | McPhee-slideshow, McPhee Slideshow License, SPDX License List
-- 3.23
McPhee_slideshow :: LicenseId
-- | metamail, metamail License, SPDX License List 3.23
Metamail :: LicenseId
-- | Minpack, Minpack License, SPDX License List 3.23
Minpack :: LicenseId
-- | MirOS, The MirOS Licence
MirOS :: LicenseId
-- | MIT-0, 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
-- | MIT-advertising, Enlightenment License (e16)
MIT_advertising :: LicenseId
-- | MIT-CMU, CMU License
MIT_CMU :: LicenseId
-- | MIT-enna, enna License
MIT_enna :: LicenseId
-- | MIT-feh, feh License
MIT_feh :: LicenseId
-- | MIT-Festival, MIT Festival Variant, SPDX License List 3.23
MIT_Festival :: LicenseId
-- | MIT-Modern-Variant, MIT License Modern Variant, SPDX License
-- List 3.16, SPDX License List 3.23
MIT_Modern_Variant :: LicenseId
-- | MIT-open-group, MIT Open Group variant, SPDX License List
-- 3.16, SPDX License List 3.23
MIT_open_group :: LicenseId
-- | MIT-testregex, MIT testregex Variant, SPDX License List 3.23
MIT_testregex :: LicenseId
-- | MIT-Wu, MIT Tom Wu Variant, SPDX License List 3.23
MIT_Wu :: LicenseId
-- | MITNFA, MIT +no-false-attribs license
MITNFA :: LicenseId
-- | MIT, MIT License
MIT :: LicenseId
-- | MMIXware, MMIXware License, SPDX License List 3.23
MMIXware :: LicenseId
-- | Motosoto, Motosoto License
Motosoto :: LicenseId
-- | MPEG-SSG, MPEG Software Simulation, SPDX License List 3.23
MPEG_SSG :: LicenseId
-- | mpi-permissive, mpi Permissive License, SPDX License List
-- 3.23
Mpi_permissive :: LicenseId
-- | mpich2, mpich2 License
Mpich2 :: LicenseId
-- | MPL-1.0, Mozilla Public License 1.0
MPL_1_0 :: LicenseId
-- | MPL-1.1, Mozilla Public License 1.1
MPL_1_1 :: LicenseId
-- | MPL-2.0-no-copyleft-exception, Mozilla Public License 2.0 (no
-- copyleft exception)
MPL_2_0_no_copyleft_exception :: LicenseId
-- | MPL-2.0, Mozilla Public License 2.0
MPL_2_0 :: LicenseId
-- | mplus, mplus Font License, SPDX License List 3.23
Mplus :: LicenseId
-- | MS-LPL, Microsoft Limited Public License, SPDX License List
-- 3.23
MS_LPL :: LicenseId
-- | MS-PL, Microsoft Public License
MS_PL :: LicenseId
-- | MS-RL, Microsoft Reciprocal License
MS_RL :: LicenseId
-- | MTLL, Matrix Template Library License
MTLL :: LicenseId
-- | MulanPSL-1.0, 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
-- | MulanPSL-2.0, 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
-- | Multics, Multics License
Multics :: LicenseId
-- | Mup, Mup License
Mup :: LicenseId
-- | NAIST-2003, Nara Institute of Science and Technology License
-- (2003), SPDX License List 3.16, SPDX License List 3.23
NAIST_2003 :: LicenseId
-- | NASA-1.3, NASA Open Source Agreement 1.3
NASA_1_3 :: LicenseId
-- | Naumen, Naumen Public License
Naumen :: LicenseId
-- | NBPL-1.0, Net Boolean Public License v1
NBPL_1_0 :: LicenseId
-- | NCGL-UK-2.0, 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
-- | NCSA, University of Illinois/NCSA Open Source License
NCSA :: LicenseId
-- | Net-SNMP, Net-SNMP License
Net_SNMP :: LicenseId
-- | NetCDF, NetCDF license
NetCDF :: LicenseId
-- | Newsletr, Newsletr License
Newsletr :: LicenseId
-- | NGPL, Nethack General Public License
NGPL :: LicenseId
-- | NICTA-1.0, NICTA Public Software License, Version 1.0, SPDX
-- License List 3.23
NICTA_1_0 :: LicenseId
-- | NIST-PD-fallback, 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
-- | NIST-PD, NIST Public Domain Notice, SPDX License List 3.10,
-- SPDX License List 3.16, SPDX License List 3.23
NIST_PD :: LicenseId
-- | NIST-Software, NIST Software License, SPDX License List 3.23
NIST_Software :: LicenseId
-- | NLOD-1.0, Norwegian Licence for Open Government Data (NLOD)
-- 1.0
NLOD_1_0 :: LicenseId
-- | NLOD-2.0, Norwegian Licence for Open Government Data (NLOD)
-- 2.0, SPDX License List 3.16, SPDX License List 3.23
NLOD_2_0 :: LicenseId
-- | NLPL, No Limit Public License
NLPL :: LicenseId
-- | Nokia, Nokia Open Source License
Nokia :: LicenseId
-- | NOSL, Netizen Open Source License
NOSL :: LicenseId
-- | Noweb, Noweb License
Noweb :: LicenseId
-- | NPL-1.0, Netscape Public License v1.0
NPL_1_0 :: LicenseId
-- | NPL-1.1, Netscape Public License v1.1
NPL_1_1 :: LicenseId
-- | NPOSL-3.0, Non-Profit Open Software License 3.0
NPOSL_3_0 :: LicenseId
-- | NRL, NRL License
NRL :: LicenseId
-- | NTP-0, 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
-- | NTP, NTP License
NTP :: LicenseId
-- | O-UDA-1.0, 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
-- | OCCT-PL, Open CASCADE Technology Public License
OCCT_PL :: LicenseId
-- | OCLC-2.0, OCLC Research Public License 2.0
OCLC_2_0 :: LicenseId
-- | ODbL-1.0, Open Data Commons Open Database License v1.0
ODbL_1_0 :: LicenseId
-- | ODC-By-1.0, 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
-- | OFFIS, OFFIS License, SPDX License List 3.23
OFFIS :: LicenseId
-- | OFL-1.0-no-RFN, 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
-- | OFL-1.0-RFN, 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
-- | OFL-1.0, SIL Open Font License 1.0
OFL_1_0 :: LicenseId
-- | OFL-1.1-no-RFN, 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
-- | OFL-1.1-RFN, 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
-- | OFL-1.1, SIL Open Font License 1.1
OFL_1_1 :: LicenseId
-- | OGC-1.0, 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
-- | OGDL-Taiwan-1.0, Taiwan Open Government Data License, version
-- 1.0, SPDX License List 3.16, SPDX License List 3.23
OGDL_Taiwan_1_0 :: LicenseId
-- | OGL-Canada-2.0, 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
-- | OGL-UK-1.0, 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
-- | OGL-UK-2.0, 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
-- | OGL-UK-3.0, 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
-- | OGTSL, Open Group Test Suite License
OGTSL :: LicenseId
-- | OLDAP-1.1, Open LDAP Public License v1.1
OLDAP_1_1 :: LicenseId
-- | OLDAP-1.2, Open LDAP Public License v1.2
OLDAP_1_2 :: LicenseId
-- | OLDAP-1.3, Open LDAP Public License v1.3
OLDAP_1_3 :: LicenseId
-- | OLDAP-1.4, Open LDAP Public License v1.4
OLDAP_1_4 :: LicenseId
-- | OLDAP-2.0.1, Open LDAP Public License v2.0.1
OLDAP_2_0_1 :: LicenseId
-- | OLDAP-2.0, Open LDAP Public License v2.0 (or possibly 2.0A
-- and 2.0B)
OLDAP_2_0 :: LicenseId
-- | OLDAP-2.1, Open LDAP Public License v2.1
OLDAP_2_1 :: LicenseId
-- | OLDAP-2.2.1, Open LDAP Public License v2.2.1
OLDAP_2_2_1 :: LicenseId
-- | OLDAP-2.2.2, Open LDAP Public License 2.2.2
OLDAP_2_2_2 :: LicenseId
-- | OLDAP-2.2, Open LDAP Public License v2.2
OLDAP_2_2 :: LicenseId
-- | OLDAP-2.3, Open LDAP Public License v2.3
OLDAP_2_3 :: LicenseId
-- | OLDAP-2.4, Open LDAP Public License v2.4
OLDAP_2_4 :: LicenseId
-- | OLDAP-2.5, Open LDAP Public License v2.5
OLDAP_2_5 :: LicenseId
-- | OLDAP-2.6, Open LDAP Public License v2.6
OLDAP_2_6 :: LicenseId
-- | OLDAP-2.7, Open LDAP Public License v2.7
OLDAP_2_7 :: LicenseId
-- | OLDAP-2.8, Open LDAP Public License v2.8
OLDAP_2_8 :: LicenseId
-- | OLFL-1.3, Open Logistics Foundation License Version 1.3, SPDX
-- License List 3.23
OLFL_1_3 :: LicenseId
-- | OML, Open Market License
OML :: LicenseId
-- | OpenPBS-2.3, OpenPBS v2.3 Software License, SPDX License List
-- 3.23
OpenPBS_2_3 :: LicenseId
-- | OpenSSL-standalone, OpenSSL License - standalone, SPDX
-- License List 3.23
OpenSSL_standalone :: LicenseId
-- | OpenSSL, OpenSSL License
OpenSSL :: LicenseId
-- | OpenVision, OpenVision License, SPDX License List 3.23
OpenVision :: LicenseId
-- | OPL-1.0, Open Public License v1.0
OPL_1_0 :: LicenseId
-- | OPL-UK-3.0, United Kingdom Open Parliament Licence v3.0, SPDX
-- License List 3.23
OPL_UK_3_0 :: LicenseId
-- | OPUBL-1.0, Open Publication License v1.0, SPDX License List
-- 3.16, SPDX License List 3.23
OPUBL_1_0 :: LicenseId
-- | OSET-PL-2.1, OSET Public License version 2.1
OSET_PL_2_1 :: LicenseId
-- | OSL-1.0, Open Software License 1.0
OSL_1_0 :: LicenseId
-- | OSL-1.1, Open Software License 1.1
OSL_1_1 :: LicenseId
-- | OSL-2.0, Open Software License 2.0
OSL_2_0 :: LicenseId
-- | OSL-2.1, Open Software License 2.1
OSL_2_1 :: LicenseId
-- | OSL-3.0, Open Software License 3.0
OSL_3_0 :: LicenseId
-- | PADL, PADL License, SPDX License List 3.23
PADL :: LicenseId
-- | Parity-6.0.0, 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
-- | Parity-7.0.0, 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
-- | PDDL-1.0, Open Data Commons Public Domain Dedication &
-- License 1.0
PDDL_1_0 :: LicenseId
-- | PHP-3.01, PHP License v3.01
PHP_3_01 :: LicenseId
-- | PHP-3.0, PHP License v3.0
PHP_3_0 :: LicenseId
-- | Pixar, Pixar License, SPDX License List 3.23
Pixar :: LicenseId
-- | Plexus, Plexus Classworlds License
Plexus :: LicenseId
-- | pnmstitch, pnmstitch License, SPDX License List 3.23
Pnmstitch :: LicenseId
-- | PolyForm-Noncommercial-1.0.0, 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
-- | PolyForm-Small-Business-1.0.0, 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
-- | PostgreSQL, PostgreSQL License
PostgreSQL :: LicenseId
-- | PSF-2.0, 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
-- | psfrag, psfrag License
Psfrag :: LicenseId
-- | psutils, psutils License
Psutils :: LicenseId
-- | Python-2.0.1, Python License 2.0.1, SPDX License List 3.23
Python_2_0_1 :: LicenseId
-- | Python-2.0, Python License 2.0
Python_2_0 :: LicenseId
-- | python-ldap, Python ldap License, SPDX License List 3.23
Python_ldap :: LicenseId
-- | Qhull, Qhull License
Qhull :: LicenseId
-- | QPL-1.0-INRIA-2004, Q Public License 1.0 - INRIA 2004
-- variant, SPDX License List 3.23
QPL_1_0_INRIA_2004 :: LicenseId
-- | QPL-1.0, Q Public License 1.0
QPL_1_0 :: LicenseId
-- | radvd, radvd License, SPDX License List 3.23
Radvd :: LicenseId
-- | Rdisc, Rdisc License
Rdisc :: LicenseId
-- | RHeCos-1.1, Red Hat eCos Public License v1.1
RHeCos_1_1 :: LicenseId
-- | RPL-1.1, Reciprocal Public License 1.1
RPL_1_1 :: LicenseId
-- | RPL-1.5, Reciprocal Public License 1.5
RPL_1_5 :: LicenseId
-- | RPSL-1.0, RealNetworks Public Source License v1.0
RPSL_1_0 :: LicenseId
-- | RSA-MD, RSA Message-Digest License
RSA_MD :: LicenseId
-- | RSCPL, Ricoh Source Code Public License
RSCPL :: LicenseId
-- | Ruby, Ruby License
Ruby :: LicenseId
-- | SAX-PD-2.0, Sax Public Domain Notice 2.0, SPDX License List
-- 3.23
SAX_PD_2_0 :: LicenseId
-- | SAX-PD, Sax Public Domain Notice
SAX_PD :: LicenseId
-- | Saxpath, Saxpath License
Saxpath :: LicenseId
-- | SCEA, SCEA Shared Source License
SCEA :: LicenseId
-- | SchemeReport, Scheme Language Report License, SPDX License
-- List 3.16, SPDX License List 3.23
SchemeReport :: LicenseId
-- | Sendmail-8.23, 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
-- | Sendmail, Sendmail License
Sendmail :: LicenseId
-- | SGI-B-1.0, SGI Free Software License B v1.0
SGI_B_1_0 :: LicenseId
-- | SGI-B-1.1, SGI Free Software License B v1.1
SGI_B_1_1 :: LicenseId
-- | SGI-B-2.0, SGI Free Software License B v2.0
SGI_B_2_0 :: LicenseId
-- | SGI-OpenGL, SGI OpenGL License, SPDX License List 3.23
SGI_OpenGL :: LicenseId
-- | SGP4, SGP4 Permission Notice, SPDX License List 3.23
SGP4 :: LicenseId
-- | SHL-0.51, 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
-- | SHL-0.5, 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
-- | SimPL-2.0, Simple Public License 2.0
SimPL_2_0 :: LicenseId
-- | SISSL-1.2, Sun Industry Standards Source License v1.2
SISSL_1_2 :: LicenseId
-- | SISSL, Sun Industry Standards Source License v1.1
SISSL :: LicenseId
-- | Sleepycat, Sleepycat License
Sleepycat :: LicenseId
-- | SL, SL License, SPDX License List 3.23
SL :: LicenseId
-- | SMLNJ, Standard ML of New Jersey License
SMLNJ :: LicenseId
-- | SMPPL, Secure Messaging Protocol Public License
SMPPL :: LicenseId
-- | SNIA, SNIA Public License 1.1
SNIA :: LicenseId
-- | snprintf, snprintf License, SPDX License List 3.23
Snprintf :: LicenseId
-- | softSurfer, softSurfer License, SPDX License List 3.23
SoftSurfer :: LicenseId
-- | Soundex, Soundex License, SPDX License List 3.23
Soundex :: LicenseId
-- | Spencer-86, Spencer License 86
Spencer_86 :: LicenseId
-- | Spencer-94, Spencer License 94
Spencer_94 :: LicenseId
-- | Spencer-99, Spencer License 99
Spencer_99 :: LicenseId
-- | SPL-1.0, Sun Public License v1.0
SPL_1_0 :: LicenseId
-- | ssh-keyscan, ssh-keyscan License, SPDX License List 3.23
Ssh_keyscan :: LicenseId
-- | SSH-OpenSSH, 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
-- | SSH-short, 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
-- | SSLeay-standalone, SSLeay License - standalone, SPDX License
-- List 3.23
SSLeay_standalone :: LicenseId
-- | SSPL-1.0, 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
-- | SugarCRM-1.1.3, SugarCRM Public License v1.1.3
SugarCRM_1_1_3 :: LicenseId
-- | Sun-PPP, Sun PPP License, SPDX License List 3.23
Sun_PPP :: LicenseId
-- | SunPro, SunPro License, SPDX License List 3.23
SunPro :: LicenseId
-- | SWL, Scheme Widget Library (SWL) Software License Agreement
SWL :: LicenseId
-- | swrule, swrule License, SPDX License List 3.23
Swrule :: LicenseId
-- | Symlinks, Symlinks License, SPDX License List 3.23
Symlinks :: LicenseId
-- | TAPR-OHL-1.0, 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
-- | TCL, TCL/TK License
TCL :: LicenseId
-- | TCP-wrappers, TCP Wrappers License
TCP_wrappers :: LicenseId
-- | TermReadKey, TermReadKey License, SPDX License List 3.23
TermReadKey :: LicenseId
-- | TGPPL-1.0, Transitive Grace Period Public Licence 1.0, SPDX
-- License List 3.23
TGPPL_1_0 :: LicenseId
-- | TMate, TMate Open Source License
TMate :: LicenseId
-- | TORQUE-1.1, TORQUE v2.5+ Software License v1.1
TORQUE_1_1 :: LicenseId
-- | TOSL, Trusster Open Source License
TOSL :: LicenseId
-- | TPDL, Time::ParseDate License, SPDX License List 3.23
TPDL :: LicenseId
-- | TPL-1.0, THOR Public License 1.0, SPDX License List 3.23
TPL_1_0 :: LicenseId
-- | TTWL, Text-Tabs+Wrap License, SPDX License List 3.23
TTWL :: LicenseId
-- | TTYP0, TTYP0 License, SPDX License List 3.23
TTYP0 :: LicenseId
-- | TU-Berlin-1.0, 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
-- | TU-Berlin-2.0, 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
-- | UCAR, UCAR License, SPDX License List 3.23
UCAR :: LicenseId
-- | UCL-1.0, 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
-- | ulem, ulem License, SPDX License List 3.23
Ulem :: LicenseId
-- | UMich-Merit, Michigan/Merit Networks License, SPDX License
-- List 3.23
UMich_Merit :: LicenseId
-- | Unicode-3.0, Unicode License v3, SPDX License List 3.23
Unicode_3_0 :: LicenseId
-- | Unicode-DFS-2015, Unicode License Agreement - Data Files and
-- Software (2015)
Unicode_DFS_2015 :: LicenseId
-- | Unicode-DFS-2016, Unicode License Agreement - Data Files and
-- Software (2016)
Unicode_DFS_2016 :: LicenseId
-- | Unicode-TOU, Unicode Terms of Use
Unicode_TOU :: LicenseId
-- | UnixCrypt, UnixCrypt License, SPDX License List 3.23
UnixCrypt :: LicenseId
-- | Unlicense, The Unlicense
Unlicense :: LicenseId
-- | UPL-1.0, Universal Permissive License v1.0
UPL_1_0 :: LicenseId
-- | URT-RLE, Utah Raster Toolkit Run Length Encoded License, SPDX
-- License List 3.23
URT_RLE :: LicenseId
-- | Vim, Vim License
Vim :: LicenseId
-- | VOSTROM, VOSTROM Public License for Open Source
VOSTROM :: LicenseId
-- | VSL-1.0, Vovida Software License v1.0
VSL_1_0 :: LicenseId
-- | W3C-19980720, W3C Software Notice and License (1998-07-20)
W3C_19980720 :: LicenseId
-- | W3C-20150513, W3C Software Notice and Document License
-- (2015-05-13)
W3C_20150513 :: LicenseId
-- | W3C, W3C Software Notice and License (2002-12-31)
W3C :: LicenseId
-- | w3m, w3m License, SPDX License List 3.23
W3m :: LicenseId
-- | Watcom-1.0, Sybase Open Watcom Public License 1.0
Watcom_1_0 :: LicenseId
-- | Widget-Workshop, Widget Workshop License, SPDX License List
-- 3.23
Widget_Workshop :: LicenseId
-- | Wsuipa, Wsuipa License
Wsuipa :: LicenseId
-- | WTFPL, Do What The F*ck You Want To Public License
WTFPL :: LicenseId
-- | X11-distribute-modifications-variant, X11 License
-- Distribution Modification Variant, SPDX License List 3.16, SPDX
-- License List 3.23
X11_distribute_modifications_variant :: LicenseId
-- | X11, X11 License
X11 :: LicenseId
-- | Xdebug-1.03, Xdebug License v 1.03, SPDX License List 3.23
Xdebug_1_03 :: LicenseId
-- | Xerox, Xerox License
Xerox :: LicenseId
-- | Xfig, Xfig License, SPDX License List 3.23
Xfig :: LicenseId
-- | XFree86-1.1, XFree86 License 1.1
XFree86_1_1 :: LicenseId
-- | xinetd, xinetd License
Xinetd :: LicenseId
-- | xkeyboard-config-Zinoviev, xkeyboard-config Zinoviev License,
-- SPDX License List 3.23
Xkeyboard_config_Zinoviev :: LicenseId
-- | xlock, xlock License, SPDX License List 3.23
Xlock :: LicenseId
-- | Xnet, X.Net License
Xnet :: LicenseId
-- | xpp, XPP License
Xpp :: LicenseId
-- | XSkat, XSkat License
XSkat :: LicenseId
-- | YPL-1.0, Yahoo! Public License v1.0
YPL_1_0 :: LicenseId
-- | YPL-1.1, Yahoo! Public License v1.1
YPL_1_1 :: LicenseId
-- | Zed, Zed License
Zed :: LicenseId
-- | Zeeff, Zeeff License, SPDX License List 3.23
Zeeff :: LicenseId
-- | Zend-2.0, Zend License v2.0
Zend_2_0 :: LicenseId
-- | Zimbra-1.3, Zimbra Public License v1.3
Zimbra_1_3 :: LicenseId
-- | Zimbra-1.4, Zimbra Public License v1.4
Zimbra_1_4 :: LicenseId
-- | zlib-acknowledgement, zlib/libpng License with
-- Acknowledgement
Zlib_acknowledgement :: LicenseId
-- | Zlib, zlib License
Zlib :: LicenseId
-- | ZPL-1.1, Zope Public License 1.1
ZPL_1_1 :: LicenseId
-- | ZPL-2.0, Zope Public License 2.0
ZPL_2_0 :: LicenseId
-- | ZPL-2.1, Zope Public License 2.1
ZPL_2_1 :: LicenseId
-- | License SPDX identifier, e.g. "BSD-3-Clause".
licenseId :: LicenseId -> String
-- | License name, e.g. "GNU General Public License v2.0 only"
licenseName :: LicenseId -> String
-- | Whether the license is approved by Open Source Initiative (OSI).
--
-- See https://opensource.org/licenses/alphabetical.
licenseIsOsiApproved :: LicenseId -> Bool
-- | Create a LicenseId from a String.
mkLicenseId :: LicenseListVersion -> String -> Maybe LicenseId
licenseIdList :: LicenseListVersion -> [LicenseId]
-- | SPDX License Exceptions identifiers list v3.23
data LicenseExceptionId
-- | 389-exception, 389 Directory Server Exception
DS389_exception :: LicenseExceptionId
-- | Asterisk-exception, Asterisk exception, SPDX License List
-- 3.23
Asterisk_exception :: LicenseExceptionId
-- | Autoconf-exception-2.0, Autoconf exception 2.0
Autoconf_exception_2_0 :: LicenseExceptionId
-- | Autoconf-exception-3.0, Autoconf exception 3.0
Autoconf_exception_3_0 :: LicenseExceptionId
-- | Autoconf-exception-generic-3.0, Autoconf generic exception
-- for GPL-3.0, SPDX License List 3.23
Autoconf_exception_generic_3_0 :: LicenseExceptionId
-- | Autoconf-exception-generic, Autoconf generic exception, SPDX
-- License List 3.23
Autoconf_exception_generic :: LicenseExceptionId
-- | Autoconf-exception-macro, Autoconf macro exception, SPDX
-- License List 3.23
Autoconf_exception_macro :: LicenseExceptionId
-- | Bison-exception-1.24, Bison exception 1.24, SPDX License List
-- 3.23
Bison_exception_1_24 :: LicenseExceptionId
-- | Bison-exception-2.2, Bison exception 2.2
Bison_exception_2_2 :: LicenseExceptionId
-- | Bootloader-exception, Bootloader Distribution Exception
Bootloader_exception :: LicenseExceptionId
-- | Classpath-exception-2.0, Classpath exception 2.0
Classpath_exception_2_0 :: LicenseExceptionId
-- | CLISP-exception-2.0, CLISP exception 2.0
CLISP_exception_2_0 :: LicenseExceptionId
-- | cryptsetup-OpenSSL-exception, cryptsetup OpenSSL exception,
-- SPDX License List 3.23
Cryptsetup_OpenSSL_exception :: LicenseExceptionId
-- | DigiRule-FOSS-exception, DigiRule FOSS License Exception
DigiRule_FOSS_exception :: LicenseExceptionId
-- | eCos-exception-2.0, eCos exception 2.0
ECos_exception_2_0 :: LicenseExceptionId
-- | Fawkes-Runtime-exception, Fawkes Runtime Exception
Fawkes_Runtime_exception :: LicenseExceptionId
-- | FLTK-exception, FLTK exception
FLTK_exception :: LicenseExceptionId
-- | fmt-exception, fmt exception, SPDX License List 3.23
Fmt_exception :: LicenseExceptionId
-- | Font-exception-2.0, Font exception 2.0
Font_exception_2_0 :: LicenseExceptionId
-- | freertos-exception-2.0, FreeRTOS Exception 2.0
Freertos_exception_2_0 :: LicenseExceptionId
-- | GCC-exception-2.0-note, GCC Runtime Library exception 2.0 -
-- note variant, SPDX License List 3.23
GCC_exception_2_0_note :: LicenseExceptionId
-- | GCC-exception-2.0, GCC Runtime Library exception 2.0
GCC_exception_2_0 :: LicenseExceptionId
-- | GCC-exception-3.1, GCC Runtime Library exception 3.1
GCC_exception_3_1 :: LicenseExceptionId
-- | Gmsh-exception, Gmsh exception>, SPDX License List 3.23
Gmsh_exception :: LicenseExceptionId
-- | GNAT-exception, GNAT exception, SPDX License List 3.23
GNAT_exception :: LicenseExceptionId
-- | GNOME-examples-exception, GNOME examples exception, SPDX
-- License List 3.23
GNOME_examples_exception :: LicenseExceptionId
-- | GNU-compiler-exception, GNU Compiler Exception, SPDX License
-- List 3.23
GNU_compiler_exception :: LicenseExceptionId
-- | gnu-javamail-exception, GNU JavaMail exception
Gnu_javamail_exception :: LicenseExceptionId
-- | GPL-3.0-interface-exception, GPL-3.0 Interface Exception,
-- SPDX License List 3.23
GPL_3_0_interface_exception :: LicenseExceptionId
-- | GPL-3.0-linking-exception, 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
-- | GPL-3.0-linking-source-exception, 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
-- | GPL-CC-1.0, 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
-- | GStreamer-exception-2005, GStreamer Exception (2005), SPDX
-- License List 3.23
GStreamer_exception_2005 :: LicenseExceptionId
-- | GStreamer-exception-2008, GStreamer Exception (2008), SPDX
-- License List 3.23
GStreamer_exception_2008 :: LicenseExceptionId
-- | i2p-gpl-java-exception, i2p GPL+Java Exception
I2p_gpl_java_exception :: LicenseExceptionId
-- | KiCad-libraries-exception, KiCad Libraries Exception, SPDX
-- License List 3.23
KiCad_libraries_exception :: LicenseExceptionId
-- | LGPL-3.0-linking-exception, 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
-- | libpri-OpenH323-exception, libpri OpenH323 exception, SPDX
-- License List 3.23
Libpri_OpenH323_exception :: LicenseExceptionId
-- | Libtool-exception, Libtool Exception
Libtool_exception :: LicenseExceptionId
-- | Linux-syscall-note, Linux Syscall Note
Linux_syscall_note :: LicenseExceptionId
-- | LLGPL, LLGPL Preamble, SPDX License List 3.23
LLGPL :: LicenseExceptionId
-- | LLVM-exception, 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
-- | LZMA-exception, LZMA exception
LZMA_exception :: LicenseExceptionId
-- | mif-exception, Macros and Inline Functions Exception
Mif_exception :: LicenseExceptionId
-- | Nokia-Qt-exception-1.1, Nokia Qt LGPL exception 1.1, SPDX
-- License List 3.0, SPDX License List 3.2
Nokia_Qt_exception_1_1 :: LicenseExceptionId
-- | OCaml-LGPL-linking-exception, 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
-- | OCCT-exception-1.0, Open CASCADE Exception 1.0
OCCT_exception_1_0 :: LicenseExceptionId
-- | OpenJDK-assembly-exception-1.0, 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
-- | openvpn-openssl-exception, OpenVPN OpenSSL Exception
Openvpn_openssl_exception :: LicenseExceptionId
-- | PS-or-PDF-font-exception-20170817, 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
-- | QPL-1.0-INRIA-2004-exception, INRIA QPL 1.0 2004 variant
-- exception, SPDX License List 3.23
QPL_1_0_INRIA_2004_exception :: LicenseExceptionId
-- | Qt-GPL-exception-1.0, 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
-- | Qt-LGPL-exception-1.1, 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
-- | Qwt-exception-1.0, Qwt exception 1.0
Qwt_exception_1_0 :: LicenseExceptionId
-- | SANE-exception, SANE Exception, SPDX License List 3.23
SANE_exception :: LicenseExceptionId
-- | SHL-2.0, 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
-- | SHL-2.1, 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
-- | stunnel-exception, stunnel Exception, SPDX License List 3.23
Stunnel_exception :: LicenseExceptionId
-- | SWI-exception, SWI exception, SPDX License List 3.23
SWI_exception :: LicenseExceptionId
-- | Swift-exception, 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
-- | Texinfo-exception, Texinfo exception, SPDX License List 3.23
Texinfo_exception :: LicenseExceptionId
-- | u-boot-exception-2.0, U-Boot exception 2.0
U_boot_exception_2_0 :: LicenseExceptionId
-- | UBDL-exception, Unmodified Binary Distribution exception,
-- SPDX License List 3.23
UBDL_exception :: LicenseExceptionId
-- | Universal-FOSS-exception-1.0, 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
-- | vsftpd-openssl-exception, vsftpd OpenSSL exception, SPDX
-- License List 3.23
Vsftpd_openssl_exception :: LicenseExceptionId
-- | WxWindows-exception-3.1, WxWindows Library Exception 3.1
WxWindows_exception_3_1 :: LicenseExceptionId
-- | x11vnc-openssl-exception, x11vnc OpenSSL Exception, SPDX
-- License List 3.23
X11vnc_openssl_exception :: LicenseExceptionId
-- | License SPDX identifier, e.g. "BSD-3-Clause".
licenseExceptionId :: LicenseExceptionId -> String
-- | License name, e.g. "GNU General Public License v2.0 only"
licenseExceptionName :: LicenseExceptionId -> String
-- | Create a LicenseExceptionId from a String.
mkLicenseExceptionId :: LicenseListVersion -> String -> Maybe LicenseExceptionId
licenseExceptionIdList :: LicenseListVersion -> [LicenseExceptionId]
-- | A user defined license reference denoted by
-- LicenseRef-[idstring] (for a license not on the SPDX License
-- List);
data LicenseRef
-- | License reference.
licenseRef :: LicenseRef -> String
-- | Document reference.
licenseDocumentRef :: LicenseRef -> Maybe String
-- | Create LicenseRef from optional document ref and name.
mkLicenseRef :: Maybe String -> String -> Maybe LicenseRef
-- | Like mkLicenseRef but convert invalid characters into
-- -.
mkLicenseRef' :: Maybe String -> String -> LicenseRef
-- | SPDX License List version Cabal 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 ModuleName from valid module components, i.e. parts
-- separated by dots.
-- | Deprecated: Exists for cabal-install only
fromComponents :: [String] -> ModuleName
-- | The individual components of a hierarchical module name. For example
--
-- -- components (fromString "A.B.C") = ["A", "B", "C"] --components :: ModuleName -> [String] -- | Convert a module name to a file path, but without any file extension. -- For example: -- --
-- toFilePath (fromString "A.B.C") = "A/B/C" --toFilePath :: ModuleName -> FilePath -- | The module name Main. main :: ModuleName validModuleComponent :: String -> Bool instance Data.Data.Data Distribution.ModuleName.ModuleName instance GHC.Show.Show Distribution.ModuleName.ModuleName instance GHC.Read.Read Distribution.ModuleName.ModuleName instance GHC.Classes.Ord Distribution.ModuleName.ModuleName instance GHC.Generics.Generic Distribution.ModuleName.ModuleName instance GHC.Classes.Eq Distribution.ModuleName.ModuleName instance Data.Binary.Class.Binary Distribution.ModuleName.ModuleName instance Distribution.Utils.Structured.Structured Distribution.ModuleName.ModuleName instance Control.DeepSeq.NFData Distribution.ModuleName.ModuleName instance Distribution.Pretty.Pretty Distribution.ModuleName.ModuleName instance Distribution.Parsec.Parsec Distribution.ModuleName.ModuleName instance Data.String.IsString 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, ModuleRenaming False [] is "don't expose any -- modules, and ModuleRenaming True [(Data.Bool, -- Bool)] is, "expose all modules, but also expose -- Data.Bool as Bool". If a renaming is omitted you get -- the DefaultRenaming. -- -- (NB: This is a list not a map so that we can preserve order.) data ModuleRenaming -- | A module renaming/thinning; e.g., (A as B, C as C) brings -- B and C into scope. ModuleRenaming :: [(ModuleName, ModuleName)] -> ModuleRenaming -- | The default renaming, bringing all exported modules into scope. DefaultRenaming :: ModuleRenaming -- | Hiding renaming, e.g., hiding (A, B), bringing all exported -- modules into scope except the hidden ones. HidingRenaming :: [ModuleName] -> ModuleRenaming -- | Interpret a ModuleRenaming as a partial map from -- ModuleName to ModuleName. For efficiency, you should -- partially apply it with ModuleRenaming and then reuse it. interpModuleRenaming :: ModuleRenaming -> ModuleName -> Maybe ModuleName -- | The default renaming, if something is specified in -- build-depends only. defaultRenaming :: ModuleRenaming -- | Tests if its the default renaming; we can use a more compact syntax in -- IncludeRenaming in this case. isDefaultRenaming :: ModuleRenaming -> Bool instance GHC.Generics.Generic Distribution.Types.ModuleRenaming.ModuleRenaming instance Data.Data.Data Distribution.Types.ModuleRenaming.ModuleRenaming instance GHC.Classes.Ord Distribution.Types.ModuleRenaming.ModuleRenaming instance GHC.Classes.Eq Distribution.Types.ModuleRenaming.ModuleRenaming instance GHC.Read.Read Distribution.Types.ModuleRenaming.ModuleRenaming instance GHC.Show.Show Distribution.Types.ModuleRenaming.ModuleRenaming instance Data.Binary.Class.Binary Distribution.Types.ModuleRenaming.ModuleRenaming instance Distribution.Utils.Structured.Structured Distribution.Types.ModuleRenaming.ModuleRenaming instance Control.DeepSeq.NFData Distribution.Types.ModuleRenaming.ModuleRenaming instance Distribution.Pretty.Pretty Distribution.Types.ModuleRenaming.ModuleRenaming instance Distribution.Parsec.Parsec 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 defaultIncludeRenaming applied when you only -- build-depends on a package. defaultIncludeRenaming :: IncludeRenaming -- | Is an IncludeRenaming the default one? isDefaultIncludeRenaming :: IncludeRenaming -> Bool instance GHC.Generics.Generic Distribution.Types.IncludeRenaming.IncludeRenaming instance Data.Data.Data Distribution.Types.IncludeRenaming.IncludeRenaming instance GHC.Classes.Ord Distribution.Types.IncludeRenaming.IncludeRenaming instance GHC.Classes.Eq Distribution.Types.IncludeRenaming.IncludeRenaming instance GHC.Read.Read Distribution.Types.IncludeRenaming.IncludeRenaming instance GHC.Show.Show Distribution.Types.IncludeRenaming.IncludeRenaming instance Data.Binary.Class.Binary Distribution.Types.IncludeRenaming.IncludeRenaming instance Distribution.Utils.Structured.Structured Distribution.Types.IncludeRenaming.IncludeRenaming instance Control.DeepSeq.NFData Distribution.Types.IncludeRenaming.IncludeRenaming instance Distribution.Pretty.Pretty Distribution.Types.IncludeRenaming.IncludeRenaming instance Distribution.Parsec.Parsec Distribution.Types.IncludeRenaming.IncludeRenaming module Distribution.Types.Mixin -- | Invariant: if mixinLibraryName is LSubLibName, -- it's not the same as mixinPackageName. In other words, the same -- invariant as Dependency has. data Mixin Mixin :: PackageName -> LibraryName -> IncludeRenaming -> Mixin [mixinPackageName] :: Mixin -> PackageName [mixinLibraryName] :: Mixin -> LibraryName [mixinIncludeRenaming] :: Mixin -> IncludeRenaming -- | Smart constructor of Mixin, enforces invariant. mkMixin :: PackageName -> LibraryName -> IncludeRenaming -> Mixin -- | Restore invariant normaliseMixin :: Mixin -> Mixin instance GHC.Generics.Generic Distribution.Types.Mixin.Mixin instance Data.Data.Data Distribution.Types.Mixin.Mixin instance GHC.Classes.Ord Distribution.Types.Mixin.Mixin instance GHC.Classes.Eq Distribution.Types.Mixin.Mixin instance GHC.Read.Read Distribution.Types.Mixin.Mixin instance GHC.Show.Show Distribution.Types.Mixin.Mixin instance Data.Binary.Class.Binary Distribution.Types.Mixin.Mixin instance Distribution.Utils.Structured.Structured Distribution.Types.Mixin.Mixin instance Control.DeepSeq.NFData Distribution.Types.Mixin.Mixin instance Distribution.Pretty.Pretty Distribution.Types.Mixin.Mixin instance Distribution.Parsec.Parsec 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.Data.Data Distribution.Types.ModuleReexport.ModuleReexport instance GHC.Show.Show Distribution.Types.ModuleReexport.ModuleReexport instance GHC.Read.Read Distribution.Types.ModuleReexport.ModuleReexport instance GHC.Generics.Generic Distribution.Types.ModuleReexport.ModuleReexport instance GHC.Classes.Ord Distribution.Types.ModuleReexport.ModuleReexport instance GHC.Classes.Eq Distribution.Types.ModuleReexport.ModuleReexport instance Data.Binary.Class.Binary Distribution.Types.ModuleReexport.ModuleReexport instance Distribution.Utils.Structured.Structured Distribution.Types.ModuleReexport.ModuleReexport instance Control.DeepSeq.NFData Distribution.Types.ModuleReexport.ModuleReexport instance Distribution.Pretty.Pretty Distribution.Types.ModuleReexport.ModuleReexport instance Distribution.Parsec.Parsec Distribution.Types.ModuleReexport.ModuleReexport -- | A data type representing directed graphs, backed by Data.Graph. -- It is strict in the node type. -- -- This is an alternative interface to Data.Graph. In this -- interface, nodes (identified by the IsNode type class) are -- associated with a key and record the keys of their neighbors. This -- interface is more convenient than Graph, 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 Data.Map. However, to perform a graph -- operation, we first must build the Data.Graph representation, -- an operation that takes O(V + E log V). 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 broken (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 a. The nodes are expected to have instance -- of class IsNode. data Graph a -- | The IsNode class is used for datatypes which represent directed -- graph nodes. A node of type a is associated with some unique -- key of type Key a; given a node we can determine its -- key (nodeKey) and the keys of its neighbors -- (nodeNeighbors). class Ord (Key a) => IsNode a where { type Key a; } nodeKey :: IsNode a => a -> Key a nodeNeighbors :: IsNode a => a -> [Key a] -- | O(1). Is the graph empty? null :: Graph a -> Bool -- | O(1). The number of nodes in the graph. size :: Graph a -> Int -- | O(log V). Check if the key is in the graph. member :: IsNode a => Key a -> Graph a -> Bool -- | O(log V). Lookup the node at a key in the graph. lookup :: IsNode a => Key a -> Graph a -> Maybe a -- | O(1). The empty graph. empty :: IsNode a => Graph a -- | O(log V). Insert a node into a graph. insert :: IsNode a => a -> Graph a -> Graph a -- | O(log V). Delete the node at a key from the graph. deleteKey :: IsNode a => Key a -> Graph a -> Graph a -- | O(log V). Lookup and delete. This function returns the deleted -- value if it existed. deleteLookup :: IsNode a => Key a -> Graph a -> (Maybe a, Graph a) -- | O(V + V'). Left-biased union, preferring entries from the first -- map when conflicts occur. unionLeft :: IsNode a => Graph a -> Graph a -> Graph a -- | O(V + V'). Right-biased union, preferring entries from the -- second map when conflicts occur. nodeKey x = nodeKey -- (f x). unionRight :: IsNode a => Graph a -> Graph a -> Graph a -- | Ω(V + E). 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. CyclicSCC :: [vertex] -> SCC vertex -- | Ω(V + E). Compute the cycles of a graph. Requires amortized -- construction of graph. cycles :: Graph a -> [[a]] -- | O(1). 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 -- Nothing 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 -- Nothing 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] -- | O(1). Convert a graph into a map from keys to nodes. The -- resulting map m is guaranteed to have the property that -- all ((k,n) -> k == nodeKey n) (toList -- m). toMap :: Graph a -> Map (Key a) a -- | O(V log V). Convert a list of nodes (with distinct keys) into a -- graph. fromDistinctList :: (IsNode a, Show (Key a)) => [a] -> Graph a -- | O(V). Convert a graph into a list of nodes. toList :: Graph a -> [a] -- | O(V). Convert a graph into a list of keys. keys :: Graph a -> [Key a] -- | O(V). Convert a graph into a set of keys. keysSet :: Graph a -> Set (Key a) -- | O(1). Convert a graph into a Graph. Requires amortized -- construction of graph. toGraph :: Graph a -> (Graph, Vertex -> a, Key a -> Maybe Vertex) -- | A simple, trivial data type which admits an IsNode instance. data Node k a N :: a -> k -> [k] -> Node k a -- | Get the value from a Node. nodeValue :: Node k a -> a instance (GHC.Classes.Eq a, GHC.Classes.Eq k) => GHC.Classes.Eq (Distribution.Compat.Graph.Node k a) instance (GHC.Show.Show a, GHC.Show.Show k) => GHC.Show.Show (Distribution.Compat.Graph.Node k a) instance GHC.Base.Functor (Distribution.Compat.Graph.Node k) instance GHC.Classes.Ord k => Distribution.Compat.Graph.IsNode (Distribution.Compat.Graph.Node k a) instance GHC.Show.Show a => GHC.Show.Show (Distribution.Compat.Graph.Graph a) instance (Distribution.Compat.Graph.IsNode a, GHC.Read.Read a, GHC.Show.Show (Distribution.Compat.Graph.Key a)) => GHC.Read.Read (Distribution.Compat.Graph.Graph a) instance (Distribution.Compat.Graph.IsNode a, Data.Binary.Class.Binary a, GHC.Show.Show (Distribution.Compat.Graph.Key a)) => Data.Binary.Class.Binary (Distribution.Compat.Graph.Graph a) instance Distribution.Utils.Structured.Structured a => Distribution.Utils.Structured.Structured (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 Data.Foldable.Foldable Distribution.Compat.Graph.Graph 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, Distribution.Compat.Graph.IsNode b, Distribution.Compat.Graph.Key a GHC.Types.~ Distribution.Compat.Graph.Key b) => Distribution.Compat.Graph.IsNode (Data.Either.Either a b) -- | Exports the Version type along with a parser and pretty -- printer. A version is something like "1.3.3". It also defines -- the VersionRange data types. Version ranges are like ">= -- 1.2 && < 2". module Distribution.Version -- | A Version represents the version of a software entity. -- -- Instances of Eq and Ord are provided, which gives exact -- equality and lexicographic ordering of the version number components -- (i.e. 2.1 > 2.0, 1.2.3 > 1.2.2, etc.). -- -- This type is opaque and distinct from the Version type in -- Data.Version since Cabal-2.0. The difference extends -- to the Binary instance using a different (and more compact) -- encoding. data Version -- | Version 0. A lower bound of Version. version0 :: Version -- | Construct Version from list of version number components. -- -- For instance, mkVersion [3,2,1] constructs a Version -- representing the version 3.2.1. -- -- All version components must be non-negative. mkVersion [] -- currently represents the special null version; see also -- nullVersion. mkVersion :: [Int] -> Version -- | Variant of mkVersion which converts a Data.Version -- Version into Cabal's Version type. mkVersion' :: Version -> Version -- | Unpack Version into list of version number components. -- -- This is the inverse to mkVersion, so the following holds: -- --
-- (versionNumbers . mkVersion) vs == vs --versionNumbers :: Version -> [Int] -- | Constant representing the special null Version -- -- The nullVersion compares (via Ord) as less than every -- proper Version value. nullVersion :: Version -- | Apply function to list of version number components -- --
-- alterVersion f == mkVersion . f . versionNumbers --alterVersion :: ([Int] -> [Int]) -> Version -> Version data VersionRange -- | The version range -any. That is, a version range containing -- all versions. -- --
-- withinRange v anyVersion = True --anyVersion :: VersionRange -- | The empty version range -none, that is a version range -- containing no versions. -- -- This can be constructed using any unsatisfiable version range -- expression, for example < 0. -- --
-- withinRange v noVersion = False --noVersion :: VersionRange -- | The version range == v. -- --
-- withinRange v' (thisVersion v) = v' == v --thisVersion :: Version -> VersionRange -- | The version range /= v. -- --
-- withinRange v' (notThisVersion v) = v' /= v --notThisVersion :: Version -> VersionRange -- | The version range > v. -- --
-- withinRange v' (laterVersion v) = v' > v --laterVersion :: Version -> VersionRange -- | The version range < v. -- --
-- withinRange v' (earlierVersion v) = v' < v --earlierVersion :: Version -> VersionRange -- | The version range >= v. -- --
-- withinRange v' (orLaterVersion v) = v' >= v --orLaterVersion :: Version -> VersionRange -- | The version range <= v. -- --
-- withinRange v' (orEarlierVersion v) = v' <= v --orEarlierVersion :: Version -> VersionRange -- | The version range vr1 || vr2. -- --
-- withinRange v' (unionVersionRanges vr1 vr2) -- = withinRange v' vr1 || withinRange v' vr2 --unionVersionRanges :: VersionRange -> VersionRange -> VersionRange -- | The version range vr1 && vr2. -- --
-- withinRange v' (intersectVersionRanges vr1 vr2) -- = withinRange v' vr1 && withinRange v' vr2 --intersectVersionRanges :: VersionRange -> VersionRange -> VersionRange -- | The version range == v.*. -- -- For example, for version 1.2, the version range == -- 1.2.* is the same as >= 1.2 && < 1.3. -- --
-- withinRange v' (withinVersion v) = v' >= v && v' < upper v -- where -- upper (Version lower t) = Version (init lower ++ [last lower + 1]) t --withinVersion :: Version -> VersionRange -- | The version range ^>= v. -- -- For example, for version 1.2.3.4, the version range -- ^>= 1.2.3.4 is the same as >= 1.2.3.4 && -- < 1.3. -- -- Note that ^>= 1 is equivalent to >= 1 && -- < 1.1. majorBoundVersion :: Version -> VersionRange -- | Does this version fall within the given range? -- -- This is the evaluation function for the VersionRange type. withinRange :: Version -> VersionRange -> Bool -- | Does this VersionRange place any restriction on the -- Version or is it in fact equivalent to AnyVersion. -- -- Note this is a semantic check, not simply a syntactic check. So for -- example the following is True (for all v). -- --
-- isAnyVersion (EarlierVersion v `UnionVersionRanges` orLaterVersion v) --isAnyVersion :: VersionRange -> Bool -- | This is the converse of isAnyVersion. It check if the version -- range is empty, if there is no possible version that satisfies the -- version range. -- -- For example this is True (for all v): -- --
-- isNoVersion (EarlierVersion v `IntersectVersionRanges` LaterVersion v) --isNoVersion :: VersionRange -> Bool -- | Is this version range in fact just a specific version? -- -- For example the version range ">= 3 && <= 3" -- contains only the version 3. isSpecificVersion :: VersionRange -> Maybe Version -- | Simplify a VersionRange 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 fromVersionIntervals . -- toVersionIntervals -- -- It satisfies the following properties: -- --
-- withinRange v (simplifyVersionRange r) = withinRange v r ---- --
-- withinRange v r = withinRange v r' -- ==> simplifyVersionRange r = simplifyVersionRange r' -- || isNoVersion r -- || isNoVersion r' --simplifyVersionRange :: VersionRange -> VersionRange -- | Fold over the basic syntactic structure of a VersionRange. -- -- This provides a syntactic view of the expression defining the version -- range. The syntactic sugar ">= v", "<= v" and -- "== v.*" is presented in terms of the other basic syntax. -- -- For a semantic view use asVersionIntervals. foldVersionRange :: a -> (Version -> a) -> (Version -> a) -> (Version -> a) -> (a -> a -> a) -> (a -> a -> a) -> VersionRange -> a -- | Normalise VersionRange. -- -- In particular collapse (== v || > v) into >= -- v, and so on. normaliseVersionRange :: VersionRange -> VersionRange -- | Remove VersionRangeParens constructors. -- -- Since version 3.4 this function is id, there aren't -- VersionRangeParens constructor in VersionRange -- 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 >=0 lower bound. hasLowerBound :: VersionRange -> Bool -- | F-Algebra of VersionRange. See cataVersionRange. data VersionRangeF a -- | == version. ThisVersionF :: Version -> VersionRangeF a -- | > version. NB: not >= LaterVersionF :: Version -> VersionRangeF a -- | >= version. OrLaterVersionF :: Version -> VersionRangeF a -- | < version. EarlierVersionF :: Version -> VersionRangeF a -- | <= version. OrEarlierVersionF :: Version -> VersionRangeF a -- | ^>= version, same as >= version && < -- MAJ(version)+1. MajorBoundVersionF :: Version -> VersionRangeF a -- | ||. UnionVersionRangesF :: a -> a -> VersionRangeF a -- | &&. IntersectVersionRangesF :: a -> a -> VersionRangeF a -- | Fold VersionRange. cataVersionRange :: (VersionRangeF a -> a) -> VersionRange -> a -- | Unfold VersionRange. anaVersionRange :: (a -> VersionRangeF a) -> a -> VersionRange -- | Refold VersionRange. hyloVersionRange :: (VersionRangeF VersionRange -> VersionRange) -> (VersionRange -> VersionRangeF VersionRange) -> VersionRange -> VersionRange -- | Generic destructor for VersionRange. projectVersionRange :: VersionRange -> VersionRangeF VersionRange -- | Generic constructor for VersionRange. embedVersionRange :: VersionRangeF VersionRange -> VersionRange -- | Increment the last version number. -- -- Example: For 1.2 this returns 1.3 so that it can be -- used as upper bound when resolving == 1.2.*. For -- 0.4.1 it returns 0.4.2. wildcardUpperBound :: Version -> Version -- | Compute next greater major version to be used as upper bound. -- -- Example: 0.4.1 produces the version 0.5 which then -- can be used to construct a range >= 0.4.1 && < -- 0.5 majorUpperBound :: Version -> Version -- | Given a version range, remove the highest upper bound. Example: -- (>= 1 && < 3) || (>= 4 && < 5) is -- converted to (>= 1 && || (= 4). removeUpperBound :: VersionRange -> VersionRange -- | Given a version range, remove the lowest lower bound. Example: -- (>= 1 && || (= 4 && < 5) is -- converted to (>= 0 && || (= 4 && < -- 5). removeLowerBound :: VersionRange -> VersionRange -- | Rewrite ^>= x.y.z into >= x.y.z && < -- x.(y+1) transformCaret :: VersionRange -> VersionRange -- | Rewrite ^>= x.y.z into >= x.y.z transformCaretUpper :: VersionRange -> VersionRange -- | Rewrite ^>= x.y.z into <x.(y+1) transformCaretLower :: VersionRange -> VersionRange -- | View a VersionRange as a union of intervals. -- -- This provides a canonical view of the semantics of a -- VersionRange as opposed to the syntax of the expression used to -- define it. For the syntactic view use foldVersionRange. -- -- 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 && 2). -- -- Other checks are trivial to implement using this view. For example: -- --
-- isNoVersion vr | [] <- asVersionIntervals vr = True -- | otherwise = False ---- --
-- isSpecificVersion vr -- | [(LowerBound v InclusiveBound -- ,UpperBound v' InclusiveBound)] <- asVersionIntervals vr -- , v == v' = Just v -- | otherwise = Nothing --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 VersionRange. 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 VersionRanges. 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 VersionRange to a sequence of version intervals. toVersionIntervals :: VersionRange -> VersionIntervals -- | Convert a VersionIntervals value back into a -- VersionRange 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.Data.Data Distribution.Types.TestType.TestType instance GHC.Classes.Ord Distribution.Types.TestType.TestType instance GHC.Classes.Eq Distribution.Types.TestType.TestType instance GHC.Read.Read Distribution.Types.TestType.TestType instance GHC.Show.Show Distribution.Types.TestType.TestType instance GHC.Generics.Generic Distribution.Types.TestType.TestType instance Data.Binary.Class.Binary Distribution.Types.TestType.TestType instance Distribution.Utils.Structured.Structured Distribution.Types.TestType.TestType instance Control.DeepSeq.NFData Distribution.Types.TestType.TestType instance Distribution.Pretty.Pretty Distribution.Types.TestType.TestType instance Distribution.Parsec.Parsec 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.Data.Data Distribution.Types.TestSuiteInterface.TestSuiteInterface instance GHC.Show.Show Distribution.Types.TestSuiteInterface.TestSuiteInterface instance GHC.Read.Read Distribution.Types.TestSuiteInterface.TestSuiteInterface instance GHC.Generics.Generic Distribution.Types.TestSuiteInterface.TestSuiteInterface instance GHC.Classes.Ord Distribution.Types.TestSuiteInterface.TestSuiteInterface instance GHC.Classes.Eq Distribution.Types.TestSuiteInterface.TestSuiteInterface instance Data.Binary.Class.Binary Distribution.Types.TestSuiteInterface.TestSuiteInterface instance Distribution.Utils.Structured.Structured Distribution.Types.TestSuiteInterface.TestSuiteInterface instance Control.DeepSeq.NFData Distribution.Types.TestSuiteInterface.TestSuiteInterface instance GHC.Base.Monoid Distribution.Types.TestSuiteInterface.TestSuiteInterface instance GHC.Base.Semigroup 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.Data.Data Distribution.Types.PackageId.PackageIdentifier instance GHC.Classes.Ord Distribution.Types.PackageId.PackageIdentifier instance GHC.Classes.Eq Distribution.Types.PackageId.PackageIdentifier instance GHC.Show.Show Distribution.Types.PackageId.PackageIdentifier instance GHC.Read.Read Distribution.Types.PackageId.PackageIdentifier instance GHC.Generics.Generic Distribution.Types.PackageId.PackageIdentifier instance Data.Binary.Class.Binary Distribution.Types.PackageId.PackageIdentifier instance Distribution.Utils.Structured.Structured Distribution.Types.PackageId.PackageIdentifier instance Distribution.Pretty.Pretty Distribution.Types.PackageId.PackageIdentifier instance Distribution.Parsec.Parsec Distribution.Types.PackageId.PackageIdentifier instance Control.DeepSeq.NFData 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: -- --
-- >>> licenseFromSPDX . licenseToSPDX $ BSD3 -- BSD3 ---- --
-- >>> licenseFromSPDX . licenseToSPDX $ GPL (Just (mkVersion [3])) -- GPL (Just (mkVersion [3])) ---- --
-- >>> licenseFromSPDX . licenseToSPDX $ PublicDomain -- UnknownLicense "LicenseRefPublicDomain" ---- --
-- >>> licenseFromSPDX $ SPDX.License $ SPDX.simpleLicenseExpression SPDX.EUPL_1_1 -- UnknownLicense "EUPL-1.1" ---- --
-- >>> licenseFromSPDX . licenseToSPDX $ AllRightsReserved -- AllRightsReserved ---- --
-- >>> licenseFromSPDX <$> simpleParsec "BSD-3-Clause OR GPL-3.0-only" -- Just (UnknownLicense "BSD3ClauseORGPL30only") --licenseFromSPDX :: License -> License instance Data.Data.Data Distribution.License.License instance GHC.Classes.Ord Distribution.License.License instance GHC.Classes.Eq Distribution.License.License instance GHC.Show.Show Distribution.License.License instance GHC.Read.Read Distribution.License.License instance GHC.Generics.Generic Distribution.License.License instance Data.Binary.Class.Binary Distribution.License.License instance Distribution.Utils.Structured.Structured Distribution.License.License instance Control.DeepSeq.NFData Distribution.License.License instance Distribution.Pretty.Pretty Distribution.License.License instance Distribution.Parsec.Parsec 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 libraryDirs [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 name 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 (abiHash) 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 GHC.Show.Show Distribution.Types.InstalledPackageInfo.InstalledPackageInfo instance GHC.Read.Read Distribution.Types.InstalledPackageInfo.InstalledPackageInfo instance GHC.Generics.Generic Distribution.Types.InstalledPackageInfo.InstalledPackageInfo instance GHC.Classes.Eq Distribution.Types.InstalledPackageInfo.InstalledPackageInfo instance Data.Binary.Class.Binary Distribution.Types.InstalledPackageInfo.InstalledPackageInfo instance Distribution.Utils.Structured.Structured Distribution.Types.InstalledPackageInfo.InstalledPackageInfo instance Control.DeepSeq.NFData Distribution.Types.InstalledPackageInfo.InstalledPackageInfo instance Distribution.Package.HasMungedPackageId Distribution.Types.InstalledPackageInfo.InstalledPackageInfo instance Distribution.Package.Package Distribution.Types.InstalledPackageInfo.InstalledPackageInfo instance Distribution.Package.HasUnitId Distribution.Types.InstalledPackageInfo.InstalledPackageInfo instance Distribution.Package.PackageInstalled Distribution.Types.InstalledPackageInfo.InstalledPackageInfo instance Distribution.Compat.Graph.IsNode 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 ParseResult 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) -- | Recover the parse result, so we can proceed parsing. -- runParseResult will still result in Nothing, 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 parseFatalFailure parseFailure :: Position -> String -> ParseResult () -- | Add an fatal error. parseFatalFailure :: Position -> String -> ParseResult a -- | A mzero. parseFatalFailure' :: ParseResult a -- | Get cabal spec version. getCabalSpecVersion :: ParseResult (Maybe Version) -- | Set cabal spec version. setCabalSpecVersion :: Maybe Version -> ParseResult () -- | Forget ParseResults warnings. withoutWarnings :: ParseResult a -> ParseResult a instance GHC.Base.Functor Distribution.Fields.ParseResult.ParseResult instance GHC.Base.Applicative Distribution.Fields.ParseResult.ParseResult instance GHC.Base.Monad Distribution.Fields.ParseResult.ParseResult -- | Utilities to work with .cabal like file structure. module Distribution.Fields -- | A Cabal-like file consists of a series of fields (foo: bar) -- and sections (library ...). data Field ann Field :: !Name ann -> [FieldLine ann] -> Field ann Section :: !Name ann -> [SectionArg ann] -> [Field ann] -> Field ann -- | A field name. -- -- Invariant: ByteString 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. -- -- Invariant: ByteString 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 ByteString into list of Fields, i.e. -- the cabal AST. -- -- readFields assumes that input ByteString is valid UTF8, -- specifically it doesn't validate that file is valid UTF8. Therefore -- bytestrings inside returned Field will be invalid as UTF8 if -- the input were. -- --
-- >>> readFields "foo: \223" -- Right [Field (Name (Position 1 1) "foo") [FieldLine (Position 1 6) "\223"]] ---- -- readFields won't (necessarily) fail on invalid UTF8 data, but -- the reported positions may be off. -- -- You may get weird errors on non-UTF8 input, for example -- readFields will fail on latin1 encoded non-breaking space: -- --
-- >>> isLeft (readFields "\xa0 foo: bar") -- True ---- -- That is rejected because parser thinks \xa0 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: -- --
-- >>> readFields "\xa0\&foo: bar" -- Right [Field (Name (Position 1 1) "\160foo") [FieldLine (Position 1 7) "bar"]] ---- -- The UTF8 non-breaking space is accepted as an indentation character -- (but warned about by readFields'). -- --
-- >>> readFields' "\xc2\xa0 foo: bar" -- Right ([Field (Name (Position 1 3) "foo") [FieldLine (Position 1 8) "bar"]],[LexWarning LexWarningNBSP (Position 1 1)]) --readFields :: ByteString -> Either ParseError [Field Position] -- | Like readFields 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 ParseResult 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 parseFatalFailure 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 -- | true or false, not True or False PWTBoolCase :: PWarnType -- | there are version with tags PWTVersionTag :: PWarnType -- | New syntax used, but no cabal-version: >= 1.2 specified PWTNewSyntax :: PWarnType -- | Old syntax used, and cabal-version >= 1.2 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 -- https://github.com/haskell/cabal/issues/5020. 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 -- PrettyField. 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 Strings without newlines -- and properly prefixes (with --) 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 genericFromParsecField fromParsecFields :: [Field ann] -> [PrettyField ann] -- | Haskell language dialects and extensions module Language.Haskell.Extension -- | This represents a Haskell language dialect. -- -- Language Extensions are interpreted relative to one of these -- base languages. data Language -- | The Haskell 98 language as defined by the Haskell 98 report. -- http://haskell.org/onlinereport/ Haskell98 :: Language -- | The Haskell 2010 language as defined by the Haskell 2010 report. -- http://www.haskell.org/onlinereport/haskell2010 Haskell2010 :: Language -- | The GHC2021 collection of language extensions. -- https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0380-ghc2021.rst GHC2021 :: Language -- | The GHC2024 collection of language extensions. -- https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0613-ghc2024.rst 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 Language -- definition (such as Haskell98) 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 LANGUAGE -- pragma. UnknownExtension :: String -> Extension -- | Known Haskell language extensions, including deprecated and -- undocumented ones. -- -- Check “Overview of all language extensions” in GHC User’s Guide -- 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 OverlappingInstances. 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 -- | (deprecated) Deprecated in favour of RecursiveDo. -- -- Old description: Allow recursive bindings in do blocks, using -- the rec keyword. See also RecursiveDo. DoRec :: KnownExtension -- | Allow recursive bindings in do blocks, using the rec -- keyword, or mdo, a variant of do. RecursiveDo :: KnownExtension -- | Provide syntax for writing list comprehensions which iterate over -- several lists together, like the zipWith 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 -- | (deprecated) A synonym for RankNTypes. -- -- Old description: Like RankNTypes 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 -- | (deprecated) A synonym for RankNTypes. -- -- Old description: Allow data constructors to have polymorphic -- arguments. Unlike RankNTypes, 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 -- forall quantifier, to scope over the definition of the -- accompanying value declaration. ScopedTypeVariables :: KnownExtension -- | Deprecated, use ScopedTypeVariables 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 let/where 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 -- | (deprecated) 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 Prelude. When -- disabled, when desugaring certain built-in syntax into ordinary -- identifiers, use whatever is in scope rather than the Prelude -- -- version. ImplicitPrelude :: KnownExtension -- | Enable syntax for implicitly binding local names corresponding to the -- field names of a record. Puns bind specific names, unlike -- RecordWildCards. NamedFieldPuns :: KnownExtension -- | Enable a form of guard which matches a pattern and binds variables. PatternGuards :: KnownExtension -- | Allow a type declared with newtype to use deriving -- 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 # 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 -- deriving 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 foreign -- import and foreign export. UnliftedFFITypes :: KnownExtension -- | Enable interruptible FFI. InterruptibleFFI :: KnownExtension -- | Allow use of CAPI FFI calling convention (foreign import -- capi). 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 NamedFieldPuns. RecordWildCards :: KnownExtension -- | Deprecated, use NamedFieldPuns 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 GADTSyntax. GADTs :: KnownExtension -- | Enable GADT syntax for declaring ordinary algebraic datatypes. GADTSyntax :: KnownExtension -- | (deprecated) 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 deriving for classes Typeable and Data. DeriveDataTypeable :: KnownExtension -- | Enable deriving for Generic and Generic1. 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. -- --
-- import "network" Network.Socket --PackageImports :: KnownExtension -- | (deprecated) Allow a type variable to be instantiated at a -- polymorphic type. ImpredicativeTypes :: KnownExtension -- | (deprecated) 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: -- http://www.haskell.org/haskellwiki/HSP. 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. (, True) desugars into -- x -> (x, True). TupleSections :: KnownExtension -- | Allow GHC primops, written in C--, to be imported into a Haskell file. GHCForeignImportPrim :: KnownExtension -- | Support for patterns of the form n + k, where k is -- an integer literal. NPlusKPatterns :: KnownExtension -- | Improve the layout rule when if expressions are used in a -- do block. DoAndIfThenElse :: KnownExtension -- | Enable support for multi-way if-expressions. MultiWayIf :: KnownExtension -- | Enable support lambda-case 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 forall 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 Eq a in -- data Eq a => Set a = NilSet | ConsSet a (Set a). DatatypeContexts :: KnownExtension -- | Local (let and where) bindings are monomorphic. MonoLocalBinds :: KnownExtension -- | Enable deriving for the Functor class. DeriveFunctor :: KnownExtension -- | Enable deriving for the Traversable class. DeriveTraversable :: KnownExtension -- | Enable deriving for the Foldable class. DeriveFoldable :: KnownExtension -- | Enable non-decreasing indentation for do 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. -- --
-- import safe Network.Socket --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 classimplicit parameterequality constraints to be -- used as types with the special kind constraint. Also generalise the -- (ctxt => ty) 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 type data declarations, defining constructors at the -- type level. TypeData :: KnownExtension -- | Enable parallel arrays syntax ([:, :]) for Data -- Parallel Haskell. ParallelArrays :: KnownExtension -- | Enable explicit role annotations, like in (type role Foo -- representational representational). RoleAnnotations :: KnownExtension -- | Enable overloading of list literals, arithmetic sequences and list -- patterns using the IsList type class. OverloadedLists :: KnownExtension -- | Enable case expressions that have no alternatives. Also applies to -- lambda-case expressions if they are enabled. EmptyCase :: KnownExtension -- | (deprecated) Deprecated in favour of DeriveDataTypeable. -- -- Old description: Triggers the generation of derived Typeable -- 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. -- 0b11001001 to denote 201). BinaryLiterals :: KnownExtension -- | Allow the use of floating literal syntax for all instances of -- Num, including Int and Integer. 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 foreign import javascript. 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 deriving for any class. DeriveAnyClass :: KnownExtension -- | Enable deriving for the Lift class. DeriveLift :: KnownExtension -- | Enable support for 'static pointers' (and the static 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 BangPatterns), and allow opt-in field -- laziness using ~. StrictData :: KnownExtension -- | Switches all pattern bindings to be strict by default (as if they had -- a bang using BangPatterns), ordinary patterns are recovered -- using ~. Implies StrictData. Strict :: KnownExtension -- | Allows do-notation for types that are -- Applicative as well as Monad. When -- enabled, desugaring do notation tries to use -- (*) and fmap and join -- as far as possible. ApplicativeDo :: KnownExtension -- | Allow records to use duplicated field labels for accessors. DuplicateRecordFields :: KnownExtension -- | Enable explicit type applications with the syntax id @Int. 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 TemplateHaskell including only quoting. TemplateHaskellQuotes :: KnownExtension -- | Allows use of the #label syntax. OverloadedLabels :: KnownExtension -- | Allow functional dependency annotations on type families to declare -- them as injective. TypeFamilyDependencies :: KnownExtension -- | Allow multiple deriving clauses, each optionally qualified -- with a strategy. DerivingStrategies :: KnownExtension -- | Enable deriving instances via types of the same runtime -- representation. Implies DerivingStrategies. DerivingVia :: KnownExtension -- | Enable the use of unboxed sum syntax. UnboxedSums :: KnownExtension -- | Allow use of hexadecimal literal notation for floating-point values. HexFloatLiterals :: KnownExtension -- | Allow do blocks etc. in argument position. BlockArguments :: KnownExtension -- | Allow use of underscores in numeric literals. NumericUnderscores :: KnownExtension -- | Allow forall in constraints. QuantifiedConstraints :: KnownExtension -- | Have * refer to Type. 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 import M qualified. 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 . syntax in record updates, e.g. x -- {foo.bar = 1}. 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. 3#Int8 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.Data.Data Language.Haskell.Extension.Language instance GHC.Classes.Ord Language.Haskell.Extension.Language instance GHC.Classes.Eq Language.Haskell.Extension.Language instance GHC.Read.Read Language.Haskell.Extension.Language instance GHC.Show.Show Language.Haskell.Extension.Language instance GHC.Generics.Generic Language.Haskell.Extension.Language instance Data.Data.Data Language.Haskell.Extension.KnownExtension instance GHC.Enum.Bounded Language.Haskell.Extension.KnownExtension instance GHC.Enum.Enum Language.Haskell.Extension.KnownExtension instance GHC.Classes.Ord Language.Haskell.Extension.KnownExtension instance GHC.Classes.Eq Language.Haskell.Extension.KnownExtension instance GHC.Read.Read Language.Haskell.Extension.KnownExtension instance GHC.Show.Show Language.Haskell.Extension.KnownExtension instance GHC.Generics.Generic Language.Haskell.Extension.KnownExtension instance Data.Data.Data Language.Haskell.Extension.Extension instance GHC.Classes.Ord Language.Haskell.Extension.Extension instance GHC.Classes.Eq Language.Haskell.Extension.Extension instance GHC.Read.Read Language.Haskell.Extension.Extension instance GHC.Show.Show Language.Haskell.Extension.Extension instance GHC.Generics.Generic Language.Haskell.Extension.Extension instance Data.Binary.Class.Binary Language.Haskell.Extension.Extension instance Distribution.Utils.Structured.Structured Language.Haskell.Extension.Extension instance Control.DeepSeq.NFData Language.Haskell.Extension.Extension instance Distribution.Pretty.Pretty Language.Haskell.Extension.Extension instance Distribution.Parsec.Parsec Language.Haskell.Extension.Extension instance Data.Binary.Class.Binary Language.Haskell.Extension.KnownExtension instance Distribution.Utils.Structured.Structured Language.Haskell.Extension.KnownExtension instance Control.DeepSeq.NFData Language.Haskell.Extension.KnownExtension instance Distribution.Pretty.Pretty Language.Haskell.Extension.KnownExtension instance Data.Binary.Class.Binary Language.Haskell.Extension.Language instance Distribution.Utils.Structured.Structured Language.Haskell.Extension.Language instance Control.DeepSeq.NFData Language.Haskell.Extension.Language instance Distribution.Pretty.Pretty Language.Haskell.Extension.Language instance Distribution.Parsec.Parsec 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: -- --
-- case compilerFlavor comp of -- GHC -> GHC.getInstalledPackages verbosity packageDb progdb ---- -- Obviously it would be better to use the proper Compiler -- abstraction because that would keep all the compiler-specific code -- together. Unfortunately we cannot make this change yet without -- breaking the UserHooks api, which would break all custom -- Setup.hs 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 MHS :: 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 Nothing and -- the user will have to specify which compiler they want. defaultCompilerFlavor :: Maybe CompilerFlavor classifyCompilerFlavor :: String -> CompilerFlavor knownCompilerFlavors :: [CompilerFlavor] -- | PerCompilerFlavor carries only info per GHC and GHCJS -- -- Cabal parses only ghc-options and ghcjs-options, -- 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.Data.Data Distribution.Compiler.CompilerFlavor instance GHC.Classes.Ord Distribution.Compiler.CompilerFlavor instance GHC.Classes.Eq Distribution.Compiler.CompilerFlavor instance GHC.Read.Read Distribution.Compiler.CompilerFlavor instance GHC.Show.Show Distribution.Compiler.CompilerFlavor instance GHC.Generics.Generic Distribution.Compiler.CompilerFlavor instance Data.Traversable.Traversable Distribution.Compiler.PerCompilerFlavor instance Data.Foldable.Foldable Distribution.Compiler.PerCompilerFlavor instance GHC.Base.Functor Distribution.Compiler.PerCompilerFlavor instance Data.Data.Data v => Data.Data.Data (Distribution.Compiler.PerCompilerFlavor v) instance GHC.Classes.Ord v => GHC.Classes.Ord (Distribution.Compiler.PerCompilerFlavor v) instance GHC.Classes.Eq v => GHC.Classes.Eq (Distribution.Compiler.PerCompilerFlavor v) instance GHC.Read.Read v => GHC.Read.Read (Distribution.Compiler.PerCompilerFlavor v) instance GHC.Show.Show v => GHC.Show.Show (Distribution.Compiler.PerCompilerFlavor v) instance GHC.Generics.Generic (Distribution.Compiler.PerCompilerFlavor v) instance GHC.Show.Show Distribution.Compiler.CompilerId instance GHC.Read.Read Distribution.Compiler.CompilerId instance GHC.Classes.Ord Distribution.Compiler.CompilerId instance GHC.Generics.Generic Distribution.Compiler.CompilerId instance GHC.Classes.Eq Distribution.Compiler.CompilerId instance GHC.Read.Read Distribution.Compiler.AbiTag instance GHC.Show.Show Distribution.Compiler.AbiTag instance GHC.Generics.Generic Distribution.Compiler.AbiTag instance GHC.Classes.Eq Distribution.Compiler.AbiTag instance GHC.Read.Read Distribution.Compiler.CompilerInfo instance GHC.Show.Show Distribution.Compiler.CompilerInfo instance GHC.Generics.Generic Distribution.Compiler.CompilerInfo instance Data.Binary.Class.Binary Distribution.Compiler.CompilerInfo instance Data.Binary.Class.Binary Distribution.Compiler.AbiTag instance Distribution.Utils.Structured.Structured Distribution.Compiler.AbiTag instance Distribution.Pretty.Pretty Distribution.Compiler.AbiTag instance Distribution.Parsec.Parsec Distribution.Compiler.AbiTag instance Data.Binary.Class.Binary Distribution.Compiler.CompilerId instance Distribution.Utils.Structured.Structured Distribution.Compiler.CompilerId instance Control.DeepSeq.NFData Distribution.Compiler.CompilerId instance Distribution.Pretty.Pretty Distribution.Compiler.CompilerId instance Distribution.Parsec.Parsec Distribution.Compiler.CompilerId instance Data.Binary.Class.Binary a => Data.Binary.Class.Binary (Distribution.Compiler.PerCompilerFlavor a) instance Distribution.Utils.Structured.Structured a => Distribution.Utils.Structured.Structured (Distribution.Compiler.PerCompilerFlavor a) instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Distribution.Compiler.PerCompilerFlavor a) instance GHC.Base.Semigroup a => GHC.Base.Semigroup (Distribution.Compiler.PerCompilerFlavor a) instance (GHC.Base.Semigroup a, GHC.Base.Monoid a) => GHC.Base.Monoid (Distribution.Compiler.PerCompilerFlavor a) instance Data.Binary.Class.Binary Distribution.Compiler.CompilerFlavor instance Distribution.Utils.Structured.Structured Distribution.Compiler.CompilerFlavor instance Control.DeepSeq.NFData Distribution.Compiler.CompilerFlavor instance Distribution.Pretty.Pretty Distribution.Compiler.CompilerFlavor instance Distribution.Parsec.Parsec Distribution.Compiler.CompilerFlavor module Distribution.Types.ConfVar -- | A ConfVar represents the variable type used. data ConfVar OS :: OS -> ConfVar Arch :: Arch -> ConfVar PackageFlag :: FlagName -> ConfVar Impl :: CompilerFlavor -> VersionRange -> ConfVar instance GHC.Generics.Generic Distribution.Types.ConfVar.ConfVar instance Data.Data.Data Distribution.Types.ConfVar.ConfVar instance GHC.Show.Show Distribution.Types.ConfVar.ConfVar instance GHC.Classes.Eq Distribution.Types.ConfVar.ConfVar instance Data.Binary.Class.Binary Distribution.Types.ConfVar.ConfVar instance Distribution.Utils.Structured.Structured Distribution.Types.ConfVar.ConfVar instance Control.DeepSeq.NFData Distribution.Types.ConfVar.ConfVar module Distribution.Fields.ConfVar -- | Parse Condition ConfVar 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 buildToolDepends largely -- supersedes. -- -- Unless use are very sure what you are doing, use the functions in -- Distribution.Simple.BuildToolDepends rather than accessing this -- field directly. [buildTools] :: BuildInfo -> [LegacyExeDependency] -- | Haskell tools needed to build this bit -- -- This field is better than buildTools 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 -- Distribution.Simple.BuildToolDepends 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. GHC.Prim -- from ghc-prim 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 defaultExtensions [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. [libHSname_flavour | flavour <- -- extraLibFlavours]. This should only be needed in very specific cases, -- e.g. the rts 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 -- dynamic libraries when copying. This is particularly useful -- with the rts 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 autoconf) [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 Languages used by this component allLanguages :: BuildInfo -> [Language] -- | The Extensions that are used somewhere by this component allExtensions :: BuildInfo -> [Extension] -- | The Extensions 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.Data.Data Distribution.Types.BuildInfo.BuildInfo instance GHC.Classes.Ord Distribution.Types.BuildInfo.BuildInfo instance GHC.Classes.Eq Distribution.Types.BuildInfo.BuildInfo instance GHC.Read.Read Distribution.Types.BuildInfo.BuildInfo instance GHC.Show.Show Distribution.Types.BuildInfo.BuildInfo instance GHC.Generics.Generic Distribution.Types.BuildInfo.BuildInfo instance Data.Binary.Class.Binary Distribution.Types.BuildInfo.BuildInfo instance Distribution.Utils.Structured.Structured Distribution.Types.BuildInfo.BuildInfo instance Control.DeepSeq.NFData Distribution.Types.BuildInfo.BuildInfo instance GHC.Base.Monoid Distribution.Types.BuildInfo.BuildInfo instance GHC.Base.Semigroup Distribution.Types.BuildInfo.BuildInfo module Distribution.Types.HookedBuildInfo -- | HookedBuildInfo is mechanism that hooks can use to override the -- BuildInfos 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 HookedBuildInfo -- format prior to doing any operations. -- -- Quite honestly, this mechanism is a massive hack since we shouldn't be -- editing the PackageDescription 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 BuildInfo style things. -- -- In any case, a lot of care has to be taken to make sure the -- HookedBuildInfo is applied to the PackageDescription. -- In general this process occurs in Distribution.Simple, which is -- responsible for orchestrating the hooks mechanism. The general -- strategy: -- --
-- >>> :t alaList VCat -- alaList VCat :: [a] -> List VCat (Identity a) a ---- --
-- >>> :t alaList' FSep Token -- alaList' FSep Token :: [String] -> List FSep Token String --alaList :: sep -> [a] -> List sep (Identity a) a -- | More general version of alaList. alaList' :: sep -> (a -> b) -> [a] -> List sep b a -- | Vertical list with commas. Displayed with vcat data CommaVCat CommaVCat :: CommaVCat -- | Paragraph fill list with commas. Displayed with fsep data CommaFSep CommaFSep :: CommaFSep -- | Vertical list with optional commas. Displayed with vcat. data VCat VCat :: VCat -- | Paragraph fill list with optional commas. Displayed with fsep. data FSep FSep :: FSep -- | Paragraph fill list without commas. Displayed with fsep. 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 sep, -- arguments of type a are parsed and pretty-printed as -- b. data List sep b a -- | alaSet and alaSet' are simply Set' constructor, -- with additional phantom arguments to constrain the resulting type -- --
-- >>> :t alaSet VCat -- alaSet VCat :: Set a -> Set' VCat (Identity a) a ---- --
-- >>> :t alaSet' FSep Token -- alaSet' FSep Token :: Set String -> Set' FSep Token String ---- --
-- >>> unpack' (alaSet' FSep Token) <$> eitherParsec "foo bar foo" -- Right (fromList ["bar","foo"]) --alaSet :: sep -> Set a -> Set' sep (Identity a) a -- | More general version of alaSet. alaSet' :: sep -> (a -> b) -> Set a -> Set' sep b a -- | Like List, but for Set. data Set' sep b a -- | alaNonEmpty and alaNonEmpty' are simply NonEmpty' -- constructor, with additional phantom arguments to constrain the -- resulting type -- --
-- >>> :t alaNonEmpty VCat -- alaNonEmpty VCat :: NonEmpty a -> NonEmpty' VCat (Identity a) a ---- --
-- >>> unpack' (alaNonEmpty' FSep Token) <$> eitherParsec "foo bar foo"
-- Right ("foo" :| ["bar","foo"])
--
alaNonEmpty :: sep -> NonEmpty a -> NonEmpty' sep (Identity a) a
-- | More general version of alaNonEmpty.
alaNonEmpty' :: sep -> (a -> b) -> NonEmpty a -> NonEmpty' sep b a
-- | Like List, but for NonEmpty.
data NonEmpty' sep b a
-- | Version range or just version, i.e. cabal-version field.
--
-- There are few things to consider:
--
-- -- buildable: True -- if os(linux) -- buildable: False ---- -- and -- --
-- if os(linux) -- buildable: False -- buildable: True ---- -- behave the same! This is the limitation of -- GeneralPackageDescription structure. -- -- So we transform the list of fields [Field ann] into a -- map of grouped ordinary fields and a list of lists of sections: -- Fields ann = Map FieldName -- [NamelessField ann] and [[Section ann]]. -- -- We need list of list of sections, because we need to distinguish -- situations where there are fields in between. For example -- --
-- if flag(bytestring-lt-0_10_4) -- build-depends: bytestring < 0.10.4 -- -- default-language: Haskell2020 -- -- else -- build-depends: bytestring >= 0.10.4 ---- -- is obviously invalid specification. -- -- We can parse Fields like we parse aeson objects, yet -- we use slightly higher-level API, so we can process unspecified -- fields, to report unknown fields and save custom x-fields. 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 Section constructor of Field. 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.Base.Functor Distribution.FieldGrammar.Parsec.NamelessField instance GHC.Show.Show ann => GHC.Show.Show (Distribution.FieldGrammar.Parsec.NamelessField ann) instance GHC.Classes.Eq ann => GHC.Classes.Eq (Distribution.FieldGrammar.Parsec.NamelessField ann) instance GHC.Base.Functor Distribution.FieldGrammar.Parsec.Section instance GHC.Show.Show ann => GHC.Show.Show (Distribution.FieldGrammar.Parsec.Section ann) instance GHC.Classes.Eq ann => GHC.Classes.Eq (Distribution.FieldGrammar.Parsec.Section ann) instance GHC.Base.Functor (Distribution.FieldGrammar.Parsec.ParsecFieldGrammar s) instance GHC.Base.Applicative (Distribution.FieldGrammar.Parsec.ParsecFieldGrammar s) instance Distribution.FieldGrammar.Class.FieldGrammar Distribution.Parsec.Parsec Distribution.FieldGrammar.Parsec.ParsecFieldGrammar -- | This module provides a way to specify a grammar of .cabal -- -like files. module Distribution.FieldGrammar -- | FieldGrammar is parametrised by -- --
-- <*> monoidalFieldAla "extensions" (alaList' FSep MQuoted) oldExtensions -- ^^^ deprecatedSince [1,12] "Please use 'default-extensions' or 'other-extensions' fields." --(^^^) :: a -> (a -> b) -> b infixl 5 ^^^ -- | The Section constructor of Field. 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 freeTextFieldDefST. defaultFreeTextFieldDefST :: (Functor (g s), FieldGrammar c g) => FieldName -> ALens' s ShortText -> g s ShortText -- | GenericPackageDescription Field descriptions module Distribution.PackageDescription.FieldGrammar packageDescriptionFieldGrammar :: (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 -- --
-- license-file: "" ---- -- and -- --
-- data-dir: "" ---- -- 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 :: (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 :: (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 :: (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 TestSuite -- 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 :: (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 Benchmark 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 :: (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 :: (FieldGrammar c g, Applicative (g PackageFlag)) => FlagName -> g PackageFlag PackageFlag sourceRepoFieldGrammar :: (FieldGrammar c g, Applicative (g SourceRepo), c (Identity RepoType), c Token, c FilePathNT) => RepoKind -> g SourceRepo SourceRepo setupBInfoFieldGrammar :: (FieldGrammar c g, Functor (g SetupBuildInfo), c (List CommaVCat (Identity Dependency) Dependency)) => Bool -> g SetupBuildInfo SetupBuildInfo buildInfoFieldGrammar :: (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.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.CompatLicenseFile instance Distribution.Pretty.Pretty Distribution.PackageDescription.FieldGrammar.CompatLicenseFile instance Distribution.Compat.Newtype.Newtype GHC.Base.String Distribution.PackageDescription.FieldGrammar.CompatFilePath instance Distribution.Parsec.Parsec Distribution.PackageDescription.FieldGrammar.CompatFilePath instance Distribution.Pretty.Pretty Distribution.PackageDescription.FieldGrammar.CompatFilePath instance Distribution.Types.BuildInfo.Lens.HasBuildInfo Distribution.PackageDescription.FieldGrammar.BenchmarkStanza instance Distribution.Types.BuildInfo.Lens.HasBuildInfo Distribution.PackageDescription.FieldGrammar.TestSuiteStanza -- | 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 PrettyFields. 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 -- .cabal format. module Distribution.PackageDescription.Parsec -- | Parses the given file into a GenericPackageDescription. -- -- 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 -- | Maybe variant of parseGenericPackageDescription parseGenericPackageDescriptionMaybe :: ByteString -> Maybe GenericPackageDescription -- | A monad with failure and accumulating errors and warnings. data ParseResult a -- | Destruct a ParseResult 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): -- --
-- 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 --scanSpecVersion :: ByteString -> Maybe Version parseHookedBuildInfo :: ByteString -> ParseResult HookedBuildInfo instance GHC.Show.Show Distribution.PackageDescription.Parsec.Syntax instance GHC.Classes.Eq Distribution.PackageDescription.Parsec.Syntax instance Distribution.PackageDescription.Parsec.FromBuildInfo Distribution.Types.BuildInfo.BuildInfo instance Distribution.PackageDescription.Parsec.FromBuildInfo Distribution.Types.ForeignLib.ForeignLib instance Distribution.PackageDescription.Parsec.FromBuildInfo Distribution.Types.Executable.Executable instance Distribution.PackageDescription.Parsec.FromBuildInfo Distribution.PackageDescription.FieldGrammar.TestSuiteStanza instance Distribution.PackageDescription.Parsec.FromBuildInfo Distribution.PackageDescription.FieldGrammar.BenchmarkStanza 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.Base.Functor (Distribution.FieldGrammar.FieldDescrs.FieldDescrs s) instance Distribution.FieldGrammar.Class.FieldGrammar Distribution.FieldGrammar.FieldDescrs.ParsecPretty Distribution.FieldGrammar.FieldDescrs.FieldDescrs instance (Distribution.Parsec.Parsec a, Distribution.Pretty.Pretty a) => Distribution.FieldGrammar.FieldDescrs.ParsecPretty a instance GHC.Base.Applicative (Distribution.FieldGrammar.FieldDescrs.FieldDescrs s) module Distribution.Types.InstalledPackageInfo.FieldGrammar ipiFieldGrammar :: (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 (Data.Either.Either Distribution.SPDX.License.License Distribution.License.License) Distribution.Types.InstalledPackageInfo.FieldGrammar.SpecLicenseLenient instance Distribution.Parsec.Parsec Distribution.Types.InstalledPackageInfo.FieldGrammar.SpecLicenseLenient instance Distribution.Pretty.Pretty Distribution.Types.InstalledPackageInfo.FieldGrammar.SpecLicenseLenient instance Distribution.Compat.Newtype.Newtype [(Distribution.ModuleName.ModuleName, Distribution.Backpack.OpenModule)] Distribution.Types.InstalledPackageInfo.FieldGrammar.InstWith instance Distribution.Pretty.Pretty Distribution.Types.InstalledPackageInfo.FieldGrammar.InstWith instance Distribution.Parsec.Parsec Distribution.Types.InstalledPackageInfo.FieldGrammar.InstWith instance Distribution.Compat.Newtype.Newtype GHC.Base.String Distribution.Types.InstalledPackageInfo.FieldGrammar.CompatPackageKey instance Distribution.Pretty.Pretty Distribution.Types.InstalledPackageInfo.FieldGrammar.CompatPackageKey instance Distribution.Parsec.Parsec Distribution.Types.InstalledPackageInfo.FieldGrammar.CompatPackageKey instance Distribution.Compat.Newtype.Newtype [Distribution.Types.ExposedModule.ExposedModule] Distribution.Types.InstalledPackageInfo.FieldGrammar.ExposedModules instance Distribution.Parsec.Parsec Distribution.Types.InstalledPackageInfo.FieldGrammar.ExposedModules instance Distribution.Pretty.Pretty Distribution.Types.InstalledPackageInfo.FieldGrammar.ExposedModules -- | This is the information about an installed package that is -- communicated to the ghc-pkg program in order to register a -- package. ghc-pkg now consumes this package format (as of -- version 6.4). This is specific to GHC at the moment. -- -- The .cabal 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 InstalledPackageInfo 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 .cabal 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 libraryDirs [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 DefiniteUnitId (installedUnitId ipi). For -- indefinite libraries, however, you will correctly get an -- OpenUnitId with the appropriate OpenModuleSubst. 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 (abiHash) 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 InstalledPackageInfo. -- -- pkgRoot isn't printed, as ghc-pkg prints it manually (as -- GHC-8.4). showInstalledPackageInfo :: InstalledPackageInfo -> String -- | The variant of showInstalledPackageInfo which outputs -- pkgroot field too. showFullInstalledPackageInfo :: InstalledPackageInfo -> String -- |
-- >>> let ipi = emptyInstalledPackageInfo { maintainer = fromString "Tester" }
--
-- >>> fmap ($ ipi) $ showInstalledPackageInfoField "maintainer"
-- Just "maintainer: Tester"
--
showInstalledPackageInfoField :: String -> Maybe (InstalledPackageInfo -> String)
showSimpleInstalledPackageInfoField :: String -> Maybe (InstalledPackageInfo -> String)