我有一個程序需要一些命令行參數。從Haskell的命令行參數解析CSV列表
說第一個命令行參數是逗號分隔值(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,而不是正則表達式。不是你知道的問題的答案,但可能是這項工作的正確工具。 – idontgetoutmuch