相关疑难解决方法(0)

State Monad,为什么不是一个元组?

我只是把头包裹在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)

.net monads f# functional-programming

9
推荐指数
3
解决办法
2089
查看次数

标签 统计

.net ×1

f# ×1

functional-programming ×1

monads ×1