Fix bug in monadic interpreter, and indent if/then/else better.
Chris Pressey
9 years ago
272 | 272 | mInterpret env lenv (ForEach loopvar listExpr accvar accExpr applyExpr elseExpr) = do |
273 | 273 | list <- mInterpret env lenv listExpr |
274 | 274 | acc <- mInterpret env lenv accExpr |
275 | if | |
276 | list == Null | |
277 | then | |
275 | if list == Null then | |
278 | 276 | mInterpret env lenv elseExpr |
279 | else | |
277 | else | |
280 | 278 | mqForEach list acc |
281 | 279 | where |
282 | 280 | mqForEach Null acc = |
294 | 292 | extendEnv (extendEnv env accvar acc) loopvar (follow lenv first') |
295 | 293 | ) lenv applyExpr |
296 | 294 | newAcc <- do return (follow lenv result) |
297 | nextResult <- mqForEach rest' newAcc | |
298 | return (if newAcc == Abort then | |
299 | -- "abortable" | |
300 | acc | |
301 | else | |
302 | follow lenv nextResult) | |
295 | if newAcc == Abort then | |
296 | return acc | |
297 | else do | |
298 | nextResult <- mqForEach rest' newAcc | |
299 | return (follow lenv nextResult) | |
303 | 300 | |
304 | 301 | -- =========== -- |
305 | 302 | -- ParseEngine -- |