-- | Wrap the base monad in 'W.WriterT'
writerC
  :: (Monad m, Monad (t (W.WriterT w m)), MonadTrans t, Monoid w,
      MFunctor t) =>
     t m (b, w) -> t (W.WriterT w m) b
writerC p = do
    (r, w) <- hoist lift p
    lift $ W.tell w
    return r

writerC
  :: (Monad m, Monad (t (W.WriterT w m)), MonadTrans t, Monoid w,
      MFunctor t) =>
     t m (b, w) -> t (W.WriterT w m) b
writerC p = do
    (r, w) <- hoist lift p
    lift $ W.tell w
    return r

writerC p = do
    (r, w) <- hoist lift p
    lift $ W.tell w
    return r
