2011-12-28 91 views
2

早上好伙计程序员!Haskell调用函数onload

我在一个项目使用哈斯克尔,我也想知道如何不必键入ghci的两条线运行Haskell的功能,例如

ghci filename.hs function 

这只能做这样做的:

ghci filename.hs 
function 

???? 我正在寻找类似于C中main()的东西,它在编译程序时自动运行 有没有类似的东西? 我一直在检查-h选项上的ghci,但我似乎无法得到它的工作!

非常感谢!

干杯!

回答

6

我假设function的类型为IO()。然后您可以让main = function,并从命令行使用例如runhaskell modulename。和C一样,main是一个特殊功能。

澄清一点,以防万一:如果您的function是纯粹的,即其类型不包含IO,您不能真正“运行它”。我想这是一个简单的说法,但基本上GHCi所做的就是致电print function。如果你想模仿这一点,你可以使用像main = print function和使用runhaskell。这假定function的类型是Show的一个实例。

+0

最近发布的[ReadArgs](http://www.reddit.com/r/haskell/comments/nsxwz/readargs10_now_on_hackage/)库可以让'main' +'runhaskell'选项相当不错,如果你想在命令行中将参数传递给函数。 – 2011-12-28 20:57:42

8

你可能寻找ghc -e代替:

> echo 'foo x y z = x+y*z' > foo.hs % let's make a foo.hs file 
> ghc foo.hs -e 'foo 1 2 3'   % call the function in foo.hs 
=> 7 

另外请注意,您还可以在ghci中使用:reload命令。在ghci中加载文件,编辑,输入:reload并再次测试。此外,如果这似乎太单调乏味,你也可以定义一个宏ghci中,它允许你重新加载,并在同一时间测试功能:

> :def test \x -> return (":reload\n" ++ x) 
> :test foo 1 2 3 
=> Ok, modules loaded: Foo. 
7 

如果你希望建立真正的程序,而不是快速测试 你的功能,那么你最好在编写 main函数时阅读其他答案。

+0

+1在ghci中从命令行*和*':def'使用'ghc -e'的例子?太好了! – 2011-12-28 20:55:08