basic, non-generic type declarations <<< Person = type { name string age uint address string? } Maybe = variant { Nothing Just any } Error = class { error() string } Result = variant { Ok any Error Error } Twins = type (Person, Person) Group = type [Person] >>> (expr (binary = (expr (name Person)) (expr (type structure (field name) (type name string) (field age) (type name uint) (field address) (type maybe (type name string)))))) (expr (binary = (expr (name Maybe)) (expr (type variant (variant Nothing) (variant Just of (type name any)))))) (expr (binary = (expr (name Error)) (expr (type class (method error (returns (type name string))))))) (expr (binary = (expr (name Result)) (expr (type variant (variant Ok of (type name any)) (variant Error of (type name Error)))))) (expr (binary = (expr (name Twins)) (expr (type tuple (type name Person) (type name Person))))) (expr (binary = (expr (name Group)) (expr (type array of (type name Person)))))