1
는 다음과 같은 코드를 생각해 보자. 그러나이 코드는 구문 분석을 수행합니다.왜 이것이 do 표기법의 구문 분석 오류입니까?</p> 그것은 <code>ghc</code>에서 구문 분석하지 않습니다 <pre><code>foo = do let bar = do baz bar </code></pre> <p>버전 8. 그것은 <code>baz</code>을 포함하는 행에 대해 불평 :
foo = do
let bar = do
baz
bar
이 혼동이 있습니다. 두 버전의 근본적인 차이점은 무엇입니까?
두 칸이'do' 블록의 일부가되기에 충분하지 않은 이유는 무엇입니까? 'let'의 직접적인 부분이 아니라,'let'에 값이 할당되지 않았 음을 주목하십시오. – Turion
@Turion Haskell의 레이아웃 규칙에 따르면, "let"또는 "where"의 RHS에있는 모든 것이 LHS의 패턴의 첫 번째 열만큼 적어도 들여 쓰기되어야합니다. 첫 번째 예제에서,'baz'는'bar'까지 들여 쓰이지 않습니다. 괜찮지는 않지만 두 번째 예에서는 그렇습니다. –