€cdocutils.nodes document q)q}q(U nametypesq}q(XpvpqˆXalexqˆXsimilar systemsqNX introductionq NX a tool for working with packagesq NXwhat's in a packageq NXcabal featuresetq NXhackageq ˆXhaddockqˆXpackage versioning policyqˆXhoogleqˆXhaskellqˆXhscolourqˆXcpphsqˆXhappyqˆuUsubstitution_defsq}qUparse_messagesq]qUcurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hUpvpqhUalexqhUsimilar-systemsq h U introductionq!h U a-tool-for-working-with-packagesq"h Uwhat-s-in-a-packageq#h Ucabal-featuresetq$h Uhackageq%hUhaddockq&hUpackage-versioning-policyq'hUhoogleq(hUhaskellq)hUhscolourq*hUcpphsq+hUhappyq,uUchildrenq-]q.(csphinx.addnodes highlightlang q/)q0}q1(U rawsourceq2UUparentq3hUsourceq4X7/home/refold/code/haskell/cabal-2.0/Cabal/doc/intro.rstq5Utagnameq6U highlightlangq7U attributesq8}q9(UlangXconsoleUlinenothresholdI9223372036854775807 Uidsq:]Ubackrefsq;]Udupnamesq<]Uclassesq=]Unamesq>]uUlineq?KUdocumentq@hh-]ubcdocutils.nodes paragraph qA)qB}qC(h2X·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.h3hh4h5h6U paragraphqDh8}qE(h<]h=]h;]h:]h>]uh?Kh@hh-]qF(cdocutils.nodes Text qGX)Cabal is the standard package system for qH…qI}qJ(h2X)Cabal is the standard package system for h4Nh?Nh@hh3hBubcdocutils.nodes reference qK)qL}qM(h2XHaskell_UresolvedqNKh3hBh6U referenceqOh8}qP(UnameXHaskellUrefuriqQXhttp://www.haskell.org/qRh:]h;]h<]h=]h>]uh-]qShGXHaskellqT…qU}qV(h2Uh3hLubaubhGX† software. It helps people to configure, build and install Haskell software and to distribute it easily to other users and developers.qW…qX}qY(h2X† software. It helps people to configure, build and install Haskell software and to distribute it easily to other users and developers.h4Nh?Nh@hh3hBubeubhA)qZ}q[(h2Xé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.h3hh4h5h6hDh8}q\(h<]h=]h;]h:]h>]uh?Kh@hh-]q](hGX$There is a command line tool called q^…q_}q`(h2X$There is a command line tool called h4Nh?Nh@hh3hZubcdocutils.nodes literal qa)qb}qc(h2X ``cabal``h8}qd(h<]h=]h;]h:]h>]uh3hZh-]qehGXcabalqf…qg}qh(h2Uh3hbubah6UliteralqiubhGX6 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 qj…qk}ql(h2X6 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 h4Nh?Nh@hh3hZubhK)qm}qn(h2XHackage_hNKh3hZh6hOh8}qo(UnameXHackagehQXhttp://hackage.haskell.org/qph:]h;]h<]h=]h>]uh-]qqhGXHackageqr…qs}qt(h2Uh3hmubaubhGX€ which is Haskell’s central package archive that contains thousands of libraries and applications in the Cabal package format.qu…qv}qw(h2X~ which is Haskell's central package archive that contains thousands of libraries and applications in the Cabal package format.h4Nh?Nh@hh3hZubeubcdocutils.nodes section qx)qy}qz(h2Uh3hh4h5h6Usectionq{h8}q|(h<]h=]h;]h:]q}h!ah>]q~h auh?Kh@hh-]q(cdocutils.nodes title q€)q}q‚(h2X Introductionqƒh3hyh4h5h6Utitleq„h8}q…(h<]h=]h;]h:]h>]uh?Kh@hh-]q†hGX Introductionq‡…qˆ}q‰(h2hƒh4Nh?Nh@hh3hubaubhA)qŠ}q‹(h2XŠ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Œh3hyh4h5h6hDh8}q(h<]h=]h;]h:]h>]uh?Kh@hh-]qŽhGXŠ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‘(h2hŒh4Nh?Nh@hh3hŠubaubhA)q’}q“(h2Xô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``.h3hyh4h5h6hDh8}q”(h<]h=]h;]h:]h>]uh?Kh@hh-]q•(hGXAPackaging systems deal with packages and with Cabal we call them q–…q—}q˜(h2XAPackaging systems deal with packages and with Cabal we call them h4Nh?Nh@hh3h’ubcdocutils.nodes emphasis q™)qš}q›(h2X*Cabal packages*h8}qœ(h<]h=]h;]h:]h>]uh3h’h-]qhGXCabal packagesqž…qŸ}q (h2Uh3hšubah6Uemphasisq¡ubhGX’. 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¤(h2X’. 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. h4Nh?Nh@hh3h’ubha)q¥}q¦(h2X``filepath-1.0``h8}q§(h<]h=]h;]h:]h>]uh3h’h-]q¨hGX filepath-1.0q©…qª}q«(h2Uh3h¥ubah6hiubhGX.…q¬}q­(h2X.h4Nh?Nh@hh3h’ubeubhA)q®}q¯(h2XnCabal 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°h3hyh4h5h6hDh8}q±(h<]h=]h;]h:]h>]uh?K h@hh-]q²hGXnCabal 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µ(h2h°h4Nh?Nh@hh3h®ubaubhA)q¶}q·(h2XCabal 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¸h3hyh4h5h6hDh8}q¹(h<]h=]h;]h:]h>]uh?K'h@hh-]qºhGXCabal 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½(h2h¸h4Nh?Nh@hh3h¶ubaubhA)q¾}q¿(h2XWhen distributed, Cabal packages use the standard compressed tarball format, with the file extension ``.tar.gz``, e.g. ``filepath-1.0.tar.gz``.h3hyh4h5h6hDh8}qÀ(h<]h=]h;]h:]h>]uh?K,h@hh-]qÁ(hGXeWhen distributed, Cabal packages use the standard compressed tarball format, with the file extension qÂ…qÃ}qÄ(h2XeWhen distributed, Cabal packages use the standard compressed tarball format, with the file extension h4Nh?Nh@hh3h¾ubha)qÅ}qÆ(h2X ``.tar.gz``h8}qÇ(h<]h=]h;]h:]h>]uh3h¾h-]qÈhGX.tar.gzqÉ…qÊ}qË(h2Uh3hÅubah6hiubhGX, e.g. qÌ…qÍ}qÎ(h2X, e.g. h4Nh?Nh@hh3h¾ubha)qÏ}qÐ(h2X``filepath-1.0.tar.gz``h8}qÑ(h<]h=]h;]h:]h>]uh3h¾h-]qÒhGXfilepath-1.0.tar.gzqÓ…qÔ}qÕ(h2Uh3hÏubah6hiubhGX.…qÖ}q×(h2X.h4Nh?Nh@hh3h¾ubeubhA)qØ}qÙ(h2X¬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Úh3hyh4h5h6hDh8}qÛ(h<]h=]h;]h:]h>]uh?K0h@hh-]qÜhGX¬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ß(h2hÚh4Nh?Nh@hh3hØubaubhx)qà}qá(h2Uh3hyh4h5h6h{h8}qâ(h<]h=]h;]h:]qãh"ah>]qäh auh?K5h@hh-]qå(h€)qæ}qç(h2X A tool for working with packagesqèh3hàh4h5h6h„h8}qé(h<]h=]h;]h:]h>]uh?K5h@hh-]qêhGX A tool for working with packagesqë…qì}qí(h2hèh4Nh?Nh@hh3hæubaubhA)qî}qï(h2X/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.h3hàh4h5h6hDh8}qð(h<]h=]h;]h:]h>]uh?K7h@hh-]qñ(hGX(There is a command line tool, called “qò…qó}qô(h2X&There is a command line tool, called "h4Nh?Nh@hh3hîubha)qõ}qö(h2X ``cabal``h8}q÷(h<]h=]h;]h:]h>]uh3hîh-]qøhGXcabalqù…qú}qû(h2Uh3hõubah6hiubhGXâ€, 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.qü…qý}qþ(h2X", 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.h4Nh?Nh@hh3hîubeubhA)qÿ}r(h2XDDevelopers can use the tool with packages in local directories, e.g.rh3hàh4h5h6hDh8}r(h<]h=]h;]h:]h>]uh?K=h@hh-]rhGXDDevelopers can use the tool with packages in local directories, e.g.r…r}r(h2jh4Nh?Nh@hh3hÿubaubcdocutils.nodes literal_block r)r}r (h2X$ cd foo/ $ cabal installh3hàh4h5h6U literal_blockr h8}r (U xml:spacer Upreserver h:]h;]h<]h=]h>]uh?KAh@hh-]rhGX$ cd foo/ $ cabal installr…r}r(h2Uh3jubaubhA)r}r(h2X´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.rh3hàh4h5h6hDh8}r(h<]h=]h;]h:]h>]uh?KDh@hh-]rhGX´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(h2jh4Nh?Nh@hh3jubaubhA)r}r(h2XCIt is also possible to install several local packages at once, e.g.rh3hàh4h5h6hDh8}r(h<]h=]h;]h:]h>]uh?KHh@hh-]rhGXCIt is also possible to install several local packages at once, e.g.r…r }r!(h2jh4Nh?Nh@hh3jubaubj)r"}r#(h2X$ cabal install foo/ bar/h3hàh4h5h6j h8}r$(j j h:]h;]h<]h=]h>]uh?KLh@hh-]r%hGX$ cabal install foo/ bar/r&…r'}r((h2Uh3j"ubaubhA)r)}r*(h2XDevelopers 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.h3hàh4h5h6hDh8}r+(h<]h=]h;]h:]h>]uh?KNh@hh-]r,(hGXnDevelopers and users can use the tool to install packages from remote Cabal package archives. By default, the r-…r.}r/(h2XnDevelopers and users can use the tool to install packages from remote Cabal package archives. By default, the h4Nh?Nh@hh3j)ubha)r0}r1(h2X ``cabal``h8}r2(h<]h=]h;]h:]h>]uh3j)h-]r3hGXcabalr4…r5}r6(h2Uh3j0ubah6hiubhGXF tool is configured to use the central Haskell package archive called r7…r8}r9(h2XF tool is configured to use the central Haskell package archive called h4Nh?Nh@hh3j)ubhK)r:}r;(h2XHackage_hNKh3j)h6hOh8}r<(UnameXHackagehQhph:]h;]h<]h=]h>]uh-]r=hGXHackager>…r?}r@(h2Uh3j:ubaubhGX> but it is possible to use it with any other suitable archive.rA…rB}rC(h2X> but it is possible to use it with any other suitable archive.h4Nh?Nh@hh3j)ubeubj)rD}rE(h2X$ cabal install xmonadh3hàh4h5h6j h8}rF(j j h:]h;]h<]h=]h>]uh?KVh@hh-]rGhGX$ cabal install xmonadrH…rI}rJ(h2Uh3jDubaubhA)rK}rL(h2XFThis will install the ``xmonad`` package plus all of its dependencies.rMh3hàh4h5h6hDh8}rN(h<]h=]h;]h:]h>]uh?KXh@hh-]rO(hGXThis will install the rP…rQ}rR(h2XThis will install the h4Nh?Nh@hh3jKubha)rS}rT(h2X ``xmonad``h8}rU(h<]h=]h;]h:]h>]uh3jKh-]rVhGXxmonadrW…rX}rY(h2Uh3jSubah6hiubhGX& package plus all of its dependencies.rZ…r[}r\(h2X& package plus all of its dependencies.h4Nh?Nh@hh3jKubeubhA)r]}r^(h2XIn addition to packages that have been published in an archive, developers can install packages from local or remote tarball files, for exampler_h3hàh4h5h6hDh8}r`(h<]h=]h;]h:]h>]uh?KZh@hh-]rahGXIn addition to packages that have been published in an archive, developers can install packages from local or remote tarball files, for examplerb…rc}rd(h2j_h4Nh?Nh@hh3j]ubaubj)re}rf(h2XP$ cabal install foo-1.0.tar.gz $ cabal install http://example.com/foo-1.0.tar.gzh3hàh4h5h6j h8}rg(j j h:]h;]h<]h=]h>]uh?K`h@hh-]rhhGXP$ cabal install foo-1.0.tar.gz $ cabal install http://example.com/foo-1.0.tar.gzri…rj}rk(h2Uh3jeubaubhA)rl}rm(h2XdCabal 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.h3hàh4h5h6hDh8}rn(h<]h=]h;]h:]h>]uh?Kch@hh-]ro(hGXTCabal 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 rp…rq}rr(h2XTCabal 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 h4Nh?Nh@hh3jlubha)rs}rt(h2X ``.cabal``h8}ru(h<]h=]h;]h:]h>]uh3jlh-]rvhGX.cabalrw…rx}ry(h2Uh3jsubah6hiubhGX file.rz…r{}r|(h2X file.h4Nh?Nh@hh3jlubeubhA)r}}r~(h2XeFor full details, see the section on `building and installing packages `__.h3hàh4h5h6hDh8}r(h<]h=]h;]h:]h>]uh?Kih@hh-]r€(hGX%For full details, see the section on r…r‚}rƒ(h2X%For full details, see the section on h4Nh?Nh@hh3j}ubhK)r„}r…(h2X?`building and installing packages `__h8}r†(UnameX building and installing packageshQXinstalling-packages.htmlh:]h;]h<]h=]h>]uh3j}h-]r‡hGX building and installing packagesrˆ…r‰}rŠ(h2Uh3j„ubah6hOubhGX.…r‹}rŒ(h2X.h4Nh?Nh@hh3j}ubeubhA)r}rŽ(h2XÃ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.h3hàh4h5h6hDh8}r(h<]h=]h;]h:]h>]uh?Klh@hh-]r(hGX Note that r‘…r’}r“(h2X Note that h4Nh?Nh@hh3jubha)r”}r•(h2X ``cabal``h8}r–(h<]h=]h;]h:]h>]uh3jh-]r—hGXcabalr˜…r™}rš(h2Uh3j”ubah6hiubhGXp is not the only tool for working with Cabal packages. Due to the standardised format and a library for reading r›…rœ}r(h2Xp is not the only tool for working with Cabal packages. Due to the standardised format and a library for reading h4Nh?Nh@hh3jubha)rž}rŸ(h2X ``.cabal``h8}r (h<]h=]h;]h:]h>]uh3jh-]r¡hGX.cabalr¢…r£}r¤(h2Uh3jžubah6hiubhGX6 files, there are several other special-purpose tools.r¥…r¦}r§(h2X6 files, there are several other special-purpose tools.h4Nh?Nh@hh3jubeubeubhx)r¨}r©(h2Uh3hyh4h5h6h{h8}rª(h<]h=]h;]h:]r«h#ah>]r¬h auh?Kqh@hh-]r­(h€)r®}r¯(h2XWhat's in a packager°h3j¨h4h5h6h„h8}r±(h<]h=]h;]h:]h>]uh?Kqh@hh-]r²hGXWhat’s in a packager³…r´}rµ(h2j°h4Nh?Nh@hh3j®ubaubhA)r¶}r·(h2XA Cabal package consists of:r¸h3j¨h4h5h6hDh8}r¹(h<]h=]h;]h:]h>]uh?Ksh@hh-]rºhGXA Cabal package consists of:r»…r¼}r½(h2j¸h4Nh?Nh@hh3j¶ubaubcdocutils.nodes bullet_list r¾)r¿}rÀ(h2Uh3j¨h4h5h6U bullet_listrÁh8}rÂ(UbulletrÃX-h:]h;]h<]h=]h>]uh?Kuh@hh-]rÄ(cdocutils.nodes list_item rÅ)rÆ}rÇ(h2X<Haskell software, including libraries, executables and testsrÈh3j¿h4h5h6U list_itemrÉh8}rÊ(h<]h=]h;]h:]h>]uh?Nh@hh-]rËhA)rÌ}rÍ(h2jÈh3jÆh4h5h6hDh8}rÎ(h<]h=]h;]h:]h>]uh?Kuh-]rÏhGX<Haskell software, including libraries, executables and testsrÐ…rÑ}rÒ(h2jÈh3jÌubaubaubjÅ)rÓ}rÔ(h2Xbmetadata about the package in a standard human and machine readable format (the "``.cabal``" file)h3j¿h4h5h6jÉh8}rÕ(h<]h=]h;]h:]h>]uh?Nh@hh-]rÖhA)r×}rØ(h2Xbmetadata about the package in a standard human and machine readable format (the "``.cabal``" file)h3jÓh4h5h6hDh8}rÙ(h<]h=]h;]h:]h>]uh?Kvh-]rÚ(hGXSmetadata about the package in a standard human and machine readable format (the “rÛ…rÜ}rÝ(h2XQmetadata about the package in a standard human and machine readable format (the "h3j×ubha)rÞ}rß(h2X ``.cabal``h8}rà(h<]h=]h;]h:]h>]uh3j×h-]ráhGX.cabalrâ…rã}rä(h2Uh3jÞubah6hiubhGX †file)rå…ræ}rç(h2X" file)h3j×ubeubaubjÅ)rè}ré(h2XDa standard interface to build the package (the "``Setup.hs``" file) h3j¿h4h5h6jÉh8}rê(h<]h=]h;]h:]h>]uh?Nh@hh-]rëhA)rì}rí(h2XCa standard interface to build the package (the "``Setup.hs``" file)h3jèh4h5h6hDh8}rî(h<]h=]h;]h:]h>]uh?Kxh-]rï(hGX2a standard interface to build the package (the “rð…rñ}rò(h2X0a standard interface to build the package (the "h3jìubha)ró}rô(h2X ``Setup.hs``h8}rõ(h<]h=]h;]h:]h>]uh3jìh-]röhGXSetup.hsr÷…rø}rù(h2Uh3jóubah6hiubhGX †file)rú…rû}rü(h2X" file)h3jìubeubaubeubhA)rý}rþ(h2X¨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.h3j¨h4h5h6hDh8}rÿ(h<]h=]h;]h:]h>]uh?Kzh@hh-]r(hGXThe r…r}r(h2XThe h4Nh?Nh@hh3jýubha)r}r(h2X ``.cabal``h8}r(h<]h=]h;]h:]h>]uh3jýh-]rhGX.cabalr…r }r (h2Uh3jubah6hiubhGXš 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 (h2Xš file contains information about the package, supplied by the package author. In particular it lists the other Cabal packages that the package depends on.h4Nh?Nh@hh3jýubeubhA)r}r(h2XË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 `__.h3j¨h4h5h6hDh8}r(h<]h=]h;]h:]h>]uh?K~h@hh-]r(hGX%For full details on what goes in the r…r}r(h2X%For full details on what goes in the h4Nh?Nh@hh3jubha)r}r(h2X ``.cabal``h8}r(h<]h=]h;]h:]h>]uh3jh-]rhGX.cabalr…r}r(h2Uh3jubah6hiubhGX and r…r}r(h2X and h4Nh?Nh@hh3jubha)r}r (h2X ``Setup.hs``h8}r!(h<]h=]h;]h:]h>]uh3jh-]r"hGXSetup.hsr#…r$}r%(h2Uh3jubah6hiubhGXX files, and for all the other features provided by the build system, see the section on r&…r'}r((h2XX files, and for all the other features provided by the build system, see the section on h4Nh?Nh@hh3jubhK)r)}r*(h2X2`developing packages `__h8}r+(UnameXdeveloping packageshQXdeveloping-packages.htmlh:]h;]h<]h=]h>]uh3jh-]r,hGXdeveloping packagesr-…r.}r/(h2Uh3j)ubah6hOubhGX.…r0}r1(h2X.h4Nh?Nh@hh3jubeubeubhx)r2}r3(h2Uh3hyh4h5h6h{h8}r4(h<]h=]h;]h:]r5h$ah>]r6h auh?Kƒh@hh-]r7(h€)r8}r9(h2XCabal featuresetr:h3j2h4h5h6h„h8}r;(h<]h=]h;]h:]h>]uh?Kƒh@hh-]r<hGXCabal featuresetr=…r>}r?(h2j:h4Nh?Nh@hh3j8ubaubhA)r@}rA(h2X3Cabal and its associated tools and websites covers:rBh3j2h4h5h6hDh8}rC(h<]h=]h;]h:]h>]uh?K…h@hh-]rDhGX3Cabal and its associated tools and websites covers:rE…rF}rG(h2jBh4Nh?Nh@hh3j@ubaubj¾)rH}rI(h2Uh3j2h4h5h6jÁh8}rJ(jÃX-h:]h;]h<]h=]h>]uh?K‡h@hh-]rK(jÅ)rL}rM(h2Xa software build systemrNh3jHh4h5h6jÉh8}rO(h<]h=]h;]h:]h>]uh?Nh@hh-]rPhA)rQ}rR(h2jNh3jLh4h5h6hDh8}rS(h<]h=]h;]h:]h>]uh?K‡h-]rThGXa software build systemrU…rV}rW(h2jNh3jQubaubaubjÅ)rX}rY(h2Xsoftware configurationrZh3jHh4h5h6jÉh8}r[(h<]h=]h;]h:]h>]uh?Nh@hh-]r\hA)r]}r^(h2jZh3jXh4h5h6hDh8}r_(h<]h=]h;]h:]h>]uh?Kˆh-]r`hGXsoftware configurationra…rb}rc(h2jZh3j]ubaubaubjÅ)rd}re(h2Xpackaging for distributionrfh3jHh4h5h6jÉh8}rg(h<]h=]h;]h:]h>]uh?Nh@hh-]rhhA)ri}rj(h2jfh3jdh4h5h6hDh8}rk(h<]h=]h;]h:]h>]uh?K‰h-]rlhGXpackaging for distributionrm…rn}ro(h2jfh3jiubaubaubjÅ)rp}rq(h2X•automated package management - natively using the ``cabal`` command line tool; or - by translation into native package formats such as RPM or deb h3jHh4Nh6jÉh8}rr(h<]h=]h;]h:]h>]uh?Nh@hh-]rs(hA)rt}ru(h2Xautomated package managementrvh3jph4h5h6hDh8}rw(h<]h=]h;]h:]h>]uh?KŠh-]rxhGXautomated package managementry…rz}r{(h2jvh3jtubaubj¾)r|}r}(h2Uh3jph4h5h6jÁh8}r~(jÃX-h:]h;]h<]h=]h>]uh?KŒh-]r(jÅ)r€}r(h2X2natively using the ``cabal`` command line tool; orr‚h8}rƒ(h<]h=]h;]h:]h>]uh3j|h-]r„hA)r…}r†(h2j‚h3j€h4h5h6hDh8}r‡(h<]h=]h;]h:]h>]uh?KŒh-]rˆ(hGXnatively using the r‰…rŠ}r‹(h2Xnatively using the h3j…ubha)rŒ}r(h2X ``cabal``h8}rŽ(h<]h=]h;]h:]h>]uh3j…h-]rhGXcabalr…r‘}r’(h2Uh3jŒubah6hiubhGX command line tool; orr“…r”}r•(h2X command line tool; orh3j…ubeubah6jÉubjÅ)r–}r—(h2X>by translation into native package formats such as RPM or deb h8}r˜(h<]h=]h;]h:]h>]uh3j|h-]r™hA)rš}r›(h2X=by translation into native package formats such as RPM or debrœh3j–h4h5h6hDh8}r(h<]h=]h;]h:]h>]uh?Kh-]ržhGX=by translation into native package formats such as RPM or debrŸ…r }r¡(h2jœh3jšubaubah6jÉubeubeubjÅ)r¢}r£(h2X_web and local Cabal package archives - central Hackage website with 1000's of Cabal packages h3jHh4Nh6jÉh8}r¤(h<]h=]h;]h:]h>]uh?Nh@hh-]r¥(hA)r¦}r§(h2X$web and local Cabal package archivesr¨h3j¢h4h5h6hDh8}r©(h<]h=]h;]h:]h>]uh?Kh-]rªhGX$web and local Cabal package archivesr«…r¬}r­(h2j¨h3j¦ubaubj¾)r®}r¯(h2Uh3j¢h4h5h6jÁh8}r°(jÃX-h:]h;]h<]h=]h>]uh?K‘h-]r±jÅ)r²}r³(h2X6central Hackage website with 1000's of Cabal packages h8}r´(h<]h=]h;]h:]h>]uh3j®h-]rµhA)r¶}r·(h2X5central Hackage website with 1000's of Cabal packagesr¸h3j²h4h5h6hDh8}r¹(h<]h=]h;]h:]h>]uh?K‘h-]rºhGX7central Hackage website with 1000’s of Cabal packagesr»…r¼}r½(h2j¸h3j¶ubaubah6jÉubaubeubeubhA)r¾}r¿(h2X©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Àh3j2h4h5h6hDh8}rÁ(h<]h=]h;]h:]h>]uh?K“h@hh-]rÂhGX©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Å(h2jÀh4Nh?Nh@hh3j¾ubaubeubhx)rÆ}rÇ(h2Uh3hyh4h5h6h{h8}rÈ(h<]h=]h;]h:]rÉh ah>]rÊhauh?K˜h@hh-]rË(h€)rÌ}rÍ(h2XSimilar systemsrÎh3jÆh4h5h6h„h8}rÏ(h<]h=]h;]h:]h>]uh?K˜h@hh-]rÐhGXSimilar systemsrÑ…rÒ}rÓ(h2jÎh4Nh?Nh@hh3jÌubaubhA)rÔ}rÕ(h2Xè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Öh3jÆh4h5h6hDh8}r×(h<]h=]h;]h:]h>]uh?Kšh@hh-]rØhGXè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Û(h2jÖh4Nh?Nh@hh3jÔubaubhA)rÜ}rÝ(h2X‰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Þh3jÆh4h5h6hDh8}rß(h<]h=]h;]h:]h>]uh?KŸh@hh-]ràhGX‰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ã(h2jÞh4Nh?Nh@hh3jÜubaubhA)rä}rå(h2XCabal 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æh3jÆh4h5h6hDh8}rç(h<]h=]h;]h:]h>]uh?K¢h@hh-]rèhGXCabal 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ë(h2jæh4Nh?Nh@hh3jäubaubj)rì}rí(h2X0$ ./configure --prefix=... $ make $ make installh3jÆh4h5h6j h8}rî(j j h:]h;]h<]h=]h>]uh?Kªh@hh-]rïhGX0$ ./configure --prefix=... $ make $ make installrð…rñ}rò(h2Uh3jìubaubhA)ró}rô(h2X compared torõh3jÆh4h5h6hDh8}rö(h<]h=]h;]h:]h>]uh?K®h@hh-]r÷hGX compared torø…rù}rú(h2jõh4Nh?Nh@hh3jóubaubj)rû}rü(h2X<$ cabal configure --prefix=... $ cabal build $ cabal installh3jÆh4h5h6j h8}rý(j j h:]h;]h<]h=]h>]uh?K²h@hh-]rþhGX<$ cabal configure --prefix=... $ cabal build $ cabal installrÿ…r}r(h2Uh3jûubaubhA)r}r(h2X9Cabal'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.rh3jÆh4h5h6hDh8}r(h<]h=]h;]h:]h>]uh?K¶h@hh-]rhGX=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 (h2jh4Nh?Nh@hh3jubaubhA)r }r (h2XŒ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 h3jÆh4h5h6hDh8}r (h<]h=]h;]h:]h>]uh?K¼h@hh-]rhGXŽ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(h2j h4Nh?Nh@hh3j ubaubcdocutils.nodes comment r)r}r(h2X[-*- rst -*- This file contains commonly used link-references See also "extlinks" in conf.pyh3jÆh4cdocutils.nodes reprunicode rXdoc/references.incr…r}rbh6Ucommentrh8}r(j j h:]h;]h<]h=]h>]uh?Kh@hh-]rhGX[-*- rst -*- This file contains commonly used link-references See also "extlinks" in conf.pyr…r}r(h2Uh3jubaubcdocutils.nodes target r)r }r!(h2X .. _`Package Versioning Policy`:h3jÆh4jh6Utargetr"h8}r#(h:]h;]h<]h=]h>]Urefidr$h'uh?KÎh@hh-]ubj)r%}r&(h2X .. _PVP: http://pvp.haskell.org/h3jÆh4jUexpect_referenced_by_namer'}r(hj sh6j"h8}r)(hQXhttp://pvp.haskell.org/h:]r*(hh'eh;]h<]h=]h>]r+(hheuh?KÏh@hUexpect_referenced_by_idr,}r-h'j sh-]ubj)r.}r/(h2X(.. _Hackage: http://hackage.haskell.org/U referencedr0Kh3jÆh4jh6j"h8}r1(hQhph:]r2h%ah;]h<]h=]h>]r3h auh?KÑh@hh-]ubj)r4}r5(h2X$.. _Haskell: http://www.haskell.org/j0Kh3jÆh4jh6j"h8}r6(hQhRh:]r7h)ah;]h<]h=]h>]r8hauh?KÓh@hh-]ubj)r9}r:(h2X,.. _Haddock: http://www.haskell.org/haddock/h3jÆh4jh6j"h8}r;(hQXhttp://www.haskell.org/haddock/h:]r<h&ah;]h<]h=]h>]r=hauh?KÕh@hh-]ubj)r>}r?(h2X&.. _Alex: http://www.haskell.org/alex/h3jÆh4jh6j"h8}r@(hQXhttp://www.haskell.org/alex/h:]rAhah;]h<]h=]h>]rBhauh?K×h@hh-]ubj)rC}rD(h2X(.. _Happy: http://www.haskell.org/happy/h3jÆh4jh6j"h8}rE(hQXhttp://www.haskell.org/happy/h:]rFh,ah;]h<]h=]h>]rGhauh?KÙh@hh-]ubj)rH}rI(h2X*.. _Hoogle: http://www.haskell.org/hoogle/h3jÆh4jh6j"h8}rJ(hQXhttp://www.haskell.org/hoogle/h:]rKh(ah;]h<]h=]h>]rLhauh?KÛh@hh-]ubj)rM}rN(h2X9.. _HsColour: http://www.cs.york.ac.uk/fp/darcs/hscolour/h3jÆh4jh6j"h8}rO(hQX+http://www.cs.york.ac.uk/fp/darcs/hscolour/h:]rPh*ah;]h<]h=]h>]rQhauh?KÝh@hh-]ubj)rR}rS(h2X-.. _cpphs: http://projects.haskell.org/cpphs/h3jÆh4jh6j"h8}rT(hQX"http://projects.haskell.org/cpphs/h:]rUh+ah;]h<]h=]h>]rVhauh?Kßh@hh-]ubeubeubeh2UU transformerrWNU footnote_refsrX}rYUrefnamesrZ}r[(Xhaskell]r\hLaXhackage]r](hmj:euUsymbol_footnotesr^]r_Uautofootnote_refsr`]raUsymbol_footnote_refsrb]rcU citationsrd]reh@hU current_linerfNUtransform_messagesrg]rh(cdocutils.nodes system_message ri)rj}rk(h2Uh8}rl(h<]UlevelKh:]h;]Usourcejh=]h>]UlineKÎUtypeUINFOrmuh-]rnhA)ro}rp(h2Uh8}rq(h<]h=]h;]h:]h>]uh3jjh-]rrhGX?Hyperlink target "package-versioning-policy" is not referenced.rs…rt}ru(h2Uh3joubah6hDubah6Usystem_messagervubji)rw}rx(h2Uh8}ry(h<]UlevelKh:]h;]Usourcejh=]h>]UlineKÏUtypejmuh-]rzhA)r{}r|(h2Uh8}r}(h<]h=]h;]h:]h>]uh3jwh-]r~hGX)Hyperlink target "pvp" is not referenced.r…r€}r(h2Uh3j{ubah6hDubah6jvubji)r‚}rƒ(h2Uh8}r„(h<]UlevelKh:]h;]Usourcejh=]h>]UlineKÕUtypejmuh-]r…hA)r†}r‡(h2Uh8}rˆ(h<]h=]h;]h:]h>]uh3j‚h-]r‰hGX-Hyperlink target "haddock" is not referenced.rŠ…r‹}rŒ(h2Uh3j†ubah6hDubah6jvubji)r}rŽ(h2Uh8}r(h<]UlevelKh:]h;]Usourcejh=]h>]UlineK×Utypejmuh-]rhA)r‘}r’(h2Uh8}r“(h<]h=]h;]h:]h>]uh3jh-]r”hGX*Hyperlink target "alex" is not referenced.r•…r–}r—(h2Uh3j‘ubah6hDubah6jvubji)r˜}r™(h2Uh8}rš(h<]UlevelKh:]h;]Usourcejh=]h>]UlineKÙUtypejmuh-]r›hA)rœ}r(h2Uh8}rž(h<]h=]h;]h:]h>]uh3j˜h-]rŸhGX+Hyperlink target "happy" is not referenced.r …r¡}r¢(h2Uh3jœubah6hDubah6jvubji)r£}r¤(h2Uh8}r¥(h<]UlevelKh:]h;]Usourcejh=]h>]UlineKÛUtypejmuh-]r¦hA)r§}r¨(h2Uh8}r©(h<]h=]h;]h:]h>]uh3j£h-]rªhGX,Hyperlink target "hoogle" is not referenced.r«…r¬}r­(h2Uh3j§ubah6hDubah6jvubji)r®}r¯(h2Uh8}r°(h<]UlevelKh:]h;]Usourcejh=]h>]UlineKÝUtypejmuh-]r±hA)r²}r³(h2Uh8}r´(h<]h=]h;]h:]h>]uh3j®h-]rµhGX.Hyperlink target "hscolour" is not referenced.r¶…r·}r¸(h2Uh3j²ubah6hDubah6jvubji)r¹}rº(h2Uh8}r»(h<]UlevelKh:]h;]Usourcejh=]h>]UlineKßUtypejmuh-]r¼hA)r½}r¾(h2Uh8}r¿(h<]h=]h;]h:]h>]uh3j¹h-]rÀhGX+Hyperlink target "cpphs" is not referenced.rÁ…rÂ}rÃ(h2Uh3j½ubah6hDubah6jvubeUreporterrÄ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_urlrÙUhttps://tools.ietf.org/html/rÚU datestamprÛNU report_levelrÜKUsmartquotes_localesrÝNU _destinationrÞNU halt_levelrßKU strip_classesràNh„NUerror_encoding_error_handlerráUbackslashreplacerâUdebugrãNUembed_stylesheeträ‰Uoutput_encoding_error_handlerråUstrictræU sectnum_xformrçKUdump_transformsrèNU docinfo_xformréKUwarning_streamrêNUpep_file_url_templaterëUpep-%04drìUexit_status_levelríKUconfigrîNUstrict_visitorrïNUcloak_email_addressesrðˆUtrim_footnote_reference_spacerñ‰UenvròNUdump_pseudo_xmlróNUexpose_internalsrôNUsectsubtitle_xformrõ‰U source_linkröNUrfc_referencesr÷NUoutput_encodingrøUutf-8rùU source_urlrúNUinput_encodingrûU utf-8-sigrüU_disable_configrýNU id_prefixrþUUcharacter_level_inline_markuprÿ‰U tab_widthrKUerror_encodingrUUTF-8rU_sourcerh5Ugettext_compactrˆU generatorrNUdump_internalsrNU smart_quotesrˆU pep_base_urlrU https://www.python.org/dev/peps/r Usyntax_highlightr Ulongr Uinput_encoding_error_handlerr jæUauto_id_prefixr UidrUdoctitle_xformr‰Ustrip_elements_with_classesrNU _config_filesr]Ufile_insertion_enabledrˆU raw_enabledrKU dump_settingsrNubUsymbol_footnote_startrKUidsr}r(hj%h*jMhj>h jÆh!hyh'j%h%j.h"hàh)j4h#j¨h(jHh,jCh$j2h+jRh&j9uUsubstitution_namesr}rh6h@h8}r(h<]h:]h;]Usourceh5h=]h>]uU footnotesr]rUrefidsr}rh']rj asub.