Control.Monad.Memo.Class (original) (raw)

Documentation

class Monad m => MonadCache k v m | m -> k, m -> v whereSource

Interface for memoization cache Is necessary since memoization mechanism from one transformer can use a cache from other (further down the stack)

Instances

| (PrimMonad m, ~ * (PrimState m) s, MaybeLike e v, MVector c e) => MonadCache Int v (Cache c s e m) | | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | | (PrimMonad m, ~ * (PrimState m) s, MaybeLike e v, MVector c e) => MonadCache Int v (Cache c s e m) | | | (PrimMonad m, ~ * (PrimState m) s, MaybeLike e v, MVector c e) => MonadCache Int v (Cache c s e m) | | | (Monad m, Ix k, MaybeLike e v, MArray c e m) => MonadCache k v (Cache c k e m) | | | (Monad m, MapLike c k v) => MonadCache k v (MemoStateT c k v m) | |

class Monad m => MonadMemo k v m | m -> k, m -> v whereSource

Memoization interface

Instances

| MonadCache k [v] m => MonadMemo k v (ListT m) | | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | | MonadCache k (Maybe v) m => MonadMemo k v (MaybeT m) | | | MonadCache k v m => MonadMemo k v (IdentityT m) | | | MonadCache (s, k) (v, s) m => MonadMemo k v (StateT s m) | | | MonadCache (s, k) (v, s) m => MonadMemo k v (StateT s m) | | | (Monoid w, MonadCache k (v, w) m) => MonadMemo k v (WriterT w m) | | | (Monoid w, MonadCache k (v, w) m) => MonadMemo k v (WriterT w m) | | | MonadCache (r, k) v m => MonadMemo k v (ReaderT r m) | | | (Error e, MonadCache k (Either e v) m) => MonadMemo k v (ErrorT e m) | | | MonadCache k v m => MonadMemo k v (ContT r m) | | | (PrimMonad m, ~ * (PrimState m) s, MaybeLike e v, MVector c e) => MonadMemo Int v (Cache c s e m) | | | (PrimMonad m, ~ * (PrimState m) s, MaybeLike e v, MVector c e) => MonadMemo Int v (Cache c s e m) | | | (PrimMonad m, ~ * (PrimState m) s, MaybeLike e v, MVector c e) => MonadMemo Int v (Cache c s e m) | | | (Monoid w, MonadCache (r, s, k) (v, s, w) m) => MonadMemo k v (RWST r w s m) | | | (Monoid w, MonadCache (r, s, k) (v, s, w) m) => MonadMemo k v (RWST r w s m) | | | (Monad m, Ix k, MaybeLike e v, MArray c e m) => MonadMemo k v (Cache c k e m) | | | (Monad m, MapLike c k v) => MonadMemo k v (MemoStateT c k v m) | |

for2 :: (((k1, k2) -> mv) -> (k1, k2) -> mv) -> (k1 -> k2 -> mv) -> k1 -> k2 -> mvSource

Adapter for memoization of two-argument function

for3 :: (((k1, k2, k3) -> mv) -> (k1, k2, k3) -> mv) -> (k1 -> k2 -> k3 -> mv) -> k1 -> k2 -> k3 -> mvSource

Adapter for memoization of three-argument function

for4 :: (((k1, k2, k3, k4) -> mv) -> (k1, k2, k3, k4) -> mv) -> (k1 -> k2 -> k3 -> k4 -> mv) -> k1 -> k2 -> k3 -> k4 -> mvSource

Adapter for memoization of four-argument function

memoln :: (MonadCache k2 v m1, Monad m1, Monad m2) => (forall a. m1 a -> m2 a) -> (k1 -> k2) -> (k1 -> m2 v) -> k1 -> m2 vSource

Memoization for the current transformer in stack using a cache from an arbitrary transformer down the stack