Module builtin

The builtin package provides the classes, vars, and functions that form the foundation of Lily.


Boolean The Boolean class represents a value that is either true or false.
Byte The Byte class represents a wrapper over a single Byte value. A Byte value is always unsigned, giving it a range from 0 to 255. Byte literals are written using 't' as the suffix on an Integer value.
ByteString The ByteString class represents a bag of bytes. A ByteString may have '\0' values embedded within it. It may also have data that is not valid as utf-8. The ByteString class currently does not support any primitive operations.
Double The Double class exists as a wrapper over a C double.
Dynamic The Dynamic class allows defering type checking until runtime. Creation of Dynamic is done through Dynamic(<value>). Extraction of values is done through a cast: .@(type). The result of a cast is Option[<type>], with Some on success and None on failure. Finally, casts are not allowed to hold polymorphic types, such as List or Hash or Function, because Lily's vm only holds class information at runtime.
File The File class provides a wrapper over a C FILE * struct. A File is closed automatically when a scope exits (though not immediately). However, it is also possible to manually close a File.
Function The Function class represents a block of code to be called, which may or may not produce a value. Function values are first-class, and can be passed around as arguments, placed into a List, and so on.
Hash The Hash class provides a mapping between a key and a value. Hash values can be created through [key1 => value1, key2 => value2, ...]. When writing a Hash, the key is the first type, and the value is the second. / [1 => "a", 2 => "b", 3 => "c"] would therefore be written as Hash[Integer, String].
Integer The Integer class is Lily's native numeric type. Internally, it is a wrapper over a C int64_t.
List The List class represents a container of a given type, written as List[<inner type>]. A List value can be accessed through a positive index or a negative one (with negative indexes being an offset from the end). Attempting to access an invalid index will produce IndexError.
String The String class provides a wrapper over a C char *. The String class is guaranteed to have a single '\0' terminator. Additionally, a String is guaranteed to always be valid utf-8.
Tuple The Tuple class provides a fixed-size container over a set of types. Tuple is ideal for situations where a variety of data is needed, but a class is too complex.


Option The Option type presents a way to hold either a value of A, or None, with None being valid for any Option. A common use for this is as a return type for functions that may fail, but have no meaningful error message.
Result Result is an enum that holds either a Failure or Success. This enum is for situations where the function that fails has an error message to deliver. Examples of that include a database query or a more humble rpn calculator.


DivisionByZeroError The DivisionByZeroError is a subclass of Exception that is raised when trying to divide or modulo by zero.
Exception The Exception class is the base class of all exceptions. It defines two properties: A message as String, and a traceback as List[String]. The traceback field is rewritten whenever an exception instance is raised.
IndexError IndexError is a subclass of Exception that is raised when attempting to access an index that is out-of-bounds (too low or too high, after accounting for negative wraparound).
IOError IOError is a subclass of Exception that is raised when an IO operation fails or does not have permission.
KeyError KeyError is a subclass of Exception that is raised when trying to get an item from a Hash that does not exist.
RuntimeError RuntimeError is a subclass of Exception that is raised when the recursion limit is exceeded, or when trying to modify a Hash while iterating over it.
ValueError ValueError is a subclass of Exception that is raised when sending an improper argument to a function, such as trying to call List.repeat with a negative amount.


define print(value: A)

Write value to stdout, plus a newline ("\n"). This is equivalent to stdout.print(value).

# Errors:

  • IOError if stdout is closed, or not open for reading.

define calltrace: List[String]

Returns a List with one String for each function that is currently entered.


var stdin: File

Provides a wrapper around the stdin present within C.

var stderr: File

Provides a wrapper around the stderr present within C.

var stdout: File

Provides a wrapper around the stdout present within C.