{-# LANGUAGE CPP #-} {-# LANGUAGE TemplateHaskell #-} {-# OPTIONS_GHC -fno-warn-orphans #-} {-| Module: Text.Show.Text.Data.Version Copyright: (C) 2014-2015 Ryan Scott License: BSD-style (see the file LICENSE) Maintainer: Ryan Scott Stability: Experimental Portability: GHC Monomorphic 'Show' functions for 'Version'. /Since: 0.3/ -} module Text.Show.Text.Data.Version ( showbVersionPrec , showbVersionConcrete ) where import Data.List (intersperse) #if !(MIN_VERSION_base(4,8,0)) import Data.Monoid (mconcat) #endif import Data.Text.Lazy.Builder (Builder, fromString) import Data.Version (Version(..)) import Text.Show.Text.Classes (showb, showbPrec) import Text.Show.Text.Data.Char () import Text.Show.Text.Data.Integral () import Text.Show.Text.Data.List () import Text.Show.Text.TH.Internal (deriveShowPragmas, defaultInlineShowbPrec) import Text.Show.Text.Utils ((<>), s) -- | Convert a 'Version' to a 'Builder' with the given precedence. -- -- /Since: 0.3/ showbVersionPrec :: Int -> Version -> Builder showbVersionPrec = showbPrec {-# INLINE showbVersionPrec #-} -- | Provides one possible concrete representation for 'Version'. For -- a version with 'versionBranch' @= [1,2,3]@ and 'versionTags' -- @= [\"tag1\",\"tag2\"]@, the output will be @1.2.3-tag1-tag2@. -- -- /Since: 0.3/ showbVersionConcrete :: Version -> Builder showbVersionConcrete (Version branch tags) = mconcat (intersperse (s '.') $ map showb branch) <> mconcat (map ((s '-' <>) . fromString) tags) {-# INLINE showbVersionConcrete #-} $(deriveShowPragmas defaultInlineShowbPrec ''Version)