Does Hackage have an API?

hackage, haskell

Solution

`cabal` (available from the `cabal-install` package, if you don't already have it) can do this. I'll shamelessly use my just-released `universe` package as a running example. For searching:

sorghum:~% cabal list universe
* universe
    Synopsis: Classes for types where we know all the values
    Default available version: 0.0
    Installed versions: 0.0
    License:  BSD3

* universe-th
    Synopsis: Construct a Dec's ancestor list.
    Default available version: 0.0.0.6
    Installed versions: [ Not installed ]
    Homepage: http://github.com/jfishcoff/universe-th
    License:  BSD3

For dependency information:

sorghum:~% cabal info universe
* universe         (library)
    Synopsis:      Classes for types where we know all the values
    Versions available: 0.0
    Versions installed: 0.0
    Homepage:      [ Not specified ]
    Bug reports:   [ Not specified ]
    Description:   A small package, in the spirit of data-default, which allows
                   the munging of finite and recursively enumerable types
    Category:      Data
    License:       BSD3
    Author:        Daniel Wagner
    Maintainer:    daniel@wagner-home.com
    Source repo:   [ Not specified ]
    Dependencies:  base ==4.*, void >=0.1 && <0.6
    Documentation: /home/dmwit/.cabal/x86_64/share/doc/universe-0.0/html
    Cached:        No
    Modules:
        Data.Universe
        Data.Universe.Helpers

To download and unpack:

sorghum:~% cabal unpack universe
Downloading universe-0.0...
Unpacking to universe-0.0/

You can also just download without unpacking with `cabal fetch`, for which you may enjoy the `--no-dependencies` flag (or then again maybe not).

Problem

I want to be able to search for a package and get a download link as well as a list of all the dependencies. Is there an easy way to do this through the command line or a Haskell module?

Original source