A, B, C (type variables) ::_Each[Integer, void] (interface types) t, Goodcheck::patterns (alias types) untyped, void, nil, bool (base types) self (self type) 1, "str", :foo, true, false (literal types) Integer? (optional types) t_1 | t_2, t_1 & t_2 (union, intersection types) [t_1, ...], { id: Integer, name: String} (tuple, record) ^(Integer) -> void (proc types)