@@ -67,20 +67,17 @@ module Arrays where
67 tailSafe (_ : xs) = Just xs
67 tailSafe (_ : xs) = Just xs
68 tailSafe _ = Nothing
68 tailSafe _ = Nothing
70− foreign import map :: forall a b. (a -> b) -> [a] -> [b]
70+ map :: forall a b. (a -> b) -> [a] -> [b]
72+ map f (x:xs) = f x : map f xs
72 foldr :: forall a b. (a -> b -> a) -> a -> [b] -> a
74 foldr :: forall a b. (a -> b -> a) -> a -> [b] -> a
73 foldr f a (b : bs) = f (foldr f a bs) b
75 foldr f a (b : bs) = f (foldr f a bs) b
74 foldr _ a [] = a
76 foldr _ a [] = a
76 foldl :: forall a b. (a -> b -> b) -> b -> [a] -> b
78 foldl :: forall a b. (a -> b -> b) -> b -> [a] -> b
77− foldl f b as = {
79+ foldl _ b [] = b
78− var result = b;
80+ foldl f b (a:as) = foldl f (f a b) as
85 foreign import member "length" length :: forall a. [a] -> Number
82 foreign import member "length" length :: forall a. [a] -> Number
@@ -112,15 +109,13 @@ module Arrays where
112 (:) a = concat [a]
109 (:) a = concat [a]
114 concatMap :: forall a b. [a] -> (a -> [b]) -> [b]
111 concatMap :: forall a b. [a] -> (a -> [b]) -> [b]
115− concatMap as f = {
112+ concatMap [] f = []
116− var result = [];
113+ concatMap (a:as) f = f a `concat` concatMap as f
118− result = result `concat` f a;
123− foreign import filter :: forall a. [a] -> (a -> Boolean) -> [a]
115+ filter :: forall a. (a -> Boolean) -> [a] -> [a]
117+ filter p (x:xs) | p x = x : filter p xs
118+ filter p (_:xs) = filter p xs
125 empty :: forall a. [a] -> Boolean
120 empty :: forall a. [a] -> Boolean
126 empty [] = true
121 empty [] = true
@@ -140,24 +135,12 @@ module Arrays where
140 zipWith _ _ _ = []
135 zipWith _ _ _ = []
142 any :: forall a. (a -> Boolean) -> [a] -> Boolean
137 any :: forall a. (a -> Boolean) -> [a] -> Boolean
144− for (i <- 0 until length as) {
149− return false;
138+ any _ [] = false
150− }
139+ any p (a:as) = p a || any p as
152 all :: forall a. (a -> Boolean) -> [a] -> Boolean
141 all :: forall a. (a -> Boolean) -> [a] -> Boolean
154− for (i <- 0 until length as) {
155− if (!(p (as !! i))) {
159− return true;
142+ all _ [] = true
160− }
143+ all p (a:as) = p a && all p as
162module Tuple where
145module Tuple where