Haskell null主要功能

Mit*_*ops 2 haskell

我正在使用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)

lef*_*out 5

NothingMaybe 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)

这将永远循环或崩溃与无限递归错误.毋庸置疑,除非你感到非常懒惰并且知道没有其他人必须处理该代码,否则不要这样做......