content: -- | Contains actions which are applicable to both Posts and Comments,
  --   like replying, deleting and reporting.
  module Reddit.Actions.Thing
    ( Reddit.Actions.Thing.reply
    , Reddit.Actions.Thing.delete
    , Reddit.Actions.Thing.report ) where
  
  import Reddit.Types
  import Reddit.Types.Empty
  import Reddit.Types.Reddit
  import qualified Reddit.Routes.Thing as Route
  
  import Data.Text (Text)
  
  -- | Reply to a something (a post \/ comment \/ message)
  reply :: (Monad m, Thing a)
        => a -- ^ Thing to reply to
        -> Text -- ^ Response contents
        -> RedditT m CommentID
  reply t b = do
    POSTWrapped res <- runRoute $ Route.reply t b
    return res
  
  -- | Delete something you created. Note that this is different to removing
  --   a post / comment as a moderator action. Deleting something you don't
  --   own won't error (but naturally won't delete anything either).
  delete :: (Monad m, Thing a)
         => a -- ^ Thing to delete
         -> RedditT m ()
  delete = nothing . runRoute . Route.delete
  
  -- | Report something.
  report :: (Monad m, Thing a)
         => a -- ^ Thing to report
         -> Text -- ^ Reason for reporting
         -> RedditT m ()
  report t r = nothing $ runRoute $ Route.report t r
  