work :: (Elt a, Elt b) => Rate -> Filter a b () -> Filter a b ()
work rate s = do
  (id0, stmt) <- get
  (id1, stmt1) <- lift $ evalStmt id0 s
  put (id1, stmt)
  statement $ Work rate stmt1
work :: (Elt a, Elt b) => Rate -> Filter a b () -> Filter a b ()
work rate s = do
  (id0, stmt) <- get
  (id1, stmt1) <- lift $ evalStmt id0 s
  put (id1, stmt)
  statement $ Work rate stmt1
work rate s = do
  (id0, stmt) <- get
  (id1, stmt1) <- lift $ evalStmt id0 s
  put (id1, stmt)
  statement $ Work rate stmt1