`Gitlab.Monad`

All API requests are bound through this monad which encapsulates an Lwt cooperative thread and includes some state which may be set via `API`

functions.

`val return : 'a -> 'a t`

`return x`

is the value `x`

wrapped in a state-sensitive Lwt thread.

`bind m f`

is the eventual value of `f`

applied to the contents of `m`

. Its argument order is designed for currying.

`map f m`

is `bind`

`m (fun x -> return (f x))`

. Its argument order is designed for currying.

`val (>>~) : 'a Response.t t -> ('a -> 'b t) -> 'b t`

`m >>~ f`

is `m >|= {!Response.value} >>= f`

.

`val (>|~) : 'a Response.t t -> ('a -> 'b) -> 'b t`

`m >|~ f`

is `m >|= {!Response.value} >|= f`

.

`catch try with`

is the result of trying `try`

. If `try`

succeeds, its result is returned. If `try`

raises an exception, `with`

is applied to the exception and the result of `with`

is returned.

`val fail : exn -> 'a t`

`fail exn`

raises exception `exn`

inside of the monad.

`val run : 'a t -> 'a Lwt.t`

`run m`

is the Lwt thread corresponding to the sequence of API actions represented by `m`

. Once a `t`

has been `run`

, any GitLab API state such as associated default security tokens or declared user agent string will not be available in subsequently bound functions.

`val embed : 'a Lwt.t -> 'a t`

`embed lwt`

is an Lwt thread lifted into the GitLab API monad. Its monadic state will be inherited from any monadic values bound before it.