Но ты убери синтаксический сахар из кода и посмотри, каким образом эта зависимость выражается на самом деле.
Да ваще, код поменялся до неузнаваемости:
main =
putStrLn "str1" >>
putStrLn "str2"
Добавлено
Кстати в Erlang/Elixir нет мутабельных переменных, но полно функций с побочными эффектами. Значит таки можно писать императивно (по вашему определению) без мутабельных переменных?