time-interval-0.1.1: Use a time unit class, but hold a concrete time type.

Safe HaskellNone



Suppose you have Settings type, and one of its fields specifies an amount of time. Suppose you want to use Data.Time.Units for that, because it abstracts away the direct use or Int or Integer. Using TimeUnit directly would require to add the concrete time unit type as a type parameter of Settings (or use GHC type related extensions):

data Settings t = Settings
    { x :: Int
    , y :: Text
    , z :: t

And any use of z would require to specify the TimeUnit t => constraint. If you want to add more settings fields later which are time durations, you'll need to add more type variables which may break code which uses the Settings type.

data Settings t1 t2 t3 = Settings
    { x :: Int
    , y :: Text
    , z :: t1
    , u :: t2
    , v :: t3

This package provides something between Int and TimeUnit. A concrete type for specifying time durations, which both hide the integers and avoid the type variables:

data Settings = Settings
    { x :: Int
    , y :: Text
    , z :: TimeInterval
    , u :: TimeInterval
    , v :: TimeInterval

There is nothing magical here, this is simply a convenience package for people who encounter this issue in their code.

Note that currently TimeInterval stores time as microseconds internally. This may be a problem if you plan to work with smaller intervals (nanoseconds, picoseconds, etc.). If you have such needs, please contact the maintainer to discuss a solution.



fromTimeUnit :: TimeUnit t => t -> TimeInterval Source

Convert a time value expressed in a some time unit into a TimeInterval.

toTimeUnit :: TimeUnit t => TimeInterval -> t Source

Convert a TimeInterval to a TimeUnit instance.

toMicroUnit :: TimeInterval -> Microsecond Source

Specialized toTimeUnit for converting to Microsecond units.

time :: TimeUnit t => t -> TimeInterval Source

Deprecated: Use fromTimeUnit instead

Deprecated alias of fromTimeUnit.

microseconds :: TimeInterval -> Integer Source

Express a TimeInterval in microseconds.