История изменений
Исправление balsoft, (текущая версия) :
В средах, где бОльшая часть функций - с побочным эффектом, так не получится
В этом и заключается основное умение грамотного хаскелиста – декомпозировать «функции с побочным эффектом», выделив побочный эффект в сторонку и оставив как можно больше функций чистыми. Очень тупой пример, который демонстрирует принцип:
Вместо
greet :: String -> IO ()
greet = putStrLn . ("Hello, " ++)
main = greet =<< readLn
писать
greet :: String -> String
greet = ("Hello, " ++)
main = putStrLn . greet =<< readLn
Исправление balsoft, :
В средах, где бОльшая часть функций - с побочным эффектом, так не получится
В этом и заключается основное умение грамотного хаскелиста – декомпозировать «функции с побочным эффектом», выделив побочный эффект в сторонку и оставив как можно больше функций чистыми. Очень тупой пример, который демонстрирует принцип:
Вместо
greet :: String -> IO ()
greet = putStr . ("Hello, " ++)
main = greet =<< readLn
писать
greet :: String -> String
greet = ("Hello, " ++)
main = putStrLn . greet =<< readLn
Исходная версия balsoft, :
В средах, где бОльшая часть функций - с побочным эффектом, так не получится
В этом и заключается основное умение грамотного хаскелиста – декомпозировать «функции с побочным эффектом», выделив побочный эффект в сторонку и оставив как можно больше функций чистыми. Очень тупой пример, который демонстрирует принцип:
Вместо
greet :: String -> IO ()
greet = putStr . ("Hello, " ++)
main = greet =<< readLn
писать
greet :: String -> String
greet = ("Hello, " ++)
main = print . greet =<< readLn