haskell / haskell/cabal

Install project-local dev tools from Hackage

Open
#10,016 3 comments 0 reactions 0 assignees View on GitHub
resolution: duplicate status: consider closing type: enhancement
Dominant language
Haskell
Stars
1.7k
Forks
750
Avg merge
4d 3h
Merged PRs (30d)
28

Description

**Describe the feature request**

Possibly this has been requested before, but I can't find a previous issue.

A common thing that people want is to have development tools installed for working on a project. Often, being Haskellers, those have been written in Haskell. Examples:
- Formatters
- HLint
- HLS (in principle)
- Other tools like the new [cabal-audit](https://discourse.haskell.org/t/cabal-audit-please-try-it-out/9571/5)

It is not uncommon for tools like cabal to have a way of installing "dev dependencies" or "dev tools" like this.

A sketch of what this could look like:
- A new `cabal.project` stanza `dev-tools` listing executables, which are solved for independently of everything else
- A cabal `dev-install` command, which builds all the dev tools and links them into `/my/project/dist-newstyle/bin` or something
- Users are responsible for getting `/my/project/dist-newstyle/bin` on their `PATH`?

**Additional context**

The discussion in https://discourse.haskell.org/t/cabal-audit-please-try-it-out/9571/5 made me think about this. There is some discussion about distributing things through `ghcup`, but `ghcup` is never likely to distribute _all_ the tools that people are interested in (e.g. specific versions of formatters). Cabal already has most of the machinery it would need to do this, it already knows how to build executables in standalone plans, so it's just a case of doing that for a few tools and linking them to a particular location.

Contributor guide

Open the contributing guide

Research direction

Start by tracing Cabal's existing machinery for building executables in standalone plans and reviewing how cabal.project stanzas and cabal commands are represented. Define the dev-tools stanza and dev-install behavior, including independent solving and linking into dist-newstyle/bin; done means project-local tools are built and available there.

Written by the indexing model from the issue text.

Assessment

Tech stack
haskell
Domain
build-system, cli
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.