reactive-banana 0.8.1.1 → 0.8.1.2
raw patch · 3 files changed
+20/−11 lines, 3 filesdep +psqueuesdep −pqueuePVP ok
version bump matches the API change (PVP)
Dependencies added: psqueues
Dependencies removed: pqueue
API changes (from Hackage documentation)
Files
- CHANGELOG.md +7/−0
- reactive-banana.cabal +3/−3
- src/Reactive/Banana/Prim/Dependencies.hs +10/−8
CHANGELOG.md view
@@ -1,6 +1,13 @@ Changelog for the `reactive-banana` package ------------------------------------------- +**version 0.8.1.2**++* Depend on the [psqueues][] package instead of the [pqueue][] package for the priority queue.++ [psqueues]: https://hackage.haskell.org/package/psqueues+ [pqueue]: http://hackage.haskell.org/package/pqueue+ **version 0.8.1.1** * Links to the Haskell wiki now point to the `http://wiki.haskell.org` subdomain.
reactive-banana.cabal view
@@ -1,5 +1,5 @@ Name: reactive-banana-Version: 0.8.1.1+Version: 0.8.1.2 Synopsis: Library for functional reactive programming (FRP). Description: Reactive-banana is a library for Functional Reactive Programming (FRP).@@ -67,7 +67,7 @@ build-depends: unordered-containers >= 0.2.1.0 && < 0.3, hashable >= 1.1 && < 1.3,- pqueue >= 1.0 && < 1.3+ psqueues >= 0.2 && < 0.3 -- CPP-options: -DUseExtensions @@ -106,4 +106,4 @@ test-framework >= 0.6 && < 0.9, test-framework-hunit >= 0.2 && < 0.4, reactive-banana, vault, containers, transformers,- unordered-containers, hashable, pqueue+ unordered-containers, hashable, psqueues
src/Reactive/Banana/Prim/Dependencies.hs view
@@ -17,7 +17,7 @@ import qualified Data.HashMap.Strict as Map import qualified Data.HashSet as Set import Data.Hashable-import qualified Data.PQueue.Prio.Min as Q+import qualified Data.IntPSQ as Q import Reactive.Banana.Prim.Order import qualified Reactive.Banana.Prim.Order as Order@@ -114,21 +114,23 @@ Children -> go $ insertList (children deps a) q2 -- | Queue for traversing dependencies.-data DepsQueue a = DQ !(Q.MinPQueue Level a) !(Set a)+--+-- The 'Int' is a key supply for the priority search queue.+data DepsQueue a = DQ !(Q.IntPSQ Level a) !(Set a) Int emptyQ :: DepsQueue a-emptyQ = DQ Q.empty Set.empty+emptyQ = DQ Q.empty Set.empty 0 insert :: (Eq a, Hashable a) => Level -> a -> DepsQueue a -> DepsQueue a-insert k a q@(DQ queue seen) = {-# SCC insert #-}+insert k a q@(DQ queue seen n) = {-# SCC insert #-} if a `Set.member` seen then q- else DQ (Q.insert k a queue) (Set.insert a seen)+ else DQ (Q.insert (n+1) k a queue) (Set.insert a seen) (n+1) minView :: DepsQueue a -> Maybe (a, DepsQueue a)-minView (DQ queue seen) = {-# SCC minView #-} case Q.minView queue of- Nothing -> Nothing- Just (a, queue2) -> Just (a, DQ queue2 seen)+minView (DQ queue seen n) = {-# SCC minView #-} case Q.minView queue of+ Nothing -> Nothing+ Just (_, _, a, queue2) -> Just (a, DQ queue2 seen n) {----------------------------------------------------------------------------- Small tests