roller-0.1.7: Roller/Core.hs
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