【问题标题】:Convert a do block into a code that uses >>= [duplicate]将 do 块转换为使用 >>= [重复] 的代码
【发布时间】:2020-03-11 00:57:13
【问题描述】:

我有以下功能

foo  =
    do
    putStr "type in a sentence: "
    s <- getLine
    putStrLn ("You typed " ++ s)

我需要转换这个函数,使它不使用'do',而是使用>>=。

在我必须连接 2 个单子的其他示例中,我能够做到这一点

maybeadd' x y = x >>= (\x' ->  y  >>= (\y' -> pure(x'++y')    ))

但在我的情况下,我不知道该怎么做。有人能指出我正确的方向吗?

谢谢!

【问题讨论】:

标签: haskell monads


【解决方案1】:

像这样:

foo = putStr "type in a sentence: " >> getLine >>= \s -> putStrLn ("You typed " ++ s)

一般规则是,没有&lt;- 的行去糖到&gt;&gt;,而带有&lt;- 的行去糖到&gt;&gt;= 和一个lambda。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-29
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 2015-09-05
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多