我需要将命令行参数字符转换为Ints。我想将每个变量分配给变量并在我的函数中使用它们。我有以下内容:
import System.Environment
getIntArg :: IO Int
getIntArg = fmap (read . head) getArgs
main = do
n <- getIntArg
print n
但是,它不会遍历只打印一个的所有参数。另外,我会将每个分配给一个变量来使用吗?
我是FP的新手。
答案 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为你做这个