haskell-packages alternatives and similar packages
Based on the "Distribution" category.
Alternatively, view haskell-packages alternatives based on common mentions on social networks and blogs.
-
Cabal-ide-backend
Official upstream development repository for Cabal and cabal-install -
stackage
Stable Haskell package sets: vetted consistent packages from Hackage -
hackage-server
Hackage-Server: A Haskell Package Repository -
cabal-dev
A wrapper program around cabal and cabal-install that maintains sandboxed build environments. -
redo
djb's redo implementation in Haskell (for Haskell from Scratch video series) -
hackage-security-HTTP
Hackage security framework based on TUF (The Update Framework) -
hackage-security
Hackage security framework based on TUF (The Update Framework) -
hackage-repo-tool
Hackage security framework based on TUF (The Update Framework) -
cabal-helper
Give Haskell development tools access to Cabal project environment. -
hackport
A command line tool to generate Gentoo ebuilds from Hackage packages. -
packunused
Tool for detecting redundant Cabal package dependencies -
stackage-upload
A more secure version of cabal upload which uses HTTPS -
cabal-bounds
Set the version bounds of dependencies in a cabal file -
stackage-cabal
A CLI executable for cabal-based stackage commands -
haddocset
Generate docset of Dash by Haddock haskell documentation tool -
stackage-setup
An executable for downloading a Haskell setup -
cabal-meta
avoid cabal dependency hell by installing all your cabal dependencies at the same time -
hackage-diff
Compare the public API of different versions of a Hackage library -
cblrepo
Tool to simplify managing a consistent set of Haskell packages for distributions. -
language-nix
Data types and useful functions to represent and manipulate the Nix language. | Source has moved to https://github.com/nixos/cabal2nix -
hackage-db
provide access to the Hackage database via Data.Map | Source has moved to https://github.com/nixos/cabal2nix -
cabal-dependency-licenses
Compose a list of a project's transitive dependencies with their licenses -
distribution-nixpkgs
Haskell types and functions to represent, query, and manipulate the Nixpkgs distribution. | Source has moved to https://github.com/nixos/cabal2nix -
jailbreak-cabal
Strip version restrictions from build dependencies in Cabal files. -
haskell-updater
rebuilds Haskell packages after a GHC upgrade or a dependency upgrade -
cabal-uninstall
Very simple Haskell script to uninstall cabal packages -
stackage-update
Update your package index incrementally (requires git) -
dynamic-cabal
Dynamically load the Cabal library to use a newer version with the GHC API -
cabal-cargs
Extract the compiler arguments from a cabal file. -
stackage-metadata
Tool for extracting metadata on all packages -
cabal-file-th
Template haskell function to bring cabal file fields into your source. -
cabal-constraints
Repeatable builds for cabalized Haskell projects
TestGPT | Generating meaningful tests for busy devs
Do you think we are missing an alternative of haskell-packages or a related project?
README
There are two cases when you may need haskell-packages: if you are writing a Haskell compiler (or any tool that processes Haskell source code, such as a static analyzer), or if you want to integrate with an existing Haskell compiler that uses haskell-packages.
Writing a compiler
If you are writing a compiler, you typically want to integrate it with Cabal, to be able to build ordinary Haskell packages.
If you go the hard way, this involves:
Parsing command line parameters. Sounds easy — just take a list of files to compile. In reality you also need to handle package ids and package dbs, CPP options (
-DFOO=1
), language extension flags (-XRankNTypes
) etc.To integrate with Cabal, you also need to tell it the list of installed packages, supported languages and extensions etc.
Actual integration with Cabal means understanding how Cabal works and hard-coding support for your compiler. And then getting it accepted and waiting for the next Cabal release.
You may pretend that you are GHC or other compiler that is already supported by Cabal. It might work, but often it won't, for various reasons. Also, GHC's command line protocol is quite complex.
Package management. You need to implement a package db mechanism, which would let you to keep track of installed packages. Then you'd have to implement a
ghc-pkg
-like tool to manage those databases, for both Cabal and your users.
Or, you can simply use this library!
It already has command line options parsing, Cabal support, and package
management. All you need to do is to provide the function to do actual
compilation and tell a couple of other things about your compiler. See
the Distribution.HaskellSuite.Compiler
module for details.
Using other compilers
Some compilers produce artifacts that you may want to use. A good example is the
hs-gen-iface
compiler from haskell-names which generates an interface for each
module — the set of all named entities (functions, types, classes) that are
exported by that module. This information can be then used either by other
compilers, or by tools like IDEs.
Assuming the compiler uses haskell-packages and exports its database type, it's
very easy to use its artifacts. See Distribution.HaskellSuite.Packages
for
package resolution and Distribution.HaskellSuite.Modules
for module
resolution.
Usage
First, make sure that you have cabal-install from git:
git clone [email protected]:haskell/cabal.git
cd cabal
(cd Cabal && cabal install)
(cd cabal-install && cabal install)
To compile a Haskell package using a haskell-packages tool:
cabal install --haskell-suite -w $TOOL
where $TOOL
may be either a full path to the compiler, or just an executable
name if it's in $PATH
.
Maintainers
David Himmelstrup is the primary maintainer.
Roman Cheplyaka is the original author.
Adam Bergmark is the backup maintainer. Please get in touch with him if the primary maintainer cannot be reached.