Я не уверен, что вы буквально имеете в виду отсутствие глобальных переменных (значения, которые меняются) или если вы также хотите исключить глобальные константы (значения, которые не меняются ). Haskell - один из таких языков, который не имеет глобальных переменных, хотя у него есть глобальные константы (по сути, в форме функций без параметров). В Haskell, если вы хотите эмулировать глобальное состояние, вы должны передавать свои «глобальные» переменные в каждую функцию, которую вы вызываете. Лучшее описание доступно в HaskellWiki .