gpt4 book ai didi

haskell - Haskell 程序员的计算表达式

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

我正在寻找学习 F#,但让我感到困惑的一件事是计算表达式(do-notation??)语法和脱糖。

在 haskell 中,您有一个非常简单的 Monad 类型类和将 do-notation 脱糖到 bind 和 return 的规则。添加关键字没有魔法。唯一必须匹配的是类型。

在 F# 中有一堆构建器、关键字和复杂性。

关于如何将一个概念映射到另一个概念是否有很好的解释?

我基本上想知道我如何映射

do
x <- monadicComputation
foo x
someOtherMonadicComputation
let y = somePureComputation x
return $ bar y

到F#。

haskell 中唯一的关键字是 do、(<-) 和 let。

最佳答案

您不能在 F# 中编写通用 monad 代码,而是必须通过命名与表达式关联的构建器来指定您正在使用的 monad。您的示例代码如下所示:

let example = async {
let! a = someAsyncComputation
foo a
do! someOtherAsyncComputation
let y = somePureComputation a
return (bar y)
}

对于 async计算表达式类型。 'bang' 模式(do!、let! 等)用于绑定(bind) monadic 值,而常规关键字用于非 monadic 值。
let!对应绑定(bind) (>>=)let对应于 letdo符号。 return对应于 return , 而 return!用于产生现有的一元值。 do!类似于 (>>)它对其效果执行一元值,而 do用于非单子(monad)效果,在 Haskell 中没有类似的效果。

关于haskell - Haskell 程序员的计算表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19586825/

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