Skip to content

purescript-open-community/purescript-open-memoize

 
 

Repository files navigation

purescript-memoize

Type classes for creating memoized functions.

Building

This module can be added to your project using Bower.

To work on this project, use pulp:

$ pulp build

$ pulp test

Example

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 n

Note 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.

Related resources

About

Type classes for creating memoized functions

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • PureScript 93.3%
  • Dhall 6.7%