| 458 | | reduceSyn name [cond, bodyIf, bodyElse] |
| 459 | | | "if" <- name = doCond id |
| 460 | | | "unless" <- name = doCond not |
| 461 | | where |
| 462 | | doCond :: (Bool -> Bool) -> Eval Val |
| 463 | | doCond f = do |
| 464 | | vbool <- enterRValue $ enterEvalContext (cxtItem "Bool") cond |
| 465 | | vb <- fromVal vbool |
| 466 | | if (f vb) |
| 467 | | then reduce bodyIf |
| 468 | | else reduce bodyElse |
| | 458 | reduceSyn "if" [cond, bodyIf, bodyElse] = do |
| | 459 | vbool <- enterRValue $ enterEvalContext (cxtItem "Bool") cond |
| | 460 | vb <- fromVal vbool |
| | 461 | reduce $ if vb then bodyIf else bodyElse |
| | 462 | |
| | 463 | reduceSyn "cond" [cond, bodyIf, bodyElse] = do |
| | 464 | topic <- enterRValue $ enterEvalContext (cxtItem "Bool") cond |
| | 465 | vb <- fromVal topic |
| | 466 | sub <- fromCodeExp $ if vb then bodyIf else bodyElse |
| | 467 | apply sub Nothing [App (_Var "&VAR") (Just (Val topic)) []] |