我正在使用junk.hs文件加载ghci.我没有使用我的main函数,只是调用文件中的其他函数来测试它们,例如:
-- junk.hs
main :: IO ()
main = putStrLn "hello"
otherFunction a b = a + b
Run Code Online (Sandbox Code Playgroud)
当我加载:
Prelude> :l junk.hs
Prelude> otherFunction 1 2 -- good
Run Code Online (Sandbox Code Playgroud)
这很好,因为我不是主要的,因为我必须定义一些主要功能,这就完成了工作.
但是,什么是正确的最小,null主函数?
我试过了
main :: IO ()
main = Nothing
Run Code Online (Sandbox Code Playgroud)
而这失败了
*Main> :load junk.hs
[1 of 1] Compiling Main ( junk.hs, interpreted )
junk.hs:2:8: error:
• Couldn't match expected type ‘IO ()’ with actual type ‘Maybe a0’
• In the expression: Nothing
In an equation for ‘main’: main = Nothing
|
2 | main = Nothing
| ^^^^^^^
Failed, no modules loaded.
Run Code Online (Sandbox Code Playgroud)
Nothing有Maybe a一些类型a,但从来没有IO ().所以这不是一个值main.
标准的无操作main行为是
main :: IO ()
main = return ()
Run Code Online (Sandbox Code Playgroud)
这可以很好地执行,只做......好吧,没有.
或者,如果您不希望主操作以静默方式执行,则可以进行操作
main :: IO ()
main = error "This program should not be run."
Run Code Online (Sandbox Code Playgroud)
或类似的东西.
其中一个最短的选项将是
main=main::IO()
Run Code Online (Sandbox Code Playgroud)
这将永远循环或崩溃与无限递归错误.毋庸置疑,除非你感到非常懒惰并且知道没有其他人必须处理该代码,否则不要这样做......