functor-combo-0.3.6: Functor combinators with tries & zippers

Copyright(c) Conal Elliott 2010-2012
LicenseBSD3
Maintainerconal@conal.net
Stabilityexperimental
Safe HaskellNone
LanguageHaskell98

FunctorCombo.StrictMemo

Description

Functor-based memo tries (strict for now)

Synopsis

Documentation

class Functor (Trie k) => HasTrie k where Source

Domain types with associated memo tries

Associated Types

type Trie k :: * -> * Source

Representation of trie with domain type a

Methods

trie :: (k -> v) -> k :->: v Source

Create the trie for the entire domain of a function

untrie :: (k :->: v) -> k -> v Source

Convert k trie to k function, i.e., access k field of the trie

Instances

HasTrie Bool 
HasTrie Int 
HasTrie Integer 
HasTrie () 
HasTrie a => HasTrie [a] 
HasTrie a => HasTrie (Id a) 
HasTrie a => HasTrie (Tree a) 
HasTrie a => HasTrie (Pair a) 
(HasTrie a, HasTrie ((:->:) a b)) => HasTrie (a -> b) 
(HasTrie a, HasTrie b) => HasTrie (Either a b) 
(HasTrie a, HasTrie b) => HasTrie (a, b) 
HasTrie x => HasTrie (Const x a) 
(HasTrie k, Functor (Trie k), IsNat n) => HasTrie (Vec n k) 
(HasTrie a, HasTrie b, HasTrie c) => HasTrie (a, b, c) 
HasTrie (g (f a)) => HasTrie ((:.) g f a) 
(HasTrie (f a), HasTrie (g a)) => HasTrie ((:+:) f g a) 
(HasTrie (f a), HasTrie (g a)) => HasTrie ((:*:) f g a) 
(HasTrie a, HasTrie b, HasTrie c, HasTrie d) => HasTrie (a, b, c, d) 

type (:->:) k v = Trie k v infixr 0 Source

Memo trie from k to v

(!) :: HasTrie k => (k :->: v) -> k -> v Source

Indexing. Synonym for untrie.

memo :: HasTrie k => Unop (k -> v) Source

Trie-based function memoizer

memo2 :: (HasTrie s, HasTrie t) => Unop (s -> t -> a) Source

Memoize a binary function, on its first argument and then on its second. Take care to exploit any partial evaluation.

memo3 :: (HasTrie r, HasTrie s, HasTrie t) => Unop (r -> s -> t -> a) Source

Memoize a ternary function on successive arguments. Take care to exploit any partial evaluation.

onUntrie :: (HasTrie a, HasTrie b) => ((a -> a') -> b -> b') -> (a :->: a') -> b :->: b' Source

onUntrie2 :: (HasTrie a, HasTrie b, HasTrie c) => ((a -> a') -> (b -> b') -> c -> c') -> (a :->: a') -> (b :->: b') -> c :->: c' Source

data TrieTree :: * -> * -> * -> * where Source

Constructors

L :: a -> TrieTree Z k a 
B :: (k :->: TrieTree n k a) -> TrieTree (S n) k a 

Instances