module HaskellWorks.CabalCache.Options
  ( readOrFromTextOption
  ) where

import Network.AWS.Data.Text (FromText (..), fromText)
import Options.Applicative   hiding (columns)
import Text.Read             (readEither)

import qualified Data.Text as T

readOrFromTextOption :: (Read a, FromText a) => Mod OptionFields a -> Parser a
readOrFromTextOption :: Mod OptionFields a -> Parser a
readOrFromTextOption =
  let fromStr :: String -> Either String a
fromStr String
s = String -> Either String a
forall a. Read a => String -> Either String a
readEither String
s Either String a -> Either String a -> Either String a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Either String a
forall a. FromText a => Text -> Either String a
fromText (String -> Text
T.pack String
s)
  in ReadM a -> Mod OptionFields a -> Parser a
forall a. ReadM a -> Mod OptionFields a -> Parser a
option (ReadM a -> Mod OptionFields a -> Parser a)
-> ReadM a -> Mod OptionFields a -> Parser a
forall a b. (a -> b) -> a -> b
$ (String -> Either String a) -> ReadM a
forall a. (String -> Either String a) -> ReadM a
eitherReader String -> Either String a
forall a. (Read a, FromText a) => String -> Either String a
fromStr