subrule :: (a -> b) -> (b -> a -> a) -> Rule b -> Rule a
subrule getter setter (TimeRule step_b) = TimeRule step_a
  where
    step_a dt a = setter (step_b dt (getter a)) a
subrule :: (a -> b) -> (b -> a -> a) -> Rule b -> Rule a
subrule getter setter (TimeRule step_b) = TimeRule step_a
  where
    step_a dt a = setter (step_b dt (getter a)) a
subrule getter setter (TimeRule step_b) = TimeRule step_a
  where
    step_a dt a = setter (step_b dt (getter a)) a