git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Remove foreach
b10f11bPhil Freeman
examples/passing/Foreach.pursdeleted−9
@@ -1,9 +0,0 @@
1−module Foreach where
2−
3− sum = \ns -> {
4− var total = 0;
5− foreach (n in ns) {
6− total = total + n;
7− }
8− return total;
9− }
libraries/prelude/prelude.js−23
@@ -40,26 +40,3 @@ function numberToString(n) { return n.toString(); }
40
40
41var math = Math;
41var math = Math;
42
42
43−function map(f) {
44− return function(xs) {
45− var ys = [];
46− for (var i = 0; i < xs.length; i++) {
47− ys[i] = f(xs[i]);
48− }
49− return ys;
50− };
51−}
52−
53−function filter(xs) {
54− return function (p) {
55− var ys = [];
56− var j = 0;
57− for (var i = 0; i < xs.length; i++) {
58− var x = xs[i];
59− if (p(x)) {
60− ys[j++] = x;
61− }
62− }
63− return ys;
64− };
65−}
libraries/prelude/prelude.purs+15−32
@@ -67,20 +67,17 @@ module Arrays where
67 tailSafe (_ : xs) = Just xs
67 tailSafe (_ : xs) = Just xs
68 tailSafe _ = Nothing
68 tailSafe _ = Nothing
69
69
70− foreign import map :: forall a b. (a -> b) -> [a] -> [b]
70+ map :: forall a b. (a -> b) -> [a] -> [b]
71+ map _ [] = []
72+ map f (x:xs) = f x : map f xs
71
73
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
75
77
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
79− foreach (a in as) {
80− result = f a result;
81− }
82− return result;
83− }
84
81
85 foreign import member "length" length :: forall a. [a] -> Number
82 foreign import member "length" length :: forall a. [a] -> Number
86
83
@@ -112,15 +109,13 @@ module Arrays where
112 (:) a = concat [a]
109 (:) a = concat [a]
113
110
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
117− foreach (a in as) {
118− result = result `concat` f a;
119− }
120− return result;
121− }
122
114
123− foreign import filter :: forall a. [a] -> (a -> Boolean) -> [a]
115+ filter :: forall a. (a -> Boolean) -> [a] -> [a]
116+ filter _ [] = []
117+ filter p (x:xs) | p x = x : filter p xs
118+ filter p (_:xs) = filter p xs
124
119
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 _ _ _ = []
141
136
142 any :: forall a. (a -> Boolean) -> [a] -> Boolean
137 any :: forall a. (a -> Boolean) -> [a] -> Boolean
143− any p as = {
144− for (i <- 0 until length as) {
145− if (p (as !! i)) {
146− return true;
147− }
148− }
149− return false;
138+ any _ [] = false
150− }
139+ any p (a:as) = p a || any p as
151
140
152 all :: forall a. (a -> Boolean) -> [a] -> Boolean
141 all :: forall a. (a -> Boolean) -> [a] -> Boolean
153− all p as = {
154− for (i <- 0 until length as) {
155− if (!(p (as !! i))) {
156− return false;
157− }
158− }
159− return true;
142+ all _ [] = true
160− }
143+ all p (a:as) = p a && all p as
161
144
162module Tuple where
145module Tuple where
163
146
purescript.cabal+1−1
@@ -1,5 +1,5 @@
1name: purescript
1name: purescript
2−version: 0.2.4
2+version: 0.2.5
3cabal-version: >=1.8
3cabal-version: >=1.8
4build-type: Simple
4build-type: Simple
5license: MIT
5license: MIT
src/Language/PureScript/CodeGen/JS.hs−1
@@ -180,7 +180,6 @@ statementToJs m e (VariableIntroduction ident value) = JSVariableIntroduction id
180statementToJs m e (Assignment target value) = JSAssignment (JSAssignVariable target) (valueToJs m e value)
180statementToJs m e (Assignment target value) = JSAssignment (JSAssignVariable target) (valueToJs m e value)
181statementToJs m e (While cond sts) = JSWhile (valueToJs m e cond) (JSBlock (map (statementToJs m e) sts))
181statementToJs m e (While cond sts) = JSWhile (valueToJs m e cond) (JSBlock (map (statementToJs m e) sts))
182statementToJs m e (For ident start end sts) = JSFor ident (valueToJs m e start) (valueToJs m e end) (JSBlock (map (statementToJs m e) sts))
182statementToJs m e (For ident start end sts) = JSFor ident (valueToJs m e start) (valueToJs m e end) (JSBlock (map (statementToJs m e) sts))
183−statementToJs m e (ForEach ident arr sts) = JSApp (JSAccessor "forEach" (valueToJs m e arr)) [JSFunction Nothing [ident] (JSBlock (map (statementToJs m e) sts))]
184statementToJs m e (If ifst) = ifToJs ifst
183statementToJs m e (If ifst) = ifToJs ifst
185 where
184 where
186 ifToJs :: IfStatement -> JS
185 ifToJs :: IfStatement -> JS
src/Language/PureScript/Parser/Values.hs−6
@@ -174,11 +174,6 @@ parseFor = For <$> (C.reserved "for" *> C.indented *> C.lexeme (P.char '(') *> C
174 <*> (C.indented *> C.reserved "until" *> parseValue <* C.indented <* C.lexeme (P.char ')'))
174 <*> (C.indented *> C.reserved "until" *> parseValue <* C.indented <* C.lexeme (P.char ')'))
175 <*> parseManyStatements
175 <*> parseManyStatements
176
176
177−parseForEach :: P.Parsec String ParseState Statement
178−parseForEach = ForEach <$> (C.reserved "foreach" *> C.indented *> C.lexeme (P.char '(') *> C.indented *> C.parseIdent)
179− <*> (C.indented *> C.reserved "in" *> parseValue <* C.lexeme (P.char ')'))
180− <*> parseManyStatements
181−
182parseIf :: P.Parsec String ParseState Statement
177parseIf :: P.Parsec String ParseState Statement
183parseIf = If <$> parseIfStatement
178parseIf = If <$> parseIfStatement
184
179
@@ -204,7 +199,6 @@ parseStatement = P.choice
204 , parseAssignment
199 , parseAssignment
205 , parseWhile
200 , parseWhile
206 , parseFor
201 , parseFor
207− , parseForEach
208 , parseIf
202 , parseIf
209 , parseValueStatement
203 , parseValueStatement
210 , parseReturn ] P.<?> "statement"
204 , parseReturn ] P.<?> "statement"
src/Language/PureScript/Pretty/Values.hs−3
@@ -191,9 +191,6 @@ prettyPrintStatement (For ident start end sts) = "for " ++ show ident
191 ++ " <- " ++ prettyPrintValue start
191 ++ " <- " ++ prettyPrintValue start
192 ++ " until " ++ prettyPrintValue end ++ ": {"
192 ++ " until " ++ prettyPrintValue end ++ ": {"
193 ++ intercalate "; " (map prettyPrintStatement sts) ++ " }"
193 ++ intercalate "; " (map prettyPrintStatement sts) ++ " }"
194−prettyPrintStatement (ForEach ident arr sts) = "foreach " ++ show ident
195− ++ " in " ++ prettyPrintValue arr ++ ": {"
196− ++ intercalate "; " (map prettyPrintStatement sts) ++ " }"
197prettyPrintStatement (If ifst) = prettyPrintIfStatement ifst
194prettyPrintStatement (If ifst) = prettyPrintIfStatement ifst
198prettyPrintStatement (ValueStatement val) = prettyPrintValue val
195prettyPrintStatement (ValueStatement val) = prettyPrintValue val
199prettyPrintStatement (Return value) = "return " ++ prettyPrintValue value
196prettyPrintStatement (Return value) = "return " ++ prettyPrintValue value
src/Language/PureScript/TypeChecker/Types.hs−8
@@ -540,14 +540,6 @@ checkStatement mass ret (For ident start end inner) = do
540 check end Number
540 check end Number
541 (allCodePathsReturn, _) <- bindLocalVariables moduleName [(ident, Number)] $ checkBlock mass ret inner
541 (allCodePathsReturn, _) <- bindLocalVariables moduleName [(ident, Number)] $ checkBlock mass ret inner
542 return (allCodePathsReturn, mass)
542 return (allCodePathsReturn, mass)
543−checkStatement mass ret (ForEach ident vals inner) = do
544− moduleName <- substCurrentModule <$> ask
545− assignVariable ident
546− val <- fresh
547− check vals (Array val)
548− (allCodePathsReturn, _) <- bindLocalVariables moduleName [(ident, val)] $ checkBlock mass ret inner
549− guardWith "Cannot return from within a foreach block" $ not allCodePathsReturn
550− return (False, mass)
551checkStatement mass _ (ValueStatement val) = do
543checkStatement mass _ (ValueStatement val) = do
552 check val unit
544 check val unit
553 return (False, mass)
545 return (False, mass)
src/Language/PureScript/Values.hs−1
@@ -77,7 +77,6 @@ data Statement
77 | Assignment Ident Value
77 | Assignment Ident Value
78 | While Value [Statement]
78 | While Value [Statement]
79 | For Ident Value Value [Statement]
79 | For Ident Value Value [Statement]
80− | ForEach Ident Value [Statement]
81 | If IfStatement
80 | If IfStatement
82 | ValueStatement Value
81 | ValueStatement Value
83 | Return Value deriving (Show, Data, Typeable)
82 | Return Value deriving (Show, Data, Typeable)