Copyright | (c) Eduard Sergeev 2013 |
---|---|
License | BSD-style (see the file LICENSE) |
Maintainer | eduard.sergeev@gmail.com |
Stability | experimental |
Portability | non-portable (multi-param classes, flexible instances) |
Safe Haskell | None |
Language | Haskell2010 |
Vector-based MonadCache
implementation which dynamically expands the vector during the computation to accomodate all requested keys.
This implementation does not require to specify the length of the vector up front, but may be slower than Control.Monad.Memo.Vector.
Synopsis
- type VectorCache s e = Cache Vector s e
- class MaybeLike e v => VectorMemo v e | v -> e
- startEvalVectorMemo :: (PrimMonad m, VectorMemo v e) => VectorCache (PrimState m) e m a -> m a
- startRunVectorMemo :: (PrimMonad m, VectorMemo v e) => VectorCache (PrimState m) e m a -> m (a, Vector (PrimState m) e)
- type UVectorCache s e = Cache UVector s e
- class MaybeLike e v => UVectorMemo v e | v -> e
- startEvalUVectorMemo :: (PrimMonad m, UVectorMemo v e, MVector UVector e) => UVectorCache (PrimState m) e m a -> m a
- startRunUVectorMemo :: (PrimMonad m, UVectorMemo v e, MVector UVector e) => UVectorCache (PrimState m) e m a -> m (a, UVector (PrimState m) e)
- newtype Container vec = Container {
- toVector :: vec
- type Cache vec k e = StateCache (Container (vec k e))
- genericStartEvalVectorMemo :: (MaybeLike e v, PrimMonad m, MVector vec e) => Cache vec (PrimState m) e m a -> m a
- genericStartRunVectorMemo :: (MaybeLike e v, PrimMonad m, MVector vec e) => Cache vec (PrimState m) e m a -> m (a, vec (PrimState m) e)
VectorCache for boxed types
type VectorCache s e = Cache Vector s e Source #
MonadCache
based on boxed vector
class MaybeLike e v => VectorMemo v e | v -> e Source #
This is just to be able to infer the type of the VectorCache
element.
Instances
MaybeLike (Maybe v) v => VectorMemo v (Maybe v) Source # | |
Defined in Control.Monad.Memo.Vector.Instances |
startEvalVectorMemo :: (PrimMonad m, VectorMemo v e) => VectorCache (PrimState m) e m a -> m a Source #
Evaluate computation using mutable boxed vector which dynamically grows to accomodate all requested keys
startRunVectorMemo :: (PrimMonad m, VectorMemo v e) => VectorCache (PrimState m) e m a -> m (a, Vector (PrimState m) e) Source #
Evaluate computation using mutable boxed vector which dynamically grows to accomodate all requested keys. This function also returns the final content of the vector cache
UVectorCache for unboxed types
type UVectorCache s e = Cache UVector s e Source #
MonadCache
based on unboxed vector
class MaybeLike e v => UVectorMemo v e | v -> e Source #
This is just to be able to infer the type of the UVectorCache
element.
Instances
MaybeLike v v => UVectorMemo v v Source # | |
Defined in Control.Monad.Memo.Vector.Instances |
startEvalUVectorMemo :: (PrimMonad m, UVectorMemo v e, MVector UVector e) => UVectorCache (PrimState m) e m a -> m a Source #
Evaluate computation using mutable unboxed vector which dynamically grows to accomodate all requested keys
startRunUVectorMemo :: (PrimMonad m, UVectorMemo v e, MVector UVector e) => UVectorCache (PrimState m) e m a -> m (a, UVector (PrimState m) e) Source #
Evaluate computation using mutable unboxed vector which dynamically grows to accomodate all requested keys. This function also returns the final content of the vector cache
Generic functions for VectorCache
type Cache vec k e = StateCache (Container (vec k e)) Source #
Generic Vector-based memo cache