2012-06-25 5 views
0

하스켈에서 콜라 자동 판매기를 만들어야하지만 몇 가지 문제가 있습니다. 나는 아주 잘 하스켈을 이해하지 못하는, 그래서 해결되지 않은 최상위 오버로드

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

당신은 하스켈을 처음 사용한다고 말했기 때문에'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 

오류 메시지입니다. (두 번째 라인은 첫 번째 라인의 한 부분만큼 들여 쓰기가되어 있지 않습니다.)

Btw, Hugs와 마찬가지로 GHC를 사용하십시오 몇 년 동안 유지되지 않았습니다.


하지 오류, 그러나 그것은 또한 당신이

    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