module Control.Monad.Hefty.KVStore (
module Control.Monad.Hefty.KVStore,
module Data.Effect.KVStore,
)
where
import Control.Arrow ((>>>))
import Control.Monad.Hefty (Eff, FOEs, raiseUnder)
import Control.Monad.Hefty.State (runState)
import Data.Effect.KVStore
import Data.Map (Map)
runKVStoreCC
:: forall k v a es
. (Ord k, FOEs es)
=> Map k v
-> Eff (KVStore k v ': es) a
-> Eff es (Map k v, a)
runKVStoreCC :: forall k v a (es :: [Effect]).
(Ord k, FOEs es) =>
Map k v -> Eff (KVStore k v : es) a -> Eff es (Map k v, a)
runKVStoreCC Map k v
initial =
Eff (KVStore k v : es) a
-> Eff Freer (KVStore k v : State (Map k v) : es) a
forall (e0 :: Effect) (e1 :: Effect) (es :: [Effect]) a
(ff :: Effect) (c :: (* -> *) -> Constraint).
Free c ff =>
Eff ff (e0 : es) a -> Eff ff (e0 : e1 : es) a
raiseUnder
(Eff (KVStore k v : es) a
-> Eff Freer (KVStore k v : State (Map k v) : es) a)
-> (Eff Freer (KVStore k v : State (Map k v) : es) a
-> Eff es (Map k v, a))
-> Eff (KVStore k v : es) a
-> Eff es (Map k v, a)
forall {k} (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> Eff Freer (KVStore k v : State (Map k v) : es) a
-> Eff Freer (State (Map k v) : es) a
Eff Freer (KVStore k v : State (Map k v) : es)
~> Eff Freer (State (Map k v) : es)
forall k v (es :: [Effect]) (ff :: Effect)
(c :: (* -> *) -> Constraint).
(Ord k, State (Map k v) :> es, Monad (Eff ff es), Free c ff) =>
Eff ff (KVStore k v : es) ~> Eff ff es
runKVStoreAsState
(Eff Freer (KVStore k v : State (Map k v) : es) a
-> Eff Freer (State (Map k v) : es) a)
-> (Eff Freer (State (Map k v) : es) a -> Eff es (Map k v, a))
-> Eff Freer (KVStore k v : State (Map k v) : es) a
-> Eff es (Map k v, a)
forall {k} (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> Map k v
-> Eff Freer (State (Map k v) : es) a -> Eff es (Map k v, a)
forall s (es :: [Effect]) a.
FOEs es =>
s -> Eff (State s : es) a -> Eff es (s, a)
runState Map k v
initial
{-# INLINE runKVStoreCC #-}