gpt4 book ai didi

f# - 延续 monad 是如何工作的

转载 作者:行者123 更新时间:2023-12-04 16:51:20 29 4
gpt4 key购买 nike

我理解 Reader 或 Maybe 或 State monads 是如何工作的,但在 Continuations monad 上遇到了困难。
像下面这样的例子,吹我的头

type ContinuationMonad() =
member this.Bind (m, f) = fun c -> m (fun a -> f a c)
member this.Return x = fun k -> k x

我认为我的问题是我无法获得什么是 Continuation 的 monadic 类型(如 Cont<'T>)以及我如何解开它并重新包装。
非常感谢任何有用的示例或链接。

最佳答案

我不会重复其他地方所说的 - 评论中提到的帖子提供了很多关于延续 monad 的细节。但可能有帮助的一件事是使用 Cont<'T> 的显式定义重写您的代码片段。 :

type Cont<'T> = 
Cont of (('T -> unit) -> unit)

型号 Cont<'T>表示计算。你可以通过给它一个函数来启动它 'T -> unit获取结果并对其进行处理(例如,打印它)。当你启动它时,它返回 unit它会(在某个时候)产生一个值 'T并调用您提供的延续。

有了这个更明确的定义,构建器可以定义为:
type ContinuationMonad() =
member this.Bind (ma, f) =
Cont(fun k ->
let (Cont ca) = ma
ca (fun a ->
let (Cont cb) = f a
cb k))

member this.Return x =
Cont(fun k -> k x)
  • Return成员创建一个计算,当给定一个延续 k , 立即使用值 x 调用此延续我们回来了。
  • Bind成员返回一个新的计算,当给定一个延续 k , 开始由 m 指定的计算;当这个计算产生一个值 a ,它调用函数 f然后调用 f 返回的计算与原续 k (这是最终应该使用最终结果调用的“最终”延续)。
  • 关于f# - 延续 monad 是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40052256/

    29 4 0
    文章推荐: firebase - 为存储在 Google BigQuery 中的 Firebase 事件在一行中选择多个事件参数
    文章推荐: fullcalendar - FullCalendar-自定义
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com