代码之家  ›  专栏  ›  技术社区  ›  Mittenchops

Haskell空主函数

  •  1
  • Mittenchops  · 技术社区  · 7 年前

    我正在使用一个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 :: 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 回复  |  直到 7 年前
        1
  •  5
  •   leftaroundabout    7 年前

    Nothing 有类型 Maybe a 对一些人来说 a IO () . 所以这不可能是 main .

    标准无操作 主要的 行动是

    main :: IO ()
    main = return ()
    

    这可以很好地执行,只要做。。。好 没有什么 .

    或者,如果你 不要

    main :: IO ()
    main = error "This program should not be run."
    

    或者类似的东西。

    最短的

    main=main::IO()
    

    它要么永远循环,要么因无限递归错误而崩溃。不用说,除非你觉得 真正地 懒惰并且知道没有其他人需要处理这些代码。。。

        2
  •  2
  •   Mittenchops    7 年前

    main :: IO ()
    main = undefined
    

    推荐文章