我刚刚使用安装程序安装了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"
答案 0 :(得分:8)
使用您的程序,您没有指示Haskell该程序应该做什么。您只有定义了一项功能。这并不意味着Haskell会自动调用该函数。
您需要定义一个具有特殊名称main
的函数(ghc
有一个指定其他名称的选项,但我们暂时忽略它)。 main
是IO 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
。