【发布时间】:2013-11-24 22:31:40
【问题描述】:
这可能是一个愚蠢的,但看看(Eliminating my explicit state passing via like, monads and stuff)
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
将's -> 'a * 's 包裹在State 中有什么好处。这只是一种安全预防措施吗?
【问题讨论】:
-
@Gary.S 这个问题是问为什么状态单子是用函数而不是元组来实现的,而不是为什么状态函数有时被包装在另一种类型中。
标签: f# state-monad