type 'a sequence = (* constant sequence: Cs h ~= [h; h; h; ...] *) | Cs of 'a (* generic sequence: S (x, xs) ~= x::xs *) | S of 'a * 'a sequence lazy_t (* differential sequence: for ds ~= [d0; d1; d2; ...], A(x0, ds) ~= [x0; x0+d0; x0+d0+d1; x0+d0+d1+d2; ...] *) | A of 'a * 'a sequence lazy_t (* generalized geometric progression: for ds ~= [d0; d1; d2; ...], G(x0,ds) ~= [x0; x0*d0; x0*d0*d1; x0*d0*d1*d2; ...] *) | G of 'a * 'a sequence lazy_t ;;