我想从文件中读取(每行包含haskell命令)。我想逐行阅读并执行这些并显示结果
我的以下代码无效...打印不处理命令,只是显示它:
import System.IO
import Control.Monad
main = do
fileContents <- readFile "Instructions.txt"
mapM_ f (lines fileContents)
f line = do
putStrLn ("Processing Instruction:" ++ line)
print line
指令文件包含haskell命令。
答案 0 :(得分:1)
解决方案非常简单:将print
中的f
更改为将解释该行并执行该行的函数。
Iit非常容易使用来自system
的{{1}}并通过System.Cmd
运行命令。然后你的代码变成
ghc - e
你仍然需要添加错误检查和类似的东西,但我会把这些部分留给你,因为它们不是问题的核心。
答案 1 :(得分:1)
你可能正在寻找unsafeEval
http://hackage.haskell.org/packages/archive/plugins/1.5.1.3/doc/html/System-Eval-Haskell.html
但对于任何真正的程序来说,这几乎肯定是一个非常糟糕的主意,不仅违背了每个指南和编程规则,而且还违背了haskell编程的基本原则。
如果你只是想要一行一行地读取文件并输出结果,那么 ghc 已经很好地为你做了这个。
ghc -e "command"
将执行命令并输出到stdout,因此编写一个简单的bash脚本来为您完成此操作非常容易:
#!/bin/bash
# linebyline.sh
while read line; do
ghc -e "$line"
done
你可以通过以下方式运行:
cat myfile.txt | linebyline.sh
或者您甚至不需要单独的脚本:
cat myfile.txt | while read line; do ghc -e "$line"; done