{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE FlexibleInstances #-}
module Stack.Types.PackageName
( packageNameArgument
) where
import Stack.Prelude
import qualified Options.Applicative as O
packageNameArgument :: O.Mod O.ArgumentFields PackageName
-> O.Parser PackageName
packageNameArgument :: Mod ArgumentFields PackageName -> Parser PackageName
packageNameArgument =
forall a. ReadM a -> Mod ArgumentFields a -> Parser a
O.argument
(do String
s <- forall s. IsString s => ReadM s
O.str
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either forall a. String -> ReadM a
O.readerError forall (f :: * -> *) a. Applicative f => a -> f a
pure (String -> Either String PackageName
p String
s))
where
p :: String -> Either String PackageName
p String
s =
case String -> Maybe PackageName
parsePackageName String
s of
Just PackageName
x -> forall a b. b -> Either a b
Right PackageName
x
Maybe PackageName
Nothing -> forall a b. a -> Either a b
Left forall a b. (a -> b) -> a -> b
$ [String] -> String
unlines
[ String
"Expected valid package name, but got: " forall a. [a] -> [a] -> [a]
++ String
s
, String
"Package names consist of one or more alphanumeric words separated by hyphens."
, String
"To avoid ambiguity with version numbers, each of these words must contain at least one letter."
]