github-rest-1.1.2: Query the GitHub REST API programmatically
MaintainerBrandon Chinn <brandon@leapyear.io>
Stabilityexperimental
Portabilityportable
Safe HaskellNone
LanguageHaskell2010

GitHub.REST.Monad

Description

Defines GitHubT and MonadGitHubREST, a monad transformer and type class that gives a monad m the capability to query the GitHub REST API.

Synopsis

MonadGitHubREST API

class Monad m => MonadGitHubREST m where Source #

A type class for monads that can query the GitHub REST API.

Example:

-- create the "foo" branch
queryGitHub GHEndpoint
  { method = POST
  , endpoint = "/repos/:owner/:repo/git/refs"
  , endpointVals =
    [ "owner" := "alice"
    , "repo" := "my-project"
    ]
  , ghData =
    [ "ref" := "refs/heads/foo"
    , "sha" := "1234567890abcdef"
    ]
  }

It's recommended that you create functions for the API endpoints you're using:

deleteBranch branch = queryGitHub GHEndpoint
  { method = DELETE
  , endpoint = "/repos/:owner/:repo/git/refs/:ref"
  , endpointVals =
    [ "owner" := "alice"
    , "repo" := "my-project"
    , "ref" := "heads/" <> branch
    ]
  , ghData = []
  }

Minimal complete definition

queryGitHubPage

Methods

queryGitHubPage :: FromJSON a => GHEndpoint -> m (a, PageLinks) Source #

Query GitHub, returning (payload, links) if successful, where payload is the response that GitHub sent back and links containing any pagination links GitHub may have sent back. If the response could not be decoded as JSON, returns Left (error message, response from server).

Errors on network connection failures, if GitHub sent back an error message, or if the response could not be decoded as JSON. Use githubTry if you wish to handle GitHub errors.

queryGitHub :: FromJSON a => GHEndpoint -> m a Source #

queryGitHubPage, except ignoring pagination links.

queryGitHubAll :: (FromJSON a, Monoid a) => GHEndpoint -> m a Source #

Repeatedly calls queryGitHubPage for each page returned by GitHub and concatenates the results.

queryGitHub_ :: GHEndpoint -> m () Source #

queryGitHub, except ignores the result.

Instances

Instances details
MonadGitHubREST m => MonadGitHubREST (MaybeT m) Source # 
Instance details

Defined in GitHub.REST.Monad.Class

MonadIO m => MonadGitHubREST (GitHubT m) Source # 
Instance details

Defined in GitHub.REST.Monad

MonadGitHubREST m => MonadGitHubREST (IdentityT m) Source # 
Instance details

Defined in GitHub.REST.Monad.Class

MonadGitHubREST m => MonadGitHubREST (ExceptT e m) Source # 
Instance details

Defined in GitHub.REST.Monad.Class

MonadGitHubREST m => MonadGitHubREST (ReaderT r m) Source # 
Instance details

Defined in GitHub.REST.Monad.Class

MonadGitHubREST m => MonadGitHubREST (StateT s m) Source # 
Instance details

Defined in GitHub.REST.Monad.Class

MonadGitHubREST m => MonadGitHubREST (StateT s m) Source # 
Instance details

Defined in GitHub.REST.Monad.Class

(Monoid w, MonadGitHubREST m) => MonadGitHubREST (WriterT w m) Source # 
Instance details

Defined in GitHub.REST.Monad.Class

(Monoid w, MonadGitHubREST m) => MonadGitHubREST (WriterT w m) Source # 
Instance details

Defined in GitHub.REST.Monad.Class

(Monoid w, MonadGitHubREST m) => MonadGitHubREST (RWST r w s m) Source # 
Instance details

Defined in GitHub.REST.Monad.Class

(Monoid w, MonadGitHubREST m) => MonadGitHubREST (RWST r w s m) Source # 
Instance details

Defined in GitHub.REST.Monad.Class

queryGitHubPageIO :: FromJSON a => GitHubManager -> GHEndpoint -> IO (a, PageLinks) Source #

Same as queryGitHubPage, except explicitly taking in GitHubManager and running in IO.

Useful for implementing MonadGitHubREST outside of GitHubT.

GitHubManager

GitHubSettings

data GitHubSettings Source #

Constructors

GitHubSettings 

Fields

GitHubT

data GitHubT m a Source #

A simple monad that can run REST calls.

Instances

Instances details
MonadTrans GitHubT Source # 
Instance details

Defined in GitHub.REST.Monad

Methods

lift :: Monad m => m a -> GitHubT m a #

Monad m => Monad (GitHubT m) Source # 
Instance details

Defined in GitHub.REST.Monad

Methods

(>>=) :: GitHubT m a -> (a -> GitHubT m b) -> GitHubT m b #

(>>) :: GitHubT m a -> GitHubT m b -> GitHubT m b #

return :: a -> GitHubT m a #

Functor m => Functor (GitHubT m) Source # 
Instance details

Defined in GitHub.REST.Monad

Methods

fmap :: (a -> b) -> GitHubT m a -> GitHubT m b #

(<$) :: a -> GitHubT m b -> GitHubT m a #

MonadFail m => MonadFail (GitHubT m) Source # 
Instance details

Defined in GitHub.REST.Monad

Methods

fail :: String -> GitHubT m a #

Applicative m => Applicative (GitHubT m) Source # 
Instance details

Defined in GitHub.REST.Monad

Methods

pure :: a -> GitHubT m a #

(<*>) :: GitHubT m (a -> b) -> GitHubT m a -> GitHubT m b #

liftA2 :: (a -> b -> c) -> GitHubT m a -> GitHubT m b -> GitHubT m c #

(*>) :: GitHubT m a -> GitHubT m b -> GitHubT m b #

(<*) :: GitHubT m a -> GitHubT m b -> GitHubT m a #

MonadIO m => MonadIO (GitHubT m) Source # 
Instance details

Defined in GitHub.REST.Monad

Methods

liftIO :: IO a -> GitHubT m a #

MonadUnliftIO m => MonadUnliftIO (GitHubT m) Source # 
Instance details

Defined in GitHub.REST.Monad

Methods

withRunInIO :: ((forall a. GitHubT m a -> IO a) -> IO b) -> GitHubT m b #

MonadIO m => MonadGitHubREST (GitHubT m) Source # 
Instance details

Defined in GitHub.REST.Monad

runGitHubT :: MonadIO m => GitHubSettings -> GitHubT m a -> m a Source #

Run the given GitHubT action with the given token and user agent.

The token will be sent with each API request -- see Token. The user agent is also required for each API request -- see https://developer.github.com/v3/#user-agent-required.