optionally callable

tests:


TODO: try nesting them!