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.