| 465 | | reduceSyn name [cond, bodyIf, bodyElse] |
| 466 | | | "if" <- name = doCond id |
| 467 | | | "unless" <- name = doCond not |
| 468 | | where |
| 469 | | doCond :: (Bool -> Bool) -> Eval Val |
| 470 | | doCond f = do |
| 471 | | vbool <- enterRValue $ enterEvalContext (cxtItem "Bool") cond |
| 472 | | vb <- fromVal vbool |
| 473 | | if (f vb) |
| 474 | | then reduce bodyIf |
| 475 | | else reduce bodyElse |
| | 465 | reduceSyn "if" [cond, bodyIf, bodyElse] = do |
| | 466 | vbool <- enterRValue $ enterEvalContext (cxtItem "Bool") cond |
| | 467 | vb <- fromVal vbool |
| | 468 | reduce $ if vb then bodyIf else bodyElse |
| | 469 | |
| | 470 | reduceSyn "cond" [cond, bodyIf, bodyElse] = do |
| | 471 | topic <- enterRValue $ enterEvalContext (cxtItem "Bool") cond |
| | 472 | vb <- fromVal topic |
| | 473 | sub <- fromCodeExp $ if vb then bodyIf else bodyElse |
| | 474 | apply sub Nothing [App (_Var "&VAR") (Just (Val topic)) []] |