€cdocutils.nodes document q)q}q(U nametypesq}q(X executablesqNXpvpqˆX&accessing data files from package codeqNX quickstartq NXrunning executablesq NX.example: a package containing a simple libraryq NXthe point of packagesq NX6explicit dependencies and automatic package managementq NXdownloading a package's sourceqNXpackage descriptionsqNXlibraryqNX test suitesqNXcommon stanzasqNXmodules included in the packageqNXabnfqˆXhoogleqˆXold-style-build-tool-dependsqˆX*listing outdated dependency version boundsqNXconditional compilationqNX$generating dependency version boundsqNXhackageqˆXediting the .cabal fileqNX'backward compatibility and custom-setupqNXsublibsqˆXsystem-dependent parametersqNXhscolourqˆXmore elaborate solutionsq ˆX/meaning of field values when using conditionalsq!NXfreezing dependency versionsq"NXhaddockq#ˆXbuilding the packageq$NXaccessing the package versionq%NXdeveloping packagesq&NX1example: a package containing executable programsq'NXalexq(ˆX"resolution of conditions and flagsq)NXrunning benchmarksq*NXconfiguration flagsq+NX conditionsq,NXcpphsq-ˆXhappyq.ˆXforeign librariesq/NXsource repositoriesq0NXexample: using autoconfq1NX-example: package using detailed-0.9 interfaceq2NXpackage propertiesq3NXcreating a packageq4NXghcq5ˆXpackage names and versionsq6NXpkg-descq7ˆXfoo-bench.cabalq8ˆX buildtoolsmapq9ˆX"autogenerated modules and includesq:NXAexample: using explicit braces rather than indentation for layoutq;NXmore complex packagesqNX$modules imported from other packagesq?NXmodules and preprocessorsq@NXlayoutqANX?example: a package containing a library and executable programsqBNX buildtoolsbcqCˆXusing "cabal init"qDNX portabilityqENXbgnu autoconf places restrictions on paths, including the path that the user builds a package from.qFˆXrunning test suitesqGNXbuild informationqHNX(kinds of package: cabal vs ghc vs systemqINXpackage conceptsqJNXconditional blocksqKNXcustom setup scriptsqLNXpackage versioning policyqMˆXopening an interpreter sessionqNNX benchmarksqONX3example: package using exitcode-stdio-1.0 interfaceqPNXhaskellqQˆXfind these files at run-timeqRˆXbackpackqSˆXconfigurationsqTNuUsubstitution_defsqU}qVUparse_messagesqW]qX(cdocutils.nodes system_message qY)qZ}q[(U rawsourceq\UUparentq]cdocutils.nodes section q^)q_}q`(h\UU referencedqaKh]h^)qb}qc(h\Uh]h^)qd}qe(h\UhaKh]h^)qf}qg(h\Uh]hUsourceqhXE/home/refold/code/haskell/cabal-3.0/Cabal/doc/developing-packages.rstqiUtagnameqjUsectionqkU attributesql}qm(Udupnamesqn]Uclassesqo]Ubackrefsqp]Uidsqq]qrUdeveloping-packagesqsaUnamesqt]quh&auUlineqvMæUdocumentqwhUchildrenqx]qy(cdocutils.nodes title qz)q{}q|(h\XDeveloping packagesq}h]hfhhhihjUtitleq~hl}q(hn]ho]hp]hq]ht]uhvMæhwhhx]q€cdocutils.nodes Text qXDeveloping packagesq‚…qƒ}q„(h\h}hhNhvNhwhh]h{ubaubcdocutils.nodes paragraph q…)q†}q‡(h\X`The Cabal package is the unit of distribution. When installed, its purpose is to make available:qˆh]hfhhhihjU paragraphq‰hl}qŠ(hn]ho]hp]hq]ht]uhvMèhwhhx]q‹hX`The Cabal package is the unit of distribution. When installed, its purpose is to make available:qŒ…q}qŽ(h\hˆhhNhvNhwhh]h†ubaubcdocutils.nodes bullet_list q)q}q‘(h\Uh]hfhhhihjU bullet_listq’hl}q“(Ubulletq”X-hq]hp]hn]ho]ht]uhvMëhwhhx]q•(cdocutils.nodes list_item q–)q—}q˜(h\XOne or more Haskell programs. h]hhhhihjU list_itemq™hl}qš(hn]ho]hp]hq]ht]uhvNhwhhx]q›h…)qœ}q(h\XOne or more Haskell programs.qžh]h—hhhihjh‰hl}qŸ(hn]ho]hp]hq]ht]uhvMëhx]q hXOne or more Haskell programs.q¡…q¢}q£(h\hžh]hœubaubaubh–)q¤}q¥(h\X;At most one library, exposing a number of Haskell modules. h]hhhhihjh™hl}q¦(hn]ho]hp]hq]ht]uhvNhwhhx]q§h…)q¨}q©(h\X:At most one library, exposing a number of Haskell modules.qªh]h¤hhhihjh‰hl}q«(hn]ho]hp]hq]ht]uhvMíhx]q¬hX:At most one library, exposing a number of Haskell modules.q­…q®}q¯(h\hªh]h¨ubaubaubeubh…)q°}q±(h\X­However having both a library and executables in a package does not work very well; if the executables depend on the library, they must explicitly list all the modules they directly or indirectly import from that library. Fortunately, starting with Cabal 1.8.0.4, executables can also declare the package that they are in as a dependency, and Cabal will treat them as if they were in another package that depended on the library.q²h]hfhhhihjh‰hl}q³(hn]ho]hp]hq]ht]uhvMïhwhhx]q´hX­However having both a library and executables in a package does not work very well; if the executables depend on the library, they must explicitly list all the modules they directly or indirectly import from that library. Fortunately, starting with Cabal 1.8.0.4, executables can also declare the package that they are in as a dependency, and Cabal will treat them as if they were in another package that depended on the library.qµ…q¶}q·(h\h²hhNhvNhwhh]h°ubaubh…)q¸}q¹(h\X×Internally, the package may consist of much more than a bunch of Haskell modules: it may also have C source code and header files, source code meant for preprocessing, documentation, test cases, auxiliary tools etc.qºh]hfhhhihjh‰hl}q»(hn]ho]hp]hq]ht]uhvM÷hwhhx]q¼hX×Internally, the package may consist of much more than a bunch of Haskell modules: it may also have C source code and header files, source code meant for preprocessing, documentation, test cases, auxiliary tools etc.q½…q¾}q¿(h\hºhhNhvNhwhh]h¸ubaubh…)qÀ}qÁ(h\XWA package is identified by a globally-unique *package name*, which consists of one or more alphanumeric words separated by hyphens. To avoid ambiguity, each of these words should contain at least one letter. Chaos will result if two distinct packages with the same name are installed on the same system. A particular version of the package is distinguished by a *version number*, consisting of a sequence of one or more integers separated by dots. These can be combined to form a single text string called the *package ID*, using a hyphen to separate the name from the version, e.g. "``HUnit-1.1``".h]hfhhhihjh‰hl}qÂ(hn]ho]hp]hq]ht]uhvMûhwhhx]qÃ(hX-A package is identified by a globally-unique qÄ…qÅ}qÆ(h\X-A package is identified by a globally-unique hhNhvNhwhh]hÀubcdocutils.nodes emphasis qÇ)qÈ}qÉ(h\X*package name*hl}qÊ(hn]ho]hp]hq]ht]uh]hÀhx]qËhX package nameqÌ…qÍ}qÎ(h\X package nameh]hÈubahjUemphasisqÏubhX/, which consists of one or more alphanumeric words separated by hyphens. To avoid ambiguity, each of these words should contain at least one letter. Chaos will result if two distinct packages with the same name are installed on the same system. A particular version of the package is distinguished by a qÐ…qÑ}qÒ(h\X/, which consists of one or more alphanumeric words separated by hyphens. To avoid ambiguity, each of these words should contain at least one letter. Chaos will result if two distinct packages with the same name are installed on the same system. A particular version of the package is distinguished by a hhNhvNhwhh]hÀubhÇ)qÓ}qÔ(h\X*version number*hl}qÕ(hn]ho]hp]hq]ht]uh]hÀhx]qÖhXversion numberq×…qØ}qÙ(h\Xversion numberh]hÓubahjhÏubhX„, consisting of a sequence of one or more integers separated by dots. These can be combined to form a single text string called the qÚ…qÛ}qÜ(h\X„, consisting of a sequence of one or more integers separated by dots. These can be combined to form a single text string called the hhNhvNhwhh]hÀubhÇ)qÝ}qÞ(h\X *package ID*hl}qß(hn]ho]hp]hq]ht]uh]hÀhx]qàhX package IDqá…qâ}qã(h\X package IDh]hÝubahjhÏubhX@, using a hyphen to separate the name from the version, e.g. “qä…qå}qæ(h\X>, using a hyphen to separate the name from the version, e.g. "hhNhvNhwhh]hÀubcdocutils.nodes literal qç)qè}qé(h\X ``HUnit-1.1``hl}qê(hn]ho]hp]hq]ht]uh]hÀhx]qëhX HUnit-1.1qì…qí}qî(h\X HUnit-1.1h]hèubahjUliteralqïubhXâ€.qð…qñ}qò(h\X".hhNhvNhwhh]hÀubeubcdocutils.nodes note qó)qô}qõ(h\XTPackages are not part of the Haskell language; they simply populate the hierarchical space of module names. In GHC 6.6 and later a program may contain multiple modules with the same name if they come from separate packages; in all other current Haskell systems packages may not overlap in the modules they provide, including hidden modules.h]hfhhhihjUnoteqöhl}q÷(hn]ho]hp]hq]ht]uhvNhwhhx]qøh…)qù}qú(h\XTPackages are not part of the Haskell language; they simply populate the hierarchical space of module names. In GHC 6.6 and later a program may contain multiple modules with the same name if they come from separate packages; in all other current Haskell systems packages may not overlap in the modules they provide, including hidden modules.qûh]hôhhhihjh‰hl}qü(hn]ho]hp]hq]ht]uhvMhx]qýhXTPackages are not part of the Haskell language; they simply populate the hierarchical space of module names. In GHC 6.6 and later a program may contain multiple modules with the same name if they come from separate packages; in all other current Haskell systems packages may not overlap in the modules they provide, including hidden modules.qþ…qÿ}r(h\hûh]hùubaubaubh^)r}r(h\Uh]hfhhhihjhkhl}r(hn]ho]hp]hq]rUcreating-a-packageraht]rh4auhvMhwhhx]r(hz)r}r (h\XCreating a packager h]jhhhihjh~hl}r (hn]ho]hp]hq]ht]uhvMhwhhx]r hXCreating a packager …r}r(h\j hhNhvNhwhh]jubaubh…)r}r(h\X§Suppose you have a directory hierarchy containing the source files that make up your package. You will need to add two more files to the root directory of the package:rh]jhhhihjh‰hl}r(hn]ho]hp]hq]ht]uhvMhwhhx]rhX§Suppose you have a directory hierarchy containing the source files that make up your package. You will need to add two more files to the root directory of the package:r…r}r(h\jhhNhvNhwhh]jubaubcdocutils.nodes definition_list r)r}r(h\Uh]jhhhihjUdefinition_listrhl}r(hn]ho]hp]hq]ht]uhvNhwhhx]r(cdocutils.nodes definition_list_item r)r}r (h\X­:file:`{package-name}.cabal` a Unicode UTF-8 text file containing a package description. For details of the syntax of this file, see the section on `package descriptions`_. h]jhhhihjUdefinition_list_itemr!hl}r"(hn]ho]hp]hq]ht]uhvMhx]r#(cdocutils.nodes term r$)r%}r&(h\X:file:`{package-name}.cabal`r'h]jhhhihjUtermr(hl}r)(hn]ho]hp]hq]ht]uhvMhx]r*hç)r+}r,(h\Xpackage-name.cabalhl}r-(hq]hp]hn]ho]r.Xfiler/aUroler0j/ht]uh]j%hx]r1(hÇ)r2}r3(h\X{package-name}.cabalhl}r4(hn]ho]hp]hq]ht]uh]j+hx]r5hX package-namer6…r7}r8(h\Uh]j2ubahjhÏubhX.cabalr9…r:}r;(h\X.cabalh]j+ubehjhïubaubcdocutils.nodes definition r<)r=}r>(h\Uhl}r?(hn]ho]hp]hq]ht]uh]jhx]r@h…)rA}rB(h\Xa Unicode UTF-8 text file containing a package description. For details of the syntax of this file, see the section on `package descriptions`_.h]j=hhhihjh‰hl}rC(hn]ho]hp]hq]ht]uhvMhx]rD(hXwa Unicode UTF-8 text file containing a package description. For details of the syntax of this file, see the section on rE…rF}rG(h\Xwa Unicode UTF-8 text file containing a package description. For details of the syntax of this file, see the section on h]jAubcdocutils.nodes reference rH)rI}rJ(h\X`package descriptions`_UresolvedrKKh]jAhjU referencerLhl}rM(UnameXpackage descriptionshq]hp]hn]ho]ht]UrefidrNUpackage-descriptionsrOuhx]rPhXpackage descriptionsrQ…rR}rS(h\Xpackage descriptionsh]jIubaubhX.…rT}rU(h\X.h]jAubeubahjU definitionrVubeubj)rW}rX(h\XÞ:file:`Setup.hs` a single-module Haskell program to perform various setup tasks (with the interface described in the section on :ref:`installing-packages`). This module should import only modules that will be present in all Haskell implementations, including modules of the Cabal library. The content of this file is determined by the :pkg-field:`build-type` setting in the ``.cabal`` file. In most cases it will be trivial, calling on the Cabal library to do most of the work. h]jhhhihjj!hl}rY(hn]ho]hp]hq]ht]uhvM hwhhx]rZ(j$)r[}r\(h\X:file:`Setup.hs`r]h]jWhhhihjj(hl}r^(hn]ho]hp]hq]ht]uhvM hx]r_hç)r`}ra(h\XSetup.hshl}rb(hq]hp]hn]ho]rcXfilerdaUrolejdht]uh]j[hx]rehXSetup.hsrf…rg}rh(h\XSetup.hsh]j`ubahjhïubaubj<)ri}rj(h\Uhl}rk(hn]ho]hp]hq]ht]uh]jWhx]rlh…)rm}rn(h\XÌa single-module Haskell program to perform various setup tasks (with the interface described in the section on :ref:`installing-packages`). This module should import only modules that will be present in all Haskell implementations, including modules of the Cabal library. The content of this file is determined by the :pkg-field:`build-type` setting in the ``.cabal`` file. In most cases it will be trivial, calling on the Cabal library to do most of the work.h]jihhhihjh‰hl}ro(hn]ho]hp]hq]ht]uhvMhx]rp(hXoa single-module Haskell program to perform various setup tasks (with the interface described in the section on rq…rr}rs(h\Xoa single-module Haskell program to perform various setup tasks (with the interface described in the section on h]jmubcsphinx.addnodes pending_xref rt)ru}rv(h\X:ref:`installing-packages`h]jmhhhihjU pending_xrefrwhl}rx(UreftypeXrefUrefwarnryˆU reftargetrzXinstalling-packagesr{U refdomainXstdr|hq]hp]U refexplicit‰hn]ho]ht]Urefdocr}Xdeveloping-packagesr~uhvMhx]rcdocutils.nodes inline r€)r}r‚(h\j{hl}rƒ(hn]ho]r„(Uxrefr…j|Xstd-refr†ehp]hq]ht]uh]juhx]r‡hXinstalling-packagesrˆ…r‰}rŠ(h\Uh]jubahjUinliner‹ubaubhXµ). This module should import only modules that will be present in all Haskell implementations, including modules of the Cabal library. The content of this file is determined by the rŒ…r}rŽ(h\Xµ). This module should import only modules that will be present in all Haskell implementations, including modules of the Cabal library. The content of this file is determined by the h]jmubjt)r}r(h\X:pkg-field:`build-type`h]jmhhhihjjwhl}r‘(UreftypeX pkg-fieldjyˆjzX build-typer’U refdomainXcabalr“hq]hp]U refexplicit‰hn]ho]ht]j}j~Ucabal:pkg-sectionr”NuhvMhx]r•hç)r–}r—(h\j’hl}r˜(hn]ho]r™(j…j“Xcabal-pkg-fieldršehp]hq]ht]uh]jhx]r›hX build-typerœ…r}rž(h\Uh]j–ubahjhïubaubhX setting in the rŸ…r }r¡(h\X setting in the h]jmubhç)r¢}r£(h\X ``.cabal``hl}r¤(hn]ho]hp]hq]ht]uh]jmhx]r¥hX.cabalr¦…r§}r¨(h\X.cabalh]j¢ubahjhïubhX] file. In most cases it will be trivial, calling on the Cabal library to do most of the work.r©…rª}r«(h\X] file. In most cases it will be trivial, calling on the Cabal library to do most of the work.h]jmubeubahjjVubeubeubh…)r¬}r­(h\XªOnce you have these, you can create a source bundle of this directory for distribution. Building of the package is discussed in the section on :ref:`installing-packages`.h]jhhhihjh‰hl}r®(hn]ho]hp]hq]ht]uhvM"hwhhx]r¯(hXOnce you have these, you can create a source bundle of this directory for distribution. Building of the package is discussed in the section on r°…r±}r²(h\XOnce you have these, you can create a source bundle of this directory for distribution. Building of the package is discussed in the section on hhNhvNhwhh]j¬ubjt)r³}r´(h\X:ref:`installing-packages`h]j¬hhhihjjwhl}rµ(UreftypeXrefjyˆjzXinstalling-packagesr¶U refdomainXstdr·hq]hp]U refexplicit‰hn]ho]ht]j}j~uhvM"hx]r¸j€)r¹}rº(h\j¶hl}r»(hn]ho]r¼(j…j·Xstd-refr½ehp]hq]ht]uh]j³hx]r¾hXinstalling-packagesr¿…rÀ}rÁ(h\Uh]j¹ubahjj‹ubaubhX.…rÂ}rÃ(h\X.hhNhvNhwhh]j¬ubeubh…)rÄ}rÅ(h\X¤One of the purposes of Cabal is to make it easier to build a package with different Haskell implementations. So it provides abstractions of features present in different Haskell implementations and wherever possible it is best to take advantage of these to increase portability. Where necessary however it is possible to use specific features of specific implementations. For example one of the pieces of information a package author can put in the package's ``.cabal`` file is what language extensions the code uses. This is far preferable to specifying flags for a specific compiler as it allows Cabal to pick the right flags for the Haskell implementation that the user picks. It also allows Cabal to figure out if the language extension is even supported by the Haskell implementation that the user picks. Where compiler-specific options are needed however, there is an "escape hatch" available. The developer can specify implementation-specific options and more generally there is a configuration mechanism to customise many aspects of how a package is built depending on the Haskell implementation, the Operating system, computer architecture and user-specified configuration flags.h]jhhhihjh‰hl}rÆ(hn]ho]hp]hq]ht]uhvM&hwhhx]rÇ(hXÍOne of the purposes of Cabal is to make it easier to build a package with different Haskell implementations. So it provides abstractions of features present in different Haskell implementations and wherever possible it is best to take advantage of these to increase portability. Where necessary however it is possible to use specific features of specific implementations. For example one of the pieces of information a package author can put in the package’s rÈ…rÉ}rÊ(h\XËOne of the purposes of Cabal is to make it easier to build a package with different Haskell implementations. So it provides abstractions of features present in different Haskell implementations and wherever possible it is best to take advantage of these to increase portability. Where necessary however it is possible to use specific features of specific implementations. For example one of the pieces of information a package author can put in the package's hhNhvNhwhh]jÄubhç)rË}rÌ(h\X ``.cabal``hl}rÍ(hn]ho]hp]hq]ht]uh]jÄhx]rÎhX.cabalrÏ…rÐ}rÑ(h\X.cabalh]jËubahjhïubhXÓ file is what language extensions the code uses. This is far preferable to specifying flags for a specific compiler as it allows Cabal to pick the right flags for the Haskell implementation that the user picks. It also allows Cabal to figure out if the language extension is even supported by the Haskell implementation that the user picks. Where compiler-specific options are needed however, there is an “escape hatch†available. The developer can specify implementation-specific options and more generally there is a configuration mechanism to customise many aspects of how a package is built depending on the Haskell implementation, the Operating system, computer architecture and user-specified configuration flags.rÒ…rÓ}rÔ(h\XÏ file is what language extensions the code uses. This is far preferable to specifying flags for a specific compiler as it allows Cabal to pick the right flags for the Haskell implementation that the user picks. It also allows Cabal to figure out if the language extension is even supported by the Haskell implementation that the user picks. Where compiler-specific options are needed however, there is an "escape hatch" available. The developer can specify implementation-specific options and more generally there is a configuration mechanism to customise many aspects of how a package is built depending on the Haskell implementation, the Operating system, computer architecture and user-specified configuration flags.hhNhvNhwhh]jÄubeubcdocutils.nodes literal_block rÕ)rÖ}r×(h\XÞname: Foo version: 1.0 library build-depends: base >= 4 && < 5 exposed-modules: Foo extensions: ForeignFunctionInterface ghc-options: -Wall if os(windows) build-depends: Win32 >= 2.1 && < 2.6h]jhhhihjU literal_blockrØhl}rÙ(U xml:spacerÚUpreserverÛhq]hp]hn]ho]ht]uhvM:hwhhx]rÜhXÞname: Foo version: 1.0 library build-depends: base >= 4 && < 5 exposed-modules: Foo extensions: ForeignFunctionInterface ghc-options: -Wall if os(windows) build-depends: Win32 >= 2.1 && < 2.6rÝ…rÞ}rß(h\Uh]jÖubaubh^)rà}rá(h\Uh]jhhhihjhkhl}râ(hn]ho]hp]hq]rãU-example-a-package-containing-a-simple-libraryräaht]råh auhvMFhwhhx]ræ(hz)rç}rè(h\X.Example: A package containing a simple libraryréh]jàhhhihjh~hl}rê(hn]ho]hp]hq]ht]uhvMFhwhhx]rëhX.Example: A package containing a simple libraryrì…rí}rî(h\jéhhNhvNhwhh]jçubaubh…)rï}rð(h\X=The HUnit package contains a file ``HUnit.cabal`` containing:rñh]jàhhhihjh‰hl}rò(hn]ho]hp]hq]ht]uhvMHhwhhx]ró(hX"The HUnit package contains a file rô…rõ}rö(h\X"The HUnit package contains a file hhNhvNhwhh]jïubhç)r÷}rø(h\X``HUnit.cabal``hl}rù(hn]ho]hp]hq]ht]uh]jïhx]rúhX HUnit.cabalrû…rü}rý(h\X HUnit.cabalh]j÷ubahjhïubhX containing:rþ…rÿ}r(h\X containing:hhNhvNhwhh]jïubeubjÕ)r}r(h\Xçname: HUnit version: 1.1.1 synopsis: A unit testing framework for Haskell homepage: http://hunit.sourceforge.net/ category: Testing author: Dean Herington license: BSD3 license-file: LICENSE cabal-version: 1.12 build-type: Simple library build-depends: base >= 2 && < 4 exposed-modules: Test.HUnit.Base, Test.HUnit.Lang, Test.HUnit.Terminal, Test.HUnit.Text, Test.HUnit default-extensions: CPPh]jàhhhihjjØhl}r(jÚjÛhq]hp]hn]ho]ht]uhvMLhwhhx]rhXçname: HUnit version: 1.1.1 synopsis: A unit testing framework for Haskell homepage: http://hunit.sourceforge.net/ category: Testing author: Dean Herington license: BSD3 license-file: LICENSE cabal-version: 1.12 build-type: Simple library build-depends: base >= 2 && < 4 exposed-modules: Test.HUnit.Base, Test.HUnit.Lang, Test.HUnit.Terminal, Test.HUnit.Text, Test.HUnit default-extensions: CPPr…r}r(h\Uh]jubaubh…)r}r (h\Xand the following ``Setup.hs``:r h]jàhhhihjh‰hl}r (hn]ho]hp]hq]ht]uhvM]hwhhx]r (hXand the following r …r}r(h\Xand the following hhNhvNhwhh]jubhç)r}r(h\X ``Setup.hs``hl}r(hn]ho]hp]hq]ht]uh]jhx]rhXSetup.hsr…r}r(h\XSetup.hsh]jubahjhïubhX:…r}r(h\X:hhNhvNhwhh]jubeubjÕ)r}r(h\X-import Distribution.Simple main = defaultMainh]jàhhhihjjØhl}r(Ulinenosr‰UlanguagerXhaskelljÚjÛhq]hp]hn]Uhighlight_argsr}ho]ht]uhvM_hwhhx]rhX-import Distribution.Simple main = defaultMainr …r!}r"(h\Uh]jubaubeubh^)r#}r$(h\Uh]jhhhihjhkhl}r%(hn]ho]hp]hq]r&U0example-a-package-containing-executable-programsr'aht]r(h'auhvMehwhhx]r)(hz)r*}r+(h\X1Example: A package containing executable programsr,h]j#hhhihjh~hl}r-(hn]ho]hp]hq]ht]uhvMehwhhx]r.hX1Example: A package containing executable programsr/…r0}r1(h\j,hhNhvNhwhh]j*ubaubjÕ)r2}r3(h\Xºname: TestPackage version: 0.0 synopsis: Small package with two programs author: Angela Author license: BSD3 build-type: Simple cabal-version: >= 1.8 executable program1 build-depends: HUnit >= 1.1.1 && < 1.2 main-is: Main.hs hs-source-dirs: prog1 executable program2 main-is: Main.hs build-depends: HUnit >= 1.1.1 && < 1.2 hs-source-dirs: prog2 other-modules: Utilsh]j#hhhihjjØhl}r4(jÚjÛhq]hp]hn]ho]ht]uhvMihwhhx]r5hXºname: TestPackage version: 0.0 synopsis: Small package with two programs author: Angela Author license: BSD3 build-type: Simple cabal-version: >= 1.8 executable program1 build-depends: HUnit >= 1.1.1 && < 1.2 main-is: Main.hs hs-source-dirs: prog1 executable program2 main-is: Main.hs build-depends: HUnit >= 1.1.1 && < 1.2 hs-source-dirs: prog2 other-modules: Utilsr6…r7}r8(h\Uh]j2ubaubh…)r9}r:(h\X$with ``Setup.hs`` the same as above.r;h]j#hhhihjh‰hl}r<(hn]ho]hp]hq]ht]uhvM|hwhhx]r=(hXwith r>…r?}r@(h\Xwith hhNhvNhwhh]j9ubhç)rA}rB(h\X ``Setup.hs``hl}rC(hn]ho]hp]hq]ht]uh]j9hx]rDhXSetup.hsrE…rF}rG(h\XSetup.hsh]jAubahjhïubhX the same as above.rH…rI}rJ(h\X the same as above.hhNhvNhwhh]j9ubeubeubh^)rK}rL(h\UhaKh]jhhhihjhkhl}rM(hn]rNX?example: a package containing a library and executable programsrOaho]hp]hq]rPU>example-a-package-containing-a-library-and-executable-programsrQaht]uhvMhwhhx]rR(hz)rS}rT(h\X?Example: A package containing a library and executable programsrUh]jKhhhihjh~hl}rV(hn]ho]hp]hq]ht]uhvMhwhhx]rWhX?Example: A package containing a library and executable programsrX…rY}rZ(h\jUhhNhvNhwhh]jSubaubjÕ)r[}r\(h\Xåname: TestPackage version: 0.0 synopsis: Package with library and two programs license: BSD3 author: Angela Author build-type: Simple cabal-version: >= 1.8 library build-depends: HUnit >= 1.1.1 && < 1.2 exposed-modules: A, B, C executable program1 main-is: Main.hs hs-source-dirs: prog1 other-modules: A, B executable program2 main-is: Main.hs hs-source-dirs: prog2 other-modules: A, C, Utilsh]jKhhhihjjØhl}r](jÚjÛhq]hp]hn]ho]ht]uhvMƒhwhhx]r^hXåname: TestPackage version: 0.0 synopsis: Package with library and two programs license: BSD3 author: Angela Author build-type: Simple cabal-version: >= 1.8 library build-depends: HUnit >= 1.1.1 && < 1.2 exposed-modules: A, B, C executable program1 main-is: Main.hs hs-source-dirs: prog1 other-modules: A, B executable program2 main-is: Main.hs hs-source-dirs: prog2 other-modules: A, C, Utilsr_…r`}ra(h\Uh]j[ubaubh…)rb}rc(h\X‹with ``Setup.hs`` the same as above. Note that any library modules required (directly or indirectly) by an executable must be listed again.h]jKhhhihjh‰hl}rd(hn]ho]hp]hq]ht]uhvM™hwhhx]re(hXwith rf…rg}rh(h\Xwith hhNhvNhwhh]jbubhç)ri}rj(h\X ``Setup.hs``hl}rk(hn]ho]hp]hq]ht]uh]jbhx]rlhXSetup.hsrm…rn}ro(h\XSetup.hsh]jiubahjhïubhXz the same as above. Note that any library modules required (directly or indirectly) by an executable must be listed again.rp…rq}rr(h\Xz the same as above. Note that any library modules required (directly or indirectly) by an executable must be listed again.hhNhvNhwhh]jbubeubh…)rs}rt(h\X–The trivial setup script used in these examples uses the *simple build infrastructure* provided by the Cabal library (see `Distribution.Simple <../release/cabal-latest/doc/API/Cabal/Distribution-Simple.html>`__). The simplicity lies in its interface rather that its implementation. It automatically handles preprocessing with standard preprocessors, and builds packages for all the Haskell implementations.h]jKhhhihjh‰hl}ru(hn]ho]hp]hq]ht]uhvMœhwhhx]rv(hX9The trivial setup script used in these examples uses the rw…rx}ry(h\X9The trivial setup script used in these examples uses the hhNhvNhwhh]jsubhÇ)rz}r{(h\X*simple build infrastructure*hl}r|(hn]ho]hp]hq]ht]uh]jshx]r}hXsimple build infrastructurer~…r}r€(h\Xsimple build infrastructureh]jzubahjhÏubhX$ provided by the Cabal library (see r…r‚}rƒ(h\X$ provided by the Cabal library (see hhNhvNhwhh]jsubjH)r„}r…(h\XX`Distribution.Simple <../release/cabal-latest/doc/API/Cabal/Distribution-Simple.html>`__hl}r†(UnameXDistribution.SimpleUrefurir‡X>../release/cabal-latest/doc/API/Cabal/Distribution-Simple.htmlhq]hp]hn]ho]ht]uh]jshx]rˆhXDistribution.Simpler‰…rŠ}r‹(h\XDistribution.Simpleh]j„ubahjjLubhXÄ). The simplicity lies in its interface rather that its implementation. It automatically handles preprocessing with standard preprocessors, and builds packages for all the Haskell implementations.rŒ…r}rŽ(h\XÄ). The simplicity lies in its interface rather that its implementation. It automatically handles preprocessing with standard preprocessors, and builds packages for all the Haskell implementations.hhNhvNhwhh]jsubeubh…)r}r(h\XThe simple build infrastructure can also handle packages where building is governed by system-dependent parameters, if you specify a little more (see the section on `system-dependent parameters`_). A few packages require `more elaborate solutions `_.h]jKhhhihjh‰hl}r‘(hn]ho]hp]hq]ht]uhvM£hwhhx]r’(hX¥The simple build infrastructure can also handle packages where building is governed by system-dependent parameters, if you specify a little more (see the section on r“…r”}r•(h\X¥The simple build infrastructure can also handle packages where building is governed by system-dependent parameters, if you specify a little more (see the section on hhNhvNhwhh]jubjH)r–}r—(h\X`system-dependent parameters`_jKKh]jhjjLhl}r˜(UnameXsystem-dependent parametershq]hp]hn]ho]ht]jNUsystem-dependent-parametersr™uhx]ršhXsystem-dependent parametersr›…rœ}r(h\Xsystem-dependent parametersh]j–ubaubhX). A few packages require rž…rŸ}r (h\X). A few packages require hhNhvNhwhh]jubjH)r¡}r¢(h\X3`more elaborate solutions `_hl}r£(UnameXmore elaborate solutionsj‡Xmorecomplexpackagesr¤hq]hp]hn]ho]ht]uh]jhx]r¥hXmore elaborate solutionsr¦…r§}r¨(h\Xmore elaborate solutionsh]j¡ubahjjLubcdocutils.nodes target r©)rª}r«(h\X haKh]jhjUtargetr¬hl}r­(Urefurij¤hq]r®Umore-elaborate-solutionsr¯ahp]hn]ho]ht]r°h auhx]ubhX.…r±}r²(h\X.hhNhvNhwhh]jubeubj©)r³}r´(h\X .. _pkg-desc:h]jKhhhihjj¬hl}rµ(hq]hp]hn]ho]ht]jNUpkg-descr¶uhvM¨hwhhx]ubeubeubhdh^)r·}r¸(h\Uh]hfhhhihjhkhl}r¹(hn]ho]hp]hq]rºUcustom-setup-scriptsr»aht]r¼hLauhvM¡ hwhhx]r½(hz)r¾}r¿(h\XCustom setup scriptsrÀh]j·hhhihjh~hl}rÁ(hn]ho]hp]hq]ht]uhvM¡ hwhhx]rÂhXCustom setup scriptsrÃ…rÄ}rÅ(h\jÀhhNhvNhwhh]j¾ubaubh…)rÆ}rÇ(h\X+Since Cabal 1.24, custom ``Setup.hs`` are required to accurately track their dependencies by declaring them in the ``.cabal`` file rather than rely on dependencies being implicitly in scope. Please refer `this article `__ for more details.h]j·hhhihjh‰hl}rÈ(hn]ho]hp]hq]ht]uhvM£ hwhhx]rÉ(hXSince Cabal 1.24, custom rÊ…rË}rÌ(h\XSince Cabal 1.24, custom hhNhvNhwhh]jÆubhç)rÍ}rÎ(h\X ``Setup.hs``hl}rÏ(hn]ho]hp]hq]ht]uh]jÆhx]rÐhXSetup.hsrÑ…rÒ}rÓ(h\XSetup.hsh]jÍubahjhïubhXN are required to accurately track their dependencies by declaring them in the rÔ…rÕ}rÖ(h\XN are required to accurately track their dependencies by declaring them in the hhNhvNhwhh]jÆubhç)r×}rØ(h\X ``.cabal``hl}rÙ(hn]ho]hp]hq]ht]uh]jÆhx]rÚhX.cabalrÛ…rÜ}rÝ(h\X.cabalh]j×ubahjhïubhXP file rather than rely on dependencies being implicitly in scope. Please refer rÞ…rß}rà(h\XP file rather than rely on dependencies being implicitly in scope. Please refer hhNhvNhwhh]jÆubjH)rá}râ(h\XL`this article `__hl}rã(UnameX this articlej‡X9https://www.well-typed.com/blog/2015/07/cabal-setup-deps/hq]hp]hn]ho]ht]uh]jÆhx]rähX this articlerå…ræ}rç(h\X this articleh]jáubahjjLubhX for more details.rè…ré}rê(h\X for more details.hhNhvNhwhh]jÆubeubh…)rë}rì(h\XAs of Cabal library version 3.0, ``defaultMain*`` variants implement support for response files. Custom ``Setup.hs`` files that do not use one of these main functions are required to implement their own support, such as by using ``GHC.ResponseFile.getArgsWithResponseFiles``.h]j·hhhihjh‰hl}rí(hn]ho]hp]hq]ht]uhvM© hwhhx]rî(hX!As of Cabal library version 3.0, rï…rð}rñ(h\X!As of Cabal library version 3.0, hhNhvNhwhh]jëubhç)rò}ró(h\X``defaultMain*``hl}rô(hn]ho]hp]hq]ht]uh]jëhx]rõhX defaultMain*rö…r÷}rø(h\X defaultMain*h]jòubahjhïubhX7 variants implement support for response files. Custom rù…rú}rû(h\X7 variants implement support for response files. Custom hhNhvNhwhh]jëubhç)rü}rý(h\X ``Setup.hs``hl}rþ(hn]ho]hp]hq]ht]uh]jëhx]rÿhXSetup.hsr…r}r(h\XSetup.hsh]jüubahjhïubhXq files that do not use one of these main functions are required to implement their own support, such as by using r…r}r(h\Xq files that do not use one of these main functions are required to implement their own support, such as by using hhNhvNhwhh]jëubhç)r}r(h\X-``GHC.ResponseFile.getArgsWithResponseFiles``hl}r(hn]ho]hp]hq]ht]uh]jëhx]r hX)GHC.ResponseFile.getArgsWithResponseFilesr …r }r (h\X)GHC.ResponseFile.getArgsWithResponseFilesh]jubahjhïubhX.…r }r(h\X.hhNhvNhwhh]jëubeubh…)r}r(h\X†Declaring a ``custom-setup`` stanza also enables the generation of ``MIN_VERSION_package_(A,B,C)`` CPP macros for the Setup component.h]j·hhhihjh‰hl}r(hn]ho]hp]hq]ht]uhvM® hwhhx]r(hX Declaring a r…r}r(h\X Declaring a hhNhvNhwhh]jubhç)r}r(h\X``custom-setup``hl}r(hn]ho]hp]hq]ht]uh]jhx]rhX custom-setupr…r}r(h\X custom-setuph]jubahjhïubhX' stanza also enables the generation of r…r}r(h\X' stanza also enables the generation of hhNhvNhwhh]jubhç)r }r!(h\X``MIN_VERSION_package_(A,B,C)``hl}r"(hn]ho]hp]hq]ht]uh]jhx]r#hXMIN_VERSION_package_(A,B,C)r$…r%}r&(h\XMIN_VERSION_package_(A,B,C)h]j ubahjhïubhX$ CPP macros for the Setup component.r'…r(}r)(h\X$ CPP macros for the Setup component.hhNhvNhwhh]jubeubcsphinx.addnodes index r*)r+}r,(h\Uh]j·hhhihjUindexr-hl}r.(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubcsphinx.addnodes desc r/)r0}r1(h\Uh]j·hhhihjUdescr2hl}r3(Unoindexr4‰Udomainr5Xcabalhq]hp]hn]ho]ht]Uobjtyper6X pkg-sectionr7Udesctyper8j7uhvNhwhhx]r9(csphinx.addnodes desc_signature r:)r;}r<(h\X custom-setupr=h]j0hhhihjUdesc_signaturer>hl}r?(hq]r@X%pkg-section-custom-setup-custom-setuprAahp]hn]ho]ht]UfirstrB‰uhvNhwhhx]rC(j*)rD}rE(h\Uh]j;hhhihjj-hl}rF(hq]hp]hn]ho]ht]Uentries]rG(UpairrHX0custom-setup:custom-setup; package.cabal sectionjAUNtrIauhvNhwhhx]ubcsphinx.addnodes desc_name rJ)rK}rL(h\j=h]j;hhhihjU desc_namerMhl}rN(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rOhX custom-setuprP…rQ}rR(h\UhhNhvNhwhh]jKubaubcsphinx.addnodes desc_addname rS)rT}rU(h\U h]j;hhhihjU desc_addnamerVhl}rW(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rXhX …rY}rZ(h\UhhNhvNhwhh]jTubaubeubcsphinx.addnodes desc_content r[)r\}r](h\Uh]j0hhhihjU desc_contentr^hl}r_(hn]ho]hp]hq]ht]uhvNhwhhx]r`(cdocutils.nodes field_list ra)rb}rc(h\Uh]j\hhhihjU field_listrdhl}re(hn]ho]hp]hq]ht]uhvNhwhhx]rfcdocutils.nodes field rg)rh}ri(h\Uh]jbhhhihjUfieldrjhl}rk(hn]ho]hp]hq]ht]uhvNhwhhx]rl(cdocutils.nodes field_name rm)rn}ro(h\USincerph]jhhhhihjU field_namerqhl}rr(hn]ho]hp]hq]ht]uhvKhx]rshXSincert…ru}rv(h\Uh]jnubaubcdocutils.nodes field_body rw)rx}ry(h\U Cabal 1.24rzhl}r{(hn]ho]hp]hq]ht]uh]jhhx]r|h…)r}}r~(h\jzhl}r(hn]ho]hp]hq]ht]uh]jxhx]r€hX Cabal 1.24r…r‚}rƒ(h\Uh]j}ubahjh‰ubahjU field_bodyr„ubeubaubh…)r…}r†(h\XThe optional :pkg-section:`custom-setup` stanza contains information needed for the compilation of custom ``Setup.hs`` scripts,h]j\hhhihjh‰hl}r‡(hn]ho]hp]hq]ht]uhvMµ hwhhx]rˆ(hX The optional r‰…rŠ}r‹(h\X The optional hhNhvNhwhh]j…ubjt)rŒ}r(h\X:pkg-section:`custom-setup`h]j…hhhihjjwhl}rŽ(UreftypeX pkg-sectionjyˆjzX custom-setuprU refdomainXcabalrhq]hp]U refexplicit‰hn]ho]ht]j}j~uhvMµ hx]r‘hç)r’}r“(h\jhl}r”(hn]ho]r•(j…jXcabal-pkg-sectionr–ehp]hq]ht]uh]jŒhx]r—hX custom-setupr˜…r™}rš(h\Uh]j’ubahjhïubaubhXB stanza contains information needed for the compilation of custom r›…rœ}r(h\XB stanza contains information needed for the compilation of custom hhNhvNhwhh]j…ubhç)rž}rŸ(h\X ``Setup.hs``hl}r (hn]ho]hp]hq]ht]uh]j…hx]r¡hXSetup.hsr¢…r£}r¤(h\XSetup.hsh]jžubahjhïubhX scripts,r¥…r¦}r§(h\X scripts,hhNhvNhwhh]j…ubeubeubeubjÕ)r¨}r©(h\XUcustom-setup setup-depends: base >= 4.5 && < 4.11, Cabal >= 1.14 && < 1.25h]j·hhhihjjØhl}rª(jÚjÛhq]hp]hn]ho]ht]uhvMº hwhhx]r«hXUcustom-setup setup-depends: base >= 4.5 && < 4.11, Cabal >= 1.14 && < 1.25r¬…r­}r®(h\Uh]j¨ubaubj*)r¯}r°(h\Uh]j·hhhihjj-hl}r±(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r²}r³(h\Uh]j·hhhihjj2hl}r´(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrµj8jµuhvNhwhhx]r¶(j:)r·}r¸(h\Xsetup-depends: package listh]j²hhhihjj>hl}r¹(hq]rºX$pkg-field-custom-setup-setup-dependsr»ahp]hn]ho]ht]jB‰uhvNhwhhx]r¼(j*)r½}r¾(h\Uh]j·hhhihjj-hl}r¿(hq]hp]hn]ho]ht]Uentries]rÀ(jHX/custom-setup:setup-depends; package.cabal fieldj»UNtrÁauhvNhwhhx]ubjJ)rÂ}rÃ(h\X setup-dependsrÄh]j·hhhihjjMhl}rÅ(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rÆhX setup-dependsrÇ…rÈ}rÉ(h\UhhNhvNhwhh]jÂubaubjS)rÊ}rË(h\U: rÌh]j·hhhihjjVhl}rÍ(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rÎhX: rÏ…rÐ}rÑ(h\UhhNhvNhwhh]jÊubaubcsphinx.addnodes desc_annotation rÒ)rÓ}rÔ(h\X package listh]j·hhhihjUdesc_annotationrÕhl}rÖ(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r×hX package listrØ…rÙ}rÚ(h\UhhNhvNhwhh]jÓubaubeubj[)rÛ}rÜ(h\Uh]j²hhhihjj^hl}rÝ(hn]ho]hp]hq]ht]uhvNhwhhx]rÞ(ja)rß}rà(h\Uh]jÛhhhihjjdhl}rá(hn]ho]hp]hq]ht]uhvNhwhhx]râjg)rã}rä(h\Uh]jßhhhihjjjhl}rå(hn]ho]hp]hq]ht]uhvNhwhhx]ræ(jm)rç}rè(h\jph]jãhhhihjjqhl}ré(hn]ho]hp]hq]ht]uhvKhx]rêhXSincerë…rì}rí(h\Uh]jçubaubjw)rî}rï(h\U Cabal 1.24rðhl}rñ(hn]ho]hp]hq]ht]uh]jãhx]ròh…)ró}rô(h\jðhl}rõ(hn]ho]hp]hq]ht]uh]jîhx]röhX Cabal 1.24r÷…rø}rù(h\Uh]jóubahjh‰ubahjj„ubeubaubh…)rú}rû(h\X‘The dependencies needed to compile ``Setup.hs``. See the :pkg-field:`build-depends` field for a description of the syntax expected by this field.h]jÛhhhihjh‰hl}rü(hn]ho]hp]hq]ht]uhvM hwhhx]rý(hX#The dependencies needed to compile rþ…rÿ}r(h\X#The dependencies needed to compile hhNhvNhwhh]júubhç)r}r(h\X ``Setup.hs``hl}r(hn]ho]hp]hq]ht]uh]júhx]rhXSetup.hsr…r}r(h\XSetup.hsh]jubahjhïubhX . See the r…r }r (h\X . See the hhNhvNhwhh]júubjt)r }r (h\X:pkg-field:`build-depends`h]júhhhihjjwhl}r (UreftypeX pkg-fieldjyˆjzX build-dependsrU refdomainXcabalrhq]hp]U refexplicit‰hn]ho]ht]j}j~j”j=uhvM hx]rhç)r}r(h\jhl}r(hn]ho]r(j…jXcabal-pkg-fieldrehp]hq]ht]uh]j hx]rhX build-dependsr…r}r(h\Uh]jubahjhïubaubhX> field for a description of the syntax expected by this field.r…r}r(h\X> field for a description of the syntax expected by this field.hhNhvNhwhh]júubeubeubeubh^)r}r(h\Uh]j·hhhihjhkhl}r(hn]ho]hp]hq]r U'backward-compatibility-and-custom-setupr!aht]r"hauhvMÇ hwhhx]r#(hz)r$}r%(h\X+Backward compatibility and ``custom-setup``r&h]jhhhihjh~hl}r'(hn]ho]hp]hq]ht]uhvMÇ hwhhx]r((hXBackward compatibility and r)…r*}r+(h\XBackward compatibility and r,hhNhvNhwhh]j$ubhç)r-}r.(h\X``custom-setup``r/hl}r0(hn]ho]hp]hq]ht]uh]j$hx]r1hX custom-setupr2…r3}r4(h\X custom-setupr5h]j-ubahjhïubeubh…)r6}r7(h\X¨Versions prior to Cabal 1.24 don't recognise ``custom-setup`` stanzas, and will behave agnostic to them (except for warning about an unknown section). Consequently, versions prior to Cabal 1.24 can't ensure the declared dependencies ``setup-depends`` are in scope, and instead whatever is registered in the current package database environment will become eligible (and resolved by the compiler) for the ``Setup.hs`` module.h]jhhhihjh‰hl}r8(hn]ho]hp]hq]ht]uhvMÉ hwhhx]r9(hX/Versions prior to Cabal 1.24 don’t recognise r:…r;}r<(h\X-Versions prior to Cabal 1.24 don't recognise hhNhvNhwhh]j6ubhç)r=}r>(h\X``custom-setup``hl}r?(hn]ho]hp]hq]ht]uh]j6hx]r@hX custom-setuprA…rB}rC(h\X custom-setuph]j=ubahjhïubhX® stanzas, and will behave agnostic to them (except for warning about an unknown section). Consequently, versions prior to Cabal 1.24 can’t ensure the declared dependencies rD…rE}rF(h\X¬ stanzas, and will behave agnostic to them (except for warning about an unknown section). Consequently, versions prior to Cabal 1.24 can't ensure the declared dependencies hhNhvNhwhh]j6ubhç)rG}rH(h\X``setup-depends``hl}rI(hn]ho]hp]hq]ht]uh]j6hx]rJhX setup-dependsrK…rL}rM(h\X setup-dependsh]jGubahjhïubhXš are in scope, and instead whatever is registered in the current package database environment will become eligible (and resolved by the compiler) for the rN…rO}rP(h\Xš are in scope, and instead whatever is registered in the current package database environment will become eligible (and resolved by the compiler) for the hhNhvNhwhh]j6ubhç)rQ}rR(h\X ``Setup.hs``hl}rS(hn]ho]hp]hq]ht]uh]j6hx]rThXSetup.hsrU…rV}rW(h\XSetup.hsh]jQubahjhïubhX module.rX…rY}rZ(h\X module.hhNhvNhwhh]j6ubeubh…)r[}r\(h\XƒThe availability of the ``MIN_VERSION_package_(A,B,C)`` CPP macros inside ``Setup.hs`` scripts depends on the condition that eitherh]jhhhihjh‰hl}r](hn]ho]hp]hq]ht]uhvMÑ hwhhx]r^(hXThe availability of the r_…r`}ra(h\XThe availability of the hhNhvNhwhh]j[ubhç)rb}rc(h\X``MIN_VERSION_package_(A,B,C)``hl}rd(hn]ho]hp]hq]ht]uh]j[hx]rehXMIN_VERSION_package_(A,B,C)rf…rg}rh(h\XMIN_VERSION_package_(A,B,C)h]jbubahjhïubhX CPP macros inside ri…rj}rk(h\X CPP macros inside hhNhvNhwhh]j[ubhç)rl}rm(h\X ``Setup.hs``hl}rn(hn]ho]hp]hq]ht]uh]j[hx]rohXSetup.hsrp…rq}rr(h\XSetup.hsh]jlubahjhïubhX- scripts depends on the condition that eitherrs…rt}ru(h\X- scripts depends on the condition that eitherhhNhvNhwhh]j[ubeubh)rv}rw(h\Uh]jhhhihjh’hl}rx(h”X-hq]hp]hn]ho]ht]uhvMÕ hwhhx]ry(h–)rz}r{(h\X£a ``custom-setup`` section has been declared (or ``cabal v2-build`` is being used which injects an implicit hard-coded ``custom-setup`` stanza if it's missing), orh]jvhhhihjh™hl}r|(hn]ho]hp]hq]ht]uhvNhwhhx]r}h…)r~}r(h\X£a ``custom-setup`` section has been declared (or ``cabal v2-build`` is being used which injects an implicit hard-coded ``custom-setup`` stanza if it's missing), orh]jzhhhihjh‰hl}r€(hn]ho]hp]hq]ht]uhvMÕ hx]r(hXa r‚…rƒ}r„(h\Xa h]j~ubhç)r…}r†(h\X``custom-setup``hl}r‡(hn]ho]hp]hq]ht]uh]j~hx]rˆhX custom-setupr‰…rŠ}r‹(h\X custom-setuph]j…ubahjhïubhX section has been declared (or rŒ…r}rŽ(h\X section has been declared (or h]j~ubhç)r}r(h\X``cabal v2-build``hl}r‘(hn]ho]hp]hq]ht]uh]j~hx]r’hXcabal v2-buildr“…r”}r•(h\Xcabal v2-buildh]jubahjhïubhX4 is being used which injects an implicit hard-coded r–…r—}r˜(h\X4 is being used which injects an implicit hard-coded h]j~ubhç)r™}rš(h\X``custom-setup``hl}r›(hn]ho]hp]hq]ht]uh]j~hx]rœhX custom-setupr…rž}rŸ(h\X custom-setuph]j™ubahjhïubhX stanza if it’s missing), orr …r¡}r¢(h\X stanza if it's missing), orh]j~ubeubaubh–)r£}r¤(h\XMGHC 8.0 or later is used (which natively injects package version CPP macros) h]jvhhhihjh™hl}r¥(hn]ho]hp]hq]ht]uhvNhwhhx]r¦h…)r§}r¨(h\XLGHC 8.0 or later is used (which natively injects package version CPP macros)r©h]j£hhhihjh‰hl}rª(hn]ho]hp]hq]ht]uhvM× hx]r«hXLGHC 8.0 or later is used (which natively injects package version CPP macros)r¬…r­}r®(h\j©h]j§ubaubaubeubh…)r¯}r°(h\XžConsequently, if you need to write backward compatible ``Setup.hs`` scripts using CPP, you should declare a ``custom-setup`` stanza and use the pattern below:h]jhhhihjh‰hl}r±(hn]ho]hp]hq]ht]uhvMÙ hwhhx]r²(hX7Consequently, if you need to write backward compatible r³…r´}rµ(h\X7Consequently, if you need to write backward compatible hhNhvNhwhh]j¯ubhç)r¶}r·(h\X ``Setup.hs``hl}r¸(hn]ho]hp]hq]ht]uh]j¯hx]r¹hXSetup.hsrº…r»}r¼(h\XSetup.hsh]j¶ubahjhïubhX) scripts using CPP, you should declare a r½…r¾}r¿(h\X) scripts using CPP, you should declare a hhNhvNhwhh]j¯ubhç)rÀ}rÁ(h\X``custom-setup``hl}rÂ(hn]ho]hp]hq]ht]uh]j¯hx]rÃhX custom-setuprÄ…rÅ}rÆ(h\X custom-setuph]jÀubahjhïubhX" stanza and use the pattern below:rÇ…rÈ}rÉ(h\X" stanza and use the pattern below:hhNhvNhwhh]j¯ubeubjÕ)rÊ}rË(h\X¬{-# LANGUAGE CPP #-} import Distribution.Simple #if defined(MIN_VERSION_Cabal) -- version macros are available and can be used as usual # if MIN_VERSION_Cabal(a,b,c) -- code specific to lib:Cabal >= a.b.c # else -- code specific to lib:Cabal < a.b.c # endif #else # warning Enabling heuristic fall-back. Please upgrade cabal-install to 1.24 or later if Setup.hs fails to compile. -- package version macros not available; except for exotic environments, -- you can heuristically assume that lib:Cabal's version is correlated -- with __GLASGOW_HASKELL__, and specifically since we can assume that -- GHC < 8.0, we can assume that lib:Cabal is version 1.22 or older. #endif main = ...h]jhhhihjjØhl}rÌ(j‰jXhaskelljÚjÛhq]hp]hn]j}ho]ht]uhvMÝ hwhhx]rÍhX¬{-# LANGUAGE CPP #-} import Distribution.Simple #if defined(MIN_VERSION_Cabal) -- version macros are available and can be used as usual # if MIN_VERSION_Cabal(a,b,c) -- code specific to lib:Cabal >= a.b.c # else -- code specific to lib:Cabal < a.b.c # endif #else # warning Enabling heuristic fall-back. Please upgrade cabal-install to 1.24 or later if Setup.hs fails to compile. -- package version macros not available; except for exotic environments, -- you can heuristically assume that lib:Cabal's version is correlated -- with __GLASGOW_HASKELL__, and specifically since we can assume that -- GHC < 8.0, we can assume that lib:Cabal is version 1.22 or older. #endif main = ...rÎ…rÏ}rÐ(h\Uh]jÊubaubh…)rÑ}rÒ(h\X…The simplified (heuristic) CPP pattern shown below is useful if all you need is to distinguish ``Cabal < 2.0`` from ``Cabal >= 2.0``.h]jhhhihjh‰hl}rÓ(hn]ho]hp]hq]ht]uhvMô hwhhx]rÔ(hX_The simplified (heuristic) CPP pattern shown below is useful if all you need is to distinguish rÕ…rÖ}r×(h\X_The simplified (heuristic) CPP pattern shown below is useful if all you need is to distinguish hhNhvNhwhh]jÑubhç)rØ}rÙ(h\X``Cabal < 2.0``hl}rÚ(hn]ho]hp]hq]ht]uh]jÑhx]rÛhX Cabal < 2.0rÜ…rÝ}rÞ(h\X Cabal < 2.0h]jØubahjhïubhX from rß…rà}rá(h\X from hhNhvNhwhh]jÑubhç)râ}rã(h\X``Cabal >= 2.0``hl}rä(hn]ho]hp]hq]ht]uh]jÑhx]råhX Cabal >= 2.0ræ…rç}rè(h\X Cabal >= 2.0h]jâubahjhïubhX.…ré}rê(h\X.hhNhvNhwhh]jÑubeubjÕ)rë}rì(h\Xë{-# LANGUAGE CPP #-} import Distribution.Simple #if !defined(MIN_VERSION_Cabal) # define MIN_VERSION_Cabal(a,b,c) 0 #endif #if MIN_VERSION_Cabal(2,0,0) -- code for lib:Cabal >= 2.0 #else -- code for lib:Cabal < 2.0 #endif main = ...h]jhhhihjjØhl}rí(j‰jXhaskelljÚjÛhq]hp]hn]j}ho]ht]uhvM÷ hwhhx]rîhXë{-# LANGUAGE CPP #-} import Distribution.Simple #if !defined(MIN_VERSION_Cabal) # define MIN_VERSION_Cabal(a,b,c) 0 #endif #if MIN_VERSION_Cabal(2,0,0) -- code for lib:Cabal >= 2.0 #else -- code for lib:Cabal < 2.0 #endif main = ...rï…rð}rñ(h\Uh]jëubaubeubeubh^)rò}ró(h\Uh]hfhhhihjhkhl}rô(hn]ho]hp]hq]rõU"autogenerated-modules-and-includesröaht]r÷h:auhvM hwhhx]rø(hz)rù}rú(h\X"Autogenerated modules and includesrûh]jòhhhihjh~hl}rü(hn]ho]hp]hq]ht]uhvM hwhhx]rýhX"Autogenerated modules and includesrþ…rÿ}r(h\jûhhNhvNhwhh]jùubaubh…)r}r(h\XzModules that are built automatically at setup, created with a custom setup script, must appear on :pkg-field:`other-modules` for the library, executable, test-suite or benchmark stanzas or also on :pkg-field:`library:exposed-modules` for libraries to be used, but are not really on the package when distributed. This makes commands like sdist fail because the file is not found.h]jòhhhihjh‰hl}r(hn]ho]hp]hq]ht]uhvM hwhhx]r(hXbModules that are built automatically at setup, created with a custom setup script, must appear on r…r}r(h\XbModules that are built automatically at setup, created with a custom setup script, must appear on hhNhvNhwhh]jubjt)r}r (h\X:pkg-field:`other-modules`h]jhhhihjjwhl}r (UreftypeX pkg-fieldjyˆjzX other-modulesr U refdomainXcabalr hq]hp]U refexplicit‰hn]ho]ht]j}j~j”j=uhvM hx]r hç)r}r(h\j hl}r(hn]ho]r(j…j Xcabal-pkg-fieldrehp]hq]ht]uh]jhx]rhX other-modulesr…r}r(h\Uh]jubahjhïubaubhXI for the library, executable, test-suite or benchmark stanzas or also on r…r}r(h\XI for the library, executable, test-suite or benchmark stanzas or also on hhNhvNhwhh]jubjt)r}r(h\X$:pkg-field:`library:exposed-modules`h]jhhhihjjwhl}r(UreftypeX pkg-fieldjyˆjzXexposed-modulesU refdomainXcabalrhq]hp]U refexplicit‰hn]ho]ht]j}j~j”XlibraryuhvM hx]rhç)r}r (h\Xlibrary:exposed-moduleshl}r!(hn]ho]r"(j…jXcabal-pkg-fieldr#ehp]hq]ht]uh]jhx]r$hXlibrary:exposed-modulesr%…r&}r'(h\Uh]jubahjhïubaubhX‘ for libraries to be used, but are not really on the package when distributed. This makes commands like sdist fail because the file is not found.r(…r)}r*(h\X‘ for libraries to be used, but are not really on the package when distributed. This makes commands like sdist fail because the file is not found.hhNhvNhwhh]jubeubh…)r+}r,(h\XThese special modules must appear again on the :pkg-field:`autogen-modules` field of the stanza that is using it, besides :pkg-field:`other-modules` or :pkg-field:`library:exposed-modules`. With this there is no need to create complex build hooks for this poweruser case.h]jòhhhihjh‰hl}r-(hn]ho]hp]hq]ht]uhvM hwhhx]r.(hX/These special modules must appear again on the r/…r0}r1(h\X/These special modules must appear again on the hhNhvNhwhh]j+ubjt)r2}r3(h\X:pkg-field:`autogen-modules`h]j+hhhihjjwhl}r4(UreftypeX pkg-fieldjyˆjzXautogen-modulesr5U refdomainXcabalr6hq]hp]U refexplicit‰hn]ho]ht]j}j~j”j=uhvM hx]r7hç)r8}r9(h\j5hl}r:(hn]ho]r;(j…j6Xcabal-pkg-fieldr<ehp]hq]ht]uh]j2hx]r=hXautogen-modulesr>…r?}r@(h\Uh]j8ubahjhïubaubhX/ field of the stanza that is using it, besides rA…rB}rC(h\X/ field of the stanza that is using it, besides hhNhvNhwhh]j+ubjt)rD}rE(h\X:pkg-field:`other-modules`h]j+hhhihjjwhl}rF(UreftypeX pkg-fieldjyˆjzX other-modulesrGU refdomainXcabalrHhq]hp]U refexplicit‰hn]ho]ht]j}j~j”j=uhvM hx]rIhç)rJ}rK(h\jGhl}rL(hn]ho]rM(j…jHXcabal-pkg-fieldrNehp]hq]ht]uh]jDhx]rOhX other-modulesrP…rQ}rR(h\Uh]jJubahjhïubaubhX or rS…rT}rU(h\X or hhNhvNhwhh]j+ubjt)rV}rW(h\X$:pkg-field:`library:exposed-modules`h]j+hhhihjjwhl}rX(UreftypeX pkg-fieldjyˆjzXexposed-modulesU refdomainXcabalrYhq]hp]U refexplicit‰hn]ho]ht]j}j~j”XlibraryuhvM hx]rZhç)r[}r\(h\Xlibrary:exposed-moduleshl}r](hn]ho]r^(j…jYXcabal-pkg-fieldr_ehp]hq]ht]uh]jVhx]r`hXlibrary:exposed-modulesra…rb}rc(h\Uh]j[ubahjhïubaubhXS. With this there is no need to create complex build hooks for this poweruser case.rd…re}rf(h\XS. With this there is no need to create complex build hooks for this poweruser case.hhNhvNhwhh]j+ubeubj*)rg}rh(h\Uh]jòhhNhjj-hl}ri(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rj}rk(h\Uh]jòhhNhjj2hl}rl(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrmj8jmuhvNhwhhx]rn(j:)ro}rp(h\Xautogen-modules: module listh]jjhhhihjj>hl}rq(hq]rrX&pkg-field-custom-setup-autogen-modulesrsahp]hn]ho]ht]jB‰uhvNhwhhx]rt(j*)ru}rv(h\Uh]johhhihjj-hl}rw(hq]hp]hn]ho]ht]Uentries]rx(jHX1custom-setup:autogen-modules; package.cabal fieldjsUNtryauhvNhwhhx]ubjJ)rz}r{(h\Xautogen-modulesr|h]johhhihjjMhl}r}(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r~hXautogen-modulesr…r€}r(h\UhhNhvNhwhh]jzubaubjS)r‚}rƒ(h\jÌh]johhhihjjVhl}r„(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r…hX: r†…r‡}rˆ(h\UhhNhvNhwhh]j‚ubaubjÒ)r‰}rŠ(h\X module listh]johhhihjjÕhl}r‹(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rŒhX module listr…rŽ}r(h\UhhNhvNhwhh]j‰ubaubeubj[)r}r‘(h\Uh]jjhhhihjj^hl}r’(hn]ho]hp]hq]ht]uhvNhwhhx]r“(ja)r”}r•(h\Uh]jhhNhjjdhl}r–(hn]ho]hp]hq]ht]uhvNhwhhx]r—jg)r˜}r™(h\Uh]j”hhNhjjjhl}rš(hn]ho]hp]hq]ht]uhvNhwhhx]r›(jm)rœ}r(h\jph]j˜hhhihjjqhl}rž(hn]ho]hp]hq]ht]uhvKhx]rŸhXSincer …r¡}r¢(h\Uh]jœubaubjw)r£}r¤(h\U Cabal 2.0r¥hl}r¦(hn]ho]hp]hq]ht]uh]j˜hx]r§h…)r¨}r©(h\j¥hl}rª(hn]ho]hp]hq]ht]uh]j£hx]r«hX Cabal 2.0r¬…r­}r®(h\Uh]j¨ubahjh‰ubahjj„ubeubaubj©)r¯}r°(h\Uh]jhhhihjj¬hl}r±(hq]hp]hn]ho]ht]jNUindex-0r²uhvNhwhhx]ubcsphinx.ext.todo todo_node r³)r´}rµ(h\Xdocument autogen-modules fieldr¶h]jhhhiUexpect_referenced_by_namer·}hjU todo_noder¸hl}r¹(U targetrefrºXdeveloping-packages:index-0r»hq]r¼j²ahp]hn]ho]r½Uadmonition-todor¾aht]uhvM hwhUexpect_referenced_by_idr¿}rÀj²j¯shx]rÁ(hz)rÂ}rÃ(h\XTodorÄh]j´hhhihjh~hl}rÅ(hn]ho]hp]hq]ht]uhvM hx]rÆhXTodorÇ…rÈ}rÉ(h\Uh]jÂubaubh…)rÊ}rË(h\j¶h]j´hhhihjh‰hl}rÌ(hn]ho]hp]hq]ht]uhvM hx]rÍhXdocument autogen-modules fieldrÎ…rÏ}rÐ(h\j¶h]jÊubaubeubeubeubh…)rÑ}rÒ(h\XdRight now :pkg-field:`executable:main-is` modules are not supported on :pkg-field:`autogen-modules`.h]jòhhhihjh‰hl}rÓ(hn]ho]hp]hq]ht]uhvM hwhhx]rÔ(hX Right now rÕ…rÖ}r×(h\X Right now hhNhvNhwhh]jÑubjt)rØ}rÙ(h\X:pkg-field:`executable:main-is`h]jÑhhhihjjwhl}rÚ(UreftypeX pkg-fieldjyˆjzXmain-isU refdomainXcabalrÛhq]hp]U refexplicit‰hn]ho]ht]j}j~j”X executableuhvM hx]rÜhç)rÝ}rÞ(h\Xexecutable:main-ishl}rß(hn]ho]rà(j…jÛXcabal-pkg-fieldráehp]hq]ht]uh]jØhx]râhXexecutable:main-isrã…rä}rå(h\Uh]jÝubahjhïubaubhX modules are not supported on ræ…rç}rè(h\X modules are not supported on hhNhvNhwhh]jÑubjt)ré}rê(h\X:pkg-field:`autogen-modules`h]jÑhhhihjjwhl}rë(UreftypeX pkg-fieldjyˆjzXautogen-modulesrìU refdomainXcabalríhq]hp]U refexplicit‰hn]ho]ht]j}j~j”j=uhvM hx]rîhç)rï}rð(h\jìhl}rñ(hn]ho]rò(j…jíXcabal-pkg-fieldróehp]hq]ht]uh]jéhx]rôhXautogen-modulesrõ…rö}r÷(h\Uh]jïubahjhïubaubhX.…rø}rù(h\X.hhNhvNhwhh]jÑubeubjÕ)rú}rû(h\X¨Library default-language: Haskell2010 build-depends: base exposed-modules: MyLibrary MyLibHelperModule other-modules: MyLibModule autogen-modules: MyLibHelperModule Executable Exe default-language: Haskell2010 main-is: Dummy.hs build-depends: base other-modules: MyExeModule MyExeHelperModule autogen-modules: MyExeHelperModuleh]jòhhhihjjØhl}rü(jÚjÛhq]hp]hn]ho]ht]uhvM# hwhhx]rýhX¨Library default-language: Haskell2010 build-depends: base exposed-modules: MyLibrary MyLibHelperModule other-modules: MyLibModule autogen-modules: MyLibHelperModule Executable Exe default-language: Haskell2010 main-is: Dummy.hs build-depends: base other-modules: MyExeModule MyExeHelperModule autogen-modules: MyExeHelperModulerþ…rÿ}r(h\Uh]júubaubj*)r}r(h\Uh]jòhhhihjj-hl}r(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r}r(h\Uh]jòhhhihjj2hl}r(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrj8juhvNhwhhx]r(j:)r }r (h\Xautogen-includes: filename listh]jhhhihjj>hl}r (hq]r X'pkg-field-custom-setup-autogen-includesr ahp]hn]ho]ht]jB‰uhvNhwhhx]r(j*)r}r(h\Uh]j hhhihjj-hl}r(hq]hp]hn]ho]ht]Uentries]r(jHX2custom-setup:autogen-includes; package.cabal fieldj UNtrauhvNhwhhx]ubjJ)r}r(h\Xautogen-includesrh]j hhhihjjMhl}r(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rhXautogen-includesr…r}r(h\UhhNhvNhwhh]jubaubjS)r}r(h\jÌh]j hhhihjjVhl}r(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rhX: r …r!}r"(h\UhhNhvNhwhh]jubaubjÒ)r#}r$(h\X filename listh]j hhhihjjÕhl}r%(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r&hX filename listr'…r(}r)(h\UhhNhvNhwhh]j#ubaubeubj[)r*}r+(h\Uh]jhhhihjj^hl}r,(hn]ho]hp]hq]ht]uhvNhwhhx]r-(ja)r.}r/(h\Uh]j*hhhihjjdhl}r0(hn]ho]hp]hq]ht]uhvNhwhhx]r1jg)r2}r3(h\Uh]j.hhhihjjjhl}r4(hn]ho]hp]hq]ht]uhvNhwhhx]r5(jm)r6}r7(h\jph]j2hhhihjjqhl}r8(hn]ho]hp]hq]ht]uhvKhx]r9hXSincer:…r;}r<(h\Uh]j6ubaubjw)r=}r>(h\U Cabal 3.0r?hl}r@(hn]ho]hp]hq]ht]uh]j2hx]rAh…)rB}rC(h\j?hl}rD(hn]ho]hp]hq]ht]uh]j=hx]rEhX Cabal 3.0rF…rG}rH(h\Uh]jBubahjh‰ubahjj„ubeubaubh…)rI}rJ(h\X¤A list of header files from this package which are autogenerated (e.g. by a ``configure`` script). Autogenerated header files are not packaged by ``sdist`` command.h]j*hhhihjh‰hl}rK(hn]ho]hp]hq]ht]uhvM; hwhhx]rL(hXLA list of header files from this package which are autogenerated (e.g. by a rM…rN}rO(h\XLA list of header files from this package which are autogenerated (e.g. by a hhNhvNhwhh]jIubhç)rP}rQ(h\X ``configure``hl}rR(hn]ho]hp]hq]ht]uh]jIhx]rShX configurerT…rU}rV(h\X configureh]jPubahjhïubhX9 script). Autogenerated header files are not packaged by rW…rX}rY(h\X9 script). Autogenerated header files are not packaged by hhNhvNhwhh]jIubhç)rZ}r[(h\X ``sdist``hl}r\(hn]ho]hp]hq]ht]uh]jIhx]r]hXsdistr^…r_}r`(h\Xsdisth]jZubahjhïubhX command.ra…rb}rc(h\X command.hhNhvNhwhh]jIubeubeubeubeubh^)rd}re(h\Uh]hfhhhihjhkhl}rf(hn]ho]hp]hq]rgU&accessing-data-files-from-package-coderhaht]rihauhvM@ hwhhx]rj(hz)rk}rl(h\X&Accessing data files from package codermh]jdhhhihjh~hl}rn(hn]ho]hp]hq]ht]uhvM@ hwhhx]rohX&Accessing data files from package coderp…rq}rr(h\jmhhNhvNhwhh]jkubaubh…)rs}rt(h\XThe placement on the target system of files listed in the :pkg-field:`data-files` field varies between systems, and in some cases one can even move packages around after installation (see `prefix independence `__). To enable packages to find these files in a portable way, Cabal generates a module called :file:`Paths_{pkgname}` (with any hyphens in *pkgname* replaced by underscores) during building, so that it may be imported by modules of the package. This module defines a functionh]jdhhhihjh‰hl}ru(hn]ho]hp]hq]ht]uhvMB hwhhx]rv(hX:The placement on the target system of files listed in the rw…rx}ry(h\X:The placement on the target system of files listed in the hhNhvNhwhh]jsubjt)rz}r{(h\X:pkg-field:`data-files`h]jshhhihjjwhl}r|(UreftypeX pkg-fieldjyˆjzX data-filesr}U refdomainXcabalr~hq]hp]U refexplicit‰hn]ho]ht]j}j~j”j=uhvMB hx]rhç)r€}r(h\j}hl}r‚(hn]ho]rƒ(j…j~Xcabal-pkg-fieldr„ehp]hq]ht]uh]jzhx]r…hX data-filesr†…r‡}rˆ(h\Uh]j€ubahjhïubaubhXk field varies between systems, and in some cases one can even move packages around after installation (see r‰…rŠ}r‹(h\Xk field varies between systems, and in some cases one can even move packages around after installation (see hhNhvNhwhh]jsubjH)rŒ}r(h\XF`prefix independence `__hl}rŽ(UnameXprefix independencej‡X,installing-packages.html#prefix-independencehq]hp]hn]ho]ht]uh]jshx]rhXprefix independencer…r‘}r’(h\Xprefix independenceh]jŒubahjjLubhX]). To enable packages to find these files in a portable way, Cabal generates a module called r“…r”}r•(h\X]). To enable packages to find these files in a portable way, Cabal generates a module called hhNhvNhwhh]jsubhç)r–}r—(h\X Paths_pkgnamehl}r˜(hq]hp]hn]ho]r™XfileršaUrolejšht]uh]jshx]r›(hXPaths_rœ…r}rž(h\XPaths_{pkgname}h]j–ubhÇ)rŸ}r (h\Xpkgnamehl}r¡(hn]ho]hp]hq]ht]uh]j–hx]r¢hXpkgnamer£…r¤}r¥(h\Uh]jŸubahjhÏubehjhïubhX (with any hyphens in r¦…r§}r¨(h\X (with any hyphens in hhNhvNhwhh]jsubhÇ)r©}rª(h\X *pkgname*hl}r«(hn]ho]hp]hq]ht]uh]jshx]r¬hXpkgnamer­…r®}r¯(h\Xpkgnameh]j©ubahjhÏubhX replaced by underscores) during building, so that it may be imported by modules of the package. This module defines a functionr°…r±}r²(h\X replaced by underscores) during building, so that it may be imported by modules of the package. This module defines a functionhhNhvNhwhh]jsubeubjÕ)r³}r´(h\X*getDataFileName :: FilePath -> IO FilePathh]jdhhhihjjØhl}rµ(j‰jXhaskelljÚjÛhq]hp]hn]j}ho]ht]uhvMK hwhhx]r¶hX*getDataFileName :: FilePath -> IO FilePathr·…r¸}r¹(h\Uh]j³ubaubh…)rº}r»(h\XªIf the argument is a filename listed in the :pkg-field:`data-files` field, the result is the name of the corresponding file on the system on which the program is running.h]jdhhhihjh‰hl}r¼(hn]ho]hp]hq]ht]uhvMO hwhhx]r½(hX,If the argument is a filename listed in the r¾…r¿}rÀ(h\X,If the argument is a filename listed in the hhNhvNhwhh]jºubjt)rÁ}rÂ(h\X:pkg-field:`data-files`h]jºhhhihjjwhl}rÃ(UreftypeX pkg-fieldjyˆjzX data-filesrÄU refdomainXcabalrÅhq]hp]U refexplicit‰hn]ho]ht]j}j~j”j=uhvMO hx]rÆhç)rÇ}rÈ(h\jÄhl}rÉ(hn]ho]rÊ(j…jÅXcabal-pkg-fieldrËehp]hq]ht]uh]jÁhx]rÌhX data-filesrÍ…rÎ}rÏ(h\Uh]jÇubahjhïubaubhXg field, the result is the name of the corresponding file on the system on which the program is running.rÐ…rÑ}rÒ(h\Xg field, the result is the name of the corresponding file on the system on which the program is running.hhNhvNhwhh]jºubeubhó)rÓ}rÔ(h\XèIf you decide to import the :file:`Paths_{pkgname}` module then it *must* be listed in the :pkg-field:`other-modules` field just like any other module in your package and on :pkg-field:`autogen-modules` as the file is autogenerated.h]jdhhhihjhöhl}rÕ(hn]ho]hp]hq]ht]uhvNhwhhx]rÖh…)r×}rØ(h\XèIf you decide to import the :file:`Paths_{pkgname}` module then it *must* be listed in the :pkg-field:`other-modules` field just like any other module in your package and on :pkg-field:`autogen-modules` as the file is autogenerated.h]jÓhhhihjh‰hl}rÙ(hn]ho]hp]hq]ht]uhvMU hx]rÚ(hXIf you decide to import the rÛ…rÜ}rÝ(h\XIf you decide to import the h]j×ubhç)rÞ}rß(h\X Paths_pkgnamehl}rà(hq]hp]hn]ho]ráXfilerâaUrolejâht]uh]j×hx]rã(hXPaths_rä…rå}ræ(h\XPaths_{pkgname}h]jÞubhÇ)rç}rè(h\Xpkgnamehl}ré(hn]ho]hp]hq]ht]uh]jÞhx]rêhXpkgnamerë…rì}rí(h\Uh]jçubahjhÏubehjhïubhX module then it rî…rï}rð(h\X module then it h]j×ubhÇ)rñ}rò(h\X*must*hl}ró(hn]ho]hp]hq]ht]uh]j×hx]rôhXmustrõ…rö}r÷(h\Xmusth]jñubahjhÏubhX be listed in the rø…rù}rú(h\X be listed in the h]j×ubjt)rû}rü(h\X:pkg-field:`other-modules`h]j×hhhihjjwhl}rý(UreftypeX pkg-fieldjyˆjzX other-modulesrþU refdomainXcabalrÿhq]hp]U refexplicit‰hn]ho]ht]j}j~j”j=uhvMU hx]rhç)r}r(h\jþhl}r(hn]ho]r(j…jÿXcabal-pkg-fieldrehp]hq]ht]uh]jûhx]rhX other-modulesr…r}r (h\Uh]jubahjhïubaubhX9 field just like any other module in your package and on r …r }r (h\X9 field just like any other module in your package and on h]j×ubjt)r }r(h\X:pkg-field:`autogen-modules`h]j×hhhihjjwhl}r(UreftypeX pkg-fieldjyˆjzXautogen-modulesrU refdomainXcabalrhq]hp]U refexplicit‰hn]ho]ht]j}j~j”j=uhvMU hx]rhç)r}r(h\jhl}r(hn]ho]r(j…jXcabal-pkg-fieldrehp]hq]ht]uh]j hx]rhXautogen-modulesr…r}r(h\Uh]jubahjhïubaubhX as the file is autogenerated.r…r}r(h\X as the file is autogenerated.h]j×ubeubaubh…)r}r (h\X­The :file:`Paths_{pkgname}` module is not platform independent, as any other autogenerated module, so it does not get included in the source tarballs generated by ``sdist``.h]jdhhhihjh‰hl}r!(hn]ho]hp]hq]ht]uhvMZ hwhhx]r"(hXThe r#…r$}r%(h\XThe hhNhvNhwhh]jubhç)r&}r'(h\X Paths_pkgnamehl}r((hq]hp]hn]ho]r)Xfiler*aUrolej*ht]uh]jhx]r+(hXPaths_r,…r-}r.(h\XPaths_{pkgname}h]j&ubhÇ)r/}r0(h\Xpkgnamehl}r1(hn]ho]hp]hq]ht]uh]j&hx]r2hXpkgnamer3…r4}r5(h\Uh]j/ubahjhÏubehjhïubhXˆ module is not platform independent, as any other autogenerated module, so it does not get included in the source tarballs generated by r6…r7}r8(h\Xˆ module is not platform independent, as any other autogenerated module, so it does not get included in the source tarballs generated by hhNhvNhwhh]jubhç)r9}r:(h\X ``sdist``hl}r;(hn]ho]hp]hq]ht]uh]jhx]r<hXsdistr=…r>}r?(h\Xsdisth]j9ubahjhïubhX.…r@}rA(h\X.hhNhvNhwhh]jubeubh…)rB}rC(h\XThe :file:`Paths_{pkgname}` module also includes some other useful functions and values, which record the version of the package and some other directories which the package has been configured to be installed into (e.g. data files live in ``getDataDir``):h]jdhhhihjh‰hl}rD(hn]ho]hp]hq]ht]uhvM^ hwhhx]rE(hXThe rF…rG}rH(h\XThe hhNhvNhwhh]jBubhç)rI}rJ(h\X Paths_pkgnamehl}rK(hq]hp]hn]ho]rLXfilerMaUrolejMht]uh]jBhx]rN(hXPaths_rO…rP}rQ(h\XPaths_{pkgname}h]jIubhÇ)rR}rS(h\Xpkgnamehl}rT(hn]ho]hp]hq]ht]uh]jIhx]rUhXpkgnamerV…rW}rX(h\Uh]jRubahjhÏubehjhïubhXÕ module also includes some other useful functions and values, which record the version of the package and some other directories which the package has been configured to be installed into (e.g. data files live in rY…rZ}r[(h\XÕ module also includes some other useful functions and values, which record the version of the package and some other directories which the package has been configured to be installed into (e.g. data files live in hhNhvNhwhh]jBubhç)r\}r](h\X``getDataDir``hl}r^(hn]ho]hp]hq]ht]uh]jBhx]r_hX getDataDirr`…ra}rb(h\X getDataDirh]j\ubahjhïubhX):rc…rd}re(h\X):hhNhvNhwhh]jBubeubjÕ)rf}rg(h\Xµversion :: Version getBinDir :: IO FilePath getLibDir :: IO FilePath getDynLibDir :: IO FilePath getDataDir :: IO FilePath getLibexecDir :: IO FilePath getSysconfDir :: IO FilePathh]jdhhhihjjØhl}rh(j‰jXhaskelljÚjÛhq]hp]hn]j}ho]ht]uhvMc hwhhx]rihXµversion :: Version getBinDir :: IO FilePath getLibDir :: IO FilePath getDynLibDir :: IO FilePath getDataDir :: IO FilePath getLibexecDir :: IO FilePath getSysconfDir :: IO FilePathrj…rk}rl(h\Uh]jfubaubh…)rm}rn(h\XÚThe actual location of all these directories can be individually overridden at runtime using environment variables of the form ``pkg_name_var``, where ``pkg_name`` is the name of the package with all hyphens converted into underscores, and ``var`` is either ``bindir``, ``libdir``, ``dynlibdir``, ``datadir``, ``libexedir`` or ``sysconfdir``. For example, the configured data directory for ``pretty-show`` is controlled with the ``pretty_show_datadir`` environment variable.h]jdhhhihjh‰hl}ro(hn]ho]hp]hq]ht]uhvMn hwhhx]rp(hXThe actual location of all these directories can be individually overridden at runtime using environment variables of the form rq…rr}rs(h\XThe actual location of all these directories can be individually overridden at runtime using environment variables of the form hhNhvNhwhh]jmubhç)rt}ru(h\X``pkg_name_var``hl}rv(hn]ho]hp]hq]ht]uh]jmhx]rwhX pkg_name_varrx…ry}rz(h\X pkg_name_varh]jtubahjhïubhX, where r{…r|}r}(h\X, where hhNhvNhwhh]jmubhç)r~}r(h\X ``pkg_name``hl}r€(hn]ho]hp]hq]ht]uh]jmhx]rhXpkg_namer‚…rƒ}r„(h\Xpkg_nameh]j~ubahjhïubhXM is the name of the package with all hyphens converted into underscores, and r……r†}r‡(h\XM is the name of the package with all hyphens converted into underscores, and hhNhvNhwhh]jmubhç)rˆ}r‰(h\X``var``hl}rŠ(hn]ho]hp]hq]ht]uh]jmhx]r‹hXvarrŒ…r}rŽ(h\Xvarh]jˆubahjhïubhX is either r…r}r‘(h\X is either hhNhvNhwhh]jmubhç)r’}r“(h\X ``bindir``hl}r”(hn]ho]hp]hq]ht]uh]jmhx]r•hXbindirr–…r—}r˜(h\Xbindirh]j’ubahjhïubhX, r™…rš}r›(h\X, hhNhvNhwhh]jmubhç)rœ}r(h\X ``libdir``hl}rž(hn]ho]hp]hq]ht]uh]jmhx]rŸhXlibdirr …r¡}r¢(h\Xlibdirh]jœubahjhïubhX, r£…r¤}r¥(h\X, r¦hhNhvNhwhh]jmubhç)r§}r¨(h\X ``dynlibdir``hl}r©(hn]ho]hp]hq]ht]uh]jmhx]rªhX dynlibdirr«…r¬}r­(h\X dynlibdirh]j§ubahjhïubhX, r®…r¯}r°(h\X, h]jmubhç)r±}r²(h\X ``datadir``hl}r³(hn]ho]hp]hq]ht]uh]jmhx]r´hXdatadirrµ…r¶}r·(h\Xdatadirh]j±ubahjhïubhX, r¸…r¹}rº(h\j¦h]jmubhç)r»}r¼(h\X ``libexedir``hl}r½(hn]ho]hp]hq]ht]uh]jmhx]r¾hX libexedirr¿…rÀ}rÁ(h\X libexedirh]j»ubahjhïubhX or rÂ…rÃ}rÄ(h\X or hhNhvNhwhh]jmubhç)rÅ}rÆ(h\X``sysconfdir``hl}rÇ(hn]ho]hp]hq]ht]uh]jmhx]rÈhX sysconfdirrÉ…rÊ}rË(h\X sysconfdirh]jÅubahjhïubhX1. For example, the configured data directory for rÌ…rÍ}rÎ(h\X1. For example, the configured data directory for hhNhvNhwhh]jmubhç)rÏ}rÐ(h\X``pretty-show``hl}rÑ(hn]ho]hp]hq]ht]uh]jmhx]rÒhX pretty-showrÓ…rÔ}rÕ(h\X pretty-showh]jÏubahjhïubhX is controlled with the rÖ…r×}rØ(h\X is controlled with the hhNhvNhwhh]jmubhç)rÙ}rÚ(h\X``pretty_show_datadir``hl}rÛ(hn]ho]hp]hq]ht]uh]jmhx]rÜhXpretty_show_datadirrÝ…rÞ}rß(h\Xpretty_show_datadirh]jÙubahjhïubhX environment variable.rà…rá}râ(h\X environment variable.hhNhvNhwhh]jmubeubh^)rã}rä(h\Uh]jdhhhihjhkhl}rå(hn]ho]hp]hq]ræUaccessing-the-package-versionrçaht]rèh%auhvMw hwhhx]ré(hz)rê}rë(h\XAccessing the package versionrìh]jãhhhihjh~hl}rí(hn]ho]hp]hq]ht]uhvMw hwhhx]rîhXAccessing the package versionrï…rð}rñ(h\jìhhNhvNhwhh]jêubaubh…)rò}ró(h\X The aforementioned auto generated :file:`Paths_{pkgname}` module also exports the constant ``version ::`` `Version `__ which is defined as the version of your package as specified in the ``version`` field.h]jãhhhihjh‰hl}rô(hn]ho]hp]hq]ht]uhvMy hwhhx]rõ(hX"The aforementioned auto generated rö…r÷}rø(h\X"The aforementioned auto generated hhNhvNhwhh]jòubhç)rù}rú(h\X Paths_pkgnamehl}rû(hq]hp]hn]ho]rüXfilerýaUrolejýht]uh]jòhx]rþ(hXPaths_rÿ…r}r(h\XPaths_{pkgname}h]jùubhÇ)r}r(h\Xpkgnamehl}r(hn]ho]hp]hq]ht]uh]jùhx]rhXpkgnamer…r}r(h\Uh]jubahjhÏubehjhïubhX" module also exports the constant r …r }r (h\X" module also exports the constant hhNhvNhwhh]jòubhç)r }r (h\X``version ::``hl}r(hn]ho]hp]hq]ht]uh]jòhx]rhX version ::r…r}r(h\X version ::h]j ubahjhïubhX …r}r(h\X hhNhvNhwhh]jòubjH)r}r(h\XL`Version `__hl}r(UnameXVersionj‡X>http://hackage.haskell.org/package/base/docs/Data-Version.htmlhq]hp]hn]ho]ht]uh]jòhx]rhXVersionr…r}r(h\XVersionh]jubahjjLubhXE which is defined as the version of your package as specified in the r…r}r(h\XE which is defined as the version of your package as specified in the hhNhvNhwhh]jòubhç)r}r (h\X ``version``hl}r!(hn]ho]hp]hq]ht]uh]jòhx]r"hXversionr#…r$}r%(h\Xversionh]jubahjhïubhX field.r&…r'}r((h\X field.hhNhvNhwhh]jòubeubeubeubh^)r)}r*(h\UhaKh]hfhhhihjhkhl}r+(hn]ho]hp]hq]r,j™aht]r-hauhvM€ hwhhx]r.(hz)r/}r0(h\XSystem-dependent parametersr1h]j)hhhihjh~hl}r2(hn]ho]hp]hq]ht]uhvM€ hwhhx]r3hXSystem-dependent parametersr4…r5}r6(h\j1hhNhvNhwhh]j/ubaubh…)r7}r8(h\XFor some packages, especially those interfacing with C libraries, implementation details and the build procedure depend on the build environment. The ``build-type`` ``Configure`` can be used to handle many such situations. In this case, ``Setup.hs`` should be:h]j)hhhihjh‰hl}r9(hn]ho]hp]hq]ht]uhvM‚ hwhhx]r:(hX–For some packages, especially those interfacing with C libraries, implementation details and the build procedure depend on the build environment. The r;…r<}r=(h\X–For some packages, especially those interfacing with C libraries, implementation details and the build procedure depend on the build environment. The hhNhvNhwhh]j7ubhç)r>}r?(h\X``build-type``hl}r@(hn]ho]hp]hq]ht]uh]j7hx]rAhX build-typerB…rC}rD(h\X build-typeh]j>ubahjhïubhX …rE}rF(h\X hhNhvNhwhh]j7ubhç)rG}rH(h\X ``Configure``hl}rI(hn]ho]hp]hq]ht]uh]j7hx]rJhX ConfigurerK…rL}rM(h\X Configureh]jGubahjhïubhX; can be used to handle many such situations. In this case, rN…rO}rP(h\X; can be used to handle many such situations. In this case, hhNhvNhwhh]j7ubhç)rQ}rR(h\X ``Setup.hs``hl}rS(hn]ho]hp]hq]ht]uh]j7hx]rThXSetup.hsrU…rV}rW(h\XSetup.hsh]jQubahjhïubhX should be:rX…rY}rZ(h\X should be:hhNhvNhwhh]j7ubeubjÕ)r[}r\(h\XHimport Distribution.Simple main = defaultMainWithHooks autoconfUserHooksh]j)hhhihjjØhl}r](j‰jXhaskelljÚjÛhq]hp]hn]j}ho]ht]uhvM‡ hwhhx]r^hXHimport Distribution.Simple main = defaultMainWithHooks autoconfUserHooksr_…r`}ra(h\Uh]j[ubaubh…)rb}rc(h\XgMost packages, however, would probably do better using the ``Simple`` build type and `configurations`_.h]j)hhhihjh‰hl}rd(hn]ho]hp]hq]ht]uhvMŒ hwhhx]re(hX;Most packages, however, would probably do better using the rf…rg}rh(h\X;Most packages, however, would probably do better using the hhNhvNhwhh]jbubhç)ri}rj(h\X ``Simple``hl}rk(hn]ho]hp]hq]ht]uh]jbhx]rlhXSimplerm…rn}ro(h\XSimpleh]jiubahjhïubhX build type and rp…rq}rr(h\X build type and hhNhvNhwhh]jbubjH)rs}rt(h\X`configurations`_jKKh]jbhjjLhl}ru(UnameXconfigurationsrvhq]hp]hn]ho]ht]jNUconfigurationsrwuhx]rxhXconfigurationsry…rz}r{(h\jvh]jsubaubhX.…r|}r}(h\X.hhNhvNhwhh]jbubeubh…)r~}r(h\XNThe :pkg-field:`build-type` ``Configure`` differs from ``Simple`` in two ways:r€h]j)hhhihjh‰hl}r(hn]ho]hp]hq]ht]uhvM hwhhx]r‚(hXThe rƒ…r„}r…(h\XThe hhNhvNhwhh]j~ubjt)r†}r‡(h\X:pkg-field:`build-type`h]j~hhhihjjwhl}rˆ(UreftypeX pkg-fieldjyˆjzX build-typer‰U refdomainXcabalrŠhq]hp]U refexplicit‰hn]ho]ht]j}j~j”j=uhvM hx]r‹hç)rŒ}r(h\j‰hl}rŽ(hn]ho]r(j…jŠXcabal-pkg-fieldrehp]hq]ht]uh]j†hx]r‘hX build-typer’…r“}r”(h\Uh]jŒubahjhïubaubhX …r•}r–(h\X hhNhvNhwhh]j~ubhç)r—}r˜(h\X ``Configure``hl}r™(hn]ho]hp]hq]ht]uh]j~hx]ršhX Configurer›…rœ}r(h\X Configureh]j—ubahjhïubhX differs from rž…rŸ}r (h\X differs from hhNhvNhwhh]j~ubhç)r¡}r¢(h\X ``Simple``hl}r£(hn]ho]hp]hq]ht]uh]j~hx]r¤hXSimpler¥…r¦}r§(h\XSimpleh]j¡ubahjhïubhX in two ways:r¨…r©}rª(h\X in two ways:hhNhvNhwhh]j~ubeubh)r«}r¬(h\Uh]j)hhhihjh’hl}r­(h”X-hq]hp]hn]ho]ht]uhvM‘ hwhhx]r®(h–)r¯}r°(h\X'The package root directory must contain a shell script called ``configure``. The configure step will run the script. This ``configure`` script may be produced by `autoconf `__ or may be hand-written. The ``configure`` script typically discovers information about the system and records it for later steps, e.g. by generating system-dependent header files for inclusion in C source files and preprocessed Haskell source files. (Clearly this won't work for Windows without MSYS or Cygwin: other ideas are needed.) h]j«hhhihjh™hl}r±(hn]ho]hp]hq]ht]uhvNhwhhx]r²h…)r³}r´(h\X&The package root directory must contain a shell script called ``configure``. The configure step will run the script. This ``configure`` script may be produced by `autoconf `__ or may be hand-written. The ``configure`` script typically discovers information about the system and records it for later steps, e.g. by generating system-dependent header files for inclusion in C source files and preprocessed Haskell source files. (Clearly this won't work for Windows without MSYS or Cygwin: other ideas are needed.)h]j¯hhhihjh‰hl}rµ(hn]ho]hp]hq]ht]uhvM‘ hx]r¶(hX>The package root directory must contain a shell script called r·…r¸}r¹(h\X>The package root directory must contain a shell script called h]j³ubhç)rº}r»(h\X ``configure``hl}r¼(hn]ho]hp]hq]ht]uh]j³hx]r½hX configurer¾…r¿}rÀ(h\X configureh]jºubahjhïubhX/. The configure step will run the script. This rÁ…rÂ}rÃ(h\X/. The configure step will run the script. This h]j³ubhç)rÄ}rÅ(h\X ``configure``hl}rÆ(hn]ho]hp]hq]ht]uh]j³hx]rÇhX configurerÈ…rÉ}rÊ(h\X configureh]jÄubahjhïubhX script may be produced by rË…rÌ}rÍ(h\X script may be produced by h]j³ubjH)rÎ}rÏ(h\X4`autoconf `__hl}rÐ(UnameXautoconfj‡X%http://www.gnu.org/software/autoconf/hq]hp]hn]ho]ht]uh]j³hx]rÑhXautoconfrÒ…rÓ}rÔ(h\Xautoconfh]jÎubahjjLubhX or may be hand-written. The rÕ…rÖ}r×(h\X or may be hand-written. The h]j³ubhç)rØ}rÙ(h\X ``configure``hl}rÚ(hn]ho]hp]hq]ht]uh]j³hx]rÛhX configurerÜ…rÝ}rÞ(h\X configureh]jØubahjhïubhX( script typically discovers information about the system and records it for later steps, e.g. by generating system-dependent header files for inclusion in C source files and preprocessed Haskell source files. (Clearly this won’t work for Windows without MSYS or Cygwin: other ideas are needed.)rß…rà}rá(h\X& script typically discovers information about the system and records it for later steps, e.g. by generating system-dependent header files for inclusion in C source files and preprocessed Haskell source files. (Clearly this won't work for Windows without MSYS or Cygwin: other ideas are needed.)h]j³ubeubaubh–)râ}rã(h\XIf the package root directory contains a file called *package*\ ``.buildinfo`` after the configuration step, subsequent steps will read it to obtain additional settings for `build information`_ fields,to be merged with the ones given in the ``.cabal`` file. In particular, this file may be generated by the ``configure`` script mentioned above, allowing these settings to vary depending on the build environment. h]j«hhhihjh™hl}rä(hn]ho]hp]hq]ht]uhvNhwhhx]råh…)ræ}rç(h\XœIf the package root directory contains a file called *package*\ ``.buildinfo`` after the configuration step, subsequent steps will read it to obtain additional settings for `build information`_ fields,to be merged with the ones given in the ``.cabal`` file. In particular, this file may be generated by the ``configure`` script mentioned above, allowing these settings to vary depending on the build environment.h]jâhhhihjh‰hl}rè(hn]ho]hp]hq]ht]uhvM› hx]ré(hX5If the package root directory contains a file called rê…rë}rì(h\X5If the package root directory contains a file called h]jæubhÇ)rí}rî(h\X *package*hl}rï(hn]ho]hp]hq]ht]uh]jæhx]rðhXpackagerñ…rò}ró(h\Xpackageh]jíubahjhÏubhX…rô}rõ(h\X\ h]jæubhç)rö}r÷(h\X``.buildinfo``hl}rø(hn]ho]hp]hq]ht]uh]jæhx]rùhX .buildinforú…rû}rü(h\X .buildinfoh]jöubahjhïubhX_ after the configuration step, subsequent steps will read it to obtain additional settings for rý…rþ}rÿ(h\X_ after the configuration step, subsequent steps will read it to obtain additional settings for h]jæubjH)r }r (h\X`build information`_jKKh]jæhjjLhl}r (UnameXbuild informationhq]hp]hn]ho]ht]jNUbuild-informationr uhx]r hXbuild informationr …r }r (h\Xbuild informationh]j ubaubhX0 fields,to be merged with the ones given in the r …r }r (h\X0 fields,to be merged with the ones given in the h]jæubhç)r }r (h\X ``.cabal``hl}r (hn]ho]hp]hq]ht]uh]jæhx]r hX.cabalr …r }r (h\X.cabalh]j ubahjhïubhX8 file. In particular, this file may be generated by the r …r }r (h\X8 file. In particular, this file may be generated by the h]jæubhç)r }r (h\X ``configure``hl}r (hn]ho]hp]hq]ht]uh]jæhx]r hX configurer …r }r (h\X configureh]j ubahjhïubhX\ script mentioned above, allowing these settings to vary depending on the build environment.r …r }r (h\X\ script mentioned above, allowing these settings to vary depending on the build environment.h]jæubeubaubeubh…)r }r (h\X?The build information file should have the following structure:r! h]j)hhhihjh‰hl}r" (hn]ho]hp]hq]ht]uhvM£ hwhhx]r# hX?The build information file should have the following structure:r$ …r% }r& (h\j! hhNhvNhwhh]j ubaubcdocutils.nodes block_quote r' )r( }r) (h\Uh]j)hhhihjU block_quoter* hl}r+ (hn]ho]hp]hq]ht]uhvNhwhhx]r, (h…)r- }r. (h\X *buildinfo*r/ h]j( hhhihjh‰hl}r0 (hn]ho]hp]hq]ht]uhvM¥ hx]r1 hÇ)r2 }r3 (h\j/ hl}r4 (hn]ho]hp]hq]ht]uh]j- hx]r5 hX buildinfor6 …r7 }r8 (h\X buildinfoh]j2 ubahjhÏubaubh…)r9 }r: (h\X"``executable:`` *name* *buildinfo*h]j( hhhihjh‰hl}r; (hn]ho]hp]hq]ht]uhvM§ hx]r< (hç)r= }r> (h\X``executable:``hl}r? (hn]ho]hp]hq]ht]uh]j9 hx]r@ hX executable:rA …rB }rC (h\X executable:h]j= ubahjhïubhX …rD }rE (h\X h]j9 ubhÇ)rF }rG (h\X*name*hl}rH (hn]ho]hp]hq]ht]uh]j9 hx]rI hXnamerJ …rK }rL (h\Xnameh]jF ubahjhÏubhX …rM }rN (h\X h]j9 ubhÇ)rO }rP (h\X *buildinfo*hl}rQ (hn]ho]hp]hq]ht]uh]j9 hx]rR hX buildinforS …rT }rU (h\X buildinfoh]jO ubahjhÏubeubh…)rV }rW (h\X&``executable:`` *name* *buildinfo* ...h]j( hhhihjh‰hl}rX (hn]ho]hp]hq]ht]uhvM© hx]rY (hç)rZ }r[ (h\X``executable:``hl}r\ (hn]ho]hp]hq]ht]uh]jV hx]r] hX executable:r^ …r_ }r` (h\X executable:h]jZ ubahjhïubhX …ra }rb (h\X h]jV ubhÇ)rc }rd (h\X*name*hl}re (hn]ho]hp]hq]ht]uh]jV hx]rf hXnamerg …rh }ri (h\Xnameh]jc ubahjhÏubhX …rj }rk (h\X h]jV ubhÇ)rl }rm (h\X *buildinfo*hl}rn (hn]ho]hp]hq]ht]uh]jV hx]ro hX buildinforp …rq }rr (h\X buildinfoh]jl ubahjhÏubhX …rs …rt }ru (h\X ...h]jV ubeubeubh…)rv }rw (h\X4where each *buildinfo* consists of settings of fields listed in the section on `build information`_. The first one (if present) relates to the library, while each of the others relate to the named executable. (The names must match the package description, but you don't have to have entries for all of them.)h]j)hhhihjh‰hl}rx (hn]ho]hp]hq]ht]uhvM« hwhhx]ry (hX where each rz …r{ }r| (h\X where each hhNhvNhwhh]jv ubhÇ)r} }r~ (h\X *buildinfo*hl}r (hn]ho]hp]hq]ht]uh]jv hx]r€ hX buildinfor …r‚ }rƒ (h\X buildinfoh]j} ubahjhÏubhX9 consists of settings of fields listed in the section on r„ …r… }r† (h\X9 consists of settings of fields listed in the section on hhNhvNhwhh]jv ubjH)r‡ }rˆ (h\X`build information`_jKKh]jv hjjLhl}r‰ (UnameXbuild informationhq]hp]hn]ho]ht]jNj uhx]rŠ hXbuild informationr‹ …rŒ }r (h\Xbuild informationh]j‡ ubaubhXÓ. The first one (if present) relates to the library, while each of the others relate to the named executable. (The names must match the package description, but you don’t have to have entries for all of them.)rŽ …r }r (h\XÑ. The first one (if present) relates to the library, while each of the others relate to the named executable. (The names must match the package description, but you don't have to have entries for all of them.)hhNhvNhwhh]jv ubeubh…)r‘ }r’ (h\XkNeither of these files is required. If they are absent, this setup script is equivalent to ``defaultMain``.h]j)hhhihjh‰hl}r“ (hn]ho]hp]hq]ht]uhvM± hwhhx]r” (hX[Neither of these files is required. If they are absent, this setup script is equivalent to r• …r– }r— (h\X[Neither of these files is required. If they are absent, this setup script is equivalent to hhNhvNhwhh]j‘ ubhç)r˜ }r™ (h\X``defaultMain``hl}rš (hn]ho]hp]hq]ht]uh]j‘ hx]r› hX defaultMainrœ …r }rž (h\X defaultMainh]j˜ ubahjhïubhX.…rŸ }r  (h\X.hhNhvNhwhh]j‘ ubeubh^)r¡ }r¢ (h\Uh]j)hhhihjhkhl}r£ (hn]ho]hp]hq]r¤ Uexample-using-autoconfr¥ aht]r¦ h1auhvMµ hwhhx]r§ (hz)r¨ }r© (h\XExample: Using autoconfrª h]j¡ hhhihjh~hl}r« (hn]ho]hp]hq]ht]uhvMµ hwhhx]r¬ hXExample: Using autoconfr­ …r® }r¯ (h\jª hhNhvNhwhh]j¨ ubaubh…)r° }r± (h\XhThis example is for people familiar with the `autoconf `__ tools.h]j¡ hhhihjh‰hl}r² (hn]ho]hp]hq]ht]uhvM· hwhhx]r³ (hX-This example is for people familiar with the r´ …rµ }r¶ (h\X-This example is for people familiar with the hhNhvNhwhh]j° ubjH)r· }r¸ (h\X4`autoconf `__hl}r¹ (UnameXautoconfj‡X%http://www.gnu.org/software/autoconf/hq]hp]hn]ho]ht]uh]j° hx]rº hXautoconfr» …r¼ }r½ (h\Xautoconfh]j· ubahjjLubhX tools.r¾ …r¿ }rÀ (h\X tools.hhNhvNhwhh]j° ubeubh…)rÁ }r (h\X7In the X11 package, the file ``configure.ac`` contains:rà h]j¡ hhhihjh‰hl}rÄ (hn]ho]hp]hq]ht]uhvMº hwhhx]rÅ (hXIn the X11 package, the file rÆ …rÇ }rÈ (h\XIn the X11 package, the file hhNhvNhwhh]jÁ ubhç)rÉ }rÊ (h\X``configure.ac``hl}rË (hn]ho]hp]hq]ht]uh]jÁ hx]rÌ hX configure.acrÍ …rÎ }rÏ (h\X configure.ach]jÉ ubahjhïubhX contains:rÐ …rÑ }rÒ (h\X contains:hhNhvNhwhh]jÁ ubeubjÕ)rÓ }rÔ (h\X*AC_INIT([Haskell X11 package], [1.1], [libraries@haskell.org], [X11]) # Safety check: Ensure that we are in the correct source directory. AC_CONFIG_SRCDIR([X11.cabal]) # Header file to place defines in AC_CONFIG_HEADERS([include/HsX11Config.h]) # Check for X11 include paths and libraries AC_PATH_XTRA AC_TRY_CPP([#include ],,[no_x=yes]) # Build the package if we found X11 stuff if test "$no_x" = yes then BUILD_PACKAGE_BOOL=False else BUILD_PACKAGE_BOOL=True fi AC_SUBST([BUILD_PACKAGE_BOOL]) AC_CONFIG_FILES([X11.buildinfo]) AC_OUTPUTh]j¡ hhhihjjØhl}rÕ (j‰jXshelljÚjÛhq]hp]hn]j}ho]ht]uhvM¼ hwhhx]rÖ hX*AC_INIT([Haskell X11 package], [1.1], [libraries@haskell.org], [X11]) # Safety check: Ensure that we are in the correct source directory. AC_CONFIG_SRCDIR([X11.cabal]) # Header file to place defines in AC_CONFIG_HEADERS([include/HsX11Config.h]) # Check for X11 include paths and libraries AC_PATH_XTRA AC_TRY_CPP([#include ],,[no_x=yes]) # Build the package if we found X11 stuff if test "$no_x" = yes then BUILD_PACKAGE_BOOL=False else BUILD_PACKAGE_BOOL=True fi AC_SUBST([BUILD_PACKAGE_BOOL]) AC_CONFIG_FILES([X11.buildinfo]) AC_OUTPUTr× …rØ }rÙ (h\Uh]jÓ ubaubh…)rÚ }rÛ (h\X«Then the setup script will run the ``configure`` script, which checks for the presence of the X11 libraries and substitutes for variables in the file ``X11.buildinfo.in``:h]j¡ hhhihjh‰hl}rÜ (hn]ho]hp]hq]ht]uhvMÔ hwhhx]rÝ (hX#Then the setup script will run the rÞ …rß }rà (h\X#Then the setup script will run the hhNhvNhwhh]jÚ ubhç)rá }râ (h\X ``configure``hl}rã (hn]ho]hp]hq]ht]uh]jÚ hx]rä hX configurerå …ræ }rç (h\X configureh]já ubahjhïubhXf script, which checks for the presence of the X11 libraries and substitutes for variables in the file rè …ré }rê (h\Xf script, which checks for the presence of the X11 libraries and substitutes for variables in the file hhNhvNhwhh]jÚ ubhç)rë }rì (h\X``X11.buildinfo.in``hl}rí (hn]ho]hp]hq]ht]uh]jÚ hx]rî hXX11.buildinfo.inrï …rð }rñ (h\XX11.buildinfo.inh]jë ubahjhïubhX:…rò }ró (h\X:hhNhvNhwhh]jÚ ubeubjÕ)rô }rõ (h\XKbuildable: @BUILD_PACKAGE_BOOL@ cc-options: @X_CFLAGS@ ld-options: @X_LIBS@h]j¡ hhhihjjØhl}rö (jÚjÛhq]hp]hn]ho]ht]uhvMÚ hwhhx]r÷ hXKbuildable: @BUILD_PACKAGE_BOOL@ cc-options: @X_CFLAGS@ ld-options: @X_LIBS@rø …rù }rú (h\Uh]jô ubaubh…)rû }rü (h\XXThis generates a file ``X11.buildinfo`` supplying the parameters needed by later stages:h]j¡ hhhihjh‰hl}rý (hn]ho]hp]hq]ht]uhvMÞ hwhhx]rþ (hXThis generates a file rÿ …r }r (h\XThis generates a file hhNhvNhwhh]jû ubhç)r }r (h\X``X11.buildinfo``hl}r (hn]ho]hp]hq]ht]uh]jû hx]r hX X11.buildinfor …r }r (h\X X11.buildinfoh]j ubahjhïubhX1 supplying the parameters needed by later stages:r …r }r (h\X1 supplying the parameters needed by later stages:hhNhvNhwhh]jû ubeubjÕ)r }r (h\XObuildable: True cc-options: -I/usr/X11R6/include ld-options: -L/usr/X11R6/libh]j¡ hhhihjjØhl}r (jÚjÛhq]hp]hn]ho]ht]uhvMã hwhhx]r hXObuildable: True cc-options: -I/usr/X11R6/include ld-options: -L/usr/X11R6/libr …r }r (h\Uh]j ubaubh…)r }r (h\XûThe ``configure`` script also generates a header file ``include/HsX11Config.h`` containing C preprocessor defines recording the results of various tests. This file may be included by C source files and preprocessed Haskell source files in the package.h]j¡ hhhihjh‰hl}r (hn]ho]hp]hq]ht]uhvMç hwhhx]r (hXThe r …r }r (h\XThe hhNhvNhwhh]j ubhç)r }r (h\X ``configure``hl}r (hn]ho]hp]hq]ht]uh]j hx]r hX configurer …r }r (h\X configureh]j ubahjhïubhX% script also generates a header file r! …r" }r# (h\X% script also generates a header file hhNhvNhwhh]j ubhç)r$ }r% (h\X``include/HsX11Config.h``hl}r& (hn]ho]hp]hq]ht]uh]j hx]r' hXinclude/HsX11Config.hr( …r) }r* (h\Xinclude/HsX11Config.hh]j$ ubahjhïubhX¬ containing C preprocessor defines recording the results of various tests. This file may be included by C source files and preprocessed Haskell source files in the package.r+ …r, }r- (h\X¬ containing C preprocessor defines recording the results of various tests. This file may be included by C source files and preprocessed Haskell source files in the package.hhNhvNhwhh]j ubeubhó)r. }r/ (h\XÍPackages using these features will also need to list additional files such as ``configure``, templates for ``.buildinfo`` files, files named only in ``.buildinfo`` files, header files and so on in the :pkg-field:`extra-source-files` field to ensure that they are included in source distributions. They should also list files and directories generated by ``configure`` in the :pkg-field:`extra-tmp-files` field to ensure that they are removed by ``setup clean``.h]j¡ hhhihjhöhl}r0 (hn]ho]hp]hq]ht]uhvNhwhhx]r1 h…)r2 }r3 (h\XÍPackages using these features will also need to list additional files such as ``configure``, templates for ``.buildinfo`` files, files named only in ``.buildinfo`` files, header files and so on in the :pkg-field:`extra-source-files` field to ensure that they are included in source distributions. They should also list files and directories generated by ``configure`` in the :pkg-field:`extra-tmp-files` field to ensure that they are removed by ``setup clean``.h]j. hhhihjh‰hl}r4 (hn]ho]hp]hq]ht]uhvMî hx]r5 (hXNPackages using these features will also need to list additional files such as r6 …r7 }r8 (h\XNPackages using these features will also need to list additional files such as h]j2 ubhç)r9 }r: (h\X ``configure``hl}r; (hn]ho]hp]hq]ht]uh]j2 hx]r< hX configurer= …r> }r? (h\X configureh]j9 ubahjhïubhX, templates for r@ …rA }rB (h\X, templates for h]j2 ubhç)rC }rD (h\X``.buildinfo``hl}rE (hn]ho]hp]hq]ht]uh]j2 hx]rF hX .buildinforG …rH }rI (h\X .buildinfoh]jC ubahjhïubhX files, files named only in rJ …rK }rL (h\X files, files named only in h]j2 ubhç)rM }rN (h\X``.buildinfo``hl}rO (hn]ho]hp]hq]ht]uh]j2 hx]rP hX .buildinforQ …rR }rS (h\X .buildinfoh]jM ubahjhïubhX& files, header files and so on in the rT …rU }rV (h\X& files, header files and so on in the h]j2 ubjt)rW }rX (h\X:pkg-field:`extra-source-files`h]j2 hhhihjjwhl}rY (UreftypeX pkg-fieldjyˆjzXextra-source-filesrZ U refdomainXcabalr[ hq]hp]U refexplicit‰hn]ho]ht]j}j~j”j=uhvMî hx]r\ hç)r] }r^ (h\jZ hl}r_ (hn]ho]r` (j…j[ Xcabal-pkg-fieldra ehp]hq]ht]uh]jW hx]rb hXextra-source-filesrc …rd }re (h\Uh]j] ubahjhïubaubhXz field to ensure that they are included in source distributions. They should also list files and directories generated by rf …rg }rh (h\Xz field to ensure that they are included in source distributions. They should also list files and directories generated by h]j2 ubhç)ri }rj (h\X ``configure``hl}rk (hn]ho]hp]hq]ht]uh]j2 hx]rl hX configurerm …rn }ro (h\X configureh]ji ubahjhïubhX in the rp …rq }rr (h\X in the h]j2 ubjt)rs }rt (h\X:pkg-field:`extra-tmp-files`h]j2 hhhihjjwhl}ru (UreftypeX pkg-fieldjyˆjzXextra-tmp-filesrv U refdomainXcabalrw hq]hp]U refexplicit‰hn]ho]ht]j}j~j”j=uhvMî hx]rx hç)ry }rz (h\jv hl}r{ (hn]ho]r| (j…jw Xcabal-pkg-fieldr} ehp]hq]ht]uh]js hx]r~ hXextra-tmp-filesr …r€ }r (h\Uh]jy ubahjhïubaubhX* field to ensure that they are removed by r‚ …rƒ }r„ (h\X* field to ensure that they are removed by h]j2 ubhç)r… }r† (h\X``setup clean``hl}r‡ (hn]ho]hp]hq]ht]uh]j2 hx]rˆ hX setup cleanr‰ …rŠ }r‹ (h\X setup cleanh]j… ubahjhïubhX.…rŒ }r (h\X.h]j2 ubeubaubh…)rŽ }r (h\XQuite often the files generated by ``configure`` need to be listed somewhere in the package description (for example, in the :pkg-field:`install-includes` field). However, we usually don't want generated files to be included in the source tarball. The solution is again provided by the ``.buildinfo`` file. In the above example, the following line should be added to ``X11.buildinfo``:h]j¡ hhhihjh‰hl}r (hn]ho]hp]hq]ht]uhvMö hwhhx]r‘ (hX#Quite often the files generated by r’ …r“ }r” (h\X#Quite often the files generated by hhNhvNhwhh]jŽ ubhç)r• }r– (h\X ``configure``hl}r— (hn]ho]hp]hq]ht]uh]jŽ hx]r˜ hX configurer™ …rš }r› (h\X configureh]j• ubahjhïubhXM need to be listed somewhere in the package description (for example, in the rœ …r }rž (h\XM need to be listed somewhere in the package description (for example, in the hhNhvNhwhh]jŽ ubjt)rŸ }r  (h\X:pkg-field:`install-includes`h]jŽ hhhihjjwhl}r¡ (UreftypeX pkg-fieldjyˆjzXinstall-includesr¢ U refdomainXcabalr£ hq]hp]U refexplicit‰hn]ho]ht]j}j~j”j=uhvMö hx]r¤ hç)r¥ }r¦ (h\j¢ hl}r§ (hn]ho]r¨ (j…j£ Xcabal-pkg-fieldr© ehp]hq]ht]uh]jŸ hx]rª hXinstall-includesr« …r¬ }r­ (h\Uh]j¥ ubahjhïubaubhX† field). However, we usually don’t want generated files to be included in the source tarball. The solution is again provided by the r® …r¯ }r° (h\X„ field). However, we usually don't want generated files to be included in the source tarball. The solution is again provided by the hhNhvNhwhh]jŽ ubhç)r± }r² (h\X``.buildinfo``hl}r³ (hn]ho]hp]hq]ht]uh]jŽ hx]r´ hX .buildinforµ …r¶ }r· (h\X .buildinfoh]j± ubahjhïubhXC file. In the above example, the following line should be added to r¸ …r¹ }rº (h\XC file. In the above example, the following line should be added to hhNhvNhwhh]jŽ ubhç)r» }r¼ (h\X``X11.buildinfo``hl}r½ (hn]ho]hp]hq]ht]uh]jŽ hx]r¾ hX X11.buildinfor¿ …rÀ }rÁ (h\X X11.buildinfoh]j» ubahjhïubhX:…r }rà (h\X:hhNhvNhwhh]jŽ ubeubjÕ)rÄ }rÅ (h\Xinstall-includes: HsX11Config.hh]j¡ hhhihjjØhl}rÆ (jÚjÛhq]hp]hn]ho]ht]uhvMÿ hwhhx]rÇ hXinstall-includes: HsX11Config.hrÈ …rÉ }rÊ (h\Uh]jÄ ubaubh…)rË }rÌ (h\XOIn this way, the generated ``HsX11Config.h`` file won't be included in the source tarball in addition to ``HsX11Config.h.in``, but it will be copied to the right location during the install process. Packages that use custom ``Setup.hs`` scripts can update the necessary fields programmatically instead of using the ``.buildinfo`` file.h]j¡ hhhihjh‰hl}rÍ (hn]ho]hp]hq]ht]uhvMhwhhx]rÎ (hXIn this way, the generated rÏ …rÐ }rÑ (h\XIn this way, the generated hhNhvNhwhh]jË ubhç)rÒ }rÓ (h\X``HsX11Config.h``hl}rÔ (hn]ho]hp]hq]ht]uh]jË hx]rÕ hX HsX11Config.hrÖ …r× }rØ (h\X HsX11Config.hh]jÒ ubahjhïubhX? file won’t be included in the source tarball in addition to rÙ …rÚ }rÛ (h\X= file won't be included in the source tarball in addition to hhNhvNhwhh]jË ubhç)rÜ }rÝ (h\X``HsX11Config.h.in``hl}rÞ (hn]ho]hp]hq]ht]uh]jË hx]rß hXHsX11Config.h.inrà …rá }râ (h\XHsX11Config.h.inh]jÜ ubahjhïubhXc, but it will be copied to the right location during the install process. Packages that use custom rã …rä }rå (h\Xc, but it will be copied to the right location during the install process. Packages that use custom hhNhvNhwhh]jË ubhç)ræ }rç (h\X ``Setup.hs``hl}rè (hn]ho]hp]hq]ht]uh]jË hx]ré hXSetup.hsrê …rë }rì (h\XSetup.hsh]jæ ubahjhïubhXO scripts can update the necessary fields programmatically instead of using the rí …rî }rï (h\XO scripts can update the necessary fields programmatically instead of using the hhNhvNhwhh]jË ubhç)rð }rñ (h\X``.buildinfo``hl}rò (hn]ho]hp]hq]ht]uh]jË hx]ró hX .buildinforô …rõ }rö (h\X .buildinfoh]jð ubahjhïubhX file.r÷ …rø }rù (h\X file.hhNhvNhwhh]jË ubeubeubeubh^)rú }rû (h\Uh]hfhhhihjhkhl}rü (hn]ho]hp]hq]rý Uconditional-compilationrþ aht]rÿ hauhvMhwhhx]r (hz)r }r (h\XConditional compilationr h]jú hhhihjh~hl}r (hn]ho]hp]hq]ht]uhvMhwhhx]r hXConditional compilationr …r }r (h\j hhNhvNhwhh]j ubaubh…)r }r (h\XSometimes you want to write code that works with more than one version of a dependency. You can specify a range of versions for the dependency in the :pkg-field:`build-depends`, but how do you then write the code that can use different versions of the API?h]jú hhhihjh‰hl}r (hn]ho]hp]hq]ht]uhvM hwhhx]r (hX–Sometimes you want to write code that works with more than one version of a dependency. You can specify a range of versions for the dependency in the r …r }r (h\X–Sometimes you want to write code that works with more than one version of a dependency. You can specify a range of versions for the dependency in the hhNhvNhwhh]j ubjt)r }r (h\X:pkg-field:`build-depends`h]j hhhihjjwhl}r (UreftypeX pkg-fieldjyˆjzX build-dependsr U refdomainXcabalr hq]hp]U refexplicit‰hn]ho]ht]j}j~j”j=uhvM hx]r hç)r }r (h\j hl}r (hn]ho]r (j…j Xcabal-pkg-fieldr ehp]hq]ht]uh]j hx]r hX build-dependsr …r }r (h\Uh]j ubahjhïubaubhXP, but how do you then write the code that can use different versions of the API?r …r }r! (h\XP, but how do you then write the code that can use different versions of the API?hhNhvNhwhh]j ubeubh…)r" }r# (h\XËHaskell lets you preprocess your code using the C preprocessor (either the real C preprocessor, or ``cpphs``). To enable this, add ``extensions: CPP`` to your package description. When using CPP, Cabal provides some pre-defined macros to let you test the version of dependent packages; for example, suppose your package works with either version 3 or version 4 of the ``base`` package, you could select the available version in your Haskell modules like this:h]jú hhhihjh‰hl}r$ (hn]ho]hp]hq]ht]uhvMhwhhx]r% (hXcHaskell lets you preprocess your code using the C preprocessor (either the real C preprocessor, or r& …r' }r( (h\XcHaskell lets you preprocess your code using the C preprocessor (either the real C preprocessor, or hhNhvNhwhh]j" ubhç)r) }r* (h\X ``cpphs``hl}r+ (hn]ho]hp]hq]ht]uh]j" hx]r, hXcpphsr- …r. }r/ (h\Xcpphsh]j) ubahjhïubhX). To enable this, add r0 …r1 }r2 (h\X). To enable this, add hhNhvNhwhh]j" ubhç)r3 }r4 (h\X``extensions: CPP``hl}r5 (hn]ho]hp]hq]ht]uh]j" hx]r6 hXextensions: CPPr7 …r8 }r9 (h\Xextensions: CPPh]j3 ubahjhïubhXÚ to your package description. When using CPP, Cabal provides some pre-defined macros to let you test the version of dependent packages; for example, suppose your package works with either version 3 or version 4 of the r: …r; }r< (h\XÚ to your package description. When using CPP, Cabal provides some pre-defined macros to let you test the version of dependent packages; for example, suppose your package works with either version 3 or version 4 of the hhNhvNhwhh]j" ubhç)r= }r> (h\X``base``hl}r? (hn]ho]hp]hq]ht]uh]j" hx]r@ hXbaserA …rB }rC (h\Xbaseh]j= ubahjhïubhXS package, you could select the available version in your Haskell modules like this:rD …rE }rF (h\XS package, you could select the available version in your Haskell modules like this:hhNhvNhwhh]j" ubeubjÕ)rG }rH (h\Xp#if MIN_VERSION_base(4,0,0) ... code that works with base-4 ... #else ... code that works with base-3 ... #endifh]jú hhhihjjØhl}rI (j‰jXcppjÚjÛhq]hp]hn]j}ho]ht]uhvMhwhhx]rJ hXp#if MIN_VERSION_base(4,0,0) ... code that works with base-4 ... #else ... code that works with base-3 ... #endifrK …rL }rM (h\Uh]jG ubaubh…)rN }rO (h\X›In general, Cabal supplies a macro ``MIN_VERSION_``\ *``package``*\ ``_(A,B,C)`` for each package depended on via :pkg-field:`build-depends`. This macro is true if the actual version of the package in use is greater than or equal to ``A.B.C`` (using the conventional ordering on version numbers, which is lexicographic on the sequence, but numeric on each component, so for example 1.2.0 is greater than 1.0.3).h]jú hhhihjh‰hl}rP (hn]ho]hp]hq]ht]uhvMhwhhx]rQ (hX#In general, Cabal supplies a macro rR …rS }rT (h\X#In general, Cabal supplies a macro hhNhvNhwhh]jN ubhç)rU }rV (h\X``MIN_VERSION_``hl}rW (hn]ho]hp]hq]ht]uh]jN hx]rX hX MIN_VERSION_rY …rZ }r[ (h\X MIN_VERSION_h]jU ubahjhïubhX…r\ }r] (h\X\ r^ hhNhvNhwhh]jN ubhÇ)r_ }r` (h\X *``package``*hl}ra (hn]ho]hp]hq]ht]uh]jN hx]rb hX ``package``rc …rd }re (h\X ``package``h]j_ ubahjhÏubhX…rf }rg (h\j^ h]jN ubhç)rh }ri (h\X ``_(A,B,C)``hl}rj (hn]ho]hp]hq]ht]uh]jN hx]rk hX_(A,B,C)rl …rm }rn (h\X_(A,B,C)h]jh ubahjhïubhX" for each package depended on via ro …rp }rq (h\X" for each package depended on via hhNhvNhwhh]jN ubjt)rr }rs (h\X:pkg-field:`build-depends`h]jN hhhihjjwhl}rt (UreftypeX pkg-fieldjyˆjzX build-dependsru U refdomainXcabalrv hq]hp]U refexplicit‰hn]ho]ht]j}j~j”j=uhvMhx]rw hç)rx }ry (h\ju hl}rz (hn]ho]r{ (j…jv Xcabal-pkg-fieldr| ehp]hq]ht]uh]jr hx]r} hX build-dependsr~ …r }r€ (h\Uh]jx ubahjhïubaubhX]. This macro is true if the actual version of the package in use is greater than or equal to r …r‚ }rƒ (h\X]. This macro is true if the actual version of the package in use is greater than or equal to hhNhvNhwhh]jN ubhç)r„ }r… (h\X ``A.B.C``hl}r† (hn]ho]hp]hq]ht]uh]jN hx]r‡ hXA.B.Crˆ …r‰ }rŠ (h\XA.B.Ch]j„ ubahjhïubhX© (using the conventional ordering on version numbers, which is lexicographic on the sequence, but numeric on each component, so for example 1.2.0 is greater than 1.0.3).r‹ …rŒ }r (h\X© (using the conventional ordering on version numbers, which is lexicographic on the sequence, but numeric on each component, so for example 1.2.0 is greater than 1.0.3).hhNhvNhwhh]jN ubeubh…)rŽ }r (h\X¨Since version 1.20, the ``MIN_TOOL_VERSION_``\ *``tool``* family of macros lets you condition on the version of build tools used to build the program (e.g. ``hsc2hs``).h]jú hhhihjh‰hl}r (hn]ho]hp]hq]ht]uhvM'hwhhx]r‘ (hXSince version 1.20, the r’ …r“ }r” (h\XSince version 1.20, the hhNhvNhwhh]jŽ ubhç)r• }r– (h\X``MIN_TOOL_VERSION_``hl}r— (hn]ho]hp]hq]ht]uh]jŽ hx]r˜ hXMIN_TOOL_VERSION_r™ …rš }r› (h\XMIN_TOOL_VERSION_h]j• ubahjhïubhX…rœ }r (h\X\ hhNhvNhwhh]jŽ ubhÇ)rž }rŸ (h\X *``tool``*hl}r  (hn]ho]hp]hq]ht]uh]jŽ hx]r¡ hX``tool``r¢ …r£ }r¤ (h\X``tool``h]jž ubahjhÏubhXc family of macros lets you condition on the version of build tools used to build the program (e.g. r¥ …r¦ }r§ (h\Xc family of macros lets you condition on the version of build tools used to build the program (e.g. hhNhvNhwhh]jŽ ubhç)r¨ }r© (h\X ``hsc2hs``hl}rª (hn]ho]hp]hq]ht]uh]jŽ hx]r« hXhsc2hsr¬ …r­ }r® (h\Xhsc2hsh]j¨ ubahjhïubhX).r¯ …r° }r± (h\X).hhNhvNhwhh]jŽ ubeubh…)r² }r³ (h\X=Since version 1.24, the macro ``CURRENT_COMPONENT_ID``, which expands to the string of the component identifier that uniquely identifies this component. Furthermore, if the package is a library, the macro ``CURRENT_PACKAGE_KEY`` records the identifier that was passed to GHC for use in symbols and for type equality.h]jú hhhihjh‰hl}r´ (hn]ho]hp]hq]ht]uhvM+hwhhx]rµ (hXSince version 1.24, the macro r¶ …r· }r¸ (h\XSince version 1.24, the macro hhNhvNhwhh]j² ubhç)r¹ }rº (h\X``CURRENT_COMPONENT_ID``hl}r» (hn]ho]hp]hq]ht]uh]j² hx]r¼ hXCURRENT_COMPONENT_IDr½ …r¾ }r¿ (h\XCURRENT_COMPONENT_IDh]j¹ ubahjhïubhX˜, which expands to the string of the component identifier that uniquely identifies this component. Furthermore, if the package is a library, the macro rÀ …rÁ }r (h\X˜, which expands to the string of the component identifier that uniquely identifies this component. Furthermore, if the package is a library, the macro hhNhvNhwhh]j² ubhç)rà }rÄ (h\X``CURRENT_PACKAGE_KEY``hl}rÅ (hn]ho]hp]hq]ht]uh]j² hx]rÆ hXCURRENT_PACKAGE_KEYrÇ …rÈ }rÉ (h\XCURRENT_PACKAGE_KEYh]jà ubahjhïubhXX records the identifier that was passed to GHC for use in symbols and for type equality.rÊ …rË }rÌ (h\XX records the identifier that was passed to GHC for use in symbols and for type equality.hhNhvNhwhh]j² ubeubh…)rÍ }rÎ (h\XuSince version 2.0, the macro ``CURRENT_PACKAGE_VERSION`` expands to the string version number of the current package.h]jú hhhihjh‰hl}rÏ (hn]ho]hp]hq]ht]uhvM1hwhhx]rÐ (hXSince version 2.0, the macro rÑ …rÒ }rÓ (h\XSince version 2.0, the macro hhNhvNhwhh]jÍ ubhç)rÔ }rÕ (h\X``CURRENT_PACKAGE_VERSION``hl}rÖ (hn]ho]hp]hq]ht]uh]jÍ hx]r× hXCURRENT_PACKAGE_VERSIONrØ …rÙ }rÚ (h\XCURRENT_PACKAGE_VERSIONh]jÔ ubahjhïubhX= expands to the string version number of the current package.rÛ …rÜ }rÝ (h\X= expands to the string version number of the current package.hhNhvNhwhh]jÍ ubeubh…)rÞ }rß (h\X¼Cabal places the definitions of these macros into an automatically-generated header file, which is included when preprocessing Haskell source code by passing options to the C preprocessor.rà h]jú hhhihjh‰hl}rá (hn]ho]hp]hq]ht]uhvM4hwhhx]râ hX¼Cabal places the definitions of these macros into an automatically-generated header file, which is included when preprocessing Haskell source code by passing options to the C preprocessor.rã …rä }rå (h\jà hhNhvNhwhh]jÞ ubaubh…)ræ }rç (h\X¾Cabal also allows to detect when the source code is being used for generating documentation. The ``__HADDOCK_VERSION__`` macro is defined only when compiling via Haddock_ instead of a normal Haskell compiler. The value of the ``__HADDOCK_VERSION__`` macro is defined as ``A*1000 + B*10 + C``, where ``A.B.C`` is the Haddock version. This can be useful for working around bugs in Haddock or generating prettier documentation in some special cases.h]jú hhhihjh‰hl}rè (hn]ho]hp]hq]ht]uhvM9hwhhx]ré (hXaCabal also allows to detect when the source code is being used for generating documentation. The rê …rë }rì (h\XaCabal also allows to detect when the source code is being used for generating documentation. The hhNhvNhwhh]jæ ubhç)rí }rî (h\X``__HADDOCK_VERSION__``hl}rï (hn]ho]hp]hq]ht]uh]jæ hx]rð hX__HADDOCK_VERSION__rñ …rò }ró (h\X__HADDOCK_VERSION__h]jí ubahjhïubhX* macro is defined only when compiling via rô …rõ }rö (h\X* macro is defined only when compiling via hhNhvNhwhh]jæ ubjH)r÷ }rø (h\XHaddock_jKKh]jæ hjjLhl}rù (UnameXHaddockrú j‡Xhttp://www.haskell.org/haddock/rû hq]hp]hn]ho]ht]uhx]rü hXHaddockrý …rþ }rÿ (h\jú h]j÷ ubaubhX8 instead of a normal Haskell compiler. The value of the r …r }r (h\X8 instead of a normal Haskell compiler. The value of the hhNhvNhwhh]jæ ubhç)r }r (h\X``__HADDOCK_VERSION__``hl}r (hn]ho]hp]hq]ht]uh]jæ hx]r hX__HADDOCK_VERSION__r …r }r (h\X__HADDOCK_VERSION__h]j ubahjhïubhX macro is defined as r …r }r (h\X macro is defined as hhNhvNhwhh]jæ ubhç)r }r (h\X``A*1000 + B*10 + C``hl}r (hn]ho]hp]hq]ht]uh]jæ hx]r hXA*1000 + B*10 + Cr …r }r (h\XA*1000 + B*10 + Ch]j ubahjhïubhX, where r …r }r (h\X, where hhNhvNhwhh]jæ ubhç)r }r (h\X ``A.B.C``hl}r (hn]ho]hp]hq]ht]uh]jæ hx]r hXA.B.Cr …r }r (h\XA.B.Ch]j ubahjhïubhXŠ is the Haddock version. This can be useful for working around bugs in Haddock or generating prettier documentation in some special cases.r …r }r (h\XŠ is the Haddock version. This can be useful for working around bugs in Haddock or generating prettier documentation in some special cases.hhNhvNhwhh]jæ ubeubeubh^)r! }r" (h\UhaKh]hfhhhihjhkhl}r# (hn]ho]hp]hq]r$ Umore-complex-packagesr% aht]r& h`__ for the details, but note that this interface is experimental, and likely to change in future releases. If you use a custom ``Setup.hs`` file you should strongly consider adding a :pkg-section:`custom-setup` stanza with a :pkg-field:`custom-setup:setup-depends` field to ensure that your setup script does not break with future dependency versions. h]j8 hhhihjh™hl}r> (hn]ho]hp]hq]ht]uhvNhwhhx]r? (h…)r@ }rA (h\XEBy using the :pkg-field:`build-type` ``Custom``, you can supply your own ``Setup.hs`` file, and customize the simple build infrastructure using *hooks*. These allow you to perform additional actions before and after each command is run, and also to specify additional preprocessors. A typical ``Setup.hs`` may look like this:h]j< hhhihjh‰hl}rB (hn]ho]hp]hq]ht]uhvMHhx]rC (hX By using the rD …rE }rF (h\X By using the h]j@ ubjt)rG }rH (h\X:pkg-field:`build-type`h]j@ hhhihjjwhl}rI (UreftypeX pkg-fieldjyˆjzX build-typerJ U refdomainXcabalrK hq]hp]U refexplicit‰hn]ho]ht]j}j~j”j=uhvMHhx]rL hç)rM }rN (h\jJ hl}rO (hn]ho]rP (j…jK Xcabal-pkg-fieldrQ ehp]hq]ht]uh]jG hx]rR hX build-typerS …rT }rU (h\Uh]jM ubahjhïubaubhX …rV }rW (h\X h]j@ ubhç)rX }rY (h\X ``Custom``hl}rZ (hn]ho]hp]hq]ht]uh]j@ hx]r[ hXCustomr\ …r] }r^ (h\XCustomh]jX ubahjhïubhX, you can supply your own r_ …r` }ra (h\X, you can supply your own h]j@ ubhç)rb }rc (h\X ``Setup.hs``hl}rd (hn]ho]hp]hq]ht]uh]j@ hx]re hXSetup.hsrf …rg }rh (h\XSetup.hsh]jb ubahjhïubhX; file, and customize the simple build infrastructure using ri …rj }rk (h\X; file, and customize the simple build infrastructure using h]j@ ubhÇ)rl }rm (h\X*hooks*hl}rn (hn]ho]hp]hq]ht]uh]j@ hx]ro hXhooksrp …rq }rr (h\Xhooksh]jl ubahjhÏubhXŽ. These allow you to perform additional actions before and after each command is run, and also to specify additional preprocessors. A typical rs …rt }ru (h\XŽ. These allow you to perform additional actions before and after each command is run, and also to specify additional preprocessors. A typical h]j@ ubhç)rv }rw (h\X ``Setup.hs``hl}rx (hn]ho]hp]hq]ht]uh]j@ hx]ry hXSetup.hsrz …r{ }r| (h\XSetup.hsh]jv ubahjhïubhX may look like this:r} …r~ }r (h\X may look like this:h]j@ ubeubjÕ)r€ }r (h\Ximport Distribution.Simple main = defaultMainWithHooks simpleUserHooks { postHaddock = posthaddock } posthaddock args flags desc info = ....h]j< hhhihjjØhl}r‚ (j‰jXhaskelljÚjÛhq]hp]hn]j}ho]ht]uhvMNhx]rƒ hXimport Distribution.Simple main = defaultMainWithHooks simpleUserHooks { postHaddock = posthaddock } posthaddock args flags desc info = ....r„ …r… }r† (h\Uh]j€ ubaubh…)r‡ }rˆ (h\XÕSee ``UserHooks`` in `Distribution.Simple <../release/cabal-latest/doc/API/Cabal/Distribution-Simple.html>`__ for the details, but note that this interface is experimental, and likely to change in future releases.h]j< hhhihjh‰hl}r‰ (hn]ho]hp]hq]ht]uhvMUhx]rŠ (hXSee r‹ …rŒ }r (h\XSee h]j‡ ubhç)rŽ }r (h\X ``UserHooks``hl}r (hn]ho]hp]hq]ht]uh]j‡ hx]r‘ hX UserHooksr’ …r“ }r” (h\X UserHooksh]jŽ ubahjhïubhX in r• …r– }r— (h\X in h]j‡ ubjH)r˜ }r™ (h\XX`Distribution.Simple <../release/cabal-latest/doc/API/Cabal/Distribution-Simple.html>`__hl}rš (UnameXDistribution.Simplej‡X>../release/cabal-latest/doc/API/Cabal/Distribution-Simple.htmlhq]hp]hn]ho]ht]uh]j‡ hx]r› hXDistribution.Simplerœ …r }rž (h\XDistribution.Simpleh]j˜ ubahjjLubhXh for the details, but note that this interface is experimental, and likely to change in future releases.rŸ …r  }r¡ (h\Xh for the details, but note that this interface is experimental, and likely to change in future releases.h]j‡ ubeubh…)r¢ }r£ (h\XôIf you use a custom ``Setup.hs`` file you should strongly consider adding a :pkg-section:`custom-setup` stanza with a :pkg-field:`custom-setup:setup-depends` field to ensure that your setup script does not break with future dependency versions.h]j< hhhihjh‰hl}r¤ (hn]ho]hp]hq]ht]uhvMZhx]r¥ (hXIf you use a custom r¦ …r§ }r¨ (h\XIf you use a custom h]j¢ ubhç)r© }rª (h\X ``Setup.hs``hl}r« (hn]ho]hp]hq]ht]uh]j¢ hx]r¬ hXSetup.hsr­ …r® }r¯ (h\XSetup.hsh]j© ubahjhïubhX, file you should strongly consider adding a r° …r± }r² (h\X, file you should strongly consider adding a h]j¢ ubjt)r³ }r´ (h\X:pkg-section:`custom-setup`h]j¢ hhhihjjwhl}rµ (UreftypeX pkg-sectionjyˆjzX custom-setupr¶ U refdomainXcabalr· hq]hp]U refexplicit‰hn]ho]ht]j}j~uhvMZhx]r¸ hç)r¹ }rº (h\j¶ hl}r» (hn]ho]r¼ (j…j· Xcabal-pkg-sectionr½ ehp]hq]ht]uh]j³ hx]r¾ hX custom-setupr¿ …rÀ }rÁ (h\Uh]j¹ ubahjhïubaubhX stanza with a r …rà }rÄ (h\X stanza with a h]j¢ ubjt)rÅ }rÆ (h\X':pkg-field:`custom-setup:setup-depends`h]j¢ hhhihjjwhl}rÇ (UreftypeX pkg-fieldjyˆjzX setup-dependsU refdomainXcabalrÈ hq]hp]U refexplicit‰hn]ho]ht]j}j~j”X custom-setupuhvMZhx]rÉ hç)rÊ }rË (h\Xcustom-setup:setup-dependshl}rÌ (hn]ho]rÍ (j…jÈ Xcabal-pkg-fieldrÎ ehp]hq]ht]uh]jÅ hx]rÏ hXcustom-setup:setup-dependsrÐ …rÑ }rÒ (h\Uh]jÊ ubahjhïubaubhXW field to ensure that your setup script does not break with future dependency versions.rÓ …rÔ }rÕ (h\XW field to ensure that your setup script does not break with future dependency versions.h]j¢ ubeubeubh–)rÖ }r× (h\X^You could delegate all the work to ``make``, though this is unlikely to be very portable. Cabal supports this with the :pkg-field:`build-type` ``Make`` and a trivial setup library `Distribution.Make <../release/cabal-latest/doc/API/Cabal/Distribution-Make.html>`__, which simply parses the command line arguments and invokes ``make``. Here ``Setup.hs`` should look like this: .. code-block:: haskell import Distribution.Make main = defaultMain The root directory of the package should contain a ``configure`` script, and, after that has run, a ``Makefile`` with a default target that builds the package, plus targets ``install``, ``register``, ``unregister``, ``clean``, ``dist`` and ``docs``. Some options to commands are passed through as follows: - The ``--with-hc-pkg``, ``--prefix``, ``--bindir``, ``--libdir``, ``--dynlibdir``, ``--datadir``, ``--libexecdir`` and ``--sysconfdir`` options to the ``configure`` command are passed on to the ``configure`` script. In addition the value of the ``--with-compiler`` option is passed in a ``--with-hc`` option and all options specified with ``--configure-option=`` are passed on. - The ``--destdir`` option to the ``copy`` command becomes a setting of a ``destdir`` variable on the invocation of ``make copy``. The supplied ``Makefile`` should provide a ``copy`` target, which will probably look like this: .. code-block:: make copy : $(MAKE) install prefix=$(destdir)/$(prefix) \ bindir=$(destdir)/$(bindir) \ libdir=$(destdir)/$(libdir) \ dynlibdir=$(destdir)/$(dynlibdir) \ datadir=$(destdir)/$(datadir) \ libexecdir=$(destdir)/$(libexecdir) \ sysconfdir=$(destdir)/$(sysconfdir) \ h]j8 hhNhjh™hl}rØ (hn]ho]hp]hq]ht]uhvNhwhhx]rÙ (h…)rÚ }rÛ (h\XwYou could delegate all the work to ``make``, though this is unlikely to be very portable. Cabal supports this with the :pkg-field:`build-type` ``Make`` and a trivial setup library `Distribution.Make <../release/cabal-latest/doc/API/Cabal/Distribution-Make.html>`__, which simply parses the command line arguments and invokes ``make``. Here ``Setup.hs`` should look like this:h]jÖ hhhihjh‰hl}rÜ (hn]ho]hp]hq]ht]uhvM_hx]rÝ (hX#You could delegate all the work to rÞ …rß }rà (h\X#You could delegate all the work to h]jÚ ubhç)rá }râ (h\X``make``hl}rã (hn]ho]hp]hq]ht]uh]jÚ hx]rä hXmakerå …ræ }rç (h\Xmakeh]já ubahjhïubhXL, though this is unlikely to be very portable. Cabal supports this with the rè …ré }rê (h\XL, though this is unlikely to be very portable. Cabal supports this with the h]jÚ ubjt)rë }rì (h\X:pkg-field:`build-type`h]jÚ hhhihjjwhl}rí (UreftypeX pkg-fieldjyˆjzX build-typerî U refdomainXcabalrï hq]hp]U refexplicit‰hn]ho]ht]j}j~j”j=uhvM_hx]rð hç)rñ }rò (h\jî hl}ró (hn]ho]rô (j…jï Xcabal-pkg-fieldrõ ehp]hq]ht]uh]jë hx]rö hX build-typer÷ …rø }rù (h\Uh]jñ ubahjhïubaubhX …rú }rû (h\X h]jÚ ubhç)rü }rý (h\X``Make``hl}rþ (hn]ho]hp]hq]ht]uh]jÚ hx]rÿ hXMaker …r }r (h\XMakeh]jü ubahjhïubhX and a trivial setup library r …r }r (h\X and a trivial setup library h]jÚ ubjH)r }r (h\XT`Distribution.Make <../release/cabal-latest/doc/API/Cabal/Distribution-Make.html>`__hl}r (UnameXDistribution.Makej‡X<../release/cabal-latest/doc/API/Cabal/Distribution-Make.htmlhq]hp]hn]ho]ht]uh]jÚ hx]r hXDistribution.Maker …r }r (h\XDistribution.Makeh]j ubahjjLubhX=, which simply parses the command line arguments and invokes r …r }r (h\X=, which simply parses the command line arguments and invokes h]jÚ ubhç)r }r (h\X``make``hl}r (hn]ho]hp]hq]ht]uh]jÚ hx]r hXmaker …r }r (h\Xmakeh]j ubahjhïubhX. Here r …r }r (h\X. Here h]jÚ ubhç)r }r (h\X ``Setup.hs``hl}r (hn]ho]hp]hq]ht]uh]jÚ hx]r hXSetup.hsr …r }r (h\XSetup.hsh]j ubahjhïubhX should look like this:r! …r" }r# (h\X should look like this:h]jÚ ubeubjÕ)r$ }r% (h\X+import Distribution.Make main = defaultMainh]jÖ hhhihjjØhl}r& (j‰jXhaskelljÚjÛhq]hp]hn]j}ho]ht]uhvMfhx]r' hX+import Distribution.Make main = defaultMainr( …r) }r* (h\Uh]j$ ubaubh…)r+ }r, (h\X1The root directory of the package should contain a ``configure`` script, and, after that has run, a ``Makefile`` with a default target that builds the package, plus targets ``install``, ``register``, ``unregister``, ``clean``, ``dist`` and ``docs``. Some options to commands are passed through as follows:h]jÖ hhhihjh‰hl}r- (hn]ho]hp]hq]ht]uhvMkhx]r. (hX3The root directory of the package should contain a r/ …r0 }r1 (h\X3The root directory of the package should contain a h]j+ ubhç)r2 }r3 (h\X ``configure``hl}r4 (hn]ho]hp]hq]ht]uh]j+ hx]r5 hX configurer6 …r7 }r8 (h\X configureh]j2 ubahjhïubhX$ script, and, after that has run, a r9 …r: }r; (h\X$ script, and, after that has run, a h]j+ ubhç)r< }r= (h\X ``Makefile``hl}r> (hn]ho]hp]hq]ht]uh]j+ hx]r? hXMakefiler@ …rA }rB (h\XMakefileh]j< ubahjhïubhX= with a default target that builds the package, plus targets rC …rD }rE (h\X= with a default target that builds the package, plus targets h]j+ ubhç)rF }rG (h\X ``install``hl}rH (hn]ho]hp]hq]ht]uh]j+ hx]rI hXinstallrJ …rK }rL (h\Xinstallh]jF ubahjhïubhX, rM …rN }rO (h\X, rP h]j+ ubhç)rQ }rR (h\X ``register``hl}rS (hn]ho]hp]hq]ht]uh]j+ hx]rT hXregisterrU …rV }rW (h\Xregisterh]jQ ubahjhïubhX, rX …rY }rZ (h\X, h]j+ ubhç)r[ }r\ (h\X``unregister``hl}r] (hn]ho]hp]hq]ht]uh]j+ hx]r^ hX unregisterr_ …r` }ra (h\X unregisterh]j[ ubahjhïubhX, rb …rc }rd (h\X, h]j+ ubhç)re }rf (h\X ``clean``hl}rg (hn]ho]hp]hq]ht]uh]j+ hx]rh hXcleanri …rj }rk (h\Xcleanh]je ubahjhïubhX, rl …rm }rn (h\jP h]j+ ubhç)ro }rp (h\X``dist``hl}rq (hn]ho]hp]hq]ht]uh]j+ hx]rr hXdistrs …rt }ru (h\Xdisth]jo ubahjhïubhX and rv …rw }rx (h\X and h]j+ ubhç)ry }rz (h\X``docs``hl}r{ (hn]ho]hp]hq]ht]uh]j+ hx]r| hXdocsr} …r~ }r (h\Xdocsh]jy ubahjhïubhX9. Some options to commands are passed through as follows:r€ …r }r‚ (h\X9. Some options to commands are passed through as follows:h]j+ ubeubh)rƒ }r„ (h\Uh]jÖ hhhihjh’hl}r… (h”X-hq]hp]hn]ho]ht]uhvMqhx]r† (h–)r‡ }rˆ (h\XyThe ``--with-hc-pkg``, ``--prefix``, ``--bindir``, ``--libdir``, ``--dynlibdir``, ``--datadir``, ``--libexecdir`` and ``--sysconfdir`` options to the ``configure`` command are passed on to the ``configure`` script. In addition the value of the ``--with-compiler`` option is passed in a ``--with-hc`` option and all options specified with ``--configure-option=`` are passed on. hl}r‰ (hn]ho]hp]hq]ht]uh]jƒ hx]rŠ h…)r‹ }rŒ (h\XxThe ``--with-hc-pkg``, ``--prefix``, ``--bindir``, ``--libdir``, ``--dynlibdir``, ``--datadir``, ``--libexecdir`` and ``--sysconfdir`` options to the ``configure`` command are passed on to the ``configure`` script. In addition the value of the ``--with-compiler`` option is passed in a ``--with-hc`` option and all options specified with ``--configure-option=`` are passed on.h]j‡ hhhihjh‰hl}r (hn]ho]hp]hq]ht]uhvMqhx]rŽ (hXThe r …r }r‘ (h\XThe h]j‹ ubhç)r’ }r“ (h\X``--with-hc-pkg``hl}r” (hn]ho]hp]hq]ht]uh]j‹ hx]r• hX --with-hc-pkgr– …r— }r˜ (h\X --with-hc-pkgh]j’ ubahjhïubhX, r™ …rš }r› (h\X, rœ h]j‹ ubhç)r }rž (h\X ``--prefix``hl}rŸ (hn]ho]hp]hq]ht]uh]j‹ hx]r  hX--prefixr¡ …r¢ }r£ (h\X--prefixh]j ubahjhïubhX, r¤ …r¥ }r¦ (h\X, h]j‹ ubhç)r§ }r¨ (h\X ``--bindir``hl}r© (hn]ho]hp]hq]ht]uh]j‹ hx]rª hX--bindirr« …r¬ }r­ (h\X--bindirh]j§ ubahjhïubhX, r® …r¯ }r° (h\X, h]j‹ ubhç)r± }r² (h\X ``--libdir``hl}r³ (hn]ho]hp]hq]ht]uh]j‹ hx]r´ hX--libdirrµ …r¶ }r· (h\X--libdirh]j± ubahjhïubhX, r¸ …r¹ }rº (h\X, h]j‹ ubhç)r» }r¼ (h\X``--dynlibdir``hl}r½ (hn]ho]hp]hq]ht]uh]j‹ hx]r¾ hX --dynlibdirr¿ …rÀ }rÁ (h\X --dynlibdirh]j» ubahjhïubhX, r …rà }rÄ (h\X, h]j‹ ubhç)rÅ }rÆ (h\X ``--datadir``hl}rÇ (hn]ho]hp]hq]ht]uh]j‹ hx]rÈ hX --datadirrÉ …rÊ }rË (h\X --datadirh]jÅ ubahjhïubhX, rÌ …rÍ }rÎ (h\jœ h]j‹ ubhç)rÏ }rÐ (h\X``--libexecdir``hl}rÑ (hn]ho]hp]hq]ht]uh]j‹ hx]rÒ hX --libexecdirrÓ …rÔ }rÕ (h\X --libexecdirh]jÏ ubahjhïubhX and rÖ …r× }rØ (h\X and h]j‹ ubhç)rÙ }rÚ (h\X``--sysconfdir``hl}rÛ (hn]ho]hp]hq]ht]uh]j‹ hx]rÜ hX --sysconfdirrÝ …rÞ }rß (h\X --sysconfdirh]jÙ ubahjhïubhX options to the rà …rá }râ (h\X options to the h]j‹ ubhç)rã }rä (h\X ``configure``hl}rå (hn]ho]hp]hq]ht]uh]j‹ hx]ræ hX configurerç …rè }ré (h\X configureh]jã ubahjhïubhX command are passed on to the rê …rë }rì (h\X command are passed on to the h]j‹ ubhç)rí }rî (h\X ``configure``hl}rï (hn]ho]hp]hq]ht]uh]j‹ hx]rð hX configurerñ …rò }ró (h\X configureh]jí ubahjhïubhX& script. In addition the value of the rô …rõ }rö (h\X& script. In addition the value of the h]j‹ ubhç)r÷ }rø (h\X``--with-compiler``hl}rù (hn]ho]hp]hq]ht]uh]j‹ hx]rú hX--with-compilerrû …rü }rý (h\X--with-compilerh]j÷ ubahjhïubhX option is passed in a rþ …rÿ }r(h\X option is passed in a h]j‹ ubhç)r}r(h\X ``--with-hc``hl}r(hn]ho]hp]hq]ht]uh]j‹ hx]rhX --with-hcr…r}r(h\X --with-hch]jubahjhïubhX' option and all options specified with r…r }r (h\X' option and all options specified with h]j‹ ubhç)r }r (h\X``--configure-option=``hl}r (hn]ho]hp]hq]ht]uh]j‹ hx]rhX--configure-option=r…r}r(h\X--configure-option=h]j ubahjhïubhX are passed on.r…r}r(h\X are passed on.h]j‹ ubeubahjh™ubh–)r}r(h\X±The ``--destdir`` option to the ``copy`` command becomes a setting of a ``destdir`` variable on the invocation of ``make copy``. The supplied ``Makefile`` should provide a ``copy`` target, which will probably look like this: .. code-block:: make copy : $(MAKE) install prefix=$(destdir)/$(prefix) \ bindir=$(destdir)/$(bindir) \ libdir=$(destdir)/$(libdir) \ dynlibdir=$(destdir)/$(dynlibdir) \ datadir=$(destdir)/$(datadir) \ libexecdir=$(destdir)/$(libexecdir) \ sysconfdir=$(destdir)/$(sysconfdir) \ hl}r(hn]ho]hp]hq]ht]uh]jƒ hx]r(h…)r}r(h\XàThe ``--destdir`` option to the ``copy`` command becomes a setting of a ``destdir`` variable on the invocation of ``make copy``. The supplied ``Makefile`` should provide a ``copy`` target, which will probably look like this:h]jhhhihjh‰hl}r(hn]ho]hp]hq]ht]uhvMxhx]r(hXThe r…r}r(h\XThe h]jubhç)r }r!(h\X ``--destdir``hl}r"(hn]ho]hp]hq]ht]uh]jhx]r#hX --destdirr$…r%}r&(h\X --destdirh]j ubahjhïubhX option to the r'…r(}r)(h\X option to the h]jubhç)r*}r+(h\X``copy``hl}r,(hn]ho]hp]hq]ht]uh]jhx]r-hXcopyr.…r/}r0(h\Xcopyh]j*ubahjhïubhX command becomes a setting of a r1…r2}r3(h\X command becomes a setting of a h]jubhç)r4}r5(h\X ``destdir``hl}r6(hn]ho]hp]hq]ht]uh]jhx]r7hXdestdirr8…r9}r:(h\Xdestdirh]j4ubahjhïubhX variable on the invocation of r;…r<}r=(h\X variable on the invocation of h]jubhç)r>}r?(h\X ``make copy``hl}r@(hn]ho]hp]hq]ht]uh]jhx]rAhX make copyrB…rC}rD(h\X make copyh]j>ubahjhïubhX. The supplied rE…rF}rG(h\X. The supplied h]jubhç)rH}rI(h\X ``Makefile``hl}rJ(hn]ho]hp]hq]ht]uh]jhx]rKhXMakefilerL…rM}rN(h\XMakefileh]jHubahjhïubhX should provide a rO…rP}rQ(h\X should provide a h]jubhç)rR}rS(h\X``copy``hl}rT(hn]ho]hp]hq]ht]uh]jhx]rUhXcopyrV…rW}rX(h\Xcopyh]jRubahjhïubhX, target, which will probably look like this:rY…rZ}r[(h\X, target, which will probably look like this:h]jubeubjÕ)r\}r](h\X˜copy : $(MAKE) install prefix=$(destdir)/$(prefix) \ bindir=$(destdir)/$(bindir) \ libdir=$(destdir)/$(libdir) \ dynlibdir=$(destdir)/$(dynlibdir) \ datadir=$(destdir)/$(datadir) \ libexecdir=$(destdir)/$(libexecdir) \ sysconfdir=$(destdir)/$(sysconfdir) \h]jhhhihjjØhl}r^(j‰jXmakejÚjÛhq]hp]hn]j}ho]ht]uhvM}hx]r_hX˜copy : $(MAKE) install prefix=$(destdir)/$(prefix) \ bindir=$(destdir)/$(bindir) \ libdir=$(destdir)/$(libdir) \ dynlibdir=$(destdir)/$(dynlibdir) \ datadir=$(destdir)/$(datadir) \ libexecdir=$(destdir)/$(libexecdir) \ sysconfdir=$(destdir)/$(sysconfdir) \r`…ra}rb(h\Uh]j\ubaubehjh™ubeubeubh–)rc}rd(h\XFinally, with the :pkg-field:`build-type` ``Custom``, you can also write your own setup script from scratch. It must conform to the interface described in the section on `building and installing packages `__, and you may use the Cabal library for all or part of the work. One option is to copy the source of ``Distribution.Simple``, and alter it for your needs. Good luck. h]j8 hhhihjh™hl}re(hn]ho]hp]hq]ht]uhvNhwhhx]rfh…)rg}rh(h\XŽFinally, with the :pkg-field:`build-type` ``Custom``, you can also write your own setup script from scratch. It must conform to the interface described in the section on `building and installing packages `__, and you may use the Cabal library for all or part of the work. One option is to copy the source of ``Distribution.Simple``, and alter it for your needs. Good luck.h]jchhhihjh‰hl}ri(hn]ho]hp]hq]ht]uhvMˆhx]rj(hXFinally, with the rk…rl}rm(h\XFinally, with the h]jgubjt)rn}ro(h\X:pkg-field:`build-type`h]jghhhihjjwhl}rp(UreftypeX pkg-fieldjyˆjzX build-typerqU refdomainXcabalrrhq]hp]U refexplicit‰hn]ho]ht]j}j~j”j=uhvMˆhx]rshç)rt}ru(h\jqhl}rv(hn]ho]rw(j…jrXcabal-pkg-fieldrxehp]hq]ht]uh]jnhx]ryhX build-typerz…r{}r|(h\Uh]jtubahjhïubaubhX …r}}r~(h\X h]jgubhç)r}r€(h\X ``Custom``hl}r(hn]ho]hp]hq]ht]uh]jghx]r‚hXCustomrƒ…r„}r…(h\XCustomh]jubahjhïubhXv, you can also write your own setup script from scratch. It must conform to the interface described in the section on r†…r‡}rˆ(h\Xv, you can also write your own setup script from scratch. It must conform to the interface described in the section on h]jgubjH)r‰}rŠ(h\X?`building and installing packages `__hl}r‹(UnameX building and installing packagesj‡Xinstalling-packages.htmlhq]hp]hn]ho]ht]uh]jghx]rŒhX building and installing packagesr…rŽ}r(h\X building and installing packagesh]j‰ubahjjLubhXe, and you may use the Cabal library for all or part of the work. One option is to copy the source of r…r‘}r’(h\Xe, and you may use the Cabal library for all or part of the work. One option is to copy the source of h]jgubhç)r“}r”(h\X``Distribution.Simple``hl}r•(hn]ho]hp]hq]ht]uh]jghx]r–hXDistribution.Simpler—…r˜}r™(h\XDistribution.Simpleh]j“ubahjhïubhX), and alter it for your needs. Good luck.rš…r›}rœ(h\X), and alter it for your needs. Good luck.h]jgubeubaubeubcdocutils.nodes comment r)rž}rŸ(h\X[-*- rst -*- This file contains commonly used link-references See also "extlinks" in conf.pyh]j! hhcdocutils.nodes reprunicode r Xdoc/references.incr¡…r¢}r£bhjUcommentr¤hl}r¥(jÚjÛhq]hp]hn]ho]ht]uhvKhwhhx]r¦hX[-*- rst -*- This file contains commonly used link-references See also "extlinks" in conf.pyr§…r¨}r©(h\Uh]jžubaubj©)rª}r«(h\X .. _`Package Versioning Policy`:haKh]j! hhj¢hjj¬hl}r¬(hq]hp]hn]ho]ht]jNUpackage-versioning-policyr­uhvM—hwhhx]ubj©)r®}r¯(h\X .. _PVP: http://pvp.haskell.org/haKh]j! hhj¢j·}r°hMjªshjj¬hl}r±(j‡Xhttp://pvp.haskell.org/r²hq]r³(Upvpr´j­ehp]hn]ho]ht]rµ(hhMeuhvM˜hwhj¿}r¶j­jªshx]ubj©)r·}r¸(h\X(.. _Hackage: http://hackage.haskell.org/haKh]j! hhj¢hjj¬hl}r¹(j‡Xhttp://hackage.haskell.org/rºhq]r»Uhackager¼ahp]hn]ho]ht]r½hauhvMšhwhhx]ubj©)r¾}r¿(h\X$.. _Haskell: http://www.haskell.org/h]j! hhj¢hjj¬hl}rÀ(j‡Xhttp://www.haskell.org/hq]rÁUhaskellrÂahp]hn]ho]ht]rÃhQauhvMœhwhhx]ubj©)rÄ}rÅ(h\X,.. _Haddock: http://www.haskell.org/haddock/haKh]j! hhj¢hjj¬hl}rÆ(j‡jû hq]rÇUhaddockrÈahp]hn]ho]ht]rÉh#auhvMžhwhhx]ubj©)rÊ}rË(h\X&.. _Alex: http://www.haskell.org/alex/haKh]j! hhj¢hjj¬hl}rÌ(j‡Xhttp://www.haskell.org/alex/rÍhq]rÎUalexrÏahp]hn]ho]ht]rÐh(auhvM hwhhx]ubj©)rÑ}rÒ(h\X(.. _Happy: http://www.haskell.org/happy/haKh]j! hhj¢hjj¬hl}rÓ(j‡Xhttp://www.haskell.org/happy/rÔhq]rÕUhappyrÖahp]hn]ho]ht]r×h.auhvM¢hwhhx]ubj©)rØ}rÙ(h\X*.. _Hoogle: http://www.haskell.org/hoogle/h]j! hhj¢hjj¬hl}rÚ(j‡Xhttp://www.haskell.org/hoogle/hq]rÛUhooglerÜahp]hn]ho]ht]rÝhauhvM¤hwhhx]ubj©)rÞ}rß(h\X9.. _HsColour: http://www.cs.york.ac.uk/fp/darcs/hscolour/h]j! hhj¢hjj¬hl}rà(j‡X+http://www.cs.york.ac.uk/fp/darcs/hscolour/hq]ráUhscolourrâahp]hn]ho]ht]rãhauhvM¦hwhhx]ubj©)rä}rå(h\X-.. _cpphs: http://projects.haskell.org/cpphs/haKh]j! hhj¢hjj¬hl}ræ(j‡X"http://projects.haskell.org/cpphs/rçhq]rèUcpphsréahp]hn]ho]ht]rêh-auhvM¨hwhhx]ubj©)rë}rì(h\X-.. _ABNF: https://tools.ietf.org/html/rfc5234haKh]j! hhj¢hjj¬hl}rí(j‡X#https://tools.ietf.org/html/rfc5234rîhq]rïUabnfrðahp]hn]ho]ht]rñhauhvMªhwhhx]ubj©)rò}ró(h\X<.. _Backpack: https://ghc.haskell.org/trac/ghc/wiki/BackpackhaKh]j! hhj¢hjj¬hl}rô(j‡X.https://ghc.haskell.org/trac/ghc/wiki/Backpackrõhq]röUbackpackr÷ahp]hn]ho]ht]røhSauhvM¬hwhhx]ubcdocutils.nodes rubric rù)rú}rû(h\X Footnotesrüh]j! hhhihjUrubricrýhl}rþ(hn]ho]hp]hq]ht]uhvM“hwhhx]rÿhX Footnotesr…r}r(h\jühhNhvNhwhh]júubaubcdocutils.nodes footnote r)r}r(h\X«Some packages (ab)use :pkg-field:`build-depends` on old-style builds, but this has a few major drawbacks: - using Nix-style builds it's considered an error if you depend on a exe-only package via build-depends: the solver will refuse it. - it may or may not place the executable on ``$PATH``. - it does not ensure the correct version of the package is installed, so you might end up overwriting versions with each other.h]j! hhhihjUfootnoterhl}r(UautorKhq]r Uold-style-build-tool-dependsr ahp]r Uid2r ahn]ho]ht]r haUdocnamerj~uhvM”hwhhx]r(cdocutils.nodes label r)r}r(h\Uh]jhhNhjUlabelrhl}r(hn]ho]hp]hq]ht]uhvNhwhhx]rhX1…r}r(h\UhhNhvNhwhh]jubaubh…)r}r(h\XiSome packages (ab)use :pkg-field:`build-depends` on old-style builds, but this has a few major drawbacks:rh]jhhhihjh‰hl}r(hn]ho]hp]hq]ht]uhvM–hx]r(hXSome packages (ab)use r…r}r(h\XSome packages (ab)use h]jubjt)r }r!(h\X:pkg-field:`build-depends`h]jhhhihjjwhl}r"(UreftypeX pkg-fieldjyˆjzX build-dependsr#U refdomainXcabalr$hq]hp]U refexplicit‰hn]ho]ht]j}j~j”j=uhvM–hx]r%hç)r&}r'(h\j#hl}r((hn]ho]r)(j…j$Xcabal-pkg-fieldr*ehp]hq]ht]uh]j hx]r+hX build-dependsr,…r-}r.(h\Uh]j&ubahjhïubaubhX9 on old-style builds, but this has a few major drawbacks:r/…r0}r1(h\X9 on old-style builds, but this has a few major drawbacks:h]jubeubj' )r2}r3(h\Uhl}r4(hn]ho]hp]hq]ht]uh]jhx]r5h)r6}r7(h\Uh]j2hhhihjh’hl}r8(h”X-hq]hp]hn]ho]ht]uhvM˜hx]r9(h–)r:}r;(h\Xusing Nix-style builds it's considered an error if you depend on a exe-only package via build-depends: the solver will refuse it.r<hl}r=(hn]ho]hp]hq]ht]uh]j6hx]r>h…)r?}r@(h\j<h]j:hhhihjh‰hl}rA(hn]ho]hp]hq]ht]uhvM˜hx]rBhXƒusing Nix-style builds it’s considered an error if you depend on a exe-only package via build-depends: the solver will refuse it.rC…rD}rE(h\j<h]j?ubaubahjh™ubh–)rF}rG(h\X4it may or may not place the executable on ``$PATH``.rHhl}rI(hn]ho]hp]hq]ht]uh]j6hx]rJh…)rK}rL(h\jHh]jFhhhihjh‰hl}rM(hn]ho]hp]hq]ht]uhvM™hx]rN(hX*it may or may not place the executable on rO…rP}rQ(h\X*it may or may not place the executable on h]jKubhç)rR}rS(h\X ``$PATH``hl}rT(hn]ho]hp]hq]ht]uh]jKhx]rUhX$PATHrV…rW}rX(h\X$PATHh]jRubahjhïubhX.…rY}rZ(h\X.h]jKubeubahjh™ubh–)r[}r\(h\X}it does not ensure the correct version of the package is installed, so you might end up overwriting versions with each other.r]hl}r^(hn]ho]hp]hq]ht]uh]j6hx]r_h…)r`}ra(h\j]h]j[hhhihjh‰hl}rb(hn]ho]hp]hq]ht]uhvMšhx]rchX}it does not ensure the correct version of the package is installed, so you might end up overwriting versions with each other.rd…re}rf(h\j]h]j`ubaubahjh™ubeubahjj* ubeubeubeubhhhij·}rgh7j³shjhkhl}rh(hn]ho]hp]hq]ri(jOj¶eht]rj(hh7euhvM«hwhj¿}rkj¶j³shx]rl(hz)rm}rn(h\XPackage descriptionsroh]hdhhhihjh~hl}rp(hn]ho]hp]hq]ht]uhvM«hwhhx]rqhXPackage descriptionsrr…rs}rt(h\johhNhvNhwhh]jmubaubh…)ru}rv(h\XuThe package description file must have a name ending in "``.cabal``". It must be a Unicode text file encoded using valid UTF-8. There must be exactly one such file in the directory. The first part of the name is usually the package name, and some of the tools that operate on Cabal packages require this; specifically, Hackage rejects packages which don't follow this rule.h]hdhhhihjh‰hl}rw(hn]ho]hp]hq]ht]uhvM­hwhhx]rx(hX;The package description file must have a name ending in “ry…rz}r{(h\X9The package description file must have a name ending in "hhNhvNhwhh]juubhç)r|}r}(h\X ``.cabal``hl}r~(hn]ho]hp]hq]ht]uh]juhx]rhX.cabalr€…r}r‚(h\X.cabalh]j|ubahjhïubhX6â€. It must be a Unicode text file encoded using valid UTF-8. There must be exactly one such file in the directory. The first part of the name is usually the package name, and some of the tools that operate on Cabal packages require this; specifically, Hackage rejects packages which don’t follow this rule.rƒ…r„}r…(h\X2". It must be a Unicode text file encoded using valid UTF-8. There must be exactly one such file in the directory. The first part of the name is usually the package name, and some of the tools that operate on Cabal packages require this; specifically, Hackage rejects packages which don't follow this rule.hhNhvNhwhh]juubeubh…)r†}r‡(h\X~In the package description file, lines whose first non-whitespace characters are "``--``" are treated as comments and ignored.h]hdhhhihjh‰hl}rˆ(hn]ho]hp]hq]ht]uhvM´hwhhx]r‰(hXTIn the package description file, lines whose first non-whitespace characters are “rŠ…r‹}rŒ(h\XRIn the package description file, lines whose first non-whitespace characters are "hhNhvNhwhh]j†ubhç)r}rŽ(h\X``--``hl}r(hn]ho]hp]hq]ht]uh]j†hx]rhX--r‘…r’}r“(h\X--h]jubahjhïubhX(†are treated as comments and ignored.r”…r•}r–(h\X&" are treated as comments and ignored.hhNhvNhwhh]j†ubeubh…)r—}r˜(h\XWThis file should contain of a number global property descriptions and several sections.r™h]hdhhhihjh‰hl}rš(hn]ho]hp]hq]ht]uhvM·hwhhx]r›hXWThis file should contain of a number global property descriptions and several sections.rœ…r}rž(h\j™hhNhvNhwhh]j—ubaubh)rŸ}r (h\Uh]hdhhhihjh’hl}r¡(h”X-hq]hp]hn]ho]ht]uhvMºhwhhx]r¢(h–)r£}r¤(h\X_The `package properties`_ describe the package as a whole, such as name, license, author, etc. h]jŸhhhihjh™hl}r¥(hn]ho]hp]hq]ht]uhvNhwhhx]r¦h…)r§}r¨(h\X^The `package properties`_ describe the package as a whole, such as name, license, author, etc.h]j£hhhihjh‰hl}r©(hn]ho]hp]hq]ht]uhvMºhx]rª(hXThe r«…r¬}r­(h\XThe h]j§ubjH)r®}r¯(h\X`package properties`_jKKh]j§hjjLhl}r°(UnameXpackage propertieshq]hp]hn]ho]ht]jNUpackage-propertiesr±uhx]r²hXpackage propertiesr³…r´}rµ(h\Xpackage propertiesh]j®ubaubhXE describe the package as a whole, such as name, license, author, etc.r¶…r·}r¸(h\XE describe the package as a whole, such as name, license, author, etc.h]j§ubeubaubh–)r¹}rº(h\X­Optionally, a number of *configuration flags* can be declared. These can be used to enable or disable certain features of a package. (see the section on `configurations`_). h]jŸhhhihjh™hl}r»(hn]ho]hp]hq]ht]uhvNhwhhx]r¼h…)r½}r¾(h\X¬Optionally, a number of *configuration flags* can be declared. These can be used to enable or disable certain features of a package. (see the section on `configurations`_).h]j¹hhhihjh‰hl}r¿(hn]ho]hp]hq]ht]uhvM½hx]rÀ(hXOptionally, a number of rÁ…rÂ}rÃ(h\XOptionally, a number of h]j½ubhÇ)rÄ}rÅ(h\X*configuration flags*hl}rÆ(hn]ho]hp]hq]ht]uh]j½hx]rÇhXconfiguration flagsrÈ…rÉ}rÊ(h\Xconfiguration flagsh]jÄubahjhÏubhXl can be declared. These can be used to enable or disable certain features of a package. (see the section on rË…rÌ}rÍ(h\Xl can be declared. These can be used to enable or disable certain features of a package. (see the section on h]j½ubjH)rÎ}rÏ(h\X`configurations`_jKKh]j½hjjLhl}rÐ(UnameXconfigurationsrÑhq]hp]hn]ho]ht]jNjwuhx]rÒhXconfigurationsrÓ…rÔ}rÕ(h\jÑh]jÎubaubhX).rÖ…r×}rØ(h\X).h]j½ubeubaubh–)rÙ}rÚ(h\XfThe (optional) library section specifies the `library`_ properties and relevant `build information`_. h]jŸhhhihjh™hl}rÛ(hn]ho]hp]hq]ht]uhvNhwhhx]rÜh…)rÝ}rÞ(h\XeThe (optional) library section specifies the `library`_ properties and relevant `build information`_.h]jÙhhhihjh‰hl}rß(hn]ho]hp]hq]ht]uhvMÁhx]rà(hX-The (optional) library section specifies the rá…râ}rã(h\X-The (optional) library section specifies the h]jÝubjH)rä}rå(h\X `library`_jKKh]jÝhjjLhl}ræ(UnameXlibraryrçhq]hp]hn]ho]ht]jNUlibraryrèuhx]réhXlibraryrê…rë}rì(h\jçh]jäubaubhX properties and relevant rí…rî}rï(h\X properties and relevant h]jÝubjH)rð}rñ(h\X`build information`_jKKh]jÝhjjLhl}rò(UnameXbuild informationhq]hp]hn]ho]ht]jNj uhx]róhXbuild informationrô…rõ}rö(h\Xbuild informationh]jðubaubhX.…r÷}rø(h\X.h]jÝubeubaubh–)rù}rú(h\X€Following is an arbitrary number of executable sections which describe an executable program and relevant `build information`_. h]jŸhhhihjh™hl}rû(hn]ho]hp]hq]ht]uhvNhwhhx]rüh…)rý}rþ(h\XFollowing is an arbitrary number of executable sections which describe an executable program and relevant `build information`_.h]jùhhhihjh‰hl}rÿ(hn]ho]hp]hq]ht]uhvMÄhx]r(hXjFollowing is an arbitrary number of executable sections which describe an executable program and relevant r…r}r(h\XjFollowing is an arbitrary number of executable sections which describe an executable program and relevant h]jýubjH)r}r(h\X`build information`_jKKh]jýhjjLhl}r(UnameXbuild informationhq]hp]hn]ho]ht]jNj uhx]rhXbuild informationr…r }r (h\Xbuild informationh]jubaubhX.…r }r (h\X.h]jýubeubaubeubh…)r }r(h\XEach section consists of a number of property descriptions in the form of field/value pairs, with a syntax roughly like mail message headers.rh]hdhhhihjh‰hl}r(hn]ho]hp]hq]ht]uhvMÇhwhhx]rhXEach section consists of a number of property descriptions in the form of field/value pairs, with a syntax roughly like mail message headers.r…r}r(h\jhhNhvNhwhh]j ubaubh)r}r(h\Uh]hdhhhihjh’hl}r(h”X-hq]hp]hn]ho]ht]uhvMÊhwhhx]r(h–)r}r(h\XLCase is not significant in field names, but is significant in field values. h]jhhhihjh™hl}r(hn]ho]hp]hq]ht]uhvNhwhhx]rh…)r}r(h\XKCase is not significant in field names, but is significant in field values.rh]jhhhihjh‰hl}r (hn]ho]hp]hq]ht]uhvMÊhx]r!hXKCase is not significant in field names, but is significant in field values.r"…r#}r$(h\jh]jubaubaubh–)r%}r&(h\XLTo continue a field value, indent the next line relative to the field name. h]jhhhihjh™hl}r'(hn]ho]hp]hq]ht]uhvNhwhhx]r(h…)r)}r*(h\XKTo continue a field value, indent the next line relative to the field name.r+h]j%hhhihjh‰hl}r,(hn]ho]hp]hq]ht]uhvMÍhx]r-hXKTo continue a field value, indent the next line relative to the field name.r.…r/}r0(h\j+h]j)ubaubaubh–)r1}r2(h\XeField names may be indented, but all field values in the same section must use the same indentation. h]jhhhihjh™hl}r3(hn]ho]hp]hq]ht]uhvNhwhhx]r4h…)r5}r6(h\XdField names may be indented, but all field values in the same section must use the same indentation.r7h]j1hhhihjh‰hl}r8(hn]ho]hp]hq]ht]uhvMÐhx]r9hXdField names may be indented, but all field values in the same section must use the same indentation.r:…r;}r<(h\j7h]j5ubaubaubh–)r=}r>(h\XhTabs are *not* allowed as indentation characters due to a missing standard interpretation of tab width. h]jhhhihjh™hl}r?(hn]ho]hp]hq]ht]uhvNhwhhx]r@h…)rA}rB(h\XgTabs are *not* allowed as indentation characters due to a missing standard interpretation of tab width.h]j=hhhihjh‰hl}rC(hn]ho]hp]hq]ht]uhvMÓhx]rD(hX Tabs are rE…rF}rG(h\X Tabs are h]jAubhÇ)rH}rI(h\X*not*hl}rJ(hn]ho]hp]hq]ht]uh]jAhx]rKhXnotrL…rM}rN(h\Xnoth]jHubahjhÏubhXY allowed as indentation characters due to a missing standard interpretation of tab width.rO…rP}rQ(h\XY allowed as indentation characters due to a missing standard interpretation of tab width.h]jAubeubaubh–)rR}rS(h\XPBefore Cabal 3.0, to get a blank line in a field value, use an indented "``.``" h]jhhhihjh™hl}rT(hn]ho]hp]hq]ht]uhvNhwhhx]rUh…)rV}rW(h\XOBefore Cabal 3.0, to get a blank line in a field value, use an indented "``.``"h]jRhhhihjh‰hl}rX(hn]ho]hp]hq]ht]uhvMÖhx]rY(hXKBefore Cabal 3.0, to get a blank line in a field value, use an indented “rZ…r[}r\(h\XIBefore Cabal 3.0, to get a blank line in a field value, use an indented "h]jVubhç)r]}r^(h\X``.``hl}r_(hn]ho]hp]hq]ht]uh]jVhx]r`hX.…ra}rb(h\X.h]j]ubahjhïubhX rc}rd(h\X"h]jVubeubaubeubh…)re}rf(h\XBThe syntax of the value depends on the field. Field types include:rgh]hdhhhihjh‰hl}rh(hn]ho]hp]hq]ht]uhvMØhwhhx]rihXBThe syntax of the value depends on the field. Field types include:rj…rk}rl(h\jghhNhvNhwhh]jeubaubj)rm}rn(h\Uh]hdhhhihjjhl}ro(hn]ho]hp]hq]ht]uhvNhwhhx]rp(j)rq}rr(h\Xk*token*, *filename*, *directory* Either a sequence of one or more non-space non-comma characters, or a quoted string in Haskell 98 lexical syntax. The latter can be used for escaping whitespace, for example: ``ghc-options: -Wall "-with-rtsopts=-T -I1"``. Unless otherwise stated, relative filenames and directories are interpreted from the package root directory.h]jmhhhihjj!hl}rs(hn]ho]hp]hq]ht]uhvMßhx]rt(j$)ru}rv(h\X *token*, *filename*, *directory*rwh]jqhhhihjj(hl}rx(hn]ho]hp]hq]ht]uhvMßhx]ry(hÇ)rz}r{(h\X*token*hl}r|(hn]ho]hp]hq]ht]uh]juhx]r}hXtokenr~…r}r€(h\Xtokenh]jzubahjhÏubhX, r…r‚}rƒ(h\X, r„h]juubhÇ)r…}r†(h\X *filename*hl}r‡(hn]ho]hp]hq]ht]uh]juhx]rˆhXfilenamer‰…rŠ}r‹(h\Xfilenameh]j…ubahjhÏubhX, rŒ…r}rŽ(h\j„h]juubhÇ)r}r(h\X *directory*hl}r‘(hn]ho]hp]hq]ht]uh]juhx]r’hX directoryr“…r”}r•(h\X directoryh]jubahjhÏubeubj<)r–}r—(h\Uhl}r˜(hn]ho]hp]hq]ht]uh]jqhx]r™h…)rš}r›(h\XJEither a sequence of one or more non-space non-comma characters, or a quoted string in Haskell 98 lexical syntax. The latter can be used for escaping whitespace, for example: ``ghc-options: -Wall "-with-rtsopts=-T -I1"``. Unless otherwise stated, relative filenames and directories are interpreted from the package root directory.h]j–hhhihjh‰hl}rœ(hn]ho]hp]hq]ht]uhvMÛhx]r(hX¯Either a sequence of one or more non-space non-comma characters, or a quoted string in Haskell 98 lexical syntax. The latter can be used for escaping whitespace, for example: rž…rŸ}r (h\X¯Either a sequence of one or more non-space non-comma characters, or a quoted string in Haskell 98 lexical syntax. The latter can be used for escaping whitespace, for example: h]jšubhç)r¡}r¢(h\X-``ghc-options: -Wall "-with-rtsopts=-T -I1"``hl}r£(hn]ho]hp]hq]ht]uh]jšhx]r¤hX)ghc-options: -Wall "-with-rtsopts=-T -I1"r¥…r¦}r§(h\X)ghc-options: -Wall "-with-rtsopts=-T -I1"h]j¡ubahjhïubhXn. Unless otherwise stated, relative filenames and directories are interpreted from the package root directory.r¨…r©}rª(h\Xn. Unless otherwise stated, relative filenames and directories are interpreted from the package root directory.h]jšubeubahjjVubeubj)r«}r¬(h\X@*freeform*, *URL*, *address* An arbitrary, uninterpreted string.h]jmhhhihjj!hl}r­(hn]ho]hp]hq]ht]uhvMáhwhhx]r®(j$)r¯}r°(h\X*freeform*, *URL*, *address*r±h]j«hhhihjj(hl}r²(hn]ho]hp]hq]ht]uhvMáhx]r³(hÇ)r´}rµ(h\X *freeform*hl}r¶(hn]ho]hp]hq]ht]uh]j¯hx]r·hXfreeformr¸…r¹}rº(h\Xfreeformh]j´ubahjhÏubhX, r»…r¼}r½(h\X, r¾h]j¯ubhÇ)r¿}rÀ(h\X*URL*hl}rÁ(hn]ho]hp]hq]ht]uh]j¯hx]rÂhXURLrÃ…rÄ}rÅ(h\XURLh]j¿ubahjhÏubhX, rÆ…rÇ}rÈ(h\j¾h]j¯ubhÇ)rÉ}rÊ(h\X *address*hl}rË(hn]ho]hp]hq]ht]uh]j¯hx]rÌhXaddressrÍ…rÎ}rÏ(h\Xaddressh]jÉubahjhÏubeubj<)rÐ}rÑ(h\Uhl}rÒ(hn]ho]hp]hq]ht]uh]j«hx]rÓh…)rÔ}rÕ(h\X#An arbitrary, uninterpreted string.rÖh]jÐhhhihjh‰hl}r×(hn]ho]hp]hq]ht]uhvMâhx]rØhX#An arbitrary, uninterpreted string.rÙ…rÚ}rÛ(h\jÖh]jÔubaubahjjVubeubj)rÜ}rÝ(h\XL*identifier* A letter followed by zero or more alphanumerics or underscores.h]jmhhhihjj!hl}rÞ(hn]ho]hp]hq]ht]uhvMãhwhhx]rß(j$)rà}rá(h\X *identifier*râh]jÜhhhihjj(hl}rã(hn]ho]hp]hq]ht]uhvMãhx]rähÇ)rå}ræ(h\jâhl}rç(hn]ho]hp]hq]ht]uh]jàhx]rèhX identifierré…rê}rë(h\X identifierh]jåubahjhÏubaubj<)rì}rí(h\Uhl}rî(hn]ho]hp]hq]ht]uh]jÜhx]rïh…)rð}rñ(h\X?A letter followed by zero or more alphanumerics or underscores.ròh]jìhhhihjh‰hl}ró(hn]ho]hp]hq]ht]uhvMähx]rôhX?A letter followed by zero or more alphanumerics or underscores.rõ…rö}r÷(h\jòh]jðubaubahjjVubeubj)rø}rù(h\X™*compiler* A compiler flavor (one of: ``GHC``, ``UHC`` or ``LHC``) followed by a version range. For example, ``GHC ==6.10.3``, or ``LHC >=0.6 && <0.8``. h]jmhhhihjj!hl}rú(hn]ho]hp]hq]ht]uhvMèhwhhx]rû(j$)rü}rý(h\X *compiler*rþh]jøhhhihjj(hl}rÿ(hn]ho]hp]hq]ht]uhvMèhx]rhÇ)r}r(h\jþhl}r(hn]ho]hp]hq]ht]uh]jühx]rhXcompilerr…r}r(h\Xcompilerh]jubahjhÏubaubj<)r}r (h\Uhl}r (hn]ho]hp]hq]ht]uh]jøhx]r h…)r }r (h\XA compiler flavor (one of: ``GHC``, ``UHC`` or ``LHC``) followed by a version range. For example, ``GHC ==6.10.3``, or ``LHC >=0.6 && <0.8``.h]jhhhihjh‰hl}r(hn]ho]hp]hq]ht]uhvMæhx]r(hXA compiler flavor (one of: r…r}r(h\XA compiler flavor (one of: h]j ubhç)r}r(h\X``GHC``hl}r(hn]ho]hp]hq]ht]uh]j hx]rhXGHCr…r}r(h\XGHCh]jubahjhïubhX, r…r}r(h\X, h]j ubhç)r}r(h\X``UHC``hl}r(hn]ho]hp]hq]ht]uh]j hx]r hXUHCr!…r"}r#(h\XUHCh]jubahjhïubhX or r$…r%}r&(h\X or h]j ubhç)r'}r((h\X``LHC``hl}r)(hn]ho]hp]hq]ht]uh]j hx]r*hXLHCr+…r,}r-(h\XLHCh]j'ubahjhïubhX,) followed by a version range. For example, r.…r/}r0(h\X,) followed by a version range. For example, h]j ubhç)r1}r2(h\X``GHC ==6.10.3``hl}r3(hn]ho]hp]hq]ht]uh]j hx]r4hX GHC ==6.10.3r5…r6}r7(h\X GHC ==6.10.3h]j1ubahjhïubhX, or r8…r9}r:(h\X, or h]j ubhç)r;}r<(h\X``LHC >=0.6 && <0.8``hl}r=(hn]ho]hp]hq]ht]uh]j hx]r>hXLHC >=0.6 && <0.8r?…r@}rA(h\XLHC >=0.6 && <0.8h]j;ubahjhïubhX.…rB}rC(h\X.h]j ubeubahjjVubeubeubh^)rD}rE(h\Uh]hdhhhihjhkhl}rF(hn]ho]hp]hq]rGUmodules-and-preprocessorsrHaht]rIh@auhvMëhwhhx]rJ(hz)rK}rL(h\XModules and preprocessorsrMh]jDhhhihjh~hl}rN(hn]ho]hp]hq]ht]uhvMëhwhhx]rOhXModules and preprocessorsrP…rQ}rR(h\jMhhNhvNhwhh]jKubaubh…)rS}rT(h\X<Haskell module names listed in the :pkg-field:`library:exposed-modules` and :pkg-field:`library:other-modules` fields may correspond to Haskell source files, i.e. with names ending in "``.hs``" or "``.lhs``", or to inputs for various Haskell preprocessors. The simple build infrastructure understands the extensions:h]jDhhhihjh‰hl}rU(hn]ho]hp]hq]ht]uhvMíhwhhx]rV(hX#Haskell module names listed in the rW…rX}rY(h\X#Haskell module names listed in the hhNhvNhwhh]jSubjt)rZ}r[(h\X$:pkg-field:`library:exposed-modules`h]jShhhihjjwhl}r\(UreftypeX pkg-fieldjyˆjzXexposed-modulesU refdomainXcabalr]hq]hp]U refexplicit‰hn]ho]ht]j}j~j”XlibraryuhvMíhx]r^hç)r_}r`(h\Xlibrary:exposed-moduleshl}ra(hn]ho]rb(j…j]Xcabal-pkg-fieldrcehp]hq]ht]uh]jZhx]rdhXlibrary:exposed-modulesre…rf}rg(h\Uh]j_ubahjhïubaubhX and rh…ri}rj(h\X and hhNhvNhwhh]jSubjt)rk}rl(h\X":pkg-field:`library:other-modules`h]jShhhihjjwhl}rm(UreftypeX pkg-fieldjyˆjzX other-modulesU refdomainXcabalrnhq]hp]U refexplicit‰hn]ho]ht]j}j~j”XlibraryuhvMíhx]rohç)rp}rq(h\Xlibrary:other-moduleshl}rr(hn]ho]rs(j…jnXcabal-pkg-fieldrtehp]hq]ht]uh]jkhx]ruhXlibrary:other-modulesrv…rw}rx(h\Uh]jpubahjhïubaubhXM fields may correspond to Haskell source files, i.e. with names ending in “ry…rz}r{(h\XK fields may correspond to Haskell source files, i.e. with names ending in "hhNhvNhwhh]jSubhç)r|}r}(h\X``.hs``hl}r~(hn]ho]hp]hq]ht]uh]jShx]rhX.hsr€…r}r‚(h\X.hsh]j|ubahjhïubhX †or “rƒ…r„}r…(h\X" or "hhNhvNhwhh]jSubhç)r†}r‡(h\X``.lhs``hl}rˆ(hn]ho]hp]hq]ht]uh]jShx]r‰hX.lhsrŠ…r‹}rŒ(h\X.lhsh]j†ubahjhïubhXpâ€, or to inputs for various Haskell preprocessors. The simple build infrastructure understands the extensions:r…rŽ}r(h\Xn", or to inputs for various Haskell preprocessors. The simple build infrastructure understands the extensions:hhNhvNhwhh]jSubeubh)r}r‘(h\Uh]jDhhhihjh’hl}r’(h”X-hq]hp]hn]ho]ht]uhvMóhwhhx]r“(h–)r”}r•(h\X"``.gc`` (:hackage-pkg:`greencard`)r–h]jhhhihjh™hl}r—(hn]ho]hp]hq]ht]uhvNhwhhx]r˜h…)r™}rš(h\j–h]j”hhhihjh‰hl}r›(hn]ho]hp]hq]ht]uhvMóhx]rœ(hç)r}rž(h\X``.gc``hl}rŸ(hn]ho]hp]hq]ht]uh]j™hx]r hX.gcr¡…r¢}r£(h\X.gch]jubahjhïubhX (r¤…r¥}r¦(h\X (h]j™ubjH)r§}r¨(h\X greencardr©hl}rª(UrefuriX,http://hackage.haskell.org/package/greencardhq]hp]hn]ho]ht]Uinternal‰uh]j™hx]r«hX greencardr¬…r­}r®(h\j©h]j§ubahjjLubhX)…r¯}r°(h\X)h]j™ubeubaubh–)r±}r²(h\X``.chs`` (:hackage-pkg:`c2hs`)r³h]jhhhihjh™hl}r´(hn]ho]hp]hq]ht]uhvNhwhhx]rµh…)r¶}r·(h\j³h]j±hhhihjh‰hl}r¸(hn]ho]hp]hq]ht]uhvMôhx]r¹(hç)rº}r»(h\X``.chs``hl}r¼(hn]ho]hp]hq]ht]uh]j¶hx]r½hX.chsr¾…r¿}rÀ(h\X.chsh]jºubahjhïubhX (rÁ…rÂ}rÃ(h\X (h]j¶ubjH)rÄ}rÅ(h\Xc2hsrÆhl}rÇ(UrefuriX'http://hackage.haskell.org/package/c2hshq]hp]hn]ho]ht]Uinternal‰uh]j¶hx]rÈhXc2hsrÉ…rÊ}rË(h\jÆh]jÄubahjjLubhX)…rÌ}rÍ(h\X)h]j¶ubeubaubh–)rÎ}rÏ(h\X ``.hsc`` (:hackage-pkg:`hsc2hs`)rÐh]jhhhihjh™hl}rÑ(hn]ho]hp]hq]ht]uhvNhwhhx]rÒh…)rÓ}rÔ(h\jÐh]jÎhhhihjh‰hl}rÕ(hn]ho]hp]hq]ht]uhvMõhx]rÖ(hç)r×}rØ(h\X``.hsc``hl}rÙ(hn]ho]hp]hq]ht]uh]jÓhx]rÚhX.hscrÛ…rÜ}rÝ(h\X.hsch]j×ubahjhïubhX (rÞ…rß}rà(h\X (h]jÓubjH)rá}râ(h\Xhsc2hsrãhl}rä(UrefuriX)http://hackage.haskell.org/package/hsc2hshq]hp]hn]ho]ht]Uinternal‰uh]jÓhx]råhXhsc2hsræ…rç}rè(h\jãh]jáubahjjLubhX)…ré}rê(h\X)h]jÓubeubaubh–)rë}rì(h\X``.y`` and ``.ly`` (happy_)ríh]jhhhihjh™hl}rî(hn]ho]hp]hq]ht]uhvNhwhhx]rïh…)rð}rñ(h\jíh]jëhhhihjh‰hl}rò(hn]ho]hp]hq]ht]uhvMöhx]ró(hç)rô}rõ(h\X``.y``hl}rö(hn]ho]hp]hq]ht]uh]jðhx]r÷hX.yrø…rù}rú(h\X.yh]jôubahjhïubhX and rû…rü}rý(h\X and h]jðubhç)rþ}rÿ(h\X``.ly``hl}r(hn]ho]hp]hq]ht]uh]jðhx]rhX.lyr…r}r(h\X.lyh]jþubahjhïubhX (r…r}r(h\X (h]jðubjH)r}r (h\Xhappy_jKKh]jðhjjLhl}r (UnameXhappyr j‡jÔhq]hp]hn]ho]ht]uhx]r hXhappyr …r}r(h\j h]jubaubhX)…r}r(h\X)h]jðubeubaubh–)r}r(h\X``.x`` (alex_)rh]jhhhihjh™hl}r(hn]ho]hp]hq]ht]uhvNhwhhx]rh…)r}r(h\jh]jhhhihjh‰hl}r(hn]ho]hp]hq]ht]uhvM÷hx]r(hç)r}r(h\X``.x``hl}r(hn]ho]hp]hq]ht]uh]jhx]rhX.xr…r }r!(h\X.xh]jubahjhïubhX (r"…r#}r$(h\X (h]jubjH)r%}r&(h\Xalex_jKKh]jhjjLhl}r'(UnameXalexr(j‡jÍhq]hp]hn]ho]ht]uhx]r)hXalexr*…r+}r,(h\j(h]j%ubaubhX)…r-}r.(h\X)h]jubeubaubh–)r/}r0(h\X``.cpphs`` (cpphs_) h]jhhhihjh™hl}r1(hn]ho]hp]hq]ht]uhvNhwhhx]r2h…)r3}r4(h\X``.cpphs`` (cpphs_)h]j/hhhihjh‰hl}r5(hn]ho]hp]hq]ht]uhvMøhx]r6(hç)r7}r8(h\X ``.cpphs``hl}r9(hn]ho]hp]hq]ht]uh]j3hx]r:hX.cpphsr;…r<}r=(h\X.cpphsh]j7ubahjhïubhX (r>…r?}r@(h\X (h]j3ubjH)rA}rB(h\Xcpphs_jKKh]j3hjjLhl}rC(UnameXcpphsrDj‡jçhq]hp]hn]ho]ht]uhx]rEhXcpphsrF…rG}rH(h\jDh]jAubaubhX)…rI}rJ(h\X)h]j3ubeubaubeubh…)rK}rL(h\XØWhen building, Cabal will automatically run the appropriate preprocessor and compile the Haskell module it produces. For the ``c2hs`` and ``hsc2hs`` preprocessors, Cabal will also automatically add, compile and link any C sources generated by the preprocessor (produced by ``hsc2hs``'s ``#def`` feature or ``c2hs``'s auto-generated wrapper functions). Dependencies on pre-processors are specified via the :pkg-field:`build-tools` or :pkg-field:`build-tool-depends` fields.h]jDhhhihjh‰hl}rM(hn]ho]hp]hq]ht]uhvMúhwhhx]rN(hX}When building, Cabal will automatically run the appropriate preprocessor and compile the Haskell module it produces. For the rO…rP}rQ(h\X}When building, Cabal will automatically run the appropriate preprocessor and compile the Haskell module it produces. For the hhNhvNhwhh]jKubhç)rR}rS(h\X``c2hs``hl}rT(hn]ho]hp]hq]ht]uh]jKhx]rUhXc2hsrV…rW}rX(h\Xc2hsh]jRubahjhïubhX and rY…rZ}r[(h\X and hhNhvNhwhh]jKubhç)r\}r](h\X ``hsc2hs``hl}r^(hn]ho]hp]hq]ht]uh]jKhx]r_hXhsc2hsr`…ra}rb(h\Xhsc2hsh]j\ubahjhïubhX} preprocessors, Cabal will also automatically add, compile and link any C sources generated by the preprocessor (produced by rc…rd}re(h\X} preprocessors, Cabal will also automatically add, compile and link any C sources generated by the preprocessor (produced by hhNhvNhwhh]jKubhç)rf}rg(h\X ``hsc2hs``hl}rh(hn]ho]hp]hq]ht]uh]jKhx]rihXhsc2hsrj…rk}rl(h\Xhsc2hsh]jfubahjhïubhX’s rm…rn}ro(h\X's hhNhvNhwhh]jKubhç)rp}rq(h\X``#def``hl}rr(hn]ho]hp]hq]ht]uh]jKhx]rshX#defrt…ru}rv(h\X#defh]jpubahjhïubhX feature or rw…rx}ry(h\X feature or hhNhvNhwhh]jKubhç)rz}r{(h\X``c2hs``hl}r|(hn]ho]hp]hq]ht]uh]jKhx]r}hXc2hsr~…r}r€(h\Xc2hsh]jzubahjhïubhX]’s auto-generated wrapper functions). Dependencies on pre-processors are specified via the r…r‚}rƒ(h\X['s auto-generated wrapper functions). Dependencies on pre-processors are specified via the hhNhvNhwhh]jKubjt)r„}r…(h\X:pkg-field:`build-tools`h]jKhhhihjjwhl}r†(UreftypeX pkg-fieldjyˆjzX build-toolsr‡U refdomainXcabalrˆhq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvMúhx]r‰hç)rŠ}r‹(h\j‡hl}rŒ(hn]ho]r(j…jˆXcabal-pkg-fieldrŽehp]hq]ht]uh]j„hx]rhX build-toolsr…r‘}r’(h\Uh]jŠubahjhïubaubhX or r“…r”}r•(h\X or hhNhvNhwhh]jKubjt)r–}r—(h\X:pkg-field:`build-tool-depends`h]jKhhhihjjwhl}r˜(UreftypeX pkg-fieldjyˆjzXbuild-tool-dependsr™U refdomainXcabalršhq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvMúhx]r›hç)rœ}r(h\j™hl}rž(hn]ho]rŸ(j…jšXcabal-pkg-fieldr ehp]hq]ht]uh]j–hx]r¡hXbuild-tool-dependsr¢…r£}r¤(h\Uh]jœubahjhïubaubhX fields.r¥…r¦}r§(h\X fields.hhNhvNhwhh]jKubeubh…)r¨}r©(h\XœSome fields take lists of values, which are optionally separated by commas, except for the :pkg-field:`build-depends` field, where the commas are mandatory.h]jDhhhihjh‰hl}rª(hn]ho]hp]hq]ht]uhvMhwhhx]r«(hX[Some fields take lists of values, which are optionally separated by commas, except for the r¬…r­}r®(h\X[Some fields take lists of values, which are optionally separated by commas, except for the hhNhvNhwhh]j¨ubjt)r¯}r°(h\X:pkg-field:`build-depends`h]j¨hhhihjjwhl}r±(UreftypeX pkg-fieldjyˆjzX build-dependsr²U refdomainXcabalr³hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvMhx]r´hç)rµ}r¶(h\j²hl}r·(hn]ho]r¸(j…j³Xcabal-pkg-fieldr¹ehp]hq]ht]uh]j¯hx]rºhX build-dependsr»…r¼}r½(h\Uh]jµubahjhïubaubhX' field, where the commas are mandatory.r¾…r¿}rÀ(h\X' field, where the commas are mandatory.hhNhvNhwhh]j¨ubeubh…)rÁ}rÂ(h\XvSome fields are marked as required. All others are optional, and unless otherwise specified have empty default values.rÃh]jDhhhihjh‰hl}rÄ(hn]ho]hp]hq]ht]uhvMhwhhx]rÅhXvSome fields are marked as required. All others are optional, and unless otherwise specified have empty default values.rÆ…rÇ}rÈ(h\jÃhhNhvNhwhh]jÁubaubeubh^)rÉ}rÊ(h\UhaKh]hdhhhihjhkhl}rË(hn]ho]hp]hq]rÌj±aht]rÍh3auhvM hwhhx]rÎ(hz)rÏ}rÐ(h\XPackage propertiesrÑh]jÉhhhihjh~hl}rÒ(hn]ho]hp]hq]ht]uhvM hwhhx]rÓhXPackage propertiesrÔ…rÕ}rÖ(h\jÑhhNhvNhwhh]jÏubaubh…)r×}rØ(h\XeThese fields may occur in the first top-level properties section and describe the package as a whole:rÙh]jÉhhhihjh‰hl}rÚ(hn]ho]hp]hq]ht]uhvM hwhhx]rÛhXeThese fields may occur in the first top-level properties section and describe the package as a whole:rÜ…rÝ}rÞ(h\jÙhhNhvNhwhh]j×ubaubj*)rß}rà(h\Uh]jÉhhNhjj-hl}rá(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)râ}rã(h\Uh]jÉhhNhjj2hl}rä(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldråj8jåuhvNhwhhx]ræ(j:)rç}rè(h\Xname: package-name (required)h]jâhhhihjj>hl}ré(hq]rêXpkg-field-namerëahp]hn]ho]ht]jB‰uhvM)hwhhx]rì(j*)rí}rî(h\Uh]jçhhhihjj-hl}rï(hq]hp]hn]ho]ht]Uentries]rð(jHXname; package.cabal fieldjëUNtrñauhvM)hwhhx]ubjJ)rò}ró(h\Xnamerôh]jçhhhihjjMhl}rõ(jÚjÛhq]hp]hn]ho]ht]uhvM)hwhhx]röhXnamer÷…rø}rù(h\UhhNhvNhwhh]jòubaubjS)rú}rû(h\jÌh]jçhhhihjjVhl}rü(jÚjÛhq]hp]hn]ho]ht]uhvM)hwhhx]rýhX: rþ…rÿ}r(h\UhhNhvNhwhh]júubaubjÒ)r}r(h\Xpackage-name (required)h]jçhhhihjjÕhl}r(jÚjÛhq]hp]hn]ho]ht]uhvM)hwhhx]rhXpackage-name (required)r…r}r(h\UhhNhvNhwhh]jubaubeubj[)r}r (h\Uh]jâhhhihjj^hl}r (hn]ho]hp]hq]ht]uhvM)hwhhx]r (h…)r }r (h\X;The unique name of the package, without the version number.rh]jhhhihjh‰hl}r(hn]ho]hp]hq]ht]uhvMhwhhx]rhX;The unique name of the package, without the version number.r…r}r(h\jhhNhvNhwhh]j ubaubh…)r}r(h\XÁAs pointed out in the section on `package descriptions`_, some tools require the package-name specified for this field to match the package description's file-name :file:`{package-name}.cabal`.h]jhhhihjh‰hl}r(hn]ho]hp]hq]ht]uhvMhwhhx]r(hX!As pointed out in the section on r…r}r(h\X!As pointed out in the section on hhNhvNhwhh]jubjH)r}r(h\X`package descriptions`_jKKh]jhjjLhl}r(UnameXpackage descriptionshq]hp]hn]ho]ht]jNjOuhx]rhXpackage descriptionsr…r }r!(h\Xpackage descriptionsh]jubaubhXn, some tools require the package-name specified for this field to match the package description’s file-name r"…r#}r$(h\Xl, some tools require the package-name specified for this field to match the package description's file-name hhNhvNhwhh]jubhç)r%}r&(h\Xpackage-name.cabalhl}r'(hq]hp]hn]ho]r(Xfiler)aUrolej)ht]uh]jhx]r*(hÇ)r+}r,(h\X{package-name}.cabalhl}r-(hn]ho]hp]hq]ht]uh]j%hx]r.hX package-namer/…r0}r1(h\Uh]j+ubahjhÏubhX.cabalr2…r3}r4(h\X.cabalh]j%ubehjhïubhX.…r5}r6(h\X.hhNhvNhwhh]jubeubh…)r7}r8(h\XPackage names are case-sensitive and must match the regular expression (i.e. alphanumeric "words" separated by dashes; each alphanumeric word must contain at least one letter): ``[[:digit:]]*[[:alpha:]][[:alnum:]]*(-[[:digit:]]*[[:alpha:]][[:alnum:]]*)*``.h]jhhhihjh‰hl}r9(hn]ho]hp]hq]ht]uhvMhwhhx]r:(hXµPackage names are case-sensitive and must match the regular expression (i.e. alphanumeric “words†separated by dashes; each alphanumeric word must contain at least one letter): r;…r<}r=(h\X±Package names are case-sensitive and must match the regular expression (i.e. alphanumeric "words" separated by dashes; each alphanumeric word must contain at least one letter): hhNhvNhwhh]j7ubhç)r>}r?(h\XN``[[:digit:]]*[[:alpha:]][[:alnum:]]*(-[[:digit:]]*[[:alpha:]][[:alnum:]]*)*``hl}r@(hn]ho]hp]hq]ht]uh]j7hx]rAhXJ[[:digit:]]*[[:alpha:]][[:alnum:]]*(-[[:digit:]]*[[:alpha:]][[:alnum:]]*)*rB…rC}rD(h\XJ[[:digit:]]*[[:alpha:]][[:alnum:]]*(-[[:digit:]]*[[:alpha:]][[:alnum:]]*)*h]j>ubahjhïubhX.…rE}rF(h\X.hhNhvNhwhh]j7ubeubh…)rG}rH(h\XOr, expressed in ABNF_:h]jhhhihjh‰hl}rI(hn]ho]hp]hq]ht]uhvMhwhhx]rJ(hXOr, expressed in rK…rL}rM(h\XOr, expressed in hhNhvNhwhh]jGubjH)rN}rO(h\XABNF_jKKh]jGhjjLhl}rP(UnameXABNFrQj‡jîhq]hp]hn]ho]ht]uhx]rRhXABNFrS…rT}rU(h\jQh]jNubaubhX:…rV}rW(h\X:hhNhvNhwhh]jGubeubjÕ)rX}rY(h\X¶package-name = package-name-part *("-" package-name-part) package-name-part = *DIGIT UALPHA *UALNUM UALNUM = UALPHA / DIGIT UALPHA = ... ; set of alphabetic Unicode code-pointsh]jhhhihjjØhl}rZ(j‰jXabnfjÚjÛhq]hp]hn]j}ho]ht]uhvMhwhhx]r[hX¶package-name = package-name-part *("-" package-name-part) package-name-part = *DIGIT UALPHA *UALNUM UALNUM = UALPHA / DIGIT UALPHA = ... ; set of alphabetic Unicode code-pointsr\…r]}r^(h\Uh]jXubaubhó)r_}r`(h\X4Hackage restricts package names to the ASCII subset.rah]jhhhihjhöhl}rb(hn]ho]hp]hq]ht]uhvNhwhhx]rch…)rd}re(h\jah]j_hhhihjh‰hl}rf(hn]ho]hp]hq]ht]uhvM(hx]rghX4Hackage restricts package names to the ASCII subset.rh…ri}rj(h\jah]jdubaubaubeubeubj*)rk}rl(h\Uh]jÉhhNhjj-hl}rm(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rn}ro(h\Uh]jÉhhNhjj2hl}rp(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrqj8jquhvNhwhhx]rr(j:)rs}rt(h\Xversion: numbers (required)h]jnhhhihjj>hl}ru(hq]rvXpkg-field-versionrwahp]hn]ho]ht]jB‰uhvM3hwhhx]rx(j*)ry}rz(h\Uh]jshhhihjj-hl}r{(hq]hp]hn]ho]ht]Uentries]r|(jHXversion; package.cabal fieldjwUNtr}auhvM3hwhhx]ubjJ)r~}r(h\Xversionr€h]jshhhihjjMhl}r(jÚjÛhq]hp]hn]ho]ht]uhvM3hwhhx]r‚hXversionrƒ…r„}r…(h\UhhNhvNhwhh]j~ubaubjS)r†}r‡(h\jÌh]jshhhihjjVhl}rˆ(jÚjÛhq]hp]hn]ho]ht]uhvM3hwhhx]r‰hX: rŠ…r‹}rŒ(h\UhhNhvNhwhh]j†ubaubjÒ)r}rŽ(h\Xnumbers (required)h]jshhhihjjÕhl}r(jÚjÛhq]hp]hn]ho]ht]uhvM3hwhhx]rhXnumbers (required)r‘…r’}r“(h\UhhNhvNhwhh]jubaubeubj[)r”}r•(h\Uh]jnhhhihjj^hl}r–(hn]ho]hp]hq]ht]uhvM3hwhhx]r—(h…)r˜}r™(h\X¯The package version number, usually consisting of a sequence of natural numbers separated by dots, i.e. as the regular expression ``[0-9]+([.][0-9]+)*`` or expressed in ABNF_:h]j”hhhihjh‰hl}rš(hn]ho]hp]hq]ht]uhvM,hwhhx]r›(hX‚The package version number, usually consisting of a sequence of natural numbers separated by dots, i.e. as the regular expression rœ…r}rž(h\X‚The package version number, usually consisting of a sequence of natural numbers separated by dots, i.e. as the regular expression hhNhvNhwhh]j˜ubhç)rŸ}r (h\X``[0-9]+([.][0-9]+)*``hl}r¡(hn]ho]hp]hq]ht]uh]j˜hx]r¢hX[0-9]+([.][0-9]+)*r£…r¤}r¥(h\X[0-9]+([.][0-9]+)*h]jŸubahjhïubhX or expressed in r¦…r§}r¨(h\X or expressed in hhNhvNhwhh]j˜ubjH)r©}rª(h\XABNF_jKKh]j˜hjjLhl}r«(UnameXABNFr¬j‡jîhq]hp]hn]ho]ht]uhx]r­hXABNFr®…r¯}r°(h\j¬h]j©ubaubhX:…r±}r²(h\X:hhNhvNhwhh]j˜ubeubjÕ)r³}r´(h\X(package-version = 1*DIGIT *("." 1*DIGIT)h]j”hhhihjjØhl}rµ(j‰jXabnfjÚjÛhq]hp]hn]j}ho]ht]uhvM0hwhhx]r¶hX(package-version = 1*DIGIT *("." 1*DIGIT)r·…r¸}r¹(h\Uh]j³ubaubeubeubj*)rº}r»(h\Uh]jÉhhNhjj-hl}r¼(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r½}r¾(h\Uh]jÉhhNhjj2hl}r¿(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrÀj8jÀuhvNhwhhx]rÁ(j:)rÂ}rÃ(h\Xcabal-version: x.y[.z]h]j½hhhihjj>hl}rÄ(hq]rÅXpkg-field-cabal-versionrÆahp]hn]ho]ht]jB‰uhvMwhwhhx]rÇ(j*)rÈ}rÉ(h\Uh]jÂhhhihjj-hl}rÊ(hq]hp]hn]ho]ht]Uentries]rË(jHX"cabal-version; package.cabal fieldjÆUNtrÌauhvMwhwhhx]ubjJ)rÍ}rÎ(h\X cabal-versionrÏh]jÂhhhihjjMhl}rÐ(jÚjÛhq]hp]hn]ho]ht]uhvMwhwhhx]rÑhX cabal-versionrÒ…rÓ}rÔ(h\UhhNhvNhwhh]jÍubaubjS)rÕ}rÖ(h\jÌh]jÂhhhihjjVhl}r×(jÚjÛhq]hp]hn]ho]ht]uhvMwhwhhx]rØhX: rÙ…rÚ}rÛ(h\UhhNhvNhwhh]jÕubaubjÒ)rÜ}rÝ(h\Xx.y[.z]h]jÂhhhihjjÕhl}rÞ(jÚjÛhq]hp]hn]ho]ht]uhvMwhwhhx]rßhXx.y[.z]rà…rá}râ(h\UhhNhvNhwhh]jÜubaubeubj[)rã}rä(h\Uh]j½hhhihjj^hl}rå(hn]ho]hp]hq]ht]uhvMwhwhhx]ræ(h…)rç}rè(h\X›The version of the Cabal specification that this package description uses. The Cabal specification does slowly evolve (see also :ref:`spec-history`), introducing new features and occasionally changing the meaning of existing features. By specifying which version of the specification you are using it enables programs which process the package description to know what syntax to expect and what each part means.h]jãhhhihjh‰hl}ré(hn]ho]hp]hq]ht]uhvM6hwhhx]rê(hX€The version of the Cabal specification that this package description uses. The Cabal specification does slowly evolve (see also rë…rì}rí(h\X€The version of the Cabal specification that this package description uses. The Cabal specification does slowly evolve (see also hhNhvNhwhh]jçubjt)rî}rï(h\X:ref:`spec-history`h]jçhhhihjjwhl}rð(UreftypeXrefjyˆjzX spec-historyrñU refdomainXstdròhq]hp]U refexplicit‰hn]ho]ht]j}j~uhvM6hx]rój€)rô}rõ(h\jñhl}rö(hn]ho]r÷(j…jòXstd-refrøehp]hq]ht]uh]jîhx]rùhX spec-historyrú…rû}rü(h\Uh]jôubahjj‹ubaubhX), introducing new features and occasionally changing the meaning of existing features. By specifying which version of the specification you are using it enables programs which process the package description to know what syntax to expect and what each part means.rý…rþ}rÿ(h\X), introducing new features and occasionally changing the meaning of existing features. By specifying which version of the specification you are using it enables programs which process the package description to know what syntax to expect and what each part means.hhNhvNhwhh]jçubeubh…)r}r(h\X/The version number you specify will affect both compatibility and behaviour. Most tools (including the Cabal library and the ``cabal`` program) understand a range of versions of the Cabal specification. Older tools will of course only work with older versions of the Cabal specification that was known at the time. Most of the time, tools that are too old will recognise this fact and produce a suitable error message. Likewise, ``cabal check`` will tell you whether the version number is sufficiently high for the features you use in the package description.h]jãhhhihjh‰hl}r(hn]ho]hp]hq]ht]uhvM>hwhhx]r(hX}The version number you specify will affect both compatibility and behaviour. Most tools (including the Cabal library and the r…r}r(h\X}The version number you specify will affect both compatibility and behaviour. Most tools (including the Cabal library and the hhNhvNhwhh]jubhç)r}r(h\X ``cabal``hl}r (hn]ho]hp]hq]ht]uh]jhx]r hXcabalr …r }r (h\Xcabalh]jubahjhïubhX' program) understand a range of versions of the Cabal specification. Older tools will of course only work with older versions of the Cabal specification that was known at the time. Most of the time, tools that are too old will recognise this fact and produce a suitable error message. Likewise, r…r}r(h\X' program) understand a range of versions of the Cabal specification. Older tools will of course only work with older versions of the Cabal specification that was known at the time. Most of the time, tools that are too old will recognise this fact and produce a suitable error message. Likewise, hhNhvNhwhh]jubhç)r}r(h\X``cabal check``hl}r(hn]ho]hp]hq]ht]uh]jhx]rhX cabal checkr…r}r(h\X cabal checkh]jubahjhïubhXs will tell you whether the version number is sufficiently high for the features you use in the package description.r…r}r(h\Xs will tell you whether the version number is sufficiently high for the features you use in the package description.hhNhvNhwhh]jubeubh…)r}r(h\XMAs for behaviour, new versions of the Cabal specification can change the meaning of existing syntax. This means if you want to take advantage of the new meaning or behaviour then you must specify the newer Cabal version. Tools are expected to use the meaning and behaviour appropriate to the version given in the package description.rh]jãhhhihjh‰hl}r(hn]ho]hp]hq]ht]uhvMHhwhhx]rhXMAs for behaviour, new versions of the Cabal specification can change the meaning of existing syntax. This means if you want to take advantage of the new meaning or behaviour then you must specify the newer Cabal version. Tools are expected to use the meaning and behaviour appropriate to the version given in the package description.r …r!}r"(h\jhhNhvNhwhh]jubaubh…)r#}r$(h\X®In particular, the syntax of package descriptions changed significantly with Cabal version 1.2 and the :pkg-field:`cabal-version` field is now required. Files written in the old syntax are still recognized, so if you require compatibility with very old Cabal versions then you may write your package description file using the old syntax. Please consult the user's guide of an older Cabal version for a description of that syntax.h]jãhhhihjh‰hl}r%(hn]ho]hp]hq]ht]uhvMNhwhhx]r&(hXgIn particular, the syntax of package descriptions changed significantly with Cabal version 1.2 and the r'…r(}r)(h\XgIn particular, the syntax of package descriptions changed significantly with Cabal version 1.2 and the hhNhvNhwhh]j#ubjt)r*}r+(h\X:pkg-field:`cabal-version`h]j#hhhihjjwhl}r,(UreftypeX pkg-fieldjyˆjzX cabal-versionr-U refdomainXcabalr.hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvMNhx]r/hç)r0}r1(h\j-hl}r2(hn]ho]r3(j…j.Xcabal-pkg-fieldr4ehp]hq]ht]uh]j*hx]r5hX cabal-versionr6…r7}r8(h\Uh]j0ubahjhïubaubhX/ field is now required. Files written in the old syntax are still recognized, so if you require compatibility with very old Cabal versions then you may write your package description file using the old syntax. Please consult the user’s guide of an older Cabal version for a description of that syntax.r9…r:}r;(h\X- field is now required. Files written in the old syntax are still recognized, so if you require compatibility with very old Cabal versions then you may write your package description file using the old syntax. Please consult the user's guide of an older Cabal version for a description of that syntax.hhNhvNhwhh]j#ubeubh…)r<}r=(h\X©Starting with ``cabal-version: 2.2`` this field is only valid if fully contained in the very first line of a package description and ought to adhere to the ABNF_ grammarh]jãhhhihjh‰hl}r>(hn]ho]hp]hq]ht]uhvMVhwhhx]r?(hXStarting with r@…rA}rB(h\XStarting with hhNhvNhwhh]j<ubhç)rC}rD(h\X``cabal-version: 2.2``hl}rE(hn]ho]hp]hq]ht]uh]j<hx]rFhXcabal-version: 2.2rG…rH}rI(h\Xcabal-version: 2.2h]jCubahjhïubhXx this field is only valid if fully contained in the very first line of a package description and ought to adhere to the rJ…rK}rL(h\Xx this field is only valid if fully contained in the very first line of a package description and ought to adhere to the hhNhvNhwhh]j<ubjH)rM}rN(h\XABNF_jKKh]j<hjjLhl}rO(UnameXABNFrPj‡jîhq]hp]hn]ho]ht]uhx]rQhXABNFrR…rS}rT(h\jPh]jMubaubhX grammarrU…rV}rW(h\X grammarhhNhvNhwhh]j<ubeubjÕ)rX}rY(h\XÚnewstyle-spec-version-decl = "cabal-version" *WS ":" *WS newstyle-spec-version *WS newstyle-spec-version = NUM "." NUM [ "." NUM ] NUM = DIGIT0 / DIGITP 1*DIGIT0 DIGIT0 = %x30-39 DIGITP = %x31-39 WS = %20h]jãhhhihjjØhl}rZ(j‰jXabnfjÚjÛhq]hp]hn]j}ho]ht]uhvMZhwhhx]r[hXÚnewstyle-spec-version-decl = "cabal-version" *WS ":" *WS newstyle-spec-version *WS newstyle-spec-version = NUM "." NUM [ "." NUM ] NUM = DIGIT0 / DIGITP 1*DIGIT0 DIGIT0 = %x30-39 DIGITP = %x31-39 WS = %20r\…r]}r^(h\Uh]jXubaubhó)r_}r`(h\XcFor package descriptions using a format prior to ``cabal-version: 1.12`` the legacy syntax resembling a version range syntax .. code-block:: cabal cabal-version: >= 1.10 needs to be used. This legacy syntax is supported up until ``cabal-version: >= 2.0`` it is however strongly recommended to avoid using the legacy syntax. See also :issue:`4899`.h]jãhhhihjhöhl}ra(hn]ho]hp]hq]ht]uhvNhwhhx]rb(h…)rc}rd(h\X|For package descriptions using a format prior to ``cabal-version: 1.12`` the legacy syntax resembling a version range syntaxh]j_hhhihjh‰hl}re(hn]ho]hp]hq]ht]uhvMhhx]rf(hX1For package descriptions using a format prior to rg…rh}ri(h\X1For package descriptions using a format prior to h]jcubhç)rj}rk(h\X``cabal-version: 1.12``hl}rl(hn]ho]hp]hq]ht]uh]jchx]rmhXcabal-version: 1.12rn…ro}rp(h\Xcabal-version: 1.12h]jjubahjhïubhX4 the legacy syntax resembling a version range syntaxrq…rr}rs(h\X4 the legacy syntax resembling a version range syntaxh]jcubeubjÕ)rt}ru(h\Xcabal-version: >= 1.10h]j_hhhihjjØhl}rv(j‰jXcabaljÚjÛhq]hp]hn]j}ho]ht]uhvMlhx]rwhXcabal-version: >= 1.10rx…ry}rz(h\Uh]jtubaubh…)r{}r|(h\Xneeds to be used.r}h]j_hhhihjh‰hl}r~(hn]ho]hp]hq]ht]uhvMphx]rhXneeds to be used.r€…r}r‚(h\j}h]j{ubaubh…)rƒ}r„(h\XŸThis legacy syntax is supported up until ``cabal-version: >= 2.0`` it is however strongly recommended to avoid using the legacy syntax. See also :issue:`4899`.h]j_hhhihjh‰hl}r…(hn]ho]hp]hq]ht]uhvMrhx]r†(hX)This legacy syntax is supported up until r‡…rˆ}r‰(h\X)This legacy syntax is supported up until h]jƒubhç)rŠ}r‹(h\X``cabal-version: >= 2.0``hl}rŒ(hn]ho]hp]hq]ht]uh]jƒhx]rhXcabal-version: >= 2.0rŽ…r}r(h\Xcabal-version: >= 2.0h]jŠubahjhïubhXO it is however strongly recommended to avoid using the legacy syntax. See also r‘…r’}r“(h\XO it is however strongly recommended to avoid using the legacy syntax. See also h]jƒubjH)r”}r•(h\X#4899hl}r–(UrefuriX,https://github.com/haskell/cabal/issues/4899hq]hp]hn]ho]ht]Uinternal‰uh]jƒhx]r—hX#4899r˜…r™}rš(h\X4899h]j”ubahjjLubhX.…r›}rœ(h\X.h]jƒubeubeubeubeubj*)r}rž(h\Uh]jÉhhhihjj-hl}rŸ(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r }r¡(h\Uh]jÉhhhihjj2hl}r¢(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr£j8j£uhvNhwhhx]r¤(j:)r¥}r¦(h\Xbuild-type: identifierh]j hhhihjj>hl}r§(hq]r¨Xpkg-field-build-typer©ahp]hn]ho]ht]jB‰uhvM¬hwhhx]rª(j*)r«}r¬(h\Uh]j¥hhhihjj-hl}r­(hq]hp]hn]ho]ht]Uentries]r®(jHXbuild-type; package.cabal fieldj©UNtr¯auhvM¬hwhhx]ubjJ)r°}r±(h\X build-typer²h]j¥hhhihjjMhl}r³(jÚjÛhq]hp]hn]ho]ht]uhvM¬hwhhx]r´hX build-typerµ…r¶}r·(h\UhhNhvNhwhh]j°ubaubjS)r¸}r¹(h\jÌh]j¥hhhihjjVhl}rº(jÚjÛhq]hp]hn]ho]ht]uhvM¬hwhhx]r»hX: r¼…r½}r¾(h\UhhNhvNhwhh]j¸ubaubjÒ)r¿}rÀ(h\X identifierh]j¥hhhihjjÕhl}rÁ(jÚjÛhq]hp]hn]ho]ht]uhvM¬hwhhx]rÂhX identifierrÃ…rÄ}rÅ(h\UhhNhvNhwhh]j¿ubaubeubj[)rÆ}rÇ(h\Uh]j hhhihjj^hl}rÈ(hn]ho]hp]hq]ht]uhvM¬hwhhx]rÉ(ja)rÊ}rË(h\Uh]jÆhhhihjjdhl}rÌ(hn]ho]hp]hq]ht]uhvNhwhhx]rÍjg)rÎ}rÏ(h\Uhl}rÐ(hn]ho]hp]hq]ht]uh]jÊhx]rÑ(jm)rÒ}rÓ(h\X Default valueh]jÎhhhihjjqhl}rÔ(hn]ho]hp]hq]ht]uhvKhx]rÕhX Default valuerÖ…r×}rØ(h\Uh]jÒubaubjw)rÙ}rÚ(h\Uhl}rÛ(hn]ho]hp]hq]ht]uh]jÎhx]rÜh…)rÝ}rÞ(h\XCustom or Simplehl}rß(hn]ho]hp]hq]ht]uh]jÙhx]rà(hç)rá}râ(h\X ``Custom``h]jÝhhhihjhïhl}rã(hn]ho]hp]hq]ht]uhvNhwhhx]rähXCustområ…ræ}rç(h\XCustomhhNhvNhwhh]jáubaubhX or rè…ré}rê(h\X or rëhhNhvNhwhh]jÝubhç)rì}rí(h\X ``Simple``h]jÝhhhihjhïhl}rî(hn]ho]hp]hq]ht]uhvNhwhhx]rïhXSimplerð…rñ}rò(h\XSimplehhNhvNhwhh]jìubaubehjh‰ubahjj„ubehjjjubaubh…)ró}rô(h\X%The type of build used by this package. Build types are the constructors of the `BuildType <../release/cabal-latest/doc/API/Cabal/Distribution-PackageDescription.html#t:BuildType>`__ type. This field is optional and when missing, its default value is inferred according to the following rules:h]jÆhhhihjh‰hl}rõ(hn]ho]hp]hq]ht]uhvM|hwhhx]rö(hXPThe type of build used by this package. Build types are the constructors of the r÷…rø}rù(h\XPThe type of build used by this package. Build types are the constructors of the hhNhvNhwhh]jóubjH)rú}rû(h\Xf`BuildType <../release/cabal-latest/doc/API/Cabal/Distribution-PackageDescription.html#t:BuildType>`__hl}rü(UnameX BuildTypej‡XV../release/cabal-latest/doc/API/Cabal/Distribution-PackageDescription.html#t:BuildTypehq]hp]hn]ho]ht]uh]jóhx]rýhX BuildTyperþ…rÿ}r(h\X BuildTypeh]júubahjjLubhXo type. This field is optional and when missing, its default value is inferred according to the following rules:r…r}r(h\Xo type. This field is optional and when missing, its default value is inferred according to the following rules:hhNhvNhwhh]jóubeubj' )r}r(h\Uh]jÆhhNhjj* hl}r(hn]ho]hp]hq]ht]uhvNhwhhx]rh)r}r (h\Uh]jhhhihjh’hl}r (h”X-hq]hp]hn]ho]ht]uhvM‚hx]r (h–)r }r (h\X¶When :pkg-field:`cabal-version` is set to ``2.2`` or higher, the default is ``Simple`` unless a :pkg-section:`custom-setup` exists, in which case the inferred default is ``Custom``. hl}r(hn]ho]hp]hq]ht]uh]jhx]rh…)r}r(h\XµWhen :pkg-field:`cabal-version` is set to ``2.2`` or higher, the default is ``Simple`` unless a :pkg-section:`custom-setup` exists, in which case the inferred default is ``Custom``.h]j hhhihjh‰hl}r(hn]ho]hp]hq]ht]uhvM‚hx]r(hXWhen r…r}r(h\XWhen h]jubjt)r}r(h\X:pkg-field:`cabal-version`h]jhhhihjjwhl}r(UreftypeX pkg-fieldjyˆjzX cabal-versionrU refdomainXcabalrhq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM‚hx]rhç)r}r(h\jhl}r(hn]ho]r (j…jXcabal-pkg-fieldr!ehp]hq]ht]uh]jhx]r"hX cabal-versionr#…r$}r%(h\Uh]jubahjhïubaubhX is set to r&…r'}r((h\X is set to h]jubhç)r)}r*(h\X``2.2``hl}r+(hn]ho]hp]hq]ht]uh]jhx]r,hX2.2r-…r.}r/(h\X2.2h]j)ubahjhïubhX or higher, the default is r0…r1}r2(h\X or higher, the default is h]jubhç)r3}r4(h\X ``Simple``hl}r5(hn]ho]hp]hq]ht]uh]jhx]r6hXSimpler7…r8}r9(h\XSimpleh]j3ubahjhïubhX unless a r:…r;}r<(h\X unless a h]jubjt)r=}r>(h\X:pkg-section:`custom-setup`h]jhhhihjjwhl}r?(UreftypeX pkg-sectionjyˆjzX custom-setupr@U refdomainXcabalrAhq]hp]U refexplicit‰hn]ho]ht]j}j~uhvM‚hx]rBhç)rC}rD(h\j@hl}rE(hn]ho]rF(j…jAXcabal-pkg-sectionrGehp]hq]ht]uh]j=hx]rHhX custom-setuprI…rJ}rK(h\Uh]jCubahjhïubaubhX/ exists, in which case the inferred default is rL…rM}rN(h\X/ exists, in which case the inferred default is h]jubhç)rO}rP(h\X ``Custom``hl}rQ(hn]ho]hp]hq]ht]uh]jhx]rRhXCustomrS…rT}rU(h\XCustomh]jOubahjhïubhX.…rV}rW(h\X.h]jubeubahjh™ubh–)rX}rY(h\XXFor lower :pkg-field:`cabal-version` values, the default is ``Custom`` unconditionally. hl}rZ(hn]ho]hp]hq]ht]uh]jhx]r[h…)r\}r](h\XWFor lower :pkg-field:`cabal-version` values, the default is ``Custom`` unconditionally.h]jXhhhihjh‰hl}r^(hn]ho]hp]hq]ht]uhvM†hx]r_(hX For lower r`…ra}rb(h\X For lower h]j\ubjt)rc}rd(h\X:pkg-field:`cabal-version`h]j\hhhihjjwhl}re(UreftypeX pkg-fieldjyˆjzX cabal-versionrfU refdomainXcabalrghq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM†hx]rhhç)ri}rj(h\jfhl}rk(hn]ho]rl(j…jgXcabal-pkg-fieldrmehp]hq]ht]uh]jchx]rnhX cabal-versionro…rp}rq(h\Uh]jiubahjhïubaubhX values, the default is rr…rs}rt(h\X values, the default is h]j\ubhç)ru}rv(h\X ``Custom``hl}rw(hn]ho]hp]hq]ht]uh]j\hx]rxhXCustomry…rz}r{(h\XCustomh]juubahjhïubhX unconditionally.r|…r}}r~(h\X unconditionally.h]j\ubeubahjh™ubeubaubh…)r}r€(h\X\If the build type is anything other than ``Custom``, then the ``Setup.hs`` file *must* be exactly the standardized content discussed below. This is because in these cases, ``cabal`` will ignore the ``Setup.hs`` file completely, whereas other methods of package management, such as ``runhaskell Setup.hs [CMD]``, still rely on the ``Setup.hs`` file.h]jÆhhhihjh‰hl}r(hn]ho]hp]hq]ht]uhvM‰hwhhx]r‚(hX)If the build type is anything other than rƒ…r„}r…(h\X)If the build type is anything other than hhNhvNhwhh]jubhç)r†}r‡(h\X ``Custom``hl}rˆ(hn]ho]hp]hq]ht]uh]jhx]r‰hXCustomrŠ…r‹}rŒ(h\XCustomh]j†ubahjhïubhX , then the r…rŽ}r(h\X , then the hhNhvNhwhh]jubhç)r}r‘(h\X ``Setup.hs``hl}r’(hn]ho]hp]hq]ht]uh]jhx]r“hXSetup.hsr”…r•}r–(h\XSetup.hsh]jubahjhïubhX file r—…r˜}r™(h\X file hhNhvNhwhh]jubhÇ)rš}r›(h\X*must*hl}rœ(hn]ho]hp]hq]ht]uh]jhx]rhXmustrž…rŸ}r (h\Xmusth]jšubahjhÏubhXV be exactly the standardized content discussed below. This is because in these cases, r¡…r¢}r£(h\XV be exactly the standardized content discussed below. This is because in these cases, hhNhvNhwhh]jubhç)r¤}r¥(h\X ``cabal``hl}r¦(hn]ho]hp]hq]ht]uh]jhx]r§hXcabalr¨…r©}rª(h\Xcabalh]j¤ubahjhïubhX will ignore the r«…r¬}r­(h\X will ignore the hhNhvNhwhh]jubhç)r®}r¯(h\X ``Setup.hs``hl}r°(hn]ho]hp]hq]ht]uh]jhx]r±hXSetup.hsr²…r³}r´(h\XSetup.hsh]j®ubahjhïubhXG file completely, whereas other methods of package management, such as rµ…r¶}r·(h\XG file completely, whereas other methods of package management, such as hhNhvNhwhh]jubhç)r¸}r¹(h\X``runhaskell Setup.hs [CMD]``hl}rº(hn]ho]hp]hq]ht]uh]jhx]r»hXrunhaskell Setup.hs [CMD]r¼…r½}r¾(h\Xrunhaskell Setup.hs [CMD]h]j¸ubahjhïubhX, still rely on the r¿…rÀ}rÁ(h\X, still rely on the hhNhvNhwhh]jubhç)rÂ}rÃ(h\X ``Setup.hs``hl}rÄ(hn]ho]hp]hq]ht]uh]jhx]rÅhXSetup.hsrÆ…rÇ}rÈ(h\XSetup.hsh]jÂubahjhïubhX file.rÉ…rÊ}rË(h\X file.hhNhvNhwhh]jubeubh…)rÌ}rÍ(h\X@For build type ``Simple``, the contents of ``Setup.hs`` must be:h]jÆhhhihjh‰hl}rÎ(hn]ho]hp]hq]ht]uhvMhwhhx]rÏ(hXFor build type rÐ…rÑ}rÒ(h\XFor build type hhNhvNhwhh]jÌubhç)rÓ}rÔ(h\X ``Simple``hl}rÕ(hn]ho]hp]hq]ht]uh]jÌhx]rÖhXSimpler×…rØ}rÙ(h\XSimpleh]jÓubahjhïubhX, the contents of rÚ…rÛ}rÜ(h\X, the contents of hhNhvNhwhh]jÌubhç)rÝ}rÞ(h\X ``Setup.hs``hl}rß(hn]ho]hp]hq]ht]uh]jÌhx]ràhXSetup.hsrá…râ}rã(h\XSetup.hsh]jÝubahjhïubhX must be:rä…rå}ræ(h\X must be:hhNhvNhwhh]jÌubeubjÕ)rç}rè(h\X-import Distribution.Simple main = defaultMainh]jÆhhhihjjØhl}ré(j‰jXhaskelljÚjÛhq]hp]hn]j}ho]ht]uhvM’hwhhx]rêhX-import Distribution.Simple main = defaultMainrë…rì}rí(h\Uh]jçubaubh…)rî}rï(h\X}For build type ``Configure`` (see the section on `system-dependent parameters`_ below), the contents of ``Setup.hs`` must be:h]jÆhhhihjh‰hl}rð(hn]ho]hp]hq]ht]uhvM—hwhhx]rñ(hXFor build type rò…ró}rô(h\XFor build type hhNhvNhwhh]jîubhç)rõ}rö(h\X ``Configure``hl}r÷(hn]ho]hp]hq]ht]uh]jîhx]røhX Configurerù…rú}rû(h\X Configureh]jõubahjhïubhX (see the section on rü…rý}rþ(h\X (see the section on hhNhvNhwhh]jîubjH)rÿ}r(h\X`system-dependent parameters`_jKKh]jîhjjLhl}r(UnameXsystem-dependent parametershq]hp]hn]ho]ht]jNj™uhx]rhXsystem-dependent parametersr…r}r(h\Xsystem-dependent parametersh]jÿubaubhX below), the contents of r…r}r(h\X below), the contents of hhNhvNhwhh]jîubhç)r }r (h\X ``Setup.hs``hl}r (hn]ho]hp]hq]ht]uh]jîhx]r hXSetup.hsr …r}r(h\XSetup.hsh]j ubahjhïubhX must be:r…r}r(h\X must be:hhNhvNhwhh]jîubeubjÕ)r}r(h\XHimport Distribution.Simple main = defaultMainWithHooks autoconfUserHooksh]jÆhhhihjjØhl}r(j‰jXhaskelljÚjÛhq]hp]hn]j}ho]ht]uhvM›hwhhx]rhXHimport Distribution.Simple main = defaultMainWithHooks autoconfUserHooksr…r}r(h\Uh]jubaubh…)r}r(h\XrFor build type ``Make`` (see the section on `more complex packages`_ below), the contents of ``Setup.hs`` must be:h]jÆhhhihjh‰hl}r(hn]ho]hp]hq]ht]uhvM hwhhx]r(hXFor build type r…r}r (h\XFor build type hhNhvNhwhh]jubhç)r!}r"(h\X``Make``hl}r#(hn]ho]hp]hq]ht]uh]jhx]r$hXMaker%…r&}r'(h\XMakeh]j!ubahjhïubhX (see the section on r(…r)}r*(h\X (see the section on hhNhvNhwhh]jubjH)r+}r,(h\X`more complex packages`_jKKh]jhjjLhl}r-(UnameXmore complex packageshq]hp]hn]ho]ht]jNj% uhx]r.hXmore complex packagesr/…r0}r1(h\Xmore complex packagesh]j+ubaubhX below), the contents of r2…r3}r4(h\X below), the contents of hhNhvNhwhh]jubhç)r5}r6(h\X ``Setup.hs``hl}r7(hn]ho]hp]hq]ht]uh]jhx]r8hXSetup.hsr9…r:}r;(h\XSetup.hsh]j5ubahjhïubhX must be:r<…r=}r>(h\X must be:hhNhvNhwhh]jubeubjÕ)r?}r@(h\X+import Distribution.Make main = defaultMainh]jÆhhhihjjØhl}rA(j‰jXhaskelljÚjÛhq]hp]hn]j}ho]ht]uhvM£hwhhx]rBhX+import Distribution.Make main = defaultMainrC…rD}rE(h\Uh]j?ubaubh…)rF}rG(h\XwFor build type ``Custom``, the file ``Setup.hs`` can be customized, and will be used both by ``cabal`` and other tools.h]jÆhhhihjh‰hl}rH(hn]ho]hp]hq]ht]uhvM¨hwhhx]rI(hXFor build type rJ…rK}rL(h\XFor build type hhNhvNhwhh]jFubhç)rM}rN(h\X ``Custom``hl}rO(hn]ho]hp]hq]ht]uh]jFhx]rPhXCustomrQ…rR}rS(h\XCustomh]jMubahjhïubhX , the file rT…rU}rV(h\X , the file hhNhvNhwhh]jFubhç)rW}rX(h\X ``Setup.hs``hl}rY(hn]ho]hp]hq]ht]uh]jFhx]rZhXSetup.hsr[…r\}r](h\XSetup.hsh]jWubahjhïubhX- can be customized, and will be used both by r^…r_}r`(h\X- can be customized, and will be used both by hhNhvNhwhh]jFubhç)ra}rb(h\X ``cabal``hl}rc(hn]ho]hp]hq]ht]uh]jFhx]rdhXcabalre…rf}rg(h\Xcabalh]jaubahjhïubhX and other tools.rh…ri}rj(h\X and other tools.hhNhvNhwhh]jFubeubh…)rk}rl(h\X;For most packages, the build type ``Simple`` is sufficient.h]jÆhhhihjh‰hl}rm(hn]ho]hp]hq]ht]uhvM«hwhhx]rn(hX"For most packages, the build type ro…rp}rq(h\X"For most packages, the build type hhNhvNhwhh]jkubhç)rr}rs(h\X ``Simple``hl}rt(hn]ho]hp]hq]ht]uh]jkhx]ruhXSimplerv…rw}rx(h\XSimpleh]jrubahjhïubhX is sufficient.ry…rz}r{(h\X is sufficient.hhNhvNhwhh]jkubeubeubeubj*)r|}r}(h\Uh]jÉhhhihjj-hl}r~(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r}r€(h\Uh]jÉhhhihjj2hl}r(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr‚j8j‚uhvNhwhhx]rƒ(j:)r„}r…(h\Xlicense: SPDX expressionh]jhhhihjj>hl}r†(hq]r‡Xpkg-field-licenserˆahp]hn]ho]ht]jB‰uhvMöhwhhx]r‰(j*)rŠ}r‹(h\Uh]j„hhhihjj-hl}rŒ(hq]hp]hn]ho]ht]Uentries]r(jHXlicense; package.cabal fieldjˆUNtrŽauhvMöhwhhx]ubjJ)r}r(h\Xlicenser‘h]j„hhhihjjMhl}r’(jÚjÛhq]hp]hn]ho]ht]uhvMöhwhhx]r“hXlicenser”…r•}r–(h\UhhNhvNhwhh]jubaubjS)r—}r˜(h\jÌh]j„hhhihjjVhl}r™(jÚjÛhq]hp]hn]ho]ht]uhvMöhwhhx]ršhX: r›…rœ}r(h\UhhNhvNhwhh]j—ubaubjÒ)rž}rŸ(h\XSPDX expressionh]j„hhhihjjÕhl}r (jÚjÛhq]hp]hn]ho]ht]uhvMöhwhhx]r¡hXSPDX expressionr¢…r£}r¤(h\UhhNhvNhwhh]jžubaubeubj[)r¥}r¦(h\Uh]jhhhihjj^hl}r§(hn]ho]hp]hq]ht]uhvMöhwhhx]r¨(ja)r©}rª(h\Uh]j¥hhhihjjdhl}r«(hn]ho]hp]hq]ht]uhvNhwhhx]r¬jg)r­}r®(h\Uhl}r¯(hn]ho]hp]hq]ht]uh]j©hx]r°(jm)r±}r²(h\X Default valueh]j­hhhihjjqhl}r³(hn]ho]hp]hq]ht]uhvKhx]r´hX Default valuerµ…r¶}r·(h\Uh]j±ubaubjw)r¸}r¹(h\Uhl}rº(hn]ho]hp]hq]ht]uh]j­hx]r»h…)r¼}r½(h\XNONEhl}r¾(hn]ho]hp]hq]ht]uh]j¸hx]r¿hç)rÀ}rÁ(h\X``NONE``h]j¼hhhihjhïhl}rÂ(hn]ho]hp]hq]ht]uhvNhwhhx]rÃhXNONErÄ…rÅ}rÆ(h\XNONEhhNhvNhwhh]jÀubaubahjh‰ubahjj„ubehjjjubaubh…)rÇ}rÈ(h\X<The type of license under which this package is distributed.rÉh]j¥hhhihjh‰hl}rÊ(hn]ho]hp]hq]ht]uhvM±hwhhx]rËhX<The type of license under which this package is distributed.rÌ…rÍ}rÎ(h\jÉhhNhvNhwhh]jÇubaubh…)rÏ}rÐ(h\XkStarting with ``cabal-version: 2.2`` the ``license`` field takes a (case-sensitive) SPDX expression such ash]j¥hhhihjh‰hl}rÑ(hn]ho]hp]hq]ht]uhvM³hwhhx]rÒ(hXStarting with rÓ…rÔ}rÕ(h\XStarting with hhNhvNhwhh]jÏubhç)rÖ}r×(h\X``cabal-version: 2.2``hl}rØ(hn]ho]hp]hq]ht]uh]jÏhx]rÙhXcabal-version: 2.2rÚ…rÛ}rÜ(h\Xcabal-version: 2.2h]jÖubahjhïubhX the rÝ…rÞ}rß(h\X the hhNhvNhwhh]jÏubhç)rà}rá(h\X ``license``hl}râ(hn]ho]hp]hq]ht]uh]jÏhx]rãhXlicenserä…rå}ræ(h\Xlicenseh]jàubahjhïubhX7 field takes a (case-sensitive) SPDX expression such asrç…rè}ré(h\X7 field takes a (case-sensitive) SPDX expression such ashhNhvNhwhh]jÏubeubjÕ)rê}rë(h\X1license: Apache-2.0 AND (MIT OR GPL-2.0-or-later)h]j¥hhhihjjØhl}rì(j‰jXcabaljÚjÛhq]hp]hn]j}ho]ht]uhvM¶hwhhx]ríhX1license: Apache-2.0 AND (MIT OR GPL-2.0-or-later)rî…rï}rð(h\Uh]jêubaubh…)rñ}rò(h\X^See `SPDX IDs: How to use `__ for more examples of SPDX expressions.h]j¥hhhihjh‰hl}ró(hn]ho]hp]hq]ht]uhvMºhwhhx]rô(hXSee rõ…rö}r÷(h\XSee hhNhvNhwhh]jñubjH)rø}rù(h\X3`SPDX IDs: How to use `__hl}rú(UnameXSPDX IDs: How to usej‡Xhttps://spdx.org/ids-howhq]hp]hn]ho]ht]uh]jñhx]rûhXSPDX IDs: How to userü…rý}rþ(h\XSPDX IDs: How to useh]jøubahjjLubhX' for more examples of SPDX expressions.rÿ…r}r(h\X' for more examples of SPDX expressions.hhNhvNhwhh]jñubeubh…)r}r(h\X­The version of the `list of SPDX license identifiers `__ is a function of the :pkg-field:`cabal-version` value as defined in the following table:h]j¥hhhihjh‰hl}r(hn]ho]hp]hq]ht]uhvM½hwhhx]r(hXThe version of the r…r}r(h\XThe version of the hhNhvNhwhh]jubjH)r }r (h\XA`list of SPDX license identifiers `__hl}r (UnameX list of SPDX license identifiersj‡Xhttps://spdx.org/licenses/hq]hp]hn]ho]ht]uh]jhx]r hX list of SPDX license identifiersr …r}r(h\X list of SPDX license identifiersh]j ubahjjLubhX is a function of the r…r}r(h\X is a function of the hhNhvNhwhh]jubjt)r}r(h\X:pkg-field:`cabal-version`h]jhhhihjjwhl}r(UreftypeX pkg-fieldjyˆjzX cabal-versionrU refdomainXcabalrhq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM½hx]rhç)r}r(h\jhl}r(hn]ho]r(j…jXcabal-pkg-fieldrehp]hq]ht]uh]jhx]rhX cabal-versionr…r }r!(h\Uh]jubahjhïubaubhX) value as defined in the following table:r"…r#}r$(h\X) value as defined in the following table:hhNhvNhwhh]jubeubcdocutils.nodes table r%)r&}r'(h\Uh]j¥hhhihjUtabler(hl}r)(hn]ho]hp]hq]ht]uhvNhwhhx]r*cdocutils.nodes tgroup r+)r,}r-(h\Uhl}r.(hq]hp]hn]ho]ht]UcolsKuh]j&hx]r/(cdocutils.nodes colspec r0)r1}r2(h\Uhl}r3(hq]hp]hn]ho]ht]UcolwidthKuh]j,hx]hjUcolspecr4ubj0)r5}r6(h\Uhl}r7(hq]hp]hn]ho]ht]UcolwidthKuh]j,hx]hjj4ubcdocutils.nodes thead r8)r9}r:(h\Uhl}r;(hn]ho]hp]hq]ht]uh]j,hx]r<cdocutils.nodes row r=)r>}r?(h\Uhl}r@(hn]ho]hp]hq]ht]uh]j9hx]rA(cdocutils.nodes entry rB)rC}rD(h\Uhl}rE(hn]ho]hp]hq]ht]uh]j>hx]rFh…)rG}rH(h\XCabal specification versionrIh]jChhhihjh‰hl}rJ(hn]ho]hp]hq]ht]uhvMÃhx]rKhXCabal specification versionrL…rM}rN(h\jIh]jGubaubahjUentryrOubjB)rP}rQ(h\Uhl}rR(hn]ho]hp]hq]ht]uh]j>hx]rSh…)rT}rU(h\XSPDX license list versionrVh]jPhhhihjh‰hl}rW(hn]ho]hp]hq]ht]uhvMÃhx]rXhXSPDX license list versionrY…rZ}r[(h\jVh]jTubaubahjjOubehjUrowr\ubahjUtheadr]ubcdocutils.nodes tbody r^)r_}r`(h\Uhl}ra(hn]ho]hp]hq]ht]uh]j,hx]rb(j=)rc}rd(h\Uhl}re(hn]ho]hp]hq]ht]uh]j_hx]rf(jB)rg}rh(h\Uhl}ri(hn]ho]hp]hq]ht]uh]jchx]rjh…)rk}rl(h\X``cabal-version: 2.2``rmh]jghhhihjh‰hl}rn(hn]ho]hp]hq]ht]uhvMÇhx]rohç)rp}rq(h\jmhl}rr(hn]ho]hp]hq]ht]uh]jkhx]rshXcabal-version: 2.2rt…ru}rv(h\Xcabal-version: 2.2h]jpubahjhïubaubahjjOubjB)rw}rx(h\Uhl}ry(hn]ho]hp]hq]ht]uh]jchx]rzh…)r{}r|(h\X``3.0 2017-12-28``r}h]jwhhhihjh‰hl}r~(hn]ho]hp]hq]ht]uhvMÇhx]rhç)r€}r(h\j}hl}r‚(hn]ho]hp]hq]ht]uh]j{hx]rƒhX3.0 2017-12-28r„…r…}r†(h\X3.0 2017-12-28h]j€ubahjhïubaubahjjOubehjj\ubj=)r‡}rˆ(h\Uhl}r‰(hn]ho]hp]hq]ht]uh]j_hx]rŠ(jB)r‹}rŒ(h\Uhl}r(hn]ho]hp]hq]ht]uh]j‡hx]rŽh…)r}r(h\X``cabal-version: 2.4``r‘h]j‹hhhihjh‰hl}r’(hn]ho]hp]hq]ht]uhvMÉhx]r“hç)r”}r•(h\j‘hl}r–(hn]ho]hp]hq]ht]uh]jhx]r—hXcabal-version: 2.4r˜…r™}rš(h\Xcabal-version: 2.4h]j”ubahjhïubaubahjjOubjB)r›}rœ(h\Uhl}r(hn]ho]hp]hq]ht]uh]j‡hx]ržh…)rŸ}r (h\X``3.2 2018-07-10``r¡h]j›hhhihjh‰hl}r¢(hn]ho]hp]hq]ht]uhvMÉhx]r£hç)r¤}r¥(h\j¡hl}r¦(hn]ho]hp]hq]ht]uh]jŸhx]r§hX3.2 2018-07-10r¨…r©}rª(h\X3.2 2018-07-10h]j¤ubahjhïubaubahjjOubehjj\ubehjUtbodyr«ubehjUtgroupr¬ubaubh…)r­}r®(h\X**Pre-SPDX Legacy Identifiers**r¯h]j¥hhhihjh‰hl}r°(hn]ho]hp]hq]ht]uhvMÌhwhhx]r±cdocutils.nodes strong r²)r³}r´(h\j¯hl}rµ(hn]ho]hp]hq]ht]uh]j­hx]r¶hXPre-SPDX Legacy Identifiersr·…r¸}r¹(h\XPre-SPDX Legacy Identifiersh]j³ubahjUstrongrºubaubh…)r»}r¼(h\X‚The license identifier in the table below are defined for ``cabal-version: 2.0`` and previous versions of the Cabal specification.h]j¥hhhihjh‰hl}r½(hn]ho]hp]hq]ht]uhvMÎhwhhx]r¾(hX:The license identifier in the table below are defined for r¿…rÀ}rÁ(h\X:The license identifier in the table below are defined for hhNhvNhwhh]j»ubhç)rÂ}rÃ(h\X``cabal-version: 2.0``hl}rÄ(hn]ho]hp]hq]ht]uh]j»hx]rÅhXcabal-version: 2.0rÆ…rÇ}rÈ(h\Xcabal-version: 2.0h]jÂubahjhïubhX2 and previous versions of the Cabal specification.rÉ…rÊ}rË(h\X2 and previous versions of the Cabal specification.hhNhvNhwhh]j»ubeubj%)rÌ}rÍ(h\Uh]j¥hhhihjj(hl}rÎ(hn]ho]hp]hq]ht]uhvNhwhhx]rÏj+)rÐ}rÑ(h\Uhl}rÒ(hq]hp]hn]ho]ht]UcolsKuh]jÌhx]rÓ(j0)rÔ}rÕ(h\Uhl}rÖ(hq]hp]hn]ho]ht]UcolwidthKuh]jÐhx]hjj4ubj0)r×}rØ(h\Uhl}rÙ(hq]hp]hn]ho]ht]UcolwidthKuh]jÐhx]hjj4ubj8)rÚ}rÛ(h\Uhl}rÜ(hn]ho]hp]hq]ht]uh]jÐhx]rÝj=)rÞ}rß(h\Uhl}rà(hn]ho]hp]hq]ht]uh]jÚhx]rá(jB)râ}rã(h\Uhl}rä(hn]ho]hp]hq]ht]uh]jÞhx]råh…)ræ}rç(h\X:pkg-field:`license` identifierh]jâhhhihjh‰hl}rè(hn]ho]hp]hq]ht]uhvMÓhx]ré(jt)rê}rë(h\X:pkg-field:`license`h]jæhhhihjjwhl}rì(UreftypeX pkg-fieldjyˆjzXlicenseríU refdomainXcabalrîhq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvMÔhx]rïhç)rð}rñ(h\jíhl}rò(hn]ho]ró(j…jîXcabal-pkg-fieldrôehp]hq]ht]uh]jêhx]rõhXlicenserö…r÷}rø(h\Uh]jðubahjhïubaubhX identifierrù…rú}rû(h\X identifierh]jæubeubahjjOubjB)rü}rý(h\Uhl}rþ(hn]ho]hp]hq]ht]uh]jÞhx]rÿh…)r}r(h\XNoterh]jühhhihjh‰hl}r(hn]ho]hp]hq]ht]uhvMÓhx]rhXNoter…r}r(h\jh]jubaubahjjOubehjj\ubahjj]ubj^)r}r (h\Uhl}r (hn]ho]hp]hq]ht]uh]jÐhx]r (j=)r }r (h\Uhl}r(hn]ho]hp]hq]ht]uh]jhx]r(jB)r}r(h\Uhl}r(hn]ho]hp]hq]ht]uh]j hx]rh…)r}r(h\X``GPL`` ``GPL-2`` ``GPL-3``h]jhhhihjh‰hl}r(hn]ho]hp]hq]ht]uhvM×hx]r(hç)r}r(h\X``GPL``hl}r(hn]ho]hp]hq]ht]uh]jhx]rhXGPLr…r}r(h\XGPLh]jubahjhïubhX …r}r (h\X h]jubhç)r!}r"(h\X ``GPL-2``hl}r#(hn]ho]hp]hq]ht]uh]jhx]r$hXGPL-2r%…r&}r'(h\XGPL-2h]j!ubahjhïubhX …r(}r)(h\X h]jubhç)r*}r+(h\X ``GPL-3``hl}r,(hn]ho]hp]hq]ht]uh]jhx]r-hXGPL-3r.…r/}r0(h\XGPL-3h]j*ubahjhïubeubahjjOubjB)r1}r2(h\Uhl}r3(hn]ho]hp]hq]ht]uh]j hx]hjjOubehjj\ubj=)r4}r5(h\Uhl}r6(hn]ho]hp]hq]ht]uh]jhx]r7(jB)r8}r9(h\Uhl}r:(hn]ho]hp]hq]ht]uh]j4hx]r;h…)r<}r=(h\X ``LGPL`` ``LGPL-2.1`` ``LGPL-3``h]j8hhhihjh‰hl}r>(hn]ho]hp]hq]ht]uhvMÛhx]r?(hç)r@}rA(h\X``LGPL``hl}rB(hn]ho]hp]hq]ht]uh]j<hx]rChXLGPLrD…rE}rF(h\XLGPLh]j@ubahjhïubhX …rG}rH(h\X h]j<ubhç)rI}rJ(h\X ``LGPL-2.1``hl}rK(hn]ho]hp]hq]ht]uh]j<hx]rLhXLGPL-2.1rM…rN}rO(h\XLGPL-2.1h]jIubahjhïubhX …rP}rQ(h\X h]j<ubhç)rR}rS(h\X ``LGPL-3``hl}rT(hn]ho]hp]hq]ht]uh]j<hx]rUhXLGPL-3rV…rW}rX(h\XLGPL-3h]jRubahjhïubeubahjjOubjB)rY}rZ(h\Uhl}r[(hn]ho]hp]hq]ht]uh]j4hx]hjjOubehjj\ubj=)r\}r](h\Uhl}r^(hn]ho]hp]hq]ht]uh]jhx]r_(jB)r`}ra(h\Uhl}rb(hn]ho]hp]hq]ht]uh]j\hx]rch…)rd}re(h\X``AGPL`` ``AGPL-3``h]j`hhhihjh‰hl}rf(hn]ho]hp]hq]ht]uhvMßhx]rg(hç)rh}ri(h\X``AGPL``hl}rj(hn]ho]hp]hq]ht]uh]jdhx]rkhXAGPLrl…rm}rn(h\XAGPLh]jhubahjhïubhX …ro}rp(h\X h]jdubhç)rq}rr(h\X ``AGPL-3``hl}rs(hn]ho]hp]hq]ht]uh]jdhx]rthXAGPL-3ru…rv}rw(h\XAGPL-3h]jqubahjhïubeubahjjOubjB)rx}ry(h\Uhl}rz(hn]ho]hp]hq]ht]uh]j\hx]r{h…)r|}r}(h\X since 1.18r~h]jxhhhihjh‰hl}r(hn]ho]hp]hq]ht]uhvMßhx]r€hX since 1.18r…r‚}rƒ(h\j~h]j|ubaubahjjOubehjj\ubj=)r„}r…(h\Uhl}r†(hn]ho]hp]hq]ht]uh]jhx]r‡(jB)rˆ}r‰(h\Uhl}rŠ(hn]ho]hp]hq]ht]uh]j„hx]r‹h…)rŒ}r(h\X``BSD2``rŽh]jˆhhhihjh‰hl}r(hn]ho]hp]hq]ht]uhvMâhx]rhç)r‘}r’(h\jŽhl}r“(hn]ho]hp]hq]ht]uh]jŒhx]r”hXBSD2r•…r–}r—(h\XBSD2h]j‘ubahjhïubaubahjjOubjB)r˜}r™(h\Uhl}rš(hn]ho]hp]hq]ht]uh]j„hx]r›h…)rœ}r(h\X since 1.20ržh]j˜hhhihjh‰hl}rŸ(hn]ho]hp]hq]ht]uhvMâhx]r hX since 1.20r¡…r¢}r£(h\jžh]jœubaubahjjOubehjj\ubj=)r¤}r¥(h\Uhl}r¦(hn]ho]hp]hq]ht]uh]jhx]r§(jB)r¨}r©(h\Uhl}rª(hn]ho]hp]hq]ht]uh]j¤hx]r«h…)r¬}r­(h\X``BSD3``r®h]j¨hhhihjh‰hl}r¯(hn]ho]hp]hq]ht]uhvMähx]r°hç)r±}r²(h\j®hl}r³(hn]ho]hp]hq]ht]uh]j¬hx]r´hXBSD3rµ…r¶}r·(h\XBSD3h]j±ubahjhïubaubahjjOubjB)r¸}r¹(h\Uhl}rº(hn]ho]hp]hq]ht]uh]j¤hx]hjjOubehjj\ubj=)r»}r¼(h\Uhl}r½(hn]ho]hp]hq]ht]uh]jhx]r¾(jB)r¿}rÀ(h\Uhl}rÁ(hn]ho]hp]hq]ht]uh]j»hx]rÂh…)rÃ}rÄ(h\X``MIT``rÅh]j¿hhhihjh‰hl}rÆ(hn]ho]hp]hq]ht]uhvMæhx]rÇhç)rÈ}rÉ(h\jÅhl}rÊ(hn]ho]hp]hq]ht]uh]jÃhx]rËhXMITrÌ…rÍ}rÎ(h\XMITh]jÈubahjhïubaubahjjOubjB)rÏ}rÐ(h\Uhl}rÑ(hn]ho]hp]hq]ht]uh]j»hx]hjjOubehjj\ubj=)rÒ}rÓ(h\Uhl}rÔ(hn]ho]hp]hq]ht]uh]jhx]rÕ(jB)rÖ}r×(h\Uhl}rØ(hn]ho]hp]hq]ht]uh]jÒhx]rÙh…)rÚ}rÛ(h\X``ISC``rÜh]jÖhhhihjh‰hl}rÝ(hn]ho]hp]hq]ht]uhvMèhx]rÞhç)rß}rà(h\jÜhl}rá(hn]ho]hp]hq]ht]uh]jÚhx]râhXISCrã…rä}rå(h\XISCh]jßubahjhïubaubahjjOubjB)ræ}rç(h\Uhl}rè(hn]ho]hp]hq]ht]uh]jÒhx]réh…)rê}rë(h\X since 1.22rìh]jæhhhihjh‰hl}rí(hn]ho]hp]hq]ht]uhvMèhx]rîhX since 1.22rï…rð}rñ(h\jìh]jêubaubahjjOubehjj\ubj=)rò}ró(h\Uhl}rô(hn]ho]hp]hq]ht]uh]jhx]rõ(jB)rö}r÷(h\Uhl}rø(hn]ho]hp]hq]ht]uh]jòhx]rùh…)rú}rû(h\X ``MPL-2.0``rüh]jöhhhihjh‰hl}rý(hn]ho]hp]hq]ht]uhvMêhx]rþhç)rÿ}r(h\jühl}r(hn]ho]hp]hq]ht]uh]júhx]rhXMPL-2.0r…r}r(h\XMPL-2.0h]jÿubahjhïubaubahjjOubjB)r}r(h\Uhl}r(hn]ho]hp]hq]ht]uh]jòhx]r h…)r }r (h\X since 1.20r h]jhhhihjh‰hl}r (hn]ho]hp]hq]ht]uhvMêhx]rhX since 1.20r…r}r(h\j h]j ubaubahjjOubehjj\ubj=)r}r(h\Uhl}r(hn]ho]hp]hq]ht]uh]jhx]r(jB)r}r(h\Uhl}r(hn]ho]hp]hq]ht]uh]jhx]rh…)r}r(h\X``Apache`` ``Apache-2.0``h]jhhhihjh‰hl}r(hn]ho]hp]hq]ht]uhvMìhx]r(hç)r}r(h\X ``Apache``hl}r (hn]ho]hp]hq]ht]uh]jhx]r!hXApacher"…r#}r$(h\XApacheh]jubahjhïubhX …r%}r&(h\X h]jubhç)r'}r((h\X``Apache-2.0``hl}r)(hn]ho]hp]hq]ht]uh]jhx]r*hX Apache-2.0r+…r,}r-(h\X Apache-2.0h]j'ubahjhïubeubahjjOubjB)r.}r/(h\Uhl}r0(hn]ho]hp]hq]ht]uh]jhx]hjjOubehjj\ubj=)r1}r2(h\Uhl}r3(hn]ho]hp]hq]ht]uh]jhx]r4(jB)r5}r6(h\Uhl}r7(hn]ho]hp]hq]ht]uh]j1hx]r8h…)r9}r:(h\X``PublicDomain``r;h]j5hhhihjh‰hl}r<(hn]ho]hp]hq]ht]uhvMïhx]r=hç)r>}r?(h\j;hl}r@(hn]ho]hp]hq]ht]uh]j9hx]rAhX PublicDomainrB…rC}rD(h\X PublicDomainh]j>ubahjhïubaubahjjOubjB)rE}rF(h\Uhl}rG(hn]ho]hp]hq]ht]uh]j1hx]hjjOubehjj\ubj=)rH}rI(h\Uhl}rJ(hn]ho]hp]hq]ht]uh]jhx]rK(jB)rL}rM(h\Uhl}rN(hn]ho]hp]hq]ht]uh]jHhx]rOh…)rP}rQ(h\X``AllRightsReserved``rRh]jLhhhihjh‰hl}rS(hn]ho]hp]hq]ht]uhvMñhx]rThç)rU}rV(h\jRhl}rW(hn]ho]hp]hq]ht]uh]jPhx]rXhXAllRightsReservedrY…rZ}r[(h\XAllRightsReservedh]jUubahjhïubaubahjjOubjB)r\}r](h\Uhl}r^(hn]ho]hp]hq]ht]uh]jHhx]hjjOubehjj\ubj=)r_}r`(h\Uhl}ra(hn]ho]hp]hq]ht]uh]jhx]rb(jB)rc}rd(h\Uhl}re(hn]ho]hp]hq]ht]uh]j_hx]rfh…)rg}rh(h\X``OtherLicense``rih]jchhhihjh‰hl}rj(hn]ho]hp]hq]ht]uhvMóhx]rkhç)rl}rm(h\jihl}rn(hn]ho]hp]hq]ht]uh]jghx]rohX OtherLicenserp…rq}rr(h\X OtherLicenseh]jlubahjhïubaubahjjOubjB)rs}rt(h\Uhl}ru(hn]ho]hp]hq]ht]uh]j_hx]hjjOubehjj\ubehjj«ubehjj¬ubaubeubeubj*)rv}rw(h\Uh]jÉhhhihjj-hl}rx(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)ry}rz(h\Uh]jÉhhhihjj2hl}r{(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr|j8j|uhvNhwhhx]r}(j:)r~}r(h\Xlicense-file: filenameh]jyhhhihjj>hl}r€(hq]rXpkg-field-license-filer‚ahp]hn]ho]ht]jB‰uhvMúhwhhx]rƒ(j*)r„}r…(h\Uh]j~hhhihjj-hl}r†(hq]hp]hn]ho]ht]Uentries]r‡(jHX!license-file; package.cabal fieldj‚UNtrˆauhvMúhwhhx]ubjJ)r‰}rŠ(h\X license-filer‹h]j~hhhihjjMhl}rŒ(jÚjÛhq]hp]hn]ho]ht]uhvMúhwhhx]rhX license-filerŽ…r}r(h\UhhNhvNhwhh]j‰ubaubjS)r‘}r’(h\jÌh]j~hhhihjjVhl}r“(jÚjÛhq]hp]hn]ho]ht]uhvMúhwhhx]r”hX: r•…r–}r—(h\UhhNhvNhwhh]j‘ubaubjÒ)r˜}r™(h\Xfilenameh]j~hhhihjjÕhl}rš(jÚjÛhq]hp]hn]ho]ht]uhvMúhwhhx]r›hXfilenamerœ…r}rž(h\UhhNhvNhwhh]j˜ubaubeubj[)rŸ}r (h\Uh]jyhhhihjj^hl}r¡(hn]ho]hp]hq]ht]uhvMúhwhhx]r¢h…)r£}r¤(h\XSee :pkg-field:`license-files`.h]jŸhhhihjh‰hl}r¥(hn]ho]hp]hq]ht]uhvMùhwhhx]r¦(hXSee r§…r¨}r©(h\XSee hhNhvNhwhh]j£ubjt)rª}r«(h\X:pkg-field:`license-files`h]j£hhhihjjwhl}r¬(UreftypeX pkg-fieldjyˆjzX license-filesr­U refdomainXcabalr®hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvMùhx]r¯hç)r°}r±(h\j­hl}r²(hn]ho]r³(j…j®Xcabal-pkg-fieldr´ehp]hq]ht]uh]jªhx]rµhX license-filesr¶…r·}r¸(h\Uh]j°ubahjhïubaubhX.…r¹}rº(h\X.hhNhvNhwhh]j£ubeubaubeubj*)r»}r¼(h\Uh]jÉhhhihjj-hl}r½(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r¾}r¿(h\Uh]jÉhhhihjj2hl}rÀ(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrÁj8jÁuhvNhwhhx]rÂ(j:)rÃ}rÄ(h\Xlicense-files: filename listh]j¾hhhihjj>hl}rÅ(hq]rÆXpkg-field-license-filesrÇahp]hn]ho]ht]jB‰uhvNhwhhx]rÈ(j*)rÉ}rÊ(h\Uh]jÃhhhihjj-hl}rË(hq]hp]hn]ho]ht]Uentries]rÌ(jHX"license-files; package.cabal fieldjÇUNtrÍauhvNhwhhx]ubjJ)rÎ}rÏ(h\X license-filesrÐh]jÃhhhihjjMhl}rÑ(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rÒhX license-filesrÓ…rÔ}rÕ(h\UhhNhvNhwhh]jÎubaubjS)rÖ}r×(h\jÌh]jÃhhhihjjVhl}rØ(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rÙhX: rÚ…rÛ}rÜ(h\UhhNhvNhwhh]jÖubaubjÒ)rÝ}rÞ(h\X filename listh]jÃhhhihjjÕhl}rß(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]ràhX filename listrá…râ}rã(h\UhhNhvNhwhh]jÝubaubeubj[)rä}rå(h\Uh]j¾hhhihjj^hl}ræ(hn]ho]hp]hq]ht]uhvNhwhhx]rç(ja)rè}ré(h\Uh]jähhhihjjdhl}rê(hn]ho]hp]hq]ht]uhvNhwhhx]rëjg)rì}rí(h\Uh]jèhhhihjjjhl}rî(hn]ho]hp]hq]ht]uhvNhwhhx]rï(jm)rð}rñ(h\jph]jìhhhihjjqhl}rò(hn]ho]hp]hq]ht]uhvKhx]róhXSincerô…rõ}rö(h\Uh]jðubaubjw)r÷}rø(h\U Cabal 1.20rùhl}rú(hn]ho]hp]hq]ht]uh]jìhx]rûh…)rü}rý(h\jùhl}rþ(hn]ho]hp]hq]ht]uh]j÷hx]rÿhX Cabal 1.20r…r}r(h\Uh]jüubahjh‰ubahjj„ubeubaubh…)r}r(h\XˆThe name of a file(s) containing the precise copyright license for this package. The license file(s) will be installed with the package.rh]jähhhihjh‰hl}r(hn]ho]hp]hq]ht]uhvMþhwhhx]rhXˆThe name of a file(s) containing the precise copyright license for this package. The license file(s) will be installed with the package.r…r }r (h\jhhNhvNhwhh]jubaubh…)r }r (h\X”If you have multiple license files then use the :pkg-field:`license-files` field instead of (or in addition to) the :pkg-field:`license-file` field.h]jähhhihjh‰hl}r (hn]ho]hp]hq]ht]uhvMhwhhx]r(hX0If you have multiple license files then use the r…r}r(h\X0If you have multiple license files then use the hhNhvNhwhh]j ubjt)r}r(h\X:pkg-field:`license-files`h]j hhhihjjwhl}r(UreftypeX pkg-fieldjyˆjzX license-filesrU refdomainXcabalrhq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvMhx]rhç)r}r(h\jhl}r(hn]ho]r(j…jXcabal-pkg-fieldrehp]hq]ht]uh]jhx]rhX license-filesr…r}r (h\Uh]jubahjhïubaubhX* field instead of (or in addition to) the r!…r"}r#(h\X* field instead of (or in addition to) the hhNhvNhwhh]j ubjt)r$}r%(h\X:pkg-field:`license-file`h]j hhhihjjwhl}r&(UreftypeX pkg-fieldjyˆjzX license-filer'U refdomainXcabalr(hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvMhx]r)hç)r*}r+(h\j'hl}r,(hn]ho]r-(j…j(Xcabal-pkg-fieldr.ehp]hq]ht]uh]j$hx]r/hX license-filer0…r1}r2(h\Uh]j*ubahjhïubaubhX field.r3…r4}r5(h\X field.hhNhvNhwhh]j ubeubeubeubj*)r6}r7(h\Uh]jÉhhhihjj-hl}r8(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r9}r:(h\Uh]jÉhhhihjj2hl}r;(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr<j8j<uhvNhwhhx]r=(j:)r>}r?(h\Xcopyright: freeformh]j9hhhihjj>hl}r@(hq]rAXpkg-field-copyrightrBahp]hn]ho]ht]jB‰uhvM hwhhx]rC(j*)rD}rE(h\Uh]j>hhhihjj-hl}rF(hq]hp]hn]ho]ht]Uentries]rG(jHXcopyright; package.cabal fieldjBUNtrHauhvM hwhhx]ubjJ)rI}rJ(h\X copyrightrKh]j>hhhihjjMhl}rL(jÚjÛhq]hp]hn]ho]ht]uhvM hwhhx]rMhX copyrightrN…rO}rP(h\UhhNhvNhwhh]jIubaubjS)rQ}rR(h\jÌh]j>hhhihjjVhl}rS(jÚjÛhq]hp]hn]ho]ht]uhvM hwhhx]rThX: rU…rV}rW(h\UhhNhvNhwhh]jQubaubjÒ)rX}rY(h\Xfreeformh]j>hhhihjjÕhl}rZ(jÚjÛhq]hp]hn]ho]ht]uhvM hwhhx]r[hXfreeformr\…r]}r^(h\UhhNhvNhwhh]jXubaubeubj[)r_}r`(h\Uh]j9hhhihjj^hl}ra(hn]ho]hp]hq]ht]uhvM hwhhx]rb(h…)rc}rd(h\X¢The content of a copyright notice, typically the name of the holder of the copyright on the package and the year(s) from which copyright is claimed. For example::h]j_hhhihjh‰hl}re(hn]ho]hp]hq]ht]uhvMhwhhx]rfhX¡The content of a copyright notice, typically the name of the holder of the copyright on the package and the year(s) from which copyright is claimed. For example:rg…rh}ri(h\X¡The content of a copyright notice, typically the name of the holder of the copyright on the package and the year(s) from which copyright is claimed. For example:hhNhvNhwhh]jcubaubjÕ)rj}rk(h\X#copyright: (c) 2006-2007 Joe Bloggsh]j_hhhihjjØhl}rl(jÚjÛhq]hp]hn]ho]ht]uhvM hwhhx]rmhX#copyright: (c) 2006-2007 Joe Bloggsrn…ro}rp(h\Uh]jjubaubeubeubj*)rq}rr(h\Uh]jÉhhhihjj-hl}rs(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rt}ru(h\Uh]jÉhhhihjj2hl}rv(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrwj8jwuhvNhwhhx]rx(j:)ry}rz(h\Xauthor: freeformh]jthhhihjj>hl}r{(hq]r|Xpkg-field-authorr}ahp]hn]ho]ht]jB‰uhvMhwhhx]r~(j*)r}r€(h\Uh]jyhhhihjj-hl}r(hq]hp]hn]ho]ht]Uentries]r‚(jHXauthor; package.cabal fieldj}UNtrƒauhvMhwhhx]ubjJ)r„}r…(h\Xauthorr†h]jyhhhihjjMhl}r‡(jÚjÛhq]hp]hn]ho]ht]uhvMhwhhx]rˆhXauthorr‰…rŠ}r‹(h\UhhNhvNhwhh]j„ubaubjS)rŒ}r(h\jÌh]jyhhhihjjVhl}rŽ(jÚjÛhq]hp]hn]ho]ht]uhvMhwhhx]rhX: r…r‘}r’(h\UhhNhvNhwhh]jŒubaubjÒ)r“}r”(h\Xfreeformh]jyhhhihjjÕhl}r•(jÚjÛhq]hp]hn]ho]ht]uhvMhwhhx]r–hXfreeformr—…r˜}r™(h\UhhNhvNhwhh]j“ubaubeubj[)rš}r›(h\Uh]jthhhihjj^hl}rœ(hn]ho]hp]hq]ht]uhvMhwhhx]r(h…)rž}rŸ(h\X#The original author of the package.r h]jšhhhihjh‰hl}r¡(hn]ho]hp]hq]ht]uhvMhwhhx]r¢hX#The original author of the package.r£…r¤}r¥(h\j hhNhvNhwhh]jžubaubh…)r¦}r§(h\XERemember that ``.cabal`` files are Unicode, using the UTF-8 encoding.h]jšhhhihjh‰hl}r¨(hn]ho]hp]hq]ht]uhvMhwhhx]r©(hXRemember that rª…r«}r¬(h\XRemember that hhNhvNhwhh]j¦ubhç)r­}r®(h\X ``.cabal``hl}r¯(hn]ho]hp]hq]ht]uh]j¦hx]r°hX.cabalr±…r²}r³(h\X.cabalh]j­ubahjhïubhX- files are Unicode, using the UTF-8 encoding.r´…rµ}r¶(h\X- files are Unicode, using the UTF-8 encoding.hhNhvNhwhh]j¦ubeubeubeubj*)r·}r¸(h\Uh]jÉhhhihjj-hl}r¹(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rº}r»(h\Uh]jÉhhhihjj2hl}r¼(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr½j8j½uhvNhwhhx]r¾(j:)r¿}rÀ(h\Xmaintainer: addressh]jºhhhihjj>hl}rÁ(hq]rÂXpkg-field-maintainerrÃahp]hn]ho]ht]jB‰uhvMhwhhx]rÄ(j*)rÅ}rÆ(h\Uh]j¿hhhihjj-hl}rÇ(hq]hp]hn]ho]ht]Uentries]rÈ(jHXmaintainer; package.cabal fieldjÃUNtrÉauhvMhwhhx]ubjJ)rÊ}rË(h\X maintainerrÌh]j¿hhhihjjMhl}rÍ(jÚjÛhq]hp]hn]ho]ht]uhvMhwhhx]rÎhX maintainerrÏ…rÐ}rÑ(h\UhhNhvNhwhh]jÊubaubjS)rÒ}rÓ(h\jÌh]j¿hhhihjjVhl}rÔ(jÚjÛhq]hp]hn]ho]ht]uhvMhwhhx]rÕhX: rÖ…r×}rØ(h\UhhNhvNhwhh]jÒubaubjÒ)rÙ}rÚ(h\Xaddressh]j¿hhhihjjÕhl}rÛ(jÚjÛhq]hp]hn]ho]ht]uhvMhwhhx]rÜhXaddressrÝ…rÞ}rß(h\UhhNhvNhwhh]jÙubaubeubj[)rà}rá(h\Uh]jºhhhihjj^hl}râ(hn]ho]hp]hq]ht]uhvMhwhhx]rãh…)rä}rå(h\X•The current maintainer or maintainers of the package. This is an e-mail address to which users should send bug reports, feature requests and patches.ræh]jàhhhihjh‰hl}rç(hn]ho]hp]hq]ht]uhvMhwhhx]rèhX•The current maintainer or maintainers of the package. This is an e-mail address to which users should send bug reports, feature requests and patches.ré…rê}rë(h\jæhhNhvNhwhh]jäubaubaubeubj*)rì}rí(h\Uh]jÉhhhihjj-hl}rî(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rï}rð(h\Uh]jÉhhhihjj2hl}rñ(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldròj8jòuhvNhwhhx]ró(j:)rô}rõ(h\Xstability: freeformh]jïhhhihjj>hl}rö(hq]r÷Xpkg-field-stabilityrøahp]hn]ho]ht]jB‰uhvMhwhhx]rù(j*)rú}rû(h\Uh]jôhhhihjj-hl}rü(hq]hp]hn]ho]ht]Uentries]rý(jHXstability; package.cabal fieldjøUNtrþauhvMhwhhx]ubjJ)rÿ}r(h\X stabilityrh]jôhhhihjjMhl}r(jÚjÛhq]hp]hn]ho]ht]uhvMhwhhx]rhX stabilityr…r}r(h\UhhNhvNhwhh]jÿubaubjS)r}r(h\jÌh]jôhhhihjjVhl}r (jÚjÛhq]hp]hn]ho]ht]uhvMhwhhx]r hX: r …r }r (h\UhhNhvNhwhh]jubaubjÒ)r}r(h\Xfreeformh]jôhhhihjjÕhl}r(jÚjÛhq]hp]hn]ho]ht]uhvMhwhhx]rhXfreeformr…r}r(h\UhhNhvNhwhh]jubaubeubj[)r}r(h\Uh]jïhhhihjj^hl}r(hn]ho]hp]hq]ht]uhvMhwhhx]rh…)r}r(h\XbThe stability level of the package, e.g. ``alpha``, ``experimental``, ``provisional``, ``stable``.h]jhhhihjh‰hl}r(hn]ho]hp]hq]ht]uhvMhwhhx]r(hX)The stability level of the package, e.g. r…r}r(h\X)The stability level of the package, e.g. hhNhvNhwhh]jubhç)r }r!(h\X ``alpha``hl}r"(hn]ho]hp]hq]ht]uh]jhx]r#hXalphar$…r%}r&(h\Xalphah]j ubahjhïubhX, r'…r(}r)(h\X, hhNhvNhwhh]jubhç)r*}r+(h\X``experimental``hl}r,(hn]ho]hp]hq]ht]uh]jhx]r-hX experimentalr.…r/}r0(h\X experimentalh]j*ubahjhïubhX, r1…r2}r3(h\X, r4hhNhvNhwhh]jubhç)r5}r6(h\X``provisional``hl}r7(hn]ho]hp]hq]ht]uh]jhx]r8hX provisionalr9…r:}r;(h\X provisionalh]j5ubahjhïubhX, r<…r=}r>(h\j4h]jubhç)r?}r@(h\X ``stable``hl}rA(hn]ho]hp]hq]ht]uh]jhx]rBhXstablerC…rD}rE(h\Xstableh]j?ubahjhïubhX.…rF}rG(h\X.hhNhvNhwhh]jubeubaubeubj*)rH}rI(h\Uh]jÉhhhihjj-hl}rJ(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rK}rL(h\Uh]jÉhhhihjj2hl}rM(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrNj8jNuhvNhwhhx]rO(j:)rP}rQ(h\X homepage: URLh]jKhhhihjj>hl}rR(hq]rSXpkg-field-homepagerTahp]hn]ho]ht]jB‰uhvM"hwhhx]rU(j*)rV}rW(h\Uh]jPhhhihjj-hl}rX(hq]hp]hn]ho]ht]Uentries]rY(jHXhomepage; package.cabal fieldjTUNtrZauhvM"hwhhx]ubjJ)r[}r\(h\Xhomepager]h]jPhhhihjjMhl}r^(jÚjÛhq]hp]hn]ho]ht]uhvM"hwhhx]r_hXhomepager`…ra}rb(h\UhhNhvNhwhh]j[ubaubjS)rc}rd(h\jÌh]jPhhhihjjVhl}re(jÚjÛhq]hp]hn]ho]ht]uhvM"hwhhx]rfhX: rg…rh}ri(h\UhhNhvNhwhh]jcubaubjÒ)rj}rk(h\XURLh]jPhhhihjjÕhl}rl(jÚjÛhq]hp]hn]ho]ht]uhvM"hwhhx]rmhXURLrn…ro}rp(h\UhhNhvNhwhh]jjubaubeubj[)rq}rr(h\Uh]jKhhhihjj^hl}rs(hn]ho]hp]hq]ht]uhvM"hwhhx]rth…)ru}rv(h\XThe package homepage.rwh]jqhhhihjh‰hl}rx(hn]ho]hp]hq]ht]uhvM!hwhhx]ryhXThe package homepage.rz…r{}r|(h\jwhhNhvNhwhh]juubaubaubeubj*)r}}r~(h\Uh]jÉhhhihjj-hl}r(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r€}r(h\Uh]jÉhhhihjj2hl}r‚(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrƒj8jƒuhvNhwhhx]r„(j:)r…}r†(h\Xbug-reports: URLh]j€hhhihjj>hl}r‡(hq]rˆXpkg-field-bug-reportsr‰ahp]hn]ho]ht]jB‰uhvM2hwhhx]rŠ(j*)r‹}rŒ(h\Uh]j…hhhihjj-hl}r(hq]hp]hn]ho]ht]Uentries]rŽ(jHX bug-reports; package.cabal fieldj‰UNtrauhvM2hwhhx]ubjJ)r}r‘(h\X bug-reportsr’h]j…hhhihjjMhl}r“(jÚjÛhq]hp]hn]ho]ht]uhvM2hwhhx]r”hX bug-reportsr•…r–}r—(h\UhhNhvNhwhh]jubaubjS)r˜}r™(h\jÌh]j…hhhihjjVhl}rš(jÚjÛhq]hp]hn]ho]ht]uhvM2hwhhx]r›hX: rœ…r}rž(h\UhhNhvNhwhh]j˜ubaubjÒ)rŸ}r (h\XURLh]j…hhhihjjÕhl}r¡(jÚjÛhq]hp]hn]ho]ht]uhvM2hwhhx]r¢hXURLr£…r¤}r¥(h\UhhNhvNhwhh]jŸubaubeubj[)r¦}r§(h\Uh]j€hhhihjj^hl}r¨(hn]ho]hp]hq]ht]uhvM2hwhhx]r©(h…)rª}r«(h\XMThe URL where users should direct bug reports. This would normally be either:r¬h]j¦hhhihjh‰hl}r­(hn]ho]hp]hq]ht]uhvM%hwhhx]r®hXMThe URL where users should direct bug reports. This would normally be either:r¯…r°}r±(h\j¬hhNhvNhwhh]jªubaubh)r²}r³(h\Uh]j¦hhhihjh’hl}r´(h”X-hq]hp]hn]ho]ht]uhvM(hwhhx]rµ(h–)r¶}r·(h\X8A ``mailto:`` URL, e.g. for a person or a mailing list. h]j²hhhihjh™hl}r¸(hn]ho]hp]hq]ht]uhvNhwhhx]r¹h…)rº}r»(h\X7A ``mailto:`` URL, e.g. for a person or a mailing list.h]j¶hhhihjh‰hl}r¼(hn]ho]hp]hq]ht]uhvM(hx]r½(hXA r¾…r¿}rÀ(h\XA h]jºubhç)rÁ}rÂ(h\X ``mailto:``hl}rÃ(hn]ho]hp]hq]ht]uh]jºhx]rÄhXmailto:rÅ…rÆ}rÇ(h\Xmailto:h]jÁubahjhïubhX* URL, e.g. for a person or a mailing list.rÈ…rÉ}rÊ(h\X* URL, e.g. for a person or a mailing list.h]jºubeubaubh–)rË}rÌ(h\XDAn ``http:`` (or ``https:``) URL for an online bug tracking system. h]j²hhhihjh™hl}rÍ(hn]ho]hp]hq]ht]uhvNhwhhx]rÎh…)rÏ}rÐ(h\XCAn ``http:`` (or ``https:``) URL for an online bug tracking system.h]jËhhhihjh‰hl}rÑ(hn]ho]hp]hq]ht]uhvM*hx]rÒ(hXAn rÓ…rÔ}rÕ(h\XAn h]jÏubhç)rÖ}r×(h\X ``http:``hl}rØ(hn]ho]hp]hq]ht]uh]jÏhx]rÙhXhttp:rÚ…rÛ}rÜ(h\Xhttp:h]jÖubahjhïubhX (or rÝ…rÞ}rß(h\X (or h]jÏubhç)rà}rá(h\X ``https:``hl}râ(hn]ho]hp]hq]ht]uh]jÏhx]rãhXhttps:rä…rå}ræ(h\Xhttps:h]jàubahjhïubhX() URL for an online bug tracking system.rç…rè}ré(h\X() URL for an online bug tracking system.h]jÏubeubaubeubh…)rê}rë(h\X=For example Cabal itself uses a web-based bug tracking systemrìh]j¦hhhihjh‰hl}rí(hn]ho]hp]hq]ht]uhvM-hwhhx]rîhX=For example Cabal itself uses a web-based bug tracking systemrï…rð}rñ(h\jìhhNhvNhwhh]jêubaubjÕ)rò}ró(h\X4bug-reports: https://github.com/haskell/cabal/issuesh]j¦hhhihjjØhl}rô(jÚjÛhq]hp]hn]ho]ht]uhvM1hwhhx]rõhX4bug-reports: https://github.com/haskell/cabal/issuesrö…r÷}rø(h\Uh]jòubaubeubeubj*)rù}rú(h\Uh]jÉhhhihjj-hl}rû(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rü}rý(h\Uh]jÉhhhihjj2hl}rþ(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrÿj8jÿuhvNhwhhx]r(j:)r}r(h\Xpackage-url: URLh]jühhhihjj>hl}r(hq]rXpkg-field-package-urlrahp]hn]ho]ht]jB‰uhvM7hwhhx]r(j*)r}r(h\Uh]jhhhihjj-hl}r (hq]hp]hn]ho]ht]Uentries]r (jHX package-url; package.cabal fieldjUNtr auhvM7hwhhx]ubjJ)r }r (h\X package-urlrh]jhhhihjjMhl}r(jÚjÛhq]hp]hn]ho]ht]uhvM7hwhhx]rhX package-urlr…r}r(h\UhhNhvNhwhh]j ubaubjS)r}r(h\jÌh]jhhhihjjVhl}r(jÚjÛhq]hp]hn]ho]ht]uhvM7hwhhx]rhX: r…r}r(h\UhhNhvNhwhh]jubaubjÒ)r}r(h\XURLh]jhhhihjjÕhl}r(jÚjÛhq]hp]hn]ho]ht]uhvM7hwhhx]rhXURLr…r }r!(h\UhhNhvNhwhh]jubaubeubj[)r"}r#(h\Uh]jühhhihjj^hl}r$(hn]ho]hp]hq]ht]uhvM7hwhhx]r%h…)r&}r'(h\X\The location of a source bundle for the package. The distribution should be a Cabal package.r(h]j"hhhihjh‰hl}r)(hn]ho]hp]hq]ht]uhvM5hwhhx]r*hX\The location of a source bundle for the package. The distribution should be a Cabal package.r+…r,}r-(h\j(hhNhvNhwhh]j&ubaubaubeubj*)r.}r/(h\Uh]jÉhhhihjj-hl}r0(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r1}r2(h\Uh]jÉhhhihjj2hl}r3(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr4j8j4uhvNhwhhx]r5(j:)r6}r7(h\Xsynopsis: freeformh]j1hhhihjj>hl}r8(hq]r9Xpkg-field-synopsisr:ahp]hn]ho]ht]jB‰uhvM>hwhhx]r;(j*)r<}r=(h\Uh]j6hhhihjj-hl}r>(hq]hp]hn]ho]ht]Uentries]r?(jHXsynopsis; package.cabal fieldj:UNtr@auhvM>hwhhx]ubjJ)rA}rB(h\XsynopsisrCh]j6hhhihjjMhl}rD(jÚjÛhq]hp]hn]ho]ht]uhvM>hwhhx]rEhXsynopsisrF…rG}rH(h\UhhNhvNhwhh]jAubaubjS)rI}rJ(h\jÌh]j6hhhihjjVhl}rK(jÚjÛhq]hp]hn]ho]ht]uhvM>hwhhx]rLhX: rM…rN}rO(h\UhhNhvNhwhh]jIubaubjÒ)rP}rQ(h\Xfreeformh]j6hhhihjjÕhl}rR(jÚjÛhq]hp]hn]ho]ht]uhvM>hwhhx]rShXfreeformrT…rU}rV(h\UhhNhvNhwhh]jPubaubeubj[)rW}rX(h\Uh]j1hhhihjj^hl}rY(hn]ho]hp]hq]ht]uhvM>hwhhx]rZh…)r[}r\(h\XëA very short description of the package, for use in a table of packages. This is your headline, so keep it short (one line) but as informative as possible. Save space by not including the package name or saying it's written in Haskell.r]h]jWhhhihjh‰hl}r^(hn]ho]hp]hq]ht]uhvM:hwhhx]r_hXíA very short description of the package, for use in a table of packages. This is your headline, so keep it short (one line) but as informative as possible. Save space by not including the package name or saying it’s written in Haskell.r`…ra}rb(h\j]hhNhvNhwhh]j[ubaubaubeubj*)rc}rd(h\Uh]jÉhhhihjj-hl}re(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rf}rg(h\Uh]jÉhhhihjj2hl}rh(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrij8jiuhvNhwhhx]rj(j:)rk}rl(h\Xdescription: freeformh]jfhhhihjj>hl}rm(hq]rnXpkg-field-descriptionroahp]hn]ho]ht]jB‰uhvMHhwhhx]rp(j*)rq}rr(h\Uh]jkhhhihjj-hl}rs(hq]hp]hn]ho]ht]Uentries]rt(jHX description; package.cabal fieldjoUNtruauhvMHhwhhx]ubjJ)rv}rw(h\X descriptionrxh]jkhhhihjjMhl}ry(jÚjÛhq]hp]hn]ho]ht]uhvMHhwhhx]rzhX descriptionr{…r|}r}(h\UhhNhvNhwhh]jvubaubjS)r~}r(h\jÌh]jkhhhihjjVhl}r€(jÚjÛhq]hp]hn]ho]ht]uhvMHhwhhx]rhX: r‚…rƒ}r„(h\UhhNhvNhwhh]j~ubaubjÒ)r…}r†(h\Xfreeformh]jkhhhihjjÕhl}r‡(jÚjÛhq]hp]hn]ho]ht]uhvMHhwhhx]rˆhXfreeformr‰…rŠ}r‹(h\UhhNhvNhwhh]j…ubaubeubj[)rŒ}r(h\Uh]jfhhhihjj^hl}rŽ(hn]ho]hp]hq]ht]uhvMHhwhhx]r(h…)r}r‘(h\X“Description of the package. This may be several paragraphs, and should be aimed at a Haskell programmer who has never heard of your package before.r’h]jŒhhhihjh‰hl}r“(hn]ho]hp]hq]ht]uhvMAhwhhx]r”hX“Description of the package. This may be several paragraphs, and should be aimed at a Haskell programmer who has never heard of your package before.r•…r–}r—(h\j’hhNhvNhwhh]jubaubh…)r˜}r™(h\XšFor library packages, this field is used as prologue text by :ref:`setup-haddock` and thus may contain the same markup as Haddock_ documentation comments.h]jŒhhhihjh‰hl}rš(hn]ho]hp]hq]ht]uhvMEhwhhx]r›(hX=For library packages, this field is used as prologue text by rœ…r}rž(h\X=For library packages, this field is used as prologue text by hhNhvNhwhh]j˜ubjt)rŸ}r (h\X:ref:`setup-haddock`h]j˜hhhihjjwhl}r¡(UreftypeXrefjyˆjzX setup-haddockr¢U refdomainXstdr£hq]hp]U refexplicit‰hn]ho]ht]j}j~uhvMEhx]r¤j€)r¥}r¦(h\j¢hl}r§(hn]ho]r¨(j…j£Xstd-refr©ehp]hq]ht]uh]jŸhx]rªhX setup-haddockr«…r¬}r­(h\Uh]j¥ubahjj‹ubaubhX) and thus may contain the same markup as r®…r¯}r°(h\X) and thus may contain the same markup as hhNhvNhwhh]j˜ubjH)r±}r²(h\XHaddock_jKKh]j˜hjjLhl}r³(UnameXHaddockr´j‡jû hq]hp]hn]ho]ht]uhx]rµhXHaddockr¶…r·}r¸(h\j´h]j±ubaubhX documentation comments.r¹…rº}r»(h\X documentation comments.hhNhvNhwhh]j˜ubeubeubeubj*)r¼}r½(h\Uh]jÉhhhihjj-hl}r¾(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r¿}rÀ(h\Uh]jÉhhhihjj2hl}rÁ(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrÂj8jÂuhvNhwhhx]rÃ(j:)rÄ}rÅ(h\Xcategory: freeformh]j¿hhhihjj>hl}rÆ(hq]rÇXpkg-field-categoryrÈahp]hn]ho]ht]jB‰uhvMOhwhhx]rÉ(j*)rÊ}rË(h\Uh]jÄhhhihjj-hl}rÌ(hq]hp]hn]ho]ht]Uentries]rÍ(jHXcategory; package.cabal fieldjÈUNtrÎauhvMOhwhhx]ubjJ)rÏ}rÐ(h\XcategoryrÑh]jÄhhhihjjMhl}rÒ(jÚjÛhq]hp]hn]ho]ht]uhvMOhwhhx]rÓhXcategoryrÔ…rÕ}rÖ(h\UhhNhvNhwhh]jÏubaubjS)r×}rØ(h\jÌh]jÄhhhihjjVhl}rÙ(jÚjÛhq]hp]hn]ho]ht]uhvMOhwhhx]rÚhX: rÛ…rÜ}rÝ(h\UhhNhvNhwhh]j×ubaubjÒ)rÞ}rß(h\Xfreeformh]jÄhhhihjjÕhl}rà(jÚjÛhq]hp]hn]ho]ht]uhvMOhwhhx]ráhXfreeformrâ…rã}rä(h\UhhNhvNhwhh]jÞubaubeubj[)rå}ræ(h\Uh]j¿hhhihjj^hl}rç(hn]ho]hp]hq]ht]uhvMOhwhhx]rèh…)ré}rê(h\X¹A classification category for future use by the package catalogue Hackage_. These categories have not yet been specified, but the upper levels of the module hierarchy make a good start.h]jåhhhihjh‰hl}rë(hn]ho]hp]hq]ht]uhvMKhwhhx]rì(hXBA classification category for future use by the package catalogue rí…rî}rï(h\XBA classification category for future use by the package catalogue hhNhvNhwhh]jéubjH)rð}rñ(h\XHackage_jKKh]jéhjjLhl}rò(UnameXHackagerój‡jºhq]hp]hn]ho]ht]uhx]rôhXHackagerõ…rö}r÷(h\jóh]jðubaubhXo. These categories have not yet been specified, but the upper levels of the module hierarchy make a good start.rø…rù}rú(h\Xo. These categories have not yet been specified, but the upper levels of the module hierarchy make a good start.hhNhvNhwhh]jéubeubaubeubj*)rû}rü(h\Uh]jÉhhhihjj-hl}rý(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rþ}rÿ(h\Uh]jÉhhhihjj2hl}r(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrj8juhvNhwhhx]r(j:)r}r(h\Xtested-with: compiler listh]jþhhhihjj>hl}r(hq]rXpkg-field-tested-withrahp]hn]ho]ht]jB‰uhvMdhwhhx]r(j*)r }r (h\Uh]jhhhihjj-hl}r (hq]hp]hn]ho]ht]Uentries]r (jHX tested-with; package.cabal fieldjUNtr auhvMdhwhhx]ubjJ)r}r(h\X tested-withrh]jhhhihjjMhl}r(jÚjÛhq]hp]hn]ho]ht]uhvMdhwhhx]rhX tested-withr…r}r(h\UhhNhvNhwhh]jubaubjS)r}r(h\jÌh]jhhhihjjVhl}r(jÚjÛhq]hp]hn]ho]ht]uhvMdhwhhx]rhX: r…r}r(h\UhhNhvNhwhh]jubaubjÒ)r}r(h\X compiler listh]jhhhihjjÕhl}r(jÚjÛhq]hp]hn]ho]ht]uhvMdhwhhx]r hX compiler listr!…r"}r#(h\UhhNhvNhwhh]jubaubeubj[)r$}r%(h\Uh]jþhhhihjj^hl}r&(hn]ho]hp]hq]ht]uhvMdhwhhx]r'(h…)r(}r)(h\XîA list of compilers and versions against which the package has been tested (or at least built). The value of this field is not used by Cabal and is rather intended as extra metadata for use by third party tooling, such as e.g. CI tooling.r*h]j$hhhihjh‰hl}r+(hn]ho]hp]hq]ht]uhvMRhwhhx]r,hXîA list of compilers and versions against which the package has been tested (or at least built). The value of this field is not used by Cabal and is rather intended as extra metadata for use by third party tooling, such as e.g. CI tooling.r-…r.}r/(h\j*hhNhvNhwhh]j(ubaubh…)r0}r1(h\XHere's a typical usage exampler2h]j$hhhihjh‰hl}r3(hn]ho]hp]hq]ht]uhvMWhwhhx]r4hX Here’s a typical usage exampler5…r6}r7(h\j2hhNhvNhwhh]j0ubaubjÕ)r8}r9(h\X‰tested-with: GHC == 8.6.3, GHC == 8.4.4, GHC == 8.2.2, GHC == 8.0.2, GHC == 7.10.3, GHC == 7.8.4, GHC == 7.6.3, GHC == 7.4.2h]j$hhhihjjØhl}r:(jÚjÛhq]hp]hn]ho]ht]uhvM[hwhhx]r;hX‰tested-with: GHC == 8.6.3, GHC == 8.4.4, GHC == 8.2.2, GHC == 8.0.2, GHC == 7.10.3, GHC == 7.8.4, GHC == 7.6.3, GHC == 7.4.2r<…r=}r>(h\Uh]j8ubaubh…)r?}r@(h\X^which can (starting with Cabal 3.0) also be written using the more concise set notation syntaxrAh]j$hhhihjh‰hl}rB(hn]ho]hp]hq]ht]uhvM^hwhhx]rChX^which can (starting with Cabal 3.0) also be written using the more concise set notation syntaxrD…rE}rF(h\jAhhNhvNhwhh]j?ubaubjÕ)rG}rH(h\XOtested-with: GHC == { 8.6.3, 8.4.4, 8.2.2, 8.0.2, 7.10.3, 7.8.4, 7.6.3, 7.4.2 }h]j$hhhihjjØhl}rI(jÚjÛhq]hp]hn]ho]ht]uhvMchwhhx]rJhXOtested-with: GHC == { 8.6.3, 8.4.4, 8.2.2, 8.0.2, 7.10.3, 7.8.4, 7.6.3, 7.4.2 }rK…rL}rM(h\Uh]jGubaubeubeubj*)rN}rO(h\Uh]jÉhhhihjj-hl}rP(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rQ}rR(h\Uh]jÉhhhihjj2hl}rS(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrTj8jTuhvNhwhhx]rU(j:)rV}rW(h\Xdata-files: filename listh]jQhhhihjj>hl}rX(hq]rYXpkg-field-data-filesrZahp]hn]ho]ht]jB‰uhvM™hwhhx]r[(j*)r\}r](h\Uh]jVhhhihjj-hl}r^(hq]hp]hn]ho]ht]Uentries]r_(jHXdata-files; package.cabal fieldjZUNtr`auhvM™hwhhx]ubjJ)ra}rb(h\X data-filesrch]jVhhhihjjMhl}rd(jÚjÛhq]hp]hn]ho]ht]uhvM™hwhhx]rehX data-filesrf…rg}rh(h\UhhNhvNhwhh]jaubaubjS)ri}rj(h\jÌh]jVhhhihjjVhl}rk(jÚjÛhq]hp]hn]ho]ht]uhvM™hwhhx]rlhX: rm…rn}ro(h\UhhNhvNhwhh]jiubaubjÒ)rp}rq(h\X filename listh]jVhhhihjjÕhl}rr(jÚjÛhq]hp]hn]ho]ht]uhvM™hwhhx]rshX filename listrt…ru}rv(h\UhhNhvNhwhh]jpubaubeubj[)rw}rx(h\Uh]jQhhhihjj^hl}ry(hn]ho]hp]hq]ht]uhvM™hwhhx]rz(h…)r{}r|(h\XA list of files to be installed for run-time use by the package. This is useful for packages that use a large amount of static data, such as tables of values or code templates. Cabal provides a way to `find these files at run-time <#accessing-data-files-from-package-code>`_.h]jwhhhihjh‰hl}r}(hn]ho]hp]hq]ht]uhvMghwhhx]r~(hXÉA list of files to be installed for run-time use by the package. This is useful for packages that use a large amount of static data, such as tables of values or code templates. Cabal provides a way to r…r€}r(h\XÉA list of files to be installed for run-time use by the package. This is useful for packages that use a large amount of static data, such as tables of values or code templates. Cabal provides a way to hhNhvNhwhh]j{ubjH)r‚}rƒ(h\XI`find these files at run-time <#accessing-data-files-from-package-code>`_hl}r„(UnameXfind these files at run-timej‡X'#accessing-data-files-from-package-coder…hq]hp]hn]ho]ht]uh]j{hx]r†hXfind these files at run-timer‡…rˆ}r‰(h\Xfind these files at run-timeh]j‚ubahjjLubj©)rŠ}r‹(h\X* <#accessing-data-files-from-package-code>haKh]j{hjj¬hl}rŒ(Urefurij…hq]rUfind-these-files-at-run-timerŽahp]hn]ho]ht]rhRauhx]ubhX.…r}r‘(h\X.hhNhvNhwhh]j{ubeubh…)r’}r“(h\X A limited form of ``*`` wildcards in file names, for example ``data-files: images/*.png`` matches all the ``.png`` files in the ``images`` directory. ``data-files: audio/**/*.mp3`` matches all the ``.mp3`` files in the ``audio`` directory, including subdirectories.h]jwhhhihjh‰hl}r”(hn]ho]hp]hq]ht]uhvMlhwhhx]r•(hXA limited form of r–…r—}r˜(h\XA limited form of hhNhvNhwhh]j’ubhç)r™}rš(h\X``*``hl}r›(hn]ho]hp]hq]ht]uh]j’hx]rœhX*…r}rž(h\X*h]j™ubahjhïubhX& wildcards in file names, for example rŸ…r }r¡(h\X& wildcards in file names, for example hhNhvNhwhh]j’ubhç)r¢}r£(h\X``data-files: images/*.png``hl}r¤(hn]ho]hp]hq]ht]uh]j’hx]r¥hXdata-files: images/*.pngr¦…r§}r¨(h\Xdata-files: images/*.pngh]j¢ubahjhïubhX matches all the r©…rª}r«(h\X matches all the hhNhvNhwhh]j’ubhç)r¬}r­(h\X``.png``hl}r®(hn]ho]hp]hq]ht]uh]j’hx]r¯hX.pngr°…r±}r²(h\X.pngh]j¬ubahjhïubhX files in the r³…r´}rµ(h\X files in the hhNhvNhwhh]j’ubhç)r¶}r·(h\X ``images``hl}r¸(hn]ho]hp]hq]ht]uh]j’hx]r¹hXimagesrº…r»}r¼(h\Ximagesh]j¶ubahjhïubhX directory. r½…r¾}r¿(h\X directory. hhNhvNhwhh]j’ubhç)rÀ}rÁ(h\X``data-files: audio/**/*.mp3``hl}rÂ(hn]ho]hp]hq]ht]uh]j’hx]rÃhXdata-files: audio/**/*.mp3rÄ…rÅ}rÆ(h\Xdata-files: audio/**/*.mp3h]jÀubahjhïubhX matches all the rÇ…rÈ}rÉ(h\X matches all the hhNhvNhwhh]j’ubhç)rÊ}rË(h\X``.mp3``hl}rÌ(hn]ho]hp]hq]ht]uh]j’hx]rÍhX.mp3rÎ…rÏ}rÐ(h\X.mp3h]jÊubahjhïubhX files in the rÑ…rÒ}rÓ(h\X files in the hhNhvNhwhh]j’ubhç)rÔ}rÕ(h\X ``audio``hl}rÖ(hn]ho]hp]hq]ht]uh]j’hx]r×hXaudiorØ…rÙ}rÚ(h\Xaudioh]jÔubahjhïubhX% directory, including subdirectories.rÛ…rÜ}rÝ(h\X% directory, including subdirectories.hhNhvNhwhh]j’ubeubh…)rÞ}rß(h\X4The specific limitations of this wildcard syntax areràh]jwhhhihjh‰hl}rá(hn]ho]hp]hq]ht]uhvMrhwhhx]râhX4The specific limitations of this wildcard syntax arerã…rä}rå(h\jàhhNhvNhwhh]jÞubaubh)ræ}rç(h\Uh]jwhhhihjh’hl}rè(h”X-hq]hp]hn]ho]ht]uhvMthwhhx]ré(h–)rê}rë(h\X/``*`` wildcards are only allowed in place of the file name, not in the directory name or file extension. It must replace the whole file name (e.g., ``*.html`` is allowed, but ``chapter-*.html`` is not). If a wildcard is used, it must be used with an extension, so ``data-files: data/*`` is not allowed. h]jæhhhihjh™hl}rì(hn]ho]hp]hq]ht]uhvNhwhhx]ríh…)rî}rï(h\X.``*`` wildcards are only allowed in place of the file name, not in the directory name or file extension. It must replace the whole file name (e.g., ``*.html`` is allowed, but ``chapter-*.html`` is not). If a wildcard is used, it must be used with an extension, so ``data-files: data/*`` is not allowed.h]jêhhhihjh‰hl}rð(hn]ho]hp]hq]ht]uhvMthx]rñ(hç)rò}ró(h\X``*``hl}rô(hn]ho]hp]hq]ht]uh]jîhx]rõhX*…rö}r÷(h\X*h]jòubahjhïubhX wildcards are only allowed in place of the file name, not in the directory name or file extension. It must replace the whole file name (e.g., rø…rù}rú(h\X wildcards are only allowed in place of the file name, not in the directory name or file extension. It must replace the whole file name (e.g., h]jîubhç)rû}rü(h\X ``*.html``hl}rý(hn]ho]hp]hq]ht]uh]jîhx]rþhX*.htmlrÿ…r}r(h\X*.htmlh]jûubahjhïubhX is allowed, but r…r}r(h\X is allowed, but h]jîubhç)r}r(h\X``chapter-*.html``hl}r(hn]ho]hp]hq]ht]uh]jîhx]rhXchapter-*.htmlr …r }r (h\Xchapter-*.htmlh]jubahjhïubhXG is not). If a wildcard is used, it must be used with an extension, so r …r }r(h\XG is not). If a wildcard is used, it must be used with an extension, so h]jîubhç)r}r(h\X``data-files: data/*``hl}r(hn]ho]hp]hq]ht]uh]jîhx]rhXdata-files: data/*r…r}r(h\Xdata-files: data/*h]jubahjhïubhX is not allowed.r…r}r(h\X is not allowed.h]jîubeubaubh–)r}r(h\XPrior to Cabal 2.4, when matching a wildcard plus extension, a file's full extension must match exactly, so ``*.gz`` matches ``foo.gz`` but not ``foo.tar.gz``. This restriction has been lifted when ``cabal-version: 2.4`` or greater so that ``*.gz`` does match ``foo.tar.gz`` h]jæhhhihjh™hl}r(hn]ho]hp]hq]ht]uhvNhwhhx]rh…)r}r(h\XPrior to Cabal 2.4, when matching a wildcard plus extension, a file's full extension must match exactly, so ``*.gz`` matches ``foo.gz`` but not ``foo.tar.gz``. This restriction has been lifted when ``cabal-version: 2.4`` or greater so that ``*.gz`` does match ``foo.tar.gz``h]jhhhihjh‰hl}r(hn]ho]hp]hq]ht]uhvM{hx]r (hXnPrior to Cabal 2.4, when matching a wildcard plus extension, a file’s full extension must match exactly, so r!…r"}r#(h\XlPrior to Cabal 2.4, when matching a wildcard plus extension, a file's full extension must match exactly, so h]jubhç)r$}r%(h\X``*.gz``hl}r&(hn]ho]hp]hq]ht]uh]jhx]r'hX*.gzr(…r)}r*(h\X*.gzh]j$ubahjhïubhX matches r+…r,}r-(h\X matches h]jubhç)r.}r/(h\X ``foo.gz``hl}r0(hn]ho]hp]hq]ht]uh]jhx]r1hXfoo.gzr2…r3}r4(h\Xfoo.gzh]j.ubahjhïubhX but not r5…r6}r7(h\X but not h]jubhç)r8}r9(h\X``foo.tar.gz``hl}r:(hn]ho]hp]hq]ht]uh]jhx]r;hX foo.tar.gzr<…r=}r>(h\X foo.tar.gzh]j8ubahjhïubhX(. This restriction has been lifted when r?…r@}rA(h\X(. This restriction has been lifted when h]jubhç)rB}rC(h\X``cabal-version: 2.4``hl}rD(hn]ho]hp]hq]ht]uh]jhx]rEhXcabal-version: 2.4rF…rG}rH(h\Xcabal-version: 2.4h]jBubahjhïubhX or greater so that rI…rJ}rK(h\X or greater so that h]jubhç)rL}rM(h\X``*.gz``hl}rN(hn]ho]hp]hq]ht]uh]jhx]rOhX*.gzrP…rQ}rR(h\X*.gzh]jLubahjhïubhX does match rS…rT}rU(h\X does match h]jubhç)rV}rW(h\X``foo.tar.gz``hl}rX(hn]ho]hp]hq]ht]uh]jhx]rYhX foo.tar.gzrZ…r[}r\(h\X foo.tar.gzh]jVubahjhïubeubaubh–)r]}r^(h\Xj``*`` wildcards will not match if the file name is empty (e.g., ``*.html`` will not match ``foo/.html``). h]jæhhhihjh™hl}r_(hn]ho]hp]hq]ht]uhvNhwhhx]r`h…)ra}rb(h\Xi``*`` wildcards will not match if the file name is empty (e.g., ``*.html`` will not match ``foo/.html``).h]j]hhhihjh‰hl}rc(hn]ho]hp]hq]ht]uhvMhx]rd(hç)re}rf(h\X``*``hl}rg(hn]ho]hp]hq]ht]uh]jahx]rhhX*…ri}rj(h\X*h]jeubahjhïubhX; wildcards will not match if the file name is empty (e.g., rk…rl}rm(h\X; wildcards will not match if the file name is empty (e.g., h]jaubhç)rn}ro(h\X ``*.html``hl}rp(hn]ho]hp]hq]ht]uh]jahx]rqhX*.htmlrr…rs}rt(h\X*.htmlh]jnubahjhïubhX will not match ru…rv}rw(h\X will not match h]jaubhç)rx}ry(h\X ``foo/.html``hl}rz(hn]ho]hp]hq]ht]uh]jahx]r{hX foo/.htmlr|…r}}r~(h\X foo/.htmlh]jxubahjhïubhX).r…r€}r(h\X).h]jaubeubaubh–)r‚}rƒ(h\X``**`` wildcards can only appear as the final path component before the file name (e.g., ``data/**/images/*.jpg`` is not allowed). If a ``**`` wildcard is used, then the file name must include a ``*`` wildcard (e.g., ``data/**/README.rst`` is not allowed). h]jæhhhihjh™hl}r„(hn]ho]hp]hq]ht]uhvNhwhhx]r…h…)r†}r‡(h\X``**`` wildcards can only appear as the final path component before the file name (e.g., ``data/**/images/*.jpg`` is not allowed). If a ``**`` wildcard is used, then the file name must include a ``*`` wildcard (e.g., ``data/**/README.rst`` is not allowed).h]j‚hhhihjh‰hl}rˆ(hn]ho]hp]hq]ht]uhvM„hx]r‰(hç)rŠ}r‹(h\X``**``hl}rŒ(hn]ho]hp]hq]ht]uh]j†hx]rhX**rŽ…r}r(h\X**h]jŠubahjhïubhXS wildcards can only appear as the final path component before the file name (e.g., r‘…r’}r“(h\XS wildcards can only appear as the final path component before the file name (e.g., h]j†ubhç)r”}r•(h\X``data/**/images/*.jpg``hl}r–(hn]ho]hp]hq]ht]uh]j†hx]r—hXdata/**/images/*.jpgr˜…r™}rš(h\Xdata/**/images/*.jpgh]j”ubahjhïubhX is not allowed). If a r›…rœ}r(h\X is not allowed). If a h]j†ubhç)rž}rŸ(h\X``**``hl}r (hn]ho]hp]hq]ht]uh]j†hx]r¡hX**r¢…r£}r¤(h\X**h]jžubahjhïubhX5 wildcard is used, then the file name must include a r¥…r¦}r§(h\X5 wildcard is used, then the file name must include a h]j†ubhç)r¨}r©(h\X``*``hl}rª(hn]ho]hp]hq]ht]uh]j†hx]r«hX*…r¬}r­(h\X*h]j¨ubahjhïubhX wildcard (e.g., r®…r¯}r°(h\X wildcard (e.g., h]j†ubhç)r±}r²(h\X``data/**/README.rst``hl}r³(hn]ho]hp]hq]ht]uh]j†hx]r´hXdata/**/README.rstrµ…r¶}r·(h\Xdata/**/README.rsth]j±ubahjhïubhX is not allowed).r¸…r¹}rº(h\X is not allowed).h]j†ubeubaubh–)r»}r¼(h\X6A wildcard that does not match any files is an error. h]jæhhhihjh™hl}r½(hn]ho]hp]hq]ht]uhvNhwhhx]r¾h…)r¿}rÀ(h\X5A wildcard that does not match any files is an error.rÁh]j»hhhihjh‰hl}rÂ(hn]ho]hp]hq]ht]uhvMŠhx]rÃhX5A wildcard that does not match any files is an error.rÄ…rÅ}rÆ(h\jÁh]j¿ubaubaubeubh…)rÇ}rÈ(h\XáThe reason for providing only a very limited form of wildcard is to concisely express the common case of a large number of related files of the same file type without making it too easy to accidentally include unwanted files.rÉh]jwhhhihjh‰hl}rÊ(hn]ho]hp]hq]ht]uhvMŒhwhhx]rËhXáThe reason for providing only a very limited form of wildcard is to concisely express the common case of a large number of related files of the same file type without making it too easy to accidentally include unwanted files.rÌ…rÍ}rÎ(h\jÉhhNhvNhwhh]jÇubaubh…)rÏ}rÐ(h\XMOn efficiency: if you use ``**`` patterns, the directory tree will be walked starting with the parent directory of the ``**``. If that's the root of the project, this might include ``.git/``, ``dist-newstyle/``, or other large directories! To avoid this behaviour, put the files that wildcards will match against in their own folder.h]jwhhhihjh‰hl}rÑ(hn]ho]hp]hq]ht]uhvM‘hwhhx]rÒ(hXOn efficiency: if you use rÓ…rÔ}rÕ(h\XOn efficiency: if you use hhNhvNhwhh]jÏubhç)rÖ}r×(h\X``**``hl}rØ(hn]ho]hp]hq]ht]uh]jÏhx]rÙhX**rÚ…rÛ}rÜ(h\X**h]jÖubahjhïubhXW patterns, the directory tree will be walked starting with the parent directory of the rÝ…rÞ}rß(h\XW patterns, the directory tree will be walked starting with the parent directory of the hhNhvNhwhh]jÏubhç)rà}rá(h\X``**``hl}râ(hn]ho]hp]hq]ht]uh]jÏhx]rãhX**rä…rå}ræ(h\X**h]jàubahjhïubhX:. If that’s the root of the project, this might include rç…rè}ré(h\X8. If that's the root of the project, this might include hhNhvNhwhh]jÏubhç)rê}rë(h\X ``.git/``hl}rì(hn]ho]hp]hq]ht]uh]jÏhx]ríhX.git/rî…rï}rð(h\X.git/h]jêubahjhïubhX, rñ…rò}ró(h\X, hhNhvNhwhh]jÏubhç)rô}rõ(h\X``dist-newstyle/``hl}rö(hn]ho]hp]hq]ht]uh]jÏhx]r÷hXdist-newstyle/rø…rù}rú(h\Xdist-newstyle/h]jôubahjhïubhX{, or other large directories! To avoid this behaviour, put the files that wildcards will match against in their own folder.rû…rü}rý(h\X{, or other large directories! To avoid this behaviour, put the files that wildcards will match against in their own folder.hhNhvNhwhh]jÏubeubh…)rþ}rÿ(h\X5``**`` wildcards are available starting in Cabal 2.4.h]jwhhhihjh‰hl}r(hn]ho]hp]hq]ht]uhvM˜hwhhx]r(hç)r}r(h\X``**``hl}r(hn]ho]hp]hq]ht]uh]jþhx]rhX**r…r}r(h\X**h]jubahjhïubhX/ wildcards are available starting in Cabal 2.4.r …r }r (h\X/ wildcards are available starting in Cabal 2.4.hhNhvNhwhh]jþubeubeubeubj*)r }r (h\Uh]jÉhhhihjj-hl}r(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r}r(h\Uh]jÉhhhihjj2hl}r(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrj8juhvNhwhhx]r(j:)r}r(h\Xdata-dir: directoryh]jhhhihjj>hl}r(hq]rXpkg-field-data-dirrahp]hn]ho]ht]jB‰uhvMŸhwhhx]r(j*)r}r(h\Uh]jhhhihjj-hl}r(hq]hp]hn]ho]ht]Uentries]r(jHXdata-dir; package.cabal fieldjUNtrauhvMŸhwhhx]ubjJ)r}r (h\Xdata-dirr!h]jhhhihjjMhl}r"(jÚjÛhq]hp]hn]ho]ht]uhvMŸhwhhx]r#hXdata-dirr$…r%}r&(h\UhhNhvNhwhh]jubaubjS)r'}r((h\jÌh]jhhhihjjVhl}r)(jÚjÛhq]hp]hn]ho]ht]uhvMŸhwhhx]r*hX: r+…r,}r-(h\UhhNhvNhwhh]j'ubaubjÒ)r.}r/(h\X directoryh]jhhhihjjÕhl}r0(jÚjÛhq]hp]hn]ho]ht]uhvMŸhwhhx]r1hX directoryr2…r3}r4(h\UhhNhvNhwhh]j.ubaubeubj[)r5}r6(h\Uh]jhhhihjj^hl}r7(hn]ho]hp]hq]ht]uhvMŸhwhhx]r8h…)r9}r:(h\X˜The directory where Cabal looks for data files to install, relative to the source directory. By default, Cabal will look in the source directory itself.r;h]j5hhhihjh‰hl}r<(hn]ho]hp]hq]ht]uhvMœhwhhx]r=hX˜The directory where Cabal looks for data files to install, relative to the source directory. By default, Cabal will look in the source directory itself.r>…r?}r@(h\j;hhNhvNhwhh]j9ubaubaubeubj*)rA}rB(h\Uh]jÉhhhihjj-hl}rC(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rD}rE(h\Uh]jÉhhhihjj2hl}rF(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrGj8jGuhvNhwhhx]rH(j:)rI}rJ(h\X!extra-source-files: filename listh]jDhhhihjj>hl}rK(hq]rLXpkg-field-extra-source-filesrMahp]hn]ho]ht]jB‰uhvM¥hwhhx]rN(j*)rO}rP(h\Uh]jIhhhihjj-hl}rQ(hq]hp]hn]ho]ht]Uentries]rR(jHX'extra-source-files; package.cabal fieldjMUNtrSauhvM¥hwhhx]ubjJ)rT}rU(h\Xextra-source-filesrVh]jIhhhihjjMhl}rW(jÚjÛhq]hp]hn]ho]ht]uhvM¥hwhhx]rXhXextra-source-filesrY…rZ}r[(h\UhhNhvNhwhh]jTubaubjS)r\}r](h\jÌh]jIhhhihjjVhl}r^(jÚjÛhq]hp]hn]ho]ht]uhvM¥hwhhx]r_hX: r`…ra}rb(h\UhhNhvNhwhh]j\ubaubjÒ)rc}rd(h\X filename listh]jIhhhihjjÕhl}re(jÚjÛhq]hp]hn]ho]ht]uhvM¥hwhhx]rfhX filename listrg…rh}ri(h\UhhNhvNhwhh]jcubaubeubj[)rj}rk(h\Uh]jDhhhihjj^hl}rl(hn]ho]hp]hq]ht]uhvM¥hwhhx]rmh…)rn}ro(h\X¼A list of additional files to be included in source distributions built with :ref:`setup-sdist`. As with :pkg-field:`data-files` it can use a limited form of ``*`` wildcards in file names.h]jjhhhihjh‰hl}rp(hn]ho]hp]hq]ht]uhvM¢hwhhx]rq(hXMA list of additional files to be included in source distributions built with rr…rs}rt(h\XMA list of additional files to be included in source distributions built with hhNhvNhwhh]jnubjt)ru}rv(h\X:ref:`setup-sdist`h]jnhhhihjjwhl}rw(UreftypeXrefjyˆjzX setup-sdistrxU refdomainXstdryhq]hp]U refexplicit‰hn]ho]ht]j}j~uhvM¢hx]rzj€)r{}r|(h\jxhl}r}(hn]ho]r~(j…jyXstd-refrehp]hq]ht]uh]juhx]r€hX setup-sdistr…r‚}rƒ(h\Uh]j{ubahjj‹ubaubhX . As with r„…r…}r†(h\X . As with hhNhvNhwhh]jnubjt)r‡}rˆ(h\X:pkg-field:`data-files`h]jnhhhihjjwhl}r‰(UreftypeX pkg-fieldjyˆjzX data-filesrŠU refdomainXcabalr‹hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM¢hx]rŒhç)r}rŽ(h\jŠhl}r(hn]ho]r(j…j‹Xcabal-pkg-fieldr‘ehp]hq]ht]uh]j‡hx]r’hX data-filesr“…r”}r•(h\Uh]jubahjhïubaubhX it can use a limited form of r–…r—}r˜(h\X it can use a limited form of hhNhvNhwhh]jnubhç)r™}rš(h\X``*``hl}r›(hn]ho]hp]hq]ht]uh]jnhx]rœhX*…r}rž(h\X*h]j™ubahjhïubhX wildcards in file names.rŸ…r }r¡(h\X wildcards in file names.hhNhvNhwhh]jnubeubaubeubj*)r¢}r£(h\Uh]jÉhhhihjj-hl}r¤(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r¥}r¦(h\Uh]jÉhhhihjj2hl}r§(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr¨j8j¨uhvNhwhhx]r©(j:)rª}r«(h\Xextra-doc-files: filename listh]j¥hhhihjj>hl}r¬(hq]r­Xpkg-field-extra-doc-filesr®ahp]hn]ho]ht]jB‰uhvNhwhhx]r¯(j*)r°}r±(h\Uh]jªhhhihjj-hl}r²(hq]hp]hn]ho]ht]Uentries]r³(jHX$extra-doc-files; package.cabal fieldj®UNtr´auhvNhwhhx]ubjJ)rµ}r¶(h\Xextra-doc-filesr·h]jªhhhihjjMhl}r¸(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r¹hXextra-doc-filesrº…r»}r¼(h\UhhNhvNhwhh]jµubaubjS)r½}r¾(h\jÌh]jªhhhihjjVhl}r¿(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rÀhX: rÁ…rÂ}rÃ(h\UhhNhvNhwhh]j½ubaubjÒ)rÄ}rÅ(h\X filename listh]jªhhhihjjÕhl}rÆ(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rÇhX filename listrÈ…rÉ}rÊ(h\UhhNhvNhwhh]jÄubaubeubj[)rË}rÌ(h\Uh]j¥hhhihjj^hl}rÍ(hn]ho]hp]hq]ht]uhvNhwhhx]rÎ(ja)rÏ}rÐ(h\Uh]jËhhhihjjdhl}rÑ(hn]ho]hp]hq]ht]uhvNhwhhx]rÒjg)rÓ}rÔ(h\Uh]jÏhhhihjjjhl}rÕ(hn]ho]hp]hq]ht]uhvNhwhhx]rÖ(jm)r×}rØ(h\jph]jÓhhhihjjqhl}rÙ(hn]ho]hp]hq]ht]uhvKhx]rÚhXSincerÛ…rÜ}rÝ(h\Uh]j×ubaubjw)rÞ}rß(h\U Cabal 1.18ràhl}rá(hn]ho]hp]hq]ht]uh]jÓhx]râh…)rã}rä(h\jàhl}rå(hn]ho]hp]hq]ht]uh]jÞhx]ræhX Cabal 1.18rç…rè}ré(h\Uh]jãubahjh‰ubahjj„ubeubaubh…)rê}rë(h\XíA list of additional files to be included in source distributions, and also copied to the html directory when Haddock documentation is generated. As with :pkg-field:`data-files` it can use a limited form of ``*`` wildcards in file names.h]jËhhhihjh‰hl}rì(hn]ho]hp]hq]ht]uhvM©hwhhx]rí(hXšA list of additional files to be included in source distributions, and also copied to the html directory when Haddock documentation is generated. As with rî…rï}rð(h\XšA list of additional files to be included in source distributions, and also copied to the html directory when Haddock documentation is generated. As with hhNhvNhwhh]jêubjt)rñ}rò(h\X:pkg-field:`data-files`h]jêhhhihjjwhl}ró(UreftypeX pkg-fieldjyˆjzX data-filesrôU refdomainXcabalrõhq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM©hx]röhç)r÷}rø(h\jôhl}rù(hn]ho]rú(j…jõXcabal-pkg-fieldrûehp]hq]ht]uh]jñhx]rühX data-filesrý…rþ}rÿ(h\Uh]j÷ubahjhïubaubhX it can use a limited form of r …r }r (h\X it can use a limited form of hhNhvNhwhh]jêubhç)r }r (h\X``*``hl}r (hn]ho]hp]hq]ht]uh]jêhx]r hX*…r }r (h\X*h]j ubahjhïubhX wildcards in file names.r …r }r (h\X wildcards in file names.hhNhvNhwhh]jêubeubeubeubj*)r }r (h\Uh]jÉhhhihjj-hl}r (hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r }r (h\Uh]jÉhhhihjj2hl}r (j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr j8j uhvNhwhhx]r (j:)r }r (h\Xextra-tmp-files: filename listh]j hhhihjj>hl}r (hq]r Xpkg-field-extra-tmp-filesr ahp]hn]ho]ht]jB‰uhvM´hwhhx]r (j*)r }r (h\Uh]j hhhihjj-hl}r (hq]hp]hn]ho]ht]Uentries]r (jHX$extra-tmp-files; package.cabal fieldj UNtr auhvM´hwhhx]ubjJ)r }r (h\Xextra-tmp-filesr! h]j hhhihjjMhl}r" (jÚjÛhq]hp]hn]ho]ht]uhvM´hwhhx]r# hXextra-tmp-filesr$ …r% }r& (h\UhhNhvNhwhh]j ubaubjS)r' }r( (h\jÌh]j hhhihjjVhl}r) (jÚjÛhq]hp]hn]ho]ht]uhvM´hwhhx]r* hX: r+ …r, }r- (h\UhhNhvNhwhh]j' ubaubjÒ)r. }r/ (h\X filename listh]j hhhihjjÕhl}r0 (jÚjÛhq]hp]hn]ho]ht]uhvM´hwhhx]r1 hX filename listr2 …r3 }r4 (h\UhhNhvNhwhh]j. ubaubeubj[)r5 }r6 (h\Uh]j hhhihjj^hl}r7 (hn]ho]hp]hq]ht]uhvM´hwhhx]r8 h…)r9 }r: (h\XäA list of additional files or directories to be removed by :ref:`setup-clean`. These would typically be additional files created by additional hooks, such as the scheme described in the section on `system-dependent parameters`_h]j5 hhhihjh‰hl}r; (hn]ho]hp]hq]ht]uhvM°hwhhx]r< (hX;A list of additional files or directories to be removed by r= …r> }r? (h\X;A list of additional files or directories to be removed by hhNhvNhwhh]j9 ubjt)r@ }rA (h\X:ref:`setup-clean`h]j9 hhhihjjwhl}rB (UreftypeXrefjyˆjzX setup-cleanrC U refdomainXstdrD hq]hp]U refexplicit‰hn]ho]ht]j}j~uhvM°hx]rE j€)rF }rG (h\jC hl}rH (hn]ho]rI (j…jD Xstd-refrJ ehp]hq]ht]uh]j@ hx]rK hX setup-cleanrL …rM }rN (h\Uh]jF ubahjj‹ubaubhXy. These would typically be additional files created by additional hooks, such as the scheme described in the section on rO …rP }rQ (h\Xy. These would typically be additional files created by additional hooks, such as the scheme described in the section on hhNhvNhwhh]j9 ubjH)rR }rS (h\X`system-dependent parameters`_jKKh]j9 hjjLhl}rT (UnameXsystem-dependent parametershq]hp]hn]ho]ht]jNj™uhx]rU hXsystem-dependent parametersrV …rW }rX (h\Xsystem-dependent parametersh]jR ubaubeubaubeubeubh^)rY }rZ (h\UhaKh]hdhhhihjhkhl}r[ (hn]ho]hp]hq]r\ jèaht]r] hauhvM¶hwhhx]r^ (hz)r_ }r` (h\XLibraryra h]jY hhhihjh~hl}rb (hn]ho]hp]hq]ht]uhvM¶hwhhx]rc hXLibraryrd …re }rf (h\ja hhNhvNhwhh]j_ ubaubj*)rg }rh (h\Uh]jY hhhihjj-hl}ri (hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rj }rk (h\Uh]jY hhhihjj2hl}rl (j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-sectionrm j8jm uhvNhwhhx]rn (j:)ro }rp (h\X library nameh]jj hhhihjj>hl}rq (hq]rr Xpkg-section-library-libraryrs ahp]hn]ho]ht]jB‰uhvNhwhhx]rt (j*)ru }rv (h\Uh]jo hhhihjj-hl}rw (hq]hp]hn]ho]ht]Uentries]rx (jHX&library:library; package.cabal sectionjs UNtry auhvNhwhhx]ubjJ)rz }r{ (h\Xlibraryr| h]jo hhhihjjMhl}r} (jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r~ hXlibraryr …r€ }r (h\UhhNhvNhwhh]jz ubaubjS)r‚ }rƒ (h\U h]jo hhhihjjVhl}r„ (jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r… hX …r† }r‡ (h\UhhNhvNhwhh]j‚ ubaubjÒ)rˆ }r‰ (h\Xnameh]jo hhhihjjÕhl}rŠ (jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r‹ hXnamerŒ …r }rŽ (h\UhhNhvNhwhh]jˆ ubaubeubj[)r }r (h\Uh]jj hhhihjj^hl}r‘ (hn]ho]hp]hq]ht]uhvNhwhhx]r’ (h…)r“ }r” (h\X Build information for libraries.r• h]j hhhihjh‰hl}r– (hn]ho]hp]hq]ht]uhvM»hwhhx]r— hX Build information for libraries.r˜ …r™ }rš (h\j• hhNhvNhwhh]j“ ubaubh…)r› }rœ (h\XòCurrently, there can only be one publicly exposed library in a package, and its name is the same as package name set by global :pkg-field:`name` field. In this case, the ``name`` argument to the :pkg-section:`library` section must be omitted.h]j hhhihjh‰hl}r (hn]ho]hp]hq]ht]uhvM½hwhhx]rž (hXCurrently, there can only be one publicly exposed library in a package, and its name is the same as package name set by global rŸ …r  }r¡ (h\XCurrently, there can only be one publicly exposed library in a package, and its name is the same as package name set by global hhNhvNhwhh]j› ubjt)r¢ }r£ (h\X:pkg-field:`name`h]j› hhhihjjwhl}r¤ (UreftypeX pkg-fieldjyˆjzXnamer¥ U refdomainXcabalr¦ hq]hp]U refexplicit‰hn]ho]ht]j}j~j”Xlibraryr§ uhvM½hx]r¨ hç)r© }rª (h\j¥ hl}r« (hn]ho]r¬ (j…j¦ Xcabal-pkg-fieldr­ ehp]hq]ht]uh]j¢ hx]r® hXnamer¯ …r° }r± (h\Uh]j© ubahjhïubaubhX field. In this case, the r² …r³ }r´ (h\X field. In this case, the hhNhvNhwhh]j› ubhç)rµ }r¶ (h\X``name``hl}r· (hn]ho]hp]hq]ht]uh]j› hx]r¸ hXnamer¹ …rº }r» (h\Xnameh]jµ ubahjhïubhX argument to the r¼ …r½ }r¾ (h\X argument to the hhNhvNhwhh]j› ubjt)r¿ }rÀ (h\X:pkg-section:`library`h]j› hhhihjjwhl}rÁ (UreftypeX pkg-sectionjyˆjzXlibraryr U refdomainXcabalrà hq]hp]U refexplicit‰hn]ho]ht]j}j~uhvM½hx]rÄ hç)rÅ }rÆ (h\j hl}rÇ (hn]ho]rÈ (j…jà Xcabal-pkg-sectionrÉ ehp]hq]ht]uh]j¿ hx]rÊ hXlibraryrË …rÌ }rÍ (h\Uh]jÅ ubahjhïubaubhX section must be omitted.rÎ …rÏ }rÐ (h\X section must be omitted.hhNhvNhwhh]j› ubeubh…)rÑ }rÒ (h\XñStarting with Cabal 2.0, private internal sub-library components can be defined by using setting the ``name`` field to a name different from the current package's name; see section on :ref:`Internal Libraries ` for more information.h]j hhhihjh‰hl}rÓ (hn]ho]hp]hq]ht]uhvMÂhwhhx]rÔ (hXeStarting with Cabal 2.0, private internal sub-library components can be defined by using setting the rÕ …rÖ }r× (h\XeStarting with Cabal 2.0, private internal sub-library components can be defined by using setting the hhNhvNhwhh]jÑ ubhç)rØ }rÙ (h\X``name``hl}rÚ (hn]ho]hp]hq]ht]uh]jÑ hx]rÛ hXnamerÜ …rÝ }rÞ (h\Xnameh]jØ ubahjhïubhXM field to a name different from the current package’s name; see section on rß …rà }rá (h\XK field to a name different from the current package's name; see section on hhNhvNhwhh]jÑ ubjt)râ }rã (h\X#:ref:`Internal Libraries `h]jÑ hhhihjjwhl}rä (UreftypeXrefjyˆjzXsublibsU refdomainXstdrå hq]hp]U refexplicitˆhn]ho]ht]j}j~uhvMÂhx]ræ j€)rç }rè (h\XInternal Libraries hl}ré (hn]ho]rê (j…jå Xstd-refrë ehp]hq]ht]uh]jâ hx]rì hXInternal Librariesrí …rî }rï (h\Uh]jç ubahjj‹ubaubhX for more information.rð …rñ }rò (h\X for more information.hhNhvNhwhh]jÑ ubeubeubeubh…)ró }rô (h\X8The library section should contain the following fields:rõ h]jY hhhihjh‰hl}rö (hn]ho]hp]hq]ht]uhvMÇhwhhx]r÷ hX8The library section should contain the following fields:rø …rù }rú (h\jõ hhNhvNhwhh]jó ubaubj*)rû }rü (h\Uh]jY hhhihjj-hl}rý (hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rþ }rÿ (h\Uh]jY hhhihjj2hl}r!(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr!j8j!uhvNhwhhx]r!(j:)r!}r!(h\X exposed-modules: identifier listh]jþ hhhihjj>hl}r!(hq]r!X!pkg-field-library-exposed-modulesr!ahp]hn]ho]ht]jB‰uhvMÎhwhhx]r!(j*)r !}r !(h\Uh]j!hhhihjj-hl}r !(hq]hp]hn]ho]ht]Uentries]r !(jHX,library:exposed-modules; package.cabal fieldj!UNtr !auhvMÎhwhhx]ubjJ)r!}r!(h\Xexposed-modulesr!h]j!hhhihjjMhl}r!(jÚjÛhq]hp]hn]ho]ht]uhvMÎhwhhx]r!hXexposed-modulesr!…r!}r!(h\UhhNhvNhwhh]j!ubaubjS)r!}r!(h\jÌh]j!hhhihjjVhl}r!(jÚjÛhq]hp]hn]ho]ht]uhvMÎhwhhx]r!hX: r!…r!}r!(h\UhhNhvNhwhh]j!ubaubjÒ)r!}r!(h\Xidentifier listh]j!hhhihjjÕhl}r!(jÚjÛhq]hp]hn]ho]ht]uhvMÎhwhhx]r !hXidentifier listr!!…r"!}r#!(h\UhhNhvNhwhh]j!ubaubeubj[)r$!}r%!(h\Uh]jþ hhhihjj^hl}r&!(hn]ho]hp]hq]ht]uhvMÎhwhhx]r'!(ja)r(!}r)!(h\Uh]j$!hhhihjjdhl}r*!(hn]ho]hp]hq]ht]uhvNhwhhx]r+!jg)r,!}r-!(h\Uh]j(!hhhihjjjhl}r.!(hn]ho]hp]hq]ht]uhvMËhwhhx]r/!(jm)r0!}r1!(h\Xrequiredh]j,!hhhihjjqhl}r2!(hn]ho]hp]hq]ht]uhvKhx]r3!hXRequiredr4!…r5!}r6!(h\Uh]j0!ubaubjw)r7!}r8!(h\X#if this package contains a library hl}r9!(hn]ho]hp]hq]ht]uh]j,!hx]r:!h…)r;!}r!(hn]ho]hp]hq]ht]uhvMËhx]r?!hX"if this package contains a libraryr@!…rA!}rB!(h\j=!h]j;!ubaubahjj„ubeubaubh…)rC!}rD!(h\X(A list of modules added by this package.rE!h]j$!hhhihjh‰hl}rF!(hn]ho]hp]hq]ht]uhvMÍhwhhx]rG!hX(A list of modules added by this package.rH!…rI!}rJ!(h\jE!hhNhvNhwhh]jC!ubaubeubeubj*)rK!}rL!(h\Uh]jY hhhihjj-hl}rM!(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rN!}rO!(h\Uh]jY hhhihjj2hl}rP!(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrQ!j8jQ!uhvNhwhhx]rR!(j:)rS!}rT!(h\X virtual-modules: identifier listh]jN!hhhihjj>hl}rU!(hq]rV!X!pkg-field-library-virtual-modulesrW!ahp]hn]ho]ht]jB‰uhvNhwhhx]rX!(j*)rY!}rZ!(h\Uh]jS!hhhihjj-hl}r[!(hq]hp]hn]ho]ht]Uentries]r\!(jHX,library:virtual-modules; package.cabal fieldjW!UNtr]!auhvNhwhhx]ubjJ)r^!}r_!(h\Xvirtual-modulesr`!h]jS!hhhihjjMhl}ra!(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rb!hXvirtual-modulesrc!…rd!}re!(h\UhhNhvNhwhh]j^!ubaubjS)rf!}rg!(h\jÌh]jS!hhhihjjVhl}rh!(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]ri!hX: rj!…rk!}rl!(h\UhhNhvNhwhh]jf!ubaubjÒ)rm!}rn!(h\Xidentifier listh]jS!hhhihjjÕhl}ro!(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rp!hXidentifier listrq!…rr!}rs!(h\UhhNhvNhwhh]jm!ubaubeubj[)rt!}ru!(h\Uh]jN!hhhihjj^hl}rv!(hn]ho]hp]hq]ht]uhvNhwhhx]rw!(ja)rx!}ry!(h\Uh]jt!hhhihjjdhl}rz!(hn]ho]hp]hq]ht]uhvNhwhhx]r{!jg)r|!}r}!(h\Uh]jx!hhhihjjjhl}r~!(hn]ho]hp]hq]ht]uhvNhwhhx]r!(jm)r€!}r!(h\jph]j|!hhhihjjqhl}r‚!(hn]ho]hp]hq]ht]uhvKhx]rƒ!hXSincer„!…r…!}r†!(h\Uh]j€!ubaubjw)r‡!}rˆ!(h\U Cabal 2.2r‰!hl}rŠ!(hn]ho]hp]hq]ht]uh]j|!hx]r‹!h…)rŒ!}r!(h\j‰!hl}rŽ!(hn]ho]hp]hq]ht]uh]j‡!hx]r!hX Cabal 2.2r!…r‘!}r’!(h\Uh]jŒ!ubahjh‰ubahjj„ubeubaubh…)r“!}r”!(h\XaA list of virtual modules provided by this package. Virtual modules are modules without a source file. See for example the ``GHC.Prim`` module from the ``ghc-prim`` package. Modules listed here will not be built, but still end up in the list of ``exposed-modules`` in the installed package info when the package is registered in the package database.h]jt!hhhihjh‰hl}r•!(hn]ho]hp]hq]ht]uhvMÒhwhhx]r–!(hX}A list of virtual modules provided by this package. Virtual modules are modules without a source file. See for example the r—!…r˜!}r™!(h\X}A list of virtual modules provided by this package. Virtual modules are modules without a source file. See for example the hhNhvNhwhh]j“!ubhç)rš!}r›!(h\X ``GHC.Prim``hl}rœ!(hn]ho]hp]hq]ht]uh]j“!hx]r!hXGHC.Primrž!…rŸ!}r !(h\XGHC.Primh]jš!ubahjhïubhX module from the r¡!…r¢!}r£!(h\X module from the hhNhvNhwhh]j“!ubhç)r¤!}r¥!(h\X ``ghc-prim``hl}r¦!(hn]ho]hp]hq]ht]uh]j“!hx]r§!hXghc-primr¨!…r©!}rª!(h\Xghc-primh]j¤!ubahjhïubhXR package. Modules listed here will not be built, but still end up in the list of r«!…r¬!}r­!(h\XR package. Modules listed here will not be built, but still end up in the list of hhNhvNhwhh]j“!ubhç)r®!}r¯!(h\X``exposed-modules``hl}r°!(hn]ho]hp]hq]ht]uh]j“!hx]r±!hXexposed-modulesr²!…r³!}r´!(h\Xexposed-modulesh]j®!ubahjhïubhXV in the installed package info when the package is registered in the package database.rµ!…r¶!}r·!(h\XV in the installed package info when the package is registered in the package database.hhNhvNhwhh]j“!ubeubeubeubj*)r¸!}r¹!(h\Uh]jY hhhihjj-hl}rº!(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r»!}r¼!(h\Uh]jY hhhihjj2hl}r½!(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr¾!j8j¾!uhvNhwhhx]r¿!(j:)rÀ!}rÁ!(h\Xexposed: booleanh]j»!hhhihjj>hl}rÂ!(hq]rÃ!Xpkg-field-library-exposedrÄ!ahp]hn]ho]ht]jB‰uhvMéhwhhx]rÅ!(j*)rÆ!}rÇ!(h\Uh]jÀ!hhhihjj-hl}rÈ!(hq]hp]hn]ho]ht]Uentries]rÉ!(jHX$library:exposed; package.cabal fieldjÄ!UNtrÊ!auhvMéhwhhx]ubjJ)rË!}rÌ!(h\XexposedrÍ!h]jÀ!hhhihjjMhl}rÎ!(jÚjÛhq]hp]hn]ho]ht]uhvMéhwhhx]rÏ!hXexposedrÐ!…rÑ!}rÒ!(h\UhhNhvNhwhh]jË!ubaubjS)rÓ!}rÔ!(h\jÌh]jÀ!hhhihjjVhl}rÕ!(jÚjÛhq]hp]hn]ho]ht]uhvMéhwhhx]rÖ!hX: r×!…rØ!}rÙ!(h\UhhNhvNhwhh]jÓ!ubaubjÒ)rÚ!}rÛ!(h\Xbooleanh]jÀ!hhhihjjÕhl}rÜ!(jÚjÛhq]hp]hn]ho]ht]uhvMéhwhhx]rÝ!hXbooleanrÞ!…rß!}rà!(h\UhhNhvNhwhh]jÚ!ubaubeubj[)rá!}râ!(h\Uh]j»!hhhihjj^hl}rã!(hn]ho]hp]hq]ht]uhvMéhwhhx]rä!(ja)rå!}ræ!(h\Uh]já!hhhihjjdhl}rç!(hn]ho]hp]hq]ht]uhvNhwhhx]rè!jg)ré!}rê!(h\Uhl}rë!(hn]ho]hp]hq]ht]uh]jå!hx]rì!(jm)rí!}rî!(h\X Default valueh]jé!hhhihjjqhl}rï!(hn]ho]hp]hq]ht]uhvKhx]rð!hX Default valuerñ!…rò!}ró!(h\Uh]jí!ubaubjw)rô!}rõ!(h\Uhl}rö!(hn]ho]hp]hq]ht]uh]jé!hx]r÷!h…)rø!}rù!(h\XTruehl}rú!(hn]ho]hp]hq]ht]uh]jô!hx]rû!hç)rü!}rý!(h\X``True``rþ!h]jø!hhhihjhïhl}rÿ!(hn]ho]hp]hq]ht]uhvNhwhhx]r"hXTruer"…r"}r"(h\XTruehhNhvNhwhh]jü!ubaubahjh‰ubahjj„ubehjjjubaubh…)r"}r"(h\XmSome Haskell compilers (notably GHC) support the notion of packages being "exposed" or "hidden" which means the modules they provide can be easily imported without always having to specify which package they come from. However this only works effectively if the modules provided by all exposed packages do not overlap (otherwise a module import would be ambiguous).r"h]já!hhhihjh‰hl}r"(hn]ho]hp]hq]ht]uhvMÝhwhhx]r"hXuSome Haskell compilers (notably GHC) support the notion of packages being “exposed†or “hidden†which means the modules they provide can be easily imported without always having to specify which package they come from. However this only works effectively if the modules provided by all exposed packages do not overlap (otherwise a module import would be ambiguous).r "…r "}r "(h\j"hhNhvNhwhh]j"ubaubh…)r "}r "(h\X>Almost all new libraries use hierarchical module names that do not clash, so it is very uncommon to have to use this field. However it may be necessary to set ``exposed: False`` for some old libraries that use a flat module namespace or where it is known that the exposed modules would clash with other common modules.h]já!hhhihjh‰hl}r"(hn]ho]hp]hq]ht]uhvMähwhhx]r"(hXŸAlmost all new libraries use hierarchical module names that do not clash, so it is very uncommon to have to use this field. However it may be necessary to set r"…r"}r"(h\XŸAlmost all new libraries use hierarchical module names that do not clash, so it is very uncommon to have to use this field. However it may be necessary to set hhNhvNhwhh]j "ubhç)r"}r"(h\X``exposed: False``hl}r"(hn]ho]hp]hq]ht]uh]j "hx]r"hXexposed: Falser"…r"}r"(h\Xexposed: Falseh]j"ubahjhïubhX for some old libraries that use a flat module namespace or where it is known that the exposed modules would clash with other common modules.r"…r"}r"(h\X for some old libraries that use a flat module namespace or where it is known that the exposed modules would clash with other common modules.hhNhvNhwhh]j "ubeubeubeubj*)r"}r"(h\Uh]jY hhhihjj-hl}r"(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r "}r!"(h\Uh]jY hhhihjj2hl}r""(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr#"j8j#"uhvNhwhhx]r$"(j:)r%"}r&"(h\X visibility: visibilty specifiersh]j "hhhihjj>hl}r'"(hq]r("Xpkg-field-library-visibilityr)"ahp]hn]ho]ht]jB‰uhvMóhwhhx]r*"(j*)r+"}r,"(h\Uh]j%"hhhihjj-hl}r-"(hq]hp]hn]ho]ht]Uentries]r."(jHX'library:visibility; package.cabal fieldj)"UNtr/"auhvMóhwhhx]ubjJ)r0"}r1"(h\X visibilityr2"h]j%"hhhihjjMhl}r3"(jÚjÛhq]hp]hn]ho]ht]uhvMóhwhhx]r4"hX visibilityr5"…r6"}r7"(h\UhhNhvNhwhh]j0"ubaubjS)r8"}r9"(h\jÌh]j%"hhhihjjVhl}r:"(jÚjÛhq]hp]hn]ho]ht]uhvMóhwhhx]r;"hX: r<"…r="}r>"(h\UhhNhvNhwhh]j8"ubaubjÒ)r?"}r@"(h\Xvisibilty specifiersh]j%"hhhihjjÕhl}rA"(jÚjÛhq]hp]hn]ho]ht]uhvMóhwhhx]rB"hXvisibilty specifiersrC"…rD"}rE"(h\UhhNhvNhwhh]j?"ubaubeubj[)rF"}rG"(h\Uh]j "hhhihjj^hl}rH"(hn]ho]hp]hq]ht]uhvMóhwhhx]rI"(h…)rJ"}rK"(h\X :since 3.0rL"h]jF"hhhihjh‰hl}rM"(hn]ho]hp]hq]ht]uhvMìhwhhx]rN"hX :since 3.0rO"…rP"}rQ"(h\jL"hhNhvNhwhh]jJ"ubaubja)rR"}rS"(h\Uh]jF"hhhihjjdhl}rT"(hn]ho]hp]hq]ht]uhvNhwhhx]rU"jg)rV"}rW"(h\Uhl}rX"(hn]ho]hp]hq]ht]uh]jR"hx]rY"(jm)rZ"}r["(h\X Default valueh]jV"hhhihjjqhl}r\"(hn]ho]hp]hq]ht]uhvKhx]r]"hX Default valuer^"…r_"}r`"(h\Uh]jZ"ubaubjw)ra"}rb"(h\Uhl}rc"(hn]ho]hp]hq]ht]uh]jV"hx]rd"h…)re"}rf"(h\XAprivate for internal libraries. Cannot be set for public library.hl}rg"(hn]ho]hp]hq]ht]uh]ja"hx]rh"(hç)ri"}rj"(h\X ``private``h]je"hhhihjhïhl}rk"(hn]ho]hp]hq]ht]uhvNhwhhx]rl"hXprivaterm"…rn"}ro"(h\XprivatehhNhvNhwhh]ji"ubaubhX: for internal libraries. Cannot be set for public library.rp"…rq"}rr"(h\X: for internal libraries. Cannot be set for public library.hhNhvNhwhh]je"ubehjh‰ubahjj„ubehjjjubaubh…)rs"}rt"(h\X3Cabal recognizes ``public`` and ``private`` here...h]jF"hhhihjh‰hl}ru"(hn]ho]hp]hq]ht]uhvMðhwhhx]rv"(hXCabal recognizes rw"…rx"}ry"(h\XCabal recognizes hhNhvNhwhh]js"ubhç)rz"}r{"(h\X ``public``hl}r|"(hn]ho]hp]hq]ht]uh]js"hx]r}"hXpublicr~"…r"}r€"(h\Xpublich]jz"ubahjhïubhX and r"…r‚"}rƒ"(h\X and hhNhvNhwhh]js"ubhç)r„"}r…"(h\X ``private``hl}r†"(hn]ho]hp]hq]ht]uh]js"hx]r‡"hXprivaterˆ"…r‰"}rŠ"(h\Xprivateh]j„"ubahjhïubhX here…r‹"…rŒ"}r"(h\X here...hhNhvNhwhh]js"ubeubh…)rŽ"}r"(h\XMultiple public libraries...r"h]jF"hhhihjh‰hl}r‘"(hn]ho]hp]hq]ht]uhvMòhwhhx]r’"hXMultiple public libraries…r“"…r”"}r•"(h\j"hhNhvNhwhh]jŽ"ubaubeubeubj*)r–"}r—"(h\Uh]jY hhhihjj-hl}r˜"(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r™"}rš"(h\Uh]jY hhhihjj2hl}r›"(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrœ"j8jœ"uhvNhwhhx]r"(j:)rž"}rŸ"(h\Xreexported-modules: exportlisth]j™"hhhihjj>hl}r "(hq]r¡"X$pkg-field-library-reexported-modulesr¢"ahp]hn]ho]ht]jB‰uhvNhwhhx]r£"(j*)r¤"}r¥"(h\Uh]jž"hhhihjj-hl}r¦"(hq]hp]hn]ho]ht]Uentries]r§"(jHX/library:reexported-modules; package.cabal fieldj¢"UNtr¨"auhvNhwhhx]ubjJ)r©"}rª"(h\Xreexported-modulesr«"h]jž"hhhihjjMhl}r¬"(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r­"hXreexported-modulesr®"…r¯"}r°"(h\UhhNhvNhwhh]j©"ubaubjS)r±"}r²"(h\jÌh]jž"hhhihjjVhl}r³"(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r´"hX: rµ"…r¶"}r·"(h\UhhNhvNhwhh]j±"ubaubjÒ)r¸"}r¹"(h\X exportlisth]jž"hhhihjjÕhl}rº"(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r»"hX exportlistr¼"…r½"}r¾"(h\UhhNhvNhwhh]j¸"ubaubeubj[)r¿"}rÀ"(h\Uh]j™"hhhihjj^hl}rÁ"(hn]ho]hp]hq]ht]uhvNhwhhx]rÂ"(ja)rÃ"}rÄ"(h\Uh]j¿"hhhihjjdhl}rÅ"(hn]ho]hp]hq]ht]uhvNhwhhx]rÆ"jg)rÇ"}rÈ"(h\Uh]jÃ"hhhihjjjhl}rÉ"(hn]ho]hp]hq]ht]uhvNhwhhx]rÊ"(jm)rË"}rÌ"(h\jph]jÇ"hhhihjjqhl}rÍ"(hn]ho]hp]hq]ht]uhvKhx]rÎ"hXSincerÏ"…rÐ"}rÑ"(h\Uh]jË"ubaubjw)rÒ"}rÓ"(h\U Cabal 1.22rÔ"hl}rÕ"(hn]ho]hp]hq]ht]uh]jÇ"hx]rÖ"h…)r×"}rØ"(h\jÔ"hl}rÙ"(hn]ho]hp]hq]ht]uh]jÒ"hx]rÚ"hX Cabal 1.22rÛ"…rÜ"}rÝ"(h\Uh]j×"ubahjh‰ubahjj„ubeubaubh…)rÞ"}rß"(h\XÄSupported only in GHC 7.10 and later. A list of modules to *reexport* from this package. The syntax of this field is ``orig-pkg:Name as NewName`` to reexport module ``Name`` from ``orig-pkg`` with the new name ``NewName``. We also support abbreviated versions of the syntax: if you omit ``as NewName``, we'll reexport without renaming; if you omit ``orig-pkg``, then we will automatically figure out which package to reexport from, if it's unambiguous.h]j¿"hhhihjh‰hl}rà"(hn]ho]hp]hq]ht]uhvM÷hwhhx]rá"(hX;Supported only in GHC 7.10 and later. A list of modules to râ"…rã"}rä"(h\X;Supported only in GHC 7.10 and later. A list of modules to hhNhvNhwhh]jÞ"ubhÇ)rå"}ræ"(h\X *reexport*hl}rç"(hn]ho]hp]hq]ht]uh]jÞ"hx]rè"hXreexportré"…rê"}rë"(h\Xreexporth]jå"ubahjhÏubhX0 from this package. The syntax of this field is rì"…rí"}rî"(h\X0 from this package. The syntax of this field is hhNhvNhwhh]jÞ"ubhç)rï"}rð"(h\X``orig-pkg:Name as NewName``hl}rñ"(hn]ho]hp]hq]ht]uh]jÞ"hx]rò"hXorig-pkg:Name as NewNameró"…rô"}rõ"(h\Xorig-pkg:Name as NewNameh]jï"ubahjhïubhX to reexport module rö"…r÷"}rø"(h\X to reexport module hhNhvNhwhh]jÞ"ubhç)rù"}rú"(h\X``Name``hl}rû"(hn]ho]hp]hq]ht]uh]jÞ"hx]rü"hXNamerý"…rþ"}rÿ"(h\XNameh]jù"ubahjhïubhX from r#…r#}r#(h\X from hhNhvNhwhh]jÞ"ubhç)r#}r#(h\X ``orig-pkg``hl}r#(hn]ho]hp]hq]ht]uh]jÞ"hx]r#hXorig-pkgr#…r#}r #(h\Xorig-pkgh]j#ubahjhïubhX with the new name r #…r #}r #(h\X with the new name hhNhvNhwhh]jÞ"ubhç)r #}r#(h\X ``NewName``hl}r#(hn]ho]hp]hq]ht]uh]jÞ"hx]r#hXNewNamer#…r#}r#(h\XNewNameh]j #ubahjhïubhXB. We also support abbreviated versions of the syntax: if you omit r#…r#}r#(h\XB. We also support abbreviated versions of the syntax: if you omit hhNhvNhwhh]jÞ"ubhç)r#}r#(h\X``as NewName``hl}r#(hn]ho]hp]hq]ht]uh]jÞ"hx]r#hX as NewNamer#…r#}r#(h\X as NewNameh]j#ubahjhïubhX1, we’ll reexport without renaming; if you omit r#…r#}r #(h\X/, we'll reexport without renaming; if you omit hhNhvNhwhh]jÞ"ubhç)r!#}r"#(h\X ``orig-pkg``hl}r##(hn]ho]hp]hq]ht]uh]jÞ"hx]r$#hXorig-pkgr%#…r&#}r'#(h\Xorig-pkgh]j!#ubahjhïubhX^, then we will automatically figure out which package to reexport from, if it’s unambiguous.r(#…r)#}r*#(h\X\, then we will automatically figure out which package to reexport from, if it's unambiguous.hhNhvNhwhh]jÞ"ubeubh…)r+#}r,#(h\XhReexported modules are useful for compatibility shims when a package has been split into multiple packages, and they have the useful property that if a package provides a module, and another package reexports it under the same name, these are not considered a conflict (as would be the case with a stub module.) They can also be used to resolve name conflicts.r-#h]j¿"hhhihjh‰hl}r.#(hn]ho]hp]hq]ht]uhvMhwhhx]r/#hXhReexported modules are useful for compatibility shims when a package has been split into multiple packages, and they have the useful property that if a package provides a module, and another package reexports it under the same name, these are not considered a conflict (as would be the case with a stub module.) They can also be used to resolve name conflicts.r0#…r1#}r2#(h\j-#hhNhvNhwhh]j+#ubaubeubeubj*)r3#}r4#(h\Uh]jY hhhihjj-hl}r5#(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r6#}r7#(h\Uh]jY hhhihjj2hl}r8#(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr9#j8j9#uhvNhwhhx]r:#(j:)r;#}r<#(h\Xsignatures: signature listh]j6#hhhihjj>hl}r=#(hq]r>#Xpkg-field-library-signaturesr?#ahp]hn]ho]ht]jB‰uhvNhwhhx]r@#(j*)rA#}rB#(h\Uh]j;#hhhihjj-hl}rC#(hq]hp]hn]ho]ht]Uentries]rD#(jHX'library:signatures; package.cabal fieldj?#UNtrE#auhvNhwhhx]ubjJ)rF#}rG#(h\X signaturesrH#h]j;#hhhihjjMhl}rI#(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rJ#hX signaturesrK#…rL#}rM#(h\UhhNhvNhwhh]jF#ubaubjS)rN#}rO#(h\jÌh]j;#hhhihjjVhl}rP#(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rQ#hX: rR#…rS#}rT#(h\UhhNhvNhwhh]jN#ubaubjÒ)rU#}rV#(h\Xsignature listh]j;#hhhihjjÕhl}rW#(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rX#hXsignature listrY#…rZ#}r[#(h\UhhNhvNhwhh]jU#ubaubeubj[)r\#}r]#(h\Uh]j6#hhhihjj^hl}r^#(hn]ho]hp]hq]ht]uhvNhwhhx]r_#(ja)r`#}ra#(h\Uh]j\#hhhihjjdhl}rb#(hn]ho]hp]hq]ht]uhvNhwhhx]rc#jg)rd#}re#(h\Uh]j`#hhhihjjjhl}rf#(hn]ho]hp]hq]ht]uhvNhwhhx]rg#(jm)rh#}ri#(h\jph]jd#hhhihjjqhl}rj#(hn]ho]hp]hq]ht]uhvKhx]rk#hXSincerl#…rm#}rn#(h\Uh]jh#ubaubjw)ro#}rp#(h\U Cabal 2.0rq#hl}rr#(hn]ho]hp]hq]ht]uh]jd#hx]rs#h…)rt#}ru#(h\jq#hl}rv#(hn]ho]hp]hq]ht]uh]jo#hx]rw#hX Cabal 2.0rx#…ry#}rz#(h\Uh]jt#ubahjh‰ubahjj„ubeubaubh…)r{#}r|#(h\XÂSupported only in GHC 8.2 and later. A list of `module signatures `__ required by this package.h]j\#hhhihjh‰hl}r}#(hn]ho]hp]hq]ht]uhvM hwhhx]r~#(hX/Supported only in GHC 8.2 and later. A list of r#…r€#}r#(h\X/Supported only in GHC 8.2 and later. A list of hhNhvNhwhh]j{#ubjH)r‚#}rƒ#(h\Xy`module signatures `__hl}r„#(UnameXmodule signaturesj‡Xahttps://downloads.haskell.org/~ghc/master/users-guide/separate_compilation.html#module-signatureshq]hp]hn]ho]ht]uh]j{#hx]r…#hXmodule signaturesr†#…r‡#}rˆ#(h\Xmodule signaturesh]j‚#ubahjjLubhX required by this package.r‰#…rŠ#}r‹#(h\X required by this package.hhNhvNhwhh]j{#ubeubh…)rŒ#}r#(h\XSModule signatures are part of the Backpack_ extension to the Haskell module system.h]j\#hhhihjh‰hl}rŽ#(hn]ho]hp]hq]ht]uhvM hwhhx]r#(hX"Module signatures are part of the r#…r‘#}r’#(h\X"Module signatures are part of the hhNhvNhwhh]jŒ#ubjH)r“#}r”#(h\X Backpack_jKKh]jŒ#hjjLhl}r•#(UnameXBackpackr–#j‡jõhq]hp]hn]ho]ht]uhx]r—#hXBackpackr˜#…r™#}rš#(h\j–#h]j“#ubaubhX( extension to the Haskell module system.r›#…rœ#}r#(h\X( extension to the Haskell module system.hhNhvNhwhh]jŒ#ubeubh…)rž#}rŸ#(h\XúPackages that do not export any modules and only export required signatures are called "signature-only packages", and their signatures are subjected to `signature thinning `__.h]j\#hhhihjh‰hl}r #(hn]ho]hp]hq]ht]uhvMhwhhx]r¡#(hXœPackages that do not export any modules and only export required signatures are called “signature-only packagesâ€, and their signatures are subjected to r¢#…r£#}r¤#(h\X˜Packages that do not export any modules and only export required signatures are called "signature-only packages", and their signatures are subjected to hhNhvNhwhh]jž#ubjH)r¥#}r¦#(h\Xa`signature thinning `__hl}r§#(UnameXsignature thinningj‡XHhttps://wiki.haskell.org/Module_signature#How_to_use_a_signature_packagehq]hp]hn]ho]ht]uh]jž#hx]r¨#hXsignature thinningr©#…rª#}r«#(h\Xsignature thinningh]j¥#ubahjjLubhX.…r¬#}r­#(h\X.hhNhvNhwhh]jž#ubeubeubeubh…)r®#}r¯#(h\XhThe library section may also contain build information fields (see the section on `build information`_).h]jY hhhihjh‰hl}r°#(hn]ho]hp]hq]ht]uhvMhwhhx]r±#(hXRThe library section may also contain build information fields (see the section on r²#…r³#}r´#(h\XRThe library section may also contain build information fields (see the section on hhNhvNhwhh]j®#ubjH)rµ#}r¶#(h\X`build information`_jKKh]j®#hjjLhl}r·#(UnameXbuild informationhq]hp]hn]ho]ht]jNj uhx]r¸#hXbuild informationr¹#…rº#}r»#(h\Xbuild informationh]jµ#ubaubhX).r¼#…r½#}r¾#(h\X).hhNhvNhwhh]j®#ubeubj©)r¿#}rÀ#(h\X .. _sublibs:h]jY hhhihjj¬hl}rÁ#(hq]hp]hn]ho]ht]jNUsublibsrÂ#uhvMhwhhx]ubh…)rÃ#}rÄ#(h\X**Internal Libraries**rÅ#h]jY hhhij·}rÆ#hj¿#shjh‰hl}rÇ#(hn]ho]hp]hq]rÈ#jÂ#aht]rÉ#hauhvMhwhj¿}rÊ#jÂ#j¿#shx]rË#j²)rÌ#}rÍ#(h\jÅ#hl}rÎ#(hn]ho]hp]hq]ht]uh]jÃ#hx]rÏ#hXInternal LibrariesrÐ#…rÑ#}rÒ#(h\XInternal Librariesh]jÌ#ubahjjºubaubh…)rÓ#}rÔ#(h\XÄCabal 2.0 and later support "internal libraries", which are extra named libraries (as opposed to the usual unnamed library section). For example, suppose that your test suite needs access to some internal modules in your library, which you do not otherwise want to export. You could put these modules in an internal library, which the main library and the test suite :pkg-field:`build-depends` upon. Then your Cabal file might look something like this:h]jY hhhihjh‰hl}rÕ#(hn]ho]hp]hq]ht]uhvMhwhhx]rÖ#(hXsCabal 2.0 and later support “internal librariesâ€, which are extra named libraries (as opposed to the usual unnamed library section). For example, suppose that your test suite needs access to some internal modules in your library, which you do not otherwise want to export. You could put these modules in an internal library, which the main library and the test suite r×#…rØ#}rÙ#(h\XoCabal 2.0 and later support "internal libraries", which are extra named libraries (as opposed to the usual unnamed library section). For example, suppose that your test suite needs access to some internal modules in your library, which you do not otherwise want to export. You could put these modules in an internal library, which the main library and the test suite hhNhvNhwhh]jÓ#ubjt)rÚ#}rÛ#(h\X:pkg-field:`build-depends`h]jÓ#hhhihjjwhl}rÜ#(UreftypeX pkg-fieldjyˆjzX build-dependsrÝ#U refdomainXcabalrÞ#hq]hp]U refexplicit‰hn]ho]ht]j}j~j”j§ uhvMhx]rß#hç)rà#}rá#(h\jÝ#hl}râ#(hn]ho]rã#(j…jÞ#Xcabal-pkg-fieldrä#ehp]hq]ht]uh]jÚ#hx]rå#hX build-dependsræ#…rç#}rè#(h\Uh]jà#ubahjhïubaubhX; upon. Then your Cabal file might look something like this:ré#…rê#}rë#(h\X; upon. Then your Cabal file might look something like this:hhNhvNhwhh]jÓ#ubeubjÕ)rì#}rí#(h\Xˆcabal-version: 2.0 name: foo version: 0.1.0.0 license: BSD3 build-type: Simple library foo-internal exposed-modules: Foo.Internal -- NOTE: no explicit constraints on base needed -- as they're inherited from the 'library' stanza build-depends: base library exposed-modules: Foo.Public build-depends: foo-internal, base >= 4.3 && < 5 test-suite test-foo type: exitcode-stdio-1.0 main-is: test-foo.hs -- NOTE: no constraints on 'foo-internal' as same-package -- dependencies implicitly refer to the same package instance build-depends: foo-internal, baseh]jY hhhihjjØhl}rî#(jÚjÛhq]hp]hn]ho]ht]uhvM'hwhhx]rï#hXˆcabal-version: 2.0 name: foo version: 0.1.0.0 license: BSD3 build-type: Simple library foo-internal exposed-modules: Foo.Internal -- NOTE: no explicit constraints on base needed -- as they're inherited from the 'library' stanza build-depends: base library exposed-modules: Foo.Public build-depends: foo-internal, base >= 4.3 && < 5 test-suite test-foo type: exitcode-stdio-1.0 main-is: test-foo.hs -- NOTE: no constraints on 'foo-internal' as same-package -- dependencies implicitly refer to the same package instance build-depends: foo-internal, baserð#…rñ#}rò#(h\Uh]jì#ubaubh…)ró#}rô#(h\XEInternal libraries are also useful for packages that define multiple executables, but do not define a publically accessible library. Internal libraries are only visible internally in the package (so they can only be added to the :pkg-field:`build-depends` of same-package libraries, executables, test suites, etc.) Internal libraries locally shadow any packages which have the same name; consequently, don't name an internal library with the same name as an external dependency if you need to be able to refer to the external dependency in a :pkg-field:`build-depends` declaration.h]jY hhhihjh‰hl}rõ#(hn]ho]hp]hq]ht]uhvM>hwhhx]rö#(hXåInternal libraries are also useful for packages that define multiple executables, but do not define a publically accessible library. Internal libraries are only visible internally in the package (so they can only be added to the r÷#…rø#}rù#(h\XåInternal libraries are also useful for packages that define multiple executables, but do not define a publically accessible library. Internal libraries are only visible internally in the package (so they can only be added to the hhNhvNhwhh]jó#ubjt)rú#}rû#(h\X:pkg-field:`build-depends`h]jó#hhhihjjwhl}rü#(UreftypeX pkg-fieldjyˆjzX build-dependsrý#U refdomainXcabalrþ#hq]hp]U refexplicit‰hn]ho]ht]j}j~j”j§ uhvM>hx]rÿ#hç)r$}r$(h\jý#hl}r$(hn]ho]r$(j…jþ#Xcabal-pkg-fieldr$ehp]hq]ht]uh]jú#hx]r$hX build-dependsr$…r$}r$(h\Uh]j$ubahjhïubaubhX! of same-package libraries, executables, test suites, etc.) Internal libraries locally shadow any packages which have the same name; consequently, don’t name an internal library with the same name as an external dependency if you need to be able to refer to the external dependency in a r $…r $}r $(h\X of same-package libraries, executables, test suites, etc.) Internal libraries locally shadow any packages which have the same name; consequently, don't name an internal library with the same name as an external dependency if you need to be able to refer to the external dependency in a hhNhvNhwhh]jó#ubjt)r $}r $(h\X:pkg-field:`build-depends`h]jó#hhhihjjwhl}r$(UreftypeX pkg-fieldjyˆjzX build-dependsr$U refdomainXcabalr$hq]hp]U refexplicit‰hn]ho]ht]j}j~j”j§ uhvM>hx]r$hç)r$}r$(h\j$hl}r$(hn]ho]r$(j…j$Xcabal-pkg-fieldr$ehp]hq]ht]uh]j $hx]r$hX build-dependsr$…r$}r$(h\Uh]j$ubahjhïubaubhX declaration.r$…r$}r$(h\X declaration.hhNhvNhwhh]jó#ubeubh…)r$}r$(h\X¢Shadowing can be used to vendor an external dependency into a package and thus emulate *private dependencies*. Below is an example based on a real-world use case:h]jY hhhihjh‰hl}r $(hn]ho]hp]hq]ht]uhvMHhwhhx]r!$(hXWShadowing can be used to vendor an external dependency into a package and thus emulate r"$…r#$}r$$(h\XWShadowing can be used to vendor an external dependency into a package and thus emulate hhNhvNhwhh]j$ubhÇ)r%$}r&$(h\X*private dependencies*hl}r'$(hn]ho]hp]hq]ht]uh]j$hx]r($hXprivate dependenciesr)$…r*$}r+$(h\Xprivate dependenciesh]j%$ubahjhÏubhX5. Below is an example based on a real-world use case:r,$…r-$}r.$(h\X5. Below is an example based on a real-world use case:hhNhvNhwhh]j$ubeubjÕ)r/$}r0$(h\XQcabal-version: 2.2 name: haddock-library version: 1.6.0 library build-depends: , base ^>= 4.11.1.0 , bytestring ^>= 0.10.2.0 , containers ^>= 0.4.2.1 || ^>= 0.5.0.0 , transformers ^>= 0.5.0.0 hs-source-dirs: src -- internal sub-lib build-depends: attoparsec exposed-modules: Documentation.Haddock library attoparsec build-depends: , base ^>= 4.11.1.0 , bytestring ^>= 0.10.2.0 , deepseq ^>= 1.4.0.0 hs-source-dirs: vendor/attoparsec-0.13.1.0 -- NB: haddock-library needs only small part of lib:attoparsec -- internally, so we only bundle that subset here exposed-modules: Data.Attoparsec.ByteString Data.Attoparsec.Combinator other-modules: Data.Attoparsec.Internal ghc-options: -funbox-strict-fields -Wall -fwarn-tabs -O2h]jY hhhihjjØhl}r1$(jÚjÛhq]hp]hn]ho]ht]uhvMNhwhhx]r2$hXQcabal-version: 2.2 name: haddock-library version: 1.6.0 library build-depends: , base ^>= 4.11.1.0 , bytestring ^>= 0.10.2.0 , containers ^>= 0.4.2.1 || ^>= 0.5.0.0 , transformers ^>= 0.5.0.0 hs-source-dirs: src -- internal sub-lib build-depends: attoparsec exposed-modules: Documentation.Haddock library attoparsec build-depends: , base ^>= 4.11.1.0 , bytestring ^>= 0.10.2.0 , deepseq ^>= 1.4.0.0 hs-source-dirs: vendor/attoparsec-0.13.1.0 -- NB: haddock-library needs only small part of lib:attoparsec -- internally, so we only bundle that subset here exposed-modules: Data.Attoparsec.ByteString Data.Attoparsec.Combinator other-modules: Data.Attoparsec.Internal ghc-options: -funbox-strict-fields -Wall -fwarn-tabs -O2r3$…r4$}r5$(h\Uh]j/$ubaubeubh^)r6$}r7$(h\Uh]hdhhhihjhkhl}r8$(hn]ho]hp]hq]r9$Uopening-an-interpreter-sessionr:$aht]r;$hNauhvMvhwhhx]r<$(hz)r=$}r>$(h\XOpening an interpreter sessionr?$h]j6$hhhihjh~hl}r@$(hn]ho]hp]hq]ht]uhvMvhwhhx]rA$hXOpening an interpreter sessionrB$…rC$}rD$(h\j?$hhNhvNhwhh]j=$ubaubh…)rE$}rF$(h\X”While developing a package, it is often useful to make its code available inside an interpreter session. This can be done with the ``repl`` command:h]j6$hhhihjh‰hl}rG$(hn]ho]hp]hq]ht]uhvMxhwhhx]rH$(hXƒWhile developing a package, it is often useful to make its code available inside an interpreter session. This can be done with the rI$…rJ$}rK$(h\XƒWhile developing a package, it is often useful to make its code available inside an interpreter session. This can be done with the hhNhvNhwhh]jE$ubhç)rL$}rM$(h\X``repl``hl}rN$(hn]ho]hp]hq]ht]uh]jE$hx]rO$hXreplrP$…rQ$}rR$(h\Xreplh]jL$ubahjhïubhX command:rS$…rT$}rU$(h\X command:hhNhvNhwhh]jE$ubeubjÕ)rV$}rW$(h\X $ cabal replh]j6$hhhihjjØhl}rX$(j‰jXconsolejÚjÛhq]hp]hn]j}ho]ht]uhvM|hwhhx]rY$hX $ cabal replrZ$…r[$}r\$(h\Uh]jV$ubaubh…)r]$}r^$(h\X¥The name comes from the acronym `REPL `__, which stands for "read-eval-print-loop". By default ``cabal repl`` loads the first component in a package. If the package contains several named components, the name can be given as an argument to ``repl``. The name can be also optionally prefixed with the component's type for disambiguation purposes. Example:h]j6$hhhihjh‰hl}r_$(hn]ho]hp]hq]ht]uhvM€hwhhx]r`$(hX The name comes from the acronym ra$…rb$}rc$(h\X The name comes from the acronym hhNhvNhwhh]j]$ubjH)rd$}re$(h\XL`REPL `__hl}rf$(UnameXREPLj‡XAhttp://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loophq]hp]hn]ho]ht]uh]j]$hx]rg$hXREPLrh$…ri$}rj$(h\XREPLh]jd$ubahjjLubhX:, which stands for “read-eval-print-loopâ€. By default rk$…rl$}rm$(h\X6, which stands for "read-eval-print-loop". By default hhNhvNhwhh]j]$ubhç)rn$}ro$(h\X``cabal repl``hl}rp$(hn]ho]hp]hq]ht]uh]j]$hx]rq$hX cabal replrr$…rs$}rt$(h\X cabal replh]jn$ubahjhïubhXƒ loads the first component in a package. If the package contains several named components, the name can be given as an argument to ru$…rv$}rw$(h\Xƒ loads the first component in a package. If the package contains several named components, the name can be given as an argument to hhNhvNhwhh]j]$ubhç)rx$}ry$(h\X``repl``hl}rz$(hn]ho]hp]hq]ht]uh]j]$hx]r{$hXreplr|$…r}$}r~$(h\Xreplh]jx$ubahjhïubhXl. The name can be also optionally prefixed with the component’s type for disambiguation purposes. Example:r$…r€$}r$(h\Xj. The name can be also optionally prefixed with the component's type for disambiguation purposes. Example:hhNhvNhwhh]j]$ubeubjÕ)r‚$}rƒ$(h\XR$ cabal repl foo $ cabal repl exe:foo $ cabal repl test:bar $ cabal repl bench:bazh]j6$hhhihjjØhl}r„$(j‰jXconsolejÚjÛhq]hp]hn]j}ho]ht]uhvMˆhwhhx]r…$hXR$ cabal repl foo $ cabal repl exe:foo $ cabal repl test:bar $ cabal repl bench:bazr†$…r‡$}rˆ$(h\Uh]j‚$ubaubh^)r‰$}rŠ$(h\Uh]j6$hhhihjhkhl}r‹$(hn]ho]hp]hq]rŒ$Ufreezing-dependency-versionsr$aht]rŽ$h"auhvMhwhhx]r$(hz)r$}r‘$(h\XFreezing dependency versionsr’$h]j‰$hhhihjh~hl}r“$(hn]ho]hp]hq]ht]uhvMhwhhx]r”$hXFreezing dependency versionsr•$…r–$}r—$(h\j’$hhNhvNhwhh]j$ubaubh…)r˜$}r™$(h\X,If a package is built in several different environments, such as a development environment, a staging environment and a production environment, it may be necessary or desirable to ensure that the same dependency versions are selected in each environment. This can be done with the ``freeze`` command:h]j‰$hhhihjh‰hl}rš$(hn]ho]hp]hq]ht]uhvM’hwhhx]r›$(hXIf a package is built in several different environments, such as a development environment, a staging environment and a production environment, it may be necessary or desirable to ensure that the same dependency versions are selected in each environment. This can be done with the rœ$…r$}rž$(h\XIf a package is built in several different environments, such as a development environment, a staging environment and a production environment, it may be necessary or desirable to ensure that the same dependency versions are selected in each environment. This can be done with the hhNhvNhwhh]j˜$ubhç)rŸ$}r $(h\X ``freeze``hl}r¡$(hn]ho]hp]hq]ht]uh]j˜$hx]r¢$hXfreezer£$…r¤$}r¥$(h\Xfreezeh]jŸ$ubahjhïubhX command:r¦$…r§$}r¨$(h\X command:hhNhvNhwhh]j˜$ubeubjÕ)r©$}rª$(h\X$ cabal freezeh]j‰$hhhihjjØhl}r«$(j‰jXconsolejÚjÛhq]hp]hn]j}ho]ht]uhvM˜hwhhx]r¬$hX$ cabal freezer­$…r®$}r¯$(h\Uh]j©$ubaubh…)r°$}r±$(h\X³The command writes the selected version for all dependencies to the ``cabal.config`` file. All environments which share this file will use the dependency versions specified in it.h]j‰$hhhihjh‰hl}r²$(hn]ho]hp]hq]ht]uhvMœhwhhx]r³$(hXDThe command writes the selected version for all dependencies to the r´$…rµ$}r¶$(h\XDThe command writes the selected version for all dependencies to the hhNhvNhwhh]j°$ubhç)r·$}r¸$(h\X``cabal.config``hl}r¹$(hn]ho]hp]hq]ht]uh]j°$hx]rº$hX cabal.configr»$…r¼$}r½$(h\X cabal.configh]j·$ubahjhïubhX_ file. All environments which share this file will use the dependency versions specified in it.r¾$…r¿$}rÀ$(h\X_ file. All environments which share this file will use the dependency versions specified in it.hhNhvNhwhh]j°$ubeubeubh^)rÁ$}rÂ$(h\Uh]j6$hhhihjhkhl}rÃ$(hn]ho]hp]hq]rÄ$U$generating-dependency-version-boundsrÅ$aht]rÆ$hauhvM¡hwhhx]rÇ$(hz)rÈ$}rÉ$(h\X$Generating dependency version boundsrÊ$h]jÁ$hhhihjh~hl}rË$(hn]ho]hp]hq]ht]uhvM¡hwhhx]rÌ$hX$Generating dependency version boundsrÍ$…rÎ$}rÏ$(h\jÊ$hhNhvNhwhh]jÈ$ubaubh…)rÐ$}rÑ$(h\XðCabal also has the ability to suggest dependency version bounds that conform to `Package Versioning Policy`_, which is a recommended versioning system for publicly released Cabal packages. This is done by running the ``gen-bounds`` command:h]jÁ$hhhihjh‰hl}rÒ$(hn]ho]hp]hq]ht]uhvM£hwhhx]rÓ$(hXPCabal also has the ability to suggest dependency version bounds that conform to rÔ$…rÕ$}rÖ$(h\XPCabal also has the ability to suggest dependency version bounds that conform to hhNhvNhwhh]jÐ$ubjH)r×$}rØ$(h\X`Package Versioning Policy`_jKKh]jÐ$hjjLhl}rÙ$(UnameXPackage Versioning Policyj‡j²hq]hp]hn]ho]ht]uhx]rÚ$hXPackage Versioning PolicyrÛ$…rÜ$}rÝ$(h\XPackage Versioning Policyh]j×$ubaubhXm, which is a recommended versioning system for publicly released Cabal packages. This is done by running the rÞ$…rß$}rà$(h\Xm, which is a recommended versioning system for publicly released Cabal packages. This is done by running the hhNhvNhwhh]jÐ$ubhç)rá$}râ$(h\X``gen-bounds``hl}rã$(hn]ho]hp]hq]ht]uh]jÐ$hx]rä$hX gen-boundsrå$…ræ$}rç$(h\X gen-boundsh]já$ubahjhïubhX command:rè$…ré$}rê$(h\X command:hhNhvNhwhh]jÐ$ubeubjÕ)rë$}rì$(h\X$ cabal gen-boundsh]jÁ$hhhihjjØhl}rí$(j‰jXconsolejÚjÛhq]hp]hn]j}ho]ht]uhvM¨hwhhx]rî$hX$ cabal gen-boundsrï$…rð$}rñ$(h\Uh]jë$ubaubh…)rò$}ró$(h\XVFor example, given the following dependencies specified in :pkg-field:`build-depends`:h]jÁ$hhhihjh‰hl}rô$(hn]ho]hp]hq]ht]uhvM¬hwhhx]rõ$(hX;For example, given the following dependencies specified in rö$…r÷$}rø$(h\X;For example, given the following dependencies specified in hhNhvNhwhh]jò$ubjt)rù$}rú$(h\X:pkg-field:`build-depends`h]jò$hhhihjjwhl}rû$(UreftypeX pkg-fieldjyˆjzX build-dependsrü$U refdomainXcabalrý$hq]hp]U refexplicit‰hn]ho]ht]j}j~j”j§ uhvM¬hx]rþ$hç)rÿ$}r%(h\jü$hl}r%(hn]ho]r%(j…jý$Xcabal-pkg-fieldr%ehp]hq]ht]uh]jù$hx]r%hX build-dependsr%…r%}r%(h\Uh]jÿ$ubahjhïubaubhX:…r%}r %(h\X:hhNhvNhwhh]jò$ubeubjÕ)r %}r %(h\X*build-depends: foo == 0.5.2 bar == 1.1h]jÁ$hhhihjjØhl}r %(jÚjÛhq]hp]hn]ho]ht]uhvM±hwhhx]r %hX*build-depends: foo == 0.5.2 bar == 1.1r%…r%}r%(h\Uh]j %ubaubh…)r%}r%(h\X;``gen-bounds`` will suggest changing them to the following:r%h]jÁ$hhhihjh‰hl}r%(hn]ho]hp]hq]ht]uhvMµhwhhx]r%(hç)r%}r%(h\X``gen-bounds``hl}r%(hn]ho]hp]hq]ht]uh]j%hx]r%hX gen-boundsr%…r%}r%(h\X gen-boundsh]j%ubahjhïubhX- will suggest changing them to the following:r%…r%}r%(h\X- will suggest changing them to the following:hhNhvNhwhh]j%ubeubjÕ)r %}r!%(h\X<build-depends: foo >= 0.5.2 && < 0.6 bar >= 1.1 && < 1.2h]jÁ$hhhihjjØhl}r"%(jÚjÛhq]hp]hn]ho]ht]uhvM¹hwhhx]r#%hX<build-depends: foo >= 0.5.2 && < 0.6 bar >= 1.1 && < 1.2r$%…r%%}r&%(h\Uh]j %ubaubeubh^)r'%}r(%(h\Uh]j6$hhhihjhkhl}r)%(hn]ho]hp]hq]r*%U*listing-outdated-dependency-version-boundsr+%aht]r,%hauhvM¾hwhhx]r-%(hz)r.%}r/%(h\X*Listing outdated dependency version boundsr0%h]j'%hhhihjh~hl}r1%(hn]ho]hp]hq]ht]uhvM¾hwhhx]r2%hX*Listing outdated dependency version boundsr3%…r4%}r5%(h\j0%hhNhvNhwhh]j.%ubaubh…)r6%}r7%(h\XManually updating dependency version bounds in a ``.cabal`` file or a freeze file can be tedious, especially when there's a lot of dependencies. The ``cabal outdated`` command is designed to help with that. It will print a list of packages for which there is a new version on Hackage that is outside the version bound specified in the ``build-depends`` field. The ``outdated`` command can also be configured to act on the freeze file (both old- and v2-style) and ignore major (or all) version bumps on Hackage for a subset of dependencies.h]j'%hhhihjh‰hl}r8%(hn]ho]hp]hq]ht]uhvMÀhwhhx]r9%(hX1Manually updating dependency version bounds in a r:%…r;%}r<%(h\X1Manually updating dependency version bounds in a hhNhvNhwhh]j6%ubhç)r=%}r>%(h\X ``.cabal``hl}r?%(hn]ho]hp]hq]ht]uh]j6%hx]r@%hX.cabalrA%…rB%}rC%(h\X.cabalh]j=%ubahjhïubhX\ file or a freeze file can be tedious, especially when there’s a lot of dependencies. The rD%…rE%}rF%(h\XZ file or a freeze file can be tedious, especially when there's a lot of dependencies. The hhNhvNhwhh]j6%ubhç)rG%}rH%(h\X``cabal outdated``hl}rI%(hn]ho]hp]hq]ht]uh]j6%hx]rJ%hXcabal outdatedrK%…rL%}rM%(h\Xcabal outdatedh]jG%ubahjhïubhX¨ command is designed to help with that. It will print a list of packages for which there is a new version on Hackage that is outside the version bound specified in the rN%…rO%}rP%(h\X¨ command is designed to help with that. It will print a list of packages for which there is a new version on Hackage that is outside the version bound specified in the hhNhvNhwhh]j6%ubhç)rQ%}rR%(h\X``build-depends``hl}rS%(hn]ho]hp]hq]ht]uh]j6%hx]rT%hX build-dependsrU%…rV%}rW%(h\X build-dependsh]jQ%ubahjhïubhX field. The rX%…rY%}rZ%(h\X field. The hhNhvNhwhh]j6%ubhç)r[%}r\%(h\X ``outdated``hl}r]%(hn]ho]hp]hq]ht]uh]j6%hx]r^%hXoutdatedr_%…r`%}ra%(h\Xoutdatedh]j[%ubahjhïubhX£ command can also be configured to act on the freeze file (both old- and v2-style) and ignore major (or all) version bumps on Hackage for a subset of dependencies.rb%…rc%}rd%(h\X£ command can also be configured to act on the freeze file (both old- and v2-style) and ignore major (or all) version bumps on Hackage for a subset of dependencies.hhNhvNhwhh]j6%ubeubh…)re%}rf%(h\X>The following flags are supported by the ``outdated`` command:rg%h]j'%hhhihjh‰hl}rh%(hn]ho]hp]hq]ht]uhvMÊhwhhx]ri%(hX)The following flags are supported by the rj%…rk%}rl%(h\X)The following flags are supported by the hhNhvNhwhh]je%ubhç)rm%}rn%(h\X ``outdated``hl}ro%(hn]ho]hp]hq]ht]uh]je%hx]rp%hXoutdatedrq%…rr%}rs%(h\Xoutdatedh]jm%ubahjhïubhX command:rt%…ru%}rv%(h\X command:hhNhvNhwhh]je%ubeubj)rw%}rx%(h\Uh]j'%hhhihjjhl}ry%(hn]ho]hp]hq]ht]uhvNhwhhx]rz%(j)r{%}r|%(h\Xà``--freeze-file`` Read dependency version bounds from the freeze file (``cabal.config``) instead of the package description file (``$PACKAGENAME.cabal``). ``--v1-freeze-file`` is an alias for this flag starting in Cabal 2.4.h]jw%hhhihjj!hl}r}%(hn]ho]hp]hq]ht]uhvMÎhx]r~%(j$)r%}r€%(h\X``--freeze-file``r%h]j{%hhhihjj(hl}r‚%(hn]ho]hp]hq]ht]uhvMÎhx]rƒ%hç)r„%}r…%(h\j%hl}r†%(hn]ho]hp]hq]ht]uh]j%hx]r‡%hX --freeze-filerˆ%…r‰%}rŠ%(h\X --freeze-fileh]j„%ubahjhïubaubj<)r‹%}rŒ%(h\Uhl}r%(hn]ho]hp]hq]ht]uh]j{%hx]rŽ%h…)r%}r%(h\XÎRead dependency version bounds from the freeze file (``cabal.config``) instead of the package description file (``$PACKAGENAME.cabal``). ``--v1-freeze-file`` is an alias for this flag starting in Cabal 2.4.h]j‹%hhhihjh‰hl}r‘%(hn]ho]hp]hq]ht]uhvMÍhx]r’%(hX5Read dependency version bounds from the freeze file (r“%…r”%}r•%(h\X5Read dependency version bounds from the freeze file (h]j%ubhç)r–%}r—%(h\X``cabal.config``hl}r˜%(hn]ho]hp]hq]ht]uh]j%hx]r™%hX cabal.configrš%…r›%}rœ%(h\X cabal.configh]j–%ubahjhïubhX+) instead of the package description file (r%…rž%}rŸ%(h\X+) instead of the package description file (h]j%ubhç)r %}r¡%(h\X``$PACKAGENAME.cabal``hl}r¢%(hn]ho]hp]hq]ht]uh]j%hx]r£%hX$PACKAGENAME.cabalr¤%…r¥%}r¦%(h\X$PACKAGENAME.cabalh]j %ubahjhïubhX). r§%…r¨%}r©%(h\X). h]j%ubhç)rª%}r«%(h\X``--v1-freeze-file``hl}r¬%(hn]ho]hp]hq]ht]uh]j%hx]r­%hX--v1-freeze-filer®%…r¯%}r°%(h\X--v1-freeze-fileh]jª%ubahjhïubhX1 is an alias for this flag starting in Cabal 2.4.r±%…r²%}r³%(h\X1 is an alias for this flag starting in Cabal 2.4.h]j%ubeubahjjVubeubj)r´%}rµ%(h\X``--v2-freeze-file`` :since: 2.4 Read dependency version bounds from the v2-style freeze file (by default, ``cabal.project.freeze``) instead of the package description file. ``--new-freeze-file`` is an alias for this flag that can be used with pre-2.4 ``cabal``.h]jw%hhhihjj!hl}r¶%(hn]ho]hp]hq]ht]uhvMÕhwhhx]r·%(j$)r¸%}r¹%(h\X``--v2-freeze-file``rº%h]j´%hhhihjj(hl}r»%(hn]ho]hp]hq]ht]uhvMÕhx]r¼%hç)r½%}r¾%(h\jº%hl}r¿%(hn]ho]hp]hq]ht]uh]j¸%hx]rÀ%hX--v2-freeze-filerÁ%…rÂ%}rÃ%(h\X--v2-freeze-fileh]j½%ubahjhïubaubj<)rÄ%}rÅ%(h\Uhl}rÆ%(hn]ho]hp]hq]ht]uh]j´%hx]rÇ%(ja)rÈ%}rÉ%(h\Uhl}rÊ%(hn]ho]hp]hq]ht]uh]jÄ%hx]rË%jg)rÌ%}rÍ%(h\Uh]jÈ%hhhihjjjhl}rÎ%(hn]ho]hp]hq]ht]uhvMÑhx]rÏ%(jm)rÐ%}rÑ%(h\XsincerÒ%h]jÌ%hhhihjjqhl}rÓ%(hn]ho]hp]hq]ht]uhvKhx]rÔ%hXsincerÕ%…rÖ%}r×%(h\jÒ%h]jÐ%ubaubjw)rØ%}rÙ%(h\X2.4 hl}rÚ%(hn]ho]hp]hq]ht]uh]jÌ%hx]rÛ%h…)rÜ%}rÝ%(h\X2.4rÞ%h]jØ%hhhihjh‰hl}rß%(hn]ho]hp]hq]ht]uhvMÑhx]rà%hX2.4rá%…râ%}rã%(h\jÞ%h]jÜ%ubaubahjj„ubeubahjjdubh…)rä%}rå%(h\XåRead dependency version bounds from the v2-style freeze file (by default, ``cabal.project.freeze``) instead of the package description file. ``--new-freeze-file`` is an alias for this flag that can be used with pre-2.4 ``cabal``.h]jÄ%hhhihjh‰hl}ræ%(hn]ho]hp]hq]ht]uhvMÓhx]rç%(hXJRead dependency version bounds from the v2-style freeze file (by default, rè%…ré%}rê%(h\XJRead dependency version bounds from the v2-style freeze file (by default, h]jä%ubhç)rë%}rì%(h\X``cabal.project.freeze``hl}rí%(hn]ho]hp]hq]ht]uh]jä%hx]rî%hXcabal.project.freezerï%…rð%}rñ%(h\Xcabal.project.freezeh]jë%ubahjhïubhX+) instead of the package description file. rò%…ró%}rô%(h\X+) instead of the package description file. h]jä%ubhç)rõ%}rö%(h\X``--new-freeze-file``hl}r÷%(hn]ho]hp]hq]ht]uh]jä%hx]rø%hX--new-freeze-filerù%…rú%}rû%(h\X--new-freeze-fileh]jõ%ubahjhïubhX9 is an alias for this flag that can be used with pre-2.4 rü%…rý%}rþ%(h\X9 is an alias for this flag that can be used with pre-2.4 h]jä%ubhç)rÿ%}r&(h\X ``cabal``hl}r&(hn]ho]hp]hq]ht]uh]jä%hx]r&hXcabalr&…r&}r&(h\Xcabalh]jÿ%ubahjhïubhX.…r&}r&(h\X.h]jä%ubeubehjjVubeubj)r&}r &(h\Xv``--project-file`` *PROJECTFILE* :since: 2.4 Read dependendency version bounds from the v2-style freeze file related to the named project file (i.e., ``$PROJECTFILE.freeze``) instead of the package desctription file. If multiple ``--project-file`` flags are provided, only the final one is considered. This flag must only be passed in when ``--new-freeze-file`` is present.h]jw%hhhihjj!hl}r &(hn]ho]hp]hq]ht]uhvMÝhwhhx]r &(j$)r &}r &(h\X ``--project-file`` *PROJECTFILE*r&h]j&hhhihjj(hl}r&(hn]ho]hp]hq]ht]uhvMÝhx]r&(hç)r&}r&(h\X``--project-file``hl}r&(hn]ho]hp]hq]ht]uh]j &hx]r&hX--project-filer&…r&}r&(h\X--project-fileh]j&ubahjhïubhX …r&}r&(h\X h]j &ubhÇ)r&}r&(h\X *PROJECTFILE*hl}r&(hn]ho]hp]hq]ht]uh]j &hx]r&hX PROJECTFILEr&…r&}r &(h\X PROJECTFILEh]j&ubahjhÏubeubj<)r!&}r"&(h\Uhl}r#&(hn]ho]hp]hq]ht]uh]j&hx]r$&(ja)r%&}r&&(h\Uhl}r'&(hn]ho]hp]hq]ht]uh]j!&hx]r(&jg)r)&}r*&(h\Uh]j%&hhhihjjjhl}r+&(hn]ho]hp]hq]ht]uhvMØhx]r,&(jm)r-&}r.&(h\Xsincer/&h]j)&hhhihjjqhl}r0&(hn]ho]hp]hq]ht]uhvKhx]r1&hXsincer2&…r3&}r4&(h\j/&h]j-&ubaubjw)r5&}r6&(h\X2.4 hl}r7&(hn]ho]hp]hq]ht]uh]j)&hx]r8&h…)r9&}r:&(h\X2.4r;&h]j5&hhhihjh‰hl}r<&(hn]ho]hp]hq]ht]uhvMØhx]r=&hX2.4r>&…r?&}r@&(h\j;&h]j9&ubaubahjj„ubeubahjjdubh…)rA&}rB&(h\XHRead dependendency version bounds from the v2-style freeze file related to the named project file (i.e., ``$PROJECTFILE.freeze``) instead of the package desctription file. If multiple ``--project-file`` flags are provided, only the final one is considered. This flag must only be passed in when ``--new-freeze-file`` is present.h]j!&hhhihjh‰hl}rC&(hn]ho]hp]hq]ht]uhvMÚhx]rD&(hXiRead dependendency version bounds from the v2-style freeze file related to the named project file (i.e., rE&…rF&}rG&(h\XiRead dependendency version bounds from the v2-style freeze file related to the named project file (i.e., h]jA&ubhç)rH&}rI&(h\X``$PROJECTFILE.freeze``hl}rJ&(hn]ho]hp]hq]ht]uh]jA&hx]rK&hX$PROJECTFILE.freezerL&…rM&}rN&(h\X$PROJECTFILE.freezeh]jH&ubahjhïubhX8) instead of the package desctription file. If multiple rO&…rP&}rQ&(h\X8) instead of the package desctription file. If multiple h]jA&ubhç)rR&}rS&(h\X``--project-file``hl}rT&(hn]ho]hp]hq]ht]uh]jA&hx]rU&hX--project-filerV&…rW&}rX&(h\X--project-fileh]jR&ubahjhïubhX] flags are provided, only the final one is considered. This flag must only be passed in when rY&…rZ&}r[&(h\X] flags are provided, only the final one is considered. This flag must only be passed in when h]jA&ubhç)r\&}r]&(h\X``--new-freeze-file``hl}r^&(hn]ho]hp]hq]ht]uh]jA&hx]r_&hX--new-freeze-filer`&…ra&}rb&(h\X--new-freeze-fileh]j\&ubahjhïubhX is present.rc&…rd&}re&(h\X is present.h]jA&ubeubehjjVubeubj)rf&}rg&(h\XP``--simple-output`` Print only the names of outdated dependencies, one per line.h]jw%hhhihjj!hl}rh&(hn]ho]hp]hq]ht]uhvMßhwhhx]ri&(j$)rj&}rk&(h\X``--simple-output``rl&h]jf&hhhihjj(hl}rm&(hn]ho]hp]hq]ht]uhvMßhx]rn&hç)ro&}rp&(h\jl&hl}rq&(hn]ho]hp]hq]ht]uh]jj&hx]rr&hX--simple-outputrs&…rt&}ru&(h\X--simple-outputh]jo&ubahjhïubaubj<)rv&}rw&(h\Uhl}rx&(hn]ho]hp]hq]ht]uh]jf&hx]ry&h…)rz&}r{&(h\X<Print only the names of outdated dependencies, one per line.r|&h]jv&hhhihjh‰hl}r}&(hn]ho]hp]hq]ht]uhvMàhx]r~&hX<Print only the names of outdated dependencies, one per line.r&…r€&}r&(h\j|&h]jz&ubaubahjjVubeubj)r‚&}rƒ&(h\XT``--exit-code`` Exit with a non-zero exit code when there are outdated dependencies.h]jw%hhhihjj!hl}r„&(hn]ho]hp]hq]ht]uhvMáhwhhx]r…&(j$)r†&}r‡&(h\X``--exit-code``rˆ&h]j‚&hhhihjj(hl}r‰&(hn]ho]hp]hq]ht]uhvMáhx]rŠ&hç)r‹&}rŒ&(h\jˆ&hl}r&(hn]ho]hp]hq]ht]uh]j†&hx]rŽ&hX --exit-coder&…r&}r‘&(h\X --exit-codeh]j‹&ubahjhïubaubj<)r’&}r“&(h\Uhl}r”&(hn]ho]hp]hq]ht]uh]j‚&hx]r•&h…)r–&}r—&(h\XDExit with a non-zero exit code when there are outdated dependencies.r˜&h]j’&hhhihjh‰hl}r™&(hn]ho]hp]hq]ht]uhvMâhx]rš&hXDExit with a non-zero exit code when there are outdated dependencies.r›&…rœ&}r&(h\j˜&h]j–&ubaubahjjVubeubj)rž&}rŸ&(h\XL``-q, --quiet`` Don't print any output. Implies ``-v0`` and ``--exit-code``.h]jw%hhhihjj!hl}r &(hn]ho]hp]hq]ht]uhvMãhwhhx]r¡&(j$)r¢&}r£&(h\X``-q, --quiet``r¤&h]jž&hhhihjj(hl}r¥&(hn]ho]hp]hq]ht]uhvMãhx]r¦&hç)r§&}r¨&(h\j¤&hl}r©&(hn]ho]hp]hq]ht]uh]j¢&hx]rª&hX -q, --quietr«&…r¬&}r­&(h\X -q, --quieth]j§&ubahjhïubaubj<)r®&}r¯&(h\Uhl}r°&(hn]ho]hp]hq]ht]uh]jž&hx]r±&h…)r²&}r³&(h\X<Don't print any output. Implies ``-v0`` and ``--exit-code``.h]j®&hhhihjh‰hl}r´&(hn]ho]hp]hq]ht]uhvMähx]rµ&(hX"Don’t print any output. Implies r¶&…r·&}r¸&(h\X Don't print any output. Implies h]j²&ubhç)r¹&}rº&(h\X``-v0``hl}r»&(hn]ho]hp]hq]ht]uh]j²&hx]r¼&hX-v0r½&…r¾&}r¿&(h\X-v0h]j¹&ubahjhïubhX and rÀ&…rÁ&}rÂ&(h\X and h]j²&ubhç)rÃ&}rÄ&(h\X``--exit-code``hl}rÅ&(hn]ho]hp]hq]ht]uh]j²&hx]rÆ&hX --exit-coderÇ&…rÈ&}rÉ&(h\X --exit-codeh]jÃ&ubahjhïubhX.…rÊ&}rË&(h\X.h]j²&ubeubahjjVubeubj)rÌ&}rÍ&(h\Xn``--ignore`` *PACKAGENAMES* Don't warn about outdated dependency version bounds for the packages in this list.h]jw%hhhihjj!hl}rÎ&(hn]ho]hp]hq]ht]uhvMæhwhhx]rÏ&(j$)rÐ&}rÑ&(h\X``--ignore`` *PACKAGENAMES*rÒ&h]jÌ&hhhihjj(hl}rÓ&(hn]ho]hp]hq]ht]uhvMæhx]rÔ&(hç)rÕ&}rÖ&(h\X ``--ignore``hl}r×&(hn]ho]hp]hq]ht]uh]jÐ&hx]rØ&hX--ignorerÙ&…rÚ&}rÛ&(h\X--ignoreh]jÕ&ubahjhïubhX …rÜ&}rÝ&(h\X h]jÐ&ubhÇ)rÞ&}rß&(h\X*PACKAGENAMES*hl}rà&(hn]ho]hp]hq]ht]uh]jÐ&hx]rá&hX PACKAGENAMESrâ&…rã&}rä&(h\X PACKAGENAMESh]jÞ&ubahjhÏubeubj<)rå&}ræ&(h\Uhl}rç&(hn]ho]hp]hq]ht]uh]jÌ&hx]rè&h…)ré&}rê&(h\XRDon't warn about outdated dependency version bounds for the packages in this list.rë&h]jå&hhhihjh‰hl}rì&(hn]ho]hp]hq]ht]uhvMæhx]rí&hXTDon’t warn about outdated dependency version bounds for the packages in this list.rî&…rï&}rð&(h\jë&h]jé&ubaubahjjVubeubj)rñ&}rò&(h\XÖ``--minor`` *[PACKAGENAMES]* Ignore major version bumps for these packages. E.g. if there's a version 2.0 of a package ``pkg`` on Hackage and the freeze file specifies the constraint ``pkg == 1.9``, ``cabal outdated --freeze --minor=pkg`` will only consider the ``pkg`` outdated when there's a version of ``pkg`` on Hackage satisfying ``pkg > 1.9 && < 2.0``. ``--minor`` can also be used without arguments, in that case major version bumps are ignored for all packages. h]jw%hhhihjj!hl}ró&(hn]ho]hp]hq]ht]uhvMîhwhhx]rô&(j$)rõ&}rö&(h\X``--minor`` *[PACKAGENAMES]*r÷&h]jñ&hhhihjj(hl}rø&(hn]ho]hp]hq]ht]uhvMîhx]rù&(hç)rú&}rû&(h\X ``--minor``hl}rü&(hn]ho]hp]hq]ht]uh]jõ&hx]rý&hX--minorrþ&…rÿ&}r'(h\X--minorh]jú&ubahjhïubhX …r'}r'(h\X h]jõ&ubhÇ)r'}r'(h\X*[PACKAGENAMES]*hl}r'(hn]ho]hp]hq]ht]uh]jõ&hx]r'hX[PACKAGENAMES]r'…r'}r '(h\X[PACKAGENAMES]h]j'ubahjhÏubeubj<)r '}r '(h\Uhl}r '(hn]ho]hp]hq]ht]uh]jñ&hx]r 'h…)r'}r'(h\X¸Ignore major version bumps for these packages. E.g. if there's a version 2.0 of a package ``pkg`` on Hackage and the freeze file specifies the constraint ``pkg == 1.9``, ``cabal outdated --freeze --minor=pkg`` will only consider the ``pkg`` outdated when there's a version of ``pkg`` on Hackage satisfying ``pkg > 1.9 && < 2.0``. ``--minor`` can also be used without arguments, in that case major version bumps are ignored for all packages.h]j 'hhhihjh‰hl}r'(hn]ho]hp]hq]ht]uhvMéhx]r'(hX\Ignore major version bumps for these packages. E.g. if there’s a version 2.0 of a package r'…r'}r'(h\XZIgnore major version bumps for these packages. E.g. if there's a version 2.0 of a package h]j'ubhç)r'}r'(h\X``pkg``hl}r'(hn]ho]hp]hq]ht]uh]j'hx]r'hXpkgr'…r'}r'(h\Xpkgh]j'ubahjhïubhX9 on Hackage and the freeze file specifies the constraint r'…r'}r'(h\X9 on Hackage and the freeze file specifies the constraint h]j'ubhç)r'}r '(h\X``pkg == 1.9``hl}r!'(hn]ho]hp]hq]ht]uh]j'hx]r"'hX pkg == 1.9r#'…r$'}r%'(h\X pkg == 1.9h]j'ubahjhïubhX, r&'…r''}r('(h\X, h]j'ubhç)r)'}r*'(h\X'``cabal outdated --freeze --minor=pkg``hl}r+'(hn]ho]hp]hq]ht]uh]j'hx]r,'hX#cabal outdated --freeze --minor=pkgr-'…r.'}r/'(h\X#cabal outdated --freeze --minor=pkgh]j)'ubahjhïubhX will only consider the r0'…r1'}r2'(h\X will only consider the h]j'ubhç)r3'}r4'(h\X``pkg``hl}r5'(hn]ho]hp]hq]ht]uh]j'hx]r6'hXpkgr7'…r8'}r9'(h\Xpkgh]j3'ubahjhïubhX& outdated when there’s a version of r:'…r;'}r<'(h\X$ outdated when there's a version of h]j'ubhç)r='}r>'(h\X``pkg``hl}r?'(hn]ho]hp]hq]ht]uh]j'hx]r@'hXpkgrA'…rB'}rC'(h\Xpkgh]j='ubahjhïubhX on Hackage satisfying rD'…rE'}rF'(h\X on Hackage satisfying h]j'ubhç)rG'}rH'(h\X``pkg > 1.9 && < 2.0``hl}rI'(hn]ho]hp]hq]ht]uh]j'hx]rJ'hXpkg > 1.9 && < 2.0rK'…rL'}rM'(h\Xpkg > 1.9 && < 2.0h]jG'ubahjhïubhX. rN'…rO'}rP'(h\X. h]j'ubhç)rQ'}rR'(h\X ``--minor``hl}rS'(hn]ho]hp]hq]ht]uh]j'hx]rT'hX--minorrU'…rV'}rW'(h\X--minorh]jQ'ubahjhïubhXc can also be used without arguments, in that case major version bumps are ignored for all packages.rX'…rY'}rZ'(h\Xc can also be used without arguments, in that case major version bumps are ignored for all packages.h]j'ubeubahjjVubeubeubh…)r['}r\'(h\X Examples:r]'h]j'%hhhihjh‰hl}r^'(hn]ho]hp]hq]ht]uhvMðhwhhx]r_'hX Examples:r`'…ra'}rb'(h\j]'hhNhvNhwhh]j['ubaubjÕ)rc'}rd'(h\XM$ cd /some/package $ cabal outdated Outdated dependencies: haskell-src-exts <1.17 (latest: 1.19.1) language-javascript <0.6 (latest: 0.6.0.9) unix ==2.7.2.0 (latest: 2.7.2.1) $ cabal outdated --simple-output haskell-src-exts language-javascript unix $ cabal outdated --ignore=haskell-src-exts Outdated dependencies: language-javascript <0.6 (latest: 0.6.0.9) unix ==2.7.2.0 (latest: 2.7.2.1) $ cabal outdated --ignore=haskell-src-exts,language-javascript,unix All dependencies are up to date. $ cabal outdated --ignore=haskell-src-exts,language-javascript,unix -q $ echo $? 0 $ cd /some/other/package $ cabal outdated --freeze-file Outdated dependencies: HTTP ==4000.3.3 (latest: 4000.3.4) HUnit ==1.3.1.1 (latest: 1.5.0.0) $ cabal outdated --freeze-file --ignore=HTTP --minor=HUnit Outdated dependencies: HUnit ==1.3.1.1 (latest: 1.3.1.2)h]j'%hhhihjjØhl}re'(j‰jXconsolejÚjÛhq]hp]hn]j}ho]ht]uhvMòhwhhx]rf'hXM$ cd /some/package $ cabal outdated Outdated dependencies: haskell-src-exts <1.17 (latest: 1.19.1) language-javascript <0.6 (latest: 0.6.0.9) unix ==2.7.2.0 (latest: 2.7.2.1) $ cabal outdated --simple-output haskell-src-exts language-javascript unix $ cabal outdated --ignore=haskell-src-exts Outdated dependencies: language-javascript <0.6 (latest: 0.6.0.9) unix ==2.7.2.0 (latest: 2.7.2.1) $ cabal outdated --ignore=haskell-src-exts,language-javascript,unix All dependencies are up to date. $ cabal outdated --ignore=haskell-src-exts,language-javascript,unix -q $ echo $? 0 $ cd /some/other/package $ cabal outdated --freeze-file Outdated dependencies: HTTP ==4000.3.3 (latest: 4000.3.4) HUnit ==1.3.1.1 (latest: 1.5.0.0) $ cabal outdated --freeze-file --ignore=HTTP --minor=HUnit Outdated dependencies: HUnit ==1.3.1.1 (latest: 1.3.1.2)rg'…rh'}ri'(h\Uh]jc'ubaubeubeubh^)rj'}rk'(h\Uh]hdhhhihjhkhl}rl'(hn]ho]hp]hq]rm'U executablesrn'aht]ro'hauhvMhwhhx]rp'(hz)rq'}rr'(h\X Executablesrs'h]jj'hhhihjh~hl}rt'(hn]ho]hp]hq]ht]uhvMhwhhx]ru'hX Executablesrv'…rw'}rx'(h\js'hhNhvNhwhh]jq'ubaubj*)ry'}rz'(h\Uh]jj'hhhihjj-hl}r{'(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r|'}r}'(h\Uh]jj'hhhihjj2hl}r~'(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-sectionr'j8j'uhvNhwhhx]r€'(j:)r'}r‚'(h\Xexecutable nameh]j|'hhhihjj>hl}rƒ'(hq]r„'X!pkg-section-executable-executabler…'ahp]hn]ho]ht]jB‰uhvNhwhhx]r†'(j*)r‡'}rˆ'(h\Uh]j'hhhihjj-hl}r‰'(hq]hp]hn]ho]ht]Uentries]rŠ'(jHX,executable:executable; package.cabal sectionj…'UNtr‹'auhvNhwhhx]ubjJ)rŒ'}r'(h\X executablerŽ'h]j'hhhihjjMhl}r'(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r'hX executabler‘'…r’'}r“'(h\UhhNhvNhwhh]jŒ'ubaubjS)r”'}r•'(h\U h]j'hhhihjjVhl}r–'(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r—'hX …r˜'}r™'(h\UhhNhvNhwhh]j”'ubaubjÒ)rš'}r›'(h\Xnameh]j'hhhihjjÕhl}rœ'(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r'hXnamerž'…rŸ'}r '(h\UhhNhvNhwhh]jš'ubaubeubj[)r¡'}r¢'(h\Uh]j|'hhhihjj^hl}r£'(hn]ho]hp]hq]ht]uhvNhwhhx]r¤'h…)r¥'}r¦'(h\XëExecutable sections (if present) describe executable programs contained in the package and must have an argument after the section label, which defines the name of the executable. This is a freeform argument but may not contain spaces.r§'h]j¡'hhhihjh‰hl}r¨'(hn]ho]hp]hq]ht]uhvMhwhhx]r©'hXëExecutable sections (if present) describe executable programs contained in the package and must have an argument after the section label, which defines the name of the executable. This is a freeform argument but may not contain spaces.rª'…r«'}r¬'(h\j§'hhNhvNhwhh]j¥'ubaubaubeubh…)r­'}r®'(h\XŠThe executable may be described using the following fields, as well as build information fields (see the section on `build information`_).h]jj'hhhihjh‰hl}r¯'(hn]ho]hp]hq]ht]uhvM"hwhhx]r°'(hXtThe executable may be described using the following fields, as well as build information fields (see the section on r±'…r²'}r³'(h\XtThe executable may be described using the following fields, as well as build information fields (see the section on hhNhvNhwhh]j­'ubjH)r´'}rµ'(h\X`build information`_jKKh]j­'hjjLhl}r¶'(UnameXbuild informationhq]hp]hn]ho]ht]jNj uhx]r·'hXbuild informationr¸'…r¹'}rº'(h\Xbuild informationh]j´'ubaubhX).r»'…r¼'}r½'(h\X).hhNhvNhwhh]j­'ubeubj*)r¾'}r¿'(h\Uh]jj'hhhihjj-hl}rÀ'(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rÁ'}rÂ'(h\Uh]jj'hhhihjj2hl}rÃ'(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrÄ'j8jÄ'uhvNhwhhx]rÅ'(j:)rÆ'}rÇ'(h\Xmain-is: filename (required)h]jÁ'hhhihjj>hl}rÈ'(hq]rÉ'Xpkg-field-executable-main-isrÊ'ahp]hn]ho]ht]jB‰uhvM0hwhhx]rË'(j*)rÌ'}rÍ'(h\Uh]jÆ'hhhihjj-hl}rÎ'(hq]hp]hn]ho]ht]Uentries]rÏ'(jHX'executable:main-is; package.cabal fieldjÊ'UNtrÐ'auhvM0hwhhx]ubjJ)rÑ'}rÒ'(h\Xmain-isrÓ'h]jÆ'hhhihjjMhl}rÔ'(jÚjÛhq]hp]hn]ho]ht]uhvM0hwhhx]rÕ'hXmain-isrÖ'…r×'}rØ'(h\UhhNhvNhwhh]jÑ'ubaubjS)rÙ'}rÚ'(h\jÌh]jÆ'hhhihjjVhl}rÛ'(jÚjÛhq]hp]hn]ho]ht]uhvM0hwhhx]rÜ'hX: rÝ'…rÞ'}rß'(h\UhhNhvNhwhh]jÙ'ubaubjÒ)rà'}rá'(h\Xfilename (required)h]jÆ'hhhihjjÕhl}râ'(jÚjÛhq]hp]hn]ho]ht]uhvM0hwhhx]rã'hXfilename (required)rä'…rå'}ræ'(h\UhhNhvNhwhh]jà'ubaubeubj[)rç'}rè'(h\Uh]jÁ'hhhihjj^hl}ré'(hn]ho]hp]hq]ht]uhvM0hwhhx]rê'(h…)rë'}rì'(h\XqThe name of the ``.hs`` or ``.lhs`` file containing the ``Main`` module. Note that it is the ``.hs`` filename that must be listed, even if that file is generated using a preprocessor. The source file must be relative to one of the directories listed in :pkg-field:`hs-source-dirs`. Further, while the name of the file may vary, the module itself must be named ``Main``.h]jç'hhhihjh‰hl}rí'(hn]ho]hp]hq]ht]uhvM'hwhhx]rî'(hXThe name of the rï'…rð'}rñ'(h\XThe name of the hhNhvNhwhh]jë'ubhç)rò'}ró'(h\X``.hs``hl}rô'(hn]ho]hp]hq]ht]uh]jë'hx]rõ'hX.hsrö'…r÷'}rø'(h\X.hsh]jò'ubahjhïubhX or rù'…rú'}rû'(h\X or hhNhvNhwhh]jë'ubhç)rü'}rý'(h\X``.lhs``hl}rþ'(hn]ho]hp]hq]ht]uh]jë'hx]rÿ'hX.lhsr(…r(}r((h\X.lhsh]jü'ubahjhïubhX file containing the r(…r(}r((h\X file containing the hhNhvNhwhh]jë'ubhç)r(}r((h\X``Main``hl}r((hn]ho]hp]hq]ht]uh]jë'hx]r (hXMainr (…r (}r ((h\XMainh]j(ubahjhïubhX module. Note that it is the r (…r(}r((h\X module. Note that it is the hhNhvNhwhh]jë'ubhç)r(}r((h\X``.hs``hl}r((hn]ho]hp]hq]ht]uh]jë'hx]r(hX.hsr(…r(}r((h\X.hsh]j(ubahjhïubhX™ filename that must be listed, even if that file is generated using a preprocessor. The source file must be relative to one of the directories listed in r(…r(}r((h\X™ filename that must be listed, even if that file is generated using a preprocessor. The source file must be relative to one of the directories listed in hhNhvNhwhh]jë'ubjt)r(}r((h\X:pkg-field:`hs-source-dirs`h]jë'hhhihjjwhl}r((UreftypeX pkg-fieldjyˆjzXhs-source-dirsr(U refdomainXcabalr(hq]hp]U refexplicit‰hn]ho]ht]j}j~j”X executabler(uhvM'hx]r (hç)r!(}r"((h\j(hl}r#((hn]ho]r$((j…j(Xcabal-pkg-fieldr%(ehp]hq]ht]uh]j(hx]r&(hXhs-source-dirsr'(…r((}r)((h\Uh]j!(ubahjhïubaubhXP. Further, while the name of the file may vary, the module itself must be named r*(…r+(}r,((h\XP. Further, while the name of the file may vary, the module itself must be named hhNhvNhwhh]jë'ubhç)r-(}r.((h\X``Main``hl}r/((hn]ho]hp]hq]ht]uh]jë'hx]r0(hXMainr1(…r2(}r3((h\XMainh]j-(ubahjhïubhX.…r4(}r5((h\X.hhNhvNhwhh]jë'ubeubh…)r6(}r7((h\X{Starting with ``cabal-version: 1.18`` this field supports specifying a C, C++, or objC source file as the main entry point.h]jç'hhhihjh‰hl}r8((hn]ho]hp]hq]ht]uhvM.hwhhx]r9((hXStarting with r:(…r;(}r<((h\XStarting with hhNhvNhwhh]j6(ubhç)r=(}r>((h\X``cabal-version: 1.18``hl}r?((hn]ho]hp]hq]ht]uh]j6(hx]r@(hXcabal-version: 1.18rA(…rB(}rC((h\Xcabal-version: 1.18h]j=(ubahjhïubhXV this field supports specifying a C, C++, or objC source file as the main entry point.rD(…rE(}rF((h\XV this field supports specifying a C, C++, or objC source file as the main entry point.hhNhvNhwhh]j6(ubeubeubeubj*)rG(}rH((h\Uh]jj'hhhihjj-hl}rI((hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rJ(}rK((h\Uh]jj'hhhihjj2hl}rL((j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrM(j8jM(uhvNhwhhx]rN((j:)rO(}rP((h\X scope: tokenh]jJ(hhhihjj>hl}rQ((hq]rR(Xpkg-field-executable-scoperS(ahp]hn]ho]ht]jB‰uhvNhwhhx]rT((j*)rU(}rV((h\Uh]jO(hhhihjj-hl}rW((hq]hp]hn]ho]ht]Uentries]rX((jHX%executable:scope; package.cabal fieldjS(UNtrY(auhvNhwhhx]ubjJ)rZ(}r[((h\Xscoper\(h]jO(hhhihjjMhl}r]((jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r^(hXscoper_(…r`(}ra((h\UhhNhvNhwhh]jZ(ubaubjS)rb(}rc((h\jÌh]jO(hhhihjjVhl}rd((jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]re(hX: rf(…rg(}rh((h\UhhNhvNhwhh]jb(ubaubjÒ)ri(}rj((h\Xtokenh]jO(hhhihjjÕhl}rk((jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rl(hXtokenrm(…rn(}ro((h\UhhNhvNhwhh]ji(ubaubeubj[)rp(}rq((h\Uh]jJ(hhhihjj^hl}rr((hn]ho]hp]hq]ht]uhvNhwhhx]rs((ja)rt(}ru((h\Uh]jp(hhhihjjdhl}rv((hn]ho]hp]hq]ht]uhvNhwhhx]rw(jg)rx(}ry((h\Uh]jt(hhhihjjjhl}rz((hn]ho]hp]hq]ht]uhvNhwhhx]r{((jm)r|(}r}((h\jph]jx(hhhihjjqhl}r~((hn]ho]hp]hq]ht]uhvKhx]r(hXSincer€(…r(}r‚((h\Uh]j|(ubaubjw)rƒ(}r„((h\U Cabal 2.0r…(hl}r†((hn]ho]hp]hq]ht]uh]jx(hx]r‡(h…)rˆ(}r‰((h\j…(hl}rŠ((hn]ho]hp]hq]ht]uh]jƒ(hx]r‹(hX Cabal 2.0rŒ(…r(}rŽ((h\Uh]jˆ(ubahjh‰ubahjj„ubeubaubh…)r(}r((h\XÀWhether the executable is ``public`` (default) or ``private``, i.e. meant to be run by other programs rather than the user. Private executables are installed into `$libexecdir/$libexecsubdir`.h]jp(hhhihjh‰hl}r‘((hn]ho]hp]hq]ht]uhvM4hwhhx]r’((hXWhether the executable is r“(…r”(}r•((h\XWhether the executable is hhNhvNhwhh]j(ubhç)r–(}r—((h\X ``public``hl}r˜((hn]ho]hp]hq]ht]uh]j(hx]r™(hXpublicrš(…r›(}rœ((h\Xpublich]j–(ubahjhïubhX (default) or r(…rž(}rŸ((h\X (default) or hhNhvNhwhh]j(ubhç)r (}r¡((h\X ``private``hl}r¢((hn]ho]hp]hq]ht]uh]j(hx]r£(hXprivater¤(…r¥(}r¦((h\Xprivateh]j (ubahjhïubhXf, i.e. meant to be run by other programs rather than the user. Private executables are installed into r§(…r¨(}r©((h\Xf, i.e. meant to be run by other programs rather than the user. Private executables are installed into hhNhvNhwhh]j(ubcdocutils.nodes title_reference rª()r«(}r¬((h\X`$libexecdir/$libexecsubdir`hl}r­((hn]ho]hp]hq]ht]uh]j(hx]r®(hX$libexecdir/$libexecsubdirr¯(…r°(}r±((h\X$libexecdir/$libexecsubdirh]j«(ubahjUtitle_referencer²(ubhX.…r³(}r´((h\X.hhNhvNhwhh]j(ubeubeubeubh^)rµ(}r¶((h\Uh]jj'hhhihjhkhl}r·((hn]ho]hp]hq]r¸(Urunning-executablesr¹(aht]rº(h auhvM9hwhhx]r»((hz)r¼(}r½((h\XRunning executablesr¾(h]jµ(hhhihjh~hl}r¿((hn]ho]hp]hq]ht]uhvM9hwhhx]rÀ(hXRunning executablesrÁ(…rÂ(}rÃ((h\j¾(hhNhvNhwhh]j¼(ubaubh…)rÄ(}rÅ((h\XOYou can have Cabal build and run your executables by using the ``run`` command:h]jµ(hhhihjh‰hl}rÆ((hn]ho]hp]hq]ht]uhvM;hwhhx]rÇ((hX?You can have Cabal build and run your executables by using the rÈ(…rÉ(}rÊ((h\X?You can have Cabal build and run your executables by using the hhNhvNhwhh]jÄ(ubhç)rË(}rÌ((h\X``run``hl}rÍ((hn]ho]hp]hq]ht]uh]jÄ(hx]rÎ(hXrunrÏ(…rÐ(}rÑ((h\Xrunh]jË(ubahjhïubhX command:rÒ(…rÓ(}rÔ((h\X command:hhNhvNhwhh]jÄ(ubeubjÕ)rÕ(}rÖ((h\X,$ cabal run EXECUTABLE [-- EXECUTABLE_FLAGS]h]jµ(hhhihjjØhl}r×((j‰jXconsolejÚjÛhq]hp]hn]j}ho]ht]uhvM>hwhhx]rØ(hX,$ cabal run EXECUTABLE [-- EXECUTABLE_FLAGS]rÙ(…rÚ(}rÛ((h\Uh]jÕ(ubaubh…)rÜ(}rÝ((h\XgThis command will configure, build and run the executable ``EXECUTABLE``. The double dash separator is required to distinguish executable flags from ``run``'s own flags. If there is only one executable defined in the whole package, the executable's name can be omitted. See the output of ``cabal help run`` for a list of options you can pass to ``cabal run``.h]jµ(hhhihjh‰hl}rÞ((hn]ho]hp]hq]ht]uhvMBhwhhx]rß((hX:This command will configure, build and run the executable rà(…rá(}râ((h\X:This command will configure, build and run the executable hhNhvNhwhh]jÜ(ubhç)rã(}rä((h\X``EXECUTABLE``hl}rå((hn]ho]hp]hq]ht]uh]jÜ(hx]ræ(hX EXECUTABLErç(…rè(}ré((h\X EXECUTABLEh]jã(ubahjhïubhXM. The double dash separator is required to distinguish executable flags from rê(…rë(}rì((h\XM. The double dash separator is required to distinguish executable flags from hhNhvNhwhh]jÜ(ubhç)rí(}rî((h\X``run``hl}rï((hn]ho]hp]hq]ht]uh]jÜ(hx]rð(hXrunrñ(…rò(}ró((h\Xrunh]jí(ubahjhïubhXˆâ€™s own flags. If there is only one executable defined in the whole package, the executable’s name can be omitted. See the output of rô(…rõ(}rö((h\X„'s own flags. If there is only one executable defined in the whole package, the executable's name can be omitted. See the output of hhNhvNhwhh]jÜ(ubhç)r÷(}rø((h\X``cabal help run``hl}rù((hn]ho]hp]hq]ht]uh]jÜ(hx]rú(hXcabal help runrû(…rü(}rý((h\Xcabal help runh]j÷(ubahjhïubhX' for a list of options you can pass to rþ(…rÿ(}r)(h\X' for a list of options you can pass to hhNhvNhwhh]jÜ(ubhç)r)}r)(h\X ``cabal run``hl}r)(hn]ho]hp]hq]ht]uh]jÜ(hx]r)hX cabal runr)…r)}r)(h\X cabal runh]j)ubahjhïubhX.…r)}r )(h\X.hhNhvNhwhh]jÜ(ubeubeubeubh^)r )}r )(h\Uh]hdhhhihjhkhl}r )(hn]ho]hp]hq]r )U test-suitesr)aht]r)hauhvMJhwhhx]r)(hz)r)}r)(h\X Test suitesr)h]j )hhhihjh~hl}r)(hn]ho]hp]hq]ht]uhvMJhwhhx]r)hX Test suitesr)…r)}r)(h\j)hhNhvNhwhh]j)ubaubj*)r)}r)(h\Uh]j )hhhihjj-hl}r)(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r)}r)(h\Uh]j )hhhihjj2hl}r)(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-sectionr)j8j)uhvNhwhhx]r )(j:)r!)}r")(h\Xtest-suite nameh]j)hhhihjj>hl}r#)(hq]r$)X!pkg-section-test-suite-test-suiter%)ahp]hn]ho]ht]jB‰uhvNhwhhx]r&)(j*)r')}r()(h\Uh]j!)hhhihjj-hl}r))(hq]hp]hn]ho]ht]Uentries]r*)(jHX,test-suite:test-suite; package.cabal sectionj%)UNtr+)auhvNhwhhx]ubjJ)r,)}r-)(h\X test-suiter.)h]j!)hhhihjjMhl}r/)(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r0)hX test-suiter1)…r2)}r3)(h\UhhNhvNhwhh]j,)ubaubjS)r4)}r5)(h\U h]j!)hhhihjjVhl}r6)(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r7)hX …r8)}r9)(h\UhhNhvNhwhh]j4)ubaubjÒ)r:)}r;)(h\Xnameh]j!)hhhihjjÕhl}r<)(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r=)hXnamer>)…r?)}r@)(h\UhhNhvNhwhh]j:)ubaubeubj[)rA)}rB)(h\Uh]j)hhhihjj^hl}rC)(hn]ho]hp]hq]ht]uhvNhwhhx]rD)h…)rE)}rF)(h\XTest suite sections (if present) describe package test suites and must have an argument after the section label, which defines the name of the test suite. This is a freeform argument, but may not contain spaces. It should be unique among the names of the package's other test suites, the package's executables, and the package itself. Using test suite sections requires at least Cabal version 1.9.2.rG)h]jA)hhhihjh‰hl}rH)(hn]ho]hp]hq]ht]uhvMOhwhhx]rI)hX“Test suite sections (if present) describe package test suites and must have an argument after the section label, which defines the name of the test suite. This is a freeform argument, but may not contain spaces. It should be unique among the names of the package’s other test suites, the package’s executables, and the package itself. Using test suite sections requires at least Cabal version 1.9.2.rJ)…rK)}rL)(h\jG)hhNhvNhwhh]jE)ubaubaubeubh…)rM)}rN)(h\XŠThe test suite may be described using the following fields, as well as build information fields (see the section on `build information`_).h]j )hhhihjh‰hl}rO)(hn]ho]hp]hq]ht]uhvMVhwhhx]rP)(hXtThe test suite may be described using the following fields, as well as build information fields (see the section on rQ)…rR)}rS)(h\XtThe test suite may be described using the following fields, as well as build information fields (see the section on hhNhvNhwhh]jM)ubjH)rT)}rU)(h\X`build information`_jKKh]jM)hjjLhl}rV)(UnameXbuild informationhq]hp]hn]ho]ht]jNj uhx]rW)hXbuild informationrX)…rY)}rZ)(h\Xbuild informationh]jT)ubaubhX).r[)…r\)}r])(h\X).hhNhvNhwhh]jM)ubeubj*)r^)}r_)(h\Uh]j )hhhihjj-hl}r`)(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)ra)}rb)(h\Uh]j )hhhihjj2hl}rc)(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrd)j8jd)uhvNhwhhx]re)(j:)rf)}rg)(h\Xtype: interface (required)h]ja)hhhihjj>hl}rh)(hq]ri)Xpkg-field-test-suite-typerj)ahp]hn]ho]ht]jB‰uhvM_hwhhx]rk)(j*)rl)}rm)(h\Uh]jf)hhhihjj-hl}rn)(hq]hp]hn]ho]ht]Uentries]ro)(jHX$test-suite:type; package.cabal fieldjj)UNtrp)auhvM_hwhhx]ubjJ)rq)}rr)(h\Xtypers)h]jf)hhhihjjMhl}rt)(jÚjÛhq]hp]hn]ho]ht]uhvM_hwhhx]ru)hXtyperv)…rw)}rx)(h\UhhNhvNhwhh]jq)ubaubjS)ry)}rz)(h\jÌh]jf)hhhihjjVhl}r{)(jÚjÛhq]hp]hn]ho]ht]uhvM_hwhhx]r|)hX: r})…r~)}r)(h\UhhNhvNhwhh]jy)ubaubjÒ)r€)}r)(h\Xinterface (required)h]jf)hhhihjjÕhl}r‚)(jÚjÛhq]hp]hn]ho]ht]uhvM_hwhhx]rƒ)hXinterface (required)r„)…r…)}r†)(h\UhhNhvNhwhh]j€)ubaubeubj[)r‡)}rˆ)(h\Uh]ja)hhhihjj^hl}r‰)(hn]ho]hp]hq]ht]uhvM_hwhhx]rŠ)h…)r‹)}rŒ)(h\XÜThe interface type and version of the test suite. Cabal supports two test suite interfaces, called ``exitcode-stdio-1.0`` and ``detailed-0.9``. Each of these types may require or disallow other fields as described below.h]j‡)hhhihjh‰hl}r)(hn]ho]hp]hq]ht]uhvM[hwhhx]rŽ)(hXcThe interface type and version of the test suite. Cabal supports two test suite interfaces, called r)…r)}r‘)(h\XcThe interface type and version of the test suite. Cabal supports two test suite interfaces, called hhNhvNhwhh]j‹)ubhç)r’)}r“)(h\X``exitcode-stdio-1.0``hl}r”)(hn]ho]hp]hq]ht]uh]j‹)hx]r•)hXexitcode-stdio-1.0r–)…r—)}r˜)(h\Xexitcode-stdio-1.0h]j’)ubahjhïubhX and r™)…rš)}r›)(h\X and hhNhvNhwhh]j‹)ubhç)rœ)}r)(h\X``detailed-0.9``hl}rž)(hn]ho]hp]hq]ht]uh]j‹)hx]rŸ)hX detailed-0.9r )…r¡)}r¢)(h\X detailed-0.9h]jœ)ubahjhïubhXN. Each of these types may require or disallow other fields as described below.r£)…r¤)}r¥)(h\XN. Each of these types may require or disallow other fields as described below.hhNhvNhwhh]j‹)ubeubaubeubh…)r¦)}r§)(h\X%Test suites using the ``exitcode-stdio-1.0`` interface are executables that indicate test failure with a non-zero exit code when run; they may provide human-readable log information through the standard output and error channels. The ``exitcode-stdio-1.0`` type requires the ``main-is`` field.h]j )hhhihjh‰hl}r¨)(hn]ho]hp]hq]ht]uhvM`hwhhx]r©)(hXTest suites using the rª)…r«)}r¬)(h\XTest suites using the hhNhvNhwhh]j¦)ubhç)r­)}r®)(h\X``exitcode-stdio-1.0``hl}r¯)(hn]ho]hp]hq]ht]uh]j¦)hx]r°)hXexitcode-stdio-1.0r±)…r²)}r³)(h\Xexitcode-stdio-1.0h]j­)ubahjhïubhX¾ interface are executables that indicate test failure with a non-zero exit code when run; they may provide human-readable log information through the standard output and error channels. The r´)…rµ)}r¶)(h\X¾ interface are executables that indicate test failure with a non-zero exit code when run; they may provide human-readable log information through the standard output and error channels. The hhNhvNhwhh]j¦)ubhç)r·)}r¸)(h\X``exitcode-stdio-1.0``hl}r¹)(hn]ho]hp]hq]ht]uh]j¦)hx]rº)hXexitcode-stdio-1.0r»)…r¼)}r½)(h\Xexitcode-stdio-1.0h]j·)ubahjhïubhX type requires the r¾)…r¿)}rÀ)(h\X type requires the hhNhvNhwhh]j¦)ubhç)rÁ)}rÂ)(h\X ``main-is``hl}rÃ)(hn]ho]hp]hq]ht]uh]j¦)hx]rÄ)hXmain-isrÅ)…rÆ)}rÇ)(h\Xmain-ish]jÁ)ubahjhïubhX field.rÈ)…rÉ)}rÊ)(h\X field.hhNhvNhwhh]j¦)ubeubj*)rË)}rÌ)(h\Uh]j )hhhihjj-hl}rÍ)(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rÎ)}rÏ)(h\Uh]j )hhhihjj2hl}rÐ)(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrÑ)j8jÑ)uhvNhwhhx]rÒ)(j:)rÓ)}rÔ)(h\Xmain-is: filenameh]jÎ)hhhihjj>hl}rÕ)(hq]rÖ)Xpkg-field-test-suite-main-isr×)ahp]hn]ho]ht]jB‰uhvNhwhhx]rØ)(j*)rÙ)}rÚ)(h\Uh]jÓ)hhhihjj-hl}rÛ)(hq]hp]hn]ho]ht]Uentries]rÜ)(jHX'test-suite:main-is; package.cabal fieldj×)UNtrÝ)auhvNhwhhx]ubjJ)rÞ)}rß)(h\Xmain-isrà)h]jÓ)hhhihjjMhl}rá)(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]râ)hXmain-isrã)…rä)}rå)(h\UhhNhvNhwhh]jÞ)ubaubjS)ræ)}rç)(h\jÌh]jÓ)hhhihjjVhl}rè)(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]ré)hX: rê)…rë)}rì)(h\UhhNhvNhwhh]jæ)ubaubjÒ)rí)}rî)(h\Xfilenameh]jÓ)hhhihjjÕhl}rï)(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rð)hXfilenamerñ)…rò)}ró)(h\UhhNhvNhwhh]jí)ubaubeubj[)rô)}rõ)(h\Uh]jÎ)hhhihjj^hl}rö)(hn]ho]hp]hq]ht]uhvNhwhhx]r÷)(ja)rø)}rù)(h\Uh]jô)hhhihjjdhl}rú)(hn]ho]hp]hq]ht]uhvNhwhhx]rû)(jg)rü)}rý)(h\Uh]jø)hhhihjjjhl}rþ)(hn]ho]hp]hq]ht]uhvMihwhhx]rÿ)(jm)r*}r*(h\Xrequiredh]jü)hhhihjjqhl}r*(hn]ho]hp]hq]ht]uhvKhx]r*hXRequiredr*…r*}r*(h\Uh]j*ubaubjw)r*}r*(h\X``exitcode-stdio-1.0``r *hl}r *(hn]ho]hp]hq]ht]uh]jü)hx]r *h…)r *}r *(h\j *h]j*hhhihjh‰hl}r*(hn]ho]hp]hq]ht]uhvMihx]r*hç)r*}r*(h\j *hl}r*(hn]ho]hp]hq]ht]uh]j *hx]r*hXexitcode-stdio-1.0r*…r*}r*(h\Xexitcode-stdio-1.0h]j*ubahjhïubaubahjj„ubeubjg)r*}r*(h\Uh]jø)hhhihjjjhl}r*(hn]ho]hp]hq]ht]uhvMjhwhhx]r*(jm)r*}r*(h\X disallowedh]j*hhhihjjqhl}r*(hn]ho]hp]hq]ht]uhvKhx]r*hX Disallowedr*…r *}r!*(h\Uh]j*ubaubjw)r"*}r#*(h\X``detailed-0.9`` hl}r$*(hn]ho]hp]hq]ht]uh]j*hx]r%*h…)r&*}r'*(h\X``detailed-0.9``r(*h]j"*hhhihjh‰hl}r)*(hn]ho]hp]hq]ht]uhvMjhx]r**hç)r+*}r,*(h\j(*hl}r-*(hn]ho]hp]hq]ht]uh]j&*hx]r.*hX detailed-0.9r/*…r0*}r1*(h\X detailed-0.9h]j+*ubahjhïubaubahjj„ubeubeubh…)r2*}r3*(h\XdThe name of the ``.hs`` or ``.lhs`` file containing the ``Main`` module. Note that it is the ``.hs`` filename that must be listed, even if that file is generated using a preprocessor. The source file must be relative to one of the directories listed in :pkg-field:`hs-source-dirs`. This field is analogous to the ``main-is`` field of an executable section.h]jô)hhhihjh‰hl}r4*(hn]ho]hp]hq]ht]uhvMlhwhhx]r5*(hXThe name of the r6*…r7*}r8*(h\XThe name of the hhNhvNhwhh]j2*ubhç)r9*}r:*(h\X``.hs``hl}r;*(hn]ho]hp]hq]ht]uh]j2*hx]r<*hX.hsr=*…r>*}r?*(h\X.hsh]j9*ubahjhïubhX or r@*…rA*}rB*(h\X or hhNhvNhwhh]j2*ubhç)rC*}rD*(h\X``.lhs``hl}rE*(hn]ho]hp]hq]ht]uh]j2*hx]rF*hX.lhsrG*…rH*}rI*(h\X.lhsh]jC*ubahjhïubhX file containing the rJ*…rK*}rL*(h\X file containing the hhNhvNhwhh]j2*ubhç)rM*}rN*(h\X``Main``hl}rO*(hn]ho]hp]hq]ht]uh]j2*hx]rP*hXMainrQ*…rR*}rS*(h\XMainh]jM*ubahjhïubhX module. Note that it is the rT*…rU*}rV*(h\X module. Note that it is the hhNhvNhwhh]j2*ubhç)rW*}rX*(h\X``.hs``hl}rY*(hn]ho]hp]hq]ht]uh]j2*hx]rZ*hX.hsr[*…r\*}r]*(h\X.hsh]jW*ubahjhïubhX™ filename that must be listed, even if that file is generated using a preprocessor. The source file must be relative to one of the directories listed in r^*…r_*}r`*(h\X™ filename that must be listed, even if that file is generated using a preprocessor. The source file must be relative to one of the directories listed in hhNhvNhwhh]j2*ubjt)ra*}rb*(h\X:pkg-field:`hs-source-dirs`h]j2*hhhihjjwhl}rc*(UreftypeX pkg-fieldjyˆjzXhs-source-dirsrd*U refdomainXcabalre*hq]hp]U refexplicit‰hn]ho]ht]j}j~j”X test-suiterf*uhvMlhx]rg*hç)rh*}ri*(h\jd*hl}rj*(hn]ho]rk*(j…je*Xcabal-pkg-fieldrl*ehp]hq]ht]uh]ja*hx]rm*hXhs-source-dirsrn*…ro*}rp*(h\Uh]jh*ubahjhïubaubhX!. This field is analogous to the rq*…rr*}rs*(h\X!. This field is analogous to the hhNhvNhwhh]j2*ubhç)rt*}ru*(h\X ``main-is``hl}rv*(hn]ho]hp]hq]ht]uh]j2*hx]rw*hXmain-isrx*…ry*}rz*(h\Xmain-ish]jt*ubahjhïubhX field of an executable section.r{*…r|*}r}*(h\X field of an executable section.hhNhvNhwhh]j2*ubeubeubeubh…)r~*}r*(h\XìTest suites using the ``detailed-0.9`` interface are modules exporting the symbol ``tests :: IO [Test]``. The ``Test`` type is exported by the module ``Distribution.TestSuite`` provided by Cabal. For more details, see the example below.h]j )hhhihjh‰hl}r€*(hn]ho]hp]hq]ht]uhvMshwhhx]r*(hXTest suites using the r‚*…rƒ*}r„*(h\XTest suites using the hhNhvNhwhh]j~*ubhç)r…*}r†*(h\X``detailed-0.9``hl}r‡*(hn]ho]hp]hq]ht]uh]j~*hx]rˆ*hX detailed-0.9r‰*…rŠ*}r‹*(h\X detailed-0.9h]j…*ubahjhïubhX, interface are modules exporting the symbol rŒ*…r*}rŽ*(h\X, interface are modules exporting the symbol hhNhvNhwhh]j~*ubhç)r*}r*(h\X``tests :: IO [Test]``hl}r‘*(hn]ho]hp]hq]ht]uh]j~*hx]r’*hXtests :: IO [Test]r“*…r”*}r•*(h\Xtests :: IO [Test]h]j*ubahjhïubhX. The r–*…r—*}r˜*(h\X. The hhNhvNhwhh]j~*ubhç)r™*}rš*(h\X``Test``hl}r›*(hn]ho]hp]hq]ht]uh]j~*hx]rœ*hXTestr*…rž*}rŸ*(h\XTesth]j™*ubahjhïubhX type is exported by the module r *…r¡*}r¢*(h\X type is exported by the module hhNhvNhwhh]j~*ubhç)r£*}r¤*(h\X``Distribution.TestSuite``hl}r¥*(hn]ho]hp]hq]ht]uh]j~*hx]r¦*hXDistribution.TestSuiter§*…r¨*}r©*(h\XDistribution.TestSuiteh]j£*ubahjhïubhX< provided by Cabal. For more details, see the example below.rª*…r«*}r¬*(h\X< provided by Cabal. For more details, see the example below.hhNhvNhwhh]j~*ubeubh…)r­*}r®*(h\X÷The ``detailed-0.9`` interface allows Cabal and other test agents to inspect a test suite's results case by case, producing detailed human- and machine-readable log files. The ``detailed-0.9`` interface requires the :pkg-field:`test-module` field.h]j )hhhihjh‰hl}r¯*(hn]ho]hp]hq]ht]uhvMxhwhhx]r°*(hXThe r±*…r²*}r³*(h\XThe hhNhvNhwhh]j­*ubhç)r´*}rµ*(h\X``detailed-0.9``hl}r¶*(hn]ho]hp]hq]ht]uh]j­*hx]r·*hX detailed-0.9r¸*…r¹*}rº*(h\X detailed-0.9h]j´*ubahjhïubhXž interface allows Cabal and other test agents to inspect a test suite’s results case by case, producing detailed human- and machine-readable log files. The r»*…r¼*}r½*(h\Xœ interface allows Cabal and other test agents to inspect a test suite's results case by case, producing detailed human- and machine-readable log files. The hhNhvNhwhh]j­*ubhç)r¾*}r¿*(h\X``detailed-0.9``hl}rÀ*(hn]ho]hp]hq]ht]uh]j­*hx]rÁ*hX detailed-0.9rÂ*…rÃ*}rÄ*(h\X detailed-0.9h]j¾*ubahjhïubhX interface requires the rÅ*…rÆ*}rÇ*(h\X interface requires the hhNhvNhwhh]j­*ubjt)rÈ*}rÉ*(h\X:pkg-field:`test-module`h]j­*hhhihjjwhl}rÊ*(UreftypeX pkg-fieldjyˆjzX test-modulerË*U refdomainXcabalrÌ*hq]hp]U refexplicit‰hn]ho]ht]j}j~j”jf*uhvMxhx]rÍ*hç)rÎ*}rÏ*(h\jË*hl}rÐ*(hn]ho]rÑ*(j…jÌ*Xcabal-pkg-fieldrÒ*ehp]hq]ht]uh]jÈ*hx]rÓ*hX test-modulerÔ*…rÕ*}rÖ*(h\Uh]jÎ*ubahjhïubaubhX field.r×*…rØ*}rÙ*(h\X field.hhNhvNhwhh]j­*ubeubj*)rÚ*}rÛ*(h\Uh]j )hhhihjj-hl}rÜ*(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rÝ*}rÞ*(h\Uh]j )hhhihjj2hl}rß*(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrà*j8jà*uhvNhwhhx]rá*(j:)râ*}rã*(h\Xtest-module: identifierh]jÝ*hhhihjj>hl}rä*(hq]rå*X pkg-field-test-suite-test-moduleræ*ahp]hn]ho]ht]jB‰uhvMƒhwhhx]rç*(j*)rè*}ré*(h\Uh]jâ*hhhihjj-hl}rê*(hq]hp]hn]ho]ht]Uentries]rë*(jHX+test-suite:test-module; package.cabal fieldjæ*UNtrì*auhvMƒhwhhx]ubjJ)rí*}rî*(h\X test-modulerï*h]jâ*hhhihjjMhl}rð*(jÚjÛhq]hp]hn]ho]ht]uhvMƒhwhhx]rñ*hX test-modulerò*…ró*}rô*(h\UhhNhvNhwhh]jí*ubaubjS)rõ*}rö*(h\jÌh]jâ*hhhihjjVhl}r÷*(jÚjÛhq]hp]hn]ho]ht]uhvMƒhwhhx]rø*hX: rù*…rú*}rû*(h\UhhNhvNhwhh]jõ*ubaubjÒ)rü*}rý*(h\X identifierh]jâ*hhhihjjÕhl}rþ*(jÚjÛhq]hp]hn]ho]ht]uhvMƒhwhhx]rÿ*hX identifierr+…r+}r+(h\UhhNhvNhwhh]jü*ubaubeubj[)r+}r+(h\Uh]jÝ*hhhihjj^hl}r+(hn]ho]hp]hq]ht]uhvMƒhwhhx]r+(ja)r+}r+(h\Uh]j+hhhihjjdhl}r +(hn]ho]hp]hq]ht]uhvNhwhhx]r +(jg)r +}r +(h\Uh]j+hhhihjjjhl}r +(hn]ho]hp]hq]ht]uhvMhwhhx]r+(jm)r+}r+(h\Xrequiredh]j +hhhihjjqhl}r+(hn]ho]hp]hq]ht]uhvKhx]r+hXRequiredr+…r+}r+(h\Uh]j+ubaubjw)r+}r+(h\X``detailed-0.9``r+hl}r+(hn]ho]hp]hq]ht]uh]j +hx]r+h…)r+}r+(h\j+h]j+hhhihjh‰hl}r+(hn]ho]hp]hq]ht]uhvMhx]r+hç)r+}r +(h\j+hl}r!+(hn]ho]hp]hq]ht]uh]j+hx]r"+hX detailed-0.9r#+…r$+}r%+(h\X detailed-0.9h]j+ubahjhïubaubahjj„ubeubjg)r&+}r'+(h\Uh]j+hhhihjjjhl}r(+(hn]ho]hp]hq]ht]uhvM€hwhhx]r)+(jm)r*+}r++(h\X disallowedh]j&+hhhihjjqhl}r,+(hn]ho]hp]hq]ht]uhvKhx]r-+hX Disallowedr.+…r/+}r0+(h\Uh]j*+ubaubjw)r1+}r2+(h\X``exitcode-stdio-1.0`` hl}r3+(hn]ho]hp]hq]ht]uh]j&+hx]r4+h…)r5+}r6+(h\X``exitcode-stdio-1.0``r7+h]j1+hhhihjh‰hl}r8+(hn]ho]hp]hq]ht]uhvM€hx]r9+hç)r:+}r;+(h\j7+hl}r<+(hn]ho]hp]hq]ht]uh]j5+hx]r=+hXexitcode-stdio-1.0r>+…r?+}r@+(h\Xexitcode-stdio-1.0h]j:+ubahjhïubaubahjj„ubeubeubh…)rA+}rB+(h\X*The module exporting the ``tests`` symbol.h]j+hhhihjh‰hl}rC+(hn]ho]hp]hq]ht]uhvM‚hwhhx]rD+(hXThe module exporting the rE+…rF+}rG+(h\XThe module exporting the hhNhvNhwhh]jA+ubhç)rH+}rI+(h\X ``tests``hl}rJ+(hn]ho]hp]hq]ht]uh]jA+hx]rK+hXtestsrL+…rM+}rN+(h\Xtestsh]jH+ubahjhïubhX symbol.rO+…rP+}rQ+(h\X symbol.hhNhvNhwhh]jA+ubeubeubeubh^)rR+}rS+(h\UhaKh]j )hhhihjhkhl}rT+(hn]rU+X3example: package using exitcode-stdio-1.0 interfacerV+aho]hp]hq]rW+U2example-package-using-exitcode-stdio-1-0-interfacerX+aht]uhvM…hwhhx]rY+(hz)rZ+}r[+(h\X7Example: Package using ``exitcode-stdio-1.0`` interfacer\+h]jR+hhhihjh~hl}r]+(hn]ho]hp]hq]ht]uhvM…hwhhx]r^+(hXExample: Package using r_+…r`+}ra+(h\XExample: Package using rb+hhNhvNhwhh]jZ+ubhç)rc+}rd+(h\X``exitcode-stdio-1.0``re+hl}rf+(hn]ho]hp]hq]ht]uh]jZ+hx]rg+hXexitcode-stdio-1.0rh+…ri+}rj+(h\Xexitcode-stdio-1.0rk+h]jc+ubahjhïubhX interfacerl+…rm+}rn+(h\X interfacero+hhNhvNhwhh]jZ+ubeubh…)rp+}rq+(h\X}The example package description and executable source file below demonstrate the use of the ``exitcode-stdio-1.0`` interface.h]jR+hhhihjh‰hl}rr+(hn]ho]hp]hq]ht]uhvM‡hwhhx]rs+(hX\The example package description and executable source file below demonstrate the use of the rt+…ru+}rv+(h\X\The example package description and executable source file below demonstrate the use of the hhNhvNhwhh]jp+ubhç)rw+}rx+(h\X``exitcode-stdio-1.0``hl}ry+(hn]ho]hp]hq]ht]uh]jp+hx]rz+hXexitcode-stdio-1.0r{+…r|+}r}+(h\Xexitcode-stdio-1.0h]jw+ubahjhïubhX interface.r~+…r+}r€+(h\X interface.hhNhvNhwhh]jp+ubeubcdocutils.nodes container r+)r‚+}rƒ+(h\Uh]jR+hhUhjU containerr„+hl}r…+(hq]r†+Uid4r‡+ahp]hn]ho]rˆ+Uliteral-block-wrapperr‰+aht]U literal_blockˆuhvNhwhhx]rŠ+(cdocutils.nodes caption r‹+)rŒ+}r+(h\X foo.cabalrŽ+h]j‚+hhhihjUcaptionr+hl}r+(hn]ho]hp]hq]ht]uhvMŠhx]r‘+hX foo.cabalr’+…r“+}r”+(h\jŽ+h]jŒ+ubaubjÕ)r•+}r–+(h\XäName: foo Version: 1.0 License: BSD3 Cabal-Version: >= 1.9.2 Build-Type: Simple Test-Suite test-foo type: exitcode-stdio-1.0 main-is: test-foo.hs build-depends: base >= 4 && < 5h]j‚+hhhihjjØhl}r—+(j‰jXcabaljÚjÛhq]hp]hn]j}ho]ht]uhvMŠhx]r˜+hXäName: foo Version: 1.0 License: BSD3 Cabal-Version: >= 1.9.2 Build-Type: Simple Test-Suite test-foo type: exitcode-stdio-1.0 main-is: test-foo.hs build-depends: base >= 4 && < 5r™+…rš+}r›+(h\Uh]j•+ubaubeubj+)rœ+}r+(h\Uh]jR+hhUhjj„+hl}rž+(hq]rŸ+Uid5r +ahp]hn]ho]r¡+j‰+aht]U literal_blockˆuhvNhwhhx]r¢+(j‹+)r£+}r¤+(h\X test-foo.hsr¥+h]jœ+hhhihjj+hl}r¦+(hn]ho]hp]hq]ht]uhvM˜hx]r§+hX test-foo.hsr¨+…r©+}rª+(h\j¥+h]j£+ubaubjÕ)r«+}r¬+(h\Xumodule Main where import System.Exit (exitFailure) main = do putStrLn "This test always fails!" exitFailureh]jœ+hhhihjjØhl}r­+(j‰jXhaskelljÚjÛhq]hp]hn]j}ho]ht]uhvM˜hx]r®+hXumodule Main where import System.Exit (exitFailure) main = do putStrLn "This test always fails!" exitFailurer¯+…r°+}r±+(h\Uh]j«+ubaubeubeubh^)r²+}r³+(h\Uh]j )hhhihjhkhl}r´+(hn]ho]hp]hq]rµ+U,example-package-using-detailed-0-9-interfacer¶+aht]r·+h2auhvM¤hwhhx]r¸+(hz)r¹+}rº+(h\X1Example: Package using ``detailed-0.9`` interfacer»+h]j²+hhhihjh~hl}r¼+(hn]ho]hp]hq]ht]uhvM¤hwhhx]r½+(hXExample: Package using r¾+…r¿+}rÀ+(h\XExample: Package using rÁ+hhNhvNhwhh]j¹+ubhç)rÂ+}rÃ+(h\X``detailed-0.9``rÄ+hl}rÅ+(hn]ho]hp]hq]ht]uh]j¹+hx]rÆ+hX detailed-0.9rÇ+…rÈ+}rÉ+(h\X detailed-0.9rÊ+h]jÂ+ubahjhïubhX interfacerË+…rÌ+}rÍ+(h\X interfacerÎ+hhNhvNhwhh]j¹+ubeubh…)rÏ+}rÐ+(h\XNThe example package description and test module source file below demonstrate the use of the ``detailed-0.9`` interface. The test module also develops a simple implementation of the interface set by ``Distribution.TestSuite``, but in actual usage the implementation would be provided by the library that provides the testing facility.h]j²+hhhihjh‰hl}rÑ+(hn]ho]hp]hq]ht]uhvM¦hwhhx]rÒ+(hX]The example package description and test module source file below demonstrate the use of the rÓ+…rÔ+}rÕ+(h\X]The example package description and test module source file below demonstrate the use of the hhNhvNhwhh]jÏ+ubhç)rÖ+}r×+(h\X``detailed-0.9``hl}rØ+(hn]ho]hp]hq]ht]uh]jÏ+hx]rÙ+hX detailed-0.9rÚ+…rÛ+}rÜ+(h\X detailed-0.9h]jÖ+ubahjhïubhXZ interface. The test module also develops a simple implementation of the interface set by rÝ+…rÞ+}rß+(h\XZ interface. The test module also develops a simple implementation of the interface set by hhNhvNhwhh]jÏ+ubhç)rà+}rá+(h\X``Distribution.TestSuite``hl}râ+(hn]ho]hp]hq]ht]uh]jÏ+hx]rã+hXDistribution.TestSuiterä+…rå+}ræ+(h\XDistribution.TestSuiteh]jà+ubahjhïubhXm, but in actual usage the implementation would be provided by the library that provides the testing facility.rç+…rè+}ré+(h\Xm, but in actual usage the implementation would be provided by the library that provides the testing facility.hhNhvNhwhh]jÏ+ubeubj+)rê+}rë+(h\Uh]j²+hhUhjj„+hl}rì+(hq]rí+Uid6rî+ahp]hn]ho]rï+j‰+aht]U literal_blockˆuhvNhwhhx]rð+(j‹+)rñ+}rò+(h\X bar.cabalró+h]jê+hhhihjj+hl}rô+(hn]ho]hp]hq]ht]uhvM¬hx]rõ+hX bar.cabalrö+…r÷+}rø+(h\jó+h]jñ+ubaubjÕ)rù+}rú+(h\XîName: bar Version: 1.0 License: BSD3 Cabal-Version: >= 1.9.2 Build-Type: Simple Test-Suite test-bar type: detailed-0.9 test-module: Bar build-depends: base >= 4 && < 5, Cabal >= 1.9.2 && < 2h]jê+hhhihjjØhl}rû+(j‰jXcabaljÚjÛhq]hp]hn]j}ho]ht]uhvM¬hx]rü+hXîName: bar Version: 1.0 License: BSD3 Cabal-Version: >= 1.9.2 Build-Type: Simple Test-Suite test-bar type: detailed-0.9 test-module: Bar build-depends: base >= 4 && < 5, Cabal >= 1.9.2 && < 2rý+…rþ+}rÿ+(h\Uh]jù+ubaubeubj+)r,}r,(h\Uh]j²+hhUhjj„+hl}r,(hq]r,Uid7r,ahp]hn]ho]r,j‰+aht]U literal_blockˆuhvNhwhhx]r,(j‹+)r,}r,(h\XBar.hsr ,h]j,hhhihjj+hl}r ,(hn]ho]hp]hq]ht]uhvM»hx]r ,hXBar.hsr ,…r ,}r,(h\j ,h]j,ubaubjÕ)r,}r,(h\X module Bar ( tests ) where import Distribution.TestSuite tests :: IO [Test] tests = return [ Test succeeds, Test fails ] where succeeds = TestInstance { run = return $ Finished Pass , name = "succeeds" , tags = [] , options = [] , setOption = \_ _ -> Right succeeds } fails = TestInstance { run = return $ Finished $ Fail "Always fails!" , name = "fails" , tags = [] , options = [] , setOption = \_ _ -> Right fails }h]j,hhhihjjØhl}r,(j‰jXhaskelljÚjÛhq]hp]hn]j}ho]ht]uhvM»hx]r,hX module Bar ( tests ) where import Distribution.TestSuite tests :: IO [Test] tests = return [ Test succeeds, Test fails ] where succeeds = TestInstance { run = return $ Finished Pass , name = "succeeds" , tags = [] , options = [] , setOption = \_ _ -> Right succeeds } fails = TestInstance { run = return $ Finished $ Fail "Always fails!" , name = "fails" , tags = [] , options = [] , setOption = \_ _ -> Right fails }r,…r,}r,(h\Uh]j,ubaubeubeubh^)r,}r,(h\Uh]j )hhhihjhkhl}r,(hn]ho]hp]hq]r,Urunning-test-suitesr,aht]r,hGauhvMÕhwhhx]r,(hz)r,}r,(h\XRunning test suitesr,h]j,hhhihjh~hl}r ,(hn]ho]hp]hq]ht]uhvMÕhwhhx]r!,hXRunning test suitesr",…r#,}r$,(h\j,hhNhvNhwhh]j,ubaubh…)r%,}r&,(h\XGYou can have Cabal run your test suites using its built-in test runner:r',h]j,hhhihjh‰hl}r(,(hn]ho]hp]hq]ht]uhvM×hwhhx]r),hXGYou can have Cabal run your test suites using its built-in test runner:r*,…r+,}r,,(h\j',hhNhvNhwhh]j%,ubaubjÕ)r-,}r.,(h\X;$ cabal configure --enable-tests $ cabal build $ cabal testh]j,hhhihjjØhl}r/,(jÚjÛhq]hp]hn]ho]ht]uhvMÛhwhhx]r0,hX;$ cabal configure --enable-tests $ cabal build $ cabal testr1,…r2,}r3,(h\Uh]j-,ubaubh…)r4,}r5,(h\X[See the output of ``cabal help test`` for a list of options you can pass to ``cabal test``.h]j,hhhihjh‰hl}r6,(hn]ho]hp]hq]ht]uhvMßhwhhx]r7,(hXSee the output of r8,…r9,}r:,(h\XSee the output of hhNhvNhwhh]j4,ubhç)r;,}r<,(h\X``cabal help test``hl}r=,(hn]ho]hp]hq]ht]uh]j4,hx]r>,hXcabal help testr?,…r@,}rA,(h\Xcabal help testh]j;,ubahjhïubhX' for a list of options you can pass to rB,…rC,}rD,(h\X' for a list of options you can pass to hhNhvNhwhh]j4,ubhç)rE,}rF,(h\X``cabal test``hl}rG,(hn]ho]hp]hq]ht]uh]j4,hx]rH,hX cabal testrI,…rJ,}rK,(h\X cabal testh]jE,ubahjhïubhX.…rL,}rM,(h\X.hhNhvNhwhh]j4,ubeubeubeubhbh^)rN,}rO,(h\UhaKh]hdhhhihjhkhl}rP,(hn]ho]hp]hq]rQ,Uforeign-librariesrR,aht]rS,h/auhvMAhwhhx]rT,(hz)rU,}rV,(h\XForeign librariesrW,h]jN,hhhihjh~hl}rX,(hn]ho]hp]hq]ht]uhvMAhwhhx]rY,hXForeign librariesrZ,…r[,}r\,(h\jW,hhNhvNhwhh]jU,ubaubh…)r],}r^,(h\XÞForeign libraries are system libraries intended to be linked against programs written in C or other "foreign" languages. They come in two primary flavours: dynamic libraries (``.so`` files on Linux, ``.dylib`` files on OSX, ``.dll`` files on Windows, etc.) are linked against executables when the executable is run (or even lazily during execution), while static libraries (``.a`` files on Linux/OSX, ``.lib`` files on Windows) get linked against the executable at compile time.h]jN,hhhihjh‰hl}r_,(hn]ho]hp]hq]ht]uhvMChwhhx]r`,(hX³Foreign libraries are system libraries intended to be linked against programs written in C or other “foreign†languages. They come in two primary flavours: dynamic libraries (ra,…rb,}rc,(h\X¯Foreign libraries are system libraries intended to be linked against programs written in C or other "foreign" languages. They come in two primary flavours: dynamic libraries (hhNhvNhwhh]j],ubhç)rd,}re,(h\X``.so``hl}rf,(hn]ho]hp]hq]ht]uh]j],hx]rg,hX.sorh,…ri,}rj,(h\X.soh]jd,ubahjhïubhX files on Linux, rk,…rl,}rm,(h\X files on Linux, hhNhvNhwhh]j],ubhç)rn,}ro,(h\X ``.dylib``hl}rp,(hn]ho]hp]hq]ht]uh]j],hx]rq,hX.dylibrr,…rs,}rt,(h\X.dylibh]jn,ubahjhïubhX files on OSX, ru,…rv,}rw,(h\X files on OSX, hhNhvNhwhh]j],ubhç)rx,}ry,(h\X``.dll``hl}rz,(hn]ho]hp]hq]ht]uh]j],hx]r{,hX.dllr|,…r},}r~,(h\X.dllh]jx,ubahjhïubhXŽ files on Windows, etc.) are linked against executables when the executable is run (or even lazily during execution), while static libraries (r,…r€,}r,(h\XŽ files on Windows, etc.) are linked against executables when the executable is run (or even lazily during execution), while static libraries (hhNhvNhwhh]j],ubhç)r‚,}rƒ,(h\X``.a``hl}r„,(hn]ho]hp]hq]ht]uh]j],hx]r…,hX.ar†,…r‡,}rˆ,(h\X.ah]j‚,ubahjhïubhX files on Linux/OSX, r‰,…rŠ,}r‹,(h\X files on Linux/OSX, hhNhvNhwhh]j],ubhç)rŒ,}r,(h\X``.lib``hl}rŽ,(hn]ho]hp]hq]ht]uh]j],hx]r,hX.libr,…r‘,}r’,(h\X.libh]jŒ,ubahjhïubhXE files on Windows) get linked against the executable at compile time.r“,…r”,}r•,(h\XE files on Windows) get linked against the executable at compile time.hhNhvNhwhh]j],ubeubh…)r–,}r—,(h\X3Foreign libraries only work with GHC 7.8 and later.r˜,h]jN,hhhihjh‰hl}r™,(hn]ho]hp]hq]ht]uhvMKhwhhx]rš,hX3Foreign libraries only work with GHC 7.8 and later.r›,…rœ,}r,(h\j˜,hhNhvNhwhh]j–,ubaubh…)rž,}rŸ,(h\X1A typical stanza for a foreign library looks liker ,h]jN,hhhihjh‰hl}r¡,(hn]ho]hp]hq]ht]uhvMMhwhhx]r¢,hX1A typical stanza for a foreign library looks liker£,…r¤,}r¥,(h\j ,hhNhvNhwhh]jž,ubaubjÕ)r¦,}r§,(h\X©foreign-library myforeignlib type: native-shared lib-version-info: 6:3:2 if os(Windows) options: standalone mod-def-file: MyForeignLib.def other-modules: MyForeignLib.SomeModule MyForeignLib.SomeOtherModule build-depends: base >=4.7 && <4.9 hs-source-dirs: src c-sources: csrc/MyForeignLibWrapper.c default-language: Haskell2010h]jN,hhhihjjØhl}r¨,(jÚjÛhq]hp]hn]ho]ht]uhvMQhwhhx]r©,hX©foreign-library myforeignlib type: native-shared lib-version-info: 6:3:2 if os(Windows) options: standalone mod-def-file: MyForeignLib.def other-modules: MyForeignLib.SomeModule MyForeignLib.SomeOtherModule build-depends: base >=4.7 && <4.9 hs-source-dirs: src c-sources: csrc/MyForeignLibWrapper.c default-language: Haskell2010rª,…r«,}r¬,(h\Uh]j¦,ubaubj*)r­,}r®,(h\Uh]jN,hhhihjj-hl}r¯,(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r°,}r±,(h\Uh]jN,hhhihjj2hl}r²,(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-sectionr³,j8j³,uhvNhwhhx]r´,(j:)rµ,}r¶,(h\Xforeign-library nameh]j°,hhhihjj>hl}r·,(hq]r¸,X+pkg-section-foreign-library-foreign-libraryr¹,ahp]hn]ho]ht]jB‰uhvNhwhhx]rº,(j*)r»,}r¼,(h\Uh]jµ,hhhihjj-hl}r½,(hq]hp]hn]ho]ht]Uentries]r¾,(jHX6foreign-library:foreign-library; package.cabal sectionj¹,UNtr¿,auhvNhwhhx]ubjJ)rÀ,}rÁ,(h\Xforeign-libraryrÂ,h]jµ,hhhihjjMhl}rÃ,(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rÄ,hXforeign-libraryrÅ,…rÆ,}rÇ,(h\UhhNhvNhwhh]jÀ,ubaubjS)rÈ,}rÉ,(h\U h]jµ,hhhihjjVhl}rÊ,(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rË,hX …rÌ,}rÍ,(h\UhhNhvNhwhh]jÈ,ubaubjÒ)rÎ,}rÏ,(h\Xnameh]jµ,hhhihjjÕhl}rÐ,(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rÑ,hXnamerÒ,…rÓ,}rÔ,(h\UhhNhvNhwhh]jÎ,ubaubeubj[)rÕ,}rÖ,(h\Uh]j°,hhhihjj^hl}r×,(hn]ho]hp]hq]ht]uhvNhwhhx]rØ,(ja)rÙ,}rÚ,(h\Uh]jÕ,hhhihjjdhl}rÛ,(hn]ho]hp]hq]ht]uhvNhwhhx]rÜ,jg)rÝ,}rÞ,(h\Uh]jÙ,hhhihjjjhl}rß,(hn]ho]hp]hq]ht]uhvNhwhhx]rà,(jm)rá,}râ,(h\jph]jÝ,hhhihjjqhl}rã,(hn]ho]hp]hq]ht]uhvKhx]rä,hXSincerå,…ræ,}rç,(h\Uh]já,ubaubjw)rè,}ré,(h\U Cabal 2.0rê,hl}rë,(hn]ho]hp]hq]ht]uh]jÝ,hx]rì,h…)rí,}rî,(h\jê,hl}rï,(hn]ho]hp]hq]ht]uh]jè,hx]rð,hX Cabal 2.0rñ,…rò,}ró,(h\Uh]jí,ubahjh‰ubahjj„ubeubaubh…)rô,}rõ,(h\X+Build information for `foreign libraries`_.h]jÕ,hhhihjh‰hl}rö,(hn]ho]hp]hq]ht]uhvMehwhhx]r÷,(hXBuild information for rø,…rù,}rú,(h\XBuild information for hhNhvNhwhh]jô,ubjH)rû,}rü,(h\X`foreign libraries`_jKKh]jô,hjjLhl}rý,(UnameXforeign librarieshq]hp]hn]ho]ht]jNjR,uhx]rþ,hXforeign librariesrÿ,…r-}r-(h\Xforeign librariesh]jû,ubaubhX.…r-}r-(h\X.hhNhvNhwhh]jô,ubeubeubeubj*)r-}r-(h\Uh]jN,hhhihjj-hl}r-(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r-}r-(h\Uh]jN,hhhihjj2hl}r -(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr -j8j -uhvNhwhhx]r -(j:)r -}r -(h\Xtype: foreign library typeh]j-hhhihjj>hl}r-(hq]r-Xpkg-field-foreign-library-typer-ahp]hn]ho]ht]jB‰uhvMkhwhhx]r-(j*)r-}r-(h\Uh]j -hhhihjj-hl}r-(hq]hp]hn]ho]ht]Uentries]r-(jHX)foreign-library:type; package.cabal fieldj-UNtr-auhvMkhwhhx]ubjJ)r-}r-(h\Xtyper-h]j -hhhihjjMhl}r-(jÚjÛhq]hp]hn]ho]ht]uhvMkhwhhx]r-hXtyper-…r-}r-(h\UhhNhvNhwhh]j-ubaubjS)r-}r -(h\jÌh]j -hhhihjjVhl}r!-(jÚjÛhq]hp]hn]ho]ht]uhvMkhwhhx]r"-hX: r#-…r$-}r%-(h\UhhNhvNhwhh]j-ubaubjÒ)r&-}r'-(h\Xforeign library typeh]j -hhhihjjÕhl}r(-(jÚjÛhq]hp]hn]ho]ht]uhvMkhwhhx]r)-hXforeign library typer*-…r+-}r,-(h\UhhNhvNhwhh]j&-ubaubeubj[)r--}r.-(h\Uh]j-hhhihjj^hl}r/-(hn]ho]hp]hq]ht]uhvMkhwhhx]r0-h…)r1-}r2-(h\X…Cabal recognizes ``native-static`` and ``native-shared`` here, although we currently only support building `native-shared` libraries.h]j--hhhihjh‰hl}r3-(hn]ho]hp]hq]ht]uhvMihwhhx]r4-(hXCabal recognizes r5-…r6-}r7-(h\XCabal recognizes hhNhvNhwhh]j1-ubhç)r8-}r9-(h\X``native-static``hl}r:-(hn]ho]hp]hq]ht]uh]j1-hx]r;-hX native-staticr<-…r=-}r>-(h\X native-statich]j8-ubahjhïubhX and r?-…r@-}rA-(h\X and hhNhvNhwhh]j1-ubhç)rB-}rC-(h\X``native-shared``hl}rD-(hn]ho]hp]hq]ht]uh]j1-hx]rE-hX native-sharedrF-…rG-}rH-(h\X native-sharedh]jB-ubahjhïubhX3 here, although we currently only support building rI-…rJ-}rK-(h\X3 here, although we currently only support building hhNhvNhwhh]j1-ubjª()rL-}rM-(h\X`native-shared`hl}rN-(hn]ho]hp]hq]ht]uh]j1-hx]rO-hX native-sharedrP-…rQ-}rR-(h\X native-sharedh]jL-ubahjj²(ubhX libraries.rS-…rT-}rU-(h\X libraries.hhNhvNhwhh]j1-ubeubaubeubj*)rV-}rW-(h\Uh]jN,hhhihjj-hl}rX-(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rY-}rZ-(h\Uh]jN,hhhihjj2hl}r[-(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr\-j8j\-uhvNhwhhx]r]-(j:)r^-}r_-(h\X$options: foreign library option listh]jY-hhhihjj>hl}r`-(hq]ra-X!pkg-field-foreign-library-optionsrb-ahp]hn]ho]ht]jB‰uhvMvhwhhx]rc-(j*)rd-}re-(h\Uh]j^-hhhihjj-hl}rf-(hq]hp]hn]ho]ht]Uentries]rg-(jHX,foreign-library:options; package.cabal fieldjb-UNtrh-auhvMvhwhhx]ubjJ)ri-}rj-(h\Xoptionsrk-h]j^-hhhihjjMhl}rl-(jÚjÛhq]hp]hn]ho]ht]uhvMvhwhhx]rm-hXoptionsrn-…ro-}rp-(h\UhhNhvNhwhh]ji-ubaubjS)rq-}rr-(h\jÌh]j^-hhhihjjVhl}rs-(jÚjÛhq]hp]hn]ho]ht]uhvMvhwhhx]rt-hX: ru-…rv-}rw-(h\UhhNhvNhwhh]jq-ubaubjÒ)rx-}ry-(h\Xforeign library option listh]j^-hhhihjjÕhl}rz-(jÚjÛhq]hp]hn]ho]ht]uhvMvhwhhx]r{-hXforeign library option listr|-…r}-}r~-(h\UhhNhvNhwhh]jx-ubaubeubj[)r-}r€-(h\Uh]jY-hhhihjj^hl}r-(hn]ho]hp]hq]ht]uhvMvhwhhx]r‚-h…)rƒ-}r„-(h\X Options for building the foreign library, typically specific to the specified type of foreign library. Currently we only support ``standalone`` here. A standalone dynamic library is one that does not have any dependencies on other (Haskell) shared libraries; without the ``standalone`` option the generated library would have dependencies on the Haskell runtime library (``libHSrts``), the base library (``libHSbase``), etc. Currently, ``standalone`` *must* be used on Windows and *must not* be used on any other platform.h]j-hhhihjh‰hl}r…-(hn]ho]hp]hq]ht]uhvMnhwhhx]r†-(hXOptions for building the foreign library, typically specific to the specified type of foreign library. Currently we only support r‡-…rˆ-}r‰-(h\XOptions for building the foreign library, typically specific to the specified type of foreign library. Currently we only support hhNhvNhwhh]jƒ-ubhç)rŠ-}r‹-(h\X``standalone``hl}rŒ-(hn]ho]hp]hq]ht]uh]jƒ-hx]r-hX standalonerŽ-…r-}r-(h\X standaloneh]jŠ-ubahjhïubhX€ here. A standalone dynamic library is one that does not have any dependencies on other (Haskell) shared libraries; without the r‘-…r’-}r“-(h\X€ here. A standalone dynamic library is one that does not have any dependencies on other (Haskell) shared libraries; without the hhNhvNhwhh]jƒ-ubhç)r”-}r•-(h\X``standalone``hl}r–-(hn]ho]hp]hq]ht]uh]jƒ-hx]r—-hX standaloner˜-…r™-}rš-(h\X standaloneh]j”-ubahjhïubhXV option the generated library would have dependencies on the Haskell runtime library (r›-…rœ-}r-(h\XV option the generated library would have dependencies on the Haskell runtime library (hhNhvNhwhh]jƒ-ubhç)rž-}rŸ-(h\X ``libHSrts``hl}r -(hn]ho]hp]hq]ht]uh]jƒ-hx]r¡-hXlibHSrtsr¢-…r£-}r¤-(h\XlibHSrtsh]jž-ubahjhïubhX), the base library (r¥-…r¦-}r§-(h\X), the base library (hhNhvNhwhh]jƒ-ubhç)r¨-}r©-(h\X ``libHSbase``hl}rª-(hn]ho]hp]hq]ht]uh]jƒ-hx]r«-hX libHSbaser¬-…r­-}r®-(h\X libHSbaseh]j¨-ubahjhïubhX), etc. Currently, r¯-…r°-}r±-(h\X), etc. Currently, hhNhvNhwhh]jƒ-ubhç)r²-}r³-(h\X``standalone``hl}r´-(hn]ho]hp]hq]ht]uh]jƒ-hx]rµ-hX standaloner¶-…r·-}r¸-(h\X standaloneh]j²-ubahjhïubhX …r¹-}rº-(h\X hhNhvNhwhh]jƒ-ubhÇ)r»-}r¼-(h\X*must*hl}r½-(hn]ho]hp]hq]ht]uh]jƒ-hx]r¾-hXmustr¿-…rÀ-}rÁ-(h\Xmusth]j»-ubahjhÏubhX be used on Windows and rÂ-…rÃ-}rÄ-(h\X be used on Windows and hhNhvNhwhh]jƒ-ubhÇ)rÅ-}rÆ-(h\X *must not*hl}rÇ-(hn]ho]hp]hq]ht]uh]jƒ-hx]rÈ-hXmust notrÉ-…rÊ-}rË-(h\Xmust noth]jÅ-ubahjhÏubhX be used on any other platform.rÌ-…rÍ-}rÎ-(h\X be used on any other platform.hhNhvNhwhh]jƒ-ubeubaubeubj*)rÏ-}rÐ-(h\Uh]jN,hhhihjj-hl}rÑ-(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rÒ-}rÓ-(h\Uh]jN,hhhihjj2hl}rÔ-(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrÕ-j8jÕ-uhvNhwhhx]rÖ-(j:)r×-}rØ-(h\Xmod-def-file: filenameh]jÒ-hhhihjj>hl}rÙ-(hq]rÚ-X&pkg-field-foreign-library-mod-def-filerÛ-ahp]hn]ho]ht]jB‰uhvMhwhhx]rÜ-(j*)rÝ-}rÞ-(h\Uh]j×-hhhihjj-hl}rß-(hq]hp]hn]ho]ht]Uentries]rà-(jHX1foreign-library:mod-def-file; package.cabal fieldjÛ-UNtrá-auhvMhwhhx]ubjJ)râ-}rã-(h\X mod-def-filerä-h]j×-hhhihjjMhl}rå-(jÚjÛhq]hp]hn]ho]ht]uhvMhwhhx]ræ-hX mod-def-filerç-…rè-}ré-(h\UhhNhvNhwhh]jâ-ubaubjS)rê-}rë-(h\jÌh]j×-hhhihjjVhl}rì-(jÚjÛhq]hp]hn]ho]ht]uhvMhwhhx]rí-hX: rî-…rï-}rð-(h\UhhNhvNhwhh]jê-ubaubjÒ)rñ-}rò-(h\Xfilenameh]j×-hhhihjjÕhl}ró-(jÚjÛhq]hp]hn]ho]ht]uhvMhwhhx]rô-hXfilenamerõ-…rö-}r÷-(h\UhhNhvNhwhh]jñ-ubaubeubj[)rø-}rù-(h\Uh]jÒ-hhhihjj^hl}rú-(hn]ho]hp]hq]ht]uhvMhwhhx]rû-h…)rü-}rý-(h\X§This option can only be used when creating dynamic Windows libraries (that is, when using ``native-shared`` and the ``os`` is ``Windows``). If used, it must be a path to a *module definition file*. The details of module definition files are beyond the scope of this document; see the `GHC `_ manual for some details and some further pointers.h]jø-hhhihjh‰hl}rþ-(hn]ho]hp]hq]ht]uhvMyhwhhx]rÿ-(hXZThis option can only be used when creating dynamic Windows libraries (that is, when using r.…r.}r.(h\XZThis option can only be used when creating dynamic Windows libraries (that is, when using hhNhvNhwhh]jü-ubhç)r.}r.(h\X``native-shared``hl}r.(hn]ho]hp]hq]ht]uh]jü-hx]r.hX native-sharedr.…r.}r .(h\X native-sharedh]j.ubahjhïubhX and the r .…r .}r .(h\X and the hhNhvNhwhh]jü-ubhç)r .}r.(h\X``os``hl}r.(hn]ho]hp]hq]ht]uh]jü-hx]r.hXosr.…r.}r.(h\Xosh]j .ubahjhïubhX is r.…r.}r.(h\X is hhNhvNhwhh]jü-ubhç)r.}r.(h\X ``Windows``hl}r.(hn]ho]hp]hq]ht]uh]jü-hx]r.hXWindowsr.…r.}r.(h\XWindowsh]j.ubahjhïubhX#). If used, it must be a path to a r.…r.}r .(h\X#). If used, it must be a path to a hhNhvNhwhh]jü-ubhÇ)r!.}r".(h\X*module definition file*hl}r#.(hn]ho]hp]hq]ht]uh]jü-hx]r$.hXmodule definition filer%.…r&.}r'.(h\Xmodule definition fileh]j!.ubahjhÏubhXX. The details of module definition files are beyond the scope of this document; see the r(.…r).}r*.(h\XX. The details of module definition files are beyond the scope of this document; see the hhNhvNhwhh]jü-ubjH)r+.}r,.(h\XX`GHC `_hl}r-.(UnameXGHCj‡XOhttps://downloads.haskell.org/~ghc/latest/docs/html/users_guide/win32-dlls.htmlr..hq]hp]hn]ho]ht]uh]jü-hx]r/.hXGHCr0.…r1.}r2.(h\XGHCh]j+.ubahjjLubj©)r3.}r4.(h\XR haKh]jü-hjj¬hl}r5.(Urefurij..hq]r6.Ughcr7.ahp]hn]ho]ht]r8.h5auhx]ubhX3 manual for some details and some further pointers.r9.…r:.}r;.(h\X3 manual for some details and some further pointers.hhNhvNhwhh]jü-ubeubaubeubj*)r<.}r=.(h\Uh]jN,hhhihjj-hl}r>.(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r?.}r@.(h\Uh]jN,hhhihjj2hl}rA.(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrB.j8jB.uhvNhwhhx]rC.(j:)rD.}rE.(h\X&lib-version-info: current:revision:ageh]j?.hhhihjj>hl}rF.(hq]rG.X*pkg-field-foreign-library-lib-version-inforH.ahp]hn]ho]ht]jB‰uhvMŸhwhhx]rI.(j*)rJ.}rK.(h\Uh]jD.hhhihjj-hl}rL.(hq]hp]hn]ho]ht]Uentries]rM.(jHX5foreign-library:lib-version-info; package.cabal fieldjH.UNtrN.auhvMŸhwhhx]ubjJ)rO.}rP.(h\Xlib-version-inforQ.h]jD.hhhihjjMhl}rR.(jÚjÛhq]hp]hn]ho]ht]uhvMŸhwhhx]rS.hXlib-version-inforT.…rU.}rV.(h\UhhNhvNhwhh]jO.ubaubjS)rW.}rX.(h\jÌh]jD.hhhihjjVhl}rY.(jÚjÛhq]hp]hn]ho]ht]uhvMŸhwhhx]rZ.hX: r[.…r\.}r].(h\UhhNhvNhwhh]jW.ubaubjÒ)r^.}r_.(h\Xcurrent:revision:ageh]jD.hhhihjjÕhl}r`.(jÚjÛhq]hp]hn]ho]ht]uhvMŸhwhhx]ra.hXcurrent:revision:agerb.…rc.}rd.(h\UhhNhvNhwhh]j^.ubaubeubj[)re.}rf.(h\Uh]j?.hhhihjj^hl}rg.(hn]ho]hp]hq]ht]uhvMŸhwhhx]rh.(h…)ri.}rj.(h\X+This field is currently only used on Linux.rk.h]je.hhhihjh‰hl}rl.(hn]ho]hp]hq]ht]uhvM‚hwhhx]rm.hX+This field is currently only used on Linux.rn.…ro.}rp.(h\jk.hhNhvNhwhh]ji.ubaubh…)rq.}rr.(h\X This field specifies a Libtool-style version-info field that sets an appropriate ABI version for the foreign library. Note that the three numbers specified in this field do not directly specify the actual ABI version: ``6:3:2`` results in library version ``4.2.3``.h]je.hhhihjh‰hl}rs.(hn]ho]hp]hq]ht]uhvM„hwhhx]rt.(hXÚThis field specifies a Libtool-style version-info field that sets an appropriate ABI version for the foreign library. Note that the three numbers specified in this field do not directly specify the actual ABI version: ru.…rv.}rw.(h\XÚThis field specifies a Libtool-style version-info field that sets an appropriate ABI version for the foreign library. Note that the three numbers specified in this field do not directly specify the actual ABI version: hhNhvNhwhh]jq.ubhç)rx.}ry.(h\X ``6:3:2``hl}rz.(hn]ho]hp]hq]ht]uh]jq.hx]r{.hX6:3:2r|.…r}.}r~.(h\X6:3:2h]jx.ubahjhïubhX results in library version r.…r€.}r.(h\X results in library version hhNhvNhwhh]jq.ubhç)r‚.}rƒ.(h\X ``4.2.3``hl}r„.(hn]ho]hp]hq]ht]uh]jq.hx]r….hX4.2.3r†.…r‡.}rˆ.(h\X4.2.3h]j‚.ubahjhïubhX.…r‰.}rŠ.(h\X.hhNhvNhwhh]jq.ubeubh…)r‹.}rŒ.(h\XRWith this field set, the SONAME of the library is set, and symlinks are installed.r.h]je.hhhihjh‰hl}rŽ.(hn]ho]hp]hq]ht]uhvM‰hwhhx]r.hXRWith this field set, the SONAME of the library is set, and symlinks are installed.r.…r‘.}r’.(h\j.hhNhvNhwhh]j‹.ubaubh…)r“.}r”.(h\XVHow you should bump this field on an ABI change depends on the breakage you introduce:r•.h]je.hhhihjh‰hl}r–.(hn]ho]hp]hq]ht]uhvMŒhwhhx]r—.hXVHow you should bump this field on an ABI change depends on the breakage you introduce:r˜.…r™.}rš.(h\j•.hhNhvNhwhh]j“.ubaubh)r›.}rœ.(h\Uh]je.hhhihjh’hl}r.(h”X-hq]hp]hn]ho]ht]uhvMhwhhx]rž.(h–)rŸ.}r .(h\XPrograms using the previous version may use the new version as drop-in replacement, and programs using the new version can also work with the previous one. In other words, no recompiling nor relinking is needed. In this case, bump ``revision`` only, don't touch current nor age.h]j›.hhhihjh™hl}r¡.(hn]ho]hp]hq]ht]uhvNhwhhx]r¢.h…)r£.}r¤.(h\XPrograms using the previous version may use the new version as drop-in replacement, and programs using the new version can also work with the previous one. In other words, no recompiling nor relinking is needed. In this case, bump ``revision`` only, don't touch current nor age.h]jŸ.hhhihjh‰hl}r¥.(hn]ho]hp]hq]ht]uhvMhx]r¦.(hXçPrograms using the previous version may use the new version as drop-in replacement, and programs using the new version can also work with the previous one. In other words, no recompiling nor relinking is needed. In this case, bump r§.…r¨.}r©.(h\XçPrograms using the previous version may use the new version as drop-in replacement, and programs using the new version can also work with the previous one. In other words, no recompiling nor relinking is needed. In this case, bump h]j£.ubhç)rª.}r«.(h\X ``revision``hl}r¬.(hn]ho]hp]hq]ht]uh]j£.hx]r­.hXrevisionr®.…r¯.}r°.(h\Xrevisionh]jª.ubahjhïubhX% only, don’t touch current nor age.r±.…r².}r³.(h\X# only, don't touch current nor age.h]j£.ubeubaubh–)r´.}rµ.(h\XYPrograms using the previous version may use the new version as drop-in replacement, but programs using the new version may use APIs not present in the previous one. In other words, a program linking against the new version may fail with "unresolved symbols" if linking against the old version at runtime: set revision to 0, bump current and age.h]j›.hhhihjh™hl}r¶.(hn]ho]hp]hq]ht]uhvNhwhhx]r·.h…)r¸.}r¹.(h\XYPrograms using the previous version may use the new version as drop-in replacement, but programs using the new version may use APIs not present in the previous one. In other words, a program linking against the new version may fail with "unresolved symbols" if linking against the old version at runtime: set revision to 0, bump current and age.rº.h]j´.hhhihjh‰hl}r».(hn]ho]hp]hq]ht]uhvM”hx]r¼.hX]Programs using the previous version may use the new version as drop-in replacement, but programs using the new version may use APIs not present in the previous one. In other words, a program linking against the new version may fail with “unresolved symbols†if linking against the old version at runtime: set revision to 0, bump current and age.r½.…r¾.}r¿.(h\jº.h]j¸.ubaubaubh–)rÀ.}rÁ.(h\X„Programs may need to be changed, recompiled, and relinked in order to use the new version. Bump current, set revision and age to 0. h]j›.hhhihjh™hl}rÂ.(hn]ho]hp]hq]ht]uhvNhwhhx]rÃ.h…)rÄ.}rÅ.(h\XƒPrograms may need to be changed, recompiled, and relinked in order to use the new version. Bump current, set revision and age to 0.rÆ.h]jÀ.hhhihjh‰hl}rÇ.(hn]ho]hp]hq]ht]uhvMšhx]rÈ.hXƒPrograms may need to be changed, recompiled, and relinked in order to use the new version. Bump current, set revision and age to 0.rÉ.…rÊ.}rË.(h\jÆ.h]jÄ.ubaubaubeubh…)rÌ.}rÍ.(h\XBAlso refer to the Libtool documentation on the version-info field.rÎ.h]je.hhhihjh‰hl}rÏ.(hn]ho]hp]hq]ht]uhvMžhwhhx]rÐ.hXBAlso refer to the Libtool documentation on the version-info field.rÑ.…rÒ.}rÓ.(h\jÎ.hhNhvNhwhh]jÌ.ubaubeubeubj*)rÔ.}rÕ.(h\Uh]jN,hhhihjj-hl}rÖ.(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r×.}rØ.(h\Uh]jN,hhhihjj2hl}rÙ.(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrÚ.j8jÚ.uhvNhwhhx]rÛ.(j:)rÜ.}rÝ.(h\Xlib-version-linux: versionh]j×.hhhihjj>hl}rÞ.(hq]rß.X+pkg-field-foreign-library-lib-version-linuxrà.ahp]hn]ho]ht]jB‰uhvM©hwhhx]rá.(j*)râ.}rã.(h\Uh]jÜ.hhhihjj-hl}rä.(hq]hp]hn]ho]ht]Uentries]rå.(jHX6foreign-library:lib-version-linux; package.cabal fieldjà.UNtræ.auhvM©hwhhx]ubjJ)rç.}rè.(h\Xlib-version-linuxré.h]jÜ.hhhihjjMhl}rê.(jÚjÛhq]hp]hn]ho]ht]uhvM©hwhhx]rë.hXlib-version-linuxrì.…rí.}rî.(h\UhhNhvNhwhh]jç.ubaubjS)rï.}rð.(h\jÌh]jÜ.hhhihjjVhl}rñ.(jÚjÛhq]hp]hn]ho]ht]uhvM©hwhhx]rò.hX: ró.…rô.}rõ.(h\UhhNhvNhwhh]jï.ubaubjÒ)rö.}r÷.(h\Xversionh]jÜ.hhhihjjÕhl}rø.(jÚjÛhq]hp]hn]ho]ht]uhvM©hwhhx]rù.hXversionrú.…rû.}rü.(h\UhhNhvNhwhh]jö.ubaubeubj[)rý.}rþ.(h\Uh]j×.hhhihjj^hl}rÿ.(hn]ho]hp]hq]ht]uhvM©hwhhx]r/(h…)r/}r/(h\X!This field is only used on Linux.r/h]jý.hhhihjh‰hl}r/(hn]ho]hp]hq]ht]uhvM¢hwhhx]r/hX!This field is only used on Linux.r/…r/}r/(h\j/hhNhvNhwhh]j/ubaubh…)r /}r /(h\XSpecifies the library ABI version directly for foreign libraries built on Linux: so specifying ``4.2.3`` causes a library ``libfoo.so.4.2.3`` to be built with SONAME ``libfoo.so.4``, and appropriate symlinks ``libfoo.so.4`` and ``libfoo.so`` to be installed.h]jý.hhhihjh‰hl}r /(hn]ho]hp]hq]ht]uhvM¤hwhhx]r /(hX_Specifies the library ABI version directly for foreign libraries built on Linux: so specifying r /…r/}r/(h\X_Specifies the library ABI version directly for foreign libraries built on Linux: so specifying hhNhvNhwhh]j /ubhç)r/}r/(h\X ``4.2.3``hl}r/(hn]ho]hp]hq]ht]uh]j /hx]r/hX4.2.3r/…r/}r/(h\X4.2.3h]j/ubahjhïubhX causes a library r/…r/}r/(h\X causes a library hhNhvNhwhh]j /ubhç)r/}r/(h\X``libfoo.so.4.2.3``hl}r/(hn]ho]hp]hq]ht]uh]j /hx]r/hXlibfoo.so.4.2.3r/…r/}r /(h\Xlibfoo.so.4.2.3h]j/ubahjhïubhX to be built with SONAME r!/…r"/}r#/(h\X to be built with SONAME hhNhvNhwhh]j /ubhç)r$/}r%/(h\X``libfoo.so.4``hl}r&/(hn]ho]hp]hq]ht]uh]j /hx]r'/hX libfoo.so.4r(/…r)/}r*/(h\X libfoo.so.4h]j$/ubahjhïubhX, and appropriate symlinks r+/…r,/}r-/(h\X, and appropriate symlinks hhNhvNhwhh]j /ubhç)r./}r//(h\X``libfoo.so.4``hl}r0/(hn]ho]hp]hq]ht]uh]j /hx]r1/hX libfoo.so.4r2/…r3/}r4/(h\X libfoo.so.4h]j./ubahjhïubhX and r5/…r6/}r7/(h\X and hhNhvNhwhh]j /ubhç)r8/}r9/(h\X ``libfoo.so``hl}r:/(hn]ho]hp]hq]ht]uh]j /hx]r;/hX libfoo.sor/(h\X libfoo.soh]j8/ubahjhïubhX to be installed.r?/…r@/}rA/(h\X to be installed.hhNhvNhwhh]j /ubeubeubeubh…)rB/}rC/(h\XØNote that typically foreign libraries should export a way to initialize and shutdown the Haskell runtime. In the example above, this is done by the ``csrc/MyForeignLibWrapper.c`` file, which might look something likeh]jN,hhhihjh‰hl}rD/(hn]ho]hp]hq]ht]uhvMªhwhhx]rE/(hX”Note that typically foreign libraries should export a way to initialize and shutdown the Haskell runtime. In the example above, this is done by the rF/…rG/}rH/(h\X”Note that typically foreign libraries should export a way to initialize and shutdown the Haskell runtime. In the example above, this is done by the hhNhvNhwhh]jB/ubhç)rI/}rJ/(h\X``csrc/MyForeignLibWrapper.c``hl}rK/(hn]ho]hp]hq]ht]uh]jB/hx]rL/hXcsrc/MyForeignLibWrapper.crM/…rN/}rO/(h\Xcsrc/MyForeignLibWrapper.ch]jI/ubahjhïubhX& file, which might look something likerP/…rQ/}rR/(h\X& file, which might look something likehhNhvNhwhh]jB/ubeubjÕ)rS/}rT/(h\Xn#include #include "HsFFI.h" HsBool myForeignLibInit(void){ int argc = 2; char *argv[] = { "+RTS", "-A32m", NULL }; char **pargv = argv; // Initialize Haskell runtime hs_init(&argc, &pargv); // do any other initialization here and // return false if there was a problem return HS_BOOL_TRUE; } void myForeignLibExit(void){ hs_exit(); }h]jN,hhhihjjØhl}rU/(j‰jXcjÚjÛhq]hp]hn]j}ho]ht]uhvM®hwhhx]rV/hXn#include #include "HsFFI.h" HsBool myForeignLibInit(void){ int argc = 2; char *argv[] = { "+RTS", "-A32m", NULL }; char **pargv = argv; // Initialize Haskell runtime hs_init(&argc, &pargv); // do any other initialization here and // return false if there was a problem return HS_BOOL_TRUE; } void myForeignLibExit(void){ hs_exit(); }rW/…rX/}rY/(h\Uh]jS/ubaubh…)rZ/}r[/(h\XWith modern ghc regular libraries are installed in directories that contain package keys. This isn't usually a problem because the package gets registered in ghc's package DB and so we can figure out what the location of the library is. Foreign libraries however don't get registered, which means that we'd have to have a way of finding out where a platform library got installed (other than by searching the ``lib/`` directory). Instead, we install foreign libraries in ``~/.cabal/lib``, much like we install executables in ``~/.cabal/bin``.h]jN,hhhihjh‰hl}r\/(hn]ho]hp]hq]ht]uhvMÄhwhhx]r]/(hX¡With modern ghc regular libraries are installed in directories that contain package keys. This isn’t usually a problem because the package gets registered in ghc’s package DB and so we can figure out what the location of the library is. Foreign libraries however don’t get registered, which means that we’d have to have a way of finding out where a platform library got installed (other than by searching the r^/…r_/}r`/(h\X™With modern ghc regular libraries are installed in directories that contain package keys. This isn't usually a problem because the package gets registered in ghc's package DB and so we can figure out what the location of the library is. Foreign libraries however don't get registered, which means that we'd have to have a way of finding out where a platform library got installed (other than by searching the hhNhvNhwhh]jZ/ubhç)ra/}rb/(h\X``lib/``hl}rc/(hn]ho]hp]hq]ht]uh]jZ/hx]rd/hXlib/re/…rf/}rg/(h\Xlib/h]ja/ubahjhïubhX6 directory). Instead, we install foreign libraries in rh/…ri/}rj/(h\X6 directory). Instead, we install foreign libraries in hhNhvNhwhh]jZ/ubhç)rk/}rl/(h\X``~/.cabal/lib``hl}rm/(hn]ho]hp]hq]ht]uh]jZ/hx]rn/hX ~/.cabal/libro/…rp/}rq/(h\X ~/.cabal/libh]jk/ubahjhïubhX&, much like we install executables in rr/…rs/}rt/(h\X&, much like we install executables in hhNhvNhwhh]jZ/ubhç)ru/}rv/(h\X``~/.cabal/bin``hl}rw/(hn]ho]hp]hq]ht]uh]jZ/hx]rx/hX ~/.cabal/binry/…rz/}r{/(h\X ~/.cabal/binh]ju/ubahjhïubhX.…r|/}r}/(h\X.hhNhvNhwhh]jZ/ubeubeubh^)r~/}r/(h\UhaKh]hdhhhihjhkhl}r€/(hn]ho]hp]hq]r/j aht]r‚/hHauhvMÍhwhhx]rƒ/(hz)r„/}r…/(h\XBuild informationr†/h]j~/hhhihjh~hl}r‡/(hn]ho]hp]hq]ht]uhvMÍhwhhx]rˆ/hXBuild informationr‰/…rŠ/}r‹/(h\j†/hhNhvNhwhh]j„/ubaubh…)rŒ/}r/(h\XGThe following fields may be optionally present in a library, executable, test suite or benchmark section, and give information for the building of the corresponding library or executable. See also the sections on `system-dependent parameters`_ and `configurations`_ for a way to supply system-dependent values for these fields.h]j~/hhhihjh‰hl}rŽ/(hn]ho]hp]hq]ht]uhvMÐhwhhx]r/(hXÕThe following fields may be optionally present in a library, executable, test suite or benchmark section, and give information for the building of the corresponding library or executable. See also the sections on r/…r‘/}r’/(h\XÕThe following fields may be optionally present in a library, executable, test suite or benchmark section, and give information for the building of the corresponding library or executable. See also the sections on hhNhvNhwhh]jŒ/ubjH)r“/}r”/(h\X`system-dependent parameters`_jKKh]jŒ/hjjLhl}r•/(UnameXsystem-dependent parametershq]hp]hn]ho]ht]jNj™uhx]r–/hXsystem-dependent parametersr—/…r˜/}r™/(h\Xsystem-dependent parametersh]j“/ubaubhX and rš/…r›/}rœ/(h\X and hhNhvNhwhh]jŒ/ubjH)r/}rž/(h\X`configurations`_jKKh]jŒ/hjjLhl}rŸ/(UnameXconfigurationsr /hq]hp]hn]ho]ht]jNjwuhx]r¡/hXconfigurationsr¢/…r£/}r¤/(h\j /h]j/ubaubhX> for a way to supply system-dependent values for these fields.r¥/…r¦/}r§/(h\X> for a way to supply system-dependent values for these fields.hhNhvNhwhh]jŒ/ubeubj*)r¨/}r©/(h\Uh]j~/hhhihjj-hl}rª/(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r«/}r¬/(h\Uh]j~/hhhihjj2hl}r­/(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr®/j8j®/uhvNhwhhx]r¯/(j:)r°/}r±/(h\Xbuild-depends: library listh]j«/hhhihjj>hl}r²/(hq]r³/Xpkg-field-build-dependsr´/ahp]hn]ho]ht]jB‰uhvM}hwhhx]rµ/(j*)r¶/}r·/(h\Uh]j°/hhhihjj-hl}r¸/(hq]hp]hn]ho]ht]Uentries]r¹/(jHX"build-depends; package.cabal fieldj´/UNtrº/auhvM}hwhhx]ubjJ)r»/}r¼/(h\X build-dependsr½/h]j°/hhhihjjMhl}r¾/(jÚjÛhq]hp]hn]ho]ht]uhvM}hwhhx]r¿/hX build-dependsrÀ/…rÁ/}rÂ/(h\UhhNhvNhwhh]j»/ubaubjS)rÃ/}rÄ/(h\jÌh]j°/hhhihjjVhl}rÅ/(jÚjÛhq]hp]hn]ho]ht]uhvM}hwhhx]rÆ/hX: rÇ/…rÈ/}rÉ/(h\UhhNhvNhwhh]jÃ/ubaubjÒ)rÊ/}rË/(h\X library listh]j°/hhhihjjÕhl}rÌ/(jÚjÛhq]hp]hn]ho]ht]uhvM}hwhhx]rÍ/hX library listrÎ/…rÏ/}rÐ/(h\UhhNhvNhwhh]jÊ/ubaubeubj[)rÑ/}rÒ/(h\Uh]j«/hhhihjj^hl}rÓ/(hn]ho]hp]hq]ht]uhvM}hwhhx]rÔ/(h…)rÕ/}rÖ/(h\XóDeclares the *library* dependencies required to build the current package component; see :pkg-field:`build-tool-depends` for declaring build-time *tool* dependencies. External library dependencies should be annotated with a version constraint.h]jÑ/hhhihjh‰hl}r×/(hn]ho]hp]hq]ht]uhvMØhwhhx]rØ/(hX Declares the rÙ/…rÚ/}rÛ/(h\X Declares the hhNhvNhwhh]jÕ/ubhÇ)rÜ/}rÝ/(h\X *library*hl}rÞ/(hn]ho]hp]hq]ht]uh]jÕ/hx]rß/hXlibraryrà/…rá/}râ/(h\Xlibraryh]jÜ/ubahjhÏubhXC dependencies required to build the current package component; see rã/…rä/}rå/(h\XC dependencies required to build the current package component; see hhNhvNhwhh]jÕ/ubjt)ræ/}rç/(h\X:pkg-field:`build-tool-depends`h]jÕ/hhhihjjwhl}rè/(UreftypeX pkg-fieldjyˆjzXbuild-tool-dependsré/U refdomainXcabalrê/hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvMØhx]rë/hç)rì/}rí/(h\jé/hl}rî/(hn]ho]rï/(j…jê/Xcabal-pkg-fieldrð/ehp]hq]ht]uh]jæ/hx]rñ/hXbuild-tool-dependsrò/…ró/}rô/(h\Uh]jì/ubahjhïubaubhX for declaring build-time rõ/…rö/}r÷/(h\X for declaring build-time hhNhvNhwhh]jÕ/ubhÇ)rø/}rù/(h\X*tool*hl}rú/(hn]ho]hp]hq]ht]uh]jÕ/hx]rû/hXtoolrü/…rý/}rþ/(h\Xtoolh]jø/ubahjhÏubhX[ dependencies. External library dependencies should be annotated with a version constraint.rÿ/…r0}r0(h\X[ dependencies. External library dependencies should be annotated with a version constraint.hhNhvNhwhh]jÕ/ubeubh…)r0}r0(h\X**Library Names**r0h]jÑ/hhhihjh‰hl}r0(hn]ho]hp]hq]ht]uhvMÝhwhhx]r0j²)r0}r0(h\j0hl}r 0(hn]ho]hp]hq]ht]uh]j0hx]r 0hX Library Namesr 0…r 0}r 0(h\X Library Namesh]j0ubahjjºubaubh…)r0}r0(h\X4External libraries are identified by the package's name they're provided by (currently a package can only publically expose its main library compeonent; in future, packages with multiple exposed public library components will be supported and a syntax for referring to public sub-libraries will be provided).r0h]jÑ/hhhihjh‰hl}r0(hn]ho]hp]hq]ht]uhvMßhwhhx]r0hX8External libraries are identified by the package’s name they’re provided by (currently a package can only publically expose its main library compeonent; in future, packages with multiple exposed public library components will be supported and a syntax for referring to public sub-libraries will be provided).r0…r0}r0(h\j0hhNhvNhwhh]j0ubaubh…)r0}r0(h\XGIn order to specify an intra-package dependency on an internal library component you can use the unqualified name of the component library component. Note that locally defined sub-library names shadow external package names of the same name. See section on :ref:`Internal Libraries ` for examples and more information.h]jÑ/hhhihjh‰hl}r0(hn]ho]hp]hq]ht]uhvMåhwhhx]r0(hXIn order to specify an intra-package dependency on an internal library component you can use the unqualified name of the component library component. Note that locally defined sub-library names shadow external package names of the same name. See section on r0…r0}r0(h\XIn order to specify an intra-package dependency on an internal library component you can use the unqualified name of the component library component. Note that locally defined sub-library names shadow external package names of the same name. See section on hhNhvNhwhh]j0ubjt)r0}r0(h\X#:ref:`Internal Libraries `h]j0hhhihjjwhl}r0(UreftypeXrefjyˆjzXsublibsU refdomainXstdr 0hq]hp]U refexplicitˆhn]ho]ht]j}j~uhvMåhx]r!0j€)r"0}r#0(h\XInternal Libraries hl}r$0(hn]ho]r%0(j…j 0Xstd-refr&0ehp]hq]ht]uh]j0hx]r'0hXInternal Librariesr(0…r)0}r*0(h\Uh]j"0ubahjj‹ubaubhX# for examples and more information.r+0…r,0}r-0(h\X# for examples and more information.hhNhvNhwhh]j0ubeubh…)r.0}r/0(h\X**Version Constraints**r00h]jÑ/hhhihjh‰hl}r10(hn]ho]hp]hq]ht]uhvMëhwhhx]r20j²)r30}r40(h\j00hl}r50(hn]ho]hp]hq]ht]uh]j.0hx]r60hXVersion Constraintsr70…r80}r90(h\XVersion Constraintsh]j30ubahjjºubaubh…)r:0}r;0(h\XêVersion constraints use the operators ``==, >=, >, <, <=`` and a version number. Multiple constraints can be combined using ``&&`` or ``||``. If no version constraint is specified, any version is assumed to be acceptable. For example:h]jÑ/hhhihjh‰hl}r<0(hn]ho]hp]hq]ht]uhvMíhwhhx]r=0(hX&Version constraints use the operators r>0…r?0}r@0(h\X&Version constraints use the operators hhNhvNhwhh]j:0ubhç)rA0}rB0(h\X``==, >=, >, <, <=``hl}rC0(hn]ho]hp]hq]ht]uh]j:0hx]rD0hX==, >=, >, <, <=rE0…rF0}rG0(h\X==, >=, >, <, <=h]jA0ubahjhïubhXB and a version number. Multiple constraints can be combined using rH0…rI0}rJ0(h\XB and a version number. Multiple constraints can be combined using hhNhvNhwhh]j:0ubhç)rK0}rL0(h\X``&&``hl}rM0(hn]ho]hp]hq]ht]uh]j:0hx]rN0hX&&rO0…rP0}rQ0(h\X&&h]jK0ubahjhïubhX or rR0…rS0}rT0(h\X or hhNhvNhwhh]j:0ubhç)rU0}rV0(h\X``||``hl}rW0(hn]ho]hp]hq]ht]uh]j:0hx]rX0hX||rY0…rZ0}r[0(h\X||h]jU0ubahjhïubhX^. If no version constraint is specified, any version is assumed to be acceptable. For example:r\0…r]0}r^0(h\X^. If no version constraint is specified, any version is assumed to be acceptable. For example:hhNhvNhwhh]j:0ubeubjÕ)r_0}r`0(h\XJlibrary build-depends: base >= 2, foo >= 1.2.3 && < 1.3, barh]jÑ/hhhihjjØhl}ra0(jÚjÛhq]hp]hn]ho]ht]uhvMôhwhhx]rb0hXJlibrary build-depends: base >= 2, foo >= 1.2.3 && < 1.3, barrc0…rd0}re0(h\Uh]j_0ubaubh…)rf0}rg0(h\X¨Dependencies like ``foo >= 1.2.3 && < 1.3`` turn out to be very common because it is recommended practise for package versions to correspond to API versions (see PVP_).h]jÑ/hhhihjh‰hl}rh0(hn]ho]hp]hq]ht]uhvMúhwhhx]ri0(hXDependencies like rj0…rk0}rl0(h\XDependencies like hhNhvNhwhh]jf0ubhç)rm0}rn0(h\X``foo >= 1.2.3 && < 1.3``hl}ro0(hn]ho]hp]hq]ht]uh]jf0hx]rp0hXfoo >= 1.2.3 && < 1.3rq0…rr0}rs0(h\Xfoo >= 1.2.3 && < 1.3h]jm0ubahjhïubhXw turn out to be very common because it is recommended practise for package versions to correspond to API versions (see rt0…ru0}rv0(h\Xw turn out to be very common because it is recommended practise for package versions to correspond to API versions (see hhNhvNhwhh]jf0ubjH)rw0}rx0(h\XPVP_jKKh]jf0hjjLhl}ry0(UnameXPVPrz0j‡j²hq]hp]hn]ho]ht]uhx]r{0hXPVPr|0…r}0}r~0(h\jz0h]jw0ubaubhX).r0…r€0}r0(h\X).hhNhvNhwhh]jf0ubeubh…)r‚0}rƒ0(h\XLSince Cabal 1.6, there is a special wildcard syntax to help with such rangesr„0h]jÑ/hhhihjh‰hl}r…0(hn]ho]hp]hq]ht]uhvMþhwhhx]r†0hXLSince Cabal 1.6, there is a special wildcard syntax to help with such rangesr‡0…rˆ0}r‰0(h\j„0hhNhvNhwhh]j‚0ubaubjÕ)rŠ0}r‹0(h\Xbuild-depends: foo ==1.2.*h]jÑ/hhhihjjØhl}rŒ0(jÚjÛhq]hp]hn]ho]ht]uhvMhwhhx]r0hXbuild-depends: foo ==1.2.*rŽ0…r0}r0(h\Uh]jŠ0ubaubh…)r‘0}r’0(h\XPIt is only syntactic sugar. It is exactly equivalent to ``foo >= 1.2 && < 1.3``.h]jÑ/hhhihjh‰hl}r“0(hn]ho]hp]hq]ht]uhvMhwhhx]r”0(hX8It is only syntactic sugar. It is exactly equivalent to r•0…r–0}r—0(h\X8It is only syntactic sugar. It is exactly equivalent to hhNhvNhwhh]j‘0ubhç)r˜0}r™0(h\X``foo >= 1.2 && < 1.3``hl}rš0(hn]ho]hp]hq]ht]uh]j‘0hx]r›0hXfoo >= 1.2 && < 1.3rœ0…r0}rž0(h\Xfoo >= 1.2 && < 1.3h]j˜0ubahjhïubhX.…rŸ0}r 0(h\X.hhNhvNhwhh]j‘0ubeubcdocutils.nodes warning r¡0)r¢0}r£0(h\XA potential pitfall of the wildcard syntax is that the constraint ``nats == 1.0.*`` doesn't match the release ``nats-1`` because the version ``1`` is lexicographically less than ``1.0``. This is not an issue with the caret-operator ``^>=`` described below.h]jÑ/hhhihjUwarningr¤0hl}r¥0(hn]ho]hp]hq]ht]uhvNhwhhx]r¦0h…)r§0}r¨0(h\XA potential pitfall of the wildcard syntax is that the constraint ``nats == 1.0.*`` doesn't match the release ``nats-1`` because the version ``1`` is lexicographically less than ``1.0``. This is not an issue with the caret-operator ``^>=`` described below.h]j¢0hhhihjh‰hl}r©0(hn]ho]hp]hq]ht]uhvM hx]rª0(hXBA potential pitfall of the wildcard syntax is that the constraint r«0…r¬0}r­0(h\XBA potential pitfall of the wildcard syntax is that the constraint h]j§0ubhç)r®0}r¯0(h\X``nats == 1.0.*``hl}r°0(hn]ho]hp]hq]ht]uh]j§0hx]r±0hX nats == 1.0.*r²0…r³0}r´0(h\X nats == 1.0.*h]j®0ubahjhïubhX doesn’t match the release rµ0…r¶0}r·0(h\X doesn't match the release h]j§0ubhç)r¸0}r¹0(h\X ``nats-1``hl}rº0(hn]ho]hp]hq]ht]uh]j§0hx]r»0hXnats-1r¼0…r½0}r¾0(h\Xnats-1h]j¸0ubahjhïubhX because the version r¿0…rÀ0}rÁ0(h\X because the version h]j§0ubhç)rÂ0}rÃ0(h\X``1``hl}rÄ0(hn]ho]hp]hq]ht]uh]j§0hx]rÅ0hX1…rÆ0}rÇ0(h\X1h]jÂ0ubahjhïubhX is lexicographically less than rÈ0…rÉ0}rÊ0(h\X is lexicographically less than h]j§0ubhç)rË0}rÌ0(h\X``1.0``hl}rÍ0(hn]ho]hp]hq]ht]uh]j§0hx]rÎ0hX1.0rÏ0…rÐ0}rÑ0(h\X1.0h]jË0ubahjhïubhX/. This is not an issue with the caret-operator rÒ0…rÓ0}rÔ0(h\X/. This is not an issue with the caret-operator h]j§0ubhç)rÕ0}rÖ0(h\X``^>=``hl}r×0(hn]ho]hp]hq]ht]uh]j§0hx]rØ0hX^>=rÙ0…rÚ0}rÛ0(h\X^>=h]jÕ0ubahjhïubhX described below.rÜ0…rÝ0}rÞ0(h\X described below.h]j§0ubeubaubh…)rß0}rà0(h\XêStarting with Cabal 2.0, there's a new version operator to express PVP_-style major upper bounds conveniently, and is inspired by similar syntactic sugar found in other language ecosystems where it's often called the "Caret" operator:h]jÑ/hhhihjh‰hl}rá0(hn]ho]hp]hq]ht]uhvMhwhhx]râ0(hXEStarting with Cabal 2.0, there’s a new version operator to express rã0…rä0}rå0(h\XCStarting with Cabal 2.0, there's a new version operator to express hhNhvNhwhh]jß0ubjH)ræ0}rç0(h\XPVP_jKKh]jß0hjjLhl}rè0(UnameXPVPré0j‡j²hq]hp]hn]ho]ht]uhx]rê0hXPVPrë0…rì0}rí0(h\jé0h]jæ0ubaubhX©-style major upper bounds conveniently, and is inspired by similar syntactic sugar found in other language ecosystems where it’s often called the “Caret†operator:rî0…rï0}rð0(h\X£-style major upper bounds conveniently, and is inspired by similar syntactic sugar found in other language ecosystems where it's often called the "Caret" operator:hhNhvNhwhh]jß0ubeubjÕ)rñ0}rò0(h\X-build-depends: foo ^>= 1.2.3.4, bar ^>= 1h]jÑ/hhhihjjØhl}ró0(jÚjÛhq]hp]hn]ho]ht]uhvMhwhhx]rô0hX-build-depends: foo ^>= 1.2.3.4, bar ^>= 1rõ0…rö0}r÷0(h\Uh]jñ0ubaubh…)rø0}rù0(h\XpThis allows to assert the positive knowledge that this package is *known* to be semantically compatible with the releases ``foo-1.2.3.4`` and ``bar-1`` respectively. The information encoded via such ``^>=``-assertions is used by the cabal solver to infer version constraints describing semantically compatible version ranges according to the PVP_ contract (see below).h]jÑ/hhhihjh‰hl}rú0(hn]ho]hp]hq]ht]uhvMhwhhx]rû0(hXBThis allows to assert the positive knowledge that this package is rü0…rý0}rþ0(h\XBThis allows to assert the positive knowledge that this package is hhNhvNhwhh]jø0ubhÇ)rÿ0}r1(h\X*known*hl}r1(hn]ho]hp]hq]ht]uh]jø0hx]r1hXknownr1…r1}r1(h\Xknownh]jÿ0ubahjhÏubhX1 to be semantically compatible with the releases r1…r1}r1(h\X1 to be semantically compatible with the releases hhNhvNhwhh]jø0ubhç)r 1}r 1(h\X``foo-1.2.3.4``hl}r 1(hn]ho]hp]hq]ht]uh]jø0hx]r 1hX foo-1.2.3.4r 1…r1}r1(h\X foo-1.2.3.4h]j 1ubahjhïubhX and r1…r1}r1(h\X and hhNhvNhwhh]jø0ubhç)r1}r1(h\X ``bar-1``hl}r1(hn]ho]hp]hq]ht]uh]jø0hx]r1hXbar-1r1…r1}r1(h\Xbar-1h]j1ubahjhïubhX0 respectively. The information encoded via such r1…r1}r1(h\X0 respectively. The information encoded via such hhNhvNhwhh]jø0ubhç)r1}r1(h\X``^>=``hl}r1(hn]ho]hp]hq]ht]uh]jø0hx]r 1hX^>=r!1…r"1}r#1(h\X^>=h]j1ubahjhïubhXˆ-assertions is used by the cabal solver to infer version constraints describing semantically compatible version ranges according to the r$1…r%1}r&1(h\Xˆ-assertions is used by the cabal solver to infer version constraints describing semantically compatible version ranges according to the hhNhvNhwhh]jø0ubjH)r'1}r(1(h\XPVP_jKKh]jø0hjjLhl}r)1(UnameXPVPr*1j‡j²hq]hp]hn]ho]ht]uhx]r+1hXPVPr,1…r-1}r.1(h\j*1h]j'1ubaubhX contract (see below).r/1…r01}r11(h\X contract (see below).hhNhvNhwhh]jø0ubeubh…)r21}r31(h\XÇAnother way to say this is that ``foo < 1.3`` expresses *negative* information, i.e. "``foo-1.3`` or ``foo-1.4.2`` will *not* be compatible"; whereas ``foo ^>= 1.2.3.4`` asserts the *positive* information that "``foo-1.2.3.4`` is *known* to be compatible" and (in the absence of additional information) according to the PVP_ contract we can (positively) infer right away that all versions satisfying ``foo >= 1.2.3.4 && < 1.3`` will be compatible as well.h]jÑ/hhhihjh‰hl}r41(hn]ho]hp]hq]ht]uhvM"hwhhx]r51(hX Another way to say this is that r61…r71}r81(h\X Another way to say this is that hhNhvNhwhh]j21ubhç)r91}r:1(h\X ``foo < 1.3``hl}r;1(hn]ho]hp]hq]ht]uh]j21hx]r<1hX foo < 1.3r=1…r>1}r?1(h\X foo < 1.3h]j91ubahjhïubhX expresses r@1…rA1}rB1(h\X expresses hhNhvNhwhh]j21ubhÇ)rC1}rD1(h\X *negative*hl}rE1(hn]ho]hp]hq]ht]uh]j21hx]rF1hXnegativerG1…rH1}rI1(h\Xnegativeh]jC1ubahjhÏubhX information, i.e. “rJ1…rK1}rL1(h\X information, i.e. "hhNhvNhwhh]j21ubhç)rM1}rN1(h\X ``foo-1.3``hl}rO1(hn]ho]hp]hq]ht]uh]j21hx]rP1hXfoo-1.3rQ1…rR1}rS1(h\Xfoo-1.3h]jM1ubahjhïubhX or rT1…rU1}rV1(h\X or hhNhvNhwhh]j21ubhç)rW1}rX1(h\X ``foo-1.4.2``hl}rY1(hn]ho]hp]hq]ht]uh]j21hx]rZ1hX foo-1.4.2r[1…r\1}r]1(h\X foo-1.4.2h]jW1ubahjhïubhX will r^1…r_1}r`1(h\X will hhNhvNhwhh]j21ubhÇ)ra1}rb1(h\X*not*hl}rc1(hn]ho]hp]hq]ht]uh]j21hx]rd1hXnotre1…rf1}rg1(h\Xnoth]ja1ubahjhÏubhX be compatibleâ€; whereas rh1…ri1}rj1(h\X be compatible"; whereas hhNhvNhwhh]j21ubhç)rk1}rl1(h\X``foo ^>= 1.2.3.4``hl}rm1(hn]ho]hp]hq]ht]uh]j21hx]rn1hXfoo ^>= 1.2.3.4ro1…rp1}rq1(h\Xfoo ^>= 1.2.3.4h]jk1ubahjhïubhX asserts the rr1…rs1}rt1(h\X asserts the hhNhvNhwhh]j21ubhÇ)ru1}rv1(h\X *positive*hl}rw1(hn]ho]hp]hq]ht]uh]j21hx]rx1hXpositivery1…rz1}r{1(h\Xpositiveh]ju1ubahjhÏubhX information that “r|1…r}1}r~1(h\X information that "hhNhvNhwhh]j21ubhç)r1}r€1(h\X``foo-1.2.3.4``hl}r1(hn]ho]hp]hq]ht]uh]j21hx]r‚1hX foo-1.2.3.4rƒ1…r„1}r…1(h\X foo-1.2.3.4h]j1ubahjhïubhX is r†1…r‡1}rˆ1(h\X is hhNhvNhwhh]j21ubhÇ)r‰1}rŠ1(h\X*known*hl}r‹1(hn]ho]hp]hq]ht]uh]j21hx]rŒ1hXknownr1…rŽ1}r1(h\Xknownh]j‰1ubahjhÏubhXU to be compatible†and (in the absence of additional information) according to the r1…r‘1}r’1(h\XS to be compatible" and (in the absence of additional information) according to the hhNhvNhwhh]j21ubjH)r“1}r”1(h\XPVP_jKKh]j21hjjLhl}r•1(UnameXPVPr–1j‡j²hq]hp]hn]ho]ht]uhx]r—1hXPVPr˜1…r™1}rš1(h\j–1h]j“1ubaubhXL contract we can (positively) infer right away that all versions satisfying r›1…rœ1}r1(h\XL contract we can (positively) infer right away that all versions satisfying hhNhvNhwhh]j21ubhç)rž1}rŸ1(h\X``foo >= 1.2.3.4 && < 1.3``hl}r 1(hn]ho]hp]hq]ht]uh]j21hx]r¡1hXfoo >= 1.2.3.4 && < 1.3r¢1…r£1}r¤1(h\Xfoo >= 1.2.3.4 && < 1.3h]jž1ubahjhïubhX will be compatible as well.r¥1…r¦1}r§1(h\X will be compatible as well.hhNhvNhwhh]j21ubeubhó)r¨1}r©1(h\X5More generally, the PVP_ contract implies that we can safely relax the lower bound to ``>= 1.2``, because if we know that ``foo-1.2.3.4`` is semantically compatible, then so is ``foo-1.2`` (if it typechecks). But we'd need to perform additional static analysis (i.e. perform typechecking) in order to know if our package in the role of an API consumer will successfully typecheck against the dependency ``foo-1.2``. But since we cannot do this analysis during constraint solving and to keep things simple, we pragmatically use ``foo >= 1.2.3.4`` as the initially inferred approximation for the lower bound resulting from the assertion ``foo ^>= 1.2.3.4``. If further evidence becomes available that e.g. ``foo-1.2`` typechecks, one can simply revise the dependency specification to include the assertion ``foo ^>= 1.2``.h]jÑ/hhhihjhöhl}rª1(hn]ho]hp]hq]ht]uhvNhwhhx]r«1h…)r¬1}r­1(h\X5More generally, the PVP_ contract implies that we can safely relax the lower bound to ``>= 1.2``, because if we know that ``foo-1.2.3.4`` is semantically compatible, then so is ``foo-1.2`` (if it typechecks). But we'd need to perform additional static analysis (i.e. perform typechecking) in order to know if our package in the role of an API consumer will successfully typecheck against the dependency ``foo-1.2``. But since we cannot do this analysis during constraint solving and to keep things simple, we pragmatically use ``foo >= 1.2.3.4`` as the initially inferred approximation for the lower bound resulting from the assertion ``foo ^>= 1.2.3.4``. If further evidence becomes available that e.g. ``foo-1.2`` typechecks, one can simply revise the dependency specification to include the assertion ``foo ^>= 1.2``.h]j¨1hhhihjh‰hl}r®1(hn]ho]hp]hq]ht]uhvM,hx]r¯1(hXMore generally, the r°1…r±1}r²1(h\XMore generally, the h]j¬1ubjH)r³1}r´1(h\XPVP_jKKh]j¬1hjjLhl}rµ1(UnameXPVPr¶1j‡j²hq]hp]hn]ho]ht]uhx]r·1hXPVPr¸1…r¹1}rº1(h\j¶1h]j³1ubaubhX> contract implies that we can safely relax the lower bound to r»1…r¼1}r½1(h\X> contract implies that we can safely relax the lower bound to h]j¬1ubhç)r¾1}r¿1(h\X ``>= 1.2``hl}rÀ1(hn]ho]hp]hq]ht]uh]j¬1hx]rÁ1hX>= 1.2rÂ1…rÃ1}rÄ1(h\X>= 1.2h]j¾1ubahjhïubhX, because if we know that rÅ1…rÆ1}rÇ1(h\X, because if we know that h]j¬1ubhç)rÈ1}rÉ1(h\X``foo-1.2.3.4``hl}rÊ1(hn]ho]hp]hq]ht]uh]j¬1hx]rË1hX foo-1.2.3.4rÌ1…rÍ1}rÎ1(h\X foo-1.2.3.4h]jÈ1ubahjhïubhX( is semantically compatible, then so is rÏ1…rÐ1}rÑ1(h\X( is semantically compatible, then so is h]j¬1ubhç)rÒ1}rÓ1(h\X ``foo-1.2``hl}rÔ1(hn]ho]hp]hq]ht]uh]j¬1hx]rÕ1hXfoo-1.2rÖ1…r×1}rØ1(h\Xfoo-1.2h]jÒ1ubahjhïubhXÙ (if it typechecks). But we’d need to perform additional static analysis (i.e. perform typechecking) in order to know if our package in the role of an API consumer will successfully typecheck against the dependency rÙ1…rÚ1}rÛ1(h\X× (if it typechecks). But we'd need to perform additional static analysis (i.e. perform typechecking) in order to know if our package in the role of an API consumer will successfully typecheck against the dependency h]j¬1ubhç)rÜ1}rÝ1(h\X ``foo-1.2``hl}rÞ1(hn]ho]hp]hq]ht]uh]j¬1hx]rß1hXfoo-1.2rà1…rá1}râ1(h\Xfoo-1.2h]jÜ1ubahjhïubhXr. But since we cannot do this analysis during constraint solving and to keep things simple, we pragmatically use rã1…rä1}rå1(h\Xr. But since we cannot do this analysis during constraint solving and to keep things simple, we pragmatically use h]j¬1ubhç)ræ1}rç1(h\X``foo >= 1.2.3.4``hl}rè1(hn]ho]hp]hq]ht]uh]j¬1hx]ré1hXfoo >= 1.2.3.4rê1…rë1}rì1(h\Xfoo >= 1.2.3.4h]jæ1ubahjhïubhXZ as the initially inferred approximation for the lower bound resulting from the assertion rí1…rî1}rï1(h\XZ as the initially inferred approximation for the lower bound resulting from the assertion h]j¬1ubhç)rð1}rñ1(h\X``foo ^>= 1.2.3.4``hl}rò1(hn]ho]hp]hq]ht]uh]j¬1hx]ró1hXfoo ^>= 1.2.3.4rô1…rõ1}rö1(h\Xfoo ^>= 1.2.3.4h]jð1ubahjhïubhX2. If further evidence becomes available that e.g. r÷1…rø1}rù1(h\X2. If further evidence becomes available that e.g. h]j¬1ubhç)rú1}rû1(h\X ``foo-1.2``hl}rü1(hn]ho]hp]hq]ht]uh]j¬1hx]rý1hXfoo-1.2rþ1…rÿ1}r2(h\Xfoo-1.2h]jú1ubahjhïubhXY typechecks, one can simply revise the dependency specification to include the assertion r2…r2}r2(h\XY typechecks, one can simply revise the dependency specification to include the assertion h]j¬1ubhç)r2}r2(h\X``foo ^>= 1.2``hl}r2(hn]ho]hp]hq]ht]uh]j¬1hx]r2hX foo ^>= 1.2r2…r 2}r 2(h\X foo ^>= 1.2h]j2ubahjhïubhX.…r 2}r 2(h\X.h]j¬1ubeubaubh…)r 2}r2(h\XLThe subtle but important difference in signaling allows tooling to treat explicitly expressed ``<``-style constraints and inferred (``^>=``-style) upper bounds differently. For instance, :option:`--allow-newer`'s ``^``-modifier allows to relax only ``^>=``-style bounds while leaving explicitly stated ``<``-constraints unaffected.h]jÑ/hhhihjh‰hl}r2(hn]ho]hp]hq]ht]uhvM;hwhhx]r2(hX^The subtle but important difference in signaling allows tooling to treat explicitly expressed r2…r2}r2(h\X^The subtle but important difference in signaling allows tooling to treat explicitly expressed hhNhvNhwhh]j 2ubhç)r2}r2(h\X``<``hl}r2(hn]ho]hp]hq]ht]uh]j 2hx]r2hX<…r2}r2(h\X=``hl}r2(hn]ho]hp]hq]ht]uh]j 2hx]r 2hX^>=r!2…r"2}r#2(h\X^>=h]j2ubahjhïubhX1-style) upper bounds differently. For instance, r$2…r%2}r&2(h\X1-style) upper bounds differently. For instance, hhNhvNhwhh]j 2ubjt)r'2}r(2(h\X:option:`--allow-newer`h]j 2hhhihjjwhl}r)2(UreftypeXoptionjyˆjzX --allow-newerr*2U refdomainXstdr+2hq]hp]U refexplicit‰hn]ho]ht]j}j~U std:programr,2NuhvM;hx]r-2hç)r.2}r/2(h\j*2hl}r02(hn]ho]r12(j…j+2X std-optionr22ehp]hq]ht]uh]j'2hx]r32hX --allow-newerr42…r52}r62(h\Uh]j.2ubahjhïubaubhX’s r72…r82}r92(h\X's hhNhvNhwhh]j 2ubhç)r:2}r;2(h\X``^``hl}r<2(hn]ho]hp]hq]ht]uh]j 2hx]r=2hX^…r>2}r?2(h\X^h]j:2ubahjhïubhX-modifier allows to relax only r@2…rA2}rB2(h\X-modifier allows to relax only hhNhvNhwhh]j 2ubhç)rC2}rD2(h\X``^>=``hl}rE2(hn]ho]hp]hq]ht]uh]j 2hx]rF2hX^>=rG2…rH2}rI2(h\X^>=h]jC2ubahjhïubhX.-style bounds while leaving explicitly stated rJ2…rK2}rL2(h\X.-style bounds while leaving explicitly stated hhNhvNhwhh]j 2ubhç)rM2}rN2(h\X``<``hl}rO2(hn]ho]hp]hq]ht]uh]j 2hx]rP2hX<…rQ2}rR2(h\X= x`` == ``>= x && < x.1``rd2h]j^2hhhihjh™hl}re2(hn]ho]hp]hq]ht]uhvNhwhhx]rf2h…)rg2}rh2(h\jd2h]jb2hhhihjh‰hl}ri2(hn]ho]hp]hq]ht]uhvMDhx]rj2(hç)rk2}rl2(h\X ``^>= x``hl}rm2(hn]ho]hp]hq]ht]uh]jg2hx]rn2hX^>= xro2…rp2}rq2(h\X^>= xh]jk2ubahjhïubhX == rr2…rs2}rt2(h\X == h]jg2ubhç)ru2}rv2(h\X``>= x && < x.1``hl}rw2(hn]ho]hp]hq]ht]uh]jg2hx]rx2hX >= x && < x.1ry2…rz2}r{2(h\X >= x && < x.1h]ju2ubahjhïubeubaubh–)r|2}r}2(h\X&``^>= x.y`` == ``>= x.y && < x.(y+1)``r~2h]j^2hhhihjh™hl}r2(hn]ho]hp]hq]ht]uhvNhwhhx]r€2h…)r2}r‚2(h\j~2h]j|2hhhihjh‰hl}rƒ2(hn]ho]hp]hq]ht]uhvMEhx]r„2(hç)r…2}r†2(h\X ``^>= x.y``hl}r‡2(hn]ho]hp]hq]ht]uh]j2hx]rˆ2hX^>= x.yr‰2…rŠ2}r‹2(h\X^>= x.yh]j…2ubahjhïubhX == rŒ2…r2}rŽ2(h\X == h]j2ubhç)r2}r2(h\X``>= x.y && < x.(y+1)``hl}r‘2(hn]ho]hp]hq]ht]uh]j2hx]r’2hX>= x.y && < x.(y+1)r“2…r”2}r•2(h\X>= x.y && < x.(y+1)h]j2ubahjhïubeubaubh–)r–2}r—2(h\X*``^>= x.y.z`` == ``>= x.y.z && < x.(y+1)``r˜2h]j^2hhhihjh™hl}r™2(hn]ho]hp]hq]ht]uhvNhwhhx]rš2h…)r›2}rœ2(h\j˜2h]j–2hhhihjh‰hl}r2(hn]ho]hp]hq]ht]uhvMFhx]rž2(hç)rŸ2}r 2(h\X ``^>= x.y.z``hl}r¡2(hn]ho]hp]hq]ht]uh]j›2hx]r¢2hX ^>= x.y.zr£2…r¤2}r¥2(h\X ^>= x.y.zh]jŸ2ubahjhïubhX == r¦2…r§2}r¨2(h\X == h]j›2ubhç)r©2}rª2(h\X``>= x.y.z && < x.(y+1)``hl}r«2(hn]ho]hp]hq]ht]uh]j›2hx]r¬2hX>= x.y.z && < x.(y+1)r­2…r®2}r¯2(h\X>= x.y.z && < x.(y+1)h]j©2ubahjhïubeubaubh–)r°2}r±2(h\X.``^>= x.y.z.u`` == ``>= x.y.z.u && < x.(y+1)``r²2h]j^2hhhihjh™hl}r³2(hn]ho]hp]hq]ht]uhvNhwhhx]r´2h…)rµ2}r¶2(h\j²2h]j°2hhhihjh‰hl}r·2(hn]ho]hp]hq]ht]uhvMGhx]r¸2(hç)r¹2}rº2(h\X``^>= x.y.z.u``hl}r»2(hn]ho]hp]hq]ht]uh]jµ2hx]r¼2hX ^>= x.y.z.ur½2…r¾2}r¿2(h\X ^>= x.y.z.uh]j¹2ubahjhïubhX == rÀ2…rÁ2}rÂ2(h\X == h]jµ2ubhç)rÃ2}rÄ2(h\X``>= x.y.z.u && < x.(y+1)``hl}rÅ2(hn]ho]hp]hq]ht]uh]jµ2hx]rÆ2hX>= x.y.z.u && < x.(y+1)rÇ2…rÈ2}rÉ2(h\X>= x.y.z.u && < x.(y+1)h]jÃ2ubahjhïubeubaubh–)rÊ2}rË2(h\Xetc. h]j^2hhhihjh™hl}rÌ2(hn]ho]hp]hq]ht]uhvNhwhhx]rÍ2h…)rÎ2}rÏ2(h\Xetc.rÐ2h]jÊ2hhhihjh‰hl}rÑ2(hn]ho]hp]hq]ht]uhvMHhx]rÒ2hXetc.rÓ2…rÔ2}rÕ2(h\jÐ2h]jÎ2ubaubaubeubhó)rÖ2}r×2(h\XÐOne might expected the desugaring to truncate all version components below (and including) the patch-level, i.e. ``^>= x.y.z.u`` == ``>= x.y.z && < x.(y+1)``, as the major and minor version components alone are supposed to uniquely identify the API according to the PVP_. However, by designing ``^>=`` to be closer to the ``>=`` operator, we avoid the potentially confusing effect of ``^>=`` being more liberal than ``>=`` in the presence of patch-level versions.h]jÑ/hhhihjhöhl}rØ2(hn]ho]hp]hq]ht]uhvNhwhhx]rÙ2h…)rÚ2}rÛ2(h\XÐOne might expected the desugaring to truncate all version components below (and including) the patch-level, i.e. ``^>= x.y.z.u`` == ``>= x.y.z && < x.(y+1)``, as the major and minor version components alone are supposed to uniquely identify the API according to the PVP_. However, by designing ``^>=`` to be closer to the ``>=`` operator, we avoid the potentially confusing effect of ``^>=`` being more liberal than ``>=`` in the presence of patch-level versions.h]jÖ2hhhihjh‰hl}rÜ2(hn]ho]hp]hq]ht]uhvMLhx]rÝ2(hXqOne might expected the desugaring to truncate all version components below (and including) the patch-level, i.e. rÞ2…rß2}rà2(h\XqOne might expected the desugaring to truncate all version components below (and including) the patch-level, i.e. h]jÚ2ubhç)rá2}râ2(h\X``^>= x.y.z.u``hl}rã2(hn]ho]hp]hq]ht]uh]jÚ2hx]rä2hX ^>= x.y.z.urå2…ræ2}rç2(h\X ^>= x.y.z.uh]já2ubahjhïubhX == rè2…ré2}rê2(h\X == h]jÚ2ubhç)rë2}rì2(h\X``>= x.y.z && < x.(y+1)``hl}rí2(hn]ho]hp]hq]ht]uh]jÚ2hx]rî2hX>= x.y.z && < x.(y+1)rï2…rð2}rñ2(h\X>= x.y.z && < x.(y+1)h]jë2ubahjhïubhXm, as the major and minor version components alone are supposed to uniquely identify the API according to the rò2…ró2}rô2(h\Xm, as the major and minor version components alone are supposed to uniquely identify the API according to the h]jÚ2ubjH)rõ2}rö2(h\XPVP_jKKh]jÚ2hjjLhl}r÷2(UnameXPVPrø2j‡j²hq]hp]hn]ho]ht]uhx]rù2hXPVPrú2…rû2}rü2(h\jø2h]jõ2ubaubhX. However, by designing rý2…rþ2}rÿ2(h\X. However, by designing h]jÚ2ubhç)r3}r3(h\X``^>=``hl}r3(hn]ho]hp]hq]ht]uh]jÚ2hx]r3hX^>=r3…r3}r3(h\X^>=h]j3ubahjhïubhX to be closer to the r3…r3}r 3(h\X to be closer to the h]jÚ2ubhç)r 3}r 3(h\X``>=``hl}r 3(hn]ho]hp]hq]ht]uh]jÚ2hx]r 3hX>=r3…r3}r3(h\X>=h]j 3ubahjhïubhX8 operator, we avoid the potentially confusing effect of r3…r3}r3(h\X8 operator, we avoid the potentially confusing effect of h]jÚ2ubhç)r3}r3(h\X``^>=``hl}r3(hn]ho]hp]hq]ht]uh]jÚ2hx]r3hX^>=r3…r3}r3(h\X^>=h]j3ubahjhïubhX being more liberal than r3…r3}r3(h\X being more liberal than h]jÚ2ubhç)r3}r3(h\X``>=``hl}r 3(hn]ho]hp]hq]ht]uh]jÚ2hx]r!3hX>=r"3…r#3}r$3(h\X>=h]j3ubahjhïubhX) in the presence of patch-level versions.r%3…r&3}r'3(h\X) in the presence of patch-level versions.h]jÚ2ubeubaubh…)r(3}r)3(h\X<Consequently, the example declaration above is equivalent tor*3h]jÑ/hhhihjh‰hl}r+3(hn]ho]hp]hq]ht]uhvMUhwhhx]r,3hX<Consequently, the example declaration above is equivalent tor-3…r.3}r/3(h\j*3hhNhvNhwhh]j(3ubaubjÕ)r03}r13(h\X=build-depends: foo >= 1.2.3.4 && < 1.3, bar >= 1 && < 1.1h]jÑ/hhhihjjØhl}r23(jÚjÛhq]hp]hn]ho]ht]uhvMYhwhhx]r33hX=build-depends: foo >= 1.2.3.4 && < 1.3, bar >= 1 && < 1.1r43…r53}r63(h\Uh]j03ubaubhó)r73}r83(h\X=Prior to Cabal 1.8, ``build-depends`` specified in each section were global to all sections. This was unintentional, but some packages were written to depend on it, so if you need your :pkg-field:`build-depends` to be local to each section, you must specify at least ``Cabal-Version: >= 1.8`` in your ``.cabal`` file.h]jÑ/hhhihjhöhl}r93(hn]ho]hp]hq]ht]uhvNhwhhx]r:3h…)r;3}r<3(h\X=Prior to Cabal 1.8, ``build-depends`` specified in each section were global to all sections. This was unintentional, but some packages were written to depend on it, so if you need your :pkg-field:`build-depends` to be local to each section, you must specify at least ``Cabal-Version: >= 1.8`` in your ``.cabal`` file.h]j73hhhihjh‰hl}r=3(hn]ho]hp]hq]ht]uhvM_hx]r>3(hXPrior to Cabal 1.8, r?3…r@3}rA3(h\XPrior to Cabal 1.8, h]j;3ubhç)rB3}rC3(h\X``build-depends``hl}rD3(hn]ho]hp]hq]ht]uh]j;3hx]rE3hX build-dependsrF3…rG3}rH3(h\X build-dependsh]jB3ubahjhïubhX” specified in each section were global to all sections. This was unintentional, but some packages were written to depend on it, so if you need your rI3…rJ3}rK3(h\X” specified in each section were global to all sections. This was unintentional, but some packages were written to depend on it, so if you need your h]j;3ubjt)rL3}rM3(h\X:pkg-field:`build-depends`h]j;3hhhihjjwhl}rN3(UreftypeX pkg-fieldjyˆjzX build-dependsrO3U refdomainXcabalrP3hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM_hx]rQ3hç)rR3}rS3(h\jO3hl}rT3(hn]ho]rU3(j…jP3Xcabal-pkg-fieldrV3ehp]hq]ht]uh]jL3hx]rW3hX build-dependsrX3…rY3}rZ3(h\Uh]jR3ubahjhïubaubhX8 to be local to each section, you must specify at least r[3…r\3}r]3(h\X8 to be local to each section, you must specify at least h]j;3ubhç)r^3}r_3(h\X``Cabal-Version: >= 1.8``hl}r`3(hn]ho]hp]hq]ht]uh]j;3hx]ra3hXCabal-Version: >= 1.8rb3…rc3}rd3(h\XCabal-Version: >= 1.8h]j^3ubahjhïubhX in your re3…rf3}rg3(h\X in your h]j;3ubhç)rh3}ri3(h\X ``.cabal``hl}rj3(hn]ho]hp]hq]ht]uh]j;3hx]rk3hX.cabalrl3…rm3}rn3(h\X.cabalh]jh3ubahjhïubhX file.ro3…rp3}rq3(h\X file.h]j;3ubeubaubhó)rr3}rs3(h\X›Cabal 1.20 experimentally supported module thinning and renaming in ``build-depends``; however, this support has since been removed and should not be used.h]jÑ/hhhihjhöhl}rt3(hn]ho]hp]hq]ht]uhvNhwhhx]ru3h…)rv3}rw3(h\X›Cabal 1.20 experimentally supported module thinning and renaming in ``build-depends``; however, this support has since been removed and should not be used.h]jr3hhhihjh‰hl}rx3(hn]ho]hp]hq]ht]uhvMghx]ry3(hXDCabal 1.20 experimentally supported module thinning and renaming in rz3…r{3}r|3(h\XDCabal 1.20 experimentally supported module thinning and renaming in h]jv3ubhç)r}3}r~3(h\X``build-depends``hl}r3(hn]ho]hp]hq]ht]uh]jv3hx]r€3hX build-dependsr3…r‚3}rƒ3(h\X build-dependsh]j}3ubahjhïubhXF; however, this support has since been removed and should not be used.r„3…r…3}r†3(h\XF; however, this support has since been removed and should not be used.h]jv3ubeubaubh…)r‡3}rˆ3(h\XgStarting with Cabal 3.0, a set notation for the ``==`` and ``^>=`` operator is available. For instance,h]jÑ/hhhihjh‰hl}r‰3(hn]ho]hp]hq]ht]uhvMkhwhhx]rŠ3(hX0Starting with Cabal 3.0, a set notation for the r‹3…rŒ3}r3(h\X0Starting with Cabal 3.0, a set notation for the hhNhvNhwhh]j‡3ubhç)rŽ3}r3(h\X``==``hl}r3(hn]ho]hp]hq]ht]uh]j‡3hx]r‘3hX==r’3…r“3}r”3(h\X==h]jŽ3ubahjhïubhX and r•3…r–3}r—3(h\X and hhNhvNhwhh]j‡3ubhç)r˜3}r™3(h\X``^>=``hl}rš3(hn]ho]hp]hq]ht]uh]j‡3hx]r›3hX^>=rœ3…r3}rž3(h\X^>=h]j˜3ubahjhïubhX% operator is available. For instance,rŸ3…r 3}r¡3(h\X% operator is available. For instance,hhNhvNhwhh]j‡3ubeubjÕ)r¢3}r£3(h\XÚtested-with: GHC == 8.6.3, GHC == 8.4.4, GHC == 8.2.2, GHC == 8.0.2, GHC == 7.10.3, GHC == 7.8.4, GHC == 7.6.3, GHC == 7.4.2 build-depends: network ^>= 2.6.3.6 || ^>= 2.7.0.2 || ^>= 2.8.0.0 || ^>= 3.0.1.0h]jÑ/hhhihjjØhl}r¤3(jÚjÛhq]hp]hn]ho]ht]uhvMphwhhx]r¥3hXÚtested-with: GHC == 8.6.3, GHC == 8.4.4, GHC == 8.2.2, GHC == 8.0.2, GHC == 7.10.3, GHC == 7.8.4, GHC == 7.6.3, GHC == 7.4.2 build-depends: network ^>= 2.6.3.6 || ^>= 2.7.0.2 || ^>= 2.8.0.0 || ^>= 3.0.1.0r¦3…r§3}r¨3(h\Uh]j¢3ubaubh…)r©3}rª3(h\X9can be then written in a more convenient and concise formr«3h]jÑ/hhhihjh‰hl}r¬3(hn]ho]hp]hq]ht]uhvMuhwhhx]r­3hX9can be then written in a more convenient and concise formr®3…r¯3}r°3(h\j«3hhNhvNhwhh]j©3ubaubjÕ)r±3}r²3(h\X’tested-with: GHC == { 8.6.3, 8.4.4, 8.2.2, 8.0.2, 7.10.3, 7.8.4, 7.6.3, 7.4.2 } build-depends: network ^>= { 2.6.3.6, 2.7.0.2, 2.8.0.0, 3.0.1.0 }h]jÑ/hhhihjjØhl}r³3(jÚjÛhq]hp]hn]ho]ht]uhvMyhwhhx]r´3hX’tested-with: GHC == { 8.6.3, 8.4.4, 8.2.2, 8.0.2, 7.10.3, 7.8.4, 7.6.3, 7.4.2 } build-depends: network ^>= { 2.6.3.6, 2.7.0.2, 2.8.0.0, 3.0.1.0 }rµ3…r¶3}r·3(h\Uh]j±3ubaubeubeubj*)r¸3}r¹3(h\Uh]j~/hhNhjj-hl}rº3(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r»3}r¼3(h\Uh]j~/hhNhjj2hl}r½3(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr¾3j8j¾3uhvNhwhhx]r¿3(j:)rÀ3}rÁ3(h\Xother-modules: identifier listh]j»3hhhihjj>hl}rÂ3(hq]rÃ3Xpkg-field-other-modulesrÄ3ahp]hn]ho]ht]jB‰uhvMŠhwhhx]rÅ3(j*)rÆ3}rÇ3(h\Uh]jÀ3hhhihjj-hl}rÈ3(hq]hp]hn]ho]ht]Uentries]rÉ3(jHX"other-modules; package.cabal fieldjÄ3UNtrÊ3auhvMŠhwhhx]ubjJ)rË3}rÌ3(h\X other-modulesrÍ3h]jÀ3hhhihjjMhl}rÎ3(jÚjÛhq]hp]hn]ho]ht]uhvMŠhwhhx]rÏ3hX other-modulesrÐ3…rÑ3}rÒ3(h\UhhNhvNhwhh]jË3ubaubjS)rÓ3}rÔ3(h\jÌh]jÀ3hhhihjjVhl}rÕ3(jÚjÛhq]hp]hn]ho]ht]uhvMŠhwhhx]rÖ3hX: r×3…rØ3}rÙ3(h\UhhNhvNhwhh]jÓ3ubaubjÒ)rÚ3}rÛ3(h\Xidentifier listh]jÀ3hhhihjjÕhl}rÜ3(jÚjÛhq]hp]hn]ho]ht]uhvMŠhwhhx]rÝ3hXidentifier listrÞ3…rß3}rà3(h\UhhNhvNhwhh]jÚ3ubaubeubj[)rá3}râ3(h\Uh]j»3hhhihjj^hl}rã3(hn]ho]hp]hq]ht]uhvMŠhwhhx]rä3(h…)rå3}ræ3(h\X÷A list of modules used by the component but not exposed to users. For a library component, these would be hidden modules of the library. For an executable, these would be auxiliary modules to be linked with the file named in the ``main-is`` field.h]já3hhhihjh‰hl}rç3(hn]ho]hp]hq]ht]uhvM€hwhhx]rè3(hXåA list of modules used by the component but not exposed to users. For a library component, these would be hidden modules of the library. For an executable, these would be auxiliary modules to be linked with the file named in the ré3…rê3}rë3(h\XåA list of modules used by the component but not exposed to users. For a library component, these would be hidden modules of the library. For an executable, these would be auxiliary modules to be linked with the file named in the hhNhvNhwhh]jå3ubhç)rì3}rí3(h\X ``main-is``hl}rî3(hn]ho]hp]hq]ht]uh]jå3hx]rï3hXmain-isrð3…rñ3}rò3(h\Xmain-ish]jì3ubahjhïubhX field.ró3…rô3}rõ3(h\X field.hhNhvNhwhh]jå3ubeubhó)rö3}r÷3(h\X¢Every module in the package *must* be listed in one of :pkg-field:`other-modules`, :pkg-field:`library:exposed-modules` or :pkg-field:`executable:main-is` fields.h]já3hhhihjhöhl}rø3(hn]ho]hp]hq]ht]uhvNhwhhx]rù3h…)rú3}rû3(h\X¢Every module in the package *must* be listed in one of :pkg-field:`other-modules`, :pkg-field:`library:exposed-modules` or :pkg-field:`executable:main-is` fields.h]jö3hhhihjh‰hl}rü3(hn]ho]hp]hq]ht]uhvM‡hx]rý3(hXEvery module in the package rþ3…rÿ3}r4(h\XEvery module in the package h]jú3ubhÇ)r4}r4(h\X*must*hl}r4(hn]ho]hp]hq]ht]uh]jú3hx]r4hXmustr4…r4}r4(h\Xmusth]j4ubahjhÏubhX be listed in one of r4…r 4}r 4(h\X be listed in one of h]jú3ubjt)r 4}r 4(h\X:pkg-field:`other-modules`h]jú3hhhihjjwhl}r 4(UreftypeX pkg-fieldjyˆjzX other-modulesr4U refdomainXcabalr4hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM‡hx]r4hç)r4}r4(h\j4hl}r4(hn]ho]r4(j…j4Xcabal-pkg-fieldr4ehp]hq]ht]uh]j 4hx]r4hX other-modulesr4…r4}r4(h\Uh]j4ubahjhïubaubhX, r4…r4}r4(h\X, h]jú3ubjt)r4}r4(h\X$:pkg-field:`library:exposed-modules`h]jú3hhhihjjwhl}r4(UreftypeX pkg-fieldjyˆjzXexposed-modulesU refdomainXcabalr 4hq]hp]U refexplicit‰hn]ho]ht]j}j~j”XlibraryuhvM‡hx]r!4hç)r"4}r#4(h\Xlibrary:exposed-moduleshl}r$4(hn]ho]r%4(j…j 4Xcabal-pkg-fieldr&4ehp]hq]ht]uh]j4hx]r'4hXlibrary:exposed-modulesr(4…r)4}r*4(h\Uh]j"4ubahjhïubaubhX or r+4…r,4}r-4(h\X or h]jú3ubjt)r.4}r/4(h\X:pkg-field:`executable:main-is`h]jú3hhhihjjwhl}r04(UreftypeX pkg-fieldjyˆjzXmain-isU refdomainXcabalr14hq]hp]U refexplicit‰hn]ho]ht]j}j~j”X executableuhvM‡hx]r24hç)r34}r44(h\Xexecutable:main-ishl}r54(hn]ho]r64(j…j14Xcabal-pkg-fieldr74ehp]hq]ht]uh]j.4hx]r84hXexecutable:main-isr94…r:4}r;4(h\Uh]j34ubahjhïubaubhX fields.r<4…r=4}r>4(h\X fields.h]jú3ubeubaubeubeubj*)r?4}r@4(h\Uh]j~/hhhihjj-hl}rA4(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rB4}rC4(h\Uh]j~/hhhihjj2hl}rD4(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrE4j8jE4uhvNhwhhx]rF4(j:)rG4}rH4(h\Xhs-source-dirs: directory listh]jB4hhhihjj>hl}rI4(hq]rJ4Xpkg-field-hs-source-dirsrK4ahp]hn]ho]ht]jB‰uhvM“hwhhx]rL4(j*)rM4}rN4(h\Uh]jG4hhhihjj-hl}rO4(hq]hp]hn]ho]ht]Uentries]rP4(jHX#hs-source-dirs; package.cabal fieldjK4UNtrQ4auhvM“hwhhx]ubjJ)rR4}rS4(h\Xhs-source-dirsrT4h]jG4hhhihjjMhl}rU4(jÚjÛhq]hp]hn]ho]ht]uhvM“hwhhx]rV4hXhs-source-dirsrW4…rX4}rY4(h\UhhNhvNhwhh]jR4ubaubjS)rZ4}r[4(h\jÌh]jG4hhhihjjVhl}r\4(jÚjÛhq]hp]hn]ho]ht]uhvM“hwhhx]r]4hX: r^4…r_4}r`4(h\UhhNhvNhwhh]jZ4ubaubjÒ)ra4}rb4(h\Xdirectory listh]jG4hhhihjjÕhl}rc4(jÚjÛhq]hp]hn]ho]ht]uhvM“hwhhx]rd4hXdirectory listre4…rf4}rg4(h\UhhNhvNhwhh]ja4ubaubeubj[)rh4}ri4(h\Uh]jB4hhhihjj^hl}rj4(hn]ho]hp]hq]ht]uhvM“hwhhx]rk4(ja)rl4}rm4(h\Uh]jh4hhhihjjdhl}rn4(hn]ho]hp]hq]ht]uhvNhwhhx]ro4jg)rp4}rq4(h\Uhl}rr4(hn]ho]hp]hq]ht]uh]jl4hx]rs4(jm)rt4}ru4(h\X Default valueh]jp4hhhihjjqhl}rv4(hn]ho]hp]hq]ht]uhvKhx]rw4hX Default valuerx4…ry4}rz4(h\Uh]jt4ubaubjw)r{4}r|4(h\Uhl}r}4(hn]ho]hp]hq]ht]uh]jp4hx]r~4h…)r4}r€4(h\X.hl}r4(hn]ho]hp]hq]ht]uh]j{4hx]r‚4hç)rƒ4}r„4(h\X``.``h]j4hhhihjhïhl}r…4(hn]ho]hp]hq]ht]uhvNhwhhx]r†4hX.…r‡4}rˆ4(h\X.hhNhvNhwhh]jƒ4ubaubahjh‰ubahjj„ubehjjjubaubh…)r‰4}rŠ4(h\X*Root directories for the module hierarchy.r‹4h]jh4hhhihjh‰hl}rŒ4(hn]ho]hp]hq]ht]uhvMhwhhx]r4hX*Root directories for the module hierarchy.rŽ4…r4}r4(h\j‹4hhNhvNhwhh]j‰4ubaubh…)r‘4}r’4(h\XRFor backwards compatibility, the old variant ``hs-source-dir`` is also recognized.h]jh4hhhihjh‰hl}r“4(hn]ho]hp]hq]ht]uhvM‘hwhhx]r”4(hX-For backwards compatibility, the old variant r•4…r–4}r—4(h\X-For backwards compatibility, the old variant hhNhvNhwhh]j‘4ubhç)r˜4}r™4(h\X``hs-source-dir``hl}rš4(hn]ho]hp]hq]ht]uh]j‘4hx]r›4hX hs-source-dirrœ4…r4}rž4(h\X hs-source-dirh]j˜4ubahjhïubhX is also recognized.rŸ4…r 4}r¡4(h\X is also recognized.hhNhvNhwhh]j‘4ubeubeubeubj*)r¢4}r£4(h\Uh]j~/hhhihjj-hl}r¤4(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r¥4}r¦4(h\Uh]j~/hhhihjj2hl}r§4(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr¨4j8j¨4uhvNhwhhx]r©4(j:)rª4}r«4(h\X#default-extensions: identifier listh]j¥4hhhihjj>hl}r¬4(hq]r­4Xpkg-field-default-extensionsr®4ahp]hn]ho]ht]jB‰uhvMœhwhhx]r¯4(j*)r°4}r±4(h\Uh]jª4hhhihjj-hl}r²4(hq]hp]hn]ho]ht]Uentries]r³4(jHX'default-extensions; package.cabal fieldj®4UNtr´4auhvMœhwhhx]ubjJ)rµ4}r¶4(h\Xdefault-extensionsr·4h]jª4hhhihjjMhl}r¸4(jÚjÛhq]hp]hn]ho]ht]uhvMœhwhhx]r¹4hXdefault-extensionsrº4…r»4}r¼4(h\UhhNhvNhwhh]jµ4ubaubjS)r½4}r¾4(h\jÌh]jª4hhhihjjVhl}r¿4(jÚjÛhq]hp]hn]ho]ht]uhvMœhwhhx]rÀ4hX: rÁ4…rÂ4}rÃ4(h\UhhNhvNhwhh]j½4ubaubjÒ)rÄ4}rÅ4(h\Xidentifier listh]jª4hhhihjjÕhl}rÆ4(jÚjÛhq]hp]hn]ho]ht]uhvMœhwhhx]rÇ4hXidentifier listrÈ4…rÉ4}rÊ4(h\UhhNhvNhwhh]jÄ4ubaubeubj[)rË4}rÌ4(h\Uh]j¥4hhhihjj^hl}rÍ4(hn]ho]hp]hq]ht]uhvMœhwhhx]rÎ4h…)rÏ4}rÐ4(h\XsA list of Haskell extensions used by every module. These determine corresponding compiler options enabled for all files. Extension names are the constructors of the `Extension <../release/cabal-latest/doc/API/Cabal/Language-Haskell-Extension.html#t:Extension>`__ type. For example, ``CPP`` specifies that Haskell source files are to be preprocessed with a C preprocessor.h]jË4hhhihjh‰hl}rÑ4(hn]ho]hp]hq]ht]uhvM–hwhhx]rÒ4(hX¥A list of Haskell extensions used by every module. These determine corresponding compiler options enabled for all files. Extension names are the constructors of the rÓ4…rÔ4}rÕ4(h\X¥A list of Haskell extensions used by every module. These determine corresponding compiler options enabled for all files. Extension names are the constructors of the hhNhvNhwhh]jÏ4ubjH)rÖ4}r×4(h\Xa`Extension <../release/cabal-latest/doc/API/Cabal/Language-Haskell-Extension.html#t:Extension>`__hl}rØ4(UnameX Extensionj‡XQ../release/cabal-latest/doc/API/Cabal/Language-Haskell-Extension.html#t:Extensionhq]hp]hn]ho]ht]uh]jÏ4hx]rÙ4hX ExtensionrÚ4…rÛ4}rÜ4(h\X Extensionh]jÖ4ubahjjLubhX type. For example, rÝ4…rÞ4}rß4(h\X type. For example, hhNhvNhwhh]jÏ4ubhç)rà4}rá4(h\X``CPP``hl}râ4(hn]ho]hp]hq]ht]uh]jÏ4hx]rã4hXCPPrä4…rå4}ræ4(h\XCPPh]jà4ubahjhïubhXR specifies that Haskell source files are to be preprocessed with a C preprocessor.rç4…rè4}ré4(h\XR specifies that Haskell source files are to be preprocessed with a C preprocessor.hhNhvNhwhh]jÏ4ubeubaubeubj*)rê4}rë4(h\Uh]j~/hhhihjj-hl}rì4(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rí4}rî4(h\Uh]j~/hhhihjj2hl}rï4(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrð4j8jð4uhvNhwhhx]rñ4(j:)rò4}ró4(h\X!other-extensions: identifier listh]jí4hhhihjj>hl}rô4(hq]rõ4Xpkg-field-other-extensionsrö4ahp]hn]ho]ht]jB‰uhvM¸hwhhx]r÷4(j*)rø4}rù4(h\Uh]jò4hhhihjj-hl}rú4(hq]hp]hn]ho]ht]Uentries]rû4(jHX%other-extensions; package.cabal fieldjö4UNtrü4auhvM¸hwhhx]ubjJ)rý4}rþ4(h\Xother-extensionsrÿ4h]jò4hhhihjjMhl}r5(jÚjÛhq]hp]hn]ho]ht]uhvM¸hwhhx]r5hXother-extensionsr5…r5}r5(h\UhhNhvNhwhh]jý4ubaubjS)r5}r5(h\jÌh]jò4hhhihjjVhl}r5(jÚjÛhq]hp]hn]ho]ht]uhvM¸hwhhx]r5hX: r 5…r 5}r 5(h\UhhNhvNhwhh]j5ubaubjÒ)r 5}r 5(h\Xidentifier listh]jò4hhhihjjÕhl}r5(jÚjÛhq]hp]hn]ho]ht]uhvM¸hwhhx]r5hXidentifier listr5…r5}r5(h\UhhNhvNhwhh]j 5ubaubeubj[)r5}r5(h\Uh]jí4hhhihjj^hl}r5(hn]ho]hp]hq]ht]uhvM¸hwhhx]r5(h…)r5}r5(h\XÃA list of Haskell extensions used by some (but not necessarily all) modules. From GHC version 6.6 onward, these may be specified by placing a ``LANGUAGE`` pragma in the source files affected e.g.h]j5hhhihjh‰hl}r5(hn]ho]hp]hq]ht]uhvMŸhwhhx]r5(hXŽA list of Haskell extensions used by some (but not necessarily all) modules. From GHC version 6.6 onward, these may be specified by placing a r5…r5}r5(h\XŽA list of Haskell extensions used by some (but not necessarily all) modules. From GHC version 6.6 onward, these may be specified by placing a hhNhvNhwhh]j5ubhç)r5}r5(h\X ``LANGUAGE``hl}r 5(hn]ho]hp]hq]ht]uh]j5hx]r!5hXLANGUAGEr"5…r#5}r$5(h\XLANGUAGEh]j5ubahjhïubhX) pragma in the source files affected e.g.r%5…r&5}r'5(h\X) pragma in the source files affected e.g.hhNhvNhwhh]j5ubeubjÕ)r(5}r)5(h\X+{-# LANGUAGE CPP, MultiParamTypeClasses #-}h]j5hhhihjjØhl}r*5(j‰jXhaskelljÚjÛhq]hp]hn]j}ho]ht]uhvM£hwhhx]r+5hX+{-# LANGUAGE CPP, MultiParamTypeClasses #-}r,5…r-5}r.5(h\Uh]j(5ubaubh…)r/5}r05(h\XÅIn Cabal-1.24 the dependency solver will use this and :pkg-field:`default-extensions` information. Cabal prior to 1.24 will abort compilation if the current compiler doesn't provide the extensions.h]j5hhhihjh‰hl}r15(hn]ho]hp]hq]ht]uhvM§hwhhx]r25(hX6In Cabal-1.24 the dependency solver will use this and r35…r45}r55(h\X6In Cabal-1.24 the dependency solver will use this and hhNhvNhwhh]j/5ubjt)r65}r75(h\X:pkg-field:`default-extensions`h]j/5hhhihjjwhl}r85(UreftypeX pkg-fieldjyˆjzXdefault-extensionsr95U refdomainXcabalr:5hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM§hx]r;5hç)r<5}r=5(h\j95hl}r>5(hn]ho]r?5(j…j:5Xcabal-pkg-fieldr@5ehp]hq]ht]uh]j65hx]rA5hXdefault-extensionsrB5…rC5}rD5(h\Uh]j<5ubahjhïubaubhXr information. Cabal prior to 1.24 will abort compilation if the current compiler doesn’t provide the extensions.rE5…rF5}rG5(h\Xp information. Cabal prior to 1.24 will abort compilation if the current compiler doesn't provide the extensions.hhNhvNhwhh]j/5ubeubh…)rH5}rI5(h\X¥If you use some extensions conditionally, using CPP or conditional module lists, it is good to replicate the condition in :pkg-field:`other-extensions` declarations:h]j5hhhihjh‰hl}rJ5(hn]ho]hp]hq]ht]uhvM«hwhhx]rK5(hXzIf you use some extensions conditionally, using CPP or conditional module lists, it is good to replicate the condition in rL5…rM5}rN5(h\XzIf you use some extensions conditionally, using CPP or conditional module lists, it is good to replicate the condition in hhNhvNhwhh]jH5ubjt)rO5}rP5(h\X:pkg-field:`other-extensions`h]jH5hhhihjjwhl}rQ5(UreftypeX pkg-fieldjyˆjzXother-extensionsrR5U refdomainXcabalrS5hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM«hx]rT5hç)rU5}rV5(h\jR5hl}rW5(hn]ho]rX5(j…jS5Xcabal-pkg-fieldrY5ehp]hq]ht]uh]jO5hx]rZ5hXother-extensionsr[5…r\5}r]5(h\Uh]jU5ubahjhïubaubhX declarations:r^5…r_5}r`5(h\X declarations:hhNhvNhwhh]jH5ubeubjÕ)ra5}rb5(h\XGother-extensions: CPP if impl(ghc >= 7.5) other-extensions: PolyKindsh]j5hhhihjjØhl}rc5(jÚjÛhq]hp]hn]ho]ht]uhvM±hwhhx]rd5hXGother-extensions: CPP if impl(ghc >= 7.5) other-extensions: PolyKindsre5…rf5}rg5(h\Uh]ja5ubaubh…)rh5}ri5(h\X¯You could also omit the conditionally used extensions, as they are for information only, but it is recommended to replicate them in :pkg-field:`other-extensions` declarations.h]j5hhhihjh‰hl}rj5(hn]ho]hp]hq]ht]uhvMµhwhhx]rk5(hX„You could also omit the conditionally used extensions, as they are for information only, but it is recommended to replicate them in rl5…rm5}rn5(h\X„You could also omit the conditionally used extensions, as they are for information only, but it is recommended to replicate them in hhNhvNhwhh]jh5ubjt)ro5}rp5(h\X:pkg-field:`other-extensions`h]jh5hhhihjjwhl}rq5(UreftypeX pkg-fieldjyˆjzXother-extensionsrr5U refdomainXcabalrs5hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvMµhx]rt5hç)ru5}rv5(h\jr5hl}rw5(hn]ho]rx5(j…js5Xcabal-pkg-fieldry5ehp]hq]ht]uh]jo5hx]rz5hXother-extensionsr{5…r|5}r}5(h\Uh]ju5ubahjhïubaubhX declarations.r~5…r5}r€5(h\X declarations.hhNhvNhwhh]jh5ubeubeubeubj*)r5}r‚5(h\Uh]j~/hhhihjj-hl}rƒ5(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r„5}r…5(h\Uh]j~/hhhihjj2hl}r†5(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr‡5j8j‡5uhvNhwhhx]rˆ5(j:)r‰5}rŠ5(h\Xextensions: identifier listh]j„5hhhihjj>hl}r‹5(hq]rŒ5Xpkg-field-extensionsr5ahp]hn]ho]ht]jB‰uhvNhwhhx]rŽ5(j*)r5}r5(h\Uh]j‰5hhhihjj-hl}r‘5(hq]hp]hn]ho]ht]Uentries]r’5(jHXextensions; package.cabal fieldj5UNtr“5auhvNhwhhx]ubjJ)r”5}r•5(h\X extensionsr–5h]j‰5hhhihjjMhl}r—5(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r˜5hX extensionsr™5…rš5}r›5(h\UhhNhvNhwhh]j”5ubaubjS)rœ5}r5(h\jÌh]j‰5hhhihjjVhl}rž5(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rŸ5hX: r 5…r¡5}r¢5(h\UhhNhvNhwhh]jœ5ubaubjÒ)r£5}r¤5(h\Xidentifier listh]j‰5hhhihjjÕhl}r¥5(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r¦5hXidentifier listr§5…r¨5}r©5(h\UhhNhvNhwhh]j£5ubaubeubj[)rª5}r«5(h\Uh]j„5hhhihjj^hl}r¬5(hn]ho]hp]hq]ht]uhvNhwhhx]r­5(ja)r®5}r¯5(h\Uh]jª5hhhihjjdhl}r°5(hn]ho]hp]hq]ht]uhvNhwhhx]r±5(jg)r²5}r³5(h\Uh]j®5hhhihjjjhl}r´5(hn]ho]hp]hq]ht]uhvNhwhhx]rµ5(jm)r¶5}r·5(h\URemovedr¸5h]j²5hhhihjjqhl}r¹5(hn]ho]hp]hq]ht]uhvKhx]rº5hXRemovedr»5…r¼5}r½5(h\Uh]j¶5ubaubjw)r¾5}r¿5(h\U Cabal 3.0rÀ5hl}rÁ5(hn]ho]hp]hq]ht]uh]j²5hx]rÂ5h…)rÃ5}rÄ5(h\jÀ5hl}rÅ5(hn]ho]hp]hq]ht]uh]j¾5hx]rÆ5hX Cabal 3.0rÇ5…rÈ5}rÉ5(h\Uh]jÃ5ubahjh‰ubahjj„ubeubjg)rÊ5}rË5(h\Uh]j®5hhhihjjjhl}rÌ5(hn]ho]hp]hq]ht]uhvNhwhhx]rÍ5(jm)rÎ5}rÏ5(h\U DeprecatedrÐ5h]jÊ5hhhihjjqhl}rÑ5(hn]ho]hp]hq]ht]uhvKhx]rÒ5hX DeprecatedrÓ5…rÔ5}rÕ5(h\Uh]jÎ5ubaubjw)rÖ5}r×5(h\U Cabal 1.12rØ5hl}rÙ5(hn]ho]hp]hq]ht]uh]jÊ5hx]rÚ5h…)rÛ5}rÜ5(h\jØ5hl}rÝ5(hn]ho]hp]hq]ht]uh]jÖ5hx]rÞ5hX Cabal 1.12rß5…rà5}rá5(h\Uh]jÛ5ubahjh‰ubahjj„ubeubeubh…)râ5}rã5(h\X7Deprecated in favor of :pkg-field:`default-extensions`.h]jª5hhhihjh‰hl}rä5(hn]ho]hp]hq]ht]uhvM½hwhhx]rå5(hXDeprecated in favor of ræ5…rç5}rè5(h\XDeprecated in favor of hhNhvNhwhh]jâ5ubjt)ré5}rê5(h\X:pkg-field:`default-extensions`h]jâ5hhhihjjwhl}rë5(UreftypeX pkg-fieldjyˆjzXdefault-extensionsrì5U refdomainXcabalrí5hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM½hx]rî5hç)rï5}rð5(h\jì5hl}rñ5(hn]ho]rò5(j…jí5Xcabal-pkg-fieldró5ehp]hq]ht]uh]jé5hx]rô5hXdefault-extensionsrõ5…rö5}r÷5(h\Uh]jï5ubahjhïubaubhX.…rø5}rù5(h\X.hhNhvNhwhh]jâ5ubeubeubeubj*)rú5}rû5(h\Uh]j~/hhNhjj-hl}rü5(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rý5}rþ5(h\Uh]j~/hhNhjj2hl}rÿ5(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr6j8j6uhvNhwhhx]r6(j:)r6}r6(h\X+build-tool-depends: package:executable listh]jý5hhhihjj>hl}r6(hq]r6Xpkg-field-build-tool-dependsr6ahp]hn]ho]ht]jB‰uhvNhwhhx]r6(j*)r6}r 6(h\Uh]j6hhhihjj-hl}r 6(hq]hp]hn]ho]ht]Uentries]r 6(jHX'build-tool-depends; package.cabal fieldj6UNtr 6auhvNhwhhx]ubjJ)r 6}r6(h\Xbuild-tool-dependsr6h]j6hhhihjjMhl}r6(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r6hXbuild-tool-dependsr6…r6}r6(h\UhhNhvNhwhh]j 6ubaubjS)r6}r6(h\jÌh]j6hhhihjjVhl}r6(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r6hX: r6…r6}r6(h\UhhNhvNhwhh]j6ubaubjÒ)r6}r6(h\Xpackage:executable listh]j6hhhihjjÕhl}r6(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r6hXpackage:executable listr 6…r!6}r"6(h\UhhNhvNhwhh]j6ubaubeubj[)r#6}r$6(h\Uh]jý5hhhihjj^hl}r%6(hn]ho]hp]hq]ht]uhvNhwhhx]r&6(ja)r'6}r(6(h\Uh]j#6hhNhjjdhl}r)6(hn]ho]hp]hq]ht]uhvNhwhhx]r*6jg)r+6}r,6(h\Uh]j'6hhNhjjjhl}r-6(hn]ho]hp]hq]ht]uhvNhwhhx]r.6(jm)r/6}r06(h\jph]j+6hhhihjjqhl}r16(hn]ho]hp]hq]ht]uhvKhx]r26hXSincer36…r46}r56(h\Uh]j/6ubaubjw)r66}r76(h\U Cabal 2.0r86hl}r96(hn]ho]hp]hq]ht]uh]j+6hx]r:6h…)r;6}r<6(h\j86hl}r=6(hn]ho]hp]hq]ht]uh]j66hx]r>6hX Cabal 2.0r?6…r@6}rA6(h\Uh]j;6ubahjh‰ubahjj„ubeubaubh…)rB6}rC6(h\XÝA list of Haskell executables needed to build this component. Executables are provided during the whole duration of the component, so this field can be used for executables needed during :pkg-section:`test-suite` as well.h]j#6hhhihjh‰hl}rD6(hn]ho]hp]hq]ht]uhvMÂhwhhx]rE6(hX»A list of Haskell executables needed to build this component. Executables are provided during the whole duration of the component, so this field can be used for executables needed during rF6…rG6}rH6(h\X»A list of Haskell executables needed to build this component. Executables are provided during the whole duration of the component, so this field can be used for executables needed during hhNhvNhwhh]jB6ubjt)rI6}rJ6(h\X:pkg-section:`test-suite`h]jB6hhhihjjwhl}rK6(UreftypeX pkg-sectionjyˆjzX test-suiterL6U refdomainXcabalrM6hq]hp]U refexplicit‰hn]ho]ht]j}j~uhvMÂhx]rN6hç)rO6}rP6(h\jL6hl}rQ6(hn]ho]rR6(j…jM6Xcabal-pkg-sectionrS6ehp]hq]ht]uh]jI6hx]rT6hX test-suiterU6…rV6}rW6(h\Uh]jO6ubahjhïubaubhX as well.rX6…rY6}rZ6(h\X as well.hhNhvNhwhh]jB6ubeubh…)r[6}r\6(h\X£Each is specified by the package containing the executable and the name of the executable itself, separated by a colon, and optionally followed by a version bound.r]6h]j#6hhhihjh‰hl}r^6(hn]ho]hp]hq]ht]uhvMÆhwhhx]r_6hX£Each is specified by the package containing the executable and the name of the executable itself, separated by a colon, and optionally followed by a version bound.r`6…ra6}rb6(h\j]6hhNhvNhwhh]j[6ubaubh…)rc6}rd6(h\XAll executables defined in the given Cabal file are termed as *internal* dependencies as opposed to the rest which are *external* dependencies.h]j#6hhhihjh‰hl}re6(hn]ho]hp]hq]ht]uhvMÉhwhhx]rf6(hX>All executables defined in the given Cabal file are termed as rg6…rh6}ri6(h\X>All executables defined in the given Cabal file are termed as hhNhvNhwhh]jc6ubhÇ)rj6}rk6(h\X *internal*hl}rl6(hn]ho]hp]hq]ht]uh]jc6hx]rm6hXinternalrn6…ro6}rp6(h\Xinternalh]jj6ubahjhÏubhX/ dependencies as opposed to the rest which are rq6…rr6}rs6(h\X/ dependencies as opposed to the rest which are hhNhvNhwhh]jc6ubhÇ)rt6}ru6(h\X *external*hl}rv6(hn]ho]hp]hq]ht]uh]jc6hx]rw6hXexternalrx6…ry6}rz6(h\Xexternalh]jt6ubahjhÏubhX dependencies.r{6…r|6}r}6(h\X dependencies.hhNhvNhwhh]jc6ubeubh…)r~6}r6(h\X'Each of the two is handled differently:r€6h]j#6hhhihjh‰hl}r6(hn]ho]hp]hq]ht]uhvMÌhwhhx]r‚6hX'Each of the two is handled differently:rƒ6…r„6}r…6(h\j€6hhNhvNhwhh]j~6ubaubcdocutils.nodes enumerated_list r†6)r‡6}rˆ6(h\Uh]j#6hhhihjUenumerated_listr‰6hl}rŠ6(Usuffixr‹6U.hq]hp]hn]UprefixrŒ6Uho]ht]Uenumtyper6UarabicrŽ6uhvMÎhwhhx]r6(h–)r6}r‘6(h\XyExternal dependencies can (and should) contain a version bound like conventional :pkg-field:`build-depends` dependencies.h]j‡6hhhihjh™hl}r’6(hn]ho]hp]hq]ht]uhvNhwhhx]r“6h…)r”6}r•6(h\XyExternal dependencies can (and should) contain a version bound like conventional :pkg-field:`build-depends` dependencies.h]j6hhhihjh‰hl}r–6(hn]ho]hp]hq]ht]uhvMÎhx]r—6(hXQExternal dependencies can (and should) contain a version bound like conventional r˜6…r™6}rš6(h\XQExternal dependencies can (and should) contain a version bound like conventional h]j”6ubjt)r›6}rœ6(h\X:pkg-field:`build-depends`h]j”6hhhihjjwhl}r6(UreftypeX pkg-fieldjyˆjzX build-dependsrž6U refdomainXcabalrŸ6hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvMÎhx]r 6hç)r¡6}r¢6(h\jž6hl}r£6(hn]ho]r¤6(j…jŸ6Xcabal-pkg-fieldr¥6ehp]hq]ht]uh]j›6hx]r¦6hX build-dependsr§6…r¨6}r©6(h\Uh]j¡6ubahjhïubaubhX dependencies.rª6…r«6}r¬6(h\X dependencies.h]j”6ubeubaubh–)r­6}r®6(h\XjInternal depenedencies should not contain a version bound, as they will be always resolved within the same configuration of the package in the build plan. Specifically, version bounds that include the package's version will be warned for being extraneous, and version bounds that exclude the package's version will raise an error for being impossible to follow. h]j‡6hhhihjh™hl}r¯6(hn]ho]hp]hq]ht]uhvNhwhhx]r°6h…)r±6}r²6(h\XiInternal depenedencies should not contain a version bound, as they will be always resolved within the same configuration of the package in the build plan. Specifically, version bounds that include the package's version will be warned for being extraneous, and version bounds that exclude the package's version will raise an error for being impossible to follow.r³6h]j­6hhhihjh‰hl}r´6(hn]ho]hp]hq]ht]uhvMÐhx]rµ6hXmInternal depenedencies should not contain a version bound, as they will be always resolved within the same configuration of the package in the build plan. Specifically, version bounds that include the package’s version will be warned for being extraneous, and version bounds that exclude the package’s version will raise an error for being impossible to follow.r¶6…r·6}r¸6(h\j³6h]j±6ubaubaubeubh…)r¹6}rº6(h\X£For example (1) using a test-suite to make sure README.md Haskell snippets are tested using `markdown-unlit `__:h]j#6hhhihjh‰hl}r»6(hn]ho]hp]hq]ht]uhvMÖhwhhx]r¼6(hX\For example (1) using a test-suite to make sure README.md Haskell snippets are tested using r½6…r¾6}r¿6(h\X\For example (1) using a test-suite to make sure README.md Haskell snippets are tested using hhNhvNhwhh]j¹6ubjH)rÀ6}rÁ6(h\XF`markdown-unlit `__hl}rÂ6(UnameXmarkdown-unlitj‡X1http://hackage.haskell.org/package/markdown-unlithq]hp]hn]ho]ht]uh]j¹6hx]rÃ6hXmarkdown-unlitrÄ6…rÅ6}rÆ6(h\Xmarkdown-unlith]jÀ6ubahjjLubhX:…rÇ6}rÈ6(h\X:hhNhvNhwhh]j¹6ubeubjÕ)rÉ6}rÊ6(h\XCbuild-tool-depends: markdown-unlit:markdown-unlit >= 0.5.0 && < 0.6h]j#6hhhihjjØhl}rË6(jÚjÛhq]hp]hn]ho]ht]uhvMÛhwhhx]rÌ6hXCbuild-tool-depends: markdown-unlit:markdown-unlit >= 0.5.0 && < 0.6rÍ6…rÎ6}rÏ6(h\Uh]jÉ6ubaubh…)rÐ6}rÑ6(h\XTFor example (2) using a test-suite to test executable behaviour in the same package:rÒ6h]j#6hhhihjh‰hl}rÓ6(hn]ho]hp]hq]ht]uhvMÝhwhhx]rÔ6hXTFor example (2) using a test-suite to test executable behaviour in the same package:rÕ6…rÖ6}r×6(h\jÒ6hhNhvNhwhh]jÐ6ubaubjÕ)rØ6}rÙ6(h\X(build-tool-depends: mypackage:executableh]j#6hhhihjjØhl}rÚ6(jÚjÛhq]hp]hn]ho]ht]uhvMáhwhhx]rÛ6hX(build-tool-depends: mypackage:executablerÜ6…rÝ6}rÞ6(h\Uh]jØ6ubaubh…)rß6}rà6(h\XÙCabal tries to make sure that all specified programs are atomically built and prepended on the ``$PATH`` shell variable before building the component in question, but can only do so for Nix-style builds. Specifically:h]j#6hhhihjh‰hl}rá6(hn]ho]hp]hq]ht]uhvMãhwhhx]râ6(hX_Cabal tries to make sure that all specified programs are atomically built and prepended on the rã6…rä6}rå6(h\X_Cabal tries to make sure that all specified programs are atomically built and prepended on the hhNhvNhwhh]jß6ubhç)ræ6}rç6(h\X ``$PATH``hl}rè6(hn]ho]hp]hq]ht]uh]jß6hx]ré6hX$PATHrê6…rë6}rì6(h\X$PATHh]jæ6ubahjhïubhXq shell variable before building the component in question, but can only do so for Nix-style builds. Specifically:rí6…rî6}rï6(h\Xq shell variable before building the component in question, but can only do so for Nix-style builds. Specifically:hhNhvNhwhh]jß6ubeubj†6)rð6}rñ6(h\Uh]j#6hhhihjj‰6hl}rò6(j‹6U)hq]hp]hn]jŒ6Uho]ht]j6U loweralpharó6uhvMçhwhhx]rô6(h–)rõ6}rö6(h\XDFor Nix-style local builds, both internal and external dependencies.r÷6h]jð6hhhihjh™hl}rø6(hn]ho]hp]hq]ht]uhvNhwhhx]rù6h…)rú6}rû6(h\j÷6h]jõ6hhhihjh‰hl}rü6(hn]ho]hp]hq]ht]uhvMçhx]rý6hXDFor Nix-style local builds, both internal and external dependencies.rþ6…rÿ6}r7(h\j÷6h]jú6ubaubaubh–)r7}r7(h\X¦For old-style builds, only for internal dependencies [#old-style-build-tool-depends]_. It's up to the user to provide needed executables in this case under `$PATH.` h]jð6hhhihjh™hl}r7(hn]ho]hp]hq]ht]uhvNhwhhx]r7h…)r7}r7(h\X¤For old-style builds, only for internal dependencies [#old-style-build-tool-depends]_. It's up to the user to provide needed executables in this case under `$PATH.`h]j7hhhihjh‰hl}r7(hn]ho]hp]hq]ht]uhvMèhx]r7(hX5For old-style builds, only for internal dependencies r 7…r 7}r 7(h\X5For old-style builds, only for internal dependencies h]j7ubcdocutils.nodes footnote_reference r 7)r 7}r7(h\X [#old-style-build-tool-depends]_jKKh]j7hjUfootnote_referencer7hl}r7(jKhq]r7j ahp]hn]ho]ht]jj~jNj uhx]r7hX1…r7}r7(h\Uh]j 7ubaubhXI. It’s up to the user to provide needed executables in this case under r7…r7}r7(h\XG. It's up to the user to provide needed executables in this case under h]j7ubjª()r7}r7(h\X`$PATH.`hl}r7(hn]ho]hp]hq]ht]uh]j7hx]r7hX$PATH.r7…r7}r7(h\X$PATH.h]j7ubahjj²(ubeubaubeubhó)r7}r 7(h\XÍ:pkg-field:`build-tool-depends` was added in Cabal 2.0, and it will be ignored (with a warning) with old versions of Cabal. See :pkg-field:`build-tools` for more information about backwards compatibility.h]j#6hhhihjhöhl}r!7(hn]ho]hp]hq]ht]uhvNhwhhx]r"7h…)r#7}r$7(h\XÍ:pkg-field:`build-tool-depends` was added in Cabal 2.0, and it will be ignored (with a warning) with old versions of Cabal. See :pkg-field:`build-tools` for more information about backwards compatibility.h]j7hhhihjh‰hl}r%7(hn]ho]hp]hq]ht]uhvMîhx]r&7(jt)r'7}r(7(h\X:pkg-field:`build-tool-depends`h]j#7hhhihjjwhl}r)7(UreftypeX pkg-fieldjyˆjzXbuild-tool-dependsr*7U refdomainXcabalr+7hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvMîhx]r,7hç)r-7}r.7(h\j*7hl}r/7(hn]ho]r07(j…j+7Xcabal-pkg-fieldr17ehp]hq]ht]uh]j'7hx]r27hXbuild-tool-dependsr37…r47}r57(h\Uh]j-7ubahjhïubaubhXb was added in Cabal 2.0, and it will be ignored (with a warning) with old versions of Cabal. See r67…r77}r87(h\Xb was added in Cabal 2.0, and it will be ignored (with a warning) with old versions of Cabal. See h]j#7ubjt)r97}r:7(h\X:pkg-field:`build-tools`h]j#7hhhihjjwhl}r;7(UreftypeX pkg-fieldjyˆjzX build-toolsr<7U refdomainXcabalr=7hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvMîhx]r>7hç)r?7}r@7(h\j<7hl}rA7(hn]ho]rB7(j…j=7Xcabal-pkg-fieldrC7ehp]hq]ht]uh]j97hx]rD7hX build-toolsrE7…rF7}rG7(h\Uh]j?7ubahjhïubaubhX4 for more information about backwards compatibility.rH7…rI7}rJ7(h\X4 for more information about backwards compatibility.h]j#7ubeubaubeubeubj*)rK7}rL7(h\Uh]j~/hhhihjj-hl}rM7(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rN7}rO7(h\Uh]j~/hhhihjj2hl}rP7(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrQ7j8jQ7uhvNhwhhx]rR7(j:)rS7}rT7(h\Xbuild-tools: program listh]jN7hhhihjj>hl}rU7(hq]rV7Xpkg-field-build-toolsrW7ahp]hn]ho]ht]jB‰uhvNhwhhx]rX7(j*)rY7}rZ7(h\Uh]jS7hhhihjj-hl}r[7(hq]hp]hn]ho]ht]Uentries]r\7(jHX build-tools; package.cabal fieldjW7UNtr]7auhvNhwhhx]ubjJ)r^7}r_7(h\X build-toolsr`7h]jS7hhhihjjMhl}ra7(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rb7hX build-toolsrc7…rd7}re7(h\UhhNhvNhwhh]j^7ubaubjS)rf7}rg7(h\jÌh]jS7hhhihjjVhl}rh7(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]ri7hX: rj7…rk7}rl7(h\UhhNhvNhwhh]jf7ubaubjÒ)rm7}rn7(h\X program listh]jS7hhhihjjÕhl}ro7(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rp7hX program listrq7…rr7}rs7(h\UhhNhvNhwhh]jm7ubaubeubj[)rt7}ru7(h\Uh]jN7hhhihjj^hl}rv7(hn]ho]hp]hq]ht]uhvNhwhhx]rw7(ja)rx7}ry7(h\Uh]jt7hhhihjjdhl}rz7(hn]ho]hp]hq]ht]uhvNhwhhx]r{7(jg)r|7}r}7(h\Uh]jx7hhhihjjjhl}r~7(hn]ho]hp]hq]ht]uhvNhwhhx]r7(jm)r€7}r7(h\j¸5h]j|7hhhihjjqhl}r‚7(hn]ho]hp]hq]ht]uhvKhx]rƒ7hXRemovedr„7…r…7}r†7(h\Uh]j€7ubaubjw)r‡7}rˆ7(h\U Cabal 3.0r‰7hl}rŠ7(hn]ho]hp]hq]ht]uh]j|7hx]r‹7h…)rŒ7}r7(h\j‰7hl}rŽ7(hn]ho]hp]hq]ht]uh]j‡7hx]r7hX Cabal 3.0r7…r‘7}r’7(h\Uh]jŒ7ubahjh‰ubahjj„ubeubjg)r“7}r”7(h\Uh]jx7hhhihjjjhl}r•7(hn]ho]hp]hq]ht]uhvNhwhhx]r–7(jm)r—7}r˜7(h\jÐ5h]j“7hhhihjjqhl}r™7(hn]ho]hp]hq]ht]uhvKhx]rš7hX Deprecatedr›7…rœ7}r7(h\Uh]j—7ubaubjw)rž7}rŸ7(h\U Cabal 2.0r 7hl}r¡7(hn]ho]hp]hq]ht]uh]j“7hx]r¢7h…)r£7}r¤7(h\j 7hl}r¥7(hn]ho]hp]hq]ht]uh]jž7hx]r¦7hX Cabal 2.0r§7…r¨7}r©7(h\Uh]j£7ubahjh‰ubahjj„ubeubeubh…)rª7}r«7(h\X„Deprecated in favor of :pkg-field:`build-tool-depends`, but :ref:`see below for backwards compatibility information `.h]jt7hhhihjh‰hl}r¬7(hn]ho]hp]hq]ht]uhvM÷hwhhx]r­7(hXDeprecated in favor of r®7…r¯7}r°7(h\XDeprecated in favor of hhNhvNhwhh]jª7ubjt)r±7}r²7(h\X:pkg-field:`build-tool-depends`h]jª7hhhihjjwhl}r³7(UreftypeX pkg-fieldjyˆjzXbuild-tool-dependsr´7U refdomainXcabalrµ7hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM÷hx]r¶7hç)r·7}r¸7(h\j´7hl}r¹7(hn]ho]rº7(j…jµ7Xcabal-pkg-fieldr»7ehp]hq]ht]uh]j±7hx]r¼7hXbuild-tool-dependsr½7…r¾7}r¿7(h\Uh]j·7ubahjhïubaubhX, but rÀ7…rÁ7}rÂ7(h\X, but hhNhvNhwhh]jª7ubjt)rÃ7}rÄ7(h\XG:ref:`see below for backwards compatibility information `h]jª7hhhihjjwhl}rÅ7(UreftypeXrefjyˆjzX buildtoolsbcU refdomainXstdrÆ7hq]hp]U refexplicitˆhn]ho]ht]j}j~uhvM÷hx]rÇ7j€)rÈ7}rÉ7(h\X@see below for backwards compatibility information hl}rÊ7(hn]ho]rË7(j…jÆ7Xstd-refrÌ7ehp]hq]ht]uh]jÃ7hx]rÍ7hX1see below for backwards compatibility informationrÎ7…rÏ7}rÐ7(h\Uh]jÈ7ubahjj‹ubaubhX.…rÑ7}rÒ7(h\X.hhNhvNhwhh]jª7ubeubh…)rÓ7}rÔ7(h\X¸A list of Haskell programs needed to build this component. Each may be followed by an optional version bound. Confusingly, each program in the list either refer to one of three things:rÕ7h]jt7hhhihjh‰hl}rÖ7(hn]ho]hp]hq]ht]uhvMùhwhhx]r×7hX¸A list of Haskell programs needed to build this component. Each may be followed by an optional version bound. Confusingly, each program in the list either refer to one of three things:rØ7…rÙ7}rÚ7(h\jÕ7hhNhvNhwhh]jÓ7ubaubj' )rÛ7}rÜ7(h\Uh]jt7hhNhjj* hl}rÝ7(hn]ho]hp]hq]ht]uhvNhwhhx]rÞ7j†6)rß7}rà7(h\Uhl}rá7(j‹6U.hq]hp]hn]jŒ6Uho]ht]j6jŽ6uh]jÛ7hx]râ7(h–)rã7}rä7(h\XEAnother executables in the same package (supported since Cabal 1.12) hl}rå7(hn]ho]hp]hq]ht]uh]jß7hx]ræ7h…)rç7}rè7(h\XDAnother executables in the same package (supported since Cabal 1.12)ré7h]jã7hhhihjh‰hl}rê7(hn]ho]hp]hq]ht]uhvMýhx]rë7hXDAnother executables in the same package (supported since Cabal 1.12)rì7…rí7}rî7(h\jé7h]jç7ubaubahjh™ubh–)rï7}rð7(h\XUTool name contained in Cabal's :ref:`hard-coded set of common tools ` hl}rñ7(hn]ho]hp]hq]ht]uh]jß7hx]rò7h…)ró7}rô7(h\XTTool name contained in Cabal's :ref:`hard-coded set of common tools `h]jï7hhhihjh‰hl}rõ7(hn]ho]hp]hq]ht]uhvMÿhx]rö7(hX!Tool name contained in Cabal’s r÷7…rø7}rù7(h\XTool name contained in Cabal's h]jó7ubjt)rú7}rû7(h\X5:ref:`hard-coded set of common tools `h]jó7hhhihjjwhl}rü7(UreftypeXrefjyˆjzX buildtoolsmapU refdomainXstdrý7hq]hp]U refexplicitˆhn]ho]ht]j}j~uhvMÿhx]rþ7j€)rÿ7}r8(h\X.hard-coded set of common tools hl}r8(hn]ho]r8(j…jý7Xstd-refr8ehp]hq]ht]uh]jú7hx]r8hXhard-coded set of common toolsr8…r8}r8(h\Uh]jÿ7ubahjj‹ubaubeubahjh™ubh–)r8}r 8(h\XZA pre-built executable that should already be on the ``PATH`` (supported since Cabal 2.0) hl}r 8(hn]ho]hp]hq]ht]uh]jß7hx]r 8h…)r 8}r 8(h\XYA pre-built executable that should already be on the ``PATH`` (supported since Cabal 2.0)h]j8hhhihjh‰hl}r8(hn]ho]hp]hq]ht]uhvM hx]r8(hX5A pre-built executable that should already be on the r8…r8}r8(h\X5A pre-built executable that should already be on the h]j 8ubhç)r8}r8(h\X``PATH``hl}r8(hn]ho]hp]hq]ht]uh]j 8hx]r8hXPATHr8…r8}r8(h\XPATHh]j8ubahjhïubhX (supported since Cabal 2.0)r8…r8}r8(h\X (supported since Cabal 2.0)h]j 8ubeubahjh™ubehjj‰6ubaubh…)r8}r8(h\XÑThese cases are listed in order of priority: an executable in the package will override any of the hard-coded packages with the same name, and a hard-coded package will override any executable on the ``PATH``.h]jt7hhhihjh‰hl}r8(hn]ho]hp]hq]ht]uhvM hwhhx]r 8(hXÈThese cases are listed in order of priority: an executable in the package will override any of the hard-coded packages with the same name, and a hard-coded package will override any executable on the r!8…r"8}r#8(h\XÈThese cases are listed in order of priority: an executable in the package will override any of the hard-coded packages with the same name, and a hard-coded package will override any executable on the hhNhvNhwhh]j8ubhç)r$8}r%8(h\X``PATH``hl}r&8(hn]ho]hp]hq]ht]uh]j8hx]r'8hXPATHr(8…r)8}r*8(h\XPATHh]j$8ubahjhïubhX.…r+8}r,8(h\X.hhNhvNhwhh]j8ubeubh…)r-8}r.8(h\XIn the first two cases, the list entry is desugared into a :pkg-field:`build-tool-depends` entry. In the first case, the entry is desugared into a :pkg-field:`build-tool-depends` entry by prefixing with ``$pkg:``. In the second case, it is desugared by looking up the package and executable name in a hard-coded table. In either case, the optional version bound is passed through unchanged. Refer to the documentation for :pkg-field:`build-tool-depends` to understand the desugared field's meaning, along with restrictions on version bounds.h]jt7hhhihjh‰hl}r/8(hn]ho]hp]hq]ht]uhvM hwhhx]r08(hX;In the first two cases, the list entry is desugared into a r18…r28}r38(h\X;In the first two cases, the list entry is desugared into a hhNhvNhwhh]j-8ubjt)r48}r58(h\X:pkg-field:`build-tool-depends`h]j-8hhhihjjwhl}r68(UreftypeX pkg-fieldjyˆjzXbuild-tool-dependsr78U refdomainXcabalr88hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM hx]r98hç)r:8}r;8(h\j78hl}r<8(hn]ho]r=8(j…j88Xcabal-pkg-fieldr>8ehp]hq]ht]uh]j48hx]r?8hXbuild-tool-dependsr@8…rA8}rB8(h\Uh]j:8ubahjhïubaubhX9 entry. In the first case, the entry is desugared into a rC8…rD8}rE8(h\X9 entry. In the first case, the entry is desugared into a hhNhvNhwhh]j-8ubjt)rF8}rG8(h\X:pkg-field:`build-tool-depends`h]j-8hhhihjjwhl}rH8(UreftypeX pkg-fieldjyˆjzXbuild-tool-dependsrI8U refdomainXcabalrJ8hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM hx]rK8hç)rL8}rM8(h\jI8hl}rN8(hn]ho]rO8(j…jJ8Xcabal-pkg-fieldrP8ehp]hq]ht]uh]jF8hx]rQ8hXbuild-tool-dependsrR8…rS8}rT8(h\Uh]jL8ubahjhïubaubhX entry by prefixing with rU8…rV8}rW8(h\X entry by prefixing with hhNhvNhwhh]j-8ubhç)rX8}rY8(h\X ``$pkg:``hl}rZ8(hn]ho]hp]hq]ht]uh]j-8hx]r[8hX$pkg:r\8…r]8}r^8(h\X$pkg:h]jX8ubahjhïubhXÒ. In the second case, it is desugared by looking up the package and executable name in a hard-coded table. In either case, the optional version bound is passed through unchanged. Refer to the documentation for r_8…r`8}ra8(h\XÒ. In the second case, it is desugared by looking up the package and executable name in a hard-coded table. In either case, the optional version bound is passed through unchanged. Refer to the documentation for hhNhvNhwhh]j-8ubjt)rb8}rc8(h\X:pkg-field:`build-tool-depends`h]j-8hhhihjjwhl}rd8(UreftypeX pkg-fieldjyˆjzXbuild-tool-dependsre8U refdomainXcabalrf8hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM hx]rg8hç)rh8}ri8(h\je8hl}rj8(hn]ho]rk8(j…jf8Xcabal-pkg-fieldrl8ehp]hq]ht]uh]jb8hx]rm8hXbuild-tool-dependsrn8…ro8}rp8(h\Uh]jh8ubahjhïubaubhXZ to understand the desugared field’s meaning, along with restrictions on version bounds.rq8…rr8}rs8(h\XX to understand the desugared field's meaning, along with restrictions on version bounds.hhNhvNhwhh]j-8ubeubj©)rt8}ru8(h\X.. _buildtoolsbc:h]jt7hhhihjj¬hl}rv8(hq]hp]hn]ho]ht]jNU buildtoolsbcrw8uhvM hwhhx]ubh…)rx8}ry8(h\X**Backward Compatibility**rz8h]jt7hhhij·}r{8hCjt8shjh‰hl}r|8(hn]ho]hp]hq]r}8jw8aht]r~8hCauhvM hwhj¿}r8jw8jt8shx]r€8j²)r8}r‚8(h\jz8hl}rƒ8(hn]ho]hp]hq]ht]uh]jx8hx]r„8hXBackward Compatibilityr…8…r†8}r‡8(h\XBackward Compatibilityh]j8ubahjjºubaubh…)rˆ8}r‰8(h\XRAlthough this field is deprecated in favor of :pkg-field:`build-tool-depends`, there are some situations where you may prefer to use :pkg-field:`build-tools` in cases (1) and (2), as it is supported by more versions of Cabal. In case (3), :pkg-field:`build-tool-depends` is better for backwards-compatibility, as it will be ignored by old versions of Cabal; if you add the executable to :pkg-field:`build-tools`, a setup script built against old Cabal will choke. If an old version of Cabal is used, an end-user will have to manually arrange for the requested executable to be in your ``PATH``.h]jt7hhhihjh‰hl}rŠ8(hn]ho]hp]hq]ht]uhvM hwhhx]r‹8(hX.Although this field is deprecated in favor of rŒ8…r8}rŽ8(h\X.Although this field is deprecated in favor of hhNhvNhwhh]jˆ8ubjt)r8}r8(h\X:pkg-field:`build-tool-depends`h]jˆ8hhhihjjwhl}r‘8(UreftypeX pkg-fieldjyˆjzXbuild-tool-dependsr’8U refdomainXcabalr“8hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM hx]r”8hç)r•8}r–8(h\j’8hl}r—8(hn]ho]r˜8(j…j“8Xcabal-pkg-fieldr™8ehp]hq]ht]uh]j8hx]rš8hXbuild-tool-dependsr›8…rœ8}r8(h\Uh]j•8ubahjhïubaubhX8, there are some situations where you may prefer to use rž8…rŸ8}r 8(h\X8, there are some situations where you may prefer to use hhNhvNhwhh]jˆ8ubjt)r¡8}r¢8(h\X:pkg-field:`build-tools`h]jˆ8hhhihjjwhl}r£8(UreftypeX pkg-fieldjyˆjzX build-toolsr¤8U refdomainXcabalr¥8hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM hx]r¦8hç)r§8}r¨8(h\j¤8hl}r©8(hn]ho]rª8(j…j¥8Xcabal-pkg-fieldr«8ehp]hq]ht]uh]j¡8hx]r¬8hX build-toolsr­8…r®8}r¯8(h\Uh]j§8ubahjhïubaubhXR in cases (1) and (2), as it is supported by more versions of Cabal. In case (3), r°8…r±8}r²8(h\XR in cases (1) and (2), as it is supported by more versions of Cabal. In case (3), hhNhvNhwhh]jˆ8ubjt)r³8}r´8(h\X:pkg-field:`build-tool-depends`h]jˆ8hhhihjjwhl}rµ8(UreftypeX pkg-fieldjyˆjzXbuild-tool-dependsr¶8U refdomainXcabalr·8hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM hx]r¸8hç)r¹8}rº8(h\j¶8hl}r»8(hn]ho]r¼8(j…j·8Xcabal-pkg-fieldr½8ehp]hq]ht]uh]j³8hx]r¾8hXbuild-tool-dependsr¿8…rÀ8}rÁ8(h\Uh]j¹8ubahjhïubaubhXu is better for backwards-compatibility, as it will be ignored by old versions of Cabal; if you add the executable to rÂ8…rÃ8}rÄ8(h\Xu is better for backwards-compatibility, as it will be ignored by old versions of Cabal; if you add the executable to hhNhvNhwhh]jˆ8ubjt)rÅ8}rÆ8(h\X:pkg-field:`build-tools`h]jˆ8hhhihjjwhl}rÇ8(UreftypeX pkg-fieldjyˆjzX build-toolsrÈ8U refdomainXcabalrÉ8hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM hx]rÊ8hç)rË8}rÌ8(h\jÈ8hl}rÍ8(hn]ho]rÎ8(j…jÉ8Xcabal-pkg-fieldrÏ8ehp]hq]ht]uh]jÅ8hx]rÐ8hX build-toolsrÑ8…rÒ8}rÓ8(h\Uh]jË8ubahjhïubaubhX®, a setup script built against old Cabal will choke. If an old version of Cabal is used, an end-user will have to manually arrange for the requested executable to be in your rÔ8…rÕ8}rÖ8(h\X®, a setup script built against old Cabal will choke. If an old version of Cabal is used, an end-user will have to manually arrange for the requested executable to be in your hhNhvNhwhh]jˆ8ubhç)r×8}rØ8(h\X``PATH``hl}rÙ8(hn]ho]hp]hq]ht]uh]jˆ8hx]rÚ8hXPATHrÛ8…rÜ8}rÝ8(h\XPATHh]j×8ubahjhïubhX.…rÞ8}rß8(h\X.hhNhvNhwhh]jˆ8ubeubj©)rà8}rá8(h\X.. _buildtoolsmap:h]jt7hhhihjj¬hl}râ8(hq]hp]hn]ho]ht]jNU buildtoolsmaprã8uhvM hwhhx]ubh…)rä8}rå8(h\X**Set of Known Tool Names**ræ8h]jt7hhhij·}rç8h9jà8shjh‰hl}rè8(hn]ho]hp]hq]ré8jã8aht]rê8h9auhvM hwhj¿}rë8jã8jà8shx]rì8j²)rí8}rî8(h\jæ8hl}rï8(hn]ho]hp]hq]ht]uh]jä8hx]rð8hXSet of Known Tool Namesrñ8…rò8}ró8(h\XSet of Known Tool Namesh]jí8ubahjjºubaubh…)rô8}rõ8(h\XÒIdentifiers specified in :pkg-field:`build-tools` are desugared into their respective equivalent :pkg-field:`build-tool-depends` form according to the table below. Consequently, a legacy specification such as::h]jt7hhhihjh‰hl}rö8(hn]ho]hp]hq]ht]uhvM hwhhx]r÷8(hXIdentifiers specified in rø8…rù8}rú8(h\XIdentifiers specified in hhNhvNhwhh]jô8ubjt)rû8}rü8(h\X:pkg-field:`build-tools`h]jô8hhhihjjwhl}rý8(UreftypeX pkg-fieldjyˆjzX build-toolsrþ8U refdomainXcabalrÿ8hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM hx]r9hç)r9}r9(h\jþ8hl}r9(hn]ho]r9(j…jÿ8Xcabal-pkg-fieldr9ehp]hq]ht]uh]jû8hx]r9hX build-toolsr9…r9}r 9(h\Uh]j9ubahjhïubaubhX0 are desugared into their respective equivalent r 9…r 9}r 9(h\X0 are desugared into their respective equivalent hhNhvNhwhh]jô8ubjt)r 9}r9(h\X:pkg-field:`build-tool-depends`h]jô8hhhihjjwhl}r9(UreftypeX pkg-fieldjyˆjzXbuild-tool-dependsr9U refdomainXcabalr9hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM hx]r9hç)r9}r9(h\j9hl}r9(hn]ho]r9(j…j9Xcabal-pkg-fieldr9ehp]hq]ht]uh]j 9hx]r9hXbuild-tool-dependsr9…r9}r9(h\Uh]j9ubahjhïubaubhXQ form according to the table below. Consequently, a legacy specification such as:r9…r9}r9(h\XQ form according to the table below. Consequently, a legacy specification such as:hhNhvNhwhh]jô8ubeubjÕ)r9}r 9(h\X>build-tools: alex >= 3.2.1 && < 3.3, happy >= 1.19.5 && < 1.20h]jt7hhhihjjØhl}r!9(jÚjÛhq]hp]hn]ho]ht]uhvM hwhhx]r"9hX>build-tools: alex >= 3.2.1 && < 3.3, happy >= 1.19.5 && < 1.20r#9…r$9}r%9(h\Uh]j9ubaubh…)r&9}r'9(h\X7is simply desugared into the equivalent specification::h]jt7hhhihjh‰hl}r(9(hn]ho]hp]hq]ht]uhvM hwhhx]r)9hX6is simply desugared into the equivalent specification:r*9…r+9}r,9(h\X6is simply desugared into the equivalent specification:hhNhvNhwhh]j&9ubaubjÕ)r-9}r.9(h\XPbuild-tool-depends: alex:alex >= 3.2.1 && < 3.3, happy:happy >= 1.19.5 && < 1.20h]jt7hhhihjjØhl}r/9(jÚjÛhq]hp]hn]ho]ht]uhvM hwhhx]r09hXPbuild-tool-depends: alex:alex >= 3.2.1 && < 3.3, happy:happy >= 1.19.5 && < 1.20r19…r29}r39(h\Uh]j-9ubaubj%)r49}r59(h\Uh]jt7hhhihjj(hl}r69(hn]ho]hp]hq]ht]uhvNhwhhx]r79j+)r89}r99(h\Uhl}r:9(hq]hp]hn]ho]ht]UcolsKuh]j49hx]r;9(j0)r<9}r=9(h\Uhl}r>9(hq]hp]hn]ho]ht]UcolwidthKuh]j89hx]hjj4ubj0)r?9}r@9(h\Uhl}rA9(hq]hp]hn]ho]ht]UcolwidthK#uh]j89hx]hjj4ubj0)rB9}rC9(h\Uhl}rD9(hq]hp]hn]ho]ht]UcolwidthKuh]j89hx]hjj4ubj8)rE9}rF9(h\Uhl}rG9(hn]ho]hp]hq]ht]uh]j89hx]rH9j=)rI9}rJ9(h\Uhl}rK9(hn]ho]hp]hq]ht]uh]jE9hx]rL9(jB)rM9}rN9(h\Uhl}rO9(hn]ho]hp]hq]ht]uh]jI9hx]rP9h…)rQ9}rR9(h\X#:pkg-field:`build-tools` identifierh]jM9hhhihjh‰hl}rS9(hn]ho]hp]hq]ht]uhvM# hx]rT9(jt)rU9}rV9(h\X:pkg-field:`build-tools`h]jQ9hhhihjjwhl}rW9(UreftypeX pkg-fieldjyˆjzX build-toolsrX9U refdomainXcabalrY9hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM$ hx]rZ9hç)r[9}r\9(h\jX9hl}r]9(hn]ho]r^9(j…jY9Xcabal-pkg-fieldr_9ehp]hq]ht]uh]jU9hx]r`9hX build-toolsra9…rb9}rc9(h\Uh]j[9ubahjhïubaubhX identifierrd9…re9}rf9(h\X identifierh]jQ9ubeubahjjOubjB)rg9}rh9(h\Uhl}ri9(hn]ho]hp]hq]ht]uh]jI9hx]rj9h…)rk9}rl9(h\X4desugared :pkg-field:`build-tool-depends` identifierh]jg9hhhihjh‰hl}rm9(hn]ho]hp]hq]ht]uhvM# hx]rn9(hX desugared ro9…rp9}rq9(h\X desugared h]jk9ubjt)rr9}rs9(h\X:pkg-field:`build-tool-depends`h]jk9hhhihjjwhl}rt9(UreftypeX pkg-fieldjyˆjzXbuild-tool-dependsru9U refdomainXcabalrv9hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM$ hx]rw9hç)rx9}ry9(h\ju9hl}rz9(hn]ho]r{9(j…jv9Xcabal-pkg-fieldr|9ehp]hq]ht]uh]jr9hx]r}9hXbuild-tool-dependsr~9…r9}r€9(h\Uh]jx9ubahjhïubaubhX identifierr9…r‚9}rƒ9(h\X identifierh]jk9ubeubahjjOubjB)r„9}r…9(h\Uhl}r†9(hn]ho]hp]hq]ht]uh]jI9hx]r‡9h…)rˆ9}r‰9(h\XNoterŠ9h]j„9hhhihjh‰hl}r‹9(hn]ho]hp]hq]ht]uhvM# hx]rŒ9hXNoter9…rŽ9}r9(h\jŠ9h]jˆ9ubaubahjjOubehjj\ubahjj]ubj^)r9}r‘9(h\Uhl}r’9(hn]ho]hp]hq]ht]uh]j89hx]r“9(j=)r”9}r•9(h\Uhl}r–9(hn]ho]hp]hq]ht]uh]j9hx]r—9(jB)r˜9}r™9(h\Uhl}rš9(hn]ho]hp]hq]ht]uh]j”9hx]r›9h…)rœ9}r9(h\X``alex``rž9h]j˜9hhhihjh‰hl}rŸ9(hn]ho]hp]hq]ht]uhvM' hx]r 9hç)r¡9}r¢9(h\jž9hl}r£9(hn]ho]hp]hq]ht]uh]jœ9hx]r¤9hXalexr¥9…r¦9}r§9(h\Xalexh]j¡9ubahjhïubaubahjjOubjB)r¨9}r©9(h\Uhl}rª9(hn]ho]hp]hq]ht]uh]j”9hx]r«9h…)r¬9}r­9(h\X ``alex:alex``r®9h]j¨9hhhihjh‰hl}r¯9(hn]ho]hp]hq]ht]uhvM' hx]r°9hç)r±9}r²9(h\j®9hl}r³9(hn]ho]hp]hq]ht]uh]j¬9hx]r´9hX alex:alexrµ9…r¶9}r·9(h\X alex:alexh]j±9ubahjhïubaubahjjOubjB)r¸9}r¹9(h\Uhl}rº9(hn]ho]hp]hq]ht]uh]j”9hx]hjjOubehjj\ubj=)r»9}r¼9(h\Uhl}r½9(hn]ho]hp]hq]ht]uh]j9hx]r¾9(jB)r¿9}rÀ9(h\Uhl}rÁ9(hn]ho]hp]hq]ht]uh]j»9hx]rÂ9h…)rÃ9}rÄ9(h\X``c2hs``rÅ9h]j¿9hhhihjh‰hl}rÆ9(hn]ho]hp]hq]ht]uhvM) hx]rÇ9hç)rÈ9}rÉ9(h\jÅ9hl}rÊ9(hn]ho]hp]hq]ht]uh]jÃ9hx]rË9hXc2hsrÌ9…rÍ9}rÎ9(h\Xc2hsh]jÈ9ubahjhïubaubahjjOubjB)rÏ9}rÐ9(h\Uhl}rÑ9(hn]ho]hp]hq]ht]uh]j»9hx]rÒ9h…)rÓ9}rÔ9(h\X ``c2hs:c2hs``rÕ9h]jÏ9hhhihjh‰hl}rÖ9(hn]ho]hp]hq]ht]uhvM) hx]r×9hç)rØ9}rÙ9(h\jÕ9hl}rÚ9(hn]ho]hp]hq]ht]uh]jÓ9hx]rÛ9hX c2hs:c2hsrÜ9…rÝ9}rÞ9(h\X c2hs:c2hsh]jØ9ubahjhïubaubahjjOubjB)rß9}rà9(h\Uhl}rá9(hn]ho]hp]hq]ht]uh]j»9hx]hjjOubehjj\ubj=)râ9}rã9(h\Uhl}rä9(hn]ho]hp]hq]ht]uh]j9hx]rå9(jB)ræ9}rç9(h\Uhl}rè9(hn]ho]hp]hq]ht]uh]jâ9hx]ré9h…)rê9}rë9(h\X ``cpphs``rì9h]jæ9hhhihjh‰hl}rí9(hn]ho]hp]hq]ht]uhvM+ hx]rî9hç)rï9}rð9(h\jì9hl}rñ9(hn]ho]hp]hq]ht]uh]jê9hx]rò9hXcpphsró9…rô9}rõ9(h\Xcpphsh]jï9ubahjhïubaubahjjOubjB)rö9}r÷9(h\Uhl}rø9(hn]ho]hp]hq]ht]uh]jâ9hx]rù9h…)rú9}rû9(h\X``cpphs:cpphs``rü9h]jö9hhhihjh‰hl}rý9(hn]ho]hp]hq]ht]uhvM+ hx]rþ9hç)rÿ9}r:(h\jü9hl}r:(hn]ho]hp]hq]ht]uh]jú9hx]r:hX cpphs:cpphsr:…r:}r:(h\X cpphs:cpphsh]jÿ9ubahjhïubaubahjjOubjB)r:}r:(h\Uhl}r:(hn]ho]hp]hq]ht]uh]jâ9hx]hjjOubehjj\ubj=)r :}r :(h\Uhl}r :(hn]ho]hp]hq]ht]uh]j9hx]r :(jB)r :}r:(h\Uhl}r:(hn]ho]hp]hq]ht]uh]j :hx]r:h…)r:}r:(h\X ``greencard``r:h]j :hhhihjh‰hl}r:(hn]ho]hp]hq]ht]uhvM- hx]r:hç)r:}r:(h\j:hl}r:(hn]ho]hp]hq]ht]uh]j:hx]r:hX greencardr:…r:}r:(h\X greencardh]j:ubahjhïubaubahjjOubjB)r:}r:(h\Uhl}r:(hn]ho]hp]hq]ht]uh]j :hx]r :h…)r!:}r":(h\X``greencard:greencard``r#:h]j:hhhihjh‰hl}r$:(hn]ho]hp]hq]ht]uhvM- hx]r%:hç)r&:}r':(h\j#:hl}r(:(hn]ho]hp]hq]ht]uh]j!:hx]r):hXgreencard:greencardr*:…r+:}r,:(h\Xgreencard:greencardh]j&:ubahjhïubaubahjjOubjB)r-:}r.:(h\Uhl}r/:(hn]ho]hp]hq]ht]uh]j :hx]hjjOubehjj\ubj=)r0:}r1:(h\Uhl}r2:(hn]ho]hp]hq]ht]uh]j9hx]r3:(jB)r4:}r5:(h\Uhl}r6:(hn]ho]hp]hq]ht]uh]j0:hx]r7:h…)r8:}r9:(h\X ``haddock``r::h]j4:hhhihjh‰hl}r;:(hn]ho]hp]hq]ht]uhvM/ hx]r<:hç)r=:}r>:(h\j::hl}r?:(hn]ho]hp]hq]ht]uh]j8:hx]r@:hXhaddockrA:…rB:}rC:(h\Xhaddockh]j=:ubahjhïubaubahjjOubjB)rD:}rE:(h\Uhl}rF:(hn]ho]hp]hq]ht]uh]j0:hx]rG:h…)rH:}rI:(h\X``haddock:haddock``rJ:h]jD:hhhihjh‰hl}rK:(hn]ho]hp]hq]ht]uhvM/ hx]rL:hç)rM:}rN:(h\jJ:hl}rO:(hn]ho]hp]hq]ht]uh]jH:hx]rP:hXhaddock:haddockrQ:…rR:}rS:(h\Xhaddock:haddockh]jM:ubahjhïubaubahjjOubjB)rT:}rU:(h\Uhl}rV:(hn]ho]hp]hq]ht]uh]j0:hx]hjjOubehjj\ubj=)rW:}rX:(h\Uhl}rY:(hn]ho]hp]hq]ht]uh]j9hx]rZ:(jB)r[:}r\:(h\Uhl}r]:(hn]ho]hp]hq]ht]uh]jW:hx]r^:h…)r_:}r`:(h\X ``happy``ra:h]j[:hhhihjh‰hl}rb:(hn]ho]hp]hq]ht]uhvM1 hx]rc:hç)rd:}re:(h\ja:hl}rf:(hn]ho]hp]hq]ht]uh]j_:hx]rg:hXhappyrh:…ri:}rj:(h\Xhappyh]jd:ubahjhïubaubahjjOubjB)rk:}rl:(h\Uhl}rm:(hn]ho]hp]hq]ht]uh]jW:hx]rn:h…)ro:}rp:(h\X``happy:happy``rq:h]jk:hhhihjh‰hl}rr:(hn]ho]hp]hq]ht]uhvM1 hx]rs:hç)rt:}ru:(h\jq:hl}rv:(hn]ho]hp]hq]ht]uh]jo:hx]rw:hX happy:happyrx:…ry:}rz:(h\X happy:happyh]jt:ubahjhïubaubahjjOubjB)r{:}r|:(h\Uhl}r}:(hn]ho]hp]hq]ht]uh]jW:hx]hjjOubehjj\ubj=)r~:}r:(h\Uhl}r€:(hn]ho]hp]hq]ht]uh]j9hx]r:(jB)r‚:}rƒ:(h\Uhl}r„:(hn]ho]hp]hq]ht]uh]j~:hx]r…:h…)r†:}r‡:(h\X ``hsc2hs``rˆ:h]j‚:hhhihjh‰hl}r‰:(hn]ho]hp]hq]ht]uhvM3 hx]rŠ:hç)r‹:}rŒ:(h\jˆ:hl}r:(hn]ho]hp]hq]ht]uh]j†:hx]rŽ:hXhsc2hsr:…r:}r‘:(h\Xhsc2hsh]j‹:ubahjhïubaubahjjOubjB)r’:}r“:(h\Uhl}r”:(hn]ho]hp]hq]ht]uh]j~:hx]r•:h…)r–:}r—:(h\X``hsc2hs:hsc2hs``r˜:h]j’:hhhihjh‰hl}r™:(hn]ho]hp]hq]ht]uhvM3 hx]rš:hç)r›:}rœ:(h\j˜:hl}r:(hn]ho]hp]hq]ht]uh]j–:hx]rž:hX hsc2hs:hsc2hsrŸ:…r :}r¡:(h\X hsc2hs:hsc2hsh]j›:ubahjhïubaubahjjOubjB)r¢:}r£:(h\Uhl}r¤:(hn]ho]hp]hq]ht]uh]j~:hx]hjjOubehjj\ubj=)r¥:}r¦:(h\Uhl}r§:(hn]ho]hp]hq]ht]uh]j9hx]r¨:(jB)r©:}rª:(h\Uhl}r«:(hn]ho]hp]hq]ht]uh]j¥:hx]r¬:h…)r­:}r®:(h\X ``hscolour``r¯:h]j©:hhhihjh‰hl}r°:(hn]ho]hp]hq]ht]uhvM5 hx]r±:hç)r²:}r³:(h\j¯:hl}r´:(hn]ho]hp]hq]ht]uh]j­:hx]rµ:hXhscolourr¶:…r·:}r¸:(h\Xhscolourh]j²:ubahjhïubaubahjjOubjB)r¹:}rº:(h\Uhl}r»:(hn]ho]hp]hq]ht]uh]j¥:hx]r¼:h…)r½:}r¾:(h\X``hscolour:hscolour``r¿:h]j¹:hhhihjh‰hl}rÀ:(hn]ho]hp]hq]ht]uhvM5 hx]rÁ:hç)rÂ:}rÃ:(h\j¿:hl}rÄ:(hn]ho]hp]hq]ht]uh]j½:hx]rÅ:hXhscolour:hscolourrÆ:…rÇ:}rÈ:(h\Xhscolour:hscolourh]jÂ:ubahjhïubaubahjjOubjB)rÉ:}rÊ:(h\Uhl}rË:(hn]ho]hp]hq]ht]uh]j¥:hx]hjjOubehjj\ubj=)rÌ:}rÍ:(h\Uhl}rÎ:(hn]ho]hp]hq]ht]uh]j9hx]rÏ:(jB)rÐ:}rÑ:(h\Uhl}rÒ:(hn]ho]hp]hq]ht]uh]jÌ:hx]rÓ:h…)rÔ:}rÕ:(h\X``hspec-discover``rÖ:h]jÐ:hhhihjh‰hl}r×:(hn]ho]hp]hq]ht]uhvM7 hx]rØ:hç)rÙ:}rÚ:(h\jÖ:hl}rÛ:(hn]ho]hp]hq]ht]uh]jÔ:hx]rÜ:hXhspec-discoverrÝ:…rÞ:}rß:(h\Xhspec-discoverh]jÙ:ubahjhïubaubahjjOubjB)rà:}rá:(h\Uhl}râ:(hn]ho]hp]hq]ht]uh]jÌ:hx]rã:h…)rä:}rå:(h\X!``hspec-discover:hspec-discover``ræ:h]jà:hhhihjh‰hl}rç:(hn]ho]hp]hq]ht]uhvM7 hx]rè:hç)ré:}rê:(h\jæ:hl}rë:(hn]ho]hp]hq]ht]uh]jä:hx]rì:hXhspec-discover:hspec-discoverrí:…rî:}rï:(h\Xhspec-discover:hspec-discoverh]jé:ubahjhïubaubahjjOubjB)rð:}rñ:(h\Uhl}rò:(hn]ho]hp]hq]ht]uh]jÌ:hx]ró:h…)rô:}rõ:(h\Xsince Cabal 2.0rö:h]jð:hhhihjh‰hl}r÷:(hn]ho]hp]hq]ht]uhvM7 hx]rø:hXsince Cabal 2.0rù:…rú:}rû:(h\jö:h]jô:ubaubahjjOubehjj\ubehjj«ubehjj¬ubaubh…)rü:}rý:(h\XÈThis built-in set can be programmatically extended via ``Custom`` setup scripts; this, however, is of limited use since the Cabal solver cannot access information injected by ``Custom`` setup scripts.h]jt7hhhihjh‰hl}rþ:(hn]ho]hp]hq]ht]uhvM: hwhhx]rÿ:(hX7This built-in set can be programmatically extended via r;…r;}r;(h\X7This built-in set can be programmatically extended via hhNhvNhwhh]jü:ubhç)r;}r;(h\X ``Custom``hl}r;(hn]ho]hp]hq]ht]uh]jü:hx]r;hXCustomr;…r;}r ;(h\XCustomh]j;ubahjhïubhXn setup scripts; this, however, is of limited use since the Cabal solver cannot access information injected by r ;…r ;}r ;(h\Xn setup scripts; this, however, is of limited use since the Cabal solver cannot access information injected by hhNhvNhwhh]jü:ubhç)r ;}r;(h\X ``Custom``hl}r;(hn]ho]hp]hq]ht]uh]jü:hx]r;hXCustomr;…r;}r;(h\XCustomh]j ;ubahjhïubhX setup scripts.r;…r;}r;(h\X setup scripts.hhNhvNhwhh]jü:ubeubeubeubj*)r;}r;(h\Uh]j~/hhhihjj-hl}r;(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r;}r;(h\Uh]j~/hhhihjj2hl}r;(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr;j8j;uhvNhwhhx]r;(j:)r;}r ;(h\Xbuildable: booleanh]j;hhhihjj>hl}r!;(hq]r";Xpkg-field-buildabler#;ahp]hn]ho]ht]jB‰uhvMD hwhhx]r$;(j*)r%;}r&;(h\Uh]j;hhhihjj-hl}r';(hq]hp]hn]ho]ht]Uentries]r(;(jHXbuildable; package.cabal fieldj#;UNtr);auhvMD hwhhx]ubjJ)r*;}r+;(h\X buildabler,;h]j;hhhihjjMhl}r-;(jÚjÛhq]hp]hn]ho]ht]uhvMD hwhhx]r.;hX buildabler/;…r0;}r1;(h\UhhNhvNhwhh]j*;ubaubjS)r2;}r3;(h\jÌh]j;hhhihjjVhl}r4;(jÚjÛhq]hp]hn]ho]ht]uhvMD hwhhx]r5;hX: r6;…r7;}r8;(h\UhhNhvNhwhh]j2;ubaubjÒ)r9;}r:;(h\Xbooleanh]j;hhhihjjÕhl}r;;(jÚjÛhq]hp]hn]ho]ht]uhvMD hwhhx]r<;hXbooleanr=;…r>;}r?;(h\UhhNhvNhwhh]j9;ubaubeubj[)r@;}rA;(h\Uh]j;hhhihjj^hl}rB;(hn]ho]hp]hq]ht]uhvMD hwhhx]rC;(ja)rD;}rE;(h\Uh]j@;hhhihjjdhl}rF;(hn]ho]hp]hq]ht]uhvNhwhhx]rG;jg)rH;}rI;(h\Uhl}rJ;(hn]ho]hp]hq]ht]uh]jD;hx]rK;(jm)rL;}rM;(h\X Default valueh]jH;hhhihjjqhl}rN;(hn]ho]hp]hq]ht]uhvKhx]rO;hX Default valuerP;…rQ;}rR;(h\Uh]jL;ubaubjw)rS;}rT;(h\Uhl}rU;(hn]ho]hp]hq]ht]uh]jH;hx]rV;h…)rW;}rX;(h\XTruehl}rY;(hn]ho]hp]hq]ht]uh]jS;hx]rZ;hç)r[;}r\;(h\X``True``h]jW;hhhihjhïhl}r];(hn]ho]hp]hq]ht]uhvNhwhhx]r^;hXTruer_;…r`;}ra;(h\XTruehhNhvNhwhh]j[;ubaubahjh‰ubahjj„ubehjjjubaubh…)rb;}rc;(h\XßIs the component buildable? Like some of the other fields below, this field is more useful with the slightly more elaborate form of the simple build infrastructure described in the section on `system-dependent parameters`_.h]j@;hhhihjh‰hl}rd;(hn]ho]hp]hq]ht]uhvM@ hwhhx]re;(hXÀIs the component buildable? Like some of the other fields below, this field is more useful with the slightly more elaborate form of the simple build infrastructure described in the section on rf;…rg;}rh;(h\XÀIs the component buildable? Like some of the other fields below, this field is more useful with the slightly more elaborate form of the simple build infrastructure described in the section on hhNhvNhwhh]jb;ubjH)ri;}rj;(h\X`system-dependent parameters`_jKKh]jb;hjjLhl}rk;(UnameXsystem-dependent parametershq]hp]hn]ho]ht]jNj™uhx]rl;hXsystem-dependent parametersrm;…rn;}ro;(h\Xsystem-dependent parametersh]ji;ubaubhX.…rp;}rq;(h\X.hhNhvNhwhh]jb;ubeubeubeubj*)rr;}rs;(h\Uh]j~/hhhihjj-hl}rt;(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)ru;}rv;(h\Uh]j~/hhhihjj2hl}rw;(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrx;j8jx;uhvNhwhhx]ry;(j:)rz;}r{;(h\Xghc-options: token listh]ju;hhhihjj>hl}r|;(hq]r};Xpkg-field-ghc-optionsr~;ahp]hn]ho]ht]jB‰uhvMP hwhhx]r;(j*)r€;}r;(h\Uh]jz;hhhihjj-hl}r‚;(hq]hp]hn]ho]ht]Uentries]rƒ;(jHX ghc-options; package.cabal fieldj~;UNtr„;auhvMP hwhhx]ubjJ)r…;}r†;(h\X ghc-optionsr‡;h]jz;hhhihjjMhl}rˆ;(jÚjÛhq]hp]hn]ho]ht]uhvMP hwhhx]r‰;hX ghc-optionsrŠ;…r‹;}rŒ;(h\UhhNhvNhwhh]j…;ubaubjS)r;}rŽ;(h\jÌh]jz;hhhihjjVhl}r;(jÚjÛhq]hp]hn]ho]ht]uhvMP hwhhx]r;hX: r‘;…r’;}r“;(h\UhhNhvNhwhh]j;ubaubjÒ)r”;}r•;(h\X token listh]jz;hhhihjjÕhl}r–;(jÚjÛhq]hp]hn]ho]ht]uhvMP hwhhx]r—;hX token listr˜;…r™;}rš;(h\UhhNhvNhwhh]j”;ubaubeubj[)r›;}rœ;(h\Uh]ju;hhhihjj^hl}r;(hn]ho]hp]hq]ht]uhvMP hwhhx]rž;(h…)rŸ;}r ;(h\X~Additional options for GHC. You can often achieve the same effect using the :pkg-field:`extensions` field, which is preferred.h]j›;hhhihjh‰hl}r¡;(hn]ho]hp]hq]ht]uhvMG hwhhx]r¢;(hXLAdditional options for GHC. You can often achieve the same effect using the r£;…r¤;}r¥;(h\XLAdditional options for GHC. You can often achieve the same effect using the hhNhvNhwhh]jŸ;ubjt)r¦;}r§;(h\X:pkg-field:`extensions`h]jŸ;hhhihjjwhl}r¨;(UreftypeX pkg-fieldjyˆjzX extensionsr©;U refdomainXcabalrª;hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvMG hx]r«;hç)r¬;}r­;(h\j©;hl}r®;(hn]ho]r¯;(j…jª;Xcabal-pkg-fieldr°;ehp]hq]ht]uh]j¦;hx]r±;hX extensionsr²;…r³;}r´;(h\Uh]j¬;ubahjhïubaubhX field, which is preferred.rµ;…r¶;}r·;(h\X field, which is preferred.hhNhvNhwhh]jŸ;ubeubh…)r¸;}r¹;(h\XvOptions required only by one module may be specified by placing an ``OPTIONS_GHC`` pragma in the source file affected.h]j›;hhhihjh‰hl}rº;(hn]ho]hp]hq]ht]uhvMJ hwhhx]r»;(hXCOptions required only by one module may be specified by placing an r¼;…r½;}r¾;(h\XCOptions required only by one module may be specified by placing an hhNhvNhwhh]j¸;ubhç)r¿;}rÀ;(h\X``OPTIONS_GHC``hl}rÁ;(hn]ho]hp]hq]ht]uh]j¸;hx]rÂ;hX OPTIONS_GHCrÃ;…rÄ;}rÅ;(h\X OPTIONS_GHCh]j¿;ubahjhïubhX$ pragma in the source file affected.rÆ;…rÇ;}rÈ;(h\X$ pragma in the source file affected.hhNhvNhwhh]j¸;ubeubh…)rÉ;}rÊ;(h\X•As with many other fields, whitespace can be escaped by using Haskell string syntax. Example: ``ghc-options: -Wcompat "-with-rtsopts=-T -I1" -Wall``.h]j›;hhhihjh‰hl}rË;(hn]ho]hp]hq]ht]uhvMM hwhhx]rÌ;(hX^As with many other fields, whitespace can be escaped by using Haskell string syntax. Example: rÍ;…rÎ;}rÏ;(h\X^As with many other fields, whitespace can be escaped by using Haskell string syntax. Example: hhNhvNhwhh]jÉ;ubhç)rÐ;}rÑ;(h\X6``ghc-options: -Wcompat "-with-rtsopts=-T -I1" -Wall``hl}rÒ;(hn]ho]hp]hq]ht]uh]jÉ;hx]rÓ;hX2ghc-options: -Wcompat "-with-rtsopts=-T -I1" -WallrÔ;…rÕ;}rÖ;(h\X2ghc-options: -Wcompat "-with-rtsopts=-T -I1" -Wallh]jÐ;ubahjhïubhX.…r×;}rØ;(h\X.hhNhvNhwhh]jÉ;ubeubeubeubj*)rÙ;}rÚ;(h\Uh]j~/hhhihjj-hl}rÛ;(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rÜ;}rÝ;(h\Uh]j~/hhhihjj2hl}rÞ;(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrß;j8jß;uhvNhwhhx]rà;(j:)rá;}râ;(h\Xghc-prof-options: token listh]jÜ;hhhihjj>hl}rã;(hq]rä;Xpkg-field-ghc-prof-optionsrå;ahp]hn]ho]ht]jB‰uhvMe hwhhx]ræ;(j*)rç;}rè;(h\Uh]já;hhhihjj-hl}ré;(hq]hp]hn]ho]ht]Uentries]rê;(jHX%ghc-prof-options; package.cabal fieldjå;UNtrë;auhvMe hwhhx]ubjJ)rì;}rí;(h\Xghc-prof-optionsrî;h]já;hhhihjjMhl}rï;(jÚjÛhq]hp]hn]ho]ht]uhvMe hwhhx]rð;hXghc-prof-optionsrñ;…rò;}ró;(h\UhhNhvNhwhh]jì;ubaubjS)rô;}rõ;(h\jÌh]já;hhhihjjVhl}rö;(jÚjÛhq]hp]hn]ho]ht]uhvMe hwhhx]r÷;hX: rø;…rù;}rú;(h\UhhNhvNhwhh]jô;ubaubjÒ)rû;}rü;(h\X token listh]já;hhhihjjÕhl}rý;(jÚjÛhq]hp]hn]ho]ht]uhvMe hwhhx]rþ;hX token listrÿ;…r<}r<(h\UhhNhvNhwhh]jû;ubaubeubj[)r<}r<(h\Uh]jÜ;hhhihjj^hl}r<(hn]ho]hp]hq]ht]uhvMe hwhhx]r<(h…)r<}r<(h\XLAdditional options for GHC when the package is built with profiling enabled.r<h]j<hhhihjh‰hl}r <(hn]ho]hp]hq]ht]uhvMS hwhhx]r <hXLAdditional options for GHC when the package is built with profiling enabled.r <…r <}r <(h\j<hhNhvNhwhh]j<ubaubh…)r<}r<(h\X²Note that as of Cabal-1.24, the default profiling detail level defaults to ``exported-functions`` for libraries and ``toplevel-functions`` for executables. For GHC these correspond to the flags ``-fprof-auto-exported`` and ``-fprof-auto-top``. Prior to Cabal-1.24 the level defaulted to ``none``. These levels can be adjusted by the person building the package with the ``--profiling-detail`` and ``--library-profiling-detail`` flags.h]j<hhhihjh‰hl}r<(hn]ho]hp]hq]ht]uhvMV hwhhx]r<(hXKNote that as of Cabal-1.24, the default profiling detail level defaults to r<…r<}r<(h\XKNote that as of Cabal-1.24, the default profiling detail level defaults to hhNhvNhwhh]j<ubhç)r<}r<(h\X``exported-functions``hl}r<(hn]ho]hp]hq]ht]uh]j<hx]r<hXexported-functionsr<…r<}r<(h\Xexported-functionsh]j<ubahjhïubhX for libraries and r<…r<}r<(h\X for libraries and hhNhvNhwhh]j<ubhç)r<}r <(h\X``toplevel-functions``hl}r!<(hn]ho]hp]hq]ht]uh]j<hx]r"<hXtoplevel-functionsr#<…r$<}r%<(h\Xtoplevel-functionsh]j<ubahjhïubhX8 for executables. For GHC these correspond to the flags r&<…r'<}r(<(h\X8 for executables. For GHC these correspond to the flags hhNhvNhwhh]j<ubhç)r)<}r*<(h\X``-fprof-auto-exported``hl}r+<(hn]ho]hp]hq]ht]uh]j<hx]r,<hX-fprof-auto-exportedr-<…r.<}r/<(h\X-fprof-auto-exportedh]j)<ubahjhïubhX and r0<…r1<}r2<(h\X and r3<hhNhvNhwhh]j<ubhç)r4<}r5<(h\X``-fprof-auto-top``hl}r6<(hn]ho]hp]hq]ht]uh]j<hx]r7<hX-fprof-auto-topr8<…r9<}r:<(h\X-fprof-auto-toph]j4<ubahjhïubhX-. Prior to Cabal-1.24 the level defaulted to r;<…r<<}r=<(h\X-. Prior to Cabal-1.24 the level defaulted to hhNhvNhwhh]j<ubhç)r><}r?<(h\X``none``hl}r@<(hn]ho]hp]hq]ht]uh]j<hx]rA<hXnonerB<…rC<}rD<(h\Xnoneh]j><ubahjhïubhXK. These levels can be adjusted by the person building the package with the rE<…rF<}rG<(h\XK. These levels can be adjusted by the person building the package with the hhNhvNhwhh]j<ubhç)rH<}rI<(h\X``--profiling-detail``hl}rJ<(hn]ho]hp]hq]ht]uh]j<hx]rK<hX--profiling-detailrL<…rM<}rN<(h\X--profiling-detailh]jH<ubahjhïubhX and rO<…rP<}rQ<(h\j3<h]j<ubhç)rR<}rS<(h\X``--library-profiling-detail``hl}rT<(hn]ho]hp]hq]ht]uh]j<hx]rU<hX--library-profiling-detailrV<…rW<}rX<(h\X--library-profiling-detailh]jR<ubahjhïubhX flags.rY<…rZ<}r[<(h\X flags.hhNhvNhwhh]j<ubeubh…)r\<}r]<(h\X¯It is typically better for the person building the package to pick the profiling detail level rather than for the package author. So unless you have special needs it is probably better not to specify any of the GHC ``-fprof-auto*`` flags here. However if you wish to override the profiling detail level, you can do so using the :pkg-field:`ghc-prof-options` field: use ``-fno-prof-auto`` or one of the other ``-fprof-auto*`` flags.h]j<hhhihjh‰hl}r^<(hn]ho]hp]hq]ht]uhvM^ hwhhx]r_<(hX×It is typically better for the person building the package to pick the profiling detail level rather than for the package author. So unless you have special needs it is probably better not to specify any of the GHC r`<…ra<}rb<(h\X×It is typically better for the person building the package to pick the profiling detail level rather than for the package author. So unless you have special needs it is probably better not to specify any of the GHC hhNhvNhwhh]j\<ubhç)rc<}rd<(h\X``-fprof-auto*``hl}re<(hn]ho]hp]hq]ht]uh]j\<hx]rf<hX -fprof-auto*rg<…rh<}ri<(h\X -fprof-auto*h]jc<ubahjhïubhXa flags here. However if you wish to override the profiling detail level, you can do so using the rj<…rk<}rl<(h\Xa flags here. However if you wish to override the profiling detail level, you can do so using the hhNhvNhwhh]j\<ubjt)rm<}rn<(h\X:pkg-field:`ghc-prof-options`h]j\<hhhihjjwhl}ro<(UreftypeX pkg-fieldjyˆjzXghc-prof-optionsrp<U refdomainXcabalrq<hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM^ hx]rr<hç)rs<}rt<(h\jp<hl}ru<(hn]ho]rv<(j…jq<Xcabal-pkg-fieldrw<ehp]hq]ht]uh]jm<hx]rx<hXghc-prof-optionsry<…rz<}r{<(h\Uh]js<ubahjhïubaubhX field: use r|<…r}<}r~<(h\X field: use hhNhvNhwhh]j\<ubhç)r<}r€<(h\X``-fno-prof-auto``hl}r<(hn]ho]hp]hq]ht]uh]j\<hx]r‚<hX-fno-prof-autorƒ<…r„<}r…<(h\X-fno-prof-autoh]j<ubahjhïubhX or one of the other r†<…r‡<}rˆ<(h\X or one of the other hhNhvNhwhh]j\<ubhç)r‰<}rŠ<(h\X``-fprof-auto*``hl}r‹<(hn]ho]hp]hq]ht]uh]j\<hx]rŒ<hX -fprof-auto*r<…rŽ<}r<(h\X -fprof-auto*h]j‰<ubahjhïubhX flags.r<…r‘<}r’<(h\X flags.hhNhvNhwhh]j\<ubeubeubeubj*)r“<}r”<(h\Uh]j~/hhhihjj-hl}r•<(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r–<}r—<(h\Uh]j~/hhhihjj2hl}r˜<(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr™<j8j™<uhvNhwhhx]rš<(j:)r›<}rœ<(h\Xghc-shared-options: token listh]j–<hhhihjj>hl}r<(hq]rž<Xpkg-field-ghc-shared-optionsrŸ<ahp]hn]ho]ht]jB‰uhvMl hwhhx]r <(j*)r¡<}r¢<(h\Uh]j›<hhhihjj-hl}r£<(hq]hp]hn]ho]ht]Uentries]r¤<(jHX'ghc-shared-options; package.cabal fieldjŸ<UNtr¥<auhvMl hwhhx]ubjJ)r¦<}r§<(h\Xghc-shared-optionsr¨<h]j›<hhhihjjMhl}r©<(jÚjÛhq]hp]hn]ho]ht]uhvMl hwhhx]rª<hXghc-shared-optionsr«<…r¬<}r­<(h\UhhNhvNhwhh]j¦<ubaubjS)r®<}r¯<(h\jÌh]j›<hhhihjjVhl}r°<(jÚjÛhq]hp]hn]ho]ht]uhvMl hwhhx]r±<hX: r²<…r³<}r´<(h\UhhNhvNhwhh]j®<ubaubjÒ)rµ<}r¶<(h\X token listh]j›<hhhihjjÕhl}r·<(jÚjÛhq]hp]hn]ho]ht]uhvMl hwhhx]r¸<hX token listr¹<…rº<}r»<(h\UhhNhvNhwhh]jµ<ubaubeubj[)r¼<}r½<(h\Uh]j–<hhhihjj^hl}r¾<(hn]ho]hp]hq]ht]uhvMl hwhhx]r¿<h…)rÀ<}rÁ<(h\XîAdditional options for GHC when the package is built as shared library. The options specified via this field are combined with the ones specified via :pkg-field:`ghc-options`, and are passed to GHC during both the compile and link phases.h]j¼<hhhihjh‰hl}rÂ<(hn]ho]hp]hq]ht]uhvMh hwhhx]rÃ<(hX–Additional options for GHC when the package is built as shared library. The options specified via this field are combined with the ones specified via rÄ<…rÅ<}rÆ<(h\X–Additional options for GHC when the package is built as shared library. The options specified via this field are combined with the ones specified via hhNhvNhwhh]jÀ<ubjt)rÇ<}rÈ<(h\X:pkg-field:`ghc-options`h]jÀ<hhhihjjwhl}rÉ<(UreftypeX pkg-fieldjyˆjzX ghc-optionsrÊ<U refdomainXcabalrË<hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvMh hx]rÌ<hç)rÍ<}rÎ<(h\jÊ<hl}rÏ<(hn]ho]rÐ<(j…jË<Xcabal-pkg-fieldrÑ<ehp]hq]ht]uh]jÇ<hx]rÒ<hX ghc-optionsrÓ<…rÔ<}rÕ<(h\Uh]jÍ<ubahjhïubaubhX@, and are passed to GHC during both the compile and link phases.rÖ<…r×<}rØ<(h\X@, and are passed to GHC during both the compile and link phases.hhNhvNhwhh]jÀ<ubeubaubeubj*)rÙ<}rÚ<(h\Uh]j~/hhhihjj-hl}rÛ<(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rÜ<}rÝ<(h\Uh]j~/hhhihjj2hl}rÞ<(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrß<j8jß<uhvNhwhhx]rà<(j:)rá<}râ<(h\Xincludes: filename listh]jÜ<hhhihjj>hl}rã<(hq]rä<Xpkg-field-includesrå<ahp]hn]ho]ht]jB‰uhvM| hwhhx]ræ<(j*)rç<}rè<(h\Uh]já<hhhihjj-hl}ré<(hq]hp]hn]ho]ht]Uentries]rê<(jHXincludes; package.cabal fieldjå<UNtrë<auhvM| hwhhx]ubjJ)rì<}rí<(h\Xincludesrî<h]já<hhhihjjMhl}rï<(jÚjÛhq]hp]hn]ho]ht]uhvM| hwhhx]rð<hXincludesrñ<…rò<}ró<(h\UhhNhvNhwhh]jì<ubaubjS)rô<}rõ<(h\jÌh]já<hhhihjjVhl}rö<(jÚjÛhq]hp]hn]ho]ht]uhvM| hwhhx]r÷<hX: rø<…rù<}rú<(h\UhhNhvNhwhh]jô<ubaubjÒ)rû<}rü<(h\X filename listh]já<hhhihjjÕhl}rý<(jÚjÛhq]hp]hn]ho]ht]uhvM| hwhhx]rþ<hX filename listrÿ<…r=}r=(h\UhhNhvNhwhh]jû<ubaubeubj[)r=}r=(h\Uh]jÜ<hhhihjj^hl}r=(hn]ho]hp]hq]ht]uhvM| hwhhx]r=(h…)r=}r=(h\XA list of header files to be included in any compilations via C. This field applies to both header files that are already installed on the system and to those coming with the package to be installed. The former files should be found in absolute paths, while the latter files should be found in paths relative to the top of the source tree or relative to one of the directories listed in :pkg-field:`include-dirs`.h]j=hhhihjh‰hl}r=(hn]ho]hp]hq]ht]uhvMo hwhhx]r =(hXƒA list of header files to be included in any compilations via C. This field applies to both header files that are already installed on the system and to those coming with the package to be installed. The former files should be found in absolute paths, while the latter files should be found in paths relative to the top of the source tree or relative to one of the directories listed in r =…r =}r =(h\XƒA list of header files to be included in any compilations via C. This field applies to both header files that are already installed on the system and to those coming with the package to be installed. The former files should be found in absolute paths, while the latter files should be found in paths relative to the top of the source tree or relative to one of the directories listed in hhNhvNhwhh]j=ubjt)r =}r=(h\X:pkg-field:`include-dirs`h]j=hhhihjjwhl}r=(UreftypeX pkg-fieldjyˆjzX include-dirsr=U refdomainXcabalr=hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvMo hx]r=hç)r=}r=(h\j=hl}r=(hn]ho]r=(j…j=Xcabal-pkg-fieldr=ehp]hq]ht]uh]j =hx]r=hX include-dirsr=…r=}r=(h\Uh]j=ubahjhïubaubhX.…r=}r=(h\X.hhNhvNhwhh]j=ubeubh…)r=}r=(h\XThese files typically contain function prototypes for foreign imports used by the package. This is in contrast to :pkg-field:`install-includes`, which lists header files that are intended to be exposed to other packages that transitively depend on this library.h]j=hhhihjh‰hl}r =(hn]ho]hp]hq]ht]uhvMw hwhhx]r!=(hXrThese files typically contain function prototypes for foreign imports used by the package. This is in contrast to r"=…r#=}r$=(h\XrThese files typically contain function prototypes for foreign imports used by the package. This is in contrast to hhNhvNhwhh]j=ubjt)r%=}r&=(h\X:pkg-field:`install-includes`h]j=hhhihjjwhl}r'=(UreftypeX pkg-fieldjyˆjzXinstall-includesr(=U refdomainXcabalr)=hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvMw hx]r*=hç)r+=}r,=(h\j(=hl}r-=(hn]ho]r.=(j…j)=Xcabal-pkg-fieldr/=ehp]hq]ht]uh]j%=hx]r0=hXinstall-includesr1=…r2=}r3=(h\Uh]j+=ubahjhïubaubhXv, which lists header files that are intended to be exposed to other packages that transitively depend on this library.r4=…r5=}r6=(h\Xv, which lists header files that are intended to be exposed to other packages that transitively depend on this library.hhNhvNhwhh]j=ubeubeubeubj*)r7=}r8=(h\Uh]j~/hhhihjj-hl}r9=(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r:=}r;=(h\Uh]j~/hhhihjj2hl}r<=(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr==j8j==uhvNhwhhx]r>=(j:)r?=}r@=(h\Xinstall-includes: filename listh]j:=hhhihjj>hl}rA=(hq]rB=Xpkg-field-install-includesrC=ahp]hn]ho]ht]jB‰uhvM• hwhhx]rD=(j*)rE=}rF=(h\Uh]j?=hhhihjj-hl}rG=(hq]hp]hn]ho]ht]Uentries]rH=(jHX%install-includes; package.cabal fieldjC=UNtrI=auhvM• hwhhx]ubjJ)rJ=}rK=(h\Xinstall-includesrL=h]j?=hhhihjjMhl}rM=(jÚjÛhq]hp]hn]ho]ht]uhvM• hwhhx]rN=hXinstall-includesrO=…rP=}rQ=(h\UhhNhvNhwhh]jJ=ubaubjS)rR=}rS=(h\jÌh]j?=hhhihjjVhl}rT=(jÚjÛhq]hp]hn]ho]ht]uhvM• hwhhx]rU=hX: rV=…rW=}rX=(h\UhhNhvNhwhh]jR=ubaubjÒ)rY=}rZ=(h\X filename listh]j?=hhhihjjÕhl}r[=(jÚjÛhq]hp]hn]ho]ht]uhvM• hwhhx]r\=hX filename listr]=…r^=}r_=(h\UhhNhvNhwhh]jY=ubaubeubj[)r`=}ra=(h\Uh]j:=hhhihjj^hl}rb=(hn]ho]hp]hq]ht]uhvM• hwhhx]rc=(h…)rd=}re=(h\X$A list of header files from this package to be installed into ``$libdir/includes`` when the package is installed. Files listed in :pkg-field:`install-includes` should be found in relative to the top of the source tree or relative to one of the directories listed in :pkg-field:`include-dirs`.h]j`=hhhihjh‰hl}rf=(hn]ho]hp]hq]ht]uhvM hwhhx]rg=(hX>A list of header files from this package to be installed into rh=…ri=}rj=(h\X>A list of header files from this package to be installed into hhNhvNhwhh]jd=ubhç)rk=}rl=(h\X``$libdir/includes``hl}rm=(hn]ho]hp]hq]ht]uh]jd=hx]rn=hX$libdir/includesro=…rp=}rq=(h\X$libdir/includesh]jk=ubahjhïubhX0 when the package is installed. Files listed in rr=…rs=}rt=(h\X0 when the package is installed. Files listed in hhNhvNhwhh]jd=ubjt)ru=}rv=(h\X:pkg-field:`install-includes`h]jd=hhhihjjwhl}rw=(UreftypeX pkg-fieldjyˆjzXinstall-includesrx=U refdomainXcabalry=hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM hx]rz=hç)r{=}r|=(h\jx=hl}r}=(hn]ho]r~=(j…jy=Xcabal-pkg-fieldr=ehp]hq]ht]uh]ju=hx]r€=hXinstall-includesr=…r‚=}rƒ=(h\Uh]j{=ubahjhïubaubhXk should be found in relative to the top of the source tree or relative to one of the directories listed in r„=…r…=}r†=(h\Xk should be found in relative to the top of the source tree or relative to one of the directories listed in hhNhvNhwhh]jd=ubjt)r‡=}rˆ=(h\X:pkg-field:`include-dirs`h]jd=hhhihjjwhl}r‰=(UreftypeX pkg-fieldjyˆjzX include-dirsrŠ=U refdomainXcabalr‹=hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM hx]rŒ=hç)r=}rŽ=(h\jŠ=hl}r=(hn]ho]r=(j…j‹=Xcabal-pkg-fieldr‘=ehp]hq]ht]uh]j‡=hx]r’=hX include-dirsr“=…r”=}r•=(h\Uh]j=ubahjhïubaubhX.…r–=}r—=(h\X.hhNhvNhwhh]jd=ubeubh…)r˜=}r™=(h\X\:pkg-field:`install-includes` is typically used to name header files that contain prototypes for foreign imports used in Haskell code in this package, for which the C implementations are also provided with the package. For example, here is a ``.cabal`` file for a hypothetical ``bindings-clib`` package that bundles the C source code for ``clib``::h]j`=hhhihjh‰hl}rš=(hn]ho]hp]hq]ht]uhvM… hwhhx]r›=(jt)rœ=}r=(h\X:pkg-field:`install-includes`h]j˜=hhhihjjwhl}rž=(UreftypeX pkg-fieldjyˆjzXinstall-includesrŸ=U refdomainXcabalr =hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM… hx]r¡=hç)r¢=}r£=(h\jŸ=hl}r¤=(hn]ho]r¥=(j…j =Xcabal-pkg-fieldr¦=ehp]hq]ht]uh]jœ=hx]r§=hXinstall-includesr¨=…r©=}rª=(h\Uh]j¢=ubahjhïubaubhXÕ is typically used to name header files that contain prototypes for foreign imports used in Haskell code in this package, for which the C implementations are also provided with the package. For example, here is a r«=…r¬=}r­=(h\XÕ is typically used to name header files that contain prototypes for foreign imports used in Haskell code in this package, for which the C implementations are also provided with the package. For example, here is a hhNhvNhwhh]j˜=ubhç)r®=}r¯=(h\X ``.cabal``hl}r°=(hn]ho]hp]hq]ht]uh]j˜=hx]r±=hX.cabalr²=…r³=}r´=(h\X.cabalh]j®=ubahjhïubhX file for a hypothetical rµ=…r¶=}r·=(h\X file for a hypothetical hhNhvNhwhh]j˜=ubhç)r¸=}r¹=(h\X``bindings-clib``hl}rº=(hn]ho]hp]hq]ht]uh]j˜=hx]r»=hX bindings-clibr¼=…r½=}r¾=(h\X bindings-clibh]j¸=ubahjhïubhX, package that bundles the C source code for r¿=…rÀ=}rÁ=(h\X, package that bundles the C source code for hhNhvNhwhh]j˜=ubhç)rÂ=}rÃ=(h\X``clib``hl}rÄ=(hn]ho]hp]hq]ht]uh]j˜=hx]rÅ=hXclibrÆ=…rÇ=}rÈ=(h\Xclibh]jÂ=ubahjhïubhX:…rÉ=}rÊ=(h\X:hhNhvNhwhh]j˜=ubeubjÕ)rË=}rÌ=(h\XIinclude-dirs: cbits c-sources: clib.c install-includes: clib.hh]j`=hhhihjjØhl}rÍ=(jÚjÛhq]hp]hn]ho]ht]uhvM‹ hwhhx]rÎ=hXIinclude-dirs: cbits c-sources: clib.c install-includes: clib.hrÏ=…rÐ=}rÑ=(h\Uh]jË=ubaubh…)rÒ=}rÓ=(h\XlNow any package that depends (directly or transitively) on the ``bindings-clib`` library can use ``clib.h``.h]j`=hhhihjh‰hl}rÔ=(hn]ho]hp]hq]ht]uhvM hwhhx]rÕ=(hX?Now any package that depends (directly or transitively) on the rÖ=…r×=}rØ=(h\X?Now any package that depends (directly or transitively) on the hhNhvNhwhh]jÒ=ubhç)rÙ=}rÚ=(h\X``bindings-clib``hl}rÛ=(hn]ho]hp]hq]ht]uh]jÒ=hx]rÜ=hX bindings-clibrÝ=…rÞ=}rß=(h\X bindings-clibh]jÙ=ubahjhïubhX library can use rà=…rá=}râ=(h\X library can use hhNhvNhwhh]jÒ=ubhç)rã=}rä=(h\X ``clib.h``hl}rå=(hn]ho]hp]hq]ht]uh]jÒ=hx]ræ=hXclib.hrç=…rè=}ré=(h\Xclib.hh]jã=ubahjhïubhX.…rê=}rë=(h\X.hhNhvNhwhh]jÒ=ubeubh…)rì=}rí=(h\X·Note that in order for files listed in :pkg-field:`install-includes` to be usable when compiling the package itself, they need to be listed in the :pkg-field:`includes` field as well.h]j`=hhhihjh‰hl}rî=(hn]ho]hp]hq]ht]uhvM’ hwhhx]rï=(hX'Note that in order for files listed in rð=…rñ=}rò=(h\X'Note that in order for files listed in hhNhvNhwhh]jì=ubjt)ró=}rô=(h\X:pkg-field:`install-includes`h]jì=hhhihjjwhl}rõ=(UreftypeX pkg-fieldjyˆjzXinstall-includesrö=U refdomainXcabalr÷=hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM’ hx]rø=hç)rù=}rú=(h\jö=hl}rû=(hn]ho]rü=(j…j÷=Xcabal-pkg-fieldrý=ehp]hq]ht]uh]jó=hx]rþ=hXinstall-includesrÿ=…r>}r>(h\Uh]jù=ubahjhïubaubhXO to be usable when compiling the package itself, they need to be listed in the r>…r>}r>(h\XO to be usable when compiling the package itself, they need to be listed in the hhNhvNhwhh]jì=ubjt)r>}r>(h\X:pkg-field:`includes`h]jì=hhhihjjwhl}r>(UreftypeX pkg-fieldjyˆjzXincludesr>U refdomainXcabalr >hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM’ hx]r >hç)r >}r >(h\j>hl}r >(hn]ho]r>(j…j >Xcabal-pkg-fieldr>ehp]hq]ht]uh]j>hx]r>hXincludesr>…r>}r>(h\Uh]j >ubahjhïubaubhX field as well.r>…r>}r>(h\X field as well.hhNhvNhwhh]jì=ubeubeubeubj*)r>}r>(h\Uh]j~/hhhihjj-hl}r>(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r>}r>(h\Uh]j~/hhhihjj2hl}r>(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr>j8j>uhvNhwhhx]r>(j:)r>}r >(h\Xinclude-dirs: directory listh]j>hhhihjj>hl}r!>(hq]r">Xpkg-field-include-dirsr#>ahp]hn]ho]ht]jB‰uhvMŸ hwhhx]r$>(j*)r%>}r&>(h\Uh]j>hhhihjj-hl}r'>(hq]hp]hn]ho]ht]Uentries]r(>(jHX!include-dirs; package.cabal fieldj#>UNtr)>auhvMŸ hwhhx]ubjJ)r*>}r+>(h\X include-dirsr,>h]j>hhhihjjMhl}r->(jÚjÛhq]hp]hn]ho]ht]uhvMŸ hwhhx]r.>hX include-dirsr/>…r0>}r1>(h\UhhNhvNhwhh]j*>ubaubjS)r2>}r3>(h\jÌh]j>hhhihjjVhl}r4>(jÚjÛhq]hp]hn]ho]ht]uhvMŸ hwhhx]r5>hX: r6>…r7>}r8>(h\UhhNhvNhwhh]j2>ubaubjÒ)r9>}r:>(h\Xdirectory listh]j>hhhihjjÕhl}r;>(jÚjÛhq]hp]hn]ho]ht]uhvMŸ hwhhx]r<>hXdirectory listr=>…r>>}r?>(h\UhhNhvNhwhh]j9>ubaubeubj[)r@>}rA>(h\Uh]j>hhhihjj^hl}rB>(hn]ho]hp]hq]ht]uhvMŸ hwhhx]rC>h…)rD>}rE>(h\XžA list of directories to search for header files, when preprocessing with ``c2hs``, ``hsc2hs``, ``cpphs`` or the C preprocessor, and also when compiling via C. Directories can be absolute paths (e.g., for system directories) or paths that are relative to the top of the source tree. Cabal looks in these directories when attempting to locate files listed in :pkg-field:`includes` and :pkg-field:`install-includes`.h]j@>hhhihjh‰hl}rF>(hn]ho]hp]hq]ht]uhvM˜ hwhhx]rG>(hXJA list of directories to search for header files, when preprocessing with rH>…rI>}rJ>(h\XJA list of directories to search for header files, when preprocessing with hhNhvNhwhh]jD>ubhç)rK>}rL>(h\X``c2hs``hl}rM>(hn]ho]hp]hq]ht]uh]jD>hx]rN>hXc2hsrO>…rP>}rQ>(h\Xc2hsh]jK>ubahjhïubhX, rR>…rS>}rT>(h\X, rU>hhNhvNhwhh]jD>ubhç)rV>}rW>(h\X ``hsc2hs``hl}rX>(hn]ho]hp]hq]ht]uh]jD>hx]rY>hXhsc2hsrZ>…r[>}r\>(h\Xhsc2hsh]jV>ubahjhïubhX, r]>…r^>}r_>(h\jU>h]jD>ubhç)r`>}ra>(h\X ``cpphs``hl}rb>(hn]ho]hp]hq]ht]uh]jD>hx]rc>hXcpphsrd>…re>}rf>(h\Xcpphsh]j`>ubahjhïubhXý or the C preprocessor, and also when compiling via C. Directories can be absolute paths (e.g., for system directories) or paths that are relative to the top of the source tree. Cabal looks in these directories when attempting to locate files listed in rg>…rh>}ri>(h\Xý or the C preprocessor, and also when compiling via C. Directories can be absolute paths (e.g., for system directories) or paths that are relative to the top of the source tree. Cabal looks in these directories when attempting to locate files listed in hhNhvNhwhh]jD>ubjt)rj>}rk>(h\X:pkg-field:`includes`h]jD>hhhihjjwhl}rl>(UreftypeX pkg-fieldjyˆjzXincludesrm>U refdomainXcabalrn>hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM˜ hx]ro>hç)rp>}rq>(h\jm>hl}rr>(hn]ho]rs>(j…jn>Xcabal-pkg-fieldrt>ehp]hq]ht]uh]jj>hx]ru>hXincludesrv>…rw>}rx>(h\Uh]jp>ubahjhïubaubhX and ry>…rz>}r{>(h\X and hhNhvNhwhh]jD>ubjt)r|>}r}>(h\X:pkg-field:`install-includes`h]jD>hhhihjjwhl}r~>(UreftypeX pkg-fieldjyˆjzXinstall-includesr>U refdomainXcabalr€>hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM˜ hx]r>hç)r‚>}rƒ>(h\j>hl}r„>(hn]ho]r…>(j…j€>Xcabal-pkg-fieldr†>ehp]hq]ht]uh]j|>hx]r‡>hXinstall-includesrˆ>…r‰>}rŠ>(h\Uh]j‚>ubahjhïubaubhX.…r‹>}rŒ>(h\X.hhNhvNhwhh]jD>ubeubaubeubj*)r>}rŽ>(h\Uh]j~/hhhihjj-hl}r>(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r>}r‘>(h\Uh]j~/hhhihjj2hl}r’>(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr“>j8j“>uhvNhwhhx]r”>(j:)r•>}r–>(h\Xc-sources: filename listh]j>hhhihjj>hl}r—>(hq]r˜>Xpkg-field-c-sourcesr™>ahp]hn]ho]ht]jB‰uhvM¤ hwhhx]rš>(j*)r›>}rœ>(h\Uh]j•>hhhihjj-hl}r>(hq]hp]hn]ho]ht]Uentries]rž>(jHXc-sources; package.cabal fieldj™>UNtrŸ>auhvM¤ hwhhx]ubjJ)r >}r¡>(h\X c-sourcesr¢>h]j•>hhhihjjMhl}r£>(jÚjÛhq]hp]hn]ho]ht]uhvM¤ hwhhx]r¤>hX c-sourcesr¥>…r¦>}r§>(h\UhhNhvNhwhh]j >ubaubjS)r¨>}r©>(h\jÌh]j•>hhhihjjVhl}rª>(jÚjÛhq]hp]hn]ho]ht]uhvM¤ hwhhx]r«>hX: r¬>…r­>}r®>(h\UhhNhvNhwhh]j¨>ubaubjÒ)r¯>}r°>(h\X filename listh]j•>hhhihjjÕhl}r±>(jÚjÛhq]hp]hn]ho]ht]uhvM¤ hwhhx]r²>hX filename listr³>…r´>}rµ>(h\UhhNhvNhwhh]j¯>ubaubeubj[)r¶>}r·>(h\Uh]j>hhhihjj^hl}r¸>(hn]ho]hp]hq]ht]uhvM¤ hwhhx]r¹>h…)rº>}r»>(h\XJA list of C source files to be compiled and linked with the Haskell files.r¼>h]j¶>hhhihjh‰hl}r½>(hn]ho]hp]hq]ht]uhvM¢ hwhhx]r¾>hXJA list of C source files to be compiled and linked with the Haskell files.r¿>…rÀ>}rÁ>(h\j¼>hhNhvNhwhh]jº>ubaubaubeubj*)rÂ>}rÃ>(h\Uh]j~/hhhihjj-hl}rÄ>(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rÅ>}rÆ>(h\Uh]j~/hhhihjj2hl}rÇ>(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrÈ>j8jÈ>uhvNhwhhx]rÉ>(j:)rÊ>}rË>(h\Xcxx-sources: filename listh]jÅ>hhhihjj>hl}rÌ>(hq]rÍ>Xpkg-field-cxx-sourcesrÎ>ahp]hn]ho]ht]jB‰uhvNhwhhx]rÏ>(j*)rÐ>}rÑ>(h\Uh]jÊ>hhhihjj-hl}rÒ>(hq]hp]hn]ho]ht]Uentries]rÓ>(jHX cxx-sources; package.cabal fieldjÎ>UNtrÔ>auhvNhwhhx]ubjJ)rÕ>}rÖ>(h\X cxx-sourcesr×>h]jÊ>hhhihjjMhl}rØ>(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rÙ>hX cxx-sourcesrÚ>…rÛ>}rÜ>(h\UhhNhvNhwhh]jÕ>ubaubjS)rÝ>}rÞ>(h\jÌh]jÊ>hhhihjjVhl}rß>(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rà>hX: rá>…râ>}rã>(h\UhhNhvNhwhh]jÝ>ubaubjÒ)rä>}rå>(h\X filename listh]jÊ>hhhihjjÕhl}ræ>(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rç>hX filename listrè>…ré>}rê>(h\UhhNhvNhwhh]jä>ubaubeubj[)rë>}rì>(h\Uh]jÅ>hhhihjj^hl}rí>(hn]ho]hp]hq]ht]uhvNhwhhx]rî>(ja)rï>}rð>(h\Uh]jë>hhhihjjdhl}rñ>(hn]ho]hp]hq]ht]uhvNhwhhx]rò>jg)ró>}rô>(h\Uh]jï>hhhihjjjhl}rõ>(hn]ho]hp]hq]ht]uhvNhwhhx]rö>(jm)r÷>}rø>(h\jph]jó>hhhihjjqhl}rù>(hn]ho]hp]hq]ht]uhvKhx]rú>hXSincerû>…rü>}rý>(h\Uh]j÷>ubaubjw)rþ>}rÿ>(h\U Cabal 2.2r?hl}r?(hn]ho]hp]hq]ht]uh]jó>hx]r?h…)r?}r?(h\j?hl}r?(hn]ho]hp]hq]ht]uh]jþ>hx]r?hX Cabal 2.2r?…r?}r ?(h\Uh]j?ubahjh‰ubahjj„ubeubaubh…)r ?}r ?(h\X­A list of C++ source files to be compiled and linked with the Haskell files. Useful for segregating C and C++ sources when supplying different command-line arguments to the compiler via the :pkg-field:`cc-options` and the :pkg-field:`cxx-options` fields. The files listed in the :pkg-field:`cxx-sources` can reference files listed in the :pkg-field:`c-sources` field and vice-versa. The object files will be linked appropriately.h]jë>hhhihjh‰hl}r ?(hn]ho]hp]hq]ht]uhvM¨ hwhhx]r ?(hX¾A list of C++ source files to be compiled and linked with the Haskell files. Useful for segregating C and C++ sources when supplying different command-line arguments to the compiler via the r?…r?}r?(h\X¾A list of C++ source files to be compiled and linked with the Haskell files. Useful for segregating C and C++ sources when supplying different command-line arguments to the compiler via the hhNhvNhwhh]j ?ubjt)r?}r?(h\X:pkg-field:`cc-options`h]j ?hhhihjjwhl}r?(UreftypeX pkg-fieldjyˆjzX cc-optionsr?U refdomainXcabalr?hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM¨ hx]r?hç)r?}r?(h\j?hl}r?(hn]ho]r?(j…j?Xcabal-pkg-fieldr?ehp]hq]ht]uh]j?hx]r?hX cc-optionsr?…r?}r?(h\Uh]j?ubahjhïubaubhX and the r ?…r!?}r"?(h\X and the hhNhvNhwhh]j ?ubjt)r#?}r$?(h\X:pkg-field:`cxx-options`h]j ?hhhihjjwhl}r%?(UreftypeX pkg-fieldjyˆjzX cxx-optionsr&?U refdomainXcabalr'?hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM¨ hx]r(?hç)r)?}r*?(h\j&?hl}r+?(hn]ho]r,?(j…j'?Xcabal-pkg-fieldr-?ehp]hq]ht]uh]j#?hx]r.?hX cxx-optionsr/?…r0?}r1?(h\Uh]j)?ubahjhïubaubhX! fields. The files listed in the r2?…r3?}r4?(h\X! fields. The files listed in the hhNhvNhwhh]j ?ubjt)r5?}r6?(h\X:pkg-field:`cxx-sources`h]j ?hhhihjjwhl}r7?(UreftypeX pkg-fieldjyˆjzX cxx-sourcesr8?U refdomainXcabalr9?hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM¨ hx]r:?hç)r;?}r?(j…j9?Xcabal-pkg-fieldr??ehp]hq]ht]uh]j5?hx]r@?hX cxx-sourcesrA?…rB?}rC?(h\Uh]j;?ubahjhïubaubhX# can reference files listed in the rD?…rE?}rF?(h\X# can reference files listed in the hhNhvNhwhh]j ?ubjt)rG?}rH?(h\X:pkg-field:`c-sources`h]j ?hhhihjjwhl}rI?(UreftypeX pkg-fieldjyˆjzX c-sourcesrJ?U refdomainXcabalrK?hq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM¨ hx]rL?hç)rM?}rN?(h\jJ?hl}rO?(hn]ho]rP?(j…jK?Xcabal-pkg-fieldrQ?ehp]hq]ht]uh]jG?hx]rR?hX c-sourcesrS?…rT?}rU?(h\Uh]jM?ubahjhïubaubhXE field and vice-versa. The object files will be linked appropriately.rV?…rW?}rX?(h\XE field and vice-versa. The object files will be linked appropriately.hhNhvNhwhh]j ?ubeubeubeubj*)rY?}rZ?(h\Uh]j~/hhhihjj-hl}r[?(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r\?}r]?(h\Uh]j~/hhhihjj2hl}r^?(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr_?j8j_?uhvNhwhhx]r`?(j:)ra?}rb?(h\Xasm-sources: filename listh]j\?hhhihjj>hl}rc?(hq]rd?Xpkg-field-asm-sourcesre?ahp]hn]ho]ht]jB‰uhvNhwhhx]rf?(j*)rg?}rh?(h\Uh]ja?hhhihjj-hl}ri?(hq]hp]hn]ho]ht]Uentries]rj?(jHX asm-sources; package.cabal fieldje?UNtrk?auhvNhwhhx]ubjJ)rl?}rm?(h\X asm-sourcesrn?h]ja?hhhihjjMhl}ro?(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rp?hX asm-sourcesrq?…rr?}rs?(h\UhhNhvNhwhh]jl?ubaubjS)rt?}ru?(h\jÌh]ja?hhhihjjVhl}rv?(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rw?hX: rx?…ry?}rz?(h\UhhNhvNhwhh]jt?ubaubjÒ)r{?}r|?(h\X filename listh]ja?hhhihjjÕhl}r}?(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r~?hX filename listr?…r€?}r?(h\UhhNhvNhwhh]j{?ubaubeubj[)r‚?}rƒ?(h\Uh]j\?hhhihjj^hl}r„?(hn]ho]hp]hq]ht]uhvNhwhhx]r…?(ja)r†?}r‡?(h\Uh]j‚?hhhihjjdhl}rˆ?(hn]ho]hp]hq]ht]uhvNhwhhx]r‰?jg)rŠ?}r‹?(h\Uh]j†?hhhihjjjhl}rŒ?(hn]ho]hp]hq]ht]uhvNhwhhx]r?(jm)rŽ?}r?(h\jph]jŠ?hhhihjjqhl}r?(hn]ho]hp]hq]ht]uhvKhx]r‘?hXSincer’?…r“?}r”?(h\Uh]jŽ?ubaubjw)r•?}r–?(h\U Cabal 3.0r—?hl}r˜?(hn]ho]hp]hq]ht]uh]jŠ?hx]r™?h…)rš?}r›?(h\j—?hl}rœ?(hn]ho]hp]hq]ht]uh]j•?hx]r?hX Cabal 3.0rž?…rŸ?}r ?(h\Uh]jš?ubahjh‰ubahjj„ubeubaubh…)r¡?}r¢?(h\XQA list of assembly source files to be compiled and linked with the Haskell files.r£?h]j‚?hhhihjh‰hl}r¤?(hn]ho]hp]hq]ht]uhvM³ hwhhx]r¥?hXQA list of assembly source files to be compiled and linked with the Haskell files.r¦?…r§?}r¨?(h\j£?hhNhvNhwhh]j¡?ubaubeubeubj*)r©?}rª?(h\Uh]j~/hhhihjj-hl}r«?(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r¬?}r­?(h\Uh]j~/hhhihjj2hl}r®?(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr¯?j8j¯?uhvNhwhhx]r°?(j:)r±?}r²?(h\Xcmm-sources: filename listh]j¬?hhhihjj>hl}r³?(hq]r´?Xpkg-field-cmm-sourcesrµ?ahp]hn]ho]ht]jB‰uhvNhwhhx]r¶?(j*)r·?}r¸?(h\Uh]j±?hhhihjj-hl}r¹?(hq]hp]hn]ho]ht]Uentries]rº?(jHX cmm-sources; package.cabal fieldjµ?UNtr»?auhvNhwhhx]ubjJ)r¼?}r½?(h\X cmm-sourcesr¾?h]j±?hhhihjjMhl}r¿?(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rÀ?hX cmm-sourcesrÁ?…rÂ?}rÃ?(h\UhhNhvNhwhh]j¼?ubaubjS)rÄ?}rÅ?(h\jÌh]j±?hhhihjjVhl}rÆ?(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rÇ?hX: rÈ?…rÉ?}rÊ?(h\UhhNhvNhwhh]jÄ?ubaubjÒ)rË?}rÌ?(h\X filename listh]j±?hhhihjjÕhl}rÍ?(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rÎ?hX filename listrÏ?…rÐ?}rÑ?(h\UhhNhvNhwhh]jË?ubaubeubj[)rÒ?}rÓ?(h\Uh]j¬?hhhihjj^hl}rÔ?(hn]ho]hp]hq]ht]uhvNhwhhx]rÕ?(ja)rÖ?}r×?(h\Uh]jÒ?hhhihjjdhl}rØ?(hn]ho]hp]hq]ht]uhvNhwhhx]rÙ?jg)rÚ?}rÛ?(h\Uh]jÖ?hhhihjjjhl}rÜ?(hn]ho]hp]hq]ht]uhvNhwhhx]rÝ?(jm)rÞ?}rß?(h\jph]jÚ?hhhihjjqhl}rà?(hn]ho]hp]hq]ht]uhvKhx]rá?hXSincerâ?…rã?}rä?(h\Uh]jÞ?ubaubjw)rå?}ræ?(h\U Cabal 3.0rç?hl}rè?(hn]ho]hp]hq]ht]uh]jÚ?hx]ré?h…)rê?}rë?(h\jç?hl}rì?(hn]ho]hp]hq]ht]uh]jå?hx]rí?hX Cabal 3.0rî?…rï?}rð?(h\Uh]jê?ubahjh‰ubahjj„ubeubaubh…)rñ?}rò?(h\XLA list of C-- source files to be compiled and linked with the Haskell files.ró?h]jÒ?hhhihjh‰hl}rô?(hn]ho]hp]hq]ht]uhvM¹ hwhhx]rõ?hXMA list of C– source files to be compiled and linked with the Haskell files.rö?…r÷?}rø?(h\jó?hhNhvNhwhh]jñ?ubaubeubeubj*)rù?}rú?(h\Uh]j~/hhhihjj-hl}rû?(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rü?}rý?(h\Uh]j~/hhhihjj2hl}rþ?(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrÿ?j8jÿ?uhvNhwhhx]r@(j:)r@}r@(h\Xjs-sources: filename listh]jü?hhhihjj>hl}r@(hq]r@Xpkg-field-js-sourcesr@ahp]hn]ho]ht]jB‰uhvMÀ hwhhx]r@(j*)r@}r@(h\Uh]j@hhhihjj-hl}r @(hq]hp]hn]ho]ht]Uentries]r @(jHXjs-sources; package.cabal fieldj@UNtr @auhvMÀ hwhhx]ubjJ)r @}r @(h\X js-sourcesr@h]j@hhhihjjMhl}r@(jÚjÛhq]hp]hn]ho]ht]uhvMÀ hwhhx]r@hX js-sourcesr@…r@}r@(h\UhhNhvNhwhh]j @ubaubjS)r@}r@(h\jÌh]j@hhhihjjVhl}r@(jÚjÛhq]hp]hn]ho]ht]uhvMÀ hwhhx]r@hX: r@…r@}r@(h\UhhNhvNhwhh]j@ubaubjÒ)r@}r@(h\X filename listh]j@hhhihjjÕhl}r@(jÚjÛhq]hp]hn]ho]ht]uhvMÀ hwhhx]r@hX filename listr@…r @}r!@(h\UhhNhvNhwhh]j@ubaubeubj[)r"@}r#@(h\Uh]jü?hhhihjj^hl}r$@(hn]ho]hp]hq]ht]uhvMÀ hwhhx]r%@h…)r&@}r'@(h\XdA list of JavaScript source files to be linked with the Haskell files (only for JavaScript targets).r(@h]j"@hhhihjh‰hl}r)@(hn]ho]hp]hq]ht]uhvM¾ hwhhx]r*@hXdA list of JavaScript source files to be linked with the Haskell files (only for JavaScript targets).r+@…r,@}r-@(h\j(@hhNhvNhwhh]j&@ubaubaubeubj*)r.@}r/@(h\Uh]j~/hhhihjj-hl}r0@(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r1@}r2@(h\Uh]j~/hhhihjj2hl}r3@(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr4@j8j4@uhvNhwhhx]r5@(j:)r6@}r7@(h\Xextra-libraries: token listh]j1@hhhihjj>hl}r8@(hq]r9@Xpkg-field-extra-librariesr:@ahp]hn]ho]ht]jB‰uhvMÄ hwhhx]r;@(j*)r<@}r=@(h\Uh]j6@hhhihjj-hl}r>@(hq]hp]hn]ho]ht]Uentries]r?@(jHX$extra-libraries; package.cabal fieldj:@UNtr@@auhvMÄ hwhhx]ubjJ)rA@}rB@(h\Xextra-librariesrC@h]j6@hhhihjjMhl}rD@(jÚjÛhq]hp]hn]ho]ht]uhvMÄ hwhhx]rE@hXextra-librariesrF@…rG@}rH@(h\UhhNhvNhwhh]jA@ubaubjS)rI@}rJ@(h\jÌh]j6@hhhihjjVhl}rK@(jÚjÛhq]hp]hn]ho]ht]uhvMÄ hwhhx]rL@hX: rM@…rN@}rO@(h\UhhNhvNhwhh]jI@ubaubjÒ)rP@}rQ@(h\X token listh]j6@hhhihjjÕhl}rR@(jÚjÛhq]hp]hn]ho]ht]uhvMÄ hwhhx]rS@hX token listrT@…rU@}rV@(h\UhhNhvNhwhh]jP@ubaubeubj[)rW@}rX@(h\Uh]j1@hhhihjj^hl}rY@(hn]ho]hp]hq]ht]uhvMÄ hwhhx]rZ@h…)r[@}r\@(h\X'A list of extra libraries to link with.r]@h]jW@hhhihjh‰hl}r^@(hn]ho]hp]hq]ht]uhvMà hwhhx]r_@hX'A list of extra libraries to link with.r`@…ra@}rb@(h\j]@hhNhvNhwhh]j[@ubaubaubeubj*)rc@}rd@(h\Uh]j~/hhhihjj-hl}re@(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rf@}rg@(h\Uh]j~/hhhihjj2hl}rh@(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldri@j8ji@uhvNhwhhx]rj@(j:)rk@}rl@(h\X extra-ghci-libraries: token listh]jf@hhhihjj>hl}rm@(hq]rn@Xpkg-field-extra-ghci-librariesro@ahp]hn]ho]ht]jB‰uhvMÉ hwhhx]rp@(j*)rq@}rr@(h\Uh]jk@hhhihjj-hl}rs@(hq]hp]hn]ho]ht]Uentries]rt@(jHX)extra-ghci-libraries; package.cabal fieldjo@UNtru@auhvMÉ hwhhx]ubjJ)rv@}rw@(h\Xextra-ghci-librariesrx@h]jk@hhhihjjMhl}ry@(jÚjÛhq]hp]hn]ho]ht]uhvMÉ hwhhx]rz@hXextra-ghci-librariesr{@…r|@}r}@(h\UhhNhvNhwhh]jv@ubaubjS)r~@}r@(h\jÌh]jk@hhhihjjVhl}r€@(jÚjÛhq]hp]hn]ho]ht]uhvMÉ hwhhx]r@hX: r‚@…rƒ@}r„@(h\UhhNhvNhwhh]j~@ubaubjÒ)r…@}r†@(h\X token listh]jk@hhhihjjÕhl}r‡@(jÚjÛhq]hp]hn]ho]ht]uhvMÉ hwhhx]rˆ@hX token listr‰@…rŠ@}r‹@(h\UhhNhvNhwhh]j…@ubaubeubj[)rŒ@}r@(h\Uh]jf@hhhihjj^hl}rŽ@(hn]ho]hp]hq]ht]uhvMÉ hwhhx]r@h…)r@}r‘@(h\XgA list of extra libraries to be used instead of 'extra-libraries' when the package is loaded with GHCi.r’@h]jŒ@hhhihjh‰hl}r“@(hn]ho]hp]hq]ht]uhvMÇ hwhhx]r”@hXkA list of extra libraries to be used instead of ‘extra-libraries’ when the package is loaded with GHCi.r•@…r–@}r—@(h\j’@hhNhvNhwhh]j@ubaubaubeubj*)r˜@}r™@(h\Uh]j~/hhhihjj-hl}rš@(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r›@}rœ@(h\Uh]j~/hhhihjj2hl}r@(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrž@j8jž@uhvNhwhhx]rŸ@(j:)r @}r¡@(h\X#extra-bundled-libraries: token listh]j›@hhhihjj>hl}r¢@(hq]r£@X!pkg-field-extra-bundled-librariesr¤@ahp]hn]ho]ht]jB‰uhvNhwhhx]r¥@(j*)r¦@}r§@(h\Uh]j @hhhihjj-hl}r¨@(hq]hp]hn]ho]ht]Uentries]r©@(jHX,extra-bundled-libraries; package.cabal fieldj¤@UNtrª@auhvNhwhhx]ubjJ)r«@}r¬@(h\Xextra-bundled-librariesr­@h]j @hhhihjjMhl}r®@(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r¯@hXextra-bundled-librariesr°@…r±@}r²@(h\UhhNhvNhwhh]j«@ubaubjS)r³@}r´@(h\jÌh]j @hhhihjjVhl}rµ@(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r¶@hX: r·@…r¸@}r¹@(h\UhhNhvNhwhh]j³@ubaubjÒ)rº@}r»@(h\X token listh]j @hhhihjjÕhl}r¼@(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r½@hX token listr¾@…r¿@}rÀ@(h\UhhNhvNhwhh]jº@ubaubeubj[)rÁ@}rÂ@(h\Uh]j›@hhhihjj^hl}rÃ@(hn]ho]hp]hq]ht]uhvNhwhhx]rÄ@(ja)rÅ@}rÆ@(h\Uh]jÁ@hhhihjjdhl}rÇ@(hn]ho]hp]hq]ht]uhvNhwhhx]rÈ@jg)rÉ@}rÊ@(h\Uh]jÅ@hhhihjjjhl}rË@(hn]ho]hp]hq]ht]uhvNhwhhx]rÌ@(jm)rÍ@}rÎ@(h\jph]jÉ@hhhihjjqhl}rÏ@(hn]ho]hp]hq]ht]uhvKhx]rÐ@hXSincerÑ@…rÒ@}rÓ@(h\Uh]jÍ@ubaubjw)rÔ@}rÕ@(h\U Cabal 2.2rÖ@hl}r×@(hn]ho]hp]hq]ht]uh]jÉ@hx]rØ@h…)rÙ@}rÚ@(h\jÖ@hl}rÛ@(hn]ho]hp]hq]ht]uh]jÔ@hx]rÜ@hX Cabal 2.2rÝ@…rÞ@}rß@(h\Uh]jÙ@ubahjh‰ubahjj„ubeubaubh…)rà@}rá@(h\XñA list of libraries that are supposed to be copied from the build directory alongside the produced Haskell libraries. Note that you are under the obligation to produce those libraries in the build directory (e.g. via a custom setup). Libraries listed here will be included when ``copy``-ing packages and be listed in the ``hs-libraries`` of the package configuration in the package database. Library names must either be prefixed with "HS" or "C" and corresponding library file names must match:h]jÁ@hhhihjh‰hl}râ@(hn]ho]hp]hq]ht]uhvMÍ hwhhx]rã@(hXA list of libraries that are supposed to be copied from the build directory alongside the produced Haskell libraries. Note that you are under the obligation to produce those libraries in the build directory (e.g. via a custom setup). Libraries listed here will be included when rä@…rå@}ræ@(h\XA list of libraries that are supposed to be copied from the build directory alongside the produced Haskell libraries. Note that you are under the obligation to produce those libraries in the build directory (e.g. via a custom setup). Libraries listed here will be included when hhNhvNhwhh]jà@ubhç)rç@}rè@(h\X``copy``hl}ré@(hn]ho]hp]hq]ht]uh]jà@hx]rê@hXcopyrë@…rì@}rí@(h\Xcopyh]jç@ubahjhïubhX#-ing packages and be listed in the rî@…rï@}rð@(h\X#-ing packages and be listed in the hhNhvNhwhh]jà@ubhç)rñ@}rò@(h\X``hs-libraries``hl}ró@(hn]ho]hp]hq]ht]uh]jà@hx]rô@hX hs-librariesrõ@…rö@}r÷@(h\X hs-librariesh]jñ@ubahjhïubhX¦ of the package configuration in the package database. Library names must either be prefixed with “HS†or “C†and corresponding library file names must match:rø@…rù@}rú@(h\Xž of the package configuration in the package database. Library names must either be prefixed with "HS" or "C" and corresponding library file names must match:hhNhvNhwhh]jà@ubeubj' )rû@}rü@(h\Uh]jÁ@hhNhjj* hl}rý@(hn]ho]hp]hq]ht]uhvNhwhhx]rþ@h)rÿ@}rA(h\Uh]jû@hhhihjh’hl}rA(h”X-hq]hp]hn]ho]ht]uhvMÖ hx]rA(h–)rA}rA(h\X’Libraries with name "HS": - `libHS.a` - `libHS-ghc.*`hl}rA(hn]ho]hp]hq]ht]uh]jÿ@hx]rAj)rA}rA(h\Uhl}r A(hn]ho]hp]hq]ht]uh]jAhx]r Aj)r A}r A(h\XLibraries with name "HS": - `libHS.a` - `libHS-ghc.*`h]jAhhhihjj!hl}r A(hn]ho]hp]hq]ht]uhvM× hx]rA(j$)rA}rA(h\X'Libraries with name "HS":rAh]j Ahhhihjj(hl}rA(hn]ho]hp]hq]ht]uhvM× hx]rAhX+Libraries with name “HSâ€:rA…rA}rA(h\jAh]jAubaubj<)rA}rA(h\Uhl}rA(hn]ho]hp]hq]ht]uh]j Ahx]rAh)rA}rA(h\Uh]jAhhhihjh’hl}rA(h”X-hq]hp]hn]ho]ht]uhvM× hx]rA(h–)rA}r A(h\X`libHS.a`r!Ahl}r"A(hn]ho]hp]hq]ht]uh]jAhx]r#Ah…)r$A}r%A(h\j!Ah]jAhhhihjh‰hl}r&A(hn]ho]hp]hq]ht]uhvM× hx]r'Ajª()r(A}r)A(h\j!Ahl}r*A(hn]ho]hp]hq]ht]uh]j$Ahx]r+AhXlibHS.ar,A…r-A}r.A(h\XlibHS.ah]j(Aubahjj²(ubaubahjh™ubh–)r/A}r0A(h\XL`libHS-ghc.*`r1Ahl}r2A(hn]ho]hp]hq]ht]uh]jAhx]r3Ah…)r4A}r5A(h\j1Ah]j/Ahhhihjh‰hl}r6A(hn]ho]hp]hq]ht]uhvMØ hx]r7Ajª()r8A}r9A(h\j1Ahl}r:A(hn]ho]hp]hq]ht]uh]j4Ahx]r;AhXJlibHS-ghc.*rA(h\XJlibHS-ghc.*h]j8Aubahjj²(ubaubahjh™ubeubahjjVubeubahjjubahjh™ubh–)r?A}r@A(h\XpLibraries with name "C": - `libC.a` - `lib.*`hl}rAA(hn]ho]hp]hq]ht]uh]jÿ@hx]rBAj)rCA}rDA(h\Uhl}rEA(hn]ho]hp]hq]ht]uh]j?Ahx]rFAj)rGA}rHA(h\XnLibraries with name "C": - `libC.a` - `lib.*`h]jCAhhhihjj!hl}rIA(hn]ho]hp]hq]ht]uhvMÚ hx]rJA(j$)rKA}rLA(h\X&Libraries with name "C":rMAh]jGAhhhihjj(hl}rNA(hn]ho]hp]hq]ht]uhvMÚ hx]rOAhX*Libraries with name “Câ€:rPA…rQA}rRA(h\jMAh]jKAubaubj<)rSA}rTA(h\Uhl}rUA(hn]ho]hp]hq]ht]uh]jGAhx]rVAh)rWA}rXA(h\Uh]jSAhhhihjh’hl}rYA(h”X-hq]hp]hn]ho]ht]uhvMÚ hx]rZA(h–)r[A}r\A(h\X`libC.a`r]Ahl}r^A(hn]ho]hp]hq]ht]uh]jWAhx]r_Ah…)r`A}raA(h\j]Ah]j[Ahhhihjh‰hl}rbA(hn]ho]hp]hq]ht]uhvMÚ hx]rcAjª()rdA}reA(h\j]Ahl}rfA(hn]ho]hp]hq]ht]uh]j`Ahx]rgAhXlibC.arhA…riA}rjA(h\XlibC.ah]jdAubahjj²(ubaubahjh™ubh–)rkA}rlA(h\X,`lib.*`rmAhl}rnA(hn]ho]hp]hq]ht]uh]jWAhx]roAh…)rpA}rqA(h\jmAh]jkAhhhihjh‰hl}rrA(hn]ho]hp]hq]ht]uhvMÛ hx]rsAjª()rtA}ruA(h\jmAhl}rvA(hn]ho]hp]hq]ht]uh]jpAhx]rwAhX*lib.*rxA…ryA}rzA(h\X*lib.*h]jtAubahjj²(ubaubahjh™ubeubahjjVubeubahjjubahjh™ubeubaubeubeubj*)r{A}r|A(h\Uh]j~/hhhihjj-hl}r}A(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r~A}rA(h\Uh]j~/hhhihjj2hl}r€A(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrAj8jAuhvNhwhhx]r‚A(j:)rƒA}r„A(h\Xextra-lib-dirs: directory listh]j~Ahhhihjj>hl}r…A(hq]r†AXpkg-field-extra-lib-dirsr‡Aahp]hn]ho]ht]jB‰uhvMà hwhhx]rˆA(j*)r‰A}rŠA(h\Uh]jƒAhhhihjj-hl}r‹A(hq]hp]hn]ho]ht]Uentries]rŒA(jHX#extra-lib-dirs; package.cabal fieldj‡AUNtrAauhvMà hwhhx]ubjJ)rŽA}rA(h\Xextra-lib-dirsrAh]jƒAhhhihjjMhl}r‘A(jÚjÛhq]hp]hn]ho]ht]uhvMà hwhhx]r’AhXextra-lib-dirsr“A…r”A}r•A(h\UhhNhvNhwhh]jŽAubaubjS)r–A}r—A(h\jÌh]jƒAhhhihjjVhl}r˜A(jÚjÛhq]hp]hn]ho]ht]uhvMà hwhhx]r™AhX: ršA…r›A}rœA(h\UhhNhvNhwhh]j–AubaubjÒ)rA}ržA(h\Xdirectory listh]jƒAhhhihjjÕhl}rŸA(jÚjÛhq]hp]hn]ho]ht]uhvMà hwhhx]r AhXdirectory listr¡A…r¢A}r£A(h\UhhNhvNhwhh]jAubaubeubj[)r¤A}r¥A(h\Uh]j~Ahhhihjj^hl}r¦A(hn]ho]hp]hq]ht]uhvMà hwhhx]r§Ah…)r¨A}r©A(h\X.A list of directories to search for libraries.rªAh]j¤Ahhhihjh‰hl}r«A(hn]ho]hp]hq]ht]uhvMß hwhhx]r¬AhX.A list of directories to search for libraries.r­A…r®A}r¯A(h\jªAhhNhvNhwhh]j¨Aubaubaubeubj*)r°A}r±A(h\Uh]j~/hhhihjj-hl}r²A(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r³A}r´A(h\Uh]j~/hhhihjj2hl}rµA(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr¶Aj8j¶AuhvNhwhhx]r·A(j:)r¸A}r¹A(h\Xcc-options: token listh]j³Ahhhihjj>hl}rºA(hq]r»AXpkg-field-cc-optionsr¼Aahp]hn]ho]ht]jB‰uhvMæ hwhhx]r½A(j*)r¾A}r¿A(h\Uh]j¸Ahhhihjj-hl}rÀA(hq]hp]hn]ho]ht]Uentries]rÁA(jHXcc-options; package.cabal fieldj¼AUNtrÂAauhvMæ hwhhx]ubjJ)rÃA}rÄA(h\X cc-optionsrÅAh]j¸AhhhihjjMhl}rÆA(jÚjÛhq]hp]hn]ho]ht]uhvMæ hwhhx]rÇAhX cc-optionsrÈA…rÉA}rÊA(h\UhhNhvNhwhh]jÃAubaubjS)rËA}rÌA(h\jÌh]j¸AhhhihjjVhl}rÍA(jÚjÛhq]hp]hn]ho]ht]uhvMæ hwhhx]rÎAhX: rÏA…rÐA}rÑA(h\UhhNhvNhwhh]jËAubaubjÒ)rÒA}rÓA(h\X token listh]j¸AhhhihjjÕhl}rÔA(jÚjÛhq]hp]hn]ho]ht]uhvMæ hwhhx]rÕAhX token listrÖA…r×A}rØA(h\UhhNhvNhwhh]jÒAubaubeubj[)rÙA}rÚA(h\Uh]j³Ahhhihjj^hl}rÛA(hn]ho]hp]hq]ht]uhvMæ hwhhx]rÜAh…)rÝA}rÞA(h\XÇCommand-line arguments to be passed to the C compiler. Since the arguments are compiler-dependent, this field is more useful with the setup described in the section on `system-dependent parameters`_.h]jÙAhhhihjh‰hl}rßA(hn]ho]hp]hq]ht]uhvMã hwhhx]ràA(hX¨Command-line arguments to be passed to the C compiler. Since the arguments are compiler-dependent, this field is more useful with the setup described in the section on ráA…râA}rãA(h\X¨Command-line arguments to be passed to the C compiler. Since the arguments are compiler-dependent, this field is more useful with the setup described in the section on hhNhvNhwhh]jÝAubjH)räA}råA(h\X`system-dependent parameters`_jKKh]jÝAhjjLhl}ræA(UnameXsystem-dependent parametershq]hp]hn]ho]ht]jNj™uhx]rçAhXsystem-dependent parametersrèA…réA}rêA(h\Xsystem-dependent parametersh]jäAubaubhX.…rëA}rìA(h\X.hhNhvNhwhh]jÝAubeubaubeubj*)ríA}rîA(h\Uh]j~/hhhihjj-hl}rïA(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rðA}rñA(h\Uh]j~/hhhihjj2hl}ròA(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldróAj8jóAuhvNhwhhx]rôA(j:)rõA}röA(h\Xcpp-options: token listh]jðAhhhihjj>hl}r÷A(hq]røAXpkg-field-cpp-optionsrùAahp]hn]ho]ht]jB‰uhvMì hwhhx]rúA(j*)rûA}rüA(h\Uh]jõAhhhihjj-hl}rýA(hq]hp]hn]ho]ht]Uentries]rþA(jHX cpp-options; package.cabal fieldjùAUNtrÿAauhvMì hwhhx]ubjJ)rB}rB(h\X cpp-optionsrBh]jõAhhhihjjMhl}rB(jÚjÛhq]hp]hn]ho]ht]uhvMì hwhhx]rBhX cpp-optionsrB…rB}rB(h\UhhNhvNhwhh]jBubaubjS)rB}r B(h\jÌh]jõAhhhihjjVhl}r B(jÚjÛhq]hp]hn]ho]ht]uhvMì hwhhx]r BhX: r B…r B}rB(h\UhhNhvNhwhh]jBubaubjÒ)rB}rB(h\X token listh]jõAhhhihjjÕhl}rB(jÚjÛhq]hp]hn]ho]ht]uhvMì hwhhx]rBhX token listrB…rB}rB(h\UhhNhvNhwhh]jBubaubeubj[)rB}rB(h\Uh]jðAhhhihjj^hl}rB(hn]ho]hp]hq]ht]uhvMì hwhhx]rBh…)rB}rB(h\XÁCommand-line arguments for pre-processing Haskell code. Applies to Haskell source and other pre-processed Haskell source like .hsc .chs. Does not apply to C code, that's what cc-options is for.rBh]jBhhhihjh‰hl}rB(hn]ho]hp]hq]ht]uhvMé hwhhx]rBhXÃCommand-line arguments for pre-processing Haskell code. Applies to Haskell source and other pre-processed Haskell source like .hsc .chs. Does not apply to C code, that’s what cc-options is for.rB…r B}r!B(h\jBhhNhvNhwhh]jBubaubaubeubj*)r"B}r#B(h\Uh]j~/hhhihjj-hl}r$B(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r%B}r&B(h\Uh]j~/hhhihjj2hl}r'B(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr(Bj8j(BuhvNhwhhx]r)B(j:)r*B}r+B(h\Xcxx-options: token listh]j%Bhhhihjj>hl}r,B(hq]r-BXpkg-field-cxx-optionsr.Bahp]hn]ho]ht]jB‰uhvNhwhhx]r/B(j*)r0B}r1B(h\Uh]j*Bhhhihjj-hl}r2B(hq]hp]hn]ho]ht]Uentries]r3B(jHX cxx-options; package.cabal fieldj.BUNtr4BauhvNhwhhx]ubjJ)r5B}r6B(h\X cxx-optionsr7Bh]j*BhhhihjjMhl}r8B(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r9BhX cxx-optionsr:B…r;B}rB(h\jÌh]j*BhhhihjjVhl}r?B(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r@BhX: rAB…rBB}rCB(h\UhhNhvNhwhh]j=BubaubjÒ)rDB}rEB(h\X token listh]j*BhhhihjjÕhl}rFB(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rGBhX token listrHB…rIB}rJB(h\UhhNhvNhwhh]jDBubaubeubj[)rKB}rLB(h\Uh]j%Bhhhihjj^hl}rMB(hn]ho]hp]hq]ht]uhvNhwhhx]rNB(ja)rOB}rPB(h\Uh]jKBhhhihjjdhl}rQB(hn]ho]hp]hq]ht]uhvNhwhhx]rRBjg)rSB}rTB(h\Uh]jOBhhhihjjjhl}rUB(hn]ho]hp]hq]ht]uhvNhwhhx]rVB(jm)rWB}rXB(h\jph]jSBhhhihjjqhl}rYB(hn]ho]hp]hq]ht]uhvKhx]rZBhXSincer[B…r\B}r]B(h\Uh]jWBubaubjw)r^B}r_B(h\U Cabal 2.2r`Bhl}raB(hn]ho]hp]hq]ht]uh]jSBhx]rbBh…)rcB}rdB(h\j`Bhl}reB(hn]ho]hp]hq]ht]uh]j^Bhx]rfBhX Cabal 2.2rgB…rhB}riB(h\Uh]jcBubahjh‰ubahjj„ubeubaubh…)rjB}rkB(h\X0Command-line arguments to be passed to the compiler when compiling C++ code. The C++ sources to which these command-line arguments should be applied can be specified with the :pkg-field:`cxx-sources` field. Command-line options for C and C++ can be passed separately to the compiler when compiling both C and C++ sources by segregating the C and C++ sources with the :pkg-field:`c-sources` and :pkg-field:`cxx-sources` fields respectively, and providing different command-line arguments with the :pkg-field:`cc-options` and the :pkg-field:`cxx-options` fields.h]jKBhhhihjh‰hl}rlB(hn]ho]hp]hq]ht]uhvMð hwhhx]rmB(hX¯Command-line arguments to be passed to the compiler when compiling C++ code. The C++ sources to which these command-line arguments should be applied can be specified with the rnB…roB}rpB(h\X¯Command-line arguments to be passed to the compiler when compiling C++ code. The C++ sources to which these command-line arguments should be applied can be specified with the hhNhvNhwhh]jjBubjt)rqB}rrB(h\X:pkg-field:`cxx-sources`h]jjBhhhihjjwhl}rsB(UreftypeX pkg-fieldjyˆjzX cxx-sourcesrtBU refdomainXcabalruBhq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvMð hx]rvBhç)rwB}rxB(h\jtBhl}ryB(hn]ho]rzB(j…juBXcabal-pkg-fieldr{Behp]hq]ht]uh]jqBhx]r|BhX cxx-sourcesr}B…r~B}rB(h\Uh]jwBubahjhïubaubhX¨ field. Command-line options for C and C++ can be passed separately to the compiler when compiling both C and C++ sources by segregating the C and C++ sources with the r€B…rB}r‚B(h\X¨ field. Command-line options for C and C++ can be passed separately to the compiler when compiling both C and C++ sources by segregating the C and C++ sources with the hhNhvNhwhh]jjBubjt)rƒB}r„B(h\X:pkg-field:`c-sources`h]jjBhhhihjjwhl}r…B(UreftypeX pkg-fieldjyˆjzX c-sourcesr†BU refdomainXcabalr‡Bhq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvMð hx]rˆBhç)r‰B}rŠB(h\j†Bhl}r‹B(hn]ho]rŒB(j…j‡BXcabal-pkg-fieldrBehp]hq]ht]uh]jƒBhx]rŽBhX c-sourcesrB…rB}r‘B(h\Uh]j‰BubahjhïubaubhX and r’B…r“B}r”B(h\X and hhNhvNhwhh]jjBubjt)r•B}r–B(h\X:pkg-field:`cxx-sources`h]jjBhhhihjjwhl}r—B(UreftypeX pkg-fieldjyˆjzX cxx-sourcesr˜BU refdomainXcabalr™Bhq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvMð hx]ršBhç)r›B}rœB(h\j˜Bhl}rB(hn]ho]ržB(j…j™BXcabal-pkg-fieldrŸBehp]hq]ht]uh]j•Bhx]r BhX cxx-sourcesr¡B…r¢B}r£B(h\Uh]j›BubahjhïubaubhXN fields respectively, and providing different command-line arguments with the r¤B…r¥B}r¦B(h\XN fields respectively, and providing different command-line arguments with the hhNhvNhwhh]jjBubjt)r§B}r¨B(h\X:pkg-field:`cc-options`h]jjBhhhihjjwhl}r©B(UreftypeX pkg-fieldjyˆjzX cc-optionsrªBU refdomainXcabalr«Bhq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvMð hx]r¬Bhç)r­B}r®B(h\jªBhl}r¯B(hn]ho]r°B(j…j«BXcabal-pkg-fieldr±Behp]hq]ht]uh]j§Bhx]r²BhX cc-optionsr³B…r´B}rµB(h\Uh]j­BubahjhïubaubhX and the r¶B…r·B}r¸B(h\X and the hhNhvNhwhh]jjBubjt)r¹B}rºB(h\X:pkg-field:`cxx-options`h]jjBhhhihjjwhl}r»B(UreftypeX pkg-fieldjyˆjzX cxx-optionsr¼BU refdomainXcabalr½Bhq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvMð hx]r¾Bhç)r¿B}rÀB(h\j¼Bhl}rÁB(hn]ho]rÂB(j…j½BXcabal-pkg-fieldrÃBehp]hq]ht]uh]j¹Bhx]rÄBhX cxx-optionsrÅB…rÆB}rÇB(h\Uh]j¿BubahjhïubaubhX fields.rÈB…rÉB}rÊB(h\X fields.hhNhvNhwhh]jjBubeubeubeubj*)rËB}rÌB(h\Uh]j~/hhhihjj-hl}rÍB(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rÎB}rÏB(h\Uh]j~/hhhihjj2hl}rÐB(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrÑBj8jÑBuhvNhwhhx]rÒB(j:)rÓB}rÔB(h\Xcmm-options: token listh]jÎBhhhihjj>hl}rÕB(hq]rÖBXpkg-field-cmm-optionsr×Bahp]hn]ho]ht]jB‰uhvNhwhhx]rØB(j*)rÙB}rÚB(h\Uh]jÓBhhhihjj-hl}rÛB(hq]hp]hn]ho]ht]Uentries]rÜB(jHX cmm-options; package.cabal fieldj×BUNtrÝBauhvNhwhhx]ubjJ)rÞB}rßB(h\X cmm-optionsràBh]jÓBhhhihjjMhl}ráB(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]râBhX cmm-optionsrãB…räB}råB(h\UhhNhvNhwhh]jÞBubaubjS)ræB}rçB(h\jÌh]jÓBhhhihjjVhl}rèB(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]réBhX: rêB…rëB}rìB(h\UhhNhvNhwhh]jæBubaubjÒ)ríB}rîB(h\X token listh]jÓBhhhihjjÕhl}rïB(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rðBhX token listrñB…ròB}róB(h\UhhNhvNhwhh]jíBubaubeubj[)rôB}rõB(h\Uh]jÎBhhhihjj^hl}röB(hn]ho]hp]hq]ht]uhvNhwhhx]r÷B(ja)røB}rùB(h\Uh]jôBhhhihjjdhl}rúB(hn]ho]hp]hq]ht]uhvNhwhhx]rûBjg)rüB}rýB(h\Uh]jøBhhhihjjjhl}rþB(hn]ho]hp]hq]ht]uhvNhwhhx]rÿB(jm)rC}rC(h\jph]jüBhhhihjjqhl}rC(hn]ho]hp]hq]ht]uhvKhx]rChXSincerC…rC}rC(h\Uh]jCubaubjw)rC}rC(h\U Cabal 3.0r Chl}r C(hn]ho]hp]hq]ht]uh]jüBhx]r Ch…)r C}r C(h\j Chl}rC(hn]ho]hp]hq]ht]uh]jChx]rChX Cabal 3.0rC…rC}rC(h\Uh]j Cubahjh‰ubahjj„ubeubaubh…)rC}rC(h\XoCommand-line arguments to be passed to the compiler when compiling C-- code. See also :pkg-field:`cmm-sources`.h]jôBhhhihjh‰hl}rC(hn]ho]hp]hq]ht]uhvMý hwhhx]rC(hXWCommand-line arguments to be passed to the compiler when compiling C– code. See also rC…rC}rC(h\XVCommand-line arguments to be passed to the compiler when compiling C-- code. See also hhNhvNhwhh]jCubjt)rC}rC(h\X:pkg-field:`cmm-sources`h]jChhhihjjwhl}rC(UreftypeX pkg-fieldjyˆjzX cmm-sourcesrCU refdomainXcabalrChq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvMý hx]rChç)r C}r!C(h\jChl}r"C(hn]ho]r#C(j…jCXcabal-pkg-fieldr$Cehp]hq]ht]uh]jChx]r%ChX cmm-sourcesr&C…r'C}r(C(h\Uh]j CubahjhïubaubhX.…r)C}r*C(h\X.hhNhvNhwhh]jCubeubeubeubj*)r+C}r,C(h\Uh]j~/hhhihjj-hl}r-C(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r.C}r/C(h\Uh]j~/hhhihjj2hl}r0C(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr1Cj8j1CuhvNhwhhx]r2C(j:)r3C}r4C(h\Xasm-options: token listh]j.Chhhihjj>hl}r5C(hq]r6CXpkg-field-asm-optionsr7Cahp]hn]ho]ht]jB‰uhvNhwhhx]r8C(j*)r9C}r:C(h\Uh]j3Chhhihjj-hl}r;C(hq]hp]hn]ho]ht]Uentries]rC}r?C(h\X asm-optionsr@Ch]j3ChhhihjjMhl}rAC(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rBChX asm-optionsrCC…rDC}rEC(h\UhhNhvNhwhh]j>CubaubjS)rFC}rGC(h\jÌh]j3ChhhihjjVhl}rHC(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rIChX: rJC…rKC}rLC(h\UhhNhvNhwhh]jFCubaubjÒ)rMC}rNC(h\X token listh]j3ChhhihjjÕhl}rOC(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rPChX token listrQC…rRC}rSC(h\UhhNhvNhwhh]jMCubaubeubj[)rTC}rUC(h\Uh]j.Chhhihjj^hl}rVC(hn]ho]hp]hq]ht]uhvNhwhhx]rWC(ja)rXC}rYC(h\Uh]jTChhhihjjdhl}rZC(hn]ho]hp]hq]ht]uhvNhwhhx]r[Cjg)r\C}r]C(h\Uh]jXChhhihjjjhl}r^C(hn]ho]hp]hq]ht]uhvNhwhhx]r_C(jm)r`C}raC(h\jph]j\Chhhihjjqhl}rbC(hn]ho]hp]hq]ht]uhvKhx]rcChXSincerdC…reC}rfC(h\Uh]j`Cubaubjw)rgC}rhC(h\U Cabal 3.0riChl}rjC(hn]ho]hp]hq]ht]uh]j\Chx]rkCh…)rlC}rmC(h\jiChl}rnC(hn]ho]hp]hq]ht]uh]jgChx]roChX Cabal 3.0rpC…rqC}rrC(h\Uh]jlCubahjh‰ubahjj„ubeubaubh…)rsC}rtC(h\XvCommand-line arguments to be passed to the assembler when compiling assembler code. See also :pkg-field:`asm-sources`.h]jTChhhihjh‰hl}ruC(hn]ho]hp]hq]ht]uhvM hwhhx]rvC(hX]Command-line arguments to be passed to the assembler when compiling assembler code. See also rwC…rxC}ryC(h\X]Command-line arguments to be passed to the assembler when compiling assembler code. See also hhNhvNhwhh]jsCubjt)rzC}r{C(h\X:pkg-field:`asm-sources`h]jsChhhihjjwhl}r|C(UreftypeX pkg-fieldjyˆjzX asm-sourcesr}CU refdomainXcabalr~Chq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM hx]rChç)r€C}rC(h\j}Chl}r‚C(hn]ho]rƒC(j…j~CXcabal-pkg-fieldr„Cehp]hq]ht]uh]jzChx]r…ChX asm-sourcesr†C…r‡C}rˆC(h\Uh]j€CubahjhïubaubhX.…r‰C}rŠC(h\X.hhNhvNhwhh]jsCubeubeubeubj*)r‹C}rŒC(h\Uh]j~/hhhihjj-hl}rC(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rŽC}rC(h\Uh]j~/hhhihjj2hl}rC(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldr‘Cj8j‘CuhvNhwhhx]r’C(j:)r“C}r”C(h\Xld-options: token listh]jŽChhhihjj>hl}r•C(hq]r–CXpkg-field-ld-optionsr—Cahp]hn]ho]ht]jB‰uhvM hwhhx]r˜C(j*)r™C}ršC(h\Uh]j“Chhhihjj-hl}r›C(hq]hp]hn]ho]ht]Uentries]rœC(jHXld-options; package.cabal fieldj—CUNtrCauhvM hwhhx]ubjJ)ržC}rŸC(h\X ld-optionsr Ch]j“ChhhihjjMhl}r¡C(jÚjÛhq]hp]hn]ho]ht]uhvM hwhhx]r¢ChX ld-optionsr£C…r¤C}r¥C(h\UhhNhvNhwhh]jžCubaubjS)r¦C}r§C(h\jÌh]j“ChhhihjjVhl}r¨C(jÚjÛhq]hp]hn]ho]ht]uhvM hwhhx]r©ChX: rªC…r«C}r¬C(h\UhhNhvNhwhh]j¦CubaubjÒ)r­C}r®C(h\X token listh]j“ChhhihjjÕhl}r¯C(jÚjÛhq]hp]hn]ho]ht]uhvM hwhhx]r°ChX token listr±C…r²C}r³C(h\UhhNhvNhwhh]j­Cubaubeubj[)r´C}rµC(h\Uh]jŽChhhihjj^hl}r¶C(hn]ho]hp]hq]ht]uhvM hwhhx]r·Ch…)r¸C}r¹C(h\XÃCommand-line arguments to be passed to the linker. Since the arguments are compiler-dependent, this field is more useful with the setup described in the section on `system-dependent parameters`_.h]j´Chhhihjh‰hl}rºC(hn]ho]hp]hq]ht]uhvM hwhhx]r»C(hX¤Command-line arguments to be passed to the linker. Since the arguments are compiler-dependent, this field is more useful with the setup described in the section on r¼C…r½C}r¾C(h\X¤Command-line arguments to be passed to the linker. Since the arguments are compiler-dependent, this field is more useful with the setup described in the section on hhNhvNhwhh]j¸CubjH)r¿C}rÀC(h\X`system-dependent parameters`_jKKh]j¸ChjjLhl}rÁC(UnameXsystem-dependent parametershq]hp]hn]ho]ht]jNj™uhx]rÂChXsystem-dependent parametersrÃC…rÄC}rÅC(h\Xsystem-dependent parametersh]j¿CubaubhX.…rÆC}rÇC(h\X.hhNhvNhwhh]j¸Cubeubaubeubj*)rÈC}rÉC(h\Uh]j~/hhhihjj-hl}rÊC(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rËC}rÌC(h\Uh]j~/hhhihjj2hl}rÍC(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrÎCj8jÎCuhvNhwhhx]rÏC(j:)rÐC}rÑC(h\Xpkgconfig-depends: package listh]jËChhhihjj>hl}rÒC(hq]rÓCXpkg-field-pkgconfig-dependsrÔCahp]hn]ho]ht]jB‰uhvM hwhhx]rÕC(j*)rÖC}r×C(h\Uh]jÐChhhihjj-hl}rØC(hq]hp]hn]ho]ht]Uentries]rÙC(jHX&pkgconfig-depends; package.cabal fieldjÔCUNtrÚCauhvM hwhhx]ubjJ)rÛC}rÜC(h\Xpkgconfig-dependsrÝCh]jÐChhhihjjMhl}rÞC(jÚjÛhq]hp]hn]ho]ht]uhvM hwhhx]rßChXpkgconfig-dependsràC…ráC}râC(h\UhhNhvNhwhh]jÛCubaubjS)rãC}räC(h\jÌh]jÐChhhihjjVhl}råC(jÚjÛhq]hp]hn]ho]ht]uhvM hwhhx]ræChX: rçC…rèC}réC(h\UhhNhvNhwhh]jãCubaubjÒ)rêC}rëC(h\X package listh]jÐChhhihjjÕhl}rìC(jÚjÛhq]hp]hn]ho]ht]uhvM hwhhx]ríChX package listrîC…rïC}rðC(h\UhhNhvNhwhh]jêCubaubeubj[)rñC}ròC(h\Uh]jËChhhihjj^hl}róC(hn]ho]hp]hq]ht]uhvM hwhhx]rôC(h…)rõC}röC(h\X´A list of `pkg-config `__ packages, needed to build this package. They can be annotated with versions, e.g. ``gtk+-2.0 >= 2.10, cairo >= 1.0``. If no version constraint is specified, any version is assumed to be acceptable. Cabal uses ``pkg-config`` to find if the packages are available on the system and to find the extra compilation and linker options needed to use the packages.h]jñChhhihjh‰hl}r÷C(hn]ho]hp]hq]ht]uhvM hwhhx]røC(hX A list of rùC…rúC}rûC(h\X A list of hhNhvNhwhh]jõCubjH)rüC}rýC(h\XE`pkg-config `__hl}rþC(UnameX pkg-configj‡X4http://www.freedesktop.org/wiki/Software/pkg-config/hq]hp]hn]ho]ht]uh]jõChx]rÿChX pkg-configrD…rD}rD(h\X pkg-configh]jüCubahjjLubhXS packages, needed to build this package. They can be annotated with versions, e.g. rD…rD}rD(h\XS packages, needed to build this package. They can be annotated with versions, e.g. hhNhvNhwhh]jõCubhç)rD}rD(h\X"``gtk+-2.0 >= 2.10, cairo >= 1.0``hl}rD(hn]ho]hp]hq]ht]uh]jõChx]r DhXgtk+-2.0 >= 2.10, cairo >= 1.0r D…r D}r D(h\Xgtk+-2.0 >= 2.10, cairo >= 1.0h]jDubahjhïubhX]. If no version constraint is specified, any version is assumed to be acceptable. Cabal uses r D…rD}rD(h\X]. If no version constraint is specified, any version is assumed to be acceptable. Cabal uses hhNhvNhwhh]jõCubhç)rD}rD(h\X``pkg-config``hl}rD(hn]ho]hp]hq]ht]uh]jõChx]rDhX pkg-configrD…rD}rD(h\X pkg-configh]jDubahjhïubhX… to find if the packages are available on the system and to find the extra compilation and linker options needed to use the packages.rD…rD}rD(h\X… to find if the packages are available on the system and to find the extra compilation and linker options needed to use the packages.hhNhvNhwhh]jõCubeubh…)rD}rD(h\X'If you need to bind to a C library that supports ``pkg-config`` then it is much preferable to use this field rather than hard code options into the other fields. ``pkg-config --list-all`` will show you all supported libraries. Depending on your system you may need to adjust ``PKG_CONFIG_PATH``.h]jñChhhihjh‰hl}rD(hn]ho]hp]hq]ht]uhvM hwhhx]rD(hX1If you need to bind to a C library that supports rD…rD}r D(h\X1If you need to bind to a C library that supports hhNhvNhwhh]jDubhç)r!D}r"D(h\X``pkg-config``hl}r#D(hn]ho]hp]hq]ht]uh]jDhx]r$DhX pkg-configr%D…r&D}r'D(h\X pkg-configh]j!DubahjhïubhXc then it is much preferable to use this field rather than hard code options into the other fields. r(D…r)D}r*D(h\Xc then it is much preferable to use this field rather than hard code options into the other fields. hhNhvNhwhh]jDubhç)r+D}r,D(h\X``pkg-config --list-all``hl}r-D(hn]ho]hp]hq]ht]uh]jDhx]r.DhXpkg-config --list-allr/D…r0D}r1D(h\Xpkg-config --list-allh]j+DubahjhïubhXX will show you all supported libraries. Depending on your system you may need to adjust r2D…r3D}r4D(h\XX will show you all supported libraries. Depending on your system you may need to adjust hhNhvNhwhh]jDubhç)r5D}r6D(h\X``PKG_CONFIG_PATH``hl}r7D(hn]ho]hp]hq]ht]uh]jDhx]r8DhXPKG_CONFIG_PATHr9D…r:D}r;D(h\XPKG_CONFIG_PATHh]j5DubahjhïubhX.…rD}r?D(h\Uh]j~/hhhihjj-hl}r@D(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rAD}rBD(h\Uh]j~/hhhihjj2hl}rCD(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrDDj8jDDuhvNhwhhx]rED(j:)rFD}rGD(h\Xframeworks: token listh]jADhhhihjj>hl}rHD(hq]rIDXpkg-field-frameworksrJDahp]hn]ho]ht]jB‰uhvM" hwhhx]rKD(j*)rLD}rMD(h\Uh]jFDhhhihjj-hl}rND(hq]hp]hn]ho]ht]Uentries]rOD(jHXframeworks; package.cabal fieldjJDUNtrPDauhvM" hwhhx]ubjJ)rQD}rRD(h\X frameworksrSDh]jFDhhhihjjMhl}rTD(jÚjÛhq]hp]hn]ho]ht]uhvM" hwhhx]rUDhX frameworksrVD…rWD}rXD(h\UhhNhvNhwhh]jQDubaubjS)rYD}rZD(h\jÌh]jFDhhhihjjVhl}r[D(jÚjÛhq]hp]hn]ho]ht]uhvM" hwhhx]r\DhX: r]D…r^D}r_D(h\UhhNhvNhwhh]jYDubaubjÒ)r`D}raD(h\X token listh]jFDhhhihjjÕhl}rbD(jÚjÛhq]hp]hn]ho]ht]uhvM" hwhhx]rcDhX token listrdD…reD}rfD(h\UhhNhvNhwhh]j`Dubaubeubj[)rgD}rhD(h\Uh]jADhhhihjj^hl}riD(hn]ho]hp]hq]ht]uhvM" hwhhx]rjDh…)rkD}rlD(h\X¥On Darwin/MacOS X, a list of frameworks to link to. See Apple's developer documentation for more details on frameworks. This entry is ignored on all other platforms.rmDh]jgDhhhihjh‰hl}rnD(hn]ho]hp]hq]ht]uhvM hwhhx]roDhX§On Darwin/MacOS X, a list of frameworks to link to. See Apple’s developer documentation for more details on frameworks. This entry is ignored on all other platforms.rpD…rqD}rrD(h\jmDhhNhvNhwhh]jkDubaubaubeubj*)rsD}rtD(h\Uh]j~/hhhihjj-hl}ruD(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rvD}rwD(h\Uh]j~/hhhihjj2hl}rxD(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldryDj8jyDuhvNhwhhx]rzD(j:)r{D}r|D(h\X%extra-frameworks-dirs: directory listh]jvDhhhihjj>hl}r}D(hq]r~DXpkg-field-extra-frameworks-dirsrDahp]hn]ho]ht]jB‰uhvNhwhhx]r€D(j*)rD}r‚D(h\Uh]j{Dhhhihjj-hl}rƒD(hq]hp]hn]ho]ht]Uentries]r„D(jHX*extra-frameworks-dirs; package.cabal fieldjDUNtr…DauhvNhwhhx]ubjJ)r†D}r‡D(h\Xextra-frameworks-dirsrˆDh]j{DhhhihjjMhl}r‰D(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rŠDhXextra-frameworks-dirsr‹D…rŒD}rD(h\UhhNhvNhwhh]j†DubaubjS)rŽD}rD(h\jÌh]j{DhhhihjjVhl}rD(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r‘DhX: r’D…r“D}r”D(h\UhhNhvNhwhh]jŽDubaubjÒ)r•D}r–D(h\Xdirectory listh]j{DhhhihjjÕhl}r—D(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r˜DhXdirectory listr™D…ršD}r›D(h\UhhNhvNhwhh]j•Dubaubeubj[)rœD}rD(h\Uh]jvDhhhihjj^hl}ržD(hn]ho]hp]hq]ht]uhvNhwhhx]rŸD(ja)r D}r¡D(h\Uh]jœDhhhihjjdhl}r¢D(hn]ho]hp]hq]ht]uhvNhwhhx]r£Djg)r¤D}r¥D(h\Uh]j Dhhhihjjjhl}r¦D(hn]ho]hp]hq]ht]uhvNhwhhx]r§D(jm)r¨D}r©D(h\jph]j¤Dhhhihjjqhl}rªD(hn]ho]hp]hq]ht]uhvKhx]r«DhXSincer¬D…r­D}r®D(h\Uh]j¨Dubaubjw)r¯D}r°D(h\U Cabal 1.24r±Dhl}r²D(hn]ho]hp]hq]ht]uh]j¤Dhx]r³Dh…)r´D}rµD(h\j±Dhl}r¶D(hn]ho]hp]hq]ht]uh]j¯Dhx]r·DhX Cabal 1.24r¸D…r¹D}rºD(h\Uh]j´Dubahjh‰ubahjj„ubeubaubh…)r»D}r¼D(h\XpOn Darwin/MacOS X, a list of directories to search for frameworks. This entry is ignored on all other platforms.r½Dh]jœDhhhihjh‰hl}r¾D(hn]ho]hp]hq]ht]uhvM& hwhhx]r¿DhXpOn Darwin/MacOS X, a list of directories to search for frameworks. This entry is ignored on all other platforms.rÀD…rÁD}rÂD(h\j½DhhNhvNhwhh]j»Dubaubeubeubj*)rÃD}rÄD(h\Uh]j~/hhNhjj-hl}rÅD(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rÆD}rÇD(h\Uh]j~/hhNhjj2hl}rÈD(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrÉDj8jÉDuhvNhwhhx]rÊD(j:)rËD}rÌD(h\Xmixins: mixin listh]jÆDhhhihjj>hl}rÍD(hq]rÎDXpkg-field-mixinsrÏDahp]hn]ho]ht]jB‰uhvNhwhhx]rÐD(j*)rÑD}rÒD(h\Uh]jËDhhhihjj-hl}rÓD(hq]hp]hn]ho]ht]Uentries]rÔD(jHXmixins; package.cabal fieldjÏDUNtrÕDauhvNhwhhx]ubjJ)rÖD}r×D(h\XmixinsrØDh]jËDhhhihjjMhl}rÙD(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rÚDhXmixinsrÛD…rÜD}rÝD(h\UhhNhvNhwhh]jÖDubaubjS)rÞD}rßD(h\jÌh]jËDhhhihjjVhl}ràD(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]ráDhX: râD…rãD}räD(h\UhhNhvNhwhh]jÞDubaubjÒ)råD}ræD(h\X mixin listh]jËDhhhihjjÕhl}rçD(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rèDhX mixin listréD…rêD}rëD(h\UhhNhvNhwhh]jåDubaubeubj[)rìD}ríD(h\Uh]jÆDhhhihjj^hl}rîD(hn]ho]hp]hq]ht]uhvNhwhhx]rïD(ja)rðD}rñD(h\Uh]jìDhhNhjjdhl}ròD(hn]ho]hp]hq]ht]uhvNhwhhx]róDjg)rôD}rõD(h\Uh]jðDhhNhjjjhl}röD(hn]ho]hp]hq]ht]uhvNhwhhx]r÷D(jm)røD}rùD(h\jph]jôDhhhihjjqhl}rúD(hn]ho]hp]hq]ht]uhvKhx]rûDhXSincerüD…rýD}rþD(h\Uh]jøDubaubjw)rÿD}rE(h\U Cabal 2.0rEhl}rE(hn]ho]hp]hq]ht]uh]jôDhx]rEh…)rE}rE(h\jEhl}rE(hn]ho]hp]hq]ht]uh]jÿDhx]rEhX Cabal 2.0rE…r E}r E(h\Uh]jEubahjh‰ubahjj„ubeubaubh…)r E}r E(h\XºSupported only in GHC 8.2 and later. A list of packages mentioned in the :pkg-field:`build-depends` field, each optionally accompanied by a list of module and module signature renamings.h]jìDhhhihjh‰hl}r E(hn]ho]hp]hq]ht]uhvM, hwhhx]rE(hXISupported only in GHC 8.2 and later. A list of packages mentioned in the rE…rE}rE(h\XISupported only in GHC 8.2 and later. A list of packages mentioned in the hhNhvNhwhh]j Eubjt)rE}rE(h\X:pkg-field:`build-depends`h]j Ehhhihjjwhl}rE(UreftypeX pkg-fieldjyˆjzX build-dependsrEU refdomainXcabalrEhq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM, hx]rEhç)rE}rE(h\jEhl}rE(hn]ho]rE(j…jEXcabal-pkg-fieldrEehp]hq]ht]uh]jEhx]rEhX build-dependsrE…rE}r E(h\Uh]jEubahjhïubaubhXW field, each optionally accompanied by a list of module and module signature renamings.r!E…r"E}r#E(h\XW field, each optionally accompanied by a list of module and module signature renamings.hhNhvNhwhh]j Eubeubh…)r$E}r%E(h\XyThe simplest mixin syntax is simply the name of a package mentioned in the :pkg-field:`build-depends` field. For example:h]jìDhhhihjh‰hl}r&E(hn]ho]hp]hq]ht]uhvM0 hwhhx]r'E(hXKThe simplest mixin syntax is simply the name of a package mentioned in the r(E…r)E}r*E(h\XKThe simplest mixin syntax is simply the name of a package mentioned in the hhNhvNhwhh]j$Eubjt)r+E}r,E(h\X:pkg-field:`build-depends`h]j$Ehhhihjjwhl}r-E(UreftypeX pkg-fieldjyˆjzX build-dependsr.EU refdomainXcabalr/Ehq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM0 hx]r0Ehç)r1E}r2E(h\j.Ehl}r3E(hn]ho]r4E(j…j/EXcabal-pkg-fieldr5Eehp]hq]ht]uh]j+Ehx]r6EhX build-dependsr7E…r8E}r9E(h\Uh]j1EubahjhïubaubhX field. For example:r:E…r;E}rE(h\X<library build-depends: foo ^>= 1.2.3 mixins: fooh]jìDhhhihjjØhl}r?E(jÚjÛhq]hp]hn]ho]ht]uhvM5 hwhhx]r@EhX<library build-depends: foo ^>= 1.2.3 mixins: foorAE…rBE}rCE(h\Uh]j=Eubaubh…)rDE}rEE(h\X‡But this doesn't have any effect. More interesting is to use the mixin entry to rename one or more modules from the package, like this:rFEh]jìDhhhihjh‰hl}rGE(hn]ho]hp]hq]ht]uhvM; hwhhx]rHEhX‰But this doesn’t have any effect. More interesting is to use the mixin entry to rename one or more modules from the package, like this:rIE…rJE}rKE(h\jFEhhNhvNhwhh]jDEubaubjÕ)rLE}rME(h\XPlibrary mixins: foo (Foo.Bar as AnotherFoo.Bar, Foo.Baz as AnotherFoo.Baz)h]jìDhhhihjjØhl}rNE(jÚjÛhq]hp]hn]ho]ht]uhvM@ hwhhx]rOEhXPlibrary mixins: foo (Foo.Bar as AnotherFoo.Bar, Foo.Baz as AnotherFoo.Baz)rPE…rQE}rRE(h\Uh]jLEubaubh…)rSE}rTE(h\X^Note that renaming a module like this will hide all the modules that are not explicitly named.rUEh]jìDhhhihjh‰hl}rVE(hn]ho]hp]hq]ht]uhvMD hwhhx]rWEhX^Note that renaming a module like this will hide all the modules that are not explicitly named.rXE…rYE}rZE(h\jUEhhNhvNhwhh]jSEubaubh…)r[E}r\E(h\XModules can also be hidden:r]Eh]jìDhhhihjh‰hl}r^E(hn]ho]hp]hq]ht]uhvMG hwhhx]r_EhXModules can also be hidden:r`E…raE}rbE(h\j]EhhNhvNhwhh]j[EubaubjÕ)rcE}rdE(h\X+library: mixins: foo hiding (Foo.Bar)h]jìDhhhihjjØhl}reE(jÚjÛhq]hp]hn]ho]ht]uhvMK hwhhx]rfEhX+library: mixins: foo hiding (Foo.Bar)rgE…rhE}riE(h\Uh]jcEubaubh…)rjE}rkE(h\X@Hiding modules exposes everything that is not explicitly hidden.rlEh]jìDhhhihjh‰hl}rmE(hn]ho]hp]hq]ht]uhvMO hwhhx]rnEhX@Hiding modules exposes everything that is not explicitly hidden.roE…rpE}rqE(h\jlEhhNhvNhwhh]jjEubaubhó)rrE}rsE(h\XDThe current version of Cabal suffers from an infelicity in how the entries of :pkg-field:`mixins` are parsed: an entry will fail to parse if the provided renaming clause has whitespace after the opening parenthesis. This will be fixed in future versions of Cabal. See issues :issue:`5150`, :issue:`4864`, and :issue:`5293`.h]jìDhhhihjhöhl}rtE(hn]ho]hp]hq]ht]uhvNhwhhx]ruE(h…)rvE}rwE(h\XThe current version of Cabal suffers from an infelicity in how the entries of :pkg-field:`mixins` are parsed: an entry will fail to parse if the provided renaming clause has whitespace after the opening parenthesis. This will be fixed in future versions of Cabal.h]jrEhhhihjh‰hl}rxE(hn]ho]hp]hq]ht]uhvMS hx]ryE(hXNThe current version of Cabal suffers from an infelicity in how the entries of rzE…r{E}r|E(h\XNThe current version of Cabal suffers from an infelicity in how the entries of h]jvEubjt)r}E}r~E(h\X:pkg-field:`mixins`h]jvEhhhihjjwhl}rE(UreftypeX pkg-fieldjyˆjzXmixinsr€EU refdomainXcabalrEhq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvMS hx]r‚Ehç)rƒE}r„E(h\j€Ehl}r…E(hn]ho]r†E(j…jEXcabal-pkg-fieldr‡Eehp]hq]ht]uh]j}Ehx]rˆEhXmixinsr‰E…rŠE}r‹E(h\Uh]jƒEubahjhïubaubhX¦ are parsed: an entry will fail to parse if the provided renaming clause has whitespace after the opening parenthesis. This will be fixed in future versions of Cabal.rŒE…rE}rŽE(h\X¦ are parsed: an entry will fail to parse if the provided renaming clause has whitespace after the opening parenthesis. This will be fixed in future versions of Cabal.h]jvEubeubh…)rE}rE(h\X;See issues :issue:`5150`, :issue:`4864`, and :issue:`5293`.h]jrEhhhihjh‰hl}r‘E(hn]ho]hp]hq]ht]uhvMX hx]r’E(hX See issues r“E…r”E}r•E(h\X See issues h]jEubjH)r–E}r—E(h\X#5150hl}r˜E(UrefuriX,https://github.com/haskell/cabal/issues/5150hq]hp]hn]ho]ht]Uinternal‰uh]jEhx]r™EhX#5150ršE…r›E}rœE(h\X5150h]j–EubahjjLubhX, rE…ržE}rŸE(h\X, h]jEubjH)r E}r¡E(h\X#4864hl}r¢E(UrefuriX,https://github.com/haskell/cabal/issues/4864hq]hp]hn]ho]ht]Uinternal‰uh]jEhx]r£EhX#4864r¤E…r¥E}r¦E(h\X4864h]j EubahjjLubhX, and r§E…r¨E}r©E(h\X, and h]jEubjH)rªE}r«E(h\X#5293hl}r¬E(UrefuriX,https://github.com/haskell/cabal/issues/5293hq]hp]hn]ho]ht]Uinternal‰uh]jEhx]r­EhX#5293r®E…r¯E}r°E(h\X5293h]jªEubahjjLubhX.…r±E}r²E(h\X.h]jEubeubeubh…)r³E}r´E(h\XnThere can be multiple mixin entries for a given package, in effect creating multiple copies of the dependency:rµEh]jìDhhhihjh‰hl}r¶E(hn]ho]hp]hq]ht]uhvMZ hwhhx]r·EhXnThere can be multiple mixin entries for a given package, in effect creating multiple copies of the dependency:r¸E…r¹E}rºE(h\jµEhhNhvNhwhh]j³EubaubjÕ)r»E}r¼E(h\Xxlibrary mixins: foo (Foo.Bar as AnotherFoo.Bar, Foo.Baz as AnotherFoo.Baz), foo (Foo.Bar as YetAnotherFoo.Bar)h]jìDhhhihjjØhl}r½E(jÚjÛhq]hp]hn]ho]ht]uhvM_ hwhhx]r¾EhXxlibrary mixins: foo (Foo.Bar as AnotherFoo.Bar, Foo.Baz as AnotherFoo.Baz), foo (Foo.Bar as YetAnotherFoo.Bar)r¿E…rÀE}rÁE(h\Uh]j»Eubaubh…)rÂE}rÃE(h\XVThe ``requires`` clause is used to rename the module signatures required by a package:h]jìDhhhihjh‰hl}rÄE(hn]ho]hp]hq]ht]uhvMd hwhhx]rÅE(hXThe rÆE…rÇE}rÈE(h\XThe hhNhvNhwhh]jÂEubhç)rÉE}rÊE(h\X ``requires``hl}rËE(hn]ho]hp]hq]ht]uh]jÂEhx]rÌEhXrequiresrÍE…rÎE}rÏE(h\Xrequiresh]jÉEubahjhïubhXF clause is used to rename the module signatures required by a package:rÐE…rÑE}rÒE(h\XF clause is used to rename the module signatures required by a package:hhNhvNhwhh]jÂEubeubjÕ)rÓE}rÔE(h\Xblibrary mixins: foo (Foo.Bar as AnotherFoo.Bar) requires (Foo.SomeSig as AnotherFoo.SomeSig)h]jìDhhhihjjØhl}rÕE(jÚjÛhq]hp]hn]ho]ht]uhvMi hwhhx]rÖEhXblibrary mixins: foo (Foo.Bar as AnotherFoo.Bar) requires (Foo.SomeSig as AnotherFoo.SomeSig)r×E…rØE}rÙE(h\Uh]jÓEubaubh…)rÚE}rÛE(h\XqSignature-only packages don't have any modules, so only the signatures can be renamed, with the following syntax:rÜEh]jìDhhhihjh‰hl}rÝE(hn]ho]hp]hq]ht]uhvMm hwhhx]rÞEhXsSignature-only packages don’t have any modules, so only the signatures can be renamed, with the following syntax:rßE…ràE}ráE(h\jÜEhhNhvNhwhh]jÚEubaubjÕ)râE}rãE(h\XRlibrary mixins: sigonly requires (SigOnly.SomeSig as AnotherSigOnly.SomeSig)h]jìDhhhihjjØhl}räE(jÚjÛhq]hp]hn]ho]ht]uhvMr hwhhx]råEhXRlibrary mixins: sigonly requires (SigOnly.SomeSig as AnotherSigOnly.SomeSig)ræE…rçE}rèE(h\Uh]jâEubaubh…)réE}rêE(h\X?See the :pkg-field:`library:signatures` field for more details.h]jìDhhhihjh‰hl}rëE(hn]ho]hp]hq]ht]uhvMv hwhhx]rìE(hXSee the ríE…rîE}rïE(h\XSee the hhNhvNhwhh]jéEubjt)rðE}rñE(h\X:pkg-field:`library:signatures`h]jéEhhhihjjwhl}ròE(UreftypeX pkg-fieldjyˆjzX signaturesU refdomainXcabalróEhq]hp]U refexplicit‰hn]ho]ht]j}j~j”XlibraryuhvMv hx]rôEhç)rõE}röE(h\Xlibrary:signatureshl}r÷E(hn]ho]røE(j…jóEXcabal-pkg-fieldrùEehp]hq]ht]uh]jðEhx]rúEhXlibrary:signaturesrûE…rüE}rýE(h\Uh]jõEubahjhïubaubhX field for more details.rþE…rÿE}rF(h\X field for more details.hhNhvNhwhh]jéEubeubh…)rF}rF(h\XPMixin packages are part of the Backpack_ extension to the Haskell module system.h]jìDhhhihjh‰hl}rF(hn]ho]hp]hq]ht]uhvMx hwhhx]rF(hXMixin packages are part of the rF…rF}rF(h\XMixin packages are part of the hhNhvNhwhh]jFubjH)rF}r F(h\X Backpack_jKKh]jFhjjLhl}r F(UnameXBackpackr Fj‡jõhq]hp]hn]ho]ht]uhx]r FhXBackpackr F…rF}rF(h\j Fh]jFubaubhX( extension to the Haskell module system.rF…rF}rF(h\X( extension to the Haskell module system.hhNhvNhwhh]jFubeubh…)rF}rF(h\XÉThe matching of the module signatures required by a :pkg-field:`build-depends` dependency with the implementation modules present in another dependency is triggered by a coincidence of names. When the names of the signature and of the implementation are already the same, the matching is automatic. But when the names don't coincide, or we want to instantiate a signature in two different ways, adding mixin entries that perform renamings becomes necessary.h]jìDhhhihjh‰hl}rF(hn]ho]hp]hq]ht]uhvM{ hwhhx]rF(hX4The matching of the module signatures required by a rF…rF}rF(h\X4The matching of the module signatures required by a hhNhvNhwhh]jFubjt)rF}rF(h\X:pkg-field:`build-depends`h]jFhhhihjjwhl}rF(UreftypeX pkg-fieldjyˆjzX build-dependsrFU refdomainXcabalrFhq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM{ hx]rFhç)r F}r!F(h\jFhl}r"F(hn]ho]r#F(j…jFXcabal-pkg-fieldr$Fehp]hq]ht]uh]jFhx]r%FhX build-dependsr&F…r'F}r(F(h\Uh]j FubahjhïubaubhX} dependency with the implementation modules present in another dependency is triggered by a coincidence of names. When the names of the signature and of the implementation are already the same, the matching is automatic. But when the names don’t coincide, or we want to instantiate a signature in two different ways, adding mixin entries that perform renamings becomes necessary.r)F…r*F}r+F(h\X{ dependency with the implementation modules present in another dependency is triggered by a coincidence of names. When the names of the signature and of the implementation are already the same, the matching is automatic. But when the names don't coincide, or we want to instantiate a signature in two different ways, adding mixin entries that perform renamings becomes necessary.hhNhvNhwhh]jFubeubj¡0)r,F}r-F(h\X$Backpack_ has the limitation that implementation modules that instantiate signatures required by a :pkg-field:`build-depends` dependency can't reside in the same component that has the dependency. They must reside in a different package dependency, or at least in a separate internal library.h]jìDhhhihjj¤0hl}r.F(hn]ho]hp]hq]ht]uhvNhwhhx]r/Fh…)r0F}r1F(h\X$Backpack_ has the limitation that implementation modules that instantiate signatures required by a :pkg-field:`build-depends` dependency can't reside in the same component that has the dependency. They must reside in a different package dependency, or at least in a separate internal library.h]j,Fhhhihjh‰hl}r2F(hn]ho]hp]hq]ht]uhvM… hx]r3F(jH)r4F}r5F(h\X Backpack_jKKh]j0FhjjLhl}r6F(UnameXBackpackr7Fj‡jõhq]hp]hn]ho]ht]uhx]r8FhXBackpackr9F…r:F}r;F(h\j7Fh]j4FubaubhXZ has the limitation that implementation modules that instantiate signatures required by a rF(h\XZ has the limitation that implementation modules that instantiate signatures required by a h]j0Fubjt)r?F}r@F(h\X:pkg-field:`build-depends`h]j0Fhhhihjjwhl}rAF(UreftypeX pkg-fieldjyˆjzX build-dependsrBFU refdomainXcabalrCFhq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvM… hx]rDFhç)rEF}rFF(h\jBFhl}rGF(hn]ho]rHF(j…jCFXcabal-pkg-fieldrIFehp]hq]ht]uh]j?Fhx]rJFhX build-dependsrKF…rLF}rMF(h\Uh]jEFubahjhïubaubhX© dependency can’t reside in the same component that has the dependency. They must reside in a different package dependency, or at least in a separate internal library.rNF…rOF}rPF(h\X§ dependency can't reside in the same component that has the dependency. They must reside in a different package dependency, or at least in a separate internal library.h]j0Fubeubaubeubeubeubh^)rQF}rRF(h\UhaKh]hdhhhihjhkhl}rSF(hn]ho]hp]hq]rTFjwaht]rUFhTauhvMŒ hwhhx]rVF(hz)rWF}rXF(h\XConfigurationsrYFh]jQFhhhihjh~hl}rZF(hn]ho]hp]hq]ht]uhvMŒ hwhhx]r[FhXConfigurationsr\F…r]F}r^F(h\jYFhhNhvNhwhh]jWFubaubh…)r_F}r`F(h\XVLibrary and executable sections may include conditional blocks, which test for various system parameters and configuration flags. The flags mechanism is rather generic, but most of the time a flag represents certain feature, that can be switched on or off by the package user. Here is an example package description file using configurations:raFh]jQFhhhihjh‰hl}rbF(hn]ho]hp]hq]ht]uhvMŽ hwhhx]rcFhXVLibrary and executable sections may include conditional blocks, which test for various system parameters and configuration flags. The flags mechanism is rather generic, but most of the time a flag represents certain feature, that can be switched on or off by the package user. Here is an example package description file using configurations:rdF…reF}rfF(h\jaFhhNhvNhwhh]j_Fubaubh^)rgF}rhF(h\UhaKh]jQFhhhihjhkhl}riF(hn]rjFjOaho]hp]hq]rkFUid3rlFaht]uhvM• hwhhx]rmF(hz)rnF}roF(h\X?Example: A package containing a library and executable programsrpFh]jgFhhhihjh~hl}rqF(hn]ho]hp]hq]ht]uhvM• hwhhx]rrFhX?Example: A package containing a library and executable programsrsF…rtF}ruF(h\jpFhhNhvNhwhh]jnFubaubjÕ)rvF}rwF(h\X.Name: Test1 Version: 0.0.1 Cabal-Version: >= 1.8 License: BSD3 Author: Jane Doe Synopsis: Test package to test configurations Category: Example Build-Type: Simple Flag Debug Description: Enable debug support Default: False Manual: True Flag WebFrontend Description: Include API for web frontend. Default: False Manual: True Flag NewDirectory description: Whether to build against @directory >= 1.2@ -- This is an automatic flag which the solver will be -- assign automatically while searching for a solution Library Build-Depends: base >= 4.2 && < 4.9 Exposed-Modules: Testing.Test1 Extensions: CPP GHC-Options: -Wall if flag(Debug) CPP-Options: -DDEBUG if !os(windows) CC-Options: "-DDEBUG" else CC-Options: "-DNDEBUG" if flag(WebFrontend) Build-Depends: cgi >= 0.42 && < 0.44 Other-Modules: Testing.WebStuff CPP-Options: -DWEBFRONTEND if flag(NewDirectory) build-depends: directory >= 1.2 && < 1.4 Build-Depends: time >= 1.0 && < 1.9 else build-depends: directory == 1.1.* Build-Depends: old-time >= 1.0 && < 1.2 Executable test1 Main-is: T1.hs Other-Modules: Testing.Test1 Build-Depends: base >= 4.2 && < 4.9 if flag(debug) CC-Options: "-DDEBUG" CPP-Options: -DDEBUGh]jgFhhhihjjØhl}rxF(jÚjÛhq]hp]hn]ho]ht]uhvM™ hwhhx]ryFhX.Name: Test1 Version: 0.0.1 Cabal-Version: >= 1.8 License: BSD3 Author: Jane Doe Synopsis: Test package to test configurations Category: Example Build-Type: Simple Flag Debug Description: Enable debug support Default: False Manual: True Flag WebFrontend Description: Include API for web frontend. Default: False Manual: True Flag NewDirectory description: Whether to build against @directory >= 1.2@ -- This is an automatic flag which the solver will be -- assign automatically while searching for a solution Library Build-Depends: base >= 4.2 && < 4.9 Exposed-Modules: Testing.Test1 Extensions: CPP GHC-Options: -Wall if flag(Debug) CPP-Options: -DDEBUG if !os(windows) CC-Options: "-DDEBUG" else CC-Options: "-DNDEBUG" if flag(WebFrontend) Build-Depends: cgi >= 0.42 && < 0.44 Other-Modules: Testing.WebStuff CPP-Options: -DWEBFRONTEND if flag(NewDirectory) build-depends: directory >= 1.2 && < 1.4 Build-Depends: time >= 1.0 && < 1.9 else build-depends: directory == 1.1.* Build-Depends: old-time >= 1.0 && < 1.2 Executable test1 Main-is: T1.hs Other-Modules: Testing.Test1 Build-Depends: base >= 4.2 && < 4.9 if flag(debug) CC-Options: "-DDEBUG" CPP-Options: -DDEBUGrzF…r{F}r|F(h\Uh]jvFubaubeubh^)r}F}r~F(h\Uh]jQFhhhihjhkhl}rF(hn]ho]hp]hq]r€FUlayoutrFaht]r‚FhAauhvMÔ hwhhx]rƒF(hz)r„F}r…F(h\XLayoutr†Fh]j}Fhhhihjh~hl}r‡F(hn]ho]hp]hq]ht]uhvMÔ hwhhx]rˆFhXLayoutr‰F…rŠF}r‹F(h\j†FhhNhvNhwhh]j„Fubaubh…)rŒF}rF(h\X#Flags, conditionals, library and executable sections use layout to indicate structure. This is very similar to the Haskell layout rule. Entries in a section have to all be indented to the same level which must be more than the section header. Tabs are not allowed to be used for indentation.rŽFh]j}Fhhhihjh‰hl}rF(hn]ho]hp]hq]ht]uhvMÖ hwhhx]rFhX#Flags, conditionals, library and executable sections use layout to indicate structure. This is very similar to the Haskell layout rule. Entries in a section have to all be indented to the same level which must be more than the section header. Tabs are not allowed to be used for indentation.r‘F…r’F}r“F(h\jŽFhhNhvNhwhh]jŒFubaubh…)r”F}r•F(h\X As an alternative to using layout you can also use explicit braces ``{}``. In this case the indentation of entries in a section does not matter, though different fields within a block must be on different lines. Here is a bit of the above example again, using braces:h]j}Fhhhihjh‰hl}r–F(hn]ho]hp]hq]ht]uhvMÜ hwhhx]r—F(hXCAs an alternative to using layout you can also use explicit braces r˜F…r™F}ršF(h\XCAs an alternative to using layout you can also use explicit braces hhNhvNhwhh]j”Fubhç)r›F}rœF(h\X``{}``hl}rF(hn]ho]hp]hq]ht]uh]j”Fhx]ržFhX{}rŸF…r F}r¡F(h\X{}h]j›FubahjhïubhXÂ. In this case the indentation of entries in a section does not matter, though different fields within a block must be on different lines. Here is a bit of the above example again, using braces:r¢F…r£F}r¤F(h\XÂ. In this case the indentation of entries in a section does not matter, though different fields within a block must be on different lines. Here is a bit of the above example again, using braces:hhNhvNhwhh]j”Fubeubeubh^)r¥F}r¦F(h\Uh]jQFhhhihjhkhl}r§F(hn]ho]hp]hq]r¨FU@example-using-explicit-braces-rather-than-indentation-for-layoutr©Faht]rªFh;auhvMâ hwhhx]r«F(hz)r¬F}r­F(h\XAExample: Using explicit braces rather than indentation for layoutr®Fh]j¥Fhhhihjh~hl}r¯F(hn]ho]hp]hq]ht]uhvMâ hwhhx]r°FhXAExample: Using explicit braces rather than indentation for layoutr±F…r²F}r³F(h\j®FhhNhvNhwhh]j¬FubaubjÕ)r´F}rµF(h\XÿName: Test1 Version: 0.0.1 Cabal-Version: >= 1.8 License: BSD3 Author: Jane Doe Synopsis: Test package to test configurations Category: Example Build-Type: Simple Flag Debug { Description: Enable debug support Default: False Manual: True } Library { Build-Depends: base >= 4.2 && < 4.9 Exposed-Modules: Testing.Test1 Extensions: CPP if flag(debug) { CPP-Options: -DDEBUG if !os(windows) { CC-Options: "-DDEBUG" } else { CC-Options: "-DNDEBUG" } } }h]j¥FhhhihjjØhl}r¶F(jÚjÛhq]hp]hn]ho]ht]uhvMæ hwhhx]r·FhXÿName: Test1 Version: 0.0.1 Cabal-Version: >= 1.8 License: BSD3 Author: Jane Doe Synopsis: Test package to test configurations Category: Example Build-Type: Simple Flag Debug { Description: Enable debug support Default: False Manual: True } Library { Build-Depends: base >= 4.2 && < 4.9 Exposed-Modules: Testing.Test1 Extensions: CPP if flag(debug) { CPP-Options: -DDEBUG if !os(windows) { CC-Options: "-DDEBUG" } else { CC-Options: "-DNDEBUG" } } }r¸F…r¹F}rºF(h\Uh]j´Fubaubeubh^)r»F}r¼F(h\Uh]jQFhhhihjhkhl}r½F(hn]ho]hp]hq]r¾FUconfiguration-flagsr¿Faht]rÀFh+auhvM hwhhx]rÁF(hz)rÂF}rÃF(h\XConfiguration FlagsrÄFh]j»Fhhhihjh~hl}rÅF(hn]ho]hp]hq]ht]uhvM hwhhx]rÆFhXConfiguration FlagsrÇF…rÈF}rÉF(h\jÄFhhNhvNhwhh]jÂFubaubj*)rÊF}rËF(h\Uh]j»FhhNhjj-hl}rÌF(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rÍF}rÎF(h\Uh]j»FhhNhjj2hl}rÏF(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-sectionrÐFj8jÐFuhvNhwhhx]rÑF(j:)rÒF}rÓF(h\X flag nameh]jÍFhhhihjj>hl}rÔF(hq]rÕFXpkg-section-flag-flagrÖFahp]hn]ho]ht]jB‰uhvNhwhhx]r×F(j*)rØF}rÙF(h\Uh]jÒFhhhihjj-hl}rÚF(hq]hp]hn]ho]ht]Uentries]rÛF(jHX flag:flag; package.cabal sectionjÖFUNtrÜFauhvNhwhhx]ubjJ)rÝF}rÞF(h\XflagrßFh]jÒFhhhihjjMhl}ràF(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]ráFhXflagrâF…rãF}räF(h\UhhNhvNhwhh]jÝFubaubjS)råF}ræF(h\U h]jÒFhhhihjjVhl}rçF(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rèFhX …réF}rêF(h\UhhNhvNhwhh]jåFubaubjÒ)rëF}rìF(h\Xnameh]jÒFhhhihjjÕhl}ríF(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rîFhXnamerïF…rðF}rñF(h\UhhNhvNhwhh]jëFubaubeubj[)ròF}róF(h\Uh]jÍFhhhihjj^hl}rôF(hn]ho]hp]hq]ht]uhvNhwhhx]rõF(h…)röF}r÷F(h\XHFlag section declares a flag which can be used in `conditional blocks`_.h]jòFhhhihjh‰hl}røF(hn]ho]hp]hq]ht]uhvM hwhhx]rùF(hX2Flag section declares a flag which can be used in rúF…rûF}rüF(h\X2Flag section declares a flag which can be used in hhNhvNhwhh]jöFubjH)rýF}rþF(h\X`conditional blocks`_jKKh]jöFhjjLhl}rÿF(UnameXconditional blockshq]hp]hn]ho]ht]jNUconditional-blocksrGuhx]rGhXconditional blocksrG…rG}rG(h\Xconditional blocksh]jýFubaubhX.…rG}rG(h\X.hhNhvNhwhh]jöFubeubh…)rG}rG(h\XxFlag names are case-insensitive and must match ``[[:alnum:]_][[:alnum:]_-]*`` regular expression, or expressed as ABNF_:h]jòFhhhihjh‰hl}r G(hn]ho]hp]hq]ht]uhvM hwhhx]r G(hX/Flag names are case-insensitive and must match r G…r G}r G(h\X/Flag names are case-insensitive and must match hhNhvNhwhh]jGubhç)rG}rG(h\X``[[:alnum:]_][[:alnum:]_-]*``hl}rG(hn]ho]hp]hq]ht]uh]jGhx]rGhX[[:alnum:]_][[:alnum:]_-]*rG…rG}rG(h\X[[:alnum:]_][[:alnum:]_-]*h]jGubahjhïubhX% regular expression, or expressed as rG…rG}rG(h\X% regular expression, or expressed as hhNhvNhwhh]jGubjH)rG}rG(h\XABNF_jKKh]jGhjjLhl}rG(UnameXABNFrGj‡jîhq]hp]hn]ho]ht]uhx]rGhXABNFrG…rG}rG(h\jGh]jGubaubhX:…r G}r!G(h\X:hhNhvNhwhh]jGubeubjÕ)r"G}r#G(h\X~flag-name = (UALNUM / "_") *(UALNUM / "_" / "-") UALNUM = UALPHA / DIGIT UALPHA = ... ; set of alphabetic Unicode code-pointsh]jòFhhhihjjØhl}r$G(j‰jXabnfjÚjÛhq]hp]hn]j}ho]ht]uhvM hwhhx]r%GhX~flag-name = (UALNUM / "_") *(UALNUM / "_" / "-") UALNUM = UALPHA / DIGIT UALPHA = ... ; set of alphabetic Unicode code-pointsr&G…r'G}r(G(h\Uh]j"Gubaubhó)r)G}r*G(h\XHHackage accepts ASCII-only flags, ``[a-zA-Z0-9_][a-zA-Z0-9_-]*`` regexp.r+Gh]jòFhhhihjhöhl}r,G(hn]ho]hp]hq]ht]uhvNhwhhx]r-Gh…)r.G}r/G(h\j+Gh]j)Ghhhihjh‰hl}r0G(hn]ho]hp]hq]ht]uhvM hx]r1G(hX"Hackage accepts ASCII-only flags, r2G…r3G}r4G(h\X"Hackage accepts ASCII-only flags, h]j.Gubhç)r5G}r6G(h\X``[a-zA-Z0-9_][a-zA-Z0-9_-]*``hl}r7G(hn]ho]hp]hq]ht]uh]j.Ghx]r8GhX[a-zA-Z0-9_][a-zA-Z0-9_-]*r9G…r:G}r;G(h\X[a-zA-Z0-9_][a-zA-Z0-9_-]*h]j5GubahjhïubhX regexp.rG(h\X regexp.h]j.Gubeubaubeubeubj*)r?G}r@G(h\Uh]j»Fhhhihjj-hl}rAG(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rBG}rCG(h\Uh]j»Fhhhihjj2hl}rDG(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrEGj8jEGuhvNhwhhx]rFG(j:)rGG}rHG(h\Xdescription: freeformh]jBGhhhihjj>hl}rIG(hq]rJGXpkg-field-flag-descriptionrKGahp]hn]ho]ht]jB‰uhvM hwhhx]rLG(j*)rMG}rNG(h\Uh]jGGhhhihjj-hl}rOG(hq]hp]hn]ho]ht]Uentries]rPG(jHX%flag:description; package.cabal fieldjKGUNtrQGauhvM hwhhx]ubjJ)rRG}rSG(h\X descriptionrTGh]jGGhhhihjjMhl}rUG(jÚjÛhq]hp]hn]ho]ht]uhvM hwhhx]rVGhX descriptionrWG…rXG}rYG(h\UhhNhvNhwhh]jRGubaubjS)rZG}r[G(h\jÌh]jGGhhhihjjVhl}r\G(jÚjÛhq]hp]hn]ho]ht]uhvM hwhhx]r]GhX: r^G…r_G}r`G(h\UhhNhvNhwhh]jZGubaubjÒ)raG}rbG(h\Xfreeformh]jGGhhhihjjÕhl}rcG(jÚjÛhq]hp]hn]ho]ht]uhvM hwhhx]rdGhXfreeformreG…rfG}rgG(h\UhhNhvNhwhh]jaGubaubeubj[)rhG}riG(h\Uh]jBGhhhihjj^hl}rjG(hn]ho]hp]hq]ht]uhvM hwhhx]rkGh…)rlG}rmG(h\XThe description of this flag.rnGh]jhGhhhihjh‰hl}roG(hn]ho]hp]hq]ht]uhvM hwhhx]rpGhXThe description of this flag.rqG…rrG}rsG(h\jnGhhNhvNhwhh]jlGubaubaubeubj*)rtG}ruG(h\Uh]j»FhhNhjj-hl}rvG(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rwG}rxG(h\Uh]j»FhhNhjj2hl}ryG(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrzGj8jzGuhvNhwhhx]r{G(j:)r|G}r}G(h\Xdefault: booleanh]jwGhhhihjj>hl}r~G(hq]rGXpkg-field-flag-defaultr€Gahp]hn]ho]ht]jB‰uhvM, hwhhx]rG(j*)r‚G}rƒG(h\Uh]j|Ghhhihjj-hl}r„G(hq]hp]hn]ho]ht]Uentries]r…G(jHX!flag:default; package.cabal fieldj€GUNtr†GauhvM, hwhhx]ubjJ)r‡G}rˆG(h\Xdefaultr‰Gh]j|GhhhihjjMhl}rŠG(jÚjÛhq]hp]hn]ho]ht]uhvM, hwhhx]r‹GhXdefaultrŒG…rG}rŽG(h\UhhNhvNhwhh]j‡GubaubjS)rG}rG(h\jÌh]j|GhhhihjjVhl}r‘G(jÚjÛhq]hp]hn]ho]ht]uhvM, hwhhx]r’GhX: r“G…r”G}r•G(h\UhhNhvNhwhh]jGubaubjÒ)r–G}r—G(h\Xbooleanh]j|GhhhihjjÕhl}r˜G(jÚjÛhq]hp]hn]ho]ht]uhvM, hwhhx]r™GhXbooleanršG…r›G}rœG(h\UhhNhvNhwhh]j–Gubaubeubj[)rG}ržG(h\Uh]jwGhhhihjj^hl}rŸG(hn]ho]hp]hq]ht]uhvM, hwhhx]r G(ja)r¡G}r¢G(h\Uh]jGhhNhjjdhl}r£G(hn]ho]hp]hq]ht]uhvNhwhhx]r¤Gjg)r¥G}r¦G(h\Uhl}r§G(hn]ho]hp]hq]ht]uh]j¡Ghx]r¨G(jm)r©G}rªG(h\X Default valueh]j¥Ghhhihjjqhl}r«G(hn]ho]hp]hq]ht]uhvKhx]r¬GhX Default valuer­G…r®G}r¯G(h\Uh]j©Gubaubjw)r°G}r±G(h\Uhl}r²G(hn]ho]hp]hq]ht]uh]j¥Ghx]r³Gh…)r´G}rµG(h\XTruehl}r¶G(hn]ho]hp]hq]ht]uh]j°Ghx]r·Ghç)r¸G}r¹G(h\X``True``h]j´GhhNhjhïhl}rºG(hn]ho]hp]hq]ht]uhvNhwhhx]r»GhXTruer¼G…r½G}r¾G(h\XTruehhNhvNhwhh]j¸Gubaubahjh‰ubahjj„ubehjjjubaubh…)r¿G}rÀG(h\XThe default value of this flag.rÁGh]jGhhhihjh‰hl}rÂG(hn]ho]hp]hq]ht]uhvM! hwhhx]rÃGhXThe default value of this flag.rÄG…rÅG}rÆG(h\jÁGhhNhvNhwhh]j¿Gubaubhó)rÇG}rÈG(h\X™This value may be `overridden in several ways `__. The rationale for having flags default to True is that users usually want new features as soon as they are available. Flags representing features that are not (yet) recommended for most users (such as experimental features or debugging support) should therefore explicitly override the default to False.h]jGhhhihjhöhl}rÉG(hn]ho]hp]hq]ht]uhvNhwhhx]rÊGh…)rËG}rÌG(h\X™This value may be `overridden in several ways `__. The rationale for having flags default to True is that users usually want new features as soon as they are available. Flags representing features that are not (yet) recommended for most users (such as experimental features or debugging support) should therefore explicitly override the default to False.h]jÇGhhhihjh‰hl}rÍG(hn]ho]hp]hq]ht]uhvM% hx]rÎG(hXThis value may be rÏG…rÐG}rÑG(h\XThis value may be h]jËGubjH)rÒG}rÓG(h\XV`overridden in several ways `__hl}rÔG(UnameXoverridden in several waysj‡X5installing-packages.html#controlling-flag-assignmentshq]hp]hn]ho]ht]uh]jËGhx]rÕGhXoverridden in several waysrÖG…r×G}rØG(h\Xoverridden in several waysh]jÒGubahjjLubhX1. The rationale for having flags default to True is that users usually want new features as soon as they are available. Flags representing features that are not (yet) recommended for most users (such as experimental features or debugging support) should therefore explicitly override the default to False.rÙG…rÚG}rÛG(h\X1. The rationale for having flags default to True is that users usually want new features as soon as they are available. Flags representing features that are not (yet) recommended for most users (such as experimental features or debugging support) should therefore explicitly override the default to False.h]jËGubeubaubeubeubj*)rÜG}rÝG(h\Uh]j»Fhhhihjj-hl}rÞG(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rßG}ràG(h\Uh]j»Fhhhihjj2hl}ráG(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrâGj8jâGuhvNhwhhx]rãG(j:)räG}råG(h\Xmanual: booleanh]jßGhhhihjj>hl}ræG(hq]rçGXpkg-field-flag-manualrèGahp]hn]ho]ht]jB‰uhvM6 hwhhx]réG(j*)rêG}rëG(h\Uh]jäGhhhihjj-hl}rìG(hq]hp]hn]ho]ht]Uentries]ríG(jHX flag:manual; package.cabal fieldjèGUNtrîGauhvM6 hwhhx]ubjJ)rïG}rðG(h\XmanualrñGh]jäGhhhihjjMhl}ròG(jÚjÛhq]hp]hn]ho]ht]uhvM6 hwhhx]róGhXmanualrôG…rõG}röG(h\UhhNhvNhwhh]jïGubaubjS)r÷G}røG(h\jÌh]jäGhhhihjjVhl}rùG(jÚjÛhq]hp]hn]ho]ht]uhvM6 hwhhx]rúGhX: rûG…rüG}rýG(h\UhhNhvNhwhh]j÷GubaubjÒ)rþG}rÿG(h\Xbooleanh]jäGhhhihjjÕhl}rH(jÚjÛhq]hp]hn]ho]ht]uhvM6 hwhhx]rHhXbooleanrH…rH}rH(h\UhhNhvNhwhh]jþGubaubeubj[)rH}rH(h\Uh]jßGhhhihjj^hl}rH(hn]ho]hp]hq]ht]uhvM6 hwhhx]rH(ja)r H}r H(h\Uh]jHhhhihjjdhl}r H(hn]ho]hp]hq]ht]uhvNhwhhx]r H(jg)r H}rH(h\Uhl}rH(hn]ho]hp]hq]ht]uh]j Hhx]rH(jm)rH}rH(h\X Default valueh]j Hhhhihjjqhl}rH(hn]ho]hp]hq]ht]uhvKhx]rHhX Default valuerH…rH}rH(h\Uh]jHubaubjw)rH}rH(h\Uhl}rH(hn]ho]hp]hq]ht]uh]j Hhx]rHh…)rH}rH(h\XFalsehl}rH(hn]ho]hp]hq]ht]uh]jHhx]rHhç)r H}r!H(h\X ``False``h]jHhhhihjhïhl}r"H(hn]ho]hp]hq]ht]uhvNhwhhx]r#HhXFalser$H…r%H}r&H(h\XFalsehhNhvNhwhh]j Hubaubahjh‰ubahjj„ubehjjjubjg)r'H}r(H(h\Uh]j Hhhhihjjjhl}r)H(hn]ho]hp]hq]ht]uhvM0 hwhhx]r*H(jm)r+H}r,H(h\Xsinceh]j'Hhhhihjjqhl}r-H(hn]ho]hp]hq]ht]uhvKhx]r.HhXSincer/H…r0H}r1H(h\Uh]j+Hubaubjw)r2H}r3H(h\X1.6 hl}r4H(hn]ho]hp]hq]ht]uh]j'Hhx]r5Hh…)r6H}r7H(h\X1.6r8Hh]j2Hhhhihjh‰hl}r9H(hn]ho]hp]hq]ht]uhvM0 hx]r:HhX1.6r;H…rH}r?H(h\XBy default, Cabal will first try to satisfy dependencies with the default flag value and then, if that is not possible, with the negated value. However, if the flag is manual, then the default value (which can be overridden by commandline flags) will be used.r@Hh]jHhhhihjh‰hl}rAH(hn]ho]hp]hq]ht]uhvM2 hwhhx]rBHhXBy default, Cabal will first try to satisfy dependencies with the default flag value and then, if that is not possible, with the negated value. However, if the flag is manual, then the default value (which can be overridden by commandline flags) will be used.rCH…rDH}rEH(h\j@HhhNhvNhwhh]j>Hubaubeubeubeubeubh^)rFH}rGH(h\UhaKh]hdhhhihjhkhl}rHH(hn]ho]hp]hq]rIHjGaht]rJHhKauhvM8 hwhhx]rKH(hz)rLH}rMH(h\XConditional BlocksrNHh]jFHhhhihjh~hl}rOH(hn]ho]hp]hq]ht]uhvM8 hwhhx]rPHhXConditional BlocksrQH…rRH}rSH(h\jNHhhNhvNhwhh]jLHubaubh…)rTH}rUH(h\X±Conditional blocks may appear anywhere inside a library or executable section. They have to follow rather strict formatting rules. Conditional blocks must always be of the shaperVHh]jFHhhhihjh‰hl}rWH(hn]ho]hp]hq]ht]uhvM: hwhhx]rXHhX±Conditional blocks may appear anywhere inside a library or executable section. They have to follow rather strict formatting rules. Conditional blocks must always be of the shaperYH…rZH}r[H(h\jVHhhNhvNhwhh]jTHubaubjÕ)r\H}r]H(h\X5if condition property-descriptions-or-conditionalsh]jFHhhhihjjØhl}r^H(jÚjÛhq]hp]hn]ho]ht]uhvM@ hwhhx]r_HhX5if condition property-descriptions-or-conditionalsr`H…raH}rbH(h\Uh]j\Hubaubh…)rcH}rdH(h\XorreHh]jFHhhhihjh‰hl}rfH(hn]ho]hp]hq]ht]uhvMC hwhhx]rgHhXorrhH…riH}rjH(h\jeHhhNhvNhwhh]jcHubaubjÕ)rkH}rlH(h\Xgif condition property-descriptions-or-conditionals else property-descriptions-or-conditionalsh]jFHhhhihjjØhl}rmH(jÚjÛhq]hp]hn]ho]ht]uhvMG hwhhx]rnHhXgif condition property-descriptions-or-conditionals else property-descriptions-or-conditionalsroH…rpH}rqH(h\Uh]jkHubaubh…)rrH}rsH(h\XGNote that the ``if`` and the condition have to be all on the same line.rtHh]jFHhhhihjh‰hl}ruH(hn]ho]hp]hq]ht]uhvML hwhhx]rvH(hXNote that the rwH…rxH}ryH(h\XNote that the hhNhvNhwhh]jrHubhç)rzH}r{H(h\X``if``hl}r|H(hn]ho]hp]hq]ht]uh]jrHhx]r}HhXifr~H…rH}r€H(h\Xifh]jzHubahjhïubhX3 and the condition have to be all on the same line.rH…r‚H}rƒH(h\X3 and the condition have to be all on the same line.hhNhvNhwhh]jrHubeubh…)r„H}r…H(h\X>Since Cabal 2.2 conditional blocks support ``elif`` construct.r†Hh]jFHhhhihjh‰hl}r‡H(hn]ho]hp]hq]ht]uhvMN hwhhx]rˆH(hX+Since Cabal 2.2 conditional blocks support r‰H…rŠH}r‹H(h\X+Since Cabal 2.2 conditional blocks support hhNhvNhwhh]j„Hubhç)rŒH}rH(h\X``elif``hl}rŽH(hn]ho]hp]hq]ht]uh]j„Hhx]rHhXelifrH…r‘H}r’H(h\Xelifh]jŒHubahjhïubhX construct.r“H…r”H}r•H(h\X construct.hhNhvNhwhh]j„HubeubjÕ)r–H}r—H(h\X£if condition1 property-descriptions-or-conditionals elif condition2 property-descriptions-or-conditionals else property-descriptions-or-conditionalsh]jFHhhhihjjØhl}r˜H(jÚjÛhq]hp]hn]ho]ht]uhvMR hwhhx]r™HhX£if condition1 property-descriptions-or-conditionals elif condition2 property-descriptions-or-conditionals else property-descriptions-or-conditionalsršH…r›H}rœH(h\Uh]j–Hubaubh^)rH}ržH(h\Uh]jFHhhhihjhkhl}rŸH(hn]ho]hp]hq]r HU conditionsr¡Haht]r¢Hh,auhvMZ hwhhx]r£H(hz)r¤H}r¥H(h\X Conditionsr¦Hh]jHhhhihjh~hl}r§H(hn]ho]hp]hq]ht]uhvMZ hwhhx]r¨HhX Conditionsr©H…rªH}r«H(h\j¦HhhNhvNhwhh]j¤Hubaubh…)r¬H}r­H(h\X¶Conditions can be formed using boolean tests and the boolean operators ``||`` (disjunction / logical "or"), ``&&`` (conjunction / logical "and"), or ``!`` (negation / logical "not"). The unary ``!`` takes highest precedence, ``||`` takes lowest. Precedence levels may be overridden through the use of parentheses. For example, ``os(darwin) && !arch(i386) || os(freebsd)`` is equivalent to ``(os(darwin) && !(arch(i386))) || os(freebsd)``.h]jHhhhihjh‰hl}r®H(hn]ho]hp]hq]ht]uhvM\ hwhhx]r¯H(hXGConditions can be formed using boolean tests and the boolean operators r°H…r±H}r²H(h\XGConditions can be formed using boolean tests and the boolean operators hhNhvNhwhh]j¬Hubhç)r³H}r´H(h\X``||``hl}rµH(hn]ho]hp]hq]ht]uh]j¬Hhx]r¶HhX||r·H…r¸H}r¹H(h\X||h]j³HubahjhïubhX# (disjunction / logical “orâ€), rºH…r»H}r¼H(h\X (disjunction / logical "or"), hhNhvNhwhh]j¬Hubhç)r½H}r¾H(h\X``&&``hl}r¿H(hn]ho]hp]hq]ht]uh]j¬Hhx]rÀHhX&&rÁH…rÂH}rÃH(h\X&&h]j½HubahjhïubhX' (conjunction / logical “andâ€), or rÄH…rÅH}rÆH(h\X# (conjunction / logical "and"), or hhNhvNhwhh]j¬Hubhç)rÇH}rÈH(h\X``!``hl}rÉH(hn]ho]hp]hq]ht]uh]j¬Hhx]rÊHhX!…rËH}rÌH(h\X!h]jÇHubahjhïubhX+ (negation / logical “notâ€). The unary rÍH…rÎH}rÏH(h\X' (negation / logical "not"). The unary hhNhvNhwhh]j¬Hubhç)rÐH}rÑH(h\X``!``hl}rÒH(hn]ho]hp]hq]ht]uh]j¬Hhx]rÓHhX!…rÔH}rÕH(h\X!h]jÐHubahjhïubhX takes highest precedence, rÖH…r×H}rØH(h\X takes highest precedence, hhNhvNhwhh]j¬Hubhç)rÙH}rÚH(h\X``||``hl}rÛH(hn]ho]hp]hq]ht]uh]j¬Hhx]rÜHhX||rÝH…rÞH}rßH(h\X||h]jÙHubahjhïubhX` takes lowest. Precedence levels may be overridden through the use of parentheses. For example, ràH…ráH}râH(h\X` takes lowest. Precedence levels may be overridden through the use of parentheses. For example, hhNhvNhwhh]j¬Hubhç)rãH}räH(h\X,``os(darwin) && !arch(i386) || os(freebsd)``hl}råH(hn]ho]hp]hq]ht]uh]j¬Hhx]ræHhX(os(darwin) && !arch(i386) || os(freebsd)rçH…rèH}réH(h\X(os(darwin) && !arch(i386) || os(freebsd)h]jãHubahjhïubhX is equivalent to rêH…rëH}rìH(h\X is equivalent to hhNhvNhwhh]j¬Hubhç)ríH}rîH(h\X0``(os(darwin) && !(arch(i386))) || os(freebsd)``hl}rïH(hn]ho]hp]hq]ht]uh]j¬Hhx]rðHhX,(os(darwin) && !(arch(i386))) || os(freebsd)rñH…ròH}róH(h\X,(os(darwin) && !(arch(i386))) || os(freebsd)h]jíHubahjhïubhX.…rôH}rõH(h\X.hhNhvNhwhh]j¬Hubeubh…)röH}r÷H(h\X,The following tests are currently supported.røHh]jHhhhihjh‰hl}rùH(hn]ho]hp]hq]ht]uhvMd hwhhx]rúHhX,The following tests are currently supported.rûH…rüH}rýH(h\jøHhhNhvNhwhh]jöHubaubj)rþH}rÿH(h\Uh]jHhhhihjjhl}rI(hn]ho]hp]hq]ht]uhvNhwhhx]rI(j)rI}rI(h\XÒ:samp:`os({name})` Tests if the current operating system is *name*. The argument is tested against ``System.Info.os`` on the target system. There is unfortunately some disagreement between Haskell implementations about the standard values of ``System.Info.os``. Cabal canonicalises it so that in particular ``os(windows)`` works on all implementations. If the canonicalised os names match, this test evaluates to true, otherwise false. The match is case-insensitive.h]jþHhhhihjj!hl}rI(hn]ho]hp]hq]ht]uhvMl hx]rI(j$)rI}rI(h\X:samp:`os({name})`rIh]jIhhhihjj(hl}r I(hn]ho]hp]hq]ht]uhvMl hx]r Ihç)r I}r I(h\Xos(name)hl}r I(hq]hp]hn]ho]rIXsamprIaUrolejIht]uh]jIhx]rI(hXos(rI…rI}rI(h\X os({name})h]j IubhÇ)rI}rI(h\Xnamehl}rI(hn]ho]hp]hq]ht]uh]j Ihx]rIhXnamerI…rI}rI(h\Uh]jIubahjhÏubhX)…rI}rI(h\X)h]j Iubehjhïubaubj<)rI}rI(h\Uhl}rI(hn]ho]hp]hq]ht]uh]jIhx]r Ih…)r!I}r"I(h\X¿Tests if the current operating system is *name*. The argument is tested against ``System.Info.os`` on the target system. There is unfortunately some disagreement between Haskell implementations about the standard values of ``System.Info.os``. Cabal canonicalises it so that in particular ``os(windows)`` works on all implementations. If the canonicalised os names match, this test evaluates to true, otherwise false. The match is case-insensitive.h]jIhhhihjh‰hl}r#I(hn]ho]hp]hq]ht]uhvMg hx]r$I(hX)Tests if the current operating system is r%I…r&I}r'I(h\X)Tests if the current operating system is h]j!IubhÇ)r(I}r)I(h\X*name*hl}r*I(hn]ho]hp]hq]ht]uh]j!Ihx]r+IhXnamer,I…r-I}r.I(h\Xnameh]j(IubahjhÏubhX!. The argument is tested against r/I…r0I}r1I(h\X!. The argument is tested against h]j!Iubhç)r2I}r3I(h\X``System.Info.os``hl}r4I(hn]ho]hp]hq]ht]uh]j!Ihx]r5IhXSystem.Info.osr6I…r7I}r8I(h\XSystem.Info.osh]j2IubahjhïubhX} on the target system. There is unfortunately some disagreement between Haskell implementations about the standard values of r9I…r:I}r;I(h\X} on the target system. There is unfortunately some disagreement between Haskell implementations about the standard values of h]j!Iubhç)rI(hn]ho]hp]hq]ht]uh]j!Ihx]r?IhXSystem.Info.osr@I…rAI}rBI(h\XSystem.Info.osh]j= 6.6.1)``). If the configured implementation is of the right type and matches the version constraint, then this evaluates to true, otherwise false. The match is case-insensitive. Note that including a version constraint in an ``impl`` test causes it to check for two properties: - The current compiler has the specified name, and - The compiler's version satisfied the specified version constraint As a result, ``!impl(ghc >= x.y.z)`` is not entirely equivalent to ``impl(ghc < x.y.z)``. The test ``!impl(ghc >= x.y.z)`` checks that: - The current compiler is not GHC, or - The version of GHC is earlier than version x.y.z. h]jþHhhhihjj!hl}rŒI(hn]ho]hp]hq]ht]uhvM† hwhhx]rI(j$)rŽI}rI(h\X:samp:`impl({compiler})`rIh]jŠIhhhihjj(hl}r‘I(hn]ho]hp]hq]ht]uhvM† hx]r’Ihç)r“I}r”I(h\Ximpl(compiler)hl}r•I(hq]hp]hn]ho]r–IXsampr—IaUrolej—Iht]uh]jŽIhx]r˜I(hXimpl(r™I…ršI}r›I(h\Ximpl({compiler})h]j“IubhÇ)rœI}rI(h\Xcompilerhl}ržI(hn]ho]hp]hq]ht]uh]j“Ihx]rŸIhXcompilerr I…r¡I}r¢I(h\Uh]jœIubahjhÏubhX)…r£I}r¤I(h\X)h]j“Iubehjhïubaubj<)r¥I}r¦I(h\Uhl}r§I(hn]ho]hp]hq]ht]uh]jŠIhx]r¨I(h…)r©I}rªI(h\X-Tests for the configured Haskell implementation. An optional version constraint may be specified (for example ``impl(ghc >= 6.6.1)``). If the configured implementation is of the right type and matches the version constraint, then this evaluates to true, otherwise false. The match is case-insensitive.h]j¥Ihhhihjh‰hl}r«I(hn]ho]hp]hq]ht]uhvMt hx]r¬I(hXnTests for the configured Haskell implementation. An optional version constraint may be specified (for example r­I…r®I}r¯I(h\XnTests for the configured Haskell implementation. An optional version constraint may be specified (for example h]j©Iubhç)r°I}r±I(h\X``impl(ghc >= 6.6.1)``hl}r²I(hn]ho]hp]hq]ht]uh]j©Ihx]r³IhXimpl(ghc >= 6.6.1)r´I…rµI}r¶I(h\Ximpl(ghc >= 6.6.1)h]j°IubahjhïubhX©). If the configured implementation is of the right type and matches the version constraint, then this evaluates to true, otherwise false. The match is case-insensitive.r·I…r¸I}r¹I(h\X©). If the configured implementation is of the right type and matches the version constraint, then this evaluates to true, otherwise false. The match is case-insensitive.h]j©Iubeubh…)rºI}r»I(h\XcNote that including a version constraint in an ``impl`` test causes it to check for two properties:h]j¥Ihhhihjh‰hl}r¼I(hn]ho]hp]hq]ht]uhvMz hx]r½I(hX/Note that including a version constraint in an r¾I…r¿I}rÀI(h\X/Note that including a version constraint in an h]jºIubhç)rÁI}rÂI(h\X``impl``hl}rÃI(hn]ho]hp]hq]ht]uh]jºIhx]rÄIhXimplrÅI…rÆI}rÇI(h\Ximplh]jÁIubahjhïubhX, test causes it to check for two properties:rÈI…rÉI}rÊI(h\X, test causes it to check for two properties:h]jºIubeubh)rËI}rÌI(h\Uh]j¥Ihhhihjh’hl}rÍI(h”X-hq]hp]hn]ho]ht]uhvM} hx]rÎI(h–)rÏI}rÐI(h\X1The current compiler has the specified name, and hl}rÑI(hn]ho]hp]hq]ht]uh]jËIhx]rÒIh…)rÓI}rÔI(h\X0The current compiler has the specified name, andrÕIh]jÏIhhhihjh‰hl}rÖI(hn]ho]hp]hq]ht]uhvM} hx]r×IhX0The current compiler has the specified name, andrØI…rÙI}rÚI(h\jÕIh]jÓIubaubahjh™ubh–)rÛI}rÜI(h\XBThe compiler's version satisfied the specified version constraint hl}rÝI(hn]ho]hp]hq]ht]uh]jËIhx]rÞIh…)rßI}ràI(h\XAThe compiler's version satisfied the specified version constraintráIh]jÛIhhhihjh‰hl}râI(hn]ho]hp]hq]ht]uhvM hx]rãIhXCThe compiler’s version satisfied the specified version constrainträI…råI}ræI(h\jáIh]jßIubaubahjh™ubeubh…)rçI}rèI(h\X‡As a result, ``!impl(ghc >= x.y.z)`` is not entirely equivalent to ``impl(ghc < x.y.z)``. The test ``!impl(ghc >= x.y.z)`` checks that:h]j¥Ihhhihjh‰hl}réI(hn]ho]hp]hq]ht]uhvM hx]rêI(hX As a result, rëI…rìI}ríI(h\X As a result, h]jçIubhç)rîI}rïI(h\X``!impl(ghc >= x.y.z)``hl}rðI(hn]ho]hp]hq]ht]uh]jçIhx]rñIhX!impl(ghc >= x.y.z)ròI…róI}rôI(h\X!impl(ghc >= x.y.z)h]jîIubahjhïubhX is not entirely equivalent to rõI…röI}r÷I(h\X is not entirely equivalent to h]jçIubhç)røI}rùI(h\X``impl(ghc < x.y.z)``hl}rúI(hn]ho]hp]hq]ht]uh]jçIhx]rûIhXimpl(ghc < x.y.z)rüI…rýI}rþI(h\Ximpl(ghc < x.y.z)h]jøIubahjhïubhX . The test rÿI…rJ}rJ(h\X . The test h]jçIubhç)rJ}rJ(h\X``!impl(ghc >= x.y.z)``hl}rJ(hn]ho]hp]hq]ht]uh]jçIhx]rJhX!impl(ghc >= x.y.z)rJ…rJ}rJ(h\X!impl(ghc >= x.y.z)h]jJubahjhïubhX checks that:r J…r J}r J(h\X checks that:h]jçIubeubh)r J}r J(h\Uh]j¥Ihhhihjh’hl}rJ(h”X-hq]hp]hn]ho]ht]uhvM„ hx]rJ(h–)rJ}rJ(h\X$The current compiler is not GHC, or hl}rJ(hn]ho]hp]hq]ht]uh]j Jhx]rJh…)rJ}rJ(h\X#The current compiler is not GHC, orrJh]jJhhhihjh‰hl}rJ(hn]ho]hp]hq]ht]uhvM„ hx]rJhX#The current compiler is not GHC, orrJ…rJ}rJ(h\jJh]jJubaubahjh™ubh–)rJ}rJ(h\X2The version of GHC is earlier than version x.y.z. hl}rJ(hn]ho]hp]hq]ht]uh]j Jhx]rJh…)r J}r!J(h\X1The version of GHC is earlier than version x.y.z.r"Jh]jJhhhihjh‰hl}r#J(hn]ho]hp]hq]ht]uhvM† hx]r$JhX1The version of GHC is earlier than version x.y.z.r%J…r&J}r'J(h\j"Jh]j Jubaubahjh™ubeubehjjVubeubj)r(J}r)J(h\XÉ:samp:`flag({name})` Evaluates to the current assignment of the flag of the given name. Flag names are case insensitive. Testing for flags that have not been introduced with a flag section is an error.h]jþHhhhihjj!hl}r*J(hn]ho]hp]hq]ht]uhvMŠ hwhhx]r+J(j$)r,J}r-J(h\X:samp:`flag({name})`r.Jh]j(Jhhhihjj(hl}r/J(hn]ho]hp]hq]ht]uhvMŠ hx]r0Jhç)r1J}r2J(h\X flag(name)hl}r3J(hq]hp]hn]ho]r4JXsampr5JaUrolej5Jht]uh]j,Jhx]r6J(hXflag(r7J…r8J}r9J(h\X flag({name})h]j1JubhÇ)r:J}r;J(h\Xnamehl}rJ…r?J}r@J(h\Uh]j:JubahjhÏubhX)…rAJ}rBJ(h\X)h]j1Jubehjhïubaubj<)rCJ}rDJ(h\Uhl}rEJ(hn]ho]hp]hq]ht]uh]j(Jhx]rFJh…)rGJ}rHJ(h\X´Evaluates to the current assignment of the flag of the given name. Flag names are case insensitive. Testing for flags that have not been introduced with a flag section is an error.rIJh]jCJhhhihjh‰hl}rJJ(hn]ho]hp]hq]ht]uhvM‰ hx]rKJhX´Evaluates to the current assignment of the flag of the given name. Flag names are case insensitive. Testing for flags that have not been introduced with a flag section is an error.rLJ…rMJ}rNJ(h\jIJh]jGJubaubahjjVubeubj)rOJ}rPJ(h\X``true`` Constant value true.h]jþHhhhihjj!hl}rQJ(hn]ho]hp]hq]ht]uhvMŒ hwhhx]rRJ(j$)rSJ}rTJ(h\X``true``rUJh]jOJhhhihjj(hl}rVJ(hn]ho]hp]hq]ht]uhvMŒ hx]rWJhç)rXJ}rYJ(h\jUJhl}rZJ(hn]ho]hp]hq]ht]uh]jSJhx]r[JhXtruer\J…r]J}r^J(h\Xtrueh]jXJubahjhïubaubj<)r_J}r`J(h\Uhl}raJ(hn]ho]hp]hq]ht]uh]jOJhx]rbJh…)rcJ}rdJ(h\XConstant value true.reJh]j_Jhhhihjh‰hl}rfJ(hn]ho]hp]hq]ht]uhvM hx]rgJhXConstant value true.rhJ…riJ}rjJ(h\jeJh]jcJubaubahjjVubeubj)rkJ}rlJ(h\X ``false`` Constant value false. h]jþHhhhihjj!hl}rmJ(hn]ho]hp]hq]ht]uhvM hwhhx]rnJ(j$)roJ}rpJ(h\X ``false``rqJh]jkJhhhihjj(hl}rrJ(hn]ho]hp]hq]ht]uhvM hx]rsJhç)rtJ}ruJ(h\jqJhl}rvJ(hn]ho]hp]hq]ht]uh]joJhx]rwJhXfalserxJ…ryJ}rzJ(h\Xfalseh]jtJubahjhïubaubj<)r{J}r|J(h\Uhl}r}J(hn]ho]hp]hq]ht]uh]jkJhx]r~Jh…)rJ}r€J(h\XConstant value false.rJh]j{Jhhhihjh‰hl}r‚J(hn]ho]hp]hq]ht]uhvM hx]rƒJhXConstant value false.r„J…r…J}r†J(h\jJh]jJubaubahjjVubeubeubeubh^)r‡J}rˆJ(h\Uh]jFHhhhihjhkhl}r‰J(hn]ho]hp]hq]rŠJU"resolution-of-conditions-and-flagsr‹Jaht]rŒJh)auhvM’ hwhhx]rJ(hz)rŽJ}rJ(h\X"Resolution of Conditions and FlagsrJh]j‡Jhhhihjh~hl}r‘J(hn]ho]hp]hq]ht]uhvM’ hwhhx]r’JhX"Resolution of Conditions and Flagsr“J…r”J}r•J(h\jJhhNhvNhwhh]jŽJubaubh…)r–J}r—J(h\XIf a package descriptions specifies configuration flags the package user can `control these in several ways `__. If the user does not fix the value of a flag, Cabal will try to find a flag assignment in the following way.h]j‡Jhhhihjh‰hl}r˜J(hn]ho]hp]hq]ht]uhvM” hwhhx]r™J(hXMIf a package descriptions specifies configuration flags the package user can ršJ…r›J}rœJ(h\XMIf a package descriptions specifies configuration flags the package user can hhNhvNhwhh]j–JubjH)rJ}ržJ(h\XY`control these in several ways `__hl}rŸJ(UnameXcontrol these in several waysj‡X5installing-packages.html#controlling-flag-assignmentshq]hp]hn]ho]ht]uh]j–Jhx]r JhXcontrol these in several waysr¡J…r¢J}r£J(h\Xcontrol these in several waysh]jJubahjjLubhXn. If the user does not fix the value of a flag, Cabal will try to find a flag assignment in the following way.r¤J…r¥J}r¦J(h\Xn. If the user does not fix the value of a flag, Cabal will try to find a flag assignment in the following way.hhNhvNhwhh]j–Jubeubh)r§J}r¨J(h\Uh]j‡Jhhhihjh’hl}r©J(h”X-hq]hp]hn]ho]ht]uhvMš hwhhx]rªJ(h–)r«J}r¬J(h\XóFor each flag specified, it will assign its default value, evaluate all conditions with this flag assignment, and check if all dependencies can be satisfied. If this check succeeded, the package will be configured with those flag assignments. h]j§Jhhhihjh™hl}r­J(hn]ho]hp]hq]ht]uhvNhwhhx]r®Jh…)r¯J}r°J(h\XòFor each flag specified, it will assign its default value, evaluate all conditions with this flag assignment, and check if all dependencies can be satisfied. If this check succeeded, the package will be configured with those flag assignments.r±Jh]j«Jhhhihjh‰hl}r²J(hn]ho]hp]hq]ht]uhvMš hx]r³JhXòFor each flag specified, it will assign its default value, evaluate all conditions with this flag assignment, and check if all dependencies can be satisfied. If this check succeeded, the package will be configured with those flag assignments.r´J…rµJ}r¶J(h\j±Jh]j¯Jubaubaubh–)r·J}r¸J(h\X9If dependencies were missing, the last flag (as by the order in which the flags were introduced in the package description) is tried with its alternative value and so on. This continues until either an assignment is found where all dependencies can be satisfied, or all possible flag assignments have been tried. h]j§Jhhhihjh™hl}r¹J(hn]ho]hp]hq]ht]uhvNhwhhx]rºJh…)r»J}r¼J(h\X8If dependencies were missing, the last flag (as by the order in which the flags were introduced in the package description) is tried with its alternative value and so on. This continues until either an assignment is found where all dependencies can be satisfied, or all possible flag assignments have been tried.r½Jh]j·Jhhhihjh‰hl}r¾J(hn]ho]hp]hq]ht]uhvMŸ hx]r¿JhX8If dependencies were missing, the last flag (as by the order in which the flags were introduced in the package description) is tried with its alternative value and so on. This continues until either an assignment is found where all dependencies can be satisfied, or all possible flag assignments have been tried.rÀJ…rÁJ}rÂJ(h\j½Jh]j»Jubaubaubeubh…)rÃJ}rÄJ(h\XTo put it another way, Cabal does a complete backtracking search to find a satisfiable package configuration. It is only the dependencies specified in the :pkg-field:`build-depends` field in conditional blocks that determine if a particular flag assignment is satisfiable (:pkg-field:`build-tools` are not considered). The order of the declaration and the default value of the flags determines the search order. Flags overridden on the command line fix the assignment of that flag, so no backtracking will be tried for that flag.h]j‡Jhhhihjh‰hl}rÅJ(hn]ho]hp]hq]ht]uhvM¥ hwhhx]rÆJ(hX›To put it another way, Cabal does a complete backtracking search to find a satisfiable package configuration. It is only the dependencies specified in the rÇJ…rÈJ}rÉJ(h\X›To put it another way, Cabal does a complete backtracking search to find a satisfiable package configuration. It is only the dependencies specified in the hhNhvNhwhh]jÃJubjt)rÊJ}rËJ(h\X:pkg-field:`build-depends`h]jÃJhhhihjjwhl}rÌJ(UreftypeX pkg-fieldjyˆjzX build-dependsrÍJU refdomainXcabalrÎJhq]hp]U refexplicit‰hn]ho]ht]j}j~j”XflagrÏJuhvM¥ hx]rÐJhç)rÑJ}rÒJ(h\jÍJhl}rÓJ(hn]ho]rÔJ(j…jÎJXcabal-pkg-fieldrÕJehp]hq]ht]uh]jÊJhx]rÖJhX build-dependsr×J…rØJ}rÙJ(h\Uh]jÑJubahjhïubaubhX\ field in conditional blocks that determine if a particular flag assignment is satisfiable (rÚJ…rÛJ}rÜJ(h\X\ field in conditional blocks that determine if a particular flag assignment is satisfiable (hhNhvNhwhh]jÃJubjt)rÝJ}rÞJ(h\X:pkg-field:`build-tools`h]jÃJhhhihjjwhl}rßJ(UreftypeX pkg-fieldjyˆjzX build-toolsràJU refdomainXcabalráJhq]hp]U refexplicit‰hn]ho]ht]j}j~j”jÏJuhvM¥ hx]râJhç)rãJ}räJ(h\jàJhl}råJ(hn]ho]ræJ(j…jáJXcabal-pkg-fieldrçJehp]hq]ht]uh]jÝJhx]rèJhX build-toolsréJ…rêJ}rëJ(h\Uh]jãJubahjhïubaubhXè are not considered). The order of the declaration and the default value of the flags determines the search order. Flags overridden on the command line fix the assignment of that flag, so no backtracking will be tried for that flag.rìJ…ríJ}rîJ(h\Xè are not considered). The order of the declaration and the default value of the flags determines the search order. Flags overridden on the command line fix the assignment of that flag, so no backtracking will be tried for that flag.hhNhvNhwhh]jÃJubeubh…)rïJ}rðJ(h\XbIf no suitable flag assignment could be found, the configuration phase will fail and a list of missing dependencies will be printed. Note that this resolution process is exponential in the worst case (i.e., in the case where dependencies cannot be satisfied). There are some optimizations applied internally, but the overall complexity remains unchanged.rñJh]j‡Jhhhihjh‰hl}ròJ(hn]ho]hp]hq]ht]uhvM® hwhhx]róJhXbIf no suitable flag assignment could be found, the configuration phase will fail and a list of missing dependencies will be printed. Note that this resolution process is exponential in the worst case (i.e., in the case where dependencies cannot be satisfied). There are some optimizations applied internally, but the overall complexity remains unchanged.rôJ…rõJ}röJ(h\jñJhhNhvNhwhh]jïJubaubeubeubh^)r÷J}røJ(h\Uh]hdhhhihjhkhl}rùJ(hn]ho]hp]hq]rúJU/meaning-of-field-values-when-using-conditionalsrûJaht]rüJh!auhvM¶ hwhhx]rýJ(hz)rþJ}rÿJ(h\X/Meaning of field values when using conditionalsrKh]j÷Jhhhihjh~hl}rK(hn]ho]hp]hq]ht]uhvM¶ hwhhx]rKhX/Meaning of field values when using conditionalsrK…rK}rK(h\jKhhNhvNhwhh]jþJubaubh…)rK}rK(h\XDuring the configuration phase, a flag assignment is chosen, all conditionals are evaluated, and the package description is combined into a flat package descriptions. If the same field both inside a conditional and outside then they are combined using the following rules.rKh]j÷Jhhhihjh‰hl}r K(hn]ho]hp]hq]ht]uhvM¸ hwhhx]r KhXDuring the configuration phase, a flag assignment is chosen, all conditionals are evaluated, and the package description is combined into a flat package descriptions. If the same field both inside a conditional and outside then they are combined using the following rules.r K…r K}r K(h\jKhhNhvNhwhh]jKubaubh)rK}rK(h\Uh]j÷Jhhhihjh’hl}rK(h”X-hq]hp]hn]ho]ht]uhvM½ hwhhx]rK(h–)rK}rK(h\X?Boolean fields are combined using conjunction (logical "and"). h]jKhhhihjh™hl}rK(hn]ho]hp]hq]ht]uhvNhwhhx]rKh…)rK}rK(h\X>Boolean fields are combined using conjunction (logical "and").rKh]jKhhhihjh‰hl}rK(hn]ho]hp]hq]ht]uhvM½ hx]rKhXBBoolean fields are combined using conjunction (logical “andâ€).rK…rK}rK(h\jKh]jKubaubaubh–)rK}rK(h\X¸List fields are combined by appending the inner items to the outer items, for example :: other-extensions: CPP if impl(ghc) other-extensions: MultiParamTypeClasses when compiled using GHC will be combined to :: other-extensions: CPP, MultiParamTypeClasses Similarly, if two conditional sections appear at the same nesting level, properties specified in the latter will come after properties specified in the former. h]jKhhhihjh™hl}r K(hn]ho]hp]hq]ht]uhvNhwhhx]r!K(h…)r"K}r#K(h\XUList fields are combined by appending the inner items to the outer items, for exampler$Kh]jKhhhihjh‰hl}r%K(hn]ho]hp]hq]ht]uhvM¿ hx]r&KhXUList fields are combined by appending the inner items to the outer items, for exampler'K…r(K}r)K(h\j$Kh]j"KubaubjÕ)r*K}r+K(h\XLother-extensions: CPP if impl(ghc) other-extensions: MultiParamTypeClassesh]jKhhhihjjØhl}r,K(jÚjÛhq]hp]hn]ho]ht]uhvMÄ hx]r-KhXLother-extensions: CPP if impl(ghc) other-extensions: MultiParamTypeClassesr.K…r/K}r0K(h\Uh]j*Kubaubh…)r1K}r2K(h\X+when compiled using GHC will be combined tor3Kh]jKhhhihjh‰hl}r4K(hn]ho]hp]hq]ht]uhvMÈ hx]r5KhX+when compiled using GHC will be combined tor6K…r7K}r8K(h\j3Kh]j1KubaubjÕ)r9K}r:K(h\X,other-extensions: CPP, MultiParamTypeClassesh]jKhhhihjjØhl}r;K(jÚjÛhq]hp]hn]ho]ht]uhvMÌ hx]rK}r?K(h\Uh]j9Kubaubh…)r@K}rAK(h\XŸSimilarly, if two conditional sections appear at the same nesting level, properties specified in the latter will come after properties specified in the former.rBKh]jKhhhihjh‰hl}rCK(hn]ho]hp]hq]ht]uhvMÎ hx]rDKhXŸSimilarly, if two conditional sections appear at the same nesting level, properties specified in the latter will come after properties specified in the former.rEK…rFK}rGK(h\jBKh]j@Kubaubeubh–)rHK}rIK(h\XAll other fields must not be specified in ambiguous ways. For example :: Main-is: Main.hs if flag(useothermain) Main-is: OtherMain.hs will lead to an error. Instead use :: if flag(useothermain) Main-is: OtherMain.hs else Main-is: Main.hs h]jKhhhihjh™hl}rJK(hn]ho]hp]hq]ht]uhvNhwhhx]rKK(h…)rLK}rMK(h\XEAll other fields must not be specified in ambiguous ways. For examplerNKh]jHKhhhihjh‰hl}rOK(hn]ho]hp]hq]ht]uhvMÒ hx]rPKhXEAll other fields must not be specified in ambiguous ways. For examplerQK…rRK}rSK(h\jNKh]jLKubaubjÕ)rTK}rUK(h\X>Main-is: Main.hs if flag(useothermain) Main-is: OtherMain.hsh]jHKhhhihjjØhl}rVK(jÚjÛhq]hp]hn]ho]ht]uhvMÖ hx]rWKhX>Main-is: Main.hs if flag(useothermain) Main-is: OtherMain.hsrXK…rYK}rZK(h\Uh]jTKubaubh…)r[K}r\K(h\X"will lead to an error. Instead user]Kh]jHKhhhihjh‰hl}r^K(hn]ho]hp]hq]ht]uhvMÚ hx]r_KhX"will lead to an error. Instead user`K…raK}rbK(h\j]Kh]j[KubaubjÕ)rcK}rdK(h\XEif flag(useothermain) Main-is: OtherMain.hs else Main-is: Main.hsh]jHKhhhihjjØhl}reK(jÚjÛhq]hp]hn]ho]ht]uhvMÞ hx]rfKhXEif flag(useothermain) Main-is: OtherMain.hs else Main-is: Main.hsrgK…rhK}riK(h\Uh]jcKubaubeubeubeubh^)rjK}rkK(h\UhaKh]hdhhhihjhkhl}rlK(hn]ho]hp]hq]rmKUcommon-stanzasrnKaht]roKhauhvMä hwhhx]rpK(hz)rqK}rrK(h\XCommon stanzasrsKh]jjKhhhihjh~hl}rtK(hn]ho]hp]hq]ht]uhvMä hwhhx]ruKhXCommon stanzasrvK…rwK}rxK(h\jsKhhNhvNhwhh]jqKubaubj*)ryK}rzK(h\Uh]jjKhhNhjj-hl}r{K(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r|K}r}K(h\Uh]jjKhhNhjj2hl}r~K(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-sectionrKj8jKuhvNhwhhx]r€K(j:)rK}r‚K(h\X common nameh]j|Khhhihjj>hl}rƒK(hq]r„KXpkg-section-common-commonr…Kahp]hn]ho]ht]jB‰uhvNhwhhx]r†K(j*)r‡K}rˆK(h\Uh]jKhhhihjj-hl}r‰K(hq]hp]hn]ho]ht]Uentries]rŠK(jHX$common:common; package.cabal sectionj…KUNtr‹KauhvNhwhhx]ubjJ)rŒK}rK(h\XcommonrŽKh]jKhhhihjjMhl}rK(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rKhXcommonr‘K…r’K}r“K(h\UhhNhvNhwhh]jŒKubaubjS)r”K}r•K(h\U h]jKhhhihjjVhl}r–K(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r—KhX …r˜K}r™K(h\UhhNhvNhwhh]j”KubaubjÒ)ršK}r›K(h\Xnameh]jKhhhihjjÕhl}rœK(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rKhXnameržK…rŸK}r K(h\UhhNhvNhwhh]jšKubaubeubj[)r¡K}r¢K(h\Uh]j|Khhhihjj^hl}r£K(hn]ho]hp]hq]ht]uhvNhwhhx]r¤Kja)r¥K}r¦K(h\Uh]j¡KhhNhjjdhl}r§K(hn]ho]hp]hq]ht]uhvNhwhhx]r¨Kjg)r©K}rªK(h\Uh]j¥KhhNhjjjhl}r«K(hn]ho]hp]hq]ht]uhvNhwhhx]r¬K(jm)r­K}r®K(h\jph]j©Khhhihjjqhl}r¯K(hn]ho]hp]hq]ht]uhvKhx]r°KhXSincer±K…r²K}r³K(h\Uh]j­Kubaubjw)r´K}rµK(h\U Cabal 2.2r¶Khl}r·K(hn]ho]hp]hq]ht]uh]j©Khx]r¸Kh…)r¹K}rºK(h\j¶Khl}r»K(hn]ho]hp]hq]ht]uh]j´Khx]r¼KhX Cabal 2.2r½K…r¾K}r¿K(h\Uh]j¹Kubahjh‰ubahjj„ubeubaubaubeubh…)rÀK}rÁK(h\XGStarting with Cabal-2.2 it's possible to use common build info stanzas.rÂKh]jjKhhhihjh‰hl}rÃK(hn]ho]hp]hq]ht]uhvMê hwhhx]rÄKhXIStarting with Cabal-2.2 it’s possible to use common build info stanzas.rÅK…rÆK}rÇK(h\jÂKhhNhvNhwhh]jÀKubaubjÕ)rÈK}rÉK(h\Xcommon deps build-depends: base ^>= 4.11 ghc-options: -Wall common test-deps build-depends: tasty ^>= 0.12.0.1 library import: deps exposed-modules: Foo test-suite tests import: deps, test-deps type: exitcode-stdio-1.0 main-is: Tests.hs build-depends: fooh]jjKhhhihjjØhl}rÊK(jÚjÛhq]hp]hn]ho]ht]uhvMî hwhhx]rËKhXcommon deps build-depends: base ^>= 4.11 ghc-options: -Wall common test-deps build-depends: tasty ^>= 0.12.0.1 library import: deps exposed-modules: Foo test-suite tests import: deps, test-deps type: exitcode-stdio-1.0 main-is: Tests.hs build-depends: foorÌK…rÍK}rÎK(h\Uh]jÈKubaubh)rÏK}rÐK(h\Uh]jjKhhhihjh’hl}rÑK(h”X-hq]hp]hn]ho]ht]uhvMÿ hwhhx]rÒK(h–)rÓK}rÔK(h\X;You can use `build information`_ fields in common stanzas. h]jÏKhhhihjh™hl}rÕK(hn]ho]hp]hq]ht]uhvNhwhhx]rÖKh…)r×K}rØK(h\X:You can use `build information`_ fields in common stanzas.h]jÓKhhhihjh‰hl}rÙK(hn]ho]hp]hq]ht]uhvMÿ hx]rÚK(hX You can use rÛK…rÜK}rÝK(h\X You can use h]j×KubjH)rÞK}rßK(h\X`build information`_jKKh]j×KhjjLhl}ràK(UnameXbuild informationhq]hp]hn]ho]ht]jNj uhx]ráKhXbuild informationrâK…rãK}räK(h\Xbuild informationh]jÞKubaubhX fields in common stanzas.råK…ræK}rçK(h\X fields in common stanzas.h]j×Kubeubaubh–)rèK}réK(h\X+Common stanzas must be defined before use. h]jÏKhhhihjh™hl}rêK(hn]ho]hp]hq]ht]uhvNhwhhx]rëKh…)rìK}ríK(h\X*Common stanzas must be defined before use.rîKh]jèKhhhihjh‰hl}rïK(hn]ho]hp]hq]ht]uhvM hx]rðKhX*Common stanzas must be defined before use.rñK…ròK}róK(h\jîKh]jìKubaubaubh–)rôK}rõK(h\X0Common stanzas can import other common stanzas. h]jÏKhhhihjh™hl}röK(hn]ho]hp]hq]ht]uhvNhwhhx]r÷Kh…)røK}rùK(h\X/Common stanzas can import other common stanzas.rúKh]jôKhhhihjh‰hl}rûK(hn]ho]hp]hq]ht]uhvM hx]rüKhX/Common stanzas can import other common stanzas.rýK…rþK}rÿK(h\júKh]jøKubaubaubh–)rL}rL(h\XSYou can import multiple stanzas at once. Stanza names must be separated by commas. h]jÏKhhhihjh™hl}rL(hn]ho]hp]hq]ht]uhvNhwhhx]rLh…)rL}rL(h\XRYou can import multiple stanzas at once. Stanza names must be separated by commas.rLh]jLhhhihjh‰hl}rL(hn]ho]hp]hq]ht]uhvM hx]rLhXRYou can import multiple stanzas at once. Stanza names must be separated by commas.r L…r L}r L(h\jLh]jLubaubaubh–)r L}r L(h\Xo``import`` must be the first field in a section. Since Cabal 3.0 imports are also allowed inside conditionals. h]jÏKhhhihjh™hl}rL(hn]ho]hp]hq]ht]uhvNhwhhx]rLh…)rL}rL(h\Xn``import`` must be the first field in a section. Since Cabal 3.0 imports are also allowed inside conditionals.h]j Lhhhihjh‰hl}rL(hn]ho]hp]hq]ht]uhvM hx]rL(hç)rL}rL(h\X ``import``hl}rL(hn]ho]hp]hq]ht]uh]jLhx]rLhXimportrL…rL}rL(h\Ximporth]jLubahjhïubhXd must be the first field in a section. Since Cabal 3.0 imports are also allowed inside conditionals.rL…rL}rL(h\Xd must be the first field in a section. Since Cabal 3.0 imports are also allowed inside conditionals.h]jLubeubaubeubhó)rL}rL(h\XBThe name `import` was chosen, because there is ``includes`` field.r Lh]jjKhhhihjhöhl}r!L(hn]ho]hp]hq]ht]uhvNhwhhx]r"Lh…)r#L}r$L(h\j Lh]jLhhhihjh‰hl}r%L(hn]ho]hp]hq]ht]uhvM hx]r&L(hX The name r'L…r(L}r)L(h\X The name h]j#Lubjª()r*L}r+L(h\X`import`hl}r,L(hn]ho]hp]hq]ht]uh]j#Lhx]r-LhXimportr.L…r/L}r0L(h\Ximporth]j*Lubahjj²(ubhX was chosen, because there is r1L…r2L}r3L(h\X was chosen, because there is h]j#Lubhç)r4L}r5L(h\X ``includes``hl}r6L(hn]ho]hp]hq]ht]uh]j#Lhx]r7LhXincludesr8L…r9L}r:L(h\Xincludesh]j4LubahjhïubhX field.r;L…rL}r?L(h\Uh]hdhhhihjhkhl}r@L(hn]ho]hp]hq]rALUsource-repositoriesrBLaht]rCLh0auhvM hwhhx]rDL(hz)rEL}rFL(h\XSource RepositoriesrGLh]j>Lhhhihjh~hl}rHL(hn]ho]hp]hq]ht]uhvM hwhhx]rILhXSource RepositoriesrJL…rKL}rLL(h\jGLhhNhvNhwhh]jELubaubj*)rML}rNL(h\Uh]j>LhhNhjj-hl}rOL(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rPL}rQL(h\Uh]j>LhhNhjj2hl}rRL(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-sectionrSLj8jSLuhvNhwhhx]rTL(j:)rUL}rVL(h\Xsource-repositoryrWLh]jPLhhhihjj>hl}rXL(hq]rYLX/pkg-section-source-repository-source-repositoryrZLahp]hn]ho]ht]jB‰uhvNhwhhx]r[L(j*)r\L}r]L(h\Uh]jULhhhihjj-hl}r^L(hq]hp]hn]ho]ht]Uentries]r_L(jHX:source-repository:source-repository; package.cabal sectionjZLUNtr`LauhvNhwhhx]ubjJ)raL}rbL(h\jWLh]jULhhhihjjMhl}rcL(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rdLhXsource-repositoryreL…rfL}rgL(h\UhhNhvNhwhh]jaLubaubjS)rhL}riL(h\U h]jULhhhihjjVhl}rjL(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rkLhX …rlL}rmL(h\UhhNhvNhwhh]jhLubaubeubj[)rnL}roL(h\Uh]jPLhhhihjj^hl}rpL(hn]ho]hp]hq]ht]uhvNhwhhx]rqLja)rrL}rsL(h\Uh]jnLhhNhjjdhl}rtL(hn]ho]hp]hq]ht]uhvNhwhhx]ruLjg)rvL}rwL(h\Uh]jrLhhNhjjjhl}rxL(hn]ho]hp]hq]ht]uhvNhwhhx]ryL(jm)rzL}r{L(h\jph]jvLhhhihjjqhl}r|L(hn]ho]hp]hq]ht]uhvKhx]r}LhXSincer~L…rL}r€L(h\Uh]jzLubaubjw)rL}r‚L(h\U Cabal 1.6rƒLhl}r„L(hn]ho]hp]hq]ht]uh]jvLhx]r…Lh…)r†L}r‡L(h\jƒLhl}rˆL(hn]ho]hp]hq]ht]uh]jLhx]r‰LhX Cabal 1.6rŠL…r‹L}rŒL(h\Uh]j†Lubahjh‰ubahjj„ubeubaubaubeubh…)rL}rŽL(h\XYIt is often useful to be able to specify a source revision control repository for a package. Cabal lets you specifying this information in a relatively structured form which enables other tools to interpret and make effective use of the information. For example the information should be sufficient for an automatic tool to checkout the sources.rLh]j>Lhhhihjh‰hl}rL(hn]ho]hp]hq]ht]uhvM hwhhx]r‘LhXYIt is often useful to be able to specify a source revision control repository for a package. Cabal lets you specifying this information in a relatively structured form which enables other tools to interpret and make effective use of the information. For example the information should be sufficient for an automatic tool to checkout the sources.r’L…r“L}r”L(h\jLhhNhvNhwhh]jLubaubh…)r•L}r–L(h\X¥Cabal supports specifying different information for various common source control systems. Obviously not all automated tools will support all source control systems.r—Lh]j>Lhhhihjh‰hl}r˜L(hn]ho]hp]hq]ht]uhvM hwhhx]r™LhX¥Cabal supports specifying different information for various common source control systems. Obviously not all automated tools will support all source control systems.ršL…r›L}rœL(h\j—LhhNhvNhwhh]j•Lubaubh…)rL}ržL(h\XªCabal supports specifying repositories for different use cases. By declaring which case we mean automated tools can be more useful. There are currently two kinds defined:rŸLh]j>Lhhhihjh‰hl}r L(hn]ho]hp]hq]ht]uhvM hwhhx]r¡LhXªCabal supports specifying repositories for different use cases. By declaring which case we mean automated tools can be more useful. There are currently two kinds defined:r¢L…r£L}r¤L(h\jŸLhhNhvNhwhh]jLubaubh)r¥L}r¦L(h\Uh]j>Lhhhihjh’hl}r§L(h”X-hq]hp]hn]ho]ht]uhvM" hwhhx]r¨L(h–)r©L}rªL(h\XâThe ``head`` kind refers to the latest development branch of the package. This may be used for example to track activity of a project or as an indication to outside developers what sources to get for making new contributions. h]j¥Lhhhihjh™hl}r«L(hn]ho]hp]hq]ht]uhvNhwhhx]r¬Lh…)r­L}r®L(h\XáThe ``head`` kind refers to the latest development branch of the package. This may be used for example to track activity of a project or as an indication to outside developers what sources to get for making new contributions.h]j©Lhhhihjh‰hl}r¯L(hn]ho]hp]hq]ht]uhvM" hx]r°L(hXThe r±L…r²L}r³L(h\XThe h]j­Lubhç)r´L}rµL(h\X``head``hl}r¶L(hn]ho]hp]hq]ht]uh]j­Lhx]r·LhXheadr¸L…r¹L}rºL(h\Xheadh]j´LubahjhïubhXÕ kind refers to the latest development branch of the package. This may be used for example to track activity of a project or as an indication to outside developers what sources to get for making new contributions.r»L…r¼L}r½L(h\XÕ kind refers to the latest development branch of the package. This may be used for example to track activity of a project or as an indication to outside developers what sources to get for making new contributions.h]j­Lubeubaubh–)r¾L}r¿L(h\XâThe ``this`` kind refers to the branch and tag of a repository that contains the sources for this version or release of a package. For most source control systems this involves specifying a tag, id or hash of some form and perhaps a branch. The purpose is to be able to reconstruct the sources corresponding to a particular package version. This might be used to indicate what sources to get if someone needs to fix a bug in an older branch that is no longer an active head branch. h]j¥Lhhhihjh™hl}rÀL(hn]ho]hp]hq]ht]uhvNhwhhx]rÁLh…)rÂL}rÃL(h\XáThe ``this`` kind refers to the branch and tag of a repository that contains the sources for this version or release of a package. For most source control systems this involves specifying a tag, id or hash of some form and perhaps a branch. The purpose is to be able to reconstruct the sources corresponding to a particular package version. This might be used to indicate what sources to get if someone needs to fix a bug in an older branch that is no longer an active head branch.h]j¾Lhhhihjh‰hl}rÄL(hn]ho]hp]hq]ht]uhvM' hx]rÅL(hXThe rÆL…rÇL}rÈL(h\XThe h]jÂLubhç)rÉL}rÊL(h\X``this``hl}rËL(hn]ho]hp]hq]ht]uh]jÂLhx]rÌLhXthisrÍL…rÎL}rÏL(h\Xthish]jÉLubahjhïubhXÕ kind refers to the branch and tag of a repository that contains the sources for this version or release of a package. For most source control systems this involves specifying a tag, id or hash of some form and perhaps a branch. The purpose is to be able to reconstruct the sources corresponding to a particular package version. This might be used to indicate what sources to get if someone needs to fix a bug in an older branch that is no longer an active head branch.rÐL…rÑL}rÒL(h\XÕ kind refers to the branch and tag of a repository that contains the sources for this version or release of a package. For most source control systems this involves specifying a tag, id or hash of some form and perhaps a branch. The purpose is to be able to reconstruct the sources corresponding to a particular package version. This might be used to indicate what sources to get if someone needs to fix a bug in an older branch that is no longer an active head branch.h]jÂLubeubaubeubh…)rÓL}rÔL(h\X¨You can specify one kind or the other or both. As an example here are the repositories for the Cabal library. Note that the ``this`` kind of repository specifies a tag.h]j>Lhhhihjh‰hl}rÕL(hn]ho]hp]hq]ht]uhvM0 hwhhx]rÖL(hX|You can specify one kind or the other or both. As an example here are the repositories for the Cabal library. Note that the r×L…rØL}rÙL(h\X|You can specify one kind or the other or both. As an example here are the repositories for the Cabal library. Note that the hhNhvNhwhh]jÓLubhç)rÚL}rÛL(h\X``this``hl}rÜL(hn]ho]hp]hq]ht]uh]jÓLhx]rÝLhXthisrÞL…rßL}ràL(h\Xthish]jÚLubahjhïubhX$ kind of repository specifies a tag.ráL…râL}rãL(h\X$ kind of repository specifies a tag.hhNhvNhwhh]jÓLubeubjÕ)räL}råL(h\XÏsource-repository head type: darcs location: http://darcs.haskell.org/cabal/ source-repository this type: darcs location: http://darcs.haskell.org/cabal-branches/cabal-1.6/ tag: 1.6.1h]j>LhhhihjjØhl}ræL(jÚjÛhq]hp]hn]ho]ht]uhvM6 hwhhx]rçLhXÏsource-repository head type: darcs location: http://darcs.haskell.org/cabal/ source-repository this type: darcs location: http://darcs.haskell.org/cabal-branches/cabal-1.6/ tag: 1.6.1rèL…réL}rêL(h\Uh]jäLubaubh…)rëL}rìL(h\X The exact fields are as follows:ríLh]j>Lhhhihjh‰hl}rîL(hn]ho]hp]hq]ht]uhvM? hwhhx]rïLhX The exact fields are as follows:rðL…rñL}ròL(h\jíLhhNhvNhwhh]jëLubaubj*)róL}rôL(h\Uh]j>Lhhhihjj-hl}rõL(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)röL}r÷L(h\Uh]j>Lhhhihjj2hl}røL(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrùLj8jùLuhvNhwhhx]rúL(j:)rûL}rüL(h\X type: tokenh]jöLhhhihjj>hl}rýL(hq]rþLX pkg-field-source-repository-typerÿLahp]hn]ho]ht]jB‰uhvMP hwhhx]rM(j*)rM}rM(h\Uh]jûLhhhihjj-hl}rM(hq]hp]hn]ho]ht]Uentries]rM(jHX+source-repository:type; package.cabal fieldjÿLUNtrMauhvMP hwhhx]ubjJ)rM}rM(h\XtyperMh]jûLhhhihjjMhl}r M(jÚjÛhq]hp]hn]ho]ht]uhvMP hwhhx]r MhXtyper M…r M}r M(h\UhhNhvNhwhh]jMubaubjS)rM}rM(h\jÌh]jûLhhhihjjVhl}rM(jÚjÛhq]hp]hn]ho]ht]uhvMP hwhhx]rMhX: rM…rM}rM(h\UhhNhvNhwhh]jMubaubjÒ)rM}rM(h\Xtokenh]jûLhhhihjjÕhl}rM(jÚjÛhq]hp]hn]ho]ht]uhvMP hwhhx]rMhXtokenrM…rM}rM(h\UhhNhvNhwhh]jMubaubeubj[)rM}rM(h\Uh]jöLhhhihjj^hl}rM(hn]ho]hp]hq]ht]uhvMP hwhhx]rM(h…)r M}r!M(h\XcThe name of the source control system used for this repository. The currently recognised types are:r"Mh]jMhhhihjh‰hl}r#M(hn]ho]hp]hq]ht]uhvMC hwhhx]r$MhXcThe name of the source control system used for this repository. The currently recognised types are:r%M…r&M}r'M(h\j"MhhNhvNhwhh]j Mubaubh)r(M}r)M(h\Uh]jMhhhihjh’hl}r*M(h”X-hq]hp]hn]ho]ht]uhvMF hwhhx]r+M(h–)r,M}r-M(h\X ``darcs``r.Mh]j(Mhhhihjh™hl}r/M(hn]ho]hp]hq]ht]uhvNhwhhx]r0Mh…)r1M}r2M(h\j.Mh]j,Mhhhihjh‰hl}r3M(hn]ho]hp]hq]ht]uhvMF hx]r4Mhç)r5M}r6M(h\j.Mhl}r7M(hn]ho]hp]hq]ht]uh]j1Mhx]r8MhXdarcsr9M…r:M}r;M(h\Xdarcsh]j5Mubahjhïubaubaubh–)rMh]j(Mhhhihjh™hl}r?M(hn]ho]hp]hq]ht]uhvNhwhhx]r@Mh…)rAM}rBM(h\j>Mh]jMhl}rGM(hn]ho]hp]hq]ht]uh]jAMhx]rHMhXgitrIM…rJM}rKM(h\Xgith]jEMubahjhïubaubaubh–)rLM}rMM(h\X``svn``rNMh]j(Mhhhihjh™hl}rOM(hn]ho]hp]hq]ht]uhvNhwhhx]rPMh…)rQM}rRM(h\jNMh]jLMhhhihjh‰hl}rSM(hn]ho]hp]hq]ht]uhvMH hx]rTMhç)rUM}rVM(h\jNMhl}rWM(hn]ho]hp]hq]ht]uh]jQMhx]rXMhXsvnrYM…rZM}r[M(h\Xsvnh]jUMubahjhïubaubaubh–)r\M}r]M(h\X``cvs``r^Mh]j(Mhhhihjh™hl}r_M(hn]ho]hp]hq]ht]uhvNhwhhx]r`Mh…)raM}rbM(h\j^Mh]j\Mhhhihjh‰hl}rcM(hn]ho]hp]hq]ht]uhvMI hx]rdMhç)reM}rfM(h\j^Mhl}rgM(hn]ho]hp]hq]ht]uh]jaMhx]rhMhXcvsriM…rjM}rkM(h\Xcvsh]jeMubahjhïubaubaubh–)rlM}rmM(h\X``mercurial`` (or alias ``hg``)rnMh]j(Mhhhihjh™hl}roM(hn]ho]hp]hq]ht]uhvNhwhhx]rpMh…)rqM}rrM(h\jnMh]jlMhhhihjh‰hl}rsM(hn]ho]hp]hq]ht]uhvMJ hx]rtM(hç)ruM}rvM(h\X ``mercurial``hl}rwM(hn]ho]hp]hq]ht]uh]jqMhx]rxMhX mercurialryM…rzM}r{M(h\X mercurialh]juMubahjhïubhX (or alias r|M…r}M}r~M(h\X (or alias h]jqMubhç)rM}r€M(h\X``hg``hl}rM(hn]ho]hp]hq]ht]uh]jqMhx]r‚MhXhgrƒM…r„M}r…M(h\Xhgh]jMubahjhïubhX)…r†M}r‡M(h\X)h]jqMubeubaubh–)rˆM}r‰M(h\X``bazaar`` (or alias ``bzr``)rŠMh]j(Mhhhihjh™hl}r‹M(hn]ho]hp]hq]ht]uhvNhwhhx]rŒMh…)rM}rŽM(h\jŠMh]jˆMhhhihjh‰hl}rM(hn]ho]hp]hq]ht]uhvMK hx]rM(hç)r‘M}r’M(h\X ``bazaar``hl}r“M(hn]ho]hp]hq]ht]uh]jMhx]r”MhXbazaarr•M…r–M}r—M(h\Xbazaarh]j‘MubahjhïubhX (or alias r˜M…r™M}ršM(h\X (or alias h]jMubhç)r›M}rœM(h\X``bzr``hl}rM(hn]ho]hp]hq]ht]uh]jMhx]ržMhXbzrrŸM…r M}r¡M(h\Xbzrh]j›MubahjhïubhX)…r¢M}r£M(h\X)h]jMubeubaubh–)r¤M}r¥M(h\X``arch``r¦Mh]j(Mhhhihjh™hl}r§M(hn]ho]hp]hq]ht]uhvNhwhhx]r¨Mh…)r©M}rªM(h\j¦Mh]j¤Mhhhihjh‰hl}r«M(hn]ho]hp]hq]ht]uhvML hx]r¬Mhç)r­M}r®M(h\j¦Mhl}r¯M(hn]ho]hp]hq]ht]uh]j©Mhx]r°MhXarchr±M…r²M}r³M(h\Xarchh]j­Mubahjhïubaubaubh–)r´M}rµM(h\X ``monotone`` h]j(Mhhhihjh™hl}r¶M(hn]ho]hp]hq]ht]uhvNhwhhx]r·Mh…)r¸M}r¹M(h\X ``monotone``rºMh]j´Mhhhihjh‰hl}r»M(hn]ho]hp]hq]ht]uhvMM hx]r¼Mhç)r½M}r¾M(h\jºMhl}r¿M(hn]ho]hp]hq]ht]uh]j¸Mhx]rÀMhXmonotonerÁM…rÂM}rÃM(h\Xmonotoneh]j½Mubahjhïubaubaubeubh…)rÄM}rÅM(h\XThis field is required.rÆMh]jMhhhihjh‰hl}rÇM(hn]ho]hp]hq]ht]uhvMO hwhhx]rÈMhXThis field is required.rÉM…rÊM}rËM(h\jÆMhhNhvNhwhh]jÄMubaubeubeubj*)rÌM}rÍM(h\Uh]j>Lhhhihjj-hl}rÎM(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rÏM}rÐM(h\Uh]j>Lhhhihjj2hl}rÑM(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrÒMj8jÒMuhvNhwhhx]rÓM(j:)rÔM}rÕM(h\X location: URLh]jÏMhhhihjj>hl}rÖM(hq]r×MX$pkg-field-source-repository-locationrØMahp]hn]ho]ht]jB‰uhvM[ hwhhx]rÙM(j*)rÚM}rÛM(h\Uh]jÔMhhhihjj-hl}rÜM(hq]hp]hn]ho]ht]Uentries]rÝM(jHX/source-repository:location; package.cabal fieldjØMUNtrÞMauhvM[ hwhhx]ubjJ)rßM}ràM(h\XlocationráMh]jÔMhhhihjjMhl}râM(jÚjÛhq]hp]hn]ho]ht]uhvM[ hwhhx]rãMhXlocationräM…råM}ræM(h\UhhNhvNhwhh]jßMubaubjS)rçM}rèM(h\jÌh]jÔMhhhihjjVhl}réM(jÚjÛhq]hp]hn]ho]ht]uhvM[ hwhhx]rêMhX: rëM…rìM}ríM(h\UhhNhvNhwhh]jçMubaubjÒ)rîM}rïM(h\XURLh]jÔMhhhihjjÕhl}rðM(jÚjÛhq]hp]hn]ho]ht]uhvM[ hwhhx]rñMhXURLròM…róM}rôM(h\UhhNhvNhwhh]jîMubaubeubj[)rõM}röM(h\Uh]jÏMhhhihjj^hl}r÷M(hn]ho]hp]hq]ht]uhvM[ hwhhx]røM(h…)rùM}rúM(h\XiThe location of the repository. The exact form of this field depends on the repository type. For example:rûMh]jõMhhhihjh‰hl}rüM(hn]ho]hp]hq]ht]uhvMS hwhhx]rýMhXiThe location of the repository. The exact form of this field depends on the repository type. For example:rþM…rÿM}rN(h\jûMhhNhvNhwhh]jùMubaubh)rN}rN(h\Uh]jõMhhhihjh’hl}rN(h”X-hq]hp]hn]ho]ht]uhvMV hwhhx]rN(h–)rN}rN(h\X+for darcs: ``http://code.haskell.org/foo/``rNh]jNhhhihjh™hl}rN(hn]ho]hp]hq]ht]uhvNhwhhx]r Nh…)r N}r N(h\jNh]jNhhhihjh‰hl}r N(hn]ho]hp]hq]ht]uhvMV hx]r N(hX for darcs: rN…rN}rN(h\X for darcs: h]j Nubhç)rN}rN(h\X ``http://code.haskell.org/foo/``hl}rN(hn]ho]hp]hq]ht]uh]j Nhx]rNhXhttp://code.haskell.org/foo/rN…rN}rN(h\Xhttp://code.haskell.org/foo/h]jNubahjhïubeubaubh–)rN}rN(h\X)for git: ``git://github.com/foo/bar.git``rNh]jNhhhihjh™hl}rN(hn]ho]hp]hq]ht]uhvNhwhhx]rNh…)rN}rN(h\jNh]jNhhhihjh‰hl}rN(hn]ho]hp]hq]ht]uhvMW hx]r N(hX for git: r!N…r"N}r#N(h\X for git: h]jNubhç)r$N}r%N(h\X ``git://github.com/foo/bar.git``hl}r&N(hn]ho]hp]hq]ht]uh]jNhx]r'NhXgit://github.com/foo/bar.gitr(N…r)N}r*N(h\Xgit://github.com/foo/bar.gith]j$Nubahjhïubeubaubh–)r+N}r,N(h\X&for CVS: ``anoncvs@cvs.foo.org:/cvs`` h]jNhhhihjh™hl}r-N(hn]ho]hp]hq]ht]uhvNhwhhx]r.Nh…)r/N}r0N(h\X%for CVS: ``anoncvs@cvs.foo.org:/cvs``h]j+Nhhhihjh‰hl}r1N(hn]ho]hp]hq]ht]uhvMX hx]r2N(hX for CVS: r3N…r4N}r5N(h\X for CVS: h]j/Nubhç)r6N}r7N(h\X``anoncvs@cvs.foo.org:/cvs``hl}r8N(hn]ho]hp]hq]ht]uh]j/Nhx]r9NhXanoncvs@cvs.foo.org:/cvsr:N…r;N}rN(h\XThis field is required.r?Nh]jõMhhhihjh‰hl}r@N(hn]ho]hp]hq]ht]uhvMZ hwhhx]rANhXThis field is required.rBN…rCN}rDN(h\j?NhhNhvNhwhh]j=Nubaubeubeubj*)rEN}rFN(h\Uh]j>Lhhhihjj-hl}rGN(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rHN}rIN(h\Uh]j>Lhhhihjj2hl}rJN(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrKNj8jKNuhvNhwhhx]rLN(j:)rMN}rNN(h\X module: tokenh]jHNhhhihjj>hl}rON(hq]rPNX"pkg-field-source-repository-modulerQNahp]hn]ho]ht]jB‰uhvMc hwhhx]rRN(j*)rSN}rTN(h\Uh]jMNhhhihjj-hl}rUN(hq]hp]hn]ho]ht]Uentries]rVN(jHX-source-repository:module; package.cabal fieldjQNUNtrWNauhvMc hwhhx]ubjJ)rXN}rYN(h\XmodulerZNh]jMNhhhihjjMhl}r[N(jÚjÛhq]hp]hn]ho]ht]uhvMc hwhhx]r\NhXmoduler]N…r^N}r_N(h\UhhNhvNhwhh]jXNubaubjS)r`N}raN(h\jÌh]jMNhhhihjjVhl}rbN(jÚjÛhq]hp]hn]ho]ht]uhvMc hwhhx]rcNhX: rdN…reN}rfN(h\UhhNhvNhwhh]j`NubaubjÒ)rgN}rhN(h\Xtokenh]jMNhhhihjjÕhl}riN(jÚjÛhq]hp]hn]ho]ht]uhvMc hwhhx]rjNhXtokenrkN…rlN}rmN(h\UhhNhvNhwhh]jgNubaubeubj[)rnN}roN(h\Uh]jHNhhhihjj^hl}rpN(hn]ho]hp]hq]ht]uhvMc hwhhx]rqN(h…)rrN}rsN(h\XUCVS requires a named module, as each CVS server can host multiple named repositories.rtNh]jnNhhhihjh‰hl}ruN(hn]ho]hp]hq]ht]uhvM^ hwhhx]rvNhXUCVS requires a named module, as each CVS server can host multiple named repositories.rwN…rxN}ryN(h\jtNhhNhvNhwhh]jrNubaubh…)rzN}r{N(h\XTThis field is required for the CVS repository type and should not be used otherwise.r|Nh]jnNhhhihjh‰hl}r}N(hn]ho]hp]hq]ht]uhvMa hwhhx]r~NhXTThis field is required for the CVS repository type and should not be used otherwise.rN…r€N}rN(h\j|NhhNhvNhwhh]jzNubaubeubeubj*)r‚N}rƒN(h\Uh]j>Lhhhihjj-hl}r„N(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)r…N}r†N(h\Uh]j>Lhhhihjj2hl}r‡N(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrˆNj8jˆNuhvNhwhhx]r‰N(j:)rŠN}r‹N(h\X branch: tokenh]j…Nhhhihjj>hl}rŒN(hq]rNX"pkg-field-source-repository-branchrŽNahp]hn]ho]ht]jB‰uhvMm hwhhx]rN(j*)rN}r‘N(h\Uh]jŠNhhhihjj-hl}r’N(hq]hp]hn]ho]ht]Uentries]r“N(jHX-source-repository:branch; package.cabal fieldjŽNUNtr”NauhvMm hwhhx]ubjJ)r•N}r–N(h\Xbranchr—Nh]jŠNhhhihjjMhl}r˜N(jÚjÛhq]hp]hn]ho]ht]uhvMm hwhhx]r™NhXbranchršN…r›N}rœN(h\UhhNhvNhwhh]j•NubaubjS)rN}ržN(h\jÌh]jŠNhhhihjjVhl}rŸN(jÚjÛhq]hp]hn]ho]ht]uhvMm hwhhx]r NhX: r¡N…r¢N}r£N(h\UhhNhvNhwhh]jNubaubjÒ)r¤N}r¥N(h\Xtokenh]jŠNhhhihjjÕhl}r¦N(jÚjÛhq]hp]hn]ho]ht]uhvMm hwhhx]r§NhXtokenr¨N…r©N}rªN(h\UhhNhvNhwhh]j¤Nubaubeubj[)r«N}r¬N(h\Uh]j…Nhhhihjj^hl}r­N(hn]ho]hp]hq]ht]uhvMm hwhhx]r®N(h…)r¯N}r°N(h\XIMany source control systems support the notion of a branch, as a distinct concept from having repositories in separate locations. For example CVS, SVN and git use branches while for darcs uses different locations for different branches. If you need to specify a branch to identify a your repository then specify it in this field.r±Nh]j«Nhhhihjh‰hl}r²N(hn]ho]hp]hq]ht]uhvMf hwhhx]r³NhXIMany source control systems support the notion of a branch, as a distinct concept from having repositories in separate locations. For example CVS, SVN and git use branches while for darcs uses different locations for different branches. If you need to specify a branch to identify a your repository then specify it in this field.r´N…rµN}r¶N(h\j±NhhNhvNhwhh]j¯Nubaubh…)r·N}r¸N(h\XThis field is optional.r¹Nh]j«Nhhhihjh‰hl}rºN(hn]ho]hp]hq]ht]uhvMl hwhhx]r»NhXThis field is optional.r¼N…r½N}r¾N(h\j¹NhhNhvNhwhh]j·Nubaubeubeubj*)r¿N}rÀN(h\Uh]j>Lhhhihjj-hl}rÁN(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rÂN}rÃN(h\Uh]j>Lhhhihjj2hl}rÄN(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrÅNj8jÅNuhvNhwhhx]rÆN(j:)rÇN}rÈN(h\X tag: tokenh]jÂNhhhihjj>hl}rÉN(hq]rÊNXpkg-field-source-repository-tagrËNahp]hn]ho]ht]jB‰uhvMv hwhhx]rÌN(j*)rÍN}rÎN(h\Uh]jÇNhhhihjj-hl}rÏN(hq]hp]hn]ho]ht]Uentries]rÐN(jHX*source-repository:tag; package.cabal fieldjËNUNtrÑNauhvMv hwhhx]ubjJ)rÒN}rÓN(h\XtagrÔNh]jÇNhhhihjjMhl}rÕN(jÚjÛhq]hp]hn]ho]ht]uhvMv hwhhx]rÖNhXtagr×N…rØN}rÙN(h\UhhNhvNhwhh]jÒNubaubjS)rÚN}rÛN(h\jÌh]jÇNhhhihjjVhl}rÜN(jÚjÛhq]hp]hn]ho]ht]uhvMv hwhhx]rÝNhX: rÞN…rßN}ràN(h\UhhNhvNhwhh]jÚNubaubjÒ)ráN}râN(h\Xtokenh]jÇNhhhihjjÕhl}rãN(jÚjÛhq]hp]hn]ho]ht]uhvMv hwhhx]räNhXtokenråN…ræN}rçN(h\UhhNhvNhwhh]jáNubaubeubj[)rèN}réN(h\Uh]jÂNhhhihjj^hl}rêN(hn]ho]hp]hq]ht]uhvMv hwhhx]rëN(h…)rìN}ríN(h\X A tag identifies a particular state of a source repository. The tag can be used with a ``this`` repository kind to identify the state of a repository corresponding to a particular package version or release. The exact form of the tag depends on the repository type.h]jèNhhhihjh‰hl}rîN(hn]ho]hp]hq]ht]uhvMp hwhhx]rïN(hXWA tag identifies a particular state of a source repository. The tag can be used with a rðN…rñN}ròN(h\XWA tag identifies a particular state of a source repository. The tag can be used with a hhNhvNhwhh]jìNubhç)róN}rôN(h\X``this``hl}rõN(hn]ho]hp]hq]ht]uh]jìNhx]röNhXthisr÷N…røN}rùN(h\Xthish]jóNubahjhïubhXª repository kind to identify the state of a repository corresponding to a particular package version or release. The exact form of the tag depends on the repository type.rúN…rûN}rüN(h\Xª repository kind to identify the state of a repository corresponding to a particular package version or release. The exact form of the tag depends on the repository type.hhNhvNhwhh]jìNubeubh…)rýN}rþN(h\X8This field is required for the ``this`` repository kind.h]jèNhhhihjh‰hl}rÿN(hn]ho]hp]hq]ht]uhvMu hwhhx]rO(hXThis field is required for the rO…rO}rO(h\XThis field is required for the hhNhvNhwhh]jýNubhç)rO}rO(h\X``this``hl}rO(hn]ho]hp]hq]ht]uh]jýNhx]rOhXthisrO…r O}r O(h\Xthish]jOubahjhïubhX repository kind.r O…r O}r O(h\X repository kind.hhNhvNhwhh]jýNubeubeubeubj*)rO}rO(h\Uh]j>Lhhhihjj-hl}rO(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rO}rO(h\Uh]j>Lhhhihjj2hl}rO(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrOj8jOuhvNhwhhx]rO(j:)rO}rO(h\Xsubdir: directoryh]jOhhhihjj>hl}rO(hq]rOX"pkg-field-source-repository-subdirrOahp]hn]ho]ht]jB‰uhvM hwhhx]rO(j*)rO}rO(h\Uh]jOhhhihjj-hl}rO(hq]hp]hn]ho]ht]Uentries]rO(jHX-source-repository:subdir; package.cabal fieldjOUNtr OauhvM hwhhx]ubjJ)r!O}r"O(h\Xsubdirr#Oh]jOhhhihjjMhl}r$O(jÚjÛhq]hp]hn]ho]ht]uhvM hwhhx]r%OhXsubdirr&O…r'O}r(O(h\UhhNhvNhwhh]j!OubaubjS)r)O}r*O(h\jÌh]jOhhhihjjVhl}r+O(jÚjÛhq]hp]hn]ho]ht]uhvM hwhhx]r,OhX: r-O…r.O}r/O(h\UhhNhvNhwhh]j)OubaubjÒ)r0O}r1O(h\X directoryh]jOhhhihjjÕhl}r2O(jÚjÛhq]hp]hn]ho]ht]uhvM hwhhx]r3OhX directoryr4O…r5O}r6O(h\UhhNhvNhwhh]j0Oubaubeubj[)r7O}r8O(h\Uh]jOhhhihjj^hl}r9O(hn]ho]hp]hq]ht]uhvM hwhhx]r:O(h…)r;O}rO(hXøSome projects put the sources for multiple packages under a single source repository. This field lets you specify the relative path from the root of the repository to the top directory for the package, i.e. the directory containing the package’s r?O…r@O}rAO(h\XöSome projects put the sources for multiple packages under a single source repository. This field lets you specify the relative path from the root of the repository to the top directory for the package, i.e. the directory containing the package's hhNhvNhwhh]j;Oubhç)rBO}rCO(h\X ``.cabal``hl}rDO(hn]ho]hp]hq]ht]uh]j;Ohx]rEOhX.cabalrFO…rGO}rHO(h\X.cabalh]jBOubahjhïubhX file.rIO…rJO}rKO(h\X file.hhNhvNhwhh]j;Oubeubh…)rLO}rMO(h\XfThis field is optional. It default to empty which corresponds to the root directory of the repository.rNOh]j7Ohhhihjh‰hl}rOO(hn]ho]hp]hq]ht]uhvM hwhhx]rPOhXfThis field is optional. It default to empty which corresponds to the root directory of the repository.rQO…rRO}rSO(h\jNOhhNhvNhwhh]jLOubaubeubeubeubh^)rTO}rUO(h\Uh]hdhhhihjhkhl}rVO(hn]ho]hp]hq]rWOUdownloading-a-package-s-sourcerXOaht]rYOhauhvMƒ hwhhx]rZO(hz)r[O}r\O(h\XDownloading a package's sourcer]Oh]jTOhhhihjh~hl}r^O(hn]ho]hp]hq]ht]uhvMƒ hwhhx]r_OhX Downloading a package’s sourcer`O…raO}rbO(h\j]OhhNhvNhwhh]j[Oubaubh…)rcO}rdO(h\XÐThe ``cabal get`` command allows to access a package's source code - either by unpacking a tarball downloaded from Hackage (the default) or by checking out a working copy from the package's source repository.h]jTOhhhihjh‰hl}reO(hn]ho]hp]hq]ht]uhvM… hwhhx]rfO(hXThe rgO…rhO}riO(h\XThe hhNhvNhwhh]jcOubhç)rjO}rkO(h\X ``cabal get``hl}rlO(hn]ho]hp]hq]ht]uh]jcOhx]rmOhX cabal getrnO…roO}rpO(h\X cabal geth]jjOubahjhïubhXà command allows to access a package’s source code - either by unpacking a tarball downloaded from Hackage (the default) or by checking out a working copy from the package’s source repository.rqO…rrO}rsO(h\X¿ command allows to access a package's source code - either by unpacking a tarball downloaded from Hackage (the default) or by checking out a working copy from the package's source repository.hhNhvNhwhh]jcOubeubjÕ)rtO}ruO(h\X$ cabal get [FLAGS] PACKAGESh]jTOhhhihjjØhl}rvO(jÚjÛhq]hp]hn]ho]ht]uhvM‹ hwhhx]rwOhX$ cabal get [FLAGS] PACKAGESrxO…ryO}rzO(h\Uh]jtOubaubh…)r{O}r|O(h\X3The ``get`` command supports the following options:r}Oh]jTOhhhihjh‰hl}r~O(hn]ho]hp]hq]ht]uhvM hwhhx]rO(hXThe r€O…rO}r‚O(h\XThe hhNhvNhwhh]j{Oubhç)rƒO}r„O(h\X``get``hl}r…O(hn]ho]hp]hq]ht]uh]j{Ohx]r†OhXgetr‡O…rˆO}r‰O(h\Xgeth]jƒOubahjhïubhX( command supports the following options:rŠO…r‹O}rŒO(h\X( command supports the following options:hhNhvNhwhh]j{Oubeubj)rO}rŽO(h\Uh]jTOhhhihjjhl}rO(hn]ho]hp]hq]ht]uhvNhwhhx]rO(j)r‘O}r’O(h\Xq``-d --destdir`` *PATH* Where to place the package source, defaults to (a subdirectory of) the current directory.h]jOhhhihjj!hl}r“O(hn]ho]hp]hq]ht]uhvM hx]r”O(j$)r•O}r–O(h\X``-d --destdir`` *PATH*r—Oh]j‘Ohhhihjj(hl}r˜O(hn]ho]hp]hq]ht]uhvM hx]r™O(hç)ršO}r›O(h\X``-d --destdir``hl}rœO(hn]ho]hp]hq]ht]uh]j•Ohx]rOhX -d --destdirržO…rŸO}r O(h\X -d --destdirh]jšOubahjhïubhX …r¡O}r¢O(h\X h]j•OubhÇ)r£O}r¤O(h\X*PATH*hl}r¥O(hn]ho]hp]hq]ht]uh]j•Ohx]r¦OhXPATHr§O…r¨O}r©O(h\XPATHh]j£OubahjhÏubeubj<)rªO}r«O(h\Uhl}r¬O(hn]ho]hp]hq]ht]uh]j‘Ohx]r­Oh…)r®O}r¯O(h\XYWhere to place the package source, defaults to (a subdirectory of) the current directory.r°Oh]jªOhhhihjh‰hl}r±O(hn]ho]hp]hq]ht]uhvM hx]r²OhXYWhere to place the package source, defaults to (a subdirectory of) the current directory.r³O…r´O}rµO(h\j°Oh]j®OubaubahjjVubeubj)r¶O}r·O(h\XÄ``-s --source-repository`` *[head\|this\|...]* Fork the package's source repository using the appropriate version control system. The optional argument allows to choose a specific repository kind.h]jOhhhihjj!hl}r¸O(hn]ho]hp]hq]ht]uhvM” hwhhx]r¹O(j$)rºO}r»O(h\X.``-s --source-repository`` *[head\|this\|...]*r¼Oh]j¶Ohhhihjj(hl}r½O(hn]ho]hp]hq]ht]uhvM” hx]r¾O(hç)r¿O}rÀO(h\X``-s --source-repository``hl}rÁO(hn]ho]hp]hq]ht]uh]jºOhx]rÂOhX-s --source-repositoryrÃO…rÄO}rÅO(h\X-s --source-repositoryh]j¿OubahjhïubhX …rÆO}rÇO(h\X h]jºOubhÇ)rÈO}rÉO(h\X*[head\|this\|...]*hl}rÊO(hn]ho]hp]hq]ht]uh]jºOhx]rËOhX[head|this|…]rÌO…rÍO}rÎO(h\X[head\|this\|...]h]jÈOubahjhÏubeubj<)rÏO}rÐO(h\Uhl}rÑO(hn]ho]hp]hq]ht]uh]j¶Ohx]rÒOh…)rÓO}rÔO(h\X•Fork the package's source repository using the appropriate version control system. The optional argument allows to choose a specific repository kind.rÕOh]jÏOhhhihjh‰hl}rÖO(hn]ho]hp]hq]ht]uhvM“ hx]r×OhX—Fork the package’s source repository using the appropriate version control system. The optional argument allows to choose a specific repository kind.rØO…rÙO}rÚO(h\jÕOh]jÓOubaubahjjVubeubj)rÛO}rÜO(h\X’``--index-state`` *[HEAD\|@\|]* Use source package index state as it existed at a previous time. Accepts unix-timestamps (e.g. ``@1474732068``), ISO8601 UTC timestamps (e.g. ``2016-09-24T17:47:48Z``), or ``HEAD`` (default). This determines which package versions are available as well as which ``.cabal`` file revision is selected (unless ``--pristine`` is used).h]jOhhhihjj!hl}rÝO(hn]ho]hp]hq]ht]uhvMš hwhhx]rÞO(j$)rßO}ràO(h\XF``--index-state`` *[HEAD\|@\|]*ráOh]jÛOhhhihjj(hl}râO(hn]ho]hp]hq]ht]uhvMš hx]rãO(hç)räO}råO(h\X``--index-state``hl}ræO(hn]ho]hp]hq]ht]uh]jßOhx]rçOhX --index-staterèO…réO}rêO(h\X --index-stateh]jäOubahjhïubhX …rëO}rìO(h\X h]jßOubhÇ)ríO}rîO(h\X4*[HEAD\|@\|]*hl}rïO(hn]ho]hp]hq]ht]uh]jßOhx]rðOhX0[HEAD|@|]rñO…ròO}róO(h\X2[HEAD\|@\|]h]jíOubahjhÏubeubj<)rôO}rõO(h\Uhl}röO(hn]ho]hp]hq]ht]uh]jÛOhx]r÷Oh…)røO}rùO(h\XKUse source package index state as it existed at a previous time. Accepts unix-timestamps (e.g. ``@1474732068``), ISO8601 UTC timestamps (e.g. ``2016-09-24T17:47:48Z``), or ``HEAD`` (default). This determines which package versions are available as well as which ``.cabal`` file revision is selected (unless ``--pristine`` is used).h]jôOhhhihjh‰hl}rúO(hn]ho]hp]hq]ht]uhvM— hx]rûO(hX_Use source package index state as it existed at a previous time. Accepts unix-timestamps (e.g. rüO…rýO}rþO(h\X_Use source package index state as it existed at a previous time. Accepts unix-timestamps (e.g. h]jøOubhç)rÿO}rP(h\X``@1474732068``hl}rP(hn]ho]hp]hq]ht]uh]jøOhx]rPhX @1474732068rP…rP}rP(h\X @1474732068h]jÿOubahjhïubhX ), ISO8601 UTC timestamps (e.g. rP…rP}rP(h\X ), ISO8601 UTC timestamps (e.g. h]jøOubhç)r P}r P(h\X``2016-09-24T17:47:48Z``hl}r P(hn]ho]hp]hq]ht]uh]jøOhx]r PhX2016-09-24T17:47:48Zr P…rP}rP(h\X2016-09-24T17:47:48Zh]j PubahjhïubhX), or rP…rP}rP(h\X), or h]jøOubhç)rP}rP(h\X``HEAD``hl}rP(hn]ho]hp]hq]ht]uh]jøOhx]rPhXHEADrP…rP}rP(h\XHEADh]jPubahjhïubhXR (default). This determines which package versions are available as well as which rP…rP}rP(h\XR (default). This determines which package versions are available as well as which h]jøOubhç)rP}rP(h\X ``.cabal``hl}rP(hn]ho]hp]hq]ht]uh]jøOhx]r PhX.cabalr!P…r"P}r#P(h\X.cabalh]jPubahjhïubhX# file revision is selected (unless r$P…r%P}r&P(h\X# file revision is selected (unless h]jøOubhç)r'P}r(P(h\X``--pristine``hl}r)P(hn]ho]hp]hq]ht]uh]jøOhx]r*PhX --pristiner+P…r,P}r-P(h\X --pristineh]j'PubahjhïubhX is used).r.P…r/P}r0P(h\X is used).h]jøOubeubahjjVubeubj)r1P}r2P(h\X‘``--pristine`` Unpack the original pristine tarball, rather than updating the ``.cabal`` file with the latest revision from the package archive. h]jOhhhihjj!hl}r3P(hn]ho]hp]hq]ht]uhvMž hwhhx]r4P(j$)r5P}r6P(h\X``--pristine``r7Ph]j1Phhhihjj(hl}r8P(hn]ho]hp]hq]ht]uhvMž hx]r9Phç)r:P}r;P(h\j7Phl}rP…r?P}r@P(h\X --pristineh]j:Pubahjhïubaubj<)rAP}rBP(h\Uhl}rCP(hn]ho]hp]hq]ht]uh]j1Phx]rDPh…)rEP}rFP(h\XUnpack the original pristine tarball, rather than updating the ``.cabal`` file with the latest revision from the package archive.h]jAPhhhihjh‰hl}rGP(hn]ho]hp]hq]ht]uhvM hx]rHP(hX?Unpack the original pristine tarball, rather than updating the rIP…rJP}rKP(h\X?Unpack the original pristine tarball, rather than updating the h]jEPubhç)rLP}rMP(h\X ``.cabal``hl}rNP(hn]ho]hp]hq]ht]uh]jEPhx]rOPhX.cabalrPP…rQP}rRP(h\X.cabalh]jLPubahjhïubhX8 file with the latest revision from the package archive.rSP…rTP}rUP(h\X8 file with the latest revision from the package archive.h]jEPubeubahjjVubeubeubeubeubhhhihjhkhl}rVP(hn]ho]hp]hq]rWPU benchmarksrXPaht]rYPhOauhvMãhwhhx]rZP(hz)r[P}r\P(h\X Benchmarksr]Ph]hbhhhihjh~hl}r^P(hn]ho]hp]hq]ht]uhvMãhwhhx]r_PhX Benchmarksr`P…raP}rbP(h\j]PhhNhvNhwhh]j[Pubaubj*)rcP}rdP(h\Uh]hbhhhihjj-hl}reP(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rfP}rgP(h\Uh]hbhhhihjj2hl}rhP(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-sectionriPj8jiPuhvNhwhhx]rjP(j:)rkP}rlP(h\Xbenchmark nameh]jfPhhhihjj>hl}rmP(hq]rnPXpkg-section-benchmark-benchmarkroPahp]hn]ho]ht]jB‰uhvNhwhhx]rpP(j*)rqP}rrP(h\Uh]jkPhhhihjj-hl}rsP(hq]hp]hn]ho]ht]Uentries]rtP(jHX*benchmark:benchmark; package.cabal sectionjoPUNtruPauhvNhwhhx]ubjJ)rvP}rwP(h\X benchmarkrxPh]jkPhhhihjjMhl}ryP(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rzPhX benchmarkr{P…r|P}r}P(h\UhhNhvNhwhh]jvPubaubjS)r~P}rP(h\U h]jkPhhhihjjVhl}r€P(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]rPhX …r‚P}rƒP(h\UhhNhvNhwhh]j~PubaubjÒ)r„P}r…P(h\Xnameh]jkPhhhihjjÕhl}r†P(jÚjÛhq]hp]hn]ho]ht]uhvNhwhhx]r‡PhXnamerˆP…r‰P}rŠP(h\UhhNhvNhwhh]j„Pubaubeubj[)r‹P}rŒP(h\Uh]jfPhhhihjj^hl}rP(hn]ho]hp]hq]ht]uhvNhwhhx]rŽP(ja)rP}rP(h\Uh]j‹Phhhihjjdhl}r‘P(hn]ho]hp]hq]ht]uhvNhwhhx]r’Pjg)r“P}r”P(h\Uh]jPhhhihjjjhl}r•P(hn]ho]hp]hq]ht]uhvNhwhhx]r–P(jm)r—P}r˜P(h\jph]j“Phhhihjjqhl}r™P(hn]ho]hp]hq]ht]uhvKhx]ršPhXSincer›P…rœP}rP(h\Uh]j—Pubaubjw)ržP}rŸP(h\U Cabal 1.9.2r Phl}r¡P(hn]ho]hp]hq]ht]uh]j“Phx]r¢Ph…)r£P}r¤P(h\j Phl}r¥P(hn]ho]hp]hq]ht]uh]jžPhx]r¦PhX Cabal 1.9.2r§P…r¨P}r©P(h\Uh]j£Pubahjh‰ubahjj„ubeubaubh…)rªP}r«P(h\X¶Benchmark sections (if present) describe benchmarks contained in the package and must have an argument after the section label, which defines the name of the benchmark. This is a freeform argument, but may not contain spaces. It should be unique among the names of the package's other benchmarks, the package's test suites, the package's executables, and the package itself. Using benchmark sections requires at least Cabal version 1.9.2.r¬Ph]j‹Phhhihjh‰hl}r­P(hn]ho]hp]hq]ht]uhvMéhwhhx]r®PhX¼Benchmark sections (if present) describe benchmarks contained in the package and must have an argument after the section label, which defines the name of the benchmark. This is a freeform argument, but may not contain spaces. It should be unique among the names of the package’s other benchmarks, the package’s test suites, the package’s executables, and the package itself. Using benchmark sections requires at least Cabal version 1.9.2.r¯P…r°P}r±P(h\j¬PhhNhvNhwhh]jªPubaubeubeubh…)r²P}r³P(h\X‰The benchmark may be described using the following fields, as well as build information fields (see the section on `build information`_).h]hbhhhihjh‰hl}r´P(hn]ho]hp]hq]ht]uhvMñhwhhx]rµP(hXsThe benchmark may be described using the following fields, as well as build information fields (see the section on r¶P…r·P}r¸P(h\XsThe benchmark may be described using the following fields, as well as build information fields (see the section on hhNhvNhwhh]j²PubjH)r¹P}rºP(h\X`build information`_jKKh]j²PhjjLhl}r»P(UnameXbuild informationhq]hp]hn]ho]ht]jNj uhx]r¼PhXbuild informationr½P…r¾P}r¿P(h\Xbuild informationh]j¹PubaubhX).rÀP…rÁP}rÂP(h\X).hhNhvNhwhh]j²Pubeubj*)rÃP}rÄP(h\Uh]hbhhhihjj-hl}rÅP(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rÆP}rÇP(h\Uh]hbhhhihjj2hl}rÈP(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrÉPj8jÉPuhvNhwhhx]rÊP(j:)rËP}rÌP(h\Xtype: interface (required)h]jÆPhhhihjj>hl}rÍP(hq]rÎPXpkg-field-benchmark-typerÏPahp]hn]ho]ht]jB‰uhvMøhwhhx]rÐP(j*)rÑP}rÒP(h\Uh]jËPhhhihjj-hl}rÓP(hq]hp]hn]ho]ht]Uentries]rÔP(jHX#benchmark:type; package.cabal fieldjÏPUNtrÕPauhvMøhwhhx]ubjJ)rÖP}r×P(h\XtyperØPh]jËPhhhihjjMhl}rÙP(jÚjÛhq]hp]hn]ho]ht]uhvMøhwhhx]rÚPhXtyperÛP…rÜP}rÝP(h\UhhNhvNhwhh]jÖPubaubjS)rÞP}rßP(h\jÌh]jËPhhhihjjVhl}ràP(jÚjÛhq]hp]hn]ho]ht]uhvMøhwhhx]ráPhX: râP…rãP}räP(h\UhhNhvNhwhh]jÞPubaubjÒ)råP}ræP(h\Xinterface (required)h]jËPhhhihjjÕhl}rçP(jÚjÛhq]hp]hn]ho]ht]uhvMøhwhhx]rèPhXinterface (required)réP…rêP}rëP(h\UhhNhvNhwhh]jåPubaubeubj[)rìP}ríP(h\Uh]jÆPhhhihjj^hl}rîP(hn]ho]hp]hq]ht]uhvMøhwhhx]rïPh…)rðP}rñP(h\X‰The interface type and version of the benchmark. At the moment Cabal only support one benchmark interface, called ``exitcode-stdio-1.0``.h]jìPhhhihjh‰hl}ròP(hn]ho]hp]hq]ht]uhvMöhwhhx]róP(hXrThe interface type and version of the benchmark. At the moment Cabal only support one benchmark interface, called rôP…rõP}röP(h\XrThe interface type and version of the benchmark. At the moment Cabal only support one benchmark interface, called hhNhvNhwhh]jðPubhç)r÷P}røP(h\X``exitcode-stdio-1.0``hl}rùP(hn]ho]hp]hq]ht]uh]jðPhx]rúPhXexitcode-stdio-1.0rûP…rüP}rýP(h\Xexitcode-stdio-1.0h]j÷PubahjhïubhX.…rþP}rÿP(h\X.hhNhvNhwhh]jðPubeubaubeubh…)rQ}rQ(h\XðBenchmarks using the ``exitcode-stdio-1.0`` interface are executables that indicate failure to run the benchmark with a non-zero exit code when run; they may provide human-readable information through the standard output and error channels.h]hbhhhihjh‰hl}rQ(hn]ho]hp]hq]ht]uhvMùhwhhx]rQ(hXBenchmarks using the rQ…rQ}rQ(h\XBenchmarks using the hhNhvNhwhh]jQubhç)rQ}rQ(h\X``exitcode-stdio-1.0``hl}r Q(hn]ho]hp]hq]ht]uh]jQhx]r QhXexitcode-stdio-1.0r Q…r Q}r Q(h\Xexitcode-stdio-1.0h]jQubahjhïubhXÅ interface are executables that indicate failure to run the benchmark with a non-zero exit code when run; they may provide human-readable information through the standard output and error channels.rQ…rQ}rQ(h\XÅ interface are executables that indicate failure to run the benchmark with a non-zero exit code when run; they may provide human-readable information through the standard output and error channels.hhNhvNhwhh]jQubeubj*)rQ}rQ(h\Uh]hbhhhihjj-hl}rQ(hq]hp]hn]ho]ht]Uentries]uhvNhwhhx]ubj/)rQ}rQ(h\Uh]hbhhhihjj2hl}rQ(j4‰j5Xcabalhq]hp]hn]ho]ht]j6X pkg-fieldrQj8jQuhvNhwhhx]rQ(j:)rQ}rQ(h\Xmain-is: filenameh]jQhhhihjj>hl}rQ(hq]rQXpkg-field-benchmark-main-isrQahp]hn]ho]ht]jB‰uhvM hwhhx]rQ(j*)rQ}r Q(h\Uh]jQhhhihjj-hl}r!Q(hq]hp]hn]ho]ht]Uentries]r"Q(jHX&benchmark:main-is; package.cabal fieldjQUNtr#QauhvM hwhhx]ubjJ)r$Q}r%Q(h\Xmain-isr&Qh]jQhhhihjjMhl}r'Q(jÚjÛhq]hp]hn]ho]ht]uhvM hwhhx]r(QhXmain-isr)Q…r*Q}r+Q(h\UhhNhvNhwhh]j$QubaubjS)r,Q}r-Q(h\jÌh]jQhhhihjjVhl}r.Q(jÚjÛhq]hp]hn]ho]ht]uhvM hwhhx]r/QhX: r0Q…r1Q}r2Q(h\UhhNhvNhwhh]j,QubaubjÒ)r3Q}r4Q(h\Xfilenameh]jQhhhihjjÕhl}r5Q(jÚjÛhq]hp]hn]ho]ht]uhvM hwhhx]r6QhXfilenamer7Q…r8Q}r9Q(h\UhhNhvNhwhh]j3Qubaubeubj[)r:Q}r;Q(h\Uh]jQhhhihjj^hl}rQ}r?Q(h\Uh]j:Qhhhihjjdhl}r@Q(hn]ho]hp]hq]ht]uhvNhwhhx]rAQjg)rBQ}rCQ(h\Uh]j>Qhhhihjjjhl}rDQ(hn]ho]hp]hq]ht]uhvMhwhhx]rEQ(jm)rFQ}rGQ(h\Xrequiredh]jBQhhhihjjqhl}rHQ(hn]ho]hp]hq]ht]uhvKhx]rIQhXRequiredrJQ…rKQ}rLQ(h\Uh]jFQubaubjw)rMQ}rNQ(h\X``exitcode-stdio-1.0`` hl}rOQ(hn]ho]hp]hq]ht]uh]jBQhx]rPQh…)rQQ}rRQ(h\X``exitcode-stdio-1.0``rSQh]jMQhhhihjh‰hl}rTQ(hn]ho]hp]hq]ht]uhvMhx]rUQhç)rVQ}rWQ(h\jSQhl}rXQ(hn]ho]hp]hq]ht]uh]jQQhx]rYQhXexitcode-stdio-1.0rZQ…r[Q}r\Q(h\Xexitcode-stdio-1.0h]jVQubahjhïubaubahjj„ubeubaubh…)r]Q}r^Q(h\X¼The name of the ``.hs`` or ``.lhs`` file containing the ``Main`` module. Note that it is the ``.hs`` filename that must be listed, even if that file is generated using a preprocessor. The source file must be relative to one of the directories listed in :pkg-field:`hs-source-dirs`. This field is analogous to the ``main-is`` field of an executable section. Further, while the name of the file may vary, the module itself must be named ``Main``.h]j:Qhhhihjh‰hl}r_Q(hn]ho]hp]hq]ht]uhvMhwhhx]r`Q(hXThe name of the raQ…rbQ}rcQ(h\XThe name of the hhNhvNhwhh]j]Qubhç)rdQ}reQ(h\X``.hs``hl}rfQ(hn]ho]hp]hq]ht]uh]j]Qhx]rgQhX.hsrhQ…riQ}rjQ(h\X.hsh]jdQubahjhïubhX or rkQ…rlQ}rmQ(h\X or hhNhvNhwhh]j]Qubhç)rnQ}roQ(h\X``.lhs``hl}rpQ(hn]ho]hp]hq]ht]uh]j]Qhx]rqQhX.lhsrrQ…rsQ}rtQ(h\X.lhsh]jnQubahjhïubhX file containing the ruQ…rvQ}rwQ(h\X file containing the hhNhvNhwhh]j]Qubhç)rxQ}ryQ(h\X``Main``hl}rzQ(hn]ho]hp]hq]ht]uh]j]Qhx]r{QhXMainr|Q…r}Q}r~Q(h\XMainh]jxQubahjhïubhX module. Note that it is the rQ…r€Q}rQ(h\X module. Note that it is the hhNhvNhwhh]j]Qubhç)r‚Q}rƒQ(h\X``.hs``hl}r„Q(hn]ho]hp]hq]ht]uh]j]Qhx]r…QhX.hsr†Q…r‡Q}rˆQ(h\X.hsh]j‚QubahjhïubhX™ filename that must be listed, even if that file is generated using a preprocessor. The source file must be relative to one of the directories listed in r‰Q…rŠQ}r‹Q(h\X™ filename that must be listed, even if that file is generated using a preprocessor. The source file must be relative to one of the directories listed in hhNhvNhwhh]j]Qubjt)rŒQ}rQ(h\X:pkg-field:`hs-source-dirs`h]j]Qhhhihjjwhl}rŽQ(UreftypeX pkg-fieldjyˆjzXhs-source-dirsrQU refdomainXcabalrQhq]hp]U refexplicit‰hn]ho]ht]j}j~j”X benchmarkr‘QuhvMhx]r’Qhç)r“Q}r”Q(h\jQhl}r•Q(hn]ho]r–Q(j…jQXcabal-pkg-fieldr—Qehp]hq]ht]uh]jŒQhx]r˜QhXhs-source-dirsr™Q…ršQ}r›Q(h\Uh]j“QubahjhïubaubhX!. This field is analogous to the rœQ…rQ}ržQ(h\X!. This field is analogous to the hhNhvNhwhh]j]Qubhç)rŸQ}r Q(h\X ``main-is``hl}r¡Q(hn]ho]hp]hq]ht]uh]j]Qhx]r¢QhXmain-isr£Q…r¤Q}r¥Q(h\Xmain-ish]jŸQubahjhïubhXo field of an executable section. Further, while the name of the file may vary, the module itself must be named r¦Q…r§Q}r¨Q(h\Xo field of an executable section. Further, while the name of the file may vary, the module itself must be named hhNhvNhwhh]j]Qubhç)r©Q}rªQ(h\X``Main``hl}r«Q(hn]ho]hp]hq]ht]uh]j]Qhx]r¬QhXMainr­Q…r®Q}r¯Q(h\XMainh]j©QubahjhïubhX.…r°Q}r±Q(h\X.hhNhvNhwhh]j]Qubeubeubeubh_h^)r²Q}r³Q(h\Uh]hbhhhihjhkhl}r´Q(hn]ho]hp]hq]rµQUrunning-benchmarksr¶Qaht]r·Qh*auhvM2hwhhx]r¸Q(hz)r¹Q}rºQ(h\XRunning benchmarksr»Qh]j²Qhhhihjh~hl}r¼Q(hn]ho]hp]hq]ht]uhvM2hwhhx]r½QhXRunning benchmarksr¾Q…r¿Q}rÀQ(h\j»QhhNhvNhwhh]j¹Qubaubh…)rÁQ}rÂQ(h\XJYou can have Cabal run your benchmark using its built-in benchmark runner:rÃQh]j²Qhhhihjh‰hl}rÄQ(hn]ho]hp]hq]ht]uhvM4hwhhx]rÅQhXJYou can have Cabal run your benchmark using its built-in benchmark runner:rÆQ…rÇQ}rÈQ(h\jÃQhhNhvNhwhh]jÁQubaubjÕ)rÉQ}rÊQ(h\XA$ cabal configure --enable-benchmarks $ cabal build $ cabal benchh]j²QhhhihjjØhl}rËQ(jÚjÛhq]hp]hn]ho]ht]uhvM9hwhhx]rÌQhXA$ cabal configure --enable-benchmarks $ cabal build $ cabal benchrÍQ…rÎQ}rÏQ(h\Uh]jÉQubaubh…)rÐQ}rÑQ(h\X]See the output of ``cabal help bench`` for a list of options you can pass to ``cabal bench``.h]j²Qhhhihjh‰hl}rÒQ(hn]ho]hp]hq]ht]uhvM=hwhhx]rÓQ(hXSee the output of rÔQ…rÕQ}rÖQ(h\XSee the output of hhNhvNhwhh]jÐQubhç)r×Q}rØQ(h\X``cabal help bench``hl}rÙQ(hn]ho]hp]hq]ht]uh]jÐQhx]rÚQhXcabal help benchrÛQ…rÜQ}rÝQ(h\Xcabal help benchh]j×QubahjhïubhX' for a list of options you can pass to rÞQ…rßQ}ràQ(h\X' for a list of options you can pass to hhNhvNhwhh]jÐQubhç)ráQ}râQ(h\X``cabal bench``hl}rãQ(hn]ho]hp]hq]ht]uh]jÐQhx]räQhX cabal benchråQ…ræQ}rçQ(h\X cabal benchh]jáQubahjhïubhX.…rèQ}réQ(h\X.hhNhvNhwhh]jÐQubeubeubeubhhhihjhkhl}rêQ(hn]rëQjV+aho]hp]hq]rìQUid1ríQaht]uhvM hwhhx]rîQ(hz)rïQ}rðQ(h\X7Example: Package using ``exitcode-stdio-1.0`` interfacerñQh]h_hhhihjh~hl}ròQ(hn]ho]hp]hq]ht]uhvM hwhhx]róQ(hXExample: Package using rôQ…rõQ}röQ(h\XExample: Package using r÷QhhNhvNhwhh]jïQubhç)røQ}rùQ(h\X``exitcode-stdio-1.0``rúQhl}rûQ(hn]ho]hp]hq]ht]uh]jïQhx]rüQhXexitcode-stdio-1.0rýQ…rþQ}rÿQ(h\Xexitcode-stdio-1.0rRh]jøQubahjhïubhX interfacerR…rR}rR(h\X interfacerRhhNhvNhwhh]jïQubeubh…)rR}rR(h\X}The example package description and executable source file below demonstrate the use of the ``exitcode-stdio-1.0`` interface.h]h_hhhihjh‰hl}rR(hn]ho]hp]hq]ht]uhvM hwhhx]rR(hX\The example package description and executable source file below demonstrate the use of the r R…r R}r R(h\X\The example package description and executable source file below demonstrate the use of the hhNhvNhwhh]jRubhç)r R}r R(h\X``exitcode-stdio-1.0``hl}rR(hn]ho]hp]hq]ht]uh]jRhx]rRhXexitcode-stdio-1.0rR…rR}rR(h\Xexitcode-stdio-1.0h]j RubahjhïubhX interface.rR…rR}rR(h\X interface.hhNhvNhwhh]jRubeubj+)rR}rR(h\UhaKh]h_hhUhjj„+hl}rR(hq]rRUfoo-bench-cabalrRahp]hn]rRh8aho]rRj‰+aht]U literal_blockˆuhvNhwhhx]rR(j‹+)rR}rR(h\X foo.cabalr Rh]jRhhhihjj+hl}r!R(hn]ho]hp]hq]ht]uhvMhx]r"RhX foo.cabalr#R…r$R}r%R(h\j Rh]jRubaubjÕ)r&R}r'R(h\XûName: foo Version: 1.0 License: BSD3 Cabal-Version: >= 1.9.2 Build-Type: Simple Benchmark bench-foo type: exitcode-stdio-1.0 main-is: bench-foo.hs build-depends: base >= 4 && < 5, time >= 1.1 && < 1.7h]jRhhhihjjØhl}r(R(j‰jXcabaljÚjÛhq]hp]hn]j}ho]ht]uhvMhx]r)RhXûName: foo Version: 1.0 License: BSD3 Cabal-Version: >= 1.9.2 Build-Type: Simple Benchmark bench-foo type: exitcode-stdio-1.0 main-is: bench-foo.hs build-depends: base >= 4 && < 5, time >= 1.1 && < 1.7r*R…r+R}r,R(h\Uh]j&Rubaubeubj+)r-R}r.R(h\Uh]h_hhUhjj„+hl}r/R(hq]r0RUid8r1Rahp]hn]ho]r2Rj‰+aht]U literal_blockˆuhvNhwhhx]r3R(j‹+)r4R}r5R(h\X bench-foo.hsr6Rh]j-Rhhhihjj+hl}r7R(hn]ho]hp]hq]ht]uhvMhx]r8RhX bench-foo.hsr9R…r:R}r;R(h\j6Rh]j4RubaubjÕ)rR(j‰jXhaskelljÚjÛhq]hp]hn]j}ho]ht]uhvMhx]r?RhX {-# LANGUAGE BangPatterns #-} module Main where import Data.Time.Clock fib 0 = 1 fib 1 = 1 fib n = fib (n-1) + fib (n-2) main = do start <- getCurrentTime let !r = fib 20 end <- getCurrentTime putStrLn $ "fib 20 took " ++ show (diffUTCTime end start)r@R…rAR}rBR(h\Uh]jUunit-of-distributionrhRh?U$modules-imported-from-other-packagesriRh@jHhAjFhBNhCjw8hDUusing-cabal-initrjRhEU portabilityrkRhFU`gnu-autoconf-places-restrictions-on-paths-including-the-path-that-the-user-builds-a-package-fromrlRhGj,hHj hIU'kinds-of-package-cabal-vs-ghc-vs-systemrmRhJUpackage-conceptsrnRhKjGhLj»hMj­hNj:$hOjXPhPNhQjÂhRjŽhSj÷hTjwuhx]roR(h^)rpR}rqR(h\Uh]hhhhihjhkhl}rrR(hn]ho]hp]hq]rsRj`Raht]rtRh auhvKhwhhx]ruR(hz)rvR}rwR(h\X QuickstartrxRh]jpRhhhihjh~hl}ryR(hn]ho]hp]hq]ht]uhvKhwhhx]rzRhX Quickstartr{R…r|R}r}R(h\jxRhhNhvNhwhh]jvRubaubh…)r~R}rR(h\XYLets assume we have created a project directory and already have a Haskell module or two.r€Rh]jpRhhhihjh‰hl}rR(hn]ho]hp]hq]ht]uhvKhwhhx]r‚RhXYLets assume we have created a project directory and already have a Haskell module or two.rƒR…r„R}r…R(h\j€RhhNhvNhwhh]j~Rubaubh…)r†R}r‡R(h\X>Every project needs a name, we'll call this example "proglet".rˆRh]jpRhhhihjh‰hl}r‰R(hn]ho]hp]hq]ht]uhvKhwhhx]rŠRhXDEvery project needs a name, we’ll call this example “progletâ€.r‹R…rŒR}rR(h\jˆRhhNhvNhwhh]j†Rubaubcsphinx.addnodes highlightlang rŽR)rR}rR(h\Uh]jpRhhhihjU highlightlangr‘Rhl}r’R(UlangXconsoleUlinenothresholdI9223372036854775807 hq]hp]hn]ho]ht]uhvK hwhhx]ubjÕ)r“R}r”R(h\X$ cd proglet/ $ ls Proglet.hsh]jpRhhhihjjØhl}r•R(jÚjÛhq]hp]hn]ho]ht]uhvK hwhhx]r–RhX$ cd proglet/ $ ls Proglet.hsr—R…r˜R}r™R(h\Uh]j“Rubaubh…)ršR}r›R(h\XýIt is assumed that (apart from external dependencies) all the files that make up a package live under a common project root directory. This simple example has all the project files in one directory, but most packages will use one or more subdirectories.rœRh]jpRhhhihjh‰hl}rR(hn]ho]hp]hq]ht]uhvKhwhhx]ržRhXýIt is assumed that (apart from external dependencies) all the files that make up a package live under a common project root directory. This simple example has all the project files in one directory, but most packages will use one or more subdirectories.rŸR…r R}r¡R(h\jœRhhNhvNhwhh]jšRubaubh…)r¢R}r£R(h\XZTo turn this into a Cabal package we need two extra files in the project's root directory:r¤Rh]jpRhhhihjh‰hl}r¥R(hn]ho]hp]hq]ht]uhvKhwhhx]r¦RhX\To turn this into a Cabal package we need two extra files in the project’s root directory:r§R…r¨R}r©R(h\j¤RhhNhvNhwhh]j¢Rubaubh)rªR}r«R(h\Uh]jpRhhhihjh’hl}r¬R(h”X-hq]hp]hn]ho]ht]uhvKhwhhx]r­R(h–)r®R}r¯R(h\XF``proglet.cabal``: containing package metadata and build information. h]jªRhhhihjh™hl}r°R(hn]ho]hp]hq]ht]uhvNhwhhx]r±Rh…)r²R}r³R(h\XE``proglet.cabal``: containing package metadata and build information.h]j®Rhhhihjh‰hl}r´R(hn]ho]hp]hq]ht]uhvKhx]rµR(hç)r¶R}r·R(h\X``proglet.cabal``hl}r¸R(hn]ho]hp]hq]ht]uh]j²Rhx]r¹RhX proglet.cabalrºR…r»R}r¼R(h\X proglet.cabalh]j¶RubahjhïubhX4: containing package metadata and build information.r½R…r¾R}r¿R(h\X4: containing package metadata and build information.h]j²Rubeubaubh–)rÀR}rÁR(h\Xg``Setup.hs``: usually containing a few standardized lines of code, but can be customized if necessary. h]jªRhhhihjh™hl}rÂR(hn]ho]hp]hq]ht]uhvNhwhhx]rÃRh…)rÄR}rÅR(h\Xf``Setup.hs``: usually containing a few standardized lines of code, but can be customized if necessary.h]jÀRhhhihjh‰hl}rÆR(hn]ho]hp]hq]ht]uhvKhx]rÇR(hç)rÈR}rÉR(h\X ``Setup.hs``hl}rÊR(hn]ho]hp]hq]ht]uh]jÄRhx]rËRhXSetup.hsrÌR…rÍR}rÎR(h\XSetup.hsh]jÈRubahjhïubhXZ: usually containing a few standardized lines of code, but can be customized if necessary.rÏR…rÐR}rÑR(h\XZ: usually containing a few standardized lines of code, but can be customized if necessary.h]jÄRubeubaubeubh…)rÒR}rÓR(h\XUWe can create both files manually or we can use ``cabal init`` to create them for us.h]jpRhhhihjh‰hl}rÔR(hn]ho]hp]hq]ht]uhvKhwhhx]rÕR(hX0We can create both files manually or we can use rÖR…r×R}rØR(h\X0We can create both files manually or we can use hhNhvNhwhh]jÒRubhç)rÙR}rÚR(h\X``cabal init``hl}rÛR(hn]ho]hp]hq]ht]uh]jÒRhx]rÜRhX cabal initrÝR…rÞR}rßR(h\X cabal inith]jÙRubahjhïubhX to create them for us.ràR…ráR}râR(h\X to create them for us.hhNhvNhwhh]jÒRubeubh^)rãR}räR(h\Uh]jpRhhhihjhkhl}råR(hn]ho]hp]hq]ræRjjRaht]rçRhDauhvK"hwhhx]rèR(hz)réR}rêR(h\XUsing "cabal init"rëRh]jãRhhhihjh~hl}rìR(hn]ho]hp]hq]ht]uhvK"hwhhx]ríRhXUsing “cabal initâ€rîR…rïR}rðR(h\jëRhhNhvNhwhh]jéRubaubh…)rñR}ròR(h\XwThe ``cabal init`` command is interactive. It asks us a number of questions starting with the package name and version.h]jãRhhhihjh‰hl}róR(hn]ho]hp]hq]ht]uhvK$hwhhx]rôR(hXThe rõR…röR}r÷R(h\XThe hhNhvNhwhh]jñRubhç)røR}rùR(h\X``cabal init``hl}rúR(hn]ho]hp]hq]ht]uh]jñRhx]rûRhX cabal initrüR…rýR}rþR(h\X cabal inith]jøRubahjhïubhXe command is interactive. It asks us a number of questions starting with the package name and version.rÿR…rS}rS(h\Xe command is interactive. It asks us a number of questions starting with the package name and version.hhNhvNhwhh]jñRubeubjÕ)rS}rS(h\XS$ cabal init Package name [default "proglet"]? Package version [default "0.1"]? ...h]jãRhhhihjjØhl}rS(jÚjÛhq]hp]hn]ho]ht]uhvK)hwhhx]rShXS$ cabal init Package name [default "proglet"]? Package version [default "0.1"]? ...rS…rS}rS(h\Uh]jSubaubh…)r S}r S(h\X¡It also asks questions about various other bits of package metadata. For a package that you never intend to distribute to others, these fields can be left blank.r Sh]jãRhhhihjh‰hl}r S(hn]ho]hp]hq]ht]uhvK.hwhhx]r ShX¡It also asks questions about various other bits of package metadata. For a package that you never intend to distribute to others, these fields can be left blank.rS…rS}rS(h\j ShhNhvNhwhh]j Subaubh…)rS}rS(h\XïOne of the important questions is whether the package contains a library or an executable. Libraries are collections of Haskell modules that can be re-used by other Haskell libraries and programs, while executables are standalone programs.rSh]jãRhhhihjh‰hl}rS(hn]ho]hp]hq]ht]uhvK2hwhhx]rShXïOne of the important questions is whether the package contains a library or an executable. Libraries are collections of Haskell modules that can be re-used by other Haskell libraries and programs, while executables are standalone programs.rS…rS}rS(h\jShhNhvNhwhh]jSubaubjÕ)rS}rS(h\XHWhat does the package build: 1) Library 2) Executable Your choice?h]jãRhhhihjjØhl}rS(jÚjÛhq]hp]hn]ho]ht]uhvK9hwhhx]rShXHWhat does the package build: 1) Library 2) Executable Your choice?rS…rS}rS(h\Uh]jSubaubh…)r S}r!S(h\X«For the moment these are the only choices. For more complex packages (e.g. a library and multiple executables or test suites) the ``.cabal`` file can be edited afterwards.h]jãRhhhihjh‰hl}r"S(hn]ho]hp]hq]ht]uhvK>hwhhx]r#S(hX‚For the moment these are the only choices. For more complex packages (e.g. a library and multiple executables or test suites) the r$S…r%S}r&S(h\X‚For the moment these are the only choices. For more complex packages (e.g. a library and multiple executables or test suites) the hhNhvNhwhh]j Subhç)r'S}r(S(h\X ``.cabal``hl}r)S(hn]ho]hp]hq]ht]uh]j Shx]r*ShX.cabalr+S…r,S}r-S(h\X.cabalh]j'SubahjhïubhX file can be edited afterwards.r.S…r/S}r0S(h\X file can be edited afterwards.hhNhvNhwhh]j Subeubh…)r1S}r2S(h\XšFinally, ``cabal init`` creates the initial ``proglet.cabal`` and ``Setup.hs`` files, and depending on your choice of license, a ``LICENSE`` file as well.h]jãRhhhihjh‰hl}r3S(hn]ho]hp]hq]ht]uhvKBhwhhx]r4S(hX Finally, r5S…r6S}r7S(h\X Finally, hhNhvNhwhh]j1Subhç)r8S}r9S(h\X``cabal init``hl}r:S(hn]ho]hp]hq]ht]uh]j1Shx]r;ShX cabal initrS(h\X cabal inith]j8SubahjhïubhX creates the initial r?S…r@S}rAS(h\X creates the initial hhNhvNhwhh]j1Subhç)rBS}rCS(h\X``proglet.cabal``hl}rDS(hn]ho]hp]hq]ht]uh]j1Shx]rEShX proglet.cabalrFS…rGS}rHS(h\X proglet.cabalh]jBSubahjhïubhX and rIS…rJS}rKS(h\X and hhNhvNhwhh]j1Subhç)rLS}rMS(h\X ``Setup.hs``hl}rNS(hn]ho]hp]hq]ht]uh]j1Shx]rOShXSetup.hsrPS…rQS}rRS(h\XSetup.hsh]jLSubahjhïubhX3 files, and depending on your choice of license, a rSS…rTS}rUS(h\X3 files, and depending on your choice of license, a hhNhvNhwhh]j1Subhç)rVS}rWS(h\X ``LICENSE``hl}rXS(hn]ho]hp]hq]ht]uh]j1Shx]rYShXLICENSErZS…r[S}r\S(h\XLICENSEh]jVSubahjhïubhX file as well.r]S…r^S}r_S(h\X file as well.hhNhvNhwhh]j1SubeubjÕ)r`S}raS(h\X‹Generating LICENSE... Generating Setup.hs... Generating proglet.cabal... You may want to edit the .cabal file and add a Description field.h]jãRhhhihjjØhl}rbS(jÚjÛhq]hp]hn]ho]ht]uhvKHhwhhx]rcShX‹Generating LICENSE... Generating Setup.hs... Generating proglet.cabal... You may want to edit the .cabal file and add a Description field.rdS…reS}rfS(h\Uh]j`Subaubh…)rgS}rhS(h\XÅAs this stage the ``proglet.cabal`` is not quite complete and before you are able to build the package you will need to edit the file and add some build information about the library or executable.h]jãRhhhihjh‰hl}riS(hn]ho]hp]hq]ht]uhvKNhwhhx]rjS(hXAs this stage the rkS…rlS}rmS(h\XAs this stage the hhNhvNhwhh]jgSubhç)rnS}roS(h\X``proglet.cabal``hl}rpS(hn]ho]hp]hq]ht]uh]jgShx]rqShX proglet.cabalrrS…rsS}rtS(h\X proglet.cabalh]jnSubahjhïubhX¢ is not quite complete and before you are able to build the package you will need to edit the file and add some build information about the library or executable.ruS…rvS}rwS(h\X¢ is not quite complete and before you are able to build the package you will need to edit the file and add some build information about the library or executable.hhNhvNhwhh]jgSubeubeubh^)rxS}ryS(h\Uh]jpRhhhihjhkhl}rzS(hn]ho]hp]hq]r{SjdRaht]r|ShauhvKShwhhx]r}S(hz)r~S}rS(h\XEditing the .cabal filer€Sh]jxShhhihjh~hl}rS(hn]ho]hp]hq]ht]uhvKShwhhx]r‚ShXEditing the .cabal filerƒS…r„S}r…S(h\j€ShhNhvNhwhh]j~SubaubjŽR)r†S}r‡S(h\Uh]jxShhhihjj‘Rhl}rˆS(UlangXcabalUlinenothresholdI9223372036854775807 hq]hp]hn]ho]ht]uhvKVhwhhx]ubh…)r‰S}rŠS(h\XÛLoad up the ``.cabal`` file in a text editor. The first part of the ``.cabal`` file has the package metadata and towards the end of the file you will find the :pkg-section:`executable` or :pkg-section:`library` section.h]jxShhhihjh‰hl}r‹S(hn]ho]hp]hq]ht]uhvKWhwhhx]rŒS(hX Load up the rS…rŽS}rS(h\X Load up the hhNhvNhwhh]j‰Subhç)rS}r‘S(h\X ``.cabal``hl}r’S(hn]ho]hp]hq]ht]uh]j‰Shx]r“ShX.cabalr”S…r•S}r–S(h\X.cabalh]jSubahjhïubhX. file in a text editor. The first part of the r—S…r˜S}r™S(h\X. file in a text editor. The first part of the hhNhvNhwhh]j‰Subhç)ršS}r›S(h\X ``.cabal``hl}rœS(hn]ho]hp]hq]ht]uh]j‰Shx]rShX.cabalržS…rŸS}r S(h\X.cabalh]jšSubahjhïubhXQ file has the package metadata and towards the end of the file you will find the r¡S…r¢S}r£S(h\XQ file has the package metadata and towards the end of the file you will find the hhNhvNhwhh]j‰Subjt)r¤S}r¥S(h\X:pkg-section:`executable`h]j‰Shhhihjjwhl}r¦S(UreftypeX pkg-sectionjyˆjzX executabler§SU refdomainXcabalr¨Shq]hp]U refexplicit‰hn]ho]ht]j}j~uhvKWhx]r©Shç)rªS}r«S(h\j§Shl}r¬S(hn]ho]r­S(j…j¨SXcabal-pkg-sectionr®Sehp]hq]ht]uh]j¤Shx]r¯ShX executabler°S…r±S}r²S(h\Uh]jªSubahjhïubaubhX or r³S…r´S}rµS(h\X or hhNhvNhwhh]j‰Subjt)r¶S}r·S(h\X:pkg-section:`library`h]j‰Shhhihjjwhl}r¸S(UreftypeX pkg-sectionjyˆjzXlibraryr¹SU refdomainXcabalrºShq]hp]U refexplicit‰hn]ho]ht]j}j~uhvKWhx]r»Shç)r¼S}r½S(h\j¹Shl}r¾S(hn]ho]r¿S(j…jºSXcabal-pkg-sectionrÀSehp]hq]ht]uh]j¶Shx]rÁShXlibraryrÂS…rÃS}rÄS(h\Uh]j¼SubahjhïubaubhX section.rÅS…rÆS}rÇS(h\X section.hhNhvNhwhh]j‰Subeubh…)rÈS}rÉS(h\X'You will see that the fields that have yet to be filled in are commented out. Cabal files use "``--``" Haskell-style comment syntax. (Note that comments are only allowed on lines on their own. Trailing comments on other lines are not allowed because they could be confused with program options.)h]jxShhhihjh‰hl}rÊS(hn]ho]hp]hq]ht]uhvK[hwhhx]rËS(hXaYou will see that the fields that have yet to be filled in are commented out. Cabal files use “rÌS…rÍS}rÎS(h\X_You will see that the fields that have yet to be filled in are commented out. Cabal files use "hhNhvNhwhh]jÈSubhç)rÏS}rÐS(h\X``--``hl}rÑS(hn]ho]hp]hq]ht]uh]jÈShx]rÒShX--rÓS…rÔS}rÕS(h\X--h]jÏSubahjhïubhXĆHaskell-style comment syntax. (Note that comments are only allowed on lines on their own. Trailing comments on other lines are not allowed because they could be confused with program options.)rÖS…r×S}rØS(h\XÂ" Haskell-style comment syntax. (Note that comments are only allowed on lines on their own. Trailing comments on other lines are not allowed because they could be confused with program options.)hhNhvNhwhh]jÈSubeubh…)rÙS}rÚS(h\XwIf you selected earlier to create a library package then your ``.cabal`` file will have a section that looks like this:h]jxShhhihjh‰hl}rÛS(hn]ho]hp]hq]ht]uhvKahwhhx]rÜS(hX>If you selected earlier to create a library package then your rÝS…rÞS}rßS(h\X>If you selected earlier to create a library package then your hhNhvNhwhh]jÙSubhç)ràS}ráS(h\X ``.cabal``hl}râS(hn]ho]hp]hq]ht]uh]jÙShx]rãShX.cabalräS…råS}ræS(h\X.cabalh]jàSubahjhïubhX/ file will have a section that looks like this:rçS…rèS}réS(h\X/ file will have a section that looks like this:hhNhvNhwhh]jÙSubeubjÕ)rêS}rëS(h\XNlibrary exposed-modules: Proglet -- other-modules: -- build-depends:h]jxShhhihjjØhl}rìS(jÚjÛhq]hp]hn]ho]ht]uhvKfhwhhx]ríShXNlibrary exposed-modules: Proglet -- other-modules: -- build-depends:rîS…rïS}rðS(h\Uh]jêSubaubh…)rñS}ròS(h\XOAlternatively, if you selected an executable then there will be a section like:róSh]jxShhhihjh‰hl}rôS(hn]ho]hp]hq]ht]uhvKkhwhhx]rõShXOAlternatively, if you selected an executable then there will be a section like:röS…r÷S}røS(h\jóShhNhvNhwhh]jñSubaubjÕ)rùS}rúS(h\XHexecutable proglet -- main-is: -- other-modules: -- build-depends:h]jxShhhihjjØhl}rûS(jÚjÛhq]hp]hn]ho]ht]uhvKphwhhx]rüShXHexecutable proglet -- main-is: -- other-modules: -- build-depends:rýS…rþS}rÿS(h\Uh]jùSubaubh…)rT}rT(h\X¨The build information fields listed (but commented out) are just the few most important and common fields. There are many others that are covered later in this chapter.rTh]jxShhhihjh‰hl}rT(hn]ho]hp]hq]ht]uhvKuhwhhx]rThX¨The build information fields listed (but commented out) are just the few most important and common fields. There are many others that are covered later in this chapter.rT…rT}rT(h\jThhNhvNhwhh]jTubaubh…)rT}r T(h\XMost of the build information fields are the same between libraries and executables. The difference is that libraries have a number of "exposed" modules that make up the public interface of the library, while executables have a file containing a ``Main`` module.h]jxShhhihjh‰hl}r T(hn]ho]hp]hq]ht]uhvKyhwhhx]r T(hXúMost of the build information fields are the same between libraries and executables. The difference is that libraries have a number of “exposed†modules that make up the public interface of the library, while executables have a file containing a r T…r T}rT(h\XöMost of the build information fields are the same between libraries and executables. The difference is that libraries have a number of "exposed" modules that make up the public interface of the library, while executables have a file containing a hhNhvNhwhh]jTubhç)rT}rT(h\X``Main``hl}rT(hn]ho]hp]hq]ht]uh]jThx]rThXMainrT…rT}rT(h\XMainh]jTubahjhïubhX module.rT…rT}rT(h\X module.hhNhvNhwhh]jTubeubh…)rT}rT(h\XÝThe name of a library always matches the name of the package, so it is not specified in the library section. Executables often follow the name of the package too, but this is not required and the name is given explicitly.rTh]jxShhhihjh‰hl}rT(hn]ho]hp]hq]ht]uhvK~hwhhx]rThXÝThe name of a library always matches the name of the package, so it is not specified in the library section. Executables often follow the name of the package too, but this is not required and the name is given explicitly.rT…rT}r T(h\jThhNhvNhwhh]jTubaubeubh^)r!T}r"T(h\Uh]jpRhhhihjhkhl}r#T(hn]ho]hp]hq]r$TjcRaht]r%ThauhvK„hwhhx]r&T(hz)r'T}r(T(h\XModules included in the packager)Th]j!Thhhihjh~hl}r*T(hn]ho]hp]hq]ht]uhvK„hwhhx]r+ThXModules included in the packager,T…r-T}r.T(h\j)ThhNhvNhwhh]j'Tubaubh…)r/T}r0T(h\XuFor a library, ``cabal init`` looks in the project directory for files that look like Haskell modules and adds all the modules to the :pkg-field:`library:exposed-modules` field. For modules that do not form part of your package's public interface, you can move those modules to the :pkg-field:`other-modules` field. Either way, all modules in the library need to be listed.h]j!Thhhihjh‰hl}r1T(hn]ho]hp]hq]ht]uhvK†hwhhx]r2T(hXFor a library, r3T…r4T}r5T(h\XFor a library, hhNhvNhwhh]j/Tubhç)r6T}r7T(h\X``cabal init``hl}r8T(hn]ho]hp]hq]ht]uh]j/Thx]r9ThX cabal initr:T…r;T}rT}r?T(h\Xi looks in the project directory for files that look like Haskell modules and adds all the modules to the hhNhvNhwhh]j/Tubjt)r@T}rAT(h\X$:pkg-field:`library:exposed-modules`h]j/Thhhihjjwhl}rBT(UreftypeX pkg-fieldjyˆjzXexposed-modulesU refdomainXcabalrCThq]hp]U refexplicit‰hn]ho]ht]j}j~j”XlibraryuhvK†hx]rDThç)rET}rFT(h\Xlibrary:exposed-moduleshl}rGT(hn]ho]rHT(j…jCTXcabal-pkg-fieldrITehp]hq]ht]uh]j@Thx]rJThXlibrary:exposed-modulesrKT…rLT}rMT(h\Uh]jETubahjhïubaubhXr field. For modules that do not form part of your package’s public interface, you can move those modules to the rNT…rOT}rPT(h\Xp field. For modules that do not form part of your package's public interface, you can move those modules to the hhNhvNhwhh]j/Tubjt)rQT}rRT(h\X:pkg-field:`other-modules`h]j/Thhhihjjwhl}rST(UreftypeX pkg-fieldjyˆjzX other-modulesrTTU refdomainXcabalrUThq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvK†hx]rVThç)rWT}rXT(h\jTThl}rYT(hn]ho]rZT(j…jUTXcabal-pkg-fieldr[Tehp]hq]ht]uh]jQThx]r\ThX other-modulesr]T…r^T}r_T(h\Uh]jWTubahjhïubaubhXA field. Either way, all modules in the library need to be listed.r`T…raT}rbT(h\XA field. Either way, all modules in the library need to be listed.hhNhvNhwhh]j/Tubeubh…)rcT}rdT(h\XqFor an executable, ``cabal init`` does not try to guess which file contains your program's ``Main`` module. You will need to fill in the :pkg-field:`executable:main-is` field with the file name of your program's ``Main`` module (including ``.hs`` or ``.lhs`` extension). Other modules included in the executable should be listed in the :pkg-field:`other-modules` field.h]j!Thhhihjh‰hl}reT(hn]ho]hp]hq]ht]uhvKhwhhx]rfT(hXFor an executable, rgT…rhT}riT(h\XFor an executable, hhNhvNhwhh]jcTubhç)rjT}rkT(h\X``cabal init``hl}rlT(hn]ho]hp]hq]ht]uh]jcThx]rmThX cabal initrnT…roT}rpT(h\X cabal inith]jjTubahjhïubhX< does not try to guess which file contains your program’s rqT…rrT}rsT(h\X: does not try to guess which file contains your program's hhNhvNhwhh]jcTubhç)rtT}ruT(h\X``Main``hl}rvT(hn]ho]hp]hq]ht]uh]jcThx]rwThXMainrxT…ryT}rzT(h\XMainh]jtTubahjhïubhX& module. You will need to fill in the r{T…r|T}r}T(h\X& module. You will need to fill in the hhNhvNhwhh]jcTubjt)r~T}rT(h\X:pkg-field:`executable:main-is`h]jcThhhihjjwhl}r€T(UreftypeX pkg-fieldjyˆjzXmain-isU refdomainXcabalrThq]hp]U refexplicit‰hn]ho]ht]j}j~j”X executableuhvKhx]r‚Thç)rƒT}r„T(h\Xexecutable:main-ishl}r…T(hn]ho]r†T(j…jTXcabal-pkg-fieldr‡Tehp]hq]ht]uh]j~Thx]rˆThXexecutable:main-isr‰T…rŠT}r‹T(h\Uh]jƒTubahjhïubaubhX. field with the file name of your program’s rŒT…rT}rŽT(h\X, field with the file name of your program's hhNhvNhwhh]jcTubhç)rT}rT(h\X``Main``hl}r‘T(hn]ho]hp]hq]ht]uh]jcThx]r’ThXMainr“T…r”T}r•T(h\XMainh]jTubahjhïubhX module (including r–T…r—T}r˜T(h\X module (including hhNhvNhwhh]jcTubhç)r™T}ršT(h\X``.hs``hl}r›T(hn]ho]hp]hq]ht]uh]jcThx]rœThX.hsrT…ržT}rŸT(h\X.hsh]j™TubahjhïubhX or r T…r¡T}r¢T(h\X or hhNhvNhwhh]jcTubhç)r£T}r¤T(h\X``.lhs``hl}r¥T(hn]ho]hp]hq]ht]uh]jcThx]r¦ThX.lhsr§T…r¨T}r©T(h\X.lhsh]j£TubahjhïubhXN extension). Other modules included in the executable should be listed in the rªT…r«T}r¬T(h\XN extension). Other modules included in the executable should be listed in the hhNhvNhwhh]jcTubjt)r­T}r®T(h\X:pkg-field:`other-modules`h]jcThhhihjjwhl}r¯T(UreftypeX pkg-fieldjyˆjzX other-modulesr°TU refdomainXcabalr±Thq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvKhx]r²Thç)r³T}r´T(h\j°Thl}rµT(hn]ho]r¶T(j…j±TXcabal-pkg-fieldr·Tehp]hq]ht]uh]j­Thx]r¸ThX other-modulesr¹T…rºT}r»T(h\Uh]j³TubahjhïubaubhX field.r¼T…r½T}r¾T(h\X field.hhNhvNhwhh]jcTubeubeubh^)r¿T}rÀT(h\Uh]jpRhhhihjhkhl}rÁT(hn]ho]hp]hq]rÂTjiRaht]rÃTh?auhvK•hwhhx]rÄT(hz)rÅT}rÆT(h\X$Modules imported from other packagesrÇTh]j¿Thhhihjh~hl}rÈT(hn]ho]hp]hq]ht]uhvK•hwhhx]rÉThX$Modules imported from other packagesrÊT…rËT}rÌT(h\jÇThhNhvNhwhh]jÅTubaubh…)rÍT}rÎT(h\XWhile your library or executable may include a number of modules, it almost certainly also imports a number of external modules from the standard libraries or other pre-packaged libraries. (These other libraries are of course just Cabal packages that contain a library.)rÏTh]j¿Thhhihjh‰hl}rÐT(hn]ho]hp]hq]ht]uhvK—hwhhx]rÑThXWhile your library or executable may include a number of modules, it almost certainly also imports a number of external modules from the standard libraries or other pre-packaged libraries. (These other libraries are of course just Cabal packages that contain a library.)rÒT…rÓT}rÔT(h\jÏThhNhvNhwhh]jÍTubaubh…)rÕT}rÖT(h\XÂYou have to list all of the library packages that your library or executable imports modules from. Or to put it another way: you have to list all the other packages that your package depends on.r×Th]j¿Thhhihjh‰hl}rØT(hn]ho]hp]hq]ht]uhvKœhwhhx]rÙThXÂYou have to list all of the library packages that your library or executable imports modules from. Or to put it another way: you have to list all the other packages that your package depends on.rÚT…rÛT}rÜT(h\j×ThhNhvNhwhh]jÕTubaubh…)rÝT}rÞT(h\X§For example, suppose the example ``Proglet`` module imports the module ``Data.Map``. The ``Data.Map`` module comes from the ``containers`` package, so we must list it:h]j¿Thhhihjh‰hl}rßT(hn]ho]hp]hq]ht]uhvK hwhhx]ràT(hX!For example, suppose the example ráT…râT}rãT(h\X!For example, suppose the example hhNhvNhwhh]jÝTubhç)räT}råT(h\X ``Proglet``hl}ræT(hn]ho]hp]hq]ht]uh]jÝThx]rçThXProgletrèT…réT}rêT(h\XProgleth]jäTubahjhïubhX module imports the module rëT…rìT}ríT(h\X module imports the module hhNhvNhwhh]jÝTubhç)rîT}rïT(h\X ``Data.Map``hl}rðT(hn]ho]hp]hq]ht]uh]jÝThx]rñThXData.MapròT…róT}rôT(h\XData.Maph]jîTubahjhïubhX. The rõT…röT}r÷T(h\X. The hhNhvNhwhh]jÝTubhç)røT}rùT(h\X ``Data.Map``hl}rúT(hn]ho]hp]hq]ht]uh]jÝThx]rûThXData.MaprüT…rýT}rþT(h\XData.Maph]jøTubahjhïubhX module comes from the rÿT…rU}rU(h\X module comes from the hhNhvNhwhh]jÝTubhç)rU}rU(h\X``containers``hl}rU(hn]ho]hp]hq]ht]uh]jÝThx]rUhX containersrU…rU}rU(h\X containersh]jUubahjhïubhX package, so we must list it:r U…r U}r U(h\X package, so we must list it:hhNhvNhwhh]jÝTubeubjÕ)r U}r U(h\Xflibrary exposed-modules: Proglet other-modules: build-depends: containers, base == 4.*h]j¿ThhhihjjØhl}rU(jÚjÛhq]hp]hn]ho]ht]uhvK¦hwhhx]rUhXflibrary exposed-modules: Proglet other-modules: build-depends: containers, base == 4.*rU…rU}rU(h\Uh]j Uubaubh…)rU}rU(h\X®In addition, almost every package also depends on the ``base`` library package because it exports the standard ``Prelude`` module plus other basic modules like ``Data.List``.h]j¿Thhhihjh‰hl}rU(hn]ho]hp]hq]ht]uhvK«hwhhx]rU(hX6In addition, almost every package also depends on the rU…rU}rU(h\X6In addition, almost every package also depends on the hhNhvNhwhh]jUubhç)rU}rU(h\X``base``hl}rU(hn]ho]hp]hq]ht]uh]jUhx]rUhXbaserU…rU}r U(h\Xbaseh]jUubahjhïubhX1 library package because it exports the standard r!U…r"U}r#U(h\X1 library package because it exports the standard hhNhvNhwhh]jUubhç)r$U}r%U(h\X ``Prelude``hl}r&U(hn]ho]hp]hq]ht]uh]jUhx]r'UhXPreluder(U…r)U}r*U(h\XPreludeh]j$UubahjhïubhX& module plus other basic modules like r+U…r,U}r-U(h\X& module plus other basic modules like hhNhvNhwhh]jUubhç)r.U}r/U(h\X ``Data.List``hl}r0U(hn]ho]hp]hq]ht]uh]jUhx]r1UhX Data.Listr2U…r3U}r4U(h\X Data.Listh]j.UubahjhïubhX.…r5U}r6U(h\X.hhNhvNhwhh]jUubeubh…)r7U}r8U(h\XºYou will notice that we have listed ``base == 4.*``. This gives a constraint on the version of the base package that our package will work with. The most common kinds of constraints are:h]j¿Thhhihjh‰hl}r9U(hn]ho]hp]hq]ht]uhvK¯hwhhx]r:U(hX$You will notice that we have listed r;U…rU}r?U(h\X``base == 4.*``hl}r@U(hn]ho]hp]hq]ht]uh]j7Uhx]rAUhX base == 4.*rBU…rCU}rDU(h\X base == 4.*h]j>UubahjhïubhX‡. This gives a constraint on the version of the base package that our package will work with. The most common kinds of constraints are:rEU…rFU}rGU(h\X‡. This gives a constraint on the version of the base package that our package will work with. The most common kinds of constraints are:hhNhvNhwhh]j7Uubeubh)rHU}rIU(h\Uh]j¿Thhhihjh’hl}rJU(h”X-hq]hp]hn]ho]ht]uhvK³hwhhx]rKU(h–)rLU}rMU(h\X``pkgname >= n``rNUh]jHUhhhihjh™hl}rOU(hn]ho]hp]hq]ht]uhvNhwhhx]rPUh…)rQU}rRU(h\jNUh]jLUhhhihjh‰hl}rSU(hn]ho]hp]hq]ht]uhvK³hx]rTUhç)rUU}rVU(h\jNUhl}rWU(hn]ho]hp]hq]ht]uh]jQUhx]rXUhX pkgname >= nrYU…rZU}r[U(h\X pkgname >= nh]jUUubahjhïubaubaubh–)r\U}r]U(h\X#``pkgname ^>= n`` (since Cabal 2.0)r^Uh]jHUhhhihjh™hl}r_U(hn]ho]hp]hq]ht]uhvNhwhhx]r`Uh…)raU}rbU(h\j^Uh]j\Uhhhihjh‰hl}rcU(hn]ho]hp]hq]ht]uhvK´hx]rdU(hç)reU}rfU(h\X``pkgname ^>= n``hl}rgU(hn]ho]hp]hq]ht]uh]jaUhx]rhUhX pkgname ^>= nriU…rjU}rkU(h\X pkgname ^>= nh]jeUubahjhïubhX (since Cabal 2.0)rlU…rmU}rnU(h\X (since Cabal 2.0)h]jaUubeubaubh–)roU}rpU(h\X``pkgname >= n && < m``rqUh]jHUhhhihjh™hl}rrU(hn]ho]hp]hq]ht]uhvNhwhhx]rsUh…)rtU}ruU(h\jqUh]joUhhhihjh‰hl}rvU(hn]ho]hp]hq]ht]uhvKµhx]rwUhç)rxU}ryU(h\jqUhl}rzU(hn]ho]hp]hq]ht]uh]jtUhx]r{UhXpkgname >= n && < mr|U…r}U}r~U(h\Xpkgname >= n && < mh]jxUubahjhïubaubaubh–)rU}r€U(h\X%``pkgname == n.*`` (since Cabal 1.6) h]jHUhhhihjh™hl}rU(hn]ho]hp]hq]ht]uhvNhwhhx]r‚Uh…)rƒU}r„U(h\X$``pkgname == n.*`` (since Cabal 1.6)h]jUhhhihjh‰hl}r…U(hn]ho]hp]hq]ht]uhvK¶hx]r†U(hç)r‡U}rˆU(h\X``pkgname == n.*``hl}r‰U(hn]ho]hp]hq]ht]uh]jƒUhx]rŠUhXpkgname == n.*r‹U…rŒU}rU(h\Xpkgname == n.*h]j‡UubahjhïubhX (since Cabal 1.6)rŽU…rU}rU(h\X (since Cabal 1.6)h]jƒUubeubaubeubh…)r‘U}r’U(h\XÍThe last is just shorthand, for example ``base == 4.*`` means exactly the same thing as ``base >= 4 && < 5``. Please refer to the documentation on the :pkg-field:`build-depends` field for more information.h]j¿Thhhihjh‰hl}r“U(hn]ho]hp]hq]ht]uhvK¸hwhhx]r”U(hX(The last is just shorthand, for example r•U…r–U}r—U(h\X(The last is just shorthand, for example hhNhvNhwhh]j‘Uubhç)r˜U}r™U(h\X``base == 4.*``hl}ršU(hn]ho]hp]hq]ht]uh]j‘Uhx]r›UhX base == 4.*rœU…rU}ržU(h\X base == 4.*h]j˜UubahjhïubhX! means exactly the same thing as rŸU…r U}r¡U(h\X! means exactly the same thing as hhNhvNhwhh]j‘Uubhç)r¢U}r£U(h\X``base >= 4 && < 5``hl}r¤U(hn]ho]hp]hq]ht]uh]j‘Uhx]r¥UhXbase >= 4 && < 5r¦U…r§U}r¨U(h\Xbase >= 4 && < 5h]j¢UubahjhïubhX+. Please refer to the documentation on the r©U…rªU}r«U(h\X+. Please refer to the documentation on the hhNhvNhwhh]j‘Uubjt)r¬U}r­U(h\X:pkg-field:`build-depends`h]j‘Uhhhihjjwhl}r®U(UreftypeX pkg-fieldjyˆjzX build-dependsr¯UU refdomainXcabalr°Uhq]hp]U refexplicit‰hn]ho]ht]j}j~j”NuhvK¸hx]r±Uhç)r²U}r³U(h\j¯Uhl}r´U(hn]ho]rµU(j…j°UXcabal-pkg-fieldr¶Uehp]hq]ht]uh]j¬Uhx]r·UhX build-dependsr¸U…r¹U}rºU(h\Uh]j²UubahjhïubaubhX field for more information.r»U…r¼U}r½U(h\X field for more information.hhNhvNhwhh]j‘Uubeubh…)r¾U}r¿U(h\XÆAlso, you can factor out shared ``build-depends`` (and other fields such as ``ghc-options``) into a ``common`` stanza which you can ``import`` in your libraries and executable sections. For example:h]j¿Thhhihjh‰hl}rÀU(hn]ho]hp]hq]ht]uhvK¼hwhhx]rÁU(hX Also, you can factor out shared rÂU…rÃU}rÄU(h\X Also, you can factor out shared hhNhvNhwhh]j¾Uubhç)rÅU}rÆU(h\X``build-depends``hl}rÇU(hn]ho]hp]hq]ht]uh]j¾Uhx]rÈUhX build-dependsrÉU…rÊU}rËU(h\X build-dependsh]jÅUubahjhïubhX (and other fields such as rÌU…rÍU}rÎU(h\X (and other fields such as hhNhvNhwhh]j¾Uubhç)rÏU}rÐU(h\X``ghc-options``hl}rÑU(hn]ho]hp]hq]ht]uh]j¾Uhx]rÒUhX ghc-optionsrÓU…rÔU}rÕU(h\X ghc-optionsh]jÏUubahjhïubhX ) into a rÖU…r×U}rØU(h\X ) into a hhNhvNhwhh]j¾Uubhç)rÙU}rÚU(h\X ``common``hl}rÛU(hn]ho]hp]hq]ht]uh]j¾Uhx]rÜUhXcommonrÝU…rÞU}rßU(h\Xcommonh]jÙUubahjhïubhX stanza which you can ràU…ráU}râU(h\X stanza which you can hhNhvNhwhh]j¾Uubhç)rãU}räU(h\X ``import``hl}råU(hn]ho]hp]hq]ht]uh]j¾Uhx]ræUhXimportrçU…rèU}réU(h\Ximporth]jãUubahjhïubhX8 in your libraries and executable sections. For example:rêU…rëU}rìU(h\X8 in your libraries and executable sections. For example:hhNhvNhwhh]j¾UubeubjÕ)ríU}rîU(h\X¶common shared-properties default-language: Haskell2010 build-depends: base == 4.* ghc-options: -Wall library import: shared-properties exposed-modules: Progleth]j¿ThhhihjjØhl}rïU(jÚjÛhq]hp]hn]ho]ht]uhvKÂhwhhx]rðUhX¶common shared-properties default-language: Haskell2010 build-depends: base == 4.* ghc-options: -Wall library import: shared-properties exposed-modules: ProgletrñU…ròU}róU(h\Uh]jíUubaubh…)rôU}rõU(h\X{Note that the ``import`` **must** be the first thing in the stanza. For more information see the `Common stanzas`_ section.h]j¿Thhhihjh‰hl}röU(hn]ho]hp]hq]ht]uhvKÎhwhhx]r÷U(hXNote that the røU…rùU}rúU(h\XNote that the hhNhvNhwhh]jôUubhç)rûU}rüU(h\X ``import``hl}rýU(hn]ho]hp]hq]ht]uh]jôUhx]rþUhXimportrÿU…rV}rV(h\Ximporth]jûUubahjhïubhX …rV}rV(h\X hhNhvNhwhh]jôUubj²)rV}rV(h\X**must**hl}rV(hn]ho]hp]hq]ht]uh]jôUhx]rVhXmustrV…r V}r V(h\Xmusth]jVubahjjºubhX@ be the first thing in the stanza. For more information see the r V…r V}r V(h\X@ be the first thing in the stanza. For more information see the hhNhvNhwhh]jôUubjH)rV}rV(h\X`Common stanzas`_jKKh]jôUhjjLhl}rV(UnameXCommon stanzashq]hp]hn]ho]ht]jNjnKuhx]rVhXCommon stanzasrV…rV}rV(h\XCommon stanzash]jVubaubhX section.rV…rV}rV(h\X section.hhNhvNhwhh]jôUubeubeubh^)rV}rV(h\Uh]jpRhhhihjhkhl}rV(hn]ho]hp]hq]rVjeRaht]rVh$auhvKÒhwhhx]rV(hz)rV}rV(h\XBuilding the packager Vh]jVhhhihjh~hl}r!V(hn]ho]hp]hq]ht]uhvKÒhwhhx]r"VhXBuilding the packager#V…r$V}r%V(h\j VhhNhvNhwhh]jVubaubh…)r&V}r'V(h\XSFor simple packages that's it! We can now try configuring and building the package:r(Vh]jVhhhihjh‰hl}r)V(hn]ho]hp]hq]ht]uhvKÔhwhhx]r*VhXUFor simple packages that’s it! We can now try configuring and building the package:r+V…r,V}r-V(h\j(VhhNhvNhwhh]j&VubaubjÕ)r.V}r/V(h\X$ cabal configure $ cabal buildh]jVhhhihjjØhl}r0V(j‰jXconsolejÚjÛhq]hp]hn]j}ho]ht]uhvK×hwhhx]r1VhX$ cabal configure $ cabal buildr2V…r3V}r4V(h\Uh]j.Vubaubh…)r5V}r6V(h\XFAssuming those two steps worked then you can also install the package:r7Vh]jVhhhihjh‰hl}r8V(hn]ho]hp]hq]ht]uhvKÜhwhhx]r9VhXFAssuming those two steps worked then you can also install the package:r:V…r;V}rV(h\X$ cabal installh]jVhhhihjjØhl}r?V(j‰jXconsolejÚjÛhq]hp]hn]j}ho]ht]uhvKÞhwhhx]r@VhX$ cabal installrAV…rBV}rCV(h\Uh]j=Vubaubh…)rDV}rEV(h\XÖFor libraries this makes them available for use in GHCi or to be used by other packages. For executables it installs the program so that you can run it (though you may first need to adjust your system's ``$PATH``).h]jVhhhihjh‰hl}rFV(hn]ho]hp]hq]ht]uhvKâhwhhx]rGV(hXÍFor libraries this makes them available for use in GHCi or to be used by other packages. For executables it installs the program so that you can run it (though you may first need to adjust your system’s rHV…rIV}rJV(h\XËFor libraries this makes them available for use in GHCi or to be used by other packages. For executables it installs the program so that you can run it (though you may first need to adjust your system's hhNhvNhwhh]jDVubhç)rKV}rLV(h\X ``$PATH``hl}rMV(hn]ho]hp]hq]ht]uh]jDVhx]rNVhX$PATHrOV…rPV}rQV(h\X$PATHh]jKVubahjhïubhX).rRV…rSV}rTV(h\X).hhNhvNhwhh]jDVubeubeubh^)rUV}rVV(h\Uh]jpRhhhihjhkhl}rWV(hn]ho]hp]hq]rXVjgRaht]rYVh=auhvKçhwhhx]rZV(hz)r[V}r\V(h\X Next stepsr]Vh]jUVhhhihjh~hl}r^V(hn]ho]hp]hq]ht]uhvKçhwhhx]r_VhX Next stepsr`V…raV}rbV(h\j]VhhNhvNhwhh]j[Vubaubh…)rcV}rdV(h\XfWhat we have covered so far should be enough for very simple packages that you use on your own system.reVh]jUVhhhihjh‰hl}rfV(hn]ho]hp]hq]ht]uhvKéhwhhx]rgVhXfWhat we have covered so far should be enough for very simple packages that you use on your own system.rhV…riV}rjV(h\jeVhhNhvNhwhh]jcVubaubh…)rkV}rlV(h\X‡The next few sections cover more details needed for more complex packages and details needed for distributing packages to other people.rmVh]jUVhhhihjh‰hl}rnV(hn]ho]hp]hq]ht]uhvKìhwhhx]roVhX‡The next few sections cover more details needed for more complex packages and details needed for distributing packages to other people.rpV…rqV}rrV(h\jmVhhNhvNhwhh]jkVubaubh…)rsV}rtV(h\XtThe previous chapter covers building and installing packages -- your own packages or ones developed by other people.ruVh]jUVhhhihjh‰hl}rvV(hn]ho]hp]hq]ht]uhvKïhwhhx]rwVhXuThe previous chapter covers building and installing packages – your own packages or ones developed by other people.rxV…ryV}rzV(h\juVhhNhvNhwhh]jsVubaubeubeubh^)r{V}r|V(h\Uh]hhhhihjhkhl}r}V(hn]ho]hp]hq]r~VjnRaht]rVhJauhvKóhwhhx]r€V(hz)rV}r‚V(h\XPackage conceptsrƒVh]j{Vhhhihjh~hl}r„V(hn]ho]hp]hq]ht]uhvKóhwhhx]r…VhXPackage conceptsr†V…r‡V}rˆV(h\jƒVhhNhvNhwhh]jVubaubh…)r‰V}rŠV(h\X¡Before diving into the details of writing packages it helps to understand a bit about packages in the Haskell world and the particular approach that Cabal takes.r‹Vh]j{Vhhhihjh‰hl}rŒV(hn]ho]hp]hq]ht]uhvKõhwhhx]rVhX¡Before diving into the details of writing packages it helps to understand a bit about packages in the Haskell world and the particular approach that Cabal takes.rŽV…rV}rV(h\j‹VhhNhvNhwhh]j‰Vubaubh^)r‘V}r’V(h\Uh]j{Vhhhihjhkhl}r“V(hn]ho]hp]hq]r”VjaRaht]r•Vh auhvKúhwhhx]r–V(hz)r—V}r˜V(h\XThe point of packagesr™Vh]j‘Vhhhihjh~hl}ršV(hn]ho]hp]hq]ht]uhvKúhwhhx]r›VhXThe point of packagesrœV…rV}ržV(h\j™VhhNhvNhwhh]j—Vubaubh…)rŸV}r V(h\XçPackages are a mechanism for organising and distributing code. Packages are particularly suited for "programming in the large", that is building big systems by using and re-using code written by different people at different times.r¡Vh]j‘Vhhhihjh‰hl}r¢V(hn]ho]hp]hq]ht]uhvKühwhhx]r£VhXëPackages are a mechanism for organising and distributing code. Packages are particularly suited for “programming in the largeâ€, that is building big systems by using and re-using code written by different people at different times.r¤V…r¥V}r¦V(h\j¡VhhNhvNhwhh]jŸVubaubh…)r§V}r¨V(h\X¹People organise code into packages based on functionality and dependencies. Social factors are also important: most packages have a single author, or a relatively small team of authors.r©Vh]j‘Vhhhihjh‰hl}rªV(hn]ho]hp]hq]ht]uhvMhwhhx]r«VhX¹People organise code into packages based on functionality and dependencies. Social factors are also important: most packages have a single author, or a relatively small team of authors.r¬V…r­V}r®V(h\j©VhhNhvNhwhh]j§Vubaubh…)r¯V}r°V(h\XUPackages are also used for distribution: the idea is that a package can be created in one place and be moved to a different computer and be usable in that different environment. There are a surprising number of details that have to be got right for this to work, and a good package system helps to simplify this process and make it reliable.r±Vh]j‘Vhhhihjh‰hl}r²V(hn]ho]hp]hq]ht]uhvMhwhhx]r³VhXUPackages are also used for distribution: the idea is that a package can be created in one place and be moved to a different computer and be usable in that different environment. There are a surprising number of details that have to be got right for this to work, and a good package system helps to simplify this process and make it reliable.r´V…rµV}r¶V(h\j±VhhNhvNhwhh]j¯Vubaubh…)r·V}r¸V(h\XEPackages come in two main flavours: libraries of reusable code, and complete programs. Libraries present a code interface, an API, while programs can be run directly. In the Haskell world, library packages expose a set of Haskell modules as their public interface. Cabal packages can contain a library or executables or both.r¹Vh]j‘Vhhhihjh‰hl}rºV(hn]ho]hp]hq]ht]uhvM hwhhx]r»VhXEPackages come in two main flavours: libraries of reusable code, and complete programs. Libraries present a code interface, an API, while programs can be run directly. In the Haskell world, library packages expose a set of Haskell modules as their public interface. Cabal packages can contain a library or executables or both.r¼V…r½V}r¾V(h\j¹VhhNhvNhwhh]j·Vubaubh…)r¿V}rÀV(h\XÏSome programming languages have packages as a builtin language concept. For example in Java, a package provides a local namespace for types and other definitions. In the Haskell world, packages are not a part of the language itself. Haskell programs consist of a number of modules, and packages just provide a way to partition the modules into sets of related functionality. Thus the choice of module names in Haskell is still important, even when using packages.rÁVh]j‘Vhhhihjh‰hl}rÂV(hn]ho]hp]hq]ht]uhvMhwhhx]rÃVhXÏSome programming languages have packages as a builtin language concept. For example in Java, a package provides a local namespace for types and other definitions. In the Haskell world, packages are not a part of the language itself. Haskell programs consist of a number of modules, and packages just provide a way to partition the modules into sets of related functionality. Thus the choice of module names in Haskell is still important, even when using packages.rÄV…rÅV}rÆV(h\jÁVhhNhvNhwhh]j¿Vubaubeubh^)rÇV}rÈV(h\Uh]j{Vhhhihjhkhl}rÉV(hn]ho]hp]hq]rÊVjfRaht]rËVh6auhvMhwhhx]rÌV(hz)rÍV}rÎV(h\XPackage names and versionsrÏVh]jÇVhhhihjh~hl}rÐV(hn]ho]hp]hq]ht]uhvMhwhhx]rÑVhXPackage names and versionsrÒV…rÓV}rÔV(h\jÏVhhNhvNhwhh]jÍVubaubh…)rÕV}rÖV(h\X All packages have a name, e.g. "HUnit". Package names are assumed to be unique. Cabal package names may contain letters, numbers and hyphens, but not spaces and may also not contain a hyphened section consisting of only numbers. The namespace for Cabal packages is flat, not hierarchical.r×Vh]jÇVhhhihjh‰hl}rØV(hn]ho]hp]hq]ht]uhvMhwhhx]rÙVhX$All packages have a name, e.g. “HUnitâ€. Package names are assumed to be unique. Cabal package names may contain letters, numbers and hyphens, but not spaces and may also not contain a hyphened section consisting of only numbers. The namespace for Cabal packages is flat, not hierarchical.rÚV…rÛV}rÜV(h\j×VhhNhvNhwhh]jÕVubaubh…)rÝV}rÞV(h\XÄPackages also have a version, e.g "1.1". This matches the typical way in which packages are developed. Strictly speaking, each version of a package is independent, but usually they are very similar. Cabal package versions follow the conventional numeric style, consisting of a sequence of digits such as "1.0.1" or "2.0". There are a range of common conventions for "versioning" packages, that is giving some meaning to the version number in terms of changes in the package, such as e.g. `SemVer `__; however, for packages intended to be distributed via Hackage Haskell's `Package Versioning Policy`_ applies (see also the `PVP/SemVer FAQ section `__).h]jÇVhhhihjh‰hl}rßV(hn]ho]hp]hq]ht]uhvM"hwhhx]ràV(hXøPackages also have a version, e.g “1.1â€. This matches the typical way in which packages are developed. Strictly speaking, each version of a package is independent, but usually they are very similar. Cabal package versions follow the conventional numeric style, consisting of a sequence of digits such as “1.0.1†or “2.0â€. There are a range of common conventions for “versioning†packages, that is giving some meaning to the version number in terms of changes in the package, such as e.g. ráV…râV}rãV(h\XèPackages also have a version, e.g "1.1". This matches the typical way in which packages are developed. Strictly speaking, each version of a package is independent, but usually they are very similar. Cabal package versions follow the conventional numeric style, consisting of a sequence of digits such as "1.0.1" or "2.0". There are a range of common conventions for "versioning" packages, that is giving some meaning to the version number in terms of changes in the package, such as e.g. hhNhvNhwhh]jÝVubjH)räV}råV(h\X`SemVer `__hl}ræV(UnameXSemVerj‡Xhttp://semver.orghq]hp]hn]ho]ht]uh]jÝVhx]rçVhXSemVerrèV…réV}rêV(h\XSemVerh]jäVubahjjLubhXK; however, for packages intended to be distributed via Hackage Haskell’s rëV…rìV}ríV(h\XI; however, for packages intended to be distributed via Hackage Haskell's hhNhvNhwhh]jÝVubjH)rîV}rïV(h\X`Package Versioning Policy`_jKKh]jÝVhjjLhl}rðV(UnameXPackage Versioning Policyj‡j²hq]hp]hn]ho]ht]uhx]rñVhXPackage Versioning PolicyròV…róV}rôV(h\XPackage Versioning Policyh]jîVubaubhX applies (see also the rõV…röV}r÷V(h\X applies (see also the hhNhvNhwhh]jÝVubjH)røV}rùV(h\X@`PVP/SemVer FAQ section `__hl}rúV(UnameXPVP/SemVer FAQ sectionj‡X#https://pvp.haskell.org/faq/#semverhq]hp]hn]ho]ht]uh]jÝVhx]rûVhXPVP/SemVer FAQ sectionrüV…rýV}rþV(h\XPVP/SemVer FAQ sectionh]jøVubahjjLubhX).rÿV…rW}rW(h\X).hhNhvNhwhh]jÝVubeubh…)rW}rW(h\X—The combination of package name and version is called the *package ID* and is written with a hyphen to separate the name and version, e.g. "HUnit-1.1".h]jÇVhhhihjh‰hl}rW(hn]ho]hp]hq]ht]uhvM-hwhhx]rW(hX:The combination of package name and version is called the rW…rW}rW(h\X:The combination of package name and version is called the hhNhvNhwhh]jWubhÇ)r W}r W(h\X *package ID*hl}r W(hn]ho]hp]hq]ht]uh]jWhx]r WhX package IDr W…rW}rW(h\X package IDh]j WubahjhÏubhXU and is written with a hyphen to separate the name and version, e.g. “HUnit-1.1â€.rW…rW}rW(h\XQ and is written with a hyphen to separate the name and version, e.g. "HUnit-1.1".hhNhvNhwhh]jWubeubh…)rW}rW(h\XÎFor Cabal packages, the combination of the package name and version *uniquely* identifies each package. Or to put it another way: two packages with the same name and version are considered to *be* the same.h]jÇVhhhihjh‰hl}rW(hn]ho]hp]hq]ht]uhvM1hwhhx]rW(hXDFor Cabal packages, the combination of the package name and version rW…rW}rW(h\XDFor Cabal packages, the combination of the package name and version hhNhvNhwhh]jWubhÇ)rW}rW(h\X *uniquely*hl}rW(hn]ho]hp]hq]ht]uh]jWhx]rWhXuniquelyrW…rW}r W(h\Xuniquelyh]jWubahjhÏubhXr identifies each package. Or to put it another way: two packages with the same name and version are considered to r!W…r"W}r#W(h\Xr identifies each package. Or to put it another way: two packages with the same name and version are considered to hhNhvNhwhh]jWubhÇ)r$W}r%W(h\X*be*hl}r&W(hn]ho]hp]hq]ht]uh]jWhx]r'WhXber(W…r)W}r*W(h\Xbeh]j$WubahjhÏubhX the same.r+W…r,W}r-W(h\X the same.hhNhvNhwhh]jWubeubh…)r.W}r/W(h\X@Strictly speaking, the package ID only identifies each Cabal *source* package; the same Cabal source package can be configured and built in different ways. There is a separate installed package ID that uniquely identifies each installed package instance. Most of the time however, users need not be aware of this detail.h]jÇVhhhihjh‰hl}r0W(hn]ho]hp]hq]ht]uhvM5hwhhx]r1W(hX=Strictly speaking, the package ID only identifies each Cabal r2W…r3W}r4W(h\X=Strictly speaking, the package ID only identifies each Cabal hhNhvNhwhh]j.WubhÇ)r5W}r6W(h\X*source*hl}r7W(hn]ho]hp]hq]ht]uh]j.Whx]r8WhXsourcer9W…r:W}r;W(h\Xsourceh]j5WubahjhÏubhXû package; the same Cabal source package can be configured and built in different ways. There is a separate installed package ID that uniquely identifies each installed package instance. Most of the time however, users need not be aware of this detail.rW(h\Xû package; the same Cabal source package can be configured and built in different ways. There is a separate installed package ID that uniquely identifies each installed package instance. Most of the time however, users need not be aware of this detail.hhNhvNhwhh]j.Wubeubeubh^)r?W}r@W(h\Uh]j{Vhhhihjhkhl}rAW(hn]ho]hp]hq]rBWjmRaht]rCWhIauhvM<hwhhx]rDW(hz)rEW}rFW(h\X(Kinds of package: Cabal vs GHC vs systemrGWh]j?Whhhihjh~hl}rHW(hn]ho]hp]hq]ht]uhvM<hwhhx]rIWhX(Kinds of package: Cabal vs GHC vs systemrJW…rKW}rLW(h\jGWhhNhvNhwhh]jEWubaubh…)rMW}rNW(h\XŸIt can be slightly confusing at first because there are various different notions of package floating around. Fortunately the details are not very complicated.rOWh]j?Whhhihjh‰hl}rPW(hn]ho]hp]hq]ht]uhvM>hwhhx]rQWhXŸIt can be slightly confusing at first because there are various different notions of package floating around. Fortunately the details are not very complicated.rRW…rSW}rTW(h\jOWhhNhvNhwhh]jMWubaubj)rUW}rVW(h\Uh]j?Whhhihjjhl}rWW(hn]ho]hp]hq]ht]uhvNhwhhx]rXW(j)rYW}rZW(h\XëCabal packages Cabal packages are really source packages. That is they contain Haskell (and sometimes C) source code. Cabal packages can be compiled to produce GHC packages. They can also be translated into operating system packages. h]jUWhhhihjj!hl}r[W(hn]ho]hp]hq]ht]uhvMGhx]r\W(j$)r]W}r^W(h\XCabal packagesr_Wh]jYWhhhihjj(hl}r`W(hn]ho]hp]hq]ht]uhvMGhx]raWhXCabal packagesrbW…rcW}rdW(h\j_Wh]j]Wubaubj<)reW}rfW(h\Uhl}rgW(hn]ho]hp]hq]ht]uh]jYWhx]rhW(h…)riW}rjW(h\XfCabal packages are really source packages. That is they contain Haskell (and sometimes C) source code.rkWh]jeWhhhihjh‰hl}rlW(hn]ho]hp]hq]ht]uhvMChx]rmWhXfCabal packages are really source packages. That is they contain Haskell (and sometimes C) source code.rnW…roW}rpW(h\jkWh]jiWubaubh…)rqW}rrW(h\XsCabal packages can be compiled to produce GHC packages. They can also be translated into operating system packages.rsWh]jeWhhhihjh‰hl}rtW(hn]ho]hp]hq]ht]uhvMFhx]ruWhXsCabal packages can be compiled to produce GHC packages. They can also be translated into operating system packages.rvW…rwW}rxW(h\jsWh]jqWubaubehjjVubeubj)ryW}rzW(h\XªGHC packages This is GHC's view on packages. GHC only cares about library packages, not executables. Library packages have to be registered with GHC for them to be available in GHCi or to be used when compiling other programs or packages. The low-level tool ``ghc-pkg`` is used to register GHC packages and to get information on what packages are currently registered. You never need to make GHC packages manually. When you build and install a Cabal package containing a library then it gets registered with GHC automatically. Haskell implementations other than GHC have essentially the same concept of registered packages. For the most part, Cabal hides the slight differences. h]jUWhhhihjj!hl}r{W(hn]ho]hp]hq]ht]uhvMXhwhhx]r|W(j$)r}W}r~W(h\X GHC packagesrWh]jyWhhhihjj(hl}r€W(hn]ho]hp]hq]ht]uhvMXhx]rWhX GHC packagesr‚W…rƒW}r„W(h\jWh]j}Wubaubj<)r…W}r†W(h\Uhl}r‡W(hn]ho]hp]hq]ht]uh]jyWhx]rˆW(h…)r‰W}rŠW(h\XáThis is GHC's view on packages. GHC only cares about library packages, not executables. Library packages have to be registered with GHC for them to be available in GHCi or to be used when compiling other programs or packages.r‹Wh]j…Whhhihjh‰hl}rŒW(hn]ho]hp]hq]ht]uhvMJhx]rWhXãThis is GHC’s view on packages. GHC only cares about library packages, not executables. Library packages have to be registered with GHC for them to be available in GHCi or to be used when compiling other programs or packages.rŽW…rW}rW(h\j‹Wh]j‰Wubaubh…)r‘W}r’W(h\XThe low-level tool ``ghc-pkg`` is used to register GHC packages and to get information on what packages are currently registered.h]j…Whhhihjh‰hl}r“W(hn]ho]hp]hq]ht]uhvMOhx]r”W(hXThe low-level tool r•W…r–W}r—W(h\XThe low-level tool h]j‘Wubhç)r˜W}r™W(h\X ``ghc-pkg``hl}ršW(hn]ho]hp]hq]ht]uh]j‘Whx]r›WhXghc-pkgrœW…rW}ržW(h\Xghc-pkgh]j˜WubahjhïubhXc is used to register GHC packages and to get information on what packages are currently registered.rŸW…r W}r¡W(h\Xc is used to register GHC packages and to get information on what packages are currently registered.h]j‘Wubeubh…)r¢W}r£W(h\XYou never need to make GHC packages manually. When you build and install a Cabal package containing a library then it gets registered with GHC automatically.r¤Wh]j…Whhhihjh‰hl}r¥W(hn]ho]hp]hq]ht]uhvMRhx]r¦WhXYou never need to make GHC packages manually. When you build and install a Cabal package containing a library then it gets registered with GHC automatically.r§W…r¨W}r©W(h\j¤Wh]j¢Wubaubh…)rªW}r«W(h\X—Haskell implementations other than GHC have essentially the same concept of registered packages. For the most part, Cabal hides the slight differences.r¬Wh]j…Whhhihjh‰hl}r­W(hn]ho]hp]hq]ht]uhvMVhx]r®WhX—Haskell implementations other than GHC have essentially the same concept of registered packages. For the most part, Cabal hides the slight differences.r¯W…r°W}r±W(h\j¬Wh]jªWubaubehjjVubeubj)r²W}r³W(h\XfOperating system packages On operating systems like Linux and Mac OS X, the system has a specific notion of a package and there are tools for installing and managing packages. The Cabal package format is designed to allow Cabal packages to be translated, mostly-automatically, into operating system packages. They are usually translated 1:1, that is a single Cabal package becomes a single system package. It is also possible to make Windows installers from Cabal packages, though this is typically done for a program together with all of its library dependencies, rather than packaging each library separately. h]jUWhhhihjj!hl}r´W(hn]ho]hp]hq]ht]uhvMfhwhhx]rµW(j$)r¶W}r·W(h\XOperating system packagesr¸Wh]j²Whhhihjj(hl}r¹W(hn]ho]hp]hq]ht]uhvMfhx]rºWhXOperating system packagesr»W…r¼W}r½W(h\j¸Wh]j¶Wubaubj<)r¾W}r¿W(h\Uhl}rÀW(hn]ho]hp]hq]ht]uh]j²Whx]rÁW(h…)rÂW}rÃW(h\X•On operating systems like Linux and Mac OS X, the system has a specific notion of a package and there are tools for installing and managing packages.rÄWh]j¾Whhhihjh‰hl}rÅW(hn]ho]hp]hq]ht]uhvM[hx]rÆWhX•On operating systems like Linux and Mac OS X, the system has a specific notion of a package and there are tools for installing and managing packages.rÇW…rÈW}rÉW(h\jÄWh]jÂWubaubh…)rÊW}rËW(h\XåThe Cabal package format is designed to allow Cabal packages to be translated, mostly-automatically, into operating system packages. They are usually translated 1:1, that is a single Cabal package becomes a single system package.rÌWh]j¾Whhhihjh‰hl}rÍW(hn]ho]hp]hq]ht]uhvM_hx]rÎWhXåThe Cabal package format is designed to allow Cabal packages to be translated, mostly-automatically, into operating system packages. They are usually translated 1:1, that is a single Cabal package becomes a single system package.rÏW…rÐW}rÑW(h\jÌWh]jÊWubaubh…)rÒW}rÓW(h\XÍIt is also possible to make Windows installers from Cabal packages, though this is typically done for a program together with all of its library dependencies, rather than packaging each library separately.rÔWh]j¾Whhhihjh‰hl}rÕW(hn]ho]hp]hq]ht]uhvMdhx]rÖWhXÍIt is also possible to make Windows installers from Cabal packages, though this is typically done for a program together with all of its library dependencies, rather than packaging each library separately.r×W…rØW}rÙW(h\jÔWh]jÒWubaubehjjVubeubeubeubh^)rÚW}rÛW(h\Uh]j{Vhhhihjhkhl}rÜW(hn]ho]hp]hq]rÝWjhRaht]rÞWh>auhvMihwhhx]rßW(hz)ràW}ráW(h\XUnit of distributionrâWh]jÚWhhhihjh~hl}rãW(hn]ho]hp]hq]ht]uhvMihwhhx]räWhXUnit of distributionråW…ræW}rçW(h\jâWhhNhvNhwhh]jàWubaubh…)rèW}réW(h\XQThe Cabal package is the unit of distribution. What this means is that each Cabal package can be distributed on its own in source or binary form. Of course there may dependencies between packages, but there is usually a degree of flexibility in which versions of packages can work together so distributing them independently makes sense.rêWh]jÚWhhhihjh‰hl}rëW(hn]ho]hp]hq]ht]uhvMkhwhhx]rìWhXQThe Cabal package is the unit of distribution. What this means is that each Cabal package can be distributed on its own in source or binary form. Of course there may dependencies between packages, but there is usually a degree of flexibility in which versions of packages can work together so distributing them independently makes sense.ríW…rîW}rïW(h\jêWhhNhvNhwhh]jèWubaubh…)rðW}rñW(h\X×It is perhaps easiest to see what being "the unit of distribution" means by contrast to an alternative approach. Many projects are made up of several interdependent packages and during development these might all be kept under one common directory tree and be built and tested together. When it comes to distribution however, rather than distributing them all together in a single tarball, it is required that they each be distributed independently in their own tarballs.ròWh]jÚWhhhihjh‰hl}róW(hn]ho]hp]hq]ht]uhvMqhwhhx]rôWhXÛIt is perhaps easiest to see what being “the unit of distribution†means by contrast to an alternative approach. Many projects are made up of several interdependent packages and during development these might all be kept under one common directory tree and be built and tested together. When it comes to distribution however, rather than distributing them all together in a single tarball, it is required that they each be distributed independently in their own tarballs.rõW…röW}r÷W(h\jòWhhNhvNhwhh]jðWubaubh…)røW}rùW(h\XCabal's approach is to say that if you can specify a dependency on a package then that package should be able to be distributed independently. Or to put it the other way round, if you want to distribute it as a single unit, then it should be a single package.rúWh]jÚWhhhihjh‰hl}rûW(hn]ho]hp]hq]ht]uhvMyhwhhx]rüWhXCabal’s approach is to say that if you can specify a dependency on a package then that package should be able to be distributed independently. Or to put it the other way round, if you want to distribute it as a single unit, then it should be a single package.rýW…rþW}rÿW(h\júWhhNhvNhwhh]jøWubaubeubh^)rX}rX(h\Uh]j{Vhhhihjhkhl}rX(hn]ho]hp]hq]rXjbRaht]rXh auhvMhwhhx]rX(hz)rX}rX(h\X6Explicit dependencies and automatic package managementrXh]jXhhhihjh~hl}r X(hn]ho]hp]hq]ht]uhvMhwhhx]r XhX6Explicit dependencies and automatic package managementr X…r X}r X(h\jXhhNhvNhwhh]jXubaubh…)rX}rX(h\XàCabal takes the approach that all packages dependencies are specified explicitly and specified in a declarative way. The point is to enable automatic package management. This means tools like ``cabal`` can resolve dependencies and install a package plus all of its dependencies automatically. Alternatively, it is possible to mechanically (or mostly mechanically) translate Cabal packages into system packages and let the system package manager install dependencies automatically.h]jXhhhihjh‰hl}rX(hn]ho]hp]hq]ht]uhvMhwhhx]rX(hXÀCabal takes the approach that all packages dependencies are specified explicitly and specified in a declarative way. The point is to enable automatic package management. This means tools like rX…rX}rX(h\XÀCabal takes the approach that all packages dependencies are specified explicitly and specified in a declarative way. The point is to enable automatic package management. This means tools like hhNhvNhwhh]jXubhç)rX}rX(h\X ``cabal``hl}rX(hn]ho]hp]hq]ht]uh]jXhx]rXhXcabalrX…rX}rX(h\Xcabalh]jXubahjhïubhX can resolve dependencies and install a package plus all of its dependencies automatically. Alternatively, it is possible to mechanically (or mostly mechanically) translate Cabal packages into system packages and let the system package manager install dependencies automatically.rX…rX}rX(h\X can resolve dependencies and install a package plus all of its dependencies automatically. Alternatively, it is possible to mechanically (or mostly mechanically) translate Cabal packages into system packages and let the system package manager install dependencies automatically.hhNhvNhwhh]jXubeubh…)rX}r X(h\X-It is important to track dependencies accurately so that packages can reliably be moved from one system to another system and still be able to build it there. Cabal is therefore relatively strict about specifying dependencies. For example Cabal's default build system will not even let code build if it tries to import a module from a package that isn't listed in the ``.cabal`` file, even if that package is actually installed. This helps to ensure that there are no "untracked dependencies" that could cause the code to fail to build on some other system.h]jXhhhihjh‰hl}r!X(hn]ho]hp]hq]ht]uhvM‰hwhhx]r"X(hXtIt is important to track dependencies accurately so that packages can reliably be moved from one system to another system and still be able to build it there. Cabal is therefore relatively strict about specifying dependencies. For example Cabal’s default build system will not even let code build if it tries to import a module from a package that isn’t listed in the r#X…r$X}r%X(h\XpIt is important to track dependencies accurately so that packages can reliably be moved from one system to another system and still be able to build it there. Cabal is therefore relatively strict about specifying dependencies. For example Cabal's default build system will not even let code build if it tries to import a module from a package that isn't listed in the hhNhvNhwhh]jXubhç)r&X}r'X(h\X ``.cabal``hl}r(X(hn]ho]hp]hq]ht]uh]jXhx]r)XhX.cabalr*X…r+X}r,X(h\X.cabalh]j&XubahjhïubhX· file, even if that package is actually installed. This helps to ensure that there are no “untracked dependencies†that could cause the code to fail to build on some other system.r-X…r.X}r/X(h\X³ file, even if that package is actually installed. This helps to ensure that there are no "untracked dependencies" that could cause the code to fail to build on some other system.hhNhvNhwhh]jXubeubh…)r0X}r1X(h\X¾The explicit dependency approach is in contrast to the traditional "./configure" approach where instead of specifying dependencies declaratively, the ``./configure`` script checks if the dependencies are present on the system. Some manual work is required to transform a ``./configure`` based package into a Linux distribution package (or similar). This conversion work is usually done by people other than the package author(s). The practical effect of this is that only the most popular packages will benefit from automatic package management. Instead, Cabal forces the original author to specify the dependencies but the advantage is that every package can benefit from automatic package management.h]jXhhhihjh‰hl}r2X(hn]ho]hp]hq]ht]uhvM“hwhhx]r3X(hXšThe explicit dependency approach is in contrast to the traditional “./configure†approach where instead of specifying dependencies declaratively, the r4X…r5X}r6X(h\X–The explicit dependency approach is in contrast to the traditional "./configure" approach where instead of specifying dependencies declaratively, the hhNhvNhwhh]j0Xubhç)r7X}r8X(h\X``./configure``hl}r9X(hn]ho]hp]hq]ht]uh]j0Xhx]r:XhX ./configurer;X…rX…r?X}r@X(h\Xj script checks if the dependencies are present on the system. Some manual work is required to transform a hhNhvNhwhh]j0Xubhç)rAX}rBX(h\X``./configure``hl}rCX(hn]ho]hp]hq]ht]uh]j0Xhx]rDXhX ./configurerEX…rFX}rGX(h\X ./configureh]jAXubahjhïubhX  based package into a Linux distribution package (or similar). This conversion work is usually done by people other than the package author(s). The practical effect of this is that only the most popular packages will benefit from automatic package management. Instead, Cabal forces the original author to specify the dependencies but the advantage is that every package can benefit from automatic package management.rHX…rIX}rJX(h\X  based package into a Linux distribution package (or similar). This conversion work is usually done by people other than the package author(s). The practical effect of this is that only the most popular packages will benefit from automatic package management. Instead, Cabal forces the original author to specify the dependencies but the advantage is that every package can benefit from automatic package management.hhNhvNhwhh]j0Xubeubh…)rKX}rLX(h\XMThe "./configure" approach tends to encourage packages that adapt themselves to the environment in which they are built, for example by disabling optional features so that they can continue to work when a particular dependency is not available. This approach makes sense in a world where installing additional dependencies is a tiresome manual process and so minimising dependencies is important. The automatic package management view is that packages should just declare what they need and the package manager will take responsibility for ensuring that all the dependencies are installed.rMXh]jXhhhihjh‰hl}rNX(hn]ho]hp]hq]ht]uhvMŸhwhhx]rOXhXQThe “./configure†approach tends to encourage packages that adapt themselves to the environment in which they are built, for example by disabling optional features so that they can continue to work when a particular dependency is not available. This approach makes sense in a world where installing additional dependencies is a tiresome manual process and so minimising dependencies is important. The automatic package management view is that packages should just declare what they need and the package manager will take responsibility for ensuring that all the dependencies are installed.rPX…rQX}rRX(h\jMXhhNhvNhwhh]jKXubaubh…)rSX}rTX(h\XËSometimes of course optional features and optional dependencies do make sense. Cabal packages can have optional features and varying dependencies. These conditional dependencies are still specified in a declarative way however and remain compatible with automatic package management. The need to remain compatible with automatic package management means that Cabal's conditional dependencies system is a bit less flexible than with the "./configure" approach.rUXh]jXhhhihjh‰hl}rVX(hn]ho]hp]hq]ht]uhvM©hwhhx]rWXhXÑSometimes of course optional features and optional dependencies do make sense. Cabal packages can have optional features and varying dependencies. These conditional dependencies are still specified in a declarative way however and remain compatible with automatic package management. The need to remain compatible with automatic package management means that Cabal’s conditional dependencies system is a bit less flexible than with the “./configure†approach.rXX…rYX}rZX(h\jUXhhNhvNhwhh]jSXubaubhó)r[X}r\X(h\X³`GNU autoconf places restrictions on paths, including the path that the user builds a package from. `_ Package authors using ``build-type: configure`` should be aware of these restrictions; because users may be unexpectedly constrained and face mysterious errors, it is recommended that ``build-type: configure`` is only used where strictly necessary.h]jXhhhihjhöhl}r]X(hn]ho]hp]hq]ht]uhvNhwhhx]r^Xh…)r_X}r`X(h\X³`GNU autoconf places restrictions on paths, including the path that the user builds a package from. `_ Package authors using ``build-type: configure`` should be aware of these restrictions; because users may be unexpectedly constrained and face mysterious errors, it is recommended that ``build-type: configure`` is only used where strictly necessary.h]j[Xhhhihjh‰hl}raX(hn]ho]hp]hq]ht]uhvM²hx]rbX(jH)rcX}rdX(h\Xº`GNU autoconf places restrictions on paths, including the path that the user builds a package from. `_hl}reX(UnameXbGNU autoconf places restrictions on paths, including the path that the user builds a package from.j‡XRhttps://www.gnu.org/software/autoconf/manual/autoconf.html#File-System-ConventionsrfXhq]hp]hn]ho]ht]uh]j_Xhx]rgXhXbGNU autoconf places restrictions on paths, including the path that the user builds a package from.rhX…riX}rjX(h\XbGNU autoconf places restrictions on paths, including the path that the user builds a package from.h]jcXubahjjLubj©)rkX}rlX(h\XU haKh]j_Xhjj¬hl}rmX(UrefurijfXhq]rnXjlRahp]hn]ho]ht]roXhFauhx]ubhX Package authors using rpX…rqX}rrX(h\X Package authors using h]j_Xubhç)rsX}rtX(h\X``build-type: configure``hl}ruX(hn]ho]hp]hq]ht]uh]j_Xhx]rvXhXbuild-type: configurerwX…rxX}ryX(h\Xbuild-type: configureh]jsXubahjhïubhX‰ should be aware of these restrictions; because users may be unexpectedly constrained and face mysterious errors, it is recommended that rzX…r{X}r|X(h\X‰ should be aware of these restrictions; because users may be unexpectedly constrained and face mysterious errors, it is recommended that h]j_Xubhç)r}X}r~X(h\X``build-type: configure``hl}rX(hn]ho]hp]hq]ht]uh]j_Xhx]r€XhXbuild-type: configurerX…r‚X}rƒX(h\Xbuild-type: configureh]j}XubahjhïubhX' is only used where strictly necessary.r„X…r…X}r†X(h\X' is only used where strictly necessary.h]j_Xubeubaubeubh^)r‡X}rˆX(h\Uh]j{Vhhhihjhkhl}r‰X(hn]ho]hp]hq]rŠXjkRaht]r‹XhEauhvM»hwhhx]rŒX(hz)rX}rŽX(h\X PortabilityrXh]j‡Xhhhihjh~hl}rX(hn]ho]hp]hq]ht]uhvM»hwhhx]r‘XhX Portabilityr’X…r“X}r”X(h\jXhhNhvNhwhh]jXubaubh…)r•X}r–X(h\XOne of the purposes of Cabal is to make it easier to build packages on different platforms (operating systems and CPU architectures), with different compiler versions and indeed even with different Haskell implementations. (Yes, there are Haskell implementations other than GHC!)r—Xh]j‡Xhhhihjh‰hl}r˜X(hn]ho]hp]hq]ht]uhvM½hwhhx]r™XhXOne of the purposes of Cabal is to make it easier to build packages on different platforms (operating systems and CPU architectures), with different compiler versions and indeed even with different Haskell implementations. (Yes, there are Haskell implementations other than GHC!)ršX…r›X}rœX(h\j—XhhNhvNhwhh]j•Xubaubh…)rX}ržX(h\XCabal provides abstractions of features present in different Haskell implementations and wherever possible it is best to take advantage of these to increase portability. Where necessary however it is possible to use specific features of specific implementations.rŸXh]j‡Xhhhihjh‰hl}r X(hn]ho]hp]hq]ht]uhvMÃhwhhx]r¡XhXCabal provides abstractions of features present in different Haskell implementations and wherever possible it is best to take advantage of these to increase portability. Where necessary however it is possible to use specific features of specific implementations.r¢X…r£X}r¤X(h\jŸXhhNhvNhwhh]jXubaubh…)r¥X}r¦X(h\X¾For example a package author can list in the package's ``.cabal`` what language extensions the code uses. This allows Cabal to figure out if the language extension is supported by the Haskell implementation that the user picks. Additionally, certain language extensions such as Template Haskell require special handling from the build system and by listing the extension it provides the build system with enough information to do the right thing.h]j‡Xhhhihjh‰hl}r§X(hn]ho]hp]hq]ht]uhvMÈhwhhx]r¨X(hX9For example a package author can list in the package’s r©X…rªX}r«X(h\X7For example a package author can list in the package's hhNhvNhwhh]j¥Xubhç)r¬X}r­X(h\X ``.cabal``hl}r®X(hn]ho]hp]hq]ht]uh]j¥Xhx]r¯XhX.cabalr°X…r±X}r²X(h\X.cabalh]j¬XubahjhïubhX} what language extensions the code uses. This allows Cabal to figure out if the language extension is supported by the Haskell implementation that the user picks. Additionally, certain language extensions such as Template Haskell require special handling from the build system and by listing the extension it provides the build system with enough information to do the right thing.r³X…r´X}rµX(h\X} what language extensions the code uses. This allows Cabal to figure out if the language extension is supported by the Haskell implementation that the user picks. Additionally, certain language extensions such as Template Haskell require special handling from the build system and by listing the extension it provides the build system with enough information to do the right thing.hhNhvNhwhh]j¥Xubeubh…)r¶X}r·X(h\XÇAnother similar example is linking with foreign libraries. Rather than specifying GHC flags directly, the package author can list the libraries that are needed and the build system will take care of using the right flags for the compiler. Additionally this makes it easier for tools to discover what system C libraries a package needs, which is useful for tracking dependencies on system libraries (e.g. when translating into Linux distribution packages).r¸Xh]j‡Xhhhihjh‰hl}r¹X(hn]ho]hp]hq]ht]uhvMÐhwhhx]rºXhXÇAnother similar example is linking with foreign libraries. Rather than specifying GHC flags directly, the package author can list the libraries that are needed and the build system will take care of using the right flags for the compiler. Additionally this makes it easier for tools to discover what system C libraries a package needs, which is useful for tracking dependencies on system libraries (e.g. when translating into Linux distribution packages).r»X…r¼X}r½X(h\j¸XhhNhvNhwhh]j¶Xubaubh…)r¾X}r¿X(h\X]In fact both of these examples fall into the category of explicitly specifying dependencies. Not all dependencies are other Cabal packages. Foreign libraries are clearly another kind of dependency. It's also possible to think of language extensions as dependencies: the package depends on a Haskell implementation that supports all those extensions.rÀXh]j‡Xhhhihjh‰hl}rÁX(hn]ho]hp]hq]ht]uhvMØhwhhx]rÂXhX_In fact both of these examples fall into the category of explicitly specifying dependencies. Not all dependencies are other Cabal packages. Foreign libraries are clearly another kind of dependency. It’s also possible to think of language extensions as dependencies: the package depends on a Haskell implementation that supports all those extensions.rÃX…rÄX}rÅX(h\jÀXhhNhvNhwhh]j¾Xubaubh…)rÆX}rÇX(h\XzWhere compiler-specific options are needed however, there is an "escape hatch" available. The developer can specify implementation-specific options and more generally there is a configuration mechanism to customise many aspects of how a package is built depending on the Haskell implementation, the operating system, computer architecture and user-specified configuration flags.rÈXh]j‡Xhhhihjh‰hl}rÉX(hn]ho]hp]hq]ht]uhvMÞhwhhx]rÊXhX~Where compiler-specific options are needed however, there is an “escape hatch†available. The developer can specify implementation-specific options and more generally there is a configuration mechanism to customise many aspects of how a package is built depending on the Haskell implementation, the operating system, computer architecture and user-specified configuration flags.rËX…rÌX}rÍX(h\jÈXhhNhvNhwhh]jÆXubaubeubeubhfeh\UU transformerrÎXNU footnote_refsrÏX}rÐXXold-style-build-tool-dependsrÑX]rÒXj 7asUrefnamesrÓX}rÔX(Xforeign libraries]rÕXjû,aXpvp]rÖX(jw0jæ0j'1j“1j³1jõ2eXconditional blocks]r×XjýFaj(]rØXj%aXpackage properties]rÙXj®ajÑX]rÚXj 7aXbackpack]rÛX(j“#jFj4FeXbuild information]rÜX(jðjjµ#j´'jT)j¹PjÞKj j‡ eXpackage descriptions]rÝX(jIjejç]rÞXjäaXhackage]rßXjðaXsystem-dependent parameters]ràX(j–jÿjR j“/ji;jäAj¿CeXhaddock]ráX(j±j÷ eXcommon stanzas]râXjVaXabnf]rãX(jNj©jMjGeXmore complex packages]räXj+aj ]råXjaXpackage versioning policy]ræX(jîVj×$ejD]rçXjAajÑ]rèX(jÎj/jseuUsymbol_footnotesréX]rêXUautofootnote_refsrëX]rìXj 7aUsymbol_footnote_refsríX]rîXU citationsrïX]rðXhwhU current_linerñXNUtransform_messagesròX]róX(hY)rôX}rõX(h\Uhl}röX(hn]UlevelKhq]hp]r÷XjRaUsourcehiho]ht]UlineM UtypejFRuhx]røXh…)rùX}rúX(h\Uhl}rûX(hn]ho]hp]hq]ht]uh]jôXhx]rüXhX2Duplicate implicit target name: "foo-bench.cabal".rýX…rþX}rÿX(h\Uh]jùXubahjh‰ubahjjCRubhY)rY}rY(h\Uhl}rY(hn]UlevelKhq]hp]Usourcehiho]ht]UlineM¨UtypejFRuhx]rYh…)rY}rY(h\Uhl}rY(hn]ho]hp]hq]ht]uh]jYhx]rYhX.Hyperlink target "pkg-desc" is not referenced.rY…r Y}r Y(h\Uh]jYubahjh‰ubahjjCRubhY)r Y}r Y(h\Uhl}r Y(hn]UlevelKhq]hp]Usourcehiho]ht]UlineMUtypejFRuhx]rYh…)rY}rY(h\Uhl}rY(hn]ho]hp]hq]ht]uh]j Yhx]rYhX-Hyperlink target "sublibs" is not referenced.rY…rY}rY(h\Uh]jYubahjh‰ubahjjCRubhY)rY}rY(h\Uhl}rY(hn]UlevelKhq]hp]Usourcehiho]ht]UlineM UtypejFRuhx]rYh…)rY}rY(h\Uhl}rY(hn]ho]hp]hq]ht]uh]jYhx]rYhX2Hyperlink target "buildtoolsbc" is not referenced.rY…rY}r Y(h\Uh]jYubahjh‰ubahjjCRubhY)r!Y}r"Y(h\Uhl}r#Y(hn]UlevelKhq]hp]Usourcehiho]ht]UlineM UtypejFRuhx]r$Yh…)r%Y}r&Y(h\Uhl}r'Y(hn]ho]hp]hq]ht]uh]j!Yhx]r(YhX3Hyperlink target "buildtoolsmap" is not referenced.r)Y…r*Y}r+Y(h\Uh]j%Yubahjh‰ubahjjCRubhY)r,Y}r-Y(h\Uhl}r.Y(hn]UlevelKhq]hp]Usourcehiho]ht]UtypejFRuhx]r/Yh…)r0Y}r1Y(h\Uhl}r2Y(hn]ho]hp]hq]ht]uh]j,Yhx]r3YhX-Hyperlink target "index-0" is not referenced.r4Y…r5Y}r6Y(h\Uh]j0Yubahjh‰ubahjjCRubhY)r7Y}r8Y(h\Uhl}r9Y(hn]UlevelKhq]hp]Usourcej¢ho]ht]UlineMœUtypejFRuhx]r:Yh…)r;Y}rYhX-Hyperlink target "haskell" is not referenced.r?Y…r@Y}rAY(h\Uh]j;Yubahjh‰ubahjjCRubhY)rBY}rCY(h\Uhl}rDY(hn]UlevelKhq]hp]Usourcej¢ho]ht]UlineM¤UtypejFRuhx]rEYh…)rFY}rGY(h\Uhl}rHY(hn]ho]hp]hq]ht]uh]jBYhx]rIYhX,Hyperlink target "hoogle" is not referenced.rJY…rKY}rLY(h\Uh]jFYubahjh‰ubahjjCRubhY)rMY}rNY(h\Uhl}rOY(hn]UlevelKhq]hp]Usourcej¢ho]ht]UlineM¦UtypejFRuhx]rPYh…)rQY}rRY(h\Uhl}rSY(hn]ho]hp]hq]ht]uh]jMYhx]rTYhX.Hyperlink target "hscolour" is not referenced.rUY…rVY}rWY(h\Uh]jQYubahjh‰ubahjjCRubeUreporterrXYNUid_startrYYK U autofootnotesrZY]r[YjaU citation_refsr\Y}r]YUindirect_targetsr^Y]r_YUsettingsr`Y(cdocutils.frontend Values raYorbY}rcY(Ufootnote_backlinksrdYKUrecord_dependenciesreYNU language_coderfYUenrgYU tracebackrhYˆUpep_referencesriYNUstrip_commentsrjYNU toc_backlinksrkYjOU rfc_base_urlrlYUhttps://tools.ietf.org/html/rmYU datestamprnYNU report_levelroYKUsmartquotes_localesrpY]rqYU _destinationrrYNU halt_levelrsYKU strip_classesrtYNh~NUerror_encoding_error_handlerruYUbackslashreplacervYUdebugrwYNUembed_stylesheetrxY‰Uoutput_encoding_error_handlerryYUstrictrzYU sectnum_xformr{YKUdump_transformsr|YNU docinfo_xformr}YKUwarning_streamr~YNUpep_file_url_templaterYUpep-%04dr€YUexit_status_levelrYKUconfigr‚YNUstrict_visitorrƒYNUcloak_email_addressesr„YˆUtrim_footnote_reference_spacer…Y‰Uenvr†YNUdump_pseudo_xmlr‡YNUexpose_internalsrˆYNUsectsubtitle_xformr‰Y‰U source_linkrŠYNUrfc_referencesr‹YNUoutput_encodingrŒYUutf-8rYU source_urlrŽYNUinput_encodingrYU utf-8-sigrYU_disable_configr‘YNU id_prefixr’YUUcharacter_level_inline_markupr“Y‰U tab_widthr”YKUerror_encodingr•YUUTF-8r–YU_sourcer—YhiU generatorr˜YNUdump_internalsr™YNU smart_quotesršYˆU pep_base_urlr›YU https://www.python.org/dev/peps/rœYUsyntax_highlightrYUlongržYUinput_encoding_error_handlerrŸYjzYUauto_id_prefixr YUidr¡YUdoctitle_xformr¢Y‰Ustrip_elements_with_classesr£YNU _config_filesr¤Y]Ufile_insertion_enabledr¥YˆU raw_enabledr¦YKU dump_settingsr§YNubUsymbol_footnote_startr¨YKUidsr©Y}rªY(jèGjäGj +jœ+j j~/jÖFjÒFjjjËNjÇNjå<já<jþ jú j¢"jž"j j j¿Fj»FjjjFj}Fj÷jòj)"j%"j¤@j @jXOjTOj±jÉjX+jR+j+%j'%jhjdjK4jG4jçjãjã8jä8j!j!jlRjkXjÏjÊjhRjÚWjfRjÇVj% j! jw8jx8jùAjõAj×)jÓ)jsjojC=j?=jéjäjW!jS!jnRj{VjÄ3jÀ3jJDjFDjoPjkPjOhdjwjQFj´j®jbRjXjÂ#jÃ#jà.jÜ.j²j´j?#j;#jèjY j‹Jj‡JjAj;j#>j>j¹(jµ(jµ?j±?j@j@j™>j•>jb-j^-jnKjjKjÏPjËPj¯jªjjRjãRj1Rj-Rjî+jê+j,j,j‡+j‚+j×BjÓBj j 7jlFjgFjíQh_j‰j…jRjRj…'j'jMjIj¡HjHjŸ<j›<j6j6jmRj?WjÿLjûLj­j®jKGjGGjTjPj:$j6$j©Fj¥Fj$j‰$j)j )j™j)jeRjVj—Cj“Cj¶hdjBj>jÈjÄjëjçj´/j°/j©j¥jZjVjaRj‘VjQjQjo@jk@jn'jj'j}jyj!jjÅ$jÁ$jÂj¾jÜjØjÊ'jÆ'j7Cj3CjŽNjŠNjÇjÃj…KjKjøjôjðjëj»j·jÛ-j×-jW7jS7jŽjŠj®jªjäjàjs jo j€Gj|GjÖjÑjDj{Dje?ja?jOjOjR,jN,jÏDjËDjojkj¼Aj¸AjØMjÔMjcRj!TjQjKjwjsjöjòjkRj‡Xj¹,jµ,j®4jª4jÈjÄjö4jò4jXPhbj-j -jGjFHj jjÔCjÐCj`RjpRjS(jO(j¥ j¡ j5j‰5jHjDj:j6j'j#jjjBLj>LjâjÞjj)jf)jiRj¿Thshfj,j,j~;jz;jÃj¿jûJj÷JjdRjxSjæ*jâ*jÆjÂjZLjULj%)j!)jH.jD.jˆj„jjjÄ!jÀ!jå;já;j¶Qj²Qj j jQNjMNj¶+j²+j#;j;j‚j~jgRjUVj»j·j:@j6@j.Bj*Bj7.j3.j‡AjƒAj¼j·jÎ>jÊ>uUsubstitution_namesr«Y}r¬Yhjhwhl}r­Y(hn]hq]hp]Usourcehiho]ht]uU footnotesr®Y]r¯YUrefidsr°Y}r±Y(jw8]r²Yjt8ajÂ#]r³Yj¿#aj­]r´Yjªaj¶]rµYj³ajã8]r¶Yjà8aj²]r·Yj¯aj ]r¸Yj 7auub.