@@ -71,36 +71,47 @@ expression (A region expr) =
71 hi' <- expression hi
71 hi' <- expression hi
72 return $ _List "range" `call` [lo',hi']
72 return $ _List "range" `call` [lo',hi']
74− Access e x ->
74+ Access e field ->
75 do e' <- expression e
75 do e' <- expression e
76− return $ DotRef () e' (var x)
76+ return $ DotRef () e' (var (varName field))
78− Remove e x ->
78+ Remove e field ->
79 do e' <- expression e
79 do e' <- expression e
80− return $ _Utils "remove" `call` [string x, e']
80+ return $ _Utils "remove" `call` [ string (varName field), e' ]
82− Insert e x v ->
82+ Insert e field value ->
83− do v' <- expression v
83+ do value' <- expression value
84 e' <- expression e
84 e' <- expression e
85− return $ _Utils "insert" `call` [string x, v', e']
85+ return $ _Utils "insert" `call` [ string (varName field), value', e' ]
87− Modify e fs ->
87+ Modify e fields ->
88 do e' <- expression e
88 do e' <- expression e
89− fs' <- forM fs $ \(f,v) -> do
89+ fields' <-
90+ forM fields $ \(field, value) ->
90− v' <- expression v
91+ do value' <- expression value
91− return $ ArrayLit () [string f, v']
92+ return $ ArrayLit () [ string (varName field), value' ]
92− return $ _Utils "replace" `call` [ArrayLit () fs', e']
94+ return $ _Utils "replace" `call` [ArrayLit () fields', e']
94 Record fields ->
96 Record fields ->
95− do fields' <- forM fields $ \(f,e) -> do
98+ forM fields $ \(field, e) ->
96− (,) f <$> expression e
99+ (,) (varName field) <$> expression e
97− let fieldMap = List.foldl' combine Map.empty fields'
102+ List.foldl' combine Map.empty fields'
98 return $ ObjectLit () $ (prop "_", hidden fieldMap) : visible fieldMap
104 return $ ObjectLit () $ (prop "_", hidden fieldMap) : visible fieldMap
106+ combine record (field, value) =
100− combine r (k,v) = Map.insertWith (++) k [v] r
107+ Map.insertWith (++) field [value] record
101− hidden fs = ObjectLit () . map (prop *** ArrayLit ()) .
110+ ObjectLit () . map (prop *** ArrayLit ()) $
102− Map.toList . Map.filter (not . null) $ Map.map tail fs
111+ Map.toList (Map.filter (not . null) (Map.map tail fs))
103− visible fs = map (first prop) . Map.toList $ Map.map head fs
114+ map (first prop) (Map.toList (Map.map head fs))
105 Binop op e1 e2 -> binop region op e1 e2
116 Binop op e1 e2 -> binop region op e1 e2