Skip to content

Instantly share code, notes, and snippets.

@erthalion
Last active December 21, 2015 05:19
Show Gist options
  • Save erthalion/6255687 to your computer and use it in GitHub Desktop.
Save erthalion/6255687 to your computer and use it in GitHub Desktop.
{-# LANGUAGE OverloadedStrings, DeriveDataTypeable #-}
import Network.HTTP.Conduit
import Data.Conduit
import Data.Conduit.Binary (sinkFile)
import Data.Text (Text)
import Text.JSON.Generic
import Control.Monad.IO.Class (liftIO)
import Control.Applicative ((<$>), (<*>))
import Data.Aeson ((.:), (.:?), decode, FromJSON(..), Value(..))
import Data.Aeson.Parser (json)
import Data.Conduit.Attoparsec (sinkParser)
{- for the future -}
data Commit = Commit {
sha :: Text,
message :: Text
} deriving (Show, Data, Typeable)
instance FromJSON Commit where
parseJSON (Object v) =
Commit <$>
(v .: "sha") <*>
(v .: "message")
{- end -}
parseCommits value = print (decodeJSON value :: [Commit])
main :: IO ()
main = do
runResourceT $ do
manager <- liftIO $ newManager def
url <- liftIO $ parseUrl "https://api.github.com/repos/erthalion/vimrc/commits"
let request = url { requestHeaders = [("User-Agent", "erthalion")] }
response <- http request manager
value <- responseBody response $$+- sinkParser json
liftIO $ print value
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment