effects-0.1: src/Control/Effects/State.hs
{-# LANGUAGE MultiParamTypeClasses, TypeFamilies, FlexibleContexts #-}
module Control.Effects.State where
import Control.Effects
get :: (c ~ ContT (s -> m r) m, AutoLift c n, Monad m) => Proxy c -> n s
get p = operation p $ \k -> return $ \s -> do r <- k s; r s
put :: (c ~ ContT (s -> m r) m, AutoLift c n, Monad m) => Proxy c -> s -> n ()
put p s' = operation p $ \k -> return $ \_ -> do r <- k (); r s'
ref :: Monad m => s -> Handler (s -> m a) a m a
ref s_init = Handler
{ ret = return . return . return
, fin = \f -> f s_init
}