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