2016-07-05 50 views
0

我读的是哈斯克尔的do notation is quite harmful。由于我还在学习Haskell,所以我不想做坏习惯。我学习了一个名为反射库,就是一个例子:重写这个例子没有做

import Reflex.Dom 

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

reading符号与单子如IO的存在做,并与<-$运营商做。

我怎么能写这几行没有do


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

+5

符号是无害的。实际上,符号已经扩展到应用程序,所以我们更鼓励它的使用。 – ErikR

+1

关于您所关联问题的每一个答案都表示'做'符号是有用的,不应该被避免。 – interjay

回答

2

do -notation是纯粹的语法糖。它以一种非常简单的方式转化为对>>=的呼叫。引用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。我不知道你从哪里得到这个想法!这实际上是编写相同代码的不同方式。