packages feed

reddit-0.3.0.0: README.md

reddit for haskell [![CircleCI](https://circleci.com/gh/intolerable/reddit.svg?style=svg)](https://circleci.com/gh/intolerable/reddit)
---

A Haskell library for interacting with the [Reddit API](http://reddit.com/api).

A couple of examples
---

Let's get all the posts from the frontpage of Reddit and write a summary of each of them to the console:

```haskell
{-# LANGUAGE OverloadedStrings #-}
import Reddit
import Reddit.Types.Post

import Control.Monad
import Control.Monad.IO.Class
import Data.Monoid
import qualified Data.Text as Text
import qualified Data.Text.IO as Text

main = runRedditAnon $ do
  Listing _ _ posts <- getPosts
  forM_ posts $ \post -> do
    liftIO $ Text.putStrLn $
       "[" <> tshow (score post) <> "] " <>
       title post <> " (" <> tshow (subreddit post) <> ")"

tshow = Text.pack . show
```

Let's check to see which of a group of users has the highest link karma:

```haskell
{-# LANGUAGE OverloadedStrings #-}
import Reddit
import Reddit.Types.User

import Data.List
import Data.Ord

usersToCheck = ["nikita-volkov", "simonmar", "bos", "roche"]

main = runRedditAnon $ do
  infos <- mapM (getUserInfo . Username) usersToCheck
  return $ maximumBy (comparing linkKarma) infos
```

Testing
===

Pure tests
---

`cabal test test`

This suite will only run test that don't require doing any IO. Helpful because it runs quickly and isn't subject to any network problems.

Anonymous tests
---

`cabal test test-anon`

There's also a suite of tests that can be run anonymously without having to set up a user account and an empty subreddit.

Full IO tests
---

`cabal test test-io`

The `test` test suite will run the tests that don't rely on doing any IO, but the `test-io` should be used too to ensure that IO functions do what they're supposed to do. If you want to run the IO suite, add a file `test_config.yaml` to the `reddit/` directory, like this:

```
username: my_reddit_username
password: my_reddit_password
subreddit: test_subreddit # A subreddit that the user has moderator access to
client_id: MY_CLIENT_ID # Your reddit app client ID
client_secret: MY_CLIENT_SECRET # Your reddit app client secret
```

Your app client and secret can be found in [your reddit preferences](https://reddit.com/prefs/apps/)