func (e Exp) Union(operands ...interface{}) Exp {
	return naryOperator(unionKind, e, operands...)
}
Union concatenates two sequences.

Example usage:

var response []interface{}
// Retrieve all heroes and villains
r.Table("heroes").Union(r.Table("villains")).Run(session).All(&response)

Example response:

[
{
"durability": 6,
"energy": 6,
"fighting": 3,
"id": "1a760d0b-57ef-42a8-9fec-c3a1f34930aa",
"intelligence": 6,
"name": "Iron Man",
"real_name": "Anthony Edward \"Tony\" Stark",
"speed": 5,
"strength": 6
},
...
]
package rethinkgo
type Map map[string]interface{}
type List []interface{}
type expressionKind int
const (
	addKind expressionKind = iota
	allKind
	anyKind
	appendKind
	ascendingKind
	betweenKind
	branchKind
	changeAtKind
	coerceToKind
	concatMapKind
	containsKind
	countKind
	databaseCreateKind
	databaseDropKind
	databaseKind
	databaseListKind
	deleteAtKind
	deleteKind
	descendingKind
	differenceKind
	distinctKind
	divideKind
	defaultKind
	eqJoinKind
	equalityKind
	errorKind
	filterKind
	forEachKind
	funcallKind
	funcKind
	getAllKind
	getFieldKind
	getKind
	greaterThanKind
	greaterThanOrEqualKind
	groupByKind
	groupedMapReduceKind
	hasFieldsKind
	implicitVariableKind
	indexCreateKind
	indexDropKind
	indexesOfKind
	indexListKind
	inequalityKind
	infoKind
	innerJoinKind
	insertAtKind
	insertKind
	isEmptyKind
	javascriptKind
	jsonKind
	keysKind
	lessThanKind
	lessThanOrEqualKind
	limitKind
	logicalNotKind
	mapKind
	matchKind
	mergeKind
	moduloKind
	multiplyKind
	nthKind
	orderByKind
	outerJoinKind
	pluckKind
	prependKind
	reduceKind
	returnValuesKind
	replaceKind
	sampleKind
	setDifferenceKind
	setInsertKind
	setIntersectionKind
	setUnionKind
	skipKind
	sliceKind
	spliceAtKind
	subtractKind
	tableCreateKind
	tableDropKind
	tableKind
	tableListKind
	typeOfKind
	unionKind
	updateKind
	variableKind
	withFieldsKind
	withoutKind
	zipKind
	upsertKind
	atomicKind
	useOutdatedKind
	durabilityKind
	literalKind
)
func nullaryOperator(kind expressionKind) Exp {
	return Exp{kind: kind}
}
func naryOperator(kind expressionKind, operand interface{}, operands ...interface{}) Exp {
	args := []interface{}{operand}
	args = append(args, operands...)
	return Exp{kind: kind, args: args}
}
func stringsToInterfaces(strings []string) []interface{} {
	interfaces := make([]interface{}, len(strings))
	for i, v := range strings {
		interfaces[i] = interface{}(v)
	}
	return interfaces
}
func funcWrapper(f interface{}, arity int) Exp {
	return naryOperator(funcKind, f, arity)
}
type Exp struct {  
	args []interface{}
	kind expressionKind
}
var Row = Exp{kind: implicitVariableKind}
func Expr(value interface{}) Exp {
	v, ok := value.(Exp)  
	if ok {
		return v
	}
	return naryOperator(literalKind, value)
}
func Json(value string) Exp {
	return naryOperator(jsonKind, value)
}
func Js(body string) Exp {
	return naryOperator(javascriptKind, body)
}
func JsWithTimeout(body string, timeout float64) Exp {
	return naryOperator(javascriptKind, body, timeout)
}
func RuntimeError(message string) Exp {
	return Exp{kind: errorKind, args: List{message}}
}
func Branch(test, trueBranch, falseBranch interface{}) Exp {
	return naryOperator(branchKind, test, trueBranch, falseBranch)
}
func (e Exp) Get(key interface{}) Exp {
	return naryOperator(getKind, e, key)
}
func (e Exp) GetAll(index string, values ...interface{}) Exp {
	return naryOperator(getAllKind, e, append(values, index)...)
}
func (e Exp) GroupBy(attribute, groupedMapReduce interface{}) Exp {
	_, ok := attribute.(string)
	if ok {
		attribute = List{attribute}
	}
	return naryOperator(groupByKind, e, attribute, groupedMapReduce)
}
func (e Exp) UseOutdated(useOutdated bool) Exp {
	return naryOperator(useOutdatedKind, e, useOutdated)
}
func (e Exp) Durability(durability string) Exp {
	return naryOperator(durabilityKind, e, durability)
}
func (e Exp) Attr(name string) Exp {
	return naryOperator(getFieldKind, e, name)
}
func (e Exp) Add(operand interface{}) Exp {
	return naryOperator(addKind, e, operand)
}
func (e Exp) Sub(operand interface{}) Exp {
	return naryOperator(subtractKind, e, operand)
}
func (e Exp) Mul(operand interface{}) Exp {
	return naryOperator(multiplyKind, e, operand)
}
func (e Exp) Div(operand interface{}) Exp {
	return naryOperator(divideKind, e, operand)
}
func (e Exp) Mod(operand interface{}) Exp {
	return naryOperator(moduloKind, e, operand)
}
func (e Exp) And(operand interface{}) Exp {
	return naryOperator(allKind, e, operand)
}
func (e Exp) Or(operand interface{}) Exp {
	return naryOperator(anyKind, e, operand)
}
func (e Exp) Eq(operand interface{}) Exp {
	return naryOperator(equalityKind, e, operand)
}
func (e Exp) Ne(operand interface{}) Exp {
	return naryOperator(inequalityKind, e, operand)
}
func (e Exp) Gt(operand interface{}) Exp {
	return naryOperator(greaterThanKind, e, operand)
}
func (e Exp) Ge(operand interface{}) Exp {
	return naryOperator(greaterThanOrEqualKind, e, operand)
}
func (e Exp) Lt(operand interface{}) Exp {
	return naryOperator(lessThanKind, e, operand)
}
func (e Exp) Le(operand interface{}) Exp {
	return naryOperator(lessThanOrEqualKind, e, operand)
}
func (e Exp) Not() Exp {
	return naryOperator(logicalNotKind, e)
}
func (e Exp) Distinct() Exp {
	return naryOperator(distinctKind, e)
}
func (e Exp) Count() Exp {
	return naryOperator(countKind, e)
}
func (e Exp) Merge(operand interface{}) Exp {
	return naryOperator(mergeKind, e, operand)
}
func (e Exp) Append(value interface{}) Exp {
	return naryOperator(appendKind, e, value)
}