A TupleBuilder abstracts the work of constructing a tuple data structure such as a TupleN or KList
and extracting values from it. The Instance macro implementation will (roughly) traverse the tree of its argument
and ultimately obtain a list of expressions with type M[T] for different types T.
The macro constructs an Input value for each of these expressions that contains the Type for T,
the Tree for the expression, and a ValDef that will hold the value for the input.
TupleBuilder.apply is provided with the list of Inputs and is expected to provide three values in the returned BuilderResult.
First, it returns the constructed tuple data structure Tree in input.
Next, it provides the type constructor representationC that, when applied to M, gives the type of tuple data structure.
For example, a builder that constructs a Tuple3 for inputs M[Int], M[Boolean], and M[String]
would provide a Type representing [L[x]] (L[Int], L[Boolean], L[String]). The input method
would return a value whose type is that type constructor applied to M, or (M[Int], M[Boolean], M[String]).
Finally, the extract method provides a list of vals that extract information from the applied input.
The type of the applied input is the type constructor applied to Id ([X] X).
The returned list of ValDefs should be the ValDefs from inputs, but with non-empty right-hand sides.
A
TupleBuilder
abstracts the work of constructing a tuple data structure such as aTupleN
orKList
and extracting values from it. TheInstance
macro implementation will (roughly) traverse the tree of its argument and ultimately obtain a list of expressions with typeM[T]
for different typesT
. The macro constructs anInput
value for each of these expressions that contains theType
forT
, theTree
for the expression, and aValDef
that will hold the value for the input.TupleBuilder.apply
is provided with the list ofInput
s and is expected to provide three values in the returned BuilderResult. First, it returns the constructed tuple data structure Tree ininput
. Next, it provides the type constructorrepresentationC
that, when applied to M, gives the type of tuple data structure. For example, a builder that constructs aTuple3
for inputsM[Int]
,M[Boolean]
, andM[String]
would provide a Type representing[L[x]] (L[Int], L[Boolean], L[String])
. Theinput
method would return a value whose type is that type constructor applied to M, or(M[Int], M[Boolean], M[String])
.Finally, the
extract
method provides a list of vals that extract information from the applied input. The type of the applied input is the type constructor applied toId
([X] X
). The returned list of ValDefs should be the ValDefs frominputs
, but with non-empty right-hand sides.