<commit_before># Recall

Recall is a library that implements a simple
[EDSL](http://en.wikipedia.org/wiki/Domain-specific_language) in F# for defining
persistent, incremental, parallel computations such as build systems.

## The elevator pitch

Imagine that you have a program that reads some *large set of input data* and
then makes some *expensive computations* based on that data to give you *some
output* that you need.  You continuously make *small incremental changes* to
that input data and then you need to *run* and wait for the program *after each
change* to compute the output that you need.

It doesn't really matter what the input data is, what those expensive
computations are or what the output is, but it matters that there are *plenty of
subcomputations whose inputs and outputs do not change* between each run of the
program.

Recall is an EDSL that allows you to conveniently write programs that take
advantage of those unchanged subcomputations to only *incrementally* compute the
parts of the whole computation that need to be computed due to the incremental
changes in the input data.

Instead of having a program whose run time is proportional to the whole input to
output translation, the Recalled version of the program has *run time
proportional to the changes*.

## Download

Experimental package [Recalled](http://www.nuget.org/packages/Recalled/) is
available via [NuGet](http://www.nuget.org/).  **Recall is not yet ready for
production use.** I do not expect radical changes to the basic programming
interface of the library, so you should feel free to play with the experimental
release, but there are several significant performance and robustness
improvements that I have in mind for the implementation and also some additions
to the programming interface.

Note that the package name differs from the current library name.  For some
reason NuGet didn't tell me there already was a package by the name Recall when
I searched for it a couple of months ago.  I will likely rename this whole
repository and library.

## Documentation

The document [Defining Computations that can be Recalled](Docs/Tutorial.md)
provides a tutorial for programming with Recall.  The programming interface of
Recall is very simple, compromising only a few central types and associated
computation builders and a handful of combinators.  See the
[Recall Library Reference](http://vesakarvonen.github.io/Recall/Recall.html) for
details.

The implementation of Recall is based on two infrastructure libraries:

* The [Hopac](https://github.com/VesaKarvonen/Hopac) library makes it easy to
  implement the necessary concurrent, parallel, and asynchronous programming
  patterns and also makes it practical to spawn each computation as a separate<commit_msg>Update readme with more accurate status.<commit_after># Recall

Recall is a library that implements a simple
[EDSL](http://en.wikipedia.org/wiki/Domain-specific_language) in F# for defining
persistent, incremental, parallel computations such as build systems.

## The elevator pitch

Imagine that you have a program that reads some *large set of input data* and
then makes some *expensive computations* based on that data to give you *some
output* that you need.  You continuously make *small incremental changes* to
that input data and then you need to *run* and wait for the program *after each
change* to compute the output that you need.

It doesn't really matter what the input data is, what those expensive
computations are or what the output is, but it matters that there are *plenty of
subcomputations whose inputs and outputs do not change* between each run of the
program.

Recall is an EDSL that allows you to conveniently write programs that take
advantage of those unchanged subcomputations to only *incrementally* compute the
parts of the whole computation that need to be computed due to the incremental
changes in the input data.

Instead of having a program whose run time is proportional to the whole input to
output translation, the Recalled version of the program has *run time
proportional to the changes*.

## Download

Experimental package [Recalled](http://www.nuget.org/packages/Recalled/) is
available via [NuGet](http://www.nuget.org/).

I do not expect radical changes to the basic programming interface of the
library, but there are still a few important robustness improvements that I have
in mind for the implementation.

Note that the package name differs from the current library name.  For some
reason NuGet didn't tell me there already was a package by the name Recall when
I searched for it a couple of months ago.  I will likely rename this whole
repository and library.

## Documentation

The document [Defining Computations that can be Recalled](Docs/Tutorial.md)
provides a tutorial for programming with Recall.  The programming interface of
Recall is very simple, compromising only a few central types and associated
computation builders and a handful of combinators.  See the
[Recall Library Reference](http://vesakarvonen.github.io/Recall/Recall.html) for
details.

The implementation of Recall is based on two infrastructure libraries:

* The [Hopac](https://github.com/VesaKarvonen/Hopac) library makes it easy to
  implement the necessary concurrent, parallel, and asynchronous programming
  patterns and also makes it practical to spawn each computation as a separate
{'fraction_non_alphanumeric': 0.04517568321249303, 'fraction_numerical': 0.0, 'mean_word_length': 4.828819068255688, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 2, 'lorem ipsum': 0, 'www.': 4, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '996394', 'n_tokens_mistral': 1334, 'n_tokens_neox': 1261, 'n_words': 773}