ConstReadonlyArray: "array"An ARRAY that is not a reference — {1,2}, or a computed one (SEQUENCE, TRANSPOSE(…)).
ReadonlyBoolean: "boolean"A boolean value (true or false).
ReadonlyError: "error"A cell that contains an error value.
ReadonlyLambda: "lambda"A callable — LAMBDA(…), an eta-reduced function name, or a lambda-valued binding.
ReadonlyNull: "null"Represents the absence of a value.
ReadonlyNumber: "number"A numeric value.
ReadonlyOmitted: "omitted"OMITTED — nothing at this position: the empty comma of CUMIPMT(,120,…), or a position
past what the caller wrote. A blank CELL is a Reference (blankness is the cell's value).
ABSENT-vs-omitted — whether the position exists in the call at all — is not a kind; it is
index >= getLength().
ReadonlyReference: "reference"A reference — A1, A1:B3, or a reference-returning call (INDEX, OFFSET, TAKE).
ReadonlyRichData: "richData"A complex data type represented as IRichData.
ReadonlyString: "string"A string value.
A value's kind and its extent are different axes: {10}, A1 and a bare 10 all reach a
range-typed parameter as a 1x1 container, yet Excel separates them:
VLOOKUP(10,10,1,TRUE) is #N/A while VLOOKUP(10,{10},1,TRUE) is 10, and TYPE answers
1 vs 64. The kind is what the CALLER supplied; the extent is merely its size.
The scalar kinds ARE ScalarType values — one vocabulary, so
getKindAt(i) === ScalarType.Boolean reads naturally — extended with the four kinds only an
argument can be: a reference, a non-reference array, a callable, and no argument at all. As an
argument kind, ScalarType.Null means a BLANK value.
The names and values are ours. The numeric codes Excel's TYPE function answers are a
PROJECTION of this kind (see TYPE's implementation), not the kind itself.
The KIND of one value — the total discriminator over IFunctionArguments.RawArg, and the vocabulary a RETURN declaration speaks (IFunction.IReturnType.getKind).