@Override
public void $serialize$(Callable<? extends Deconstructor> deconstructor) {
// Don't call super.$serialize$() since our runtime super class is
// an implementation detail
Generic myTd = (TypeDescriptor.Generic)$getType$();
Deconstructor dtor = deconstructor.$call$(ceylon.language.meta.typeLiteral_.typeLiteral(myTd));
TypeDescriptor reifiedElement = myTd.getTypeArguments()[0];
TypeDescriptor reifiedFirst = myTd.getTypeArguments()[1];
TypeDescriptor reifiedRest = myTd.getTypeArguments()[2];
dtor.putTypeArgument(
((GenericDeclaration)Metamodel.getOrCreateMetamodel(Tuple.class)).getTypeParameterDeclaration("Element"),
Metamodel.getAppliedMetamodel(reifiedElement));
dtor.putTypeArgument(
((GenericDeclaration)Metamodel.getOrCreateMetamodel(Tuple.class)).getTypeParameterDeclaration("First"),
Metamodel.getAppliedMetamodel(reifiedFirst));
dtor.putTypeArgument(
((GenericDeclaration)Metamodel.getOrCreateMetamodel(Tuple.class)).getTypeParameterDeclaration("Rest"),
Metamodel.getAppliedMetamodel(reifiedRest));
ValueDeclaration firstAttribute = (ValueDeclaration)((ClassDeclaration)Metamodel.getOrCreateMetamodel(Tuple.class)).getMemberDeclaration(ValueDeclaration.$TypeDescriptor$, "first");
dtor.putValue(reifiedFirst, firstAttribute, getFirst());
ValueDeclaration restAttribute = (ValueDeclaration)((ClassDeclaration)Metamodel.getOrCreateMetamodel(Tuple.class)).getMemberDeclaration(ValueDeclaration.$TypeDescriptor$, "rest");
dtor.putValue(reifiedRest, restAttribute, getRest());
}