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