Catenabledouble-ended queues are double-ended queues (deques) thatsupportcatenation(i.e., append)efficiently without sacrificing the efficiency of other operations. We present a purely functional implementationof catenable deques for which every operation, including catenation,takea0(1) amortizedtime. Kaplan and Tarjan haveindependentlydeveloped a much more complicated implementationof crdenabledeques thatachieves similar worst-casebounds. The two designs are superficially similar, but differ in the underlying mechanismused to achieve efficiency in a persistentsetting(i.e., whenused in a non-single-threadedfashion). Their implementation uses a techniquecalled recursiveslowdown, while ours relies on the simpler mechanism of lazy evaluation.Besides lazy evaluation, our implementation rdso exemplifies theuse of two additional language features: polymorphic recursion and views. Neitheris indispensable, but both significantly simplify the presentation.