module Main ( main ) where import Control.Monad ( mapM_ ) import System.Environment ( getArgs ) fact :: Integer -> Maybe Integer fact n = if n < 0 then Nothing else Just (product [1..n]) main :: IO () main = do argv <- getArgs let nums = map (read::String -> Integer) argv ; factNums = map fact nums ; resultSet = zip nums factNums in mapM_ (putStrLn . formatResult) resultSet where formatResult (a, Nothing) = (show a) ++ "! = undefined" formatResult (a, Just b) = (show a) ++ "! = " ++ (show b)