それで、私は本Real World Haskellから Haskell を独学し始めたところです。演習の 1 つを行う過程で、次のコードを書きました。
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」句とそれに続くガードの相互作用によるものであることはほぼ確実です。ガードをコメント アウトすると、"where" 句を同等の "let" 句に置き換えるのと同様に、ガードが削除されます。また、どうにかしてインデントを台無しにしたに違いないと確信していますが、その方法を整理することはできません。
ヒントをお寄せいただきありがとうございます。