@@ -15,6 +15,7 @@
1515module Language.PureScript.AST.Traversals where
1616
1717import Data.Monoid (Monoid(..), mconcat)
18+import Data.Maybe (mapMaybe)
1819
1920import Control.Applicative
2021import Control.Monad
@@ -50,6 +51,7 @@ everywhereOnValues f g h = (f', g', h')
5051 g' (TypeClassDictionaryConstructorApp name v) = g (TypeClassDictionaryConstructorApp name (g' v))
5152 g' (Accessor prop v) = g (Accessor prop (g' v))
5253 g' (ObjectUpdate obj vs) = g (ObjectUpdate (g' obj) (map (fmap g') vs))
54+ g' (ObjectUpdater obj vs) = g (ObjectUpdater (g' obj) (map (second (fmap g')) vs))
5355 g' (Abs name v) = g (Abs name (g' v))
5456 g' (App v1 v2) = g (App (g' v1) (g' v2))
5557 g' (IfThenElse v1 v2 v3) = g (IfThenElse (g' v1) (g' v2) (g' v3))
@@ -102,9 +104,11 @@ everywhereOnValuesTopDownM f g h = (f' <=< f, g' <=< g, h' <=< h)
102104 g' (Parens v) = Parens <$> (g v >>= g')
103105 g' (ArrayLiteral vs) = ArrayLiteral <$> mapM (g' <=< g) vs
104106 g' (ObjectLiteral vs) = ObjectLiteral <$> mapM (sndM (g' <=< g)) vs
107+ g' (ObjectConstructor vs) = ObjectConstructor <$> mapM (sndM $ maybeM (g' <=< g)) vs
105108 g' (TypeClassDictionaryConstructorApp name v) = TypeClassDictionaryConstructorApp name <$> (g v >>= g')
106109 g' (Accessor prop v) = Accessor prop <$> (g v >>= g')
107110 g' (ObjectUpdate obj vs) = ObjectUpdate <$> (g obj >>= g') <*> mapM (sndM (g' <=< g)) vs
111+ g' (ObjectUpdater obj vs) = ObjectUpdater <$> (g obj >>= g') <*> mapM (sndM $ maybeM (g' <=< g)) vs
108112 g' (Abs name v) = Abs name <$> (g v >>= g')
109113 g' (App v1 v2) = App <$> (g v1 >>= g') <*> (g v2 >>= g')
110114 g' (IfThenElse v1 v2 v3) = IfThenElse <$> (g v1 >>= g') <*> (g v2 >>= g') <*> (g v3 >>= g')
@@ -151,9 +155,11 @@ everywhereOnValuesM f g h = (f', g', h')
151155 g' (Parens v) = (Parens <$> g' v) >>= g
152156 g' (ArrayLiteral vs) = (ArrayLiteral <$> mapM g' vs) >>= g
153157 g' (ObjectLiteral vs) = (ObjectLiteral <$> mapM (sndM g') vs) >>= g
158+ g' (ObjectConstructor vs) = (ObjectConstructor <$> mapM (sndM $ maybeM g') vs) >>= g
154159 g' (TypeClassDictionaryConstructorApp name v) = (TypeClassDictionaryConstructorApp name <$> g' v) >>= g
155160 g' (Accessor prop v) = (Accessor prop <$> g' v) >>= g
156161 g' (ObjectUpdate obj vs) = (ObjectUpdate <$> g' obj <*> mapM (sndM g') vs) >>= g
162+ g' (ObjectUpdater obj vs) = (ObjectUpdater <$> g' obj <*> mapM (sndM $ maybeM g') vs) >>= g
157163 g' (Abs name v) = (Abs name <$> g' v) >>= g
158164 g' (App v1 v2) = (App <$> g' v1 <*> g' v2) >>= g
159165 g' (IfThenElse v1 v2 v3) = (IfThenElse <$> g' v1 <*> g' v2 <*> g' v3) >>= g
@@ -203,9 +209,11 @@ everythingOnValues (<>) f g h i j = (f', g', h', i', j')
203209 g' v@(Parens v1) = g v <> g' v1
204210 g' v@(ArrayLiteral vs) = foldl (<>) (g v) (map g' vs)
205211 g' v@(ObjectLiteral vs) = foldl (<>) (g v) (map (g' . snd) vs)
212+ g' v@(ObjectConstructor vs) = foldl (<>) (g v) (map g' (mapMaybe snd vs))
206213 g' v@(TypeClassDictionaryConstructorApp _ v1) = g v <> g' v1
207214 g' v@(Accessor _ v1) = g v <> g' v1
208215 g' v@(ObjectUpdate obj vs) = foldl (<>) (g v <> g' obj) (map (g' . snd) vs)
216+ g' v@(ObjectUpdater obj vs) = foldl (<>) (g v <> g' obj) (map g' (mapMaybe snd vs))
209217 g' v@(Abs _ v1) = g v <> g' v1
210218 g' v@(App v1 v2) = g v <> g' v1 <> g' v2
211219 g' v@(IfThenElse v1 v2 v3) = g v <> g' v1 <> g' v2 <> g' v3
@@ -266,9 +274,11 @@ everythingWithContextOnValues s0 r0 (<>) f g h i j = (f'' s0, g'' s0, h'' s0, i'
266274 g' s (Parens v1) = g'' s v1
267275 g' s (ArrayLiteral vs) = foldl (<>) r0 (map (g'' s) vs)
268276 g' s (ObjectLiteral vs) = foldl (<>) r0 (map (g'' s . snd) vs)
277+ g' s (ObjectConstructor vs) = foldl (<>) r0 (map (g'' s) (mapMaybe snd vs))
269278 g' s (TypeClassDictionaryConstructorApp _ v1) = g'' s v1
270279 g' s (Accessor _ v1) = g'' s v1
271280 g' s (ObjectUpdate obj vs) = foldl (<>) (g'' s obj) (map (g'' s . snd) vs)
281+ g' s (ObjectUpdater obj vs) = foldl (<>) (g'' s obj) (map (g'' s) (mapMaybe snd vs))
272282 g' s (Abs _ v1) = g'' s v1
273283 g' s (App v1 v2) = g'' s v1 <> g'' s v2
274284 g' s (IfThenElse v1 v2 v3) = g'' s v1 <> g'' s v2 <> g'' s v3
@@ -332,9 +342,11 @@ everywhereWithContextOnValuesM s0 f g h i j = (f'' s0, g'' s0, h'' s0, i'' s0, j
332342 g' s (Parens v) = Parens <$> g'' s v
333343 g' s (ArrayLiteral vs) = ArrayLiteral <$> mapM (g'' s) vs
334344 g' s (ObjectLiteral vs) = ObjectLiteral <$> mapM (sndM (g'' s)) vs
345+ g' s (ObjectConstructor vs) = ObjectConstructor <$> mapM (sndM $ maybeM (g'' s)) vs
335346 g' s (TypeClassDictionaryConstructorApp name v) = TypeClassDictionaryConstructorApp name <$> g'' s v
336347 g' s (Accessor prop v) = Accessor prop <$> g'' s v
337348 g' s (ObjectUpdate obj vs) = ObjectUpdate <$> g'' s obj <*> mapM (sndM (g'' s)) vs
349+ g' s (ObjectUpdater obj vs) = ObjectUpdater <$> g'' s obj <*> mapM (sndM $ maybeM (g'' s)) vs
338350 g' s (Abs name v) = Abs name <$> g'' s v
339351 g' s (App v1 v2) = App <$> g'' s v1 <*> g'' s v2
340352 g' s (IfThenElse v1 v2 v3) = IfThenElse <$> g'' s v1 <*> g'' s v2 <*> g'' s v3