我刚刚把我的头绕在单子上(至少我想我想我有),更具体地说是状态单子,有些人比我聪明得多,所以我可能对这个问题有所了解.
无论如何,状态单子通常用 M<'a> 来实现,如下所示(F#):
type State<'a, 'state> = State of ('state -> 'a * 'state)
现在我的问题是:你有什么理由不能在这里使用元组吗?MonadA<'a, 'b>
除此之外,和之间可能存在的歧义MonadB<'a, 'b>
都将成为等价的('a * 'b)
元组。
编辑:为清楚起见添加了示例
type StateMonad() =
member m.Return a = (fun s -> a, s)
member m.Bind(x, f) = (fun s -> let a, s_ = x s in f a s_)
let state = new StateMonad()
let getState = (fun s -> s, s)
let setState s = (fun _ -> (), s)
let execute m s = m s |> fst