Guest User

Untitled

a guest
Jul 17th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.49 KB | None | 0 0
  1. #light
  2.  
  3. namespace NParser
  4. module StateMonad =
  5.  
  6. type State<'s,'a> = State of ('s -> ('a *'s))
  7. let runState (State f) = f
  8. type StateBuilder() =
  9. member b.Return(x) = State (fun s -> (x,s))
  10. member b.Delay(f) = f() : State<'s,'a>
  11. member b.Zero() = State (fun s -> ((),s))
  12. member b.Bind(State p,rest) = State (fun s -> let v,s2 = p s in (runState (rest v)) s2)
  13. member b.Get () = State (fun s -> (s,s))
  14. member b.Put s = State (fun _ -> ((),s))
Add Comment
Please, Sign In to add comment