This creates a lazy Trie based on a finite range of Ints and is used to memorize a function over the subsets of this range.

To create a Trie you need two supply 2 things * Range of keys to bound * A function or functions used to construct the value for a subset of keys

The Trie uses the Array type internally.

# Documentation

lookupAsc :: TrieSet v -> [Int] -> vSource

This is the accessor for the Trie. The list of keys should be sorted.

:: (Int, Int) | (lower,upper) range of keys, lower<=upper |

-> ([Int] -> v) | Function from list of keys to its value. It must work for distinct ascending lists. |

-> TrieSet v | The constructed Trie |

This is a Trie constructor for a complete range of keys.

:: v | value for (lookupAsc trie []) |

-> (v -> v -> v) | merge operation on values |

-> (Int, Int) | (lower,upper) range of keys, lower<=upper |

-> (Int -> v) | Function from a single key to its value |

-> TrieSet v | The constructed Trie |

This is a Trie constructor for a complete range of keys that uses a function from single values and a merge operation on values to fill the Trie.

:: ([v] -> v) | summation operation for values |

-> (Int, Int) | (lower,upper) range of keys, lower <= upper |

-> (Int -> v) | Function from a single key to its value |

-> TrieSet v | The constructed Trie |

This is a Trie constructor for a complete range of keys that uses a function from single values and a sum operation of values to fill the Trie.