allArgsAdd.hs 598 B

1234567891011121314151617181920
  1. module Main where
  2. import System.Environment
  3. import Text.Read
  4. main :: IO ()
  5. main = do
  6. args <- getArgs
  7. case (foldMaybeNum [readMaybe s :: Maybe Double | s <- args]) of
  8. (Just n) -> roundMaybe n
  9. Nothing -> putStrLn "Those weren't numbers!"
  10. foldMaybeNum :: (Num a, Eq a) => [Maybe a] -> Maybe a
  11. foldMaybeNum x = foldr (\a b -> (+) <$> a <*> b) (Just 0) x
  12. -- Decide whether to print the double as an int, or a double
  13. roundMaybe :: Double -> IO ()
  14. roundMaybe n =
  15. if n == fromInteger (round n) then
  16. (putStrLn . show) (round n :: Integer)
  17. else (putStrLn . show) n