Я неправильно всё это делал, конечно. Линеаризовывать деревья из пар нет особого смысла; и пусть живут два вида декартовых произведений; создавать такие изоморфизмы надо разве что по мере возникновения потребности. Тем более в джаве, где нет ни патернов, ни серьёзной информации о типах. Действительно, глупо, хотя и возможно, пытаться линеаризовать
cdr.
Pair(new ArrayList(Pair("a", "b"), "c", Pair(Pair("d", "e"), new List("f", Pair("g", "h"))), null)
cdr.