aivika-realtime 0.1.2 → 0.2
raw patch · 15 files changed
+174/−72 lines, 15 filesdep ~aivikadep ~aivika-transformersPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: aivika, aivika-transformers
API changes (from Hackage documentation)
- Simulation.Aivika.RealTime.Ref.Base: instance (GHC.Base.Monad m, Control.Monad.IO.Class.MonadIO m) => Simulation.Aivika.Trans.Ref.Base.MonadRef (Simulation.Aivika.RealTime.Internal.RT.RT m)
- Simulation.Aivika.RealTime.Ref.Base: instance Control.Monad.IO.Class.MonadIO m => Simulation.Aivika.Trans.Ref.Base.MonadRef0 (Simulation.Aivika.RealTime.Internal.RT.RT m)
+ Simulation.Aivika.RealTime.Ref.Base.Lazy: instance (GHC.Base.Monad m, Control.Monad.IO.Class.MonadIO m) => Simulation.Aivika.Trans.Ref.Base.Lazy.MonadRef (Simulation.Aivika.RealTime.Internal.RT.RT m)
+ Simulation.Aivika.RealTime.Ref.Base.Lazy: instance Control.Monad.IO.Class.MonadIO m => Simulation.Aivika.Trans.Ref.Base.Lazy.MonadRef0 (Simulation.Aivika.RealTime.Internal.RT.RT m)
+ Simulation.Aivika.RealTime.Ref.Base.Strict: instance (GHC.Base.Monad m, Control.Monad.IO.Class.MonadIO m) => Simulation.Aivika.Trans.Ref.Base.Strict.MonadRef (Simulation.Aivika.RealTime.Internal.RT.RT m)
+ Simulation.Aivika.RealTime.Ref.Base.Strict: instance Control.Monad.IO.Class.MonadIO m => Simulation.Aivika.Trans.Ref.Base.Strict.MonadRef0 (Simulation.Aivika.RealTime.Internal.RT.RT m)
Files
- CHANGELOG.md +5/−0
- LICENSE +1/−1
- Simulation/Aivika/RealTime.hs +1/−1
- Simulation/Aivika/RealTime/Comp.hs +1/−1
- Simulation/Aivika/RealTime/Event.hs +1/−1
- Simulation/Aivika/RealTime/Generator.hs +14/−3
- Simulation/Aivika/RealTime/Internal/Channel.hs +1/−1
- Simulation/Aivika/RealTime/Internal/Event.hs +1/−1
- Simulation/Aivika/RealTime/Internal/RT.hs +1/−1
- Simulation/Aivika/RealTime/QueueStrategy.hs +1/−1
- Simulation/Aivika/RealTime/RT.hs +3/−2
- Simulation/Aivika/RealTime/Ref/Base.hs +5/−54
- Simulation/Aivika/RealTime/Ref/Base/Lazy.hs +66/−0
- Simulation/Aivika/RealTime/Ref/Base/Strict.hs +66/−0
- aivika-realtime.cabal +7/−5
CHANGELOG.md view
@@ -1,4 +1,9 @@ +Version 0.2+-----++* Implemented lazy references.+ Version 0.1 -----
LICENSE view
@@ -1,4 +1,4 @@-Copyright (c) 2016 David Sorokin <david.sorokin@gmail.com>+Copyright (c) 2016-2017 David Sorokin <david.sorokin@gmail.com> All rights reserved.
Simulation/Aivika/RealTime.hs view
@@ -1,7 +1,7 @@ -- | -- Module : Simulation.Aivika.RealTime--- Copyright : Copyright (c) 2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright : Copyright (c) 2016-2017, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental
Simulation/Aivika/RealTime/Comp.hs view
@@ -1,7 +1,7 @@ -- | -- Module : Simulation.Aivika.RealTime.Comp--- Copyright : Copyright (c) 2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright : Copyright (c) 2016-2017, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental
Simulation/Aivika/RealTime/Event.hs view
@@ -3,7 +3,7 @@ -- | -- Module : Simulation.Aivika.RealTime.Event--- Copyright : Copyright (c) 2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright : Copyright (c) 2016-2017, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental
Simulation/Aivika/RealTime/Generator.hs view
@@ -3,7 +3,7 @@ -- | -- Module : Simulation.Aivika.RealTime.Generator--- Copyright : Copyright (c) 2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright : Copyright (c) 2016-2017, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental@@ -33,8 +33,10 @@ data Generator (RT m) = Generator { generator01 :: RT m Double, -- ^ the generator of uniform numbers from 0 to 1- generatorNormal01 :: RT m Double+ generatorNormal01 :: RT m Double, -- ^ the generator of normal numbers with mean 0 and variance 1+ generatorSequenceNo :: RT m Int+ -- ^ the generator of sequence numbers } {-# INLINE generateUniform #-}@@ -76,6 +78,9 @@ {-# INLINE generateDiscrete #-} generateDiscrete = generateDiscrete01 . generator01 + {-# INLINE generateSequenceNo #-}+ generateSequenceNo = generatorSequenceNo+ {-# INLINABLE newGenerator #-} newGenerator tp = case tp of@@ -100,8 +105,14 @@ {-# INLINABLE newRandomGenerator01 #-} newRandomGenerator01 g01 = do gNormal01 <- newNormalGenerator01 g01+ gSeqNoRef <- liftIO $ newIORef 0+ let gSeqNo =+ do x <- liftIO $ readIORef gSeqNoRef+ liftIO $ modifyIORef' gSeqNoRef (+1)+ return x return Generator { generator01 = g01,- generatorNormal01 = gNormal01 }+ generatorNormal01 = gNormal01,+ generatorSequenceNo = gSeqNo } -- | Create a normal random number generator with mean 0 and variance 1 -- by the specified generator of uniform random numbers from 0 to 1.
Simulation/Aivika/RealTime/Internal/Channel.hs view
@@ -1,7 +1,7 @@ -- | -- Module : Simulation.Aivika.RealTime.Internal.Channel--- Copyright : Copyright (c) 2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright : Copyright (c) 2016-2017, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental
Simulation/Aivika/RealTime/Internal/Event.hs view
@@ -3,7 +3,7 @@ -- | -- Module : Simulation.Aivika.RealTime.Internal.Event--- Copyright : Copyright (c) 2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright : Copyright (c) 2016-2017, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental
Simulation/Aivika/RealTime/Internal/RT.hs view
@@ -1,7 +1,7 @@ -- | -- Module : Simulation.Aivika.RealTime.Internal.RT--- Copyright : Copyright (c) 2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright : Copyright (c) 2016-2017, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental
Simulation/Aivika/RealTime/QueueStrategy.hs view
@@ -3,7 +3,7 @@ -- | -- Module : Simulation.Aivika.RealTime.QueueStrategy--- Copyright : Copyright (c) 2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright : Copyright (c) 2016-2017, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental
Simulation/Aivika/RealTime/RT.hs view
@@ -1,7 +1,7 @@ -- | -- Module : Simulation.Aivika.RealTime.RT--- Copyright : Copyright (c) 2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright : Copyright (c) 2016-2017, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental@@ -43,7 +43,8 @@ import Simulation.Aivika.RealTime.Event import Simulation.Aivika.RealTime.QueueStrategy import Simulation.Aivika.RealTime.Comp-import Simulation.Aivika.RealTime.Ref.Base+import Simulation.Aivika.RealTime.Ref.Base.Lazy+import Simulation.Aivika.RealTime.Ref.Base.Strict -- | An implementation of the 'MonadDES' type class. instance (Monad m, MonadIO m, MonadException m, MonadComp m) => MonadDES (RT m) where
Simulation/Aivika/RealTime/Ref/Base.hs view
@@ -1,66 +1,17 @@ -{-# LANGUAGE TypeFamilies #-}- -- | -- Module : Simulation.Aivika.RealTime.Ref.Base--- Copyright : Copyright (c) 2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright : Copyright (c) 2016-2017, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental -- Tested with: GHC 8.0.1 ----- The 'RT' monad can be an instance of 'MonadRef'.+-- The 'RT' monad can be an instance of strict 'MonadRef'. ---module Simulation.Aivika.RealTime.Ref.Base () where--import Data.IORef--import Control.Monad-import Control.Monad.Trans+module Simulation.Aivika.RealTime.Ref.Base + (module Simulation.Aivika.RealTime.Ref.Base.Strict) where -import Simulation.Aivika.Trans.Internal.Types import Simulation.Aivika.Trans.Ref.Base -import Simulation.Aivika.RealTime.Internal.RT---- | The 'RT' monad is an instance of 'MonadRef'.-instance (Monad m, MonadIO m) => MonadRef (RT m) where-- {-# SPECIALISE instance MonadRef (RT IO) #-}-- -- | A type safe wrapper for the 'IORef' reference.- newtype Ref (RT m) a = Ref { refValue :: IORef a }-- {-# INLINE newRef #-}- newRef a =- Simulation $ \r ->- do x <- liftIO $ newIORef a- return Ref { refValue = x }- - {-# INLINE readRef #-}- readRef r = Event $ \p ->- liftIO $ readIORef (refValue r)-- {-# INLINE writeRef #-}- writeRef r a = Event $ \p -> - a `seq` liftIO $ writeIORef (refValue r) a-- {-# INLINE modifyRef #-}- modifyRef r f = Event $ \p -> - do a <- liftIO $ readIORef (refValue r)- let b = f a- b `seq` liftIO $ writeIORef (refValue r) b-- {-# INLINE equalRef #-}- equalRef (Ref r1) (Ref r2) = (r1 == r2)---- | The 'RT' monad is an instance of 'MonadRef0'.-instance MonadIO m => MonadRef0 (RT m) where-- {-# SPECIALISE instance MonadRef0 (RT IO) #-}-- {-# INLINE newRef0 #-}- newRef0 a =- do x <- liftIO $ newIORef a- return Ref { refValue = x }- +import Simulation.Aivika.RealTime.Ref.Base.Strict
+ Simulation/Aivika/RealTime/Ref/Base/Lazy.hs view
@@ -0,0 +1,66 @@++{-# LANGUAGE TypeFamilies #-}++-- |+-- Module : Simulation.Aivika.RealTime.Ref.Base.Lazy+-- Copyright : Copyright (c) 2016-2017, David Sorokin <david.sorokin@gmail.com>+-- License : BSD3+-- Maintainer : David Sorokin <david.sorokin@gmail.com>+-- Stability : experimental+-- Tested with: GHC 8.0.1+--+-- The 'RT' monad can be an instance of lazy 'MonadRef'.+--+module Simulation.Aivika.RealTime.Ref.Base.Lazy () where++import Data.IORef++import Control.Monad+import Control.Monad.Trans++import Simulation.Aivika.Trans.Internal.Types+import Simulation.Aivika.Trans.Ref.Base.Lazy++import Simulation.Aivika.RealTime.Internal.RT++-- | The 'RT' monad is an instance of 'MonadRef'.+instance (Monad m, MonadIO m) => MonadRef (RT m) where++ {-# SPECIALISE instance MonadRef (RT IO) #-}++ -- | A type safe wrapper for the 'IORef' reference.+ newtype Ref (RT m) a = Ref { refValue :: IORef a }++ {-# INLINE newRef #-}+ newRef a =+ Simulation $ \r ->+ do x <- liftIO $ newIORef a+ return Ref { refValue = x }+ + {-# INLINE readRef #-}+ readRef r = Event $ \p ->+ liftIO $ readIORef (refValue r)++ {-# INLINE writeRef #-}+ writeRef r a = Event $ \p -> + liftIO $ writeIORef (refValue r) a++ {-# INLINE modifyRef #-}+ modifyRef r f = Event $ \p -> + do a <- liftIO $ readIORef (refValue r)+ let b = f a+ liftIO $ writeIORef (refValue r) b++ {-# INLINE equalRef #-}+ equalRef (Ref r1) (Ref r2) = (r1 == r2)++-- | The 'RT' monad is an instance of 'MonadRef0'.+instance MonadIO m => MonadRef0 (RT m) where++ {-# SPECIALISE instance MonadRef0 (RT IO) #-}++ {-# INLINE newRef0 #-}+ newRef0 a =+ do x <- liftIO $ newIORef a+ return Ref { refValue = x }+
+ Simulation/Aivika/RealTime/Ref/Base/Strict.hs view
@@ -0,0 +1,66 @@++{-# LANGUAGE TypeFamilies #-}++-- |+-- Module : Simulation.Aivika.RealTime.Ref.Base.Strict+-- Copyright : Copyright (c) 2016-2017, David Sorokin <david.sorokin@gmail.com>+-- License : BSD3+-- Maintainer : David Sorokin <david.sorokin@gmail.com>+-- Stability : experimental+-- Tested with: GHC 8.0.1+--+-- The 'RT' monad can be an instance of strict 'MonadRef'.+--+module Simulation.Aivika.RealTime.Ref.Base.Strict () where++import Data.IORef++import Control.Monad+import Control.Monad.Trans++import Simulation.Aivika.Trans.Internal.Types+import Simulation.Aivika.Trans.Ref.Base.Strict++import Simulation.Aivika.RealTime.Internal.RT++-- | The 'RT' monad is an instance of 'MonadRef'.+instance (Monad m, MonadIO m) => MonadRef (RT m) where++ {-# SPECIALISE instance MonadRef (RT IO) #-}++ -- | A type safe wrapper for the 'IORef' reference.+ newtype Ref (RT m) a = Ref { refValue :: IORef a }++ {-# INLINE newRef #-}+ newRef a =+ Simulation $ \r ->+ do x <- liftIO $ newIORef a+ return Ref { refValue = x }+ + {-# INLINE readRef #-}+ readRef r = Event $ \p ->+ liftIO $ readIORef (refValue r)++ {-# INLINE writeRef #-}+ writeRef r a = Event $ \p -> + a `seq` liftIO $ writeIORef (refValue r) a++ {-# INLINE modifyRef #-}+ modifyRef r f = Event $ \p -> + do a <- liftIO $ readIORef (refValue r)+ let b = f a+ b `seq` liftIO $ writeIORef (refValue r) b++ {-# INLINE equalRef #-}+ equalRef (Ref r1) (Ref r2) = (r1 == r2)++-- | The 'RT' monad is an instance of 'MonadRef0'.+instance MonadIO m => MonadRef0 (RT m) where++ {-# SPECIALISE instance MonadRef0 (RT IO) #-}++ {-# INLINE newRef0 #-}+ newRef0 a =+ do x <- liftIO $ newIORef a+ return Ref { refValue = x }+
aivika-realtime.cabal view
@@ -1,5 +1,5 @@ name: aivika-realtime-version: 0.1.2+version: 0.2 synopsis: Soft real-time simulation module for the Aivika library description: This package allows running soft real-time simulations based on the aivika-transformers [1] library.@@ -9,10 +9,10 @@ category: Simulation license: BSD3 license-file: LICENSE-copyright: (c) 2016. David Sorokin <david.sorokin@gmail.com>+copyright: (c) 2016-2017. David Sorokin <david.sorokin@gmail.com> author: David Sorokin maintainer: David Sorokin <david.sorokin@gmail.com>-homepage: http://www.aivikasoft.com/en/products/aivika.html+homepage: http://www.aivikasoft.com cabal-version: >= 1.6 build-type: Simple tested-with: GHC == 7.10.3@@ -30,6 +30,8 @@ Simulation.Aivika.RealTime.Generator Simulation.Aivika.RealTime.QueueStrategy Simulation.Aivika.RealTime.Ref.Base+ Simulation.Aivika.RealTime.Ref.Base.Lazy+ Simulation.Aivika.RealTime.Ref.Base.Strict Simulation.Aivika.RealTime.RT other-modules: Simulation.Aivika.RealTime.Internal.Channel@@ -43,8 +45,8 @@ random >= 1.0.0.3, async >= 2.0, time >= 1.5.0.1,- aivika >= 4.5,- aivika-transformers >= 4.6+ aivika >= 5.1,+ aivika-transformers >= 5.1 extensions: TypeFamilies, MultiParamTypeClasses,