Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


A Haskell Twitter shitposting framework.

(c) 2016 Gatlin Johnson. For license information see the LICENSE file distributed with this source code. Like anyone gives a shit.

  1. What?

This is an (in development) library for interacting with the Twitter API. The Shitpost monad is defined which automatically keeps track of your API credentials, manages connections, and handles all the bullshit OAuth stuff.

Update: I've actually decided to make this more generalized and include Tumblr as well!

It uses my tubes library for efficient stream handling and great justice:

{-# LANGUAGE OverloadedStrings #-}

import Data.ByteString (ByteString)
import Net.Monad.Shitpost
import Net.Monad.Shitpost.Twitter
import Tubes

creds :: Credentials
creds = Credentials {
    consumerKey = "some-key",
    consumerSecret = "some-secret",
    token = Just "access-token",
    tokenSecret = Just "access-token-secret"

ripHarambe :: Shitpost ()
ripHarambe = do
    status <- tweet "#RipHarambe"
    liftIO . putStrLn $ case statusCode status of
        200 -> "Shit: posted"
        _   -> "Another time, sweet prince"

findHarambeTweets :: Shitpost ()
findHarambeTweets = searchKeyword "harambe" $ \status tweets ->
    runTube $ sample tweets >< pour tweetSinkOfSomeKind

tweetSinkOfSomeKind :: Sink Shitpost ByteString
tweetSinkOfSomeKind = {- ... -}
  1. Installation

This isn't polluting the Hackage repository (yet) but if you have stack installed then you can:

$> git clone shitter
$> cd shitter
$> stack setup && stack build && stack install

and then go do your thing.

  1. Questions / Comments / Wanna talk about Harambe?

Email me at or use the GitHub Issues feature.


No releases published


No packages published