package-version-0.4.1: A package for retrieving a package's version number.
Safe HaskellNone
LanguageHaskell2010

Data.Version.Package.Internal

Description

Internal module.

Since: 0.1.0.0

Synopsis

Documentation

newtype PackageVersion Source #

PackageVersion represents PVP version numbers. It is similar to Data.Version's Version except:

  1. PackageVersion has no versionTags.
  2. We enforce PVP invariants i.e.

    • Tags must have at least one component.
    • All components >= 0.
  3. Trailing zeroes are ignored in Eq, Ord, Semigroup, and Monoid.

That is, we declare an equivalence class up to trailing zeroes. In particular, the Monoid identity is

[0] = { [0], [0,0], [0,0,0], ... } 

and its Semigroup instance takes the greatest version (based on Ord).

Note: Because we export the underlying list in various ways, (e.g. show), Eq's extensionality law,

x == y ==> f x == f y 

can be broken. Take care that you do not rely on this law if you are using its underlying NonEmpty Word (or String) representation.

Examples

Expand
>>> MkPackageVersion [0,0,0,0] == MkPackageVersion [0,0,0] True 
>>> MkPackageVersion [4,0,0] > MkPackageVersion [1,2,0,0] True 
>>> MkPackageVersion [5,6,0] <> MkPackageVersion [9,0,0] MkPackageVersion {unPackageVersion = 9 :| [0,0]} 
>>> MkPackageVersion [0,9] <> MkPackageVersion [0,9,0,0] MkPackageVersion {unPackageVersion = 0 :| [9]} 

Since: 0.1.0.0

Constructors

MkPackageVersion 

Fields

Instances

Instances details
Monoid PackageVersion Source #

Since: 0.1.0.0

Instance details

Defined in Data.Version.Package.Internal

Semigroup PackageVersion Source #

Since: 0.1.0.0

Instance details

Defined in Data.Version.Package.Internal

Generic PackageVersion Source # 
Instance details

Defined in Data.Version.Package.Internal

Associated Types

type Rep PackageVersion

Since: package-version-0.2

Instance details

Defined in Data.Version.Package.Internal

