Haskell Noob需要援助

时间:2012-06-12 20:11:35

标签: bash haskell

这有点长,所以请耐心等待!

我在使用Haskell程序时遇到了一些麻烦,我必须将其用作uni项目的一部分。作为参考,它是Casper

所以,你应该执行一个脚本,这实际上是一个Bash脚本来调用这样的Hugs解释器:

exec $HUGSBIN/hugs $HUGSARGS +p"Casper> " $FILES

$ FILES指向Main.lhs文件。

在此之后,我需要在解释器中调用带有文件路径的函数“compile”。

我需要以脚本方式执行上述操作。我需要这个自动化,因为我正在编写一个程序,它将在后台调用Casper。

所以我编译了.lhs文件。现在我想执行“编译”功能,但我不知道如何完成。我试试:

./Main compile <a path>

从命令行但它返回一个关于未找到文件“test”的错误。经过调查,我在Main.lhs文件中看到了这些行:

>main :: String -> IO()
>main = compile "test"

>compile :: String -> IO()
>compile s = catch (compile0 False s) handler

[...snipped]

第二行解决了这个问题。现在我的问题是,在编译main.lhs后,如何调用“compile”函数并将路径传递给它?从解释器,我只是键入“编译”,它的工作原理,但在编译main.lhs并从命令行执行后,我无法工作?有什么想法吗?如果所有其他方法都失败了,我有没有办法编写Hugs的脚本?

感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

您可以通过getArgs访问传递给Haskell程序的命令行参数。例如,听起来你想要一个像这样做的主函数:

>main = do
>    args <- getArgs
>    case args of
>        [] -> putStrLn "What file did you want me to compile?"
>        [filename] -> compile filename
>        _ -> putStrLn "I only compile one file at a time."

修改品味。

答案 1 :(得分:2)

main替换为

 main = getArgs >>= \(arg1:_) -> compile arg1

这会将第一个命令行参数(arg1)传递给compile而不是“test”,并忽略其余部分(_)。您可能需要添加

 import System

import System.Environment

我不记得拥抱这需要什么。