Just got up to steam my head - as one does ;).
I've looked at your solution; but haven't looked at the paper (not since a couple of months ago). I guess your bush of As is a list structure whose ultimate elements are As. That is, if you flatten a bush of As you get a list of As.
I think it is useful to begin with a more general data structure we'll call a mass. A bush in the above terms is a special case of a mass which is a list structure.
(datatype mass
[X | Y] : (list (mass A));
==========================
[X | Y] : (- (mass A));
X : (mass A) >> P;
__________________________
X : (- (list (mass A))) >> P;
______________
[] : (mass A);
X : A;
______
X : (- (mass A));)
4 is a mass of numbers and so is [4]. A bush is then a limiting case.
(datatype bush
[X | Y] : (mass A);
===================
[X | Y] : (- (bush A));)
What you are looking for, I think, is a way of searching a bush using a series of navigating commands.
We can use h for head and t for tail. Here is a script.
(2+) (define bush-example