【发布时间】:2010-04-07 20:27:21
【问题描述】:
我刚开始研究 monad(至少我想我有),更具体地说是 state monad,有些人比我聪明得多,所以我可能是这样的带着这个问题。
无论如何,state monad 通常用 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
【问题讨论】:
-
问题是什么?在哪里使用元组?函数的返回类型是一个元组。
-
不使用元组代替 State 类型,只返回一个函数而不是 State。
标签: .net f# functional-programming monads