varR :: (Monoid dec, Monad m)
  => Rewrite m dec C.Term
varR = transparently $ rewrite $ \e -> case e of
  (C.Var x) -> return (C.Var x)
  _         -> fail "varR"
varR :: (Monoid dec, Monad m)
  => Rewrite m dec C.Term
varR = transparently $ rewrite $ \e -> case e of
  (C.Var x) -> return (C.Var x)
  _         -> fail "varR"
varR = transparently $ rewrite $ \e -> case e of
  (C.Var x) -> return (C.Var x)
  _         -> fail "varR"