-- |
-- Module      : Data.Hourglass.Utils
-- License     : BSD-style
-- Maintainer  : Vincent Hanquez <vincent@snarc.org>
-- Stability   : experimental
-- Portability : unknown
--
-- some padding / formatting functions
--
module Data.Hourglass.Utils where

-- | pad a number to 2 digits
pad2 :: (Show a, Ord a, Num a, Integral a) => a -> String
pad2 v | v >= 100   = pad2 (v `mod` 100)
       | v >= 10    = show v
       | otherwise  = '0' : show v

-- | pad a number to 4 digits
pad4 :: (Show a, Ord a, Num a, Integral a) => a -> String
pad4 v | v >= 1000  = show v
       | v >= 100   = '0' : show v
       | v >= 10    = '0':'0' : show v
       | otherwise  = '0':'0':'0': show v

-- | Pad a number to at least N digits.
--
-- if the number is greater, no truncation happens.
padN :: (Show a, Ord a, Num a, Integral a) => Int -> a -> String
padN n v
    | vlen >= n = vs
    | otherwise = replicate (n - vlen) '0' ++ vs
  where vs = show v
        vlen = length vs
