Esc
Start typing to search...

ValueLabelSet Module

Bidirectional mappings between integer values and human-readable labels.

The ValueLabelSet module provides functions for creating and manipulating value label sets, which map integer codes to descriptive strings. This is particularly useful for working with survey data, coded variables, and STATA-style value labels.

Common patterns

import ValueLabelSet

let gender = ValueLabelSet.fromList [(1, "Male"), (2, "Female")]
gender |> ValueLabelSet.getLabel 1   -- Just "Male"

Enum variant labels

Labels can be enum variants with display labels:

type AgeGroup = Young "<30" | Middle "30-60" | Old ">60"
ValueLabelSet.fromList [(1, AgeGroup::Young), (2, AgeGroup::Middle)]

Functions

Create

ValueLabelSet.fromList

List (Int, a) -> ValueLabelSet

Create a ValueLabelSet from a list of (value, label) pairs. Labels can be strings or enum variants (using display label or variant name).

See also: ValueLabelSet.empty, ValueLabelSet.insert

ValueLabelSet.empty

ValueLabelSet

Create an empty ValueLabelSet.

See also: ValueLabelSet.fromList

ValueLabelSet.insert

Int -> String -> ValueLabelSet -> ValueLabelSet

Insert a single value-label pair into the set.

See also: ValueLabelSet.fromList

Lookup

ValueLabelSet.getLabel

Int -> ValueLabelSet -> Maybe String

Get the label for a value.

See also: ValueLabelSet.getValue

ValueLabelSet.getValue

String -> ValueLabelSet -> Maybe Int

Get the value for a label (reverse lookup).

See also: ValueLabelSet.getLabel

Query

ValueLabelSet.size

ValueLabelSet -> Int

Get the number of labels.

See also: ValueLabelSet.isEmpty

ValueLabelSet.isEmpty

ValueLabelSet -> Bool

Check if the label set is empty.

See also: ValueLabelSet.size

ValueLabelSet.hasValue

Int -> ValueLabelSet -> Bool

Check if a value has a label.

See also: ValueLabelSet.hasLabel

ValueLabelSet.hasLabel

String -> ValueLabelSet -> Bool

Check if a label exists.

See also: ValueLabelSet.hasValue

ValueLabelSet.coverage

List Int -> ValueLabelSet -> { labeled: List Int, unlabeled: List Int, unused: List Int }

Check coverage of values against the label set.

ValueLabelSet.describe

ValueLabelSet -> String

Return a formatted table showing all value-label mappings.

Convert

ValueLabelSet.toList

ValueLabelSet -> List (Int, String)

Convert to a list of (value, label) pairs.

See also: ValueLabelSet.fromList

ValueLabelSet.values

ValueLabelSet -> List Int

Get all values in the label set.

See also: ValueLabelSet.labels

ValueLabelSet.labels

ValueLabelSet -> List String

Get all labels in the label set.

See also: ValueLabelSet.values

Transform

ValueLabelSet.merge

ValueLabelSet -> ValueLabelSet -> ValueLabelSet

Merge two label sets (first takes priority on conflicts).

ValueLabelSet.filter

List Int -> ValueLabelSet -> ValueLabelSet

Filter to only include values in the given list.

ValueLabelSet.remap

List (Int, Int) -> ValueLabelSet -> ValueLabelSet

Remap values according to a list of (old, new) pairs.

ValueLabelSet.invert

ValueLabelSet -> Maybe ValueLabelSet

Invert the label set (swap values and labels). Returns Nothing if labels aren't numeric.