1 implementation module _Array
3 import _SystemArray, StdInt, StdClass
6 createArrayUnsafe :: .Int -> u:(a v:b) | Array a b, [u <= v]
7 createArrayUnsafe n = _createArray n
10 instance UnsafeArray {} where
16 unsafeUselect arr index =
23 instance UnsafeArray {!} where
29 unsafeUselect arr index =
36 //mapArray :: (u:a -> v:b) w:(c u:a) -> x:(d v:b) | UnsafeArray c a & UnsafeArray d b, [w <= u,x <= v]
37 mapArray :: (u:a -> v:b) w:(c u:a) -> x:(d v:b) | Array d b & UnsafeArray c & UnsafeArray d & Array c a, [w <= u,x <= v]
39 #! (size_xs, xs) = usize xs
40 #! (xs, ys) = map f 0 size_xs xs (unsafeCreate size_xs)
47 #! (x, xs) = unsafeUselect xs i
48 #! ys = update ys i (f x)
49 = map f (inc i) n xs ys
51 //mapArrayLSt :: (u:a -> .(.b -> (v:c,.b))) w:(d u:a) .b -> (x:(e v:c),.b) | UnsafeArray d a & UnsafeArray e c, [w <= u,x <= v]
52 mapArrayLSt :: (u:a -> .(.b -> (v:c,.b))) w:(d u:a) .b -> (x:(e v:c),.b) | Array e c & UnsafeArray d & UnsafeArray e & Array d a, [w <= u,x <= v]
54 #! (size_xs, xs) = usize xs
55 #! (xs, ys, st) = map f 0 size_xs xs (unsafeCreate size_xs) st
62 #! (x, xs) = unsafeUselect xs i
65 = map f (inc i) n xs ys st
67 //mapArrayRSt :: (u:a -> .(.b -> (v:c,.b))) w:(d u:a) .b -> (x:(e v:c),.b) | UnsafeArray d a & UnsafeArray e c, [w <= u,x <= v]
68 mapArrayRSt :: (u:a -> .(.b -> (v:c,.b))) w:(d u:a) .b -> (x:(e v:c),.b) | Array e c & UnsafeArray d & UnsafeArray e & Array d a, [w <= u,x <= v]
70 #! (size_xs, xs) = usize xs
71 #! (xs, ys, st) = map f (size_xs - 1) xs (unsafeCreate size_xs) st
78 #! (x, xs) = unsafeUselect xs i
81 = map f (dec i) xs ys st
83 reduceArray :: ((.a -> u:(b -> b)) -> .(b -> .(c -> .a))) (.a -> u:(b -> b)) b .(d c) -> b | Array d c
85 = reduce f 0 (size xs) op e xs
91 = op (f op e xs.[i]) (reduce f (inc i) n op e xs)
93 reduceArrayLSt :: (u:a -> .(.b -> .b)) v:(c u:a) .b -> .b | UnsafeArray c & Array c a, [v <= u]
94 reduceArrayLSt f xs st
95 #! (size_xs, xs) = usize xs
96 #! (xs, st) = reduce f 0 size_xs xs st
103 #! (x, xs) = unsafeUselect xs i
104 = reduce f (inc i) n xs (f x st)
106 reduceArrayRSt :: (u:a -> .(.b -> .b)) v:(c u:a) .b -> .b | UnsafeArray c & Array c a, [v <= u]
107 reduceArrayRSt f xs st
108 #! (size_xs, xs) = usize xs
109 #! (xs, st) = reduce f (dec size_xs) xs st
116 #! (x, xs) = unsafeUselect xs i
117 = reduce f (dec i) xs (f x st)