packages feed

moonlight-delta-0.1.0.0: src-epoch/Moonlight/Delta/Epoch/Internal/Version.hs

-- | The unbounded epoch version algebra.
module Moonlight.Delta.Epoch.Internal.Version
  ( Version,
    initialVersion,
    nextVersion,
    versionKey,
    versionFromKey,
  )
where

import Data.Kind (Type)
import Moonlight.Core (PartialOrder (..), totalOrderLeq)
import Prelude (Eq, Integer, Num ((+)), Ord, Show)

type Version :: Type
newtype Version = Version Integer
  deriving stock (Eq, Ord, Show)

initialVersion :: Version
initialVersion =
  Version 0

nextVersion :: Version -> Version
nextVersion (Version versionValue) =
  Version (versionValue + 1)

versionKey :: Version -> Integer
versionKey (Version versionValue) =
  versionValue

versionFromKey :: Integer -> Version
versionFromKey =
  Version

instance PartialOrder Version where
  leq =
    totalOrderLeq