packages feed

hydra-kernel-0.16.0: src/main/haskell/Hydra/Packaging.hs

-- Note: this is an automatically generated file. Do not edit.
-- | A model for Hydra module names, modules, and packages

module Hydra.Packaging where
import qualified Hydra.Core as Core
import qualified Hydra.Typing as Typing
import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
import qualified Data.Scientific as Sci
-- | A definition, which may be either a term, type, or primitive definition
data Definition =
  -- | A term definition
  DefinitionTerm TermDefinition |
  -- | A type definition
  DefinitionType TypeDefinition |
  -- | A primitive definition
  DefinitionPrimitive PrimitiveDefinition
  deriving (Eq, Ord, Read, Show)
_Definition = Core.Name "hydra.packaging.Definition"
_Definition_term = Core.Name "term"
_Definition_type = Core.Name "type"
_Definition_primitive = Core.Name "primitive"
-- | A typed reference to a definition: a type, a term, or a primitive, identified by name
data DefinitionReference =
  -- | A reference to a type definition, by name
  DefinitionReferenceType Core.Name |
  -- | A reference to a term definition, by name
  DefinitionReferenceTerm Core.Name |
  -- | A reference to a primitive definition, by name
  DefinitionReferencePrimitive Core.Name
  deriving (Eq, Ord, Read, Show)
_DefinitionReference = Core.Name "hydra.packaging.DefinitionReference"
_DefinitionReference_type = Core.Name "type"
_DefinitionReference_term = Core.Name "term"
_DefinitionReference_primitive = Core.Name "primitive"
-- | Documentation and lifecycle metadata attachable to a packaging entity (package, module, or definition). Bundling these fields in one type lets future metadata be added without changing the field shape of the entities that carry it.
data EntityMetadata =
  EntityMetadata {
    -- | An optional, concise one-line human-readable summary of the entity.
    entityMetadataDescription :: (Maybe String),
    -- | Zero or more long-form prose paragraphs: cross-cutting semantic conventions, caveats, and references that would otherwise be repeated across the entity's constituents.
    entityMetadataComments :: [String],
    -- | Typed cross-references to related entities, for navigation and documentation.
    entityMetadataSeeAlso :: [EntityReference],
    -- | Optional version-lifecycle milestones for the entity.
    entityMetadataLifecycle :: (Maybe LifecycleInfo)}
  deriving (Eq, Ord, Read, Show)
_EntityMetadata = Core.Name "hydra.packaging.EntityMetadata"
_EntityMetadata_description = Core.Name "description"
_EntityMetadata_comments = Core.Name "comments"
_EntityMetadata_seeAlso = Core.Name "seeAlso"
_EntityMetadata_lifecycle = Core.Name "lifecycle"
-- | A typed reference to a packaging entity: a package, a module, or a definition
data EntityReference =
  -- | A reference to a package, by name
  EntityReferencePackage PackageName |
  -- | A reference to a module, by name
  EntityReferenceModule ModuleName |
  -- | A reference to a definition (type, term, or primitive)
  EntityReferenceDefinition DefinitionReference
  deriving (Eq, Ord, Read, Show)
_EntityReference = Core.Name "hydra.packaging.EntityReference"
_EntityReference_package = Core.Name "package"
_EntityReference_module = Core.Name "module"
_EntityReference_definition = Core.Name "definition"
-- | Version-lifecycle milestones for a packaging entity. Each milestone is independently optional; further milestones (e.g. stableSince, removedSince) may be added without changing dependent types.
data LifecycleInfo =
  LifecycleInfo {
    -- | The version in which the entity was introduced, if known.
    lifecycleInfoAvailableSince :: (Maybe Version),
    -- | The version in which the entity was deprecated, if applicable.
    lifecycleInfoDeprecatedSince :: (Maybe Version)}
  deriving (Eq, Ord, Read, Show)
_LifecycleInfo = Core.Name "hydra.packaging.LifecycleInfo"
_LifecycleInfo_availableSince = Core.Name "availableSince"
_LifecycleInfo_deprecatedSince = Core.Name "deprecatedSince"
-- | A logical collection of elements sharing a common module name, having dependencies on zero or more other modules
data Module =
  Module {
    -- | The name of the module, which is also the common prefix for all element names in the module
    moduleName :: ModuleName,
    -- | Optional documentation and lifecycle metadata for the module
    moduleMetadata :: (Maybe EntityMetadata),
    -- | Any modules which this module directly depends on
    moduleDependencies :: [ModuleDependency],
    -- | The definitions in this module
    moduleDefinitions :: [Definition]}
  deriving (Eq, Ord, Read, Show)
_Module = Core.Name "hydra.packaging.Module"
_Module_name = Core.Name "name"
_Module_metadata = Core.Name "metadata"
_Module_dependencies = Core.Name "dependencies"
_Module_definitions = Core.Name "definitions"
-- | A dependency on another module, identified by its name and (optionally) the package which provides it. When the package is omitted, the resolver searches all packages in scope; a duplicate module name across packages is a resolution error which can be disambiguated by naming the intended package explicitly.
data ModuleDependency =
  ModuleDependency {
    -- | The name of the depended-on module
    moduleDependencyModule :: ModuleName,
    -- | The package providing the depended-on module, if disambiguation is required
    moduleDependencyPackage :: (Maybe PackageName)}
  deriving (Eq, Ord, Read, Show)
_ModuleDependency = Core.Name "hydra.packaging.ModuleDependency"
_ModuleDependency_module = Core.Name "module"
_ModuleDependency_package = Core.Name "package"
-- | The unique name of a module; a prefix for the names of elements defined in the module.
newtype ModuleName =
  ModuleName {
    unModuleName :: String}
  deriving (Eq, Ord, Read, Show)
