// Yes the nomenclature is a bit illogical
static Chain chainPlus(Chain chain, A a) {
ret Chain(a, chain);
}
static ReverseChain chainPlus(ReverseChain chain, A a) {
ret ReverseChain(chain, a);
}
ifclass AppendableChain
static Chain chainPlus(AppendableChain chain, A a) {
ret chain == null ? new AppendableChain(a) : chain.add(A);
}
endif