【问题标题】:Replacing do by >>= for a scotty post将 do by >>= 替换为 scotty post
【发布时间】:2018-09-03 09:50:35
【问题描述】:
post "/introduceAnIdea"  $ do
        command <- jsonData
        json $ handle command

您将如何删除 do 并使用 >>= 更改它?

【问题讨论】:

标签: haskell


【解决方案1】:
post "/introduceAnIdea" $ jsonData >>= (json . handle)

我认为在这种情况下不一定会更好。

【讨论】:

  • 您也可以删除(),因为. 的优先级高于&gt;&gt;= 运算符的优先级。
  • @Shersh,是的,但是任何阅读它的人也必须知道这不是我喜欢编写代码的方式。 $ 的优先级很容易记住,但 &gt;&gt;=. 的优先级很少出现,以至于我认为大多数人很难解析。
【解决方案2】:

以下是将do-notation 重写为&gt;&gt;=&gt;&gt; 的方法:(注意:在我在这里使用的类c 表示法选项中,换行符变为;。)

do { a <- m; b... } = m >>= \a -> do { b... }

do { a; b... } = a >> do { b... }

do { a } = a

这样就变成了:

post "/introduceAnIdea"  $ do { command <- jsonData; json $ handle command}
= post "/introduceAnIdea" $ jsonData >>= \command -> do {json $ handle command}
= post "/introduceAnIdea" $ jsonData >>= \c -> json $ handle c

【讨论】:

    猜你喜欢
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    相关资源
    最近更新 更多