corecursive-main alternatives and similar packages
Based on the "Control" category.
Alternatively, view corecursive-main alternatives based on common mentions on social networks and blogs.
-
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) -
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. -
auto
Haskell DSL and platform providing denotational, compositional api for discrete-step, locally stateful, interactive programs, games & automations. http://hackage.haskell.org/package/auto -
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 -
monad-validate
DISCONTINUED. (NOTE: REPOSITORY MOVED TO NEW OWNER: https://github.com/lexi-lambda/monad-validate) A Haskell monad transformer library for data validation -
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 -
effect-monad
Provides 'graded monads' and 'parameterised monads' to Haskell, enabling fine-grained reasoning about effects. -
ixmonad
Provides 'graded monads' and 'parameterised monads' to Haskell, enabling fine-grained reasoning about effects.
CodeRabbit: AI Code Reviews for Developers

Do you think we are missing an alternative of corecursive-main or a related project?
README
corecursive-main
On Hackage: https://hackage.haskell.org/package/corecursive-main .
Functional programmers are used to program with (co-)recursive functions. What if the main program was itself recursive? One could benefit the underlying operating system scheduler to orchestrate resources. For instance, limiting memory, file-descriptor on a per-recursive-call basis. Another instance is supporting distributed computations across multiple machines.
This package
This package demonstrates the idea of replacing the main entry-point of the
program (i.e., main :: IO ()
) with a recursion-aware main. The program first
pattern matches on an "argument". This argument defines which action to take
for the rest of the program. The rest of the program runs with a
"Self-reference", which allows the program to call itself back. Explicitly
passing a Self-reference is very similar to how the fix
function allows to
factor recursion out of the body of a self-referential function.
Unlike fix
, which executes recursive-call in the same memory-space as the
call-site, developper using this package need to teach the program to transfer
arguments and return values back-and-forth the call-site and the execution
site. This package minimizes the developper effort to perform this translation.
Currently, one mode is supported: spawning a child process on the same OS while serializing arguments over the command-line parameters. A library user with many entry points may want to leverage the distributed-closure capability to sidestep writing many encoder/decoder.
Future versions of this package or sibling packages will likely provide:
- support for 'JSON' or 'Dhall' serialization format
- support for 'stdin' or networked serialization mechanisms
Envisionned usages
Distributed computating:
- run a same copy of the program on many places, each on a subset of the data (much like Map/Reduce)
Dev/Ops:
use a single binary to reconfigure the whole datacenter and services after a cataclysmic outage (see #History) as well
orchestrate processes locally
History
This package is factored out of code and findings made while writing DepTrack. If you like this package you may find other interesting ideas in DepTrack.