Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module SemVer(
- makeVersion,
- incrementMajor,
- incrementMinor,
- incrementPatch,
- IncludingNegativeVersion,
- ) where
- import Text.Printf
- import Data.Typeable
- import Control.Exception
- import Data.List
- newtype VersionNumber = VersionNumber Integer deriving Eq
- instance Show VersionNumber where
- show (VersionNumber a) = show a
- increment (VersionNumber a) = VersionNumber $ a + 1
- zero = VersionNumber 0
- data Version = Version {
- major :: VersionNumber,
- minor :: VersionNumber,
- patch :: VersionNumber
- } deriving(Eq)
- instance Show Version where
- show (Version ma mi p) = intercalate "." $ show <$> [ma, mi, p]
- data IncludingNegativeVersion = IncludingNegativeVersion deriving Typeable
- instance Show IncludingNegativeVersion where
- show IncludingNegativeVersion = "バージョン番号に負の数が含まれています。"
- instance Exception IncludingNegativeVersion
- makeVersion :: Integer -> Integer -> Integer -> Version
- makeVersion major minor patch = if allNonNegative then result else throw IncludingNegativeVersion
- where
- allNonNegative = major >= 0 && minor >= 0 && patch >= 0
- result = Version {
- major = VersionNumber major,
- minor = VersionNumber minor,
- patch = VersionNumber patch
- }
- incrementPatch :: Version -> Version
- incrementPatch v = Version {
- major = major v,
- minor = minor v,
- patch = increment $ patch v
- }
- incrementMinor :: Version -> Version
- incrementMinor v = Version {
- major = major v,
- minor = increment $ minor v,
- patch = zero
- }
- incrementMajor :: Version -> Version
- incrementMajor v = Version {
- major = increment $ major v,
- minor = zero,
- patch = zero
- }
Add Comment
Please, Sign In to add comment