【问题标题】:re-write this example without do [duplicate]重写这个例子而不做[重复]
【发布时间】:2016-07-05 22:57:50
【问题描述】:

我正在阅读 Haskell 的 do notation is quite harmful。由于我还在学习 Haskell,所以我不想养成坏习惯。我正在学习一个名为 Reflex 的库,就是一个例子:

import Reflex.Dom

main = mainWidget $ el "div" $ do
  t <- textInput def
  dynText $ _textInput_value t

我是readingdo 符号与 IO 等单子的存在有关,并且与 &lt;-$ 运算符有关。

没有do,我怎么能写出这几行呢?


如果你支持do...你能解释一下它在 Haskell 和这个例子中的用法吗?

【问题讨论】:

  • do 表示法是无害的。事实上,do-notation 已扩展到应用程序,因此我们更鼓励使用它。
  • 您链接的问题的每个答案都表明do 表示法很有用,不应避免。

标签: haskell


【解决方案1】:

do-notation 是纯语法糖。它以一种非常简单的方式转化为对&gt;&gt;= 的调用。引用the Haskell Report:

翻译:表达式是否满足这些身份,可能是 用作内核的翻译,消除空stmts后:

do {e}    =   e
do {e;stmts}  =   e >> do {stmts}
do {p <- e; stmts}    =   let ok p = do {stmts}
    ok _ = fail "..."
  in e >>= ok
do {let decls; stmts} =   let decls in do {stmts}

这意味着您的示例将如下所示:

main = mainWidget $ el "div" $
  textInput def >>= $ \t ->
  dynText $ _textInput_value t

do-notation 没有任何害处。我不知道你从哪里得到这个想法!这实际上是编写相同代码的不同方式。

【讨论】:

    猜你喜欢
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 2013-06-12
    • 2014-02-28
    • 2015-08-15
    • 1970-01-01
    相关资源
    最近更新 更多