2016-07-05 36 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。我不知道你從哪裏得到這個想法!這實際上是編寫相同代碼的不同方式。