如何在Haskell中进行简单退出?

Red*_*lor 1 haskell

这是代码:

main :: IO()
main =  do 
{
         putStrLn ("Meniu: ");
         putStrLn ("1. menu 1");
         putStrLn ("2. menu 2");
         putStrLn ("3. menu 3");
         putStrLn ("4. menu 4");
         putStrLn ("5. Exit - Iesire)");
         putStrLn ("-------------------------");
         putStr ("Enter option: ");
         opt <- getLine;
         if(opt == "1") then do
         {
            Code one etc
            main
         }
            else if(opt == "2") then do
         {
            Code 2 etc
            main
         }
            else if(opt == "3") then do
         {
            code 3 etc
            main
         }
         else if(opt == "4") then do
         {
            code 4 etc
            main

         }
         else if(opt == "5") then do
         {
            ??????????? ()
         }
         else putStrLn "Option is not exist";
}
Run Code Online (Sandbox Code Playgroud)

问题:在选项5中(opt == 5)我需要制作一个代码来停止菜单,但我不知道如何做到这一点.我试图在Google和StackOverflow上找到更多示例,但我真的找不到解决方案.

lef*_*out 9

return ()会在这里工作.在这种情况下,return实际上表现得像在程序语言中一样(但要小心,这通常正确).

关于样式的注意事项:在Haskell 中if,else具有相等比较的链是非常不恰当的.正确的方法是case:

main =  do 
     putStrLn "Meniu: "
     sequence_ [ putStrLn $ [n]++". menu "++[n] | n<-['1'..'5'] ]
     putStrLn "-------------------------"
     putStr "Enter option: "

     opt <- getLine
     case opt of
      "1" -> do
        Code one etc
        main
      "2" -> do
        Code 2 etc
        main
      "3" -> do
        code 3 etc
        main
      "4" -> do
        code 4 etc
        main
      "5" -> return ()
      _ -> putStrLn "Option does not exist"
Run Code Online (Sandbox Code Playgroud)

如果正确缩进代码,则不需要大括号和分号.

return ()这里有什么简单......什么都没有,这是无操作.因为maincase切换之后结束,如果你没有main像其他选项一样回退,程序也会结束.