Module

pooka/time

src/pooka/time.pooka

Keep the calendar clock and the elapsed-time clock on different shelves.

Timestamp measures wall-clock milliseconds; Instant is for monotonic elapsed time. Duration stores integer milliseconds. Negative sleep durations are rejected, and timestamp arithmetic returns new values.

Pooka
import pooka/time

assert time.seconds(2).as_milliseconds() == 2000

API reference

enum

TimeError

src/pooka/time.pooka:17
enum TimeError
variant

NegativeDuration

src/pooka/time.pooka:18
TimeError.NegativeDuration
variant

DurationTooLarge

src/pooka/time.pooka:19
TimeError.DurationTooLarge
class

Duration

src/pooka/time.pooka:34
class Duration(milliseconds: Int)

An integer millisecond interval; elapsed and wall-clock APIs share this unit without sharing their clocks.

field

milliseconds

src/pooka/time.pooka:34
milliseconds: Int
INFERREDInt
constructor

new

src/pooka/time.pooka:34
INFERREDfn(Int) -> pooka/time.Duration
method

as_seconds

src/pooka/time.pooka:42
as_seconds() -> Float
INFERREDfn() -> Float

Convert stored milliseconds to floating-point seconds.

Pooka
import pooka/time

assert time.milliseconds(1500).as_seconds() == 1.5
method

as_milliseconds

src/pooka/time.pooka:53
as_milliseconds() -> Int
INFERREDfn() -> Int

Read the exact stored integer milliseconds.

Pooka
import pooka/time

assert time.seconds(2).as_milliseconds() == 2000
class

Timestamp

src/pooka/time.pooka:60
class Timestamp(milliseconds: Int)

A wall-clock point measured in milliseconds. Arithmetic returns another timestamp.

field

milliseconds

src/pooka/time.pooka:60
milliseconds: Int
INFERREDInt
constructor

new

src/pooka/time.pooka:60
INFERREDfn(Int) -> pooka/time.Timestamp
method

add

src/pooka/time.pooka:68
add(duration: Duration) -> Timestamp

Return a timestamp moved forward by the duration.

Pooka
import pooka/time

assert time.Timestamp(1000).add(time.milliseconds(25)).milliseconds == 1025
method

subtract

src/pooka/time.pooka:79
subtract(duration: Duration) -> Timestamp

Return a timestamp moved backward by the duration.

Pooka
import pooka/time

assert time.Timestamp(1000).subtract(time.milliseconds(25)).milliseconds == 975
class

Instant

src/pooka/time.pooka:86
class Instant

A monotonic clock reading for elapsed measurements. Construct readings with monotonic_now.

constructor

new

src/pooka/time.pooka:91
new(ticks: Int)
INFERREDfn(Int) -> pooka/time.Instant

Initialize the value from the supplied state. Later updates return new values.

method

duration_until

src/pooka/time.pooka:104
duration_until(end: Instant) -> Duration

Measure from this instant to end. Keep the start and end in their original order.

Pooka
import pooka/time

let start = time.monotonic_now()
let elapsed = start.duration_until(time.monotonic_now())
function

now

src/pooka/time.pooka:117
now() -> Timestamp
INFERREDfn() -> pooka/time.Timestamp

Read the wall clock as a millisecond timestamp. Use Instant for elapsed measurements.

Pooka
import pooka/time

let timestamp = time.now()
function

monotonic_now

src/pooka/time.pooka:128
monotonic_now() -> Instant
INFERREDfn() -> pooka/time.Instant

Read a monotonic instant for measuring elapsed time.

Pooka
import pooka/time

let started = time.monotonic_now()
function

duration_between

src/pooka/time.pooka:140
duration_between(start: Instant, end: Instant) -> Duration

Subtract two monotonic instants in start-to-end order.

Pooka
import pooka/time

let started = time.monotonic_now()
let elapsed = time.duration_between(started, time.monotonic_now())
function

seconds

src/pooka/time.pooka:151
seconds(value: Int) -> Duration
INFERREDfn(Int) -> pooka/time.Duration

Construct a duration by converting whole seconds to milliseconds.

Pooka
import pooka/time

assert time.seconds(2).as_milliseconds() == 2000
function

milliseconds

src/pooka/time.pooka:162
milliseconds(value: Int) -> Duration
INFERREDfn(Int) -> pooka/time.Duration

Construct a duration from integer milliseconds.

Pooka
import pooka/time

assert time.milliseconds(25).as_milliseconds() == 25
function

sleep

src/pooka/time.pooka:174
sleep(duration: Duration) -> Result(Nil, TimeError)
INFERREDfn(pooka/time.Duration) -> Result(Nil, pooka/time.TimeError)

Sleep for a nonnegative duration, returning typed errors for unsupported durations.

Pooka
import pooka/time

assert time.sleep(time.milliseconds(0)) == Ok(Nil)