PageDecoder

:= []

Compose pure or effectful decoders that derive typed data from a page source.

A decoder receives the discovered page value together with its UTF-8 source. Record-builder syntax combines independent decoders into a decoder for a record: { page: PageDecoder.page!, data: ... }.PageDecoder.

page! : Decoder(page, page, err)

Decode the discovered page value.

source! : Decoder(page, Str, err)

Decode the unmodified UTF-8 source text.

from_source : (Str -> Try(value, err)) -> Decoder(page, value, err)

Lift a pure source parser into a page decoder.

from_effect : (Input(page) => Try(value, err)) -> Decoder(page, value, err)

Use a custom effectful decoder with access to both the page and its source.

map : Decoder(page, a, err), (a -> b) -> Decoder(page, b, err)

Transform a decoded value.

map2 : Decoder(page, a, err), Decoder(page, b, err), (a, b -> c) -> Decoder(page, c, err)

Combine two independent decoders. Decoders run from left to right, and the second decoder is skipped if the first returns Err.

This is the applicative operation used by Roc's record-builder syntax.

run! : Decoder(page, value, err), Input(page) => Try(value, err)

Run a decoder with an already-loaded page input.

Input : {
    page : page,
    source : Str,
}

The input shared by every decoder for a page.

Decoder : Input(page) => Try(value, err)

An effectful decoder that derives value from one page input.