DigitalOcean ============ A Haskell Digital Ocean API. Exposes a lens based interface onto the Digital Ocean API. Fairly feature complete. Error Handling & IO Monads -------------------------- Instead of enforcing a monad to return, all functions that do IO and stuff have a type something along the lines of: getSSHKeys :: (Error e, MonadError e m, MonadIO m) => Config -> m [SSHKey] Translated to human, this just means that the monad `m` that is returned can 1) encapsulate IO, and 2) represent an error, of type `e`. This is useful if you want to use `ExceptT` or something similarly fun to represent your errors. However, for simple use, you will be relived to hear that `m` may be the plain old `IO` monad, which will represent its errors by throwing `IOException` exceptions. This means, despite the confusing type signature, we may write things such as: main = do auth <- fmap head getArgs -- Get the auth from the cmd line keys <- getSSHKeys . Config . pack $ auth -- Get the ssh keys putStrLn . show $ keys -- And display them See the ./examples directory for further usage TODO: ----- * Pagination * Tests * HTTP session reuse