next: Lists

Predefined Bounds

CUE numbers have arbitrary precision. Also there is no unsigned integer type.

CUE defines the following predefined identifiers to restrict the bounds of integers to common values.

uint      >=0
uint8     >=0 & <=255
int8      >=-128 & <=127
uint16    >=0 & <=65536
int16     >=-32_768 & <=32_767
rune      >=0 & <=0x10FFFF
uint32    >=0 & <=4_294_967_296
int32     >=-2_147_483_648 & <=2_147_483_647
uint64    >=0 & <=18_446_744_073_709_551_615
int64     >=-9_223_372_036_854_775_808 & <=9_223_372_036_854_775_807
int128    >=-170_141_183_460_469_231_731_687_303_715_884_105_728 &
              <=170_141_183_460_469_231_731_687_303_715_884_105_727
uint128   >=0 & <=340_282_366_920_938_463_463_374_607_431_768_211_455

bound.cue

positive :: uint
byte ::     uint8
word ::     int32

a: positive & -1
b: byte & 128
c: word & 2_000_000_000

$ cue eval -ic bound.cue

a: _|_ // invalid value -1 (out of bound int & >=0)
b: 128
c: 2000000000