€cdocutils.nodes document q)q}q(U nametypesq}q(XpvpqˆXbackpackqˆXalexqˆXabnfq ˆXsimilar systemsq NX introductionq NX a tool for working with packagesq NXwhat's in a packageq NXcabal featuresetqNXhackageqˆXhaddockqˆXpackage versioning policyqˆXhoogleqˆXhaskellqˆXhscolourqˆXcpphsqˆXhappyqˆuUsubstitution_defsq}qUparse_messagesq]qUcurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hUpvpq hUbackpackq!hUalexq"h Uabnfq#h Usimilar-systemsq$h U introductionq%h U a-tool-for-working-with-packagesq&h Uwhat-s-in-a-packageq'hUcabal-featuresetq(hUhackageq)hUhaddockq*hUpackage-versioning-policyq+hUhoogleq,hUhaskellq-hUhscolourq.hUcpphsq/hUhappyq0uUchildrenq1]q2(csphinx.addnodes highlightlang q3)q4}q5(U rawsourceq6UUparentq7hUsourceq8X7/home/refold/code/haskell/cabal-3.0/Cabal/doc/intro.rstq9Utagnameq:U highlightlangq;U attributesq<}q=(UlangXconsoleUlinenothresholdI9223372036854775807 Uidsq>]Ubackrefsq?]Udupnamesq@]UclassesqA]UnamesqB]uUlineqCKUdocumentqDhh1]ubcdocutils.nodes paragraph qE)qF}qG(h6X·Cabal is the standard package system for Haskell_ software. It helps people to configure, build and install Haskell software and to distribute it easily to other users and developers.h7hh8h9h:U paragraphqHh<}qI(h@]hA]h?]h>]hB]uhCKhDhh1]qJ(cdocutils.nodes Text qKX)Cabal is the standard package system for qL…qM}qN(h6X)Cabal is the standard package system for h8NhCNhDhh7hFubcdocutils.nodes reference qO)qP}qQ(h6XHaskell_UresolvedqRKh7hFh:U referenceqSh<}qT(UnameXHaskellqUUrefuriqVXhttp://www.haskell.org/qWh>]h?]h@]hA]hB]uh1]qXhKXHaskellqY…qZ}q[(h6hUh7hPubaubhKX† software. It helps people to configure, build and install Haskell software and to distribute it easily to other users and developers.q\…q]}q^(h6X† software. It helps people to configure, build and install Haskell software and to distribute it easily to other users and developers.h8NhCNhDhh7hFubeubhE)q_}q`(h6XéThere is a command line tool called ``cabal`` for working with Cabal packages. It helps with installing existing packages and also helps people developing their own packages. It can be used to work with local packages or to install packages from online package archives, including automatically installing dependencies. By default it is configured to use Hackage_ which is Haskell's central package archive that contains thousands of libraries and applications in the Cabal package format.h7hh8h9h:hHh<}qa(h@]hA]h?]h>]hB]uhCKhDhh1]qb(hKX$There is a command line tool called qc…qd}qe(h6X$There is a command line tool called h8NhCNhDhh7h_ubcdocutils.nodes literal qf)qg}qh(h6X ``cabal``h<}qi(h@]hA]h?]h>]hB]uh7h_h1]qjhKXcabalqk…ql}qm(h6Xcabalh7hgubah:UliteralqnubhKX6 for working with Cabal packages. It helps with installing existing packages and also helps people developing their own packages. It can be used to work with local packages or to install packages from online package archives, including automatically installing dependencies. By default it is configured to use qo…qp}qq(h6X6 for working with Cabal packages. It helps with installing existing packages and also helps people developing their own packages. It can be used to work with local packages or to install packages from online package archives, including automatically installing dependencies. By default it is configured to use h8NhCNhDhh7h_ubhO)qr}qs(h6XHackage_hRKh7h_h:hSh<}qt(UnameXHackagequhVXhttp://hackage.haskell.org/qvh>]h?]h@]hA]hB]uh1]qwhKXHackageqx…qy}qz(h6huh7hrubaubhKX€ which is Haskell’s central package archive that contains thousands of libraries and applications in the Cabal package format.q{…q|}q}(h6X~ which is Haskell's central package archive that contains thousands of libraries and applications in the Cabal package format.h8NhCNhDhh7h_ubeubcdocutils.nodes section q~)q}q€(h6Uh7hh8h9h:Usectionqh<}q‚(h@]hA]h?]h>]qƒh%ahB]q„h auhCKhDhh1]q…(cdocutils.nodes title q†)q‡}qˆ(h6X Introductionq‰h7hh8h9h:UtitleqŠh<}q‹(h@]hA]h?]h>]hB]uhCKhDhh1]qŒhKX Introductionq…qŽ}q(h6h‰h8NhCNhDhh7h‡ubaubhE)q}q‘(h6XŠCabal is a package system for Haskell software. The point of a package system is to enable software developers and users to easily distribute, use and reuse software. A package system makes it easier for developers to get their software into the hands of users. Equally importantly, it makes it easier for software developers to be able to reuse software components written by other developers.q’h7hh8h9h:hHh<}q“(h@]hA]h?]h>]hB]uhCKhDhh1]q”hKXŠCabal is a package system for Haskell software. The point of a package system is to enable software developers and users to easily distribute, use and reuse software. A package system makes it easier for developers to get their software into the hands of users. Equally importantly, it makes it easier for software developers to be able to reuse software components written by other developers.q•…q–}q—(h6h’h8NhCNhDhh7hubaubhE)q˜}q™(h6XôPackaging systems deal with packages and with Cabal we call them *Cabal packages*. The Cabal package is the unit of distribution. Every Cabal package has a name and a version number which are used to identify the package, e.g. ``filepath-1.0``.h7hh8h9h:hHh<}qš(h@]hA]h?]h>]hB]uhCKhDhh1]q›(hKXAPackaging systems deal with packages and with Cabal we call them qœ…q}qž(h6XAPackaging systems deal with packages and with Cabal we call them h8NhCNhDhh7h˜ubcdocutils.nodes emphasis qŸ)q }q¡(h6X*Cabal packages*h<}q¢(h@]hA]h?]h>]hB]uh7h˜h1]q£hKXCabal packagesq¤…q¥}q¦(h6XCabal packagesh7h ubah:Uemphasisq§ubhKX’. The Cabal package is the unit of distribution. Every Cabal package has a name and a version number which are used to identify the package, e.g. q¨…q©}qª(h6X’. The Cabal package is the unit of distribution. Every Cabal package has a name and a version number which are used to identify the package, e.g. h8NhCNhDhh7h˜ubhf)q«}q¬(h6X``filepath-1.0``h<}q­(h@]hA]h?]h>]hB]uh7h˜h1]q®hKX filepath-1.0q¯…q°}q±(h6X filepath-1.0h7h«ubah:hnubhKX.…q²}q³(h6X.h8NhCNhDhh7h˜ubeubhE)q´}qµ(h6XnCabal packages can depend on other Cabal packages. There are tools to enable automated package management. This means it is possible for developers and users to install a package plus all of the other Cabal packages that it depends on. It also means that it is practical to make very modular systems using lots of packages that reuse code written by many developers.q¶h7hh8h9h:hHh<}q·(h@]hA]h?]h>]hB]uhCK hDhh1]q¸hKXnCabal packages can depend on other Cabal packages. There are tools to enable automated package management. This means it is possible for developers and users to install a package plus all of the other Cabal packages that it depends on. It also means that it is practical to make very modular systems using lots of packages that reuse code written by many developers.q¹…qº}q»(h6h¶h8NhCNhDhh7h´ubaubhE)q¼}q½(h6XCabal packages are source based and are typically (but not necessarily) portable to many platforms and Haskell implementations. The Cabal package format is designed to make it possible to translate into other formats, including binary packages for various systems.q¾h7hh8h9h:hHh<}q¿(h@]hA]h?]h>]hB]uhCK'hDhh1]qÀhKXCabal packages are source based and are typically (but not necessarily) portable to many platforms and Haskell implementations. The Cabal package format is designed to make it possible to translate into other formats, including binary packages for various systems.qÁ…qÂ}qÃ(h6h¾h8NhCNhDhh7h¼ubaubhE)qÄ}qÅ(h6XWhen distributed, Cabal packages use the standard compressed tarball format, with the file extension ``.tar.gz``, e.g. ``filepath-1.0.tar.gz``.h7hh8h9h:hHh<}qÆ(h@]hA]h?]h>]hB]uhCK,hDhh1]qÇ(hKXeWhen distributed, Cabal packages use the standard compressed tarball format, with the file extension qÈ…qÉ}qÊ(h6XeWhen distributed, Cabal packages use the standard compressed tarball format, with the file extension h8NhCNhDhh7hÄubhf)qË}qÌ(h6X ``.tar.gz``h<}qÍ(h@]hA]h?]h>]hB]uh7hÄh1]qÎhKX.tar.gzqÏ…qÐ}qÑ(h6X.tar.gzh7hËubah:hnubhKX, e.g. qÒ…qÓ}qÔ(h6X, e.g. h8NhCNhDhh7hÄubhf)qÕ}qÖ(h6X``filepath-1.0.tar.gz``h<}q×(h@]hA]h?]h>]hB]uh7hÄh1]qØhKXfilepath-1.0.tar.gzqÙ…qÚ}qÛ(h6Xfilepath-1.0.tar.gzh7hÕubah:hnubhKX.…qÜ}qÝ(h6X.h8NhCNhDhh7hÄubeubhE)qÞ}qß(h6X¬Note that packages are not part of the Haskell language, rather they are a feature provided by the combination of Cabal and GHC (and several other Haskell implementations).qàh7hh8h9h:hHh<}qá(h@]hA]h?]h>]hB]uhCK0hDhh1]qâhKX¬Note that packages are not part of the Haskell language, rather they are a feature provided by the combination of Cabal and GHC (and several other Haskell implementations).qã…qä}qå(h6hàh8NhCNhDhh7hÞubaubh~)qæ}qç(h6Uh7hh8h9h:hh<}qè(h@]hA]h?]h>]qéh&ahB]qêh auhCK5hDhh1]që(h†)qì}qí(h6X A tool for working with packagesqîh7hæh8h9h:hŠh<}qï(h@]hA]h?]h>]hB]uhCK5hDhh1]qðhKX A tool for working with packagesqñ…qò}qó(h6hîh8NhCNhDhh7hìubaubhE)qô}qõ(h6X/There is a command line tool, called "``cabal``", that users and developers can use to build and install Cabal packages. It can be used for both local packages and for packages available remotely over the network. It can automatically install Cabal packages plus any other Cabal packages they depend on.h7hæh8h9h:hHh<}qö(h@]hA]h?]h>]hB]uhCK7hDhh1]q÷(hKX(There is a command line tool, called “qø…qù}qú(h6X&There is a command line tool, called "h8NhCNhDhh7hôubhf)qû}qü(h6X ``cabal``h<}qý(h@]hA]h?]h>]hB]uh7hôh1]qþhKXcabalqÿ…r}r(h6Xcabalh7hûubah:hnubhKXâ€, that users and developers can use to build and install Cabal packages. It can be used for both local packages and for packages available remotely over the network. It can automatically install Cabal packages plus any other Cabal packages they depend on.r…r}r(h6X", that users and developers can use to build and install Cabal packages. It can be used for both local packages and for packages available remotely over the network. It can automatically install Cabal packages plus any other Cabal packages they depend on.h8NhCNhDhh7hôubeubhE)r}r(h6XDDevelopers can use the tool with packages in local directories, e.g.rh7hæh8h9h:hHh<}r(h@]hA]h?]h>]hB]uhCK=hDhh1]r hKXDDevelopers can use the tool with packages in local directories, e.g.r …r }r (h6jh8NhCNhDhh7jubaubcdocutils.nodes literal_block r )r}r(h6X$ cd foo/ $ cabal installh7hæh8h9h:U literal_blockrh<}r(U xml:spacerUpreserverh>]h?]h@]hA]hB]uhCKAhDhh1]rhKX$ cd foo/ $ cabal installr…r}r(h6Uh7jubaubhE)r}r(h6X´While working on a package in a local directory, developers can run the individual steps to configure and build, and also generate documentation and run test suites and benchmarks.rh7hæh8h9h:hHh<}r(h@]hA]h?]h>]hB]uhCKDhDhh1]rhKX´While working on a package in a local directory, developers can run the individual steps to configure and build, and also generate documentation and run test suites and benchmarks.r…r}r(h6jh8NhCNhDhh7jubaubhE)r }r!(h6XCIt is also possible to install several local packages at once, e.g.r"h7hæh8h9h:hHh<}r#(h@]hA]h?]h>]hB]uhCKHhDhh1]r$hKXCIt is also possible to install several local packages at once, e.g.r%…r&}r'(h6j"h8NhCNhDhh7j ubaubj )r(}r)(h6X$ cabal install foo/ bar/h7hæh8h9h:jh<}r*(jjh>]h?]h@]hA]hB]uhCKLhDhh1]r+hKX$ cabal install foo/ bar/r,…r-}r.(h6Uh7j(ubaubhE)r/}r0(h6XDevelopers and users can use the tool to install packages from remote Cabal package archives. By default, the ``cabal`` tool is configured to use the central Haskell package archive called Hackage_ but it is possible to use it with any other suitable archive.h7hæh8h9h:hHh<}r1(h@]hA]h?]h>]hB]uhCKNhDhh1]r2(hKXnDevelopers and users can use the tool to install packages from remote Cabal package archives. By default, the r3…r4}r5(h6XnDevelopers and users can use the tool to install packages from remote Cabal package archives. By default, the h8NhCNhDhh7j/ubhf)r6}r7(h6X ``cabal``h<}r8(h@]hA]h?]h>]hB]uh7j/h1]r9hKXcabalr:…r;}r<(h6Xcabalh7j6ubah:hnubhKXF tool is configured to use the central Haskell package archive called r=…r>}r?(h6XF tool is configured to use the central Haskell package archive called h8NhCNhDhh7j/ubhO)r@}rA(h6XHackage_hRKh7j/h:hSh<}rB(UnameXHackagerChVhvh>]h?]h@]hA]hB]uh1]rDhKXHackagerE…rF}rG(h6jCh7j@ubaubhKX> but it is possible to use it with any other suitable archive.rH…rI}rJ(h6X> but it is possible to use it with any other suitable archive.h8NhCNhDhh7j/ubeubj )rK}rL(h6X$ cabal install xmonadh7hæh8h9h:jh<}rM(jjh>]h?]h@]hA]hB]uhCKVhDhh1]rNhKX$ cabal install xmonadrO…rP}rQ(h6Uh7jKubaubhE)rR}rS(h6XFThis will install the ``xmonad`` package plus all of its dependencies.rTh7hæh8h9h:hHh<}rU(h@]hA]h?]h>]hB]uhCKXhDhh1]rV(hKXThis will install the rW…rX}rY(h6XThis will install the h8NhCNhDhh7jRubhf)rZ}r[(h6X ``xmonad``h<}r\(h@]hA]h?]h>]hB]uh7jRh1]r]hKXxmonadr^…r_}r`(h6Xxmonadh7jZubah:hnubhKX& package plus all of its dependencies.ra…rb}rc(h6X& package plus all of its dependencies.h8NhCNhDhh7jRubeubhE)rd}re(h6XIn addition to packages that have been published in an archive, developers can install packages from local or remote tarball files, for examplerfh7hæh8h9h:hHh<}rg(h@]hA]h?]h>]hB]uhCKZhDhh1]rhhKXIn addition to packages that have been published in an archive, developers can install packages from local or remote tarball files, for exampleri…rj}rk(h6jfh8NhCNhDhh7jdubaubj )rl}rm(h6XP$ cabal install foo-1.0.tar.gz $ cabal install http://example.com/foo-1.0.tar.gzh7hæh8h9h:jh<}rn(jjh>]h?]h@]hA]hB]uhCK`hDhh1]rohKXP$ cabal install foo-1.0.tar.gz $ cabal install http://example.com/foo-1.0.tar.gzrp…rq}rr(h6Uh7jlubaubhE)rs}rt(h6XdCabal provides a number of ways for a user to customise how and where a package is installed. They can decide where a package will be installed, which Haskell implementation to use and whether to build optimised code or build with the ability to profile code. It is not expected that users will have to modify any of the information in the ``.cabal`` file.h7hæh8h9h:hHh<}ru(h@]hA]h?]h>]hB]uhCKchDhh1]rv(hKXTCabal provides a number of ways for a user to customise how and where a package is installed. They can decide where a package will be installed, which Haskell implementation to use and whether to build optimised code or build with the ability to profile code. It is not expected that users will have to modify any of the information in the rw…rx}ry(h6XTCabal provides a number of ways for a user to customise how and where a package is installed. They can decide where a package will be installed, which Haskell implementation to use and whether to build optimised code or build with the ability to profile code. It is not expected that users will have to modify any of the information in the h8NhCNhDhh7jsubhf)rz}r{(h6X ``.cabal``h<}r|(h@]hA]h?]h>]hB]uh7jsh1]r}hKX.cabalr~…r}r€(h6X.cabalh7jzubah:hnubhKX file.r…r‚}rƒ(h6X file.h8NhCNhDhh7jsubeubhE)r„}r…(h6XeFor full details, see the section on `building and installing packages `__.h7hæh8h9h:hHh<}r†(h@]hA]h?]h>]hB]uhCKihDhh1]r‡(hKX%For full details, see the section on rˆ…r‰}rŠ(h6X%For full details, see the section on h8NhCNhDhh7j„ubhO)r‹}rŒ(h6X?`building and installing packages `__h<}r(UnameX building and installing packageshVXinstalling-packages.htmlh>]h?]h@]hA]hB]uh7j„h1]rŽhKX building and installing packagesr…r}r‘(h6X building and installing packagesh7j‹ubah:hSubhKX.…r’}r“(h6X.h8NhCNhDhh7j„ubeubhE)r”}r•(h6XÃNote that ``cabal`` is not the only tool for working with Cabal packages. Due to the standardised format and a library for reading ``.cabal`` files, there are several other special-purpose tools.h7hæh8h9h:hHh<}r–(h@]hA]h?]h>]hB]uhCKlhDhh1]r—(hKX Note that r˜…r™}rš(h6X Note that h8NhCNhDhh7j”ubhf)r›}rœ(h6X ``cabal``h<}r(h@]hA]h?]h>]hB]uh7j”h1]ržhKXcabalrŸ…r }r¡(h6Xcabalh7j›ubah:hnubhKXp is not the only tool for working with Cabal packages. Due to the standardised format and a library for reading r¢…r£}r¤(h6Xp is not the only tool for working with Cabal packages. Due to the standardised format and a library for reading h8NhCNhDhh7j”ubhf)r¥}r¦(h6X ``.cabal``h<}r§(h@]hA]h?]h>]hB]uh7j”h1]r¨hKX.cabalr©…rª}r«(h6X.cabalh7j¥ubah:hnubhKX6 files, there are several other special-purpose tools.r¬…r­}r®(h6X6 files, there are several other special-purpose tools.h8NhCNhDhh7j”ubeubeubh~)r¯}r°(h6Uh7hh8h9h:hh<}r±(h@]hA]h?]h>]r²h'ahB]r³h auhCKqhDhh1]r´(h†)rµ}r¶(h6XWhat's in a packager·h7j¯h8h9h:hŠh<}r¸(h@]hA]h?]h>]hB]uhCKqhDhh1]r¹hKXWhat’s in a packagerº…r»}r¼(h6j·h8NhCNhDhh7jµubaubhE)r½}r¾(h6XA Cabal package consists of:r¿h7j¯h8h9h:hHh<}rÀ(h@]hA]h?]h>]hB]uhCKshDhh1]rÁhKXA Cabal package consists of:rÂ…rÃ}rÄ(h6j¿h8NhCNhDhh7j½ubaubcdocutils.nodes bullet_list rÅ)rÆ}rÇ(h6Uh7j¯h8h9h:U bullet_listrÈh<}rÉ(UbulletrÊX-h>]h?]h@]hA]hB]uhCKuhDhh1]rË(cdocutils.nodes list_item rÌ)rÍ}rÎ(h6X<Haskell software, including libraries, executables and testsrÏh7jÆh8h9h:U list_itemrÐh<}rÑ(h@]hA]h?]h>]hB]uhCNhDhh1]rÒhE)rÓ}rÔ(h6jÏh7jÍh8h9h:hHh<}rÕ(h@]hA]h?]h>]hB]uhCKuh1]rÖhKX<Haskell software, including libraries, executables and testsr×…rØ}rÙ(h6jÏh7jÓubaubaubjÌ)rÚ}rÛ(h6Xbmetadata about the package in a standard human and machine readable format (the "``.cabal``" file)h7jÆh8h9h:jÐh<}rÜ(h@]hA]h?]h>]hB]uhCNhDhh1]rÝhE)rÞ}rß(h6Xbmetadata about the package in a standard human and machine readable format (the "``.cabal``" file)h7jÚh8h9h:hHh<}rà(h@]hA]h?]h>]hB]uhCKvh1]rá(hKXSmetadata about the package in a standard human and machine readable format (the “râ…rã}rä(h6XQmetadata about the package in a standard human and machine readable format (the "h7jÞubhf)rå}ræ(h6X ``.cabal``h<}rç(h@]hA]h?]h>]hB]uh7jÞh1]rèhKX.cabalré…rê}rë(h6X.cabalh7jåubah:hnubhKX †file)rì…rí}rî(h6X" file)h7jÞubeubaubjÌ)rï}rð(h6XDa standard interface to build the package (the "``Setup.hs``" file) h7jÆh8h9h:jÐh<}rñ(h@]hA]h?]h>]hB]uhCNhDhh1]ròhE)ró}rô(h6XCa standard interface to build the package (the "``Setup.hs``" file)h7jïh8h9h:hHh<}rõ(h@]hA]h?]h>]hB]uhCKxh1]rö(hKX2a standard interface to build the package (the “r÷…rø}rù(h6X0a standard interface to build the package (the "h7jóubhf)rú}rû(h6X ``Setup.hs``h<}rü(h@]hA]h?]h>]hB]uh7jóh1]rýhKXSetup.hsrþ…rÿ}r(h6XSetup.hsh7júubah:hnubhKX †file)r…r}r(h6X" file)h7jóubeubaubeubhE)r}r(h6X¨The ``.cabal`` file contains information about the package, supplied by the package author. In particular it lists the other Cabal packages that the package depends on.h7j¯h8h9h:hHh<}r(h@]hA]h?]h>]hB]uhCKzhDhh1]r(hKXThe r…r }r (h6XThe h8NhCNhDhh7jubhf)r }r (h6X ``.cabal``h<}r (h@]hA]h?]h>]hB]uh7jh1]rhKX.cabalr…r}r(h6X.cabalh7j ubah:hnubhKXš file contains information about the package, supplied by the package author. In particular it lists the other Cabal packages that the package depends on.r…r}r(h6Xš file contains information about the package, supplied by the package author. In particular it lists the other Cabal packages that the package depends on.h8NhCNhDhh7jubeubhE)r}r(h6XËFor full details on what goes in the ``.cabal`` and ``Setup.hs`` files, and for all the other features provided by the build system, see the section on `developing packages `__.h7j¯h8h9h:hHh<}r(h@]hA]h?]h>]hB]uhCK~hDhh1]r(hKX%For full details on what goes in the r…r}r(h6X%For full details on what goes in the h8NhCNhDhh7jubhf)r}r(h6X ``.cabal``h<}r(h@]hA]h?]h>]hB]uh7jh1]rhKX.cabalr …r!}r"(h6X.cabalh7jubah:hnubhKX and r#…r$}r%(h6X and h8NhCNhDhh7jubhf)r&}r'(h6X ``Setup.hs``h<}r((h@]hA]h?]h>]hB]uh7jh1]r)hKXSetup.hsr*…r+}r,(h6XSetup.hsh7j&ubah:hnubhKXX files, and for all the other features provided by the build system, see the section on r-…r.}r/(h6XX files, and for all the other features provided by the build system, see the section on h8NhCNhDhh7jubhO)r0}r1(h6X2`developing packages `__h<}r2(UnameXdeveloping packageshVXdeveloping-packages.htmlh>]h?]h@]hA]hB]uh7jh1]r3hKXdeveloping packagesr4…r5}r6(h6Xdeveloping packagesh7j0ubah:hSubhKX.…r7}r8(h6X.h8NhCNhDhh7jubeubeubh~)r9}r:(h6Uh7hh8h9h:hh<}r;(h@]hA]h?]h>]r<h(ahB]r=hauhCKƒhDhh1]r>(h†)r?}r@(h6XCabal featuresetrAh7j9h8h9h:hŠh<}rB(h@]hA]h?]h>]hB]uhCKƒhDhh1]rChKXCabal featuresetrD…rE}rF(h6jAh8NhCNhDhh7j?ubaubhE)rG}rH(h6X3Cabal and its associated tools and websites covers:rIh7j9h8h9h:hHh<}rJ(h@]hA]h?]h>]hB]uhCK…hDhh1]rKhKX3Cabal and its associated tools and websites covers:rL…rM}rN(h6jIh8NhCNhDhh7jGubaubjÅ)rO}rP(h6Uh7j9h8h9h:jÈh<}rQ(jÊX-h>]h?]h@]hA]hB]uhCK‡hDhh1]rR(jÌ)rS}rT(h6Xa software build systemrUh7jOh8h9h:jÐh<}rV(h@]hA]h?]h>]hB]uhCNhDhh1]rWhE)rX}rY(h6jUh7jSh8h9h:hHh<}rZ(h@]hA]h?]h>]hB]uhCK‡h1]r[hKXa software build systemr\…r]}r^(h6jUh7jXubaubaubjÌ)r_}r`(h6Xsoftware configurationrah7jOh8h9h:jÐh<}rb(h@]hA]h?]h>]hB]uhCNhDhh1]rchE)rd}re(h6jah7j_h8h9h:hHh<}rf(h@]hA]h?]h>]hB]uhCKˆh1]rghKXsoftware configurationrh…ri}rj(h6jah7jdubaubaubjÌ)rk}rl(h6Xpackaging for distributionrmh7jOh8h9h:jÐh<}rn(h@]hA]h?]h>]hB]uhCNhDhh1]rohE)rp}rq(h6jmh7jkh8h9h:hHh<}rr(h@]hA]h?]h>]hB]uhCK‰h1]rshKXpackaging for distributionrt…ru}rv(h6jmh7jpubaubaubjÌ)rw}rx(h6X•automated package management - natively using the ``cabal`` command line tool; or - by translation into native package formats such as RPM or deb h7jOh8Nh:jÐh<}ry(h@]hA]h?]h>]hB]uhCNhDhh1]rz(hE)r{}r|(h6Xautomated package managementr}h7jwh8h9h:hHh<}r~(h@]hA]h?]h>]hB]uhCKŠh1]rhKXautomated package managementr€…r}r‚(h6j}h7j{ubaubjÅ)rƒ}r„(h6Uh7jwh8h9h:jÈh<}r…(jÊX-h>]h?]h@]hA]hB]uhCKŒh1]r†(jÌ)r‡}rˆ(h6X2natively using the ``cabal`` command line tool; orr‰h<}rŠ(h@]hA]h?]h>]hB]uh7jƒh1]r‹hE)rŒ}r(h6j‰h7j‡h8h9h:hHh<}rŽ(h@]hA]h?]h>]hB]uhCKŒh1]r(hKXnatively using the r…r‘}r’(h6Xnatively using the h7jŒubhf)r“}r”(h6X ``cabal``h<}r•(h@]hA]h?]h>]hB]uh7jŒh1]r–hKXcabalr—…r˜}r™(h6Xcabalh7j“ubah:hnubhKX command line tool; orrš…r›}rœ(h6X command line tool; orh7jŒubeubah:jÐubjÌ)r}rž(h6X>by translation into native package formats such as RPM or deb h<}rŸ(h@]hA]h?]h>]hB]uh7jƒh1]r hE)r¡}r¢(h6X=by translation into native package formats such as RPM or debr£h7jh8h9h:hHh<}r¤(h@]hA]h?]h>]hB]uhCKh1]r¥hKX=by translation into native package formats such as RPM or debr¦…r§}r¨(h6j£h7j¡ubaubah:jÐubeubeubjÌ)r©}rª(h6X_web and local Cabal package archives - central Hackage website with 1000's of Cabal packages h7jOh8Nh:jÐh<}r«(h@]hA]h?]h>]hB]uhCNhDhh1]r¬(hE)r­}r®(h6X$web and local Cabal package archivesr¯h7j©h8h9h:hHh<}r°(h@]hA]h?]h>]hB]uhCKh1]r±hKX$web and local Cabal package archivesr²…r³}r´(h6j¯h7j­ubaubjÅ)rµ}r¶(h6Uh7j©h8h9h:jÈh<}r·(jÊX-h>]h?]h@]hA]hB]uhCK‘h1]r¸jÌ)r¹}rº(h6X6central Hackage website with 1000's of Cabal packages h<}r»(h@]hA]h?]h>]hB]uh7jµh1]r¼hE)r½}r¾(h6X5central Hackage website with 1000's of Cabal packagesr¿h7j¹h8h9h:hHh<}rÀ(h@]hA]h?]h>]hB]uhCK‘h1]rÁhKX7central Hackage website with 1000’s of Cabal packagesrÂ…rÃ}rÄ(h6j¿h7j½ubaubah:jÐubaubeubeubhE)rÅ}rÆ(h6X©Some parts of the system can be used without others. In particular the built-in build system for simple packages is optional: it is possible to use custom build systems.rÇh7j9h8h9h:hHh<}rÈ(h@]hA]h?]h>]hB]uhCK“hDhh1]rÉhKX©Some parts of the system can be used without others. In particular the built-in build system for simple packages is optional: it is possible to use custom build systems.rÊ…rË}rÌ(h6jÇh8NhCNhDhh7jÅubaubeubh~)rÍ}rÎ(h6Uh7hh8h9h:hh<}rÏ(h@]hA]h?]h>]rÐh$ahB]rÑh auhCK˜hDhh1]rÒ(h†)rÓ}rÔ(h6XSimilar systemsrÕh7jÍh8h9h:hŠh<}rÖ(h@]hA]h?]h>]hB]uhCK˜hDhh1]r×hKXSimilar systemsrØ…rÙ}rÚ(h6jÕh8NhCNhDhh7jÓubaubhE)rÛ}rÜ(h6XèThe Cabal system is roughly comparable with the system of Python Eggs, Ruby Gems or Perl distributions. Each system has a notion of distributable packages, and has tools to manage the process of distributing and installing packages.rÝh7jÍh8h9h:hHh<}rÞ(h@]hA]h?]h>]hB]uhCKšhDhh1]rßhKXèThe Cabal system is roughly comparable with the system of Python Eggs, Ruby Gems or Perl distributions. Each system has a notion of distributable packages, and has tools to manage the process of distributing and installing packages.rà…rá}râ(h6jÝh8NhCNhDhh7jÛubaubhE)rã}rä(h6X‰Hackage is an online archive of Cabal packages. It is roughly comparable to CPAN but with rather fewer packages (around 5,000 vs 28,000).råh7jÍh8h9h:hHh<}ræ(h@]hA]h?]h>]hB]uhCKŸhDhh1]rçhKX‰Hackage is an online archive of Cabal packages. It is roughly comparable to CPAN but with rather fewer packages (around 5,000 vs 28,000).rè…ré}rê(h6jåh8NhCNhDhh7jãubaubhE)rë}rì(h6XCabal is often compared with autoconf and automake and there is some overlap in functionality. The most obvious similarity is that the command line interface for actually configuring and building packages follows the same steps and has many of the same configuration parameters.ríh7jÍh8h9h:hHh<}rî(h@]hA]h?]h>]hB]uhCK¢hDhh1]rïhKXCabal is often compared with autoconf and automake and there is some overlap in functionality. The most obvious similarity is that the command line interface for actually configuring and building packages follows the same steps and has many of the same configuration parameters.rð…rñ}rò(h6jíh8NhCNhDhh7jëubaubj )ró}rô(h6X0$ ./configure --prefix=... $ make $ make installh7jÍh8h9h:jh<}rõ(jjh>]h?]h@]hA]hB]uhCKªhDhh1]röhKX0$ ./configure --prefix=... $ make $ make installr÷…rø}rù(h6Uh7jóubaubhE)rú}rû(h6X compared torüh7jÍh8h9h:hHh<}rý(h@]hA]h?]h>]hB]uhCK®hDhh1]rþhKX compared torÿ…r}r(h6jüh8NhCNhDhh7júubaubj )r}r(h6X<$ cabal configure --prefix=... $ cabal build $ cabal installh7jÍh8h9h:jh<}r(jjh>]h?]h@]hA]hB]uhCK²hDhh1]rhKX<$ cabal configure --prefix=... $ cabal build $ cabal installr…r}r(h6Uh7jubaubhE)r }r (h6X9Cabal's build system for simple packages is considerably less flexible than make/automake, but has builtin knowledge of how to build Haskell code and requires very little manual configuration. Cabal's simple build system is also portable to Windows, without needing a Unix-like environment such as cygwin/mingwin.r h7jÍh8h9h:hHh<}r (h@]hA]h?]h>]hB]uhCK¶hDhh1]r hKX=Cabal’s build system for simple packages is considerably less flexible than make/automake, but has builtin knowledge of how to build Haskell code and requires very little manual configuration. Cabal’s simple build system is also portable to Windows, without needing a Unix-like environment such as cygwin/mingwin.r…r}r(h6j h8NhCNhDhh7j ubaubhE)r}r(h6XŒCompared to autoconf, Cabal takes a somewhat different approach to package configuration. Cabal's approach is designed for automated package management. Instead of having a configure script that tests for whether dependencies are available, Cabal packages specify their dependencies. There is some scope for optional and conditional dependencies. By having package authors specify dependencies it makes it possible for tools to install a package and all of its dependencies automatically. It also makes it possible to translate (in a mostly-automatically way) into another package format like RPM or deb which also have automatic dependency resolution.rh7jÍh8h9h:hHh<}r(h@]hA]h?]h>]hB]uhCK¼hDhh1]rhKXŽCompared to autoconf, Cabal takes a somewhat different approach to package configuration. Cabal’s approach is designed for automated package management. Instead of having a configure script that tests for whether dependencies are available, Cabal packages specify their dependencies. There is some scope for optional and conditional dependencies. By having package authors specify dependencies it makes it possible for tools to install a package and all of its dependencies automatically. It also makes it possible to translate (in a mostly-automatically way) into another package format like RPM or deb which also have automatic dependency resolution.r…r}r(h6jh8NhCNhDhh7jubaubcdocutils.nodes comment r)r}r(h6X[-*- rst -*- This file contains commonly used link-references See also "extlinks" in conf.pyh7jÍh8cdocutils.nodes reprunicode rXdoc/references.incr…r}rbh:Ucommentr h<}r!(jjh>]h?]h@]hA]hB]uhCKhDhh1]r"hKX[-*- rst -*- This file contains commonly used link-references See also "extlinks" in conf.pyr#…r$}r%(h6Uh7jubaubcdocutils.nodes target r&)r'}r((h6X .. _`Package Versioning Policy`:h7jÍh8jh:Utargetr)h<}r*(h>]h?]h@]hA]hB]Urefidr+h+uhCKÎhDhh1]ubj&)r,}r-(h6X .. _PVP: http://pvp.haskell.org/h7jÍh8jUexpect_referenced_by_namer.}r/hj'sh:j)h<}r0(hVXhttp://pvp.haskell.org/h>]r1(h h+eh?]h@]hA]hB]r2(hheuhCKÏhDhUexpect_referenced_by_idr3}r4h+j'sh1]ubj&)r5}r6(h6X(.. _Hackage: http://hackage.haskell.org/U referencedr7Kh7jÍh8jh:j)h<}r8(hVhvh>]r9h)ah?]h@]hA]hB]r:hauhCKÑhDhh1]ubj&)r;}r<(h6X$.. _Haskell: http://www.haskell.org/j7Kh7jÍh8jh:j)h<}r=(hVhWh>]r>h-ah?]h@]hA]hB]r?hauhCKÓhDhh1]ubj&)r@}rA(h6X,.. _Haddock: http://www.haskell.org/haddock/h7jÍh8jh:j)h<}rB(hVXhttp://www.haskell.org/haddock/h>]rCh*ah?]h@]hA]hB]rDhauhCKÕhDhh1]ubj&)rE}rF(h6X&.. _Alex: http://www.haskell.org/alex/h7jÍh8jh:j)h<}rG(hVXhttp://www.haskell.org/alex/h>]rHh"ah?]h@]hA]hB]rIhauhCK×hDhh1]ubj&)rJ}rK(h6X(.. _Happy: http://www.haskell.org/happy/h7jÍh8jh:j)h<}rL(hVXhttp://www.haskell.org/happy/h>]rMh0ah?]h@]hA]hB]rNhauhCKÙhDhh1]ubj&)rO}rP(h6X*.. _Hoogle: http://www.haskell.org/hoogle/h7jÍh8jh:j)h<}rQ(hVXhttp://www.haskell.org/hoogle/h>]rRh,ah?]h@]hA]hB]rShauhCKÛhDhh1]ubj&)rT}rU(h6X9.. _HsColour: http://www.cs.york.ac.uk/fp/darcs/hscolour/h7jÍh8jh:j)h<}rV(hVX+http://www.cs.york.ac.uk/fp/darcs/hscolour/h>]rWh.ah?]h@]hA]hB]rXhauhCKÝhDhh1]ubj&)rY}rZ(h6X-.. _cpphs: http://projects.haskell.org/cpphs/h7jÍh8jh:j)h<}r[(hVX"http://projects.haskell.org/cpphs/h>]r\h/ah?]h@]hA]hB]r]hauhCKßhDhh1]ubj&)r^}r_(h6X-.. _ABNF: https://tools.ietf.org/html/rfc5234h7jÍh8jh:j)h<}r`(hVX#https://tools.ietf.org/html/rfc5234h>]rah#ah?]h@]hA]hB]rbh auhCKáhDhh1]ubj&)rc}rd(h6X<.. _Backpack: https://ghc.haskell.org/trac/ghc/wiki/Backpackh7jÍh8jh:j)h<}re(hVX.https://ghc.haskell.org/trac/ghc/wiki/Backpackh>]rfh!ah?]h@]hA]hB]rghauhCKãhDhh1]ubeubeubeh6UU transformerrhNU footnote_refsri}rjUrefnamesrk}rl(Xhaskell]rmhPaXhackage]rn(hrj@euUsymbol_footnotesro]rpUautofootnote_refsrq]rrUsymbol_footnote_refsrs]rtU citationsru]rvhDhU current_linerwNUtransform_messagesrx]ry(cdocutils.nodes system_message rz)r{}r|(h6Uh<}r}(h@]UlevelKh>]h?]UsourcejhA]hB]UlineKÎUtypeUINFOr~uh1]rhE)r€}r(h6Uh<}r‚(h@]hA]h?]h>]hB]uh7j{h1]rƒhKX?Hyperlink target "package-versioning-policy" is not referenced.r„…r…}r†(h6Uh7j€ubah:hHubah:Usystem_messager‡ubjz)rˆ}r‰(h6Uh<}rŠ(h@]UlevelKh>]h?]UsourcejhA]hB]UlineKÏUtypej~uh1]r‹hE)rŒ}r(h6Uh<}rŽ(h@]hA]h?]h>]hB]uh7jˆh1]rhKX)Hyperlink target "pvp" is not referenced.r…r‘}r’(h6Uh7jŒubah:hHubah:j‡ubjz)r“}r”(h6Uh<}r•(h@]UlevelKh>]h?]UsourcejhA]hB]UlineKÕUtypej~uh1]r–hE)r—}r˜(h6Uh<}r™(h@]hA]h?]h>]hB]uh7j“h1]ršhKX-Hyperlink target "haddock" is not referenced.r›…rœ}r(h6Uh7j—ubah:hHubah:j‡ubjz)rž}rŸ(h6Uh<}r (h@]UlevelKh>]h?]UsourcejhA]hB]UlineK×Utypej~uh1]r¡hE)r¢}r£(h6Uh<}r¤(h@]hA]h?]h>]hB]uh7jžh1]r¥hKX*Hyperlink target "alex" is not referenced.r¦…r§}r¨(h6Uh7j¢ubah:hHubah:j‡ubjz)r©}rª(h6Uh<}r«(h@]UlevelKh>]h?]UsourcejhA]hB]UlineKÙUtypej~uh1]r¬hE)r­}r®(h6Uh<}r¯(h@]hA]h?]h>]hB]uh7j©h1]r°hKX+Hyperlink target "happy" is not referenced.r±…r²}r³(h6Uh7j­ubah:hHubah:j‡ubjz)r´}rµ(h6Uh<}r¶(h@]UlevelKh>]h?]UsourcejhA]hB]UlineKÛUtypej~uh1]r·hE)r¸}r¹(h6Uh<}rº(h@]hA]h?]h>]hB]uh7j´h1]r»hKX,Hyperlink target "hoogle" is not referenced.r¼…r½}r¾(h6Uh7j¸ubah:hHubah:j‡ubjz)r¿}rÀ(h6Uh<}rÁ(h@]UlevelKh>]h?]UsourcejhA]hB]UlineKÝUtypej~uh1]rÂhE)rÃ}rÄ(h6Uh<}rÅ(h@]hA]h?]h>]hB]uh7j¿h1]rÆhKX.Hyperlink target "hscolour" is not referenced.rÇ…rÈ}rÉ(h6Uh7jÃubah:hHubah:j‡ubjz)rÊ}rË(h6Uh<}rÌ(h@]UlevelKh>]h?]UsourcejhA]hB]UlineKßUtypej~uh1]rÍhE)rÎ}rÏ(h6Uh<}rÐ(h@]hA]h?]h>]hB]uh7jÊh1]rÑhKX+Hyperlink target "cpphs" is not referenced.rÒ…rÓ}rÔ(h6Uh7jÎubah:hHubah:j‡ubjz)rÕ}rÖ(h6Uh<}r×(h@]UlevelKh>]h?]UsourcejhA]hB]UlineKáUtypej~uh1]rØhE)rÙ}rÚ(h6Uh<}rÛ(h@]hA]h?]h>]hB]uh7jÕh1]rÜhKX*Hyperlink target "abnf" is not referenced.rÝ…rÞ}rß(h6Uh7jÙubah:hHubah:j‡ubjz)rà}rá(h6Uh<}râ(h@]UlevelKh>]h?]UsourcejhA]hB]UlineKãUtypej~uh1]rãhE)rä}rå(h6Uh<}ræ(h@]hA]h?]h>]hB]uh7jàh1]rçhKX.Hyperlink target "backpack" is not referenced.rè…ré}rê(h6Uh7jäubah:hHubah:j‡ubeUreporterrëNUid_startrìKU autofootnotesrí]rîU citation_refsrï}rðUindirect_targetsrñ]ròUsettingsró(cdocutils.frontend Values rôorõ}rö(Ufootnote_backlinksr÷KUrecord_dependenciesrøNU language_coderùUenrúU tracebackrûˆUpep_referencesrüNUstrip_commentsrýNU toc_backlinksrþUentryrÿU rfc_base_urlrUhttps://tools.ietf.org/html/rU datestamprNU report_levelrKUsmartquotes_localesr]rU _destinationrNU halt_levelrKU strip_classesrNhŠNUerror_encoding_error_handlerr Ubackslashreplacer Udebugr NUembed_stylesheetr ‰Uoutput_encoding_error_handlerr UstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrˆUtrim_footnote_reference_spacer‰UenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformr‰U source_linkrNUrfc_referencesrNUoutput_encodingr Uutf-8r!U source_urlr"NUinput_encodingr#U utf-8-sigr$U_disable_configr%NU id_prefixr&UUcharacter_level_inline_markupr'‰U tab_widthr(KUerror_encodingr)UUTF-8r*U_sourcer+h9U generatorr,NUdump_internalsr-NU smart_quotesr.ˆU pep_base_urlr/U https://www.python.org/dev/peps/r0Usyntax_highlightr1Ulongr2Uinput_encoding_error_handlerr3jUauto_id_prefixr4Uidr5Udoctitle_xformr6‰Ustrip_elements_with_classesr7NU _config_filesr8]Ufile_insertion_enabledr9ˆU raw_enabledr:KU dump_settingsr;NubUsymbol_footnote_startr<KUidsr=}r>(h j,h.jTh"jEh#j^h$jÍh%hh+j,h!jch)j5h&hæh-j;h'j¯h,jOh0jJh(j9h/jYh*j@uUsubstitution_namesr?}r@h:hDh<}rA(h@]h>]h?]Usourceh9hA]hB]uU footnotesrB]rCUrefidsrD}rEh+]rFj'asub.