From ae316f42fedd5a4e6ecba08a804bde1b311535a3 Mon Sep 17 00:00:00 2001 From: nihonium Date: Sun, 12 Feb 2023 00:58:19 +0300 Subject: [PATCH] hs - tail recursion --- seminar01/Factorial.hs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 seminar01/Factorial.hs diff --git a/seminar01/Factorial.hs b/seminar01/Factorial.hs new file mode 100644 index 0000000..3bf1305 --- /dev/null +++ b/seminar01/Factorial.hs @@ -0,0 +1,19 @@ +module Main where + +factorial :: Integer -> Either String Integer +factorial n = if n < 0 then + Left "n cannot be negative" + else Right $ factorial' n 1 where + factorial' 0 res = res + factorial' n res = factorial' (n - 1) $ n * res + +main :: IO() +main = do + s <- getLine + let n = (read s :: Integer) + let res = factorial n + case res of + Right r -> do + print r + Left err -> do + putStrLn $ "Error: " ++ err