packages feed

ki-0.1.0: src/Ki/Duration.hs

module Ki.Duration
  ( Duration (..),
    toMicroseconds,
    microseconds,
    milliseconds,
    seconds,
  )
where

import Data.Data (Data)
import Data.Fixed
import Ki.Prelude

-- | A length of time with microsecond precision. Numeric literals are treated as seconds.
newtype Duration = Duration (Fixed E6)
  deriving stock (Data, Generic)
  deriving newtype (Enum, Eq, Fractional, Num, Ord, Read, Real, RealFrac, Show)

toMicroseconds :: Duration -> Int
toMicroseconds (Duration (MkFixed us)) =
  fromIntegral us

-- | One microsecond.
microseconds :: Duration
microseconds =
  Duration (MkFixed 1)

-- | One millisecond.
milliseconds :: Duration
milliseconds =
  Duration (MkFixed 1000)

-- | One second.
seconds :: Duration
seconds =
  Duration (MkFixed 1000000)