当前位置:  开发笔记 > 编程语言 > 正文

在编号中将monadic函数与纯函数混合使用

如何解决《在编号中将monadic函数与纯函数混合使用》经验,为你挑选了1个好方法。

我在编写符号时混淆纯函数和monadic函数时遇到了麻烦.我有一种感觉,我错过了一些明显的东西.

例如,假设我有这些功能

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函数与monadic fa和fc函数结合起来的优雅方法是什么?



1> Daniel Wagne..:

您可以做出的最小变化可能仍然有效:

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

在这种特定情况下,您可以执行许多操作,这些操作在更一般的情况下可能无效.你可以"内联"这个电话fb; 消除绑定/返回对; 并使用monadic组合而不是do-notation.将所有这三个付诸实践将会产生

z = fa >=> fc . fb

虽然您可以选择看起来合理/可读/美观的转换,以满足您的特定情况.

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有