2017-04-26 42 views
1

這是衆所周知的是<-do塊是用於>>=只是語法糖,但在Haskell的源代碼任意定義<-或只是句法結構是語言語法的一部分,因此解析器剛用>>=的適當形式替換每個<-哈斯克爾< - 在做記號

回答

5

Do表達式是語言的一部分。

從2010年Haskell語言報告:

3.14 Do Expression

lexp → do { stmts }   (do expression) 
stmts → stmt1 … stmtn exp [;] (n ≥ 0) 
stmt → exp ; 
     | pat <- exp ; 
     | let decls ; 
     | ;      (empty statement) 

一個做的表達提供 單子編程更傳統的語法。它可以與諸如

putStr "x: " >> 
getLine   >>= \l ->  
return (words l) 

以更傳統的方式書寫的表達式:

do putStr "x: " 
    l <- getLine 
    return (words l) 

如做翻譯表示,用let綁定變量的,而那些被定義完全態類型< - 是lambda綁定的,因此是單形的。

參見Haskell語言報告的Do Expression