@@ -43,6 +43,52 @@ let fromInitializer = (~length, f) =>
4343
4444@get external length : array <'a > => int = "length"
4545
46+ let rec equalFromIndexU = (a , b , i , eq , len ) =>
47+ if i === len {
48+ true
49+ } else if eq (. a -> getUnsafe (i ), b -> getUnsafe (i )) {
50+ equalFromIndexU (a , b , i + 1 , eq , len )
51+ } else {
52+ false
53+ }
54+
55+ let equalU = (a , b , eq ) => {
56+ let len = a -> length
57+ if len === b -> length {
58+ equalFromIndexU (a , b , 0 , eq , len )
59+ } else {
60+ false
61+ }
62+ }
63+
64+ let equal = (a , b , eq ) => equalU (a , b , (. a , b ) => eq (a , b ))
65+
66+ let rec compareFromIndexU = (a , b , i , cmp , len ) =>
67+ if i === len {
68+ 0
69+ } else {
70+ let c = cmp (. a -> getUnsafe (i ), b -> getUnsafe (i ))
71+ if c === 0 {
72+ compareFromIndexU (a , b , i + 1 , cmp , len )
73+ } else {
74+ c
75+ }
76+ }
77+
78+ let compareU = (a , b , cmp ) => {
79+ let lenA = a -> length
80+ let lenB = b -> length
81+ if lenA > lenB {
82+ 1
83+ } else if lenA < lenB {
84+ - 1
85+ } else {
86+ compareFromIndexU (a , b , 0 , cmp , lenA )
87+ }
88+ }
89+
90+ let compare = (a , b , cmp ) => compareU (a , b , (. a , b ) => cmp (a , b ))
91+
4692@send external copyAllWithin : (array <'a >, ~target : int ) => array <'a > = "copyWithin"
4793
4894@send
0 commit comments