packages feed

hledger-flow-0.14.2.0: app/Parsing.hs

{-# LANGUAGE PartialTypeSignatures #-}

module Parsing (
    parseStartYear
  ) where

import Hledger.Flow.DateTime
import System.Exit (die)
import Text.Read (readMaybe)

parseStartYear :: Maybe String -> IO (Maybe Integer)
parseStartYear y = case y of
  Nothing -> return Nothing
  Just "current"  -> Just <$> currentYear
  Just s -> Just <$> parseInt s "Unable to parse year"

parseInt :: String -> String -> IO Integer
parseInt s errPrefix = case safeParseInt s errPrefix of
  Right i -> return i
  Left err -> die err

safeParseInt :: String -> String -> Either String Integer
safeParseInt s errPrefix = case (readMaybe s :: Maybe Integer) of
  Nothing -> Left $ errPrefix ++ " " ++ s
  Just i  -> Right i