This Commented CUE demonstrates how to write a type switch, where output needs to differ based on the type of data being processed. Because the CUE language does not include a switch statement, a mechanism is shown that behaves like a switch statement in some other languages.

file.cue
package example

input: [
	42,
	139.4,
	"some string",
	["some", "list"],
	{some: "struct"},
	true,
	false,
]

// output is derived from input, and adheres to the following schema:
output: [...{
	source!:    _      // the value being examined
	type!:      string // source's type, in words
	isANumber!: bool   // true iff source is a number
}]

output: [for v in input {
	source: v

	// type's trailing "[0]" acts like a switch statement, selecting the
	// first value whose conditional evaluates to true.
	type: [
		if (v & string) != _|_ {"a string"},
		if (v & int) != _|_ {"an int"},
		if (v & float) != _|_ {"a float"},
		if (v & bool) != _|_ {"a boolean"},
		if (v & [...]) != _|_ {"a list"},
		if (v & {...}) != _|_ {"a struct"},
	][0]

	// Here, isANumber is implemented as a switch. Other, simpler,
	// representations are also possible.
	isANumber: [
			if (v & number) != _|_ {true},
			if (v & number) == _|_ {false},
	][0]
}]
TERMINAL
$ cue eval -s -e output
[{
    source:    42
    type:      "an int"
    isANumber: true
}, {
    source:    139.4
    type:      "a float"
    isANumber: true
}, {
    source:    "some string"
    type:      "a string"
    isANumber: false
}, {
    source: ["some", "list"]
    type:      "a list"
    isANumber: false
}, {
    source: some: "struct"
    type:      "a struct"
    isANumber: false
}, {
    source:    true
    type:      "a boolean"
    isANumber: false
}, {
    source:    false
    type:      "a boolean"
    isANumber: false
}]