2009-08-22 5 views
3

, 난 그냥 자신이이 책 실제 세계 하스켈,에서 그리고 운동 중 하나를 수행하는 과정에서 하스켈 가르치기 시작 했어와 오류를 구문 분석, 나는 다음과 같이 썼다 코드 :하스켈은 '어디'와 가드 그래서

step acc ch | isDigit ch = if res < acc 
           then error "asInt_fold: \ 
             \result overflowed" 
           else res 
         where res = 10 * acc + (digitToInt ch) 
      | otherwise = error ("asInt_fold: \ 
            \not a digit " ++ (show ch)) 

내가 GHCi 6.6으로로드, 나는 다음과 같은 오류 있어요 : 인해 "여기서"조항의 상호 작용에

IntParse.hs:12:12: parse error on input `|' 
Failed, modules loaded: none. 

나는 오류가 있음을 거의 확신을하고 후속 가드; 가드를 주석 처리하면 "where"절이 동등한 "let"절로 대체되는 것과 마찬가지로 제거됩니다. 나는 또한 내가 들여 쓰기를 어딘지로 망칠 것임에 틀림 없다고 확신하지만, 어떻게 분류 할 수는 없다.

미리 감사드립니다.

답변

9

시도 :

step acc ch 
    | isDigit ch = if res < acc then error "asInt_fold: result overflowed" else res 
    | otherwise = error ("asInt_fold: not a digit " ++ (show ch)) 
    where res = 10 * acc + (digitToInt ch)