packages feed

bearriver 0.10.4.1 → 0.10.4.2

raw patch · 2 files changed

+32/−14 lines, 2 filesdep +MonadRandom

Dependencies added: MonadRandom

Files

bearriver.cabal view
@@ -1,5 +1,5 @@ name:                bearriver-version:             0.10.4.1+version:             0.10.4.2 synopsis:            A replacement of Yampa based on Monadic Stream Functions. description:         A Yampa replacement built using Dunai. homepage:            keera.co.uk@@ -23,7 +23,7 @@                        FRP.Yampa.AffineSpace,                        FRP.BearRiver -  build-depends:       base >=4.7 && <5, transformers >=0.3, mtl, dunai+  build-depends:       base >=4.7 && <5, transformers >=0.3, mtl, dunai, MonadRandom   hs-source-dirs:      src/   default-language:    Haskell2010 
src/FRP/BearRiver.hs view
@@ -12,19 +12,24 @@ -- there do not seem to exist any obvious limitations.  import           Control.Applicative-import           Control.Arrow                as X-import qualified Control.Category             as Category-import           Control.Monad                (mapM)---import           Control.Monad.Reader+import           Control.Arrow                                  as X+import qualified Control.Category                               as Category+import           Control.Monad                                  (mapM)+import           Control.Monad.Random import           Control.Monad.Trans.Maybe import           Control.Monad.Trans.MSF-import           Data.Traversable             as T+import           Control.Monad.Trans.MSF.Except                 as MSF+import           Control.Monad.Trans.MSF.Random import           Data.Functor.Identity import           Data.Maybe-import           Data.MonadicStreamFunction   as X hiding (reactimate, switch, sum, trace)-import qualified Data.MonadicStreamFunction   as MSF-import           Data.MonadicStreamFunction.ArrowLoop-import           FRP.Yampa.VectorSpace        as X+import           Data.MonadicStreamFunction                     as X hiding (reactimate,+                                                                      sum,+                                                                      switch,+                                                                      trace)+import qualified Data.MonadicStreamFunction                     as MSF+import           Data.MonadicStreamFunction.Instances.ArrowLoop+import           Data.Traversable                               as T+import           FRP.Yampa.VectorSpace                          as X  type Time  = Double type DTime = Double@@ -153,6 +158,21 @@                   ct = if t' < 0 then constant (NoEvent, t') else go               return ((e, t'), ct) +occasionally :: MonadRandom m +             => Time -- ^ The time /q/ after which the event should be produced on average+             -> b    -- ^ Value to produce at time of event+             -> SF m a (Event b)+occasionally tAvg b+  | tAvg <= 0 = error "dunai: Non-positive average interval in occasionally."+  | otherwise = proc _ -> do+      r   <- getRandomRS (0, 1) -< ()+      dt  <- timeDelta          -< ()+      let p = 1 - exp (-(dt / tAvg))+      returnA -< if r < p then Event b else NoEvent+ where+  timeDelta :: Monad m => SF m a DTime+  timeDelta = arrM_ ask+ (-->) :: Monad m => b -> SF m a b -> SF m a b b0 --> sf = MSF $ \a -> do   (_, ct) <- unMSF sf a@@ -209,7 +229,7 @@   let b' = f a a dt b   return (b, iterFrom f b') -reactimate :: IO a -> (Bool -> IO (DTime, Maybe a)) -> (Bool -> b -> IO Bool) -> SF Identity a b -> IO ()+reactimate :: Monad m => m a -> (Bool -> m (DTime, Maybe a)) -> (Bool -> b -> m Bool) -> SF Identity a b -> m () reactimate senseI sense actuate sf = do   -- runMaybeT $ MSF.reactimate $ liftMSFTrans (senseSF >>> sfIO) >>> actuateSF   MSF.reactimateB $ senseSF >>> sfIO >>> actuateSF@@ -234,6 +254,4 @@ -- * Auxiliary  -- ** Tuples- dup  x     = (x,x)-swap (x,y) = (y,x)