(original) (raw)
{-# LANGUAGE NoImplicitPrelude #-}
module Control.Monad.Trans.Memo.Map (
MemoT, runMemoT, evalMemoT, startRunMemoT, startEvalMemoT,
Memo, runMemo, evalMemo, startRunMemo, startEvalMemo,
) where
import Data.Functor.Identity import Control.Monad import Control.Monad.Trans.Memo.State
import Data.MapLike.Instances() import qualified Data.Map as M
type MemoT k v = MemoStateT (M.Map k v) k v
runMemoT :: Monad m => MemoT k v m a -> M.Map k v -> m (a, M.Map k v) runMemoT :: MemoT k v m a -> Map k v -> m (a, Map k v) runMemoT = MemoT k v m a -> Map k v -> m (a, Map k v) forall (m :: * -> *) s k v a. Monad m => MemoStateT s k v m a -> s -> m (a, s) runMemoStateT
evalMemoT :: Monad m => MemoT k v m a -> M.Map k v -> m a evalMemoT :: MemoT k v m a -> Map k v -> m a evalMemoT = MemoT k v m a -> Map k v -> m a forall (m :: * -> *) c k v a. Monad m => MemoStateT c k v m a -> c -> m a evalMemoStateT
startRunMemoT :: Monad m => MemoT k v m a -> m (a, M.Map k v)
startRunMemoT :: MemoT k v m a -> m (a, Map k v)
startRunMemoT = (MemoT k v m a -> Map k v -> m (a, Map k v)
forall (m :: * -> *) k v a.
Monad m =>
MemoT k v m a -> Map k v -> m (a, Map k v)
runMemoT
Map k v
forall k a. Map k a
M.empty)
startEvalMemoT :: Monad m => MemoT k v m a -> m a
startEvalMemoT :: MemoT k v m a -> m a
startEvalMemoT = (MemoT k v m a -> Map k v -> m a
forall (m :: * -> *) k v a.
Monad m =>
MemoT k v m a -> Map k v -> m a
evalMemoT
Map k v
forall k a. Map k a
M.empty)
type Memo k v = MemoT k v Identity
runMemo :: Memo k v a -> M.Map k v -> (a, M.Map k v) runMemo :: Memo k v a -> Map k v -> (a, Map k v) runMemo = Memo k v a -> Map k v -> (a, Map k v) forall c k v a. MemoState c k v a -> c -> (a, c) runMemoState
evalMemo :: Memo k v a -> M.Map k v -> a evalMemo :: Memo k v a -> Map k v -> a evalMemo = Memo k v a -> Map k v -> a forall c k v a. MemoState c k v a -> c -> a evalMemoState
startRunMemo :: Memo k v a -> (a, M.Map k v)
startRunMemo :: Memo k v a -> (a, Map k v)
startRunMemo = (Memo k v a -> Map k v -> (a, Map k v)
forall k v a. Memo k v a -> Map k v -> (a, Map k v)
runMemo
Map k v
forall k a. Map k a
M.empty)
startEvalMemo :: Memo k v a -> a
startEvalMemo :: Memo k v a -> a
startEvalMemo = (Memo k v a -> Map k v -> a
forall k v a. Memo k v a -> Map k v -> a
evalMemo
Map k v
forall k a. Map k a
M.empty)