This repository has been archived on 2024-10-24. You can view files and clone it, but cannot push or open issues or pull requests.
fradrive-old/src/Utils/Memo.hs
Gregor Kleen ed5fb6e218 feat(personalised-sheet-files): finish upload functionality
TODO: Interaction of course participants with personalised files
2020-08-06 09:57:53 +02:00

26 lines
738 B
Haskell

module Utils.Memo
( evalMemoStateC
) where
import ClassyPrelude
import Data.Conduit
import Data.Conduit.Lift (evalStateC)
import Control.Monad.Memo
import Control.Monad.Trans.State.Strict (StateT)
import qualified Control.Monad.State.Class as State
evalMemoStateC :: forall m s k v i o r.
Monad m
=> s -> ConduitT i o (MemoStateT s k v m) r -> ConduitT i o m r
evalMemoStateC initSt = evalStateC initSt . transPipe runMemoStateT'
where
runMemoStateT' :: forall a.
MemoStateT s k v m a
-> StateT s m a
runMemoStateT' act = do
cache <- State.get
(res, cache') <- lift $ runMemoStateT act cache
res <$ State.put cache'