From: Nathaniel Wesley Filardo Date: Fri, 29 Mar 2013 18:03:12 +0000 (-0400) Subject: Dependency fixes, hopefully X-Git-Url: https://hydra-www.ietfng.org/gitweb/?a=commitdiff_plain;h=30edbe01cee925bdeba14715c000f5faa552599d;p=dyna2 Dependency fixes, hopefully --- diff --git a/dyna.cabal b/dyna.cabal index 2f69428..e00fe19 100644 --- a/dyna.cabal +++ b/dyna.cabal @@ -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, diff --git a/src/Dyna/Analysis/Mode/Inst.hs b/src/Dyna/Analysis/Mode/Inst.hs index fa2a8c6..cabd6e9 100644 --- a/src/Dyna/Analysis/Mode/Inst.hs +++ b/src/Dyna/Analysis/Mode/Inst.hs @@ -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 ------------------------------------------------------------------------}}} diff --git a/src/Dyna/XXX/DataUtils.hs b/src/Dyna/XXX/DataUtils.hs index bf1382d..8aa07c2 100644 --- a/src/Dyna/XXX/DataUtils.hs +++ b/src/Dyna/XXX/DataUtils.hs @@ -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]