packages feed

cabal-cache-1.1.0.2: src/HaskellWorks/CabalCache/Options.hs

module HaskellWorks.CabalCache.Options
  ( readOrFromTextOption,
  ) where

import Amazonka.Data.Text    (FromText (..), fromText)
import HaskellWorks.Prelude
import Options.Applicative   (Parser, Mod, OptionFields)

import qualified Data.Text            as T
import qualified Options.Applicative  as OA

orElse :: Either e a -> Either e a -> Either e a
orElse a b =
  either (const b) Right a

readOrFromTextOption :: (Read a, FromText a) => Mod OptionFields a -> Parser a
readOrFromTextOption =
  let fromStr s = readEither s `orElse` fromText (T.pack s)
  in OA.option $ OA.eitherReader fromStr