Haskell< - 用符号表示

时间:2017-04-26 10:46:20

标签: haskell functional-programming monads

众所周知,<-块中的do只是>>=的语法糖,但是在Haskell源中的任何地方都定义了<-,或者它只是语法结构是语言语法的一部分,因此解析器只用适当的<-形式替换每个>>=

1 个答案:

答案 0 :(得分: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)
     

do表达式提供了更常规的语法   monadic编程。它允许表达式,如

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

以更传统的方式写作:

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

正如do的翻译所示,由let绑定的变量具有完全多态类型,而由&lt; - 定义的变量是lambda绑定的,因此是单态的。

请参阅Haskell语言报告的Do Expression