SPstateMonad

module SPstateMonad where
import SP(SP)
import Spops
import StateMonads(Mk(..),Ms(..),toMs,toMsc,loadMs,storeMs)

type SPms i o s ans = Ms (SP i o) s ans

putsSPms :: [o] -> SPms i o s ()
putSPms :: o -> SPms i o s ()
getSPms :: SPms i o s i
nullSPms :: SPms i o s ()
loadSPms :: SPms i o s s
storeSPms :: s -> SPms i o s ()
stateMonadSP :: s -> SPms i o s ans -> (ans -> SP i o) -> SP i o

putsSPms  = toMsc . putsSP
putSPms   = toMsc . putSP
getSPms   = toMs getSP
nullSPms  = return ()
loadSPms  = loadMs
storeSPms = storeMs

stateMonadSP s0 (Mk spm) sp = spm (\ans state->sp ans) s0