Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在haskell中,如何将代码作为函数引用_Haskell - Fatal编程技术网

在haskell中,如何将代码作为函数引用

在haskell中,如何将代码作为函数引用,haskell,Haskell,我目前有一个应用程序,它有一个菜单,将执行以下功能:添加、删除和查看。我想知道的是如何将代码作为函数引用 我试图引用的代码如下所示: putStrLn "Please enter the username:" addName <- getLine appendFile "UserList.txt" ("\n" ++ addName) putStrLn“请输入用户名:” addName首先,在GHCi中使用let关键字,因为您在IO单子中。在源代码中定义函数通常不需要它。例如,您可以有一个

我目前有一个应用程序,它有一个菜单,将执行以下功能:添加、删除和查看。我想知道的是如何将代码作为函数引用

我试图引用的代码如下所示:

putStrLn "Please enter the username:"
addName <- getLine
appendFile "UserList.txt" ("\n" ++ addName)
putStrLn“请输入用户名:”

addName首先,在GHCi中使用
let
关键字,因为您在IO单子中。在源代码中定义函数通常不需要它。例如,您可以有一个名为“MyProgram.hs”的文件,其中包含:

addUserName = do
  putStrLn "Please enter the username:"
  addName <- getLine
  appendFile "UserList.txt" ("\n" ++ addName)
(这是:l代表:load,不是数字1。)实际上,您可以在GHCi中定义函数,但这有点麻烦,除非它是一行。这将有助于:

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

请注意,这不是一个函数,而是一个操作。(是的,其他语言会将其称为函数,但是…)除了像mhwombat建议的那样将GHCi理解为一种
do
块之外,还一定要阅读“去糖化do表示法”,以便了解
IO字符串的序列是如何在幕后由
(>>=)
组成的。
ghci> :l MyProgram.hs
ghci> addUserName
ghci> let greet = putStrLn "Hello!"
ghci> greet
Hello!