lamR :: Monad m
  => Rewrite m [C.CoreContext] C.Term
  -> Rewrite m [C.CoreContext] C.Term
lamR rr = transparently $ rewrite $ \e -> case e of
  C.Lambda tv e -> liftM (C.Lambda tv) (apply (C.LambdaBody tv) rr e)
  _             -> fail "lamR"
lamR :: Monad m
  => Rewrite m [C.CoreContext] C.Term
  -> Rewrite m [C.CoreContext] C.Term
lamR rr = transparently $ rewrite $ \e -> case e of
  C.Lambda tv e -> liftM (C.Lambda tv) (apply (C.LambdaBody tv) rr e)
  _             -> fail "lamR"
lamR rr = transparently $ rewrite $ \e -> case e of
  C.Lambda tv e -> liftM (C.Lambda tv) (apply (C.LambdaBody tv) rr e)
  _             -> fail "lamR"