_ModuleName = Core.Name "hydra.packaging.ModuleName"
-- | A package, which is a named collection of modules with metadata and dependencies
data Package =
  Package {
    -- | The name of the package
    packageName :: PackageName,
    -- | Optional documentation and lifecycle metadata for the package
    packageMetadata :: (Maybe EntityMetadata),
    -- | The packages which this package depends on
    packageDependencies :: [PackageDependency],
    -- | The modules in this package
    packageModules :: [Module]}
  deriving (Eq, Ord, Read, Show)
_Package = Core.Name "hydra.packaging.Package"
_Package_name = Core.Name "name"
_Package_metadata = Core.Name "metadata"
_Package_dependencies = Core.Name "dependencies"
_Package_modules = Core.Name "modules"
-- | A dependency on another package, identified by name and constrained by an optional version specifier
data PackageDependency =
  PackageDependency {
    -- | The name of the depended-on package
    packageDependencyName :: PackageName,
    -- | The version-range constraint on the depended-on package
    packageDependencyVersion :: VersionSpecifier}
  deriving (Eq, Ord, Read, Show)
_PackageDependency = Core.Name "hydra.packaging.PackageDependency"
_PackageDependency_name = Core.Name "name"
_PackageDependency_version = Core.Name "version"
-- | The unique name of a package, e.g. "hydra-kernel" or "hydra-python"
newtype PackageName =
  PackageName {
    unPackageName :: String}
  deriving (Eq, Ord, Read, Show)
_PackageName = Core.Name "hydra.packaging.PackageName"
-- | A primitive definition: the universal, host-independent declarative metadata for a primitive, including name, signature, documentation and lifecycle metadata, totality and purity flags, and an optional default implementation expressed as a Hydra term.
data PrimitiveDefinition =
  PrimitiveDefinition {
    -- | The name of the primitive
    primitiveDefinitionName :: Core.Name,
    -- | Optional documentation and lifecycle metadata for the primitive.
    primitiveDefinitionMetadata :: (Maybe EntityMetadata),
    -- | The signature of the primitive. Always explicit, never inferred.
    primitiveDefinitionSignature :: Typing.TermSignature,
    -- | Whether the primitive is pure (referentially transparent, no observable side effects). Normally true.
    primitiveDefinitionIsPure :: Bool,
    -- | Whether the primitive is total (terminates on every input of its declared type). Normally true.
    primitiveDefinitionIsTotal :: Bool,
    -- | An optional cross-compilable reference implementation of the primitive, expressed as a Hydra term. Used by interpreters lacking a native implementation and as a proof-friendly reference. Distinct from the per-host Primitive.implementation.
    primitiveDefinitionDefaultImplementation :: (Maybe Core.Term)}
  deriving (Eq, Ord, Read, Show)
_PrimitiveDefinition = Core.Name "hydra.packaging.PrimitiveDefinition"
_PrimitiveDefinition_name = Core.Name "name"
_PrimitiveDefinition_metadata = Core.Name "metadata"
_PrimitiveDefinition_signature = Core.Name "signature"
_PrimitiveDefinition_isPure = Core.Name "isPure"
_PrimitiveDefinition_isTotal = Core.Name "isTotal"
_PrimitiveDefinition_defaultImplementation = Core.Name "defaultImplementation"
-- | A term-level definition, including a name, an optional signature, and a term
data TermDefinition =
  TermDefinition {
    -- | The name of the term
    termDefinitionName :: Core.Name,
    -- | Optional documentation and lifecycle metadata for the term definition
    termDefinitionMetadata :: (Maybe EntityMetadata),
    -- | The optional signature of the term. When absent, the signature has yet to be inferred.
    termDefinitionSignature :: (Maybe Typing.TermSignature),
    -- | The term being defined
    termDefinitionBody :: Core.Term}
  deriving (Eq, Ord, Read, Show)
_TermDefinition = Core.Name "hydra.packaging.TermDefinition"
_TermDefinition_name = Core.Name "name"
_TermDefinition_metadata = Core.Name "metadata"
_TermDefinition_signature = Core.Name "signature"
_TermDefinition_body = Core.Name "body"
-- | A type-level definition, including a name and the type scheme
data TypeDefinition =
  TypeDefinition {
    -- | The name of the type
    typeDefinitionName :: Core.Name,
    -- | Optional documentation and lifecycle metadata for the type definition
    typeDefinitionMetadata :: (Maybe EntityMetadata),
    -- | The type scheme being defined
    typeDefinitionBody :: Core.TypeScheme}
  deriving (Eq, Ord, Read, Show)
_TypeDefinition = Core.Name "hydra.packaging.TypeDefinition"
_TypeDefinition_name = Core.Name "name"
_TypeDefinition_metadata = Core.Name "metadata"
_TypeDefinition_body = Core.Name "body"
-- | A version string, e.g. "0.15" or "1.0.0".
newtype Version =
  Version {
    unVersion :: String}
  deriving (Eq, Ord, Read, Show)
_Version = Core.Name "hydra.packaging.Version"
-- | A specifier constraining acceptable versions of a dependency. Currently only the `any` (unit) specifier is defined; future variants such as `exact`, `caret`, and `range` may be added without breaking consumers of the `any` form.
data VersionSpecifier =
  -- | Any version satisfies the dependency
  VersionSpecifierAny
  deriving (Eq, Ord, Read, Show)
_VersionSpecifier = Core.Name "hydra.packaging.VersionSpecifier"
_VersionSpecifier_any = Core.Name "any"