content: -- #hide
  module Data.Time.Calendar.Private where
  
  import Data.Fixed
  
  type NumericPadOption = Maybe Char
  
  pad1 :: NumericPadOption -> String -> String
  pad1 (Just c) s = c:s
  pad1 _ s = s
  
  padN :: Int -> Char -> String -> String
  padN i _ s | i <= 0 = s
  padN i c s = (replicate i c) ++ s
  
  show2Fixed :: NumericPadOption -> Pico -> String
  show2Fixed opt x | x < 10 = pad1 opt (showFixed True x)
  show2Fixed _ x = showFixed True x
  
  showPaddedMin :: (Num t,Ord t,Show t) => Int -> NumericPadOption -> t -> String
  showPaddedMin _ Nothing i = show i
  showPaddedMin pl opt i | i < 0 = '-':(showPaddedMin pl opt (negate i))
  showPaddedMin pl (Just c) i =
    let s = show i in 
      padN (pl - (length s)) c s
  
  show2 :: (Num t,Ord t,Show t) => NumericPadOption -> t -> String
  show2 = showPaddedMin 2
  
  show3 :: (Num t,Ord t,Show t) => NumericPadOption -> t -> String
  show3 = showPaddedMin 3
  
  show4 :: (Num t,Ord t,Show t) => NumericPadOption -> t -> String
  show4 = showPaddedMin 4
  
  mod100 :: (Integral i) => i -> i
  mod100 x = mod x 100
  
  div100 :: (Integral i) => i -> i
  div100 x = div x 100
  
  clip :: (Ord t) => t -> t -> t -> t
  clip a _ x | x < a = a
  clip _ b x | x > b = b
  clip _ _ x = x
  
  clipValid :: (Ord t) => t -> t -> t -> Maybe t
  clipValid a _ x | x < a = Nothing
  clipValid _ b x | x > b = Nothing
  clipValid _ _ x = Just x
  