semantic-version-0.0.1: src/Data/SemanticVersion/BuildIdentifiers.hs
{-# OPTIONS_GHC -Wall #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
module Data.SemanticVersion.BuildIdentifiers where
import Control.Lens
import Data.List.NonEmpty
import Data.SemanticVersion.BuildIdentifier
import Text.Parser.Char
import Text.Parser.Combinators
-- $setup
-- >>> import Text.Parsec(parse)
-- >>> import Data.Either(isLeft)
-- <dot-separated build identifiers> ::= <build identifier>
-- | <build identifier> "." <dot-separated build identifiers>
newtype BuildIdentifiers =
BuildIdentifiers (NonEmpty BuildIdentifier)
deriving (Eq, Show)
class HasBuildIdentifiers a where
buildIdentifiers ::
Lens' a BuildIdentifiers
instance HasBuildIdentifiers BuildIdentifiers where
buildIdentifiers =
id
class AsBuildIdentifiers a where
_BuildIdentifiers ::
Prism' a BuildIdentifiers
instance AsBuildIdentifiers BuildIdentifiers where
_BuildIdentifiers =
id
instance BuildIdentifiers ~ t => Rewrapped BuildIdentifiers t
instance Wrapped BuildIdentifiers where
type Unwrapped BuildIdentifiers = NonEmpty BuildIdentifier
_Wrapped' =
iso
(\(BuildIdentifiers x) -> x)
BuildIdentifiers
parseBuildIdentifiers ::
CharParsing p =>
p BuildIdentifiers
parseBuildIdentifiers =
BuildIdentifiers <$> sepByNonEmpty parseBuildIdentifier (char '.')