module Hix.Managed.Overrides where import qualified Data.Map.Strict as Map import Hix.Data.Monad (M) import Hix.Data.Overrides (Override (..), Overrides (Overrides)) import qualified Hix.Data.PackageId import Hix.Data.PackageId (PackageId (PackageId)) import Hix.Data.PackageName (PackageName) import qualified Hix.Managed.Handlers.Hackage import Hix.Managed.Handlers.Hackage (HackageHandlers) packageOverride :: HackageHandlers -> PackageId -> M (PackageName, Override) packageOverride :: HackageHandlers -> PackageId -> M (PackageName, Override) packageOverride HackageHandlers handlers package :: PackageId package@PackageId {PackageName name :: PackageName name :: PackageId -> PackageName name, Version version :: Version version :: PackageId -> Version version} = do SourceHash hash <- HackageHandlers handlers.fetchHash PackageId package pure (PackageName name, Override {Version SourceHash version :: Version hash :: SourceHash hash :: SourceHash version :: Version ..}) packageOverrides :: HackageHandlers -> [PackageId] -> M Overrides packageOverrides :: HackageHandlers -> [PackageId] -> M Overrides packageOverrides HackageHandlers handlers [PackageId] versions = Map PackageName Override -> Overrides Overrides (Map PackageName Override -> Overrides) -> ([(PackageName, Override)] -> Map PackageName Override) -> [(PackageName, Override)] -> Overrides forall b c a. (b -> c) -> (a -> b) -> a -> c . [(PackageName, Override)] -> Map PackageName Override forall k a. Ord k => [(k, a)] -> Map k a Map.fromList ([(PackageName, Override)] -> Overrides) -> M [(PackageName, Override)] -> M Overrides forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (PackageId -> M (PackageName, Override)) -> [PackageId] -> M [(PackageName, Override)] forall (t :: * -> *) (f :: * -> *) a b. (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b) forall (f :: * -> *) a b. Applicative f => (a -> f b) -> [a] -> f [b] traverse (HackageHandlers -> PackageId -> M (PackageName, Override) packageOverride HackageHandlers handlers) [PackageId] versions