我正在使用junk.hs文件来加载ghci。我没有使用我的主要功能,只是调用了文件中的其他功能以对其进行测试,例如:
-- junk.hs
main :: IO ()
main = putStrLn "hello"
otherFunction a b = a + b
加载时:
Prelude> :l junk.hs
Prelude> otherFunction 1 2 -- good
这很好,因为我没有调用main,而且因为我必须定义一些main函数,所以可以完成这项工作。
但是,正确的最小,空主函数是什么?
我尝试了
main :: IO ()
main = Nothing
这失败了
*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.
答案 0 :(得分:5)
Nothing
对于某些Maybe a
具有类型a
,但从没有IO ()
类型。因此,这不能是main
的值。
标准无操作main
操作是
main :: IO ()
main = return ()
这可以很好地执行,只需执行...好吧,什么都没有。
或者,如果您不希望主要动作可以静默执行,则可以将其设为
main :: IO ()
main = error "This program should not be run."
或类似的东西。
最短选项之一是
main=main::IO()
这将永远循环或因无限递归错误而崩溃。不用说,除非您真的感到很懒惰并且知道没有其他人必须处理该代码,否则不要这样做。
答案 1 :(得分:2)
要回答我的问题,看来我可以做到:
main :: IO ()
main = undefined
但是正如@ sepp2k指出的那样,这是不必要的。