Type classes for creating memoized functions.
This module can be added to your project using Bower.
To work on this project, use
$ pulp build $ pulp test
The following Fibonacci function implementation is slow, because its call graph grows exponentially in the size of its argument:
let fibonacciSlow 0 = 0 fibonacciSlow 1 = 1 fibonacciSlow n = fibonacciSlow (n - 1) + fibonacciSlow (n - 2)
memoize function can be used to improve the performance of this function, by tabulating intermediate results:
let fibonacciSlow 0 = 0 fibonacciSlow 1 = 1 fibonacciSlow n = fibonacci (n - 1) + fibonacci (n - 2) fibonacci = memoize $ \n -> fibonacciSlow n
fibonacciSlow has been modified to call the faster
memoize function can be applied whenever there is a
Tabulate instance for the function argument type. This library provides instances of the
Tabulate type class for common types, such as
- Slides: Elegant memoization by Conal Elliott - @conal