]> hydra-www.ietfng.org Git - dyna2/commitdiff
Dependency fixes, hopefully
authorNathaniel Wesley Filardo <nwf@cs.jhu.edu>
Fri, 29 Mar 2013 18:03:12 +0000 (14:03 -0400)
committerNathaniel Wesley Filardo <nwf@cs.jhu.edu>
Fri, 29 Mar 2013 18:03:12 +0000 (14:03 -0400)
dyna.cabal
src/Dyna/Analysis/Mode/Inst.hs
src/Dyna/XXX/DataUtils.hs

index 2f69428843a50d7dfacc42dfcff842f6b327b88a..e00fe190d5eb6412855c47b5fef55214bc58aea9 100644 (file)
@@ -42,7 +42,6 @@ Library
                         bytestring >=0.9,
                         charset >=0.3,
                         containers >=0.4,
-                        ghc-prim >= 0.3,
                         HUnit >=1.2,
                         mtl >=2.1,
                         lens >=3.8,
@@ -136,7 +135,6 @@ Test-suite dyna-selftests
                         bytestring >=0.9,
                         charset >=0.3,
                         containers >=0.4,
-                        ghc-prim >= 0.3,
                         HUnit >=1.2,
                         mtl >=2.1,
                         lens >=3.8,
index fa2a8c6d610a09402af159a51fdd4429c2ea6114..cabd6e98b08afb7facf584397ada43720ce24931 100644 (file)
@@ -35,7 +35,7 @@ import qualified Data.Foldable            as F
 import qualified Data.Traversable         as T
 import qualified Data.Map                 as M
 -- import qualified Data.Set                 as S
-import           Dyna.XXX.DataUtils
+import           Dyna.XXX.DataUtils       as XDU
 import           Dyna.XXX.MonadUtils
 
 import           Dyna.Analysis.Mode.Uniq
@@ -446,9 +446,9 @@ mergeBoundUB :: (Monad m, Ord f)
              -> (i' -> m i'')
              -> M.Map f [i] -> M.Map f [i'] -> m (M.Map f [i''])
 mergeBoundUB q l r lm rm = T.sequence
-                       $ M.mergeWithKey (\_ a b -> Just $ sequence $ zipWith q a b)
-                                        (fmap (T.mapM l))
-                                        (fmap (T.mapM r))
-                                        lm rm
+                       $ XDU.mergeWithKey (\_ a b -> Just $ sequence $ zipWith q a b)
+                                          (fmap (T.mapM l))
+                                          (fmap (T.mapM r))
+                                          lm rm
 
 ------------------------------------------------------------------------}}}
index bf1382db5fbeab3c7400aff8e01ce357ff6c9efb..8aa07c235662fa1d5ed126a407a658aa7adf272d 100644 (file)
@@ -13,6 +13,8 @@ module Dyna.XXX.DataUtils (
   mapInOrApp,
   -- ** Unification-style utilities
   mapSemiprune,
+  -- ** Backports
+  mergeWithKey,
   -- * 'Data.Set' utilities
   -- ** Quantification
   setExists, setForall
@@ -99,3 +101,14 @@ zipWithTails fb fl fr = go
   go [] (r:rs) = fr r : map fr rs
   go (l:ls) [] = fl l : map fl ls
   go (l:ls) (r:rs) = fb l r : go ls rs
+
+
+-- | An in-efficient version of map merge, to avoid the need to depend on
+-- containers >=0.5, because that breaks people with GHC 7.4.  Sigh.
+mergeWithKey :: Ord k => (k -> a -> b -> Maybe c) -> (M.Map k a -> M.Map k c) -> (M.Map k b -> M.Map k c)
+             -> M.Map k a -> M.Map k b -> M.Map k c
+mergeWithKey f g1 g2 ml mr =
+    let ol = g1 (M.difference ml mr)
+    in let or = g2 (M.difference mr ml)
+    in let mb = M.mapMaybe id $ M.intersectionWithKey f ml mr
+    in M.unions [ol,or,mb]