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 所做的。
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 所做的。