Aug*_*son 5 haskell program-entry-point do-notation
在java中我们总是写:
public static void main(String[] args){...}
Run Code Online (Sandbox Code Playgroud)
当我们想要开始编写程序时.
我的问题是,对于Haskell,IE是否相同:我是否总是可以确定声明:main = do,当我想在Haskell中为程序编写代码时?
例如:
main = do
putStrLn "What's your name?"
name <- getLine
putStrLn ("Hello " ++ name)
Run Code Online (Sandbox Code Playgroud)
该程序将询问用户"你叫什么名字?" 然后,用户输入将存储在name-variable中,并且在程序终止之前将显示"Hello"++名称.
Wil*_*sem 11
简短的回答:不,我们必须宣布一个main =
,但不是一个do
.
本main
必须是一个IO单子类型(所以IO a
),其中a
是任意的(因为它被忽略),因为是写在这里:
名称的使用
main
很重要:main
被定义为Haskell程序的入口点(类似于main
C中的函数),并且通常必须具有IO
类型IO ()
.
但你没有必要需要do
注释.其实do
是语法糖.main
事实上你是:
main =
putStrLn "What's your name?" >> getLine >>= \n -> putStrLn ("Hello " ++ n)
Run Code Online (Sandbox Code Playgroud)
或者更优雅:
main = putStrLn "What's your name?" >> getLine >>= putStrLn . ("Hello " ++)
Run Code Online (Sandbox Code Playgroud)
所以这里我们写了一个main
没有do
注释.有关desugaring do
符号的更多信息,请参阅此处.