我刚刚把我的头围绕monads(至少我想我认为我),更具体地说是国家monad,有些人更聪明,然后我想通了,所以我可能与这个问题。State Monad,为什么不是元组?
反正状态单子通常与A M实施<“一>作为像这样(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
问题是什么?在哪里使用元组?函数的返回类型是一个元组。 – Brian 2010-04-07 20:39:37
不使用元组而不是状态类型,只返回一个函数而不是状态。 – thr 2010-04-07 20:45:53