Jak*_*ben 2 haskell list char command-line-arguments
我试图让命令行参数与Haskell一起使用.我现在有
args ? getArgs
-- opens text file, uses handle for text
handle ? openFile args ReadMode
Run Code Online (Sandbox Code Playgroud)
然而,当我编译据我所知,参数表是类型的Char,不是[Char],因此,我无法打开该文件.还有另一种方法可以在Haskell中接受参数,还是我错误地接受了我的参数?
openFile :: FilePath -> IOMode -> IO Handle拿a FilePath和an IOMode并给出一个IO Handle.
这意味着
do
args <- getArgs
handle <- openFile args ReadMode
...
Run Code Online (Sandbox Code Playgroud)
声称args有类型FilePath.但是,getArgs :: IO [String]手段的类型args是[String],而不是FilePath.这意味着您openFile使用字符串列表而不是文件路径进行调用.
要解决这个问题,首先我们必须知道这FilePath只是一个类型的同义词String,这意味着我们必须采用一个元素args而不是整个列表.
以下是使用模式匹配的示例:
do
[arg] <- getArgs
handle <- openFile arg ReadMode
...
Run Code Online (Sandbox Code Playgroud)
但是,如果程序的调用者提供了错误数量的参数,则会导致模糊的运行时错误(由fail模式匹配失败生成).更强大的程序可能会使用更具描述性的失败消息处理这些情况:
do
args <- getArgs
case args of
[] -> error "must supply a file to open"
[arg] -> do handle <- openFile arg ReadMode
...
_ -> error "too many arguments"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2903 次 |
| 最近记录: |