module Fixme where {-@ bindST :: forall

Prop, q :: s -> a -> s -> Prop, r :: s -> b -> s -> Prop>. (xm:s

-> (a, s)) -> (xbind:a -> xk:(exists[xxxa:a].exists[xxa:s

].s) -> (b, s)) -> xr:s

-> exists[xa:a]. exists[xxx:s]. (b, s) @-} bindST :: (s -> (a, s)) -> (a -> (s -> (b, s))) -> (s -> (b, s)) bindST m k s = let (a, s') = m s in (k a) s' {-@ returnST :: forall

a -> s -> Prop>. xa:a -> xs:s

-> (a,s)

@-} returnST :: a -> s -> (a, s) returnST x s = (x, s)