예상대로 다음 줄은 작동하지만, 내가 왜 조금 걱정 :하스켈 : 변수의 범위 바인드 기능 람다 표현식을 사용하여
:getLine >>= \x-> getLine >>= \y-> return [x, y]
이 범위를 괄호의 추가 람다 표현식을 고려
getLine >>= (\x-> getLine) >>= (\y-> return [x, y])
return
에 사용 된 경우 x
의 범위가 아니기 때문에 두 번째 줄이 잘못되었으므로 만족 스럽습니다. 첫 번째 줄에서 x
의 범위가 '유출'된 것처럼 보인 점에 대해 우려합니다.
'유출'이 나쁜 관행으로 간주됩니까? 나는 그것이 범위에 어떻게 남아 있었는지에 관해 혼란스럽고 \x -> getLine
표현 직후에 사라지지 않았다. 이 두 번째 람다 첫 번째 내부에 있음이 분명하게
getLine >>= (\x-> getLine >>= (\y-> return [x, y]))
, 그래서의 변수를 액세스 그것은 아무 문제가 없습니다 : 올바르게 하스켈의 우선 순위 규칙에 따라 첫 번째 줄을 괄호로하면
@ sepp2k에는 정답이 있습니다. 또한 실제로 괄호로 두 번째 줄을 작성하려고하면 "범위에 포함되지 않음"오류가 발생합니다. –