我从文件中读取有问题.每当我需要从文件中读取时,我都会这样做:
main = do x <- readFile "/tmp/foo.txt"
putStr x
Run Code Online (Sandbox Code Playgroud)
但是现在我希望这条道路成为一个论点,所以我尝试了下面的内容
main s = do x <- readFile s
putStr x
Run Code Online (Sandbox Code Playgroud)
它不起作用.我看到以下错误:
Couldn't match expected type `IO t0'
with actual type `FilePath -> IO ()'
In the expression: main
When checking the type of the function `main'
Run Code Online (Sandbox Code Playgroud)
我的作业是编写一个程序,程序必须包含一个main函数(因为它将被编译),而call的参数必须包含文件的名称.我不确定我是否理解这一点,我不知道如何继续.我会感激一些帮助.
Joa*_*ner 17
该哈斯克尔报告指定的main功能总是有型IO t,(对于某些类型t将被忽略的),因此从来没有在正常的功能参数,所以这是不正确的方法.
您正在寻找该函数getArgs(您必须为其导入模块System.Environment.它将传递给您的程序的参数作为Strings 列表返回.
所以你的代码看起来像:
import System.Environment
main = do
args <- getArgs
case args of
[file] -> do
x <- readFile file
putStr x
_ -> putStrLn "Wrong number of arguments"
Run Code Online (Sandbox Code Playgroud)
在Haskell中,由于Haskell绑定其启动并保持一致的方式,因此不会将参数赋予main函数.你需要使用System.Environment.getArgs.
特别是,因为Haskell是一种纯函数式语言,main是一种monadic动作,它组织由软件执行的副作用计算 - 计算的结果main被丢弃,因为在函数式语言中,你与计算环境分离,只有作为副作用与它互动.
import System.Environment
main = do x <- getArgs; print x
Run Code Online (Sandbox Code Playgroud)
这将打印出您在命令行上键入的内容.