-- | Pop
pop :: (Elt a,Elt b) => Filter a b (Exp a)
pop = do 
  (id, stmt) <- get
  sym <- lift $ gensym zero
  put (id, Sequence stmt $
           Sequence (Decl sym) $
           Assign sym PopExp )
  return (Ref sym)

-- | Println
pop :: (Elt a,Elt b) => Filter a b (Exp a)
pop = do 
  (id, stmt) <- get
  sym <- lift $ gensym zero
  put (id, Sequence stmt $
           Sequence (Decl sym) $
           Assign sym PopExp )
  return (Ref sym)

-- | Println
pop = do 
  (id, stmt) <- get
  sym <- lift $ gensym zero
  put (id, Sequence stmt $
           Sequence (Decl sym) $
           Assign sym PopExp )
  return (Ref sym)

-- | Println