necoherence/transition

Types

Capacity

opaque

A bound on how many outputs one transition may accumulate.

pub opaque type Capacity
pub type CapacityError {
  CapacityNegative(value: Int)
}

Constructors

  • CapacityNegative(value: Int)

What one application of the caller’s advance function decided about the input it was given.

pub type Consumption(state, output) {
  Consumed(state: state, outputs: List(output))
  Reprocess(state: state, outputs: List(output))
}

Constructors

  • Consumed(state: state, outputs: List(output))
  • Reprocess(state: state, outputs: List(output))
pub type LimitError {
  LimitNotPositive(value: Int)
}

Constructors

  • LimitNotPositive(value: Int)

A positive bound on how many times one input may be reprocessed.

pub opaque type PositiveLimit

Why a transition stopped without consuming its input.

pub type StepFailure {
  ReprocessLimitExhausted(limit: Int)
  CapacityExceeded(capacity: Int, attempted: Int)
}

Constructors

  • ReprocessLimitExhausted(limit: Int)
  • CapacityExceeded(capacity: Int, attempted: Int)

The closed result of one transition.

pub type StepTransition(state, output) {
  Settled(state: state, outputs: List(output), applications: Int)
  Failed(
    state: state,
    outputs: List(output),
    failure: StepFailure,
  )
}

Constructors

  • Settled(state: state, outputs: List(output), applications: Int)
  • Failed(state: state, outputs: List(output), failure: StepFailure)

Values

pub fn capacity_new(
  value: Int,
) -> Result(Capacity, CapacityError)
pub fn capacity_value(capacity: Capacity) -> Int
pub fn positive_limit_new(
  value: Int,
) -> Result(PositiveLimit, LimitError)
pub fn positive_limit_value(limit: PositiveLimit) -> Int
pub fn step(
  state: state,
  input: input,
  advance: fn(state, input) -> Consumption(state, output),
  limit: PositiveLimit,
  capacity: Capacity,
) -> StepTransition(state, output)

Evaluate one input to a closed result in a single call.

advance is applied to the same input until it reports Consumed, at most limit times. Outputs keep the order in which advance produced them and never exceed capacity.

✨ Search Document