haskell - 将命令行参数分配给变量

标签 haskell

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

import System.Environment   

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

main = do
    n <- getIntArg
    print n

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

我是 FP 新手。

最佳答案

如果您想将所有参数映射到您应该使用的Ints

getIntArgs :: IO [Int]
getIntArgs = fmap (map read) $ getArgs
<小时/>

或更短一点:

getIntArgs = map read <$> getArgs
<小时/>

相反。

这样你就可以做到

main = do
    ns <- getIntArgs
    print ns

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

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

但是当然你应该首先检查长度 - 如果用户决定输入无法解析为 Ints

的内容,这也会失败 <小时/>

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

关于haskell - 将命令行参数分配给变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33339773/

相关文章:

haskell - 为什么类型系统拒绝我看似有效的程序?

haskell - 理解 HList 的这个定义

haskell - 通用量化和统一,一个例子

windows - Haskell:立即从控制台读取输入字符,而不是换行后

haskell - 如何像常规 shell 命令一样在命令行中运行 GHCi

haskell - 如何在 Haskell 中使用 Cairo 绘制 X11 Drawable

haskell - 光线追踪并找到交点处表面的法向量

scala - 在 Scala 中创建中缀运算符

haskell - 当单态限制打开*时,如何解决歧义问题?

haskell - Cloud Haskell - 如何为闭包编写 "pure"?