Interactive programs without callbacks or side-effects. Functional Reactive Programming (FRP) uses composable events and time-varying values to describe interactive systems as pure functions. Just like other pure functional code, functional reactive code is easier to get right on the first try, maintain, and reuse.
Reflex is a fully-deterministic, higher-order Functional Reactive Programming interface and an engine that efficiently implements that interface.
From the root of a Reflex Platform checkout, run ./scripts/hack-on haskell-overlays/reflex-packages/dep/reflex. This will check out the reflex source code into the haskell-overlays/reflex-packages/dep/reflex directory. You can then point that checkout at your fork, make changes, etc. Use the ./try-reflex or ./scripts/work-on scripts to start a shell in which you can test your changes.
Headless Host: Generalize to allow returning arbitrary types
0.9.2.0
Add MonadMask, MonadCatch, MonadThrow instances
0.9.1.0
Headless Host: Add some MonadSample, MonadHold, and MonadFix instances
0.9.0.1
Add support for ghc-9.6
0.9.0.0
Breaking Change: Filter updates to listWithKey child widgets so that changes to the input Map don’t cause spurious updates to unaffected children. This imposes an Eq constraint on the child values.
Expose all Requester internals in Reflex.Requester.Base.Internal
(#419) Add distributeIntMapOverDynPure and joinDynThroughIntMap as convenience functions for working with DynamicIntMaps.
0.7.0.0
Add lifting instances for most classes to Reflex.Profiled.Profiled. (#398)
Class MonadQuery t q m now has a Monad m superclass constraint. (#400)
(Breaking change) Rename class MonadBehaviorWriter -> BehaviorWriter for consistency with EventWriter/DynamicWriter. (#401)
Introduce deprecated alias MonadBehaviorWriter = BehaviorWriter. (#401)
Fix bug in spider where event subscriptions would be prematurely finalized due to over-aggressive inlining. (#409)
Add instances of PerformEvent and TriggerEvent for MaybeT. (#395)
0.6.4.1
Fix a bug in the Reflex Profiled transformer where
Reflex.Class.mergeIncrementalG and
Reflex.Class.mergeIncrementalWithMoveG implementations referenced
itself instead of the inner transformed timeline, causing an
infinite loop.
0.6.4
Support GHC 8.8
Add Reflex.Query.Base.mapQueryT. See that module for documentation
The Reflex.Patch.* modules were moved to the patch library.
They are Data.Patch.* there, but reexported under their old names for backwards compatability here.
Additional instances for Query classes for basic types.
Add cabal flags debug-propagation and debug-event-cycles to build in debugging
code for performance and for cyclic dependencies between events
0.6.3
Data.WeakBag.traverse and Data.FastWeakBag.traverse have been deprecated.
They are replaced with Data.WeakBag.traverse_ and Data.FastWeakBag.traverse_, respectively.
Fixes a bug in Reflex.Patch.MapWithMove.patchThatSortsMapWith that was producing invalid PatchMapWithMove.