stack-3.7.1: src/Stack/Types/PackageName.hs
{-# LANGUAGE NoImplicitPrelude #-}
{-|
Module : Stack.Types.PackageName
Description : Names for packages.
License : BSD-3-Clause
Names for packages.
-}
module Stack.Types.PackageName
( packageNameArgument
) where
import qualified Options.Applicative as O
import Stack.Prelude
-- | An argument which accepts a template name of the format
-- @foo.hsfiles@.
packageNameArgument ::
O.Mod O.ArgumentFields PackageName
-> O.Parser PackageName
packageNameArgument =
O.argument
(do s <- O.str
either O.readerError pure (p s))
where
p s =
case parsePackageName s of
Just x -> Right x
Nothing -> Left $ unlines
[ "Expected a package name acceptable to Cabal, but got: " ++ s ++ "\n"
, "An acceptable package name comprises an alphanumeric 'word'; or \
\two or more"
, "such words, with the words separated by a hyphen/minus character ('-'). A \
\word"
, "cannot be comprised only of the characters '0' to '9'. \n"
, "An alphanumeric character is one in one of the Unicode Letter \
\categories"
, "(Lu (uppercase), Ll (lowercase), Lt (titlecase), Lm (modifier), or \
\Lo (other))"
, "or Number categories (Nd (decimal), Nl (letter), or No (other))."
]