Skip to content

Commit e9034b4

Browse files
committed
add list documentation and curried api
1 parent 2138ffc commit e9034b4

10 files changed

+567
-330
lines changed

jscomp/others/bs_List.ml

+90-68
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ let get x n =
111111
else nthAux x n
112112

113113
let getExn x n =
114-
if n < 0 then [%assert "nthAssert"]
114+
if n < 0 then [%assert "getExn"]
115115
else nthAuxAssert x n
116116

117117
let rec partitionAux p cell precX precY =
@@ -305,34 +305,38 @@ let concat xs ys =
305305
unsafeMutateTail (copyAuxCont t cell) ys;
306306
cell
307307

308-
let map xs f =
308+
let mapU xs f =
309309
match xs with
310310
| [] -> []
311311
| h::t ->
312312
let cell = mutableCell (f h [@bs]) [] in
313313
copyAuxWithMap t cell f;
314314
cell
315315

316-
let zipBy l1 l2 f =
316+
let map xs f = mapU xs (fun[@bs] x -> f x )
317+
318+
let zipByU l1 l2 f =
317319
match (l1, l2) with
318320
| (a1::l1, a2::l2) ->
319321
let cell = mutableCell (f a1 a2 [@bs]) [] in
320322
copyAuxWithMap2 f l1 l2 cell;
321323
cell
322324
| [], _ | _, [] -> []
323325

324-
let mapWithIndex xs f =
326+
let zipBy l1 l2 f = zipByU l1 l2 (fun[@bs] x y -> f x y)
327+
328+
let mapWithIndexU xs f =
325329
match xs with
326330
[] -> []
327331
| h::t ->
328332
let cell = mutableCell (f 0 h [@bs]) [] in
329333
copyAuxWithMapI f 1 t cell;
330334
cell
331335

336+
let mapWithIndex xs f = mapWithIndexU xs (fun[@bs] i x -> f i x)
332337

333338

334-
335-
let makeBy n f =
339+
let makeByU n f =
336340
if n <= 0 then []
337341
else
338342
let headX = mutableCell (f 0 [@bs]) [] in
@@ -347,6 +351,8 @@ let makeBy n f =
347351
;
348352
headX
349353

354+
let makeBy n f = makeByU n (fun[@bs] x -> f x)
355+
350356
let make n v =
351357
if n <= 0 then []
352358
else
@@ -466,135 +472,154 @@ let rec mapRevAux f accu xs =
466472
| [] -> accu
467473
| a::l -> mapRevAux f (f a [@bs] :: accu) l
468474

469-
let mapReverse l f =
475+
let mapReverseU l f =
470476
mapRevAux f [] l
471477

478+
let mapReverse l f = mapReverseU l (fun [@bs] x -> f x)
472479

473-
let rec forEach xs f =
480+
let rec forEachU xs f =
474481
match xs with
475482
[] -> ()
476-
| a::l -> f a [@bs]; forEach l f
483+
| a::l -> f a [@bs]; forEachU l f
484+
485+
let forEach xs f = forEachU xs (fun [@bs] x -> f x)
477486

478487
let rec iteri xs i f =
479488
match xs with
480489
[] -> ()
481490
| a::l -> f i a [@bs]; iteri l (i + 1) f
482491

483-
let forEachWithIndex l f = iteri l 0 f
492+
let forEachWithIndexU l f = iteri l 0 f
493+
let forEachWithIndex l f = forEachWithIndexU l (fun [@bs] i x -> f i x)
484494

485-
let rec reduce l accu f =
495+
let rec reduceU l accu f =
486496
match l with
487497
[] -> accu
488-
| a::l -> reduce l (f accu a [@bs]) f
498+
| a::l -> reduceU l (f accu a [@bs]) f
499+
500+
let reduce l accu f =
501+
reduceU l accu (fun[@bs] acc x -> f acc x )
489502

490-
let rec reduceReverse l accu f =
503+
let rec reduceReverseU l accu f =
491504
match l with
492505
[] -> accu
493-
| a::l -> f a (reduceReverse l accu f) [@bs]
506+
| a::l -> f a (reduceReverseU l accu f) [@bs]
494507

508+
let reduceReverse l accu f =
509+
reduceReverseU l accu (fun [@bs] a b -> f a b)
495510

496511
let rec mapRevAux2 l1 l2 accu f =
497512
match (l1, l2) with
498513
| (a1::l1, a2::l2) -> mapRevAux2 l1 l2 (f a1 a2 [@bs]:: accu) f
499514
| _, [] | [], _ -> accu
500515

