{-# OPTIONS_GHC -Wall #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} module Data.SemanticVersion.PreReleaseIdentifiers where import Control.Lens import Data.List.NonEmpty import Data.SemanticVersion.PreReleaseIdentifier import Text.Parser.Char import Text.Parser.Combinators -- $setup -- >>> import Text.Parsec(parse) -- >>> import Data.Either(isLeft) -- <dot-separated pre-release identifiers> ::= <pre-release identifier> -- | <pre-release identifier> "." <dot-separated pre-release identifiers> newtype PreReleaseIdentifiers = PreReleaseIdentifiers (NonEmpty PreReleaseIdentifier) deriving (PreReleaseIdentifiers -> PreReleaseIdentifiers -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: PreReleaseIdentifiers -> PreReleaseIdentifiers -> Bool $c/= :: PreReleaseIdentifiers -> PreReleaseIdentifiers -> Bool == :: PreReleaseIdentifiers -> PreReleaseIdentifiers -> Bool $c== :: PreReleaseIdentifiers -> PreReleaseIdentifiers -> Bool Eq, Int -> PreReleaseIdentifiers -> ShowS [PreReleaseIdentifiers] -> ShowS PreReleaseIdentifiers -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [PreReleaseIdentifiers] -> ShowS $cshowList :: [PreReleaseIdentifiers] -> ShowS show :: PreReleaseIdentifiers -> String $cshow :: PreReleaseIdentifiers -> String showsPrec :: Int -> PreReleaseIdentifiers -> ShowS $cshowsPrec :: Int -> PreReleaseIdentifiers -> ShowS Show) class HasPreReleaseIdentifiers a where preReleaseIdentifiers :: Lens' a PreReleaseIdentifiers instance HasPreReleaseIdentifiers PreReleaseIdentifiers where preReleaseIdentifiers :: Lens' PreReleaseIdentifiers PreReleaseIdentifiers preReleaseIdentifiers = forall a. a -> a id class AsPreReleaseIdentifiers a where _PreReleaseIdentifiers :: Prism' a PreReleaseIdentifiers instance AsPreReleaseIdentifiers PreReleaseIdentifiers where _PreReleaseIdentifiers :: Prism' PreReleaseIdentifiers PreReleaseIdentifiers _PreReleaseIdentifiers = forall a. a -> a id instance PreReleaseIdentifiers ~ t => Rewrapped PreReleaseIdentifiers t instance Wrapped PreReleaseIdentifiers where type Unwrapped PreReleaseIdentifiers = NonEmpty PreReleaseIdentifier _Wrapped' :: Iso' PreReleaseIdentifiers (Unwrapped PreReleaseIdentifiers) _Wrapped' = forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b iso (\(PreReleaseIdentifiers NonEmpty PreReleaseIdentifier x) -> NonEmpty PreReleaseIdentifier x) NonEmpty PreReleaseIdentifier -> PreReleaseIdentifiers PreReleaseIdentifiers -- | -- -- >>> parse (parsePreReleaseIdentifiers <* eof) "parsePreReleaseIdentifiers" "A" -- Right (PreReleaseIdentifiers (PreReleaseIdentifierAlphanumeric (AlphanumericIdentifierNonDigit (NonDigitLetter (AlphaUpper Upper_A))) :| [])) -- -- >>> isLeft (parse parsePreReleaseIdentifiers "parsePreReleaseIdentifiers" "") -- True -- -- >>> parse (parsePreReleaseIdentifiers <* eof) "parsePreReleaseIdentifiers" "Abc-123--XYZ" -- Right (PreReleaseIdentifiers (PreReleaseIdentifierAlphanumeric (AlphanumericIdentifierNonDigits (NonDigitLetter (AlphaUpper Upper_A)) (IdentifierCharacters (IdentifierCharacterNonDigit (NonDigitLetter (AlphaLower Lower_b)) :| [IdentifierCharacterNonDigit (NonDigitLetter (AlphaLower Lower_c)),IdentifierCharacterNonDigit NonDigitHyphen,IdentifierCharacterDigit DecDigit1,IdentifierCharacterDigit DecDigit2,IdentifierCharacterDigit DecDigit3,IdentifierCharacterNonDigit NonDigitHyphen,IdentifierCharacterNonDigit NonDigitHyphen,IdentifierCharacterNonDigit (NonDigitLetter (AlphaUpper Upper_X)),IdentifierCharacterNonDigit (NonDigitLetter (AlphaUpper Upper_Y)),IdentifierCharacterNonDigit (NonDigitLetter (AlphaUpper Upper_Z))]))) :| [])) -- -- >>> isLeft (parse parsePreReleaseIdentifiers "parsePreReleaseIdentifiers" "+") -- True -- -- >>> parse (parsePreReleaseIdentifiers <* eof) "parsePreReleaseIdentifiers" "Abc-123--XYZ.456.abc" -- Right (PreReleaseIdentifiers (PreReleaseIdentifierAlphanumeric (AlphanumericIdentifierNonDigits (NonDigitLetter (AlphaUpper Upper_A)) (IdentifierCharacters (IdentifierCharacterNonDigit (NonDigitLetter (AlphaLower Lower_b)) :| [IdentifierCharacterNonDigit (NonDigitLetter (AlphaLower Lower_c)),IdentifierCharacterNonDigit NonDigitHyphen,IdentifierCharacterDigit DecDigit1,IdentifierCharacterDigit DecDigit2,IdentifierCharacterDigit DecDigit3,IdentifierCharacterNonDigit NonDigitHyphen,IdentifierCharacterNonDigit NonDigitHyphen,IdentifierCharacterNonDigit (NonDigitLetter (AlphaUpper Upper_X)),IdentifierCharacterNonDigit (NonDigitLetter (AlphaUpper Upper_Y)),IdentifierCharacterNonDigit (NonDigitLetter (AlphaUpper Upper_Z))]))) :| [PreReleaseIdentifierNumeric (NumericIdentifierDigits DecDigitNoZero4 [DecDigit5,DecDigit6]),PreReleaseIdentifierAlphanumeric (AlphanumericIdentifierNonDigits (NonDigitLetter (AlphaLower Lower_a)) (IdentifierCharacters (IdentifierCharacterNonDigit (NonDigitLetter (AlphaLower Lower_b)) :| [IdentifierCharacterNonDigit (NonDigitLetter (AlphaLower Lower_c))])))])) -- -- >>> parse (parsePreReleaseIdentifiers <* eof) "parsePreReleaseIdentifiers" "Abc-123--XYZ.Abc-123--XYZ.Abc-123--XYZ" -- Right (PreReleaseIdentifiers (PreReleaseIdentifierAlphanumeric (AlphanumericIdentifierNonDigits (NonDigitLetter (AlphaUpper Upper_A)) (IdentifierCharacters (IdentifierCharacterNonDigit (NonDigitLetter (AlphaLower Lower_b)) :| [IdentifierCharacterNonDigit (NonDigitLetter (AlphaLower Lower_c)),IdentifierCharacterNonDigit NonDigitHyphen,IdentifierCharacterDigit DecDigit1,IdentifierCharacterDigit DecDigit2,IdentifierCharacterDigit DecDigit3,IdentifierCharacterNonDigit NonDigitHyphen,IdentifierCharacterNonDigit NonDigitHyphen,IdentifierCharacterNonDigit (NonDigitLetter (AlphaUpper Upper_X)),IdentifierCharacterNonDigit (NonDigitLetter (AlphaUpper Upper_Y)),IdentifierCharacterNonDigit (NonDigitLetter (AlphaUpper Upper_Z))]))) :| [PreReleaseIdentifierAlphanumeric (AlphanumericIdentifierNonDigits (NonDigitLetter (AlphaUpper Upper_A)) (IdentifierCharacters (IdentifierCharacterNonDigit (NonDigitLetter (AlphaLower Lower_b)) :| [IdentifierCharacterNonDigit (NonDigitLetter (AlphaLower Lower_c)),IdentifierCharacterNonDigit NonDigitHyphen,IdentifierCharacterDigit DecDigit1,IdentifierCharacterDigit DecDigit2,IdentifierCharacterDigit DecDigit3,IdentifierCharacterNonDigit NonDigitHyphen,IdentifierCharacterNonDigit NonDigitHyphen,IdentifierCharacterNonDigit (NonDigitLetter (AlphaUpper Upper_X)),IdentifierCharacterNonDigit (NonDigitLetter (AlphaUpper Upper_Y)),IdentifierCharacterNonDigit (NonDigitLetter (AlphaUpper Upper_Z))]))),PreReleaseIdentifierAlphanumeric (AlphanumericIdentifierNonDigits (NonDigitLetter (AlphaUpper Upper_A)) (IdentifierCharacters (IdentifierCharacterNonDigit (NonDigitLetter (AlphaLower Lower_b)) :| [IdentifierCharacterNonDigit (NonDigitLetter (AlphaLower Lower_c)),IdentifierCharacterNonDigit NonDigitHyphen,IdentifierCharacterDigit DecDigit1,IdentifierCharacterDigit DecDigit2,IdentifierCharacterDigit DecDigit3,IdentifierCharacterNonDigit NonDigitHyphen,IdentifierCharacterNonDigit NonDigitHyphen,IdentifierCharacterNonDigit (NonDigitLetter (AlphaUpper Upper_X)),IdentifierCharacterNonDigit (NonDigitLetter (AlphaUpper Upper_Y)),IdentifierCharacterNonDigit (NonDigitLetter (AlphaUpper Upper_Z))])))])) parsePreReleaseIdentifiers :: CharParsing p => p PreReleaseIdentifiers parsePreReleaseIdentifiers :: forall (p :: * -> *). CharParsing p => p PreReleaseIdentifiers parsePreReleaseIdentifiers = NonEmpty PreReleaseIdentifier -> PreReleaseIdentifiers PreReleaseIdentifiers forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> forall (m :: * -> *) a sep. Alternative m => m a -> m sep -> m (NonEmpty a) sepByNonEmpty forall (p :: * -> *). CharParsing p => p PreReleaseIdentifier parsePreReleaseIdentifier (forall (m :: * -> *). CharParsing m => Char -> m Char char Char '.')