proc p -> do ... (result, final_state) <- (|runState cmd|) init_state
runState k s (pure a) = k s a
runState k s get = k s s
runState k s (put t) = k t ()
runState s (pure a) = pure (s, a)
runState s get = pure (s, s)
runState s (put t) = pure (t, ())
>>> runPureEff $ runState 10 $ \st -> do n <- get st pure (2 * n) (20,10)