早上好伙计程序员!Haskell调用函数onload
我在一个项目使用哈斯克尔,我也想知道如何不必键入ghci的两条线运行Haskell的功能,例如
ghci filename.hs function
这只能做这样做的:
ghci filename.hs
function
???? 我正在寻找类似于C中main()的东西,它在编译程序时自动运行 有没有类似的东西? 我一直在检查-h选项上的ghci,但我似乎无法得到它的工作!
非常感谢!
干杯!
早上好伙计程序员!Haskell调用函数onload
我在一个项目使用哈斯克尔,我也想知道如何不必键入ghci的两条线运行Haskell的功能,例如
ghci filename.hs function
这只能做这样做的:
ghci filename.hs
function
???? 我正在寻找类似于C中main()的东西,它在编译程序时自动运行 有没有类似的东西? 我一直在检查-h选项上的ghci,但我似乎无法得到它的工作!
非常感谢!
干杯!
我假设function
的类型为IO()
。然后您可以让main = function
,并从命令行使用例如runhaskell modulename
。和C一样,main
是一个特殊功能。
澄清一点,以防万一:如果您的function
是纯粹的,即其类型不包含IO
,您不能真正“运行它”。我想这是一个简单的说法,但基本上GHCi所做的就是致电print function
。如果你想模仿这一点,你可以使用像main = print function
和使用runhaskell
。这假定function
的类型是Show
的一个实例。
你可能寻找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
函数时阅读其他答案。
+1在ghci中从命令行*和*':def'使用'ghc -e'的例子?太好了! – 2011-12-28 20:55:08
最近发布的[ReadArgs](http://www.reddit.com/r/haskell/comments/nsxwz/readargs10_now_on_hackage/)库可以让'main' +'runhaskell'选项相当不错,如果你想在命令行中将参数传递给函数。 – 2011-12-28 20:57:42