dependency 0.1.0.2 → 0.1.0.3
raw patch · 5 files changed
+28/−21 lines, 5 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
+ Data.Dependency: [_libVersion] :: Dependency -> Version
- Data.Dependency: Dependency :: String -> Constraint Version -> [String] -> Dependency
+ Data.Dependency: Dependency :: String -> Constraint Version -> [String] -> Version -> Dependency
- Data.Dependency: resolveDependencies :: PackageSet Dependency -> [[Dependency]] -> Maybe [[Dependency]]
+ Data.Dependency: resolveDependencies :: PackageSet Dependency -> [Dependency] -> Maybe [[Dependency]]
Files
- bench/Bench.hs +13/−10
- dependency.cabal +1/−1
- src/Data/Dependency.hs +6/−6
- src/Data/Dependency/Type.hs +1/−0
- test/Spec.hs +7/−4
bench/Bench.hs view
@@ -6,21 +6,24 @@ import qualified Data.Map as M import qualified Data.Set as S -microlens :: Dependency-microlens = Dependency "microlens" mempty mempty- free :: Dependency-free = Dependency "free" mempty mempty+free = Dependency "free" mempty mempty defV comonad :: Dependency-comonad = Dependency "comonad" mempty mempty--bifunctors :: Dependency-bifunctors = Dependency "bifunctors" mempty ["comonad"]+comonad = Dependency "comonad" mempty mempty defV lens :: Dependency-lens = Dependency "lens" mempty ["free", "comonad"]+lens = Dependency "lens" mempty ["free", "comonad"] defV +defV :: Version+defV = Version [0,1,0]++microlens :: Dependency+microlens = Dependency "microlens" mempty mempty defV++bifunctors :: Dependency+bifunctors = Dependency "bifunctors" mempty ["comonad"] defV+ deps :: [Dependency] deps = [free, lens, comonad] @@ -37,5 +40,5 @@ , bench "6" $ nf buildSequence (bifunctors : microlens : deps) ] , bgroup "resolveDependencies"- [ bench "3" $ nf (resolveDependencies set) (buildSequence [lens]) ]+ [ bench "3" $ nf (resolveDependencies set) [lens] ] ]
dependency.cabal view
@@ -1,5 +1,5 @@ name: dependency-version: 0.1.0.2+version: 0.1.0.3 synopsis: Dependency resolution for package management description: A library for resolving dependencies; uses a topological sort to construct a build plan and then allows choice between all compatible plans. license: BSD3
src/Data/Dependency.hs view
@@ -18,18 +18,18 @@ import qualified Data.Set as S isPresent :: PackageSet Version -> Dependency -> Bool-isPresent (PackageSet ps) (Dependency ln _ _) = g (M.lookup ln ps)+isPresent (PackageSet ps) (Dependency ln _ _ _) = g (M.lookup ln ps) where g (Just x) = not (S.null x) g Nothing = False latest :: (Ord a) => PackageSet a -> Dependency -> Maybe (String, a)-latest (PackageSet ps) (Dependency ln _ _) = do+latest (PackageSet ps) (Dependency ln _ _ _) = do s <- M.lookup ln ps (,) ln <$> S.lookupMax s buildSequence :: [Dependency] -> [[Dependency]] buildSequence = reverse . groupBy independent . sortDeps- where independent (Dependency ln _ ls) (Dependency ln' _ ls') = ln' `notElem` ls && ln `notElem` ls'+ where independent (Dependency ln _ ls _) (Dependency ln' _ ls' _) = ln' `notElem` ls && ln `notElem` ls' saturateDeps :: PackageSet Dependency -> Dependency -> Maybe [Dependency] saturateDeps (PackageSet ps) dep = do@@ -50,8 +50,8 @@ -- 5. Specify an error if a package is not present. -- -- This doesn't do any package resolution beyond versioning.-resolveDependencies :: PackageSet Dependency -> [[Dependency]] -> Maybe [[Dependency]]+resolveDependencies :: PackageSet Dependency -> [Dependency] -> Maybe [[Dependency]] resolveDependencies ps = select . getLatest <=< fmap buildSequence . saturated where select = fmap (fmap (fmap snd))- saturated dep = join . join <$> traverse (traverse (saturateDeps ps)) dep- getLatest = sequence . fmap (traverse (latest ps))+ saturated dep = join <$> traverse (saturateDeps ps) dep+ getLatest = traverse (traverse (latest ps))
src/Data/Dependency/Type.hs view
@@ -93,6 +93,7 @@ data Dependency = Dependency { _libName :: String , _libConstraint :: Constraint Version , _libDependencies :: [String]+ , _libVersion :: Version } deriving (Show, Eq, Ord, Generic, NFData)
test/Spec.hs view
@@ -5,14 +5,17 @@ import Test.Hspec free :: Dependency-free = Dependency "free" mempty mempty+free = Dependency "free" mempty mempty defV comonad :: Dependency-comonad = Dependency "comonad" mempty mempty+comonad = Dependency "comonad" mempty mempty defV lens :: Dependency-lens = Dependency "lens" mempty ["free", "comonad"]+lens = Dependency "lens" mempty ["free", "comonad"] defV +defV :: Version+defV = Version [0,1,0]+ deps :: [Dependency] deps = [free, lens, comonad] @@ -29,4 +32,4 @@ buildSequence deps `shouldBe` [[free, comonad], [lens]] describe "resolveDependencies" $ it "correctly resolves dependencies in a package set" $- resolveDependencies set (buildSequence [lens]) `shouldBe` Just [[free, comonad], [lens]]+ resolveDependencies set [lens] `shouldBe` Just [[free, comonad], [lens]]