frpnow 0.14 → 0.15
raw patch · 3 files changed
+11/−5 lines, 3 filesdep ~basePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base
API changes (from Hackage documentation)
- Control.FRPNow.BehaviorEnd: [behavior] :: BehaviorEnd x a -> Behavior x
- Control.FRPNow.BehaviorEnd: [end] :: BehaviorEnd x a -> Event a
- Control.FRPNow.BehaviorEnd: [open] :: (:.) f g x -> f (g x)
- Control.FRPNow.BehaviorEnd: instance (Control.FRPNow.BehaviorEnd.Swap b e, Control.FRPNow.Lib.Sample b) => Control.FRPNow.Lib.Sample (b Control.FRPNow.BehaviorEnd.:. e)
- Control.FRPNow.BehaviorEnd: instance (GHC.Base.Applicative b, GHC.Base.Applicative e) => GHC.Base.Applicative (b Control.FRPNow.BehaviorEnd.:. e)
- Control.FRPNow.BehaviorEnd: instance (GHC.Base.Functor a, GHC.Base.Functor b) => GHC.Base.Functor (a Control.FRPNow.BehaviorEnd.:. b)
- Control.FRPNow.BehaviorEnd: instance (GHC.Base.Monad b, Control.FRPNow.Lib.Plan b) => Control.FRPNow.BehaviorEnd.Swap b (Control.FRPNow.BehaviorEnd.BehaviorEnd x)
- Control.FRPNow.BehaviorEnd: instance Control.FRPNow.BehaviorEnd.Swap f g => GHC.Base.Monad (f Control.FRPNow.BehaviorEnd.:. g)
- Control.FRPNow.BehaviorEnd: instance Control.FRPNow.Lib.Plan b => Control.FRPNow.BehaviorEnd.Swap b Control.FRPNow.Core.Event
- Control.FRPNow.BehaviorEnd: instance GHC.Base.Applicative (Control.FRPNow.BehaviorEnd.BehaviorEnd x)
- Control.FRPNow.BehaviorEnd: instance GHC.Base.Functor (Control.FRPNow.BehaviorEnd.BehaviorEnd x)
- Control.FRPNow.BehaviorEnd: instance GHC.Base.Monad (Control.FRPNow.BehaviorEnd.BehaviorEnd x)
- Control.FRPNow.Core: instance Control.Monad.Fix.MonadFix Control.FRPNow.Core.Behavior
- Control.FRPNow.Core: instance Control.Monad.Fix.MonadFix Control.FRPNow.Core.Now
- Control.FRPNow.Core: instance Control.Monad.IO.Class.MonadIO Control.FRPNow.Core.Now
- Control.FRPNow.Core: instance GHC.Base.Applicative Control.FRPNow.Core.Behavior
- Control.FRPNow.Core: instance GHC.Base.Applicative Control.FRPNow.Core.Event
- Control.FRPNow.Core: instance GHC.Base.Applicative Control.FRPNow.Core.Now
- Control.FRPNow.Core: instance GHC.Base.Functor Control.FRPNow.Core.Behavior
- Control.FRPNow.Core: instance GHC.Base.Functor Control.FRPNow.Core.Event
- Control.FRPNow.Core: instance GHC.Base.Functor Control.FRPNow.Core.Now
- Control.FRPNow.Core: instance GHC.Base.Monad Control.FRPNow.Core.Behavior
- Control.FRPNow.Core: instance GHC.Base.Monad Control.FRPNow.Core.Event
- Control.FRPNow.Core: instance GHC.Base.Monad Control.FRPNow.Core.Now
- Control.FRPNow.Core: instance GHC.Exception.Exception Control.FRPNow.Core.FRPWaitsForNeverException
- Control.FRPNow.Core: instance GHC.Show.Show Control.FRPNow.Core.FRPWaitsForNeverException
- Control.FRPNow.EvStream: instance GHC.Base.Functor Control.FRPNow.EvStream.EvStream
- Control.FRPNow.EvStream: instance GHC.Base.Monoid (Control.FRPNow.EvStream.EvStream a)
- Control.FRPNow.Lib: instance Control.FRPNow.Lib.Plan Control.FRPNow.Core.Behavior
- Control.FRPNow.Lib: instance Control.FRPNow.Lib.Plan Control.FRPNow.Core.Now
- Control.FRPNow.Lib: instance Control.FRPNow.Lib.Sample Control.FRPNow.Core.Behavior
- Control.FRPNow.Lib: instance Control.FRPNow.Lib.Sample Control.FRPNow.Core.Now
- Control.FRPNow.Time: instance (GHC.Classes.Eq a, GHC.Float.Floating a, GHC.Classes.Ord a) => Control.FRPNow.Time.VectorSpace (a, a) a
- Control.FRPNow.Time: instance (GHC.Classes.Eq a, GHC.Float.Floating a, GHC.Classes.Ord a) => Control.FRPNow.Time.VectorSpace (a, a, a) a
- Control.FRPNow.Time: instance (GHC.Classes.Eq a, GHC.Float.Floating a, GHC.Classes.Ord a) => Control.FRPNow.Time.VectorSpace (a, a, a, a) a
- Control.FRPNow.Time: instance (GHC.Classes.Eq a, GHC.Float.Floating a, GHC.Classes.Ord a) => Control.FRPNow.Time.VectorSpace (a, a, a, a, a) a
- Control.FRPNow.Time: instance Control.FRPNow.Time.VectorSpace GHC.Types.Double GHC.Types.Double
- Control.FRPNow.Time: instance Control.FRPNow.Time.VectorSpace GHC.Types.Float GHC.Types.Float
- Control.FRPNow.Time: instance GHC.Classes.Eq t => GHC.Classes.Eq (Control.FRPNow.Time.TimeTag t a)
+ Control.FRPNow.BehaviorEnd: behavior :: BehaviorEnd x a -> Behavior x
+ Control.FRPNow.BehaviorEnd: end :: BehaviorEnd x a -> Event a
+ Control.FRPNow.BehaviorEnd: instance (Applicative b, Applicative e) => Applicative (b :. e)
+ Control.FRPNow.BehaviorEnd: instance (Functor a, Functor b) => Functor (a :. b)
+ Control.FRPNow.BehaviorEnd: instance (Monad b, Plan b) => Swap b (BehaviorEnd x)
+ Control.FRPNow.BehaviorEnd: instance (Swap b e, Sample b) => Sample (b :. e)
+ Control.FRPNow.BehaviorEnd: instance Applicative (BehaviorEnd x)
+ Control.FRPNow.BehaviorEnd: instance Functor (BehaviorEnd x)
+ Control.FRPNow.BehaviorEnd: instance Monad (BehaviorEnd x)
+ Control.FRPNow.BehaviorEnd: instance Plan b => Swap b Event
+ Control.FRPNow.BehaviorEnd: instance Swap f g => Monad (f :. g)
+ Control.FRPNow.BehaviorEnd: open :: (:.) f g x -> f (g x)
+ Control.FRPNow.Core: instance Applicative Behavior
+ Control.FRPNow.Core: instance Applicative Event
+ Control.FRPNow.Core: instance Applicative Now
+ Control.FRPNow.Core: instance Exception FRPWaitsForNeverException
+ Control.FRPNow.Core: instance Functor Behavior
+ Control.FRPNow.Core: instance Functor Event
+ Control.FRPNow.Core: instance Functor Now
+ Control.FRPNow.Core: instance Monad Behavior
+ Control.FRPNow.Core: instance Monad Event
+ Control.FRPNow.Core: instance Monad Now
+ Control.FRPNow.Core: instance MonadFix Behavior
+ Control.FRPNow.Core: instance MonadFix Now
+ Control.FRPNow.Core: instance MonadIO Now
+ Control.FRPNow.Core: instance Show FRPWaitsForNeverException
+ Control.FRPNow.Core: instance Typeable FRPWaitsForNeverException
+ Control.FRPNow.EvStream: instance Functor EvStream
+ Control.FRPNow.EvStream: instance Monoid (EvStream a)
+ Control.FRPNow.Lib: instance Plan Behavior
+ Control.FRPNow.Lib: instance Plan Now
+ Control.FRPNow.Lib: instance Sample Behavior
+ Control.FRPNow.Lib: instance Sample Now
+ Control.FRPNow.Time: instance (Eq a, Floating a, Ord a) => VectorSpace (a, a) a
+ Control.FRPNow.Time: instance (Eq a, Floating a, Ord a) => VectorSpace (a, a, a) a
+ Control.FRPNow.Time: instance (Eq a, Floating a, Ord a) => VectorSpace (a, a, a, a) a
+ Control.FRPNow.Time: instance (Eq a, Floating a, Ord a) => VectorSpace (a, a, a, a, a) a
+ Control.FRPNow.Time: instance Eq t => Eq (TimeTag t a)
+ Control.FRPNow.Time: instance VectorSpace Double Double
+ Control.FRPNow.Time: instance VectorSpace Float Float
- Control.FRPNow.Time: integrate :: (VectorSpace v time) => Behavior time -> Behavior v -> Behavior (Behavior v)
+ Control.FRPNow.Time: integrate :: VectorSpace v time => Behavior time -> Behavior v -> Behavior (Behavior v)
Files
- ChangeLog +1/−0
- Control/FRPNow/Core.hs +9/−4
- frpnow.cabal +1/−1
ChangeLog view
@@ -1,3 +1,4 @@+0.15 Fixes a Prelude.undefined error 0.14 Fixes a space leak, fixes integration being factor 2 off 0.13 Removed Show from integrate, added cstep 0.12 Fixed BehaviorFix, added integration
Control/FRPNow/Core.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE LambdaCase,RecursiveDo, FlexibleContexts, ExistentialQuantification, Rank2Types,GeneralizedNewtypeDeriving #-}+{-# LANGUAGE DeriveDataTypeable, LambdaCase,RecursiveDo, FlexibleContexts, ExistentialQuantification, Rank2Types,GeneralizedNewtypeDeriving #-} ----------------------------------------------------------------------------- -- | -- Module : Control.FRPNow.Core@@ -511,7 +511,7 @@ makeLazy :: M (Event a) -> M (Event a) makeLazy m = ReaderT $ \env -> do n <- curRound (clock env) - r <- newIORef undefined+ r <- newIORef (error "should not have read lazy yet") modifyIORef (laziesRef env) (Lazy m r :) return (readLazyState n r) @@ -535,7 +535,12 @@ -- When given a event carrying a now computation, execute that now computation as soon as the event occurs. -- If the event has already occured when 'planNow' is called, then the 'Now' computation will be executed immediatly. planNow :: Event (Now a) -> Now (Event a)-planNow e = Now $ plan makeStrongRef (getNow <$> e)+planNow e = Now $ + do e' <- runE e+ case e' of+ Occ x -> pure <$> getNow x+ Never -> return Never+ _ -> plan makeStrongRef (getNow <$> e) plan :: (forall v. IORef v -> IO (Ref (IORef v))) -> Event (M a) -> M (Event a) plan makeRef e = @@ -565,7 +570,7 @@ let env = Env pr lr c let it = runReaderT (iteration e) env e <- runReaderT m env- schedule (runReaderT (iterationMeat e) env)+ runReaderT (iterationMeat e) env return () iteration :: Event a -> M (Maybe a)
frpnow.cabal view
@@ -1,5 +1,5 @@ Name: frpnow-Version: 0.14+Version: 0.15 Synopsis: Principled practical FRP Description: FRP with first-class behaviors and interalized IO, without space leaks License: BSD3