new(list()) :: struct()
new(list(), list(), list(), list()) :: struct()
output(struct()) :: map()
update(struct(), map(), map(), number(), number()) :: tuple()