gpt4 book ai didi

haskell - 在 do 表示法中将单子(monad)函数与纯函数混合

转载 作者:行者123 更新时间:2023-12-01 07:54:17 25 4
gpt4 key购买 nike

我无法在 do 表示法中混合纯函数和单子(monad)函数。我有一种感觉,我错过了一些明显的东西。

例如,假设我有这些功能

fa :: a -> IO b
fb :: b -> c
fc :: c -> IO d

z :: a -> IO c
z a = do x <- fa a
y <- fb x
z <- fc y
return z

这不起作用,因为
y <- fb x

行在 z 中,但是将纯 fb 函数与一元 fa 和 fc 函数结合起来的优雅方式是什么?

最佳答案

可能你可以做出的最小的改变并让它仍然有效的是:

z a = do x <- fa a
let y = fb x
z <- fc y
return z

在这种特定情况下,您可以做很多事情,但在更一般的情况下可能不起作用。您可以“内联”对 fb 的调用;消除绑定(bind)/返回对;并使用一元组合而不是do-notation。将这三个都付诸实践将产生
z = fa >=> fc . fb

尽管您可以只选择对您的特定情况来说似乎合理/可读/美观的转换。

关于haskell - 在 do 表示法中将单子(monad)函数与纯函数混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34049703/

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