這一次可能是一個愚蠢的一個,但在看看(Eliminating my explicit state passing via like, monads and stuff)包裝狀態monad有什麼優點?
type State<'s,'a> = State of ('s -> 'a * 's)
type StateBuilder<'s>() =
member x.Return v : State<'s,_> = State(fun s -> v,s)
member x.Bind(State v, f) : State<'s,_> =
State(fun s ->
let (a,s) = v s
let (State v') = f a
v' s)
let withState<'s> = StateBuilder<'s>()
let getState = State(fun s -> s,s)
let putState v = State(fun _ ->(),v)
let runState (State f) init = f init
什麼是State
包裝's -> 'a * 's
的優勢。這只是一種安全預防措施嗎?
這看起來是http://stackoverflow.com/q/2595673/701062 –
@ Gary.S的副本這個問題是問爲什麼狀態monad實現與函數而不是元組,而不是爲什麼狀態函數有時被另一種類型包裹。 –