CalendarVersion

The CalendarVersion module provides functions for working with calendar versions in the year.month.day format (e.g., "2024.1.15"). Follows the CalVer specification.

Construction

CalendarVersion
Int -> Int -> Int -> CalendarVersion
Creates a calendar version from year, month, and day numbers.
v = CalendarVersion 2024 1 15
println (CalendarVersion.to-string v)
# => "2024.1.15"

Parsing and Formatting

CalendarVersion.parse
String -> CalendarVersion
Parses a version string into a CalendarVersion.
v = CalendarVersion.parse "2024.1.15"
println (CalendarVersion.year v)
# => 2024
CalendarVersion.to-string
CalendarVersion -> String
Converts a CalendarVersion to a string in "year.month.day" format.
v = CalendarVersion 2024 6 1
println (CalendarVersion.to-string v)
# => "2024.6.1"
CalendarVersion.debug
CalendarVersion -> String
Converts a CalendarVersion to a debug string representation.

Version Components

CalendarVersion.year
CalendarVersion -> Int
Returns the year component.
CalendarVersion.month
CalendarVersion -> Int
Returns the month component.
CalendarVersion.day
CalendarVersion -> Int
Returns the day component.
v = CalendarVersion.parse "2026.1.13"
println (CalendarVersion.year v)   # => 2026
println (CalendarVersion.month v)  # => 1
println (CalendarVersion.day v)    # => 13

Comparison

CalendarVersion.compare
CalendarVersion -> CalendarVersion -> Int
Compares two versions. Returns -1 if the first is less, 0 if equal, 1 if greater.
v1 = CalendarVersion 2024 1 15
v2 = CalendarVersion 2024 6 1
println (CalendarVersion.compare v1 v2)
# => -1
CalendarVersion.eq?
CalendarVersion -> CalendarVersion -> Bool
Returns true if two versions are equal.
CalendarVersion.lt? / CalendarVersion.gt?
CalendarVersion -> CalendarVersion -> Bool
Returns true if the first version is less than / greater than the second.
CalendarVersion.lte? / CalendarVersion.gte?
CalendarVersion -> CalendarVersion -> Bool
Returns true if the first version is less than or equal / greater than or equal to the second.
v1 = CalendarVersion 2025 1 1
v2 = CalendarVersion 2024 12 31

println (CalendarVersion.gt? v1 v2)   # => true
println (CalendarVersion.gte? v1 v2)  # => true

Validation

CalendarVersion.valid-date?
CalendarVersion -> Bool
Returns true if the version represents a valid calendar date. Checks that month is 1-12 and day is valid for the given month/year.
v1 = CalendarVersion 2024 2 29  # Leap year
v2 = CalendarVersion 2023 2 29  # Not a leap year

println (CalendarVersion.valid-date? v1)  # => true
println (CalendarVersion.valid-date? v2)  # => false

Type Checking

is-calendar-version?
a -> Bool
Returns true if the value is a CalendarVersion.
v = CalendarVersion 2024 1 1
println (is-calendar-version? v)  # => true
println (is-calendar-version? 42) # => false