501-
let mapReverse2 l1 l2 f =
516+
let mapReverse2U l1 l2 f =
502517
mapRevAux2 l1 l2 [] f
503518

504-
let rec forEach2 l1 l2 f =
519+
let mapReverse2 l1 l2 f = mapReverse2U l1 l2 (fun [@bs] a b -> f a b)
520+
521+
let rec forEach2U l1 l2 f =
505522
match (l1, l2) with
506-
| (a1::l1, a2::l2) -> f a1 a2 [@bs]; forEach2 l1 l2 f
523+
| (a1::l1, a2::l2) -> f a1 a2 [@bs]; forEach2U l1 l2 f
507524
| [],_ | _, [] -> ()
508525

509-
let rec reduce2 l1 l2 accu f =
526+
let forEach2 l1 l2 f = forEach2U l1 l2 (fun [@bs] a b -> f a b)
527+
528+
let rec reduce2U l1 l2 accu f =
510529
match (l1, l2) with
511530
| (a1::l1, a2::l2) ->
512-
reduce2 l1 l2 (f accu a1 a2 [@bs]) f
531+
reduce2U l1 l2 (f accu a1 a2 [@bs]) f
513532
| [], _ | _, [] -> accu
514533

515-
let rec reduceReverse2 l1 l2 accu f =
534+
let reduce2 l1 l2 acc f = reduce2U l1 l2 acc (fun[@bs] a b c -> f a b c )
535+
536+
let rec reduceReverse2U l1 l2 accu f =
516537
match (l1, l2) with
517538
([], []) -> accu
518-
| (a1::l1, a2::l2) -> f a1 a2 (reduceReverse2 l1 l2 accu f) [@bs]
539+
| (a1::l1, a2::l2) -> f a1 a2 (reduceReverse2U l1 l2 accu f) [@bs]
519540
| _, [] | [], _ -> accu
520541

521-
let rec every xs p =
542+
let reduceReverse2 l1 l2 acc f = reduceReverse2U l1 l2 acc (fun [@bs] a b c -> f a b c)
543+
544+
let rec everyU xs p =
522545
match xs with
523546
[] -> true
524-
| a::l -> p a [@bs] && every l p
547+
| a::l -> p a [@bs] && everyU l p
525548

526-
let rec some xs p =
549+
let every xs p = everyU xs (fun[@bs] x -> p x)
550+
551+
let rec someU xs p =
527552
match xs with
528553
[] -> false
529-
| a::l -> p a [@bs] || some l p
554+
| a::l -> p a [@bs] || someU l p
555+
556+
let some xs p = someU xs (fun[@bs] x -> p x)
530557

531-
let rec every2 l1 l2 p =
558+
let rec every2U l1 l2 p =
532559
match (l1, l2) with
533560
(_, []) | [],_ -> true
534-
| (a1::l1, a2::l2) -> p a1 a2 [@bs] && every2 l1 l2 p
561+
| (a1::l1, a2::l2) -> p a1 a2 [@bs] && every2U l1 l2 p
562+
563+
let every2 l1 l2 p = every2U l1 l2 (fun[@bs] a b -> p a b)
535564

536-
let rec cmp l1 l2 p =
565+
let rec cmpU l1 l2 p =
537566
match (l1, l2) with
538567
| [], [] -> 0
539568
| _ , [] -> 1
540569
| [], _ -> -1
541570
| (a1::l1, a2::l2) ->
542571
let c = p a1 a2 [@bs] in
543572
if c = 0 then
544-
cmp l1 l2 p
573+
cmpU l1 l2 p
545574
else c
546575

547-
let rec eq l1 l2 p =
576+
let cmp l1 l2 f = cmpU l1 l2 (fun [@bs] x y -> f x y)
577+
578+
let rec eqU l1 l2 p =
548579
match (l1, l2) with
549580
| [], [] -> true
550581
| _ , []
551582
| [], _ -> false
552583
| (a1::l1, a2::l2) ->
553584
if p a1 a2 [@bs] then
554-
eq l1 l2 p
585+
eqU l1 l2 p
555586
else false
587+
let eq l1 l2 f = eqU l1 l2 (fun [@bs] x y -> f x y)
556588

