Hyperlinkv0.8.0-beta.28

Duration

Duration.sumconsteffect/Duration.ts:1494
(that: Duration): (self: Duration) => Duration
(self: Duration, that: Duration): Duration

Adds two Durations together.

Details

Infinity addition follows these rules:

  • infinity + infinity = infinity
  • infinity + negativeInfinity = zero
  • infinity + finite = infinity
  • negativeInfinity + negativeInfinity = negativeInfinity
  • negativeInfinity + finite = negativeInfinity

Example (Adding durations)

import { Duration } from "effect"

const total = Duration.sum(Duration.seconds(5), Duration.seconds(3))
console.log(Duration.toSeconds(total)) // 8
math
export const sum: {
  (that: Duration): (self: Duration) => Duration
  (self: Duration, that: Duration): Duration
} = dual(
  2,
  (self: Duration, that: Duration): Duration =>
    matchPair(self, that, {
      onMillis: (self, that) => make(self + that),
      onNanos: (self, that) => make(self + that),
      onInfinity: (self, that) => {
        const s = self.value._tag
        const t = that.value._tag
        if (s === "Infinity" && t === "NegativeInfinity") return zero
        if (s === "NegativeInfinity" && t === "Infinity") return zero
        if (s === "Infinity" || t === "Infinity") return infinity
        if (s === "NegativeInfinity" || t === "NegativeInfinity") return negativeInfinity
        // unreachable, but satisfy TS
        return zero
      }
    })
)
Referenced by 2 symbols