-- | Initialization function
init' :: (Elt a, Elt b) => Filter a b () -> Filter a b ()
init' s = do
  (id0, stmt) <- get
  (id1, stmt1) <- lift $ evalStmt id0 s
  put (id1, stmt)
  statement $ Init stmt1

-- | Work
init' :: (Elt a, Elt b) => Filter a b () -> Filter a b ()
init' s = do
  (id0, stmt) <- get
  (id1, stmt1) <- lift $ evalStmt id0 s
  put (id1, stmt)
  statement $ Init stmt1

-- | Work
init' s = do
  (id0, stmt) <- get
  (id1, stmt1) <- lift $ evalStmt id0 s
  put (id1, stmt)
  statement $ Init stmt1

-- | Work