plan-applicative alternatives and similar packages
Based on the "Control" category.
Alternatively, view plan-applicative alternatives based on common mentions on social networks and blogs.
-
fused-effects
A fast, flexible, fused effect system for Haskell -
transient
A full stack, reactive architecture for general purpose programming. Algebraic and monadically composable primitives for concurrency, parallelism, event handling, transactions, multithreading, Web, and distributed computing with complete de-inversion of control (No callbacks, no blocking, pure state) -
apecs
a fast, extensible, type driven Haskell ECS framework for games -
recursion-schemes
Generalized bananas, lenses and barbed wire -
distributed-closure
Serializable closures for distributed programming. -
classy-prelude
Type classes for mapping, folding, and traversing monomorphic containers -
classy-prelude-yesod
Type classes for mapping, folding, and traversing monomorphic containers -
unliftio
The MonadUnliftIO typeclass for unlifting monads to IO -
extensible-effects
Extensible Effects: An Alternative to Monad Transformers -
these
An either-or-both data type, with corresponding hybrid error/writer monad transformer. -
auto
Haskell DSL and platform providing denotational, compositional api for discrete-step, locally stateful, interactive programs, games & automations. http://hackage.haskell.org/package/auto -
safe-exceptions
Safe, consistent, and easy exception handling -
selective
Selective Applicative Functors: Declare Your Effects Statically, Select Which to Execute Dynamically -
ComonadSheet
A library for expressing "spreadsheet-like" computations with absolute and relative references, using fixed-points of n-dimensional comonads. -
hask
Category theory for Haskell with a lens flavor (you need GHC 7.8.3, not 7.8.2 to build this!) -
abstract-par
Type classes generalizing the functionality of the 'monad-par' library. -
transient-universe
A Cloud monad based on transient for the creation of Web and reactive distributed applications that are fully composable, where Web browsers are first class nodes in the cloud -
cloud-haskell
This is an umbrella development repository for Cloud Haskell -
distributed-fork
A distributed data processing framework in Haskell. -
distributed-process-platform
DEPRECATED (Cloud Haskell Platform) in favor of distributed-process-extras, distributed-process-async, distributed-process-client-server, distributed-process-registry, distributed-process-supervisor, distributed-process-task and distributed-process-execution -
monad-control
Lift control operations, like exception catching, through monad transformers -
monad-validate
(NOTE: REPOSITORY MOVED TO NEW OWNER: https://github.com/lexi-lambda/monad-validate) A Haskell monad transformer library for data validation -
ixmonad
Provides 'graded monads' and 'parameterised monads' to Haskell, enabling fine-grained reasoning about effects. -
freer-effects
An implementation of "Freer Monads, More Extensible Effects". -
effect-monad
Provides 'graded monads' and 'parameterised monads' to Haskell, enabling fine-grained reasoning about effects. -
operational
Implement monads by specifying instructions and their desired operational semantics. -
monad-time
Type class for monads which carry the notion of the current time. -
lens-tutorial
The missing tutorial module for the lens library
Access the most powerful time series database as a service
Do you think we are missing an alternative of plan-applicative or a related project?
README
plan-applicative
A writer-like Applicative/Arrow for resource estimation and progress tracking.
Motivation
I run scripts in my machine. Their logic is simple and predictable, even if the steps are many and take long to complete.
The following infuriating situations happen:
- The script fails at minute 45 because of a syntax error.
- The script fails at minute 45 because it requests a missing resource whose availability could have been checked when the script started.
- It is difficult to ascertain how far along the execution we are at minute 45.
The first problem is solved by using a statically typed language or, for dynamic languages, some kind of static analysis tool.
For the second problem, we need to have a summary of the resources that the computation will require, before running the computation itself. This can be done by hand, adding a new check at the beginning of the script when we change something further down. But it's easy to forget to do so, and the initial checks can become out of sync with the main code. It would be nice if each step of the computation foresaw its own resource needs and these accumulated automatically as we composed the steps.
For the third problem, we need a channel that notifies you whenever a step of the computation starts or finishes. Bonus points if nested steps are supported.
Problems
Currently the ApplicativeDo extension doesn't work very well with this package's Applicative because an extant bug in GHC: #10892. Sequencing actions whose values are ignored gives an error.
Inspiration
StaticArrow from the arrows package.
Not exactly an inspiration (as I don't understand the stuff well enough) but Tomas Petricek's work on "coeffects" seems relevant for helping applications to "fail early". See section 1.1 of his thesis.