module Hix.Managed.StageState where import qualified Data.Map.Strict as Map import qualified Hix.Managed.Data.MutableId import qualified Hix.Managed.Data.Mutation import Hix.Managed.Data.Mutation (DepMutation, MutationResult (..)) import Hix.Managed.Data.StageState (BuildSuccess (CandidateBuilt, Unmodified), StageState (..)) updateStageState :: StageState a s -> DepMutation a -> MutationResult s -> StageState a s updateStageState :: forall a s. StageState a s -> DepMutation a -> MutationResult s -> StageState a s updateStageState StageState a s old DepMutation a mutation = \case MutationSuccess MutableId candidate Bool changed MutationState state s ext -> StageState a s old { $sel:success:StageState :: Map MutableDep BuildSuccess success = MutableDep -> BuildSuccess -> Map MutableDep BuildSuccess -> Map MutableDep BuildSuccess forall k a. Ord k => k -> a -> Map k a -> Map k a Map.insert MutableId candidate.name BuildSuccess buildSuccess StageState a s old.success, MutationState state :: MutationState $sel:state:StageState :: MutationState state, s ext :: s $sel:ext:StageState :: s ext } where buildSuccess :: BuildSuccess buildSuccess | Bool changed = MutableId -> BuildSuccess CandidateBuilt MutableId candidate | Bool otherwise = MutableDep -> BuildSuccess Unmodified DepMutation a mutation.package MutationResult s MutationKeep -> StageState a s old {$sel:success:StageState :: Map MutableDep BuildSuccess success = MutableDep -> BuildSuccess -> Map MutableDep BuildSuccess -> Map MutableDep BuildSuccess forall k a. Ord k => k -> a -> Map k a -> Map k a Map.insert DepMutation a mutation.package (MutableDep -> BuildSuccess Unmodified DepMutation a mutation.package) StageState a s old.success} MutationResult s MutationFailed -> StageState a s old {$sel:failed:StageState :: [DepMutation a] failed = DepMutation a mutation DepMutation a -> [DepMutation a] -> [DepMutation a] forall a. a -> [a] -> [a] : StageState a s old.failed}