2013-04-04 41 views
4

我目前有一個應用程序,它有一個菜單,它將執行以下功能:添加,刪除和查看。我想知道的是如何將代碼作爲函數來引用。在haskell中我如何參考代碼作爲函數

我想引用的代碼是這樣的:

putStrLn "Please enter the username:" 
addName <- getLine 
appendFile "UserList.txt" ("\n" ++ addName) 

我將不得不使用let功能?例如:

所有的
let addUserName = 
putStrLn "Please enter the username:" 
addName <- getLine 
appendFile "UserList.txt" ("\n" ++ addName). 
+3

請注意,這不是一個函數,而是_action_。 (是的,其他語言會把它稱爲函數,但是......) – leftaroundabout 2013-04-04 18:32:43

+0

除了將GHCi理解爲mhwombat所暗示的「do」塊之外,還請務必閱讀有關「de-sugaring do notation」的知識,以便您理解這些'IO字符串'序列是如何在後臺用「(>> =)」組成的。 – jberryman 2013-04-04 21:24:26

回答

8

首先,您使用let關鍵字,當你在GHCI因爲你在IO單子是。您通常不需要它在源代碼中定義函數。例如,你可以有一個名爲 「MyProgram.hs」 包含文件:對於L:

addUserName = do 
    putStrLn "Please enter the username:" 
    addName <- getLine 
    appendFile "UserList.txt" ("\n" ++ addName) 

然後在ghci中,鍵入:

ghci> :l MyProgram.hs 
ghci> addUserName 

(這是負載,而不是數字一。 )其實,你可以在GHCi中定義一個函數,但除非是一行代碼,否則這有點痛苦。這將工作:

ghci> let greet = putStrLn "Hello!" 
ghci> greet 
Hello! 
+0

嗨袋熊,謝謝你的答案,幫了我很多。 – 2013-04-04 17:29:25