我正在读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和这个例子中的使用吗?
答案 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
- 符号没什么害处。我不知道你从哪里得到这个想法!它实际上是编写相同代码的不同方式。