diff --git a/sequence.ml b/sequence.ml index 58100c5..68b6e8a 100644 --- a/sequence.ml +++ b/sequence.ml @@ -30,11 +30,19 @@ let filter p seq = let seq_fun' k = seq.seq_fun (fun x -> if p x then k x) in { seq_fun=seq_fun'; } -(** Concatenate two sequences *) -let concat s1 s2 = +(** Append two sequences *) +let append s1 s2 = let seq_fun k = s1.seq_fun k; s2.seq_fun k in { seq_fun; } +(** Concatenate a sequence of sequences into one sequence *) +let concat s = + let seq_fun k = + (* function that is called on every sub-sequence *) + let k_seq seq = iter k seq in + s.seq_fun k_seq + in { seq_fun; } + (** Take at most [n] elements from the sequence *) let take n seq = let count = ref 0 in diff --git a/sequence.mli b/sequence.mli index b21562c..4445b2f 100644 --- a/sequence.mli +++ b/sequence.mli @@ -23,8 +23,11 @@ val map : ('a -> 'b) -> 'a t -> 'b t val filter : ('a -> bool) -> 'a t -> 'a t (** Filter on elements of the sequence *) -val concat : 'a t -> 'a t -> 'a t - (** Concatenate two sequences *) +val append : 'a t -> 'a t -> 'a t + (** Append two sequences *) + +val concat : 'a t t -> 'a t + (** Concatenate a sequence of sequences into one sequence *) val take : int -> 'a t -> 'a t (** Take at most [n] elements from the sequence *)