haskell - 如何在 Haskell 中执行命令列表?
问题描述
我是 Haskell 的新手,我一直在system
为我执行 shell 命令,因为我只对退出状态感兴趣。我注意到,因为我可以做类似的事情:
ls <- system "ls"
pwd <- system "pwd"
这正确地执行了这两个命令。我正在考虑执行这些命令的数组,例如
lsAndPwd <- return $ system <$> ["ls", "pwd"]
我很惊讶这实际上并没有执行任何事情。这会编译,我检查了lsAndPwd
它的类型是否正确,[IO GHC.IO.Exception.ExitCode]
但命令从未执行过。发生了什么事,我怎样才能让它工作?
解决方案
你应该使用mapM
而不是<$>
这样你得到一个IO [ExitCode]
,而不是一个[IO ExitCode]
。这样,它就被收集到一个可以运行的 IO monad 中:
lsAndPwd <- mapM system ["ls", "pwd"]
或者,调用sequence
整个事情:
lsAndPwd <- sequence $ system <$> ["ls", "pwd"]
推荐阅读
- c++ - 单个构造中的原子
- spring - 以编程方式设置 Spring bootstrap.yaml 值
- rust - Rust 编译器会从编译的可执行文件中排除依赖于常量的分支吗?
- azure - 如何抑制 PowerShell 脚本中的特定警告?
- c++ - C++ QT 在 QJSEngine 中调用 C++ 函数
- javascript - 应用服务器模板 discord.js
- php - 重命名文件黑客等级 php
- ethereum - 如何在没有内部交易的情况下跟踪从智能合约收到的以太币?
- ios - 使用合成的 init(from decoder:) 方法初始化实例后如何执行代码?
- .net - 如何在 Powershell 模块中使用 .net nuget 包?