-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Basic versioning library.
--
@package old-version
@version 1.0.1
-- | A general library for representation and manipulation of versions.
--
-- Versioning schemes are many and varied, so the version representation
-- provided by this library is intended to be a compromise between
-- complete generality, where almost no common functionality could
-- reasonably be provided, and fixing a particular versioning scheme,
-- which would probably be too restrictive.
--
-- So the approach taken here is to provide a representation which
-- subsumes many of the versioning schemes commonly in use, and we
-- provide implementations of Eq, Ord, Read, and
-- Show, which will be appropriate for some applications, but not
-- all.
--
-- This version of the module is forked from base, preserving the
-- versionTags field of the Version type that will be
-- removed in GHC 7.12 (cf.
-- https://ghc.haskell.org/trac/ghc/ticket/2496).
module Data.Old.Version
-- | A Version represents the version of a software entity.
--
-- An instance of Eq is provided, which implements exact equality
-- by first comparing the versionBranch fields, followed by
-- comparing the versionTags fields.
--
-- An instance of Ord is also provided, which gives lexicographic
-- ordering on the versionBranch fields (i.e. 2.1 > 2.0, 1.2.3
-- > 1.2.2, etc.). This is expected to be sufficient for many uses,
-- but note that you may need to use a more specific ordering for your
-- versioning scheme. For example, some versioning schemes may include
-- pre-releases which have tags "pre1", "pre2", and so
-- on, and these would need to be taken into account when determining
-- ordering. In some cases, date ordering may be more appropriate, so the
-- application would have to look for date tags in the
-- versionTags field and compare those. The bottom line is, don't
-- always assume that compare and other Ord operations are
-- the right thing for every Version.
--
-- Similarly, concrete representations of versions may differ. One
-- possible concrete representation is provided by the Show and
-- Read instances, but depending on the application a different
-- concrete representation may be more appropriate.
data Version
Version :: [Int] -> [String] -> Version
-- | The numeric branch for this version. This reflects the fact that most
-- software versions are tree-structured; there is a main trunk which is
-- tagged with versions at various points (1,2,3...), and the first
-- branch off the trunk after version 3 is 3.1, the second branch off the
-- trunk after version 3 is 3.2, and so on. The tree can be branched
-- arbitrarily, just by adding more digits.
--
-- We represent the branch as a list of Int, so version 3.2.1
-- becomes [3,2,1]. Lexicographic ordering (i.e. the default instance of
-- Ord for [Int]) gives the natural ordering of branches.
versionBranch :: Version -> [Int]
-- | A version can be tagged with an arbitrary list of strings. The
-- interpretation of the list of tags is entirely dependent on the entity
-- that this version applies to.
versionTags :: Version -> [String]
instance [safe] Typeable Version
instance [safe] Eq Version
instance [safe] Read Version
instance [safe] Show Version
instance [safe] Ord Version