module Distribution.Hackage.API where import Data.Proxy import Distribution.Hackage.Types import Distribution.PackageDescription import Network.HTTP.Client (Manager) import Network.HTTP.Client.TLS import Servant.API import Servant.Client getPackages :: ClientM [Package] getVersions :: Package -> ClientM Versions getRevisions :: Package -> ClientM [Revision] getCabalFile :: Package -> ClientM GenericPackageDescription getCabalFile' :: Package -> Int -> ClientM GenericPackageDescription ClientM [Package] getPackages :<|> Package -> ClientM Versions getVersions :<|> Package -> ClientM [Revision] getRevisions :<|> Package -> ClientM GenericPackageDescription getCabalFile :<|> Package -> Int -> ClientM GenericPackageDescription getCabalFile' = Proxy HackageAPI -> Client ClientM HackageAPI forall api. HasClient ClientM api => Proxy api -> Client ClientM api client (Proxy HackageAPI forall k (t :: k). Proxy t Proxy @HackageAPI) runClient :: Manager -> ClientM a -> IO (Either ClientError a) runClient :: Manager -> ClientM a -> IO (Either ClientError a) runClient Manager manager ClientM a m = do BaseUrl url <- String -> IO BaseUrl forall (m :: Type -> Type). MonadThrow m => String -> m BaseUrl parseBaseUrl String "https://hackage.haskell.org/" let env :: ClientEnv env = Manager -> BaseUrl -> ClientEnv mkClientEnv Manager manager BaseUrl url ClientM a -> ClientEnv -> IO (Either ClientError a) forall a. ClientM a -> ClientEnv -> IO (Either ClientError a) runClientM ClientM a m ClientEnv env runClient' :: ClientM a -> IO (Either ClientError a) runClient' :: ClientM a -> IO (Either ClientError a) runClient' ClientM a m = IO Manager forall (m :: Type -> Type). MonadIO m => m Manager newTlsManager IO Manager -> (Manager -> IO (Either ClientError a)) -> IO (Either ClientError a) forall (m :: Type -> Type) a b. Monad m => m a -> (a -> m b) -> m b >>= (Manager -> ClientM a -> IO (Either ClientError a)) -> ClientM a -> Manager -> IO (Either ClientError a) forall a b c. (a -> b -> c) -> b -> a -> c flip Manager -> ClientM a -> IO (Either ClientError a) forall a. Manager -> ClientM a -> IO (Either ClientError a) runClient ClientM a m