Ugh, the stateful implementation is awful. I would prefer something more declarative. Maybe a block where rules within it have the given action.

```coffee
ruleBlock = (action, block) -> block action

ruleBlock ((a, b, c) -> some action involving a, b and c), (action) ->
  o 'other rules', action
```