{-# LANGUAGE OverloadedStrings #-} module Data.Version.Natural ( Version(MkVersion, fromVersion) , toText ) where import Data.Kind (Type) import Data.Text (Text) import qualified Data.Text as T (intercalate, pack) import GHC.Generics (Generic) import Numeric.Natural (Natural) type Version :: Type newtype Version = MkVersion { Version -> [Natural] fromVersion :: [Natural] } deriving stock (Version -> Version -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: Version -> Version -> Bool $c/= :: Version -> Version -> Bool == :: Version -> Version -> Bool $c== :: Version -> Version -> Bool Eq, forall x. Rep Version x -> Version forall x. Version -> Rep Version x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cto :: forall x. Rep Version x -> Version $cfrom :: forall x. Version -> Rep Version x Generic, Eq Version Version -> Version -> Bool Version -> Version -> Ordering Version -> Version -> Version forall a. Eq a -> (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a min :: Version -> Version -> Version $cmin :: Version -> Version -> Version max :: Version -> Version -> Version $cmax :: Version -> Version -> Version >= :: Version -> Version -> Bool $c>= :: Version -> Version -> Bool > :: Version -> Version -> Bool $c> :: Version -> Version -> Bool <= :: Version -> Version -> Bool $c<= :: Version -> Version -> Bool < :: Version -> Version -> Bool $c< :: Version -> Version -> Bool compare :: Version -> Version -> Ordering $ccompare :: Version -> Version -> Ordering Ord, Int -> Version -> ShowS [Version] -> ShowS Version -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [Version] -> ShowS $cshowList :: [Version] -> ShowS show :: Version -> String $cshow :: Version -> String showsPrec :: Int -> Version -> ShowS $cshowsPrec :: Int -> Version -> ShowS Show) toText :: Version -> Text toText :: Version -> Text toText = Text -> [Text] -> Text T.intercalate Text "." forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a b. (a -> b) -> [a] -> [b] map (String -> Text T.pack forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a. Show a => a -> String show) forall b c a. (b -> c) -> (a -> b) -> a -> c . Version -> [Natural] fromVersion