逐行读取文件并在Haskell中执行这些行

时间:2013-09-08 01:04:00

标签: haskell

我想从文件中读取(每行包含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命令。

2 个答案:

答案 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