-- RusUdemy: первый самостоятельный пример на Haskell. -- https://rusudemy.com/udemy-haskell -- Код использует только Prelude. Сохраните файл и откройте его командой: -- ghci first-functions.hs -- В GHCi введите main, затем попробуйте total [1, 2, 3, 4]. -- Это редакционная практика RusUdemy, не материал курсов Udemy. doubleEvens :: [Integer] -> [Integer] doubleEvens = map (* 2) . filter even total :: [Integer] -> Integer total = sum . doubleEvens checks :: [(String, [Integer], Integer)] checks = [ ("Mixed list", [1, 2, 3, 4], 12) , ("Empty list", [], 0) , ("Only odd numbers", [1, 3, 5], 0) , ("Negative numbers and zero", [-4, -1, 0, 2], -4) ] main :: IO () main = do mapM_ (\(label, input, expected) -> putStrLn (label ++ ": " ++ if total input == expected then "OK" else "FAIL")) checks if all (\(_, input, expected) -> total input == expected) checks then putStrLn "All four checks passed." else fail "A check failed. Compare the expected and actual values." -- Попробуйте самостоятельно: -- 1. Предскажите total [2, 2, 3] до запуска, затем проверьте результат. -- 2. Замените even на odd и пересчитайте ожидаемые результаты. -- 3. Напишите total без композиции (.) и сравните ответы обеих функций. -- 4. Объясните, почему сумма пустого списка равна 0, а не вызывает ошибку. -- Дополнительно: print (take 3 (doubleEvens [1..])) -- Не вызывайте total [1..]: сумма бесконечного списка не завершится.