我只是把头包裹在monads周围(至少我想我有),更具体地说是状态monad,有些人比我想象的更聪明,所以我可能会回答这个问题.
无论如何,状态monad通常用M <a>实现,如下所示(F#):
type State<'a, 'state> = State of ('state -> 'a * 'state)
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:你有什么理由不能在这里使用元组吗?除此之外可能存在歧义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 …Run Code Online (Sandbox Code Playgroud)