Implementing Visit

Every now and then, you need to create a phrase that manipulates options manually, rather than simply describing a grammar with elements. This is the lowest-level elliptical feature, and most people will never need to use it.

visit: (
  option: Option,
  element: Element
  traverse: (element: Element, option: Option) => Iterable<Option>
) => Iterable<Option>

The visit function will only be called if describe does not exist. If it needs to parse children, it can do so with the traverse function which is passed as the third argument.

const MyPhrase = {
  visit (option, {props, children}, traverse) {
    console.log('props', props, 'option', option)
    return traverse(children[0])
  }
}