【发布时间】:2013-11-09 20:02:44
【问题描述】:
我有一个程序需要一些命令行参数。
假设第一个命令行参数是一个逗号分隔值 (CSV) 整数列表。
我想将第一个参数"1,2,4,8,16" 转换为[1,2,4,8,16]。我试图将字符串解析为 Int 列表,但出现编译错误。
Haskell 代码:
import System.Environment
import Data.List
import Text.Regex
main = do
args <- getArgs
ints <- if (length args > 1)
then (mapM read (splitRegex (mkRegex ",") (args!!1)))
else [1,3,5] -- defaults
print (ints)
编译错误:
myProg.hs:10:16:
Couldn't match expected type `IO' with actual type `[]'
In the expression: [1, 3, 5]
In a stmt of a 'do' block:
ints <- if (length args > 1) then
(mapM read (splitRegex (mkRegex ",") (args !! 1)))
else
[1, 3, 5]
In the expression:
do { args <- getArgs;
ints <- if (length args > 1) then
(mapM read (splitRegex (mkRegex ",") (args !! 1)))
else
[1, ....];
print (ints) }
我不确定这种类型的错误是什么意思。如果有人能向我解释类型错误以及如何修改我的代码以达到预期的结果,我将不胜感激。
【问题讨论】:
-
我建议使用木薯来解析 CSV 而不是正则表达式。我知道这不是您问题的答案,但可能是适合这项工作的工具。
标签: haskell command-line-arguments haskell-platform