@@ -37,6 +37,52 @@ let fromInitializer = (~length, f) =>
3737
3838@get external length : array <'a > => int = "length"
3939
40+ let rec equalFromIndexU = (a , b , i , eq , len ) =>
41+ if i === len {
42+ true
43+ } else if eq (. a -> getUnsafe (i ), b -> getUnsafe (i )) {
44+ equalFromIndexU (a , b , i + 1 , eq , len )
45+ } else {
46+ false
47+ }
48+
49+ let equalU = (a , b , eq ) => {
50+ let len = a -> length
51+ if len === b -> length {
52+ equalFromIndexU (a , b , 0 , eq , len )
53+ } else {
54+ false
55+ }
56+ }
57+
58+ let equal = (a , b , eq ) => equalU (a , b , (. a , b ) => eq (a , b ))
59+
60+ let rec compareFromIndexU = (a , b , i , cmp , len ) =>
61+ if i === len {
62+ 0
63+ } else {
64+ let c = cmp (. a -> getUnsafe (i ), b -> getUnsafe (i ))
65+ if c === 0 {
66+ compareFromIndexU (a , b , i + 1 , cmp , len )
67+ } else {
68+ c
69+ }
70+ }
71+
72+ let compareU = (a , b , cmp ) => {
73+ let lenA = a -> length
74+ let lenB = b -> length
75+ if lenA > lenB {
76+ 1
77+ } else if lenA < lenB {
78+ - 1
79+ } else {
80+ compareFromIndexU (a , b , 0 , cmp , lenA )
81+ }
82+ }
83+
84+ let compare = (a , b , cmp ) => compareU (a , b , (. a , b ) => cmp (a , b ))
85+
4086@send external copyAllWithin : (array <'a >, ~target : int ) => array <'a > = "copyWithin"
4187
4288@send
0 commit comments