module SPmonad where
import SP(SP)
import ParSP(seqSP)
import Spops
import StateMonads(Mk(..),toMkc) --,bmk,toMs

type SPm i o ans = Mk (SP i o) ans

putsSPm :: [o] -> SPm i o ()
putsSPm :: forall o i. [o] -> SPm i o ()
putsSPm = forall k. (k -> k) -> Mkc k
toMkc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall b a. [b] -> SP a b -> SP a b
putsSP

putSPm :: o -> SPm i o ()
putSPm :: forall o i. o -> SPm i o ()
putSPm = forall k. (k -> k) -> Mkc k
toMkc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall b a. b -> SP a b -> SP a b
putSP

getSPm :: SPm i o i
getSPm :: forall i o. SPm i o i
getSPm = forall k r. Cont k r -> Mk k r
Mk forall a b. Cont (SP a b) a
getSP

nullSPm :: SPm i o ()
nullSPm :: forall i o. SPm i o ()
nullSPm = forall (m :: * -> *) a. Monad m => a -> m a
return ()

monadSP :: (SPm i o ()) -> SP i o
monadSP :: forall i o. SPm i o () -> SP i o
monadSP (Mk Cont (SP i o) ()
spm) = Cont (SP i o) ()
spm (forall a b. a -> b -> a
const forall a b. SP a b
nullSP)

toSPm :: (SP i o) -> SPm i o ()
toSPm :: forall i o. SP i o -> SPm i o ()
toSPm SP i o
sp = forall k. (k -> k) -> Mkc k
toMkc (forall {a} {b}. SP a b -> SP a b -> SP a b
seqSP SP i o
sp)