557-
let rec some2 l1 l2 p =
589+
let rec some2U l1 l2 p =
558590
match (l1, l2) with
559591
[], _ | _, [] -> false
560-
| (a1::l1, a2::l2) -> p a1 a2 [@bs] || some2 l1 l2 p
592+
| (a1::l1, a2::l2) -> p a1 a2 [@bs] || some2U l1 l2 p
561593

594+
let some2 l1 l2 p = some2U l1 l2 (fun[@bs] a b -> p a b)
562595

563-
let rec has xs x eq =
596+
let rec hasU xs x eq =
564597
match xs with
565598
[] -> false
566-
| a::l -> eq a x [@bs] || has l x eq
599+
| a::l -> eq a x [@bs] || hasU l x eq
600+
601+
let has xs x eq = hasU xs x (fun [@bs] a b -> eq a b)
567602

568-
let rec hasByReference xs x =
569-
match xs with
570-
[] -> false
571-
| a::l -> a == x || hasByReference l x
572603

573-
let rec assoc xs x eq =
604+
let rec assocU xs x eq =
574605
match xs with
575606
| [] -> None
576607
| (a,b)::l ->
577608
if eq a x [@bs] then Some b
578-
else assoc l x eq
609+
else assocU l x eq
579610

580-
let rec assocByReference xs x =
581-
match xs with
582-
[] -> None
583-
| (a,b)::l -> if a == x then Some b else assocByReference l x
611+
let assoc xs x eq = assocU xs x (fun[@bs] a b -> eq a b)
584612

585-
let rec hasAssoc xs x eq =
586-
match xs with
587-
| [] -> false
588-
| (a, b) :: l -> eq a x [@bs] || hasAssoc l x eq
589613

590-
let rec hasAssocByReference xs x =
614+
let rec hasAssocU xs x eq =
591615
match xs with
592616
| [] -> false
593-
| (a, b) :: l -> a == x || hasAssocByReference l x
617+
| (a, b) :: l -> eq a x [@bs] || hasAssocU l x eq
594618

619+
let hasAssoc xs x eq = hasAssocU xs x (fun[@bs] a b -> eq a b)
595620

596621
(* remove the first pair *)
597-
let removeAssoc xs x eq =
622+
let removeAssocU xs x eq =
598623
match xs with
599624
| [] -> []
600625
| (a, _ as pair) :: l ->
@@ -603,26 +628,20 @@ let removeAssoc xs x eq =
603628
let cell = mutableCell pair [] in
604629
removeAssocAuxWithMap l x cell eq ;
605630
cell
631+
632+
let removeAssoc xs x eq = removeAssocU xs x (fun [@bs] a b -> eq a b)
606633

607-
let removeAssocByReference xs x =
608-
match xs with
609-
| [] -> []
610-
| (a, b as pair) :: l ->
611-
if a == x then l
612-
else
613-
let cell = mutableCell pair [] in
614-
removeAssocAuxByReference l x cell;
615-
cell
616634

617-
let rec getBy xs p =
635+
let rec getByU xs p =
618636
match xs with
619637
| [] -> None
620638
| x :: l ->
621639
if p x [@bs] then Some x
622-
else getBy l p
640+
else getByU l p
623641

642+
let getBy xs p = getByU xs (fun[@bs] a -> p a)
624643

625-
let rec keep xs p =
644+
let rec keepU xs p =
626645
match xs with
627646
| [] -> []
628647
| h::t ->
@@ -633,10 +652,11 @@ let rec keep xs p =
633652
cell
634653
end
635654
else
636-
keep t p
655+
keepU t p
637656

657+
let keep xs p = keepU xs (fun[@bs] x -> p x)
638658

639-
let rec keepMap xs p =
659+
let rec keepMapU xs p =
640660
match xs with
641661
| [] -> []
642662
| h::t ->
@@ -648,10 +668,11 @@ let rec keepMap xs p =
648668
cell
649669
end
650670
| None ->
651-
keepMap t p
671+
keepMapU t p
652672

673+
let keepMap xs p = keepMapU xs (fun [@bs] x -> p x)
653674

654-
let partition l p =
675+
let partitionU l p =
655676
match l with
656677
| [] -> [],[]
657678
| h::t ->
@@ -664,6 +685,7 @@ let partition l p =
664685
else
665686
unsafeTail nextX, nextY
666687

688+
let partition l p = partitionU l (fun [@bs] x -> p x)
667689

668690
let rec unzip xs =
669691
match xs with

0 commit comments

Comments
 (0)