早上好夥計程序員!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