monad-memo-0.4.0: Memoization monad transformer

Portabilitynon-portable (multi-param classes, flexible instances)
Stabilityexperimental
Maintainereduard.sergeev@gmail.com
Safe HaskellNone

Control.Monad.Memo.Vector.Unsafe

Contents

Description

VectorCache - mutable-vector-based MonadCache with unsafe operations.

This is a version of Control.Monad.Memo.Mutable.Vector but implemented using unsafe* vector operations. Faster than default implementation but you must be sure that your code doesn't try to read/write outside vector boundaries.

Synopsis

VectorCache for boxed types

type VectorCache s e = Cache Vector s eSource

MonadCache based on boxed vector

class MaybeLike e v => VectorMemo v e | v -> eSource

This is just to be able to infer the type of the VectorCache element.

Instances

MaybeLike (Maybe v) v => VectorMemo v (Maybe v) 

unsafeEvalVectorMemoSource

Arguments

:: (PrimMonad m, VectorMemo v e) 
=> VectorCache (PrimState m) e m a

memoized computation

-> Int

vector length

-> m a

result

Evaluate computation using mutable boxed vector and unsafe operations

Vector length must covers all possible keys used in computation otherwise the behaviour is undefined (i.e. segfault)

unsafeRunVectorMemoSource

Arguments

:: (PrimMonad m, VectorMemo v e) 
=> VectorCache (PrimState m) e m a

memoized computation

-> Int

vector length

-> m (a, Vector (PrimState m) e)

result and final vector cache

Evaluate computation using mutable boxed vector and unsafe operations. It also returns the final content of the vector cache

Vector length must covers all possible keys used in computation otherwise the behaviour is undefined (i.e. segfault)

UVectorCache for unboxed types

type UVectorCache s e = Cache UVector s eSource

MonadCache based on unboxed vector

class MaybeLike e v => UVectorMemo v e | v -> eSource

This is just to be able to infer the type of the UVectorCache element

Instances

MaybeLike v v => UVectorMemo v v 

unsafeEvalUVectorMemoSource

Arguments

:: (PrimMonad m, UVectorMemo v e, MVector UVector e) 
=> UVectorCache (PrimState m) e m a

memoized computation

-> Int

vector length

-> m a

result

Evaluate computation using mutable unboxed vector and unsafe operations

Vector length must covers all possible keys used in computation otherwise the behaviour is undefined (i.e. segfault)

unsafeRunUVectorMemoSource

Arguments

:: (PrimMonad m, UVectorMemo v e, MVector UVector e) 
=> UVectorCache (PrimState m) e m a

memoized computation

-> Int

vector length

-> m (a, UVector (PrimState m) e)

result and final vector cache

Evaluate computation using mutable boxed vector and unsafe operations. It also returns the final content of the vector cache

Vector length must covers all possible keys used in computation otherwise the behaviour is undefined (i.e. segfault)

Generic functions for VectorCache

newtype Container vec Source

Constructors

Container 

Fields

toVector :: vec
 

Instances

(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) => MonadCache Int v (Cache c s e m) 

type Cache vec k e = ReaderCache (Container (vec k e))Source

Generic Vector-based memo cache

genericUnsafeRunVectorMemo :: (MaybeLike e v, PrimMonad m, MVector c e) => Cache c (PrimState m) e m a -> Int -> m (a, c (PrimState m) e)Source