小编dto*_*now的帖子

F#中的免费Monad,具有通用输出类型

我正在尝试应用F#中描述的免费monad模式以实现数据访问的乐趣和利益(对于Microsoft Azure表存储)

假设我们有三个数据库表和三个dao的Foo,Bar,Baz:

Foo          Bar          Baz

key | col    key | col    key | col
---------    ---------    ---------
foo |  1     bar |  2         |
Run Code Online (Sandbox Code Playgroud)

我想用key ="foo"选择Foo,用key ="bar"选择Bar,用key ="baz"和col = 3插入一个Baz

Select<Foo> ("foo", fun foo -> Done foo)
  >>= (fun foo -> Select<Bar> ("bar", fun bar -> Done bar)
    >>= (fun bar -> Insert<Baz> ((Baz ("baz", foo.col + bar.col), fun () -> Done ()))))
Run Code Online (Sandbox Code Playgroud)

在解释器功能内

  • Select导致一个函数调用,它接受一个key : string并返回一个obj
  • Insert导致一个函数调用,它接受obj …

monads f# free-monad

7
推荐指数
1
解决办法
640
查看次数

标签 统计

f# ×1

free-monad ×1

monads ×1