Haskell 脱糖语法

Haskell desugar syntax

Shuklan 的 Haskell Lecture 希望以下代码脱糖:

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

我想到了:

main = putStrLn "Enter name:" >> getLine >>= \str -> putStrLn ("Hi " ++ str)

他透露:

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

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

两个片段是相同的,后者只是使用point free风格(也被双关语称为"pointless style")。

中心点是 ("Hi " ++) 是一个部分应用的 (++),它将 "Hi " 添加到输入中。

此函数由(使用.)与putStrLn 组成,以获得将"Hi " 添加到输入并打印它的函数。

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