- TODO: use other types as integer
- TODO: init with functions
- TODO: init with expressions
- TODO: init structured types with optional fields
