//F# State Monad
type State<'state, 'a> = State of ('state ->'a * 'state)
type StateMonad() =
member b.Bind(m, f) = State (fun s -> let r = match m with
| State f -> f s
match r with
| (v,s) -> match f v with
| State f -> f s)
member b.Return(x) = State (fun s -> x, s)
let state = StateMonad()
let GetState = State (fun s -> s, s)
let SetState s = State (fun _ -> (), s)
let Execute m s = match m with
| State f -> let r = f s
match r with
|(x,_) -> x
No comments:
Post a Comment