Следующая строка работает, как и ожидалось, но меня немного беспокоит, почему:
getLine >>= \x-> getLine >>= \y-> return [x, y]
Рассмотрим добавление скобок в область видимости лямбда-выражений:
getLine >>= (\x-> getLine) >>= (\y-> return [x, y])
Вторая строка ошибочна, потому что x
не входит в область при использовании в return
, и я счастлив с этим Что меня касается, так это то, что в первой строке область действия x
, похоже, «просочилась».
Эта утечка считается плохой практикой? Я смущен тем, как он остался в области видимости и не был потерян сразу после выражения \x -> getLine
.