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