2009-08-22 42 views
3

私は自分自身でHaskellを本の中から教え始めたばかりですReal World Haskell、そして演習中に以下のように書いていますコード:私は、エラーが「どこ」節の相互作用によるものであることがほぼ確実だHaskell: 'where'とガードでの構文解析エラー

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

と:私はGHCiの6.6にそれをロードしたとき、私は

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)) 

次のエラーが発生しましたその後のガード。ガードをコメントアウトすると、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) 
11

whereは、警備員の間に配置することができません。 Haskell Reportの段落4.4.3.1 Function bindingsから。

関連する問題