dependency 1.0.0.0 → 1.1.0.0
raw patch · 6 files changed
+24/−58 lines, 6 filesdep +micro-recursion-schemesdep +microlensdep −lensdep −recursion-schemesdep −transformersPVP ok
version bump matches the API change (PVP)
Dependencies added: micro-recursion-schemes, microlens
Dependencies removed: lens, recursion-schemes, transformers
API changes (from Hackage documentation)
- Data.Dependency: buildSequence :: [Dependency] -> [[Dependency]]
- Data.Dependency: check :: Dependency -> [Dependency] -> Bool
+ Data.Dependency: CircularDependencies :: String -> String -> ResolveError
Files
- dependency.cabal +4/−5
- src/Data/Dependency.hs +10/−20
- src/Data/Dependency/Error.hs +2/−2
- src/Data/Dependency/Sort.hs +2/−1
- src/Data/Dependency/Type.hs +1/−19
- test/Spec.hs +5/−11
dependency.cabal view
@@ -1,6 +1,6 @@ cabal-version: 1.18 name: dependency-version: 1.0.0.0+version: 1.1.0.0 license: BSD3 license-file: LICENSE copyright: Copyright: (c) 2018 Vanessa McHale@@ -35,15 +35,14 @@ default-language: Haskell2010 other-extensions: DeriveAnyClass DeriveGeneric OverloadedStrings DeriveFoldable DeriveFunctor DeriveGeneric DeriveTraversable- OverloadedStrings TemplateHaskell TypeFamilies+ OverloadedStrings TemplateHaskell TypeFamilies TupleSections ghc-options: -Wall build-depends: base >=4.8 && <5, ansi-wl-pprint -any, containers >=0.5.9,- recursion-schemes -any,- lens -any,- transformers -any,+ micro-recursion-schemes -any,+ microlens -any, binary -any, deepseq -any
src/Data/Dependency.hs view
@@ -1,8 +1,8 @@+{-# LANGUAGE TupleSections #-}+ module Data.Dependency ( -- * Functions resolveDependencies- , buildSequence- , check -- * Types , Dependency (..) , PackageSet (..)@@ -50,22 +50,9 @@ g (Just x') = Left (Conflicts (_libName <$> ds') (_libName x')) where ds' = filter (\d -> not (check x' [d])) ds --- This does check for compatibility with past packages, but doesn't do the--- fancy tardis shenanigans it's supposed to when package resolution fails. latest :: PackageSet Dependency -> [Dependency] -> Dependency -> DepM (String, Dependency)-latest (PackageSet ps) ds d@(Dependency ln _ _) = do- s <- lookupMap ln ps- finish ln (lookupSet (Just d) ds s)--finish :: String -> DepM Dependency -> DepM (String, Dependency)-finish ln dep' =- case dep' of-- Right dep ->- pure (ln, dep)-- Left err ->- Left err+latest (PackageSet ps) ds d@(Dependency ln _ _) =+ (ln,) <$> (lookupSet (Just d) ds =<< lookupMap ln ps) -- | This splits dependencies into phases buildSequence :: [Dependency] -> [[Dependency]]@@ -104,8 +91,11 @@ -- 6. Present a solution whenever one exists. -- -- This doesn't do any package resolution beyond versioning.-resolveDependencies :: PackageSet Dependency -> [Dependency] -> DepM [[Dependency]]-resolveDependencies ps = select . getLatest <=< fmap ((buildSequence &&& id) . toList) . saturate+resolveDependencies :: PackageSet Dependency -- ^ Package set+ -> [Dependency] -- ^ Dependencies requested+ -> DepM [[Dependency]] -- ^ Phased build+resolveDependencies ps = select . getLatest <=< fmap prepare . saturate where select = fmap (fmap (fmap snd)) saturate = fmap S.unions . traverse (saturateDeps ps)- getLatest (p, q) = traverse (traverse (latest ps q)) p+ prepare = (buildSequence &&& id) . toList+ getLatest (stepped, allDeps) = traverse (traverse (latest ps allDeps)) stepped
src/Data/Dependency/Error.hs view
@@ -16,11 +16,11 @@ data ResolveError = InternalError | NotPresent String | Conflicts [String] String+ | CircularDependencies String String deriving (Show, Eq, NFData, Generic)- -- CircularDependencies String String- -- Conflict String String (Constraint Version) (Constraint Version) instance Pretty ResolveError where pretty InternalError = red "Error:" <+> "the" <+> squotes "dependency" <+> "package enountered an internal error. Please report this as a bug:\n" <> hang 2 "https://hub.darcs.net/vmchale/ats/issues" pretty (NotPresent s) = red "Error:" <+> "the package" <+> squotes (text s) <+> "could not be found.\n" pretty (Conflicts ss s) = red "Error:" <+> "the package" <+> squotes (text s) <+> "conflicts with already in-scope packages: " <+> mconcat (punctuate ", " (fmap (squotes . text) ss))+ pretty (CircularDependencies s s') = red "Error:" <+> "package" <+> squotes (text s) <+> "and package" <+> squotes (text s') <+> "form a cycle of dependencies"
src/Data/Dependency/Sort.hs view
@@ -1,9 +1,10 @@ module Data.Dependency.Sort ( sortDeps ) where -import Control.Lens import Data.Dependency.Type import Data.Graph+import Lens.Micro+import Lens.Micro.Extras asGraph :: [Dependency] -> (Graph, Vertex -> Dependency) asGraph ds = (f triple, keys)
src/Data/Dependency/Type.hs view
@@ -38,7 +38,6 @@ show (Version is) = intercalate "." (show <$> is) instance Ord Version where- (Version []) <= (Version []) = True (Version []) <= _ = True _ <= (Version []) = False (Version (x:xs)) <= (Version (y:ys))@@ -70,16 +69,9 @@ } deriving (Show, Eq, Ord, Generic, NFData) -check' :: Dependency -> [Dependency] -> Bool-check' (Dependency _ lds _) ds =- and [ compatible (Eq v') c | (Dependency ln _ v') <- ds, (str, c) <- lds, ln == str ]- -- | Check a given dependency is compatible with in-scope dependencies. check :: Dependency -> [Dependency] -> Bool-check d = (&&) <$> check' d <*> check'' d--check'' :: Dependency -> [Dependency] -> Bool-check'' (Dependency ln _ v) ds = and [ g ds' | (Dependency _ ds' _) <- ds ]+check (Dependency ln _ v) ds = and [ g ds' | (Dependency _ ds' _) <- ds ] where g = all ((`satisfies` v) . snd) . filter ((== ln) . fst) satisfies :: (Ord a) => Constraint a -> a -> Bool@@ -88,16 +80,6 @@ satisfies (Eq x) y = x == y satisfies (Bounded x y) z = satisfies x z && satisfies y z satisfies None _ = True--compatible :: (Ord a) => Constraint a -> Constraint a -> Bool-compatible LessThanEq{} LessThanEq{} = True-compatible (LessThanEq x) (GreaterThanEq y) = y <= x-compatible (Eq x) (Eq y) = x == y-compatible (Bounded x y) z = compatible x z && compatible y z-compatible GreaterThanEq{} GreaterThanEq{} = True-compatible (LessThanEq x) (Eq y) = y <= x-compatible None _ = True-compatible x y = compatible y x makeBaseFunctor ''Constraint
test/Spec.hs view
@@ -24,9 +24,6 @@ ghcMod :: Dependency ghcMod = Dependency "ghc-mod" [("lens", LessThanEq defV)] defV -deps :: [Dependency]-deps = [free, lens, comonad]- mapSingles :: [(d, b)] -> [(d, S.Set b)] mapSingles = fmap (second S.singleton) @@ -36,12 +33,9 @@ mapSingles [("ghc-mod", ghcMod), ("comonad", comonad), ("free", free)]) main :: IO ()-main = hspec $ parallel $ do- describe "buildSequence" $- it "correctly orders dependencies" $- buildSequence deps `shouldBe` [[free, comonad], [lens]]+main = hspec $ parallel $ describe "resolveDependencies" $ do- it "correctly resolves dependencies in a package set" $- resolveDependencies set [newLens] `shouldBe` Right [[free, comonad], [newLens]]- it "correctly resolves dependencies in a package set" $- resolveDependencies set [ghcMod] `shouldBe` Right [[free, comonad], [lens], [ghcMod]]+ it "correctly resolves dependencies in a package set" $+ resolveDependencies set [newLens] `shouldBe` Right [[free, comonad], [newLens]]+ it "correctly resolves dependencies in a package set" $+ resolveDependencies set [ghcMod] `shouldBe` Right [[free, comonad], [lens], [ghcMod]]