Haskell-desugar语法

Haskell-desugar语法,haskell,syntactic-sugar,Haskell,Syntactic Sugar,Shuklan想要删除以下代码: main = do putStrLn "Enter name:" name <- getLine putStrLn ("Hi " ++ name) 他透露: main = putStrLn "Enter name:" >> getLine >>= putStrLn . ("Hi " ++) 以前从未见过这种语法,它是如何工作的?代码片段是相同的,后者只是使用样式(也被戏称为“无意义样式”) 中心点是(“Hi”++)是

Shuklan想要删除以下代码:

main = do
  putStrLn "Enter name:"
  name <- getLine
  putStrLn ("Hi " ++ name)
他透露:

main = putStrLn "Enter name:" >> getLine >>= putStrLn . ("Hi " ++)

以前从未见过这种语法,它是如何工作的?

代码片段是相同的,后者只是使用样式(也被戏称为“无意义样式”)

中心点是
(“Hi”++)
是一个部分应用的
(++)
,它在输入前加上
“Hi”

此函数(使用
)与
putStrLn
组成,以获得一个函数,该函数在输入前加上“Hi”,然后将其打印出来


这正是更明确的lambda所做的。

实际上,就变量绑定而言,您的样式更精确,但它可以以任何方式编写。您的版本是正确的。给定的答案会做额外的工作。Desugaring不会执行无点转换。将
\str->putStrLn(“Hi”++str)
替换为
putStrLn。(“Hi”+)
是除砂纸规则中未指定的额外工作。我应该很清楚。我想得太多了。非常感谢。
main = putStrLn "Enter name:" >> getLine >>= putStrLn . ("Hi " ++)