Module Relude_StateT.State

type t('a, 's) = WithMonad(Relude_Identity.Monad).t('a's) =
| StateT('s => Relude_Identity.Monad.t(('a, 's)))
;

StateT represents an effectful function from a state value of type 's to a result value 'a and a next state of type 's. This version of StateT has 'a on the left for consistency with other Reason types like Result/IO/Validation/etc.

let runStateT: 's => t('a's) => Relude_Identity.Monad.t(('a, 's));
let evalStateT: t('a's) => 's => Relude_Identity.Monad.t('a);
let execStateT: t('a's) => 's => Relude_Identity.Monad.t('s);
let mapStateT: (Relude_Identity.Monad.t(('a, 's)) => Relude_Identity.Monad.t(('b, 's))) => t('a's) => t('b's);
let withStateT: ('s => 's) => t('a's) => t('a's);
let get: t('s's);
let gets: ('s => 'a) => t('a's);
let put: 's => t(unit, 's);
let modify: ('s => 's) => t('s's);
let modify_: ('s => 's) => t(unit, 's);
let map: ('a => 'b) => t('a's) => t('b's);
let pure: 'a => t('a's);
let apply: t('a => 'b's) => t('a's) => t('b's);
let bind: t('a's) => ('a => t('b's)) => t('b's);
module WithState: (S: BsBastet.Interface.TYPE) => { ... };