patch alternatives and similar packages
Based on the "FRP" category.
Alternatively, view patch alternatives based on common mentions on social networks and blogs.
-
reflex
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-dom
Web applications without callbacks or side-effects. Reflex-DOM brings the power of functional reactive programming (FRP) to the web. Build HTML and other Document Object Model (DOM) data with a pure functional interface. -
dunai
Classic FRP, Arrowized FRP, Reactive Programming, and Stream Programming, all via Monadic Stream Functions -
Yampa-core
Domain-specific language embedded in Haskell for programming hybrid (mixed discrete-time and continuous-time) systems. Yampa is based on the concepts of Functional Reactive Programming (FRP) and is structured using arrow combinators.
CodeRabbit: AI Code Reviews for Developers

* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of patch or a related project?
Popular Comparisons
README
patch
Data structures for describing changes to other data structures.
A Patch
type represents a kind of change made to a data structure.
class Patch p where
type PatchTarget p :: *
-- | Apply the patch p a to the value a. If no change is needed, return
-- 'Nothing'.
apply :: p -> PatchTarget p -> Maybe (PatchTarget p)
Patching Maps
For example, Data.Patch.Map
defines the PatchMap
type which can be used to patch Map
s. A PatchMap
represents updates to a Map
that can insert, remove, or replace items in the Map
. In this example, the Map
is the PatchTarget
and the PatchMap
is the Patch
. Keep in mind that there are many other possible Patch
es that can be applied to a Map
(i.e., Map
can be the PatchTarget
for many different Patch
instances).
PatchMap
is defined as:
newtype PatchMap k v = PatchMap { unPatchMap :: Map k (Maybe v) }
The Maybe
around the value is used to represent insertion/updates or deletion of the element at a given key.
Its Patch
instance begins with:
instance Ord k => Patch (PatchMap k v) where
type PatchTarget (PatchMap k v) = Map k v
...
When a PatchMap
is applied to its PatchTarget
, the following changes can occur:
If the key is present in the
Patch
and thePatchTarget
...- And the
Patch
value at that key isNothing
: delete that key from thePatchTarget
. - And the
Patch
value at that key isJust x
: update the value at that key in thePatchTarget
tox
.
- And the
If the key is present in the
Patch
and not present in thePatchTarget
...- And the
Patch
value at that key isNothing
: do nothing because we're trying to delete a key that doesn't exist in the target in the first place. - And the
Patch
value at that key isJust x
: insert the key and the valuex
into thePatchTarget
- And the
If the key is not present in the
Patch
but present in thePatchTarget
: do nothing.
There are, of course, more complicated ways of patching maps involving, for example, moving values from one key to another. You can find the code for that in Data.Patch.PatchMapWithMove
. Note that the PatchTarget
type associated with the PatchMapWithMove
patch instance is still Map k v
!
*Note that all licence references and agreements mentioned in the patch README section above
are relevant to that project's source code only.