将命令行参数分配给变量

时间:2015-10-26 06:36:00

标签: haskell

我需要将命令行参数字符转换为Ints。我想将每个变量分配给变量并在我的函数中使用它们。我有以下内容:

import System.Environment   

getIntArg :: IO Int
getIntArg = fmap (read . head) getArgs

main = do
    n <- getIntArg
    print n

但是,它不会遍历只打印一个的所有参数。另外,我会将每个分配给一个变量来使用吗?

我是FP的新手。

1 个答案:

答案 0 :(得分:5)

如果要将所有参数映射到Int,则应使用

getIntArgs :: IO [Int]
getIntArgs = fmap (map read) $ getArgs

或者更短一些:

getIntArgs = map read <$> getArgs

代替。

这样你可以做到

main = do
    ns <- getIntArgs
    print ns

然后使用(!!)获取您感兴趣的内容,或者如果您知道/期望至少有一定数量的Int - 参数

(n1:n2:n3:_) <- getIntArgs

但当然你应该首先检查长度 - 如果用户决定输入无法解析为Int的内容,这也会失败

因此,如果您不想重新发明轮子(如果您想要学习或者只需要快速解决方案可能没问题),您可能希望环顾四周并使用现有的包裹 - 例如{{3为你做这个