public BufferWriter Compile(BufferTree tree)
        {
            DotNotation notation = tree.Notation;

            Delegate[]          binders  = this.GetBindersArgument(tree);
            IRelationMetadata[] metadata = this.GetMetadataArgument(tree);

            BufferInternalWriter        initializer = this.Compile(tree.Source, tree.Queues, tree.Header.Degree);
            List <BufferInternalWriter> writers     = tree.Queues.Select(this.Compile).ToList();

            return(new BufferWriter()
            {
                Initializer = this.Recompile(initializer, notation, binders, metadata),
                Queues = writers.Select(w => this.Recompile(w, notation, binders, metadata)).ToArray(),
            });
        }
 private Action <RelationBuffer> Recompile(BufferInternalWriter writer, DotNotation notation, Delegate[] binders, IRelationMetadata[] metadata)
 => buf => writer(buf.Fields, buf.Queues, buf.Source, buf.Model, notation, binders, metadata);