当我加载一个带有以下行的文件时,GHCi究竟发生了什么:0 = 1?
我原以为这会产生错误,但似乎根本没有做任何事情.它有什么用吗?
我认为在GHCi中它只相当于"让0 = 1".那是做什么的?
对不起,如果这是一个常见的问题.我有这个简单的IO()功能:
greeter :: IO()
greeter = do
putStr "What's your name? "
name <- getLine
putStrLn $ "Hi, " ++ name
Run Code Online (Sandbox Code Playgroud)
现在我想调用greeter并同时指定一个预先填充的参数getLine,这样我实际上不需要进行交互.我想象一个像功能的东西
IOwithinputs :: [String] -> IO() -> IO()
Run Code Online (Sandbox Code Playgroud)
那我就做
IOwithinputs ["Buddy"] greeter
Run Code Online (Sandbox Code Playgroud)
这将产生一个IO动作,不需要用户输入,看起来像:
What's your name?
Hi, Buddy
Run Code Online (Sandbox Code Playgroud)
我想这样做而不修改原始IO()功能greeter.我也不想greeter从命令行编译和管道输入.IOwithinputs在Hoogle中我没有看到任何类似的东西.(withArgs引人入胜地命名和命名,但根本不是我想要的.)有一个简单的方法吗?或者由于某种原因它是不可能的?这是Pipes的用途吗?
有了这个文件:
main = do
putStr "Input: "
s <- getLine
putStr s
Run Code Online (Sandbox Code Playgroud)
它在GHCi中执行我想要的操作,即提示然后允许输入与提示在同一行.如果我编译它并在终端中运行可执行文件,我将在输入之后才会看到提示.关于新线的一些事情.我使用的是Mac OS 10.8.5,GHC 7.4.2.
是否需要切换终端设置或GHC选项以从可执行文件中获取我想要的行为?