繁体   English   中英

未解决的顶级重载

[英]Unresolved top-level overloading

我需要在Haskell制作可乐自动售货机,但我遇到了一些问题。 我不太了解Haskell,所以我不知道发生了什么

main = start
       return()

start = do putStr "\nSelect a coin\n1. R$0,25\n2. R$0,50\n3. R$1,00\n"
           coin <- getChar;
           case coin of
                1 -> twentyFive
                2 -> fifty
                3 -> dispensed
                otherwise -> do putStr "Select a valid option"
                                start

twentyFive = do putStr "\nSelect a coin\n1. R$0,25\n2. R$0,50\n3. R$1,00\n"
                coin <- getChar;
                case coin of
                     1 -> fifty
                     2 -> seventyFive
                     3 -> dispensed
                     otherwise -> do putStr "Select a valid option"
                                     twentyFive

fifty = do putStr "\nSelect a coin\n1. R$0,25\n2. R$0,50\n3. R$1,00\n"
           coin <- getChar;
           case coin of
                1 -> seventyFive
                2 -> dispensed
                3 -> dispensed
                otherwise -> do putStr "Select a valid option"
                                fifty

seventyFive = do putStr "\nSelect a coin\n1. R$0,25\n2. R$0,50\n3. R$1,00\n"
                 coin <- getChar;
                 case coin of
                      1 -> dispensed
                      2 -> dispensed
                      3 -> dispensed
                      otherwise -> do putStr "Select a valid option"
                                      seventyFive

dispensed = do putStr "-- Coke Dispensed --"
               return()

但是我收到了这个错误:

Unresolved top-level overloading
*** Binding             : seventyFive
*** Outstanding context : Num Char

这是什么意思?

你没有缩进seventyFive的主体, seventyFive你缩进其他函数的主体一样。

应该像这样缩进:

seventyFive = do putStr "\nSelect a coin\n1. R$0,25\n2. R$0,50\n3. R$1,00\n"
                 coin <- getChar
                 case coin of
                      1 -> dispensed
                      2 -> dispensed
                      3 -> dispensed
                      otherwise -> do putStr "Select a valid option"
                                      seventyFive

错误消息是因为Hugs认为你的函数的第一行也是最后一行。 (你的第二行没有缩进到do之后的第一行的那一部分。)

顺便说一句,如果可以的话,可以使用GHC而不是Hugs(理想情况下,作为Haskell平台的一部分),因为Hugs已经维护了几年。


不是错误,但你看起来也很奇怪

                 coin <- getChar;

用。。。来代替

                 coin <- getChar

更多错误:

main = start
       return()

应该

main = do start
          return()

或者(因为我们不必拥有main :: IO () ,我们可以拥有main :: IO anythingWeWant

main = start

最后,你正在调用getChar ,它会给你一个Char ,但模式匹配就好像它给你一个数字。 您需要将数字括在单引号中(例如'1'而不是1 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM