{-# LANGUAGE OverloadedStrings #-} module Turtle.Options.Percentage ( optPercentage , defPercentageHelp , percentage ) where import Turtle (ArgName, ShortName, HelpMessage, opt) import Data.Optional (Optional) import qualified Turtle import qualified Data.Text as Text import Control.Applicative ((<$>)) import Text.Parsec import Turtle.Options.Parsers (Parser, percent, float) defPercentageHelp :: Optional HelpMessage defPercentageHelp = "Percentage: can be a positive or negative percentage (-43%), represented with a float." percentage :: Parser Float percentage = try percent readPercentage :: String -> Maybe Float readPercentage str = case (parse percentage "Percentage (Float)" str) of Left err -> error $ "Error parsing percentage: " ++ (show err) Right s -> Just s optPercentage :: ArgName -> ShortName -> Optional HelpMessage -> Turtle.Parser Float optPercentage = opt (readPercentage . Text.unpack)