gpt4 book ai didi

haskell - 排序与纯函数绑定(bind)

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

我经常发现自己想将常规函数插入到“绑定(bind)”序列中。就像在这个人为的例子中一样:

getLine >>= lift (map toUpper) >>= putStrLn

我需要定义提升函数 lift :: (a -> b) -> a -> m b使这项工作。问题是我不知道这样的功能, Hoogle似乎也没有。我觉得这很奇怪,因为这对我来说完全有道理。

现在,可能还有其他方法可以完成这项工作,但我喜欢无点样式代码允许我一次扫描行以弄清楚发生了什么的方式。
let lift f x = return (f x) in
getLine >>= lift (map toUpper) >>= putStrLn

我的问题归结为:我错过了什么,或者为什么没有像电梯这样的功能。我在 Haskell 中的经验仍然非常有限,所以我假设大多数人以不同的方式解决这个问题。有人可以向我解释解决这个问题的惯用方法。

最佳答案

有三种惯用方式。

  • 不要使用绑定(bind);在您的 Hoogle 搜索中使用第一次点击:
    liftM (map toUpper) getLine >>= putStrLn
    liftM 有多种不同的拼写形式。 ,如 fmap(<$>) .
  • 内联lift您定义的功能:
    getLine >>= return . map toUpper >>= putStrLn
  • 使用 monad 法则融合选项 2 中的最后两个绑定(bind):
    getLine >>= putStrLn . map toUpper
  • 关于haskell - 排序与纯函数绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9719903/

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