# Module `Github.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.

`val bind : ('a -> 'b t) -> 'a t -> 'b t`

`bind m f`

is the eventual value of`f`

applied to the contents of`m`

. Its argument order is designed for currying.

`val map : ('a -> 'b) -> 'a t -> 'b t`

`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 catch : (unit -> 'a t) -> (exn -> 'a t) -> 'a t`

`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.