【问题标题】:Haskell call function onloadHaskell 调用函数 onload
【发布时间】:2011-12-28 13:20:53
【问题描述】:

各位程序员早上好!

我正在使用haskell 进行一个项目,我想知道如何运行haskell 函数而不必在ghci 上键入两行,例如

ghci filename.hs function

只能这样做:

 ghci filename.hs
function

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

非常感谢!

干杯!

【问题讨论】:

    标签: function haskell call onload


    【解决方案1】:

    您可能正在寻找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 从命令行使用ghc -e的例子和在ghci中使用:def?不错!
    【解决方案2】:

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

    澄清一下,以防万一:如果您的function 是纯的,即类型不涉及IO 的类型,您就不能真正“运行”它。我想这样说是一种简化,但本质上 GHCi 所做的是调用print function。如果你想模仿这个,你可以使用main = print function 和runhaskell 之类的东西。这假设function 的类型是Show 的一个实例。

    【讨论】:

    • 最近发布的ReadArgs 库可以使main + runhaskell 选项非常好,如果你想在命令行中将参数传递给函数。
    猜你喜欢
    • 2022-10-07
    • 1970-01-01
    • 2014-03-17
    • 2018-02-09
    • 1970-01-01
    • 2017-03-12
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多