Хотя это и выглядит как процедурная программа, приведенный выше синтаксис преобразуется в функциональную программу, например, так:
do { putStrLn "ABCDE" ; putStrLn "12345" }
=>
IO (\ s -> case (putStrLn "ABCDE" s) of
( new_s, _ ) -> case (putStrLn "12345" new_s) of
( new_new_s, _) -> ((), new_new_s))
То есть ряд вложенных функций, которые имеют уникальный параметр world, пронизываемый черезих, последовательность вызовов примитивных функций "процедурно".Этот дизайн поддерживает кодирование императивного программирования на функциональный язык.
Лучшим введением в семантические решения, лежащие в основе этого дизайна, является "Неуклюжий отряд" paper,