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