dataflower 0.2.3.0 → 0.3.0.0
raw patch · 2 files changed
+14/−21 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- dataflower.cabal +2/−2
- src/Dataflow/Primitives.hs +12/−19
dataflower.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: c36b2b11b6e3244c6cf8d82e5ffb803aa706157c2751aa29fdea8d10815cbfc3+-- hash: 9d147f4f1bd73d431e7656ae023cb460b458b917a64239625a7673a5ec972915 name: dataflower-version: 0.2.3.0+version: 0.3.0.0 synopsis: A Pure-Haskell Timely Dataflow System description: See README homepage: https://github.com/doublecrowngaming/dataflower#readme
src/Dataflow/Primitives.hs view
@@ -30,10 +30,10 @@ import Control.Monad.State.Strict (StateT, get, gets, modify) import Control.Monad.Trans (lift) import Data.Hashable (Hashable (..))-import Data.IORef (IORef, atomicModifyIORef',- atomicWriteIORef, newIORef,- readIORef)+import Data.IORef (IORef, modifyIORef', newIORef,+ readIORef, writeIORef) import Data.Vector (Vector, empty, snoc, unsafeIndex)+import GHC.Exts (Any) import Numeric.Natural (Natural) import Prelude import Unsafe.Coerce (unsafeCoerce)@@ -68,16 +68,9 @@ inc (Epoch n) = Epoch (n + 1) --- | 'ErasedType' erases the type it wraps.-data ErasedType = forall i. EraseType i--unEraseType :: ErasedType -> a-unEraseType (EraseType x) = unsafeCoerce x-- data DataflowState = DataflowState {- dfsVertices :: Vector ErasedType,- dfsStates :: Vector (IORef ErasedType),+ dfsVertices :: Vector Any,+ dfsStates :: Vector (IORef Any), dfsFinalizers :: [Timestamp -> Dataflow ()], dfsLastVertexID :: VertexID, dfsLastStateID :: StateID,@@ -135,7 +128,7 @@ Dataflow $ do vertices <- gets dfsVertices - return $ unEraseType (vertices `unsafeIndex` vindex)+ return $ unsafeCoerce (vertices `unsafeIndex` vindex) -- | Store a provided vertex and obtain an 'Edge' that refers to it. registerVertex :: Vertex i -> Dataflow (Edge i)@@ -149,7 +142,7 @@ where addVertex vtx vid s = s {- dfsVertices = dfsVertices s `snoc` EraseType vtx,+ dfsVertices = dfsVertices s `snoc` unsafeCoerce vtx, dfsLastVertexID = vid } @@ -170,7 +163,7 @@ newState a = Dataflow $ do sid <- gets (dfsLastStateID >>> inc)- ioref <- lift $ newIORef (EraseType a)+ ioref <- lift $ newIORef (unsafeCoerce a) modify $ addState ioref sid @@ -182,7 +175,7 @@ dfsLastStateID = sid } -lookupStateRef :: StateRef s -> Dataflow (IORef ErasedType)+lookupStateRef :: StateRef s -> Dataflow (IORef Any) lookupStateRef (StateRef (StateID sindex)) = Dataflow $ do states <- gets dfsStates@@ -195,7 +188,7 @@ readState :: StateRef a -> Dataflow a readState sref = do ioref <- lookupStateRef sref- Dataflow $ lift $ (unEraseType <$> readIORef ioref)+ Dataflow $ lift (unsafeCoerce <$> readIORef ioref) -- | Overwrite the value stored in the `StateRef`. --@@ -203,7 +196,7 @@ writeState :: StateRef a -> a -> Dataflow () writeState sref x = do ioref <- lookupStateRef sref- Dataflow $ lift $ atomicWriteIORef ioref (EraseType x)+ Dataflow $ lift $ writeIORef ioref (unsafeCoerce x) -- | Update the value stored in `StateRef`. --@@ -211,7 +204,7 @@ modifyState :: StateRef a -> (a -> a) -> Dataflow () modifyState sref op = do ioref <- lookupStateRef sref- Dataflow $ lift $ atomicModifyIORef' ioref (\x -> (EraseType $ op (unEraseType x), ()))+ Dataflow $ lift $ modifyIORef' ioref (unsafeCoerce . op . unsafeCoerce) {-# INLINEABLE input #-} input :: Traversable t => t i -> Edge i -> Dataflow ()