packages feed

ansiform-0.7.8.5: src/Ansiform/Internal/Number.hs

module Ansiform.Internal.Number where

--------------------------------------------------------------------------------
import           Ansiform.Internal.Sample



-- | A non-negative number used for sizes, offsets and counts.
newtype Number = Number Int
                    deriving (Eq, Ord, Show)


-- | Number of terminal columns.
type Width = Number

-- | Space between content and the edge of a background.
type Padding = Number

-- | Indentation from the left edge.
type Offset = Number


instance Num Number where
    fromInteger n = formNumber $ fromInteger n
    n + m = formNumber $ unn n + unn m
    n - m = formNumber $ unn n - unn m
    n * m = formNumber $ unn n * unn m
    negate _ = 0
    abs n = n
    signum n | n <= 0 = 0 | otherwise = 1 

instance Sample Number where
    sampleShow _ (Number n) = show n


formNumber :: Int -> Number
formNumber n | n <= 0 = Number 0 | otherwise = Number n

formNum :: Int -> Number
formNum = formNumber

unNumber :: Number -> Int
unNumber (Number n) = n

unn :: Number -> Int
unn = unNumber