-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Dependency resolution for package management -- -- A library for resolving dependencies; uses a topological sort to -- construct a build plan and then allows choice between all compatible -- plans. @package dependency @version 0.1.0.10 module Data.Dependency -- | Heuristics: -- --
    --
  1. Always use a newer version when possible
  2. --
  3. Obey constraints
  4. --
  5. Specify an error for circular dependencies
  6. --
  7. Specify an error for overconstrained builds
  8. --
  9. Specify an error if a package is not present
  10. --
-- -- This doesn't do any package resolution beyond versioning. resolveDependencies :: PackageSet Dependency -> [Dependency] -> DepM [[Dependency]] buildSequence :: [Dependency] -> [[Dependency]] -- | Check a given dependency is compatible with in-scope dependencies. check :: Dependency -> [Dependency] -> Bool -- | A generic dependency, consisting of a package name and version, as -- well as dependency names and their constraints. data Dependency Dependency :: String -> [(String, Constraint Version)] -> Version -> Dependency [_libName] :: Dependency -> String [_libDependencies] :: Dependency -> [(String, Constraint Version)] [_libVersion] :: Dependency -> Version -- | A package set is simply a map between package names and a set of -- packages. newtype PackageSet a PackageSet :: Map String (Set a) -> PackageSet a [_packageSet] :: PackageSet a -> Map String (Set a) newtype Version Version :: [Integer] -> Version type DepM = Either ResolveError -- | An error that can occur during package resolution. data ResolveError InternalError :: ResolveError NotPresent :: String -> ResolveError Conflicts :: [String] -> String -> ResolveError -- | Monoid/functor for representing constraints. data Constraint a LessThanEq :: a -> Constraint a GreaterThanEq :: a -> Constraint a Eq :: a -> Constraint a Bounded :: (Constraint a) -> (Constraint a) -> Constraint a None :: Constraint a -- | We use a tardis monad here to give ourselves greater flexibility -- during dependency solving. newtype ResolveStateM m a ResolveStateM :: TardisT Mod ResMap m a -> ResolveStateM m a [unResolve] :: ResolveStateM m a -> TardisT Mod ResMap m a type ResolveState = ResolveStateM (Either ResolveError) type ResMap = Map String Dependency