簡體   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