2012-06-25 2 views
0

Мне нужно сделать машину Coke Vending Machine в 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 

Что это значит?

+0

Вы сказали, что вы новичок в Haskell, поэтому, возможно, вы не знаете, что 'return()' не требуется, и ';' в конце 'getChar' тоже не требуется. – Artyom

+0

Вы, вероятно, должны давать явные сигнатуры типов для своих функций, они могут делать ошибки, подобные этому ясному. –

ответ

2

Вы не отделили тело 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 считает, что первая линия вашей функции также в последней строке. (У вас была вторая строка, не имеющая отступов по отношению к той части первой строки, которая находится после .)

Кстати, используйте 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).

+0

Это была проблема, когда я вставляю код здесь, код отступом правильно, но ошибка все еще встречается – Jorgel

+0

Если вы используете вкладки в своем исходном коде, замените их пробелами. – dave4420

+0

Я не использую вкладку – Jorgel

Смежные вопросы