Orb Programming Language

Type and value inspection

typeOf

The typeOf special form is used to get the type of a value at compile-time. The result is an evaluated value of type type.

import "std/io.orb";

fnc main () () {
    sym x:bool;
    typeOf x; # bool

    typeOf (std.scanI32); # i32
};

lenOf

The lenOf special form can be used to get the number of elements in an array, a tuple, a data type, or a raw value. It can be used either on a type or a value of that type.

Alternatively, it can get the length of an evaluated string value, including the null character at the end.

fnc main () () {
    lenOf (i32 f32 bool); # 3

    sym x:(i32 10);
    lenOf x; # 10

    lenOf "ola!"; # 5
};

sizeOf

The sizeOf special form returns the memory size in bytes of a type. It can only be used on types that can be compiled. Note that the result depends on the machine architecture for which the program is being compiled.

    sizeOf ((i32 c8) 4); # 32 on most modern machines

??

The ?? special form returns whether there is an existing definition with a given name. If it returns true, a lookup on that name will result in a typed value.

data Foo;

fnc main () () {
    sym x:i32;
    ?? x; # true

    ?? main; # true

    ?? c8; # true

    ?? Foo; # true

    ?? nonexistent; # false

    ?? sym; # false
};