module Hix.Managed.Lower.Data.LowerMode where

import Hix.Managed.Cabal.Data.SolverState (SolverState)
import Hix.Managed.Data.Mutation (MutationResult (MutationFailed, MutationKeep))

data LowerMode =
  LowerMode {
    LowerMode -> Bool
firstSuccess :: Bool,
    LowerMode -> MutationResult SolverState
noSuccess :: MutationResult SolverState
  }
  deriving stock (LowerMode -> LowerMode -> Bool
(LowerMode -> LowerMode -> Bool)
-> (LowerMode -> LowerMode -> Bool) -> Eq LowerMode
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: LowerMode -> LowerMode -> Bool
== :: LowerMode -> LowerMode -> Bool
$c/= :: LowerMode -> LowerMode -> Bool
/= :: LowerMode -> LowerMode -> Bool
Eq, Int -> LowerMode -> ShowS
[LowerMode] -> ShowS
LowerMode -> String
(Int -> LowerMode -> ShowS)
-> (LowerMode -> String)
-> ([LowerMode] -> ShowS)
-> Show LowerMode
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> LowerMode -> ShowS
showsPrec :: Int -> LowerMode -> ShowS
$cshow :: LowerMode -> String
show :: LowerMode -> String
$cshowList :: [LowerMode] -> ShowS
showList :: [LowerMode] -> ShowS
Show, (forall x. LowerMode -> Rep LowerMode x)
-> (forall x. Rep LowerMode x -> LowerMode) -> Generic LowerMode
forall x. Rep LowerMode x -> LowerMode
forall x. LowerMode -> Rep LowerMode x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. LowerMode -> Rep LowerMode x
from :: forall x. LowerMode -> Rep LowerMode x
$cto :: forall x. Rep LowerMode x -> LowerMode
to :: forall x. Rep LowerMode x -> LowerMode
Generic)

lowerInitMode :: LowerMode
lowerInitMode :: LowerMode
lowerInitMode =
  LowerMode {
    firstSuccess :: Bool
firstSuccess = Bool
True,
    noSuccess :: MutationResult SolverState
noSuccess = MutationResult SolverState
forall s. MutationResult s
MutationFailed
  }

lowerOptimizeMode :: LowerMode
lowerOptimizeMode :: LowerMode
lowerOptimizeMode =
  LowerMode {
    firstSuccess :: Bool
firstSuccess = Bool
False,
    noSuccess :: MutationResult SolverState
noSuccess = MutationResult SolverState
forall s. MutationResult s
MutationKeep
  }

lowerStabilizeMode :: LowerMode
lowerStabilizeMode :: LowerMode
lowerStabilizeMode =
  LowerMode {
    firstSuccess :: Bool
firstSuccess = Bool
True,
    noSuccess :: MutationResult SolverState
noSuccess = MutationResult SolverState
forall s. MutationResult s
MutationFailed
  }