module Hix.Managed.Data.StageState where import Hix.Managed.Data.Initial (Initial (Initial)) import Hix.Managed.Data.Mutable (MutableDep) import qualified Hix.Managed.Data.MutableId import Hix.Managed.Data.MutableId (MutableId (MutableId)) import Hix.Managed.Data.Mutation (DepMutation) import Hix.Managed.Data.MutationState (MutationState) data BuildStatus = Success | Failure deriving stock (BuildStatus -> BuildStatus -> Bool (BuildStatus -> BuildStatus -> Bool) -> (BuildStatus -> BuildStatus -> Bool) -> Eq BuildStatus forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: BuildStatus -> BuildStatus -> Bool == :: BuildStatus -> BuildStatus -> Bool $c/= :: BuildStatus -> BuildStatus -> Bool /= :: BuildStatus -> BuildStatus -> Bool Eq, Int -> BuildStatus -> ShowS [BuildStatus] -> ShowS BuildStatus -> String (Int -> BuildStatus -> ShowS) -> (BuildStatus -> String) -> ([BuildStatus] -> ShowS) -> Show BuildStatus forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> BuildStatus -> ShowS showsPrec :: Int -> BuildStatus -> ShowS $cshow :: BuildStatus -> String show :: BuildStatus -> String $cshowList :: [BuildStatus] -> ShowS showList :: [BuildStatus] -> ShowS Show, (forall x. BuildStatus -> Rep BuildStatus x) -> (forall x. Rep BuildStatus x -> BuildStatus) -> Generic BuildStatus forall x. Rep BuildStatus x -> BuildStatus forall x. BuildStatus -> Rep BuildStatus x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. BuildStatus -> Rep BuildStatus x from :: forall x. BuildStatus -> Rep BuildStatus x $cto :: forall x. Rep BuildStatus x -> BuildStatus to :: forall x. Rep BuildStatus x -> BuildStatus Generic) justSuccess :: a -> BuildStatus -> Maybe a justSuccess :: forall a. a -> BuildStatus -> Maybe a justSuccess a a = \case BuildStatus Success -> a -> Maybe a forall a. a -> Maybe a Just a a BuildStatus Failure -> Maybe a forall a. Maybe a Nothing data BuildResult = Finished BuildStatus | TimedOut deriving stock (BuildResult -> BuildResult -> Bool (BuildResult -> BuildResult -> Bool) -> (BuildResult -> BuildResult -> Bool) -> Eq BuildResult forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: BuildResult -> BuildResult -> Bool == :: BuildResult -> BuildResult -> Bool $c/= :: BuildResult -> BuildResult -> Bool /= :: BuildResult -> BuildResult -> Bool Eq, Int -> BuildResult -> ShowS [BuildResult] -> ShowS BuildResult -> String (Int -> BuildResult -> ShowS) -> (BuildResult -> String) -> ([BuildResult] -> ShowS) -> Show BuildResult forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> BuildResult -> ShowS showsPrec :: Int -> BuildResult -> ShowS $cshow :: BuildResult -> String show :: BuildResult -> String $cshowList :: [BuildResult] -> ShowS showList :: [BuildResult] -> ShowS Show, (forall x. BuildResult -> Rep BuildResult x) -> (forall x. Rep BuildResult x -> BuildResult) -> Generic BuildResult forall x. Rep BuildResult x -> BuildResult forall x. BuildResult -> Rep BuildResult x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. BuildResult -> Rep BuildResult x from :: forall x. BuildResult -> Rep BuildResult x $cto :: forall x. Rep BuildResult x -> BuildResult to :: forall x. Rep BuildResult x -> BuildResult Generic) buildUnsuccessful :: BuildResult -> Bool buildUnsuccessful :: BuildResult -> Bool buildUnsuccessful = \case Finished BuildStatus Success -> Bool False Finished BuildStatus Failure -> Bool True BuildResult TimedOut -> Bool True buildStatus :: BuildResult -> BuildStatus buildStatus :: BuildResult -> BuildStatus buildStatus = \case Finished BuildStatus s -> BuildStatus s BuildResult TimedOut -> BuildStatus Failure data BuildSuccess = CandidateBuilt MutableId | Unmodified MutableDep deriving stock (BuildSuccess -> BuildSuccess -> Bool (BuildSuccess -> BuildSuccess -> Bool) -> (BuildSuccess -> BuildSuccess -> Bool) -> Eq BuildSuccess forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: BuildSuccess -> BuildSuccess -> Bool == :: BuildSuccess -> BuildSuccess -> Bool $c/= :: BuildSuccess -> BuildSuccess -> Bool /= :: BuildSuccess -> BuildSuccess -> Bool Eq, Int -> BuildSuccess -> ShowS [BuildSuccess] -> ShowS BuildSuccess -> String (Int -> BuildSuccess -> ShowS) -> (BuildSuccess -> String) -> ([BuildSuccess] -> ShowS) -> Show BuildSuccess forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> BuildSuccess -> ShowS showsPrec :: Int -> BuildSuccess -> ShowS $cshow :: BuildSuccess -> String show :: BuildSuccess -> String $cshowList :: [BuildSuccess] -> ShowS showList :: [BuildSuccess] -> ShowS Show, (forall x. BuildSuccess -> Rep BuildSuccess x) -> (forall x. Rep BuildSuccess x -> BuildSuccess) -> Generic BuildSuccess forall x. Rep BuildSuccess x -> BuildSuccess forall x. BuildSuccess -> Rep BuildSuccess x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. BuildSuccess -> Rep BuildSuccess x from :: forall x. BuildSuccess -> Rep BuildSuccess x $cto :: forall x. Rep BuildSuccess x -> BuildSuccess to :: forall x. Rep BuildSuccess x -> BuildSuccess Generic) buildSuccessPackage :: BuildSuccess -> MutableDep buildSuccessPackage :: BuildSuccess -> MutableDep buildSuccessPackage = \case CandidateBuilt MutableId {MutableDep name :: MutableDep $sel:name:MutableId :: MutableId -> MutableDep name} -> MutableDep name Unmodified MutableDep name -> MutableDep name modifiedCandidates :: [BuildSuccess] -> [MutableId] modifiedCandidates :: [BuildSuccess] -> [MutableId] modifiedCandidates = (BuildSuccess -> Maybe MutableId) -> [BuildSuccess] -> [MutableId] forall a b. (a -> Maybe b) -> [a] -> [b] mapMaybe \case CandidateBuilt MutableId candidate -> MutableId -> Maybe MutableId forall a. a -> Maybe a Just MutableId candidate Unmodified MutableDep _ -> Maybe MutableId forall a. Maybe a Nothing data StageState a s = StageState { forall a s. StageState a s -> Map MutableDep BuildSuccess success :: Map MutableDep BuildSuccess, forall a s. StageState a s -> [DepMutation a] failed :: [DepMutation a], forall a s. StageState a s -> MutationState state :: MutationState, forall a s. StageState a s -> Natural iterations :: Natural, forall a s. StageState a s -> s ext :: s } deriving stock (StageState a s -> StageState a s -> Bool (StageState a s -> StageState a s -> Bool) -> (StageState a s -> StageState a s -> Bool) -> Eq (StageState a s) forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a forall a s. (Eq a, Eq s) => StageState a s -> StageState a s -> Bool $c== :: forall a s. (Eq a, Eq s) => StageState a s -> StageState a s -> Bool == :: StageState a s -> StageState a s -> Bool $c/= :: forall a s. (Eq a, Eq s) => StageState a s -> StageState a s -> Bool /= :: StageState a s -> StageState a s -> Bool Eq, Int -> StageState a s -> ShowS [StageState a s] -> ShowS StageState a s -> String (Int -> StageState a s -> ShowS) -> (StageState a s -> String) -> ([StageState a s] -> ShowS) -> Show (StageState a s) forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a forall a s. (Show a, Show s) => Int -> StageState a s -> ShowS forall a s. (Show a, Show s) => [StageState a s] -> ShowS forall a s. (Show a, Show s) => StageState a s -> String $cshowsPrec :: forall a s. (Show a, Show s) => Int -> StageState a s -> ShowS showsPrec :: Int -> StageState a s -> ShowS $cshow :: forall a s. (Show a, Show s) => StageState a s -> String show :: StageState a s -> String $cshowList :: forall a s. (Show a, Show s) => [StageState a s] -> ShowS showList :: [StageState a s] -> ShowS Show) initStageState :: Initial MutationState -> s -> StageState a s initStageState :: forall s a. Initial MutationState -> s -> StageState a s initStageState (Initial MutationState state) s ext = StageState {$sel:success:StageState :: Map MutableDep BuildSuccess success = [], $sel:failed:StageState :: [DepMutation a] failed = [], $sel:iterations:StageState :: Natural iterations = Natural 0, s MutationState $sel:state:StageState :: MutationState $sel:ext:StageState :: s state :: MutationState ext :: s ..}