    {-# LANGUAGE DeriveDataTypeable #-}
    {-# LANGUAGE GeneralizedNewtypeDeriving #-}
    -- |This module defines types for many useful time periods, as well as
    -- mechanisms for converting between them.
    module Data.Time.Units(
             TimeUnit(..)
           , Attosecond
           , Femtosecond
           , Picosecond
           , Nanosecond
           , Microsecond
           , Millisecond
           , Second
           , Minute
           , Hour
           , Day
           , Week
           , Fortnight
           , addTime
           , subTime
           , convertUnit
           , getCPUTimeWithUnit
           )
     where

    import Data.Ix(Ix)
    import Data.Data(Data)
    import Data.List(isPrefixOf)
    import Data.Typeable(Typeable)
    import System.CPUTime

    -- |A generic class that describes all the units of time. We use microseconds
    -- here because that tends to be what GHC (at least) tends to use as its
    -- system-level minimum tick size.
    class TimeUnit a where
      -- |Converts the given unit of time into microseconds, flooring the value
      -- if it comes to a fractional number of microseconds. (In other words:
      -- be careful, you may lose precision!)
      toMicroseconds   :: a -> Integer
      -- |Converts the given number of microseconds into the unit of time, flooring
      -- the value if it comes to a fraction number of the given unit. (In other
      -- words: be careful, you may lose precision!)
      fromMicroseconds :: Integer -> a

    -- |Add two times together to get a useful third time unit. As per usual,
    -- you'll want to make sure that you are careful regarding precision. This
    -- function goes through microseconds as an intermediary form.
    addTime :: (TimeUnit a, TimeUnit b, TimeUnit c) => a -> b -> c
    addTime :: a -> b -> c
    addTime x :: a
    x y :: b
    y = Integer -> c
    forall a. TimeUnit a => Integer -> a
    fromMicroseconds (a -> Integer
    forall a. TimeUnit a => a -> Integer
    toMicroseconds a
    x Integer -> Integer -> Integer
    forall a. Num a => a -> a -> a
    + b -> Integer
    forall a. TimeUnit a => a -> Integer
    toMicroseconds b
    y)

    -- |Subtract the second time from the first, to get a useful third time unit.
    -- As per usual, you'll want to make sure that you are careful regarding
    -- precision. This function goes through microseconds as an intermediary form.
    subTime :: (TimeUnit a, TimeUnit b, TimeUnit c) => a -> b -> c
    subTime :: a -> b -> c
    subTime x :: a
    x y :: b
    y = Integer -> c
    forall a. TimeUnit a => Integer -> a
    fromMicroseconds (a -> Integer
    forall a. TimeUnit a => a -> Integer
    toMicroseconds a
    x Integer -> Integer -> Integer
    forall a. Num a => a -> a -> a
    - b -> Integer
    forall a. TimeUnit a => a -> Integer
    toMicroseconds b
    y)

    -- |Convert one time unit to another. Note that if you move from a smaller
    -- time unit to a larger one, or between two time units smaller than a
    -- microsecond, you will lose precision.
    convertUnit :: (TimeUnit a, TimeUnit b) => a -> b
    convertUnit :: a -> b
    convertUnit = Integer -> b
    forall a. TimeUnit a => Integer -> a
    fromMicroseconds (Integer -> b) -> (a -> Integer) -> a -> b
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . a -> Integer
    forall a. TimeUnit a => a -> Integer
    toMicroseconds

    -- |Get the current CPU time in your favorite units. This is probably not
    -- very useful in itself, but is likely useful for comparison purposes ...
    getCPUTimeWithUnit :: TimeUnit a => IO a
    getCPUTimeWithUnit :: IO a
    getCPUTimeWithUnit =
      (Integer -> a
    forall a. TimeUnit a => Integer -> a
    fromMicroseconds (Integer -> a) -> (Integer -> Integer) -> Integer -> a
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . Picosecond -> Integer
    forall a. TimeUnit a => a -> Integer
    toMicroseconds (Picosecond -> Integer)
    -> (Integer -> Picosecond) -> Integer -> Integer
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . Integer -> Picosecond
    Picosecond) (Integer -> a) -> IO Integer -> IO a
    forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
    `fmap` IO Integer
    getCPUTime

    --

    newtype Attosecond  = Attosecond  Integer
     deriving (Int -> Attosecond
    Attosecond -> Int
    Attosecond -> [Attosecond]
    Attosecond -> Attosecond
    Attosecond -> Attosecond -> [Attosecond]
    Attosecond -> Attosecond -> Attosecond -> [Attosecond]
    (Attosecond -> Attosecond)
    -> (Attosecond -> Attosecond)
    -> (Int -> Attosecond)
    -> (Attosecond -> Int)
    -> (Attosecond -> [Attosecond])
    -> (Attosecond -> Attosecond -> [Attosecond])
    -> (Attosecond -> Attosecond -> [Attosecond])
    -> (Attosecond -> Attosecond -> Attosecond -> [Attosecond])
    -> Enum Attosecond
    forall a.
    (a -> a)
    -> (a -> a)
    -> (Int -> a)
    -> (a -> Int)
    -> (a -> [a])
    -> (a -> a -> [a])
    -> (a -> a -> [a])
    -> (a -> a -> a -> [a])
    -> Enum a
    enumFromThenTo :: Attosecond -> Attosecond -> Attosecond -> [Attosecond]
    $cenumFromThenTo :: Attosecond -> Attosecond -> Attosecond -> [Attosecond]
    enumFromTo :: Attosecond -> Attosecond -> [Attosecond]
    $cenumFromTo :: Attosecond -> Attosecond -> [Attosecond]
    enumFromThen :: Attosecond -> Attosecond -> [Attosecond]
    $cenumFromThen :: Attosecond -> Attosecond -> [Attosecond]
    enumFrom :: Attosecond -> [Attosecond]
    $cenumFrom :: Attosecond -> [Attosecond]
    fromEnum :: Attosecond -> Int
    $cfromEnum :: Attosecond -> Int
    toEnum :: Int -> Attosecond
    $ctoEnum :: Int -> Attosecond
    pred :: Attosecond -> Attosecond
    $cpred :: Attosecond -> Attosecond
    succ :: Attosecond -> Attosecond
    $csucc :: Attosecond -> Attosecond
    Enum,Attosecond -> Attosecond -> Bool
    (Attosecond -> Attosecond -> Bool)
    -> (Attosecond -> Attosecond -> Bool) -> Eq Attosecond
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    /= :: Attosecond -> Attosecond -> Bool
    $c/= :: Attosecond -> Attosecond -> Bool
    == :: Attosecond -> Attosecond -> Bool
    $c== :: Attosecond -> Attosecond -> Bool
    Eq,Enum Attosecond
    Real Attosecond
    (Real Attosecond, Enum Attosecond) =>
    (Attosecond -> Attosecond -> Attosecond)
    -> (Attosecond -> Attosecond -> Attosecond)
    -> (Attosecond -> Attosecond -> Attosecond)
    -> (Attosecond -> Attosecond -> Attosecond)
    -> (Attosecond -> Attosecond -> (Attosecond, Attosecond))
    -> (Attosecond -> Attosecond -> (Attosecond, Attosecond))
    -> (Attosecond -> Integer)
    -> Integral Attosecond
    Attosecond -> Integer
    Attosecond -> Attosecond -> (Attosecond, Attosecond)
    Attosecond -> Attosecond -> Attosecond
    forall a.
    (Real a, Enum a) =>
    (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> (a, a))
    -> (a -> a -> (a, a))
    -> (a -> Integer)
    -> Integral a
    toInteger :: Attosecond -> Integer
    $ctoInteger :: Attosecond -> Integer
    divMod :: Attosecond -> Attosecond -> (Attosecond, Attosecond)
    $cdivMod :: Attosecond -> Attosecond -> (Attosecond, Attosecond)
    quotRem :: Attosecond -> Attosecond -> (Attosecond, Attosecond)
    $cquotRem :: Attosecond -> Attosecond -> (Attosecond, Attosecond)
    mod :: Attosecond -> Attosecond -> Attosecond
    $cmod :: Attosecond -> Attosecond -> Attosecond
    div :: Attosecond -> Attosecond -> Attosecond
    $cdiv :: Attosecond -> Attosecond -> Attosecond
    rem :: Attosecond -> Attosecond -> Attosecond
    $crem :: Attosecond -> Attosecond -> Attosecond
    quot :: Attosecond -> Attosecond -> Attosecond
    $cquot :: Attosecond -> Attosecond -> Attosecond
    $cp2Integral :: Enum Attosecond
    $cp1Integral :: Real Attosecond
    Integral,Typeable Attosecond
    Constr
    DataType
    Typeable Attosecond =>
    (forall (c :: * -> *).
     (forall d b. Data d => c (d -> b) -> d -> c b)
     -> (forall g. g -> c g) -> Attosecond -> c Attosecond)
    -> (forall (c :: * -> *).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c Attosecond)
    -> (Attosecond -> Constr)
    -> (Attosecond -> DataType)
    -> (forall (t :: * -> *) (c :: * -> *).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c Attosecond))
    -> (forall (t :: * -> * -> *) (c :: * -> *).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e))
        -> Maybe (c Attosecond))
    -> ((forall b. Data b => b -> b) -> Attosecond -> Attosecond)
    -> (forall r r'.
        (r -> r' -> r)
        -> r -> (forall d. Data d => d -> r') -> Attosecond -> r)
    -> (forall r r'.
        (r' -> r -> r)
        -> r -> (forall d. Data d => d -> r') -> Attosecond -> r)
    -> (forall u. (forall d. Data d => d -> u) -> Attosecond -> [u])
    -> (forall u.
        Int -> (forall d. Data d => d -> u) -> Attosecond -> u)
    -> (forall (m :: * -> *).
        Monad m =>
        (forall d. Data d => d -> m d) -> Attosecond -> m Attosecond)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> Attosecond -> m Attosecond)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> Attosecond -> m Attosecond)
    -> Data Attosecond
    Attosecond -> Constr
    Attosecond -> DataType
    (forall b. Data b => b -> b) -> Attosecond -> Attosecond
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Attosecond -> c Attosecond
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Attosecond
    forall a.
    Typeable a =>
    (forall (c :: * -> *).
     (forall d b. Data d => c (d -> b) -> d -> c b)
     -> (forall g. g -> c g) -> a -> c a)
    -> (forall (c :: * -> *).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c a)
    -> (a -> Constr)
    -> (a -> DataType)
    -> (forall (t :: * -> *) (c :: * -> *).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c a))
    -> (forall (t :: * -> * -> *) (c :: * -> *).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
    -> ((forall b. Data b => b -> b) -> a -> a)
    -> (forall r r'.
        (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall r r'.
        (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall u. (forall d. Data d => d -> u) -> a -> [u])
    -> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
    -> (forall (m :: * -> *).
        Monad m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> Data a
    forall u. Int -> (forall d. Data d => d -> u) -> Attosecond -> u
    forall u. (forall d. Data d => d -> u) -> Attosecond -> [u]
    forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Attosecond -> r
    forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Attosecond -> r
    forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Attosecond -> m Attosecond
    forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Attosecond -> m Attosecond
    forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Attosecond
    forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Attosecond -> c Attosecond
    forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Attosecond)
    forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Attosecond)
    $cAttosecond :: Constr
    $tAttosecond :: DataType
    gmapMo :: (forall d. Data d => d -> m d) -> Attosecond -> m Attosecond
    $cgmapMo :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Attosecond -> m Attosecond
    gmapMp :: (forall d. Data d => d -> m d) -> Attosecond -> m Attosecond
    $cgmapMp :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Attosecond -> m Attosecond
    gmapM :: (forall d. Data d => d -> m d) -> Attosecond -> m Attosecond
    $cgmapM :: forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Attosecond -> m Attosecond
    gmapQi :: Int -> (forall d. Data d => d -> u) -> Attosecond -> u
    $cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Attosecond -> u
    gmapQ :: (forall d. Data d => d -> u) -> Attosecond -> [u]
    $cgmapQ :: forall u. (forall d. Data d => d -> u) -> Attosecond -> [u]
    gmapQr :: (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Attosecond -> r
    $cgmapQr :: forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Attosecond -> r
    gmapQl :: (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Attosecond -> r
    $cgmapQl :: forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Attosecond -> r
    gmapT :: (forall b. Data b => b -> b) -> Attosecond -> Attosecond
    $cgmapT :: (forall b. Data b => b -> b) -> Attosecond -> Attosecond
    dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Attosecond)
    $cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Attosecond)
    dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c Attosecond)
    $cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Attosecond)
    dataTypeOf :: Attosecond -> DataType
    $cdataTypeOf :: Attosecond -> DataType
    toConstr :: Attosecond -> Constr
    $ctoConstr :: Attosecond -> Constr
    gunfold :: (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Attosecond
    $cgunfold :: forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Attosecond
    gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Attosecond -> c Attosecond
    $cgfoldl :: forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Attosecond -> c Attosecond
    $cp1Data :: Typeable Attosecond
    Data,Integer -> Attosecond
    Attosecond -> Attosecond
    Attosecond -> Attosecond -> Attosecond
    (Attosecond -> Attosecond -> Attosecond)
    -> (Attosecond -> Attosecond -> Attosecond)
    -> (Attosecond -> Attosecond -> Attosecond)
    -> (Attosecond -> Attosecond)
    -> (Attosecond -> Attosecond)
    -> (Attosecond -> Attosecond)
    -> (Integer -> Attosecond)
    -> Num Attosecond
    forall a.
    (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a)
    -> (a -> a)
    -> (a -> a)
    -> (Integer -> a)
    -> Num a
    fromInteger :: Integer -> Attosecond
    $cfromInteger :: Integer -> Attosecond
    signum :: Attosecond -> Attosecond
    $csignum :: Attosecond -> Attosecond
    abs :: Attosecond -> Attosecond
    $cabs :: Attosecond -> Attosecond
    negate :: Attosecond -> Attosecond
    $cnegate :: Attosecond -> Attosecond
    * :: Attosecond -> Attosecond -> Attosecond
    $c* :: Attosecond -> Attosecond -> Attosecond
    - :: Attosecond -> Attosecond -> Attosecond
    $c- :: Attosecond -> Attosecond -> Attosecond
    + :: Attosecond -> Attosecond -> Attosecond
    $c+ :: Attosecond -> Attosecond -> Attosecond
    Num,Eq Attosecond
    Eq Attosecond =>
    (Attosecond -> Attosecond -> Ordering)
    -> (Attosecond -> Attosecond -> Bool)
    -> (Attosecond -> Attosecond -> Bool)
    -> (Attosecond -> Attosecond -> Bool)
    -> (Attosecond -> Attosecond -> Bool)
    -> (Attosecond -> Attosecond -> Attosecond)
    -> (Attosecond -> Attosecond -> Attosecond)
    -> Ord Attosecond
    Attosecond -> Attosecond -> Bool
    Attosecond -> Attosecond -> Ordering
    Attosecond -> Attosecond -> Attosecond
    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 :: Attosecond -> Attosecond -> Attosecond
    $cmin :: Attosecond -> Attosecond -> Attosecond
    max :: Attosecond -> Attosecond -> Attosecond
    $cmax :: Attosecond -> Attosecond -> Attosecond
    >= :: Attosecond -> Attosecond -> Bool
    $c>= :: Attosecond -> Attosecond -> Bool
    > :: Attosecond -> Attosecond -> Bool
    $c> :: Attosecond -> Attosecond -> Bool
    <= :: Attosecond -> Attosecond -> Bool
    $c<= :: Attosecond -> Attosecond -> Bool
    < :: Attosecond -> Attosecond -> Bool
    $c< :: Attosecond -> Attosecond -> Bool
    compare :: Attosecond -> Attosecond -> Ordering
    $ccompare :: Attosecond -> Attosecond -> Ordering
    $cp1Ord :: Eq Attosecond
    Ord,Num Attosecond
    Ord Attosecond
    (Num Attosecond, Ord Attosecond) =>
    (Attosecond -> Rational) -> Real Attosecond
    Attosecond -> Rational
    forall a. (Num a, Ord a) => (a -> Rational) -> Real a
    toRational :: Attosecond -> Rational
    $ctoRational :: Attosecond -> Rational
    $cp2Real :: Ord Attosecond
    $cp1Real :: Num Attosecond
    Real,Ord Attosecond
    Ord Attosecond =>
    ((Attosecond, Attosecond) -> [Attosecond])
    -> ((Attosecond, Attosecond) -> Attosecond -> Int)
    -> ((Attosecond, Attosecond) -> Attosecond -> Int)
    -> ((Attosecond, Attosecond) -> Attosecond -> Bool)
    -> ((Attosecond, Attosecond) -> Int)
    -> ((Attosecond, Attosecond) -> Int)
    -> Ix Attosecond
    (Attosecond, Attosecond) -> Int
    (Attosecond, Attosecond) -> [Attosecond]
    (Attosecond, Attosecond) -> Attosecond -> Bool
    (Attosecond, Attosecond) -> Attosecond -> Int
    forall a.
    Ord a =>
    ((a, a) -> [a])
    -> ((a, a) -> a -> Int)
    -> ((a, a) -> a -> Int)
    -> ((a, a) -> a -> Bool)
    -> ((a, a) -> Int)
    -> ((a, a) -> Int)
    -> Ix a
    unsafeRangeSize :: (Attosecond, Attosecond) -> Int
    $cunsafeRangeSize :: (Attosecond, Attosecond) -> Int
    rangeSize :: (Attosecond, Attosecond) -> Int
    $crangeSize :: (Attosecond, Attosecond) -> Int
    inRange :: (Attosecond, Attosecond) -> Attosecond -> Bool
    $cinRange :: (Attosecond, Attosecond) -> Attosecond -> Bool
    unsafeIndex :: (Attosecond, Attosecond) -> Attosecond -> Int
    $cunsafeIndex :: (Attosecond, Attosecond) -> Attosecond -> Int
    index :: (Attosecond, Attosecond) -> Attosecond -> Int
    $cindex :: (Attosecond, Attosecond) -> Attosecond -> Int
    range :: (Attosecond, Attosecond) -> [Attosecond]
    $crange :: (Attosecond, Attosecond) -> [Attosecond]
    $cp1Ix :: Ord Attosecond
    Ix,Typeable)

    instance TimeUnit Attosecond where
      toMicroseconds :: Attosecond -> Integer
    toMicroseconds (Attosecond x :: Integer
    x) = Integer
    x Integer -> Integer -> Integer
    forall a. Integral a => a -> a -> a
    `div` (10 Integer -> Integer -> Integer
    forall a b. (Num a, Integral b) => a -> b -> a
    ^ 12)
      fromMicroseconds :: Integer -> Attosecond
    fromMicroseconds x :: Integer
    x            = Integer -> Attosecond
    Attosecond (Integer
    x Integer -> Integer -> Integer
    forall a. Num a => a -> a -> a
    * (10 Integer -> Integer -> Integer
    forall a b. (Num a, Integral b) => a -> b -> a
    ^ 12))
    instance Show Attosecond where
      show :: Attosecond -> String
    show (Attosecond x :: Integer
    x) = Integer -> String
    forall a. Show a => a -> String
    show Integer
    x String -> ShowS
    forall a. [a] -> [a] -> [a]
    ++ "as"
    instance Read Attosecond where
      readsPrec :: Int -> ReadS Attosecond
    readsPrec = (Integer -> Attosecond) -> String -> Int -> ReadS Attosecond
    forall a.
    (Integer -> a) -> String -> Int -> String -> [(a, String)]
    readUnit Integer -> Attosecond
    Attosecond "as"

    readUnit :: (Integer -> a) -> String ->
                Int -> String ->
                [(a, String)]
    readUnit :: (Integer -> a) -> String -> Int -> String -> [(a, String)]
    readUnit builder :: Integer -> a
    builder unitstr :: String
    unitstr prec :: Int
    prec str :: String
    str = (Integer -> a) -> [(Integer, String)] -> [(a, String)]
    forall a. (Integer -> a) -> [(Integer, String)] -> [(a, String)]
    processItems Integer -> a
    builder (Int -> ReadS Integer
    forall a. Read a => Int -> ReadS a
    readsPrec Int
    prec String
    str)
     where
      processItems :: (Integer -> a) -> [(Integer,String)] -> [(a,String)]
      processItems :: (Integer -> a) -> [(Integer, String)] -> [(a, String)]
    processItems builder :: Integer -> a
    builder  [] = []
      processItems builder :: Integer -> a
    builder ((a :: Integer
    a,s :: String
    s):rest :: [(Integer, String)]
    rest)
        | String
    unitstr String -> String -> Bool
    forall a. Eq a => [a] -> [a] -> Bool
    `isPrefixOf` String
    s =
               (Integer -> a
    builder Integer
    a, Int -> ShowS
    forall a. Int -> [a] -> [a]
    drop (String -> Int
    forall (t :: * -> *) a. Foldable t => t a -> Int
    length String
    unitstr) String
    s) (a, String) -> [(a, String)] -> [(a, String)]
    forall a. a -> [a] -> [a]
    : ((Integer -> a) -> [(Integer, String)] -> [(a, String)]
    forall a. (Integer -> a) -> [(Integer, String)] -> [(a, String)]
    processItems Integer -> a
    builder [(Integer, String)]
    rest)
            | Bool
    otherwise              =
               (Integer -> a) -> [(Integer, String)] -> [(a, String)]
    forall a. (Integer -> a) -> [(Integer, String)] -> [(a, String)]
    processItems Integer -> a
    builder [(Integer, String)]
    rest

    --

    newtype Femtosecond = Femtosecond Integer
     deriving (Int -> Femtosecond
    Femtosecond -> Int
    Femtosecond -> [Femtosecond]
    Femtosecond -> Femtosecond
    Femtosecond -> Femtosecond -> [Femtosecond]
    Femtosecond -> Femtosecond -> Femtosecond -> [Femtosecond]
    (Femtosecond -> Femtosecond)
    -> (Femtosecond -> Femtosecond)
    -> (Int -> Femtosecond)
    -> (Femtosecond -> Int)
    -> (Femtosecond -> [Femtosecond])
    -> (Femtosecond -> Femtosecond -> [Femtosecond])
    -> (Femtosecond -> Femtosecond -> [Femtosecond])
    -> (Femtosecond -> Femtosecond -> Femtosecond -> [Femtosecond])
    -> Enum Femtosecond
    forall a.
    (a -> a)
    -> (a -> a)
    -> (Int -> a)
    -> (a -> Int)
    -> (a -> [a])
    -> (a -> a -> [a])
    -> (a -> a -> [a])
    -> (a -> a -> a -> [a])
    -> Enum a
    enumFromThenTo :: Femtosecond -> Femtosecond -> Femtosecond -> [Femtosecond]
    $cenumFromThenTo :: Femtosecond -> Femtosecond -> Femtosecond -> [Femtosecond]
    enumFromTo :: Femtosecond -> Femtosecond -> [Femtosecond]
    $cenumFromTo :: Femtosecond -> Femtosecond -> [Femtosecond]
    enumFromThen :: Femtosecond -> Femtosecond -> [Femtosecond]
    $cenumFromThen :: Femtosecond -> Femtosecond -> [Femtosecond]
    enumFrom :: Femtosecond -> [Femtosecond]
    $cenumFrom :: Femtosecond -> [Femtosecond]
    fromEnum :: Femtosecond -> Int
    $cfromEnum :: Femtosecond -> Int
    toEnum :: Int -> Femtosecond
    $ctoEnum :: Int -> Femtosecond
    pred :: Femtosecond -> Femtosecond
    $cpred :: Femtosecond -> Femtosecond
    succ :: Femtosecond -> Femtosecond
    $csucc :: Femtosecond -> Femtosecond
    Enum,Femtosecond -> Femtosecond -> Bool
    (Femtosecond -> Femtosecond -> Bool)
    -> (Femtosecond -> Femtosecond -> Bool) -> Eq Femtosecond
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    /= :: Femtosecond -> Femtosecond -> Bool
    $c/= :: Femtosecond -> Femtosecond -> Bool
    == :: Femtosecond -> Femtosecond -> Bool
    $c== :: Femtosecond -> Femtosecond -> Bool
    Eq,Enum Femtosecond
    Real Femtosecond
    (Real Femtosecond, Enum Femtosecond) =>
    (Femtosecond -> Femtosecond -> Femtosecond)
    -> (Femtosecond -> Femtosecond -> Femtosecond)
    -> (Femtosecond -> Femtosecond -> Femtosecond)
    -> (Femtosecond -> Femtosecond -> Femtosecond)
    -> (Femtosecond -> Femtosecond -> (Femtosecond, Femtosecond))
    -> (Femtosecond -> Femtosecond -> (Femtosecond, Femtosecond))
    -> (Femtosecond -> Integer)
    -> Integral Femtosecond
    Femtosecond -> Integer
    Femtosecond -> Femtosecond -> (Femtosecond, Femtosecond)
    Femtosecond -> Femtosecond -> Femtosecond
    forall a.
    (Real a, Enum a) =>
    (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> (a, a))
    -> (a -> a -> (a, a))
    -> (a -> Integer)
    -> Integral a
    toInteger :: Femtosecond -> Integer
    $ctoInteger :: Femtosecond -> Integer
    divMod :: Femtosecond -> Femtosecond -> (Femtosecond, Femtosecond)
    $cdivMod :: Femtosecond -> Femtosecond -> (Femtosecond, Femtosecond)
    quotRem :: Femtosecond -> Femtosecond -> (Femtosecond, Femtosecond)
    $cquotRem :: Femtosecond -> Femtosecond -> (Femtosecond, Femtosecond)
    mod :: Femtosecond -> Femtosecond -> Femtosecond
    $cmod :: Femtosecond -> Femtosecond -> Femtosecond
    div :: Femtosecond -> Femtosecond -> Femtosecond
    $cdiv :: Femtosecond -> Femtosecond -> Femtosecond
    rem :: Femtosecond -> Femtosecond -> Femtosecond
    $crem :: Femtosecond -> Femtosecond -> Femtosecond
    quot :: Femtosecond -> Femtosecond -> Femtosecond
    $cquot :: Femtosecond -> Femtosecond -> Femtosecond
    $cp2Integral :: Enum Femtosecond
    $cp1Integral :: Real Femtosecond
    Integral,Typeable Femtosecond
    Constr
    DataType
    Typeable Femtosecond =>
    (forall (c :: * -> *).
     (forall d b. Data d => c (d -> b) -> d -> c b)
     -> (forall g. g -> c g) -> Femtosecond -> c Femtosecond)
    -> (forall (c :: * -> *).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c Femtosecond)
    -> (Femtosecond -> Constr)
    -> (Femtosecond -> DataType)
    -> (forall (t :: * -> *) (c :: * -> *).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c Femtosecond))
    -> (forall (t :: * -> * -> *) (c :: * -> *).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e))
        -> Maybe (c Femtosecond))
    -> ((forall b. Data b => b -> b) -> Femtosecond -> Femtosecond)
    -> (forall r r'.
        (r -> r' -> r)
        -> r -> (forall d. Data d => d -> r') -> Femtosecond -> r)
    -> (forall r r'.
        (r' -> r -> r)
        -> r -> (forall d. Data d => d -> r') -> Femtosecond -> r)
    -> (forall u. (forall d. Data d => d -> u) -> Femtosecond -> [u])
    -> (forall u.
        Int -> (forall d. Data d => d -> u) -> Femtosecond -> u)
    -> (forall (m :: * -> *).
        Monad m =>
        (forall d. Data d => d -> m d) -> Femtosecond -> m Femtosecond)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> Femtosecond -> m Femtosecond)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> Femtosecond -> m Femtosecond)
    -> Data Femtosecond
    Femtosecond -> Constr
    Femtosecond -> DataType
    (forall b. Data b => b -> b) -> Femtosecond -> Femtosecond
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Femtosecond -> c Femtosecond
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Femtosecond
    forall a.
    Typeable a =>
    (forall (c :: * -> *).
     (forall d b. Data d => c (d -> b) -> d -> c b)
     -> (forall g. g -> c g) -> a -> c a)
    -> (forall (c :: * -> *).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c a)
    -> (a -> Constr)
    -> (a -> DataType)
    -> (forall (t :: * -> *) (c :: * -> *).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c a))
    -> (forall (t :: * -> * -> *) (c :: * -> *).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
    -> ((forall b. Data b => b -> b) -> a -> a)
    -> (forall r r'.
        (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall r r'.
        (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall u. (forall d. Data d => d -> u) -> a -> [u])
    -> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
    -> (forall (m :: * -> *).
        Monad m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> Data a
    forall u. Int -> (forall d. Data d => d -> u) -> Femtosecond -> u
    forall u. (forall d. Data d => d -> u) -> Femtosecond -> [u]
    forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Femtosecond -> r
    forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Femtosecond -> r
    forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Femtosecond -> m Femtosecond
    forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Femtosecond -> m Femtosecond
    forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Femtosecond
    forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Femtosecond -> c Femtosecond
    forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Femtosecond)
    forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c Femtosecond)
    $cFemtosecond :: Constr
    $tFemtosecond :: DataType
    gmapMo :: (forall d. Data d => d -> m d) -> Femtosecond -> m Femtosecond
    $cgmapMo :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Femtosecond -> m Femtosecond
    gmapMp :: (forall d. Data d => d -> m d) -> Femtosecond -> m Femtosecond
    $cgmapMp :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Femtosecond -> m Femtosecond
    gmapM :: (forall d. Data d => d -> m d) -> Femtosecond -> m Femtosecond
    $cgmapM :: forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Femtosecond -> m Femtosecond
    gmapQi :: Int -> (forall d. Data d => d -> u) -> Femtosecond -> u
    $cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Femtosecond -> u
    gmapQ :: (forall d. Data d => d -> u) -> Femtosecond -> [u]
    $cgmapQ :: forall u. (forall d. Data d => d -> u) -> Femtosecond -> [u]
    gmapQr :: (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Femtosecond -> r
    $cgmapQr :: forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Femtosecond -> r
    gmapQl :: (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Femtosecond -> r
    $cgmapQl :: forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Femtosecond -> r
    gmapT :: (forall b. Data b => b -> b) -> Femtosecond -> Femtosecond
    $cgmapT :: (forall b. Data b => b -> b) -> Femtosecond -> Femtosecond
    dataCast2 :: (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c Femtosecond)
    $cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c Femtosecond)
    dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c Femtosecond)
    $cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Femtosecond)
    dataTypeOf :: Femtosecond -> DataType
    $cdataTypeOf :: Femtosecond -> DataType
    toConstr :: Femtosecond -> Constr
    $ctoConstr :: Femtosecond -> Constr
    gunfold :: (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Femtosecond
    $cgunfold :: forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Femtosecond
    gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Femtosecond -> c Femtosecond
    $cgfoldl :: forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Femtosecond -> c Femtosecond
    $cp1Data :: Typeable Femtosecond
    Data,Integer -> Femtosecond
    Femtosecond -> Femtosecond
    Femtosecond -> Femtosecond -> Femtosecond
    (Femtosecond -> Femtosecond -> Femtosecond)
    -> (Femtosecond -> Femtosecond -> Femtosecond)
    -> (Femtosecond -> Femtosecond -> Femtosecond)
    -> (Femtosecond -> Femtosecond)
    -> (Femtosecond -> Femtosecond)
    -> (Femtosecond -> Femtosecond)
    -> (Integer -> Femtosecond)
    -> Num Femtosecond
    forall a.
    (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a)
    -> (a -> a)
    -> (a -> a)
    -> (Integer -> a)
    -> Num a
    fromInteger :: Integer -> Femtosecond
    $cfromInteger :: Integer -> Femtosecond
    signum :: Femtosecond -> Femtosecond
    $csignum :: Femtosecond -> Femtosecond
    abs :: Femtosecond -> Femtosecond
    $cabs :: Femtosecond -> Femtosecond
    negate :: Femtosecond -> Femtosecond
    $cnegate :: Femtosecond -> Femtosecond
    * :: Femtosecond -> Femtosecond -> Femtosecond
    $c* :: Femtosecond -> Femtosecond -> Femtosecond
    - :: Femtosecond -> Femtosecond -> Femtosecond
    $c- :: Femtosecond -> Femtosecond -> Femtosecond
    + :: Femtosecond -> Femtosecond -> Femtosecond
    $c+ :: Femtosecond -> Femtosecond -> Femtosecond
    Num,Eq Femtosecond
    Eq Femtosecond =>
    (Femtosecond -> Femtosecond -> Ordering)
    -> (Femtosecond -> Femtosecond -> Bool)
    -> (Femtosecond -> Femtosecond -> Bool)
    -> (Femtosecond -> Femtosecond -> Bool)
    -> (Femtosecond -> Femtosecond -> Bool)
    -> (Femtosecond -> Femtosecond -> Femtosecond)
    -> (Femtosecond -> Femtosecond -> Femtosecond)
    -> Ord Femtosecond
    Femtosecond -> Femtosecond -> Bool
    Femtosecond -> Femtosecond -> Ordering
    Femtosecond -> Femtosecond -> Femtosecond
    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 :: Femtosecond -> Femtosecond -> Femtosecond
    $cmin :: Femtosecond -> Femtosecond -> Femtosecond
    max :: Femtosecond -> Femtosecond -> Femtosecond
    $cmax :: Femtosecond -> Femtosecond -> Femtosecond
    >= :: Femtosecond -> Femtosecond -> Bool
    $c>= :: Femtosecond -> Femtosecond -> Bool
    > :: Femtosecond -> Femtosecond -> Bool
    $c> :: Femtosecond -> Femtosecond -> Bool
    <= :: Femtosecond -> Femtosecond -> Bool
    $c<= :: Femtosecond -> Femtosecond -> Bool
    < :: Femtosecond -> Femtosecond -> Bool
    $c< :: Femtosecond -> Femtosecond -> Bool
    compare :: Femtosecond -> Femtosecond -> Ordering
    $ccompare :: Femtosecond -> Femtosecond -> Ordering
    $cp1Ord :: Eq Femtosecond
    Ord,Num Femtosecond
    Ord Femtosecond
    (Num Femtosecond, Ord Femtosecond) =>
    (Femtosecond -> Rational) -> Real Femtosecond
    Femtosecond -> Rational
    forall a. (Num a, Ord a) => (a -> Rational) -> Real a
    toRational :: Femtosecond -> Rational
    $ctoRational :: Femtosecond -> Rational
    $cp2Real :: Ord Femtosecond
    $cp1Real :: Num Femtosecond
    Real,Ord Femtosecond
    Ord Femtosecond =>
    ((Femtosecond, Femtosecond) -> [Femtosecond])
    -> ((Femtosecond, Femtosecond) -> Femtosecond -> Int)
    -> ((Femtosecond, Femtosecond) -> Femtosecond -> Int)
    -> ((Femtosecond, Femtosecond) -> Femtosecond -> Bool)
    -> ((Femtosecond, Femtosecond) -> Int)
    -> ((Femtosecond, Femtosecond) -> Int)
    -> Ix Femtosecond
    (Femtosecond, Femtosecond) -> Int
    (Femtosecond, Femtosecond) -> [Femtosecond]
    (Femtosecond, Femtosecond) -> Femtosecond -> Bool
    (Femtosecond, Femtosecond) -> Femtosecond -> Int
    forall a.
    Ord a =>
    ((a, a) -> [a])
    -> ((a, a) -> a -> Int)
    -> ((a, a) -> a -> Int)
    -> ((a, a) -> a -> Bool)
    -> ((a, a) -> Int)
    -> ((a, a) -> Int)
    -> Ix a
    unsafeRangeSize :: (Femtosecond, Femtosecond) -> Int
    $cunsafeRangeSize :: (Femtosecond, Femtosecond) -> Int
    rangeSize :: (Femtosecond, Femtosecond) -> Int
    $crangeSize :: (Femtosecond, Femtosecond) -> Int
    inRange :: (Femtosecond, Femtosecond) -> Femtosecond -> Bool
    $cinRange :: (Femtosecond, Femtosecond) -> Femtosecond -> Bool
    unsafeIndex :: (Femtosecond, Femtosecond) -> Femtosecond -> Int
    $cunsafeIndex :: (Femtosecond, Femtosecond) -> Femtosecond -> Int
    index :: (Femtosecond, Femtosecond) -> Femtosecond -> Int
    $cindex :: (Femtosecond, Femtosecond) -> Femtosecond -> Int
    range :: (Femtosecond, Femtosecond) -> [Femtosecond]
    $crange :: (Femtosecond, Femtosecond) -> [Femtosecond]
    $cp1Ix :: Ord Femtosecond
    Ix,Typeable)

    instance TimeUnit Femtosecond where
      toMicroseconds :: Femtosecond -> Integer
    toMicroseconds (Femtosecond x :: Integer
    x) = Integer
    x Integer -> Integer -> Integer
    forall a. Integral a => a -> a -> a
    `div` (10 Integer -> Integer -> Integer
    forall a b. (Num a, Integral b) => a -> b -> a
    ^ 9)
      fromMicroseconds :: Integer -> Femtosecond
    fromMicroseconds x :: Integer
    x             = Integer -> Femtosecond
    Femtosecond (Integer
    x Integer -> Integer -> Integer
    forall a. Num a => a -> a -> a
    * (10 Integer -> Integer -> Integer
    forall a b. (Num a, Integral b) => a -> b -> a
    ^ 9))
    instance Show Femtosecond where
      show :: Femtosecond -> String
    show (Femtosecond x :: Integer
    x) = Integer -> String
    forall a. Show a => a -> String
    show Integer
    x String -> ShowS
    forall a. [a] -> [a] -> [a]
    ++ "fs"
    instance Read Femtosecond where
      readsPrec :: Int -> ReadS Femtosecond
    readsPrec = (Integer -> Femtosecond) -> String -> Int -> ReadS Femtosecond
    forall a.
    (Integer -> a) -> String -> Int -> String -> [(a, String)]
    readUnit Integer -> Femtosecond
    Femtosecond "fs"

    --

    newtype Picosecond  = Picosecond  Integer
     deriving (Int -> Picosecond
    Picosecond -> Int
    Picosecond -> [Picosecond]
    Picosecond -> Picosecond
    Picosecond -> Picosecond -> [Picosecond]
    Picosecond -> Picosecond -> Picosecond -> [Picosecond]
    (Picosecond -> Picosecond)
    -> (Picosecond -> Picosecond)
    -> (Int -> Picosecond)
    -> (Picosecond -> Int)
    -> (Picosecond -> [Picosecond])
    -> (Picosecond -> Picosecond -> [Picosecond])
    -> (Picosecond -> Picosecond -> [Picosecond])
    -> (Picosecond -> Picosecond -> Picosecond -> [Picosecond])
    -> Enum Picosecond
    forall a.
    (a -> a)
    -> (a -> a)
    -> (Int -> a)
    -> (a -> Int)
    -> (a -> [a])
    -> (a -> a -> [a])
    -> (a -> a -> [a])
    -> (a -> a -> a -> [a])
    -> Enum a
    enumFromThenTo :: Picosecond -> Picosecond -> Picosecond -> [Picosecond]
    $cenumFromThenTo :: Picosecond -> Picosecond -> Picosecond -> [Picosecond]
    enumFromTo :: Picosecond -> Picosecond -> [Picosecond]
    $cenumFromTo :: Picosecond -> Picosecond -> [Picosecond]
    enumFromThen :: Picosecond -> Picosecond -> [Picosecond]
    $cenumFromThen :: Picosecond -> Picosecond -> [Picosecond]
    enumFrom :: Picosecond -> [Picosecond]
    $cenumFrom :: Picosecond -> [Picosecond]
    fromEnum :: Picosecond -> Int
    $cfromEnum :: Picosecond -> Int
    toEnum :: Int -> Picosecond
    $ctoEnum :: Int -> Picosecond
    pred :: Picosecond -> Picosecond
    $cpred :: Picosecond -> Picosecond
    succ :: Picosecond -> Picosecond
    $csucc :: Picosecond -> Picosecond
    Enum,Picosecond -> Picosecond -> Bool
    (Picosecond -> Picosecond -> Bool)
    -> (Picosecond -> Picosecond -> Bool) -> Eq Picosecond
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    /= :: Picosecond -> Picosecond -> Bool
    $c/= :: Picosecond -> Picosecond -> Bool
    == :: Picosecond -> Picosecond -> Bool
    $c== :: Picosecond -> Picosecond -> Bool
    Eq,Enum Picosecond
    Real Picosecond
    (Real Picosecond, Enum Picosecond) =>
    (Picosecond -> Picosecond -> Picosecond)
    -> (Picosecond -> Picosecond -> Picosecond)
    -> (Picosecond -> Picosecond -> Picosecond)
    -> (Picosecond -> Picosecond -> Picosecond)
    -> (Picosecond -> Picosecond -> (Picosecond, Picosecond))
    -> (Picosecond -> Picosecond -> (Picosecond, Picosecond))
    -> (Picosecond -> Integer)
    -> Integral Picosecond
    Picosecond -> Integer
    Picosecond -> Picosecond -> (Picosecond, Picosecond)
    Picosecond -> Picosecond -> Picosecond
    forall a.
    (Real a, Enum a) =>
    (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> (a, a))
    -> (a -> a -> (a, a))
    -> (a -> Integer)
    -> Integral a
    toInteger :: Picosecond -> Integer
    $ctoInteger :: Picosecond -> Integer
    divMod :: Picosecond -> Picosecond -> (Picosecond, Picosecond)
    $cdivMod :: Picosecond -> Picosecond -> (Picosecond, Picosecond)
    quotRem :: Picosecond -> Picosecond -> (Picosecond, Picosecond)
    $cquotRem :: Picosecond -> Picosecond -> (Picosecond, Picosecond)
    mod :: Picosecond -> Picosecond -> Picosecond
    $cmod :: Picosecond -> Picosecond -> Picosecond
    div :: Picosecond -> Picosecond -> Picosecond
    $cdiv :: Picosecond -> Picosecond -> Picosecond
    rem :: Picosecond -> Picosecond -> Picosecond
    $crem :: Picosecond -> Picosecond -> Picosecond
    quot :: Picosecond -> Picosecond -> Picosecond
    $cquot :: Picosecond -> Picosecond -> Picosecond
    $cp2Integral :: Enum Picosecond
    $cp1Integral :: Real Picosecond
    Integral,Typeable Picosecond
    Constr
    DataType
    Typeable Picosecond =>
    (forall (c :: * -> *).
     (forall d b. Data d => c (d -> b) -> d -> c b)
     -> (forall g. g -> c g) -> Picosecond -> c Picosecond)
    -> (forall (c :: * -> *).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c Picosecond)
    -> (Picosecond -> Constr)
    -> (Picosecond -> DataType)
    -> (forall (t :: * -> *) (c :: * -> *).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c Picosecond))
    -> (forall (t :: * -> * -> *) (c :: * -> *).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e))
        -> Maybe (c Picosecond))
    -> ((forall b. Data b => b -> b) -> Picosecond -> Picosecond)
    -> (forall r r'.
        (r -> r' -> r)
        -> r -> (forall d. Data d => d -> r') -> Picosecond -> r)
    -> (forall r r'.
        (r' -> r -> r)
        -> r -> (forall d. Data d => d -> r') -> Picosecond -> r)
    -> (forall u. (forall d. Data d => d -> u) -> Picosecond -> [u])
    -> (forall u.
        Int -> (forall d. Data d => d -> u) -> Picosecond -> u)
    -> (forall (m :: * -> *).
        Monad m =>
        (forall d. Data d => d -> m d) -> Picosecond -> m Picosecond)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> Picosecond -> m Picosecond)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> Picosecond -> m Picosecond)
    -> Data Picosecond
    Picosecond -> Constr
    Picosecond -> DataType
    (forall b. Data b => b -> b) -> Picosecond -> Picosecond
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Picosecond -> c Picosecond
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Picosecond
    forall a.
    Typeable a =>
    (forall (c :: * -> *).
     (forall d b. Data d => c (d -> b) -> d -> c b)
     -> (forall g. g -> c g) -> a -> c a)
    -> (forall (c :: * -> *).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c a)
    -> (a -> Constr)
    -> (a -> DataType)
    -> (forall (t :: * -> *) (c :: * -> *).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c a))
    -> (forall (t :: * -> * -> *) (c :: * -> *).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
    -> ((forall b. Data b => b -> b) -> a -> a)
    -> (forall r r'.
        (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall r r'.
        (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall u. (forall d. Data d => d -> u) -> a -> [u])
    -> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
    -> (forall (m :: * -> *).
        Monad m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> Data a
    forall u. Int -> (forall d. Data d => d -> u) -> Picosecond -> u
    forall u. (forall d. Data d => d -> u) -> Picosecond -> [u]
    forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Picosecond -> r
    forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Picosecond -> r
    forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Picosecond -> m Picosecond
    forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Picosecond -> m Picosecond
    forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Picosecond
    forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Picosecond -> c Picosecond
    forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Picosecond)
    forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Picosecond)
    $cPicosecond :: Constr
    $tPicosecond :: DataType
    gmapMo :: (forall d. Data d => d -> m d) -> Picosecond -> m Picosecond
    $cgmapMo :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Picosecond -> m Picosecond
    gmapMp :: (forall d. Data d => d -> m d) -> Picosecond -> m Picosecond
    $cgmapMp :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Picosecond -> m Picosecond
    gmapM :: (forall d. Data d => d -> m d) -> Picosecond -> m Picosecond
    $cgmapM :: forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Picosecond -> m Picosecond
    gmapQi :: Int -> (forall d. Data d => d -> u) -> Picosecond -> u
    $cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Picosecond -> u
    gmapQ :: (forall d. Data d => d -> u) -> Picosecond -> [u]
    $cgmapQ :: forall u. (forall d. Data d => d -> u) -> Picosecond -> [u]
    gmapQr :: (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Picosecond -> r
    $cgmapQr :: forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Picosecond -> r
    gmapQl :: (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Picosecond -> r
    $cgmapQl :: forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Picosecond -> r
    gmapT :: (forall b. Data b => b -> b) -> Picosecond -> Picosecond
    $cgmapT :: (forall b. Data b => b -> b) -> Picosecond -> Picosecond
    dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Picosecond)
    $cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Picosecond)
    dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c Picosecond)
    $cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Picosecond)
    dataTypeOf :: Picosecond -> DataType
    $cdataTypeOf :: Picosecond -> DataType
    toConstr :: Picosecond -> Constr
    $ctoConstr :: Picosecond -> Constr
    gunfold :: (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Picosecond
    $cgunfold :: forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Picosecond
    gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Picosecond -> c Picosecond
    $cgfoldl :: forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Picosecond -> c Picosecond
    $cp1Data :: Typeable Picosecond
    Data,Integer -> Picosecond
    Picosecond -> Picosecond
    Picosecond -> Picosecond -> Picosecond
    (Picosecond -> Picosecond -> Picosecond)
    -> (Picosecond -> Picosecond -> Picosecond)
    -> (Picosecond -> Picosecond -> Picosecond)
    -> (Picosecond -> Picosecond)
    -> (Picosecond -> Picosecond)
    -> (Picosecond -> Picosecond)
    -> (Integer -> Picosecond)
    -> Num Picosecond
    forall a.
    (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a)
    -> (a -> a)
    -> (a -> a)
    -> (Integer -> a)
    -> Num a
    fromInteger :: Integer -> Picosecond
    $cfromInteger :: Integer -> Picosecond
    signum :: Picosecond -> Picosecond
    $csignum :: Picosecond -> Picosecond
    abs :: Picosecond -> Picosecond
    $cabs :: Picosecond -> Picosecond
    negate :: Picosecond -> Picosecond
    $cnegate :: Picosecond -> Picosecond
    * :: Picosecond -> Picosecond -> Picosecond
    $c* :: Picosecond -> Picosecond -> Picosecond
    - :: Picosecond -> Picosecond -> Picosecond
    $c- :: Picosecond -> Picosecond -> Picosecond
    + :: Picosecond -> Picosecond -> Picosecond
    $c+ :: Picosecond -> Picosecond -> Picosecond
    Num,Eq Picosecond
    Eq Picosecond =>
    (Picosecond -> Picosecond -> Ordering)
    -> (Picosecond -> Picosecond -> Bool)
    -> (Picosecond -> Picosecond -> Bool)
    -> (Picosecond -> Picosecond -> Bool)
    -> (Picosecond -> Picosecond -> Bool)
    -> (Picosecond -> Picosecond -> Picosecond)
    -> (Picosecond -> Picosecond -> Picosecond)
    -> Ord Picosecond
    Picosecond -> Picosecond -> Bool
    Picosecond -> Picosecond -> Ordering
    Picosecond -> Picosecond -> Picosecond
    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 :: Picosecond -> Picosecond -> Picosecond
    $cmin :: Picosecond -> Picosecond -> Picosecond
    max :: Picosecond -> Picosecond -> Picosecond
    $cmax :: Picosecond -> Picosecond -> Picosecond
    >= :: Picosecond -> Picosecond -> Bool
    $c>= :: Picosecond -> Picosecond -> Bool
    > :: Picosecond -> Picosecond -> Bool
    $c> :: Picosecond -> Picosecond -> Bool
    <= :: Picosecond -> Picosecond -> Bool
    $c<= :: Picosecond -> Picosecond -> Bool
    < :: Picosecond -> Picosecond -> Bool
    $c< :: Picosecond -> Picosecond -> Bool
    compare :: Picosecond -> Picosecond -> Ordering
    $ccompare :: Picosecond -> Picosecond -> Ordering
    $cp1Ord :: Eq Picosecond
    Ord,Num Picosecond
    Ord Picosecond
    (Num Picosecond, Ord Picosecond) =>
    (Picosecond -> Rational) -> Real Picosecond
    Picosecond -> Rational
    forall a. (Num a, Ord a) => (a -> Rational) -> Real a
    toRational :: Picosecond -> Rational
    $ctoRational :: Picosecond -> Rational
    $cp2Real :: Ord Picosecond
    $cp1Real :: Num Picosecond
    Real,Ord Picosecond
    Ord Picosecond =>
    ((Picosecond, Picosecond) -> [Picosecond])
    -> ((Picosecond, Picosecond) -> Picosecond -> Int)
    -> ((Picosecond, Picosecond) -> Picosecond -> Int)
    -> ((Picosecond, Picosecond) -> Picosecond -> Bool)
    -> ((Picosecond, Picosecond) -> Int)
    -> ((Picosecond, Picosecond) -> Int)
    -> Ix Picosecond
    (Picosecond, Picosecond) -> Int
    (Picosecond, Picosecond) -> [Picosecond]
    (Picosecond, Picosecond) -> Picosecond -> Bool
    (Picosecond, Picosecond) -> Picosecond -> Int
    forall a.
    Ord a =>
    ((a, a) -> [a])
    -> ((a, a) -> a -> Int)
    -> ((a, a) -> a -> Int)
    -> ((a, a) -> a -> Bool)
    -> ((a, a) -> Int)
    -> ((a, a) -> Int)
    -> Ix a
    unsafeRangeSize :: (Picosecond, Picosecond) -> Int
    $cunsafeRangeSize :: (Picosecond, Picosecond) -> Int
    rangeSize :: (Picosecond, Picosecond) -> Int
    $crangeSize :: (Picosecond, Picosecond) -> Int
    inRange :: (Picosecond, Picosecond) -> Picosecond -> Bool
    $cinRange :: (Picosecond, Picosecond) -> Picosecond -> Bool
    unsafeIndex :: (Picosecond, Picosecond) -> Picosecond -> Int
    $cunsafeIndex :: (Picosecond, Picosecond) -> Picosecond -> Int
    index :: (Picosecond, Picosecond) -> Picosecond -> Int
    $cindex :: (Picosecond, Picosecond) -> Picosecond -> Int
    range :: (Picosecond, Picosecond) -> [Picosecond]
    $crange :: (Picosecond, Picosecond) -> [Picosecond]
    $cp1Ix :: Ord Picosecond
    Ix,Typeable)

    instance TimeUnit Picosecond where
      toMicroseconds :: Picosecond -> Integer
    toMicroseconds (Picosecond x :: Integer
    x) = Integer
    x Integer -> Integer -> Integer
    forall a. Integral a => a -> a -> a
    `div` (10 Integer -> Integer -> Integer
    forall a b. (Num a, Integral b) => a -> b -> a
    ^ 6)
      fromMicroseconds :: Integer -> Picosecond
    fromMicroseconds x :: Integer
    x            = Integer -> Picosecond
    Picosecond (Integer
    x Integer -> Integer -> Integer
    forall a. Num a => a -> a -> a
    * (10 Integer -> Integer -> Integer
    forall a b. (Num a, Integral b) => a -> b -> a
    ^ 6))
    instance Show Picosecond where
      show :: Picosecond -> String
    show (Picosecond x :: Integer
    x) = Integer -> String
    forall a. Show a => a -> String
    show Integer
    x String -> ShowS
    forall a. [a] -> [a] -> [a]
    ++ "ps"
    instance Read Picosecond where
      readsPrec :: Int -> ReadS Picosecond
    readsPrec = (Integer -> Picosecond) -> String -> Int -> ReadS Picosecond
    forall a.
    (Integer -> a) -> String -> Int -> String -> [(a, String)]
    readUnit Integer -> Picosecond
    Picosecond "ps"

    --

    newtype Nanosecond  = Nanosecond  Integer
     deriving (Int -> Nanosecond
    Nanosecond -> Int
    Nanosecond -> [Nanosecond]
    Nanosecond -> Nanosecond
    Nanosecond -> Nanosecond -> [Nanosecond]
    Nanosecond -> Nanosecond -> Nanosecond -> [Nanosecond]
    (Nanosecond -> Nanosecond)
    -> (Nanosecond -> Nanosecond)
    -> (Int -> Nanosecond)
    -> (Nanosecond -> Int)
    -> (Nanosecond -> [Nanosecond])
    -> (Nanosecond -> Nanosecond -> [Nanosecond])
    -> (Nanosecond -> Nanosecond -> [Nanosecond])
    -> (Nanosecond -> Nanosecond -> Nanosecond -> [Nanosecond])
    -> Enum Nanosecond
    forall a.
    (a -> a)
    -> (a -> a)
    -> (Int -> a)
    -> (a -> Int)
    -> (a -> [a])
    -> (a -> a -> [a])
    -> (a -> a -> [a])
    -> (a -> a -> a -> [a])
    -> Enum a
    enumFromThenTo :: Nanosecond -> Nanosecond -> Nanosecond -> [Nanosecond]
    $cenumFromThenTo :: Nanosecond -> Nanosecond -> Nanosecond -> [Nanosecond]
    enumFromTo :: Nanosecond -> Nanosecond -> [Nanosecond]
    $cenumFromTo :: Nanosecond -> Nanosecond -> [Nanosecond]
    enumFromThen :: Nanosecond -> Nanosecond -> [Nanosecond]
    $cenumFromThen :: Nanosecond -> Nanosecond -> [Nanosecond]
    enumFrom :: Nanosecond -> [Nanosecond]
    $cenumFrom :: Nanosecond -> [Nanosecond]
    fromEnum :: Nanosecond -> Int
    $cfromEnum :: Nanosecond -> Int
    toEnum :: Int -> Nanosecond
    $ctoEnum :: Int -> Nanosecond
    pred :: Nanosecond -> Nanosecond
    $cpred :: Nanosecond -> Nanosecond
    succ :: Nanosecond -> Nanosecond
    $csucc :: Nanosecond -> Nanosecond
    Enum,Nanosecond -> Nanosecond -> Bool
    (Nanosecond -> Nanosecond -> Bool)
    -> (Nanosecond -> Nanosecond -> Bool) -> Eq Nanosecond
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    /= :: Nanosecond -> Nanosecond -> Bool
    $c/= :: Nanosecond -> Nanosecond -> Bool
    == :: Nanosecond -> Nanosecond -> Bool
    $c== :: Nanosecond -> Nanosecond -> Bool
    Eq,Enum Nanosecond
    Real Nanosecond
    (Real Nanosecond, Enum Nanosecond) =>
    (Nanosecond -> Nanosecond -> Nanosecond)
    -> (Nanosecond -> Nanosecond -> Nanosecond)
    -> (Nanosecond -> Nanosecond -> Nanosecond)
    -> (Nanosecond -> Nanosecond -> Nanosecond)
    -> (Nanosecond -> Nanosecond -> (Nanosecond, Nanosecond))
    -> (Nanosecond -> Nanosecond -> (Nanosecond, Nanosecond))
    -> (Nanosecond -> Integer)
    -> Integral Nanosecond
    Nanosecond -> Integer
    Nanosecond -> Nanosecond -> (Nanosecond, Nanosecond)
    Nanosecond -> Nanosecond -> Nanosecond
    forall a.
    (Real a, Enum a) =>
    (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> (a, a))
    -> (a -> a -> (a, a))
    -> (a -> Integer)
    -> Integral a
    toInteger :: Nanosecond -> Integer
    $ctoInteger :: Nanosecond -> Integer
    divMod :: Nanosecond -> Nanosecond -> (Nanosecond, Nanosecond)
    $cdivMod :: Nanosecond -> Nanosecond -> (Nanosecond, Nanosecond)
    quotRem :: Nanosecond -> Nanosecond -> (Nanosecond, Nanosecond)
    $cquotRem :: Nanosecond -> Nanosecond -> (Nanosecond, Nanosecond)
    mod :: Nanosecond -> Nanosecond -> Nanosecond
    $cmod :: Nanosecond -> Nanosecond -> Nanosecond
    div :: Nanosecond -> Nanosecond -> Nanosecond
    $cdiv :: Nanosecond -> Nanosecond -> Nanosecond
    rem :: Nanosecond -> Nanosecond -> Nanosecond
    $crem :: Nanosecond -> Nanosecond -> Nanosecond
    quot :: Nanosecond -> Nanosecond -> Nanosecond
    $cquot :: Nanosecond -> Nanosecond -> Nanosecond
    $cp2Integral :: Enum Nanosecond
    $cp1Integral :: Real Nanosecond
    Integral,Typeable Nanosecond
    Constr
    DataType
    Typeable Nanosecond =>
    (forall (c :: * -> *).
     (forall d b. Data d => c (d -> b) -> d -> c b)
     -> (forall g. g -> c g) -> Nanosecond -> c Nanosecond)
    -> (forall (c :: * -> *).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c Nanosecond)
    -> (Nanosecond -> Constr)
    -> (Nanosecond -> DataType)
    -> (forall (t :: * -> *) (c :: * -> *).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c Nanosecond))
    -> (forall (t :: * -> * -> *) (c :: * -> *).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e))
        -> Maybe (c Nanosecond))
    -> ((forall b. Data b => b -> b) -> Nanosecond -> Nanosecond)
    -> (forall r r'.
        (r -> r' -> r)
        -> r -> (forall d. Data d => d -> r') -> Nanosecond -> r)
    -> (forall r r'.
        (r' -> r -> r)
        -> r -> (forall d. Data d => d -> r') -> Nanosecond -> r)
    -> (forall u. (forall d. Data d => d -> u) -> Nanosecond -> [u])
    -> (forall u.
        Int -> (forall d. Data d => d -> u) -> Nanosecond -> u)
    -> (forall (m :: * -> *).
        Monad m =>
        (forall d. Data d => d -> m d) -> Nanosecond -> m Nanosecond)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> Nanosecond -> m Nanosecond)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> Nanosecond -> m Nanosecond)
    -> Data Nanosecond
    Nanosecond -> Constr
    Nanosecond -> DataType
    (forall b. Data b => b -> b) -> Nanosecond -> Nanosecond
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Nanosecond -> c Nanosecond
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Nanosecond
    forall a.
    Typeable a =>
    (forall (c :: * -> *).
     (forall d b. Data d => c (d -> b) -> d -> c b)
     -> (forall g. g -> c g) -> a -> c a)
    -> (forall (c :: * -> *).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c a)
    -> (a -> Constr)
    -> (a -> DataType)
    -> (forall (t :: * -> *) (c :: * -> *).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c a))
    -> (forall (t :: * -> * -> *) (c :: * -> *).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
    -> ((forall b. Data b => b -> b) -> a -> a)
    -> (forall r r'.
        (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall r r'.
        (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall u. (forall d. Data d => d -> u) -> a -> [u])
    -> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
    -> (forall (m :: * -> *).
        Monad m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> Data a
    forall u. Int -> (forall d. Data d => d -> u) -> Nanosecond -> u
    forall u. (forall d. Data d => d -> u) -> Nanosecond -> [u]
    forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Nanosecond -> r
    forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Nanosecond -> r
    forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Nanosecond -> m Nanosecond
    forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Nanosecond -> m Nanosecond
    forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Nanosecond
    forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Nanosecond -> c Nanosecond
    forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Nanosecond)
    forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Nanosecond)
    $cNanosecond :: Constr
    $tNanosecond :: DataType
    gmapMo :: (forall d. Data d => d -> m d) -> Nanosecond -> m Nanosecond
    $cgmapMo :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Nanosecond -> m Nanosecond
    gmapMp :: (forall d. Data d => d -> m d) -> Nanosecond -> m Nanosecond
    $cgmapMp :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Nanosecond -> m Nanosecond
    gmapM :: (forall d. Data d => d -> m d) -> Nanosecond -> m Nanosecond
    $cgmapM :: forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Nanosecond -> m Nanosecond
    gmapQi :: Int -> (forall d. Data d => d -> u) -> Nanosecond -> u
    $cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Nanosecond -> u
    gmapQ :: (forall d. Data d => d -> u) -> Nanosecond -> [u]
    $cgmapQ :: forall u. (forall d. Data d => d -> u) -> Nanosecond -> [u]
    gmapQr :: (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Nanosecond -> r
    $cgmapQr :: forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Nanosecond -> r
    gmapQl :: (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Nanosecond -> r
    $cgmapQl :: forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Nanosecond -> r
    gmapT :: (forall b. Data b => b -> b) -> Nanosecond -> Nanosecond
    $cgmapT :: (forall b. Data b => b -> b) -> Nanosecond -> Nanosecond
    dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Nanosecond)
    $cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Nanosecond)
    dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c Nanosecond)
    $cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Nanosecond)
    dataTypeOf :: Nanosecond -> DataType
    $cdataTypeOf :: Nanosecond -> DataType
    toConstr :: Nanosecond -> Constr
    $ctoConstr :: Nanosecond -> Constr
    gunfold :: (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Nanosecond
    $cgunfold :: forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Nanosecond
    gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Nanosecond -> c Nanosecond
    $cgfoldl :: forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Nanosecond -> c Nanosecond
    $cp1Data :: Typeable Nanosecond
    Data,Integer -> Nanosecond
    Nanosecond -> Nanosecond
    Nanosecond -> Nanosecond -> Nanosecond
    (Nanosecond -> Nanosecond -> Nanosecond)
    -> (Nanosecond -> Nanosecond -> Nanosecond)
    -> (Nanosecond -> Nanosecond -> Nanosecond)
    -> (Nanosecond -> Nanosecond)
    -> (Nanosecond -> Nanosecond)
    -> (Nanosecond -> Nanosecond)
    -> (Integer -> Nanosecond)
    -> Num Nanosecond
    forall a.
    (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a)
    -> (a -> a)
    -> (a -> a)
    -> (Integer -> a)
    -> Num a
    fromInteger :: Integer -> Nanosecond
    $cfromInteger :: Integer -> Nanosecond
    signum :: Nanosecond -> Nanosecond
    $csignum :: Nanosecond -> Nanosecond
    abs :: Nanosecond -> Nanosecond
    $cabs :: Nanosecond -> Nanosecond
    negate :: Nanosecond -> Nanosecond
    $cnegate :: Nanosecond -> Nanosecond
    * :: Nanosecond -> Nanosecond -> Nanosecond
    $c* :: Nanosecond -> Nanosecond -> Nanosecond
    - :: Nanosecond -> Nanosecond -> Nanosecond
    $c- :: Nanosecond -> Nanosecond -> Nanosecond
    + :: Nanosecond -> Nanosecond -> Nanosecond
    $c+ :: Nanosecond -> Nanosecond -> Nanosecond
    Num,Eq Nanosecond
    Eq Nanosecond =>
    (Nanosecond -> Nanosecond -> Ordering)
    -> (Nanosecond -> Nanosecond -> Bool)
    -> (Nanosecond -> Nanosecond -> Bool)
    -> (Nanosecond -> Nanosecond -> Bool)
    -> (Nanosecond -> Nanosecond -> Bool)
    -> (Nanosecond -> Nanosecond -> Nanosecond)
    -> (Nanosecond -> Nanosecond -> Nanosecond)
    -> Ord Nanosecond
    Nanosecond -> Nanosecond -> Bool
    Nanosecond -> Nanosecond -> Ordering
    Nanosecond -> Nanosecond -> Nanosecond
    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 :: Nanosecond -> Nanosecond -> Nanosecond
    $cmin :: Nanosecond -> Nanosecond -> Nanosecond
    max :: Nanosecond -> Nanosecond -> Nanosecond
    $cmax :: Nanosecond -> Nanosecond -> Nanosecond
    >= :: Nanosecond -> Nanosecond -> Bool
    $c>= :: Nanosecond -> Nanosecond -> Bool
    > :: Nanosecond -> Nanosecond -> Bool
    $c> :: Nanosecond -> Nanosecond -> Bool
    <= :: Nanosecond -> Nanosecond -> Bool
    $c<= :: Nanosecond -> Nanosecond -> Bool
    < :: Nanosecond -> Nanosecond -> Bool
    $c< :: Nanosecond -> Nanosecond -> Bool
    compare :: Nanosecond -> Nanosecond -> Ordering
    $ccompare :: Nanosecond -> Nanosecond -> Ordering
    $cp1Ord :: Eq Nanosecond
    Ord,Num Nanosecond
    Ord Nanosecond
    (Num Nanosecond, Ord Nanosecond) =>
    (Nanosecond -> Rational) -> Real Nanosecond
    Nanosecond -> Rational
    forall a. (Num a, Ord a) => (a -> Rational) -> Real a
    toRational :: Nanosecond -> Rational
    $ctoRational :: Nanosecond -> Rational
    $cp2Real :: Ord Nanosecond
    $cp1Real :: Num Nanosecond
    Real,Ord Nanosecond
    Ord Nanosecond =>
    ((Nanosecond, Nanosecond) -> [Nanosecond])
    -> ((Nanosecond, Nanosecond) -> Nanosecond -> Int)
    -> ((Nanosecond, Nanosecond) -> Nanosecond -> Int)
    -> ((Nanosecond, Nanosecond) -> Nanosecond -> Bool)
    -> ((Nanosecond, Nanosecond) -> Int)
    -> ((Nanosecond, Nanosecond) -> Int)
    -> Ix Nanosecond
    (Nanosecond, Nanosecond) -> Int
    (Nanosecond, Nanosecond) -> [Nanosecond]
    (Nanosecond, Nanosecond) -> Nanosecond -> Bool
    (Nanosecond, Nanosecond) -> Nanosecond -> Int
    forall a.
    Ord a =>
    ((a, a) -> [a])
    -> ((a, a) -> a -> Int)
    -> ((a, a) -> a -> Int)
    -> ((a, a) -> a -> Bool)
    -> ((a, a) -> Int)
    -> ((a, a) -> Int)
    -> Ix a
    unsafeRangeSize :: (Nanosecond, Nanosecond) -> Int
    $cunsafeRangeSize :: (Nanosecond, Nanosecond) -> Int
    rangeSize :: (Nanosecond, Nanosecond) -> Int
    $crangeSize :: (Nanosecond, Nanosecond) -> Int
    inRange :: (Nanosecond, Nanosecond) -> Nanosecond -> Bool
    $cinRange :: (Nanosecond, Nanosecond) -> Nanosecond -> Bool
    unsafeIndex :: (Nanosecond, Nanosecond) -> Nanosecond -> Int
    $cunsafeIndex :: (Nanosecond, Nanosecond) -> Nanosecond -> Int
    index :: (Nanosecond, Nanosecond) -> Nanosecond -> Int
    $cindex :: (Nanosecond, Nanosecond) -> Nanosecond -> Int
    range :: (Nanosecond, Nanosecond) -> [Nanosecond]
    $crange :: (Nanosecond, Nanosecond) -> [Nanosecond]
    $cp1Ix :: Ord Nanosecond
    Ix,Typeable)

    instance TimeUnit Nanosecond where
      toMicroseconds :: Nanosecond -> Integer
    toMicroseconds (Nanosecond x :: Integer
    x) = Integer
    x Integer -> Integer -> Integer
    forall a. Integral a => a -> a -> a
    `div` (10 Integer -> Integer -> Integer
    forall a b. (Num a, Integral b) => a -> b -> a
    ^ 3)
      fromMicroseconds :: Integer -> Nanosecond
    fromMicroseconds x :: Integer
    x            = Integer -> Nanosecond
    Nanosecond (Integer
    x Integer -> Integer -> Integer
    forall a. Num a => a -> a -> a
    * (10 Integer -> Integer -> Integer
    forall a b. (Num a, Integral b) => a -> b -> a
    ^ 3))
    instance Show Nanosecond where
      show :: Nanosecond -> String
    show (Nanosecond x :: Integer
    x) = Integer -> String
    forall a. Show a => a -> String
    show Integer
    x String -> ShowS
    forall a. [a] -> [a] -> [a]
    ++ "ns"
    instance Read Nanosecond where
      readsPrec :: Int -> ReadS Nanosecond
    readsPrec = (Integer -> Nanosecond) -> String -> Int -> ReadS Nanosecond
    forall a.
    (Integer -> a) -> String -> Int -> String -> [(a, String)]
    readUnit Integer -> Nanosecond
    Nanosecond "ns"

    --

    newtype Microsecond = Microsecond Integer
     deriving (Int -> Microsecond
    Microsecond -> Int
    Microsecond -> [Microsecond]
    Microsecond -> Microsecond
    Microsecond -> Microsecond -> [Microsecond]
    Microsecond -> Microsecond -> Microsecond -> [Microsecond]
    (Microsecond -> Microsecond)
    -> (Microsecond -> Microsecond)
    -> (Int -> Microsecond)
    -> (Microsecond -> Int)
    -> (Microsecond -> [Microsecond])
    -> (Microsecond -> Microsecond -> [Microsecond])
    -> (Microsecond -> Microsecond -> [Microsecond])
    -> (Microsecond -> Microsecond -> Microsecond -> [Microsecond])
    -> Enum Microsecond
    forall a.
    (a -> a)
    -> (a -> a)
    -> (Int -> a)
    -> (a -> Int)
    -> (a -> [a])
    -> (a -> a -> [a])
    -> (a -> a -> [a])
    -> (a -> a -> a -> [a])
    -> Enum a
    enumFromThenTo :: Microsecond -> Microsecond -> Microsecond -> [Microsecond]
    $cenumFromThenTo :: Microsecond -> Microsecond -> Microsecond -> [Microsecond]
    enumFromTo :: Microsecond -> Microsecond -> [Microsecond]
    $cenumFromTo :: Microsecond -> Microsecond -> [Microsecond]
    enumFromThen :: Microsecond -> Microsecond -> [Microsecond]
    $cenumFromThen :: Microsecond -> Microsecond -> [Microsecond]
    enumFrom :: Microsecond -> [Microsecond]
    $cenumFrom :: Microsecond -> [Microsecond]
    fromEnum :: Microsecond -> Int
    $cfromEnum :: Microsecond -> Int
    toEnum :: Int -> Microsecond
    $ctoEnum :: Int -> Microsecond
    pred :: Microsecond -> Microsecond
    $cpred :: Microsecond -> Microsecond
    succ :: Microsecond -> Microsecond
    $csucc :: Microsecond -> Microsecond
    Enum,Microsecond -> Microsecond -> Bool
    (Microsecond -> Microsecond -> Bool)
    -> (Microsecond -> Microsecond -> Bool) -> Eq Microsecond
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    /= :: Microsecond -> Microsecond -> Bool
    $c/= :: Microsecond -> Microsecond -> Bool
    == :: Microsecond -> Microsecond -> Bool
    $c== :: Microsecond -> Microsecond -> Bool
    Eq,Enum Microsecond
    Real Microsecond
    (Real Microsecond, Enum Microsecond) =>
    (Microsecond -> Microsecond -> Microsecond)
    -> (Microsecond -> Microsecond -> Microsecond)
    -> (Microsecond -> Microsecond -> Microsecond)
    -> (Microsecond -> Microsecond -> Microsecond)
    -> (Microsecond -> Microsecond -> (Microsecond, Microsecond))
    -> (Microsecond -> Microsecond -> (Microsecond, Microsecond))
    -> (Microsecond -> Integer)
    -> Integral Microsecond
    Microsecond -> Integer
    Microsecond -> Microsecond -> (Microsecond, Microsecond)
    Microsecond -> Microsecond -> Microsecond
    forall a.
    (Real a, Enum a) =>
    (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> (a, a))
    -> (a -> a -> (a, a))
    -> (a -> Integer)
    -> Integral a
    toInteger :: Microsecond -> Integer
    $ctoInteger :: Microsecond -> Integer
    divMod :: Microsecond -> Microsecond -> (Microsecond, Microsecond)
    $cdivMod :: Microsecond -> Microsecond -> (Microsecond, Microsecond)
    quotRem :: Microsecond -> Microsecond -> (Microsecond, Microsecond)
    $cquotRem :: Microsecond -> Microsecond -> (Microsecond, Microsecond)
    mod :: Microsecond -> Microsecond -> Microsecond
    $cmod :: Microsecond -> Microsecond -> Microsecond
    div :: Microsecond -> Microsecond -> Microsecond
    $cdiv :: Microsecond -> Microsecond -> Microsecond
    rem :: Microsecond -> Microsecond -> Microsecond
    $crem :: Microsecond -> Microsecond -> Microsecond
    quot :: Microsecond -> Microsecond -> Microsecond
    $cquot :: Microsecond -> Microsecond -> Microsecond
    $cp2Integral :: Enum Microsecond
    $cp1Integral :: Real Microsecond
    Integral,Typeable Microsecond
    Constr
    DataType
    Typeable Microsecond =>
    (forall (c :: * -> *).
     (forall d b. Data d => c (d -> b) -> d -> c b)
     -> (forall g. g -> c g) -> Microsecond -> c Microsecond)
    -> (forall (c :: * -> *).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c Microsecond)
    -> (Microsecond -> Constr)
    -> (Microsecond -> DataType)
    -> (forall (t :: * -> *) (c :: * -> *).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c Microsecond))
    -> (forall (t :: * -> * -> *) (c :: * -> *).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e))
        -> Maybe (c Microsecond))
    -> ((forall b. Data b => b -> b) -> Microsecond -> Microsecond)
    -> (forall r r'.
        (r -> r' -> r)
        -> r -> (forall d. Data d => d -> r') -> Microsecond -> r)
    -> (forall r r'.
        (r' -> r -> r)
        -> r -> (forall d. Data d => d -> r') -> Microsecond -> r)
    -> (forall u. (forall d. Data d => d -> u) -> Microsecond -> [u])
    -> (forall u.
        Int -> (forall d. Data d => d -> u) -> Microsecond -> u)
    -> (forall (m :: * -> *).
        Monad m =>
        (forall d. Data d => d -> m d) -> Microsecond -> m Microsecond)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> Microsecond -> m Microsecond)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> Microsecond -> m Microsecond)
    -> Data Microsecond
    Microsecond -> Constr
    Microsecond -> DataType
    (forall b. Data b => b -> b) -> Microsecond -> Microsecond
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Microsecond -> c Microsecond
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Microsecond
    forall a.
    Typeable a =>
    (forall (c :: * -> *).
     (forall d b. Data d => c (d -> b) -> d -> c b)
     -> (forall g. g -> c g) -> a -> c a)
    -> (forall (c :: * -> *).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c a)
    -> (a -> Constr)
    -> (a -> DataType)
    -> (forall (t :: * -> *) (c :: * -> *).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c a))
    -> (forall (t :: * -> * -> *) (c :: * -> *).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
    -> ((forall b. Data b => b -> b) -> a -> a)
    -> (forall r r'.
        (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall r r'.
        (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall u. (forall d. Data d => d -> u) -> a -> [u])
    -> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
    -> (forall (m :: * -> *).
        Monad m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> Data a
    forall u. Int -> (forall d. Data d => d -> u) -> Microsecond -> u
    forall u. (forall d. Data d => d -> u) -> Microsecond -> [u]
    forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Microsecond -> r
    forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Microsecond -> r
    forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Microsecond -> m Microsecond
    forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Microsecond -> m Microsecond
    forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Microsecond
    forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Microsecond -> c Microsecond
    forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Microsecond)
    forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c Microsecond)
    $cMicrosecond :: Constr
    $tMicrosecond :: DataType
    gmapMo :: (forall d. Data d => d -> m d) -> Microsecond -> m Microsecond
    $cgmapMo :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Microsecond -> m Microsecond
    gmapMp :: (forall d. Data d => d -> m d) -> Microsecond -> m Microsecond
    $cgmapMp :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Microsecond -> m Microsecond
    gmapM :: (forall d. Data d => d -> m d) -> Microsecond -> m Microsecond
    $cgmapM :: forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Microsecond -> m Microsecond
    gmapQi :: Int -> (forall d. Data d => d -> u) -> Microsecond -> u
    $cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Microsecond -> u
    gmapQ :: (forall d. Data d => d -> u) -> Microsecond -> [u]
    $cgmapQ :: forall u. (forall d. Data d => d -> u) -> Microsecond -> [u]
    gmapQr :: (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Microsecond -> r
    $cgmapQr :: forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Microsecond -> r
    gmapQl :: (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Microsecond -> r
    $cgmapQl :: forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Microsecond -> r
    gmapT :: (forall b. Data b => b -> b) -> Microsecond -> Microsecond
    $cgmapT :: (forall b. Data b => b -> b) -> Microsecond -> Microsecond
    dataCast2 :: (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c Microsecond)
    $cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c Microsecond)
    dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c Microsecond)
    $cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Microsecond)
    dataTypeOf :: Microsecond -> DataType
    $cdataTypeOf :: Microsecond -> DataType
    toConstr :: Microsecond -> Constr
    $ctoConstr :: Microsecond -> Constr
    gunfold :: (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Microsecond
    $cgunfold :: forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Microsecond
    gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Microsecond -> c Microsecond
    $cgfoldl :: forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Microsecond -> c Microsecond
    $cp1Data :: Typeable Microsecond
    Data,Integer -> Microsecond
    Microsecond -> Microsecond
    Microsecond -> Microsecond -> Microsecond
    (Microsecond -> Microsecond -> Microsecond)
    -> (Microsecond -> Microsecond -> Microsecond)
    -> (Microsecond -> Microsecond -> Microsecond)
    -> (Microsecond -> Microsecond)
    -> (Microsecond -> Microsecond)
    -> (Microsecond -> Microsecond)
    -> (Integer -> Microsecond)
    -> Num Microsecond
    forall a.
    (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a)
    -> (a -> a)
    -> (a -> a)
    -> (Integer -> a)
    -> Num a
    fromInteger :: Integer -> Microsecond
    $cfromInteger :: Integer -> Microsecond
    signum :: Microsecond -> Microsecond
    $csignum :: Microsecond -> Microsecond
    abs :: Microsecond -> Microsecond
    $cabs :: Microsecond -> Microsecond
    negate :: Microsecond -> Microsecond
    $cnegate :: Microsecond -> Microsecond
    * :: Microsecond -> Microsecond -> Microsecond
    $c* :: Microsecond -> Microsecond -> Microsecond
    - :: Microsecond -> Microsecond -> Microsecond
    $c- :: Microsecond -> Microsecond -> Microsecond
    + :: Microsecond -> Microsecond -> Microsecond
    $c+ :: Microsecond -> Microsecond -> Microsecond
    Num,Eq Microsecond
    Eq Microsecond =>
    (Microsecond -> Microsecond -> Ordering)
    -> (Microsecond -> Microsecond -> Bool)
    -> (Microsecond -> Microsecond -> Bool)
    -> (Microsecond -> Microsecond -> Bool)
    -> (Microsecond -> Microsecond -> Bool)
    -> (Microsecond -> Microsecond -> Microsecond)
    -> (Microsecond -> Microsecond -> Microsecond)
    -> Ord Microsecond
    Microsecond -> Microsecond -> Bool
    Microsecond -> Microsecond -> Ordering
    Microsecond -> Microsecond -> Microsecond
    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 :: Microsecond -> Microsecond -> Microsecond
    $cmin :: Microsecond -> Microsecond -> Microsecond
    max :: Microsecond -> Microsecond -> Microsecond
    $cmax :: Microsecond -> Microsecond -> Microsecond
    >= :: Microsecond -> Microsecond -> Bool
    $c>= :: Microsecond -> Microsecond -> Bool
    > :: Microsecond -> Microsecond -> Bool
    $c> :: Microsecond -> Microsecond -> Bool
    <= :: Microsecond -> Microsecond -> Bool
    $c<= :: Microsecond -> Microsecond -> Bool
    < :: Microsecond -> Microsecond -> Bool
    $c< :: Microsecond -> Microsecond -> Bool
    compare :: Microsecond -> Microsecond -> Ordering
    $ccompare :: Microsecond -> Microsecond -> Ordering
    $cp1Ord :: Eq Microsecond
    Ord,Num Microsecond
    Ord Microsecond
    (Num Microsecond, Ord Microsecond) =>
    (Microsecond -> Rational) -> Real Microsecond
    Microsecond -> Rational
    forall a. (Num a, Ord a) => (a -> Rational) -> Real a
    toRational :: Microsecond -> Rational
    $ctoRational :: Microsecond -> Rational
    $cp2Real :: Ord Microsecond
    $cp1Real :: Num Microsecond
    Real,Ord Microsecond
    Ord Microsecond =>
    ((Microsecond, Microsecond) -> [Microsecond])
    -> ((Microsecond, Microsecond) -> Microsecond -> Int)
    -> ((Microsecond, Microsecond) -> Microsecond -> Int)
    -> ((Microsecond, Microsecond) -> Microsecond -> Bool)
    -> ((Microsecond, Microsecond) -> Int)
    -> ((Microsecond, Microsecond) -> Int)
    -> Ix Microsecond
    (Microsecond, Microsecond) -> Int
    (Microsecond, Microsecond) -> [Microsecond]
    (Microsecond, Microsecond) -> Microsecond -> Bool
    (Microsecond, Microsecond) -> Microsecond -> Int
    forall a.
    Ord a =>
    ((a, a) -> [a])
    -> ((a, a) -> a -> Int)
    -> ((a, a) -> a -> Int)
    -> ((a, a) -> a -> Bool)
    -> ((a, a) -> Int)
    -> ((a, a) -> Int)
    -> Ix a
    unsafeRangeSize :: (Microsecond, Microsecond) -> Int
    $cunsafeRangeSize :: (Microsecond, Microsecond) -> Int
    rangeSize :: (Microsecond, Microsecond) -> Int
    $crangeSize :: (Microsecond, Microsecond) -> Int
    inRange :: (Microsecond, Microsecond) -> Microsecond -> Bool
    $cinRange :: (Microsecond, Microsecond) -> Microsecond -> Bool
    unsafeIndex :: (Microsecond, Microsecond) -> Microsecond -> Int
    $cunsafeIndex :: (Microsecond, Microsecond) -> Microsecond -> Int
    index :: (Microsecond, Microsecond) -> Microsecond -> Int
    $cindex :: (Microsecond, Microsecond) -> Microsecond -> Int
    range :: (Microsecond, Microsecond) -> [Microsecond]
    $crange :: (Microsecond, Microsecond) -> [Microsecond]
    $cp1Ix :: Ord Microsecond
    Ix,Typeable)

    instance TimeUnit Microsecond where
      toMicroseconds :: Microsecond -> Integer
    toMicroseconds (Microsecond x :: Integer
    x) = Integer
    x
      fromMicroseconds :: Integer -> Microsecond
    fromMicroseconds x :: Integer
    x             = Integer -> Microsecond
    Microsecond Integer
    x
    instance Show Microsecond where
      show :: Microsecond -> String
    show (Microsecond x :: Integer
    x) = Integer -> String
    forall a. Show a => a -> String
    show Integer
    x String -> ShowS
    forall a. [a] -> [a] -> [a]
    ++ "µs"
    instance Read Microsecond where
      readsPrec :: Int -> ReadS Microsecond
    readsPrec = (Integer -> Microsecond) -> String -> Int -> ReadS Microsecond
    forall a.
    (Integer -> a) -> String -> Int -> String -> [(a, String)]
    readUnit Integer -> Microsecond
    Microsecond "µs"

    --

    newtype Millisecond  = Millisecond  Integer
     deriving (Int -> Millisecond
    Millisecond -> Int
    Millisecond -> [Millisecond]
    Millisecond -> Millisecond
    Millisecond -> Millisecond -> [Millisecond]
    Millisecond -> Millisecond -> Millisecond -> [Millisecond]
    (Millisecond -> Millisecond)
    -> (Millisecond -> Millisecond)
    -> (Int -> Millisecond)
    -> (Millisecond -> Int)
    -> (Millisecond -> [Millisecond])
    -> (Millisecond -> Millisecond -> [Millisecond])
    -> (Millisecond -> Millisecond -> [Millisecond])
    -> (Millisecond -> Millisecond -> Millisecond -> [Millisecond])
    -> Enum Millisecond
    forall a.
    (a -> a)
    -> (a -> a)
    -> (Int -> a)
    -> (a -> Int)
    -> (a -> [a])
    -> (a -> a -> [a])
    -> (a -> a -> [a])
    -> (a -> a -> a -> [a])
    -> Enum a
    enumFromThenTo :: Millisecond -> Millisecond -> Millisecond -> [Millisecond]
    $cenumFromThenTo :: Millisecond -> Millisecond -> Millisecond -> [Millisecond]
    enumFromTo :: Millisecond -> Millisecond -> [Millisecond]
    $cenumFromTo :: Millisecond -> Millisecond -> [Millisecond]
    enumFromThen :: Millisecond -> Millisecond -> [Millisecond]
    $cenumFromThen :: Millisecond -> Millisecond -> [Millisecond]
    enumFrom :: Millisecond -> [Millisecond]
    $cenumFrom :: Millisecond -> [Millisecond]
    fromEnum :: Millisecond -> Int
    $cfromEnum :: Millisecond -> Int
    toEnum :: Int -> Millisecond
    $ctoEnum :: Int -> Millisecond
    pred :: Millisecond -> Millisecond
    $cpred :: Millisecond -> Millisecond
    succ :: Millisecond -> Millisecond
    $csucc :: Millisecond -> Millisecond
    Enum,Millisecond -> Millisecond -> Bool
    (Millisecond -> Millisecond -> Bool)
    -> (Millisecond -> Millisecond -> Bool) -> Eq Millisecond
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    /= :: Millisecond -> Millisecond -> Bool
    $c/= :: Millisecond -> Millisecond -> Bool
    == :: Millisecond -> Millisecond -> Bool
    $c== :: Millisecond -> Millisecond -> Bool
    Eq,Enum Millisecond
    Real Millisecond
    (Real Millisecond, Enum Millisecond) =>
    (Millisecond -> Millisecond -> Millisecond)
    -> (Millisecond -> Millisecond -> Millisecond)
    -> (Millisecond -> Millisecond -> Millisecond)
    -> (Millisecond -> Millisecond -> Millisecond)
    -> (Millisecond -> Millisecond -> (Millisecond, Millisecond))
    -> (Millisecond -> Millisecond -> (Millisecond, Millisecond))
    -> (Millisecond -> Integer)
    -> Integral Millisecond
    Millisecond -> Integer
    Millisecond -> Millisecond -> (Millisecond, Millisecond)
    Millisecond -> Millisecond -> Millisecond
    forall a.
    (Real a, Enum a) =>
    (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> (a, a))
    -> (a -> a -> (a, a))
    -> (a -> Integer)
    -> Integral a
    toInteger :: Millisecond -> Integer
    $ctoInteger :: Millisecond -> Integer
    divMod :: Millisecond -> Millisecond -> (Millisecond, Millisecond)
    $cdivMod :: Millisecond -> Millisecond -> (Millisecond, Millisecond)
    quotRem :: Millisecond -> Millisecond -> (Millisecond, Millisecond)
    $cquotRem :: Millisecond -> Millisecond -> (Millisecond, Millisecond)
    mod :: Millisecond -> Millisecond -> Millisecond
    $cmod :: Millisecond -> Millisecond -> Millisecond
    div :: Millisecond -> Millisecond -> Millisecond
    $cdiv :: Millisecond -> Millisecond -> Millisecond
    rem :: Millisecond -> Millisecond -> Millisecond
    $crem :: Millisecond -> Millisecond -> Millisecond
    quot :: Millisecond -> Millisecond -> Millisecond
    $cquot :: Millisecond -> Millisecond -> Millisecond
    $cp2Integral :: Enum Millisecond
    $cp1Integral :: Real Millisecond
    Integral,Typeable Millisecond
    Constr
    DataType
    Typeable Millisecond =>
    (forall (c :: * -> *).
     (forall d b. Data d => c (d -> b) -> d -> c b)
     -> (forall g. g -> c g) -> Millisecond -> c Millisecond)
    -> (forall (c :: * -> *).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c Millisecond)
    -> (Millisecond -> Constr)
    -> (Millisecond -> DataType)
    -> (forall (t :: * -> *) (c :: * -> *).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c Millisecond))
    -> (forall (t :: * -> * -> *) (c :: * -> *).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e))
        -> Maybe (c Millisecond))
    -> ((forall b. Data b => b -> b) -> Millisecond -> Millisecond)
    -> (forall r r'.
        (r -> r' -> r)
        -> r -> (forall d. Data d => d -> r') -> Millisecond -> r)
    -> (forall r r'.
        (r' -> r -> r)
        -> r -> (forall d. Data d => d -> r') -> Millisecond -> r)
    -> (forall u. (forall d. Data d => d -> u) -> Millisecond -> [u])
    -> (forall u.
        Int -> (forall d. Data d => d -> u) -> Millisecond -> u)
    -> (forall (m :: * -> *).
        Monad m =>
        (forall d. Data d => d -> m d) -> Millisecond -> m Millisecond)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> Millisecond -> m Millisecond)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> Millisecond -> m Millisecond)
    -> Data Millisecond
    Millisecond -> Constr
    Millisecond -> DataType
    (forall b. Data b => b -> b) -> Millisecond -> Millisecond
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Millisecond -> c Millisecond
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Millisecond
    forall a.
    Typeable a =>
    (forall (c :: * -> *).
     (forall d b. Data d => c (d -> b) -> d -> c b)
     -> (forall g. g -> c g) -> a -> c a)
    -> (forall (c :: * -> *).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c a)
    -> (a -> Constr)
    -> (a -> DataType)
    -> (forall (t :: * -> *) (c :: * -> *).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c a))
    -> (forall (t :: * -> * -> *) (c :: * -> *).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
    -> ((forall b. Data b => b -> b) -> a -> a)
    -> (forall r r'.
        (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall r r'.
        (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall u. (forall d. Data d => d -> u) -> a -> [u])
    -> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
    -> (forall (m :: * -> *).
        Monad m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> Data a
    forall u. Int -> (forall d. Data d => d -> u) -> Millisecond -> u
    forall u. (forall d. Data d => d -> u) -> Millisecond -> [u]
    forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Millisecond -> r
    forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Millisecond -> r
    forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Millisecond -> m Millisecond
    forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Millisecond -> m Millisecond
    forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Millisecond
    forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Millisecond -> c Millisecond
    forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Millisecond)
    forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c Millisecond)
    $cMillisecond :: Constr
    $tMillisecond :: DataType
    gmapMo :: (forall d. Data d => d -> m d) -> Millisecond -> m Millisecond
    $cgmapMo :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Millisecond -> m Millisecond
    gmapMp :: (forall d. Data d => d -> m d) -> Millisecond -> m Millisecond
    $cgmapMp :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Millisecond -> m Millisecond
    gmapM :: (forall d. Data d => d -> m d) -> Millisecond -> m Millisecond
    $cgmapM :: forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Millisecond -> m Millisecond
    gmapQi :: Int -> (forall d. Data d => d -> u) -> Millisecond -> u
    $cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Millisecond -> u
    gmapQ :: (forall d. Data d => d -> u) -> Millisecond -> [u]
    $cgmapQ :: forall u. (forall d. Data d => d -> u) -> Millisecond -> [u]
    gmapQr :: (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Millisecond -> r
    $cgmapQr :: forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Millisecond -> r
    gmapQl :: (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Millisecond -> r
    $cgmapQl :: forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Millisecond -> r
    gmapT :: (forall b. Data b => b -> b) -> Millisecond -> Millisecond
    $cgmapT :: (forall b. Data b => b -> b) -> Millisecond -> Millisecond
    dataCast2 :: (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c Millisecond)
    $cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c Millisecond)
    dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c Millisecond)
    $cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Millisecond)
    dataTypeOf :: Millisecond -> DataType
    $cdataTypeOf :: Millisecond -> DataType
    toConstr :: Millisecond -> Constr
    $ctoConstr :: Millisecond -> Constr
    gunfold :: (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Millisecond
    $cgunfold :: forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Millisecond
    gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Millisecond -> c Millisecond
    $cgfoldl :: forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Millisecond -> c Millisecond
    $cp1Data :: Typeable Millisecond
    Data,Integer -> Millisecond
    Millisecond -> Millisecond
    Millisecond -> Millisecond -> Millisecond
    (Millisecond -> Millisecond -> Millisecond)
    -> (Millisecond -> Millisecond -> Millisecond)
    -> (Millisecond -> Millisecond -> Millisecond)
    -> (Millisecond -> Millisecond)
    -> (Millisecond -> Millisecond)
    -> (Millisecond -> Millisecond)
    -> (Integer -> Millisecond)
    -> Num Millisecond
    forall a.
    (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a)
    -> (a -> a)
    -> (a -> a)
    -> (Integer -> a)
    -> Num a
    fromInteger :: Integer -> Millisecond
    $cfromInteger :: Integer -> Millisecond
    signum :: Millisecond -> Millisecond
    $csignum :: Millisecond -> Millisecond
    abs :: Millisecond -> Millisecond
    $cabs :: Millisecond -> Millisecond
    negate :: Millisecond -> Millisecond
    $cnegate :: Millisecond -> Millisecond
    * :: Millisecond -> Millisecond -> Millisecond
    $c* :: Millisecond -> Millisecond -> Millisecond
    - :: Millisecond -> Millisecond -> Millisecond
    $c- :: Millisecond -> Millisecond -> Millisecond
    + :: Millisecond -> Millisecond -> Millisecond
    $c+ :: Millisecond -> Millisecond -> Millisecond
    Num,Eq Millisecond
    Eq Millisecond =>
    (Millisecond -> Millisecond -> Ordering)
    -> (Millisecond -> Millisecond -> Bool)
    -> (Millisecond -> Millisecond -> Bool)
    -> (Millisecond -> Millisecond -> Bool)
    -> (Millisecond -> Millisecond -> Bool)
    -> (Millisecond -> Millisecond -> Millisecond)
    -> (Millisecond -> Millisecond -> Millisecond)
    -> Ord Millisecond
    Millisecond -> Millisecond -> Bool
    Millisecond -> Millisecond -> Ordering
    Millisecond -> Millisecond -> Millisecond
    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 :: Millisecond -> Millisecond -> Millisecond
    $cmin :: Millisecond -> Millisecond -> Millisecond
    max :: Millisecond -> Millisecond -> Millisecond
    $cmax :: Millisecond -> Millisecond -> Millisecond
    >= :: Millisecond -> Millisecond -> Bool
    $c>= :: Millisecond -> Millisecond -> Bool
    > :: Millisecond -> Millisecond -> Bool
    $c> :: Millisecond -> Millisecond -> Bool
    <= :: Millisecond -> Millisecond -> Bool
    $c<= :: Millisecond -> Millisecond -> Bool
    < :: Millisecond -> Millisecond -> Bool
    $c< :: Millisecond -> Millisecond -> Bool
    compare :: Millisecond -> Millisecond -> Ordering
    $ccompare :: Millisecond -> Millisecond -> Ordering
    $cp1Ord :: Eq Millisecond
    Ord,Num Millisecond
    Ord Millisecond
    (Num Millisecond, Ord Millisecond) =>
    (Millisecond -> Rational) -> Real Millisecond
    Millisecond -> Rational
    forall a. (Num a, Ord a) => (a -> Rational) -> Real a
    toRational :: Millisecond -> Rational
    $ctoRational :: Millisecond -> Rational
    $cp2Real :: Ord Millisecond
    $cp1Real :: Num Millisecond
    Real,Ord Millisecond
    Ord Millisecond =>
    ((Millisecond, Millisecond) -> [Millisecond])
    -> ((Millisecond, Millisecond) -> Millisecond -> Int)
    -> ((Millisecond, Millisecond) -> Millisecond -> Int)
    -> ((Millisecond, Millisecond) -> Millisecond -> Bool)
    -> ((Millisecond, Millisecond) -> Int)
    -> ((Millisecond, Millisecond) -> Int)
    -> Ix Millisecond
    (Millisecond, Millisecond) -> Int
    (Millisecond, Millisecond) -> [Millisecond]
    (Millisecond, Millisecond) -> Millisecond -> Bool
    (Millisecond, Millisecond) -> Millisecond -> Int
    forall a.
    Ord a =>
    ((a, a) -> [a])
    -> ((a, a) -> a -> Int)
    -> ((a, a) -> a -> Int)
    -> ((a, a) -> a -> Bool)
    -> ((a, a) -> Int)
    -> ((a, a) -> Int)
    -> Ix a
    unsafeRangeSize :: (Millisecond, Millisecond) -> Int
    $cunsafeRangeSize :: (Millisecond, Millisecond) -> Int
    rangeSize :: (Millisecond, Millisecond) -> Int
    $crangeSize :: (Millisecond, Millisecond) -> Int
    inRange :: (Millisecond, Millisecond) -> Millisecond -> Bool
    $cinRange :: (Millisecond, Millisecond) -> Millisecond -> Bool
    unsafeIndex :: (Millisecond, Millisecond) -> Millisecond -> Int
    $cunsafeIndex :: (Millisecond, Millisecond) -> Millisecond -> Int
    index :: (Millisecond, Millisecond) -> Millisecond -> Int
    $cindex :: (Millisecond, Millisecond) -> Millisecond -> Int
    range :: (Millisecond, Millisecond) -> [Millisecond]
    $crange :: (Millisecond, Millisecond) -> [Millisecond]
    $cp1Ix :: Ord Millisecond
    Ix,Typeable)

    instance TimeUnit Millisecond where
      toMicroseconds :: Millisecond -> Integer
    toMicroseconds (Millisecond x :: Integer
    x) = Integer
    x Integer -> Integer -> Integer
    forall a. Num a => a -> a -> a
    * (10 Integer -> Integer -> Integer
    forall a b. (Num a, Integral b) => a -> b -> a
    ^ 3)
      fromMicroseconds :: Integer -> Millisecond
    fromMicroseconds x :: Integer
    x             = Integer -> Millisecond
    Millisecond (Integer
    x Integer -> Integer -> Integer
    forall a. Integral a => a -> a -> a
    `div` (10 Integer -> Integer -> Integer
    forall a b. (Num a, Integral b) => a -> b -> a
    ^ 3))
    instance Show Millisecond where
      show :: Millisecond -> String
    show (Millisecond x :: Integer
    x) = Integer -> String
    forall a. Show a => a -> String
    show Integer
    x String -> ShowS
    forall a. [a] -> [a] -> [a]
    ++ "ms"
    instance Read Millisecond where
      readsPrec :: Int -> ReadS Millisecond
    readsPrec = (Integer -> Millisecond) -> String -> Int -> ReadS Millisecond
    forall a.
    (Integer -> a) -> String -> Int -> String -> [(a, String)]
    readUnit Integer -> Millisecond
    Millisecond "ms"

    --

    newtype Second      = Second      Integer
     deriving (Int -> Second
    Second -> Int
    Second -> [Second]
    Second -> Second
    Second -> Second -> [Second]
    Second -> Second -> Second -> [Second]
    (Second -> Second)
    -> (Second -> Second)
    -> (Int -> Second)
    -> (Second -> Int)
    -> (Second -> [Second])
    -> (Second -> Second -> [Second])
    -> (Second -> Second -> [Second])
    -> (Second -> Second -> Second -> [Second])
    -> Enum Second
    forall a.
    (a -> a)
    -> (a -> a)
    -> (Int -> a)
    -> (a -> Int)
    -> (a -> [a])
    -> (a -> a -> [a])
    -> (a -> a -> [a])
    -> (a -> a -> a -> [a])
    -> Enum a
    enumFromThenTo :: Second -> Second -> Second -> [Second]
    $cenumFromThenTo :: Second -> Second -> Second -> [Second]
    enumFromTo :: Second -> Second -> [Second]
    $cenumFromTo :: Second -> Second -> [Second]
    enumFromThen :: Second -> Second -> [Second]
    $cenumFromThen :: Second -> Second -> [Second]
    enumFrom :: Second -> [Second]
    $cenumFrom :: Second -> [Second]
    fromEnum :: Second -> Int
    $cfromEnum :: Second -> Int
    toEnum :: Int -> Second
    $ctoEnum :: Int -> Second
    pred :: Second -> Second
    $cpred :: Second -> Second
    succ :: Second -> Second
    $csucc :: Second -> Second
    Enum,Second -> Second -> Bool
    (Second -> Second -> Bool)
    -> (Second -> Second -> Bool) -> Eq Second
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    /= :: Second -> Second -> Bool
    $c/= :: Second -> Second -> Bool
    == :: Second -> Second -> Bool
    $c== :: Second -> Second -> Bool
    Eq,Enum Second
    Real Second
    (Real Second, Enum Second) =>
    (Second -> Second -> Second)
    -> (Second -> Second -> Second)
    -> (Second -> Second -> Second)
    -> (Second -> Second -> Second)
    -> (Second -> Second -> (Second, Second))
    -> (Second -> Second -> (Second, Second))
    -> (Second -> Integer)
    -> Integral Second
    Second -> Integer
    Second -> Second -> (Second, Second)
    Second -> Second -> Second
    forall a.
    (Real a, Enum a) =>
    (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> (a, a))
    -> (a -> a -> (a, a))
    -> (a -> Integer)
    -> Integral a
    toInteger :: Second -> Integer
    $ctoInteger :: Second -> Integer
    divMod :: Second -> Second -> (Second, Second)
    $cdivMod :: Second -> Second -> (Second, Second)
    quotRem :: Second -> Second -> (Second, Second)
    $cquotRem :: Second -> Second -> (Second, Second)
    mod :: Second -> Second -> Second
    $cmod :: Second -> Second -> Second
    div :: Second -> Second -> Second
    $cdiv :: Second -> Second -> Second
    rem :: Second -> Second -> Second
    $crem :: Second -> Second -> Second
    quot :: Second -> Second -> Second
    $cquot :: Second -> Second -> Second
    $cp2Integral :: Enum Second
    $cp1Integral :: Real Second
    Integral,Typeable Second
    Constr
    DataType
    Typeable Second =>
    (forall (c :: * -> *).
     (forall d b. Data d => c (d -> b) -> d -> c b)
     -> (forall g. g -> c g) -> Second -> c Second)
    -> (forall (c :: * -> *).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c Second)
    -> (Second -> Constr)
    -> (Second -> DataType)
    -> (forall (t :: * -> *) (c :: * -> *).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c Second))
    -> (forall (t :: * -> * -> *) (c :: * -> *).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Second))
    -> ((forall b. Data b => b -> b) -> Second -> Second)
    -> (forall r r'.
        (r -> r' -> r)
        -> r -> (forall d. Data d => d -> r') -> Second -> r)
    -> (forall r r'.
        (r' -> r -> r)
        -> r -> (forall d. Data d => d -> r') -> Second -> r)
    -> (forall u. (forall d. Data d => d -> u) -> Second -> [u])
    -> (forall u. Int -> (forall d. Data d => d -> u) -> Second -> u)
    -> (forall (m :: * -> *).
        Monad m =>
        (forall d. Data d => d -> m d) -> Second -> m Second)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> Second -> m Second)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> Second -> m Second)
    -> Data Second
    Second -> Constr
    Second -> DataType
    (forall b. Data b => b -> b) -> Second -> Second
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Second -> c Second
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Second
    forall a.
    Typeable a =>
    (forall (c :: * -> *).
     (forall d b. Data d => c (d -> b) -> d -> c b)
     -> (forall g. g -> c g) -> a -> c a)
    -> (forall (c :: * -> *).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c a)
    -> (a -> Constr)
    -> (a -> DataType)
    -> (forall (t :: * -> *) (c :: * -> *).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c a))
    -> (forall (t :: * -> * -> *) (c :: * -> *).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
    -> ((forall b. Data b => b -> b) -> a -> a)
    -> (forall r r'.
        (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall r r'.
        (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall u. (forall d. Data d => d -> u) -> a -> [u])
    -> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
    -> (forall (m :: * -> *).
        Monad m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> Data a
    forall u. Int -> (forall d. Data d => d -> u) -> Second -> u
    forall u. (forall d. Data d => d -> u) -> Second -> [u]
    forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Second -> r
    forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Second -> r
    forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Second -> m Second
    forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Second -> m Second
    forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Second
    forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Second -> c Second
    forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Second)
    forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Second)
    $cSecond :: Constr
    $tSecond :: DataType
    gmapMo :: (forall d. Data d => d -> m d) -> Second -> m Second
    $cgmapMo :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Second -> m Second
    gmapMp :: (forall d. Data d => d -> m d) -> Second -> m Second
    $cgmapMp :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Second -> m Second
    gmapM :: (forall d. Data d => d -> m d) -> Second -> m Second
    $cgmapM :: forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Second -> m Second
    gmapQi :: Int -> (forall d. Data d => d -> u) -> Second -> u
    $cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Second -> u
    gmapQ :: (forall d. Data d => d -> u) -> Second -> [u]
    $cgmapQ :: forall u. (forall d. Data d => d -> u) -> Second -> [u]
    gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Second -> r
    $cgmapQr :: forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Second -> r
    gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Second -> r
    $cgmapQl :: forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Second -> r
    gmapT :: (forall b. Data b => b -> b) -> Second -> Second
    $cgmapT :: (forall b. Data b => b -> b) -> Second -> Second
    dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Second)
    $cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Second)
    dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c Second)
    $cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Second)
    dataTypeOf :: Second -> DataType
    $cdataTypeOf :: Second -> DataType
    toConstr :: Second -> Constr
    $ctoConstr :: Second -> Constr
    gunfold :: (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Second
    $cgunfold :: forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Second
    gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Second -> c Second
    $cgfoldl :: forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Second -> c Second
    $cp1Data :: Typeable Second
    Data,Integer -> Second
    Second -> Second
    Second -> Second -> Second
    (Second -> Second -> Second)
    -> (Second -> Second -> Second)
    -> (Second -> Second -> Second)
    -> (Second -> Second)
    -> (Second -> Second)
    -> (Second -> Second)
    -> (Integer -> Second)
    -> Num Second
    forall a.
    (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a)
    -> (a -> a)
    -> (a -> a)
    -> (Integer -> a)
    -> Num a
    fromInteger :: Integer -> Second
    $cfromInteger :: Integer -> Second
    signum :: Second -> Second
    $csignum :: Second -> Second
    abs :: Second -> Second
    $cabs :: Second -> Second
    negate :: Second -> Second
    $cnegate :: Second -> Second
    * :: Second -> Second -> Second
    $c* :: Second -> Second -> Second
    - :: Second -> Second -> Second
    $c- :: Second -> Second -> Second
    + :: Second -> Second -> Second
    $c+ :: Second -> Second -> Second
    Num,Eq Second
    Eq Second =>
    (Second -> Second -> Ordering)
    -> (Second -> Second -> Bool)
    -> (Second -> Second -> Bool)
    -> (Second -> Second -> Bool)
    -> (Second -> Second -> Bool)
    -> (Second -> Second -> Second)
    -> (Second -> Second -> Second)
    -> Ord Second
    Second -> Second -> Bool
    Second -> Second -> Ordering
    Second -> Second -> Second
    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 :: Second -> Second -> Second
    $cmin :: Second -> Second -> Second
    max :: Second -> Second -> Second
    $cmax :: Second -> Second -> Second
    >= :: Second -> Second -> Bool
    $c>= :: Second -> Second -> Bool
    > :: Second -> Second -> Bool
    $c> :: Second -> Second -> Bool
    <= :: Second -> Second -> Bool
    $c<= :: Second -> Second -> Bool
    < :: Second -> Second -> Bool
    $c< :: Second -> Second -> Bool
    compare :: Second -> Second -> Ordering
    $ccompare :: Second -> Second -> Ordering
    $cp1Ord :: Eq Second
    Ord,Num Second
    Ord Second
    (Num Second, Ord Second) => (Second -> Rational) -> Real Second
    Second -> Rational
    forall a. (Num a, Ord a) => (a -> Rational) -> Real a
    toRational :: Second -> Rational
    $ctoRational :: Second -> Rational
    $cp2Real :: Ord Second
    $cp1Real :: Num Second
    Real,Ord Second
    Ord Second =>
    ((Second, Second) -> [Second])
    -> ((Second, Second) -> Second -> Int)
    -> ((Second, Second) -> Second -> Int)
    -> ((Second, Second) -> Second -> Bool)
    -> ((Second, Second) -> Int)
    -> ((Second, Second) -> Int)
    -> Ix Second
    (Second, Second) -> Int
    (Second, Second) -> [Second]
    (Second, Second) -> Second -> Bool
    (Second, Second) -> Second -> Int
    forall a.
    Ord a =>
    ((a, a) -> [a])
    -> ((a, a) -> a -> Int)
    -> ((a, a) -> a -> Int)
    -> ((a, a) -> a -> Bool)
    -> ((a, a) -> Int)
    -> ((a, a) -> Int)
    -> Ix a
    unsafeRangeSize :: (Second, Second) -> Int
    $cunsafeRangeSize :: (Second, Second) -> Int
    rangeSize :: (Second, Second) -> Int
    $crangeSize :: (Second, Second) -> Int
    inRange :: (Second, Second) -> Second -> Bool
    $cinRange :: (Second, Second) -> Second -> Bool
    unsafeIndex :: (Second, Second) -> Second -> Int
    $cunsafeIndex :: (Second, Second) -> Second -> Int
    index :: (Second, Second) -> Second -> Int
    $cindex :: (Second, Second) -> Second -> Int
    range :: (Second, Second) -> [Second]
    $crange :: (Second, Second) -> [Second]
    $cp1Ix :: Ord Second
    Ix,Typeable)

    instance TimeUnit Second where
      toMicroseconds :: Second -> Integer
    toMicroseconds (Second x :: Integer
    x) = Integer
    x Integer -> Integer -> Integer
    forall a. Num a => a -> a -> a
    * (10 Integer -> Integer -> Integer
    forall a b. (Num a, Integral b) => a -> b -> a
    ^ 6)
      fromMicroseconds :: Integer -> Second
    fromMicroseconds x :: Integer
    x        = Integer -> Second
    Second (Integer
    x Integer -> Integer -> Integer
    forall a. Integral a => a -> a -> a
    `div` (10 Integer -> Integer -> Integer
    forall a b. (Num a, Integral b) => a -> b -> a
    ^ 6))
    instance Show Second where
      show :: Second -> String
    show (Second x :: Integer
    x) = Integer -> String
    forall a. Show a => a -> String
    show Integer
    x String -> ShowS
    forall a. [a] -> [a] -> [a]
    ++ "s"
    instance Read Second where
      readsPrec :: Int -> ReadS Second
    readsPrec = (Integer -> Second) -> String -> Int -> ReadS Second
    forall a.
    (Integer -> a) -> String -> Int -> String -> [(a, String)]
    readUnit Integer -> Second
    Second "s"

    --

    newtype Minute      = Minute      Integer
     deriving (Int -> Minute
    Minute -> Int
    Minute -> [Minute]
    Minute -> Minute
    Minute -> Minute -> [Minute]
    Minute -> Minute -> Minute -> [Minute]
    (Minute -> Minute)
    -> (Minute -> Minute)
    -> (Int -> Minute)
    -> (Minute -> Int)
    -> (Minute -> [Minute])
    -> (Minute -> Minute -> [Minute])
    -> (Minute -> Minute -> [Minute])
    -> (Minute -> Minute -> Minute -> [Minute])
    -> Enum Minute
    forall a.
    (a -> a)
    -> (a -> a)
    -> (Int -> a)
    -> (a -> Int)
    -> (a -> [a])
    -> (a -> a -> [a])
    -> (a -> a -> [a])
    -> (a -> a -> a -> [a])
    -> Enum a
    enumFromThenTo :: Minute -> Minute -> Minute -> [Minute]
    $cenumFromThenTo :: Minute -> Minute -> Minute -> [Minute]
    enumFromTo :: Minute -> Minute -> [Minute]
    $cenumFromTo :: Minute -> Minute -> [Minute]
    enumFromThen :: Minute -> Minute -> [Minute]
    $cenumFromThen :: Minute -> Minute -> [Minute]
    enumFrom :: Minute -> [Minute]
    $cenumFrom :: Minute -> [Minute]
    fromEnum :: Minute -> Int
    $cfromEnum :: Minute -> Int
    toEnum :: Int -> Minute
    $ctoEnum :: Int -> Minute
    pred :: Minute -> Minute
    $cpred :: Minute -> Minute
    succ :: Minute -> Minute
    $csucc :: Minute -> Minute
    Enum,Minute -> Minute -> Bool
    (Minute -> Minute -> Bool)
    -> (Minute -> Minute -> Bool) -> Eq Minute
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    /= :: Minute -> Minute -> Bool
    $c/= :: Minute -> Minute -> Bool
    == :: Minute -> Minute -> Bool
    $c== :: Minute -> Minute -> Bool
    Eq,Enum Minute
    Real Minute
    (Real Minute, Enum Minute) =>
    (Minute -> Minute -> Minute)
    -> (Minute -> Minute -> Minute)
    -> (Minute -> Minute -> Minute)
    -> (Minute -> Minute -> Minute)
    -> (Minute -> Minute -> (Minute, Minute))
    -> (Minute -> Minute -> (Minute, Minute))
    -> (Minute -> Integer)
    -> Integral Minute
    Minute -> Integer
    Minute -> Minute -> (Minute, Minute)
    Minute -> Minute -> Minute
    forall a.
    (Real a, Enum a) =>
    (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> (a, a))
    -> (a -> a -> (a, a))
    -> (a -> Integer)
    -> Integral a
    toInteger :: Minute -> Integer
    $ctoInteger :: Minute -> Integer
    divMod :: Minute -> Minute -> (Minute, Minute)
    $cdivMod :: Minute -> Minute -> (Minute, Minute)
    quotRem :: Minute -> Minute -> (Minute, Minute)
    $cquotRem :: Minute -> Minute -> (Minute, Minute)
    mod :: Minute -> Minute -> Minute
    $cmod :: Minute -> Minute -> Minute
    div :: Minute -> Minute -> Minute
    $cdiv :: Minute -> Minute -> Minute
    rem :: Minute -> Minute -> Minute
    $crem :: Minute -> Minute -> Minute
    quot :: Minute -> Minute -> Minute
    $cquot :: Minute -> Minute -> Minute
    $cp2Integral :: Enum Minute
    $cp1Integral :: Real Minute
    Integral,Typeable Minute
    Constr
    DataType
    Typeable Minute =>
    (forall (c :: * -> *).
     (forall d b. Data d => c (d -> b) -> d -> c b)
     -> (forall g. g -> c g) -> Minute -> c Minute)
    -> (forall (c :: * -> *).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c Minute)
    -> (Minute -> Constr)
    -> (Minute -> DataType)
    -> (forall (t :: * -> *) (c :: * -> *).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c Minute))
    -> (forall (t :: * -> * -> *) (c :: * -> *).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Minute))
    -> ((forall b. Data b => b -> b) -> Minute -> Minute)
    -> (forall r r'.
        (r -> r' -> r)
        -> r -> (forall d. Data d => d -> r') -> Minute -> r)
    -> (forall r r'.
        (r' -> r -> r)
        -> r -> (forall d. Data d => d -> r') -> Minute -> r)
    -> (forall u. (forall d. Data d => d -> u) -> Minute -> [u])
    -> (forall u. Int -> (forall d. Data d => d -> u) -> Minute -> u)
    -> (forall (m :: * -> *).
        Monad m =>
        (forall d. Data d => d -> m d) -> Minute -> m Minute)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> Minute -> m Minute)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> Minute -> m Minute)
    -> Data Minute
    Minute -> Constr
    Minute -> DataType
    (forall b. Data b => b -> b) -> Minute -> Minute
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Minute -> c Minute
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Minute
    forall a.
    Typeable a =>
    (forall (c :: * -> *).
     (forall d b. Data d => c (d -> b) -> d -> c b)
     -> (forall g. g -> c g) -> a -> c a)
    -> (forall (c :: * -> *).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c a)
    -> (a -> Constr)
    -> (a -> DataType)
    -> (forall (t :: * -> *) (c :: * -> *).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c a))
    -> (forall (t :: * -> * -> *) (c :: * -> *).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
    -> ((forall b. Data b => b -> b) -> a -> a)
    -> (forall r r'.
        (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall r r'.
        (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall u. (forall d. Data d => d -> u) -> a -> [u])
    -> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
    -> (forall (m :: * -> *).
        Monad m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> Data a
    forall u. Int -> (forall d. Data d => d -> u) -> Minute -> u
    forall u. (forall d. Data d => d -> u) -> Minute -> [u]
    forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Minute -> r
    forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Minute -> r
    forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Minute -> m Minute
    forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Minute -> m Minute
    forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Minute
    forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Minute -> c Minute
    forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Minute)
    forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Minute)
    $cMinute :: Constr
    $tMinute :: DataType
    gmapMo :: (forall d. Data d => d -> m d) -> Minute -> m Minute
    $cgmapMo :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Minute -> m Minute
    gmapMp :: (forall d. Data d => d -> m d) -> Minute -> m Minute
    $cgmapMp :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Minute -> m Minute
    gmapM :: (forall d. Data d => d -> m d) -> Minute -> m Minute
    $cgmapM :: forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Minute -> m Minute
    gmapQi :: Int -> (forall d. Data d => d -> u) -> Minute -> u
    $cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Minute -> u
    gmapQ :: (forall d. Data d => d -> u) -> Minute -> [u]
    $cgmapQ :: forall u. (forall d. Data d => d -> u) -> Minute -> [u]
    gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Minute -> r
    $cgmapQr :: forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Minute -> r
    gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Minute -> r
    $cgmapQl :: forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Minute -> r
    gmapT :: (forall b. Data b => b -> b) -> Minute -> Minute
    $cgmapT :: (forall b. Data b => b -> b) -> Minute -> Minute
    dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Minute)
    $cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Minute)
    dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c Minute)
    $cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Minute)
    dataTypeOf :: Minute -> DataType
    $cdataTypeOf :: Minute -> DataType
    toConstr :: Minute -> Constr
    $ctoConstr :: Minute -> Constr
    gunfold :: (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Minute
    $cgunfold :: forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Minute
    gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Minute -> c Minute
    $cgfoldl :: forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Minute -> c Minute
    $cp1Data :: Typeable Minute
    Data,Integer -> Minute
    Minute -> Minute
    Minute -> Minute -> Minute
    (Minute -> Minute -> Minute)
    -> (Minute -> Minute -> Minute)
    -> (Minute -> Minute -> Minute)
    -> (Minute -> Minute)
    -> (Minute -> Minute)
    -> (Minute -> Minute)
    -> (Integer -> Minute)
    -> Num Minute
    forall a.
    (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a)
    -> (a -> a)
    -> (a -> a)
    -> (Integer -> a)
    -> Num a
    fromInteger :: Integer -> Minute
    $cfromInteger :: Integer -> Minute
    signum :: Minute -> Minute
    $csignum :: Minute -> Minute
    abs :: Minute -> Minute
    $cabs :: Minute -> Minute
    negate :: Minute -> Minute
    $cnegate :: Minute -> Minute
    * :: Minute -> Minute -> Minute
    $c* :: Minute -> Minute -> Minute
    - :: Minute -> Minute -> Minute
    $c- :: Minute -> Minute -> Minute
    + :: Minute -> Minute -> Minute
    $c+ :: Minute -> Minute -> Minute
    Num,Eq Minute
    Eq Minute =>
    (Minute -> Minute -> Ordering)
    -> (Minute -> Minute -> Bool)
    -> (Minute -> Minute -> Bool)
    -> (Minute -> Minute -> Bool)
    -> (Minute -> Minute -> Bool)
    -> (Minute -> Minute -> Minute)
    -> (Minute -> Minute -> Minute)
    -> Ord Minute
    Minute -> Minute -> Bool
    Minute -> Minute -> Ordering
    Minute -> Minute -> Minute
    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 :: Minute -> Minute -> Minute
    $cmin :: Minute -> Minute -> Minute
    max :: Minute -> Minute -> Minute
    $cmax :: Minute -> Minute -> Minute
    >= :: Minute -> Minute -> Bool
    $c>= :: Minute -> Minute -> Bool
    > :: Minute -> Minute -> Bool
    $c> :: Minute -> Minute -> Bool
    <= :: Minute -> Minute -> Bool
    $c<= :: Minute -> Minute -> Bool
    < :: Minute -> Minute -> Bool
    $c< :: Minute -> Minute -> Bool
    compare :: Minute -> Minute -> Ordering
    $ccompare :: Minute -> Minute -> Ordering
    $cp1Ord :: Eq Minute
    Ord,Num Minute
    Ord Minute
    (Num Minute, Ord Minute) => (Minute -> Rational) -> Real Minute
    Minute -> Rational
    forall a. (Num a, Ord a) => (a -> Rational) -> Real a
    toRational :: Minute -> Rational
    $ctoRational :: Minute -> Rational
    $cp2Real :: Ord Minute
    $cp1Real :: Num Minute
    Real,Ord Minute
    Ord Minute =>
    ((Minute, Minute) -> [Minute])
    -> ((Minute, Minute) -> Minute -> Int)
    -> ((Minute, Minute) -> Minute -> Int)
    -> ((Minute, Minute) -> Minute -> Bool)
    -> ((Minute, Minute) -> Int)
    -> ((Minute, Minute) -> Int)
    -> Ix Minute
    (Minute, Minute) -> Int
    (Minute, Minute) -> [Minute]
    (Minute, Minute) -> Minute -> Bool
    (Minute, Minute) -> Minute -> Int
    forall a.
    Ord a =>
    ((a, a) -> [a])
    -> ((a, a) -> a -> Int)
    -> ((a, a) -> a -> Int)
    -> ((a, a) -> a -> Bool)
    -> ((a, a) -> Int)
    -> ((a, a) -> Int)
    -> Ix a
    unsafeRangeSize :: (Minute, Minute) -> Int
    $cunsafeRangeSize :: (Minute, Minute) -> Int
    rangeSize :: (Minute, Minute) -> Int
    $crangeSize :: (Minute, Minute) -> Int
    inRange :: (Minute, Minute) -> Minute -> Bool
    $cinRange :: (Minute, Minute) -> Minute -> Bool
    unsafeIndex :: (Minute, Minute) -> Minute -> Int
    $cunsafeIndex :: (Minute, Minute) -> Minute -> Int
    index :: (Minute, Minute) -> Minute -> Int
    $cindex :: (Minute, Minute) -> Minute -> Int
    range :: (Minute, Minute) -> [Minute]
    $crange :: (Minute, Minute) -> [Minute]
    $cp1Ix :: Ord Minute
    Ix,Typeable)

    instance TimeUnit Minute where
      toMicroseconds :: Minute -> Integer
    toMicroseconds (Minute x :: Integer
    x) = Integer
    x Integer -> Integer -> Integer
    forall a. Num a => a -> a -> a
    * (Second -> Integer
    forall a. TimeUnit a => a -> Integer
    toMicroseconds (Second -> Integer) -> Second -> Integer
    forall a b. (a -> b) -> a -> b
    $ Integer -> Second
    Second 60)
      fromMicroseconds :: Integer -> Minute
    fromMicroseconds x :: Integer
    x        = Integer -> Minute
    Minute (Integer
    x Integer -> Integer -> Integer
    forall a. Integral a => a -> a -> a
    `div` (Second -> Integer
    forall a. TimeUnit a => a -> Integer
    toMicroseconds (Second -> Integer) -> Second -> Integer
    forall a b. (a -> b) -> a -> b
    $ Integer -> Second
    Second 60))
    instance Show Minute where
      show :: Minute -> String
    show (Minute x :: Integer
    x) = Integer -> String
    forall a. Show a => a -> String
    show Integer
    x String -> ShowS
    forall a. [a] -> [a] -> [a]
    ++ "m"
    instance Read Minute where
      readsPrec :: Int -> ReadS Minute
    readsPrec = (Integer -> Minute) -> String -> Int -> ReadS Minute
    forall a.
    (Integer -> a) -> String -> Int -> String -> [(a, String)]
    readUnit Integer -> Minute
    Minute "m"

    --

    newtype Hour        = Hour        Integer
     deriving (Int -> Hour
    Hour -> Int
    Hour -> [Hour]
    Hour -> Hour
    Hour -> Hour -> [Hour]
    Hour -> Hour -> Hour -> [Hour]
    (Hour -> Hour)
    -> (Hour -> Hour)
    -> (Int -> Hour)
    -> (Hour -> Int)
    -> (Hour -> [Hour])
    -> (Hour -> Hour -> [Hour])
    -> (Hour -> Hour -> [Hour])
    -> (Hour -> Hour -> Hour -> [Hour])
    -> Enum Hour
    forall a.
    (a -> a)
    -> (a -> a)
    -> (Int -> a)
    -> (a -> Int)
    -> (a -> [a])
    -> (a -> a -> [a])
    -> (a -> a -> [a])
    -> (a -> a -> a -> [a])
    -> Enum a
    enumFromThenTo :: Hour -> Hour -> Hour -> [Hour]
    $cenumFromThenTo :: Hour -> Hour -> Hour -> [Hour]
    enumFromTo :: Hour -> Hour -> [Hour]
    $cenumFromTo :: Hour -> Hour -> [Hour]
    enumFromThen :: Hour -> Hour -> [Hour]
    $cenumFromThen :: Hour -> Hour -> [Hour]
    enumFrom :: Hour -> [Hour]
    $cenumFrom :: Hour -> [Hour]
    fromEnum :: Hour -> Int
    $cfromEnum :: Hour -> Int
    toEnum :: Int -> Hour
    $ctoEnum :: Int -> Hour
    pred :: Hour -> Hour
    $cpred :: Hour -> Hour
    succ :: Hour -> Hour
    $csucc :: Hour -> Hour
    Enum,Hour -> Hour -> Bool
    (Hour -> Hour -> Bool) -> (Hour -> Hour -> Bool) -> Eq Hour
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    /= :: Hour -> Hour -> Bool
    $c/= :: Hour -> Hour -> Bool
    == :: Hour -> Hour -> Bool
    $c== :: Hour -> Hour -> Bool
    Eq,Enum Hour
    Real Hour
    (Real Hour, Enum Hour) =>
    (Hour -> Hour -> Hour)
    -> (Hour -> Hour -> Hour)
    -> (Hour -> Hour -> Hour)
    -> (Hour -> Hour -> Hour)
    -> (Hour -> Hour -> (Hour, Hour))
    -> (Hour -> Hour -> (Hour, Hour))
    -> (Hour -> Integer)
    -> Integral Hour
    Hour -> Integer
    Hour -> Hour -> (Hour, Hour)
    Hour -> Hour -> Hour
    forall a.
    (Real a, Enum a) =>
    (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> (a, a))
    -> (a -> a -> (a, a))
    -> (a -> Integer)
    -> Integral a
    toInteger :: Hour -> Integer
    $ctoInteger :: Hour -> Integer
    divMod :: Hour -> Hour -> (Hour, Hour)
    $cdivMod :: Hour -> Hour -> (Hour, Hour)
    quotRem :: Hour -> Hour -> (Hour, Hour)
    $cquotRem :: Hour -> Hour -> (Hour, Hour)
    mod :: Hour -> Hour -> Hour
    $cmod :: Hour -> Hour -> Hour
    div :: Hour -> Hour -> Hour
    $cdiv :: Hour -> Hour -> Hour
    rem :: Hour -> Hour -> Hour
    $crem :: Hour -> Hour -> Hour
    quot :: Hour -> Hour -> Hour
    $cquot :: Hour -> Hour -> Hour
    $cp2Integral :: Enum Hour
    $cp1Integral :: Real Hour
    Integral,Typeable Hour
    Constr
    DataType
    Typeable Hour =>
    (forall (c :: * -> *).
     (forall d b. Data d => c (d -> b) -> d -> c b)
     -> (forall g. g -> c g) -> Hour -> c Hour)
    -> (forall (c :: * -> *).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c Hour)
    -> (Hour -> Constr)
    -> (Hour -> DataType)
    -> (forall (t :: * -> *) (c :: * -> *).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c Hour))
    -> (forall (t :: * -> * -> *) (c :: * -> *).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Hour))
    -> ((forall b. Data b => b -> b) -> Hour -> Hour)
    -> (forall r r'.
        (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Hour -> r)
    -> (forall r r'.
        (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Hour -> r)
    -> (forall u. (forall d. Data d => d -> u) -> Hour -> [u])
    -> (forall u. Int -> (forall d. Data d => d -> u) -> Hour -> u)
    -> (forall (m :: * -> *).
        Monad m =>
        (forall d. Data d => d -> m d) -> Hour -> m Hour)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> Hour -> m Hour)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> Hour -> m Hour)
    -> Data Hour
    Hour -> Constr
    Hour -> DataType
    (forall b. Data b => b -> b) -> Hour -> Hour
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Hour -> c Hour
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Hour
    forall a.
    Typeable a =>
    (forall (c :: * -> *).
     (forall d b. Data d => c (d -> b) -> d -> c b)
     -> (forall g. g -> c g) -> a -> c a)
    -> (forall (c :: * -> *).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c a)
    -> (a -> Constr)
    -> (a -> DataType)
    -> (forall (t :: * -> *) (c :: * -> *).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c a))
    -> (forall (t :: * -> * -> *) (c :: * -> *).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
    -> ((forall b. Data b => b -> b) -> a -> a)
    -> (forall r r'.
        (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall r r'.
        (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall u. (forall d. Data d => d -> u) -> a -> [u])
    -> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
    -> (forall (m :: * -> *).
        Monad m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> Data a
    forall u. Int -> (forall d. Data d => d -> u) -> Hour -> u
    forall u. (forall d. Data d => d -> u) -> Hour -> [u]
    forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Hour -> r
    forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Hour -> r
    forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Hour -> m Hour
    forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Hour -> m Hour
    forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Hour
    forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Hour -> c Hour
    forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Hour)
    forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Hour)
    $cHour :: Constr
    $tHour :: DataType
    gmapMo :: (forall d. Data d => d -> m d) -> Hour -> m Hour
    $cgmapMo :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Hour -> m Hour
    gmapMp :: (forall d. Data d => d -> m d) -> Hour -> m Hour
    $cgmapMp :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Hour -> m Hour
    gmapM :: (forall d. Data d => d -> m d) -> Hour -> m Hour
    $cgmapM :: forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Hour -> m Hour
    gmapQi :: Int -> (forall d. Data d => d -> u) -> Hour -> u
    $cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Hour -> u
    gmapQ :: (forall d. Data d => d -> u) -> Hour -> [u]
    $cgmapQ :: forall u. (forall d. Data d => d -> u) -> Hour -> [u]
    gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Hour -> r
    $cgmapQr :: forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Hour -> r
    gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Hour -> r
    $cgmapQl :: forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Hour -> r
    gmapT :: (forall b. Data b => b -> b) -> Hour -> Hour
    $cgmapT :: (forall b. Data b => b -> b) -> Hour -> Hour
    dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Hour)
    $cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Hour)
    dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c Hour)
    $cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Hour)
    dataTypeOf :: Hour -> DataType
    $cdataTypeOf :: Hour -> DataType
    toConstr :: Hour -> Constr
    $ctoConstr :: Hour -> Constr
    gunfold :: (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Hour
    $cgunfold :: forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Hour
    gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Hour -> c Hour
    $cgfoldl :: forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Hour -> c Hour
    $cp1Data :: Typeable Hour
    Data,Integer -> Hour
    Hour -> Hour
    Hour -> Hour -> Hour
    (Hour -> Hour -> Hour)
    -> (Hour -> Hour -> Hour)
    -> (Hour -> Hour -> Hour)
    -> (Hour -> Hour)
    -> (Hour -> Hour)
    -> (Hour -> Hour)
    -> (Integer -> Hour)
    -> Num Hour
    forall a.
    (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a)
    -> (a -> a)
    -> (a -> a)
    -> (Integer -> a)
    -> Num a
    fromInteger :: Integer -> Hour
    $cfromInteger :: Integer -> Hour
    signum :: Hour -> Hour
    $csignum :: Hour -> Hour
    abs :: Hour -> Hour
    $cabs :: Hour -> Hour
    negate :: Hour -> Hour
    $cnegate :: Hour -> Hour
    * :: Hour -> Hour -> Hour
    $c* :: Hour -> Hour -> Hour
    - :: Hour -> Hour -> Hour
    $c- :: Hour -> Hour -> Hour
    + :: Hour -> Hour -> Hour
    $c+ :: Hour -> Hour -> Hour
    Num,Eq Hour
    Eq Hour =>
    (Hour -> Hour -> Ordering)
    -> (Hour -> Hour -> Bool)
    -> (Hour -> Hour -> Bool)
    -> (Hour -> Hour -> Bool)
    -> (Hour -> Hour -> Bool)
    -> (Hour -> Hour -> Hour)
    -> (Hour -> Hour -> Hour)
    -> Ord Hour
    Hour -> Hour -> Bool
    Hour -> Hour -> Ordering
    Hour -> Hour -> Hour
    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 :: Hour -> Hour -> Hour
    $cmin :: Hour -> Hour -> Hour
    max :: Hour -> Hour -> Hour
    $cmax :: Hour -> Hour -> Hour
    >= :: Hour -> Hour -> Bool
    $c>= :: Hour -> Hour -> Bool
    > :: Hour -> Hour -> Bool
    $c> :: Hour -> Hour -> Bool
    <= :: Hour -> Hour -> Bool
    $c<= :: Hour -> Hour -> Bool
    < :: Hour -> Hour -> Bool
    $c< :: Hour -> Hour -> Bool
    compare :: Hour -> Hour -> Ordering
    $ccompare :: Hour -> Hour -> Ordering
    $cp1Ord :: Eq Hour
    Ord,Num Hour
    Ord Hour
    (Num Hour, Ord Hour) => (Hour -> Rational) -> Real Hour
    Hour -> Rational
    forall a. (Num a, Ord a) => (a -> Rational) -> Real a
    toRational :: Hour -> Rational
    $ctoRational :: Hour -> Rational
    $cp2Real :: Ord Hour
    $cp1Real :: Num Hour
    Real,Ord Hour
    Ord Hour =>
    ((Hour, Hour) -> [Hour])
    -> ((Hour, Hour) -> Hour -> Int)
    -> ((Hour, Hour) -> Hour -> Int)
    -> ((Hour, Hour) -> Hour -> Bool)
    -> ((Hour, Hour) -> Int)
    -> ((Hour, Hour) -> Int)
    -> Ix Hour
    (Hour, Hour) -> Int
    (Hour, Hour) -> [Hour]
    (Hour, Hour) -> Hour -> Bool
    (Hour, Hour) -> Hour -> Int
    forall a.
    Ord a =>
    ((a, a) -> [a])
    -> ((a, a) -> a -> Int)
    -> ((a, a) -> a -> Int)
    -> ((a, a) -> a -> Bool)
    -> ((a, a) -> Int)
    -> ((a, a) -> Int)
    -> Ix a
    unsafeRangeSize :: (Hour, Hour) -> Int
    $cunsafeRangeSize :: (Hour, Hour) -> Int
    rangeSize :: (Hour, Hour) -> Int
    $crangeSize :: (Hour, Hour) -> Int
    inRange :: (Hour, Hour) -> Hour -> Bool
    $cinRange :: (Hour, Hour) -> Hour -> Bool
    unsafeIndex :: (Hour, Hour) -> Hour -> Int
    $cunsafeIndex :: (Hour, Hour) -> Hour -> Int
    index :: (Hour, Hour) -> Hour -> Int
    $cindex :: (Hour, Hour) -> Hour -> Int
    range :: (Hour, Hour) -> [Hour]
    $crange :: (Hour, Hour) -> [Hour]
    $cp1Ix :: Ord Hour
    Ix,Typeable)

    instance TimeUnit Hour where
      toMicroseconds :: Hour -> Integer
    toMicroseconds (Hour x :: Integer
    x) = Integer
    x Integer -> Integer -> Integer
    forall a. Num a => a -> a -> a
    * (Minute -> Integer
    forall a. TimeUnit a => a -> Integer
    toMicroseconds (Minute -> Integer) -> Minute -> Integer
    forall a b. (a -> b) -> a -> b
    $ Integer -> Minute
    Minute 60)
      fromMicroseconds :: Integer -> Hour
    fromMicroseconds x :: Integer
    x      = Integer -> Hour
    Hour (Integer
    x Integer -> Integer -> Integer
    forall a. Integral a => a -> a -> a
    `div` (Minute -> Integer
    forall a. TimeUnit a => a -> Integer
    toMicroseconds (Minute -> Integer) -> Minute -> Integer
    forall a b. (a -> b) -> a -> b
    $ Integer -> Minute
    Minute 60))
    instance Show Hour where
      show :: Hour -> String
    show (Hour x :: Integer
    x) = Integer -> String
    forall a. Show a => a -> String
    show Integer
    x String -> ShowS
    forall a. [a] -> [a] -> [a]
    ++ "h"
    instance Read Hour where
      readsPrec :: Int -> ReadS Hour
    readsPrec = (Integer -> Hour) -> String -> Int -> ReadS Hour
    forall a.
    (Integer -> a) -> String -> Int -> String -> [(a, String)]
    readUnit Integer -> Hour
    Hour "h"

    --

    newtype Day         = Day         Integer
     deriving (Int -> Day
    Day -> Int
    Day -> [Day]
    Day -> Day
    Day -> Day -> [Day]
    Day -> Day -> Day -> [Day]
    (Day -> Day)
    -> (Day -> Day)
    -> (Int -> Day)
    -> (Day -> Int)
    -> (Day -> [Day])
    -> (Day -> Day -> [Day])
    -> (Day -> Day -> [Day])
    -> (Day -> Day -> Day -> [Day])
    -> Enum Day
    forall a.
    (a -> a)
    -> (a -> a)
    -> (Int -> a)
    -> (a -> Int)
    -> (a -> [a])
    -> (a -> a -> [a])
    -> (a -> a -> [a])
    -> (a -> a -> a -> [a])
    -> Enum a
    enumFromThenTo :: Day -> Day -> Day -> [Day]
    $cenumFromThenTo :: Day -> Day -> Day -> [Day]
    enumFromTo :: Day -> Day -> [Day]
    $cenumFromTo :: Day -> Day -> [Day]
    enumFromThen :: Day -> Day -> [Day]
    $cenumFromThen :: Day -> Day -> [Day]
    enumFrom :: Day -> [Day]
    $cenumFrom :: Day -> [Day]
    fromEnum :: Day -> Int
    $cfromEnum :: Day -> Int
    toEnum :: Int -> Day
    $ctoEnum :: Int -> Day
    pred :: Day -> Day
    $cpred :: Day -> Day
    succ :: Day -> Day
    $csucc :: Day -> Day
    Enum,Day -> Day -> Bool
    (Day -> Day -> Bool) -> (Day -> Day -> Bool) -> Eq Day
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    /= :: Day -> Day -> Bool
    $c/= :: Day -> Day -> Bool
    == :: Day -> Day -> Bool
    $c== :: Day -> Day -> Bool
    Eq,Enum Day
    Real Day
    (Real Day, Enum Day) =>
    (Day -> Day -> Day)
    -> (Day -> Day -> Day)
    -> (Day -> Day -> Day)
    -> (Day -> Day -> Day)
    -> (Day -> Day -> (Day, Day))
    -> (Day -> Day -> (Day, Day))
    -> (Day -> Integer)
    -> Integral Day
    Day -> Integer
    Day -> Day -> (Day, Day)
    Day -> Day -> Day
    forall a.
    (Real a, Enum a) =>
    (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> (a, a))
    -> (a -> a -> (a, a))
    -> (a -> Integer)
    -> Integral a
    toInteger :: Day -> Integer
    $ctoInteger :: Day -> Integer
    divMod :: Day -> Day -> (Day, Day)
    $cdivMod :: Day -> Day -> (Day, Day)
    quotRem :: Day -> Day -> (Day, Day)
    $cquotRem :: Day -> Day -> (Day, Day)
    mod :: Day -> Day -> Day
    $cmod :: Day -> Day -> Day
    div :: Day -> Day -> Day
    $cdiv :: Day -> Day -> Day
    rem :: Day -> Day -> Day
    $crem :: Day -> Day -> Day
    quot :: Day -> Day -> Day
    $cquot :: Day -> Day -> Day
    $cp2Integral :: Enum Day
    $cp1Integral :: Real Day
    Integral,Typeable Day
    Constr
    DataType
    Typeable Day =>
    (forall (c :: * -> *).
     (forall d b. Data d => c (d -> b) -> d -> c b)
     -> (forall g. g -> c g) -> Day -> c Day)
    -> (forall (c :: * -> *).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c Day)
    -> (Day -> Constr)
    -> (Day -> DataType)
    -> (forall (t :: * -> *) (c :: * -> *).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c Day))
    -> (forall (t :: * -> * -> *) (c :: * -> *).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Day))
    -> ((forall b. Data b => b -> b) -> Day -> Day)
    -> (forall r r'.
        (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Day -> r)
    -> (forall r r'.
        (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Day -> r)
    -> (forall u. (forall d. Data d => d -> u) -> Day -> [u])
    -> (forall u. Int -> (forall d. Data d => d -> u) -> Day -> u)
    -> (forall (m :: * -> *).
        Monad m =>
        (forall d. Data d => d -> m d) -> Day -> m Day)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> Day -> m Day)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> Day -> m Day)
    -> Data Day
    Day -> Constr
    Day -> DataType
    (forall b. Data b => b -> b) -> Day -> Day
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Day -> c Day
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Day
    forall a.
    Typeable a =>
    (forall (c :: * -> *).
     (forall d b. Data d => c (d -> b) -> d -> c b)
     -> (forall g. g -> c g) -> a -> c a)
    -> (forall (c :: * -> *).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c a)
    -> (a -> Constr)
    -> (a -> DataType)
    -> (forall (t :: * -> *) (c :: * -> *).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c a))
    -> (forall (t :: * -> * -> *) (c :: * -> *).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
    -> ((forall b. Data b => b -> b) -> a -> a)
    -> (forall r r'.
        (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall r r'.
        (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall u. (forall d. Data d => d -> u) -> a -> [u])
    -> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
    -> (forall (m :: * -> *).
        Monad m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> Data a
    forall u. Int -> (forall d. Data d => d -> u) -> Day -> u
    forall u. (forall d. Data d => d -> u) -> Day -> [u]
    forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Day -> r
    forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Day -> r
    forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Day -> m Day
    forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Day -> m Day
    forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Day
    forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Day -> c Day
    forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Day)
    forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Day)
    $cDay :: Constr
    $tDay :: DataType
    gmapMo :: (forall d. Data d => d -> m d) -> Day -> m Day
    $cgmapMo :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Day -> m Day
    gmapMp :: (forall d. Data d => d -> m d) -> Day -> m Day
    $cgmapMp :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Day -> m Day
    gmapM :: (forall d. Data d => d -> m d) -> Day -> m Day
    $cgmapM :: forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Day -> m Day
    gmapQi :: Int -> (forall d. Data d => d -> u) -> Day -> u
    $cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Day -> u
    gmapQ :: (forall d. Data d => d -> u) -> Day -> [u]
    $cgmapQ :: forall u. (forall d. Data d => d -> u) -> Day -> [u]
    gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Day -> r
    $cgmapQr :: forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Day -> r
    gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Day -> r
    $cgmapQl :: forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Day -> r
    gmapT :: (forall b. Data b => b -> b) -> Day -> Day
    $cgmapT :: (forall b. Data b => b -> b) -> Day -> Day
    dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Day)
    $cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Day)
    dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c Day)
    $cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Day)
    dataTypeOf :: Day -> DataType
    $cdataTypeOf :: Day -> DataType
    toConstr :: Day -> Constr
    $ctoConstr :: Day -> Constr
    gunfold :: (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Day
    $cgunfold :: forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Day
    gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Day -> c Day
    $cgfoldl :: forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Day -> c Day
    $cp1Data :: Typeable Day
    Data,Integer -> Day
    Day -> Day
    Day -> Day -> Day
    (Day -> Day -> Day)
    -> (Day -> Day -> Day)
    -> (Day -> Day -> Day)
    -> (Day -> Day)
    -> (Day -> Day)
    -> (Day -> Day)
    -> (Integer -> Day)
    -> Num Day
    forall a.
    (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a)
    -> (a -> a)
    -> (a -> a)
    -> (Integer -> a)
    -> Num a
    fromInteger :: Integer -> Day
    $cfromInteger :: Integer -> Day
    signum :: Day -> Day
    $csignum :: Day -> Day
    abs :: Day -> Day
    $cabs :: Day -> Day
    negate :: Day -> Day
    $cnegate :: Day -> Day
    * :: Day -> Day -> Day
    $c* :: Day -> Day -> Day
    - :: Day -> Day -> Day
    $c- :: Day -> Day -> Day
    + :: Day -> Day -> Day
    $c+ :: Day -> Day -> Day
    Num,Eq Day
    Eq Day =>
    (Day -> Day -> Ordering)
    -> (Day -> Day -> Bool)
    -> (Day -> Day -> Bool)
    -> (Day -> Day -> Bool)
    -> (Day -> Day -> Bool)
    -> (Day -> Day -> Day)
    -> (Day -> Day -> Day)
    -> Ord Day
    Day -> Day -> Bool
    Day -> Day -> Ordering
    Day -> Day -> Day
    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 :: Day -> Day -> Day
    $cmin :: Day -> Day -> Day
    max :: Day -> Day -> Day
    $cmax :: Day -> Day -> Day
    >= :: Day -> Day -> Bool
    $c>= :: Day -> Day -> Bool
    > :: Day -> Day -> Bool
    $c> :: Day -> Day -> Bool
    <= :: Day -> Day -> Bool
    $c<= :: Day -> Day -> Bool
    < :: Day -> Day -> Bool
    $c< :: Day -> Day -> Bool
    compare :: Day -> Day -> Ordering
    $ccompare :: Day -> Day -> Ordering
    $cp1Ord :: Eq Day
    Ord,Num Day
    Ord Day
    (Num Day, Ord Day) => (Day -> Rational) -> Real Day
    Day -> Rational
    forall a. (Num a, Ord a) => (a -> Rational) -> Real a
    toRational :: Day -> Rational
    $ctoRational :: Day -> Rational
    $cp2Real :: Ord Day
    $cp1Real :: Num Day
    Real,Ord Day
    Ord Day =>
    ((Day, Day) -> [Day])
    -> ((Day, Day) -> Day -> Int)
    -> ((Day, Day) -> Day -> Int)
    -> ((Day, Day) -> Day -> Bool)
    -> ((Day, Day) -> Int)
    -> ((Day, Day) -> Int)
    -> Ix Day
    (Day, Day) -> Int
    (Day, Day) -> [Day]
    (Day, Day) -> Day -> Bool
    (Day, Day) -> Day -> Int
    forall a.
    Ord a =>
    ((a, a) -> [a])
    -> ((a, a) -> a -> Int)
    -> ((a, a) -> a -> Int)
    -> ((a, a) -> a -> Bool)
    -> ((a, a) -> Int)
    -> ((a, a) -> Int)
    -> Ix a
    unsafeRangeSize :: (Day, Day) -> Int
    $cunsafeRangeSize :: (Day, Day) -> Int
    rangeSize :: (Day, Day) -> Int
    $crangeSize :: (Day, Day) -> Int
    inRange :: (Day, Day) -> Day -> Bool
    $cinRange :: (Day, Day) -> Day -> Bool
    unsafeIndex :: (Day, Day) -> Day -> Int
    $cunsafeIndex :: (Day, Day) -> Day -> Int
    index :: (Day, Day) -> Day -> Int
    $cindex :: (Day, Day) -> Day -> Int
    range :: (Day, Day) -> [Day]
    $crange :: (Day, Day) -> [Day]
    $cp1Ix :: Ord Day
    Ix,Typeable)

    instance TimeUnit Day where
      toMicroseconds :: Day -> Integer
    toMicroseconds (Day x :: Integer
    x) = Integer
    x Integer -> Integer -> Integer
    forall a. Num a => a -> a -> a
    * (Hour -> Integer
    forall a. TimeUnit a => a -> Integer
    toMicroseconds (Hour -> Integer) -> Hour -> Integer
    forall a b. (a -> b) -> a -> b
    $ Integer -> Hour
    Hour 24)
      fromMicroseconds :: Integer -> Day
    fromMicroseconds x :: Integer
    x     = Integer -> Day
    Day (Integer
    x Integer -> Integer -> Integer
    forall a. Integral a => a -> a -> a
    `div` (Hour -> Integer
    forall a. TimeUnit a => a -> Integer
    toMicroseconds (Hour -> Integer) -> Hour -> Integer
    forall a b. (a -> b) -> a -> b
    $ Integer -> Hour
    Hour 24))
    instance Show Day where
      show :: Day -> String
    show (Day x :: Integer
    x) = Integer -> String
    forall a. Show a => a -> String
    show Integer
    x String -> ShowS
    forall a. [a] -> [a] -> [a]
    ++ "d"
    instance Read Day where
      readsPrec :: Int -> ReadS Day
    readsPrec = (Integer -> Day) -> String -> Int -> ReadS Day
    forall a.
    (Integer -> a) -> String -> Int -> String -> [(a, String)]
    readUnit Integer -> Day
    Day "d"

    --

    newtype Week        = Week        Integer
     deriving (Int -> Week
    Week -> Int
    Week -> [Week]
    Week -> Week
    Week -> Week -> [Week]
    Week -> Week -> Week -> [Week]
    (Week -> Week)
    -> (Week -> Week)
    -> (Int -> Week)
    -> (Week -> Int)
    -> (Week -> [Week])
    -> (Week -> Week -> [Week])
    -> (Week -> Week -> [Week])
    -> (Week -> Week -> Week -> [Week])
    -> Enum Week
    forall a.
    (a -> a)
    -> (a -> a)
    -> (Int -> a)
    -> (a -> Int)
    -> (a -> [a])
    -> (a -> a -> [a])
    -> (a -> a -> [a])
    -> (a -> a -> a -> [a])
    -> Enum a
    enumFromThenTo :: Week -> Week -> Week -> [Week]
    $cenumFromThenTo :: Week -> Week -> Week -> [Week]
    enumFromTo :: Week -> Week -> [Week]
    $cenumFromTo :: Week -> Week -> [Week]
    enumFromThen :: Week -> Week -> [Week]
    $cenumFromThen :: Week -> Week -> [Week]
    enumFrom :: Week -> [Week]
    $cenumFrom :: Week -> [Week]
    fromEnum :: Week -> Int
    $cfromEnum :: Week -> Int
    toEnum :: Int -> Week
    $ctoEnum :: Int -> Week
    pred :: Week -> Week
    $cpred :: Week -> Week
    succ :: Week -> Week
    $csucc :: Week -> Week
    Enum,Week -> Week -> Bool
    (Week -> Week -> Bool) -> (Week -> Week -> Bool) -> Eq Week
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    /= :: Week -> Week -> Bool
    $c/= :: Week -> Week -> Bool
    == :: Week -> Week -> Bool
    $c== :: Week -> Week -> Bool
    Eq,Enum Week
    Real Week
    (Real Week, Enum Week) =>
    (Week -> Week -> Week)
    -> (Week -> Week -> Week)
    -> (Week -> Week -> Week)
    -> (Week -> Week -> Week)
    -> (Week -> Week -> (Week, Week))
    -> (Week -> Week -> (Week, Week))
    -> (Week -> Integer)
    -> Integral Week
    Week -> Integer
    Week -> Week -> (Week, Week)
    Week -> Week -> Week
    forall a.
    (Real a, Enum a) =>
    (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> (a, a))
    -> (a -> a -> (a, a))
    -> (a -> Integer)
    -> Integral a
    toInteger :: Week -> Integer
    $ctoInteger :: Week -> Integer
    divMod :: Week -> Week -> (Week, Week)
    $cdivMod :: Week -> Week -> (Week, Week)
    quotRem :: Week -> Week -> (Week, Week)
    $cquotRem :: Week -> Week -> (Week, Week)
    mod :: Week -> Week -> Week
    $cmod :: Week -> Week -> Week
    div :: Week -> Week -> Week
    $cdiv :: Week -> Week -> Week
    rem :: Week -> Week -> Week
    $crem :: Week -> Week -> Week
    quot :: Week -> Week -> Week
    $cquot :: Week -> Week -> Week
    $cp2Integral :: Enum Week
    $cp1Integral :: Real Week
    Integral,Typeable Week
    Constr
    DataType
    Typeable Week =>
    (forall (c :: * -> *).
     (forall d b. Data d => c (d -> b) -> d -> c b)
     -> (forall g. g -> c g) -> Week -> c Week)
    -> (forall (c :: * -> *).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c Week)
    -> (Week -> Constr)
    -> (Week -> DataType)
    -> (forall (t :: * -> *) (c :: * -> *).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c Week))
    -> (forall (t :: * -> * -> *) (c :: * -> *).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Week))
    -> ((forall b. Data b => b -> b) -> Week -> Week)
    -> (forall r r'.
        (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Week -> r)
    -> (forall r r'.
        (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Week -> r)
    -> (forall u. (forall d. Data d => d -> u) -> Week -> [u])
    -> (forall u. Int -> (forall d. Data d => d -> u) -> Week -> u)
    -> (forall (m :: * -> *).
        Monad m =>
        (forall d. Data d => d -> m d) -> Week -> m Week)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> Week -> m Week)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> Week -> m Week)
    -> Data Week
    Week -> Constr
    Week -> DataType
    (forall b. Data b => b -> b) -> Week -> Week
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Week -> c Week
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Week
    forall a.
    Typeable a =>
    (forall (c :: * -> *).
     (forall d b. Data d => c (d -> b) -> d -> c b)
     -> (forall g. g -> c g) -> a -> c a)
    -> (forall (c :: * -> *).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c a)
    -> (a -> Constr)
    -> (a -> DataType)
    -> (forall (t :: * -> *) (c :: * -> *).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c a))
    -> (forall (t :: * -> * -> *) (c :: * -> *).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
    -> ((forall b. Data b => b -> b) -> a -> a)
    -> (forall r r'.
        (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall r r'.
        (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall u. (forall d. Data d => d -> u) -> a -> [u])
    -> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
    -> (forall (m :: * -> *).
        Monad m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> Data a
    forall u. Int -> (forall d. Data d => d -> u) -> Week -> u
    forall u. (forall d. Data d => d -> u) -> Week -> [u]
    forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Week -> r
    forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Week -> r
    forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Week -> m Week
    forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Week -> m Week
    forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Week
    forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Week -> c Week
    forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Week)
    forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Week)
    $cWeek :: Constr
    $tWeek :: DataType
    gmapMo :: (forall d. Data d => d -> m d) -> Week -> m Week
    $cgmapMo :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Week -> m Week
    gmapMp :: (forall d. Data d => d -> m d) -> Week -> m Week
    $cgmapMp :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Week -> m Week
    gmapM :: (forall d. Data d => d -> m d) -> Week -> m Week
    $cgmapM :: forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Week -> m Week
    gmapQi :: Int -> (forall d. Data d => d -> u) -> Week -> u
    $cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Week -> u
    gmapQ :: (forall d. Data d => d -> u) -> Week -> [u]
    $cgmapQ :: forall u. (forall d. Data d => d -> u) -> Week -> [u]
    gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Week -> r
    $cgmapQr :: forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Week -> r
    gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Week -> r
    $cgmapQl :: forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Week -> r
    gmapT :: (forall b. Data b => b -> b) -> Week -> Week
    $cgmapT :: (forall b. Data b => b -> b) -> Week -> Week
    dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Week)
    $cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Week)
    dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c Week)
    $cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Week)
    dataTypeOf :: Week -> DataType
    $cdataTypeOf :: Week -> DataType
    toConstr :: Week -> Constr
    $ctoConstr :: Week -> Constr
    gunfold :: (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Week
    $cgunfold :: forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Week
    gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Week -> c Week
    $cgfoldl :: forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Week -> c Week
    $cp1Data :: Typeable Week
    Data,Integer -> Week
    Week -> Week
    Week -> Week -> Week
    (Week -> Week -> Week)
    -> (Week -> Week -> Week)
    -> (Week -> Week -> Week)
    -> (Week -> Week)
    -> (Week -> Week)
    -> (Week -> Week)
    -> (Integer -> Week)
    -> Num Week
    forall a.
    (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a)
    -> (a -> a)
    -> (a -> a)
    -> (Integer -> a)
    -> Num a
    fromInteger :: Integer -> Week
    $cfromInteger :: Integer -> Week
    signum :: Week -> Week
    $csignum :: Week -> Week
    abs :: Week -> Week
    $cabs :: Week -> Week
    negate :: Week -> Week
    $cnegate :: Week -> Week
    * :: Week -> Week -> Week
    $c* :: Week -> Week -> Week
    - :: Week -> Week -> Week
    $c- :: Week -> Week -> Week
    + :: Week -> Week -> Week
    $c+ :: Week -> Week -> Week
    Num,Eq Week
    Eq Week =>
    (Week -> Week -> Ordering)
    -> (Week -> Week -> Bool)
    -> (Week -> Week -> Bool)
    -> (Week -> Week -> Bool)
    -> (Week -> Week -> Bool)
    -> (Week -> Week -> Week)
    -> (Week -> Week -> Week)
    -> Ord Week
    Week -> Week -> Bool
    Week -> Week -> Ordering
    Week -> Week -> Week
    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 :: Week -> Week -> Week
    $cmin :: Week -> Week -> Week
    max :: Week -> Week -> Week
    $cmax :: Week -> Week -> Week
    >= :: Week -> Week -> Bool
    $c>= :: Week -> Week -> Bool
    > :: Week -> Week -> Bool
    $c> :: Week -> Week -> Bool
    <= :: Week -> Week -> Bool
    $c<= :: Week -> Week -> Bool
    < :: Week -> Week -> Bool
    $c< :: Week -> Week -> Bool
    compare :: Week -> Week -> Ordering
    $ccompare :: Week -> Week -> Ordering
    $cp1Ord :: Eq Week
    Ord,Num Week
    Ord Week
    (Num Week, Ord Week) => (Week -> Rational) -> Real Week
    Week -> Rational
    forall a. (Num a, Ord a) => (a -> Rational) -> Real a
    toRational :: Week -> Rational
    $ctoRational :: Week -> Rational
    $cp2Real :: Ord Week
    $cp1Real :: Num Week
    Real,Ord Week
    Ord Week =>
    ((Week, Week) -> [Week])
    -> ((Week, Week) -> Week -> Int)
    -> ((Week, Week) -> Week -> Int)
    -> ((Week, Week) -> Week -> Bool)
    -> ((Week, Week) -> Int)
    -> ((Week, Week) -> Int)
    -> Ix Week
    (Week, Week) -> Int
    (Week, Week) -> [Week]
    (Week, Week) -> Week -> Bool
    (Week, Week) -> Week -> Int
    forall a.
    Ord a =>
    ((a, a) -> [a])
    -> ((a, a) -> a -> Int)
    -> ((a, a) -> a -> Int)
    -> ((a, a) -> a -> Bool)
    -> ((a, a) -> Int)
    -> ((a, a) -> Int)
    -> Ix a
    unsafeRangeSize :: (Week, Week) -> Int
    $cunsafeRangeSize :: (Week, Week) -> Int
    rangeSize :: (Week, Week) -> Int
    $crangeSize :: (Week, Week) -> Int
    inRange :: (Week, Week) -> Week -> Bool
    $cinRange :: (Week, Week) -> Week -> Bool
    unsafeIndex :: (Week, Week) -> Week -> Int
    $cunsafeIndex :: (Week, Week) -> Week -> Int
    index :: (Week, Week) -> Week -> Int
    $cindex :: (Week, Week) -> Week -> Int
    range :: (Week, Week) -> [Week]
    $crange :: (Week, Week) -> [Week]
    $cp1Ix :: Ord Week
    Ix,Typeable)

    instance TimeUnit Week where
      toMicroseconds :: Week -> Integer
    toMicroseconds (Week x :: Integer
    x) = Integer
    x Integer -> Integer -> Integer
    forall a. Num a => a -> a -> a
    * (Day -> Integer
    forall a. TimeUnit a => a -> Integer
    toMicroseconds (Day -> Integer) -> Day -> Integer
    forall a b. (a -> b) -> a -> b
    $ Integer -> Day
    Day 7)
      fromMicroseconds :: Integer -> Week
    fromMicroseconds x :: Integer
    x      = Integer -> Week
    Week (Integer
    x Integer -> Integer -> Integer
    forall a. Integral a => a -> a -> a
    `div` (Day -> Integer
    forall a. TimeUnit a => a -> Integer
    toMicroseconds (Day -> Integer) -> Day -> Integer
    forall a b. (a -> b) -> a -> b
    $ Integer -> Day
    Day 7))
    instance Show Week where
      show :: Week -> String
    show (Week x :: Integer
    x) = Integer -> String
    forall a. Show a => a -> String
    show Integer
    x String -> ShowS
    forall a. [a] -> [a] -> [a]
    ++ "w"
    instance Read Week where
      readsPrec :: Int -> ReadS Week
    readsPrec = (Integer -> Week) -> String -> Int -> ReadS Week
    forall a.
    (Integer -> a) -> String -> Int -> String -> [(a, String)]
    readUnit Integer -> Week
    Week "w"

    --

    newtype Fortnight   = Fortnight   Integer
     deriving (Int -> Fortnight
    Fortnight -> Int
    Fortnight -> [Fortnight]
    Fortnight -> Fortnight
    Fortnight -> Fortnight -> [Fortnight]
    Fortnight -> Fortnight -> Fortnight -> [Fortnight]
    (Fortnight -> Fortnight)
    -> (Fortnight -> Fortnight)
    -> (Int -> Fortnight)
    -> (Fortnight -> Int)
    -> (Fortnight -> [Fortnight])
    -> (Fortnight -> Fortnight -> [Fortnight])
    -> (Fortnight -> Fortnight -> [Fortnight])
    -> (Fortnight -> Fortnight -> Fortnight -> [Fortnight])
    -> Enum Fortnight
    forall a.
    (a -> a)
    -> (a -> a)
    -> (Int -> a)
    -> (a -> Int)
    -> (a -> [a])
    -> (a -> a -> [a])
    -> (a -> a -> [a])
    -> (a -> a -> a -> [a])
    -> Enum a
    enumFromThenTo :: Fortnight -> Fortnight -> Fortnight -> [Fortnight]
    $cenumFromThenTo :: Fortnight -> Fortnight -> Fortnight -> [Fortnight]
    enumFromTo :: Fortnight -> Fortnight -> [Fortnight]
    $cenumFromTo :: Fortnight -> Fortnight -> [Fortnight]
    enumFromThen :: Fortnight -> Fortnight -> [Fortnight]
    $cenumFromThen :: Fortnight -> Fortnight -> [Fortnight]
    enumFrom :: Fortnight -> [Fortnight]
    $cenumFrom :: Fortnight -> [Fortnight]
    fromEnum :: Fortnight -> Int
    $cfromEnum :: Fortnight -> Int
    toEnum :: Int -> Fortnight
    $ctoEnum :: Int -> Fortnight
    pred :: Fortnight -> Fortnight
    $cpred :: Fortnight -> Fortnight
    succ :: Fortnight -> Fortnight
    $csucc :: Fortnight -> Fortnight
    Enum,Fortnight -> Fortnight -> Bool
    (Fortnight -> Fortnight -> Bool)
    -> (Fortnight -> Fortnight -> Bool) -> Eq Fortnight
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    /= :: Fortnight -> Fortnight -> Bool
    $c/= :: Fortnight -> Fortnight -> Bool
    == :: Fortnight -> Fortnight -> Bool
    $c== :: Fortnight -> Fortnight -> Bool
    Eq,Enum Fortnight
    Real Fortnight
    (Real Fortnight, Enum Fortnight) =>
    (Fortnight -> Fortnight -> Fortnight)
    -> (Fortnight -> Fortnight -> Fortnight)
    -> (Fortnight -> Fortnight -> Fortnight)
    -> (Fortnight -> Fortnight -> Fortnight)
    -> (Fortnight -> Fortnight -> (Fortnight, Fortnight))
    -> (Fortnight -> Fortnight -> (Fortnight, Fortnight))
    -> (Fortnight -> Integer)
    -> Integral Fortnight
    Fortnight -> Integer
    Fortnight -> Fortnight -> (Fortnight, Fortnight)
    Fortnight -> Fortnight -> Fortnight
    forall a.
    (Real a, Enum a) =>
    (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> (a, a))
    -> (a -> a -> (a, a))
    -> (a -> Integer)
    -> Integral a
    toInteger :: Fortnight -> Integer
    $ctoInteger :: Fortnight -> Integer
    divMod :: Fortnight -> Fortnight -> (Fortnight, Fortnight)
    $cdivMod :: Fortnight -> Fortnight -> (Fortnight, Fortnight)
    quotRem :: Fortnight -> Fortnight -> (Fortnight, Fortnight)
    $cquotRem :: Fortnight -> Fortnight -> (Fortnight, Fortnight)
    mod :: Fortnight -> Fortnight -> Fortnight
    $cmod :: Fortnight -> Fortnight -> Fortnight
    div :: Fortnight -> Fortnight -> Fortnight
    $cdiv :: Fortnight -> Fortnight -> Fortnight
    rem :: Fortnight -> Fortnight -> Fortnight
    $crem :: Fortnight -> Fortnight -> Fortnight
    quot :: Fortnight -> Fortnight -> Fortnight
    $cquot :: Fortnight -> Fortnight -> Fortnight
    $cp2Integral :: Enum Fortnight
    $cp1Integral :: Real Fortnight
    Integral,Typeable Fortnight
    Constr
    DataType
    Typeable Fortnight =>
    (forall (c :: * -> *).
     (forall d b. Data d => c (d -> b) -> d -> c b)
     -> (forall g. g -> c g) -> Fortnight -> c Fortnight)
    -> (forall (c :: * -> *).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c Fortnight)
    -> (Fortnight -> Constr)
    -> (Fortnight -> DataType)
    -> (forall (t :: * -> *) (c :: * -> *).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c Fortnight))
    -> (forall (t :: * -> * -> *) (c :: * -> *).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Fortnight))
    -> ((forall b. Data b => b -> b) -> Fortnight -> Fortnight)
    -> (forall r r'.
        (r -> r' -> r)
        -> r -> (forall d. Data d => d -> r') -> Fortnight -> r)
    -> (forall r r'.
        (r' -> r -> r)
        -> r -> (forall d. Data d => d -> r') -> Fortnight -> r)
    -> (forall u. (forall d. Data d => d -> u) -> Fortnight -> [u])
    -> (forall u.
        Int -> (forall d. Data d => d -> u) -> Fortnight -> u)
    -> (forall (m :: * -> *).
        Monad m =>
        (forall d. Data d => d -> m d) -> Fortnight -> m Fortnight)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> Fortnight -> m Fortnight)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> Fortnight -> m Fortnight)
    -> Data Fortnight
    Fortnight -> Constr
    Fortnight -> DataType
    (forall b. Data b => b -> b) -> Fortnight -> Fortnight
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Fortnight -> c Fortnight
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Fortnight
    forall a.
    Typeable a =>
    (forall (c :: * -> *).
     (forall d b. Data d => c (d -> b) -> d -> c b)
     -> (forall g. g -> c g) -> a -> c a)
    -> (forall (c :: * -> *).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c a)
    -> (a -> Constr)
    -> (a -> DataType)
    -> (forall (t :: * -> *) (c :: * -> *).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c a))
    -> (forall (t :: * -> * -> *) (c :: * -> *).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
    -> ((forall b. Data b => b -> b) -> a -> a)
    -> (forall r r'.
        (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall r r'.
        (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall u. (forall d. Data d => d -> u) -> a -> [u])
    -> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
    -> (forall (m :: * -> *).
        Monad m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> Data a
    forall u. Int -> (forall d. Data d => d -> u) -> Fortnight -> u
    forall u. (forall d. Data d => d -> u) -> Fortnight -> [u]
    forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Fortnight -> r
    forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Fortnight -> r
    forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Fortnight -> m Fortnight
    forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Fortnight -> m Fortnight
    forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Fortnight
    forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Fortnight -> c Fortnight
    forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Fortnight)
    forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Fortnight)
    $cFortnight :: Constr
    $tFortnight :: DataType
    gmapMo :: (forall d. Data d => d -> m d) -> Fortnight -> m Fortnight
    $cgmapMo :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Fortnight -> m Fortnight
    gmapMp :: (forall d. Data d => d -> m d) -> Fortnight -> m Fortnight
    $cgmapMp :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Fortnight -> m Fortnight
    gmapM :: (forall d. Data d => d -> m d) -> Fortnight -> m Fortnight
    $cgmapM :: forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Fortnight -> m Fortnight
    gmapQi :: Int -> (forall d. Data d => d -> u) -> Fortnight -> u
    $cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Fortnight -> u
    gmapQ :: (forall d. Data d => d -> u) -> Fortnight -> [u]
    $cgmapQ :: forall u. (forall d. Data d => d -> u) -> Fortnight -> [u]
    gmapQr :: (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Fortnight -> r
    $cgmapQr :: forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Fortnight -> r
    gmapQl :: (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Fortnight -> r
    $cgmapQl :: forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Fortnight -> r
    gmapT :: (forall b. Data b => b -> b) -> Fortnight -> Fortnight
    $cgmapT :: (forall b. Data b => b -> b) -> Fortnight -> Fortnight
    dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Fortnight)
    $cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Fortnight)
    dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c Fortnight)
    $cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Fortnight)
    dataTypeOf :: Fortnight -> DataType
    $cdataTypeOf :: Fortnight -> DataType
    toConstr :: Fortnight -> Constr
    $ctoConstr :: Fortnight -> Constr
    gunfold :: (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Fortnight
    $cgunfold :: forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Fortnight
    gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Fortnight -> c Fortnight
    $cgfoldl :: forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Fortnight -> c Fortnight
    $cp1Data :: Typeable Fortnight
    Data,Integer -> Fortnight
    Fortnight -> Fortnight
    Fortnight -> Fortnight -> Fortnight
    (Fortnight -> Fortnight -> Fortnight)
    -> (Fortnight -> Fortnight -> Fortnight)
    -> (Fortnight -> Fortnight -> Fortnight)
    -> (Fortnight -> Fortnight)
    -> (Fortnight -> Fortnight)
    -> (Fortnight -> Fortnight)
    -> (Integer -> Fortnight)
    -> Num Fortnight
    forall a.
    (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> (a -> a)
    -> (a -> a)
    -> (a -> a)
    -> (Integer -> a)
    -> Num a
    fromInteger :: Integer -> Fortnight
    $cfromInteger :: Integer -> Fortnight
    signum :: Fortnight -> Fortnight
    $csignum :: Fortnight -> Fortnight
    abs :: Fortnight -> Fortnight
    $cabs :: Fortnight -> Fortnight
    negate :: Fortnight -> Fortnight
    $cnegate :: Fortnight -> Fortnight
    * :: Fortnight -> Fortnight -> Fortnight
    $c* :: Fortnight -> Fortnight -> Fortnight
    - :: Fortnight -> Fortnight -> Fortnight
    $c- :: Fortnight -> Fortnight -> Fortnight
    + :: Fortnight -> Fortnight -> Fortnight
    $c+ :: Fortnight -> Fortnight -> Fortnight
    Num,Eq Fortnight
    Eq Fortnight =>
    (Fortnight -> Fortnight -> Ordering)
    -> (Fortnight -> Fortnight -> Bool)
    -> (Fortnight -> Fortnight -> Bool)
    -> (Fortnight -> Fortnight -> Bool)
    -> (Fortnight -> Fortnight -> Bool)
    -> (Fortnight -> Fortnight -> Fortnight)
    -> (Fortnight -> Fortnight -> Fortnight)
    -> Ord Fortnight
    Fortnight -> Fortnight -> Bool
    Fortnight -> Fortnight -> Ordering
    Fortnight -> Fortnight -> Fortnight
    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 :: Fortnight -> Fortnight -> Fortnight
    $cmin :: Fortnight -> Fortnight -> Fortnight
    max :: Fortnight -> Fortnight -> Fortnight
    $cmax :: Fortnight -> Fortnight -> Fortnight
    >= :: Fortnight -> Fortnight -> Bool
    $c>= :: Fortnight -> Fortnight -> Bool
    > :: Fortnight -> Fortnight -> Bool
    $c> :: Fortnight -> Fortnight -> Bool
    <= :: Fortnight -> Fortnight -> Bool
    $c<= :: Fortnight -> Fortnight -> Bool
    < :: Fortnight -> Fortnight -> Bool
    $c< :: Fortnight -> Fortnight -> Bool
    compare :: Fortnight -> Fortnight -> Ordering
    $ccompare :: Fortnight -> Fortnight -> Ordering
    $cp1Ord :: Eq Fortnight
    Ord,Num Fortnight
    Ord Fortnight
    (Num Fortnight, Ord Fortnight) =>
    (Fortnight -> Rational) -> Real Fortnight
    Fortnight -> Rational
    forall a. (Num a, Ord a) => (a -> Rational) -> Real a
    toRational :: Fortnight -> Rational
    $ctoRational :: Fortnight -> Rational
    $cp2Real :: Ord Fortnight
    $cp1Real :: Num Fortnight
    Real,Ord Fortnight
    Ord Fortnight =>
    ((Fortnight, Fortnight) -> [Fortnight])
    -> ((Fortnight, Fortnight) -> Fortnight -> Int)
    -> ((Fortnight, Fortnight) -> Fortnight -> Int)
    -> ((Fortnight, Fortnight) -> Fortnight -> Bool)
    -> ((Fortnight, Fortnight) -> Int)
    -> ((Fortnight, Fortnight) -> Int)
    -> Ix Fortnight
    (Fortnight, Fortnight) -> Int
    (Fortnight, Fortnight) -> [Fortnight]
    (Fortnight, Fortnight) -> Fortnight -> Bool
    (Fortnight, Fortnight) -> Fortnight -> Int
    forall a.
    Ord a =>
    ((a, a) -> [a])
    -> ((a, a) -> a -> Int)
    -> ((a, a) -> a -> Int)
    -> ((a, a) -> a -> Bool)
    -> ((a, a) -> Int)
    -> ((a, a) -> Int)
    -> Ix a
    unsafeRangeSize :: (Fortnight, Fortnight) -> Int
    $cunsafeRangeSize :: (Fortnight, Fortnight) -> Int
    rangeSize :: (Fortnight, Fortnight) -> Int
    $crangeSize :: (Fortnight, Fortnight) -> Int
    inRange :: (Fortnight, Fortnight) -> Fortnight -> Bool
    $cinRange :: (Fortnight, Fortnight) -> Fortnight -> Bool
    unsafeIndex :: (Fortnight, Fortnight) -> Fortnight -> Int
    $cunsafeIndex :: (Fortnight, Fortnight) -> Fortnight -> Int
    index :: (Fortnight, Fortnight) -> Fortnight -> Int
    $cindex :: (Fortnight, Fortnight) -> Fortnight -> Int
    range :: (Fortnight, Fortnight) -> [Fortnight]
    $crange :: (Fortnight, Fortnight) -> [Fortnight]
    $cp1Ix :: Ord Fortnight
    Ix,Typeable)

    instance TimeUnit Fortnight where
      toMicroseconds :: Fortnight -> Integer
    toMicroseconds (Fortnight x :: Integer
    x) = Integer
    x Integer -> Integer -> Integer
    forall a. Num a => a -> a -> a
    * (Week -> Integer
    forall a. TimeUnit a => a -> Integer
    toMicroseconds (Week -> Integer) -> Week -> Integer
    forall a b. (a -> b) -> a -> b
    $ Integer -> Week
    Week 2)
      fromMicroseconds :: Integer -> Fortnight
    fromMicroseconds x :: Integer
    x           = Integer -> Fortnight
    Fortnight (Integer
    x Integer -> Integer -> Integer
    forall a. Integral a => a -> a -> a
    `div` (Week -> Integer
    forall a. TimeUnit a => a -> Integer
    toMicroseconds (Week -> Integer) -> Week -> Integer
    forall a b. (a -> b) -> a -> b
    $ Integer -> Week
    Week 2))
    instance Show Fortnight where
      show :: Fortnight -> String
    show (Fortnight x :: Integer
    x) = Integer -> String
    forall a. Show a => a -> String
    show Integer
    x String -> ShowS
    forall a. [a] -> [a] -> [a]
    ++ "fn"
    instance Read Fortnight where
      readsPrec :: Int -> ReadS Fortnight
    readsPrec = (Integer -> Fortnight) -> String -> Int -> ReadS Fortnight
    forall a.
    (Integer -> a) -> String -> Int -> String -> [(a, String)]
    readUnit Integer -> Fortnight
    Fortnight "fn"