constructor (fn, args) {
      super()
      if (typeof fn === 'string') {
        fn = new SymbolNode(fn)
      }

      // validate input
      if (!isNode(fn)) throw new TypeError('Node expected as parameter "fn"')
      if (!Array.isArray(args) || !args.every(isNode)) {
        throw new TypeError(
          'Array containing Nodes expected for parameter "args"')
      }

      this.fn = fn
      this.args = args || []
    }
@constructor FunctionNode
@extends {./Node}
invoke a list with arguments on a node
@param {./Node | string} fn
    Item resolving to a function on which to invoke
    the arguments, typically a SymbolNode or AccessorNode
@param {./Node[]} args