В чисто функциональном программировании мы не выполняем операторы, как в императивном программировании.нет понятия «сделай это, тогда сделай это».Вместо этого мы в основном пишем функции, которые принимают несколько аргументов в качестве входных данных и возвращают некоторые выходные данные.
Что если мы хотим взаимодействовать с миром, а не просто вычислять возвращаемое значение?Ну, в данном конкретном случае мы прибегаем к монаде IO.Обратите внимание, что это не то, что мы делаем часто - мы предпочитаем избегать монады ввода-вывода, насколько это возможно, чтобы сохранить большую часть вычислений в чистоте.
Вот пример:
f :: Int -> IO ()
f x = do
putStrLn "hello"
if x > 15
then putStrLn "> 15"
else putStrLn "not > 15"
if x > 10
then putStrLn "> 10"
else putStrLn "not > 10"
Если вы новичок, я бы порекомендовал вам изучить основы Haskell перед использованием монады IO.Повсеместное использование монады ввода-вывода привело бы к очень однотипному коду.
Большинство императивных программистов, изучающих FP, стараются перенести свои прежние привычки на языки FP - это очень распространено.Однако программирование с побочными эффектами и изменяемыми переменными плохо справляется с FP.Постепенно нужно перестать думать в терминах эффективных утверждений и вместо этого перемонтировать свой мозг, чтобы мыслить в терминах ценностей и (часто рекурсивных) определений.
Обратите внимание, что FP не является особенным в этом аспекте.Если бы кто-то сначала выучил чистый FP, скажем, на Haskell, а затем подошел к какому-либо императивному языку программирования, они, вероятно, спросили бы: «Как мне использовать монаду состояний?».Даже если бы вы могли использовать монаду состояния в -say-Java, это было бы глупо, поскольку использование изменяемых переменных было бы гораздо более естественным.Опять же, программирование пытается внедрить свои предыдущие методы в новый язык / парадигму, игнорируя новые возможности и создавая недиоматический код.