我有一个程序需要一些命令行参数。
假设第一个命令行参数是一个逗号分隔值 (CSV) 整数列表。
我想将第一个参数转换"1,2,4,8,16"
为[1,2,4,8,16]
. 我试图将字符串解析为Int
列表,但出现编译错误。
哈斯克尔代码:
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) }
我不确定这种类型的错误是什么意思。如果有人可以向我解释类型错误以及如何修改我的代码以达到预期的结果,我将不胜感激。