没有做重写这个例子

时间:2016-07-05 22:57:51

标签: haskell

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

import Reflex.Dom

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

reading 符号与IO等monad的存在有关,与<-和{{1}有关运营商。

如何在没有$的情况下编写这几行?

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

1 个答案:

答案 0 :(得分:2)

do - 符号是纯粹的语法糖。它转换为以非常简单的方式调用>>=。引用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 - 符号没什么害处。我不知道你从哪里得到这个想法!它实际上是编写相同代码的不同方式。