gpt4 book ai didi

asynchronous - F# : Monad operations without computation expressions

转载 作者:行者123 更新时间:2023-12-04 04:11:11 25 4
gpt4 key购买 nike

F# 是否提供任何“标准”运算符集来处理计算表达式之外的单子(monad)(特别是 Async )操作?我发现我的代码最终充满了许多本地运算符定义,例如:

let (>>=) a b = async.Bind (a, b)

考虑到一组运算符对于组合纯函数有多好 - <| , |>>>等等 - 我觉得我一定在这里遗漏了一些东西。

为了抢占可能的注释 - 计算表达式对于某些事情很好,但对于流水线一系列异步操作:
async {
let! a' = a
let! b' = b a'
return! c b'
}

感觉不如:
a >>= b >>= c

最佳答案

F# 核心库中没有这种类型的可用。
我会说那些运算符(operator)是后天习得的。不是每个人都是从 Haskell 进入 F# 的,对于我们这些不这样做的人来说,这种代码可能读起来并不“好”。
对我有用的是拥有这些操作的“管道友好”版本,作为工作流和内联运算符之间的一种中间立场:

module Async = 
let bind f a = async.Bind (a, f)
这为您提供了足够的绳索来处理工作流程之外的单子(monad)类型,同时仍然使用标准的函数组合运算符集:
a
|> Async.bind b
|> Async.bind c
要在 F# 中获得更类似于 Haskell 的体验, FSharpPlus可能是你正在寻找的。

关于asynchronous - F# : Monad operations without computation expressions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34559024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com