representable-tries-0.3.1: Tries from representations of polynomial functors

Stability experimental ekmett@gmail.com

Data.Functor.Representable.Trie

Description

Synopsis

Representations of polynomial functors

class (TraversableWithKey1 (BaseTrie a), Representable (BaseTrie a)) => HasTrie a whereSource

Associated Types

type BaseTrie a :: * -> *Source

Methods

embedKey :: a -> Key (BaseTrie a)Source

projectKey :: Key (BaseTrie a) -> aSource

Instances

 HasTrie Bool HasTrie Char HasTrie Int HasTrie () HasTrie Any HasTrie a => HasTrie [a] HasTrie a => HasTrie (Dual a) HasTrie a => HasTrie (Sum a) HasTrie a => HasTrie (Product a) HasTrie a => HasTrie (Maybe a) HasTrie a => HasTrie (Seq a) HasTrie v => HasTrie (IntMap v) (HasTrie a, HasTrie b) => HasTrie (Either a b) (HasTrie a, HasTrie b) => HasTrie (a, b) (HasTrie k, HasTrie v) => HasTrie (Map k v) (HasTrie a, HasTrie b) => HasTrie (Entry a b) (HasTrie a, HasTrie b, HasTrie c) => HasTrie (a, b, c) (HasTrie a, HasTrie b, HasTrie c, HasTrie d) => HasTrie (a, b, c, d)

Memoizing functions

mup :: HasTrie t => (b -> c) -> (t -> b) -> t -> cSource

Lift a memoizer to work with one more argument.

memo :: HasTrie t => (t -> a) -> t -> aSource

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

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) => (r -> s -> t -> a) -> r -> s -> t -> aSource

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

inTrie :: (HasTrie a, HasTrie c) => ((a -> b) -> c -> d) -> (a :->: b) -> c :->: dSource

Apply a unary function inside of a tabulate

inTrie2 :: (HasTrie a, HasTrie c, HasTrie e) => ((a -> b) -> (c -> d) -> e -> f) -> (a :->: b) -> (c :->: d) -> e :->: fSource

Apply a binary function inside of a tabulate

inTrie3 :: (HasTrie a, HasTrie c, HasTrie e, HasTrie g) => ((a -> b) -> (c -> d) -> (e -> f) -> g -> h) -> (a :->: b) -> (c :->: d) -> (e :->: f) -> g :->: hSource

Apply a ternary function inside of a tabulate

Workarounds for current GHC limitations

trie :: HasTrie t => (t -> a) -> t :->: aSource

untrie :: (t :->: a) -> t -> aSource

data a :->: b whereSource

Constructors

 Trie :: HasTrie a => BaseTrie a b -> a :->: b

Instances

 Semigroupoid :->: HasTrie a => MonadReader a (:->: a) HasTrie a => Monad (:->: a) Functor (:->: a) HasTrie a => Applicative (:->: a) Foldable (:->: a) Traversable (:->: a) (HasTrie m, Semigroup m, Monoid m) => Comonad (:->: m) (HasTrie m, Semigroup m) => Extend (:->: m) HasTrie e => Distributive (:->: e) Foldable1 (:->: a) Traversable1 (:->: a) TraversableWithKey1 (:->: a) TraversableWithKey (:->: a) FoldableWithKey1 (:->: a) FoldableWithKey (:->: a) Indexable (:->: e) Keyed (:->: a) HasTrie e => Representable (:->: e) Apply (:->: a) Bind (:->: a) HasTrie e => Adjunction (Entry e) (:->: e) Eq b => Eq (:->: a b) Ord b => Ord (:->: a b) (Show a, Show b) => Show (:->: a b)

data Entry a b Source

Constructors

 Entry a b

Instances

 Functor (Entry a) HasTrie e => Adjunction (Entry e) (:->: e) (HasTrie a, HasTrie b) => HasTrie (Entry a b)

runTrie :: (a :->: b) -> BaseTrie a bSource