Haskell第一步编译错误

时间:2017-10-17 17:49:36

标签: macos haskell functional-programming

我刚刚使用安装程序安装了Haskell平台https://www.haskell.org/platform/mac.html

现在,作为我的菜鸟,我创建了一个非常简单的程序,只是为了看它是否有效:

runhaskell test.hs

但是当我执行

ghc test.hs

它返回

  

test.hs:0:53:错误:

     

•不在范围内的变量:main :: IO a0

     

•也许你的意思是'min'(从Prelude导入)

如果我跑

let group1;

exports.UpdateCron = () => {
  const date1 = new Date();

  group1 = schedule.scheduleJob(date1, () => {
    console.log('group1 start');
  });
};

exports.DeleteCron = function () {
  if (group1 && group1.cancel) group1.cancel();
};

它返回

  

IO动作'main'未在模块'Main'中定义

仅指示第一行的第一个字符" f"

1 个答案:

答案 0 :(得分:8)

使用您的程序,您没有指示Haskell该程序应该做什么。您只有定义了一项功能。这并不意味着Haskell会自动调用该函数。

您需要定义一个具有特殊名称main的函数(ghc有一个指定其他名称的选项,但我们暂时忽略它)。 mainIO a类型的函数。它是一个描述执行程序时调用的操作(IO)的函数。

由于您只定义了单个函数f,因此您可能希望测试f

所以我们可以写一个main

main :: IO ()
main = print (f 2)

现在如果将此添加到程序中。编译器将生成将执行main的可执行文件。此处main非常简单:我们会print指示f 2的结果。因此它将打印4。我们致电main该计划的入口点

您也可以决定运行交互式会话。在这种情况下,您不需要入口点,因为您可以在交互式会话中决定要调用哪些函数。

例如,您可以使用ghci file.hs启动互动版本,然后运行:

$ ghci testprogram.hs 
GHCi, version 8.0.2: http://www.haskell.org/ghc/  :? for help
[1 of 1] Compiling Main             ( testprogram.hs, interpreted )
Ok, modules loaded: Main.
*Main> f 2
4

现在我们调用f 2,交互式会话自动打印结果4