module Hix.Managed.Handlers.Build where import Data.Aeson (FromJSON) import Data.IORef (IORef, newIORef) import Hix.Data.Monad (M) import Hix.Data.Overrides (Overrides) import Hix.Data.PackageId (PackageId) import Hix.Data.PackageName (PackageName) import Hix.Data.Version (Version, Versions) import Hix.Managed.Cabal.Changes (SolverPlan) import Hix.Managed.Cabal.Data.Config (GhcDb) import Hix.Managed.Data.Constraints (EnvConstraints) import Hix.Managed.Data.EnvContext (EnvContext) import Hix.Managed.Data.EnvState (EnvState) import Hix.Managed.Data.Initial (Initial) import Hix.Managed.Data.ManagedPackage (ManagedPackage) import Hix.Managed.Data.Packages (Packages) import Hix.Managed.Data.StageState (BuildFailure (UnknownFailure), BuildResult (BuildFailure)) import qualified Hix.Managed.Handlers.Cabal as Solve import qualified Hix.Managed.Handlers.Cabal as Cabal import Hix.Managed.Handlers.Cabal (CabalHandlers) import Hix.Managed.Handlers.Hackage (HackageHandlers) import qualified Hix.Managed.Handlers.Report as Report import Hix.Managed.Handlers.Report (ReportHandlers) import qualified Hix.Managed.Handlers.StateFile as StateFileHandlers import Hix.Managed.Handlers.StateFile (StateFileHandlers) import Hix.Managed.Overrides (packageOverrides) newtype BuildOutputsPrefix = BuildOutputsPrefix Text deriving stock (BuildOutputsPrefix -> BuildOutputsPrefix -> Bool (BuildOutputsPrefix -> BuildOutputsPrefix -> Bool) -> (BuildOutputsPrefix -> BuildOutputsPrefix -> Bool) -> Eq BuildOutputsPrefix forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: BuildOutputsPrefix -> BuildOutputsPrefix -> Bool == :: BuildOutputsPrefix -> BuildOutputsPrefix -> Bool $c/= :: BuildOutputsPrefix -> BuildOutputsPrefix -> Bool /= :: BuildOutputsPrefix -> BuildOutputsPrefix -> Bool Eq, Int -> BuildOutputsPrefix -> ShowS [BuildOutputsPrefix] -> ShowS BuildOutputsPrefix -> String (Int -> BuildOutputsPrefix -> ShowS) -> (BuildOutputsPrefix -> String) -> ([BuildOutputsPrefix] -> ShowS) -> Show BuildOutputsPrefix forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> BuildOutputsPrefix -> ShowS showsPrec :: Int -> BuildOutputsPrefix -> ShowS $cshow :: BuildOutputsPrefix -> String show :: BuildOutputsPrefix -> String $cshowList :: [BuildOutputsPrefix] -> ShowS showList :: [BuildOutputsPrefix] -> ShowS Show, (forall x. BuildOutputsPrefix -> Rep BuildOutputsPrefix x) -> (forall x. Rep BuildOutputsPrefix x -> BuildOutputsPrefix) -> Generic BuildOutputsPrefix forall x. Rep BuildOutputsPrefix x -> BuildOutputsPrefix forall x. BuildOutputsPrefix -> Rep BuildOutputsPrefix x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. BuildOutputsPrefix -> Rep BuildOutputsPrefix x from :: forall x. BuildOutputsPrefix -> Rep BuildOutputsPrefix x $cto :: forall x. Rep BuildOutputsPrefix x -> BuildOutputsPrefix to :: forall x. Rep BuildOutputsPrefix x -> BuildOutputsPrefix Generic) deriving newtype (String -> BuildOutputsPrefix (String -> BuildOutputsPrefix) -> IsString BuildOutputsPrefix forall a. (String -> a) -> IsString a $cfromString :: String -> BuildOutputsPrefix fromString :: String -> BuildOutputsPrefix IsString, Eq BuildOutputsPrefix Eq BuildOutputsPrefix => (BuildOutputsPrefix -> BuildOutputsPrefix -> Ordering) -> (BuildOutputsPrefix -> BuildOutputsPrefix -> Bool) -> (BuildOutputsPrefix -> BuildOutputsPrefix -> Bool) -> (BuildOutputsPrefix -> BuildOutputsPrefix -> Bool) -> (BuildOutputsPrefix -> BuildOutputsPrefix -> Bool) -> (BuildOutputsPrefix -> BuildOutputsPrefix -> BuildOutputsPrefix) -> (BuildOutputsPrefix -> BuildOutputsPrefix -> BuildOutputsPrefix) -> Ord BuildOutputsPrefix BuildOutputsPrefix -> BuildOutputsPrefix -> Bool BuildOutputsPrefix -> BuildOutputsPrefix -> Ordering BuildOutputsPrefix -> BuildOutputsPrefix -> BuildOutputsPrefix forall a. Eq a => (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a $ccompare :: BuildOutputsPrefix -> BuildOutputsPrefix -> Ordering compare :: BuildOutputsPrefix -> BuildOutputsPrefix -> Ordering $c< :: BuildOutputsPrefix -> BuildOutputsPrefix -> Bool < :: BuildOutputsPrefix -> BuildOutputsPrefix -> Bool $c<= :: BuildOutputsPrefix -> BuildOutputsPrefix -> Bool <= :: BuildOutputsPrefix -> BuildOutputsPrefix -> Bool $c> :: BuildOutputsPrefix -> BuildOutputsPrefix -> Bool > :: BuildOutputsPrefix -> BuildOutputsPrefix -> Bool $c>= :: BuildOutputsPrefix -> BuildOutputsPrefix -> Bool >= :: BuildOutputsPrefix -> BuildOutputsPrefix -> Bool $cmax :: BuildOutputsPrefix -> BuildOutputsPrefix -> BuildOutputsPrefix max :: BuildOutputsPrefix -> BuildOutputsPrefix -> BuildOutputsPrefix $cmin :: BuildOutputsPrefix -> BuildOutputsPrefix -> BuildOutputsPrefix min :: BuildOutputsPrefix -> BuildOutputsPrefix -> BuildOutputsPrefix Ord, Maybe BuildOutputsPrefix Value -> Parser [BuildOutputsPrefix] Value -> Parser BuildOutputsPrefix (Value -> Parser BuildOutputsPrefix) -> (Value -> Parser [BuildOutputsPrefix]) -> Maybe BuildOutputsPrefix -> FromJSON BuildOutputsPrefix forall a. (Value -> Parser a) -> (Value -> Parser [a]) -> Maybe a -> FromJSON a $cparseJSON :: Value -> Parser BuildOutputsPrefix parseJSON :: Value -> Parser BuildOutputsPrefix $cparseJSONList :: Value -> Parser [BuildOutputsPrefix] parseJSONList :: Value -> Parser [BuildOutputsPrefix] $comittedField :: Maybe BuildOutputsPrefix omittedField :: Maybe BuildOutputsPrefix FromJSON) newtype BuildTimeout = BuildTimeout Int deriving stock (BuildTimeout -> BuildTimeout -> Bool (BuildTimeout -> BuildTimeout -> Bool) -> (BuildTimeout -> BuildTimeout -> Bool) -> Eq BuildTimeout forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: BuildTimeout -> BuildTimeout -> Bool == :: BuildTimeout -> BuildTimeout -> Bool $c/= :: BuildTimeout -> BuildTimeout -> Bool /= :: BuildTimeout -> BuildTimeout -> Bool Eq, Int -> BuildTimeout -> ShowS [BuildTimeout] -> ShowS BuildTimeout -> String (Int -> BuildTimeout -> ShowS) -> (BuildTimeout -> String) -> ([BuildTimeout] -> ShowS) -> Show BuildTimeout forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> BuildTimeout -> ShowS showsPrec :: Int -> BuildTimeout -> ShowS $cshow :: BuildTimeout -> String show :: BuildTimeout -> String $cshowList :: [BuildTimeout] -> ShowS showList :: [BuildTimeout] -> ShowS Show, (forall x. BuildTimeout -> Rep BuildTimeout x) -> (forall x. Rep BuildTimeout x -> BuildTimeout) -> Generic BuildTimeout forall x. Rep BuildTimeout x -> BuildTimeout forall x. BuildTimeout -> Rep BuildTimeout x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. BuildTimeout -> Rep BuildTimeout x from :: forall x. BuildTimeout -> Rep BuildTimeout x $cto :: forall x. Rep BuildTimeout x -> BuildTimeout to :: forall x. Rep BuildTimeout x -> BuildTimeout Generic) deriving newtype (Integer -> BuildTimeout BuildTimeout -> BuildTimeout BuildTimeout -> BuildTimeout -> BuildTimeout (BuildTimeout -> BuildTimeout -> BuildTimeout) -> (BuildTimeout -> BuildTimeout -> BuildTimeout) -> (BuildTimeout -> BuildTimeout -> BuildTimeout) -> (BuildTimeout -> BuildTimeout) -> (BuildTimeout -> BuildTimeout) -> (BuildTimeout -> BuildTimeout) -> (Integer -> BuildTimeout) -> Num BuildTimeout forall a. (a -> a -> a) -> (a -> a -> a) -> (a -> a -> a) -> (a -> a) -> (a -> a) -> (a -> a) -> (Integer -> a) -> Num a $c+ :: BuildTimeout -> BuildTimeout -> BuildTimeout + :: BuildTimeout -> BuildTimeout -> BuildTimeout $c- :: BuildTimeout -> BuildTimeout -> BuildTimeout - :: BuildTimeout -> BuildTimeout -> BuildTimeout $c* :: BuildTimeout -> BuildTimeout -> BuildTimeout * :: BuildTimeout -> BuildTimeout -> BuildTimeout $cnegate :: BuildTimeout -> BuildTimeout negate :: BuildTimeout -> BuildTimeout $cabs :: BuildTimeout -> BuildTimeout abs :: BuildTimeout -> BuildTimeout $csignum :: BuildTimeout -> BuildTimeout signum :: BuildTimeout -> BuildTimeout $cfromInteger :: Integer -> BuildTimeout fromInteger :: Integer -> BuildTimeout Num, Num BuildTimeout Ord BuildTimeout (Num BuildTimeout, Ord BuildTimeout) => (BuildTimeout -> Rational) -> Real BuildTimeout BuildTimeout -> Rational forall a. (Num a, Ord a) => (a -> Rational) -> Real a $ctoRational :: BuildTimeout -> Rational toRational :: BuildTimeout -> Rational Real, Int -> BuildTimeout BuildTimeout -> Int BuildTimeout -> [BuildTimeout] BuildTimeout -> BuildTimeout BuildTimeout -> BuildTimeout -> [BuildTimeout] BuildTimeout -> BuildTimeout -> BuildTimeout -> [BuildTimeout] (BuildTimeout -> BuildTimeout) -> (BuildTimeout -> BuildTimeout) -> (Int -> BuildTimeout) -> (BuildTimeout -> Int) -> (BuildTimeout -> [BuildTimeout]) -> (BuildTimeout -> BuildTimeout -> [BuildTimeout]) -> (BuildTimeout -> BuildTimeout -> [BuildTimeout]) -> (BuildTimeout -> BuildTimeout -> BuildTimeout -> [BuildTimeout]) -> Enum BuildTimeout forall a. (a -> a) -> (a -> a) -> (Int -> a) -> (a -> Int) -> (a -> [a]) -> (a -> a -> [a]) -> (a -> a -> [a]) -> (a -> a -> a -> [a]) -> Enum a $csucc :: BuildTimeout -> BuildTimeout succ :: BuildTimeout -> BuildTimeout $cpred :: BuildTimeout -> BuildTimeout pred :: BuildTimeout -> BuildTimeout $ctoEnum :: Int -> BuildTimeout toEnum :: Int -> BuildTimeout $cfromEnum :: BuildTimeout -> Int fromEnum :: BuildTimeout -> Int $cenumFrom :: BuildTimeout -> [BuildTimeout] enumFrom :: BuildTimeout -> [BuildTimeout] $cenumFromThen :: BuildTimeout -> BuildTimeout -> [BuildTimeout] enumFromThen :: BuildTimeout -> BuildTimeout -> [BuildTimeout] $cenumFromTo :: BuildTimeout -> BuildTimeout -> [BuildTimeout] enumFromTo :: BuildTimeout -> BuildTimeout -> [BuildTimeout] $cenumFromThenTo :: BuildTimeout -> BuildTimeout -> BuildTimeout -> [BuildTimeout] enumFromThenTo :: BuildTimeout -> BuildTimeout -> BuildTimeout -> [BuildTimeout] Enum, Enum BuildTimeout Real BuildTimeout (Real BuildTimeout, Enum BuildTimeout) => (BuildTimeout -> BuildTimeout -> BuildTimeout) -> (BuildTimeout -> BuildTimeout -> BuildTimeout) -> (BuildTimeout -> BuildTimeout -> BuildTimeout) -> (BuildTimeout -> BuildTimeout -> BuildTimeout) -> (BuildTimeout -> BuildTimeout -> (BuildTimeout, BuildTimeout)) -> (BuildTimeout -> BuildTimeout -> (BuildTimeout, BuildTimeout)) -> (BuildTimeout -> Integer) -> Integral BuildTimeout BuildTimeout -> Integer BuildTimeout -> BuildTimeout -> (BuildTimeout, BuildTimeout) BuildTimeout -> BuildTimeout -> BuildTimeout forall a. (Real a, Enum a) => (a -> a -> a) -> (a -> a -> a) -> (a -> a -> a) -> (a -> a -> a) -> (a -> a -> (a, a)) -> (a -> a -> (a, a)) -> (a -> Integer) -> Integral a $cquot :: BuildTimeout -> BuildTimeout -> BuildTimeout quot :: BuildTimeout -> BuildTimeout -> BuildTimeout $crem :: BuildTimeout -> BuildTimeout -> BuildTimeout rem :: BuildTimeout -> BuildTimeout -> BuildTimeout $cdiv :: BuildTimeout -> BuildTimeout -> BuildTimeout div :: BuildTimeout -> BuildTimeout -> BuildTimeout $cmod :: BuildTimeout -> BuildTimeout -> BuildTimeout mod :: BuildTimeout -> BuildTimeout -> BuildTimeout $cquotRem :: BuildTimeout -> BuildTimeout -> (BuildTimeout, BuildTimeout) quotRem :: BuildTimeout -> BuildTimeout -> (BuildTimeout, BuildTimeout) $cdivMod :: BuildTimeout -> BuildTimeout -> (BuildTimeout, BuildTimeout) divMod :: BuildTimeout -> BuildTimeout -> (BuildTimeout, BuildTimeout) $ctoInteger :: BuildTimeout -> Integer toInteger :: BuildTimeout -> Integer Integral, Eq BuildTimeout Eq BuildTimeout => (BuildTimeout -> BuildTimeout -> Ordering) -> (BuildTimeout -> BuildTimeout -> Bool) -> (BuildTimeout -> BuildTimeout -> Bool) -> (BuildTimeout -> BuildTimeout -> Bool) -> (BuildTimeout -> BuildTimeout -> Bool) -> (BuildTimeout -> BuildTimeout -> BuildTimeout) -> (BuildTimeout -> BuildTimeout -> BuildTimeout) -> Ord BuildTimeout BuildTimeout -> BuildTimeout -> Bool BuildTimeout -> BuildTimeout -> Ordering BuildTimeout -> BuildTimeout -> BuildTimeout forall a. Eq a => (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a $ccompare :: BuildTimeout -> BuildTimeout -> Ordering compare :: BuildTimeout -> BuildTimeout -> Ordering $c< :: BuildTimeout -> BuildTimeout -> Bool < :: BuildTimeout -> BuildTimeout -> Bool $c<= :: BuildTimeout -> BuildTimeout -> Bool <= :: BuildTimeout -> BuildTimeout -> Bool $c> :: BuildTimeout -> BuildTimeout -> Bool > :: BuildTimeout -> BuildTimeout -> Bool $c>= :: BuildTimeout -> BuildTimeout -> Bool >= :: BuildTimeout -> BuildTimeout -> Bool $cmax :: BuildTimeout -> BuildTimeout -> BuildTimeout max :: BuildTimeout -> BuildTimeout -> BuildTimeout $cmin :: BuildTimeout -> BuildTimeout -> BuildTimeout min :: BuildTimeout -> BuildTimeout -> BuildTimeout Ord, Maybe BuildTimeout Value -> Parser [BuildTimeout] Value -> Parser BuildTimeout (Value -> Parser BuildTimeout) -> (Value -> Parser [BuildTimeout]) -> Maybe BuildTimeout -> FromJSON BuildTimeout forall a. (Value -> Parser a) -> (Value -> Parser [a]) -> Maybe a -> FromJSON a $cparseJSON :: Value -> Parser BuildTimeout parseJSON :: Value -> Parser BuildTimeout $cparseJSONList :: Value -> Parser [BuildTimeout] parseJSONList :: Value -> Parser [BuildTimeout] $comittedField :: Maybe BuildTimeout omittedField :: Maybe BuildTimeout FromJSON) data EnvBuilder = EnvBuilder { EnvBuilder -> CabalHandlers cabal :: CabalHandlers, EnvBuilder -> Bool -> Versions -> [PackageId] -> M (BuildResult, (Overrides, Set PackageId)) buildWithState :: Bool -> Versions -> [PackageId] -> M (BuildResult, (Overrides, Set PackageId)) } data Builder = Builder { Builder -> forall a. CabalHandlers -> EnvContext -> Initial EnvState -> (EnvBuilder -> M a) -> M a withEnvBuilder :: ∀ a . CabalHandlers -> EnvContext -> Initial EnvState -> (EnvBuilder -> M a) -> M a } runBuilder :: Builder -> CabalHandlers -> EnvContext -> Initial EnvState -> (EnvBuilder -> M a) -> M a runBuilder :: forall a. Builder -> CabalHandlers -> EnvContext -> Initial EnvState -> (EnvBuilder -> M a) -> M a runBuilder Builder {forall a. CabalHandlers -> EnvContext -> Initial EnvState -> (EnvBuilder -> M a) -> M a withEnvBuilder :: Builder -> forall a. CabalHandlers -> EnvContext -> Initial EnvState -> (EnvBuilder -> M a) -> M a withEnvBuilder :: forall a. CabalHandlers -> EnvContext -> Initial EnvState -> (EnvBuilder -> M a) -> M a withEnvBuilder} = CabalHandlers -> EnvContext -> Initial EnvState -> (EnvBuilder -> M a) -> M a forall a. CabalHandlers -> EnvContext -> Initial EnvState -> (EnvBuilder -> M a) -> M a withEnvBuilder data BuildHandlers = BuildHandlers { BuildHandlers -> StateFileHandlers stateFile :: StateFileHandlers, BuildHandlers -> ReportHandlers report :: ReportHandlers, BuildHandlers -> Packages ManagedPackage -> GhcDb -> M CabalHandlers cabal :: Packages ManagedPackage -> GhcDb -> M CabalHandlers, BuildHandlers -> forall a. (Builder -> M a) -> M a withBuilder :: ∀ a . (Builder -> M a) -> M a, BuildHandlers -> PackageName -> M [Version] versions :: PackageName -> M [Version], BuildHandlers -> PackageName -> M (Maybe Version) latestVersion :: PackageName -> M (Maybe Version) } testBuilder :: (Bool -> Versions -> [PackageId] -> M (BuildResult, (Overrides, Set PackageId))) -> (Builder -> M a) -> M a testBuilder :: forall a. (Bool -> Versions -> [PackageId] -> M (BuildResult, (Overrides, Set PackageId))) -> (Builder -> M a) -> M a testBuilder Bool -> Versions -> [PackageId] -> M (BuildResult, (Overrides, Set PackageId)) buildWithState Builder -> M a use = Builder -> M a use Builder {withEnvBuilder :: forall a. CabalHandlers -> EnvContext -> Initial EnvState -> (EnvBuilder -> M a) -> M a withEnvBuilder = \ CabalHandlers cabal EnvContext _ Initial EnvState _ EnvBuilder -> M a useE -> EnvBuilder -> M a useE EnvBuilder {CabalHandlers cabal :: CabalHandlers cabal :: CabalHandlers cabal, Bool -> Versions -> [PackageId] -> M (BuildResult, (Overrides, Set PackageId)) buildWithState :: Bool -> Versions -> [PackageId] -> M (BuildResult, (Overrides, Set PackageId)) buildWithState :: Bool -> Versions -> [PackageId] -> M (BuildResult, (Overrides, Set PackageId)) buildWithState}} versionsBuilder :: HackageHandlers -> (Versions -> M BuildResult) -> (Builder -> M a) -> M a versionsBuilder :: forall a. HackageHandlers -> (Versions -> M BuildResult) -> (Builder -> M a) -> M a versionsBuilder HackageHandlers hackage Versions -> M BuildResult build = (Bool -> Versions -> [PackageId] -> M (BuildResult, (Overrides, Set PackageId))) -> (Builder -> M a) -> M a forall a. (Bool -> Versions -> [PackageId] -> M (BuildResult, (Overrides, Set PackageId))) -> (Builder -> M a) -> M a testBuilder \ Bool _ Versions versions [PackageId] overrideVersions -> do Overrides overrides <- HackageHandlers -> [PackageId] -> M Overrides packageOverrides HackageHandlers hackage [PackageId] overrideVersions BuildResult status <- Versions -> M BuildResult build Versions versions pure (BuildResult status, (Overrides overrides, Set PackageId forall a. Monoid a => a mempty)) handlersNull :: BuildHandlers handlersNull :: BuildHandlers handlersNull = BuildHandlers { stateFile :: StateFileHandlers stateFile = StateFileHandlers StateFileHandlers.handlersNull, report :: ReportHandlers report = ReportHandlers Report.handlersNull, cabal :: Packages ManagedPackage -> GhcDb -> M CabalHandlers cabal = \ Packages ManagedPackage _ GhcDb _ -> CabalHandlers -> M CabalHandlers forall a. a -> M a forall (f :: * -> *) a. Applicative f => a -> f a pure CabalHandlers Solve.handlersNull, withBuilder :: forall a. (Builder -> M a) -> M a withBuilder = (Bool -> Versions -> [PackageId] -> M (BuildResult, (Overrides, Set PackageId))) -> (Builder -> M a) -> M a forall a. (Bool -> Versions -> [PackageId] -> M (BuildResult, (Overrides, Set PackageId))) -> (Builder -> M a) -> M a testBuilder \ Bool _ Versions _ [PackageId] _ -> (BuildResult, (Overrides, Set PackageId)) -> M (BuildResult, (Overrides, Set PackageId)) forall a. a -> M a forall (f :: * -> *) a. Applicative f => a -> f a pure (BuildFailure -> BuildResult BuildFailure BuildFailure UnknownFailure, (Overrides, Set PackageId) forall a. Monoid a => a mempty), versions :: PackageName -> M [Version] versions = \ PackageName _ -> [Version] -> M [Version] forall a. a -> M a forall (f :: * -> *) a. Applicative f => a -> f a pure [], latestVersion :: PackageName -> M (Maybe Version) latestVersion = \ PackageName _ -> Maybe Version -> M (Maybe Version) forall a. a -> M a forall (f :: * -> *) a. Applicative f => a -> f a pure Maybe Version forall a. Maybe a Nothing } wrapCabal :: (CabalHandlers -> CabalHandlers) -> BuildHandlers -> BuildHandlers wrapCabal :: (CabalHandlers -> CabalHandlers) -> BuildHandlers -> BuildHandlers wrapCabal CabalHandlers -> CabalHandlers f BuildHandlers {StateFileHandlers ReportHandlers PackageName -> M [Version] PackageName -> M (Maybe Version) Packages ManagedPackage -> GhcDb -> M CabalHandlers forall a. (Builder -> M a) -> M a stateFile :: BuildHandlers -> StateFileHandlers report :: BuildHandlers -> ReportHandlers cabal :: BuildHandlers -> Packages ManagedPackage -> GhcDb -> M CabalHandlers withBuilder :: BuildHandlers -> forall a. (Builder -> M a) -> M a versions :: BuildHandlers -> PackageName -> M [Version] latestVersion :: BuildHandlers -> PackageName -> M (Maybe Version) stateFile :: StateFileHandlers report :: ReportHandlers cabal :: Packages ManagedPackage -> GhcDb -> M CabalHandlers withBuilder :: forall a. (Builder -> M a) -> M a versions :: PackageName -> M [Version] latestVersion :: PackageName -> M (Maybe Version) ..} = BuildHandlers {cabal :: Packages ManagedPackage -> GhcDb -> M CabalHandlers cabal = \ Packages ManagedPackage p GhcDb d -> CabalHandlers -> CabalHandlers f (CabalHandlers -> CabalHandlers) -> M CabalHandlers -> M CabalHandlers forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Packages ManagedPackage -> GhcDb -> M CabalHandlers cabal Packages ManagedPackage p GhcDb d, StateFileHandlers ReportHandlers PackageName -> M [Version] PackageName -> M (Maybe Version) (Builder -> M a) -> M a forall a. (Builder -> M a) -> M a stateFile :: StateFileHandlers report :: ReportHandlers withBuilder :: forall a. (Builder -> M a) -> M a versions :: PackageName -> M [Version] latestVersion :: PackageName -> M (Maybe Version) stateFile :: StateFileHandlers report :: ReportHandlers withBuilder :: forall a. (Builder -> M a) -> M a versions :: PackageName -> M [Version] latestVersion :: PackageName -> M (Maybe Version) ..} logCabal :: MonadIO m => BuildHandlers -> m (IORef [(EnvConstraints, Maybe SolverPlan)], BuildHandlers) logCabal :: forall (m :: * -> *). MonadIO m => BuildHandlers -> m (IORef [(EnvConstraints, Maybe SolverPlan)], BuildHandlers) logCabal BuildHandlers handlers = do IORef [(EnvConstraints, Maybe SolverPlan)] ref <- IO (IORef [(EnvConstraints, Maybe SolverPlan)]) -> m (IORef [(EnvConstraints, Maybe SolverPlan)]) forall a. IO a -> m a forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO ([(EnvConstraints, Maybe SolverPlan)] -> IO (IORef [(EnvConstraints, Maybe SolverPlan)]) forall a. a -> IO (IORef a) newIORef []) pure (IORef [(EnvConstraints, Maybe SolverPlan)] ref, (CabalHandlers -> CabalHandlers) -> BuildHandlers -> BuildHandlers wrapCabal (IORef [(EnvConstraints, Maybe SolverPlan)] -> CabalHandlers -> CabalHandlers Cabal.logCabal IORef [(EnvConstraints, Maybe SolverPlan)] ref) BuildHandlers handlers) data SpecialBuildHandlers = TestBumpHandlers deriving stock (SpecialBuildHandlers -> SpecialBuildHandlers -> Bool (SpecialBuildHandlers -> SpecialBuildHandlers -> Bool) -> (SpecialBuildHandlers -> SpecialBuildHandlers -> Bool) -> Eq SpecialBuildHandlers forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: SpecialBuildHandlers -> SpecialBuildHandlers -> Bool == :: SpecialBuildHandlers -> SpecialBuildHandlers -> Bool $c/= :: SpecialBuildHandlers -> SpecialBuildHandlers -> Bool /= :: SpecialBuildHandlers -> SpecialBuildHandlers -> Bool Eq, Int -> SpecialBuildHandlers -> ShowS [SpecialBuildHandlers] -> ShowS SpecialBuildHandlers -> String (Int -> SpecialBuildHandlers -> ShowS) -> (SpecialBuildHandlers -> String) -> ([SpecialBuildHandlers] -> ShowS) -> Show SpecialBuildHandlers forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> SpecialBuildHandlers -> ShowS showsPrec :: Int -> SpecialBuildHandlers -> ShowS $cshow :: SpecialBuildHandlers -> String show :: SpecialBuildHandlers -> String $cshowList :: [SpecialBuildHandlers] -> ShowS showList :: [SpecialBuildHandlers] -> ShowS Show)