CI GHC 9.6: cabal-plan allow-newer base (TODO: revert)
[cabal.git] / doc / hcar / Cabal-201811.tex
blob435e7408dea94c6794c280af3f5bc8fe6fc4ab36
1 % Cabal-MC.tex
2 \begin{hcarentry}{Cabal}
3 \label{cabal}
4 \label{hackage}
5 \label{hackagedb}
6 \report{Mikhail Glushenkov}%11/18
7 \status{Stable, actively developed}
8 \makeheader
10 \subsubsection*{Background}
12 Cabal is the standard packaging system for Haskell software. It
13 specifies how Haskell libraries and applications can be packaged so
14 that it is easy for consumers to use them, or re-package them,
15 regardless of the Haskell implementation or installation platform.
17 \texttt{cabal-install} is the command line interface for the Cabal and
18 Hackage system. It provides a program \texttt{cabal} which has
19 sub-commands for installing, managing, and developing Haskell packages.
21 \subsubsection*{Recent Progress}
23 We've recently produced the first releases of
24 Cabal/\texttt{cabal-install} from the 2.4 series. Bugfix releases from
25 the same branch are in the works at the time of writing and should be out soon.
27 Almost 600 commits were made to the \texttt{master} branch by
28 \href{https://gist.github.com/23Skidoo/7f07c309776574039b9cc7e29cfaf069}{48
29 different contributors} since the 2.2 release. Among the highlights
30 are:
32 \begin{compactitem}
34 \item Massive improvements to the
35 \href{https://cabal.readthedocs.io/en/latest/nix-local-build-overview.html#nix-style-local-builds}{\texttt{new-build}
36 feature}
37 \href{https://typedr.at/posts/what-i-did-on-my-summer-vacation/}{made
38 by Alexis Williams during GSoC 2018}, as well as many other
39 contributors. Among other things, \texttt{new-install},
40 \texttt{new-sdist}, \texttt{new-clean}, and \texttt{new-update}
41 commands are now fully implemented, \texttt{new-repl} works outside
42 of projects, and \texttt{new-run} can now be used to run scripts
43 (either with \texttt{cabal new-run foo.hs} or in a shebang
44 interpreter mode).
46 \item It's now possible
47 \href{https://cabal.readthedocs.io/en/latest/nix-local-build.html#specifying-packages-from-remote-version-control-locations}{to
48 specify packages from remote version control locations
49 (e.g. GitHub) in \texttt{cabal.project}} (as well as local/remote
50 tarballs). Work done by Duncan Coutts with the help of Alexis
51 Williams, \textbf{@quasicomputational}, and others.
53 \item Improvements to the wildcard syntax: a
54 \href{https://cabal.readthedocs.io/en/latest/developing-packages.html#pkg-field-data-files}{limited
55 form of recursive matching} (\texttt{data-files:~audio/**/*.mp3})
56 is now allowed. Work done by \textbf{@quasicomputational}.
58 \item Lots of bug fixes and performance improvements.
60 \end{compactitem}
62 \subsubsection*{Looking Forward}
64 We plan to make the next major Cabal/\texttt{cabal-install} release
65 (3.0) around the same time GHC 8.8 is going to be released (February
66 2019). Main features currently targeted at this milestone are:
68 \begin{compactitem}
70 \item \texttt{new-build} will become the default mode of
71 operation. Old-style commands will still be accessible under the
72 \texttt{v1-} prefix.
74 \item Multiple public libraries feature implemented by Francesco
75 Gazzetta during GSoC 2018. This will allow to define more than one
76 public library in a single \texttt{.cabal} package, which is useful
77 for large projects such as \texttt{lens}, as well as Backpack-heavy
78 libraries. This
79 \href{https://github.com/haskell/cabal/pull/5526}{has already been
80 merged to \texttt{master}}; Francesco continues to polish and
81 improve the implementation in preparation for its initial release.
83 \item A split of the Cabal library into a pure \texttt{cabal-lib-core}
84 part (parser and foundational data types) and an effectful
85 \texttt{cabal-lib-build} part (build system bits); likewise, the
86 constraint solver part of \texttt{cabal-install} will be
87 moved into its own library \texttt{cabal-lib-solver}, and the
88 \texttt{cabal-install} package renamed to \texttt{cabal}.
90 \item A revamped homepage, rewritten user manual, and automated build
91 bots for producing binaries. Help in this area would be appreciated!
93 \end{compactitem}
95 We would like to encourage people considering contributing to take a
96 look at \href{https://github.com/haskell/cabal/issues/}{the bug
97 tracker on GitHub}, take part in discussions on tickets and pull
98 requests, or submit their own. The bug tracker is reasonably well
99 maintained and it should be fairly clear to new contributors what
100 is in need of attention and which tasks are considered relatively
101 easy. Additionally,
102 \href{https://github.com/haskell/cabal/wiki/ZuriHac-2018}{the list
103 of potential projects from the latest hackathon} and the tickets
104 marked
105 \href{https://github.com/haskell/cabal/issues?q=is\%3Aopen+is\%3Aissue+label\%3A\%22meta\%3A+easy\%22}{“easy”}
107 \href{https://github.com/haskell/cabal/issues?q=is\%3Aopen+is\%3Aissue+label\%3Anewcomer}{“newcomer”}
108 can be used as a source of ideas for what to work on.
110 For more in-depth discussions there is also the
111 \href{https://mail.haskell.org/mailman/listinfo/cabal-devel}{\texttt{cabal-devel}
112 mailing list} and the
113 \href{http://ircbrowse.net/browse/hackage}{\texttt{\#hackage} IRC
114 channel on FreeNode}.
116 \FurtherReading
117 \begin{compactitem}
118 \item Cabal homepage:\hfill\url{https://www.haskell.org/cabal/}\\
119 \item Cabal on GitHub:\hfill\url{https://github.com/haskell/cabal}
120 \end{compactitem}
121 \end{hcarentry}