We now have recursive matching - not quite GADT, but hey!