당신은레이아웃이없는 표기법의 바인딩에 "in"이 필요합니까? 하스켈에서
main = do
let x = 5
print x
을 말할 수있는이 컴파일되지 않습니다
main = do
let x = 5
in print x
을하지만 명시 적 레이아웃을 사용하고있는 경우,이 컴파일되지 않습니다 :
main = do {
let x = 5;
print x;
}
하지만,이 작품을 :
main = do {
let x = 5
in print x;
}
맞습니까? 명시 적 레이아웃에 대해 더 읽을 수 있고 표기법을 쓰고 말할 수있는 곳이 있습니까? 그것이 내가
do { let DECLS; stmts }
을 작성할 수 있습니다 말한대로 Section 3.14 of the Haskell 98 report 내 세 번째 예는 일을해야한다고 제안 나에게 보인다 그것은 당신의 질문에 대한 규범 적 답은 하스켈 보고서에서 찾아 볼 수있다
let DECLS in do { stmts }
세 번째 예제에서'5'가'do' 블록이 아닌'let' 블록의 일부로 구문 분석 될 때 세미콜론을 기대합니다. 그러나 나는 확신 할 정도로 충분히 자세히 보지 않았다. 암시 적 블록에서 명시 적 블록으로의 변환에 대한 보고서 섹션도 좋습니다. –
@DanielWagner 당신은 거기에 뭔가 있습니다; 내가 "let {x = 5}"를하면 컴파일됩니다. " –
예, 여기서 문제는 내부 렛의 레이아웃 사용과 외부 괄호의 세미콜론을 섞은 것입니다. Daniel이 말했듯이,';'는'let'의 선언문의 일부로 보여지며'do'의 선언을 더 이상 구분할 수 없습니다. 나는'do {let {x = 5}; ... "실제로 문제를"고치는 "최선의 방법입니다. 또 다른 옵션은'x' = 5 다음에';'를'let' 레이아웃의 일부로 해석 할 수없는 곳에 두는 것입니다. 예를 들어 다음 줄의 시작 부분,'print x '. – kosmikus