packages feed

equivalence 0.3.2 → 0.3.3

raw patch · 2 files changed

+20/−17 lines, 2 filesdep ~basePVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: base

API changes (from Hackage documentation)

- Data.Equivalence.Monad: class (Monad m, Applicative m, Ord v) => MonadEquiv c v d m | m -> v, m -> c, m -> d where equate x y = equateAll [x, y] combine x y = combineAll [x, y] >> return x
+ Data.Equivalence.Monad: class (Monad m, Applicative m, Ord v) => MonadEquiv c v d m | m -> v, m -> c, m -> d

Files

equivalence.cabal view
@@ -1,9 +1,9 @@ Name:            equivalence-Version:         0.3.2+Version:         0.3.3 License:         BSD3 License-File:    LICENSE Author:          Patrick Bahr-Maintainer:      paba@di.ku.dk+Maintainer:      paba@itu.dk Homepage:        https://github.com/pa-ba/equivalence bug-reports:     https://github.com/pa-ba/equivalence/issues/new Synopsis:        Maintaining an equivalence relation implemented as union-find using STT.@@ -34,12 +34,12 @@   Other-Modules:	Data.Equivalence.Monad_Test   hs-source-dirs:	src testsuite/tests   Build-Depends:        base >= 4, template-haskell, containers, mtl >= 2.0.1, QuickCheck >= 2,-                        test-framework, test-framework-quickcheck2, STMonadTrans,+                        test-framework, test-framework-quickcheck2, STMonadTrans >= 0.4.3,                         transformers >= 0.2, transformers-compat >= 0.3  Library   Build-Depends:-    base >= 4 && < 5, containers, mtl >= 2.0.1, STMonadTrans >= 0.4.1,+    base >= 4 && < 5, containers, mtl >= 2.0.1, STMonadTrans >= 0.4.3,     transformers >= 0.2, transformers-compat >= 0.3   Exposed-Modules:     Data.Equivalence.STT,
src/Data/Equivalence/STT.hs view
@@ -249,20 +249,23 @@ equateEntry :: (Monad m, Applicative m, Ord a) => Equiv s c a -> Entry s c a -> Entry s c a -> STT s m (Entry s c a) equateEntry Equiv {combDesc = mkDesc} repx@(Entry rx) repy@(Entry ry) =    if (rx /= ry) then do-    dx@Root{entryWeight = wx, entryDesc = chx, entryValue = vx} <- readSTRef rx-    dy@Root{entryWeight = wy, entryDesc = chy, entryValue = vy} <- readSTRef ry-    if  wx >= wy-      then do-        writeSTRef ry Node {entryParent = repx, entryValue = vy}-        writeSTRef rx dx{entryWeight = wx + wy, entryDesc = mkDesc chx chy}-        return repx-      else do-       writeSTRef rx Node {entryParent = repy, entryValue = vx}-       writeSTRef ry dy{entryWeight = wx + wy, entryDesc = mkDesc chx chy}-       return repy-    else return  repx-+    dx <- readSTRef rx+    dy <- readSTRef ry+    case (dx, dy) of+      ( Root{entryWeight = wx, entryDesc = chx, entryValue = vx}+        , Root{entryWeight = wy, entryDesc = chy, entryValue = vy} ) ->+        if  wx >= wy+        then do+          writeSTRef ry Node {entryParent = repx, entryValue = vy}+          writeSTRef rx dx{entryWeight = wx + wy, entryDesc = mkDesc chx chy}+          return repx+        else do+          writeSTRef rx Node {entryParent = repy, entryValue = vx}+          writeSTRef ry dy{entryWeight = wx + wy, entryDesc = mkDesc chx chy}+          return repy +      _ -> fail "error on `equateEntry`"+  else return  repx  combineEntries :: (Monad m, Applicative m, Ord a)                => Equiv s c a -> [b] -> (b -> STT s m (Entry s c a)) -> STT s m ()