module Roller.Core (main) where import Roller.Types import Roller.Parse import Roller.CLI import Control.Applicative import Control.Monad (join, replicateM, replicateM_) import System.Environment (getArgs) import Data.Word rollEm :: CLI (IO ()) rollEm verbose n args = maybe parseFail rollMany (parse input) where input = concat args rollMany = replicateM_ n . rollOnce rollOnce exp = summary <$> (rolls exp) >>= putStrLn summary = if verbose then showVerbose else show . sum showVerbose = (\x -> (show . sum $ x) ++ " " ++ show x) parseFail = putStrLn $ "Could not parse \"" ++ input ++ "\" as dice expression!" main :: IO () main = join . withOpts $ rollEm