@@ -138,7 +138,7 @@ let rec remove f = function
138138 aux 0
139139
140140let rec insert f x = function
141- | BCons (head , tail ) when f head < = 0 -> BCons (head, BCons (x,tail))
141+ | BCons (head , tail ) when f head > 0 -> BCons (head, BCons (x,tail))
142142 | BCons (head , tail ) -> BCons (head, insert f x tail)
143143 | BArray { len; data } ->
144144 let rec aux i =
@@ -174,19 +174,24 @@ let next (x,n) =
174174 | BArray { len; data } -> assert (n < len); data.(n), (x,n+ 1 )
175175 | BCons (a ,xs ) -> a, (xs,n)
176176
177- let (* [@tail_mod_cons]*) rec to_list_aux i len data =
177+ (* ocaml >= 4.14
178+ let[@tail_mod_cons] rec to_list_aux i len data =
178179 if i = len then []
179- else data.(i) :: to_list_aux (i+ 1 ) len data
180+ else data.(i) :: to_list_aux (i+1) len data *)
181+
182+ let rec to_list_aux i len data acc =
183+ if i = len then List. rev acc
184+ else to_list_aux (i+ 1 ) len data (data.(i) :: acc)
180185
181186let rec to_list = function
182187 | BCons (x ,xs ) -> x :: to_list xs
183- | BArray { len; data } -> to_list_aux 0 len data
188+ | BArray { len; data } -> to_list_aux 0 len data []
184189
185190let to_list (x ,n ) =
186191 if n = 0 then to_list x else
187192 match x with
188193 | BCons _ -> assert false
189- | BArray { len; data } -> to_list_aux n len data
194+ | BArray { len; data } -> to_list_aux n len data []
190195
191196let of_list l = let data = Array. of_list l in BArray { len = Array. length data; data }, 0
192197
0 commit comments