Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Internal module.
Since: 0.1.0.0
Synopsis
- newtype PackageVersion = MkPackageVersion {}
- data ValidationError
- data ReadStringError
- data ReadFileError
- mkPackageVersion :: [Int] -> Either ValidationError PackageVersion
- toText :: PackageVersion -> Text
Documentation
newtype PackageVersion Source #
PackageVersion
represents PVP version
numbers. It is similar to Data.Version's Version
except:
PackageVersion
has noversionTags
.We enforce PVP invariants i.e.
- Tags must have at least one component.
- All components >= 0.
- Trailing zeroes are ignored in
Eq
,Ord
,Semigroup
, andMonoid
.
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
(or Word
String
) representation.
Examples
>>>
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
MkPackageVersion | |
|
Instances
data ValidationError Source #
Errors that can occur when validating PVP version numbers.
Since: 0.1.0.0
ValidationErrorEmpty | PVP version number cannot be empty. Since: 0.3 |
ValidationErrorNegative Int | PVP version numbers cannot be negative. Since: 0.2 |
Instances
data ReadStringError Source #
Errors that can occur when reading PVP version numbers.
Since: 0.1.0.0
ReadStringErrorParse String | Error when parsing a string. Since: 0.2 |
ReadStringErrorValidate ValidationError | Validation error. Since: 0.2 |
Instances
data ReadFileError Source #
Errors that can occur when reading PVP version numbers from a file.
Since: 0.1.0.0
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
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
>>>
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
>>>
toText (MkPackageVersion [2,7,10,0])
"2.7.10.0"
Since: 0.1.0.0