> If I remember, the algorithm was described using nonuniform > data types, so that's yet another plug for supporting this more > directly in > OCaml, meaning, without having to use recursive modules, record field > polymorphism, or polymorphic records to work around the ability to > directly write such functions. The structure uses "bootstrapping" and so does my [Cf_deque] structure. I have handled bootstrapping in [Cf] with judicious use of [Obj.magic] to cast functions into the appropriate type at the recursion. Note: My [Cf] library is loaded with calls to [Obj.magic]. There are lots of places where the only way I could solve a problem was by hammering something deeply weird into a shape that would fit into the Ocaml type system. Mostly, that happens where I have an interface to C library stuff and I'm using shadow type annotations. But the bootstrapped data structures are another place. And the [Cf_gadget] module needs to do something similar (which was well known in the original Haskell code where that idea started). Every time the Ocaml team updates the compiler, I'm worried they're going to change something that invalidates my assumptions about what [Obj.magic] can and cannot do for me. I'm *not* saying they didn't warn me. I knew the job was dangerous. I'd be more exercised about the 'looping recursion' problem with List.map exploding on large data sets if I were not in the habit of using my [Cf] structures to avoid all that. -- j h woodyatt that's my village calling... no doubt, they want their idiot back.