summaryrefslogtreecommitdiff
path: root/source/Checking/Module.hs
diff options
context:
space:
mode:
Diffstat (limited to 'source/Checking/Module.hs')
-rw-r--r--source/Checking/Module.hs986
1 files changed, 0 insertions, 986 deletions
diff --git a/source/Checking/Module.hs b/source/Checking/Module.hs
deleted file mode 100644
index d0e1d52..0000000
--- a/source/Checking/Module.hs
+++ /dev/null
@@ -1,986 +0,0 @@
-{-# LANGUAGE DerivingStrategies #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-{-# LANGUAGE RankNTypes #-}
-
--- | Explicit inputs and sealed outputs for the typed module driver.
-module Checking.Module
- ( LiveModuleBinding(..)
- , IdentifiedModuleInput
- , identifiedPhysicalModule
- , identifiedReservedPrelude
- , identifiedModuleOwner
- , identifiedModuleBinding
- , identifiedModuleParsed
- , TypedSourceDeclaration
- , typedSourceDeclarationBlockIndex
- , typedSourceDeclarationHead
- , typedSourceDeclarationProof
- , typedSourceDeclarations
- , SealedTypedModule
- , sealedTypedModuleOwner
- , sealedTypedModuleSyntax
- , sealedTypedModuleSemantic
- , sealedTypedModuleEvidence
- , CachedTypedModuleError(..)
- , renderCachedTypedModuleError
- , cachedSealedTypedModule
- , sealedTypedModulePrefix
- , FinalPreludeSession
- , ModuleRootAcquisition(..)
- , finalPreludeSource
- , finalPreludeInput
- , finalPreludeModule
- , finalPreludeAcquisition
- , FinalPreludeReadiness
- , finalPreludeReadiness
- , BootstrapPreludeFixture
- , bootstrapPreludeInput
- , bootstrapPreludeModule
- , bootstrapPreludeReadiness
- , fixtureFinalPreludeReadinessFromSealed
- , BootstrapError(..)
- , buildBootstrapPreludeFixture
- , FinalPreludeReadinessError(..)
- , acquireFinalPreludeSession
- , TypedModuleInput
- , TypedModuleInputError(..)
- , renderTypedModuleInputError
- , typedModuleInput
- , TypedPathError(..)
- , TypedModuleFailure(..)
- , typedModuleFailureLocation
- , renderTypedModuleFailure
- , TypedModuleResult(..)
- , runTypedModule
- ) where
-
-import Base
-import Checking.Declaration qualified as Declaration
-import Checking.Exact qualified as Exact
-import Checking.Exact.Datatype qualified as ExactDatatype
-import Checking.Exact.Inductive qualified as ExactInductive
-import Checking.Exact.Proof qualified as ExactProof
-import Checking.FinalPrelude qualified as FinalPrelude
-import Checking.Foundation
-import Checking.Identity
-import Checking.Semantic
-import Felix.Module
-import Felix.Parse
-import Felix.Prelude qualified as Prelude
-import Felix.Source
-import Felix.Store qualified as Store
-import Report.Location
-import Syntax.Interface
-import Syntax.Abstract qualified as Raw
-
-import Control.Monad (unless)
-import Data.Bifunctor (first)
-import Data.Text qualified as Text
-
-
-data LiveModuleBinding
- = PhysicalModuleBinding !ResolvedSource
- | ReservedModuleBinding !FileId !FilePath
- deriving stock (Show, Eq)
-
-data IdentifiedModuleInput = IdentifiedModuleInput
- !ModuleName
- !LiveModuleBinding
- !IdentifiedParsedModule
-
-identifiedPhysicalModule :: ParsedModule -> IdentifiedModuleInput
-identifiedPhysicalModule parsed =
- IdentifiedModuleInput
- (moduleName (parsedModuleAddress parsed))
- (PhysicalModuleBinding (parsedModuleResolved parsed))
- (parsedModuleIdentified parsed)
-
-identifiedReservedPrelude
- :: Prelude.ReservedParsedPrelude
- -> IdentifiedModuleInput
-identifiedReservedPrelude reserved =
- IdentifiedModuleInput
- (freshModuleInputOwner input)
- (ReservedModuleBinding
- (freshModuleInputFileId input)
- (freshModuleInputLocationPath input))
- (Prelude.reservedParsedPreludeModule reserved)
- where
- input = Prelude.reservedParsedPreludeInput reserved
-
-identifiedModuleOwner :: IdentifiedModuleInput -> ModuleName
-identifiedModuleOwner (IdentifiedModuleInput owner _binding _parsed) =
- owner
-
-identifiedModuleBinding
- :: IdentifiedModuleInput
- -> LiveModuleBinding
-identifiedModuleBinding
- (IdentifiedModuleInput _owner binding _parsed) =
- binding
-
-identifiedModuleParsed
- :: IdentifiedModuleInput
- -> IdentifiedParsedModule
-identifiedModuleParsed
- (IdentifiedModuleInput _owner _binding parsed) =
- parsed
-
-
--- | One source declaration as consumed by the typed module driver.
---
--- A claim and its immediately following proof occupy one declaration slot.
--- The head block index remains the syntax-occurrence association index.
-data TypedSourceDeclaration = TypedSourceDeclaration
- !Int
- !Raw.Block
- !(Maybe Raw.Proof)
-
-typedSourceDeclarationBlockIndex :: TypedSourceDeclaration -> Int
-typedSourceDeclarationBlockIndex
- (TypedSourceDeclaration blockIndex _head _proof) =
- blockIndex
-
-typedSourceDeclarationHead :: TypedSourceDeclaration -> Raw.Block
-typedSourceDeclarationHead
- (TypedSourceDeclaration _blockIndex headBlock _proof) =
- headBlock
-
-typedSourceDeclarationProof
- :: TypedSourceDeclaration
- -> Maybe Raw.Proof
-typedSourceDeclarationProof
- (TypedSourceDeclaration _blockIndex _head proof) =
- proof
-
-typedSourceDeclarations
- :: IdentifiedParsedModule
- -> [TypedSourceDeclaration]
-typedSourceDeclarations parsed =
- [ declaration
- | item <- typedSourceItems (identifiedParsedModuleBlocks parsed)
- , Just declaration <- [sourceItemDeclaration item]
- ]
-
-data TypedSourceItem
- = TypedSourceDeclarationItem !TypedSourceDeclaration
- | TypedUnmatchedSourceProof !Location
-
-sourceItemDeclaration
- :: TypedSourceItem
- -> Maybe TypedSourceDeclaration
-sourceItemDeclaration = \case
- TypedSourceDeclarationItem declaration -> Just declaration
- TypedUnmatchedSourceProof{} -> Nothing
-
-typedSourceItems :: [Raw.Block] -> [TypedSourceItem]
-typedSourceItems = go 0
- where
- go _blockIndex [] = []
- go blockIndex (block@Raw.BlockClaim{} : remaining) =
- case remaining of
- Raw.BlockProof _location proof _end : rest ->
- TypedSourceDeclarationItem
- (TypedSourceDeclaration blockIndex block (Just proof))
- : go (blockIndex + 2) rest
- _ ->
- TypedSourceDeclarationItem
- (TypedSourceDeclaration blockIndex block Nothing)
- : go (blockIndex + 1) remaining
- go blockIndex (Raw.BlockProof location _proof _end : remaining) =
- TypedUnmatchedSourceProof location
- : go (blockIndex + 1) remaining
- go blockIndex (block : remaining) =
- TypedSourceDeclarationItem
- (TypedSourceDeclaration blockIndex block Nothing)
- : go (blockIndex + 1) remaining
-
-
-data SealedTypedModule = SealedTypedModule
- !ModuleName
- !ModuleSyntaxInterface
- !SemanticInterface
- !Declaration.PendingModulePrefix
- !Declaration.ImportedModuleEvidence
-
-sealedTypedModuleOwner :: SealedTypedModule -> ModuleName
-sealedTypedModuleOwner (SealedTypedModule owner _syntax _semantic _prefix _evidence) =
- owner
-
-sealedTypedModuleSyntax
- :: SealedTypedModule
- -> ModuleSyntaxInterface
-sealedTypedModuleSyntax
- (SealedTypedModule _owner syntax _semantic _prefix _evidence) =
- syntax
-
-sealedTypedModuleSemantic
- :: SealedTypedModule
- -> SemanticInterface
-sealedTypedModuleSemantic
- (SealedTypedModule _owner _syntax semantic _prefix _evidence) =
- semantic
-
-sealedTypedModulePrefix
- :: SealedTypedModule
- -> Declaration.PendingModulePrefix
-sealedTypedModulePrefix
- (SealedTypedModule _owner _syntax _semantic prefix _evidence) =
- prefix
-
-sealedTypedModuleEvidence
- :: SealedTypedModule
- -> Declaration.ImportedModuleEvidence
-sealedTypedModuleEvidence
- (SealedTypedModule _owner _syntax _semantic _prefix evidence) =
- evidence
-
-data CachedTypedModuleError
- = CachedTypedModuleEvidenceError !Declaration.DeclarationError
- deriving stock (Show, Eq)
-
-renderCachedTypedModuleError :: CachedTypedModuleError -> Text
-renderCachedTypedModuleError = \case
- CachedTypedModuleEvidenceError failure ->
- Declaration.renderDeclarationError failure
-
-cachedSealedTypedModule
- :: CheckedFoundation
- -> [SealedTypedModule]
- -> Store.CachedModuleInstallation
- -> Either CachedTypedModuleError SealedTypedModule
-cachedSealedTypedModule
- foundation parents installation = do
- evidence <-
- first CachedTypedModuleEvidenceError
- (Declaration.validateImportedModuleEvidence
- (theoryId foundation)
- (sealedTypedModuleEvidence <$> parents)
- semantic
- objects
- propositions)
- pure
- (SealedTypedModule
- owner
- syntax
- semantic
- (Declaration.emptyPendingModulePrefix
- (Store.cachedInstallationFinalPrefix installation))
- evidence)
- where
- syntax = Store.cachedInstallationSyntax installation
- semantic = Store.cachedInstallationSemantic installation
- owner = semanticInterfaceOwner semantic
- objects = Store.cachedInstallationObjects installation
- propositions = Store.cachedInstallationPropositions installation
-
-
-data ModuleRootAcquisition
- = ModuleRootHit
- | ModuleRootMiss
- deriving stock (Show, Eq)
-
-data FinalPreludeSession = FinalPreludeSession
- !Prelude.ReservedPreludeSourceInput
- !IdentifiedModuleInput
- !SealedTypedModule
- !ModuleRootAcquisition
-
-finalPreludeSource
- :: FinalPreludeSession
- -> Prelude.ReservedPreludeSourceInput
-finalPreludeSource
- (FinalPreludeSession source _input _module _acquisition) =
- source
-
-finalPreludeInput
- :: FinalPreludeSession
- -> IdentifiedModuleInput
-finalPreludeInput (FinalPreludeSession _source input _module _acquisition) =
- input
-
-finalPreludeModule
- :: FinalPreludeSession
- -> SealedTypedModule
-finalPreludeModule (FinalPreludeSession _source _input sealed _acquisition) =
- sealed
-
-finalPreludeAcquisition
- :: FinalPreludeSession
- -> ModuleRootAcquisition
-finalPreludeAcquisition
- (FinalPreludeSession _source _input _sealed acquisition) =
- acquisition
-
-newtype FinalPreludeReadiness = FinalPreludeReadiness
- SealedTypedModule
-
-finalPreludeReadiness
- :: FinalPreludeSession
- -> FinalPreludeReadiness
-finalPreludeReadiness =
- FinalPreludeReadiness . finalPreludeModule
-
--- | Test-only empty-prelude fixture.
---
--- It is exported for focused exact-compiler tests. Production acquisition is
--- exclusively 'acquireFinalPreludeSession'.
-newtype BootstrapPreludeFixture = BootstrapPreludeFixture
- FinalPreludeSession
-
-bootstrapPreludeInput
- :: BootstrapPreludeFixture
- -> IdentifiedModuleInput
-bootstrapPreludeInput (BootstrapPreludeFixture fixture) =
- finalPreludeInput fixture
-
-bootstrapPreludeModule
- :: BootstrapPreludeFixture
- -> SealedTypedModule
-bootstrapPreludeModule (BootstrapPreludeFixture fixture) =
- finalPreludeModule fixture
-
--- | Test-only seam for the empty bootstrap compiler input.
-bootstrapPreludeReadiness
- :: BootstrapPreludeFixture
- -> FinalPreludeReadiness
-bootstrapPreludeReadiness =
- FinalPreludeReadiness . bootstrapPreludeModule
-
--- | Test-only seam for exercising a synthetic distinguished prelude.
-fixtureFinalPreludeReadinessFromSealed
- :: SealedTypedModule
- -> FinalPreludeReadiness
-fixtureFinalPreludeReadinessFromSealed =
- FinalPreludeReadiness
-
-data BootstrapError
- = BootstrapParseFailed !Prelude.PreludeParseError
- | BootstrapDriverOpenFailed !Declaration.DriverOpenError
- | BootstrapDeclarationFailed !Declaration.DeclarationError
- | BootstrapSealFailed !SemanticInterfaceError
- deriving stock (Show)
-
--- | Construct the empty distinguished prelude used only by compiler fixtures.
-buildBootstrapPreludeFixture
- :: CheckedFoundation
- -> Declaration.VampireResolver
- -> IO (Either BootstrapError BootstrapPreludeFixture)
-buildBootstrapPreludeFixture foundation resolver = do
- parsedResult <-
- Prelude.parseReservedPreludeSource
- Prelude.emptyBootstrapSourceInput
- case parsedResult of
- Left err ->
- pure (Left (BootstrapParseFailed err))
- Right reserved -> do
- let input = identifiedReservedPrelude reserved
- syntax =
- identifiedParsedModuleSyntaxInterface
- (identifiedModuleParsed input)
- driver <-
- Declaration.runModuleDriver
- foundation
- preludeModuleName
- []
- resolver
- Declaration.FreshValidation
- emptyDriver
- pure case driver of
- Left err ->
- Left (BootstrapDriverOpenFailed err)
- Right (Declaration.DriverSucceeded
- () semantic prefix _closure) ->
- Right
- (BootstrapPreludeFixture
- (FinalPreludeSession
- Prelude.emptyBootstrapSourceInput
- input
- (SealedTypedModule
- preludeModuleName
- syntax
- semantic
- prefix
- (Declaration.freshImportedModuleEvidence
- []
- semantic
- prefix))
- ModuleRootMiss))
- Right
- (Declaration.DriverFailed
- (Declaration.DriverDeclarationFailed err)
- _prefix) ->
- Left (BootstrapDeclarationFailed err)
- Right (Declaration.DriverSealFailed err _prefix) ->
- Left (BootstrapSealFailed err)
- where
- emptyDriver :: Declaration.ModuleDriver Void ()
- emptyDriver = pure ()
-
-
-data FinalPreludeReadinessError
- = FinalPreludeReadinessSourceLoadFailed !Prelude.PreludeLoadError
- | FinalPreludeReadinessSourceParseFailed !Prelude.PreludeParseError
- | FinalPreludeReadinessBuildFailed !FinalPrelude.FinalPreludeFailure
- | FinalPreludeReadinessBuildOpenFailed !Declaration.DriverOpenError
- | FinalPreludeReadinessArtifactKeyFailed !ModuleArtifactKeyError
- | FinalPreludeReadinessStoreFailed !Store.StoreFailure
- | FinalPreludeReadinessCachedModuleFailed !CachedTypedModuleError
- | FinalPreludeReadinessAcknowledgementMismatch
- !ModuleArtifactResult
- !ModuleArtifactResult
- deriving stock (Show)
-
--- | Acquire the exact packaged final prelude through its ordinary module root.
---
--- Loading and parsing happen once before the root lookup. A hit is validated
--- and materialized through the generic cached-module boundary; a miss reuses
--- that parsed input for confined construction and atomic publication.
-acquireFinalPreludeSession
- :: Store.StoreMemo
- -> Store.Store
- -> CheckedFoundation
- -> Declaration.VampireResolver
- -> IO (Either FinalPreludeReadinessError FinalPreludeSession)
-acquireFinalPreludeSession memo store foundation resolver =
- Prelude.loadReservedPreludeSourceInput >>= \case
- Left failure ->
- pure (Left (FinalPreludeReadinessSourceLoadFailed failure))
- Right source ->
- Prelude.parseReservedPreludeSource source >>= \case
- Left failure ->
- pure (Left (FinalPreludeReadinessSourceParseFailed failure))
- Right parsed ->
- acquire source parsed
- where
- acquire source parsed =
- case moduleArtifactKey
- preludeModuleName
- parsedId
- []
- (theoryId foundation) of
- Left failure ->
- pure (Left (FinalPreludeReadinessArtifactKeyFailed failure))
- Right key -> do
- Store.loadCachedModuleInstallation
- memo store key (moduleSyntaxAssertedId syntax) >>= \case
- Left failure ->
- pure (Left (FinalPreludeReadinessStoreFailed failure))
- Right (Just installation) ->
- pure do
- sealed <- first FinalPreludeReadinessCachedModuleFailed
- (cachedSealedTypedModule
- foundation [] installation)
- pure
- (FinalPreludeSession
- source
- identified sealed ModuleRootHit)
- Right Nothing ->
- build source parsed key
- where
- identified = identifiedReservedPrelude parsed
- parsedId = identifiedParsedModuleId (identifiedModuleParsed identified)
- syntax = identifiedParsedModuleSyntaxInterface
- (identifiedModuleParsed identified)
-
- build source parsed key =
- FinalPrelude.buildParsedFinalPreludeCandidate
- foundation parsed resolver >>= \case
- FinalPrelude.FinalPreludeBuildFailed failure _prefix ->
- pure (Left (FinalPreludeReadinessBuildFailed failure))
- FinalPrelude.FinalPreludeBuildOpenFailed failure ->
- pure (Left (FinalPreludeReadinessBuildOpenFailed failure))
- FinalPrelude.FinalPreludeBuilt candidate ->
- publish source key candidate
- FinalPrelude.FinalPreludeSourceLoadFailed failure ->
- pure (Left (FinalPreludeReadinessSourceLoadFailed failure))
- FinalPrelude.FinalPreludeSourceParseFailed failure ->
- pure (Left (FinalPreludeReadinessSourceParseFailed failure))
-
- publish source key candidate = do
- let parsed = FinalPrelude.finalPreludeParsed candidate
- identified = identifiedReservedPrelude parsed
- syntax = FinalPrelude.finalPreludeSyntax candidate
- semantic = FinalPrelude.finalPreludeSemantic candidate
- prefix = FinalPrelude.finalPreludePrefix candidate
- artifact =
- moduleArtifactResult
- key
- (moduleSyntaxAssertedId syntax)
- (semanticInterfaceAssertedId semantic)
- Store.writeSealedModule
- store
- prefix
- [syntax]
- [semantic]
- artifact >>= \case
- Left failure ->
- pure (Left (FinalPreludeReadinessStoreFailed failure))
- Right acknowledged
- | acknowledged /= artifact ->
- pure
- (Left
- (FinalPreludeReadinessAcknowledgementMismatch
- artifact
- acknowledged))
- | otherwise ->
- pure
- (Right
- (FinalPreludeSession
- source
- identified
- (SealedTypedModule
- preludeModuleName
- syntax
- semantic
- prefix
- (Declaration.freshImportedModuleEvidence
- []
- semantic
- prefix))
- ModuleRootMiss))
-
-
-data TypedModuleInput = TypedModuleInput
- !ModuleName
- !IdentifiedModuleInput
- !ModuleSyntaxInterface
- !CheckedFoundation
- !FinalPreludeReadiness
- ![SealedTypedModule]
- !Declaration.VampireResolver
- !Declaration.ValidationRun
-
-data TypedModuleInputError
- = TypedDirectModuleMismatch ![ModuleName] ![ModuleName]
- | TypedSyntaxInputMismatch ![SyntaxInterfaceId] ![SyntaxInterfaceId]
- deriving stock (Show, Eq)
-
-renderTypedModuleInputError :: TypedModuleInputError -> Text
-renderTypedModuleInputError = \case
- TypedDirectModuleMismatch expected actual ->
- "direct module inputs differ: expected " <> shown expected
- <> ", found " <> shown actual
- TypedSyntaxInputMismatch expected actual ->
- "direct syntax inputs differ: expected " <> shown expected
- <> ", found " <> shown actual
- where
- shown :: Show value => value -> Text
- shown = Text.pack . show
-
-typedModuleInput
- :: CheckedFoundation
- -> FinalPreludeReadiness
- -> Declaration.VampireResolver
- -> Declaration.ValidationRun
- -> ParsedModule
- -> [SealedTypedModule]
- -> Either TypedModuleInputError TypedModuleInput
-typedModuleInput
- foundation readiness resolver validationRun parsed direct = do
- unless (expectedOwners == actualOwners)
- (Left
- (TypedDirectModuleMismatch
- expectedOwners
- actualOwners))
- unless (expectedSyntax == actualSyntax)
- (Left
- (TypedSyntaxInputMismatch
- expectedSyntax
- actualSyntax))
- pure
- (TypedModuleInput
- owner
- identified
- syntax
- foundation
- readiness
- direct
- resolver
- validationRun)
- where
- identified = identifiedPhysicalModule parsed
- owner = identifiedModuleOwner identified
- syntax = identifiedParsedModuleSyntaxInterface (identifiedModuleParsed identified)
- expectedOwners =
- moduleName
- <$> nubOrd
- (parsedImportedAddress
- <$> parsedModuleImports parsed)
- actualOwners = sealedTypedModuleOwner <$> direct
- expectedSyntax =
- nubOrd
- ( moduleSyntaxAssertedId
- (sealedTypedModuleSyntax prelude)
- : ( moduleSyntaxAssertedId
- . sealedTypedModuleSyntax
- <$> direct
- )
- )
- actualSyntax = moduleSyntaxDirectInputs syntax
- FinalPreludeReadiness prelude = readiness
-
-data TypedPathError
- = TypedExactCompileFailed !Exact.ExactCompileError
- | TypedExactDatatypeFailed !ExactDatatype.ExactDatatypeError
- | TypedExactInductiveFailed !ExactInductive.ExactInductiveError
- | TypedExactProofFailed !ExactProof.ExactProofError
- | TypedUnmatchedProof !Location
- deriving stock (Show, Eq)
-
-data TypedModuleFailure
- = TypedDeclarationFailed !Declaration.DeclarationError
- | TypedActionFailed !TypedPathError
- | TypedSealFailed !SemanticInterfaceError
- deriving stock (Show, Eq)
-
-typedModuleFailureLocation :: TypedModuleFailure -> Maybe Location
-typedModuleFailureLocation = \case
- TypedActionFailed (TypedExactCompileFailed failure) ->
- Just (Exact.exactCompileErrorLocation failure)
- TypedActionFailed (TypedExactDatatypeFailed failure) ->
- Just (ExactDatatype.exactDatatypeErrorLocation failure)
- TypedActionFailed (TypedExactInductiveFailed failure) ->
- Just (ExactInductive.exactInductiveErrorLocation failure)
- TypedActionFailed (TypedExactProofFailed failure) ->
- Just (ExactProof.exactProofErrorLocation failure)
- TypedActionFailed (TypedUnmatchedProof location) ->
- Just location
- TypedDeclarationFailed failure ->
- Declaration.declarationErrorLocation failure
- TypedSealFailed{} ->
- Nothing
-
-renderTypedModuleFailure :: TypedModuleFailure -> Text
-renderTypedModuleFailure = \case
- TypedDeclarationFailed failure ->
- Declaration.renderDeclarationError failure
- TypedActionFailed (TypedExactCompileFailed failure) ->
- Exact.renderExactCompileError failure
- TypedActionFailed (TypedExactDatatypeFailed failure) ->
- ExactDatatype.renderExactDatatypeError failure
- TypedActionFailed (TypedExactInductiveFailed failure) ->
- ExactInductive.renderExactInductiveError failure
- TypedActionFailed (TypedExactProofFailed failure) ->
- ExactProof.renderExactProofError failure
- TypedActionFailed (TypedUnmatchedProof location) ->
- locationToText location
- <> ": this proof does not follow a claim"
- TypedSealFailed failure ->
- renderSemanticInterfaceError failure
-
-data TypedModuleResult
- = TypedModuleOpenFailed !Declaration.DriverOpenError
- | TypedModuleSucceeded !SealedTypedModule
- | TypedModuleFailed
- !TypedModuleFailure
- !Declaration.PendingModulePrefix
-
-data PlannedTypedDeclaration
- = PlannedBinding
- !(Declaration.PlannedDeclaration
- Exact.CheckedExactBindingAuthorization)
- | PlannedSourceAxiom
- !(Declaration.PlannedDeclaration ())
- | PlannedInductive
- !(Declaration.PlannedDeclaration
- ExactInductive.CheckedExactInductiveAuthorization)
- | PlannedDatatype
- !(Declaration.PlannedDeclaration
- ExactDatatype.CheckedExactDatatypeAuthorization)
- | PlannedStructure
- !(Declaration.PlannedDeclaration
- Exact.CheckedExactStructureAuthorization)
- | PlannedProof
- !(Declaration.PlannedDeclaration
- ExactProof.CheckedExactProofAuthorization)
-
-data TypedPlanningFailure
- = TypedPlanningPathFailure !TypedPathError
- | TypedPlanningDeclarationFailure !Declaration.DeclarationError
-
-data TypedModulePlan = TypedModulePlan
- ![PlannedTypedDeclaration]
- !(Maybe TypedPlanningFailure)
-
-runTypedModule :: TypedModuleInput -> IO TypedModuleResult
-runTypedModule
- (TypedModuleInput
- owner identified syntax foundation readiness direct resolver
- validationRun) = do
- let FinalPreludeReadiness prelude = readiness
- action = do
- traverse_
- (Declaration.importSealedModuleDriver
- . sealedTypedModuleEvidence)
- effectiveDirect
- TypedModulePlan planned terminal <-
- Declaration.runProspectiveLoweringDriver
- (planSourceItems []
- (typedSourceItems
- (identifiedParsedModuleBlocks
- (identifiedModuleParsed identified))))
- traverse_ admitPlannedDeclaration planned
- traverse_ failPlanning terminal
- semanticDirect =
- semanticInterfaceAssertedId
- (sealedTypedModuleSemantic prelude)
- : ( semanticInterfaceAssertedId
- . sealedTypedModuleSemantic
- <$> direct
- )
- effectiveDirect =
- prelude : direct
- occurrences =
- identifiedParsedModuleSyntaxOccurrences
- (identifiedModuleParsed identified)
- planSourceItems completed [] =
- pure (TypedModulePlan (reverse completed) Nothing)
- planSourceItems completed (item : remaining) =
- case item of
- TypedUnmatchedSourceProof location ->
- pure
- (TypedModulePlan
- (reverse completed)
- (Just
- (TypedPlanningPathFailure
- (TypedUnmatchedProof location))))
- TypedSourceDeclarationItem declaration -> do
- planDeclaration declaration >>= \case
- Left failure ->
- pure
- (TypedModulePlan
- (reverse completed)
- (Just failure))
- Right planned ->
- planSourceItems (planned : completed) remaining
-
- planDeclaration sourceDeclaration =
- case block of
- Raw.BlockClaim{} ->
- planClaim block explicitProof
- Raw.BlockProof{} ->
- impossible
- "typed declaration association retained a proof head"
- Raw.BlockSig{} ->
- planSelected block
- Raw.BlockAbbr{} ->
- planSelected block
- Raw.BlockDefn{} ->
- planSelected block
- Raw.BlockAxiom{} ->
- planSourceAxiom block
- Raw.BlockInductive{} ->
- planInductive block
- Raw.BlockData{} ->
- planDatatype block
- Raw.BlockStruct{} ->
- planStructure block
- where
- blockIndex =
- typedSourceDeclarationBlockIndex sourceDeclaration
- block = typedSourceDeclarationHead sourceDeclaration
- explicitProof =
- typedSourceDeclarationProof sourceDeclaration
-
- planSelected selected = do
- prepared <-
- Exact.prepareExactDeclaration
- selected
- [ parsedSyntaxOccurrenceEntry occurrence
- | occurrence <- occurrences
- , parsedSyntaxOccurrenceBlockIndex occurrence
- == blockIndex
- ]
- case prepared of
- Left failure ->
- pure
- (Left
- (TypedPlanningPathFailure
- (TypedExactCompileFailed failure)))
- Right declaration -> do
- Exact.lowerPreparedExactBinding declaration >>= \case
- Left failure -> planningDeclarationFailure failure
- Right checked ->
- planChecked PlannedBinding checked
-
- planSourceAxiom selected = do
- prepared <- Exact.prepareExactSourceAxiom selected
- case prepared of
- Left failure ->
- pure
- (Left
- (TypedPlanningPathFailure
- (TypedExactCompileFailed failure)))
- Right axiom -> do
- Exact.lowerPreparedExactSourceAxiom axiom >>= \case
- Left failure -> planningDeclarationFailure failure
- Right checked ->
- planChecked PlannedSourceAxiom checked
-
- planInductive selected = do
- prepared <-
- ExactInductive.prepareExactInductive
- foundation
- selected
- [ parsedSyntaxOccurrenceEntry occurrence
- | occurrence <- occurrences
- , parsedSyntaxOccurrenceBlockIndex occurrence
- == blockIndex
- ]
- case prepared of
- Left failure ->
- pure
- (Left
- (TypedPlanningPathFailure
- (TypedExactInductiveFailed failure)))
- Right inductive -> do
- ExactInductive.lowerPreparedExactInductive inductive
- >>= \case
- Left failure ->
- planningDeclarationFailure failure
- Right checked ->
- planChecked PlannedInductive checked
-
- planDatatype selected = do
- prepared <-
- ExactDatatype.prepareExactDatatype
- selected
- [ ( parsedSyntaxOccurrenceLocation occurrence
- , parsedSyntaxOccurrenceMarker occurrence
- , parsedSyntaxOccurrenceEntry occurrence
- )
- | occurrence <- occurrences
- , parsedSyntaxOccurrenceBlockIndex occurrence
- == blockIndex
- ]
- case prepared of
- Left failure ->
- pure
- (Left
- (TypedPlanningPathFailure
- (TypedExactDatatypeFailed failure)))
- Right datatype -> do
- ExactDatatype.lowerPreparedExactDatatype datatype
- >>= \case
- Left failure ->
- planningDeclarationFailure failure
- Right checked ->
- planChecked PlannedDatatype checked
-
- planStructure selected = do
- prepared <-
- Exact.prepareExactStructure
- selected
- [ parsedSyntaxOccurrenceEntry occurrence
- | occurrence <- occurrences
- , parsedSyntaxOccurrenceBlockIndex occurrence
- == blockIndex
- ]
- case prepared of
- Left failure ->
- pure
- (Left
- (TypedPlanningPathFailure
- (TypedExactCompileFailed failure)))
- Right structure -> do
- Exact.lowerPreparedExactStructure structure >>= \case
- Left failure -> planningDeclarationFailure failure
- Right checked ->
- planChecked PlannedStructure checked
-
- planClaim selected selectedProof = do
- prepared <-
- ExactProof.prepareExactProof selected selectedProof
- case prepared of
- Left failure ->
- pure
- (Left
- (TypedPlanningPathFailure
- (TypedExactProofFailed failure)))
- Right proof -> do
- ExactProof.lowerPreparedExactProof proof >>= \case
- Left failure -> planningDeclarationFailure failure
- Right checked ->
- planChecked PlannedProof checked
-
- planChecked
- :: forall body.
- (Declaration.PlannedDeclaration body
- -> PlannedTypedDeclaration)
- -> Declaration.CheckedDeclaration body
- -> Declaration.LoweringDriver
- (Either TypedPlanningFailure PlannedTypedDeclaration)
- planChecked constructor checked =
- Declaration.planCheckedDeclaration checked >>= \case
- Left failure -> planningDeclarationFailure failure
- Right planned -> pure (Right (constructor planned))
-
- planningDeclarationFailure =
- pure . Left . TypedPlanningDeclarationFailure
-
- admitPlannedDeclaration = \case
- PlannedBinding planned ->
- void
- (Declaration.admitPlannedCheckedDeclaration
- planned Exact.authorizeCheckedExactBinding)
- PlannedSourceAxiom planned ->
- void
- (Declaration.admitPlannedCheckedDeclaration
- planned Exact.authorizeCheckedExactSourceAxiom)
- PlannedInductive planned ->
- void
- (Declaration.admitPlannedCheckedDeclaration
- planned
- ExactInductive.authorizeCheckedExactInductive)
- PlannedDatatype planned ->
- void
- (Declaration.admitPlannedCheckedDeclaration
- planned ExactDatatype.authorizeCheckedExactDatatype)
- PlannedStructure planned ->
- void
- (Declaration.admitPlannedCheckedDeclaration
- planned Exact.authorizeCheckedExactStructure)
- PlannedProof planned ->
- void
- (Declaration.admitPlannedCheckedDeclaration
- planned ExactProof.authorizeCheckedExactProof)
-
- failPlanning = \case
- TypedPlanningPathFailure failure ->
- Declaration.failModuleDriver failure
- TypedPlanningDeclarationFailure failure ->
- Declaration.failDeclarationDriver failure
- result <-
- Declaration.runModuleDriver
- foundation
- owner
- semanticDirect
- resolver
- validationRun
- action
- pure case result of
- Left err ->
- TypedModuleOpenFailed err
- Right (Declaration.DriverSucceeded () semantic prefix _closure) ->
- TypedModuleSucceeded
- (SealedTypedModule
- owner
- syntax
- semantic
- prefix
- (Declaration.freshImportedModuleEvidence
- (sealedTypedModuleEvidence <$> effectiveDirect)
- semantic
- prefix))
- Right
- (Declaration.DriverFailed failure prefix) ->
- TypedModuleFailed
- (case failure of
- Declaration.DriverDeclarationFailed err ->
- TypedDeclarationFailed err
- Declaration.DriverActionFailed err ->
- TypedActionFailed err)
- prefix
- Right (Declaration.DriverSealFailed err prefix) ->
- TypedModuleFailed (TypedSealFailed err) prefix