Type classes for creating memoized functions.
This module can be added to your project using Bower.
To work on this project, use pulp:
$ 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)The 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 nNote that fibonacciSlow has been modified to call the faster fibonacci function.
The 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 Maybe, Either and Tuple.
- Slides: Elegant memoization by Conal Elliott - @conal