type Rep PackageVersion = D1 ('MetaData "PackageVersion" "Data.Version.Package.Internal" "package-version-0.4.1-sK2rTwuAqKB53YXat6AW4" 'True) (C1 ('MetaCons "MkPackageVersion" 'PrefixI 'True) (S1 ('MetaSel ('Just "unPackageVersion") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (NonEmpty Word))))
Show PackageVersion Source #

Since: 0.1.0.0

Instance details

Defined in Data.Version.Package.Internal

NFData PackageVersion Source #

Since: 0.1.0.0

Instance details

Defined in Data.Version.Package.Internal

Methods

rnf :: PackageVersion -> () #

Eq PackageVersion Source #

Since: 0.1.0.0

Instance details

Defined in Data.Version.Package.Internal

Ord PackageVersion Source #

Since: 0.1.0.0

Instance details

Defined in Data.Version.Package.Internal

Lift PackageVersion Source #

Since: 0.1.0.0

Instance details

Defined in Data.Version.Package.Internal

Methods

lift :: Quote m => PackageVersion -> m Exp #

liftTyped :: forall (m :: Type -> Type). Quote m => PackageVersion -> Code m PackageVersion #

type Rep PackageVersion Source #

Since: 0.2

Instance details

Defined in Data.Version.Package.Internal

type Rep PackageVersion = D1 ('MetaData "PackageVersion" "Data.Version.Package.Internal" "package-version-0.4.1-sK2rTwuAqKB53YXat6AW4" 'True) (C1 ('MetaCons "MkPackageVersion" 'PrefixI 'True) (S1 ('MetaSel ('Just "unPackageVersion") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (NonEmpty Word))))

data ValidationError Source #

Errors that can occur when validating PVP version numbers.

Since: 0.1.0.0

Constructors

ValidationErrorEmpty

PVP version number cannot be empty.

Since: 0.3

ValidationErrorNegative Int

PVP version numbers cannot be negative.

Since: 0.2

Instances

Instances details
Exception ValidationError Source #

Since: 0.1.0.0

Instance details

Defined in Data.Version.Package.Internal

Generic ValidationError Source # 
Instance details

Defined in Data.Version.Package.Internal

Associated Types

type Rep ValidationError

Since: package-version-0.1.0.0

Instance details

Defined in Data.Version.Package.Internal

type Rep ValidationError = D1 ('MetaData "ValidationError" "Data.Version.Package.Internal" "package-version-0.4.1-sK2rTwuAqKB53YXat6AW4" 'False) (C1 ('MetaCons "ValidationErrorEmpty" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ValidationErrorNegative" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int)))
Show ValidationError Source #

Since: 0.1.0.0

Instance details

Defined in Data.Version.Package.Internal

NFData ValidationError Source #

Since: 0.2

Instance details

Defined in Data.Version.Package.Internal

Methods

rnf :: ValidationError -> () #

Eq ValidationError Source #

Since: 0.1.0.0

Instance details

Defined in Data.Version.Package.Internal

type Rep ValidationError Source #

Since: 0.1.0.0

Instance details

Defined in Data.Version.Package.Internal

type Rep ValidationError = D1 ('MetaData "ValidationError" "Data.Version.Package.Internal" "package-version-0.4.1-sK2rTwuAqKB53YXat6AW4" 'False) (C1 ('MetaCons "ValidationErrorEmpty" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ValidationErrorNegative" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int)))

data ReadStringError Source #

Errors that can occur when reading PVP version numbers.

Since: 0.1.0.0

Constructors

ReadStringErrorParse String

Error when parsing a string.

Since: 0.2

ReadStringErrorValidate ValidationError

Validation error.

Since: 0.2

Instances

Instances details
Exception ReadStringError Source #

Since: 0.1.0.0

Instance details

Defined in Data.Version.Package.Internal

Generic ReadStringError Source # 
Instance details

Defined in Data.Version.Package.Internal

Associated Types

type Rep ReadStringError

Since: package-version-0.1.0.0

Instance details

Defined in Data.Version.Package.Internal

type Rep ReadStringError = D1 ('MetaData "ReadStringError" "Data.Version.Package.Internal" "package-version-0.4.1-sK2rTwuAqKB53YXat6AW4" 'False) (C1 ('MetaCons "ReadStringErrorParse" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String)) :+: C1 ('MetaCons "ReadStringErrorValidate" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ValidationError)))
Show ReadStringError Source #

Since: 0.1.0.0

Instance details

Defined in Data.Version.Package.Internal

NFData ReadStringError Source #

Since: 0.2

Instance details

Defined in Data.Version.Package.Internal

Methods

rnf :: ReadStringError -> () #

Eq ReadStringError Source #

Since: 0.1.0.0

Instance details

Defined in Data.Version.Package.Internal

type Rep ReadStringError Source #

Since: 0.1.0.0

Instance details

Defined in Data.Version.Package.Internal

type Rep ReadStringError = D1 ('MetaData "ReadStringError" "Data.Version.Package.Internal" "package-version-0.4.1-sK2rTwuAqKB53YXat6AW4" 'False) (C1 ('MetaCons "ReadStringErrorParse" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String)) :+: C1 ('MetaCons "ReadStringErrorValidate" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ValidationError)))

data ReadFileError Source #

Errors that can occur when reading PVP version numbers from a file.

Since: 0.1.0.0

Constructors

ReadFileErrorGeneral String

General error when reading a file.

Since: 0.2

ReadFileErrorVersionNotFound FilePath

Error for missing version.

Since: 0.2

ReadFileErrorReadString ReadStringError

Read/Validation error.

Since: 0.2

Instances

Instances details
Exception ReadFileError Source #

Since: 0.1.0.0

Instance details

Defined in Data.Version.Package.Internal

Generic ReadFileError Source # 
Instance details

Defined in Data.Version.Package.Internal

Associated Types

type Rep ReadFileError

Since: package-version-0.1.0.0

Instance details

Defined in Data.Version.Package.Internal

type Rep ReadFileError = D1 ('MetaData "ReadFileError" "Data.Version.Package.Internal" "package-version-0.4.1-sK2rTwuAqKB53YXat6AW4" 'False) (C1 ('MetaCons "ReadFileErrorGeneral" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String)) :+: (C1 ('MetaCons "ReadFileErrorVersionNotFound" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 FilePath)) :+: C1 ('MetaCons "ReadFileErrorReadString" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ReadStringError))))
Show ReadFileError Source #

Since: 0.1.0.0

Instance details

Defined in Data.Version.Package.Internal

NFData ReadFileError Source #

Since: 0.2

Instance details

Defined in Data.Version.Package.Internal

Methods

rnf :: ReadFileError -> () #

Eq ReadFileError Source #

Since: 0.1.0.0

Instance details

Defined in Data.Version.Package.Internal

type Rep ReadFileError Source #

Since: 0.1.0.0

Instance details

Defined in Data.Version.Package.Internal

type Rep ReadFileError = D1 ('MetaData "ReadFileError" "Data.Version.Package.Internal" "package-version-0.4.1-sK2rTwuAqKB53YXat6AW4" 'False) (C1 ('MetaCons "ReadFileErrorGeneral" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String)) :+: (C1 ('MetaCons "ReadFileErrorVersionNotFound" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 FilePath)) :+: C1 ('MetaCons "ReadFileErrorReadString" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ReadStringError))))

mkPackageVersion :: [Int] -> Either ValidationError PackageVersion Source #

Constructs a PackageVersion from an Int list. The list must be non-empty to match PVP's minimal A. Furthermore, all digits must be non-negative.

Examples

Expand
>>> mkPackageVersion [1,2] Right (MkPackageVersion {unPackageVersion = 1 :| [2]}) 
>>> mkPackageVersion [2,87,7,1] Right (MkPackageVersion {unPackageVersion = 2 :| [87,7,1]}) 
>>> mkPackageVersion [1,2,-3,-4,5] Left (ValidationErrorNegative (-3)) 
>>> mkPackageVersion [3] Right (MkPackageVersion {unPackageVersion = 3 :| []}) 
>>> mkPackageVersion [] Left ValidationErrorEmpty 

Since: 0.1.0.0

toText :: PackageVersion -> Text Source #

Displays PackageVersion in Text format.

Examples

Expand
>>> toText (MkPackageVersion [2,7,10,0]) "2.7.10.0" 

Since: 0.1.0.0