on master help sign in
A bit more efficient runState/execState
commit1e8a87367e4b74bf8835352ee25dd1942c3b8b4e authorAndrzej Rybczak <andrzej@rybczak.net> dateFri 9 Jul 2021, 20:37 (5 years ago) parentfd063c3
2 files changed+5−3
effectful.cabal+1−1 src/Effectful/State/MVar.hs+4−2
effectful.cabal+1−1
@@ -23,7 +23,7 @@ source-repository head
2323 location: https://github.com/arybczak/effectful.git
2424
2525flag benchmark-foreign-libraries
26− description: Include other effect libraries in the benchmarks
26+ description: Include other effect libraries in the benchmarks.
2727 default: False
2828
2929common language
src/Effectful/State/MVar.hs+4−2
@@ -32,7 +32,8 @@ newtype State s :: Effect where
3232runState :: s -> Eff (State s : es) a -> Eff es (a, s)
3333runState s m = do
3434 v <- unsafeEff_ $ newMVar s
35− evalEffect (IdE (State v)) $ (,) <$> m <*> get
35+ a <- evalEffect (IdE (State v)) m
36+ (a, ) <$> unsafeEff_ (readMVar v)
3637
3738evalState :: s -> Eff (State s : es) a -> Eff es a
3839evalState s m = do
@@ -42,7 +43,8 @@ evalState s m = do
4243execState :: s -> Eff (State s : es) a -> Eff es s
4344execState s m = do
4445 v <- unsafeEff_ $ newMVar s
45− evalEffect (IdE (State v)) $ m *> get
46+ _ <- evalEffect (IdE (State v)) m
47+ unsafeEff_ $ readMVar v
4648
4749get :: State s :> es => Eff es s
4850get = do