Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Haskell без монад

import BASIC
main = runBASIC $ do
10 LET X =: 1
20 PRINT "Hello BASIC world!"
30 LET X =: X + 1
40 IF X <> 11 THEN 20
50 END
Насколько я понял, здесь результат не поменяется, НО поменяется порядок поулчения этого результата. Если бы приоритетPrelude> (putStrLn "Строка 1") >>= (\a -> putStrLn "Строка 2") >>= (\b -> putStrLn "Строка 3")
Строка 1
Строка 2
Строка 3
Забегая вперёд, скажу что оператор »= имеет очень низкий приоритет и при желании в этом примере можно обойтись без скобок.
>>= был ниже, чем у ->, то вот этот код, который вы привели позже:Prelude> getLine >>= \a -> putStrLn "Вы ввели:" >>= \_ -> putStrLn a
asdf
Вы ввели:
asdfхорошенько бы вас отругал. Что он непременно и сделает, стоит только поставить скобки:Prelude> getLine >>= (\a -> putStrLn "Вы ввели:") >>= (\_ -> putStrLn a)
:1:62: Not in scope: `a'Prelude> getLine >>= \a -> putStrLn "Вы ввели:" >>= \_ -> putStrLn a
Prelude> getLine >>= (\a -> putStrLn "Вы ввели:" >>= (\_ -> putStrLn a))
Haskell без монад