Haskell空主函数

时间:2018-12-27 23:22:56

标签: haskell

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

2 个答案:

答案 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指出的那样,这是不必要的。