私はちょうどモナド(少なくとも私は持っていると思いたい)とより具体的には状態モナドに頭を包み込みました。 .
とにかく、状態モナドは通常、次のような M<'a> で実装されます (F#):
type State<'a, 'state> = State of ('state -> 'a * 'state)
ここで私の質問: ここでタプルを使用できない理由はありますか? MonadA<'a, 'b>
それ以外の場合、とwhichの間のあいまいさの可能性は、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