€cdocutils.nodes document q)q}q(U nametypesq}q(X executablesqNXpvpqˆX&accessing data files from package codeqNX quickstartq NX.example: a package containing a simple libraryq NXthe point of packagesq NX6explicit dependencies and automatic package managementq NXdownloading a package's sourceq NXpackage descriptionsqNXlibraryqNX test suitesqNXcommon stanzasqNXmodules included in the packageqNXabnfqˆXhoogleqˆX*listing outdated dependency version boundsqNXconditional compilationqNX$generating dependency version boundsqNXhackageqˆXediting the .cabal fileqNX'backward compatibility and custom-setupqNXrunning executablesqNXsystem-dependent parametersqNXhscolourqˆXmore elaborate solutionsqˆX/meaning of field values when using conditionalsqNXfreezing 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 repositoriesq.NX-example: package using detailed-0.9 interfaceq/NXpackage propertiesq0NXcreating a packageq1NXghcq2ˆXpackage names and versionsq3NXfoo-bench.cabalq4ˆX buildtoolsmapq5ˆXexample: using autoconfq6NXAexample: using explicit braces rather than indentation for layoutq7NXmore complex packagesq8NX next stepsq9NXunit of distributionq:NX$modules imported from other packagesq;NXmodules and preprocessorsqNX buildtoolsbcq?ˆXusing "cabal init"q@NX portabilityqANXrunning test suitesqBNXbuild informationqCNX(kinds of package: cabal vs ghc vs systemqDNXpackage conceptsqENXconditional blocksqFNXcustom setup scriptsqGNXpackage versioning policyqHˆXopening an interpreter sessionqINX benchmarksqJNX3example: package using exitcode-stdio-1.0 interfaceqKNXhaskellqLˆXautogenerated modulesqMNXfind these files at run-timeqNˆXconfigurationsqONuUsubstitution_defsqP}qQUparse_messagesqR]qS(cdocutils.nodes system_message qT)qU}qV(U rawsourceqWUUparentqXcdocutils.nodes section qY)qZ}q[(hWUU referencedq\KhXhY)q]}q^(hWUhXhY)q_}q`(hWUh\KhXhY)qa}qb(hWUhXhUsourceqcXE/home/refold/code/haskell/cabal-2.2/Cabal/doc/developing-packages.rstqdUtagnameqeUsectionqfU attributesqg}qh(Udupnamesqi]Uclassesqj]Ubackrefsqk]Uidsql]qmUdeveloping-packagesqnaUnamesqo]qph$auUlineqqMÈUdocumentqrhUchildrenqs]qt(cdocutils.nodes title qu)qv}qw(hWXDeveloping packagesqxhXhahchdheUtitleqyhg}qz(hi]hj]hk]hl]ho]uhqMÈhrhhs]q{cdocutils.nodes Text q|XDeveloping packagesq}…q~}q(hWhxhcNhqNhrhhXhvubaubcdocutils.nodes paragraph q€)q}q‚(hWX`The Cabal package is the unit of distribution. When installed, its purpose is to make available:qƒhXhahchdheU paragraphq„hg}q…(hi]hj]hk]hl]ho]uhqMÊhrhhs]q†h|X`The Cabal package is the unit of distribution. When installed, its purpose is to make available:q‡…qˆ}q‰(hWhƒhcNhqNhrhhXhubaubcdocutils.nodes bullet_list qŠ)q‹}qŒ(hWUhXhahchdheU bullet_listqhg}qŽ(UbulletqX-hl]hk]hi]hj]ho]uhqMÍhrhhs]q(cdocutils.nodes list_item q‘)q’}q“(hWXOne or more Haskell programs. hXh‹hchdheU list_itemq”hg}q•(hi]hj]hk]hl]ho]uhqNhrhhs]q–h€)q—}q˜(hWXOne or more Haskell programs.q™hXh’hchdheh„hg}qš(hi]hj]hk]hl]ho]uhqMÍhs]q›h|XOne or more Haskell programs.qœ…q}qž(hWh™hXh—ubaubaubh‘)qŸ}q (hWX;At most one library, exposing a number of Haskell modules. hXh‹hchdheh”hg}q¡(hi]hj]hk]hl]ho]uhqNhrhhs]q¢h€)q£}q¤(hWX:At most one library, exposing a number of Haskell modules.q¥hXhŸhchdheh„hg}q¦(hi]hj]hk]hl]ho]uhqMÏhs]q§h|X:At most one library, exposing a number of Haskell modules.q¨…q©}qª(hWh¥hXh£ubaubaubeubh€)q«}q¬(hWX­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­hXhahchdheh„hg}q®(hi]hj]hk]hl]ho]uhqMÑhrhhs]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°…q±}q²(hWh­hcNhqNhrhhXh«ubaubh€)q³}q´(hWX×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µhXhahchdheh„hg}q¶(hi]hj]hk]hl]ho]uhqMÙhrhhs]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¸…q¹}qº(hWhµhcNhqNhrhhXh³ubaubh€)q»}q¼(hWXWA 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``".hXhahchdheh„hg}q½(hi]hj]hk]hl]ho]uhqMÝhrhhs]q¾(h|X-A package is identified by a globally-unique q¿…qÀ}qÁ(hWX-A package is identified by a globally-unique hcNhqNhrhhXh»ubcdocutils.nodes emphasis qÂ)qÃ}qÄ(hWX*package name*hg}qÅ(hi]hj]hk]hl]ho]uhXh»hs]qÆh|X package nameqÇ…qÈ}qÉ(hWUhXhÃubaheUemphasisqÊubh|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 qË…qÌ}qÍ(hWX/, 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 hcNhqNhrhhXh»ubhÂ)qÎ}qÏ(hWX*version number*hg}qÐ(hi]hj]hk]hl]ho]uhXh»hs]qÑh|Xversion numberqÒ…qÓ}qÔ(hWUhXhÎubahehÊubh|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 qÕ…qÖ}q×(hWX„, consisting of a sequence of one or more integers separated by dots. These can be combined to form a single text string called the hcNhqNhrhhXh»ubhÂ)qØ}qÙ(hWX *package ID*hg}qÚ(hi]hj]hk]hl]ho]uhXh»hs]qÛh|X package IDqÜ…qÝ}qÞ(hWUhXhØubahehÊubh|X@, using a hyphen to separate the name from the version, e.g. “qß…qà}qá(hWX>, using a hyphen to separate the name from the version, e.g. "hcNhqNhrhhXh»ubcdocutils.nodes literal qâ)qã}qä(hWX ``HUnit-1.1``hg}qå(hi]hj]hk]hl]ho]uhXh»hs]qæh|X HUnit-1.1qç…qè}qé(hWUhXhãubaheUliteralqêubh|Xâ€.që…qì}qí(hWX".hcNhqNhrhhXh»ubeubcdocutils.nodes note qî)qï}qð(hWXTPackages 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.hXhahchdheUnoteqñhg}qò(hi]hj]hk]hl]ho]uhqNhrhhs]qóh€)qô}qõ(hWXTPackages 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öhXhïhchdheh„hg}q÷(hi]hj]hk]hl]ho]uhqMéhs]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ù…qú}qû(hWhöhXhôubaubaubhY)qü}qý(hWUhXhahchdhehfhg}qþ(hi]hj]hk]hl]qÿUcreating-a-packageraho]rh1auhqMðhrhhs]r(hu)r}r(hWXCreating a packagerhXhühchdhehyhg}r(hi]hj]hk]hl]ho]uhqMðhrhhs]rh|XCreating a packager…r }r (hWjhcNhqNhrhhXjubaubh€)r }r (hWX§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 hXhühchdheh„hg}r(hi]hj]hk]hl]ho]uhqMòhrhhs]rh|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:r…r}r(hWj hcNhqNhrhhXj ubaubcdocutils.nodes definition_list r)r}r(hWUhXhühchdheUdefinition_listrhg}r(hi]hj]hk]hl]ho]uhqNhrhhs]r(cdocutils.nodes definition_list_item r)r}r(hWX­: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`_. hXjhchdheUdefinition_list_itemrhg}r(hi]hj]hk]hl]ho]uhqMùhs]r(cdocutils.nodes term r)r }r!(hWX:file:`{package-name}.cabal`r"hXjhchdheUtermr#hg}r$(hi]hj]hk]hl]ho]uhqMùhs]r%hâ)r&}r'(hWXpackage-name.cabalhg}r((hl]hk]hi]hj]r)Xfiler*aUrolej*ho]uhXj hs]r+(hÂ)r,}r-(hWX package-namehg}r.(hi]hj]hk]hl]ho]uhXj&hs]r/h|X package-namer0…r1}r2(hWUhXj,ubahehÊubh|X.cabalr3…r4}r5(hWX.cabalhXj&ubehehêubaubcdocutils.nodes definition r6)r7}r8(hWUhg}r9(hi]hj]hk]hl]ho]uhXjhs]r:h€)r;}r<(hWXa Unicode UTF-8 text file containing a package description. For details of the syntax of this file, see the section on `package descriptions`_.hXj7hchdheh„hg}r=(hi]hj]hk]hl]ho]uhqM÷hs]r>(h|Xwa Unicode UTF-8 text file containing a package description. For details of the syntax of this file, see the section on r?…r@}rA(hWXwa Unicode UTF-8 text file containing a package description. For details of the syntax of this file, see the section on hXj;ubcdocutils.nodes reference rB)rC}rD(hWX`package descriptions`_UresolvedrEKhXj;heU referencerFhg}rG(UnameXpackage descriptionshl]hk]hi]hj]ho]UrefidrHUpackage-descriptionsrIuhs]rJh|Xpackage descriptionsrK…rL}rM(hWUhXjCubaubh|X.…rN}rO(hWX.hXj;ubeubaheU definitionrPubeubj)rQ}rR(hWXÞ: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. hXjhchdhejhg}rS(hi]hj]hk]hl]ho]uhqMhrhhs]rT(j)rU}rV(hWX:file:`Setup.hs`rWhXjQhchdhej#hg}rX(hi]hj]hk]hl]ho]uhqMhs]rYhâ)rZ}r[(hWXSetup.hshg}r\(hl]hk]hi]hj]r]Xfiler^aUrolej^ho]uhXjUhs]r_h|XSetup.hsr`…ra}rb(hWXSetup.hshXjZubahehêubaubj6)rc}rd(hWUhg}re(hi]hj]hk]hl]ho]uhXjQhs]rfh€)rg}rh(hWXÌ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.hXjchchdheh„hg}ri(hi]hj]hk]hl]ho]uhqMühs]rj(h|Xoa single-module Haskell program to perform various setup tasks (with the interface described in the section on rk…rl}rm(hWXoa single-module Haskell program to perform various setup tasks (with the interface described in the section on hXjgubcsphinx.addnodes pending_xref rn)ro}rp(hWX:ref:`installing-packages`rqhXjghchdheU pending_xrefrrhg}rs(UreftypeXrefUrefwarnrtˆU reftargetruXinstalling-packagesU refdomainXstdrvhl]hk]U refexplicit‰hi]hj]ho]UrefdocrwXdeveloping-packagesrxuhqMühs]rycdocutils.nodes inline rz)r{}r|(hWjqhg}r}(hi]hj]r~(UxrefrjvXstd-refr€ehk]hl]ho]uhXjohs]rh|Xinstalling-packagesr‚…rƒ}r„(hWUhXj{ubaheUinliner…ubaubh|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 r†…r‡}rˆ(hWXµ). 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 hXjgubjn)r‰}rŠ(hWX:pkg-field:`build-type`r‹hXjghchdhejrhg}rŒ(UreftypeX pkg-fieldjtˆjuX build-typeU refdomainXcabalrhl]hk]U refexplicit‰hi]hj]ho]jwjxUcabal:pkg-sectionrŽNuhqMühs]rhâ)r}r‘(hWj‹hg}r’(hi]hj]r“(jjXcabal-pkg-fieldr”ehk]hl]ho]uhXj‰hs]r•h|X build-typer–…r—}r˜(hWUhXjubahehêubaubh|X setting in the r™…rš}r›(hWX setting in the hXjgubhâ)rœ}r(hWX ``.cabal``hg}rž(hi]hj]hk]hl]ho]uhXjghs]rŸh|X.cabalr …r¡}r¢(hWUhXjœubahehêubh|X] file. In most cases it will be trivial, calling on the Cabal library to do most of the work.r£…r¤}r¥(hWX] file. In most cases it will be trivial, calling on the Cabal library to do most of the work.hXjgubeubahejPubeubeubh€)r¦}r§(hWXª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`.hXhühchdheh„hg}r¨(hi]hj]hk]hl]ho]uhqMhrhhs]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 rª…r«}r¬(hWXOnce you have these, you can create a source bundle of this directory for distribution. Building of the package is discussed in the section on hcNhqNhrhhXj¦ubjn)r­}r®(hWX:ref:`installing-packages`r¯hXj¦hchdhejrhg}r°(UreftypeXrefjtˆjuXinstalling-packagesU refdomainXstdr±hl]hk]U refexplicit‰hi]hj]ho]jwjxuhqMhs]r²jz)r³}r´(hWj¯hg}rµ(hi]hj]r¶(jj±Xstd-refr·ehk]hl]ho]uhXj­hs]r¸h|Xinstalling-packagesr¹…rº}r»(hWUhXj³ubahej…ubaubh|X.…r¼}r½(hWX.hcNhqNhrhhXj¦ubeubh€)r¾}r¿(hWX¤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.hXhühchdheh„hg}rÀ(hi]hj]hk]hl]ho]uhqMhrhhs]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 rÂ…rÃ}rÄ(hWXË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 hcNhqNhrhhXj¾ubhâ)rÅ}rÆ(hWX ``.cabal``hg}rÇ(hi]hj]hk]hl]ho]uhXj¾hs]rÈh|X.cabalrÉ…rÊ}rË(hWUhXjÅubahehêubh|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.rÌ…rÍ}rÎ(hWXÏ 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.hcNhqNhrhhXj¾ubeubcdocutils.nodes literal_block rÏ)rÐ}rÑ(hWXÞ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.6hXhühchdheU literal_blockrÒhg}rÓ(U xml:spacerÔUpreserverÕhl]hk]hi]hj]ho]uhqMhrhhs]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.6r×…rØ}rÙ(hWUhXjÐubaubhY)rÚ}rÛ(hWUhXhühchdhehfhg}rÜ(hi]hj]hk]hl]rÝU-example-a-package-containing-a-simple-libraryrÞaho]rßh auhqM(hrhhs]rà(hu)rá}râ(hWX.Example: A package containing a simple libraryrãhXjÚhchdhehyhg}rä(hi]hj]hk]hl]ho]uhqM(hrhhs]råh|X.Example: A package containing a simple libraryræ…rç}rè(hWjãhcNhqNhrhhXjáubaubh€)ré}rê(hWX=The HUnit package contains a file ``HUnit.cabal`` containing:rëhXjÚhchdheh„hg}rì(hi]hj]hk]hl]ho]uhqM*hrhhs]rí(h|X"The HUnit package contains a file rî…rï}rð(hWX"The HUnit package contains a file hcNhqNhrhhXjéubhâ)rñ}rò(hWX``HUnit.cabal``hg}ró(hi]hj]hk]hl]ho]uhXjéhs]rôh|X HUnit.cabalrõ…rö}r÷(hWUhXjñubahehêubh|X containing:rø…rù}rú(hWX containing:hcNhqNhrhhXjéubeubjÏ)rû}rü(hWXê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.10 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: CPPhXjÚhchdhejÒhg}rý(jÔjÕhl]hk]hi]hj]ho]uhqM.hrhhs]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.10 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(hWUhXjûubaubh€)r}r(hWXand the following ``Setup.hs``:rhXjÚhchdheh„hg}r(hi]hj]hk]hl]ho]uhqM?hrhhs]r(h|Xand the following r…r}r (hWXand the following hcNhqNhrhhXjubhâ)r }r (hWX ``Setup.hs``hg}r (hi]hj]hk]hl]ho]uhXjhs]r h|XSetup.hsr…r}r(hWUhXj ubahehêubh|X:…r}r(hWX:hcNhqNhrhhXjubeubjÏ)r}r(hWX-import Distribution.Simple main = defaultMainhXjÚhchdhejÒhg}r(Ulinenosr‰UlanguagerXhaskelljÔjÕhl]hk]hi]Uhighlight_argsr}hj]ho]uhqMAhrhhs]rh|X-import Distribution.Simple main = defaultMainr…r}r(hWUhXjubaubeubhY)r}r(hWUhXhühchdhehfhg}r(hi]hj]hk]hl]r U0example-a-package-containing-executable-programsr!aho]r"h%auhqMGhrhhs]r#(hu)r$}r%(hWX1Example: A package containing executable programsr&hXjhchdhehyhg}r'(hi]hj]hk]hl]ho]uhqMGhrhhs]r(h|X1Example: A package containing executable programsr)…r*}r+(hWj&hcNhqNhrhhXj$ubaubjÏ)r,}r-(hWXº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: UtilshXjhchdhejÒhg}r.(jÔjÕhl]hk]hi]hj]ho]uhqMKhrhhs]r/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: Utilsr0…r1}r2(hWUhXj,ubaubh€)r3}r4(hWX$with ``Setup.hs`` the same as above.r5hXjhchdheh„hg}r6(hi]hj]hk]hl]ho]uhqM^hrhhs]r7(h|Xwith r8…r9}r:(hWXwith hcNhqNhrhhXj3ubhâ)r;}r<(hWX ``Setup.hs``hg}r=(hi]hj]hk]hl]ho]uhXj3hs]r>h|XSetup.hsr?…r@}rA(hWUhXj;ubahehêubh|X the same as above.rB…rC}rD(hWX the same as above.hcNhqNhrhhXj3ubeubeubhY)rE}rF(hWUh\KhXhühchdhehfhg}rG(hi]rHX?example: a package containing a library and executable programsrIahj]hk]hl]rJU>example-a-package-containing-a-library-and-executable-programsrKaho]uhqMahrhhs]rL(hu)rM}rN(hWX?Example: A package containing a library and executable programsrOhXjEhchdhehyhg}rP(hi]hj]hk]hl]ho]uhqMahrhhs]rQh|X?Example: A package containing a library and executable programsrR…rS}rT(hWjOhcNhqNhrhhXjMubaubjÏ)rU}rV(hWXå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, UtilshXjEhchdhejÒhg}rW(jÔjÕhl]hk]hi]hj]ho]uhqMehrhhs]rXh|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, UtilsrY…rZ}r[(hWUhXjUubaubh€)r\}r](hWX‹with ``Setup.hs`` the same as above. Note that any library modules required (directly or indirectly) by an executable must be listed again.hXjEhchdheh„hg}r^(hi]hj]hk]hl]ho]uhqM{hrhhs]r_(h|Xwith r`…ra}rb(hWXwith hcNhqNhrhhXj\ubhâ)rc}rd(hWX ``Setup.hs``hg}re(hi]hj]hk]hl]ho]uhXj\hs]rfh|XSetup.hsrg…rh}ri(hWUhXjcubahehêubh|Xz the same as above. Note that any library modules required (directly or indirectly) by an executable must be listed again.rj…rk}rl(hWXz the same as above. Note that any library modules required (directly or indirectly) by an executable must be listed again.hcNhqNhrhhXj\ubeubh€)rm}rn(hWX–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.hXjEhchdheh„hg}ro(hi]hj]hk]hl]ho]uhqM~hrhhs]rp(h|X9The trivial setup script used in these examples uses the rq…rr}rs(hWX9The trivial setup script used in these examples uses the hcNhqNhrhhXjmubhÂ)rt}ru(hWX*simple build infrastructure*hg}rv(hi]hj]hk]hl]ho]uhXjmhs]rwh|Xsimple build infrastructurerx…ry}rz(hWUhXjtubahehÊubh|X$ provided by the Cabal library (see r{…r|}r}(hWX$ provided by the Cabal library (see hcNhqNhrhhXjmubjB)r~}r(hWXX`Distribution.Simple <../release/cabal-latest/doc/API/Cabal/Distribution-Simple.html>`__hg}r€(UnameXDistribution.SimpleUrefurirX>../release/cabal-latest/doc/API/Cabal/Distribution-Simple.htmlhl]hk]hi]hj]ho]uhXjmhs]r‚h|XDistribution.Simplerƒ…r„}r…(hWUhXj~ubahejFubh|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.r†…r‡}rˆ(hWXÄ). 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.hcNhqNhrhhXjmubeubh€)r‰}rŠ(hWXThe 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 `_.hXjEhchdheh„hg}r‹(hi]hj]hk]hl]ho]uhqM…hrhhs]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 r…rŽ}r(hWX¥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 hcNhqNhrhhXj‰ubjB)r}r‘(hWX`system-dependent parameters`_jEKhXj‰hejFhg}r’(UnameXsystem-dependent parametershl]hk]hi]hj]ho]jHUsystem-dependent-parametersr“uhs]r”h|Xsystem-dependent parametersr•…r–}r—(hWUhXjubaubh|X). A few packages require r˜…r™}rš(hWX). A few packages require hcNhqNhrhhXj‰ubjB)r›}rœ(hWX3`more elaborate solutions `_hg}r(UnameXmore elaborate solutionsjXmorecomplexpackagesržhl]hk]hi]hj]ho]uhXj‰hs]rŸh|Xmore elaborate solutionsr …r¡}r¢(hWUhXj›ubahejFubcdocutils.nodes target r£)r¤}r¥(hWX h\KhXj‰heUtargetr¦hg}r§(Urefurijžhl]r¨Umore-elaborate-solutionsr©ahk]hi]hj]ho]rªhauhs]ubh|X.…r«}r¬(hWX.hcNhqNhrhhXj‰ubeubeubeubh_hY)r­}r®(hWUhXhahchdhehfhg}r¯(hi]hj]hk]hl]r°Ucustom-setup-scriptsr±aho]r²hGauhqM¿ hrhhs]r³(hu)r´}rµ(hWXCustom setup scriptsr¶hXj­hchdhehyhg}r·(hi]hj]hk]hl]ho]uhqM¿ hrhhs]r¸h|XCustom setup scriptsr¹…rº}r»(hWj¶hcNhqNhrhhXj´ubaubh€)r¼}r½(hWX+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.hXj­hchdheh„hg}r¾(hi]hj]hk]hl]ho]uhqMÁ hrhhs]r¿(h|XSince Cabal 1.24, custom rÀ…rÁ}rÂ(hWXSince Cabal 1.24, custom hcNhqNhrhhXj¼ubhâ)rÃ}rÄ(hWX ``Setup.hs``hg}rÅ(hi]hj]hk]hl]ho]uhXj¼hs]rÆh|XSetup.hsrÇ…rÈ}rÉ(hWUhXjÃubahehêubh|XN are required to accurately track their dependencies by declaring them in the rÊ…rË}rÌ(hWXN are required to accurately track their dependencies by declaring them in the hcNhqNhrhhXj¼ubhâ)rÍ}rÎ(hWX ``.cabal``hg}rÏ(hi]hj]hk]hl]ho]uhXj¼hs]rÐh|X.cabalrÑ…rÒ}rÓ(hWUhXjÍubahehêubh|XP file rather than rely on dependencies being implicitly in scope. Please refer rÔ…rÕ}rÖ(hWXP file rather than rely on dependencies being implicitly in scope. Please refer hcNhqNhrhhXj¼ubjB)r×}rØ(hWXL`this article `__hg}rÙ(UnameX this articlejX9https://www.well-typed.com/blog/2015/07/cabal-setup-deps/hl]hk]hi]hj]ho]uhXj¼hs]rÚh|X this articlerÛ…rÜ}rÝ(hWUhXj×ubahejFubh|X for more details.rÞ…rß}rà(hWX for more details.hcNhqNhrhhXj¼ubeubh€)rá}râ(hWX†Declaring a ``custom-setup`` stanza also enables the generation of ``MIN_VERSION_package_(A,B,C)`` CPP macros for the Setup component.hXj­hchdheh„hg}rã(hi]hj]hk]hl]ho]uhqMÇ hrhhs]rä(h|X Declaring a rå…ræ}rç(hWX Declaring a hcNhqNhrhhXjáubhâ)rè}ré(hWX``custom-setup``hg}rê(hi]hj]hk]hl]ho]uhXjáhs]rëh|X custom-setuprì…rí}rî(hWUhXjèubahehêubh|X' stanza also enables the generation of rï…rð}rñ(hWX' stanza also enables the generation of hcNhqNhrhhXjáubhâ)rò}ró(hWX``MIN_VERSION_package_(A,B,C)``hg}rô(hi]hj]hk]hl]ho]uhXjáhs]rõh|XMIN_VERSION_package_(A,B,C)rö…r÷}rø(hWUhXjòubahehêubh|X$ CPP macros for the Setup component.rù…rú}rû(hWX$ CPP macros for the Setup component.hcNhqNhrhhXjáubeubcsphinx.addnodes index rü)rý}rþ(hWUhXj­hchdheUindexrÿhg}r(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubcsphinx.addnodes desc r)r}r(hWUhXj­hchdheUdescrhg}r(Unoindexr‰UdomainrXcabalhl]hk]hi]hj]ho]UobjtyperX pkg-sectionr Udesctyper j uhqNhrhhs]r (csphinx.addnodes desc_signature r )r }r(hWX custom-setuprhXjhchdheUdesc_signaturerhg}r(hl]rX%pkg-section-custom-setup-custom-setuprahk]hi]hj]ho]Ufirstr‰uhqNhrhhs]r(jü)r}r(hWUhXj hchdhejÿhg}r(hl]hk]hi]hj]ho]Uentries]r(UpairrX0custom-setup:custom-setup; package.cabal sectionjUNtrauhqNhrhhs]ubcsphinx.addnodes desc_name r)r}r(hWjhXj hchdheU desc_namerhg}r (jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]r!h|X custom-setupr"…r#}r$(hWUhcNhqNhrhhXjubaubcsphinx.addnodes desc_addname r%)r&}r'(hWU hXj hchdheU desc_addnamer(hg}r)(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]r*h|X …r+}r,(hWUhcNhqNhrhhXj&ubaubeubcsphinx.addnodes desc_content r-)r.}r/(hWUhXjhchdheU desc_contentr0hg}r1(hi]hj]hk]hl]ho]uhqNhrhhs]r2(cdocutils.nodes field_list r3)r4}r5(hWUhXj.hchdheU field_listr6hg}r7(hi]hj]hk]hl]ho]uhqNhrhhs]r8cdocutils.nodes field r9)r:}r;(hWUhXj4hchdheUfieldr<hg}r=(hi]hj]hk]hl]ho]uhqNhrhhs]r>(cdocutils.nodes field_name r?)r@}rA(hWUSincerBhXj:hchdheU field_namerChg}rD(hi]hj]hk]hl]ho]uhqKhs]rEh|XSincerF…rG}rH(hWUhXj@ubaubcdocutils.nodes field_body rI)rJ}rK(hWU Cabal 1.24rLhg}rM(hi]hj]hk]hl]ho]uhXj:hs]rNh€)rO}rP(hWjLhg}rQ(hi]hj]hk]hl]ho]uhXjJhs]rRh|X Cabal 1.24rS…rT}rU(hWUhXjOubaheh„ubaheU field_bodyrVubeubaubh€)rW}rX(hWXThe optional :pkg-section:`custom-setup` stanza contains information needed for the compilation of custom ``Setup.hs`` scripts,hXj.hchdheh„hg}rY(hi]hj]hk]hl]ho]uhqMÎ hrhhs]rZ(h|X The optional r[…r\}r](hWX The optional hcNhqNhrhhXjWubjn)r^}r_(hWX:pkg-section:`custom-setup`r`hXjWhchdhejrhg}ra(UreftypeX pkg-sectionjtˆjuX custom-setupU refdomainXcabalrbhl]hk]U refexplicit‰hi]hj]ho]jwjxuhqMÎ hs]rchâ)rd}re(hWj`hg}rf(hi]hj]rg(jjbXcabal-pkg-sectionrhehk]hl]ho]uhXj^hs]rih|X custom-setuprj…rk}rl(hWUhXjdubahehêubaubh|XB stanza contains information needed for the compilation of custom rm…rn}ro(hWXB stanza contains information needed for the compilation of custom hcNhqNhrhhXjWubhâ)rp}rq(hWX ``Setup.hs``hg}rr(hi]hj]hk]hl]ho]uhXjWhs]rsh|XSetup.hsrt…ru}rv(hWUhXjpubahehêubh|X scripts,rw…rx}ry(hWX scripts,hcNhqNhrhhXjWubeubeubeubjÏ)rz}r{(hWXUcustom-setup setup-depends: base >= 4.5 && < 4.11, Cabal >= 1.14 && < 1.25hXj­hchdhejÒhg}r|(jÔjÕhl]hk]hi]hj]ho]uhqMÓ hrhhs]r}h|XUcustom-setup setup-depends: base >= 4.5 && < 4.11, Cabal >= 1.14 && < 1.25r~…r}r€(hWUhXjzubaubjü)r}r‚(hWUhXj­hchdhejÿhg}rƒ(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r„}r…(hWUhXj­hchdhejhg}r†(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr‡j j‡uhqNhrhhs]rˆ(j )r‰}rŠ(hWXsetup-depends: package listhXj„hchdhejhg}r‹(hl]rŒX$pkg-field-custom-setup-setup-dependsrahk]hi]hj]ho]j‰uhqNhrhhs]rŽ(jü)r}r(hWUhXj‰hchdhejÿhg}r‘(hl]hk]hi]hj]ho]Uentries]r’(jX/custom-setup:setup-depends; package.cabal fieldjUNtr“auhqNhrhhs]ubj)r”}r•(hWX setup-dependsr–hXj‰hchdhejhg}r—(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]r˜h|X setup-dependsr™…rš}r›(hWUhcNhqNhrhhXj”ubaubj%)rœ}r(hWU: ržhXj‰hchdhej(hg}rŸ(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]r h|X: r¡…r¢}r£(hWUhcNhqNhrhhXjœubaubcsphinx.addnodes desc_annotation r¤)r¥}r¦(hWX package listhXj‰hchdheUdesc_annotationr§hg}r¨(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]r©h|X package listrª…r«}r¬(hWUhcNhqNhrhhXj¥ubaubeubj-)r­}r®(hWUhXj„hchdhej0hg}r¯(hi]hj]hk]hl]ho]uhqNhrhhs]r°(j3)r±}r²(hWUhXj­hchdhej6hg}r³(hi]hj]hk]hl]ho]uhqNhrhhs]r´j9)rµ}r¶(hWUhXj±hchdhej<hg}r·(hi]hj]hk]hl]ho]uhqNhrhhs]r¸(j?)r¹}rº(hWjBhXjµhchdhejChg}r»(hi]hj]hk]hl]ho]uhqKhs]r¼h|XSincer½…r¾}r¿(hWUhXj¹ubaubjI)rÀ}rÁ(hWU Cabal 1.24rÂhg}rÃ(hi]hj]hk]hl]ho]uhXjµhs]rÄh€)rÅ}rÆ(hWjÂhg}rÇ(hi]hj]hk]hl]ho]uhXjÀhs]rÈh|X Cabal 1.24rÉ…rÊ}rË(hWUhXjÅubaheh„ubahejVubeubaubh€)rÌ}rÍ(hWX‘The dependencies needed to compile ``Setup.hs``. See the :pkg-field:`build-depends` field for a description of the syntax expected by this field.hXj­hchdheh„hg}rÎ(hi]hj]hk]hl]ho]uhqMÛ hrhhs]rÏ(h|X#The dependencies needed to compile rÐ…rÑ}rÒ(hWX#The dependencies needed to compile hcNhqNhrhhXjÌubhâ)rÓ}rÔ(hWX ``Setup.hs``hg}rÕ(hi]hj]hk]hl]ho]uhXjÌhs]rÖh|XSetup.hsr×…rØ}rÙ(hWUhXjÓubahehêubh|X . See the rÚ…rÛ}rÜ(hWX . See the hcNhqNhrhhXjÌubjn)rÝ}rÞ(hWX:pkg-field:`build-depends`rßhXjÌhchdhejrhg}rà(UreftypeX pkg-fieldjtˆjuX build-dependsU refdomainXcabalráhl]hk]U refexplicit‰hi]hj]ho]jwjxjŽjuhqMÛ hs]râhâ)rã}rä(hWjßhg}rå(hi]hj]ræ(jjáXcabal-pkg-fieldrçehk]hl]ho]uhXjÝhs]rèh|X build-dependsré…rê}rë(hWUhXjãubahehêubaubh|X> field for a description of the syntax expected by this field.rì…rí}rî(hWX> field for a description of the syntax expected by this field.hcNhqNhrhhXjÌubeubeubeubhY)rï}rð(hWUhXj­hchdhehfhg}rñ(hi]hj]hk]hl]ròU'backward-compatibility-and-custom-setupróaho]rôhauhqMà hrhhs]rõ(hu)rö}r÷(hWX+Backward compatibility and ``custom-setup``røhXjïhchdhehyhg}rù(hi]hj]hk]hl]ho]uhqMà hrhhs]rú(h|XBackward compatibility and rû…rü}rý(hWXBackward compatibility and rþhcNhqNhrhhXjöubhâ)rÿ}r(hWX``custom-setup``rhg}r(hi]hj]hk]hl]ho]uhXjöhs]rh|X custom-setupr…r}r(hWUhXjÿubahehêubeubh€)r}r(hWX¨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.hXjïhchdheh„hg}r (hi]hj]hk]hl]ho]uhqMâ hrhhs]r (h|X/Versions prior to Cabal 1.24 don’t recognise r …r }r (hWX-Versions prior to Cabal 1.24 don't recognise hcNhqNhrhhXjubhâ)r}r(hWX``custom-setup``hg}r(hi]hj]hk]hl]ho]uhXjhs]rh|X custom-setupr…r}r(hWUhXjubahehêubh|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 r…r}r(hWX¬ 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 hcNhqNhrhhXjubhâ)r}r(hWX``setup-depends``hg}r(hi]hj]hk]hl]ho]uhXjhs]rh|X setup-dependsr…r}r(hWUhXjubahehêubh|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 r…r }r!(hWXš are in scope, and instead whatever is registered in the current package database environment will become eligible (and resolved by the compiler) for the hcNhqNhrhhXjubhâ)r"}r#(hWX ``Setup.hs``hg}r$(hi]hj]hk]hl]ho]uhXjhs]r%h|XSetup.hsr&…r'}r((hWUhXj"ubahehêubh|X module.r)…r*}r+(hWX module.hcNhqNhrhhXjubeubh€)r,}r-(hWXƒThe availability of the ``MIN_VERSION_package_(A,B,C)`` CPP macros inside ``Setup.hs`` scripts depends on the condition that eitherhXjïhchdheh„hg}r.(hi]hj]hk]hl]ho]uhqMê hrhhs]r/(h|XThe availability of the r0…r1}r2(hWXThe availability of the hcNhqNhrhhXj,ubhâ)r3}r4(hWX``MIN_VERSION_package_(A,B,C)``hg}r5(hi]hj]hk]hl]ho]uhXj,hs]r6h|XMIN_VERSION_package_(A,B,C)r7…r8}r9(hWUhXj3ubahehêubh|X CPP macros inside r:…r;}r<(hWX CPP macros inside hcNhqNhrhhXj,ubhâ)r=}r>(hWX ``Setup.hs``hg}r?(hi]hj]hk]hl]ho]uhXj,hs]r@h|XSetup.hsrA…rB}rC(hWUhXj=ubahehêubh|X- scripts depends on the condition that eitherrD…rE}rF(hWX- scripts depends on the condition that eitherhcNhqNhrhhXj,ubeubhŠ)rG}rH(hWUhXjïhchdhehhg}rI(hX-hl]hk]hi]hj]ho]uhqMî hrhhs]rJ(h‘)rK}rL(hWX¤a ``custom-setup`` section has been declared (or ``cabal new-build`` is being used which injects an implicit hard-coded ``custom-setup`` stanza if it's missing), orhXjGhchdheh”hg}rM(hi]hj]hk]hl]ho]uhqNhrhhs]rNh€)rO}rP(hWX¤a ``custom-setup`` section has been declared (or ``cabal new-build`` is being used which injects an implicit hard-coded ``custom-setup`` stanza if it's missing), orhXjKhchdheh„hg}rQ(hi]hj]hk]hl]ho]uhqMî hs]rR(h|Xa rS…rT}rU(hWXa hXjOubhâ)rV}rW(hWX``custom-setup``hg}rX(hi]hj]hk]hl]ho]uhXjOhs]rYh|X custom-setuprZ…r[}r\(hWUhXjVubahehêubh|X section has been declared (or r]…r^}r_(hWX section has been declared (or hXjOubhâ)r`}ra(hWX``cabal new-build``hg}rb(hi]hj]hk]hl]ho]uhXjOhs]rch|Xcabal new-buildrd…re}rf(hWUhXj`ubahehêubh|X4 is being used which injects an implicit hard-coded rg…rh}ri(hWX4 is being used which injects an implicit hard-coded hXjOubhâ)rj}rk(hWX``custom-setup``hg}rl(hi]hj]hk]hl]ho]uhXjOhs]rmh|X custom-setuprn…ro}rp(hWUhXjjubahehêubh|X stanza if it’s missing), orrq…rr}rs(hWX stanza if it's missing), orhXjOubeubaubh‘)rt}ru(hWXMGHC 8.0 or later is used (which natively injects package version CPP macros) hXjGhchdheh”hg}rv(hi]hj]hk]hl]ho]uhqNhrhhs]rwh€)rx}ry(hWXLGHC 8.0 or later is used (which natively injects package version CPP macros)rzhXjthchdheh„hg}r{(hi]hj]hk]hl]ho]uhqMð hs]r|h|XLGHC 8.0 or later is used (which natively injects package version CPP macros)r}…r~}r(hWjzhXjxubaubaubeubh€)r€}r(hWXž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:hXjïhchdheh„hg}r‚(hi]hj]hk]hl]ho]uhqMò hrhhs]rƒ(h|X7Consequently, if you need to write backward compatible r„…r…}r†(hWX7Consequently, if you need to write backward compatible hcNhqNhrhhXj€ubhâ)r‡}rˆ(hWX ``Setup.hs``hg}r‰(hi]hj]hk]hl]ho]uhXj€hs]rŠh|XSetup.hsr‹…rŒ}r(hWUhXj‡ubahehêubh|X) scripts using CPP, you should declare a rŽ…r}r(hWX) scripts using CPP, you should declare a hcNhqNhrhhXj€ubhâ)r‘}r’(hWX``custom-setup``hg}r“(hi]hj]hk]hl]ho]uhXj€hs]r”h|X custom-setupr•…r–}r—(hWUhXj‘ubahehêubh|X" stanza and use the pattern below:r˜…r™}rš(hWX" stanza and use the pattern below:hcNhqNhrhhXj€ubeubjÏ)r›}rœ(hWX¬{-# 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 = ...hXjïhchdhejÒhg}r(j‰jXhaskelljÔjÕhl]hk]hi]j}hj]ho]uhqMö hrhhs]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 = ...rŸ…r }r¡(hWUhXj›ubaubh€)r¢}r£(hWX…The simplified (heuristic) CPP pattern shown below is useful if all you need is to distinguish ``Cabal < 2.0`` from ``Cabal >= 2.0``.hXjïhchdheh„hg}r¤(hi]hj]hk]hl]ho]uhqM hrhhs]r¥(h|X_The simplified (heuristic) CPP pattern shown below is useful if all you need is to distinguish r¦…r§}r¨(hWX_The simplified (heuristic) CPP pattern shown below is useful if all you need is to distinguish hcNhqNhrhhXj¢ubhâ)r©}rª(hWX``Cabal < 2.0``hg}r«(hi]hj]hk]hl]ho]uhXj¢hs]r¬h|X Cabal < 2.0r­…r®}r¯(hWUhXj©ubahehêubh|X from r°…r±}r²(hWX from hcNhqNhrhhXj¢ubhâ)r³}r´(hWX``Cabal >= 2.0``hg}rµ(hi]hj]hk]hl]ho]uhXj¢hs]r¶h|X Cabal >= 2.0r·…r¸}r¹(hWUhXj³ubahehêubh|X.…rº}r»(hWX.hcNhqNhrhhXj¢ubeubjÏ)r¼}r½(hWXë{-# 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 = ...hXjïhchdhejÒhg}r¾(j‰jXhaskelljÔjÕhl]hk]hi]j}hj]ho]uhqM hrhhs]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 = ...rÀ…rÁ}rÂ(hWUhXj¼ubaubeubeubhY)rÃ}rÄ(hWUhXhahchdhehfhg}rÅ(hi]hj]hk]hl]rÆUautogenerated-modulesrÇaho]rÈhMauhqM$ hrhhs]rÉ(hu)rÊ}rË(hWXAutogenerated modulesrÌhXjÃhchdhehyhg}rÍ(hi]hj]hk]hl]ho]uhqM$ hrhhs]rÎh|XAutogenerated modulesrÏ…rÐ}rÑ(hWjÌhcNhqNhrhhXjÊubaubh€)rÒ}rÓ(hWXzModules 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.hXjÃhchdheh„hg}rÔ(hi]hj]hk]hl]ho]uhqM& hrhhs]rÕ(h|XbModules that are built automatically at setup, created with a custom setup script, must appear on rÖ…r×}rØ(hWXbModules that are built automatically at setup, created with a custom setup script, must appear on hcNhqNhrhhXjÒubjn)rÙ}rÚ(hWX:pkg-field:`other-modules`rÛhXjÒhchdhejrhg}rÜ(UreftypeX pkg-fieldjtˆjuX other-modulesU refdomainXcabalrÝhl]hk]U refexplicit‰hi]hj]ho]jwjxjŽjuhqM& hs]rÞhâ)rß}rà(hWjÛhg}rá(hi]hj]râ(jjÝXcabal-pkg-fieldrãehk]hl]ho]uhXjÙhs]räh|X other-modulesrå…ræ}rç(hWUhXjßubahehêubaubh|XI for the library, executable, test-suite or benchmark stanzas or also on rè…ré}rê(hWXI for the library, executable, test-suite or benchmark stanzas or also on hcNhqNhrhhXjÒubjn)rë}rì(hWX$:pkg-field:`library:exposed-modules`ríhXjÒhchdhejrhg}rî(UreftypeX pkg-fieldjtˆjuXexposed-modulesU refdomainXcabalrïhl]hk]U refexplicit‰hi]hj]ho]jwjxjŽXlibraryuhqM& hs]rðhâ)rñ}rò(hWjíhg}ró(hi]hj]rô(jjïXcabal-pkg-fieldrõehk]hl]ho]uhXjëhs]röh|Xlibrary:exposed-modulesr÷…rø}rù(hWUhXjñubahehêubaubh|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.rú…rû}rü(hWX‘ 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.hcNhqNhrhhXjÒubeubh€)rý}rþ(hWXThese 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.hXjÃhchdheh„hg}rÿ(hi]hj]hk]hl]ho]uhqM- hrhhs]r(h|X/These special modules must appear again on the r…r}r(hWX/These special modules must appear again on the hcNhqNhrhhXjýubjn)r}r(hWX:pkg-field:`autogen-modules`rhXjýhchdhejrhg}r(UreftypeX pkg-fieldjtˆjuXautogen-modulesU refdomainXcabalrhl]hk]U refexplicit‰hi]hj]ho]jwjxjŽjuhqM- hs]r hâ)r }r (hWjhg}r (hi]hj]r (jjXcabal-pkg-fieldrehk]hl]ho]uhXjhs]rh|Xautogen-modulesr…r}r(hWUhXj ubahehêubaubh|X/ field of the stanza that is using it, besides r…r}r(hWX/ field of the stanza that is using it, besides hcNhqNhrhhXjýubjn)r}r(hWX:pkg-field:`other-modules`rhXjýhchdhejrhg}r(UreftypeX pkg-fieldjtˆjuX other-modulesU refdomainXcabalrhl]hk]U refexplicit‰hi]hj]ho]jwjxjŽjuhqM- hs]rhâ)r}r(hWjhg}r(hi]hj]r(jjXcabal-pkg-fieldr ehk]hl]ho]uhXjhs]r!h|X other-modulesr"…r#}r$(hWUhXjubahehêubaubh|X or r%…r&}r'(hWX or hcNhqNhrhhXjýubjn)r(}r)(hWX$:pkg-field:`library:exposed-modules`r*hXjýhchdhejrhg}r+(UreftypeX pkg-fieldjtˆjuXexposed-modulesU refdomainXcabalr,hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽXlibraryuhqM- hs]r-hâ)r.}r/(hWj*hg}r0(hi]hj]r1(jj,Xcabal-pkg-fieldr2ehk]hl]ho]uhXj(hs]r3h|Xlibrary:exposed-modulesr4…r5}r6(hWUhXj.ubahehêubaubh|XS. With this there is no need to create complex build hooks for this poweruser case.r7…r8}r9(hWXS. With this there is no need to create complex build hooks for this poweruser case.hcNhqNhrhhXjýubeubjü)r:}r;(hWUhXjÃhcNhejÿhg}r<(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r=}r>(hWUhXjÃhcNhejhg}r?(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr@j j@uhqNhrhhs]rA(j )rB}rC(hWXautogen-modules: module listhXj=hchdhejhg}rD(hl]rEX&pkg-field-custom-setup-autogen-modulesrFahk]hi]hj]ho]j‰uhqNhrhhs]rG(jü)rH}rI(hWUhXjBhchdhejÿhg}rJ(hl]hk]hi]hj]ho]Uentries]rK(jX1custom-setup:autogen-modules; package.cabal fieldjFUNtrLauhqNhrhhs]ubj)rM}rN(hWXautogen-modulesrOhXjBhchdhejhg}rP(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]rQh|Xautogen-modulesrR…rS}rT(hWUhcNhqNhrhhXjMubaubj%)rU}rV(hWjžhXjBhchdhej(hg}rW(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]rXh|X: rY…rZ}r[(hWUhcNhqNhrhhXjUubaubj¤)r\}r](hWX module listhXjBhchdhej§hg}r^(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]r_h|X module listr`…ra}rb(hWUhcNhqNhrhhXj\ubaubeubj-)rc}rd(hWUhXj=hchdhej0hg}re(hi]hj]hk]hl]ho]uhqNhrhhs]rf(j3)rg}rh(hWUhXjchcNhej6hg}ri(hi]hj]hk]hl]ho]uhqNhrhhs]rjj9)rk}rl(hWUhXjghcNhej<hg}rm(hi]hj]hk]hl]ho]uhqNhrhhs]rn(j?)ro}rp(hWjBhXjkhchdhejChg}rq(hi]hj]hk]hl]ho]uhqKhs]rrh|XSincers…rt}ru(hWUhXjoubaubjI)rv}rw(hWU Cabal 2.0rxhg}ry(hi]hj]hk]hl]ho]uhXjkhs]rzh€)r{}r|(hWjxhg}r}(hi]hj]hk]hl]ho]uhXjvhs]r~h|X Cabal 2.0r…r€}r(hWUhXj{ubaheh„ubahejVubeubaubcdocutils.nodes comment r‚)rƒ}r„(hWX$TODO: document autogen-modules fieldhXjchchdheUcommentr…hg}r†(jÔjÕhl]hk]hi]hj]ho]uhqM5 hrhhs]r‡h|X$TODO: document autogen-modules fieldrˆ…r‰}rŠ(hWUhXjƒubaubeubeubh€)r‹}rŒ(hWXdRight now :pkg-field:`executable:main-is` modules are not supported on :pkg-field:`autogen-modules`.hXjÃhchdheh„hg}r(hi]hj]hk]hl]ho]uhqM7 hrhhs]rŽ(h|X Right now r…r}r‘(hWX Right now hcNhqNhrhhXj‹ubjn)r’}r“(hWX:pkg-field:`executable:main-is`r”hXj‹hchdhejrhg}r•(UreftypeX pkg-fieldjtˆjuXmain-isU refdomainXcabalr–hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽX executableuhqM7 hs]r—hâ)r˜}r™(hWj”hg}rš(hi]hj]r›(jj–Xcabal-pkg-fieldrœehk]hl]ho]uhXj’hs]rh|Xexecutable:main-isrž…rŸ}r (hWUhXj˜ubahehêubaubh|X modules are not supported on r¡…r¢}r£(hWX modules are not supported on hcNhqNhrhhXj‹ubjn)r¤}r¥(hWX:pkg-field:`autogen-modules`r¦hXj‹hchdhejrhg}r§(UreftypeX pkg-fieldjtˆjuXautogen-modulesU refdomainXcabalr¨hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽjuhqM7 hs]r©hâ)rª}r«(hWj¦hg}r¬(hi]hj]r­(jj¨Xcabal-pkg-fieldr®ehk]hl]ho]uhXj¤hs]r¯h|Xautogen-modulesr°…r±}r²(hWUhXjªubahehêubaubh|X.…r³}r´(hWX.hcNhqNhrhhXj‹ubeubjÏ)rµ}r¶(hWX¨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: MyExeHelperModulehXjÃhchdhejÒhg}r·(jÔjÕhl]hk]hi]hj]ho]uhqM< hrhhs]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: MyExeHelperModuler¹…rº}r»(hWUhXjµubaubeubhY)r¼}r½(hWUhXhahchdhehfhg}r¾(hi]hj]hk]hl]r¿U&accessing-data-files-from-package-coderÀaho]rÁhauhqMR hrhhs]rÂ(hu)rÃ}rÄ(hWX&Accessing data files from package coderÅhXj¼hchdhehyhg}rÆ(hi]hj]hk]hl]ho]uhqMR hrhhs]rÇh|X&Accessing data files from package coderÈ…rÉ}rÊ(hWjÅhcNhqNhrhhXjÃubaubh€)rË}rÌ(hWXThe 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 functionhXj¼hchdheh„hg}rÍ(hi]hj]hk]hl]ho]uhqMT hrhhs]rÎ(h|X:The placement on the target system of files listed in the rÏ…rÐ}rÑ(hWX:The placement on the target system of files listed in the hcNhqNhrhhXjËubjn)rÒ}rÓ(hWX:pkg-field:`data-files`rÔhXjËhchdhejrhg}rÕ(UreftypeX pkg-fieldjtˆjuX data-filesU refdomainXcabalrÖhl]hk]U refexplicit‰hi]hj]ho]jwjxjŽjuhqMT hs]r×hâ)rØ}rÙ(hWjÔhg}rÚ(hi]hj]rÛ(jjÖXcabal-pkg-fieldrÜehk]hl]ho]uhXjÒhs]rÝh|X data-filesrÞ…rß}rà(hWUhXjØubahehêubaubh|Xk field varies between systems, and in some cases one can even move packages around after installation (see rá…râ}rã(hWXk field varies between systems, and in some cases one can even move packages around after installation (see hcNhqNhrhhXjËubjB)rä}rå(hWXF`prefix independence `__hg}ræ(UnameXprefix independencejX,installing-packages.html#prefix-independencehl]hk]hi]hj]ho]uhXjËhs]rçh|Xprefix independencerè…ré}rê(hWUhXjäubahejFubh|X]). To enable packages to find these files in a portable way, Cabal generates a module called rë…rì}rí(hWX]). To enable packages to find these files in a portable way, Cabal generates a module called hcNhqNhrhhXjËubhâ)rî}rï(hWX Paths_pkgnamehg}rð(hl]hk]hi]hj]rñXfileròaUrolejòho]uhXjËhs]ró(h|XPaths_rô…rõ}rö(hWXPaths_hXjîubhÂ)r÷}rø(hWXpkgnamehg}rù(hi]hj]hk]hl]ho]uhXjîhs]rúh|Xpkgnamerû…rü}rý(hWUhXj÷ubahehÊubehehêubh|X (with any hyphens in rþ…rÿ}r(hWX (with any hyphens in hcNhqNhrhhXjËubhÂ)r}r(hWX *pkgname*hg}r(hi]hj]hk]hl]ho]uhXjËhs]rh|Xpkgnamer…r}r(hWUhXjubahehÊubh|X replaced by underscores) during building, so that it may be imported by modules of the package. This module defines a functionr…r }r (hWX replaced by underscores) during building, so that it may be imported by modules of the package. This module defines a functionhcNhqNhrhhXjËubeubjÏ)r }r (hWX*getDataFileName :: FilePath -> IO FilePathhXj¼hchdhejÒhg}r (j‰jXhaskelljÔjÕhl]hk]hi]j}hj]ho]uhqM] hrhhs]rh|X*getDataFileName :: FilePath -> IO FilePathr…r}r(hWUhXj ubaubh€)r}r(hWXª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.hXj¼hchdheh„hg}r(hi]hj]hk]hl]ho]uhqMa hrhhs]r(h|X,If the argument is a filename listed in the r…r}r(hWX,If the argument is a filename listed in the hcNhqNhrhhXjubjn)r}r(hWX:pkg-field:`data-files`rhXjhchdhejrhg}r(UreftypeX pkg-fieldjtˆjuX data-filesU refdomainXcabalrhl]hk]U refexplicit‰hi]hj]ho]jwjxjŽjuhqMa hs]rhâ)r}r (hWjhg}r!(hi]hj]r"(jjXcabal-pkg-fieldr#ehk]hl]ho]uhXjhs]r$h|X data-filesr%…r&}r'(hWUhXjubahehêubaubh|Xg field, the result is the name of the corresponding file on the system on which the program is running.r(…r)}r*(hWXg field, the result is the name of the corresponding file on the system on which the program is running.hcNhqNhrhhXjubeubhî)r+}r,(hWXè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.hXj¼hchdhehñhg}r-(hi]hj]hk]hl]ho]uhqNhrhhs]r.h€)r/}r0(hWXè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.hXj+hchdheh„hg}r1(hi]hj]hk]hl]ho]uhqMg hs]r2(h|XIf you decide to import the r3…r4}r5(hWXIf you decide to import the hXj/ubhâ)r6}r7(hWX Paths_pkgnamehg}r8(hl]hk]hi]hj]r9Xfiler:aUrolej:ho]uhXj/hs]r;(h|XPaths_r<…r=}r>(hWXPaths_hXj6ubhÂ)r?}r@(hWXpkgnamehg}rA(hi]hj]hk]hl]ho]uhXj6hs]rBh|XpkgnamerC…rD}rE(hWUhXj?ubahehÊubehehêubh|X module then it rF…rG}rH(hWX module then it hXj/ubhÂ)rI}rJ(hWX*must*hg}rK(hi]hj]hk]hl]ho]uhXj/hs]rLh|XmustrM…rN}rO(hWUhXjIubahehÊubh|X be listed in the rP…rQ}rR(hWX be listed in the hXj/ubjn)rS}rT(hWX:pkg-field:`other-modules`rUhXj/hchdhejrhg}rV(UreftypeX pkg-fieldjtˆjuX other-modulesU refdomainXcabalrWhl]hk]U refexplicit‰hi]hj]ho]jwjxjŽjuhqMg hs]rXhâ)rY}rZ(hWjUhg}r[(hi]hj]r\(jjWXcabal-pkg-fieldr]ehk]hl]ho]uhXjShs]r^h|X other-modulesr_…r`}ra(hWUhXjYubahehêubaubh|X9 field just like any other module in your package and on rb…rc}rd(hWX9 field just like any other module in your package and on hXj/ubjn)re}rf(hWX:pkg-field:`autogen-modules`rghXj/hchdhejrhg}rh(UreftypeX pkg-fieldjtˆjuXautogen-modulesU refdomainXcabalrihl]hk]U refexplicit‰hi]hj]ho]jwjxjŽjuhqMg hs]rjhâ)rk}rl(hWjghg}rm(hi]hj]rn(jjiXcabal-pkg-fieldroehk]hl]ho]uhXjehs]rph|Xautogen-modulesrq…rr}rs(hWUhXjkubahehêubaubh|X as the file is autogenerated.rt…ru}rv(hWX as the file is autogenerated.hXj/ubeubaubh€)rw}rx(hWX­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``.hXj¼hchdheh„hg}ry(hi]hj]hk]hl]ho]uhqMl hrhhs]rz(h|XThe r{…r|}r}(hWXThe hcNhqNhrhhXjwubhâ)r~}r(hWX Paths_pkgnamehg}r€(hl]hk]hi]hj]rXfiler‚aUrolej‚ho]uhXjwhs]rƒ(h|XPaths_r„…r…}r†(hWXPaths_hXj~ubhÂ)r‡}rˆ(hWXpkgnamehg}r‰(hi]hj]hk]hl]ho]uhXj~hs]rŠh|Xpkgnamer‹…rŒ}r(hWUhXj‡ubahehÊubehehêubh|Xˆ module is not platform independent, as any other autogenerated module, so it does not get included in the source tarballs generated by rŽ…r}r(hWXˆ module is not platform independent, as any other autogenerated module, so it does not get included in the source tarballs generated by hcNhqNhrhhXjwubhâ)r‘}r’(hWX ``sdist``hg}r“(hi]hj]hk]hl]ho]uhXjwhs]r”h|Xsdistr•…r–}r—(hWUhXj‘ubahehêubh|X.…r˜}r™(hWX.hcNhqNhrhhXjwubeubh€)rš}r›(hWXThe :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``):hXj¼hchdheh„hg}rœ(hi]hj]hk]hl]ho]uhqMp hrhhs]r(h|XThe rž…rŸ}r (hWXThe hcNhqNhrhhXjšubhâ)r¡}r¢(hWX Paths_pkgnamehg}r£(hl]hk]hi]hj]r¤Xfiler¥aUrolej¥ho]uhXjšhs]r¦(h|XPaths_r§…r¨}r©(hWXPaths_hXj¡ubhÂ)rª}r«(hWXpkgnamehg}r¬(hi]hj]hk]hl]ho]uhXj¡hs]r­h|Xpkgnamer®…r¯}r°(hWUhXjªubahehÊubehehêubh|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 r±…r²}r³(hWXÕ 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 hcNhqNhrhhXjšubhâ)r´}rµ(hWX``getDataDir``hg}r¶(hi]hj]hk]hl]ho]uhXjšhs]r·h|X getDataDirr¸…r¹}rº(hWUhXj´ubahehêubh|X):r»…r¼}r½(hWX):hcNhqNhrhhXjšubeubjÏ)r¾}r¿(hWXµversion :: Version getBinDir :: IO FilePath getLibDir :: IO FilePath getDynLibDir :: IO FilePath getDataDir :: IO FilePath getLibexecDir :: IO FilePath getSysconfDir :: IO FilePathhXj¼hchdhejÒhg}rÀ(j‰jXhaskelljÔjÕhl]hk]hi]j}hj]ho]uhqMu hrhhs]rÁh|Xµversion :: Version getBinDir :: IO FilePath getLibDir :: IO FilePath getDynLibDir :: IO FilePath getDataDir :: IO FilePath getLibexecDir :: IO FilePath getSysconfDir :: IO FilePathrÂ…rÃ}rÄ(hWUhXj¾ubaubh€)rÅ}rÆ(hWXÚ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.hXj¼hchdheh„hg}rÇ(hi]hj]hk]hl]ho]uhqM€ hrhhs]rÈ(h|XThe actual location of all these directories can be individually overridden at runtime using environment variables of the form rÉ…rÊ}rË(hWXThe actual location of all these directories can be individually overridden at runtime using environment variables of the form hcNhqNhrhhXjÅubhâ)rÌ}rÍ(hWX``pkg_name_var``hg}rÎ(hi]hj]hk]hl]ho]uhXjÅhs]rÏh|X pkg_name_varrÐ…rÑ}rÒ(hWUhXjÌubahehêubh|X, where rÓ…rÔ}rÕ(hWX, where hcNhqNhrhhXjÅubhâ)rÖ}r×(hWX ``pkg_name``hg}rØ(hi]hj]hk]hl]ho]uhXjÅhs]rÙh|Xpkg_namerÚ…rÛ}rÜ(hWUhXjÖubahehêubh|XM is the name of the package with all hyphens converted into underscores, and rÝ…rÞ}rß(hWXM is the name of the package with all hyphens converted into underscores, and hcNhqNhrhhXjÅubhâ)rà}rá(hWX``var``hg}râ(hi]hj]hk]hl]ho]uhXjÅhs]rãh|Xvarrä…rå}ræ(hWUhXjàubahehêubh|X is either rç…rè}ré(hWX is either hcNhqNhrhhXjÅubhâ)rê}rë(hWX ``bindir``hg}rì(hi]hj]hk]hl]ho]uhXjÅhs]ríh|Xbindirrî…rï}rð(hWUhXjêubahehêubh|X, rñ…rò}ró(hWX, hcNhqNhrhhXjÅubhâ)rô}rõ(hWX ``libdir``hg}rö(hi]hj]hk]hl]ho]uhXjÅhs]r÷h|Xlibdirrø…rù}rú(hWUhXjôubahehêubh|X, rû…rü}rý(hWX, rþhcNhqNhrhhXjÅubhâ)rÿ}r(hWX ``dynlibdir``hg}r(hi]hj]hk]hl]ho]uhXjÅhs]rh|X dynlibdirr…r}r(hWUhXjÿubahehêubh|X, r…r}r(hWX, hXjÅubhâ)r }r (hWX ``datadir``hg}r (hi]hj]hk]hl]ho]uhXjÅhs]r h|Xdatadirr …r}r(hWUhXj ubahehêubh|X, r…r}r(hWjþhXjÅubhâ)r}r(hWX ``libexedir``hg}r(hi]hj]hk]hl]ho]uhXjÅhs]rh|X libexedirr…r}r(hWUhXjubahehêubh|X or r…r}r(hWX or hcNhqNhrhhXjÅubhâ)r}r(hWX``sysconfdir``hg}r(hi]hj]hk]hl]ho]uhXjÅhs]r h|X sysconfdirr!…r"}r#(hWUhXjubahehêubh|X1. For example, the configured data directory for r$…r%}r&(hWX1. For example, the configured data directory for hcNhqNhrhhXjÅubhâ)r'}r((hWX``pretty-show``hg}r)(hi]hj]hk]hl]ho]uhXjÅhs]r*h|X pretty-showr+…r,}r-(hWUhXj'ubahehêubh|X is controlled with the r.…r/}r0(hWX is controlled with the hcNhqNhrhhXjÅubhâ)r1}r2(hWX``pretty_show_datadir``hg}r3(hi]hj]hk]hl]ho]uhXjÅhs]r4h|Xpretty_show_datadirr5…r6}r7(hWUhXj1ubahehêubh|X environment variable.r8…r9}r:(hWX environment variable.hcNhqNhrhhXjÅubeubhY)r;}r<(hWUhXj¼hchdhehfhg}r=(hi]hj]hk]hl]r>Uaccessing-the-package-versionr?aho]r@h#auhqM‰ hrhhs]rA(hu)rB}rC(hWXAccessing the package versionrDhXj;hchdhehyhg}rE(hi]hj]hk]hl]ho]uhqM‰ hrhhs]rFh|XAccessing the package versionrG…rH}rI(hWjDhcNhqNhrhhXjBubaubh€)rJ}rK(hWX 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.hXj;hchdheh„hg}rL(hi]hj]hk]hl]ho]uhqM‹ hrhhs]rM(h|X"The aforementioned auto generated rN…rO}rP(hWX"The aforementioned auto generated hcNhqNhrhhXjJubhâ)rQ}rR(hWX Paths_pkgnamehg}rS(hl]hk]hi]hj]rTXfilerUaUrolejUho]uhXjJhs]rV(h|XPaths_rW…rX}rY(hWXPaths_hXjQubhÂ)rZ}r[(hWXpkgnamehg}r\(hi]hj]hk]hl]ho]uhXjQhs]r]h|Xpkgnamer^…r_}r`(hWUhXjZubahehÊubehehêubh|X" module also exports the constant ra…rb}rc(hWX" module also exports the constant hcNhqNhrhhXjJubhâ)rd}re(hWX``version ::``hg}rf(hi]hj]hk]hl]ho]uhXjJhs]rgh|X version ::rh…ri}rj(hWUhXjdubahehêubh|X …rk}rl(hWX hcNhqNhrhhXjJubjB)rm}rn(hWXL`Version `__hg}ro(UnameXVersionjX>http://hackage.haskell.org/package/base/docs/Data-Version.htmlhl]hk]hi]hj]ho]uhXjJhs]rph|XVersionrq…rr}rs(hWUhXjmubahejFubh|XE which is defined as the version of your package as specified in the rt…ru}rv(hWXE which is defined as the version of your package as specified in the hcNhqNhrhhXjJubhâ)rw}rx(hWX ``version``hg}ry(hi]hj]hk]hl]ho]uhXjJhs]rzh|Xversionr{…r|}r}(hWUhXjwubahehêubh|X field.r~…r}r€(hWX field.hcNhqNhrhhXjJubeubeubeubhY)r}r‚(hWUh\KhXhahchdhehfhg}rƒ(hi]hj]hk]hl]r„j“aho]r…hauhqM’ hrhhs]r†(hu)r‡}rˆ(hWXSystem-dependent parametersr‰hXjhchdhehyhg}rŠ(hi]hj]hk]hl]ho]uhqM’ hrhhs]r‹h|XSystem-dependent parametersrŒ…r}rŽ(hWj‰hcNhqNhrhhXj‡ubaubh€)r}r(hWXFor 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:hXjhchdheh„hg}r‘(hi]hj]hk]hl]ho]uhqM” hrhhs]r’(h|X–For some packages, especially those interfacing with C libraries, implementation details and the build procedure depend on the build environment. The r“…r”}r•(hWX–For some packages, especially those interfacing with C libraries, implementation details and the build procedure depend on the build environment. The hcNhqNhrhhXjubhâ)r–}r—(hWX``build-type``hg}r˜(hi]hj]hk]hl]ho]uhXjhs]r™h|X build-typerš…r›}rœ(hWUhXj–ubahehêubh|X …r}rž(hWX hcNhqNhrhhXjubhâ)rŸ}r (hWX ``Configure``hg}r¡(hi]hj]hk]hl]ho]uhXjhs]r¢h|X Configurer£…r¤}r¥(hWUhXjŸubahehêubh|X; can be used to handle many such situations. In this case, r¦…r§}r¨(hWX; can be used to handle many such situations. In this case, hcNhqNhrhhXjubhâ)r©}rª(hWX ``Setup.hs``hg}r«(hi]hj]hk]hl]ho]uhXjhs]r¬h|XSetup.hsr­…r®}r¯(hWUhXj©ubahehêubh|X should be:r°…r±}r²(hWX should be:hcNhqNhrhhXjubeubjÏ)r³}r´(hWXHimport Distribution.Simple main = defaultMainWithHooks autoconfUserHookshXjhchdhejÒhg}rµ(j‰jXhaskelljÔjÕhl]hk]hi]j}hj]ho]uhqM™ hrhhs]r¶h|XHimport Distribution.Simple main = defaultMainWithHooks autoconfUserHooksr·…r¸}r¹(hWUhXj³ubaubh€)rº}r»(hWXgMost packages, however, would probably do better using the ``Simple`` build type and `configurations`_.hXjhchdheh„hg}r¼(hi]hj]hk]hl]ho]uhqMž hrhhs]r½(h|X;Most packages, however, would probably do better using the r¾…r¿}rÀ(hWX;Most packages, however, would probably do better using the hcNhqNhrhhXjºubhâ)rÁ}rÂ(hWX ``Simple``hg}rÃ(hi]hj]hk]hl]ho]uhXjºhs]rÄh|XSimplerÅ…rÆ}rÇ(hWUhXjÁubahehêubh|X build type and rÈ…rÉ}rÊ(hWX build type and hcNhqNhrhhXjºubjB)rË}rÌ(hWX`configurations`_jEKhXjºhejFhg}rÍ(UnameXconfigurationshl]hk]hi]hj]ho]jHUconfigurationsrÎuhs]rÏh|XconfigurationsrÐ…rÑ}rÒ(hWUhXjËubaubh|X.…rÓ}rÔ(hWX.hcNhqNhrhhXjºubeubh€)rÕ}rÖ(hWXNThe :pkg-field:`build-type` ``Configure`` differs from ``Simple`` in two ways:r×hXjhchdheh„hg}rØ(hi]hj]hk]hl]ho]uhqM¡ hrhhs]rÙ(h|XThe rÚ…rÛ}rÜ(hWXThe hcNhqNhrhhXjÕubjn)rÝ}rÞ(hWX:pkg-field:`build-type`rßhXjÕhchdhejrhg}rà(UreftypeX pkg-fieldjtˆjuX build-typeU refdomainXcabalráhl]hk]U refexplicit‰hi]hj]ho]jwjxjŽjuhqM¡ hs]râhâ)rã}rä(hWjßhg}rå(hi]hj]ræ(jjáXcabal-pkg-fieldrçehk]hl]ho]uhXjÝhs]rèh|X build-typeré…rê}rë(hWUhXjãubahehêubaubh|X …rì}rí(hWX hcNhqNhrhhXjÕubhâ)rî}rï(hWX ``Configure``hg}rð(hi]hj]hk]hl]ho]uhXjÕhs]rñh|X Configurerò…ró}rô(hWUhXjîubahehêubh|X differs from rõ…rö}r÷(hWX differs from hcNhqNhrhhXjÕubhâ)rø}rù(hWX ``Simple``hg}rú(hi]hj]hk]hl]ho]uhXjÕhs]rûh|XSimplerü…rý}rþ(hWUhXjøubahehêubh|X in two ways:rÿ…r}r(hWX in two ways:hcNhqNhrhhXjÕubeubhŠ)r}r(hWUhXjhchdhehhg}r(hX-hl]hk]hi]hj]ho]uhqM£ hrhhs]r(h‘)r}r(hWX'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.) hXjhchdheh”hg}r(hi]hj]hk]hl]ho]uhqNhrhhs]r h€)r }r (hWX&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.)hXjhchdheh„hg}r (hi]hj]hk]hl]ho]uhqM£ hs]r (h|X>The package root directory must contain a shell script called r…r}r(hWX>The package root directory must contain a shell script called hXj ubhâ)r}r(hWX ``configure``hg}r(hi]hj]hk]hl]ho]uhXj hs]rh|X configurer…r}r(hWUhXjubahehêubh|X/. The configure step will run the script. This r…r}r(hWX/. The configure step will run the script. This hXj ubhâ)r}r(hWX ``configure``hg}r(hi]hj]hk]hl]ho]uhXj hs]rh|X configurer…r }r!(hWUhXjubahehêubh|X script may be produced by r"…r#}r$(hWX script may be produced by hXj ubjB)r%}r&(hWX4`autoconf `__hg}r'(UnameXautoconfjX%http://www.gnu.org/software/autoconf/hl]hk]hi]hj]ho]uhXj hs]r(h|Xautoconfr)…r*}r+(hWUhXj%ubahejFubh|X or may be hand-written. The r,…r-}r.(hWX or may be hand-written. The hXj ubhâ)r/}r0(hWX ``configure``hg}r1(hi]hj]hk]hl]ho]uhXj hs]r2h|X configurer3…r4}r5(hWUhXj/ubahehêubh|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.)r6…r7}r8(hWX& 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.)hXj ubeubaubh‘)r9}r:(hWXIf 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. hXjhchdheh”hg}r;(hi]hj]hk]hl]ho]uhqNhrhhs]r<h€)r=}r>(hWXœ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.hXj9hchdheh„hg}r?(hi]hj]hk]hl]ho]uhqM­ hs]r@(h|X5If the package root directory contains a file called rA…rB}rC(hWX5If the package root directory contains a file called hXj=ubhÂ)rD}rE(hWX *package*hg}rF(hi]hj]hk]hl]ho]uhXj=hs]rGh|XpackagerH…rI}rJ(hWUhXjDubahehÊubh|X…rK}rL(hWX\ hXj=ubhâ)rM}rN(hWX``.buildinfo``hg}rO(hi]hj]hk]hl]ho]uhXj=hs]rPh|X .buildinforQ…rR}rS(hWUhXjMubahehêubh|X_ after the configuration step, subsequent steps will read it to obtain additional settings for rT…rU}rV(hWX_ after the configuration step, subsequent steps will read it to obtain additional settings for hXj=ubjB)rW}rX(hWX`build information`_jEKhXj=hejFhg}rY(UnameXbuild informationhl]hk]hi]hj]ho]jHUbuild-informationrZuhs]r[h|Xbuild informationr\…r]}r^(hWUhXjWubaubh|X0 fields,to be merged with the ones given in the r_…r`}ra(hWX0 fields,to be merged with the ones given in the hXj=ubhâ)rb}rc(hWX ``.cabal``hg}rd(hi]hj]hk]hl]ho]uhXj=hs]reh|X.cabalrf…rg}rh(hWUhXjbubahehêubh|X8 file. In particular, this file may be generated by the ri…rj}rk(hWX8 file. In particular, this file may be generated by the hXj=ubhâ)rl}rm(hWX ``configure``hg}rn(hi]hj]hk]hl]ho]uhXj=hs]roh|X configurerp…rq}rr(hWUhXjlubahehêubh|X\ script mentioned above, allowing these settings to vary depending on the build environment.rs…rt}ru(hWX\ script mentioned above, allowing these settings to vary depending on the build environment.hXj=ubeubaubeubh€)rv}rw(hWX?The build information file should have the following structure:rxhXjhchdheh„hg}ry(hi]hj]hk]hl]ho]uhqMµ hrhhs]rzh|X?The build information file should have the following structure:r{…r|}r}(hWjxhcNhqNhrhhXjvubaubcdocutils.nodes block_quote r~)r}r€(hWUhXjhchdheU block_quoterhg}r‚(hi]hj]hk]hl]ho]uhqNhrhhs]rƒ(h€)r„}r…(hWX *buildinfo*r†hXjhchdheh„hg}r‡(hi]hj]hk]hl]ho]uhqM· hs]rˆhÂ)r‰}rŠ(hWj†hg}r‹(hi]hj]hk]hl]ho]uhXj„hs]rŒh|X buildinfor…rŽ}r(hWUhXj‰ubahehÊubaubh€)r}r‘(hWX"``executable:`` *name* *buildinfo*hXjhchdheh„hg}r’(hi]hj]hk]hl]ho]uhqM¹ hs]r“(hâ)r”}r•(hWX``executable:``hg}r–(hi]hj]hk]hl]ho]uhXjhs]r—h|X executable:r˜…r™}rš(hWUhXj”ubahehêubh|X …r›}rœ(hWX hXjubhÂ)r}rž(hWX*name*hg}rŸ(hi]hj]hk]hl]ho]uhXjhs]r h|Xnamer¡…r¢}r£(hWUhXjubahehÊubh|X …r¤}r¥(hWX hXjubhÂ)r¦}r§(hWX *buildinfo*hg}r¨(hi]hj]hk]hl]ho]uhXjhs]r©h|X buildinforª…r«}r¬(hWUhXj¦ubahehÊubeubh€)r­}r®(hWX&``executable:`` *name* *buildinfo* ...hXjhchdheh„hg}r¯(hi]hj]hk]hl]ho]uhqM» hs]r°(hâ)r±}r²(hWX``executable:``hg}r³(hi]hj]hk]hl]ho]uhXj­hs]r´h|X executable:rµ…r¶}r·(hWUhXj±ubahehêubh|X …r¸}r¹(hWX hXj­ubhÂ)rº}r»(hWX*name*hg}r¼(hi]hj]hk]hl]ho]uhXj­hs]r½h|Xnamer¾…r¿}rÀ(hWUhXjºubahehÊubh|X …rÁ}rÂ(hWX hXj­ubhÂ)rÃ}rÄ(hWX *buildinfo*hg}rÅ(hi]hj]hk]hl]ho]uhXj­hs]rÆh|X buildinforÇ…rÈ}rÉ(hWUhXjÃubahehÊubh|X …rÊ…rË}rÌ(hWX ...hXj­ubeubeubh€)rÍ}rÎ(hWX4where 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.)hXjhchdheh„hg}rÏ(hi]hj]hk]hl]ho]uhqM½ hrhhs]rÐ(h|X where each rÑ…rÒ}rÓ(hWX where each hcNhqNhrhhXjÍubhÂ)rÔ}rÕ(hWX *buildinfo*hg}rÖ(hi]hj]hk]hl]ho]uhXjÍhs]r×h|X buildinforØ…rÙ}rÚ(hWUhXjÔubahehÊubh|X9 consists of settings of fields listed in the section on rÛ…rÜ}rÝ(hWX9 consists of settings of fields listed in the section on hcNhqNhrhhXjÍubjB)rÞ}rß(hWX`build information`_jEKhXjÍhejFhg}rà(UnameXbuild informationhl]hk]hi]hj]ho]jHjZuhs]ráh|Xbuild informationrâ…rã}rä(hWUhXjÞubaubh|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.)rå…ræ}rç(hWXÑ. 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.)hcNhqNhrhhXjÍubeubh€)rè}ré(hWXkNeither of these files is required. If they are absent, this setup script is equivalent to ``defaultMain``.hXjhchdheh„hg}rê(hi]hj]hk]hl]ho]uhqMà hrhhs]rë(h|X[Neither of these files is required. If they are absent, this setup script is equivalent to rì…rí}rî(hWX[Neither of these files is required. If they are absent, this setup script is equivalent to hcNhqNhrhhXjèubhâ)rï}rð(hWX``defaultMain``hg}rñ(hi]hj]hk]hl]ho]uhXjèhs]ròh|X defaultMainró…rô}rõ(hWUhXjïubahehêubh|X.…rö}r÷(hWX.hcNhqNhrhhXjèubeubhY)rø}rù(hWUhXjhchdhehfhg}rú(hi]hj]hk]hl]rûUexample-using-autoconfrüaho]rýh6auhqMÇ hrhhs]rþ(hu)rÿ}r (hWXExample: Using autoconfr hXjøhchdhehyhg}r (hi]hj]hk]hl]ho]uhqMÇ hrhhs]r h|XExample: Using autoconfr …r }r (hWj hcNhqNhrhhXjÿubaubh€)r }r (hWXhThis example is for people familiar with the `autoconf `__ tools.hXjøhchdheh„hg}r (hi]hj]hk]hl]ho]uhqMÉ hrhhs]r (h|X-This example is for people familiar with the r …r }r (hWX-This example is for people familiar with the hcNhqNhrhhXj ubjB)r }r (hWX4`autoconf `__hg}r (UnameXautoconfjX%http://www.gnu.org/software/autoconf/hl]hk]hi]hj]ho]uhXj hs]r h|Xautoconfr …r }r (hWUhXj ubahejFubh|X tools.r …r }r (hWX tools.hcNhqNhrhhXj ubeubh€)r }r (hWX7In the X11 package, the file ``configure.ac`` contains:r hXjøhchdheh„hg}r (hi]hj]hk]hl]ho]uhqMÌ hrhhs]r (h|XIn the X11 package, the file r …r }r (hWXIn the X11 package, the file hcNhqNhrhhXj ubhâ)r }r! (hWX``configure.ac``hg}r" (hi]hj]hk]hl]ho]uhXj hs]r# h|X configure.acr$ …r% }r& (hWUhXj ubahehêubh|X contains:r' …r( }r) (hWX contains:hcNhqNhrhhXj ubeubjÏ)r* }r+ (hWX*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_OUTPUThXjøhchdhejÒhg}r, (j‰jXshelljÔjÕhl]hk]hi]j}hj]ho]uhqMÎ hrhhs]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_OUTPUTr. …r/ }r0 (hWUhXj* ubaubh€)r1 }r2 (hWX«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``:hXjøhchdheh„hg}r3 (hi]hj]hk]hl]ho]uhqMæ hrhhs]r4 (h|X#Then the setup script will run the r5 …r6 }r7 (hWX#Then the setup script will run the hcNhqNhrhhXj1 ubhâ)r8 }r9 (hWX ``configure``hg}r: (hi]hj]hk]hl]ho]uhXj1 hs]r; h|X configurer< …r= }r> (hWUhXj8 ubahehêubh|Xf script, which checks for the presence of the X11 libraries and substitutes for variables in the file r? …r@ }rA (hWXf script, which checks for the presence of the X11 libraries and substitutes for variables in the file hcNhqNhrhhXj1 ubhâ)rB }rC (hWX``X11.buildinfo.in``hg}rD (hi]hj]hk]hl]ho]uhXj1 hs]rE h|XX11.buildinfo.inrF …rG }rH (hWUhXjB ubahehêubh|X:…rI }rJ (hWX:hcNhqNhrhhXj1 ubeubjÏ)rK }rL (hWXKbuildable: @BUILD_PACKAGE_BOOL@ cc-options: @X_CFLAGS@ ld-options: @X_LIBS@hXjøhchdhejÒhg}rM (jÔjÕhl]hk]hi]hj]ho]uhqMì hrhhs]rN h|XKbuildable: @BUILD_PACKAGE_BOOL@ cc-options: @X_CFLAGS@ ld-options: @X_LIBS@rO …rP }rQ (hWUhXjK ubaubh€)rR }rS (hWXXThis generates a file ``X11.buildinfo`` supplying the parameters needed by later stages:hXjøhchdheh„hg}rT (hi]hj]hk]hl]ho]uhqMð hrhhs]rU (h|XThis generates a file rV …rW }rX (hWXThis generates a file hcNhqNhrhhXjR ubhâ)rY }rZ (hWX``X11.buildinfo``hg}r[ (hi]hj]hk]hl]ho]uhXjR hs]r\ h|X X11.buildinfor] …r^ }r_ (hWUhXjY ubahehêubh|X1 supplying the parameters needed by later stages:r` …ra }rb (hWX1 supplying the parameters needed by later stages:hcNhqNhrhhXjR ubeubjÏ)rc }rd (hWXObuildable: True cc-options: -I/usr/X11R6/include ld-options: -L/usr/X11R6/libhXjøhchdhejÒhg}re (jÔjÕhl]hk]hi]hj]ho]uhqMõ hrhhs]rf h|XObuildable: True cc-options: -I/usr/X11R6/include ld-options: -L/usr/X11R6/librg …rh }ri (hWUhXjc ubaubh€)rj }rk (hWXû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.hXjøhchdheh„hg}rl (hi]hj]hk]hl]ho]uhqMù hrhhs]rm (h|XThe rn …ro }rp (hWXThe hcNhqNhrhhXjj ubhâ)rq }rr (hWX ``configure``hg}rs (hi]hj]hk]hl]ho]uhXjj hs]rt h|X configureru …rv }rw (hWUhXjq ubahehêubh|X% script also generates a header file rx …ry }rz (hWX% script also generates a header file hcNhqNhrhhXjj ubhâ)r{ }r| (hWX``include/HsX11Config.h``hg}r} (hi]hj]hk]hl]ho]uhXjj hs]r~ h|Xinclude/HsX11Config.hr …r€ }r (hWUhXj{ ubahehêubh|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.r‚ …rƒ }r„ (hWX¬ 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.hcNhqNhrhhXjj ubeubhî)r… }r† (hWXÍ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``.hXjøhchdhehñhg}r‡ (hi]hj]hk]hl]ho]uhqNhrhhs]rˆ h€)r‰ }rŠ (hWXÍ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``.hXj… hchdheh„hg}r‹ (hi]hj]hk]hl]ho]uhqM hs]rŒ (h|XNPackages using these features will also need to list additional files such as r …rŽ }r (hWXNPackages using these features will also need to list additional files such as hXj‰ ubhâ)r }r‘ (hWX ``configure``hg}r’ (hi]hj]hk]hl]ho]uhXj‰ hs]r“ h|X configurer” …r• }r– (hWUhXj ubahehêubh|X, templates for r— …r˜ }r™ (hWX, templates for hXj‰ ubhâ)rš }r› (hWX``.buildinfo``hg}rœ (hi]hj]hk]hl]ho]uhXj‰ hs]r h|X .buildinforž …rŸ }r  (hWUhXjš ubahehêubh|X files, files named only in r¡ …r¢ }r£ (hWX files, files named only in hXj‰ ubhâ)r¤ }r¥ (hWX``.buildinfo``hg}r¦ (hi]hj]hk]hl]ho]uhXj‰ hs]r§ h|X .buildinfor¨ …r© }rª (hWUhXj¤ ubahehêubh|X& files, header files and so on in the r« …r¬ }r­ (hWX& files, header files and so on in the hXj‰ ubjn)r® }r¯ (hWX:pkg-field:`extra-source-files`r° hXj‰ hchdhejrhg}r± (UreftypeX pkg-fieldjtˆjuXextra-source-filesU refdomainXcabalr² hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽjuhqM hs]r³ hâ)r´ }rµ (hWj° hg}r¶ (hi]hj]r· (jj² Xcabal-pkg-fieldr¸ ehk]hl]ho]uhXj® hs]r¹ h|Xextra-source-filesrº …r» }r¼ (hWUhXj´ ubahehêubaubh|Xz field to ensure that they are included in source distributions. They should also list files and directories generated by r½ …r¾ }r¿ (hWXz field to ensure that they are included in source distributions. They should also list files and directories generated by hXj‰ ubhâ)rÀ }rÁ (hWX ``configure``hg}r (hi]hj]hk]hl]ho]uhXj‰ hs]rà h|X configurerÄ …rÅ }rÆ (hWUhXjÀ ubahehêubh|X in the rÇ …rÈ }rÉ (hWX in the hXj‰ ubjn)rÊ }rË (hWX:pkg-field:`extra-tmp-files`rÌ hXj‰ hchdhejrhg}rÍ (UreftypeX pkg-fieldjtˆjuXextra-tmp-filesU refdomainXcabalrÎ hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽjuhqM hs]rÏ hâ)rÐ }rÑ (hWjÌ hg}rÒ (hi]hj]rÓ (jjÎ Xcabal-pkg-fieldrÔ ehk]hl]ho]uhXjÊ hs]rÕ h|Xextra-tmp-filesrÖ …r× }rØ (hWUhXjÐ ubahehêubaubh|X* field to ensure that they are removed by rÙ …rÚ }rÛ (hWX* field to ensure that they are removed by hXj‰ ubhâ)rÜ }rÝ (hWX``setup clean``hg}rÞ (hi]hj]hk]hl]ho]uhXj‰ hs]rß h|X setup cleanrà …rá }râ (hWUhXjÜ ubahehêubh|X.…rã }rä (hWX.hXj‰ ubeubaubh€)rå }ræ (hWXQuite 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``:hXjøhchdheh„hg}rç (hi]hj]hk]hl]ho]uhqM hrhhs]rè (h|X#Quite often the files generated by ré …rê }rë (hWX#Quite often the files generated by hcNhqNhrhhXjå ubhâ)rì }rí (hWX ``configure``hg}rî (hi]hj]hk]hl]ho]uhXjå hs]rï h|X configurerð …rñ }rò (hWUhXjì ubahehêubh|XM need to be listed somewhere in the package description (for example, in the ró …rô }rõ (hWXM need to be listed somewhere in the package description (for example, in the hcNhqNhrhhXjå ubjn)rö }r÷ (hWX:pkg-field:`install-includes`rø hXjå hchdhejrhg}rù (UreftypeX pkg-fieldjtˆjuXinstall-includesU refdomainXcabalrú hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽjuhqM hs]rû hâ)rü }rý (hWjø hg}rþ (hi]hj]rÿ (jjú Xcabal-pkg-fieldr ehk]hl]ho]uhXjö hs]r h|Xinstall-includesr …r }r (hWUhXjü ubahehêubaubh|X† 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 (hWX„ field). However, we usually don't want generated files to be included in the source tarball. The solution is again provided by the hcNhqNhrhhXjå ubhâ)r }r (hWX``.buildinfo``hg}r (hi]hj]hk]hl]ho]uhXjå hs]r h|X .buildinfor …r }r (hWUhXj ubahehêubh|XC file. In the above example, the following line should be added to r …r }r (hWXC file. In the above example, the following line should be added to hcNhqNhrhhXjå ubhâ)r }r (hWX``X11.buildinfo``hg}r (hi]hj]hk]hl]ho]uhXjå hs]r h|X X11.buildinfor …r }r (hWUhXj ubahehêubh|X:…r }r (hWX:hcNhqNhrhhXjå ubeubjÏ)r }r (hWXinstall-includes: HsX11Config.hhXjøhchdhejÒhg}r (jÔjÕhl]hk]hi]hj]ho]uhqM hrhhs]r h|Xinstall-includes: HsX11Config.hr …r }r! (hWUhXj ubaubh€)r" }r# (hWXOIn 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.hXjøhchdheh„hg}r$ (hi]hj]hk]hl]ho]uhqM hrhhs]r% (h|XIn this way, the generated r& …r' }r( (hWXIn this way, the generated hcNhqNhrhhXj" ubhâ)r) }r* (hWX``HsX11Config.h``hg}r+ (hi]hj]hk]hl]ho]uhXj" hs]r, h|X HsX11Config.hr- …r. }r/ (hWUhXj) ubahehêubh|X? file won’t be included in the source tarball in addition to r0 …r1 }r2 (hWX= file won't be included in the source tarball in addition to hcNhqNhrhhXj" ubhâ)r3 }r4 (hWX``HsX11Config.h.in``hg}r5 (hi]hj]hk]hl]ho]uhXj" hs]r6 h|XHsX11Config.h.inr7 …r8 }r9 (hWUhXj3 ubahehêubh|Xc, but it will be copied to the right location during the install process. Packages that use custom r: …r; }r< (hWXc, but it will be copied to the right location during the install process. Packages that use custom hcNhqNhrhhXj" ubhâ)r= }r> (hWX ``Setup.hs``hg}r? (hi]hj]hk]hl]ho]uhXj" hs]r@ h|XSetup.hsrA …rB }rC (hWUhXj= ubahehêubh|XO scripts can update the necessary fields programmatically instead of using the rD …rE }rF (hWXO scripts can update the necessary fields programmatically instead of using the hcNhqNhrhhXj" ubhâ)rG }rH (hWX``.buildinfo``hg}rI (hi]hj]hk]hl]ho]uhXj" hs]rJ h|X .buildinforK …rL }rM (hWUhXjG ubahehêubh|X file.rN …rO }rP (hWX file.hcNhqNhrhhXj" ubeubeubeubhY)rQ }rR (hWUhXhahchdhehfhg}rS (hi]hj]hk]hl]rT Uconditional-compilationrU aho]rV hauhqM hrhhs]rW (hu)rX }rY (hWXConditional compilationrZ hXjQ hchdhehyhg}r[ (hi]hj]hk]hl]ho]uhqM hrhhs]r\ h|XConditional compilationr] …r^ }r_ (hWjZ hcNhqNhrhhXjX ubaubh€)r` }ra (hWXSometimes 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?hXjQ hchdheh„hg}rb (hi]hj]hk]hl]ho]uhqM hrhhs]rc (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 rd …re }rf (hWX–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 hcNhqNhrhhXj` ubjn)rg }rh (hWX:pkg-field:`build-depends`ri hXj` hchdhejrhg}rj (UreftypeX pkg-fieldjtˆjuX build-dependsU refdomainXcabalrk hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽjuhqM hs]rl hâ)rm }rn (hWji hg}ro (hi]hj]rp (jjk Xcabal-pkg-fieldrq ehk]hl]ho]uhXjg hs]rr h|X build-dependsrs …rt }ru (hWUhXjm ubahehêubaubh|XP, but how do you then write the code that can use different versions of the API?rv …rw }rx (hWXP, but how do you then write the code that can use different versions of the API?hcNhqNhrhhXj` ubeubh€)ry }rz (hWXË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:hXjQ hchdheh„hg}r{ (hi]hj]hk]hl]ho]uhqM! hrhhs]r| (h|XcHaskell lets you preprocess your code using the C preprocessor (either the real C preprocessor, or r} …r~ }r (hWXcHaskell lets you preprocess your code using the C preprocessor (either the real C preprocessor, or hcNhqNhrhhXjy ubhâ)r€ }r (hWX ``cpphs``hg}r‚ (hi]hj]hk]hl]ho]uhXjy hs]rƒ h|Xcpphsr„ …r… }r† (hWUhXj€ ubahehêubh|X). To enable this, add r‡ …rˆ }r‰ (hWX). To enable this, add hcNhqNhrhhXjy ubhâ)rŠ }r‹ (hWX``extensions: CPP``hg}rŒ (hi]hj]hk]hl]ho]uhXjy hs]r h|Xextensions: CPPrŽ …r }r (hWUhXjŠ ubahehêubh|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 r‘ …r’ }r“ (hWXÚ 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 hcNhqNhrhhXjy ubhâ)r” }r• (hWX``base``hg}r– (hi]hj]hk]hl]ho]uhXjy hs]r— h|Xbaser˜ …r™ }rš (hWUhXj” ubahehêubh|XS package, you could select the available version in your Haskell modules like this:r› …rœ }r (hWXS package, you could select the available version in your Haskell modules like this:hcNhqNhrhhXjy ubeubjÏ)rž }rŸ (hWXp#if MIN_VERSION_base(4,0,0) ... code that works with base-4 ... #else ... code that works with base-3 ... #endifhXjQ hchdhejÒhg}r  (j‰jXcppjÔjÕhl]hk]hi]j}hj]ho]uhqM) hrhhs]r¡ h|Xp#if MIN_VERSION_base(4,0,0) ... code that works with base-4 ... #else ... code that works with base-3 ... #endifr¢ …r£ }r¤ (hWUhXjž ubaubh€)r¥ }r¦ (hWX›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).hXjQ hchdheh„hg}r§ (hi]hj]hk]hl]ho]uhqM1 hrhhs]r¨ (h|X#In general, Cabal supplies a macro r© …rª }r« (hWX#In general, Cabal supplies a macro hcNhqNhrhhXj¥ ubhâ)r¬ }r­ (hWX``MIN_VERSION_``hg}r® (hi]hj]hk]hl]ho]uhXj¥ hs]r¯ h|X MIN_VERSION_r° …r± }r² (hWUhXj¬ ubahehêubh|X…r³ }r´ (hWX\ rµ hcNhqNhrhhXj¥ ubhÂ)r¶ }r· (hWX *``package``*hg}r¸ (hi]hj]hk]hl]ho]uhXj¥ hs]r¹ h|X ``package``rº …r» }r¼ (hWUhXj¶ ubahehÊubh|X…r½ }r¾ (hWjµ hXj¥ ubhâ)r¿ }rÀ (hWX ``_(A,B,C)``hg}rÁ (hi]hj]hk]hl]ho]uhXj¥ hs]r h|X_(A,B,C)rà …rÄ }rÅ (hWUhXj¿ ubahehêubh|X" for each package depended on via rÆ …rÇ }rÈ (hWX" for each package depended on via hcNhqNhrhhXj¥ ubjn)rÉ }rÊ (hWX:pkg-field:`build-depends`rË hXj¥ hchdhejrhg}rÌ (UreftypeX pkg-fieldjtˆjuX build-dependsU refdomainXcabalrÍ hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽjuhqM1 hs]rÎ hâ)rÏ }rÐ (hWjË hg}rÑ (hi]hj]rÒ (jjÍ Xcabal-pkg-fieldrÓ ehk]hl]ho]uhXjÉ hs]rÔ h|X build-dependsrÕ …rÖ }r× (hWUhXjÏ ubahehêubaubh|X]. This macro is true if the actual version of the package in use is greater than or equal to rØ …rÙ }rÚ (hWX]. This macro is true if the actual version of the package in use is greater than or equal to hcNhqNhrhhXj¥ ubhâ)rÛ }rÜ (hWX ``A.B.C``hg}rÝ (hi]hj]hk]hl]ho]uhXj¥ hs]rÞ h|XA.B.Crß …rà }rá (hWUhXjÛ ubahehêubh|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).râ …rã }rä (hWX© (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).hcNhqNhrhhXj¥ ubeubh€)rå }ræ (hWX¨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``).hXjQ hchdheh„hg}rç (hi]hj]hk]hl]ho]uhqM9 hrhhs]rè (h|XSince version 1.20, the ré …rê }rë (hWXSince version 1.20, the hcNhqNhrhhXjå ubhâ)rì }rí (hWX``MIN_TOOL_VERSION_``hg}rî (hi]hj]hk]hl]ho]uhXjå hs]rï h|XMIN_TOOL_VERSION_rð …rñ }rò (hWUhXjì ubahehêubh|X…ró }rô (hWX\ hcNhqNhrhhXjå ubhÂ)rõ }rö (hWX *``tool``*hg}r÷ (hi]hj]hk]hl]ho]uhXjå hs]rø h|X``tool``rù …rú }rû (hWUhXjõ ubahehÊubh|Xc family of macros lets you condition on the version of build tools used to build the program (e.g. rü …rý }rþ (hWXc family of macros lets you condition on the version of build tools used to build the program (e.g. hcNhqNhrhhXjå ubhâ)rÿ }r (hWX ``hsc2hs``hg}r (hi]hj]hk]hl]ho]uhXjå hs]r h|Xhsc2hsr …r }r (hWUhXjÿ ubahehêubh|X).r …r }r (hWX).hcNhqNhrhhXjå ubeubh€)r }r (hWX=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.hXjQ hchdheh„hg}r (hi]hj]hk]hl]ho]uhqM= hrhhs]r (h|XSince version 1.24, the macro r …r }r (hWXSince version 1.24, the macro hcNhqNhrhhXj ubhâ)r }r (hWX``CURRENT_COMPONENT_ID``hg}r (hi]hj]hk]hl]ho]uhXj hs]r h|XCURRENT_COMPONENT_IDr …r }r (hWUhXj ubahehêubh|X˜, 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 (hWX˜, which expands to the string of the component identifier that uniquely identifies this component. Furthermore, if the package is a library, the macro hcNhqNhrhhXj ubhâ)r }r (hWX``CURRENT_PACKAGE_KEY``hg}r (hi]hj]hk]hl]ho]uhXj hs]r h|XCURRENT_PACKAGE_KEYr …r }r (hWUhXj ubahehêubh|XX records the identifier that was passed to GHC for use in symbols and for type equality.r! …r" }r# (hWXX records the identifier that was passed to GHC for use in symbols and for type equality.hcNhqNhrhhXj ubeubh€)r$ }r% (hWXuSince version 2.0, the macro ``CURRENT_PACKAGE_VERSION`` expands to the string version number of the current package.hXjQ hchdheh„hg}r& (hi]hj]hk]hl]ho]uhqMC hrhhs]r' (h|XSince version 2.0, the macro r( …r) }r* (hWXSince version 2.0, the macro hcNhqNhrhhXj$ ubhâ)r+ }r, (hWX``CURRENT_PACKAGE_VERSION``hg}r- (hi]hj]hk]hl]ho]uhXj$ hs]r. h|XCURRENT_PACKAGE_VERSIONr/ …r0 }r1 (hWUhXj+ ubahehêubh|X= expands to the string version number of the current package.r2 …r3 }r4 (hWX= expands to the string version number of the current package.hcNhqNhrhhXj$ ubeubh€)r5 }r6 (hWX¼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.r7 hXjQ hchdheh„hg}r8 (hi]hj]hk]hl]ho]uhqMF hrhhs]r9 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: …r; }r< (hWj7 hcNhqNhrhhXj5 ubaubh€)r= }r> (hWX¾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.hXjQ hchdheh„hg}r? (hi]hj]hk]hl]ho]uhqMK hrhhs]r@ (h|XaCabal also allows to detect when the source code is being used for generating documentation. The rA …rB }rC (hWXaCabal also allows to detect when the source code is being used for generating documentation. The hcNhqNhrhhXj= ubhâ)rD }rE (hWX``__HADDOCK_VERSION__``hg}rF (hi]hj]hk]hl]ho]uhXj= hs]rG h|X__HADDOCK_VERSION__rH …rI }rJ (hWUhXjD ubahehêubh|X* macro is defined only when compiling via rK …rL }rM (hWX* macro is defined only when compiling via hcNhqNhrhhXj= ubjB)rN }rO (hWXHaddock_jEKhXj= hejFhg}rP (UnameXHaddockjXhttp://www.haskell.org/haddock/rQ hl]hk]hi]hj]ho]uhs]rR h|XHaddockrS …rT }rU (hWUhXjN ubaubh|X8 instead of a normal Haskell compiler. The value of the rV …rW }rX (hWX8 instead of a normal Haskell compiler. The value of the hcNhqNhrhhXj= ubhâ)rY }rZ (hWX``__HADDOCK_VERSION__``hg}r[ (hi]hj]hk]hl]ho]uhXj= hs]r\ h|X__HADDOCK_VERSION__r] …r^ }r_ (hWUhXjY ubahehêubh|X macro is defined as r` …ra }rb (hWX macro is defined as hcNhqNhrhhXj= ubhâ)rc }rd (hWX``A*1000 + B*10 + C``hg}re (hi]hj]hk]hl]ho]uhXj= hs]rf h|XA*1000 + B*10 + Crg …rh }ri (hWUhXjc ubahehêubh|X, where rj …rk }rl (hWX, where hcNhqNhrhhXj= ubhâ)rm }rn (hWX ``A.B.C``hg}ro (hi]hj]hk]hl]ho]uhXj= hs]rp h|XA.B.Crq …rr }rs (hWUhXjm ubahehêubh|XŠ is the Haddock version. This can be useful for working around bugs in Haddock or generating prettier documentation in some special cases.rt …ru }rv (hWXŠ is the Haddock version. This can be useful for working around bugs in Haddock or generating prettier documentation in some special cases.hcNhqNhrhhXj= ubeubeubhY)rw }rx (hWUh\KhXhahchdhehfhg}ry (hi]hj]hk]hl]rz Umore-complex-packagesr{ aho]r| h8auhqMU hrhhs]r} (hu)r~ }r (hWXMore complex packagesr€ hXjw hchdhehyhg}r (hi]hj]hk]hl]ho]uhqMU hrhhs]r‚ h|XMore complex packagesrƒ …r„ }r… (hWj€ hcNhqNhrhhXj~ ubaubh€)r† }r‡ (hWXWFor packages that don't fit the simple schemes described above, you have a few options:rˆ hXjw hchdheh„hg}r‰ (hi]hj]hk]hl]ho]uhqMW hrhhs]rŠ h|XYFor packages that don’t fit the simple schemes described above, you have a few options:r‹ …rŒ }r (hWjˆ hcNhqNhrhhXj† ubaubhŠ)rŽ }r (hWUhXjw hchdhehhg}r (hX-hl]hk]hi]hj]ho]uhqMZ hrhhs]r‘ (h‘)r’ }r“ (hWXÇBy 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: .. code-block:: haskell import Distribution.Simple main = defaultMainWithHooks simpleUserHooks { postHaddock = posthaddock } posthaddock args flags desc info = .... 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. 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. hXjŽ hchdheh”hg}r” (hi]hj]hk]hl]ho]uhqNhrhhs]r• (h€)r– }r— (hWXEBy 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:hXj’ hchdheh„hg}r˜ (hi]hj]hk]hl]ho]uhqMZ hs]r™ (h|X By using the rš …r› }rœ (hWX By using the hXj– ubjn)r }rž (hWX:pkg-field:`build-type`rŸ hXj– hchdhejrhg}r  (UreftypeX pkg-fieldjtˆjuX build-typeU refdomainXcabalr¡ hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽjuhqMZ hs]r¢ hâ)r£ }r¤ (hWjŸ hg}r¥ (hi]hj]r¦ (jj¡ Xcabal-pkg-fieldr§ ehk]hl]ho]uhXj hs]r¨ h|X build-typer© …rª }r« (hWUhXj£ ubahehêubaubh|X …r¬ }r­ (hWX hXj– ubhâ)r® }r¯ (hWX ``Custom``hg}r° (hi]hj]hk]hl]ho]uhXj– hs]r± h|XCustomr² …r³ }r´ (hWUhXj® ubahehêubh|X, you can supply your own rµ …r¶ }r· (hWX, you can supply your own hXj– ubhâ)r¸ }r¹ (hWX ``Setup.hs``hg}rº (hi]hj]hk]hl]ho]uhXj– hs]r» h|XSetup.hsr¼ …r½ }r¾ (hWUhXj¸ ubahehêubh|X; file, and customize the simple build infrastructure using r¿ …rÀ }rÁ (hWX; file, and customize the simple build infrastructure using hXj– ubhÂ)r }rà (hWX*hooks*hg}rÄ (hi]hj]hk]hl]ho]uhXj– hs]rÅ h|XhooksrÆ …rÇ }rÈ (hWUhXj ubahehÊubh|XŽ. These allow you to perform additional actions before and after each command is run, and also to specify additional preprocessors. A typical rÉ …rÊ }rË (hWXŽ. These allow you to perform additional actions before and after each command is run, and also to specify additional preprocessors. A typical hXj– ubhâ)rÌ }rÍ (hWX ``Setup.hs``hg}rÎ (hi]hj]hk]hl]ho]uhXj– hs]rÏ h|XSetup.hsrÐ …rÑ }rÒ (hWUhXjÌ ubahehêubh|X may look like this:rÓ …rÔ }rÕ (hWX may look like this:hXj– ubeubjÏ)rÖ }r× (hWXimport Distribution.Simple main = defaultMainWithHooks simpleUserHooks { postHaddock = posthaddock } posthaddock args flags desc info = ....hXj’ hchdhejÒhg}rØ (j‰jXhaskelljÔjÕhl]hk]hi]j}hj]ho]uhqM` hs]rÙ h|Ximport Distribution.Simple main = defaultMainWithHooks simpleUserHooks { postHaddock = posthaddock } posthaddock args flags desc info = ....rÚ …rÛ }rÜ (hWUhXjÖ ubaubh€)rÝ }rÞ (hWXÕ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.hXj’ hchdheh„hg}rß (hi]hj]hk]hl]ho]uhqMg hs]rà (h|XSee rá …râ }rã (hWXSee hXjÝ ubhâ)rä }rå (hWX ``UserHooks``hg}ræ (hi]hj]hk]hl]ho]uhXjÝ hs]rç h|X UserHooksrè …ré }rê (hWUhXjä ubahehêubh|X in rë …rì }rí (hWX in hXjÝ ubjB)rî }rï (hWXX`Distribution.Simple <../release/cabal-latest/doc/API/Cabal/Distribution-Simple.html>`__hg}rð (UnameXDistribution.SimplejX>../release/cabal-latest/doc/API/Cabal/Distribution-Simple.htmlhl]hk]hi]hj]ho]uhXjÝ hs]rñ h|XDistribution.Simplerò …ró }rô (hWUhXjî ubahejFubh|Xh for the details, but note that this interface is experimental, and likely to change in future releases.rõ …rö }r÷ (hWXh for the details, but note that this interface is experimental, and likely to change in future releases.hXjÝ ubeubh€)rø }rù (hWXô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.hXj’ hchdheh„hg}rú (hi]hj]hk]hl]ho]uhqMl hs]rû (h|XIf you use a custom rü …rý }rþ (hWXIf you use a custom hXjø ubhâ)rÿ }r (hWX ``Setup.hs``hg}r (hi]hj]hk]hl]ho]uhXjø hs]r h|XSetup.hsr …r }r (hWUhXjÿ ubahehêubh|X, file you should strongly consider adding a r …r }r (hWX, file you should strongly consider adding a hXjø ubjn)r }r (hWX:pkg-section:`custom-setup`r hXjø hchdhejrhg}r (UreftypeX pkg-sectionjtˆjuX custom-setupU refdomainXcabalr hl]hk]U refexplicit‰hi]hj]ho]jwjxuhqMl hs]r hâ)r }r (hWj hg}r (hi]hj]r (jj Xcabal-pkg-sectionr ehk]hl]ho]uhXj hs]r h|X custom-setupr …r }r (hWUhXj ubahehêubaubh|X stanza with a r …r }r (hWX stanza with a hXjø ubjn)r }r (hWX':pkg-field:`custom-setup:setup-depends`r hXjø hchdhejrhg}r (UreftypeX pkg-fieldjtˆjuX setup-dependsU refdomainXcabalr hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽX custom-setupuhqMl hs]r hâ)r! }r" (hWj hg}r# (hi]hj]r$ (jj Xcabal-pkg-fieldr% ehk]hl]ho]uhXj hs]r& h|Xcustom-setup:setup-dependsr' …r( }r) (hWUhXj! ubahehêubaubh|XW field to ensure that your setup script does not break with future dependency versions.r* …r+ }r, (hWXW field to ensure that your setup script does not break with future dependency versions.hXjø ubeubeubh‘)r- }r. (hWX^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) \ hXjŽ hcNheh”hg}r/ (hi]hj]hk]hl]ho]uhqNhrhhs]r0 (h€)r1 }r2 (hWXwYou 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:hXj- hchdheh„hg}r3 (hi]hj]hk]hl]ho]uhqMq hs]r4 (h|X#You could delegate all the work to r5 …r6 }r7 (hWX#You could delegate all the work to hXj1 ubhâ)r8 }r9 (hWX``make``hg}r: (hi]hj]hk]hl]ho]uhXj1 hs]r; h|Xmaker< …r= }r> (hWUhXj8 ubahehêubh|XL, though this is unlikely to be very portable. Cabal supports this with the r? …r@ }rA (hWXL, though this is unlikely to be very portable. Cabal supports this with the hXj1 ubjn)rB }rC (hWX:pkg-field:`build-type`rD hXj1 hchdhejrhg}rE (UreftypeX pkg-fieldjtˆjuX build-typeU refdomainXcabalrF hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽjuhqMq hs]rG hâ)rH }rI (hWjD hg}rJ (hi]hj]rK (jjF Xcabal-pkg-fieldrL ehk]hl]ho]uhXjB hs]rM h|X build-typerN …rO }rP (hWUhXjH ubahehêubaubh|X …rQ }rR (hWX hXj1 ubhâ)rS }rT (hWX``Make``hg}rU (hi]hj]hk]hl]ho]uhXj1 hs]rV h|XMakerW …rX }rY (hWUhXjS ubahehêubh|X and a trivial setup library rZ …r[ }r\ (hWX and a trivial setup library hXj1 ubjB)r] }r^ (hWXT`Distribution.Make <../release/cabal-latest/doc/API/Cabal/Distribution-Make.html>`__hg}r_ (UnameXDistribution.MakejX<../release/cabal-latest/doc/API/Cabal/Distribution-Make.htmlhl]hk]hi]hj]ho]uhXj1 hs]r` h|XDistribution.Makera …rb }rc (hWUhXj] ubahejFubh|X=, which simply parses the command line arguments and invokes rd …re }rf (hWX=, which simply parses the command line arguments and invokes hXj1 ubhâ)rg }rh (hWX``make``hg}ri (hi]hj]hk]hl]ho]uhXj1 hs]rj h|Xmakerk …rl }rm (hWUhXjg ubahehêubh|X. Here rn …ro }rp (hWX. Here hXj1 ubhâ)rq }rr (hWX ``Setup.hs``hg}rs (hi]hj]hk]hl]ho]uhXj1 hs]rt h|XSetup.hsru …rv }rw (hWUhXjq ubahehêubh|X should look like this:rx …ry }rz (hWX should look like this:hXj1 ubeubjÏ)r{ }r| (hWX+import Distribution.Make main = defaultMainhXj- hchdhejÒhg}r} (j‰jXhaskelljÔjÕhl]hk]hi]j}hj]ho]uhqMx hs]r~ h|X+import Distribution.Make main = defaultMainr …r€ }r (hWUhXj{ ubaubh€)r‚ }rƒ (hWX1The 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:hXj- hchdheh„hg}r„ (hi]hj]hk]hl]ho]uhqM} hs]r… (h|X3The root directory of the package should contain a r† …r‡ }rˆ (hWX3The root directory of the package should contain a hXj‚ ubhâ)r‰ }rŠ (hWX ``configure``hg}r‹ (hi]hj]hk]hl]ho]uhXj‚ hs]rŒ h|X configurer …rŽ }r (hWUhXj‰ ubahehêubh|X$ script, and, after that has run, a r …r‘ }r’ (hWX$ script, and, after that has run, a hXj‚ ubhâ)r“ }r” (hWX ``Makefile``hg}r• (hi]hj]hk]hl]ho]uhXj‚ hs]r– h|XMakefiler— …r˜ }r™ (hWUhXj“ ubahehêubh|X= with a default target that builds the package, plus targets rš …r› }rœ (hWX= with a default target that builds the package, plus targets hXj‚ ubhâ)r }rž (hWX ``install``hg}rŸ (hi]hj]hk]hl]ho]uhXj‚ hs]r  h|Xinstallr¡ …r¢ }r£ (hWUhXj ubahehêubh|X, r¤ …r¥ }r¦ (hWX, r§ hXj‚ ubhâ)r¨ }r© (hWX ``register``hg}rª (hi]hj]hk]hl]ho]uhXj‚ hs]r« h|Xregisterr¬ …r­ }r® (hWUhXj¨ ubahehêubh|X, r¯ …r° }r± (hWX, hXj‚ ubhâ)r² }r³ (hWX``unregister``hg}r´ (hi]hj]hk]hl]ho]uhXj‚ hs]rµ h|X unregisterr¶ …r· }r¸ (hWUhXj² ubahehêubh|X, r¹ …rº }r» (hWX, hXj‚ ubhâ)r¼ }r½ (hWX ``clean``hg}r¾ (hi]hj]hk]hl]ho]uhXj‚ hs]r¿ h|XcleanrÀ …rÁ }r (hWUhXj¼ ubahehêubh|X, rà …rÄ }rÅ (hWj§ hXj‚ ubhâ)rÆ }rÇ (hWX``dist``hg}rÈ (hi]hj]hk]hl]ho]uhXj‚ hs]rÉ h|XdistrÊ …rË }rÌ (hWUhXjÆ ubahehêubh|X and rÍ …rÎ }rÏ (hWX and hXj‚ ubhâ)rÐ }rÑ (hWX``docs``hg}rÒ (hi]hj]hk]hl]ho]uhXj‚ hs]rÓ h|XdocsrÔ …rÕ }rÖ (hWUhXjÐ ubahehêubh|X9. Some options to commands are passed through as follows:r× …rØ }rÙ (hWX9. Some options to commands are passed through as follows:hXj‚ ubeubhŠ)rÚ }rÛ (hWUhXj- hchdhehhg}rÜ (hX-hl]hk]hi]hj]ho]uhqMƒ hs]rÝ (h‘)rÞ }rß (hWXyThe ``--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. hg}rà (hi]hj]hk]hl]ho]uhXjÚ hs]rá h€)râ }rã (hWXxThe ``--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.hXjÞ hchdheh„hg}rä (hi]hj]hk]hl]ho]uhqMƒ hs]rå (h|XThe ræ …rç }rè (hWXThe hXjâ ubhâ)ré }rê (hWX``--with-hc-pkg``hg}rë (hi]hj]hk]hl]ho]uhXjâ hs]rì h|X --with-hc-pkgrí …rî }rï (hWUhXjé ubahehêubh|X, rð …rñ }rò (hWX, ró hXjâ ubhâ)rô }rõ (hWX ``--prefix``hg}rö (hi]hj]hk]hl]ho]uhXjâ hs]r÷ h|X--prefixrø …rù }rú (hWUhXjô ubahehêubh|X, rû …rü }rý (hWX, hXjâ ubhâ)rþ }rÿ (hWX ``--bindir``hg}r (hi]hj]hk]hl]ho]uhXjâ hs]r h|X--bindirr …r }r (hWUhXjþ ubahehêubh|X, r …r }r (hWX, hXjâ ubhâ)r }r (hWX ``--libdir``hg}r (hi]hj]hk]hl]ho]uhXjâ hs]r h|X--libdirr …r }r (hWUhXj ubahehêubh|X, r …r }r (hWX, hXjâ ubhâ)r }r (hWX``--dynlibdir``hg}r (hi]hj]hk]hl]ho]uhXjâ hs]r h|X --dynlibdirr …r }r (hWUhXj ubahehêubh|X, r …r }r (hWX, hXjâ ubhâ)r }r (hWX ``--datadir``hg}r (hi]hj]hk]hl]ho]uhXjâ hs]r h|X --datadirr …r! }r" (hWUhXj ubahehêubh|X, r# …r$ }r% (hWjó hXjâ ubhâ)r& }r' (hWX``--libexecdir``hg}r( (hi]hj]hk]hl]ho]uhXjâ hs]r) h|X --libexecdirr* …r+ }r, (hWUhXj& ubahehêubh|X and r- …r. }r/ (hWX and hXjâ ubhâ)r0 }r1 (hWX``--sysconfdir``hg}r2 (hi]hj]hk]hl]ho]uhXjâ hs]r3 h|X --sysconfdirr4 …r5 }r6 (hWUhXj0 ubahehêubh|X options to the r7 …r8 }r9 (hWX options to the hXjâ ubhâ)r: }r; (hWX ``configure``hg}r< (hi]hj]hk]hl]ho]uhXjâ hs]r= h|X configurer> …r? }r@ (hWUhXj: ubahehêubh|X command are passed on to the rA …rB }rC (hWX command are passed on to the hXjâ ubhâ)rD }rE (hWX ``configure``hg}rF (hi]hj]hk]hl]ho]uhXjâ hs]rG h|X configurerH …rI }rJ (hWUhXjD ubahehêubh|X& script. In addition the value of the rK …rL }rM (hWX& script. In addition the value of the hXjâ ubhâ)rN }rO (hWX``--with-compiler``hg}rP (hi]hj]hk]hl]ho]uhXjâ hs]rQ h|X--with-compilerrR …rS }rT (hWUhXjN ubahehêubh|X option is passed in a rU …rV }rW (hWX option is passed in a hXjâ ubhâ)rX }rY (hWX ``--with-hc``hg}rZ (hi]hj]hk]hl]ho]uhXjâ hs]r[ h|X --with-hcr\ …r] }r^ (hWUhXjX ubahehêubh|X' option and all options specified with r_ …r` }ra (hWX' option and all options specified with hXjâ ubhâ)rb }rc (hWX``--configure-option=``hg}rd (hi]hj]hk]hl]ho]uhXjâ hs]re h|X--configure-option=rf …rg }rh (hWUhXjb ubahehêubh|X are passed on.ri …rj }rk (hWX are passed on.hXjâ ubeubaheh”ubh‘)rl }rm (hWX±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) \ hg}rn (hi]hj]hk]hl]ho]uhXjÚ hs]ro (h€)rp }rq (hWXà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:hXjl hchdheh„hg}rr (hi]hj]hk]hl]ho]uhqMŠ hs]rs (h|XThe rt …ru }rv (hWXThe hXjp ubhâ)rw }rx (hWX ``--destdir``hg}ry (hi]hj]hk]hl]ho]uhXjp hs]rz h|X --destdirr{ …r| }r} (hWUhXjw ubahehêubh|X option to the r~ …r }r€ (hWX option to the hXjp ubhâ)r }r‚ (hWX``copy``hg}rƒ (hi]hj]hk]hl]ho]uhXjp hs]r„ h|Xcopyr… …r† }r‡ (hWUhXj ubahehêubh|X command becomes a setting of a rˆ …r‰ }rŠ (hWX command becomes a setting of a hXjp ubhâ)r‹ }rŒ (hWX ``destdir``hg}r (hi]hj]hk]hl]ho]uhXjp hs]rŽ h|Xdestdirr …r }r‘ (hWUhXj‹ ubahehêubh|X variable on the invocation of r’ …r“ }r” (hWX variable on the invocation of hXjp ubhâ)r• }r– (hWX ``make copy``hg}r— (hi]hj]hk]hl]ho]uhXjp hs]r˜ h|X make copyr™ …rš }r› (hWUhXj• ubahehêubh|X. The supplied rœ …r }rž (hWX. The supplied hXjp ubhâ)rŸ }r  (hWX ``Makefile``hg}r¡ (hi]hj]hk]hl]ho]uhXjp hs]r¢ h|XMakefiler£ …r¤ }r¥ (hWUhXjŸ ubahehêubh|X should provide a r¦ …r§ }r¨ (hWX should provide a hXjp ubhâ)r© }rª (hWX``copy``hg}r« (hi]hj]hk]hl]ho]uhXjp hs]r¬ h|Xcopyr­ …r® }r¯ (hWUhXj© ubahehêubh|X, target, which will probably look like this:r° …r± }r² (hWX, target, which will probably look like this:hXjp ubeubjÏ)r³ }r´ (hWX˜copy : $(MAKE) install prefix=$(destdir)/$(prefix) \ bindir=$(destdir)/$(bindir) \ libdir=$(destdir)/$(libdir) \ dynlibdir=$(destdir)/$(dynlibdir) \ datadir=$(destdir)/$(datadir) \ libexecdir=$(destdir)/$(libexecdir) \ sysconfdir=$(destdir)/$(sysconfdir) \hXjl hchdhejÒhg}rµ (j‰jXmakejÔjÕhl]hk]hi]j}hj]ho]uhqM hs]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) \r· …r¸ }r¹ (hWUhXj³ ubaubeheh”ubeubeubh‘)rº }r» (hWXFinally, 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. hXjŽ hchdheh”hg}r¼ (hi]hj]hk]hl]ho]uhqNhrhhs]r½ h€)r¾ }r¿ (hWXŽ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.hXjº hchdheh„hg}rÀ (hi]hj]hk]hl]ho]uhqMš hs]rÁ (h|XFinally, with the r …rà }rÄ (hWXFinally, with the hXj¾ ubjn)rÅ }rÆ (hWX:pkg-field:`build-type`rÇ hXj¾ hchdhejrhg}rÈ (UreftypeX pkg-fieldjtˆjuX build-typeU refdomainXcabalrÉ hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽjuhqMš hs]rÊ hâ)rË }rÌ (hWjÇ hg}rÍ (hi]hj]rÎ (jjÉ Xcabal-pkg-fieldrÏ ehk]hl]ho]uhXjÅ hs]rÐ h|X build-typerÑ …rÒ }rÓ (hWUhXjË ubahehêubaubh|X …rÔ }rÕ (hWX hXj¾ ubhâ)rÖ }r× (hWX ``Custom``hg}rØ (hi]hj]hk]hl]ho]uhXj¾ hs]rÙ h|XCustomrÚ …rÛ }rÜ (hWUhXjÖ ubahehêubh|Xv, you can also write your own setup script from scratch. It must conform to the interface described in the section on rÝ …rÞ }rß (hWXv, you can also write your own setup script from scratch. It must conform to the interface described in the section on hXj¾ ubjB)rà }rá (hWX?`building and installing packages `__hg}râ (UnameX building and installing packagesjXinstalling-packages.htmlhl]hk]hi]hj]ho]uhXj¾ hs]rã h|X building and installing packagesrä …rå }ræ (hWUhXjà ubahejFubh|Xe, 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é (hWXe, and you may use the Cabal library for all or part of the work. One option is to copy the source of hXj¾ ubhâ)rê }rë (hWX``Distribution.Simple``hg}rì (hi]hj]hk]hl]ho]uhXj¾ hs]rí h|XDistribution.Simplerî …rï }rð (hWUhXjê ubahehêubh|X), and alter it for your needs. Good luck.rñ …rò }ró (hWX), and alter it for your needs. Good luck.hXj¾ ubeubaubeubj‚)rô }rõ (hWX[-*- rst -*- This file contains commonly used link-references See also "extlinks" in conf.pyhXjw hccdocutils.nodes reprunicode rö Xdoc/references.incr÷ …rø }rù bhej…hg}rú (jÔjÕhl]hk]hi]hj]ho]uhqKhrhhs]rû h|X[-*- rst -*- This file contains commonly used link-references See also "extlinks" in conf.pyrü …rý }rþ (hWUhXjô ubaubj£)rÿ }r(hWX .. _`Package Versioning Policy`:h\KhXjw hcjø hej¦hg}r(hl]hk]hi]hj]ho]jHUpackage-versioning-policyruhqM¨ hrhhs]ubj£)r}r(hWX .. _PVP: http://pvp.haskell.org/h\KhXjw hcjø Uexpect_referenced_by_namer}rhHjÿ shej¦hg}r(jXhttp://pvp.haskell.org/rhl]r (Upvpr jehk]hi]hj]ho]r (hhHeuhqM© hrhUexpect_referenced_by_idr }r jjÿ shs]ubj£)r}r(hWX(.. _Hackage: http://hackage.haskell.org/h\KhXjw hcjø hej¦hg}r(jXhttp://hackage.haskell.org/rhl]rUhackagerahk]hi]hj]ho]rhauhqM« hrhhs]ubj£)r}r(hWX$.. _Haskell: http://www.haskell.org/hXjw hcjø hej¦hg}r(jXhttp://www.haskell.org/hl]rUhaskellrahk]hi]hj]ho]rhLauhqM­ hrhhs]ubj£)r}r(hWX,.. _Haddock: http://www.haskell.org/haddock/h\KhXjw hcjø hej¦hg}r(jjQ hl]rUhaddockrahk]hi]hj]ho]r h!auhqM¯ hrhhs]ubj£)r!}r"(hWX&.. _Alex: http://www.haskell.org/alex/h\KhXjw hcjø hej¦hg}r#(jXhttp://www.haskell.org/alex/r$hl]r%Ualexr&ahk]hi]hj]ho]r'h&auhqM± hrhhs]ubj£)r(}r)(hWX(.. _Happy: http://www.haskell.org/happy/h\KhXjw hcjø hej¦hg}r*(jXhttp://www.haskell.org/happy/r+hl]r,Uhappyr-ahk]hi]hj]ho]r.h,auhqM³ hrhhs]ubj£)r/}r0(hWX*.. _Hoogle: http://www.haskell.org/hoogle/hXjw hcjø hej¦hg}r1(jXhttp://www.haskell.org/hoogle/hl]r2Uhoogler3ahk]hi]hj]ho]r4hauhqMµ hrhhs]ubj£)r5}r6(hWX9.. _HsColour: http://www.cs.york.ac.uk/fp/darcs/hscolour/hXjw hcjø hej¦hg}r7(jX+http://www.cs.york.ac.uk/fp/darcs/hscolour/hl]r8Uhscolourr9ahk]hi]hj]ho]r:hauhqM· hrhhs]ubj£)r;}r<(hWX-.. _cpphs: http://projects.haskell.org/cpphs/h\KhXjw hcjø hej¦hg}r=(jX"http://projects.haskell.org/cpphs/r>hl]r?Ucpphsr@ahk]hi]hj]ho]rAh+auhqM¹ hrhhs]ubj£)rB}rC(hWX-.. _ABNF: https://tools.ietf.org/html/rfc5234h\KhXjw hcjø hej¦hg}rD(jX#https://tools.ietf.org/html/rfc5234rEhl]rFUabnfrGahk]hi]hj]ho]rHhauhqM» hrhhs]ubeubeubhchdhehfhg}rI(hi]hj]hk]hl]rJjIaho]rKhauhqM‹hrhhs]rL(hu)rM}rN(hWXPackage descriptionsrOhXh_hchdhehyhg}rP(hi]hj]hk]hl]ho]uhqM‹hrhhs]rQh|XPackage descriptionsrR…rS}rT(hWjOhcNhqNhrhhXjMubaubh€)rU}rV(hWXuThe 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.hXh_hchdheh„hg}rW(hi]hj]hk]hl]ho]uhqMhrhhs]rX(h|X;The package description file must have a name ending in “rY…rZ}r[(hWX9The package description file must have a name ending in "hcNhqNhrhhXjUubhâ)r\}r](hWX ``.cabal``hg}r^(hi]hj]hk]hl]ho]uhXjUhs]r_h|X.cabalr`…ra}rb(hWUhXj\ubahehêubh|X6â€. 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.rc…rd}re(hWX2". 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.hcNhqNhrhhXjUubeubh€)rf}rg(hWX~In the package description file, lines whose first non-whitespace characters are "``--``" are treated as comments and ignored.hXh_hchdheh„hg}rh(hi]hj]hk]hl]ho]uhqM”hrhhs]ri(h|XTIn the package description file, lines whose first non-whitespace characters are “rj…rk}rl(hWXRIn the package description file, lines whose first non-whitespace characters are "hcNhqNhrhhXjfubhâ)rm}rn(hWX``--``hg}ro(hi]hj]hk]hl]ho]uhXjfhs]rph|X--rq…rr}rs(hWUhXjmubahehêubh|X(†are treated as comments and ignored.rt…ru}rv(hWX&" are treated as comments and ignored.hcNhqNhrhhXjfubeubh€)rw}rx(hWXWThis file should contain of a number global property descriptions and several sections.ryhXh_hchdheh„hg}rz(hi]hj]hk]hl]ho]uhqM—hrhhs]r{h|XWThis file should contain of a number global property descriptions and several sections.r|…r}}r~(hWjyhcNhqNhrhhXjwubaubhŠ)r}r€(hWUhXh_hchdhehhg}r(hX-hl]hk]hi]hj]ho]uhqMšhrhhs]r‚(h‘)rƒ}r„(hWX_The `package properties`_ describe the package as a whole, such as name, license, author, etc. hXjhchdheh”hg}r…(hi]hj]hk]hl]ho]uhqNhrhhs]r†h€)r‡}rˆ(hWX^The `package properties`_ describe the package as a whole, such as name, license, author, etc.hXjƒhchdheh„hg}r‰(hi]hj]hk]hl]ho]uhqMšhs]rŠ(h|XThe r‹…rŒ}r(hWXThe hXj‡ubjB)rŽ}r(hWX`package properties`_jEKhXj‡hejFhg}r(UnameXpackage propertieshl]hk]hi]hj]ho]jHUpackage-propertiesr‘uhs]r’h|Xpackage propertiesr“…r”}r•(hWUhXjŽubaubh|XE describe the package as a whole, such as name, license, author, etc.r–…r—}r˜(hWXE describe the package as a whole, such as name, license, author, etc.hXj‡ubeubaubh‘)r™}rš(hWX­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`_). hXjhchdheh”hg}r›(hi]hj]hk]hl]ho]uhqNhrhhs]rœh€)r}rž(hWX¬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`_).hXj™hchdheh„hg}rŸ(hi]hj]hk]hl]ho]uhqMhs]r (h|XOptionally, a number of r¡…r¢}r£(hWXOptionally, a number of hXjubhÂ)r¤}r¥(hWX*configuration flags*hg}r¦(hi]hj]hk]hl]ho]uhXjhs]r§h|Xconfiguration flagsr¨…r©}rª(hWUhXj¤ubahehÊubh|Xl can be declared. These can be used to enable or disable certain features of a package. (see the section on r«…r¬}r­(hWXl can be declared. These can be used to enable or disable certain features of a package. (see the section on hXjubjB)r®}r¯(hWX`configurations`_jEKhXjhejFhg}r°(UnameXconfigurationsr±hl]hk]hi]hj]ho]jHjÎuhs]r²h|Xconfigurationsr³…r´}rµ(hWUhXj®ubaubh|X).r¶…r·}r¸(hWX).hXjubeubaubh‘)r¹}rº(hWXfThe (optional) library section specifies the `library`_ properties and relevant `build information`_. hXjhchdheh”hg}r»(hi]hj]hk]hl]ho]uhqNhrhhs]r¼h€)r½}r¾(hWXeThe (optional) library section specifies the `library`_ properties and relevant `build information`_.hXj¹hchdheh„hg}r¿(hi]hj]hk]hl]ho]uhqM¡hs]rÀ(h|X-The (optional) library section specifies the rÁ…rÂ}rÃ(hWX-The (optional) library section specifies the hXj½ubjB)rÄ}rÅ(hWX `library`_jEKhXj½hejFhg}rÆ(UnameXlibraryrÇhl]hk]hi]hj]ho]jHUlibraryrÈuhs]rÉh|XlibraryrÊ…rË}rÌ(hWUhXjÄubaubh|X properties and relevant rÍ…rÎ}rÏ(hWX properties and relevant hXj½ubjB)rÐ}rÑ(hWX`build information`_jEKhXj½hejFhg}rÒ(UnameXbuild informationhl]hk]hi]hj]ho]jHjZuhs]rÓh|Xbuild informationrÔ…rÕ}rÖ(hWUhXjÐubaubh|X.…r×}rØ(hWX.hXj½ubeubaubh‘)rÙ}rÚ(hWX€Following is an arbitrary number of executable sections which describe an executable program and relevant `build information`_. hXjhchdheh”hg}rÛ(hi]hj]hk]hl]ho]uhqNhrhhs]rÜh€)rÝ}rÞ(hWXFollowing is an arbitrary number of executable sections which describe an executable program and relevant `build information`_.hXjÙhchdheh„hg}rß(hi]hj]hk]hl]ho]uhqM¤hs]rà(h|XjFollowing is an arbitrary number of executable sections which describe an executable program and relevant rá…râ}rã(hWXjFollowing is an arbitrary number of executable sections which describe an executable program and relevant hXjÝubjB)rä}rå(hWX`build information`_jEKhXjÝhejFhg}ræ(UnameXbuild informationhl]hk]hi]hj]ho]jHjZuhs]rçh|Xbuild informationrè…ré}rê(hWUhXjäubaubh|X.…rë}rì(hWX.hXjÝubeubaubeubh€)rí}rî(hWXEach section consists of a number of property descriptions in the form of field/value pairs, with a syntax roughly like mail message headers.rïhXh_hchdheh„hg}rð(hi]hj]hk]hl]ho]uhqM§hrhhs]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.rò…ró}rô(hWjïhcNhqNhrhhXjíubaubhŠ)rõ}rö(hWUhXh_hchdhehhg}r÷(hX-hl]hk]hi]hj]ho]uhqMªhrhhs]rø(h‘)rù}rú(hWXLCase is not significant in field names, but is significant in field values. hXjõhchdheh”hg}rû(hi]hj]hk]hl]ho]uhqNhrhhs]rüh€)rý}rþ(hWXKCase is not significant in field names, but is significant in field values.rÿhXjùhchdheh„hg}r(hi]hj]hk]hl]ho]uhqMªhs]rh|XKCase is not significant in field names, but is significant in field values.r…r}r(hWjÿhXjýubaubaubh‘)r}r(hWXLTo continue a field value, indent the next line relative to the field name. hXjõhchdheh”hg}r(hi]hj]hk]hl]ho]uhqNhrhhs]rh€)r }r (hWXKTo continue a field value, indent the next line relative to the field name.r hXjhchdheh„hg}r (hi]hj]hk]hl]ho]uhqM­hs]r h|XKTo continue a field value, indent the next line relative to the field name.r…r}r(hWj hXj ubaubaubh‘)r}r(hWXeField names may be indented, but all field values in the same section must use the same indentation. hXjõhchdheh”hg}r(hi]hj]hk]hl]ho]uhqNhrhhs]rh€)r}r(hWXdField names may be indented, but all field values in the same section must use the same indentation.rhXjhchdheh„hg}r(hi]hj]hk]hl]ho]uhqM°hs]rh|XdField names may be indented, but all field values in the same section must use the same indentation.r…r}r(hWjhXjubaubaubh‘)r}r(hWXhTabs are *not* allowed as indentation characters due to a missing standard interpretation of tab width. hXjõhchdheh”hg}r(hi]hj]hk]hl]ho]uhqNhrhhs]r h€)r!}r"(hWXgTabs are *not* allowed as indentation characters due to a missing standard interpretation of tab width.hXjhchdheh„hg}r#(hi]hj]hk]hl]ho]uhqM³hs]r$(h|X Tabs are r%…r&}r'(hWX Tabs are hXj!ubhÂ)r(}r)(hWX*not*hg}r*(hi]hj]hk]hl]ho]uhXj!hs]r+h|Xnotr,…r-}r.(hWUhXj(ubahehÊubh|XY allowed as indentation characters due to a missing standard interpretation of tab width.r/…r0}r1(hWXY allowed as indentation characters due to a missing standard interpretation of tab width.hXj!ubeubaubh‘)r2}r3(hWX>To get a blank line in a field value, use an indented "``.``" hXjõhchdheh”hg}r4(hi]hj]hk]hl]ho]uhqNhrhhs]r5h€)r6}r7(hWX=To get a blank line in a field value, use an indented "``.``"hXj2hchdheh„hg}r8(hi]hj]hk]hl]ho]uhqM¶hs]r9(h|X9To get a blank line in a field value, use an indented “r:…r;}r<(hWX7To get a blank line in a field value, use an indented "hXj6ubhâ)r=}r>(hWX``.``hg}r?(hi]hj]hk]hl]ho]uhXj6hs]r@h|X.…rA}rB(hWUhXj=ubahehêubh|X rC}rD(hWX"hXj6ubeubaubeubh€)rE}rF(hWXBThe syntax of the value depends on the field. Field types include:rGhXh_hchdheh„hg}rH(hi]hj]hk]hl]ho]uhqM¸hrhhs]rIh|XBThe syntax of the value depends on the field. Field types include:rJ…rK}rL(hWjGhcNhqNhrhhXjEubaubj)rM}rN(hWUhXh_hchdhejhg}rO(hi]hj]hk]hl]ho]uhqNhrhhs]rP(j)rQ}rR(hWXk*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.hXjMhchdhejhg}rS(hi]hj]hk]hl]ho]uhqM¿hs]rT(j)rU}rV(hWX *token*, *filename*, *directory*rWhXjQhchdhej#hg}rX(hi]hj]hk]hl]ho]uhqM¿hs]rY(hÂ)rZ}r[(hWX*token*hg}r\(hi]hj]hk]hl]ho]uhXjUhs]r]h|Xtokenr^…r_}r`(hWUhXjZubahehÊubh|X, ra…rb}rc(hWX, rdhXjUubhÂ)re}rf(hWX *filename*hg}rg(hi]hj]hk]hl]ho]uhXjUhs]rhh|Xfilenameri…rj}rk(hWUhXjeubahehÊubh|X, rl…rm}rn(hWjdhXjUubhÂ)ro}rp(hWX *directory*hg}rq(hi]hj]hk]hl]ho]uhXjUhs]rrh|X directoryrs…rt}ru(hWUhXjoubahehÊubeubj6)rv}rw(hWUhg}rx(hi]hj]hk]hl]ho]uhXjQhs]ryh€)rz}r{(hWXJEither 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.hXjvhchdheh„hg}r|(hi]hj]hk]hl]ho]uhqM»hs]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: r~…r}r€(hWX¯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: hXjzubhâ)r}r‚(hWX-``ghc-options: -Wall "-with-rtsopts=-T -I1"``hg}rƒ(hi]hj]hk]hl]ho]uhXjzhs]r„h|X)ghc-options: -Wall "-with-rtsopts=-T -I1"r……r†}r‡(hWUhXjubahehêubh|Xn. Unless otherwise stated, relative filenames and directories are interpreted from the package root directory.rˆ…r‰}rŠ(hWXn. Unless otherwise stated, relative filenames and directories are interpreted from the package root directory.hXjzubeubahejPubeubj)r‹}rŒ(hWX@*freeform*, *URL*, *address* An arbitrary, uninterpreted string.hXjMhchdhejhg}r(hi]hj]hk]hl]ho]uhqMÁhrhhs]rŽ(j)r}r(hWX*freeform*, *URL*, *address*r‘hXj‹hchdhej#hg}r’(hi]hj]hk]hl]ho]uhqMÁhs]r“(hÂ)r”}r•(hWX *freeform*hg}r–(hi]hj]hk]hl]ho]uhXjhs]r—h|Xfreeformr˜…r™}rš(hWUhXj”ubahehÊubh|X, r›…rœ}r(hWX, ržhXjubhÂ)rŸ}r (hWX*URL*hg}r¡(hi]hj]hk]hl]ho]uhXjhs]r¢h|XURLr£…r¤}r¥(hWUhXjŸubahehÊubh|X, r¦…r§}r¨(hWjžhXjubhÂ)r©}rª(hWX *address*hg}r«(hi]hj]hk]hl]ho]uhXjhs]r¬h|Xaddressr­…r®}r¯(hWUhXj©ubahehÊubeubj6)r°}r±(hWUhg}r²(hi]hj]hk]hl]ho]uhXj‹hs]r³h€)r´}rµ(hWX#An arbitrary, uninterpreted string.r¶hXj°hchdheh„hg}r·(hi]hj]hk]hl]ho]uhqMÂhs]r¸h|X#An arbitrary, uninterpreted string.r¹…rº}r»(hWj¶hXj´ubaubahejPubeubj)r¼}r½(hWXL*identifier* A letter followed by zero or more alphanumerics or underscores.hXjMhchdhejhg}r¾(hi]hj]hk]hl]ho]uhqMÃhrhhs]r¿(j)rÀ}rÁ(hWX *identifier*rÂhXj¼hchdhej#hg}rÃ(hi]hj]hk]hl]ho]uhqMÃhs]rÄhÂ)rÅ}rÆ(hWjÂhg}rÇ(hi]hj]hk]hl]ho]uhXjÀhs]rÈh|X identifierrÉ…rÊ}rË(hWUhXjÅubahehÊubaubj6)rÌ}rÍ(hWUhg}rÎ(hi]hj]hk]hl]ho]uhXj¼hs]rÏh€)rÐ}rÑ(hWX?A letter followed by zero or more alphanumerics or underscores.rÒhXjÌhchdheh„hg}rÓ(hi]hj]hk]hl]ho]uhqMÄhs]rÔh|X?A letter followed by zero or more alphanumerics or underscores.rÕ…rÖ}r×(hWjÒhXjÐubaubahejPubeubj)rØ}rÙ(hWX¢*compiler* A compiler flavor (one of: ``GHC``, ``JHC``, ``UHC`` or ``LHC``) followed by a version range. For example, ``GHC ==6.10.3``, or ``LHC >=0.6 && <0.8``. hXjMhchdhejhg}rÚ(hi]hj]hk]hl]ho]uhqMÈhrhhs]rÛ(j)rÜ}rÝ(hWX *compiler*rÞhXjØhchdhej#hg}rß(hi]hj]hk]hl]ho]uhqMÈhs]ràhÂ)rá}râ(hWjÞhg}rã(hi]hj]hk]hl]ho]uhXjÜhs]räh|Xcompilerrå…ræ}rç(hWUhXjáubahehÊubaubj6)rè}ré(hWUhg}rê(hi]hj]hk]hl]ho]uhXjØhs]rëh€)rì}rí(hWX–A compiler flavor (one of: ``GHC``, ``JHC``, ``UHC`` or ``LHC``) followed by a version range. For example, ``GHC ==6.10.3``, or ``LHC >=0.6 && <0.8``.hXjèhchdheh„hg}rî(hi]hj]hk]hl]ho]uhqMÆhs]rï(h|XA compiler flavor (one of: rð…rñ}rò(hWXA compiler flavor (one of: hXjìubhâ)ró}rô(hWX``GHC``hg}rõ(hi]hj]hk]hl]ho]uhXjìhs]röh|XGHCr÷…rø}rù(hWUhXjóubahehêubh|X, rú…rû}rü(hWX, rýhXjìubhâ)rþ}rÿ(hWX``JHC``hg}r(hi]hj]hk]hl]ho]uhXjìhs]rh|XJHCr…r}r(hWUhXjþubahehêubh|X, r…r}r(hWjýhXjìubhâ)r}r (hWX``UHC``hg}r (hi]hj]hk]hl]ho]uhXjìhs]r h|XUHCr …r }r(hWUhXjubahehêubh|X or r…r}r(hWX or hXjìubhâ)r}r(hWX``LHC``hg}r(hi]hj]hk]hl]ho]uhXjìhs]rh|XLHCr…r}r(hWUhXjubahehêubh|X,) followed by a version range. For example, r…r}r(hWX,) followed by a version range. For example, hXjìubhâ)r}r(hWX``GHC ==6.10.3``hg}r(hi]hj]hk]hl]ho]uhXjìhs]rh|X GHC ==6.10.3r …r!}r"(hWUhXjubahehêubh|X, or r#…r$}r%(hWX, or hXjìubhâ)r&}r'(hWX``LHC >=0.6 && <0.8``hg}r((hi]hj]hk]hl]ho]uhXjìhs]r)h|XLHC >=0.6 && <0.8r*…r+}r,(hWUhXj&ubahehêubh|X.…r-}r.(hWX.hXjìubeubahejPubeubeubhY)r/}r0(hWUhXh_hchdhehfhg}r1(hi]hj]hk]hl]r2Umodules-and-preprocessorsr3aho]r4h}r?(hWX<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:hXj/hchdheh„hg}r@(hi]hj]hk]hl]ho]uhqMÍhrhhs]rA(h|X#Haskell module names listed in the rB…rC}rD(hWX#Haskell module names listed in the hcNhqNhrhhXj>ubjn)rE}rF(hWX$:pkg-field:`library:exposed-modules`rGhXj>hchdhejrhg}rH(UreftypeX pkg-fieldjtˆjuXexposed-modulesU refdomainXcabalrIhl]hk]U refexplicit‰hi]hj]ho]jwjxjŽXlibraryuhqMÍhs]rJhâ)rK}rL(hWjGhg}rM(hi]hj]rN(jjIXcabal-pkg-fieldrOehk]hl]ho]uhXjEhs]rPh|Xlibrary:exposed-modulesrQ…rR}rS(hWUhXjKubahehêubaubh|X and rT…rU}rV(hWX and hcNhqNhrhhXj>ubjn)rW}rX(hWX":pkg-field:`library:other-modules`rYhXj>hchdhejrhg}rZ(UreftypeX pkg-fieldjtˆjuX other-modulesU refdomainXcabalr[hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽXlibraryuhqMÍhs]r\hâ)r]}r^(hWjYhg}r_(hi]hj]r`(jj[Xcabal-pkg-fieldraehk]hl]ho]uhXjWhs]rbh|Xlibrary:other-modulesrc…rd}re(hWUhXj]ubahehêubaubh|XM fields may correspond to Haskell source files, i.e. with names ending in “rf…rg}rh(hWXK fields may correspond to Haskell source files, i.e. with names ending in "hcNhqNhrhhXj>ubhâ)ri}rj(hWX``.hs``hg}rk(hi]hj]hk]hl]ho]uhXj>hs]rlh|X.hsrm…rn}ro(hWUhXjiubahehêubh|X †or “rp…rq}rr(hWX" or "hcNhqNhrhhXj>ubhâ)rs}rt(hWX``.lhs``hg}ru(hi]hj]hk]hl]ho]uhXj>hs]rvh|X.lhsrw…rx}ry(hWUhXjsubahehêubh|Xpâ€, or to inputs for various Haskell preprocessors. The simple build infrastructure understands the extensions:rz…r{}r|(hWXn", or to inputs for various Haskell preprocessors. The simple build infrastructure understands the extensions:hcNhqNhrhhXj>ubeubhŠ)r}}r~(hWUhXj/hchdhehhg}r(hX-hl]hk]hi]hj]ho]uhqMÓhrhhs]r€(h‘)r}r‚(hWX"``.gc`` (:hackage-pkg:`greencard`)rƒhXj}hchdheh”hg}r„(hi]hj]hk]hl]ho]uhqNhrhhs]r…h€)r†}r‡(hWjƒhXjhchdheh„hg}rˆ(hi]hj]hk]hl]ho]uhqMÓhs]r‰(hâ)rŠ}r‹(hWX``.gc``hg}rŒ(hi]hj]hk]hl]ho]uhXj†hs]rh|X.gcrŽ…r}r(hWUhXjŠubahehêubh|X (r‘…r’}r“(hWX (hXj†ubjB)r”}r•(hWX greencardhg}r–(UrefuriX,http://hackage.haskell.org/package/greencardhl]hk]hi]hj]ho]Uinternal‰uhXj†hs]r—h|X greencardr˜…r™}rš(hWUhXj”ubahejFubh|X)…r›}rœ(hWX)hXj†ubeubaubh‘)r}rž(hWX``.chs`` (:hackage-pkg:`c2hs`)rŸhXj}hchdheh”hg}r (hi]hj]hk]hl]ho]uhqNhrhhs]r¡h€)r¢}r£(hWjŸhXjhchdheh„hg}r¤(hi]hj]hk]hl]ho]uhqMÔhs]r¥(hâ)r¦}r§(hWX``.chs``hg}r¨(hi]hj]hk]hl]ho]uhXj¢hs]r©h|X.chsrª…r«}r¬(hWUhXj¦ubahehêubh|X (r­…r®}r¯(hWX (hXj¢ubjB)r°}r±(hWXc2hshg}r²(UrefuriX'http://hackage.haskell.org/package/c2hshl]hk]hi]hj]ho]Uinternal‰uhXj¢hs]r³h|Xc2hsr´…rµ}r¶(hWUhXj°ubahejFubh|X)…r·}r¸(hWX)hXj¢ubeubaubh‘)r¹}rº(hWX ``.hsc`` (:hackage-pkg:`hsc2hs`)r»hXj}hchdheh”hg}r¼(hi]hj]hk]hl]ho]uhqNhrhhs]r½h€)r¾}r¿(hWj»hXj¹hchdheh„hg}rÀ(hi]hj]hk]hl]ho]uhqMÕhs]rÁ(hâ)rÂ}rÃ(hWX``.hsc``hg}rÄ(hi]hj]hk]hl]ho]uhXj¾hs]rÅh|X.hscrÆ…rÇ}rÈ(hWUhXjÂubahehêubh|X (rÉ…rÊ}rË(hWX (hXj¾ubjB)rÌ}rÍ(hWXhsc2hshg}rÎ(UrefuriX)http://hackage.haskell.org/package/hsc2hshl]hk]hi]hj]ho]Uinternal‰uhXj¾hs]rÏh|Xhsc2hsrÐ…rÑ}rÒ(hWUhXjÌubahejFubh|X)…rÓ}rÔ(hWX)hXj¾ubeubaubh‘)rÕ}rÖ(hWX``.y`` and ``.ly`` (happy_)r×hXj}hchdheh”hg}rØ(hi]hj]hk]hl]ho]uhqNhrhhs]rÙh€)rÚ}rÛ(hWj×hXjÕhchdheh„hg}rÜ(hi]hj]hk]hl]ho]uhqMÖhs]rÝ(hâ)rÞ}rß(hWX``.y``hg}rà(hi]hj]hk]hl]ho]uhXjÚhs]ráh|X.yrâ…rã}rä(hWUhXjÞubahehêubh|X and rå…ræ}rç(hWX and hXjÚubhâ)rè}ré(hWX``.ly``hg}rê(hi]hj]hk]hl]ho]uhXjÚhs]rëh|X.lyrì…rí}rî(hWUhXjèubahehêubh|X (rï…rð}rñ(hWX (hXjÚubjB)rò}ró(hWXhappy_jEKhXjÚhejFhg}rô(UnameXhappyrõjj+hl]hk]hi]hj]ho]uhs]röh|Xhappyr÷…rø}rù(hWUhXjòubaubh|X)…rú}rû(hWX)hXjÚubeubaubh‘)rü}rý(hWX``.x`` (alex_)rþhXj}hchdheh”hg}rÿ(hi]hj]hk]hl]ho]uhqNhrhhs]rh€)r}r(hWjþhXjühchdheh„hg}r(hi]hj]hk]hl]ho]uhqM×hs]r(hâ)r}r(hWX``.x``hg}r(hi]hj]hk]hl]ho]uhXjhs]rh|X.xr …r }r (hWUhXjubahehêubh|X (r …r }r(hWX (hXjubjB)r}r(hWXalex_jEKhXjhejFhg}r(UnameXalexrjj$hl]hk]hi]hj]ho]uhs]rh|Xalexr…r}r(hWUhXjubaubh|X)…r}r(hWX)hXjubeubaubh‘)r}r(hWX``.cpphs`` (cpphs_) hXj}hchdheh”hg}r(hi]hj]hk]hl]ho]uhqNhrhhs]rh€)r}r(hWX``.cpphs`` (cpphs_)hXjhchdheh„hg}r(hi]hj]hk]hl]ho]uhqMØhs]r (hâ)r!}r"(hWX ``.cpphs``hg}r#(hi]hj]hk]hl]ho]uhXjhs]r$h|X.cpphsr%…r&}r'(hWUhXj!ubahehêubh|X (r(…r)}r*(hWX (hXjubjB)r+}r,(hWXcpphs_jEKhXjhejFhg}r-(UnameXcpphsr.jj>hl]hk]hi]hj]ho]uhs]r/h|Xcpphsr0…r1}r2(hWUhXj+ubaubh|X)…r3}r4(hWX)hXjubeubaubeubh€)r5}r6(hWXØ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.hXj/hchdheh„hg}r7(hi]hj]hk]hl]ho]uhqMÚhrhhs]r8(h|X}When building, Cabal will automatically run the appropriate preprocessor and compile the Haskell module it produces. For the r9…r:}r;(hWX}When building, Cabal will automatically run the appropriate preprocessor and compile the Haskell module it produces. For the hcNhqNhrhhXj5ubhâ)r<}r=(hWX``c2hs``hg}r>(hi]hj]hk]hl]ho]uhXj5hs]r?h|Xc2hsr@…rA}rB(hWUhXj<ubahehêubh|X and rC…rD}rE(hWX and hcNhqNhrhhXj5ubhâ)rF}rG(hWX ``hsc2hs``hg}rH(hi]hj]hk]hl]ho]uhXj5hs]rIh|Xhsc2hsrJ…rK}rL(hWUhXjFubahehêubh|X} preprocessors, Cabal will also automatically add, compile and link any C sources generated by the preprocessor (produced by rM…rN}rO(hWX} preprocessors, Cabal will also automatically add, compile and link any C sources generated by the preprocessor (produced by hcNhqNhrhhXj5ubhâ)rP}rQ(hWX ``hsc2hs``hg}rR(hi]hj]hk]hl]ho]uhXj5hs]rSh|Xhsc2hsrT…rU}rV(hWUhXjPubahehêubh|X’s rW…rX}rY(hWX's hcNhqNhrhhXj5ubhâ)rZ}r[(hWX``#def``hg}r\(hi]hj]hk]hl]ho]uhXj5hs]r]h|X#defr^…r_}r`(hWUhXjZubahehêubh|X feature or ra…rb}rc(hWX feature or hcNhqNhrhhXj5ubhâ)rd}re(hWX``c2hs``hg}rf(hi]hj]hk]hl]ho]uhXj5hs]rgh|Xc2hsrh…ri}rj(hWUhXjdubahehêubh|X]’s auto-generated wrapper functions). Dependencies on pre-processors are specified via the rk…rl}rm(hWX['s auto-generated wrapper functions). Dependencies on pre-processors are specified via the hcNhqNhrhhXj5ubjn)rn}ro(hWX:pkg-field:`build-tools`rphXj5hchdhejrhg}rq(UreftypeX pkg-fieldjtˆjuX build-toolsU refdomainXcabalrrhl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqMÚhs]rshâ)rt}ru(hWjphg}rv(hi]hj]rw(jjrXcabal-pkg-fieldrxehk]hl]ho]uhXjnhs]ryh|X build-toolsrz…r{}r|(hWUhXjtubahehêubaubh|X or r}…r~}r(hWX or hcNhqNhrhhXj5ubjn)r€}r(hWX:pkg-field:`build-tool-depends`r‚hXj5hchdhejrhg}rƒ(UreftypeX pkg-fieldjtˆjuXbuild-tool-dependsU refdomainXcabalr„hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqMÚhs]r…hâ)r†}r‡(hWj‚hg}rˆ(hi]hj]r‰(jj„Xcabal-pkg-fieldrŠehk]hl]ho]uhXj€hs]r‹h|Xbuild-tool-dependsrŒ…r}rŽ(hWUhXj†ubahehêubaubh|X fields.r…r}r‘(hWX fields.hcNhqNhrhhXj5ubeubh€)r’}r“(hWXœ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.hXj/hchdheh„hg}r”(hi]hj]hk]hl]ho]uhqMâhrhhs]r•(h|X[Some fields take lists of values, which are optionally separated by commas, except for the r–…r—}r˜(hWX[Some fields take lists of values, which are optionally separated by commas, except for the hcNhqNhrhhXj’ubjn)r™}rš(hWX:pkg-field:`build-depends`r›hXj’hchdhejrhg}rœ(UreftypeX pkg-fieldjtˆjuX build-dependsU refdomainXcabalrhl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqMâhs]ržhâ)rŸ}r (hWj›hg}r¡(hi]hj]r¢(jjXcabal-pkg-fieldr£ehk]hl]ho]uhXj™hs]r¤h|X build-dependsr¥…r¦}r§(hWUhXjŸubahehêubaubh|X' field, where the commas are mandatory.r¨…r©}rª(hWX' field, where the commas are mandatory.hcNhqNhrhhXj’ubeubh€)r«}r¬(hWXvSome fields are marked as required. All others are optional, and unless otherwise specified have empty default values.r­hXj/hchdheh„hg}r®(hi]hj]hk]hl]ho]uhqMæhrhhs]r¯h|XvSome fields are marked as required. All others are optional, and unless otherwise specified have empty default values.r°…r±}r²(hWj­hcNhqNhrhhXj«ubaubeubhY)r³}r´(hWUh\KhXh_hchdhehfhg}rµ(hi]hj]hk]hl]r¶j‘aho]r·h0auhqMêhrhhs]r¸(hu)r¹}rº(hWXPackage propertiesr»hXj³hchdhehyhg}r¼(hi]hj]hk]hl]ho]uhqMêhrhhs]r½h|XPackage propertiesr¾…r¿}rÀ(hWj»hcNhqNhrhhXj¹ubaubh€)rÁ}rÂ(hWXeThese fields may occur in the first top-level properties section and describe the package as a whole:rÃhXj³hchdheh„hg}rÄ(hi]hj]hk]hl]ho]uhqMìhrhhs]rÅh|XeThese fields may occur in the first top-level properties section and describe the package as a whole:rÆ…rÇ}rÈ(hWjÃhcNhqNhrhhXjÁubaubjü)rÉ}rÊ(hWUhXj³hcNhejÿhg}rË(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rÌ}rÍ(hWUhXj³hcNhejhg}rÎ(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrÏj jÏuhqNhrhhs]rÐ(j )rÑ}rÒ(hWXname: package-name (required)hXjÌhchdhejhg}rÓ(hl]rÔXpkg-field-namerÕahk]hi]hj]ho]j‰uhqM hrhhs]rÖ(jü)r×}rØ(hWUhXjÑhchdhejÿhg}rÙ(hl]hk]hi]hj]ho]Uentries]rÚ(jXname; package.cabal fieldjÕUNtrÛauhqM hrhhs]ubj)rÜ}rÝ(hWXnamerÞhXjÑhchdhejhg}rß(jÔjÕhl]hk]hi]hj]ho]uhqM hrhhs]ràh|Xnamerá…râ}rã(hWUhcNhqNhrhhXjÜubaubj%)rä}rå(hWjžhXjÑhchdhej(hg}ræ(jÔjÕhl]hk]hi]hj]ho]uhqM hrhhs]rçh|X: rè…ré}rê(hWUhcNhqNhrhhXjäubaubj¤)rë}rì(hWXpackage-name (required)hXjÑhchdhej§hg}rí(jÔjÕhl]hk]hi]hj]ho]uhqM hrhhs]rîh|Xpackage-name (required)rï…rð}rñ(hWUhcNhqNhrhhXjëubaubeubj-)rò}ró(hWUhXjÌhchdhej0hg}rô(hi]hj]hk]hl]ho]uhqM hrhhs]rõ(h€)rö}r÷(hWX;The unique name of the package, without the version number.røhXjòhchdheh„hg}rù(hi]hj]hk]hl]ho]uhqMñhrhhs]rúh|X;The unique name of the package, without the version number.rû…rü}rý(hWjøhcNhqNhrhhXjöubaubh€)rþ}rÿ(hWXÁ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`.hXjòhchdheh„hg}r(hi]hj]hk]hl]ho]uhqMóhrhhs]r(h|X!As pointed out in the section on r…r}r(hWX!As pointed out in the section on hcNhqNhrhhXjþubjB)r}r(hWX`package descriptions`_jEKhXjþhejFhg}r(UnameXpackage descriptionshl]hk]hi]hj]ho]jHjIuhs]rh|Xpackage descriptionsr …r }r (hWUhXjubaubh|Xn, some tools require the package-name specified for this field to match the package description’s file-name r …r }r(hWXl, some tools require the package-name specified for this field to match the package description's file-name hcNhqNhrhhXjþubhâ)r}r(hWXpackage-name.cabalhg}r(hl]hk]hi]hj]rXfileraUrolejho]uhXjþhs]r(hÂ)r}r(hWX package-namehg}r(hi]hj]hk]hl]ho]uhXjhs]rh|X package-namer…r}r(hWUhXjubahehÊubh|X.cabalr…r}r(hWX.cabalhXjubehehêubh|X.…r}r (hWX.hcNhqNhrhhXjþubeubh€)r!}r"(hWXPackage 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:]]*)*``.hXjòhchdheh„hg}r#(hi]hj]hk]hl]ho]uhqM÷hrhhs]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): r%…r&}r'(hWX±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): hcNhqNhrhhXj!ubhâ)r(}r)(hWXN``[[:digit:]]*[[:alpha:]][[:alnum:]]*(-[[:digit:]]*[[:alpha:]][[:alnum:]]*)*``hg}r*(hi]hj]hk]hl]ho]uhXj!hs]r+h|XJ[[:digit:]]*[[:alpha:]][[:alnum:]]*(-[[:digit:]]*[[:alpha:]][[:alnum:]]*)*r,…r-}r.(hWUhXj(ubahehêubh|X.…r/}r0(hWX.hcNhqNhrhhXj!ubeubh€)r1}r2(hWXOr, expressed in ABNF_:hXjòhchdheh„hg}r3(hi]hj]hk]hl]ho]uhqMührhhs]r4(h|XOr, expressed in r5…r6}r7(hWXOr, expressed in hcNhqNhrhhXj1ubjB)r8}r9(hWXABNF_jEKhXj1hejFhg}r:(UnameXABNFjjEhl]hk]hi]hj]ho]uhs]r;h|XABNFr<…r=}r>(hWUhXj8ubaubh|X:…r?}r@(hWX:hcNhqNhrhhXj1ubeubjÏ)rA}rB(hWX¶package-name = package-name-part *("-" package-name-part) package-name-part = *DIGIT UALPHA *UALNUM UALNUM = UALPHA / DIGIT UALPHA = ... ; set of alphabetic Unicode code-pointshXjòhchdhejÒhg}rC(j‰jXabnfjÔjÕhl]hk]hi]j}hj]ho]uhqMþhrhhs]rDh|X¶package-name = package-name-part *("-" package-name-part) package-name-part = *DIGIT UALPHA *UALNUM UALNUM = UALPHA / DIGIT UALPHA = ... ; set of alphabetic Unicode code-pointsrE…rF}rG(hWUhXjAubaubhî)rH}rI(hWX4Hackage restricts package names to the ASCII subset.rJhXjòhchdhehñhg}rK(hi]hj]hk]hl]ho]uhqNhrhhs]rLh€)rM}rN(hWjJhXjHhchdheh„hg}rO(hi]hj]hk]hl]ho]uhqMhs]rPh|X4Hackage restricts package names to the ASCII subset.rQ…rR}rS(hWjJhXjMubaubaubeubeubjü)rT}rU(hWUhXj³hcNhejÿhg}rV(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rW}rX(hWUhXj³hcNhejhg}rY(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrZj jZuhqNhrhhs]r[(j )r\}r](hWXversion: numbers (required)hXjWhchdhejhg}r^(hl]r_Xpkg-field-versionr`ahk]hi]hj]ho]j‰uhqMhrhhs]ra(jü)rb}rc(hWUhXj\hchdhejÿhg}rd(hl]hk]hi]hj]ho]Uentries]re(jXversion; package.cabal fieldj`UNtrfauhqMhrhhs]ubj)rg}rh(hWXversionrihXj\hchdhejhg}rj(jÔjÕhl]hk]hi]hj]ho]uhqMhrhhs]rkh|Xversionrl…rm}rn(hWUhcNhqNhrhhXjgubaubj%)ro}rp(hWjžhXj\hchdhej(hg}rq(jÔjÕhl]hk]hi]hj]ho]uhqMhrhhs]rrh|X: rs…rt}ru(hWUhcNhqNhrhhXjoubaubj¤)rv}rw(hWXnumbers (required)hXj\hchdhej§hg}rx(jÔjÕhl]hk]hi]hj]ho]uhqMhrhhs]ryh|Xnumbers (required)rz…r{}r|(hWUhcNhqNhrhhXjvubaubeubj-)r}}r~(hWUhXjWhchdhej0hg}r(hi]hj]hk]hl]ho]uhqMhrhhs]r€(h€)r}r‚(hWX¯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_:hXj}hchdheh„hg}rƒ(hi]hj]hk]hl]ho]uhqM hrhhs]r„(h|X‚The package version number, usually consisting of a sequence of natural numbers separated by dots, i.e. as the regular expression r……r†}r‡(hWX‚The package version number, usually consisting of a sequence of natural numbers separated by dots, i.e. as the regular expression hcNhqNhrhhXjubhâ)rˆ}r‰(hWX``[0-9]+([.][0-9]+)*``hg}rŠ(hi]hj]hk]hl]ho]uhXjhs]r‹h|X[0-9]+([.][0-9]+)*rŒ…r}rŽ(hWUhXjˆubahehêubh|X or expressed in r…r}r‘(hWX or expressed in hcNhqNhrhhXjubjB)r’}r“(hWXABNF_jEKhXjhejFhg}r”(UnameXABNFjjEhl]hk]hi]hj]ho]uhs]r•h|XABNFr–…r—}r˜(hWUhXj’ubaubh|X:…r™}rš(hWX:hcNhqNhrhhXjubeubjÏ)r›}rœ(hWX(package-version = 1*DIGIT *("." 1*DIGIT)hXj}hchdhejÒhg}r(j‰jXabnfjÔjÕhl]hk]hi]j}hj]ho]uhqMhrhhs]ržh|X(package-version = 1*DIGIT *("." 1*DIGIT)rŸ…r }r¡(hWUhXj›ubaubeubeubjü)r¢}r£(hWUhXj³hchdhejÿhg}r¤(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r¥}r¦(hWUhXj³hchdhejhg}r§(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr¨j j¨uhqNhrhhs]r©(j )rª}r«(hWXcabal-version: >= x.yhXj¥hchdhejhg}r¬(hl]r­Xpkg-field-cabal-versionr®ahk]hi]hj]ho]j‰uhqM6hrhhs]r¯(jü)r°}r±(hWUhXjªhchdhejÿhg}r²(hl]hk]hi]hj]ho]Uentries]r³(jX"cabal-version; package.cabal fieldj®UNtr´auhqM6hrhhs]ubj)rµ}r¶(hWX cabal-versionr·hXjªhchdhejhg}r¸(jÔjÕhl]hk]hi]hj]ho]uhqM6hrhhs]r¹h|X cabal-versionrº…r»}r¼(hWUhcNhqNhrhhXjµubaubj%)r½}r¾(hWjžhXjªhchdhej(hg}r¿(jÔjÕhl]hk]hi]hj]ho]uhqM6hrhhs]rÀh|X: rÁ…rÂ}rÃ(hWUhcNhqNhrhhXj½ubaubj¤)rÄ}rÅ(hWX>= x.yhXjªhchdhej§hg}rÆ(jÔjÕhl]hk]hi]hj]ho]uhqM6hrhhs]rÇh|X>= x.yrÈ…rÉ}rÊ(hWUhcNhqNhrhhXjÄubaubeubj-)rË}rÌ(hWUhXj¥hchdhej0hg}rÍ(hi]hj]hk]hl]ho]uhqM6hrhhs]rÎ(h€)rÏ}rÐ(hWXsThe version of the Cabal specification that this package description uses. The Cabal specification does slowly evolve, introducing new features and occasionally changing the meaning of existing features. By specifying which version of the spec you are using it enables programs which process the package description to know what syntax to expect and what each part means.rÑhXjËhchdheh„hg}rÒ(hi]hj]hk]hl]ho]uhqMhrhhs]rÓh|XsThe version of the Cabal specification that this package description uses. The Cabal specification does slowly evolve, introducing new features and occasionally changing the meaning of existing features. By specifying which version of the spec 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Ö(hWjÑhcNhqNhrhhXjÏubaubh€)r×}rØ(hWXFor historical reasons this is always expressed using *>=* version range syntax. No other kinds of version range make sense, in particular upper bounds do not make sense. In future this field will specify just a version number, rather than a version range.hXjËhchdheh„hg}rÙ(hi]hj]hk]hl]ho]uhqMhrhhs]rÚ(h|X6For historical reasons this is always expressed using rÛ…rÜ}rÝ(hWX6For historical reasons this is always expressed using hcNhqNhrhhXj×ubhÂ)rÞ}rß(hWX*>=*hg}rà(hi]hj]hk]hl]ho]uhXj×hs]ráh|X>=râ…rã}rä(hWUhXjÞubahehÊubh|XÆ version range syntax. No other kinds of version range make sense, in particular upper bounds do not make sense. In future this field will specify just a version number, rather than a version range.rå…ræ}rç(hWXÆ version range syntax. No other kinds of version range make sense, in particular upper bounds do not make sense. In future this field will specify just a version number, rather than a version range.hcNhqNhrhhXj×ubeubh€)rè}ré(hWXThe version number you specify will affect both compatibility and behaviour. Most tools (including the Cabal library and 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. Most of the time, tools that are too old will recognise this fact and produce a suitable error message.rêhXjËhchdheh„hg}rë(hi]hj]hk]hl]ho]uhqM"hrhhs]rìh|XThe version number you specify will affect both compatibility and behaviour. Most tools (including the Cabal library and 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. Most of the time, tools that are too old will recognise this fact and produce a suitable error message.rí…rî}rï(hWjêhcNhqNhrhhXjèubaubh€)rð}rñ(hWXDAs for behaviour, new versions of the Cabal spec 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òhXjËhchdheh„hg}ró(hi]hj]hk]hl]ho]uhqM)hrhhs]rôh|XDAs for behaviour, new versions of the Cabal spec 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÷(hWjòhcNhqNhrhhXjðubaubh€)rø}rù(hWX®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.hXjËhchdheh„hg}rú(hi]hj]hk]hl]ho]uhqM/hrhhs]rû(h|XgIn particular, the syntax of package descriptions changed significantly with Cabal version 1.2 and the rü…rý}rþ(hWXgIn particular, the syntax of package descriptions changed significantly with Cabal version 1.2 and the hcNhqNhrhhXjøubjn)rÿ}r(hWX:pkg-field:`cabal-version`rhXjøhchdhejrhg}r(UreftypeX pkg-fieldjtˆjuX cabal-versionU refdomainXcabalrhl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqM/hs]rhâ)r}r(hWjhg}r(hi]hj]r(jjXcabal-pkg-fieldr ehk]hl]ho]uhXjÿhs]r h|X cabal-versionr …r }r (hWUhXjubahehêubaubh|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.r…r}r(hWX- 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.hcNhqNhrhhXjøubeubeubeubjü)r}r(hWUhXj³hchdhejÿhg}r(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r}r(hWUhXj³hchdhejhg}r(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrj juhqNhrhhs]r(j )r}r(hWXbuild-type: identifierhXjhchdhejhg}r(hl]rXpkg-field-build-typerahk]hi]hj]ho]j‰uhqMkhrhhs]r(jü)r}r (hWUhXjhchdhejÿhg}r!(hl]hk]hi]hj]ho]Uentries]r"(jXbuild-type; package.cabal fieldjUNtr#auhqMkhrhhs]ubj)r$}r%(hWX build-typer&hXjhchdhejhg}r'(jÔjÕhl]hk]hi]hj]ho]uhqMkhrhhs]r(h|X build-typer)…r*}r+(hWUhcNhqNhrhhXj$ubaubj%)r,}r-(hWjžhXjhchdhej(hg}r.(jÔjÕhl]hk]hi]hj]ho]uhqMkhrhhs]r/h|X: r0…r1}r2(hWUhcNhqNhrhhXj,ubaubj¤)r3}r4(hWX identifierhXjhchdhej§hg}r5(jÔjÕhl]hk]hi]hj]ho]uhqMkhrhhs]r6h|X identifierr7…r8}r9(hWUhcNhqNhrhhXj3ubaubeubj-)r:}r;(hWUhXjhchdhej0hg}r<(hi]hj]hk]hl]ho]uhqMkhrhhs]r=(j3)r>}r?(hWUhXj:hchdhej6hg}r@(hi]hj]hk]hl]ho]uhqNhrhhs]rAj9)rB}rC(hWUhg}rD(hi]hj]hk]hl]ho]uhXj>hs]rE(j?)rF}rG(hWX Default valuehXjBhchdhejChg}rH(hi]hj]hk]hl]ho]uhqKhs]rIh|X Default valuerJ…rK}rL(hWUhXjFubaubjI)rM}rN(hWUhg}rO(hi]hj]hk]hl]ho]uhXjBhs]rPh€)rQ}rR(hWXCustom or Simplehg}rS(hi]hj]hk]hl]ho]uhXjMhs]rT(hâ)rU}rV(hWX ``Custom``hXjQhchdhehêhg}rW(hi]hj]hk]hl]ho]uhqNhrhhs]rXh|XCustomrY…rZ}r[(hWUhcNhqNhrhhXjUubaubh|X or r\…r]}r^(hWX or hcNhqNhrhhXjQubhâ)r_}r`(hWX ``Simple``hXjQhchdhehêhg}ra(hi]hj]hk]hl]ho]uhqNhrhhs]rbh|XSimplerc…rd}re(hWUhcNhqNhrhhXj_ubaubeheh„ubahejVubehej<ubaubh€)rf}rg(hWX%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:hXj:hchdheh„hg}rh(hi]hj]hk]hl]ho]uhqM;hrhhs]ri(h|XPThe type of build used by this package. Build types are the constructors of the rj…rk}rl(hWXPThe type of build used by this package. Build types are the constructors of the hcNhqNhrhhXjfubjB)rm}rn(hWXf`BuildType <../release/cabal-latest/doc/API/Cabal/Distribution-PackageDescription.html#t:BuildType>`__hg}ro(UnameX BuildTypejXV../release/cabal-latest/doc/API/Cabal/Distribution-PackageDescription.html#t:BuildTypehl]hk]hi]hj]ho]uhXjfhs]rph|X BuildTyperq…rr}rs(hWUhXjmubahejFubh|Xo type. This field is optional and when missing, its default value is inferred according to the following rules:rt…ru}rv(hWXo type. This field is optional and when missing, its default value is inferred according to the following rules:hcNhqNhrhhXjfubeubj~)rw}rx(hWUhXj:hcNhejhg}ry(hi]hj]hk]hl]ho]uhqNhrhhs]rzhŠ)r{}r|(hWUhXjwhchdhehhg}r}(hX-hl]hk]hi]hj]ho]uhqMAhs]r~(h‘)r}r€(hWX¶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``. hg}r(hi]hj]hk]hl]ho]uhXj{hs]r‚h€)rƒ}r„(hWXµ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``.hXjhchdheh„hg}r…(hi]hj]hk]hl]ho]uhqMAhs]r†(h|XWhen r‡…rˆ}r‰(hWXWhen hXjƒubjn)rŠ}r‹(hWX:pkg-field:`cabal-version`rŒhXjƒhchdhejrhg}r(UreftypeX pkg-fieldjtˆjuX cabal-versionU refdomainXcabalrŽhl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqMAhs]rhâ)r}r‘(hWjŒhg}r’(hi]hj]r“(jjŽXcabal-pkg-fieldr”ehk]hl]ho]uhXjŠhs]r•h|X cabal-versionr–…r—}r˜(hWUhXjubahehêubaubh|X is set to r™…rš}r›(hWX is set to hXjƒubhâ)rœ}r(hWX``2.2``hg}rž(hi]hj]hk]hl]ho]uhXjƒhs]rŸh|X2.2r …r¡}r¢(hWUhXjœubahehêubh|X or higher, the default is r£…r¤}r¥(hWX or higher, the default is hXjƒubhâ)r¦}r§(hWX ``Simple``hg}r¨(hi]hj]hk]hl]ho]uhXjƒhs]r©h|XSimplerª…r«}r¬(hWUhXj¦ubahehêubh|X unless a r­…r®}r¯(hWX unless a hXjƒubjn)r°}r±(hWX:pkg-section:`custom-setup`r²hXjƒhchdhejrhg}r³(UreftypeX pkg-sectionjtˆjuX custom-setupU refdomainXcabalr´hl]hk]U refexplicit‰hi]hj]ho]jwjxuhqMAhs]rµhâ)r¶}r·(hWj²hg}r¸(hi]hj]r¹(jj´Xcabal-pkg-sectionrºehk]hl]ho]uhXj°hs]r»h|X custom-setupr¼…r½}r¾(hWUhXj¶ubahehêubaubh|X/ exists, in which case the inferred default is r¿…rÀ}rÁ(hWX/ exists, in which case the inferred default is hXjƒubhâ)rÂ}rÃ(hWX ``Custom``hg}rÄ(hi]hj]hk]hl]ho]uhXjƒhs]rÅh|XCustomrÆ…rÇ}rÈ(hWUhXjÂubahehêubh|X.…rÉ}rÊ(hWX.hXjƒubeubaheh”ubh‘)rË}rÌ(hWXXFor lower :pkg-field:`cabal-version` values, the default is ``Custom`` unconditionally. hg}rÍ(hi]hj]hk]hl]ho]uhXj{hs]rÎh€)rÏ}rÐ(hWXWFor lower :pkg-field:`cabal-version` values, the default is ``Custom`` unconditionally.hXjËhchdheh„hg}rÑ(hi]hj]hk]hl]ho]uhqMEhs]rÒ(h|X For lower rÓ…rÔ}rÕ(hWX For lower hXjÏubjn)rÖ}r×(hWX:pkg-field:`cabal-version`rØhXjÏhchdhejrhg}rÙ(UreftypeX pkg-fieldjtˆjuX cabal-versionU refdomainXcabalrÚhl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqMEhs]rÛhâ)rÜ}rÝ(hWjØhg}rÞ(hi]hj]rß(jjÚXcabal-pkg-fieldràehk]hl]ho]uhXjÖhs]ráh|X cabal-versionrâ…rã}rä(hWUhXjÜubahehêubaubh|X values, the default is rå…ræ}rç(hWX values, the default is hXjÏubhâ)rè}ré(hWX ``Custom``hg}rê(hi]hj]hk]hl]ho]uhXjÏhs]rëh|XCustomrì…rí}rî(hWUhXjèubahehêubh|X unconditionally.rï…rð}rñ(hWX unconditionally.hXjÏubeubaheh”ubeubaubh€)rò}ró(hWX\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.hXj:hchdheh„hg}rô(hi]hj]hk]hl]ho]uhqMHhrhhs]rõ(h|X)If the build type is anything other than rö…r÷}rø(hWX)If the build type is anything other than hcNhqNhrhhXjòubhâ)rù}rú(hWX ``Custom``hg}rû(hi]hj]hk]hl]ho]uhXjòhs]rüh|XCustomrý…rþ}rÿ(hWUhXjùubahehêubh|X , then the r…r}r(hWX , then the hcNhqNhrhhXjòubhâ)r}r(hWX ``Setup.hs``hg}r(hi]hj]hk]hl]ho]uhXjòhs]rh|XSetup.hsr…r}r (hWUhXjubahehêubh|X file r …r }r (hWX file hcNhqNhrhhXjòubhÂ)r }r(hWX*must*hg}r(hi]hj]hk]hl]ho]uhXjòhs]rh|Xmustr…r}r(hWUhXj ubahehÊubh|XV be exactly the standardized content discussed below. This is because in these cases, r…r}r(hWXV be exactly the standardized content discussed below. This is because in these cases, hcNhqNhrhhXjòubhâ)r}r(hWX ``cabal``hg}r(hi]hj]hk]hl]ho]uhXjòhs]rh|Xcabalr…r}r(hWUhXjubahehêubh|X will ignore the r…r}r (hWX will ignore the hcNhqNhrhhXjòubhâ)r!}r"(hWX ``Setup.hs``hg}r#(hi]hj]hk]hl]ho]uhXjòhs]r$h|XSetup.hsr%…r&}r'(hWUhXj!ubahehêubh|XG file completely, whereas other methods of package management, such as r(…r)}r*(hWXG file completely, whereas other methods of package management, such as hcNhqNhrhhXjòubhâ)r+}r,(hWX``runhaskell Setup.hs [CMD]``hg}r-(hi]hj]hk]hl]ho]uhXjòhs]r.h|Xrunhaskell Setup.hs [CMD]r/…r0}r1(hWUhXj+ubahehêubh|X, still rely on the r2…r3}r4(hWX, still rely on the hcNhqNhrhhXjòubhâ)r5}r6(hWX ``Setup.hs``hg}r7(hi]hj]hk]hl]ho]uhXjòhs]r8h|XSetup.hsr9…r:}r;(hWUhXj5ubahehêubh|X file.r<…r=}r>(hWX file.hcNhqNhrhhXjòubeubh€)r?}r@(hWX@For build type ``Simple``, the contents of ``Setup.hs`` must be:hXj:hchdheh„hg}rA(hi]hj]hk]hl]ho]uhqMOhrhhs]rB(h|XFor build type rC…rD}rE(hWXFor build type hcNhqNhrhhXj?ubhâ)rF}rG(hWX ``Simple``hg}rH(hi]hj]hk]hl]ho]uhXj?hs]rIh|XSimplerJ…rK}rL(hWUhXjFubahehêubh|X, the contents of rM…rN}rO(hWX, the contents of hcNhqNhrhhXj?ubhâ)rP}rQ(hWX ``Setup.hs``hg}rR(hi]hj]hk]hl]ho]uhXj?hs]rSh|XSetup.hsrT…rU}rV(hWUhXjPubahehêubh|X must be:rW…rX}rY(hWX must be:hcNhqNhrhhXj?ubeubjÏ)rZ}r[(hWX-import Distribution.Simple main = defaultMainhXj:hchdhejÒhg}r\(j‰jXhaskelljÔjÕhl]hk]hi]j}hj]ho]uhqMQhrhhs]r]h|X-import Distribution.Simple main = defaultMainr^…r_}r`(hWUhXjZubaubh€)ra}rb(hWX}For build type ``Configure`` (see the section on `system-dependent parameters`_ below), the contents of ``Setup.hs`` must be:hXj:hchdheh„hg}rc(hi]hj]hk]hl]ho]uhqMVhrhhs]rd(h|XFor build type re…rf}rg(hWXFor build type hcNhqNhrhhXjaubhâ)rh}ri(hWX ``Configure``hg}rj(hi]hj]hk]hl]ho]uhXjahs]rkh|X Configurerl…rm}rn(hWUhXjhubahehêubh|X (see the section on ro…rp}rq(hWX (see the section on hcNhqNhrhhXjaubjB)rr}rs(hWX`system-dependent parameters`_jEKhXjahejFhg}rt(UnameXsystem-dependent parametershl]hk]hi]hj]ho]jHj“uhs]ruh|Xsystem-dependent parametersrv…rw}rx(hWUhXjrubaubh|X below), the contents of ry…rz}r{(hWX below), the contents of hcNhqNhrhhXjaubhâ)r|}r}(hWX ``Setup.hs``hg}r~(hi]hj]hk]hl]ho]uhXjahs]rh|XSetup.hsr€…r}r‚(hWUhXj|ubahehêubh|X must be:rƒ…r„}r…(hWX must be:hcNhqNhrhhXjaubeubjÏ)r†}r‡(hWXHimport Distribution.Simple main = defaultMainWithHooks autoconfUserHookshXj:hchdhejÒhg}rˆ(j‰jXhaskelljÔjÕhl]hk]hi]j}hj]ho]uhqMZhrhhs]r‰h|XHimport Distribution.Simple main = defaultMainWithHooks autoconfUserHooksrŠ…r‹}rŒ(hWUhXj†ubaubh€)r}rŽ(hWXrFor build type ``Make`` (see the section on `more complex packages`_ below), the contents of ``Setup.hs`` must be:hXj:hchdheh„hg}r(hi]hj]hk]hl]ho]uhqM_hrhhs]r(h|XFor build type r‘…r’}r“(hWXFor build type hcNhqNhrhhXjubhâ)r”}r•(hWX``Make``hg}r–(hi]hj]hk]hl]ho]uhXjhs]r—h|XMaker˜…r™}rš(hWUhXj”ubahehêubh|X (see the section on r›…rœ}r(hWX (see the section on hcNhqNhrhhXjubjB)rž}rŸ(hWX`more complex packages`_jEKhXjhejFhg}r (UnameXmore complex packageshl]hk]hi]hj]ho]jHj{ uhs]r¡h|Xmore complex packagesr¢…r£}r¤(hWUhXjžubaubh|X below), the contents of r¥…r¦}r§(hWX below), the contents of hcNhqNhrhhXjubhâ)r¨}r©(hWX ``Setup.hs``hg}rª(hi]hj]hk]hl]ho]uhXjhs]r«h|XSetup.hsr¬…r­}r®(hWUhXj¨ubahehêubh|X must be:r¯…r°}r±(hWX must be:hcNhqNhrhhXjubeubjÏ)r²}r³(hWX+import Distribution.Make main = defaultMainhXj:hchdhejÒhg}r´(j‰jXhaskelljÔjÕhl]hk]hi]j}hj]ho]uhqMbhrhhs]rµh|X+import Distribution.Make main = defaultMainr¶…r·}r¸(hWUhXj²ubaubh€)r¹}rº(hWXwFor build type ``Custom``, the file ``Setup.hs`` can be customized, and will be used both by ``cabal`` and other tools.hXj:hchdheh„hg}r»(hi]hj]hk]hl]ho]uhqMghrhhs]r¼(h|XFor build type r½…r¾}r¿(hWXFor build type hcNhqNhrhhXj¹ubhâ)rÀ}rÁ(hWX ``Custom``hg}rÂ(hi]hj]hk]hl]ho]uhXj¹hs]rÃh|XCustomrÄ…rÅ}rÆ(hWUhXjÀubahehêubh|X , the file rÇ…rÈ}rÉ(hWX , the file hcNhqNhrhhXj¹ubhâ)rÊ}rË(hWX ``Setup.hs``hg}rÌ(hi]hj]hk]hl]ho]uhXj¹hs]rÍh|XSetup.hsrÎ…rÏ}rÐ(hWUhXjÊubahehêubh|X- can be customized, and will be used both by rÑ…rÒ}rÓ(hWX- can be customized, and will be used both by hcNhqNhrhhXj¹ubhâ)rÔ}rÕ(hWX ``cabal``hg}rÖ(hi]hj]hk]hl]ho]uhXj¹hs]r×h|XcabalrØ…rÙ}rÚ(hWUhXjÔubahehêubh|X and other tools.rÛ…rÜ}rÝ(hWX and other tools.hcNhqNhrhhXj¹ubeubh€)rÞ}rß(hWX;For most packages, the build type ``Simple`` is sufficient.hXj:hchdheh„hg}rà(hi]hj]hk]hl]ho]uhqMjhrhhs]rá(h|X"For most packages, the build type râ…rã}rä(hWX"For most packages, the build type hcNhqNhrhhXjÞubhâ)rå}ræ(hWX ``Simple``hg}rç(hi]hj]hk]hl]ho]uhXjÞhs]rèh|XSimpleré…rê}rë(hWUhXjåubahehêubh|X is sufficient.rì…rí}rî(hWX is sufficient.hcNhqNhrhhXjÞubeubeubeubjü)rï}rð(hWUhXj³hchdhejÿhg}rñ(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rò}ró(hWUhXj³hchdhejhg}rô(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrõj jõuhqNhrhhs]rö(j )r÷}rø(hWXlicense: identifierhXjòhchdhejhg}rù(hl]rúXpkg-field-licenserûahk]hi]hj]ho]j‰uhqMthrhhs]rü(jü)rý}rþ(hWUhXj÷hchdhejÿhg}rÿ(hl]hk]hi]hj]ho]Uentries]r(jXlicense; package.cabal fieldjûUNtrauhqMthrhhs]ubj)r}r(hWXlicenserhXj÷hchdhejhg}r(jÔjÕhl]hk]hi]hj]ho]uhqMthrhhs]rh|Xlicenser…r}r (hWUhcNhqNhrhhXjubaubj%)r }r (hWjžhXj÷hchdhej(hg}r (jÔjÕhl]hk]hi]hj]ho]uhqMthrhhs]r h|X: r…r}r(hWUhcNhqNhrhhXj ubaubj¤)r}r(hWX identifierhXj÷hchdhej§hg}r(jÔjÕhl]hk]hi]hj]ho]uhqMthrhhs]rh|X identifierr…r}r(hWUhcNhqNhrhhXjubaubeubj-)r}r(hWUhXjòhchdhej0hg}r(hi]hj]hk]hl]ho]uhqMthrhhs]r(j3)r}r(hWUhXjhchdhej6hg}r(hi]hj]hk]hl]ho]uhqNhrhhs]rj9)r }r!(hWUhg}r"(hi]hj]hk]hl]ho]uhXjhs]r#(j?)r$}r%(hWX Default valuehXj hchdhejChg}r&(hi]hj]hk]hl]ho]uhqKhs]r'h|X Default valuer(…r)}r*(hWUhXj$ubaubjI)r+}r,(hWUhg}r-(hi]hj]hk]hl]ho]uhXj hs]r.h€)r/}r0(hWXAllRightsReservedhg}r1(hi]hj]hk]hl]ho]uhXj+hs]r2hâ)r3}r4(hWX``AllRightsReserved``hXj/hchdhehêhg}r5(hi]hj]hk]hl]ho]uhqNhrhhs]r6h|XAllRightsReservedr7…r8}r9(hWUhcNhqNhrhhXj3ubaubaheh„ubahejVubehej<ubaubh€)r:}r;(hWXÁThe type of license under which this package is distributed. License names are the constants of the `License <../release/cabal-latest/doc/API/Cabal/Distribution-License.html#t:License>`__ type.hXjhchdheh„hg}r<(hi]hj]hk]hl]ho]uhqMphrhhs]r=(h|XdThe type of license under which this package is distributed. License names are the constants of the r>…r?}r@(hWXdThe type of license under which this package is distributed. License names are the constants of the hcNhqNhrhhXj:ubjB)rA}rB(hWXW`License <../release/cabal-latest/doc/API/Cabal/Distribution-License.html#t:License>`__hg}rC(UnameXLicensejXI../release/cabal-latest/doc/API/Cabal/Distribution-License.html#t:Licensehl]hk]hi]hj]ho]uhXj:hs]rDh|XLicenserE…rF}rG(hWUhXjAubahejFubh|X type.rH…rI}rJ(hWX type.hcNhqNhrhhXj:ubeubeubeubjü)rK}rL(hWUhXj³hcNhejÿhg}rM(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rN}rO(hWUhXj³hcNhejhg}rP(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrQj jQuhqNhrhhs]rR(j )rS}rT(hWXlicense-file: filenamehXjNhchdhejhg}rU(hl]rVXpkg-field-license-filerWahk]hi]hj]ho]j‰uhqMuhrhhs]rX(jü)rY}rZ(hWUhXjShchdhejÿhg}r[(hl]hk]hi]hj]ho]Uentries]r\(jX!license-file; package.cabal fieldjWUNtr]auhqMuhrhhs]ubj)r^}r_(hWX license-filer`hXjShchdhejhg}ra(jÔjÕhl]hk]hi]hj]ho]uhqMuhrhhs]rbh|X license-filerc…rd}re(hWUhcNhqNhrhhXj^ubaubj%)rf}rg(hWjžhXjShchdhej(hg}rh(jÔjÕhl]hk]hi]hj]ho]uhqMuhrhhs]rih|X: rj…rk}rl(hWUhcNhqNhrhhXjfubaubj¤)rm}rn(hWXfilenamehXjShchdhej§hg}ro(jÔjÕhl]hk]hi]hj]ho]uhqMuhrhhs]rph|Xfilenamerq…rr}rs(hWUhcNhqNhrhhXjmubaubeubj-)rt}ru(hWUhXjNhchdhej0hg}rv(hi]hj]hk]hl]ho]uhqMuhrhhs]ubeubjü)rw}rx(hWUhXj³hchdhejÿhg}ry(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rz}r{(hWUhXj³hchdhejhg}r|(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr}j j}uhqNhrhhs]r~(j )r}r€(hWXlicense-files: filename listhXjzhchdhejhg}r(hl]r‚Xpkg-field-license-filesrƒahk]hi]hj]ho]j‰uhqM~hrhhs]r„(jü)r…}r†(hWUhXjhchdhejÿhg}r‡(hl]hk]hi]hj]ho]Uentries]rˆ(jX"license-files; package.cabal fieldjƒUNtr‰auhqM~hrhhs]ubj)rŠ}r‹(hWX license-filesrŒhXjhchdhejhg}r(jÔjÕhl]hk]hi]hj]ho]uhqM~hrhhs]rŽh|X license-filesr…r}r‘(hWUhcNhqNhrhhXjŠubaubj%)r’}r“(hWjžhXjhchdhej(hg}r”(jÔjÕhl]hk]hi]hj]ho]uhqM~hrhhs]r•h|X: r–…r—}r˜(hWUhcNhqNhrhhXj’ubaubj¤)r™}rš(hWX filename listhXjhchdhej§hg}r›(jÔjÕhl]hk]hi]hj]ho]uhqM~hrhhs]rœh|X filename listr…rž}rŸ(hWUhcNhqNhrhhXj™ubaubeubj-)r }r¡(hWUhXjzhchdhej0hg}r¢(hi]hj]hk]hl]ho]uhqM~hrhhs]r£(h€)r¤}r¥(hWXˆ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¦hXj hchdheh„hg}r§(hi]hj]hk]hl]ho]uhqMxhrhhs]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.r©…rª}r«(hWj¦hcNhqNhrhhXj¤ubaubh€)r¬}r­(hWX”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.hXj hchdheh„hg}r®(hi]hj]hk]hl]ho]uhqM|hrhhs]r¯(h|X0If you have multiple license files then use the r°…r±}r²(hWX0If you have multiple license files then use the hcNhqNhrhhXj¬ubjn)r³}r´(hWX:pkg-field:`license-files`rµhXj¬hchdhejrhg}r¶(UreftypeX pkg-fieldjtˆjuX license-filesU refdomainXcabalr·hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqM|hs]r¸hâ)r¹}rº(hWjµhg}r»(hi]hj]r¼(jj·Xcabal-pkg-fieldr½ehk]hl]ho]uhXj³hs]r¾h|X license-filesr¿…rÀ}rÁ(hWUhXj¹ubahehêubaubh|X* field instead of (or in addition to) the rÂ…rÃ}rÄ(hWX* field instead of (or in addition to) the hcNhqNhrhhXj¬ubjn)rÅ}rÆ(hWX:pkg-field:`license-file`rÇhXj¬hchdhejrhg}rÈ(UreftypeX pkg-fieldjtˆjuX license-fileU refdomainXcabalrÉhl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqM|hs]rÊhâ)rË}rÌ(hWjÇhg}rÍ(hi]hj]rÎ(jjÉXcabal-pkg-fieldrÏehk]hl]ho]uhXjÅhs]rÐh|X license-filerÑ…rÒ}rÓ(hWUhXjËubahehêubaubh|X field.rÔ…rÕ}rÖ(hWX field.hcNhqNhrhhXj¬ubeubeubeubjü)r×}rØ(hWUhXj³hchdhejÿhg}rÙ(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rÚ}rÛ(hWUhXj³hchdhejhg}rÜ(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrÝj jÝuhqNhrhhs]rÞ(j )rß}rà(hWXcopyright: freeformhXjÚhchdhejhg}rá(hl]râXpkg-field-copyrightrãahk]hi]hj]ho]j‰uhqM†hrhhs]rä(jü)rå}ræ(hWUhXjßhchdhejÿhg}rç(hl]hk]hi]hj]ho]Uentries]rè(jXcopyright; package.cabal fieldjãUNtréauhqM†hrhhs]ubj)rê}rë(hWX copyrightrìhXjßhchdhejhg}rí(jÔjÕhl]hk]hi]hj]ho]uhqM†hrhhs]rîh|X copyrightrï…rð}rñ(hWUhcNhqNhrhhXjêubaubj%)rò}ró(hWjžhXjßhchdhej(hg}rô(jÔjÕhl]hk]hi]hj]ho]uhqM†hrhhs]rõh|X: rö…r÷}rø(hWUhcNhqNhrhhXjòubaubj¤)rù}rú(hWXfreeformhXjßhchdhej§hg}rû(jÔjÕhl]hk]hi]hj]ho]uhqM†hrhhs]rüh|Xfreeformrý…rþ}rÿ(hWUhcNhqNhrhhXjùubaubeubj-)r}r(hWUhXjÚhchdhej0hg}r(hi]hj]hk]hl]ho]uhqM†hrhhs]r(h€)r}r(hWX¢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::hXjhchdheh„hg}r(hi]hj]hk]hl]ho]uhqMhrhhs]rh|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:r…r }r (hWX¡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:hcNhqNhrhhXjubaubjÏ)r }r (hWX#copyright: (c) 2006-2007 Joe BloggshXjhchdhejÒhg}r (jÔjÕhl]hk]hi]hj]ho]uhqM…hrhhs]rh|X#copyright: (c) 2006-2007 Joe Bloggsr…r}r(hWUhXj ubaubeubeubjü)r}r(hWUhXj³hchdhejÿhg}r(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r}r(hWUhXj³hchdhejhg}r(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrj juhqNhrhhs]r(j )r}r(hWXauthor: freeformhXjhchdhejhg}r(hl]rXpkg-field-authorrahk]hi]hj]ho]j‰uhqMhrhhs]r(jü)r }r!(hWUhXjhchdhejÿhg}r"(hl]hk]hi]hj]ho]Uentries]r#(jXauthor; package.cabal fieldjUNtr$auhqMhrhhs]ubj)r%}r&(hWXauthorr'hXjhchdhejhg}r((jÔjÕhl]hk]hi]hj]ho]uhqMhrhhs]r)h|Xauthorr*…r+}r,(hWUhcNhqNhrhhXj%ubaubj%)r-}r.(hWjžhXjhchdhej(hg}r/(jÔjÕhl]hk]hi]hj]ho]uhqMhrhhs]r0h|X: r1…r2}r3(hWUhcNhqNhrhhXj-ubaubj¤)r4}r5(hWXfreeformhXjhchdhej§hg}r6(jÔjÕhl]hk]hi]hj]ho]uhqMhrhhs]r7h|Xfreeformr8…r9}r:(hWUhcNhqNhrhhXj4ubaubeubj-)r;}r<(hWUhXjhchdhej0hg}r=(hi]hj]hk]hl]ho]uhqMhrhhs]r>(h€)r?}r@(hWX#The original author of the package.rAhXj;hchdheh„hg}rB(hi]hj]hk]hl]ho]uhqM‰hrhhs]rCh|X#The original author of the package.rD…rE}rF(hWjAhcNhqNhrhhXj?ubaubh€)rG}rH(hWXERemember that ``.cabal`` files are Unicode, using the UTF-8 encoding.hXj;hchdheh„hg}rI(hi]hj]hk]hl]ho]uhqM‹hrhhs]rJ(h|XRemember that rK…rL}rM(hWXRemember that hcNhqNhrhhXjGubhâ)rN}rO(hWX ``.cabal``hg}rP(hi]hj]hk]hl]ho]uhXjGhs]rQh|X.cabalrR…rS}rT(hWUhXjNubahehêubh|X- files are Unicode, using the UTF-8 encoding.rU…rV}rW(hWX- files are Unicode, using the UTF-8 encoding.hcNhqNhrhhXjGubeubeubeubjü)rX}rY(hWUhXj³hchdhejÿhg}rZ(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r[}r\(hWUhXj³hchdhejhg}r](j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr^j j^uhqNhrhhs]r_(j )r`}ra(hWXmaintainer: addresshXj[hchdhejhg}rb(hl]rcXpkg-field-maintainerrdahk]hi]hj]ho]j‰uhqM“hrhhs]re(jü)rf}rg(hWUhXj`hchdhejÿhg}rh(hl]hk]hi]hj]ho]Uentries]ri(jXmaintainer; package.cabal fieldjdUNtrjauhqM“hrhhs]ubj)rk}rl(hWX maintainerrmhXj`hchdhejhg}rn(jÔjÕhl]hk]hi]hj]ho]uhqM“hrhhs]roh|X maintainerrp…rq}rr(hWUhcNhqNhrhhXjkubaubj%)rs}rt(hWjžhXj`hchdhej(hg}ru(jÔjÕhl]hk]hi]hj]ho]uhqM“hrhhs]rvh|X: rw…rx}ry(hWUhcNhqNhrhhXjsubaubj¤)rz}r{(hWXaddresshXj`hchdhej§hg}r|(jÔjÕhl]hk]hi]hj]ho]uhqM“hrhhs]r}h|Xaddressr~…r}r€(hWUhcNhqNhrhhXjzubaubeubj-)r}r‚(hWUhXj[hchdhej0hg}rƒ(hi]hj]hk]hl]ho]uhqM“hrhhs]r„h€)r…}r†(hWX•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‡hXjhchdheh„hg}rˆ(hi]hj]hk]hl]ho]uhqMhrhhs]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Š…r‹}rŒ(hWj‡hcNhqNhrhhXj…ubaubaubeubjü)r}rŽ(hWUhXj³hchdhejÿhg}r(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r}r‘(hWUhXj³hchdhejhg}r’(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr“j j“uhqNhrhhs]r”(j )r•}r–(hWXstability: freeformhXjhchdhejhg}r—(hl]r˜Xpkg-field-stabilityr™ahk]hi]hj]ho]j‰uhqM˜hrhhs]rš(jü)r›}rœ(hWUhXj•hchdhejÿhg}r(hl]hk]hi]hj]ho]Uentries]rž(jXstability; package.cabal fieldj™UNtrŸauhqM˜hrhhs]ubj)r }r¡(hWX stabilityr¢hXj•hchdhejhg}r£(jÔjÕhl]hk]hi]hj]ho]uhqM˜hrhhs]r¤h|X stabilityr¥…r¦}r§(hWUhcNhqNhrhhXj ubaubj%)r¨}r©(hWjžhXj•hchdhej(hg}rª(jÔjÕhl]hk]hi]hj]ho]uhqM˜hrhhs]r«h|X: r¬…r­}r®(hWUhcNhqNhrhhXj¨ubaubj¤)r¯}r°(hWXfreeformhXj•hchdhej§hg}r±(jÔjÕhl]hk]hi]hj]ho]uhqM˜hrhhs]r²h|Xfreeformr³…r´}rµ(hWUhcNhqNhrhhXj¯ubaubeubj-)r¶}r·(hWUhXjhchdhej0hg}r¸(hi]hj]hk]hl]ho]uhqM˜hrhhs]r¹h€)rº}r»(hWXbThe stability level of the package, e.g. ``alpha``, ``experimental``, ``provisional``, ``stable``.hXj¶hchdheh„hg}r¼(hi]hj]hk]hl]ho]uhqM–hrhhs]r½(h|X)The stability level of the package, e.g. r¾…r¿}rÀ(hWX)The stability level of the package, e.g. hcNhqNhrhhXjºubhâ)rÁ}rÂ(hWX ``alpha``hg}rÃ(hi]hj]hk]hl]ho]uhXjºhs]rÄh|XalpharÅ…rÆ}rÇ(hWUhXjÁubahehêubh|X, rÈ…rÉ}rÊ(hWX, hcNhqNhrhhXjºubhâ)rË}rÌ(hWX``experimental``hg}rÍ(hi]hj]hk]hl]ho]uhXjºhs]rÎh|X experimentalrÏ…rÐ}rÑ(hWUhXjËubahehêubh|X, rÒ…rÓ}rÔ(hWX, rÕhcNhqNhrhhXjºubhâ)rÖ}r×(hWX``provisional``hg}rØ(hi]hj]hk]hl]ho]uhXjºhs]rÙh|X provisionalrÚ…rÛ}rÜ(hWUhXjÖubahehêubh|X, rÝ…rÞ}rß(hWjÕhXjºubhâ)rà}rá(hWX ``stable``hg}râ(hi]hj]hk]hl]ho]uhXjºhs]rãh|Xstablerä…rå}ræ(hWUhXjàubahehêubh|X.…rç}rè(hWX.hcNhqNhrhhXjºubeubaubeubjü)ré}rê(hWUhXj³hchdhejÿhg}rë(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rì}rí(hWUhXj³hchdhejhg}rî(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrïj jïuhqNhrhhs]rð(j )rñ}rò(hWX homepage: URLhXjìhchdhejhg}ró(hl]rôXpkg-field-homepagerõahk]hi]hj]ho]j‰uhqMœhrhhs]rö(jü)r÷}rø(hWUhXjñhchdhejÿhg}rù(hl]hk]hi]hj]ho]Uentries]rú(jXhomepage; package.cabal fieldjõUNtrûauhqMœhrhhs]ubj)rü}rý(hWXhomepagerþhXjñhchdhejhg}rÿ(jÔjÕhl]hk]hi]hj]ho]uhqMœhrhhs]rh|Xhomepager…r}r(hWUhcNhqNhrhhXjüubaubj%)r}r(hWjžhXjñhchdhej(hg}r(jÔjÕhl]hk]hi]hj]ho]uhqMœhrhhs]rh|X: r…r }r (hWUhcNhqNhrhhXjubaubj¤)r }r (hWXURLhXjñhchdhej§hg}r (jÔjÕhl]hk]hi]hj]ho]uhqMœhrhhs]rh|XURLr…r}r(hWUhcNhqNhrhhXj ubaubeubj-)r}r(hWUhXjìhchdhej0hg}r(hi]hj]hk]hl]ho]uhqMœhrhhs]rh€)r}r(hWXThe package homepage.rhXjhchdheh„hg}r(hi]hj]hk]hl]ho]uhqM›hrhhs]rh|XThe package homepage.r…r}r(hWjhcNhqNhrhhXjubaubaubeubjü)r}r(hWUhXj³hchdhejÿhg}r (hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r!}r"(hWUhXj³hchdhejhg}r#(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr$j j$uhqNhrhhs]r%(j )r&}r'(hWXbug-reports: URLhXj!hchdhejhg}r((hl]r)Xpkg-field-bug-reportsr*ahk]hi]hj]ho]j‰uhqM¬hrhhs]r+(jü)r,}r-(hWUhXj&hchdhejÿhg}r.(hl]hk]hi]hj]ho]Uentries]r/(jX bug-reports; package.cabal fieldj*UNtr0auhqM¬hrhhs]ubj)r1}r2(hWX bug-reportsr3hXj&hchdhejhg}r4(jÔjÕhl]hk]hi]hj]ho]uhqM¬hrhhs]r5h|X bug-reportsr6…r7}r8(hWUhcNhqNhrhhXj1ubaubj%)r9}r:(hWjžhXj&hchdhej(hg}r;(jÔjÕhl]hk]hi]hj]ho]uhqM¬hrhhs]r<h|X: r=…r>}r?(hWUhcNhqNhrhhXj9ubaubj¤)r@}rA(hWXURLhXj&hchdhej§hg}rB(jÔjÕhl]hk]hi]hj]ho]uhqM¬hrhhs]rCh|XURLrD…rE}rF(hWUhcNhqNhrhhXj@ubaubeubj-)rG}rH(hWUhXj!hchdhej0hg}rI(hi]hj]hk]hl]ho]uhqM¬hrhhs]rJ(h€)rK}rL(hWXMThe URL where users should direct bug reports. This would normally be either:rMhXjGhchdheh„hg}rN(hi]hj]hk]hl]ho]uhqMŸhrhhs]rOh|XMThe URL where users should direct bug reports. This would normally be either:rP…rQ}rR(hWjMhcNhqNhrhhXjKubaubhŠ)rS}rT(hWUhXjGhchdhehhg}rU(hX-hl]hk]hi]hj]ho]uhqM¢hrhhs]rV(h‘)rW}rX(hWX8A ``mailto:`` URL, e.g. for a person or a mailing list. hXjShchdheh”hg}rY(hi]hj]hk]hl]ho]uhqNhrhhs]rZh€)r[}r\(hWX7A ``mailto:`` URL, e.g. for a person or a mailing list.hXjWhchdheh„hg}r](hi]hj]hk]hl]ho]uhqM¢hs]r^(h|XA r_…r`}ra(hWXA hXj[ubhâ)rb}rc(hWX ``mailto:``hg}rd(hi]hj]hk]hl]ho]uhXj[hs]reh|Xmailto:rf…rg}rh(hWUhXjbubahehêubh|X* URL, e.g. for a person or a mailing list.ri…rj}rk(hWX* URL, e.g. for a person or a mailing list.hXj[ubeubaubh‘)rl}rm(hWXDAn ``http:`` (or ``https:``) URL for an online bug tracking system. hXjShchdheh”hg}rn(hi]hj]hk]hl]ho]uhqNhrhhs]roh€)rp}rq(hWXCAn ``http:`` (or ``https:``) URL for an online bug tracking system.hXjlhchdheh„hg}rr(hi]hj]hk]hl]ho]uhqM¤hs]rs(h|XAn rt…ru}rv(hWXAn hXjpubhâ)rw}rx(hWX ``http:``hg}ry(hi]hj]hk]hl]ho]uhXjphs]rzh|Xhttp:r{…r|}r}(hWUhXjwubahehêubh|X (or r~…r}r€(hWX (or hXjpubhâ)r}r‚(hWX ``https:``hg}rƒ(hi]hj]hk]hl]ho]uhXjphs]r„h|Xhttps:r……r†}r‡(hWUhXjubahehêubh|X() URL for an online bug tracking system.rˆ…r‰}rŠ(hWX() URL for an online bug tracking system.hXjpubeubaubeubh€)r‹}rŒ(hWX=For example Cabal itself uses a web-based bug tracking systemrhXjGhchdheh„hg}rŽ(hi]hj]hk]hl]ho]uhqM§hrhhs]rh|X=For example Cabal itself uses a web-based bug tracking systemr…r‘}r’(hWjhcNhqNhrhhXj‹ubaubjÏ)r“}r”(hWX4bug-reports: https://github.com/haskell/cabal/issueshXjGhchdhejÒhg}r•(jÔjÕhl]hk]hi]hj]ho]uhqM«hrhhs]r–h|X4bug-reports: https://github.com/haskell/cabal/issuesr—…r˜}r™(hWUhXj“ubaubeubeubjü)rš}r›(hWUhXj³hchdhejÿhg}rœ(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r}rž(hWUhXj³hchdhejhg}rŸ(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr j j uhqNhrhhs]r¡(j )r¢}r£(hWXpackage-url: URLhXjhchdhejhg}r¤(hl]r¥Xpkg-field-package-urlr¦ahk]hi]hj]ho]j‰uhqM±hrhhs]r§(jü)r¨}r©(hWUhXj¢hchdhejÿhg}rª(hl]hk]hi]hj]ho]Uentries]r«(jX package-url; package.cabal fieldj¦UNtr¬auhqM±hrhhs]ubj)r­}r®(hWX package-urlr¯hXj¢hchdhejhg}r°(jÔjÕhl]hk]hi]hj]ho]uhqM±hrhhs]r±h|X package-urlr²…r³}r´(hWUhcNhqNhrhhXj­ubaubj%)rµ}r¶(hWjžhXj¢hchdhej(hg}r·(jÔjÕhl]hk]hi]hj]ho]uhqM±hrhhs]r¸h|X: r¹…rº}r»(hWUhcNhqNhrhhXjµubaubj¤)r¼}r½(hWXURLhXj¢hchdhej§hg}r¾(jÔjÕhl]hk]hi]hj]ho]uhqM±hrhhs]r¿h|XURLrÀ…rÁ}rÂ(hWUhcNhqNhrhhXj¼ubaubeubj-)rÃ}rÄ(hWUhXjhchdhej0hg}rÅ(hi]hj]hk]hl]ho]uhqM±hrhhs]rÆh€)rÇ}rÈ(hWX\The location of a source bundle for the package. The distribution should be a Cabal package.rÉhXjÃhchdheh„hg}rÊ(hi]hj]hk]hl]ho]uhqM¯hrhhs]rËh|X\The location of a source bundle for the package. The distribution should be a Cabal package.rÌ…rÍ}rÎ(hWjÉhcNhqNhrhhXjÇubaubaubeubjü)rÏ}rÐ(hWUhXj³hchdhejÿhg}rÑ(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rÒ}rÓ(hWUhXj³hchdhejhg}rÔ(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrÕj jÕuhqNhrhhs]rÖ(j )r×}rØ(hWXsynopsis: freeformhXjÒhchdhejhg}rÙ(hl]rÚXpkg-field-synopsisrÛahk]hi]hj]ho]j‰uhqM¸hrhhs]rÜ(jü)rÝ}rÞ(hWUhXj×hchdhejÿhg}rß(hl]hk]hi]hj]ho]Uentries]rà(jXsynopsis; package.cabal fieldjÛUNtráauhqM¸hrhhs]ubj)râ}rã(hWXsynopsisrähXj×hchdhejhg}rå(jÔjÕhl]hk]hi]hj]ho]uhqM¸hrhhs]ræh|Xsynopsisrç…rè}ré(hWUhcNhqNhrhhXjâubaubj%)rê}rë(hWjžhXj×hchdhej(hg}rì(jÔjÕhl]hk]hi]hj]ho]uhqM¸hrhhs]ríh|X: rî…rï}rð(hWUhcNhqNhrhhXjêubaubj¤)rñ}rò(hWXfreeformhXj×hchdhej§hg}ró(jÔjÕhl]hk]hi]hj]ho]uhqM¸hrhhs]rôh|Xfreeformrõ…rö}r÷(hWUhcNhqNhrhhXjñubaubeubj-)rø}rù(hWUhXjÒhchdhej0hg}rú(hi]hj]hk]hl]ho]uhqM¸hrhhs]rûh€)rü}rý(hWXë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þhXjøhchdheh„hg}rÿ(hi]hj]hk]hl]ho]uhqM´hrhhs]rh|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…r}r(hWjþhcNhqNhrhhXjüubaubaubeubjü)r}r(hWUhXj³hchdhejÿhg}r(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r}r(hWUhXj³hchdhejhg}r (j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr j j uhqNhrhhs]r (j )r }r (hWXdescription: freeformhXjhchdhejhg}r(hl]rXpkg-field-descriptionrahk]hi]hj]ho]j‰uhqMÂhrhhs]r(jü)r}r(hWUhXj hchdhejÿhg}r(hl]hk]hi]hj]ho]Uentries]r(jX description; package.cabal fieldjUNtrauhqMÂhrhhs]ubj)r}r(hWX descriptionrhXj hchdhejhg}r(jÔjÕhl]hk]hi]hj]ho]uhqMÂhrhhs]rh|X descriptionr…r}r(hWUhcNhqNhrhhXjubaubj%)r}r (hWjžhXj hchdhej(hg}r!(jÔjÕhl]hk]hi]hj]ho]uhqMÂhrhhs]r"h|X: r#…r$}r%(hWUhcNhqNhrhhXjubaubj¤)r&}r'(hWXfreeformhXj hchdhej§hg}r((jÔjÕhl]hk]hi]hj]ho]uhqMÂhrhhs]r)h|Xfreeformr*…r+}r,(hWUhcNhqNhrhhXj&ubaubeubj-)r-}r.(hWUhXjhchdhej0hg}r/(hi]hj]hk]hl]ho]uhqMÂhrhhs]r0(h€)r1}r2(hWX“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.r3hXj-hchdheh„hg}r4(hi]hj]hk]hl]ho]uhqM»hrhhs]r5h|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.r6…r7}r8(hWj3hcNhqNhrhhXj1ubaubh€)r9}r:(hWXš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.hXj-hchdheh„hg}r;(hi]hj]hk]hl]ho]uhqM¿hrhhs]r<(h|X=For library packages, this field is used as prologue text by r=…r>}r?(hWX=For library packages, this field is used as prologue text by hcNhqNhrhhXj9ubjn)r@}rA(hWX:ref:`setup-haddock`rBhXj9hchdhejrhg}rC(UreftypeXrefjtˆjuX setup-haddockU refdomainXstdrDhl]hk]U refexplicit‰hi]hj]ho]jwjxuhqM¿hs]rEjz)rF}rG(hWjBhg}rH(hi]hj]rI(jjDXstd-refrJehk]hl]ho]uhXj@hs]rKh|X setup-haddockrL…rM}rN(hWUhXjFubahej…ubaubh|X) and thus may contain the same markup as rO…rP}rQ(hWX) and thus may contain the same markup as hcNhqNhrhhXj9ubjB)rR}rS(hWXHaddock_jEKhXj9hejFhg}rT(UnameXHaddockjjQ hl]hk]hi]hj]ho]uhs]rUh|XHaddockrV…rW}rX(hWUhXjRubaubh|X documentation comments.rY…rZ}r[(hWX documentation comments.hcNhqNhrhhXj9ubeubeubeubjü)r\}r](hWUhXj³hchdhejÿhg}r^(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r_}r`(hWUhXj³hchdhejhg}ra(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrbj jbuhqNhrhhs]rc(j )rd}re(hWXcategory: freeformhXj_hchdhejhg}rf(hl]rgXpkg-field-categoryrhahk]hi]hj]ho]j‰uhqMÉhrhhs]ri(jü)rj}rk(hWUhXjdhchdhejÿhg}rl(hl]hk]hi]hj]ho]Uentries]rm(jXcategory; package.cabal fieldjhUNtrnauhqMÉhrhhs]ubj)ro}rp(hWXcategoryrqhXjdhchdhejhg}rr(jÔjÕhl]hk]hi]hj]ho]uhqMÉhrhhs]rsh|Xcategoryrt…ru}rv(hWUhcNhqNhrhhXjoubaubj%)rw}rx(hWjžhXjdhchdhej(hg}ry(jÔjÕhl]hk]hi]hj]ho]uhqMÉhrhhs]rzh|X: r{…r|}r}(hWUhcNhqNhrhhXjwubaubj¤)r~}r(hWXfreeformhXjdhchdhej§hg}r€(jÔjÕhl]hk]hi]hj]ho]uhqMÉhrhhs]rh|Xfreeformr‚…rƒ}r„(hWUhcNhqNhrhhXj~ubaubeubj-)r…}r†(hWUhXj_hchdhej0hg}r‡(hi]hj]hk]hl]ho]uhqMÉhrhhs]rˆh€)r‰}rŠ(hWX¹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.hXj…hchdheh„hg}r‹(hi]hj]hk]hl]ho]uhqMÅhrhhs]rŒ(h|XBA classification category for future use by the package catalogue r…rŽ}r(hWXBA classification category for future use by the package catalogue hcNhqNhrhhXj‰ubjB)r}r‘(hWXHackage_jEKhXj‰hejFhg}r’(UnameXHackagejjhl]hk]hi]hj]ho]uhs]r“h|XHackager”…r•}r–(hWUhXjubaubh|Xo. These categories have not yet been specified, but the upper levels of the module hierarchy make a good start.r—…r˜}r™(hWXo. These categories have not yet been specified, but the upper levels of the module hierarchy make a good start.hcNhqNhrhhXj‰ubeubaubeubjü)rš}r›(hWUhXj³hchdhejÿhg}rœ(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r}rž(hWUhXj³hchdhejhg}rŸ(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr j j uhqNhrhhs]r¡(j )r¢}r£(hWXtested-with: compiler listhXjhchdhejhg}r¤(hl]r¥Xpkg-field-tested-withr¦ahk]hi]hj]ho]j‰uhqMÎhrhhs]r§(jü)r¨}r©(hWUhXj¢hchdhejÿhg}rª(hl]hk]hi]hj]ho]Uentries]r«(jX tested-with; package.cabal fieldj¦UNtr¬auhqMÎhrhhs]ubj)r­}r®(hWX tested-withr¯hXj¢hchdhejhg}r°(jÔjÕhl]hk]hi]hj]ho]uhqMÎhrhhs]r±h|X tested-withr²…r³}r´(hWUhcNhqNhrhhXj­ubaubj%)rµ}r¶(hWjžhXj¢hchdhej(hg}r·(jÔjÕhl]hk]hi]hj]ho]uhqMÎhrhhs]r¸h|X: r¹…rº}r»(hWUhcNhqNhrhhXjµubaubj¤)r¼}r½(hWX compiler listhXj¢hchdhej§hg}r¾(jÔjÕhl]hk]hi]hj]ho]uhqMÎhrhhs]r¿h|X compiler listrÀ…rÁ}rÂ(hWUhcNhqNhrhhXj¼ubaubeubj-)rÃ}rÄ(hWUhXjhchdhej0hg}rÅ(hi]hj]hk]hl]ho]uhqMÎhrhhs]rÆh€)rÇ}rÈ(hWX_A list of compilers and versions against which the package has been tested (or at least built).rÉhXjÃhchdheh„hg}rÊ(hi]hj]hk]hl]ho]uhqMÌhrhhs]rËh|X_A list of compilers and versions against which the package has been tested (or at least built).rÌ…rÍ}rÎ(hWjÉhcNhqNhrhhXjÇubaubaubeubjü)rÏ}rÐ(hWUhXj³hchdhejÿhg}rÑ(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rÒ}rÓ(hWUhXj³hchdhejhg}rÔ(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrÕj jÕuhqNhrhhs]rÖ(j )r×}rØ(hWXdata-files: filename listhXjÒhchdhejhg}rÙ(hl]rÚXpkg-field-data-filesrÛahk]hi]hj]ho]j‰uhqMèhrhhs]rÜ(jü)rÝ}rÞ(hWUhXj×hchdhejÿhg}rß(hl]hk]hi]hj]ho]Uentries]rà(jXdata-files; package.cabal fieldjÛUNtráauhqMèhrhhs]ubj)râ}rã(hWX data-filesrähXj×hchdhejhg}rå(jÔjÕhl]hk]hi]hj]ho]uhqMèhrhhs]ræh|X data-filesrç…rè}ré(hWUhcNhqNhrhhXjâubaubj%)rê}rë(hWjžhXj×hchdhej(hg}rì(jÔjÕhl]hk]hi]hj]ho]uhqMèhrhhs]ríh|X: rî…rï}rð(hWUhcNhqNhrhhXjêubaubj¤)rñ}rò(hWX filename listhXj×hchdhej§hg}ró(jÔjÕhl]hk]hi]hj]ho]uhqMèhrhhs]rôh|X filename listrõ…rö}r÷(hWUhcNhqNhrhhXjñubaubeubj-)rø}rù(hWUhXjÒhchdhej0hg}rú(hi]hj]hk]hl]ho]uhqMèhrhhs]rû(h€)rü}rý(hWXA 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>`_.hXjøhchdheh„hg}rþ(hi]hj]hk]hl]ho]uhqMÑhrhhs]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 r…r}r(hWXÉ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 hcNhqNhrhhXjüubjB)r}r(hWXI`find these files at run-time <#accessing-data-files-from-package-code>`_hg}r(UnameXfind these files at run-timejX'#accessing-data-files-from-package-coderhl]hk]hi]hj]ho]uhXjühs]rh|Xfind these files at run-timer…r }r (hWUhXjubahejFubj£)r }r (hWX* <#accessing-data-files-from-package-code>h\KhXjühej¦hg}r (Urefurijhl]rUfind-these-files-at-run-timerahk]hi]hj]ho]rhNauhs]ubh|X.…r}r(hWX.hcNhqNhrhhXjüubeubh€)r}r(hWX•A limited form of ``*`` wildcards in file names, for example ``data-files: images/*.png`` matches all the ``.png`` files in the ``images`` directory.hXjøhchdheh„hg}r(hi]hj]hk]hl]ho]uhqMÖhrhhs]r(h|XA limited form of r…r}r(hWXA limited form of hcNhqNhrhhXjubhâ)r}r(hWX``*``hg}r(hi]hj]hk]hl]ho]uhXjhs]rh|X*…r}r(hWUhXjubahehêubh|X& wildcards in file names, for example r …r!}r"(hWX& wildcards in file names, for example hcNhqNhrhhXjubhâ)r#}r$(hWX``data-files: images/*.png``hg}r%(hi]hj]hk]hl]ho]uhXjhs]r&h|Xdata-files: images/*.pngr'…r(}r)(hWUhXj#ubahehêubh|X matches all the r*…r+}r,(hWX matches all the hcNhqNhrhhXjubhâ)r-}r.(hWX``.png``hg}r/(hi]hj]hk]hl]ho]uhXjhs]r0h|X.pngr1…r2}r3(hWUhXj-ubahehêubh|X files in the r4…r5}r6(hWX files in the hcNhqNhrhhXjubhâ)r7}r8(hWX ``images``hg}r9(hi]hj]hk]hl]ho]uhXjhs]r:h|Ximagesr;…r<}r=(hWUhXj7ubahehêubh|X directory.r>…r?}r@(hWX directory.hcNhqNhrhhXjubeubh€)rA}rB(hWXûThe limitation is that ``*`` wildcards are only allowed in place of the file name, not in the directory name or file extension. In particular, wildcards do not include directories contents recursively. Furthermore, if a wildcard is used it must be used with an extension, so ``data-files: data/*`` is not allowed. When matching a wildcard plus extension, a file's full extension must match exactly, so ``*.gz`` matches ``foo.gz`` but not ``foo.tar.gz``. A wildcard that does not match any files is an error.hXjøhchdheh„hg}rC(hi]hj]hk]hl]ho]uhqMÚhrhhs]rD(h|XThe limitation is that rE…rF}rG(hWXThe limitation is that hcNhqNhrhhXjAubhâ)rH}rI(hWX``*``hg}rJ(hi]hj]hk]hl]ho]uhXjAhs]rKh|X*…rL}rM(hWUhXjHubahehêubh|X÷ wildcards are only allowed in place of the file name, not in the directory name or file extension. In particular, wildcards do not include directories contents recursively. Furthermore, if a wildcard is used it must be used with an extension, so rN…rO}rP(hWX÷ wildcards are only allowed in place of the file name, not in the directory name or file extension. In particular, wildcards do not include directories contents recursively. Furthermore, if a wildcard is used it must be used with an extension, so hcNhqNhrhhXjAubhâ)rQ}rR(hWX``data-files: data/*``hg}rS(hi]hj]hk]hl]ho]uhXjAhs]rTh|Xdata-files: data/*rU…rV}rW(hWUhXjQubahehêubh|Xk is not allowed. When matching a wildcard plus extension, a file’s full extension must match exactly, so rX…rY}rZ(hWXi is not allowed. When matching a wildcard plus extension, a file's full extension must match exactly, so hcNhqNhrhhXjAubhâ)r[}r\(hWX``*.gz``hg}r](hi]hj]hk]hl]ho]uhXjAhs]r^h|X*.gzr_…r`}ra(hWUhXj[ubahehêubh|X matches rb…rc}rd(hWX matches hcNhqNhrhhXjAubhâ)re}rf(hWX ``foo.gz``hg}rg(hi]hj]hk]hl]ho]uhXjAhs]rhh|Xfoo.gzri…rj}rk(hWUhXjeubahehêubh|X but not rl…rm}rn(hWX but not hcNhqNhrhhXjAubhâ)ro}rp(hWX``foo.tar.gz``hg}rq(hi]hj]hk]hl]ho]uhXjAhs]rrh|X foo.tar.gzrs…rt}ru(hWUhXjoubahehêubh|X7. A wildcard that does not match any files is an error.rv…rw}rx(hWX7. A wildcard that does not match any files is an error.hcNhqNhrhhXjAubeubh€)ry}rz(hWXá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{hXjøhchdheh„hg}r|(hi]hj]hk]hl]ho]uhqMährhhs]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~…r}r€(hWj{hcNhqNhrhhXjyubaubeubeubjü)r}r‚(hWUhXj³hchdhejÿhg}rƒ(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r„}r…(hWUhXj³hchdhejhg}r†(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr‡j j‡uhqNhrhhs]rˆ(j )r‰}rŠ(hWXdata-dir: directoryhXj„hchdhejhg}r‹(hl]rŒXpkg-field-data-dirrahk]hi]hj]ho]j‰uhqMîhrhhs]rŽ(jü)r}r(hWUhXj‰hchdhejÿhg}r‘(hl]hk]hi]hj]ho]Uentries]r’(jXdata-dir; package.cabal fieldjUNtr“auhqMîhrhhs]ubj)r”}r•(hWXdata-dirr–hXj‰hchdhejhg}r—(jÔjÕhl]hk]hi]hj]ho]uhqMîhrhhs]r˜h|Xdata-dirr™…rš}r›(hWUhcNhqNhrhhXj”ubaubj%)rœ}r(hWjžhXj‰hchdhej(hg}rž(jÔjÕhl]hk]hi]hj]ho]uhqMîhrhhs]rŸh|X: r …r¡}r¢(hWUhcNhqNhrhhXjœubaubj¤)r£}r¤(hWX directoryhXj‰hchdhej§hg}r¥(jÔjÕhl]hk]hi]hj]ho]uhqMîhrhhs]r¦h|X directoryr§…r¨}r©(hWUhcNhqNhrhhXj£ubaubeubj-)rª}r«(hWUhXj„hchdhej0hg}r¬(hi]hj]hk]hl]ho]uhqMîhrhhs]r­h€)r®}r¯(hWX˜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°hXjªhchdheh„hg}r±(hi]hj]hk]hl]ho]uhqMëhrhhs]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³…r´}rµ(hWj°hcNhqNhrhhXj®ubaubaubeubjü)r¶}r·(hWUhXj³hchdhejÿhg}r¸(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r¹}rº(hWUhXj³hchdhejhg}r»(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr¼j j¼uhqNhrhhs]r½(j )r¾}r¿(hWX!extra-source-files: filename listhXj¹hchdhejhg}rÀ(hl]rÁXpkg-field-extra-source-filesrÂahk]hi]hj]ho]j‰uhqMôhrhhs]rÃ(jü)rÄ}rÅ(hWUhXj¾hchdhejÿhg}rÆ(hl]hk]hi]hj]ho]Uentries]rÇ(jX'extra-source-files; package.cabal fieldjÂUNtrÈauhqMôhrhhs]ubj)rÉ}rÊ(hWXextra-source-filesrËhXj¾hchdhejhg}rÌ(jÔjÕhl]hk]hi]hj]ho]uhqMôhrhhs]rÍh|Xextra-source-filesrÎ…rÏ}rÐ(hWUhcNhqNhrhhXjÉubaubj%)rÑ}rÒ(hWjžhXj¾hchdhej(hg}rÓ(jÔjÕhl]hk]hi]hj]ho]uhqMôhrhhs]rÔh|X: rÕ…rÖ}r×(hWUhcNhqNhrhhXjÑubaubj¤)rØ}rÙ(hWX filename listhXj¾hchdhej§hg}rÚ(jÔjÕhl]hk]hi]hj]ho]uhqMôhrhhs]rÛh|X filename listrÜ…rÝ}rÞ(hWUhcNhqNhrhhXjØubaubeubj-)rß}rà(hWUhXj¹hchdhej0hg}rá(hi]hj]hk]hl]ho]uhqMôhrhhs]râh€)rã}rä(hWX¼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.hXjßhchdheh„hg}rå(hi]hj]hk]hl]ho]uhqMñhrhhs]ræ(h|XMA list of additional files to be included in source distributions built with rç…rè}ré(hWXMA list of additional files to be included in source distributions built with hcNhqNhrhhXjãubjn)rê}rë(hWX:ref:`setup-sdist`rìhXjãhchdhejrhg}rí(UreftypeXrefjtˆjuX setup-sdistU refdomainXstdrîhl]hk]U refexplicit‰hi]hj]ho]jwjxuhqMñhs]rïjz)rð}rñ(hWjìhg}rò(hi]hj]ró(jjîXstd-refrôehk]hl]ho]uhXjêhs]rõh|X setup-sdiströ…r÷}rø(hWUhXjðubahej…ubaubh|X . As with rù…rú}rû(hWX . As with hcNhqNhrhhXjãubjn)rü}rý(hWX:pkg-field:`data-files`rþhXjãhchdhejrhg}rÿ(UreftypeX pkg-fieldjtˆjuX data-filesU refdomainXcabalrhl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqMñhs]rhâ)r}r(hWjþhg}r(hi]hj]r(jjXcabal-pkg-fieldrehk]hl]ho]uhXjühs]rh|X data-filesr…r }r (hWUhXjubahehêubaubh|X it can use a limited form of r …r }r (hWX it can use a limited form of hcNhqNhrhhXjãubhâ)r}r(hWX``*``hg}r(hi]hj]hk]hl]ho]uhXjãhs]rh|X*…r}r(hWUhXjubahehêubh|X wildcards in file names.r…r}r(hWX wildcards in file names.hcNhqNhrhhXjãubeubaubeubjü)r}r(hWUhXj³hchdhejÿhg}r(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r}r(hWUhXj³hchdhejhg}r(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrj juhqNhrhhs]r(j )r}r (hWXextra-doc-files: filename listhXjhchdhejhg}r!(hl]r"Xpkg-field-extra-doc-filesr#ahk]hi]hj]ho]j‰uhqMûhrhhs]r$(jü)r%}r&(hWUhXjhchdhejÿhg}r'(hl]hk]hi]hj]ho]Uentries]r((jX$extra-doc-files; package.cabal fieldj#UNtr)auhqMûhrhhs]ubj)r*}r+(hWXextra-doc-filesr,hXjhchdhejhg}r-(jÔjÕhl]hk]hi]hj]ho]uhqMûhrhhs]r.h|Xextra-doc-filesr/…r0}r1(hWUhcNhqNhrhhXj*ubaubj%)r2}r3(hWjžhXjhchdhej(hg}r4(jÔjÕhl]hk]hi]hj]ho]uhqMûhrhhs]r5h|X: r6…r7}r8(hWUhcNhqNhrhhXj2ubaubj¤)r9}r:(hWX filename listhXjhchdhej§hg}r;(jÔjÕhl]hk]hi]hj]ho]uhqMûhrhhs]r<h|X filename listr=…r>}r?(hWUhcNhqNhrhhXj9ubaubeubj-)r@}rA(hWUhXjhchdhej0hg}rB(hi]hj]hk]hl]ho]uhqMûhrhhs]rCh€)rD}rE(hWXí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.hXj@hchdheh„hg}rF(hi]hj]hk]hl]ho]uhqM÷hrhhs]rG(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 rH…rI}rJ(hWXš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 hcNhqNhrhhXjDubjn)rK}rL(hWX:pkg-field:`data-files`rMhXjDhchdhejrhg}rN(UreftypeX pkg-fieldjtˆjuX data-filesU refdomainXcabalrOhl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqM÷hs]rPhâ)rQ}rR(hWjMhg}rS(hi]hj]rT(jjOXcabal-pkg-fieldrUehk]hl]ho]uhXjKhs]rVh|X data-filesrW…rX}rY(hWUhXjQubahehêubaubh|X it can use a limited form of rZ…r[}r\(hWX it can use a limited form of hcNhqNhrhhXjDubhâ)r]}r^(hWX``*``hg}r_(hi]hj]hk]hl]ho]uhXjDhs]r`h|X*…ra}rb(hWUhXj]ubahehêubh|X wildcards in file names.rc…rd}re(hWX wildcards in file names.hcNhqNhrhhXjDubeubaubeubjü)rf}rg(hWUhXj³hchdhejÿhg}rh(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)ri}rj(hWUhXj³hchdhejhg}rk(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrlj jluhqNhrhhs]rm(j )rn}ro(hWXextra-tmp-files: filename listhXjihchdhejhg}rp(hl]rqXpkg-field-extra-tmp-filesrrahk]hi]hj]ho]j‰uhqMhrhhs]rs(jü)rt}ru(hWUhXjnhchdhejÿhg}rv(hl]hk]hi]hj]ho]Uentries]rw(jX$extra-tmp-files; package.cabal fieldjrUNtrxauhqMhrhhs]ubj)ry}rz(hWXextra-tmp-filesr{hXjnhchdhejhg}r|(jÔjÕhl]hk]hi]hj]ho]uhqMhrhhs]r}h|Xextra-tmp-filesr~…r}r€(hWUhcNhqNhrhhXjyubaubj%)r}r‚(hWjžhXjnhchdhej(hg}rƒ(jÔjÕhl]hk]hi]hj]ho]uhqMhrhhs]r„h|X: r……r†}r‡(hWUhcNhqNhrhhXjubaubj¤)rˆ}r‰(hWX filename listhXjnhchdhej§hg}rŠ(jÔjÕhl]hk]hi]hj]ho]uhqMhrhhs]r‹h|X filename listrŒ…r}rŽ(hWUhcNhqNhrhhXjˆubaubeubj-)r}r(hWUhXjihchdhej0hg}r‘(hi]hj]hk]hl]ho]uhqMhrhhs]r’h€)r“}r”(hWXä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`_hXjhchdheh„hg}r•(hi]hj]hk]hl]ho]uhqMþhrhhs]r–(h|X;A list of additional files or directories to be removed by r—…r˜}r™(hWX;A list of additional files or directories to be removed by hcNhqNhrhhXj“ubjn)rš}r›(hWX:ref:`setup-clean`rœhXj“hchdhejrhg}r(UreftypeXrefjtˆjuX setup-cleanU refdomainXstdržhl]hk]U refexplicit‰hi]hj]ho]jwjxuhqMþhs]rŸjz)r }r¡(hWjœhg}r¢(hi]hj]r£(jjžXstd-refr¤ehk]hl]ho]uhXjšhs]r¥h|X setup-cleanr¦…r§}r¨(hWUhXj ubahej…ubaubh|Xy. These would typically be additional files created by additional hooks, such as the scheme described in the section on r©…rª}r«(hWXy. These would typically be additional files created by additional hooks, such as the scheme described in the section on hcNhqNhrhhXj“ubjB)r¬}r­(hWX`system-dependent parameters`_jEKhXj“hejFhg}r®(UnameXsystem-dependent parametershl]hk]hi]hj]ho]jHj“uhs]r¯h|Xsystem-dependent parametersr°…r±}r²(hWUhXj¬ubaubeubaubeubeubhY)r³}r´(hWUh\KhXh_hchdhehfhg}rµ(hi]hj]hk]hl]r¶jÈaho]r·hauhqMhrhhs]r¸(hu)r¹}rº(hWXLibraryr»hXj³hchdhehyhg}r¼(hi]hj]hk]hl]ho]uhqMhrhhs]r½h|XLibraryr¾…r¿}rÀ(hWj»hcNhqNhrhhXj¹ubaubjü)rÁ}rÂ(hWUhXj³hchdhejÿhg}rÃ(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rÄ}rÅ(hWUhXj³hchdhejhg}rÆ(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-sectionrÇj jÇuhqNhrhhs]rÈ(j )rÉ}rÊ(hWXlibraryrËhXjÄhchdhejhg}rÌ(hl]rÍXpkg-section-library-libraryrÎahk]hi]hj]ho]j‰uhqNhrhhs]rÏ(jü)rÐ}rÑ(hWUhXjÉhchdhejÿhg}rÒ(hl]hk]hi]hj]ho]Uentries]rÓ(jX&library:library; package.cabal sectionjÎUNtrÔauhqNhrhhs]ubj)rÕ}rÖ(hWjËhXjÉhchdhejhg}r×(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]rØh|XlibraryrÙ…rÚ}rÛ(hWUhcNhqNhrhhXjÕubaubj%)rÜ}rÝ(hWU hXjÉhchdhej(hg}rÞ(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]rßh|X …rà}rá(hWUhcNhqNhrhhXjÜubaubeubj-)râ}rã(hWUhXjÄhchdhej0hg}rä(hi]hj]hk]hl]ho]uhqNhrhhs]råh€)ræ}rç(hWXœBuild information for libraries. There can be only one library in a package, and its name is the same as package name set by global :pkg-field:`name` field.hXjâhchdheh„hg}rè(hi]hj]hk]hl]ho]uhqM hrhhs]ré(h|X„Build information for libraries. There can be only one library in a package, and its name is the same as package name set by global rê…rë}rì(hWX„Build information for libraries. There can be only one library in a package, and its name is the same as package name set by global hcNhqNhrhhXjæubjn)rí}rî(hWX:pkg-field:`name`rïhXjæhchdhejrhg}rð(UreftypeX pkg-fieldjtˆjuXnameU refdomainXcabalrñhl]hk]U refexplicit‰hi]hj]ho]jwjxjŽjËuhqM hs]ròhâ)ró}rô(hWjïhg}rõ(hi]hj]rö(jjñXcabal-pkg-fieldr÷ehk]hl]ho]uhXjíhs]røh|Xnamerù…rú}rû(hWUhXjóubahehêubaubh|X field.rü…rý}rþ(hWX field.hcNhqNhrhhXjæubeubaubeubh€)rÿ}r(hWX8The library section should contain the following fields:rhXj³hchdheh„hg}r(hi]hj]hk]hl]ho]uhqM hrhhs]rh|X8The library section should contain the following fields:r…r}r(hWjhcNhqNhrhhXjÿubaubjü)r}r(hWUhXj³hchdhejÿhg}r (hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r }r (hWUhXj³hchdhejhg}r (j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr j j uhqNhrhhs]r(j )r}r(hWX exposed-modules: identifier listhXj hchdhejhg}r(hl]rX!pkg-field-library-exposed-modulesrahk]hi]hj]ho]j‰uhqMhrhhs]r(jü)r}r(hWUhXjhchdhejÿhg}r(hl]hk]hi]hj]ho]Uentries]r(jX,library:exposed-modules; package.cabal fieldjUNtrauhqMhrhhs]ubj)r}r(hWXexposed-modulesrhXjhchdhejhg}r(jÔjÕhl]hk]hi]hj]ho]uhqMhrhhs]rh|Xexposed-modulesr…r }r!(hWUhcNhqNhrhhXjubaubj%)r"}r#(hWjžhXjhchdhej(hg}r$(jÔjÕhl]hk]hi]hj]ho]uhqMhrhhs]r%h|X: r&…r'}r((hWUhcNhqNhrhhXj"ubaubj¤)r)}r*(hWXidentifier listhXjhchdhej§hg}r+(jÔjÕhl]hk]hi]hj]ho]uhqMhrhhs]r,h|Xidentifier listr-…r.}r/(hWUhcNhqNhrhhXj)ubaubeubj-)r0}r1(hWUhXj hchdhej0hg}r2(hi]hj]hk]hl]ho]uhqMhrhhs]r3(j3)r4}r5(hWUhXj0hchdhej6hg}r6(hi]hj]hk]hl]ho]uhqNhrhhs]r7j9)r8}r9(hWUhXj4hchdhej<hg}r:(hi]hj]hk]hl]ho]uhqMhrhhs]r;(j?)r<}r=(hWXrequiredhXj8hchdhejChg}r>(hi]hj]hk]hl]ho]uhqKhs]r?h|XRequiredr@…rA}rB(hWUhXj<ubaubjI)rC}rD(hWX#if this package contains a library hg}rE(hi]hj]hk]hl]ho]uhXj8hs]rFh€)rG}rH(hWX"if this package contains a libraryrIhXjChchdheh„hg}rJ(hi]hj]hk]hl]ho]uhqMhs]rKh|X"if this package contains a libraryrL…rM}rN(hWjIhXjGubaubahejVubeubaubh€)rO}rP(hWX(A list of modules added by this package.rQhXj0hchdheh„hg}rR(hi]hj]hk]hl]ho]uhqMhrhhs]rSh|X(A list of modules added by this package.rT…rU}rV(hWjQhcNhqNhrhhXjOubaubeubeubjü)rW}rX(hWUhXj³hchdhejÿhg}rY(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rZ}r[(hWUhXj³hchdhejhg}r\(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr]j j]uhqNhrhhs]r^(j )r_}r`(hWX virtual-modules: identifier listhXjZhchdhejhg}ra(hl]rbX!pkg-field-library-virtual-modulesrcahk]hi]hj]ho]j‰uhqMhrhhs]rd(jü)re}rf(hWUhXj_hchdhejÿhg}rg(hl]hk]hi]hj]ho]Uentries]rh(jX,library:virtual-modules; package.cabal fieldjcUNtriauhqMhrhhs]ubj)rj}rk(hWXvirtual-modulesrlhXj_hchdhejhg}rm(jÔjÕhl]hk]hi]hj]ho]uhqMhrhhs]rnh|Xvirtual-modulesro…rp}rq(hWUhcNhqNhrhhXjjubaubj%)rr}rs(hWjžhXj_hchdhej(hg}rt(jÔjÕhl]hk]hi]hj]ho]uhqMhrhhs]ruh|X: rv…rw}rx(hWUhcNhqNhrhhXjrubaubj¤)ry}rz(hWXidentifier listhXj_hchdhej§hg}r{(jÔjÕhl]hk]hi]hj]ho]uhqMhrhhs]r|h|Xidentifier listr}…r~}r(hWUhcNhqNhrhhXjyubaubeubj-)r€}r(hWUhXjZhchdhej0hg}r‚(hi]hj]hk]hl]ho]uhqMhrhhs]rƒh€)r„}r…(hWXaA 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.hXj€hchdheh„hg}r†(hi]hj]hk]hl]ho]uhqMhrhhs]r‡(h|X}A list of virtual modules provided by this package. Virtual modules are modules without a source file. See for example the rˆ…r‰}rŠ(hWX}A list of virtual modules provided by this package. Virtual modules are modules without a source file. See for example the hcNhqNhrhhXj„ubhâ)r‹}rŒ(hWX ``GHC.Prim``hg}r(hi]hj]hk]hl]ho]uhXj„hs]rŽh|XGHC.Primr…r}r‘(hWUhXj‹ubahehêubh|X module from the r’…r“}r”(hWX module from the hcNhqNhrhhXj„ubhâ)r•}r–(hWX ``ghc-prim``hg}r—(hi]hj]hk]hl]ho]uhXj„hs]r˜h|Xghc-primr™…rš}r›(hWUhXj•ubahehêubh|XR package. Modules listed here will not be built, but still end up in the list of rœ…r}rž(hWXR package. Modules listed here will not be built, but still end up in the list of hcNhqNhrhhXj„ubhâ)rŸ}r (hWX``exposed-modules``hg}r¡(hi]hj]hk]hl]ho]uhXj„hs]r¢h|Xexposed-modulesr£…r¤}r¥(hWUhXjŸubahehêubh|XV in the installed package info when the package is registered in the package database.r¦…r§}r¨(hWXV in the installed package info when the package is registered in the package database.hcNhqNhrhhXj„ubeubaubeubjü)r©}rª(hWUhXj³hchdhejÿhg}r«(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r¬}r­(hWUhXj³hchdhejhg}r®(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr¯j j¯uhqNhrhhs]r°(j )r±}r²(hWXexposed: booleanhXj¬hchdhejhg}r³(hl]r´Xpkg-field-library-exposedrµahk]hi]hj]ho]j‰uhqM.hrhhs]r¶(jü)r·}r¸(hWUhXj±hchdhejÿhg}r¹(hl]hk]hi]hj]ho]Uentries]rº(jX$library:exposed; package.cabal fieldjµUNtr»auhqM.hrhhs]ubj)r¼}r½(hWXexposedr¾hXj±hchdhejhg}r¿(jÔjÕhl]hk]hi]hj]ho]uhqM.hrhhs]rÀh|XexposedrÁ…rÂ}rÃ(hWUhcNhqNhrhhXj¼ubaubj%)rÄ}rÅ(hWjžhXj±hchdhej(hg}rÆ(jÔjÕhl]hk]hi]hj]ho]uhqM.hrhhs]rÇh|X: rÈ…rÉ}rÊ(hWUhcNhqNhrhhXjÄubaubj¤)rË}rÌ(hWXbooleanhXj±hchdhej§hg}rÍ(jÔjÕhl]hk]hi]hj]ho]uhqM.hrhhs]rÎh|XbooleanrÏ…rÐ}rÑ(hWUhcNhqNhrhhXjËubaubeubj-)rÒ}rÓ(hWUhXj¬hchdhej0hg}rÔ(hi]hj]hk]hl]ho]uhqM.hrhhs]rÕ(j3)rÖ}r×(hWUhXjÒhchdhej6hg}rØ(hi]hj]hk]hl]ho]uhqNhrhhs]rÙj9)rÚ}rÛ(hWUhg}rÜ(hi]hj]hk]hl]ho]uhXjÖhs]rÝ(j?)rÞ}rß(hWX Default valuehXjÚhchdhejChg}rà(hi]hj]hk]hl]ho]uhqKhs]ráh|X Default valuerâ…rã}rä(hWUhXjÞubaubjI)rå}ræ(hWUhg}rç(hi]hj]hk]hl]ho]uhXjÚhs]rèh€)ré}rê(hWXTruehg}rë(hi]hj]hk]hl]ho]uhXjåhs]rìhâ)rí}rî(hWX``True``hXjéhchdhehêhg}rï(hi]hj]hk]hl]ho]uhqNhrhhs]rðh|XTruerñ…rò}ró(hWUhcNhqNhrhhXjíubaubaheh„ubahejVubehej<ubaubh€)rô}rõ(hWXmSome 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öhXjÒhchdheh„hg}r÷(hi]hj]hk]hl]ho]uhqM"hrhhs]røh|XuSome 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û(hWjöhcNhqNhrhhXjôubaubh€)rü}rý(hWX>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.hXjÒhchdheh„hg}rþ(hi]hj]hk]hl]ho]uhqM)hrhhs]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 r…r}r(hWXŸ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 hcNhqNhrhhXjüubhâ)r}r(hWX``exposed: False``hg}r(hi]hj]hk]hl]ho]uhXjühs]rh|Xexposed: Falser…r}r (hWUhXjubahehêubh|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.r …r }r (hWX 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.hcNhqNhrhhXjüubeubeubeubjü)r }r(hWUhXj³hchdhejÿhg}r(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r}r(hWUhXj³hchdhejhg}r(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrj juhqNhrhhs]r(j )r}r(hWXreexported-modules: exportlisthXjhchdhejhg}r(hl]rX$pkg-field-library-reexported-modulesrahk]hi]hj]ho]j‰uhqM@hrhhs]r(jü)r}r(hWUhXjhchdhejÿhg}r(hl]hk]hi]hj]ho]Uentries]r(jX/library:reexported-modules; package.cabal fieldjUNtrauhqM@hrhhs]ubj)r }r!(hWXreexported-modulesr"hXjhchdhejhg}r#(jÔjÕhl]hk]hi]hj]ho]uhqM@hrhhs]r$h|Xreexported-modulesr%…r&}r'(hWUhcNhqNhrhhXj ubaubj%)r(}r)(hWjžhXjhchdhej(hg}r*(jÔjÕhl]hk]hi]hj]ho]uhqM@hrhhs]r+h|X: r,…r-}r.(hWUhcNhqNhrhhXj(ubaubj¤)r/}r0(hWX exportlisthXjhchdhej§hg}r1(jÔjÕhl]hk]hi]hj]ho]uhqM@hrhhs]r2h|X exportlistr3…r4}r5(hWUhcNhqNhrhhXj/ubaubeubj-)r6}r7(hWUhXjhchdhej0hg}r8(hi]hj]hk]hl]ho]uhqM@hrhhs]r9(h€)r:}r;(hWXÄ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.hXj6hchdheh„hg}r<(hi]hj]hk]hl]ho]uhqM1hrhhs]r=(h|X;Supported only in GHC 7.10 and later. A list of modules to r>…r?}r@(hWX;Supported only in GHC 7.10 and later. A list of modules to hcNhqNhrhhXj:ubhÂ)rA}rB(hWX *reexport*hg}rC(hi]hj]hk]hl]ho]uhXj:hs]rDh|XreexportrE…rF}rG(hWUhXjAubahehÊubh|X0 from this package. The syntax of this field is rH…rI}rJ(hWX0 from this package. The syntax of this field is hcNhqNhrhhXj:ubhâ)rK}rL(hWX``orig-pkg:Name as NewName``hg}rM(hi]hj]hk]hl]ho]uhXj:hs]rNh|Xorig-pkg:Name as NewNamerO…rP}rQ(hWUhXjKubahehêubh|X to reexport module rR…rS}rT(hWX to reexport module hcNhqNhrhhXj:ubhâ)rU}rV(hWX``Name``hg}rW(hi]hj]hk]hl]ho]uhXj:hs]rXh|XNamerY…rZ}r[(hWUhXjUubahehêubh|X from r\…r]}r^(hWX from hcNhqNhrhhXj:ubhâ)r_}r`(hWX ``orig-pkg``hg}ra(hi]hj]hk]hl]ho]uhXj:hs]rbh|Xorig-pkgrc…rd}re(hWUhXj_ubahehêubh|X with the new name rf…rg}rh(hWX with the new name hcNhqNhrhhXj:ubhâ)ri}rj(hWX ``NewName``hg}rk(hi]hj]hk]hl]ho]uhXj:hs]rlh|XNewNamerm…rn}ro(hWUhXjiubahehêubh|XB. We also support abbreviated versions of the syntax: if you omit rp…rq}rr(hWXB. We also support abbreviated versions of the syntax: if you omit hcNhqNhrhhXj:ubhâ)rs}rt(hWX``as NewName``hg}ru(hi]hj]hk]hl]ho]uhXj:hs]rvh|X as NewNamerw…rx}ry(hWUhXjsubahehêubh|X1, we’ll reexport without renaming; if you omit rz…r{}r|(hWX/, we'll reexport without renaming; if you omit hcNhqNhrhhXj:ubhâ)r}}r~(hWX ``orig-pkg``hg}r(hi]hj]hk]hl]ho]uhXj:hs]r€h|Xorig-pkgr…r‚}rƒ(hWUhXj}ubahehêubh|X^, then we will automatically figure out which package to reexport from, if it’s unambiguous.r„…r…}r†(hWX\, then we will automatically figure out which package to reexport from, if it's unambiguous.hcNhqNhrhhXj:ubeubh€)r‡}rˆ(hWXhReexported 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‰hXj6hchdheh„hg}rŠ(hi]hj]hk]hl]ho]uhqM:hrhhs]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Œ…r}rŽ(hWj‰hcNhqNhrhhXj‡ubaubeubeubh€)r}r(hWXhThe library section may also contain build information fields (see the section on `build information`_).hXj³hchdheh„hg}r‘(hi]hj]hk]hl]ho]uhqMAhrhhs]r’(h|XRThe library section may also contain build information fields (see the section on r“…r”}r•(hWXRThe library section may also contain build information fields (see the section on hcNhqNhrhhXjubjB)r–}r—(hWX`build information`_jEKhXjhejFhg}r˜(UnameXbuild informationhl]hk]hi]hj]ho]jHjZuhs]r™h|Xbuild informationrš…r›}rœ(hWUhXj–ubaubh|X).r…rž}rŸ(hWX).hcNhqNhrhhXjubeubh€)r }r¡(hWXÄ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:hXj³hchdheh„hg}r¢(hi]hj]hk]hl]ho]uhqMDhrhhs]r£(h|XsCabal 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¦(hWXoCabal 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 hcNhqNhrhhXj ubjn)r§}r¨(hWX:pkg-field:`build-depends`r©hXj hchdhejrhg}rª(UreftypeX pkg-fieldjtˆjuX build-dependsU refdomainXcabalr«hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽjËuhqMDhs]r¬hâ)r­}r®(hWj©hg}r¯(hi]hj]r°(jj«Xcabal-pkg-fieldr±ehk]hl]ho]uhXj§hs]r²h|X build-dependsr³…r´}rµ(hWUhXj­ubahehêubaubh|X; upon. Then your Cabal file might look something like this:r¶…r·}r¸(hWX; upon. Then your Cabal file might look something like this:hcNhqNhrhhXj ubeubjÏ)r¹}rº(hWXˆname: foo version: 1.0 license: BSD3 cabal-version: >= 1.24 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, basehXj³hchdhejÒhg}r»(jÔjÕhl]hk]hi]hj]ho]uhqMNhrhhs]r¼h|Xˆname: foo version: 1.0 license: BSD3 cabal-version: >= 1.24 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¿(hWUhXj¹ubaubh€)rÀ}rÁ(hWXÔ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 :pkg-field:`build-depends` of same-package libraries, executables, test suites, etc.) Internal libraries locally shadow any packages which have the same name (so don't name an internal library with the same name as an external dependency.)hXj³hchdheh„hg}rÂ(hi]hj]hk]hl]ho]uhqMehrhhs]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 rÄ…rÅ}rÆ(hWXå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 hcNhqNhrhhXjÀubjn)rÇ}rÈ(hWX:pkg-field:`build-depends`rÉhXjÀhchdhejrhg}rÊ(UreftypeX pkg-fieldjtˆjuX build-dependsU refdomainXcabalrËhl]hk]U refexplicit‰hi]hj]ho]jwjxjŽjËuhqMehs]rÌhâ)rÍ}rÎ(hWjÉhg}rÏ(hi]hj]rÐ(jjËXcabal-pkg-fieldrÑehk]hl]ho]uhXjÇhs]rÒh|X build-dependsrÓ…rÔ}rÕ(hWUhXjÍubahehêubaubh|X× of same-package libraries, executables, test suites, etc.) Internal libraries locally shadow any packages which have the same name (so don’t name an internal library with the same name as an external dependency.)rÖ…r×}rØ(hWXÕ of same-package libraries, executables, test suites, etc.) Internal libraries locally shadow any packages which have the same name (so don't name an internal library with the same name as an external dependency.)hcNhqNhrhhXjÀubeubeubhY)rÙ}rÚ(hWUhXh_hchdhehfhg}rÛ(hi]hj]hk]hl]rÜUopening-an-interpreter-sessionrÝaho]rÞhIauhqMnhrhhs]rß(hu)rà}rá(hWXOpening an interpreter sessionrâhXjÙhchdhehyhg}rã(hi]hj]hk]hl]ho]uhqMnhrhhs]räh|XOpening an interpreter sessionrå…ræ}rç(hWjâhcNhqNhrhhXjàubaubh€)rè}ré(hWX”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:hXjÙhchdheh„hg}rê(hi]hj]hk]hl]ho]uhqMphrhhs]rë(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 rì…rí}rî(hWXƒWhile developing a package, it is often useful to make its code available inside an interpreter session. This can be done with the hcNhqNhrhhXjèubhâ)rï}rð(hWX``repl``hg}rñ(hi]hj]hk]hl]ho]uhXjèhs]ròh|Xreplró…rô}rõ(hWUhXjïubahehêubh|X command:rö…r÷}rø(hWX command:hcNhqNhrhhXjèubeubjÏ)rù}rú(hWX $ cabal replhXjÙhchdhejÒhg}rû(j‰jXconsolejÔjÕhl]hk]hi]j}hj]ho]uhqMthrhhs]rüh|X $ cabal replrý…rþ}rÿ(hWUhXjùubaubh€)r}r(hWX¥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:hXjÙhchdheh„hg}r(hi]hj]hk]hl]ho]uhqMxhrhhs]r(h|X The name comes from the acronym r…r}r(hWX The name comes from the acronym hcNhqNhrhhXjubjB)r}r(hWXL`REPL `__hg}r (UnameXREPLjXAhttp://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loophl]hk]hi]hj]ho]uhXjhs]r h|XREPLr …r }r (hWUhXjubahejFubh|X:, which stands for “read-eval-print-loopâ€. By default r…r}r(hWX6, which stands for "read-eval-print-loop". By default hcNhqNhrhhXjubhâ)r}r(hWX``cabal repl``hg}r(hi]hj]hk]hl]ho]uhXjhs]rh|X cabal replr…r}r(hWUhXjubahehêubh|Xƒ loads the first component in a package. If the package contains several named components, the name can be given as an argument to r…r}r(hWXƒ loads the first component in a package. If the package contains several named components, the name can be given as an argument to hcNhqNhrhhXjubhâ)r}r(hWX``repl``hg}r(hi]hj]hk]hl]ho]uhXjhs]rh|Xreplr…r }r!(hWUhXjubahehêubh|Xl. The name can be also optionally prefixed with the component’s type for disambiguation purposes. Example:r"…r#}r$(hWXj. The name can be also optionally prefixed with the component's type for disambiguation purposes. Example:hcNhqNhrhhXjubeubjÏ)r%}r&(hWXR$ cabal repl foo $ cabal repl exe:foo $ cabal repl test:bar $ cabal repl bench:bazhXjÙhchdhejÒhg}r'(j‰jXconsolejÔjÕhl]hk]hi]j}hj]ho]uhqM€hrhhs]r(h|XR$ cabal repl foo $ cabal repl exe:foo $ cabal repl test:bar $ cabal repl bench:bazr)…r*}r+(hWUhXj%ubaubhY)r,}r-(hWUhXjÙhchdhehfhg}r.(hi]hj]hk]hl]r/Ufreezing-dependency-versionsr0aho]r1h auhqMˆhrhhs]r2(hu)r3}r4(hWXFreezing dependency versionsr5hXj,hchdhehyhg}r6(hi]hj]hk]hl]ho]uhqMˆhrhhs]r7h|XFreezing dependency versionsr8…r9}r:(hWj5hcNhqNhrhhXj3ubaubh€)r;}r<(hWX,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:hXj,hchdheh„hg}r=(hi]hj]hk]hl]ho]uhqMŠhrhhs]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 r?…r@}rA(hWXIf 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 hcNhqNhrhhXj;ubhâ)rB}rC(hWX ``freeze``hg}rD(hi]hj]hk]hl]ho]uhXj;hs]rEh|XfreezerF…rG}rH(hWUhXjBubahehêubh|X command:rI…rJ}rK(hWX command:hcNhqNhrhhXj;ubeubjÏ)rL}rM(hWX$ cabal freezehXj,hchdhejÒhg}rN(j‰jXconsolejÔjÕhl]hk]hi]j}hj]ho]uhqMhrhhs]rOh|X$ cabal freezerP…rQ}rR(hWUhXjLubaubh€)rS}rT(hWX³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.hXj,hchdheh„hg}rU(hi]hj]hk]hl]ho]uhqM”hrhhs]rV(h|XDThe command writes the selected version for all dependencies to the rW…rX}rY(hWXDThe command writes the selected version for all dependencies to the hcNhqNhrhhXjSubhâ)rZ}r[(hWX``cabal.config``hg}r\(hi]hj]hk]hl]ho]uhXjShs]r]h|X cabal.configr^…r_}r`(hWUhXjZubahehêubh|X_ file. All environments which share this file will use the dependency versions specified in it.ra…rb}rc(hWX_ file. All environments which share this file will use the dependency versions specified in it.hcNhqNhrhhXjSubeubeubhY)rd}re(hWUhXjÙhchdhehfhg}rf(hi]hj]hk]hl]rgU$generating-dependency-version-boundsrhaho]rihauhqM™hrhhs]rj(hu)rk}rl(hWX$Generating dependency version boundsrmhXjdhchdhehyhg}rn(hi]hj]hk]hl]ho]uhqM™hrhhs]roh|X$Generating dependency version boundsrp…rq}rr(hWjmhcNhqNhrhhXjkubaubh€)rs}rt(hWXð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:hXjdhchdheh„hg}ru(hi]hj]hk]hl]ho]uhqM›hrhhs]rv(h|XPCabal also has the ability to suggest dependency version bounds that conform to rw…rx}ry(hWXPCabal also has the ability to suggest dependency version bounds that conform to hcNhqNhrhhXjsubjB)rz}r{(hWX`Package Versioning Policy`_jEKhXjshejFhg}r|(UnameXPackage Versioning Policyjjhl]hk]hi]hj]ho]uhs]r}h|XPackage Versioning Policyr~…r}r€(hWUhXjzubaubh|Xm, which is a recommended versioning system for publicly released Cabal packages. This is done by running the r…r‚}rƒ(hWXm, which is a recommended versioning system for publicly released Cabal packages. This is done by running the hcNhqNhrhhXjsubhâ)r„}r…(hWX``gen-bounds``hg}r†(hi]hj]hk]hl]ho]uhXjshs]r‡h|X gen-boundsrˆ…r‰}rŠ(hWUhXj„ubahehêubh|X command:r‹…rŒ}r(hWX command:hcNhqNhrhhXjsubeubjÏ)rŽ}r(hWX$ cabal gen-boundshXjdhchdhejÒhg}r(j‰jXconsolejÔjÕhl]hk]hi]j}hj]ho]uhqM hrhhs]r‘h|X$ cabal gen-boundsr’…r“}r”(hWUhXjŽubaubh€)r•}r–(hWXVFor example, given the following dependencies specified in :pkg-field:`build-depends`:hXjdhchdheh„hg}r—(hi]hj]hk]hl]ho]uhqM¤hrhhs]r˜(h|X;For example, given the following dependencies specified in r™…rš}r›(hWX;For example, given the following dependencies specified in hcNhqNhrhhXj•ubjn)rœ}r(hWX:pkg-field:`build-depends`ržhXj•hchdhejrhg}rŸ(UreftypeX pkg-fieldjtˆjuX build-dependsU refdomainXcabalr hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽjËuhqM¤hs]r¡hâ)r¢}r£(hWjžhg}r¤(hi]hj]r¥(jj Xcabal-pkg-fieldr¦ehk]hl]ho]uhXjœhs]r§h|X build-dependsr¨…r©}rª(hWUhXj¢ubahehêubaubh|X:…r«}r¬(hWX:hcNhqNhrhhXj•ubeubjÏ)r­}r®(hWX*build-depends: foo == 0.5.2 bar == 1.1hXjdhchdhejÒhg}r¯(jÔjÕhl]hk]hi]hj]ho]uhqM©hrhhs]r°h|X*build-depends: foo == 0.5.2 bar == 1.1r±…r²}r³(hWUhXj­ubaubh€)r´}rµ(hWX;``gen-bounds`` will suggest changing them to the following:r¶hXjdhchdheh„hg}r·(hi]hj]hk]hl]ho]uhqM­hrhhs]r¸(hâ)r¹}rº(hWX``gen-bounds``hg}r»(hi]hj]hk]hl]ho]uhXj´hs]r¼h|X gen-boundsr½…r¾}r¿(hWUhXj¹ubahehêubh|X- will suggest changing them to the following:rÀ…rÁ}rÂ(hWX- will suggest changing them to the following:hcNhqNhrhhXj´ubeubjÏ)rÃ}rÄ(hWX<build-depends: foo >= 0.5.2 && < 0.6 bar >= 1.1 && < 1.2hXjdhchdhejÒhg}rÅ(jÔjÕhl]hk]hi]hj]ho]uhqM±hrhhs]rÆh|X<build-depends: foo >= 0.5.2 && < 0.6 bar >= 1.1 && < 1.2rÇ…rÈ}rÉ(hWUhXjÃubaubeubhY)rÊ}rË(hWUhXjÙhchdhehfhg}rÌ(hi]hj]hk]hl]rÍU*listing-outdated-dependency-version-boundsrÎaho]rÏhauhqM¶hrhhs]rÐ(hu)rÑ}rÒ(hWX*Listing outdated dependency version boundsrÓhXjÊhchdhehyhg}rÔ(hi]hj]hk]hl]ho]uhqM¶hrhhs]rÕh|X*Listing outdated dependency version boundsrÖ…r×}rØ(hWjÓhcNhqNhrhhXjÑubaubh€)rÙ}rÚ(hWXManually 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 new-style) and ignore major (or all) version bumps on Hackage for a subset of dependencies.hXjÊhchdheh„hg}rÛ(hi]hj]hk]hl]ho]uhqM¸hrhhs]rÜ(h|X1Manually updating dependency version bounds in a rÝ…rÞ}rß(hWX1Manually updating dependency version bounds in a hcNhqNhrhhXjÙubhâ)rà}rá(hWX ``.cabal``hg}râ(hi]hj]hk]hl]ho]uhXjÙhs]rãh|X.cabalrä…rå}ræ(hWUhXjàubahehêubh|X\ file or a freeze file can be tedious, especially when there’s a lot of dependencies. The rç…rè}ré(hWXZ file or a freeze file can be tedious, especially when there's a lot of dependencies. The hcNhqNhrhhXjÙubhâ)rê}rë(hWX``cabal outdated``hg}rì(hi]hj]hk]hl]ho]uhXjÙhs]ríh|Xcabal outdatedrî…rï}rð(hWUhXjêubahehêubh|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 rñ…rò}ró(hWX¨ 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 hcNhqNhrhhXjÙubhâ)rô}rõ(hWX``build-depends``hg}rö(hi]hj]hk]hl]ho]uhXjÙhs]r÷h|X build-dependsrø…rù}rú(hWUhXjôubahehêubh|X field. The rû…rü}rý(hWX field. The hcNhqNhrhhXjÙubhâ)rþ}rÿ(hWX ``outdated``hg}r(hi]hj]hk]hl]ho]uhXjÙhs]rh|Xoutdatedr…r}r(hWUhXjþubahehêubh|X¤ command can also be configured to act on the freeze file (both old- and new-style) and ignore major (or all) version bumps on Hackage for a subset of dependencies.r…r}r(hWX¤ command can also be configured to act on the freeze file (both old- and new-style) and ignore major (or all) version bumps on Hackage for a subset of dependencies.hcNhqNhrhhXjÙubeubh€)r}r (hWX>The following flags are supported by the ``outdated`` command:r hXjÊhchdheh„hg}r (hi]hj]hk]hl]ho]uhqMÂhrhhs]r (h|X)The following flags are supported by the r …r}r(hWX)The following flags are supported by the hcNhqNhrhhXjubhâ)r}r(hWX ``outdated``hg}r(hi]hj]hk]hl]ho]uhXjhs]rh|Xoutdatedr…r}r(hWUhXjubahehêubh|X command:r…r}r(hWX command:hcNhqNhrhhXjubeubj)r}r(hWUhXjÊhchdhejhg}r(hi]hj]hk]hl]ho]uhqNhrhhs]r(j)r}r(hWXš``--freeze-file`` Read dependency version bounds from the freeze file (``cabal.config``) instead of the package description file (``$PACKAGENAME.cabal``).hXjhchdhejhg}r (hi]hj]hk]hl]ho]uhqMÅhs]r!(j)r"}r#(hWX``--freeze-file``r$hXjhchdhej#hg}r%(hi]hj]hk]hl]ho]uhqMÅhs]r&hâ)r'}r((hWj$hg}r)(hi]hj]hk]hl]ho]uhXj"hs]r*h|X --freeze-filer+…r,}r-(hWUhXj'ubahehêubaubj6)r.}r/(hWUhg}r0(hi]hj]hk]hl]ho]uhXjhs]r1h€)r2}r3(hWXˆRead dependency version bounds from the freeze file (``cabal.config``) instead of the package description file (``$PACKAGENAME.cabal``).hXj.hchdheh„hg}r4(hi]hj]hk]hl]ho]uhqMÅhs]r5(h|X5Read dependency version bounds from the freeze file (r6…r7}r8(hWX5Read dependency version bounds from the freeze file (hXj2ubhâ)r9}r:(hWX``cabal.config``hg}r;(hi]hj]hk]hl]ho]uhXj2hs]r<h|X cabal.configr=…r>}r?(hWUhXj9ubahehêubh|X+) instead of the package description file (r@…rA}rB(hWX+) instead of the package description file (hXj2ubhâ)rC}rD(hWX``$PACKAGENAME.cabal``hg}rE(hi]hj]hk]hl]ho]uhXj2hs]rFh|X$PACKAGENAME.cabalrG…rH}rI(hWUhXjCubahehêubh|X).rJ…rK}rL(hWX).hXj2ubeubahejPubeubj)rM}rN(hWX—``--new-freeze-file`` Read dependency version bounds from the new-style freeze file (``cabal.project.freeze``) instead of the package description file.hXjhchdhejhg}rO(hi]hj]hk]hl]ho]uhqMÈhrhhs]rP(j)rQ}rR(hWX``--new-freeze-file``rShXjMhchdhej#hg}rT(hi]hj]hk]hl]ho]uhqMÈhs]rUhâ)rV}rW(hWjShg}rX(hi]hj]hk]hl]ho]uhXjQhs]rYh|X--new-freeze-filerZ…r[}r\(hWUhXjVubahehêubaubj6)r]}r^(hWUhg}r_(hi]hj]hk]hl]ho]uhXjMhs]r`h€)ra}rb(hWXRead dependency version bounds from the new-style freeze file (``cabal.project.freeze``) instead of the package description file.hXj]hchdheh„hg}rc(hi]hj]hk]hl]ho]uhqMÈhs]rd(h|X?Read dependency version bounds from the new-style freeze file (re…rf}rg(hWX?Read dependency version bounds from the new-style freeze file (hXjaubhâ)rh}ri(hWX``cabal.project.freeze``hg}rj(hi]hj]hk]hl]ho]uhXjahs]rkh|Xcabal.project.freezerl…rm}rn(hWUhXjhubahehêubh|X*) instead of the package description file.ro…rp}rq(hWX*) instead of the package description file.hXjaubeubahejPubeubj)rr}rs(hWXP``--simple-output`` Print only the names of outdated dependencies, one per line.hXjhchdhejhg}rt(hi]hj]hk]hl]ho]uhqMÊhrhhs]ru(j)rv}rw(hWX``--simple-output``rxhXjrhchdhej#hg}ry(hi]hj]hk]hl]ho]uhqMÊhs]rzhâ)r{}r|(hWjxhg}r}(hi]hj]hk]hl]ho]uhXjvhs]r~h|X--simple-outputr…r€}r(hWUhXj{ubahehêubaubj6)r‚}rƒ(hWUhg}r„(hi]hj]hk]hl]ho]uhXjrhs]r…h€)r†}r‡(hWX<Print only the names of outdated dependencies, one per line.rˆhXj‚hchdheh„hg}r‰(hi]hj]hk]hl]ho]uhqMËhs]rŠh|X<Print only the names of outdated dependencies, one per line.r‹…rŒ}r(hWjˆhXj†ubaubahejPubeubj)rŽ}r(hWXT``--exit-code`` Exit with a non-zero exit code when there are outdated dependencies.hXjhchdhejhg}r(hi]hj]hk]hl]ho]uhqMÌhrhhs]r‘(j)r’}r“(hWX``--exit-code``r”hXjŽhchdhej#hg}r•(hi]hj]hk]hl]ho]uhqMÌhs]r–hâ)r—}r˜(hWj”hg}r™(hi]hj]hk]hl]ho]uhXj’hs]ršh|X --exit-coder›…rœ}r(hWUhXj—ubahehêubaubj6)rž}rŸ(hWUhg}r (hi]hj]hk]hl]ho]uhXjŽhs]r¡h€)r¢}r£(hWXDExit with a non-zero exit code when there are outdated dependencies.r¤hXjžhchdheh„hg}r¥(hi]hj]hk]hl]ho]uhqMÍhs]r¦h|XDExit with a non-zero exit code when there are outdated dependencies.r§…r¨}r©(hWj¤hXj¢ubaubahejPubeubj)rª}r«(hWXL``-q, --quiet`` Don't print any output. Implies ``-v0`` and ``--exit-code``.hXjhchdhejhg}r¬(hi]hj]hk]hl]ho]uhqMÎhrhhs]r­(j)r®}r¯(hWX``-q, --quiet``r°hXjªhchdhej#hg}r±(hi]hj]hk]hl]ho]uhqMÎhs]r²hâ)r³}r´(hWj°hg}rµ(hi]hj]hk]hl]ho]uhXj®hs]r¶h|X -q, --quietr·…r¸}r¹(hWUhXj³ubahehêubaubj6)rº}r»(hWUhg}r¼(hi]hj]hk]hl]ho]uhXjªhs]r½h€)r¾}r¿(hWX<Don't print any output. Implies ``-v0`` and ``--exit-code``.hXjºhchdheh„hg}rÀ(hi]hj]hk]hl]ho]uhqMÏhs]rÁ(h|X"Don’t print any output. Implies rÂ…rÃ}rÄ(hWX Don't print any output. Implies hXj¾ubhâ)rÅ}rÆ(hWX``-v0``hg}rÇ(hi]hj]hk]hl]ho]uhXj¾hs]rÈh|X-v0rÉ…rÊ}rË(hWUhXjÅubahehêubh|X and rÌ…rÍ}rÎ(hWX and hXj¾ubhâ)rÏ}rÐ(hWX``--exit-code``hg}rÑ(hi]hj]hk]hl]ho]uhXj¾hs]rÒh|X --exit-coderÓ…rÔ}rÕ(hWUhXjÏubahehêubh|X.…rÖ}r×(hWX.hXj¾ubeubahejPubeubj)rØ}rÙ(hWXn``--ignore`` *PACKAGENAMES* Don't warn about outdated dependency version bounds for the packages in this list.hXjhchdhejhg}rÚ(hi]hj]hk]hl]ho]uhqMÑhrhhs]rÛ(j)rÜ}rÝ(hWX``--ignore`` *PACKAGENAMES*rÞhXjØhchdhej#hg}rß(hi]hj]hk]hl]ho]uhqMÑhs]rà(hâ)rá}râ(hWX ``--ignore``hg}rã(hi]hj]hk]hl]ho]uhXjÜhs]räh|X--ignorerå…ræ}rç(hWUhXjáubahehêubh|X …rè}ré(hWX hXjÜubhÂ)rê}rë(hWX*PACKAGENAMES*hg}rì(hi]hj]hk]hl]ho]uhXjÜhs]ríh|X PACKAGENAMESrî…rï}rð(hWUhXjêubahehÊubeubj6)rñ}rò(hWUhg}ró(hi]hj]hk]hl]ho]uhXjØhs]rôh€)rõ}rö(hWXRDon't warn about outdated dependency version bounds for the packages in this list.r÷hXjñhchdheh„hg}rø(hi]hj]hk]hl]ho]uhqMÑhs]rùh|XTDon’t warn about outdated dependency version bounds for the packages in this list.rú…rû}rü(hWj÷hXjõubaubahejPubeubj)rý}rþ(hWXÖ``--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. hXjhchdhejhg}rÿ(hi]hj]hk]hl]ho]uhqMÙhrhhs]r(j)r}r(hWX``--minor`` *[PACKAGENAMES]*rhXjýhchdhej#hg}r(hi]hj]hk]hl]ho]uhqMÙhs]r(hâ)r}r(hWX ``--minor``hg}r(hi]hj]hk]hl]ho]uhXjhs]r h|X--minorr …r }r (hWUhXjubahehêubh|X …r }r(hWX hXjubhÂ)r}r(hWX*[PACKAGENAMES]*hg}r(hi]hj]hk]hl]ho]uhXjhs]rh|X[PACKAGENAMES]r…r}r(hWUhXjubahehÊubeubj6)r}r(hWUhg}r(hi]hj]hk]hl]ho]uhXjýhs]rh€)r}r(hWX¸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.hXjhchdheh„hg}r(hi]hj]hk]hl]ho]uhqMÔhs]r(h|X\Ignore major version bumps for these packages. E.g. if there’s a version 2.0 of a package r…r}r (hWXZIgnore major version bumps for these packages. E.g. if there's a version 2.0 of a package hXjubhâ)r!}r"(hWX``pkg``hg}r#(hi]hj]hk]hl]ho]uhXjhs]r$h|Xpkgr%…r&}r'(hWUhXj!ubahehêubh|X9 on Hackage and the freeze file specifies the constraint r(…r)}r*(hWX9 on Hackage and the freeze file specifies the constraint hXjubhâ)r+}r,(hWX``pkg == 1.9``hg}r-(hi]hj]hk]hl]ho]uhXjhs]r.h|X pkg == 1.9r/…r0}r1(hWUhXj+ubahehêubh|X, r2…r3}r4(hWX, hXjubhâ)r5}r6(hWX'``cabal outdated --freeze --minor=pkg``hg}r7(hi]hj]hk]hl]ho]uhXjhs]r8h|X#cabal outdated --freeze --minor=pkgr9…r:}r;(hWUhXj5ubahehêubh|X will only consider the r<…r=}r>(hWX will only consider the hXjubhâ)r?}r@(hWX``pkg``hg}rA(hi]hj]hk]hl]ho]uhXjhs]rBh|XpkgrC…rD}rE(hWUhXj?ubahehêubh|X& outdated when there’s a version of rF…rG}rH(hWX$ outdated when there's a version of hXjubhâ)rI}rJ(hWX``pkg``hg}rK(hi]hj]hk]hl]ho]uhXjhs]rLh|XpkgrM…rN}rO(hWUhXjIubahehêubh|X on Hackage satisfying rP…rQ}rR(hWX on Hackage satisfying hXjubhâ)rS}rT(hWX``pkg > 1.9 && < 2.0``hg}rU(hi]hj]hk]hl]ho]uhXjhs]rVh|Xpkg > 1.9 && < 2.0rW…rX}rY(hWUhXjSubahehêubh|X. rZ…r[}r\(hWX. hXjubhâ)r]}r^(hWX ``--minor``hg}r_(hi]hj]hk]hl]ho]uhXjhs]r`h|X--minorra…rb}rc(hWUhXj]ubahehêubh|Xc can also be used without arguments, in that case major version bumps are ignored for all packages.rd…re}rf(hWXc can also be used without arguments, in that case major version bumps are ignored for all packages.hXjubeubahejPubeubeubh€)rg}rh(hWX Examples:rihXjÊhchdheh„hg}rj(hi]hj]hk]hl]ho]uhqMÛhrhhs]rkh|X Examples:rl…rm}rn(hWjihcNhqNhrhhXjgubaubjÏ)ro}rp(hWXM$ 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)hXjÊhchdhejÒhg}rq(j‰jXconsolejÔjÕhl]hk]hi]j}hj]ho]uhqMÝhrhhs]rrh|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)rs…rt}ru(hWUhXjoubaubeubeubhY)rv}rw(hWUhXh_hchdhehfhg}rx(hi]hj]hk]hl]ryU executablesrzaho]r{hauhqMhrhhs]r|(hu)r}}r~(hWX ExecutablesrhXjvhchdhehyhg}r€(hi]hj]hk]hl]ho]uhqMhrhhs]rh|X Executablesr‚…rƒ}r„(hWjhcNhqNhrhhXj}ubaubjü)r…}r†(hWUhXjvhchdhejÿhg}r‡(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rˆ}r‰(hWUhXjvhchdhejhg}rŠ(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-sectionr‹j j‹uhqNhrhhs]rŒ(j )r}rŽ(hWXexecutable namehXjˆhchdhejhg}r(hl]rX!pkg-section-executable-executabler‘ahk]hi]hj]ho]j‰uhqNhrhhs]r’(jü)r“}r”(hWUhXjhchdhejÿhg}r•(hl]hk]hi]hj]ho]Uentries]r–(jX,executable:executable; package.cabal sectionj‘UNtr—auhqNhrhhs]ubj)r˜}r™(hWX executableršhXjhchdhejhg}r›(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]rœh|X executabler…rž}rŸ(hWUhcNhqNhrhhXj˜ubaubj%)r }r¡(hWU hXjhchdhej(hg}r¢(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]r£h|X …r¤}r¥(hWUhcNhqNhrhhXj ubaubj¤)r¦}r§(hWXnamehXjhchdhej§hg}r¨(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]r©h|Xnamerª…r«}r¬(hWUhcNhqNhrhhXj¦ubaubeubj-)r­}r®(hWUhXjˆhchdhej0hg}r¯(hi]hj]hk]hl]ho]uhqNhrhhs]r°h€)r±}r²(hWXë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³hXj­hchdheh„hg}r´(hi]hj]hk]hl]ho]uhqMhrhhs]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¶…r·}r¸(hWj³hcNhqNhrhhXj±ubaubaubeubh€)r¹}rº(hWXŠThe executable may be described using the following fields, as well as build information fields (see the section on `build information`_).hXjvhchdheh„hg}r»(hi]hj]hk]hl]ho]uhqM hrhhs]r¼(h|XtThe executable may be described using the following fields, as well as build information fields (see the section on r½…r¾}r¿(hWXtThe executable may be described using the following fields, as well as build information fields (see the section on hcNhqNhrhhXj¹ubjB)rÀ}rÁ(hWX`build information`_jEKhXj¹hejFhg}rÂ(UnameXbuild informationhl]hk]hi]hj]ho]jHjZuhs]rÃh|Xbuild informationrÄ…rÅ}rÆ(hWUhXjÀubaubh|X).rÇ…rÈ}rÉ(hWX).hcNhqNhrhhXj¹ubeubjü)rÊ}rË(hWUhXjvhchdhejÿhg}rÌ(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rÍ}rÎ(hWUhXjvhchdhejhg}rÏ(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrÐj jÐuhqNhrhhs]rÑ(j )rÒ}rÓ(hWXmain-is: filename (required)hXjÍhchdhejhg}rÔ(hl]rÕXpkg-field-executable-main-isrÖahk]hi]hj]ho]j‰uhqMhrhhs]r×(jü)rØ}rÙ(hWUhXjÒhchdhejÿhg}rÚ(hl]hk]hi]hj]ho]Uentries]rÛ(jX'executable:main-is; package.cabal fieldjÖUNtrÜauhqMhrhhs]ubj)rÝ}rÞ(hWXmain-isrßhXjÒhchdhejhg}rà(jÔjÕhl]hk]hi]hj]ho]uhqMhrhhs]ráh|Xmain-isrâ…rã}rä(hWUhcNhqNhrhhXjÝubaubj%)rå}ræ(hWjžhXjÒhchdhej(hg}rç(jÔjÕhl]hk]hi]hj]ho]uhqMhrhhs]rèh|X: ré…rê}rë(hWUhcNhqNhrhhXjåubaubj¤)rì}rí(hWXfilename (required)hXjÒhchdhej§hg}rî(jÔjÕhl]hk]hi]hj]ho]uhqMhrhhs]rïh|Xfilename (required)rð…rñ}rò(hWUhcNhqNhrhhXjìubaubeubj-)ró}rô(hWUhXjÍhchdhej0hg}rõ(hi]hj]hk]hl]ho]uhqMhrhhs]röh€)r÷}rø(hWXqThe 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``.hXjóhchdheh„hg}rù(hi]hj]hk]hl]ho]uhqMhrhhs]rú(h|XThe name of the rû…rü}rý(hWXThe name of the hcNhqNhrhhXj÷ubhâ)rþ}rÿ(hWX``.hs``hg}r (hi]hj]hk]hl]ho]uhXj÷hs]r h|X.hsr …r }r (hWUhXjþubahehêubh|X or r …r }r (hWX or hcNhqNhrhhXj÷ubhâ)r }r (hWX``.lhs``hg}r (hi]hj]hk]hl]ho]uhXj÷hs]r h|X.lhsr …r }r (hWUhXj ubahehêubh|X file containing the r …r }r (hWX file containing the hcNhqNhrhhXj÷ubhâ)r }r (hWX``Main``hg}r (hi]hj]hk]hl]ho]uhXj÷hs]r h|XMainr …r }r (hWUhXj ubahehêubh|X module. Note that it is the r …r }r (hWX module. Note that it is the hcNhqNhrhhXj÷ubhâ)r }r (hWX``.hs``hg}r (hi]hj]hk]hl]ho]uhXj÷hs]r h|X.hsr …r! }r" (hWUhXj ubahehêubh|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 r# …r$ }r% (hWX™ 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 hcNhqNhrhhXj÷ubjn)r& }r' (hWX:pkg-field:`hs-source-dirs`r( hXj÷hchdhejrhg}r) (UreftypeX pkg-fieldjtˆjuXhs-source-dirsU refdomainXcabalr* hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽX executabler+ uhqMhs]r, hâ)r- }r. (hWj( hg}r/ (hi]hj]r0 (jj* Xcabal-pkg-fieldr1 ehk]hl]ho]uhXj& hs]r2 h|Xhs-source-dirsr3 …r4 }r5 (hWUhXj- ubahehêubaubh|XP. Further, while the name of the file may vary, the module itself must be named r6 …r7 }r8 (hWXP. Further, while the name of the file may vary, the module itself must be named hcNhqNhrhhXj÷ubhâ)r9 }r: (hWX``Main``hg}r; (hi]hj]hk]hl]ho]uhXj÷hs]r< h|XMainr= …r> }r? (hWUhXj9 ubahehêubh|X.…r@ }rA (hWX.hcNhqNhrhhXj÷ubeubaubeubjü)rB }rC (hWUhXjvhchdhejÿhg}rD (hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rE }rF (hWUhXjvhchdhejhg}rG (j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrH j jH uhqNhrhhs]rI (j )rJ }rK (hWX scope: tokenhXjE hchdhejhg}rL (hl]rM Xpkg-field-executable-scoperN ahk]hi]hj]ho]j‰uhqNhrhhs]rO (jü)rP }rQ (hWUhXjJ hchdhejÿhg}rR (hl]hk]hi]hj]ho]Uentries]rS (jX%executable:scope; package.cabal fieldjN UNtrT auhqNhrhhs]ubj)rU }rV (hWXscoperW hXjJ hchdhejhg}rX (jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]rY h|XscoperZ …r[ }r\ (hWUhcNhqNhrhhXjU ubaubj%)r] }r^ (hWjžhXjJ hchdhej(hg}r_ (jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]r` h|X: ra …rb }rc (hWUhcNhqNhrhhXj] ubaubj¤)rd }re (hWXtokenhXjJ hchdhej§hg}rf (jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]rg h|Xtokenrh …ri }rj (hWUhcNhqNhrhhXjd ubaubeubj-)rk }rl (hWUhXjE hchdhej0hg}rm (hi]hj]hk]hl]ho]uhqNhrhhs]rn (j3)ro }rp (hWUhXjk hchdhej6hg}rq (hi]hj]hk]hl]ho]uhqNhrhhs]rr j9)rs }rt (hWUhXjo hchdhej<hg}ru (hi]hj]hk]hl]ho]uhqNhrhhs]rv (j?)rw }rx (hWjBhXjs hchdhejChg}ry (hi]hj]hk]hl]ho]uhqKhs]rz h|XSincer{ …r| }r} (hWUhXjw ubaubjI)r~ }r (hWU Cabal 2.0r€ hg}r (hi]hj]hk]hl]ho]uhXjs hs]r‚ h€)rƒ }r„ (hWj€ hg}r… (hi]hj]hk]hl]ho]uhXj~ hs]r† h|X Cabal 2.0r‡ …rˆ }r‰ (hWUhXjƒ ubaheh„ubahejVubeubaubh€)rŠ }r‹ (hWXÀ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`.hXjk hchdheh„hg}rŒ (hi]hj]hk]hl]ho]uhqMhrhhs]r (h|XWhether the executable is rŽ …r }r (hWXWhether the executable is hcNhqNhrhhXjŠ ubhâ)r‘ }r’ (hWX ``public``hg}r“ (hi]hj]hk]hl]ho]uhXjŠ hs]r” h|Xpublicr• …r– }r— (hWUhXj‘ ubahehêubh|X (default) or r˜ …r™ }rš (hWX (default) or hcNhqNhrhhXjŠ ubhâ)r› }rœ (hWX ``private``hg}r (hi]hj]hk]hl]ho]uhXjŠ hs]rž h|XprivaterŸ …r  }r¡ (hWUhXj› ubahehêubh|Xf, i.e. meant to be run by other programs rather than the user. Private executables are installed into r¢ …r£ }r¤ (hWXf, i.e. meant to be run by other programs rather than the user. Private executables are installed into hcNhqNhrhhXjŠ ubcdocutils.nodes title_reference r¥ )r¦ }r§ (hWX`$libexecdir/$libexecsubdir`hg}r¨ (hi]hj]hk]hl]ho]uhXjŠ hs]r© h|X$libexecdir/$libexecsubdirrª …r« }r¬ (hWUhXj¦ ubaheUtitle_referencer­ ubh|X.…r® }r¯ (hWX.hcNhqNhrhhXjŠ ubeubeubeubhY)r° }r± (hWUhXjvhchdhehfhg}r² (hi]hj]hk]hl]r³ Urunning-executablesr´ aho]rµ hauhqM!hrhhs]r¶ (hu)r· }r¸ (hWXRunning executablesr¹ hXj° hchdhehyhg}rº (hi]hj]hk]hl]ho]uhqM!hrhhs]r» h|XRunning executablesr¼ …r½ }r¾ (hWj¹ hcNhqNhrhhXj· ubaubh€)r¿ }rÀ (hWXOYou can have Cabal build and run your executables by using the ``run`` command:hXj° hchdheh„hg}rÁ (hi]hj]hk]hl]ho]uhqM#hrhhs]r (h|X?You can have Cabal build and run your executables by using the rà …rÄ }rÅ (hWX?You can have Cabal build and run your executables by using the hcNhqNhrhhXj¿ ubhâ)rÆ }rÇ (hWX``run``hg}rÈ (hi]hj]hk]hl]ho]uhXj¿ hs]rÉ h|XrunrÊ …rË }rÌ (hWUhXjÆ ubahehêubh|X command:rÍ …rÎ }rÏ (hWX command:hcNhqNhrhhXj¿ ubeubjÏ)rÐ }rÑ (hWX,$ cabal run EXECUTABLE [-- EXECUTABLE_FLAGS]hXj° hchdhejÒhg}rÒ (j‰jXconsolejÔjÕhl]hk]hi]j}hj]ho]uhqM&hrhhs]rÓ h|X,$ cabal run EXECUTABLE [-- EXECUTABLE_FLAGS]rÔ …rÕ }rÖ (hWUhXjÐ ubaubh€)r× }rØ (hWXgThis 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``.hXj° hchdheh„hg}rÙ (hi]hj]hk]hl]ho]uhqM*hrhhs]rÚ (h|X:This command will configure, build and run the executable rÛ …rÜ }rÝ (hWX:This command will configure, build and run the executable hcNhqNhrhhXj× ubhâ)rÞ }rß (hWX``EXECUTABLE``hg}rà (hi]hj]hk]hl]ho]uhXj× hs]rá h|X EXECUTABLErâ …rã }rä (hWUhXjÞ ubahehêubh|XM. The double dash separator is required to distinguish executable flags from rå …ræ }rç (hWXM. The double dash separator is required to distinguish executable flags from hcNhqNhrhhXj× ubhâ)rè }ré (hWX``run``hg}rê (hi]hj]hk]hl]ho]uhXj× hs]rë h|Xrunrì …rí }rî (hWUhXjè ubahehêubh|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 rï …rð }rñ (hWX„'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 hcNhqNhrhhXj× ubhâ)rò }ró (hWX``cabal help run``hg}rô (hi]hj]hk]hl]ho]uhXj× hs]rõ h|Xcabal help runrö …r÷ }rø (hWUhXjò ubahehêubh|X' for a list of options you can pass to rù …rú }rû (hWX' for a list of options you can pass to hcNhqNhrhhXj× ubhâ)rü }rý (hWX ``cabal run``hg}rþ (hi]hj]hk]hl]ho]uhXj× hs]rÿ h|X cabal runr!…r!}r!(hWUhXjü ubahehêubh|X.…r!}r!(hWX.hcNhqNhrhhXj× ubeubeubeubhY)r!}r!(hWUhXh_hchdhehfhg}r!(hi]hj]hk]hl]r!U test-suitesr !aho]r !hauhqM2hrhhs]r !(hu)r !}r !(hWX Test suitesr!hXj!hchdhehyhg}r!(hi]hj]hk]hl]ho]uhqM2hrhhs]r!h|X Test suitesr!…r!}r!(hWj!hcNhqNhrhhXj !ubaubjü)r!}r!(hWUhXj!hchdhejÿhg}r!(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r!}r!(hWUhXj!hchdhejhg}r!(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-sectionr!j j!uhqNhrhhs]r!(j )r!}r!(hWXtest-suite namehXj!hchdhejhg}r!(hl]r!X!pkg-section-test-suite-test-suiter !ahk]hi]hj]ho]j‰uhqNhrhhs]r!!(jü)r"!}r#!(hWUhXj!hchdhejÿhg}r$!(hl]hk]hi]hj]ho]Uentries]r%!(jX,test-suite:test-suite; package.cabal sectionj !UNtr&!auhqNhrhhs]ubj)r'!}r(!(hWX test-suiter)!hXj!hchdhejhg}r*!(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]r+!h|X test-suiter,!…r-!}r.!(hWUhcNhqNhrhhXj'!ubaubj%)r/!}r0!(hWU hXj!hchdhej(hg}r1!(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]r2!h|X …r3!}r4!(hWUhcNhqNhrhhXj/!ubaubj¤)r5!}r6!(hWXnamehXj!hchdhej§hg}r7!(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]r8!h|Xnamer9!…r:!}r;!(hWUhcNhqNhrhhXj5!ubaubeubj-)r!(hi]hj]hk]hl]ho]uhqNhrhhs]r?!h€)r@!}rA!(hWXTest 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.rB!hXjhrhhs]rK!(h|XtThe test suite may be described using the following fields, as well as build information fields (see the section on rL!…rM!}rN!(hWXtThe test suite may be described using the following fields, as well as build information fields (see the section on hcNhqNhrhhXjH!ubjB)rO!}rP!(hWX`build information`_jEKhXjH!hejFhg}rQ!(UnameXbuild informationhl]hk]hi]hj]ho]jHjZuhs]rR!h|Xbuild informationrS!…rT!}rU!(hWUhXjO!ubaubh|X).rV!…rW!}rX!(hWX).hcNhqNhrhhXjH!ubeubjü)rY!}rZ!(hWUhXj!hchdhejÿhg}r[!(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r\!}r]!(hWUhXj!hchdhejhg}r^!(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr_!j j_!uhqNhrhhs]r`!(j )ra!}rb!(hWXtype: interface (required)hXj\!hchdhejhg}rc!(hl]rd!Xpkg-field-test-suite-typere!ahk]hi]hj]ho]j‰uhqMGhrhhs]rf!(jü)rg!}rh!(hWUhXja!hchdhejÿhg}ri!(hl]hk]hi]hj]ho]Uentries]rj!(jX$test-suite:type; package.cabal fieldje!UNtrk!auhqMGhrhhs]ubj)rl!}rm!(hWXtypern!hXja!hchdhejhg}ro!(jÔjÕhl]hk]hi]hj]ho]uhqMGhrhhs]rp!h|Xtyperq!…rr!}rs!(hWUhcNhqNhrhhXjl!ubaubj%)rt!}ru!(hWjžhXja!hchdhej(hg}rv!(jÔjÕhl]hk]hi]hj]ho]uhqMGhrhhs]rw!h|X: rx!…ry!}rz!(hWUhcNhqNhrhhXjt!ubaubj¤)r{!}r|!(hWXinterface (required)hXja!hchdhej§hg}r}!(jÔjÕhl]hk]hi]hj]ho]uhqMGhrhhs]r~!h|Xinterface (required)r!…r€!}r!(hWUhcNhqNhrhhXj{!ubaubeubj-)r‚!}rƒ!(hWUhXj\!hchdhej0hg}r„!(hi]hj]hk]hl]ho]uhqMGhrhhs]r…!h€)r†!}r‡!(hWXÜ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.hXj‚!hchdheh„hg}rˆ!(hi]hj]hk]hl]ho]uhqMChrhhs]r‰!(h|XcThe interface type and version of the test suite. Cabal supports two test suite interfaces, called rŠ!…r‹!}rŒ!(hWXcThe interface type and version of the test suite. Cabal supports two test suite interfaces, called hcNhqNhrhhXj†!ubhâ)r!}rŽ!(hWX``exitcode-stdio-1.0``hg}r!(hi]hj]hk]hl]ho]uhXj†!hs]r!h|Xexitcode-stdio-1.0r‘!…r’!}r“!(hWUhXj!ubahehêubh|X and r”!…r•!}r–!(hWX and hcNhqNhrhhXj†!ubhâ)r—!}r˜!(hWX``detailed-0.9``hg}r™!(hi]hj]hk]hl]ho]uhXj†!hs]rš!h|X detailed-0.9r›!…rœ!}r!(hWUhXj—!ubahehêubh|XN. Each of these types may require or disallow other fields as described below.rž!…rŸ!}r !(hWXN. Each of these types may require or disallow other fields as described below.hcNhqNhrhhXj†!ubeubaubeubh€)r¡!}r¢!(hWX%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.hXj!hchdheh„hg}r£!(hi]hj]hk]hl]ho]uhqMHhrhhs]r¤!(h|XTest suites using the r¥!…r¦!}r§!(hWXTest suites using the hcNhqNhrhhXj¡!ubhâ)r¨!}r©!(hWX``exitcode-stdio-1.0``hg}rª!(hi]hj]hk]hl]ho]uhXj¡!hs]r«!h|Xexitcode-stdio-1.0r¬!…r­!}r®!(hWUhXj¨!ubahehêubh|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 r¯!…r°!}r±!(hWX¾ 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 hcNhqNhrhhXj¡!ubhâ)r²!}r³!(hWX``exitcode-stdio-1.0``hg}r´!(hi]hj]hk]hl]ho]uhXj¡!hs]rµ!h|Xexitcode-stdio-1.0r¶!…r·!}r¸!(hWUhXj²!ubahehêubh|X type requires the r¹!…rº!}r»!(hWX type requires the hcNhqNhrhhXj¡!ubhâ)r¼!}r½!(hWX ``main-is``hg}r¾!(hi]hj]hk]hl]ho]uhXj¡!hs]r¿!h|Xmain-isrÀ!…rÁ!}rÂ!(hWUhXj¼!ubahehêubh|X field.rÃ!…rÄ!}rÅ!(hWX field.hcNhqNhrhhXj¡!ubeubjü)rÆ!}rÇ!(hWUhXj!hchdhejÿhg}rÈ!(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rÉ!}rÊ!(hWUhXj!hchdhejhg}rË!(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrÌ!j jÌ!uhqNhrhhs]rÍ!(j )rÎ!}rÏ!(hWXmain-is: filenamehXjÉ!hchdhejhg}rÐ!(hl]rÑ!Xpkg-field-test-suite-main-isrÒ!ahk]hi]hj]ho]j‰uhqNhrhhs]rÓ!(jü)rÔ!}rÕ!(hWUhXjÎ!hchdhejÿhg}rÖ!(hl]hk]hi]hj]ho]Uentries]r×!(jX'test-suite:main-is; package.cabal fieldjÒ!UNtrØ!auhqNhrhhs]ubj)rÙ!}rÚ!(hWXmain-isrÛ!hXjÎ!hchdhejhg}rÜ!(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]rÝ!h|Xmain-isrÞ!…rß!}rà!(hWUhcNhqNhrhhXjÙ!ubaubj%)rá!}râ!(hWjžhXjÎ!hchdhej(hg}rã!(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]rä!h|X: rå!…ræ!}rç!(hWUhcNhqNhrhhXjá!ubaubj¤)rè!}ré!(hWXfilenamehXjÎ!hchdhej§hg}rê!(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]rë!h|Xfilenamerì!…rí!}rî!(hWUhcNhqNhrhhXjè!ubaubeubj-)rï!}rð!(hWUhXjÉ!hchdhej0hg}rñ!(hi]hj]hk]hl]ho]uhqNhrhhs]rò!(j3)ró!}rô!(hWUhXjï!hchdhej6hg}rõ!(hi]hj]hk]hl]ho]uhqNhrhhs]rö!(j9)r÷!}rø!(hWUhXjó!hchdhej<hg}rù!(hi]hj]hk]hl]ho]uhqMQhrhhs]rú!(j?)rû!}rü!(hWXrequiredhXj÷!hchdhejChg}rý!(hi]hj]hk]hl]ho]uhqKhs]rþ!h|XRequiredrÿ!…r"}r"(hWUhXjû!ubaubjI)r"}r"(hWX``exitcode-stdio-1.0``r"hg}r"(hi]hj]hk]hl]ho]uhXj÷!hs]r"h€)r"}r"(hWj"hXj"hchdheh„hg}r "(hi]hj]hk]hl]ho]uhqMQhs]r "hâ)r "}r "(hWj"hg}r "(hi]hj]hk]hl]ho]uhXj"hs]r"h|Xexitcode-stdio-1.0r"…r"}r"(hWUhXj "ubahehêubaubahejVubeubj9)r"}r"(hWUhXjó!hchdhej<hg}r"(hi]hj]hk]hl]ho]uhqMRhrhhs]r"(j?)r"}r"(hWX disallowedhXj"hchdhejChg}r"(hi]hj]hk]hl]ho]uhqKhs]r"h|X Disallowedr"…r"}r"(hWUhXj"ubaubjI)r"}r"(hWX``detailed-0.9`` hg}r"(hi]hj]hk]hl]ho]uhXj"hs]r "h€)r!"}r""(hWX``detailed-0.9``r#"hXj"hchdheh„hg}r$"(hi]hj]hk]hl]ho]uhqMRhs]r%"hâ)r&"}r'"(hWj#"hg}r("(hi]hj]hk]hl]ho]uhXj!"hs]r)"h|X detailed-0.9r*"…r+"}r,"(hWUhXj&"ubahehêubaubahejVubeubeubh€)r-"}r."(hWXdThe 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.hXjï!hchdheh„hg}r/"(hi]hj]hk]hl]ho]uhqMThrhhs]r0"(h|XThe name of the r1"…r2"}r3"(hWXThe name of the hcNhqNhrhhXj-"ubhâ)r4"}r5"(hWX``.hs``hg}r6"(hi]hj]hk]hl]ho]uhXj-"hs]r7"h|X.hsr8"…r9"}r:"(hWUhXj4"ubahehêubh|X or r;"…r<"}r="(hWX or hcNhqNhrhhXj-"ubhâ)r>"}r?"(hWX``.lhs``hg}r@"(hi]hj]hk]hl]ho]uhXj-"hs]rA"h|X.lhsrB"…rC"}rD"(hWUhXj>"ubahehêubh|X file containing the rE"…rF"}rG"(hWX file containing the hcNhqNhrhhXj-"ubhâ)rH"}rI"(hWX``Main``hg}rJ"(hi]hj]hk]hl]ho]uhXj-"hs]rK"h|XMainrL"…rM"}rN"(hWUhXjH"ubahehêubh|X module. Note that it is the rO"…rP"}rQ"(hWX module. Note that it is the hcNhqNhrhhXj-"ubhâ)rR"}rS"(hWX``.hs``hg}rT"(hi]hj]hk]hl]ho]uhXj-"hs]rU"h|X.hsrV"…rW"}rX"(hWUhXjR"ubahehêubh|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 rY"…rZ"}r["(hWX™ 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 hcNhqNhrhhXj-"ubjn)r\"}r]"(hWX:pkg-field:`hs-source-dirs`r^"hXj-"hchdhejrhg}r_"(UreftypeX pkg-fieldjtˆjuXhs-source-dirsU refdomainXcabalr`"hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽX test-suitera"uhqMThs]rb"hâ)rc"}rd"(hWj^"hg}re"(hi]hj]rf"(jj`"Xcabal-pkg-fieldrg"ehk]hl]ho]uhXj\"hs]rh"h|Xhs-source-dirsri"…rj"}rk"(hWUhXjc"ubahehêubaubh|X!. This field is analogous to the rl"…rm"}rn"(hWX!. This field is analogous to the hcNhqNhrhhXj-"ubhâ)ro"}rp"(hWX ``main-is``hg}rq"(hi]hj]hk]hl]ho]uhXj-"hs]rr"h|Xmain-isrs"…rt"}ru"(hWUhXjo"ubahehêubh|X field of an executable section.rv"…rw"}rx"(hWX field of an executable section.hcNhqNhrhhXj-"ubeubeubeubh€)ry"}rz"(hWXì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.hXj!hchdheh„hg}r{"(hi]hj]hk]hl]ho]uhqM[hrhhs]r|"(h|XTest suites using the r}"…r~"}r"(hWXTest suites using the hcNhqNhrhhXjy"ubhâ)r€"}r"(hWX``detailed-0.9``hg}r‚"(hi]hj]hk]hl]ho]uhXjy"hs]rƒ"h|X detailed-0.9r„"…r…"}r†"(hWUhXj€"ubahehêubh|X, interface are modules exporting the symbol r‡"…rˆ"}r‰"(hWX, interface are modules exporting the symbol hcNhqNhrhhXjy"ubhâ)rŠ"}r‹"(hWX``tests :: IO [Test]``hg}rŒ"(hi]hj]hk]hl]ho]uhXjy"hs]r"h|Xtests :: IO [Test]rŽ"…r"}r"(hWUhXjŠ"ubahehêubh|X. The r‘"…r’"}r“"(hWX. The hcNhqNhrhhXjy"ubhâ)r”"}r•"(hWX``Test``hg}r–"(hi]hj]hk]hl]ho]uhXjy"hs]r—"h|XTestr˜"…r™"}rš"(hWUhXj”"ubahehêubh|X type is exported by the module r›"…rœ"}r"(hWX type is exported by the module hcNhqNhrhhXjy"ubhâ)rž"}rŸ"(hWX``Distribution.TestSuite``hg}r "(hi]hj]hk]hl]ho]uhXjy"hs]r¡"h|XDistribution.TestSuiter¢"…r£"}r¤"(hWUhXjž"ubahehêubh|X< provided by Cabal. For more details, see the example below.r¥"…r¦"}r§"(hWX< provided by Cabal. For more details, see the example below.hcNhqNhrhhXjy"ubeubh€)r¨"}r©"(hWX÷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.hXj!hchdheh„hg}rª"(hi]hj]hk]hl]ho]uhqM`hrhhs]r«"(h|XThe r¬"…r­"}r®"(hWXThe hcNhqNhrhhXj¨"ubhâ)r¯"}r°"(hWX``detailed-0.9``hg}r±"(hi]hj]hk]hl]ho]uhXj¨"hs]r²"h|X detailed-0.9r³"…r´"}rµ"(hWUhXj¯"ubahehêubh|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 r¶"…r·"}r¸"(hWXœ 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 hcNhqNhrhhXj¨"ubhâ)r¹"}rº"(hWX``detailed-0.9``hg}r»"(hi]hj]hk]hl]ho]uhXj¨"hs]r¼"h|X detailed-0.9r½"…r¾"}r¿"(hWUhXj¹"ubahehêubh|X interface requires the rÀ"…rÁ"}rÂ"(hWX interface requires the hcNhqNhrhhXj¨"ubjn)rÃ"}rÄ"(hWX:pkg-field:`test-module`rÅ"hXj¨"hchdhejrhg}rÆ"(UreftypeX pkg-fieldjtˆjuX test-moduleU refdomainXcabalrÇ"hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽja"uhqM`hs]rÈ"hâ)rÉ"}rÊ"(hWjÅ"hg}rË"(hi]hj]rÌ"(jjÇ"Xcabal-pkg-fieldrÍ"ehk]hl]ho]uhXjÃ"hs]rÎ"h|X test-modulerÏ"…rÐ"}rÑ"(hWUhXjÉ"ubahehêubaubh|X field.rÒ"…rÓ"}rÔ"(hWX field.hcNhqNhrhhXj¨"ubeubjü)rÕ"}rÖ"(hWUhXj!hchdhejÿhg}r×"(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rØ"}rÙ"(hWUhXj!hchdhejhg}rÚ"(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrÛ"j jÛ"uhqNhrhhs]rÜ"(j )rÝ"}rÞ"(hWXtest-module: identifierhXjØ"hchdhejhg}rß"(hl]rà"X pkg-field-test-suite-test-modulerá"ahk]hi]hj]ho]j‰uhqMkhrhhs]râ"(jü)rã"}rä"(hWUhXjÝ"hchdhejÿhg}rå"(hl]hk]hi]hj]ho]Uentries]ræ"(jX+test-suite:test-module; package.cabal fieldjá"UNtrç"auhqMkhrhhs]ubj)rè"}ré"(hWX test-modulerê"hXjÝ"hchdhejhg}rë"(jÔjÕhl]hk]hi]hj]ho]uhqMkhrhhs]rì"h|X test-modulerí"…rî"}rï"(hWUhcNhqNhrhhXjè"ubaubj%)rð"}rñ"(hWjžhXjÝ"hchdhej(hg}rò"(jÔjÕhl]hk]hi]hj]ho]uhqMkhrhhs]ró"h|X: rô"…rõ"}rö"(hWUhcNhqNhrhhXjð"ubaubj¤)r÷"}rø"(hWX identifierhXjÝ"hchdhej§hg}rù"(jÔjÕhl]hk]hi]hj]ho]uhqMkhrhhs]rú"h|X identifierrû"…rü"}rý"(hWUhcNhqNhrhhXj÷"ubaubeubj-)rþ"}rÿ"(hWUhXjØ"hchdhej0hg}r#(hi]hj]hk]hl]ho]uhqMkhrhhs]r#(j3)r#}r#(hWUhXjþ"hchdhej6hg}r#(hi]hj]hk]hl]ho]uhqNhrhhs]r#(j9)r#}r#(hWUhXj#hchdhej<hg}r#(hi]hj]hk]hl]ho]uhqMghrhhs]r #(j?)r #}r #(hWXrequiredhXj#hchdhejChg}r #(hi]hj]hk]hl]ho]uhqKhs]r #h|XRequiredr#…r#}r#(hWUhXj #ubaubjI)r#}r#(hWX``detailed-0.9``r#hg}r#(hi]hj]hk]hl]ho]uhXj#hs]r#h€)r#}r#(hWj#hXj#hchdheh„hg}r#(hi]hj]hk]hl]ho]uhqMghs]r#hâ)r#}r#(hWj#hg}r#(hi]hj]hk]hl]ho]uhXj#hs]r#h|X detailed-0.9r#…r#}r #(hWUhXj#ubahehêubaubahejVubeubj9)r!#}r"#(hWUhXj#hchdhej<hg}r##(hi]hj]hk]hl]ho]uhqMhhrhhs]r$#(j?)r%#}r&#(hWX disallowedhXj!#hchdhejChg}r'#(hi]hj]hk]hl]ho]uhqKhs]r(#h|X Disallowedr)#…r*#}r+#(hWUhXj%#ubaubjI)r,#}r-#(hWX``exitcode-stdio-1.0`` hg}r.#(hi]hj]hk]hl]ho]uhXj!#hs]r/#h€)r0#}r1#(hWX``exitcode-stdio-1.0``r2#hXj,#hchdheh„hg}r3#(hi]hj]hk]hl]ho]uhqMhhs]r4#hâ)r5#}r6#(hWj2#hg}r7#(hi]hj]hk]hl]ho]uhXj0#hs]r8#h|Xexitcode-stdio-1.0r9#…r:#}r;#(hWUhXj5#ubahehêubaubahejVubeubeubh€)r<#}r=#(hWX*The module exporting the ``tests`` symbol.hXjþ"hchdheh„hg}r>#(hi]hj]hk]hl]ho]uhqMjhrhhs]r?#(h|XThe module exporting the r@#…rA#}rB#(hWXThe module exporting the hcNhqNhrhhXj<#ubhâ)rC#}rD#(hWX ``tests``hg}rE#(hi]hj]hk]hl]ho]uhXj<#hs]rF#h|XtestsrG#…rH#}rI#(hWUhXjC#ubahehêubh|X symbol.rJ#…rK#}rL#(hWX symbol.hcNhqNhrhhXj<#ubeubeubeubhY)rM#}rN#(hWUh\KhXj!hchdhehfhg}rO#(hi]rP#X3example: package using exitcode-stdio-1.0 interfacerQ#ahj]hk]hl]rR#U2example-package-using-exitcode-stdio-1-0-interfacerS#aho]uhqMmhrhhs]rT#(hu)rU#}rV#(hWX7Example: Package using ``exitcode-stdio-1.0`` interfacerW#hXjM#hchdhehyhg}rX#(hi]hj]hk]hl]ho]uhqMmhrhhs]rY#(h|XExample: Package using rZ#…r[#}r\#(hWXExample: Package using r]#hcNhqNhrhhXjU#ubhâ)r^#}r_#(hWX``exitcode-stdio-1.0``r`#hg}ra#(hi]hj]hk]hl]ho]uhXjU#hs]rb#h|Xexitcode-stdio-1.0rc#…rd#}re#(hWUhXj^#ubahehêubh|X interfacerf#…rg#}rh#(hWX interfaceri#hcNhqNhrhhXjU#ubeubh€)rj#}rk#(hWX}The example package description and executable source file below demonstrate the use of the ``exitcode-stdio-1.0`` interface.hXjM#hchdheh„hg}rl#(hi]hj]hk]hl]ho]uhqMohrhhs]rm#(h|X\The example package description and executable source file below demonstrate the use of the rn#…ro#}rp#(hWX\The example package description and executable source file below demonstrate the use of the hcNhqNhrhhXjj#ubhâ)rq#}rr#(hWX``exitcode-stdio-1.0``hg}rs#(hi]hj]hk]hl]ho]uhXjj#hs]rt#h|Xexitcode-stdio-1.0ru#…rv#}rw#(hWUhXjq#ubahehêubh|X interface.rx#…ry#}rz#(hWX interface.hcNhqNhrhhXjj#ubeubcdocutils.nodes container r{#)r|#}r}#(hWUhXjM#hcUheU containerr~#hg}r#(hl]r€#Uid3r#ahk]hi]hj]r‚#Uliteral-block-wrapperrƒ#aho]U literal_blockˆuhqNhrhhs]r„#(cdocutils.nodes caption r…#)r†#}r‡#(hWX foo.cabalrˆ#hXj|#hchdheUcaptionr‰#hg}rŠ#(hi]hj]hk]hl]ho]uhqMrhs]r‹#h|X foo.cabalrŒ#…r#}rŽ#(hWjˆ#hXj†#ubaubjÏ)r#}r#(hWXä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 && < 5hXj|#hchdhejÒhg}r‘#(j‰jXcabaljÔjÕhl]hk]hi]j}hj]ho]uhqMrhs]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 && < 5r“#…r”#}r•#(hWUhXj#ubaubeubj{#)r–#}r—#(hWUhXjM#hcUhej~#hg}r˜#(hl]r™#Uid4rš#ahk]hi]hj]r›#jƒ#aho]U literal_blockˆuhqNhrhhs]rœ#(j…#)r#}rž#(hWX test-foo.hsrŸ#hXj–#hchdhej‰#hg}r #(hi]hj]hk]hl]ho]uhqM€hs]r¡#h|X test-foo.hsr¢#…r£#}r¤#(hWjŸ#hXj#ubaubjÏ)r¥#}r¦#(hWXumodule Main where import System.Exit (exitFailure) main = do putStrLn "This test always fails!" exitFailurehXj–#hchdhejÒhg}r§#(j‰jXhaskelljÔjÕhl]hk]hi]j}hj]ho]uhqM€hs]r¨#h|Xumodule Main where import System.Exit (exitFailure) main = do putStrLn "This test always fails!" exitFailurer©#…rª#}r«#(hWUhXj¥#ubaubeubeubhY)r¬#}r­#(hWUhXj!hchdhehfhg}r®#(hi]hj]hk]hl]r¯#U,example-package-using-detailed-0-9-interfacer°#aho]r±#h/auhqMŒhrhhs]r²#(hu)r³#}r´#(hWX1Example: Package using ``detailed-0.9`` interfacerµ#hXj¬#hchdhehyhg}r¶#(hi]hj]hk]hl]ho]uhqMŒhrhhs]r·#(h|XExample: Package using r¸#…r¹#}rº#(hWXExample: Package using r»#hcNhqNhrhhXj³#ubhâ)r¼#}r½#(hWX``detailed-0.9``r¾#hg}r¿#(hi]hj]hk]hl]ho]uhXj³#hs]rÀ#h|X detailed-0.9rÁ#…rÂ#}rÃ#(hWUhXj¼#ubahehêubh|X interfacerÄ#…rÅ#}rÆ#(hWX interfacerÇ#hcNhqNhrhhXj³#ubeubh€)rÈ#}rÉ#(hWXNThe 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.hXj¬#hchdheh„hg}rÊ#(hi]hj]hk]hl]ho]uhqMŽhrhhs]rË#(h|X]The example package description and test module source file below demonstrate the use of the rÌ#…rÍ#}rÎ#(hWX]The example package description and test module source file below demonstrate the use of the hcNhqNhrhhXjÈ#ubhâ)rÏ#}rÐ#(hWX``detailed-0.9``hg}rÑ#(hi]hj]hk]hl]ho]uhXjÈ#hs]rÒ#h|X detailed-0.9rÓ#…rÔ#}rÕ#(hWUhXjÏ#ubahehêubh|XZ interface. The test module also develops a simple implementation of the interface set by rÖ#…r×#}rØ#(hWXZ interface. The test module also develops a simple implementation of the interface set by hcNhqNhrhhXjÈ#ubhâ)rÙ#}rÚ#(hWX``Distribution.TestSuite``hg}rÛ#(hi]hj]hk]hl]ho]uhXjÈ#hs]rÜ#h|XDistribution.TestSuiterÝ#…rÞ#}rß#(hWUhXjÙ#ubahehêubh|Xm, but in actual usage the implementation would be provided by the library that provides the testing facility.rà#…rá#}râ#(hWXm, but in actual usage the implementation would be provided by the library that provides the testing facility.hcNhqNhrhhXjÈ#ubeubj{#)rã#}rä#(hWUhXj¬#hcUhej~#hg}rå#(hl]ræ#Uid5rç#ahk]hi]hj]rè#jƒ#aho]U literal_blockˆuhqNhrhhs]ré#(j…#)rê#}rë#(hWX bar.cabalrì#hXjã#hchdhej‰#hg}rí#(hi]hj]hk]hl]ho]uhqM”hs]rî#h|X bar.cabalrï#…rð#}rñ#(hWjì#hXjê#ubaubjÏ)rò#}ró#(hWXî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 && < 2hXjã#hchdhejÒhg}rô#(j‰jXcabaljÔjÕhl]hk]hi]j}hj]ho]uhqM”hs]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 && < 2rö#…r÷#}rø#(hWUhXjò#ubaubeubj{#)rù#}rú#(hWUhXj¬#hcUhej~#hg}rû#(hl]rü#Uid6rý#ahk]hi]hj]rþ#jƒ#aho]U literal_blockˆuhqNhrhhs]rÿ#(j…#)r$}r$(hWXBar.hsr$hXjù#hchdhej‰#hg}r$(hi]hj]hk]hl]ho]uhqM£hs]r$h|XBar.hsr$…r$}r$(hWj$hXj$ubaubjÏ)r$}r $(hWX 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 }hXjù#hchdhejÒhg}r $(j‰jXhaskelljÔjÕhl]hk]hi]j}hj]ho]uhqM£hs]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 }r $…r $}r$(hWUhXj$ubaubeubeubhY)r$}r$(hWUhXj!hchdhehfhg}r$(hi]hj]hk]hl]r$Urunning-test-suitesr$aho]r$hBauhqM½hrhhs]r$(hu)r$}r$(hWXRunning test suitesr$hXj$hchdhehyhg}r$(hi]hj]hk]hl]ho]uhqM½hrhhs]r$h|XRunning test suitesr$…r$}r$(hWj$hcNhqNhrhhXj$ubaubh€)r$}r$(hWXGYou can have Cabal run your test suites using its built-in test runner:r $hXj$hchdheh„hg}r!$(hi]hj]hk]hl]ho]uhqM¿hrhhs]r"$h|XGYou can have Cabal run your test suites using its built-in test runner:r#$…r$$}r%$(hWj $hcNhqNhrhhXj$ubaubjÏ)r&$}r'$(hWX;$ cabal configure --enable-tests $ cabal build $ cabal testhXj$hchdhejÒhg}r($(jÔjÕhl]hk]hi]hj]ho]uhqMÃhrhhs]r)$h|X;$ cabal configure --enable-tests $ cabal build $ cabal testr*$…r+$}r,$(hWUhXj&$ubaubh€)r-$}r.$(hWX[See the output of ``cabal help test`` for a list of options you can pass to ``cabal test``.hXj$hchdheh„hg}r/$(hi]hj]hk]hl]ho]uhqMÇhrhhs]r0$(h|XSee the output of r1$…r2$}r3$(hWXSee the output of hcNhqNhrhhXj-$ubhâ)r4$}r5$(hWX``cabal help test``hg}r6$(hi]hj]hk]hl]ho]uhXj-$hs]r7$h|Xcabal help testr8$…r9$}r:$(hWUhXj4$ubahehêubh|X' for a list of options you can pass to r;$…r<$}r=$(hWX' for a list of options you can pass to hcNhqNhrhhXj-$ubhâ)r>$}r?$(hWX``cabal test``hg}r@$(hi]hj]hk]hl]ho]uhXj-$hs]rA$h|X cabal testrB$…rC$}rD$(hWUhXj>$ubahehêubh|X.…rE$}rF$(hWX.hcNhqNhrhhXj-$ubeubeubeubh]hY)rG$}rH$(hWUh\KhXh_hchdhehfhg}rI$(hi]hj]hk]hl]rJ$Uforeign-librariesrK$aho]rL$h-auhqM)hrhhs]rM$(hu)rN$}rO$(hWXForeign librariesrP$hXjG$hchdhehyhg}rQ$(hi]hj]hk]hl]ho]uhqM)hrhhs]rR$h|XForeign librariesrS$…rT$}rU$(hWjP$hcNhqNhrhhXjN$ubaubh€)rV$}rW$(hWXÞ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.hXjG$hchdheh„hg}rX$(hi]hj]hk]hl]ho]uhqM+hrhhs]rY$(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 (rZ$…r[$}r\$(hWX¯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 (hcNhqNhrhhXjV$ubhâ)r]$}r^$(hWX``.so``hg}r_$(hi]hj]hk]hl]ho]uhXjV$hs]r`$h|X.sora$…rb$}rc$(hWUhXj]$ubahehêubh|X files on Linux, rd$…re$}rf$(hWX files on Linux, hcNhqNhrhhXjV$ubhâ)rg$}rh$(hWX ``.dylib``hg}ri$(hi]hj]hk]hl]ho]uhXjV$hs]rj$h|X.dylibrk$…rl$}rm$(hWUhXjg$ubahehêubh|X files on OSX, rn$…ro$}rp$(hWX files on OSX, hcNhqNhrhhXjV$ubhâ)rq$}rr$(hWX``.dll``hg}rs$(hi]hj]hk]hl]ho]uhXjV$hs]rt$h|X.dllru$…rv$}rw$(hWUhXjq$ubahehêubh|XŽ files on Windows, etc.) are linked against executables when the executable is run (or even lazily during execution), while static libraries (rx$…ry$}rz$(hWXŽ files on Windows, etc.) are linked against executables when the executable is run (or even lazily during execution), while static libraries (hcNhqNhrhhXjV$ubhâ)r{$}r|$(hWX``.a``hg}r}$(hi]hj]hk]hl]ho]uhXjV$hs]r~$h|X.ar$…r€$}r$(hWUhXj{$ubahehêubh|X files on Linux/OSX, r‚$…rƒ$}r„$(hWX files on Linux/OSX, hcNhqNhrhhXjV$ubhâ)r…$}r†$(hWX``.lib``hg}r‡$(hi]hj]hk]hl]ho]uhXjV$hs]rˆ$h|X.libr‰$…rŠ$}r‹$(hWUhXj…$ubahehêubh|XE files on Windows) get linked against the executable at compile time.rŒ$…r$}rŽ$(hWXE files on Windows) get linked against the executable at compile time.hcNhqNhrhhXjV$ubeubh€)r$}r$(hWX3Foreign libraries only work with GHC 7.8 and later.r‘$hXjG$hchdheh„hg}r’$(hi]hj]hk]hl]ho]uhqM3hrhhs]r“$h|X3Foreign libraries only work with GHC 7.8 and later.r”$…r•$}r–$(hWj‘$hcNhqNhrhhXj$ubaubh€)r—$}r˜$(hWX1A typical stanza for a foreign library looks liker™$hXjG$hchdheh„hg}rš$(hi]hj]hk]hl]ho]uhqM5hrhhs]r›$h|X1A typical stanza for a foreign library looks likerœ$…r$}rž$(hWj™$hcNhqNhrhhXj—$ubaubjÏ)rŸ$}r $(hWX©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: Haskell2010hXjG$hchdhejÒhg}r¡$(jÔjÕhl]hk]hi]hj]ho]uhqM9hrhhs]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: Haskell2010r£$…r¤$}r¥$(hWUhXjŸ$ubaubjü)r¦$}r§$(hWUhXjG$hchdhejÿhg}r¨$(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r©$}rª$(hWUhXjG$hchdhejhg}r«$(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-sectionr¬$j j¬$uhqNhrhhs]r­$(j )r®$}r¯$(hWXforeign-library namehXj©$hchdhejhg}r°$(hl]r±$X+pkg-section-foreign-library-foreign-libraryr²$ahk]hi]hj]ho]j‰uhqNhrhhs]r³$(jü)r´$}rµ$(hWUhXj®$hchdhejÿhg}r¶$(hl]hk]hi]hj]ho]Uentries]r·$(jX6foreign-library:foreign-library; package.cabal sectionj²$UNtr¸$auhqNhrhhs]ubj)r¹$}rº$(hWXforeign-libraryr»$hXj®$hchdhejhg}r¼$(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]r½$h|Xforeign-libraryr¾$…r¿$}rÀ$(hWUhcNhqNhrhhXj¹$ubaubj%)rÁ$}rÂ$(hWU hXj®$hchdhej(hg}rÃ$(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]rÄ$h|X …rÅ$}rÆ$(hWUhcNhqNhrhhXjÁ$ubaubj¤)rÇ$}rÈ$(hWXnamehXj®$hchdhej§hg}rÉ$(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]rÊ$h|XnamerË$…rÌ$}rÍ$(hWUhcNhqNhrhhXjÇ$ubaubeubj-)rÎ$}rÏ$(hWUhXj©$hchdhej0hg}rÐ$(hi]hj]hk]hl]ho]uhqNhrhhs]rÑ$(j3)rÒ$}rÓ$(hWUhXjÎ$hchdhej6hg}rÔ$(hi]hj]hk]hl]ho]uhqNhrhhs]rÕ$j9)rÖ$}r×$(hWUhXjÒ$hchdhej<hg}rØ$(hi]hj]hk]hl]ho]uhqNhrhhs]rÙ$(j?)rÚ$}rÛ$(hWjBhXjÖ$hchdhejChg}rÜ$(hi]hj]hk]hl]ho]uhqKhs]rÝ$h|XSincerÞ$…rß$}rà$(hWUhXjÚ$ubaubjI)rá$}râ$(hWU Cabal 2.0rã$hg}rä$(hi]hj]hk]hl]ho]uhXjÖ$hs]rå$h€)ræ$}rç$(hWjã$hg}rè$(hi]hj]hk]hl]ho]uhXjá$hs]ré$h|X Cabal 2.0rê$…rë$}rì$(hWUhXjæ$ubaheh„ubahejVubeubaubh€)rí$}rî$(hWX+Build information for `foreign libraries`_.hXjÎ$hchdheh„hg}rï$(hi]hj]hk]hl]ho]uhqMMhrhhs]rð$(h|XBuild information for rñ$…rò$}ró$(hWXBuild information for hcNhqNhrhhXjí$ubjB)rô$}rõ$(hWX`foreign libraries`_jEKhXjí$hejFhg}rö$(UnameXforeign librarieshl]hk]hi]hj]ho]jHjK$uhs]r÷$h|Xforeign librariesrø$…rù$}rú$(hWUhXjô$ubaubh|X.…rû$}rü$(hWX.hcNhqNhrhhXjí$ubeubeubeubjü)rý$}rþ$(hWUhXjG$hchdhejÿhg}rÿ$(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r%}r%(hWUhXjG$hchdhejhg}r%(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr%j j%uhqNhrhhs]r%(j )r%}r%(hWXtype: foreign library typehXj%hchdhejhg}r%(hl]r%Xpkg-field-foreign-library-typer %ahk]hi]hj]ho]j‰uhqMShrhhs]r %(jü)r %}r %(hWUhXj%hchdhejÿhg}r %(hl]hk]hi]hj]ho]Uentries]r%(jX)foreign-library:type; package.cabal fieldj %UNtr%auhqMShrhhs]ubj)r%}r%(hWXtyper%hXj%hchdhejhg}r%(jÔjÕhl]hk]hi]hj]ho]uhqMShrhhs]r%h|Xtyper%…r%}r%(hWUhcNhqNhrhhXj%ubaubj%)r%}r%(hWjžhXj%hchdhej(hg}r%(jÔjÕhl]hk]hi]hj]ho]uhqMShrhhs]r%h|X: r%…r%}r%(hWUhcNhqNhrhhXj%ubaubj¤)r%}r %(hWXforeign library typehXj%hchdhej§hg}r!%(jÔjÕhl]hk]hi]hj]ho]uhqMShrhhs]r"%h|Xforeign library typer#%…r$%}r%%(hWUhcNhqNhrhhXj%ubaubeubj-)r&%}r'%(hWUhXj%hchdhej0hg}r(%(hi]hj]hk]hl]ho]uhqMShrhhs]r)%h€)r*%}r+%(hWX…Cabal recognizes ``native-static`` and ``native-shared`` here, although we currently only support building `native-shared` libraries.hXj&%hchdheh„hg}r,%(hi]hj]hk]hl]ho]uhqMQhrhhs]r-%(h|XCabal recognizes r.%…r/%}r0%(hWXCabal recognizes hcNhqNhrhhXj*%ubhâ)r1%}r2%(hWX``native-static``hg}r3%(hi]hj]hk]hl]ho]uhXj*%hs]r4%h|X native-staticr5%…r6%}r7%(hWUhXj1%ubahehêubh|X and r8%…r9%}r:%(hWX and hcNhqNhrhhXj*%ubhâ)r;%}r<%(hWX``native-shared``hg}r=%(hi]hj]hk]hl]ho]uhXj*%hs]r>%h|X native-sharedr?%…r@%}rA%(hWUhXj;%ubahehêubh|X3 here, although we currently only support building rB%…rC%}rD%(hWX3 here, although we currently only support building hcNhqNhrhhXj*%ubj¥ )rE%}rF%(hWX`native-shared`hg}rG%(hi]hj]hk]hl]ho]uhXj*%hs]rH%h|X native-sharedrI%…rJ%}rK%(hWUhXjE%ubahej­ ubh|X libraries.rL%…rM%}rN%(hWX libraries.hcNhqNhrhhXj*%ubeubaubeubjü)rO%}rP%(hWUhXjG$hchdhejÿhg}rQ%(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rR%}rS%(hWUhXjG$hchdhejhg}rT%(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrU%j jU%uhqNhrhhs]rV%(j )rW%}rX%(hWX$options: foreign library option listhXjR%hchdhejhg}rY%(hl]rZ%X!pkg-field-foreign-library-optionsr[%ahk]hi]hj]ho]j‰uhqM^hrhhs]r\%(jü)r]%}r^%(hWUhXjW%hchdhejÿhg}r_%(hl]hk]hi]hj]ho]Uentries]r`%(jX,foreign-library:options; package.cabal fieldj[%UNtra%auhqM^hrhhs]ubj)rb%}rc%(hWXoptionsrd%hXjW%hchdhejhg}re%(jÔjÕhl]hk]hi]hj]ho]uhqM^hrhhs]rf%h|Xoptionsrg%…rh%}ri%(hWUhcNhqNhrhhXjb%ubaubj%)rj%}rk%(hWjžhXjW%hchdhej(hg}rl%(jÔjÕhl]hk]hi]hj]ho]uhqM^hrhhs]rm%h|X: rn%…ro%}rp%(hWUhcNhqNhrhhXjj%ubaubj¤)rq%}rr%(hWXforeign library option listhXjW%hchdhej§hg}rs%(jÔjÕhl]hk]hi]hj]ho]uhqM^hrhhs]rt%h|Xforeign library option listru%…rv%}rw%(hWUhcNhqNhrhhXjq%ubaubeubj-)rx%}ry%(hWUhXjR%hchdhej0hg}rz%(hi]hj]hk]hl]ho]uhqM^hrhhs]r{%h€)r|%}r}%(hWX 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.hXjx%hchdheh„hg}r~%(hi]hj]hk]hl]ho]uhqMVhrhhs]r%(h|XOptions for building the foreign library, typically specific to the specified type of foreign library. Currently we only support r€%…r%}r‚%(hWXOptions for building the foreign library, typically specific to the specified type of foreign library. Currently we only support hcNhqNhrhhXj|%ubhâ)rƒ%}r„%(hWX``standalone``hg}r…%(hi]hj]hk]hl]ho]uhXj|%hs]r†%h|X standaloner‡%…rˆ%}r‰%(hWUhXjƒ%ubahehêubh|X€ here. A standalone dynamic library is one that does not have any dependencies on other (Haskell) shared libraries; without the rŠ%…r‹%}rŒ%(hWX€ here. A standalone dynamic library is one that does not have any dependencies on other (Haskell) shared libraries; without the hcNhqNhrhhXj|%ubhâ)r%}rŽ%(hWX``standalone``hg}r%(hi]hj]hk]hl]ho]uhXj|%hs]r%h|X standaloner‘%…r’%}r“%(hWUhXj%ubahehêubh|XV option the generated library would have dependencies on the Haskell runtime library (r”%…r•%}r–%(hWXV option the generated library would have dependencies on the Haskell runtime library (hcNhqNhrhhXj|%ubhâ)r—%}r˜%(hWX ``libHSrts``hg}r™%(hi]hj]hk]hl]ho]uhXj|%hs]rš%h|XlibHSrtsr›%…rœ%}r%(hWUhXj—%ubahehêubh|X), the base library (rž%…rŸ%}r %(hWX), the base library (hcNhqNhrhhXj|%ubhâ)r¡%}r¢%(hWX ``libHSbase``hg}r£%(hi]hj]hk]hl]ho]uhXj|%hs]r¤%h|X libHSbaser¥%…r¦%}r§%(hWUhXj¡%ubahehêubh|X), etc. Currently, r¨%…r©%}rª%(hWX), etc. Currently, hcNhqNhrhhXj|%ubhâ)r«%}r¬%(hWX``standalone``hg}r­%(hi]hj]hk]hl]ho]uhXj|%hs]r®%h|X standaloner¯%…r°%}r±%(hWUhXj«%ubahehêubh|X …r²%}r³%(hWX hcNhqNhrhhXj|%ubhÂ)r´%}rµ%(hWX*must*hg}r¶%(hi]hj]hk]hl]ho]uhXj|%hs]r·%h|Xmustr¸%…r¹%}rº%(hWUhXj´%ubahehÊubh|X be used on Windows and r»%…r¼%}r½%(hWX be used on Windows and hcNhqNhrhhXj|%ubhÂ)r¾%}r¿%(hWX *must not*hg}rÀ%(hi]hj]hk]hl]ho]uhXj|%hs]rÁ%h|Xmust notrÂ%…rÃ%}rÄ%(hWUhXj¾%ubahehÊubh|X be used on any other platform.rÅ%…rÆ%}rÇ%(hWX be used on any other platform.hcNhqNhrhhXj|%ubeubaubeubjü)rÈ%}rÉ%(hWUhXjG$hchdhejÿhg}rÊ%(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rË%}rÌ%(hWUhXjG$hchdhejhg}rÍ%(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrÎ%j jÎ%uhqNhrhhs]rÏ%(j )rÐ%}rÑ%(hWXmod-def-file: filenamehXjË%hchdhejhg}rÒ%(hl]rÓ%X&pkg-field-foreign-library-mod-def-filerÔ%ahk]hi]hj]ho]j‰uhqMghrhhs]rÕ%(jü)rÖ%}r×%(hWUhXjÐ%hchdhejÿhg}rØ%(hl]hk]hi]hj]ho]Uentries]rÙ%(jX1foreign-library:mod-def-file; package.cabal fieldjÔ%UNtrÚ%auhqMghrhhs]ubj)rÛ%}rÜ%(hWX mod-def-filerÝ%hXjÐ%hchdhejhg}rÞ%(jÔjÕhl]hk]hi]hj]ho]uhqMghrhhs]rß%h|X mod-def-filerà%…rá%}râ%(hWUhcNhqNhrhhXjÛ%ubaubj%)rã%}rä%(hWjžhXjÐ%hchdhej(hg}rå%(jÔjÕhl]hk]hi]hj]ho]uhqMghrhhs]ræ%h|X: rç%…rè%}ré%(hWUhcNhqNhrhhXjã%ubaubj¤)rê%}rë%(hWXfilenamehXjÐ%hchdhej§hg}rì%(jÔjÕhl]hk]hi]hj]ho]uhqMghrhhs]rí%h|Xfilenamerî%…rï%}rð%(hWUhcNhqNhrhhXjê%ubaubeubj-)rñ%}rò%(hWUhXjË%hchdhej0hg}ró%(hi]hj]hk]hl]ho]uhqMghrhhs]rô%h€)rõ%}rö%(hWX§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.hXjñ%hchdheh„hg}r÷%(hi]hj]hk]hl]ho]uhqMahrhhs]rø%(h|XZThis option can only be used when creating dynamic Windows libraries (that is, when using rù%…rú%}rû%(hWXZThis option can only be used when creating dynamic Windows libraries (that is, when using hcNhqNhrhhXjõ%ubhâ)rü%}rý%(hWX``native-shared``hg}rþ%(hi]hj]hk]hl]ho]uhXjõ%hs]rÿ%h|X native-sharedr&…r&}r&(hWUhXjü%ubahehêubh|X and the r&…r&}r&(hWX and the hcNhqNhrhhXjõ%ubhâ)r&}r&(hWX``os``hg}r&(hi]hj]hk]hl]ho]uhXjõ%hs]r &h|Xosr &…r &}r &(hWUhXj&ubahehêubh|X is r &…r&}r&(hWX is hcNhqNhrhhXjõ%ubhâ)r&}r&(hWX ``Windows``hg}r&(hi]hj]hk]hl]ho]uhXjõ%hs]r&h|XWindowsr&…r&}r&(hWUhXj&ubahehêubh|X#). If used, it must be a path to a r&…r&}r&(hWX#). If used, it must be a path to a hcNhqNhrhhXjõ%ubhÂ)r&}r&(hWX*module definition file*hg}r&(hi]hj]hk]hl]ho]uhXjõ%hs]r&h|Xmodule definition filer&…r&}r &(hWUhXj&ubahehÊubh|XX. The details of module definition files are beyond the scope of this document; see the r!&…r"&}r#&(hWXX. The details of module definition files are beyond the scope of this document; see the hcNhqNhrhhXjõ%ubjB)r$&}r%&(hWXX`GHC `_hg}r&&(UnameXGHCjXOhttps://downloads.haskell.org/~ghc/latest/docs/html/users_guide/win32-dlls.htmlr'&hl]hk]hi]hj]ho]uhXjõ%hs]r(&h|XGHCr)&…r*&}r+&(hWUhXj$&ubahejFubj£)r,&}r-&(hWXR h\KhXjõ%hej¦hg}r.&(Urefurij'&hl]r/&Ughcr0&ahk]hi]hj]ho]r1&h2auhs]ubh|X3 manual for some details and some further pointers.r2&…r3&}r4&(hWX3 manual for some details and some further pointers.hcNhqNhrhhXjõ%ubeubaubeubjü)r5&}r6&(hWUhXjG$hchdhejÿhg}r7&(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r8&}r9&(hWUhXjG$hchdhejhg}r:&(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr;&j j;&uhqNhrhhs]r<&(j )r=&}r>&(hWX&lib-version-info: current:revision:agehXj8&hchdhejhg}r?&(hl]r@&X*pkg-field-foreign-library-lib-version-inforA&ahk]hi]hj]ho]j‰uhqM‡hrhhs]rB&(jü)rC&}rD&(hWUhXj=&hchdhejÿhg}rE&(hl]hk]hi]hj]ho]Uentries]rF&(jX5foreign-library:lib-version-info; package.cabal fieldjA&UNtrG&auhqM‡hrhhs]ubj)rH&}rI&(hWXlib-version-inforJ&hXj=&hchdhejhg}rK&(jÔjÕhl]hk]hi]hj]ho]uhqM‡hrhhs]rL&h|Xlib-version-inforM&…rN&}rO&(hWUhcNhqNhrhhXjH&ubaubj%)rP&}rQ&(hWjžhXj=&hchdhej(hg}rR&(jÔjÕhl]hk]hi]hj]ho]uhqM‡hrhhs]rS&h|X: rT&…rU&}rV&(hWUhcNhqNhrhhXjP&ubaubj¤)rW&}rX&(hWXcurrent:revision:agehXj=&hchdhej§hg}rY&(jÔjÕhl]hk]hi]hj]ho]uhqM‡hrhhs]rZ&h|Xcurrent:revision:ager[&…r\&}r]&(hWUhcNhqNhrhhXjW&ubaubeubj-)r^&}r_&(hWUhXj8&hchdhej0hg}r`&(hi]hj]hk]hl]ho]uhqM‡hrhhs]ra&(h€)rb&}rc&(hWX+This field is currently only used on Linux.rd&hXj^&hchdheh„hg}re&(hi]hj]hk]hl]ho]uhqMjhrhhs]rf&h|X+This field is currently only used on Linux.rg&…rh&}ri&(hWjd&hcNhqNhrhhXjb&ubaubh€)rj&}rk&(hWX 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``.hXj^&hchdheh„hg}rl&(hi]hj]hk]hl]ho]uhqMlhrhhs]rm&(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: rn&…ro&}rp&(hWXÚ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: hcNhqNhrhhXjj&ubhâ)rq&}rr&(hWX ``6:3:2``hg}rs&(hi]hj]hk]hl]ho]uhXjj&hs]rt&h|X6:3:2ru&…rv&}rw&(hWUhXjq&ubahehêubh|X results in library version rx&…ry&}rz&(hWX results in library version hcNhqNhrhhXjj&ubhâ)r{&}r|&(hWX ``4.2.3``hg}r}&(hi]hj]hk]hl]ho]uhXjj&hs]r~&h|X4.2.3r&…r€&}r&(hWUhXj{&ubahehêubh|X.…r‚&}rƒ&(hWX.hcNhqNhrhhXjj&ubeubh€)r„&}r…&(hWXRWith this field set, the SONAME of the library is set, and symlinks are installed.r†&hXj^&hchdheh„hg}r‡&(hi]hj]hk]hl]ho]uhqMqhrhhs]rˆ&h|XRWith this field set, the SONAME of the library is set, and symlinks are installed.r‰&…rŠ&}r‹&(hWj†&hcNhqNhrhhXj„&ubaubh€)rŒ&}r&(hWXVHow you should bump this field on an ABI change depends on the breakage you introduce:rŽ&hXj^&hchdheh„hg}r&(hi]hj]hk]hl]ho]uhqMthrhhs]r&h|XVHow you should bump this field on an ABI change depends on the breakage you introduce:r‘&…r’&}r“&(hWjŽ&hcNhqNhrhhXjŒ&ubaubhŠ)r”&}r•&(hWUhXj^&hchdhehhg}r–&(hX-hl]hk]hi]hj]ho]uhqMwhrhhs]r—&(h‘)r˜&}r™&(hWXPrograms 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.hXj”&hchdheh”hg}rš&(hi]hj]hk]hl]ho]uhqNhrhhs]r›&h€)rœ&}r&(hWXPrograms 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.hXj˜&hchdheh„hg}rž&(hi]hj]hk]hl]ho]uhqMwhs]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 r &…r¡&}r¢&(hWXç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 hXjœ&ubhâ)r£&}r¤&(hWX ``revision``hg}r¥&(hi]hj]hk]hl]ho]uhXjœ&hs]r¦&h|Xrevisionr§&…r¨&}r©&(hWUhXj£&ubahehêubh|X% only, don’t touch current nor age.rª&…r«&}r¬&(hWX# only, don't touch current nor age.hXjœ&ubeubaubh‘)r­&}r®&(hWXYPrograms 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.hXj”&hchdheh”hg}r¯&(hi]hj]hk]hl]ho]uhqNhrhhs]r°&h€)r±&}r²&(hWXYPrograms 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³&hXj­&hchdheh„hg}r´&(hi]hj]hk]hl]ho]uhqM|hs]rµ&h|X]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¸&(hWj³&hXj±&ubaubaubh‘)r¹&}rº&(hWX„Programs may need to be changed, recompiled, and relinked in order to use the new version. Bump current, set revision and age to 0. hXj”&hchdheh”hg}r»&(hi]hj]hk]hl]ho]uhqNhrhhs]r¼&h€)r½&}r¾&(hWXƒ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¿&hXj¹&hchdheh„hg}rÀ&(hi]hj]hk]hl]ho]uhqM‚hs]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Â&…rÃ&}rÄ&(hWj¿&hXj½&ubaubaubeubh€)rÅ&}rÆ&(hWXBAlso refer to the Libtool documentation on the version-info field.rÇ&hXj^&hchdheh„hg}rÈ&(hi]hj]hk]hl]ho]uhqM†hrhhs]rÉ&h|XBAlso refer to the Libtool documentation on the version-info field.rÊ&…rË&}rÌ&(hWjÇ&hcNhqNhrhhXjÅ&ubaubeubeubjü)rÍ&}rÎ&(hWUhXjG$hchdhejÿhg}rÏ&(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rÐ&}rÑ&(hWUhXjG$hchdhejhg}rÒ&(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrÓ&j jÓ&uhqNhrhhs]rÔ&(j )rÕ&}rÖ&(hWXlib-version-linux: versionhXjÐ&hchdhejhg}r×&(hl]rØ&X+pkg-field-foreign-library-lib-version-linuxrÙ&ahk]hi]hj]ho]j‰uhqM‘hrhhs]rÚ&(jü)rÛ&}rÜ&(hWUhXjÕ&hchdhejÿhg}rÝ&(hl]hk]hi]hj]ho]Uentries]rÞ&(jX6foreign-library:lib-version-linux; package.cabal fieldjÙ&UNtrß&auhqM‘hrhhs]ubj)rà&}rá&(hWXlib-version-linuxrâ&hXjÕ&hchdhejhg}rã&(jÔjÕhl]hk]hi]hj]ho]uhqM‘hrhhs]rä&h|Xlib-version-linuxrå&…ræ&}rç&(hWUhcNhqNhrhhXjà&ubaubj%)rè&}ré&(hWjžhXjÕ&hchdhej(hg}rê&(jÔjÕhl]hk]hi]hj]ho]uhqM‘hrhhs]rë&h|X: rì&…rí&}rî&(hWUhcNhqNhrhhXjè&ubaubj¤)rï&}rð&(hWXversionhXjÕ&hchdhej§hg}rñ&(jÔjÕhl]hk]hi]hj]ho]uhqM‘hrhhs]rò&h|Xversionró&…rô&}rõ&(hWUhcNhqNhrhhXjï&ubaubeubj-)rö&}r÷&(hWUhXjÐ&hchdhej0hg}rø&(hi]hj]hk]hl]ho]uhqM‘hrhhs]rù&(h€)rú&}rû&(hWX!This field is only used on Linux.rü&hXjö&hchdheh„hg}rý&(hi]hj]hk]hl]ho]uhqMŠhrhhs]rþ&h|X!This field is only used on Linux.rÿ&…r'}r'(hWjü&hcNhqNhrhhXjú&ubaubh€)r'}r'(hWXSpecifies 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.hXjö&hchdheh„hg}r'(hi]hj]hk]hl]ho]uhqMŒhrhhs]r'(h|X_Specifies the library ABI version directly for foreign libraries built on Linux: so specifying r'…r'}r'(hWX_Specifies the library ABI version directly for foreign libraries built on Linux: so specifying hcNhqNhrhhXj'ubhâ)r '}r '(hWX ``4.2.3``hg}r '(hi]hj]hk]hl]ho]uhXj'hs]r 'h|X4.2.3r '…r'}r'(hWUhXj 'ubahehêubh|X causes a library r'…r'}r'(hWX causes a library hcNhqNhrhhXj'ubhâ)r'}r'(hWX``libfoo.so.4.2.3``hg}r'(hi]hj]hk]hl]ho]uhXj'hs]r'h|Xlibfoo.so.4.2.3r'…r'}r'(hWUhXj'ubahehêubh|X to be built with SONAME r'…r'}r'(hWX to be built with SONAME hcNhqNhrhhXj'ubhâ)r'}r'(hWX``libfoo.so.4``hg}r'(hi]hj]hk]hl]ho]uhXj'hs]r 'h|X libfoo.so.4r!'…r"'}r#'(hWUhXj'ubahehêubh|X, and appropriate symlinks r$'…r%'}r&'(hWX, and appropriate symlinks hcNhqNhrhhXj'ubhâ)r''}r('(hWX``libfoo.so.4``hg}r)'(hi]hj]hk]hl]ho]uhXj'hs]r*'h|X libfoo.so.4r+'…r,'}r-'(hWUhXj''ubahehêubh|X and r.'…r/'}r0'(hWX and hcNhqNhrhhXj'ubhâ)r1'}r2'(hWX ``libfoo.so``hg}r3'(hi]hj]hk]hl]ho]uhXj'hs]r4'h|X libfoo.sor5'…r6'}r7'(hWUhXj1'ubahehêubh|X to be installed.r8'…r9'}r:'(hWX to be installed.hcNhqNhrhhXj'ubeubeubeubh€)r;'}r<'(hWXØ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 likehXjG$hchdheh„hg}r='(hi]hj]hk]hl]ho]uhqM’hrhhs]r>'(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 r?'…r@'}rA'(hWX”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 hcNhqNhrhhXj;'ubhâ)rB'}rC'(hWX``csrc/MyForeignLibWrapper.c``hg}rD'(hi]hj]hk]hl]ho]uhXj;'hs]rE'h|Xcsrc/MyForeignLibWrapper.crF'…rG'}rH'(hWUhXjB'ubahehêubh|X& file, which might look something likerI'…rJ'}rK'(hWX& file, which might look something likehcNhqNhrhhXj;'ubeubjÏ)rL'}rM'(hWXn#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(); }hXjG$hchdhejÒhg}rN'(j‰jXcjÔjÕhl]hk]hi]j}hj]ho]uhqM–hrhhs]rO'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(); }rP'…rQ'}rR'(hWUhXjL'ubaubh€)rS'}rT'(hWXWith 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``.hXjG$hchdheh„hg}rU'(hi]hj]hk]hl]ho]uhqM¬hrhhs]rV'(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 rW'…rX'}rY'(hWX™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 hcNhqNhrhhXjS'ubhâ)rZ'}r['(hWX``lib/``hg}r\'(hi]hj]hk]hl]ho]uhXjS'hs]r]'h|Xlib/r^'…r_'}r`'(hWUhXjZ'ubahehêubh|X6 directory). Instead, we install foreign libraries in ra'…rb'}rc'(hWX6 directory). Instead, we install foreign libraries in hcNhqNhrhhXjS'ubhâ)rd'}re'(hWX``~/.cabal/lib``hg}rf'(hi]hj]hk]hl]ho]uhXjS'hs]rg'h|X ~/.cabal/librh'…ri'}rj'(hWUhXjd'ubahehêubh|X&, much like we install executables in rk'…rl'}rm'(hWX&, much like we install executables in hcNhqNhrhhXjS'ubhâ)rn'}ro'(hWX``~/.cabal/bin``hg}rp'(hi]hj]hk]hl]ho]uhXjS'hs]rq'h|X ~/.cabal/binrr'…rs'}rt'(hWUhXjn'ubahehêubh|X.…ru'}rv'(hWX.hcNhqNhrhhXjS'ubeubeubhY)rw'}rx'(hWUh\KhXh_hchdhehfhg}ry'(hi]hj]hk]hl]rz'jZaho]r{'hCauhqMµhrhhs]r|'(hu)r}'}r~'(hWXBuild informationr'hXjw'hchdhehyhg}r€'(hi]hj]hk]hl]ho]uhqMµhrhhs]r'h|XBuild informationr‚'…rƒ'}r„'(hWj'hcNhqNhrhhXj}'ubaubh€)r…'}r†'(hWXGThe 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.hXjw'hchdheh„hg}r‡'(hi]hj]hk]hl]ho]uhqM¸hrhhs]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 r‰'…rŠ'}r‹'(hWXÕ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 hcNhqNhrhhXj…'ubjB)rŒ'}r'(hWX`system-dependent parameters`_jEKhXj…'hejFhg}rŽ'(UnameXsystem-dependent parametershl]hk]hi]hj]ho]jHj“uhs]r'h|Xsystem-dependent parametersr'…r‘'}r’'(hWUhXjŒ'ubaubh|X and r“'…r”'}r•'(hWX and hcNhqNhrhhXj…'ubjB)r–'}r—'(hWX`configurations`_jEKhXj…'hejFhg}r˜'(UnameXconfigurationshl]hk]hi]hj]ho]jHjÎuhs]r™'h|Xconfigurationsrš'…r›'}rœ'(hWUhXj–'ubaubh|X> for a way to supply system-dependent values for these fields.r'…rž'}rŸ'(hWX> for a way to supply system-dependent values for these fields.hcNhqNhrhhXj…'ubeubjü)r '}r¡'(hWUhXjw'hcNhejÿhg}r¢'(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r£'}r¤'(hWUhXjw'hcNhejhg}r¥'(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr¦'j j¦'uhqNhrhhs]r§'(j )r¨'}r©'(hWXbuild-depends: package listhXj£'hchdhejhg}rª'(hl]r«'Xpkg-field-build-dependsr¬'ahk]hi]hj]ho]j‰uhqM@hrhhs]r­'(jü)r®'}r¯'(hWUhXj¨'hchdhejÿhg}r°'(hl]hk]hi]hj]ho]Uentries]r±'(jX"build-depends; package.cabal fieldj¬'UNtr²'auhqM@hrhhs]ubj)r³'}r´'(hWX build-dependsrµ'hXj¨'hchdhejhg}r¶'(jÔjÕhl]hk]hi]hj]ho]uhqM@hrhhs]r·'h|X build-dependsr¸'…r¹'}rº'(hWUhcNhqNhrhhXj³'ubaubj%)r»'}r¼'(hWjžhXj¨'hchdhej(hg}r½'(jÔjÕhl]hk]hi]hj]ho]uhqM@hrhhs]r¾'h|X: r¿'…rÀ'}rÁ'(hWUhcNhqNhrhhXj»'ubaubj¤)rÂ'}rÃ'(hWX package listhXj¨'hchdhej§hg}rÄ'(jÔjÕhl]hk]hi]hj]ho]uhqM@hrhhs]rÅ'h|X package listrÆ'…rÇ'}rÈ'(hWUhcNhqNhrhhXjÂ'ubaubeubj-)rÉ'}rÊ'(hWUhXj£'hchdhej0hg}rË'(hi]hj]hk]hl]ho]uhqM@hrhhs]rÌ'(h€)rÍ'}rÎ'(hWXeA list of packages needed to build this one. Each package can be annotated with a version constraint.rÏ'hXjÉ'hchdheh„hg}rÐ'(hi]hj]hk]hl]ho]uhqMÀhrhhs]rÑ'h|XeA list of packages needed to build this one. Each package can be annotated with a version constraint.rÒ'…rÓ'}rÔ'(hWjÏ'hcNhqNhrhhXjÍ'ubaubh€)rÕ'}rÖ'(hWXê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:hXjÉ'hchdheh„hg}r×'(hi]hj]hk]hl]ho]uhqMÃhrhhs]rØ'(h|X&Version constraints use the operators rÙ'…rÚ'}rÛ'(hWX&Version constraints use the operators hcNhqNhrhhXjÕ'ubhâ)rÜ'}rÝ'(hWX``==, >=, >, <, <=``hg}rÞ'(hi]hj]hk]hl]ho]uhXjÕ'hs]rß'h|X==, >=, >, <, <=rà'…rá'}râ'(hWUhXjÜ'ubahehêubh|XB and a version number. Multiple constraints can be combined using rã'…rä'}rå'(hWXB and a version number. Multiple constraints can be combined using hcNhqNhrhhXjÕ'ubhâ)ræ'}rç'(hWX``&&``hg}rè'(hi]hj]hk]hl]ho]uhXjÕ'hs]ré'h|X&&rê'…rë'}rì'(hWUhXjæ'ubahehêubh|X or rí'…rî'}rï'(hWX or hcNhqNhrhhXjÕ'ubhâ)rð'}rñ'(hWX``||``hg}rò'(hi]hj]hk]hl]ho]uhXjÕ'hs]ró'h|X||rô'…rõ'}rö'(hWUhXjð'ubahehêubh|X^. If no version constraint is specified, any version is assumed to be acceptable. For example:r÷'…rø'}rù'(hWX^. If no version constraint is specified, any version is assumed to be acceptable. For example:hcNhqNhrhhXjÕ'ubeubjÏ)rú'}rû'(hWXJlibrary build-depends: base >= 2, foo >= 1.2.3 && < 1.3, barhXjÉ'hchdhejÒhg}rü'(jÔjÕhl]hk]hi]hj]ho]uhqMÊhrhhs]rý'h|XJlibrary build-depends: base >= 2, foo >= 1.2.3 && < 1.3, barrþ'…rÿ'}r((hWUhXjú'ubaubh€)r(}r((hWX¨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_).hXjÉ'hchdheh„hg}r((hi]hj]hk]hl]ho]uhqMÐhrhhs]r((h|XDependencies like r(…r(}r((hWXDependencies like hcNhqNhrhhXj(ubhâ)r(}r ((hWX``foo >= 1.2.3 && < 1.3``hg}r ((hi]hj]hk]hl]ho]uhXj(hs]r (h|Xfoo >= 1.2.3 && < 1.3r (…r (}r((hWUhXj(ubahehêubh|Xw turn out to be very common because it is recommended practise for package versions to correspond to API versions (see r(…r(}r((hWXw turn out to be very common because it is recommended practise for package versions to correspond to API versions (see hcNhqNhrhhXj(ubjB)r(}r((hWXPVP_jEKhXj(hejFhg}r((UnameXPVPjjhl]hk]hi]hj]ho]uhs]r(h|XPVPr(…r(}r((hWUhXj(ubaubh|X).r(…r(}r((hWX).hcNhqNhrhhXj(ubeubh€)r(}r((hWXLSince Cabal 1.6, there is a special wildcard syntax to help with such rangesr(hXjÉ'hchdheh„hg}r((hi]hj]hk]hl]ho]uhqMÔhrhhs]r (h|XLSince Cabal 1.6, there is a special wildcard syntax to help with such rangesr!(…r"(}r#((hWj(hcNhqNhrhhXj(ubaubjÏ)r$(}r%((hWXbuild-depends: foo ==1.2.*hXjÉ'hchdhejÒhg}r&((jÔjÕhl]hk]hi]hj]ho]uhqMÙhrhhs]r'(h|Xbuild-depends: foo ==1.2.*r((…r)(}r*((hWUhXj$(ubaubh€)r+(}r,((hWXPIt is only syntactic sugar. It is exactly equivalent to ``foo >= 1.2 && < 1.3``.hXjÉ'hchdheh„hg}r-((hi]hj]hk]hl]ho]uhqMÛhrhhs]r.((h|X8It is only syntactic sugar. It is exactly equivalent to r/(…r0(}r1((hWX8It is only syntactic sugar. It is exactly equivalent to hcNhqNhrhhXj+(ubhâ)r2(}r3((hWX``foo >= 1.2 && < 1.3``hg}r4((hi]hj]hk]hl]ho]uhXj+(hs]r5(h|Xfoo >= 1.2 && < 1.3r6(…r7(}r8((hWUhXj2(ubahehêubh|X.…r9(}r:((hWX.hcNhqNhrhhXj+(ubeubcdocutils.nodes warning r;()r<(}r=((hWXA 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.hXjÉ'hchdheUwarningr>(hg}r?((hi]hj]hk]hl]ho]uhqNhrhhs]r@(h€)rA(}rB((hWXA 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.hXj<(hchdheh„hg}rC((hi]hj]hk]hl]ho]uhqMàhs]rD((h|XBA potential pitfall of the wildcard syntax is that the constraint rE(…rF(}rG((hWXBA potential pitfall of the wildcard syntax is that the constraint hXjA(ubhâ)rH(}rI((hWX``nats == 1.0.*``hg}rJ((hi]hj]hk]hl]ho]uhXjA(hs]rK(h|X nats == 1.0.*rL(…rM(}rN((hWUhXjH(ubahehêubh|X doesn’t match the release rO(…rP(}rQ((hWX doesn't match the release hXjA(ubhâ)rR(}rS((hWX ``nats-1``hg}rT((hi]hj]hk]hl]ho]uhXjA(hs]rU(h|Xnats-1rV(…rW(}rX((hWUhXjR(ubahehêubh|X because the version rY(…rZ(}r[((hWX because the version hXjA(ubhâ)r\(}r]((hWX``1``hg}r^((hi]hj]hk]hl]ho]uhXjA(hs]r_(h|X1…r`(}ra((hWUhXj\(ubahehêubh|X is lexicographically less than rb(…rc(}rd((hWX is lexicographically less than hXjA(ubhâ)re(}rf((hWX``1.0``hg}rg((hi]hj]hk]hl]ho]uhXjA(hs]rh(h|X1.0ri(…rj(}rk((hWUhXje(ubahehêubh|X/. This is not an issue with the caret-operator rl(…rm(}rn((hWX/. This is not an issue with the caret-operator hXjA(ubhâ)ro(}rp((hWX``^>=``hg}rq((hi]hj]hk]hl]ho]uhXjA(hs]rr(h|X^>=rs(…rt(}ru((hWUhXjo(ubahehêubh|X described below.rv(…rw(}rx((hWX described below.hXjA(ubeubaubh€)ry(}rz((hWXê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:hXjÉ'hchdheh„hg}r{((hi]hj]hk]hl]ho]uhqMæhrhhs]r|((h|XEStarting with Cabal 2.0, there’s a new version operator to express r}(…r~(}r((hWXCStarting with Cabal 2.0, there's a new version operator to express hcNhqNhrhhXjy(ubjB)r€(}r((hWXPVP_jEKhXjy(hejFhg}r‚((UnameXPVPjjhl]hk]hi]hj]ho]uhs]rƒ(h|XPVPr„(…r…(}r†((hWUhXj€(ubaubh|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:r‡(…rˆ(}r‰((hWX£-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:hcNhqNhrhhXjy(ubeubjÏ)rŠ(}r‹((hWX-build-depends: foo ^>= 1.2.3.4, bar ^>= 1hXjÉ'hchdhejÒhg}rŒ((jÔjÕhl]hk]hi]hj]ho]uhqMíhrhhs]r(h|X-build-depends: foo ^>= 1.2.3.4, bar ^>= 1rŽ(…r(}r((hWUhXjŠ(ubaubh€)r‘(}r’((hWXpThis 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).hXjÉ'hchdheh„hg}r“((hi]hj]hk]hl]ho]uhqMñhrhhs]r”((h|XBThis allows to assert the positive knowledge that this package is r•(…r–(}r—((hWXBThis allows to assert the positive knowledge that this package is hcNhqNhrhhXj‘(ubhÂ)r˜(}r™((hWX*known*hg}rš((hi]hj]hk]hl]ho]uhXj‘(hs]r›(h|Xknownrœ(…r(}rž((hWUhXj˜(ubahehÊubh|X1 to be semantically compatible with the releases rŸ(…r (}r¡((hWX1 to be semantically compatible with the releases hcNhqNhrhhXj‘(ubhâ)r¢(}r£((hWX``foo-1.2.3.4``hg}r¤((hi]hj]hk]hl]ho]uhXj‘(hs]r¥(h|X foo-1.2.3.4r¦(…r§(}r¨((hWUhXj¢(ubahehêubh|X and r©(…rª(}r«((hWX and hcNhqNhrhhXj‘(ubhâ)r¬(}r­((hWX ``bar-1``hg}r®((hi]hj]hk]hl]ho]uhXj‘(hs]r¯(h|Xbar-1r°(…r±(}r²((hWUhXj¬(ubahehêubh|X0 respectively. The information encoded via such r³(…r´(}rµ((hWX0 respectively. The information encoded via such hcNhqNhrhhXj‘(ubhâ)r¶(}r·((hWX``^>=``hg}r¸((hi]hj]hk]hl]ho]uhXj‘(hs]r¹(h|X^>=rº(…r»(}r¼((hWUhXj¶(ubahehêubh|Xˆ-assertions is used by the cabal solver to infer version constraints describing semantically compatible version ranges according to the r½(…r¾(}r¿((hWXˆ-assertions is used by the cabal solver to infer version constraints describing semantically compatible version ranges according to the hcNhqNhrhhXj‘(ubjB)rÀ(}rÁ((hWXPVP_jEKhXj‘(hejFhg}rÂ((UnameXPVPjjhl]hk]hi]hj]ho]uhs]rÃ(h|XPVPrÄ(…rÅ(}rÆ((hWUhXjÀ(ubaubh|X contract (see below).rÇ(…rÈ(}rÉ((hWX contract (see below).hcNhqNhrhhXj‘(ubeubh€)rÊ(}rË((hWXÇ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.hXjÉ'hchdheh„hg}rÌ((hi]hj]hk]hl]ho]uhqMøhrhhs]rÍ((h|X Another way to say this is that rÎ(…rÏ(}rÐ((hWX Another way to say this is that hcNhqNhrhhXjÊ(ubhâ)rÑ(}rÒ((hWX ``foo < 1.3``hg}rÓ((hi]hj]hk]hl]ho]uhXjÊ(hs]rÔ(h|X foo < 1.3rÕ(…rÖ(}r×((hWUhXjÑ(ubahehêubh|X expresses rØ(…rÙ(}rÚ((hWX expresses hcNhqNhrhhXjÊ(ubhÂ)rÛ(}rÜ((hWX *negative*hg}rÝ((hi]hj]hk]hl]ho]uhXjÊ(hs]rÞ(h|Xnegativerß(…rà(}rá((hWUhXjÛ(ubahehÊubh|X information, i.e. “râ(…rã(}rä((hWX information, i.e. "hcNhqNhrhhXjÊ(ubhâ)rå(}ræ((hWX ``foo-1.3``hg}rç((hi]hj]hk]hl]ho]uhXjÊ(hs]rè(h|Xfoo-1.3ré(…rê(}rë((hWUhXjå(ubahehêubh|X or rì(…rí(}rî((hWX or hcNhqNhrhhXjÊ(ubhâ)rï(}rð((hWX ``foo-1.4.2``hg}rñ((hi]hj]hk]hl]ho]uhXjÊ(hs]rò(h|X foo-1.4.2ró(…rô(}rõ((hWUhXjï(ubahehêubh|X will rö(…r÷(}rø((hWX will hcNhqNhrhhXjÊ(ubhÂ)rù(}rú((hWX*not*hg}rû((hi]hj]hk]hl]ho]uhXjÊ(hs]rü(h|Xnotrý(…rþ(}rÿ((hWUhXjù(ubahehÊubh|X be compatibleâ€; whereas r)…r)}r)(hWX be compatible"; whereas hcNhqNhrhhXjÊ(ubhâ)r)}r)(hWX``foo ^>= 1.2.3.4``hg}r)(hi]hj]hk]hl]ho]uhXjÊ(hs]r)h|Xfoo ^>= 1.2.3.4r)…r)}r )(hWUhXj)ubahehêubh|X asserts the r )…r )}r )(hWX asserts the hcNhqNhrhhXjÊ(ubhÂ)r )}r)(hWX *positive*hg}r)(hi]hj]hk]hl]ho]uhXjÊ(hs]r)h|Xpositiver)…r)}r)(hWUhXj )ubahehÊubh|X information that “r)…r)}r)(hWX information that "hcNhqNhrhhXjÊ(ubhâ)r)}r)(hWX``foo-1.2.3.4``hg}r)(hi]hj]hk]hl]ho]uhXjÊ(hs]r)h|X foo-1.2.3.4r)…r)}r)(hWUhXj)ubahehêubh|X is r)…r)}r )(hWX is hcNhqNhrhhXjÊ(ubhÂ)r!)}r")(hWX*known*hg}r#)(hi]hj]hk]hl]ho]uhXjÊ(hs]r$)h|Xknownr%)…r&)}r')(hWUhXj!)ubahehÊubh|XU to be compatible†and (in the absence of additional information) according to the r()…r))}r*)(hWXS to be compatible" and (in the absence of additional information) according to the hcNhqNhrhhXjÊ(ubjB)r+)}r,)(hWXPVP_jEKhXjÊ(hejFhg}r-)(UnameXPVPjjhl]hk]hi]hj]ho]uhs]r.)h|XPVPr/)…r0)}r1)(hWUhXj+)ubaubh|XL contract we can (positively) infer right away that all versions satisfying r2)…r3)}r4)(hWXL contract we can (positively) infer right away that all versions satisfying hcNhqNhrhhXjÊ(ubhâ)r5)}r6)(hWX``foo >= 1.2.3.4 && < 1.3``hg}r7)(hi]hj]hk]hl]ho]uhXjÊ(hs]r8)h|Xfoo >= 1.2.3.4 && < 1.3r9)…r:)}r;)(hWUhXj5)ubahehêubh|X will be compatible as well.r<)…r=)}r>)(hWX will be compatible as well.hcNhqNhrhhXjÊ(ubeubhî)r?)}r@)(hWX5More 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``.hXjÉ'hchdhehñhg}rA)(hi]hj]hk]hl]ho]uhqNhrhhs]rB)h€)rC)}rD)(hWX5More 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``.hXj?)hchdheh„hg}rE)(hi]hj]hk]hl]ho]uhqMhs]rF)(h|XMore generally, the rG)…rH)}rI)(hWXMore generally, the hXjC)ubjB)rJ)}rK)(hWXPVP_jEKhXjC)hejFhg}rL)(UnameXPVPjjhl]hk]hi]hj]ho]uhs]rM)h|XPVPrN)…rO)}rP)(hWUhXjJ)ubaubh|X> contract implies that we can safely relax the lower bound to rQ)…rR)}rS)(hWX> contract implies that we can safely relax the lower bound to hXjC)ubhâ)rT)}rU)(hWX ``>= 1.2``hg}rV)(hi]hj]hk]hl]ho]uhXjC)hs]rW)h|X>= 1.2rX)…rY)}rZ)(hWUhXjT)ubahehêubh|X, because if we know that r[)…r\)}r])(hWX, because if we know that hXjC)ubhâ)r^)}r_)(hWX``foo-1.2.3.4``hg}r`)(hi]hj]hk]hl]ho]uhXjC)hs]ra)h|X foo-1.2.3.4rb)…rc)}rd)(hWUhXj^)ubahehêubh|X( is semantically compatible, then so is re)…rf)}rg)(hWX( is semantically compatible, then so is hXjC)ubhâ)rh)}ri)(hWX ``foo-1.2``hg}rj)(hi]hj]hk]hl]ho]uhXjC)hs]rk)h|Xfoo-1.2rl)…rm)}rn)(hWUhXjh)ubahehêubh|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 ro)…rp)}rq)(hWX× (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 hXjC)ubhâ)rr)}rs)(hWX ``foo-1.2``hg}rt)(hi]hj]hk]hl]ho]uhXjC)hs]ru)h|Xfoo-1.2rv)…rw)}rx)(hWUhXjr)ubahehêubh|Xr. But since we cannot do this analysis during constraint solving and to keep things simple, we pragmatically use ry)…rz)}r{)(hWXr. But since we cannot do this analysis during constraint solving and to keep things simple, we pragmatically use hXjC)ubhâ)r|)}r})(hWX``foo >= 1.2.3.4``hg}r~)(hi]hj]hk]hl]ho]uhXjC)hs]r)h|Xfoo >= 1.2.3.4r€)…r)}r‚)(hWUhXj|)ubahehêubh|XZ as the initially inferred approximation for the lower bound resulting from the assertion rƒ)…r„)}r…)(hWXZ as the initially inferred approximation for the lower bound resulting from the assertion hXjC)ubhâ)r†)}r‡)(hWX``foo ^>= 1.2.3.4``hg}rˆ)(hi]hj]hk]hl]ho]uhXjC)hs]r‰)h|Xfoo ^>= 1.2.3.4rŠ)…r‹)}rŒ)(hWUhXj†)ubahehêubh|X2. If further evidence becomes available that e.g. r)…rŽ)}r)(hWX2. If further evidence becomes available that e.g. hXjC)ubhâ)r)}r‘)(hWX ``foo-1.2``hg}r’)(hi]hj]hk]hl]ho]uhXjC)hs]r“)h|Xfoo-1.2r”)…r•)}r–)(hWUhXj)ubahehêubh|XY typechecks, one can simply revise the dependency specification to include the assertion r—)…r˜)}r™)(hWXY typechecks, one can simply revise the dependency specification to include the assertion hXjC)ubhâ)rš)}r›)(hWX``foo ^>= 1.2``hg}rœ)(hi]hj]hk]hl]ho]uhXjC)hs]r)h|X foo ^>= 1.2rž)…rŸ)}r )(hWUhXjš)ubahehêubh|X.…r¡)}r¢)(hWX.hXjC)ubeubaubh€)r£)}r¤)(hWXLThe 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.hXjÉ'hchdheh„hg}r¥)(hi]hj]hk]hl]ho]uhqMhrhhs]r¦)(h|X^The subtle but important difference in signaling allows tooling to treat explicitly expressed r§)…r¨)}r©)(hWX^The subtle but important difference in signaling allows tooling to treat explicitly expressed hcNhqNhrhhXj£)ubhâ)rª)}r«)(hWX``<``hg}r¬)(hi]hj]hk]hl]ho]uhXj£)hs]r­)h|X<…r®)}r¯)(hWUhXjª)ubahehêubh|X!-style constraints and inferred (r°)…r±)}r²)(hWX!-style constraints and inferred (hcNhqNhrhhXj£)ubhâ)r³)}r´)(hWX``^>=``hg}rµ)(hi]hj]hk]hl]ho]uhXj£)hs]r¶)h|X^>=r·)…r¸)}r¹)(hWUhXj³)ubahehêubh|X1-style) upper bounds differently. For instance, rº)…r»)}r¼)(hWX1-style) upper bounds differently. For instance, hcNhqNhrhhXj£)ubjn)r½)}r¾)(hWX:option:`--allow-newer`r¿)hXj£)hchdhejrhg}rÀ)(UreftypeXoptionjtˆjuX --allow-newerU refdomainXstdrÁ)hl]hk]U refexplicit‰hi]hj]ho]jwjxU std:programrÂ)NuhqMhs]rÃ)hâ)rÄ)}rÅ)(hWj¿)hg}rÆ)(hi]hj]rÇ)(jjÁ)X std-optionrÈ)ehk]hl]ho]uhXj½)hs]rÉ)h|X --allow-newerrÊ)…rË)}rÌ)(hWUhXjÄ)ubahehêubaubh|X’s rÍ)…rÎ)}rÏ)(hWX's hcNhqNhrhhXj£)ubhâ)rÐ)}rÑ)(hWX``^``hg}rÒ)(hi]hj]hk]hl]ho]uhXj£)hs]rÓ)h|X^…rÔ)}rÕ)(hWUhXjÐ)ubahehêubh|X-modifier allows to relax only rÖ)…r×)}rØ)(hWX-modifier allows to relax only hcNhqNhrhhXj£)ubhâ)rÙ)}rÚ)(hWX``^>=``hg}rÛ)(hi]hj]hk]hl]ho]uhXj£)hs]rÜ)h|X^>=rÝ)…rÞ)}rß)(hWUhXjÙ)ubahehêubh|X.-style bounds while leaving explicitly stated rà)…rá)}râ)(hWX.-style bounds while leaving explicitly stated hcNhqNhrhhXj£)ubhâ)rã)}rä)(hWX``<``hg}rå)(hi]hj]hk]hl]ho]uhXj£)hs]ræ)h|X<…rç)}rè)(hWUhXjã)ubahehêubh|X-constraints unaffected.ré)…rê)}rë)(hWX-constraints unaffected.hcNhqNhrhhXj£)ubeubh€)rì)}rí)(hWXIIgnoring the signaling intent, the default syntactic desugaring rules arerî)hXjÉ'hchdheh„hg}rï)(hi]hj]hk]hl]ho]uhqMhrhhs]rð)h|XIIgnoring the signaling intent, the default syntactic desugaring rules arerñ)…rò)}ró)(hWjî)hcNhqNhrhhXjì)ubaubhŠ)rô)}rõ)(hWUhXjÉ'hchdhehhg}rö)(hX-hl]hk]hi]hj]ho]uhqMhrhhs]r÷)(h‘)rø)}rù)(hWX``^>= x`` == ``>= x && < x.1``rú)hXjô)hchdheh”hg}rû)(hi]hj]hk]hl]ho]uhqNhrhhs]rü)h€)rý)}rþ)(hWjú)hXjø)hchdheh„hg}rÿ)(hi]hj]hk]hl]ho]uhqMhs]r*(hâ)r*}r*(hWX ``^>= x``hg}r*(hi]hj]hk]hl]ho]uhXjý)hs]r*h|X^>= xr*…r*}r*(hWUhXj*ubahehêubh|X == r*…r *}r *(hWX == hXjý)ubhâ)r *}r *(hWX``>= x && < x.1``hg}r *(hi]hj]hk]hl]ho]uhXjý)hs]r*h|X >= x && < x.1r*…r*}r*(hWUhXj *ubahehêubeubaubh‘)r*}r*(hWX&``^>= x.y`` == ``>= x.y && < x.(y+1)``r*hXjô)hchdheh”hg}r*(hi]hj]hk]hl]ho]uhqNhrhhs]r*h€)r*}r*(hWj*hXj*hchdheh„hg}r*(hi]hj]hk]hl]ho]uhqMhs]r*(hâ)r*}r*(hWX ``^>= x.y``hg}r*(hi]hj]hk]hl]ho]uhXj*hs]r*h|X^>= x.yr*…r *}r!*(hWUhXj*ubahehêubh|X == r"*…r#*}r$*(hWX == hXj*ubhâ)r%*}r&*(hWX``>= x.y && < x.(y+1)``hg}r'*(hi]hj]hk]hl]ho]uhXj*hs]r(*h|X>= x.y && < x.(y+1)r)*…r**}r+*(hWUhXj%*ubahehêubeubaubh‘)r,*}r-*(hWX*``^>= x.y.z`` == ``>= x.y.z && < x.(y+1)``r.*hXjô)hchdheh”hg}r/*(hi]hj]hk]hl]ho]uhqNhrhhs]r0*h€)r1*}r2*(hWj.*hXj,*hchdheh„hg}r3*(hi]hj]hk]hl]ho]uhqMhs]r4*(hâ)r5*}r6*(hWX ``^>= x.y.z``hg}r7*(hi]hj]hk]hl]ho]uhXj1*hs]r8*h|X ^>= x.y.zr9*…r:*}r;*(hWUhXj5*ubahehêubh|X == r<*…r=*}r>*(hWX == hXj1*ubhâ)r?*}r@*(hWX``>= x.y.z && < x.(y+1)``hg}rA*(hi]hj]hk]hl]ho]uhXj1*hs]rB*h|X>= x.y.z && < x.(y+1)rC*…rD*}rE*(hWUhXj?*ubahehêubeubaubh‘)rF*}rG*(hWX.``^>= x.y.z.u`` == ``>= x.y.z.u && < x.(y+1)``rH*hXjô)hchdheh”hg}rI*(hi]hj]hk]hl]ho]uhqNhrhhs]rJ*h€)rK*}rL*(hWjH*hXjF*hchdheh„hg}rM*(hi]hj]hk]hl]ho]uhqMhs]rN*(hâ)rO*}rP*(hWX``^>= x.y.z.u``hg}rQ*(hi]hj]hk]hl]ho]uhXjK*hs]rR*h|X ^>= x.y.z.urS*…rT*}rU*(hWUhXjO*ubahehêubh|X == rV*…rW*}rX*(hWX == hXjK*ubhâ)rY*}rZ*(hWX``>= x.y.z.u && < x.(y+1)``hg}r[*(hi]hj]hk]hl]ho]uhXjK*hs]r\*h|X>= x.y.z.u && < x.(y+1)r]*…r^*}r_*(hWUhXjY*ubahehêubeubaubh‘)r`*}ra*(hWXetc. hXjô)hchdheh”hg}rb*(hi]hj]hk]hl]ho]uhqNhrhhs]rc*h€)rd*}re*(hWXetc.rf*hXj`*hchdheh„hg}rg*(hi]hj]hk]hl]ho]uhqMhs]rh*h|Xetc.ri*…rj*}rk*(hWjf*hXjd*ubaubaubeubhî)rl*}rm*(hWXÐ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.hXjÉ'hchdhehñhg}rn*(hi]hj]hk]hl]ho]uhqNhrhhs]ro*h€)rp*}rq*(hWXÐ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.hXjl*hchdheh„hg}rr*(hi]hj]hk]hl]ho]uhqM"hs]rs*(h|XqOne might expected the desugaring to truncate all version components below (and including) the patch-level, i.e. rt*…ru*}rv*(hWXqOne might expected the desugaring to truncate all version components below (and including) the patch-level, i.e. hXjp*ubhâ)rw*}rx*(hWX``^>= x.y.z.u``hg}ry*(hi]hj]hk]hl]ho]uhXjp*hs]rz*h|X ^>= x.y.z.ur{*…r|*}r}*(hWUhXjw*ubahehêubh|X == r~*…r*}r€*(hWX == hXjp*ubhâ)r*}r‚*(hWX``>= x.y.z && < x.(y+1)``hg}rƒ*(hi]hj]hk]hl]ho]uhXjp*hs]r„*h|X>= x.y.z && < x.(y+1)r…*…r†*}r‡*(hWUhXj*ubahehêubh|Xm, as the major and minor version components alone are supposed to uniquely identify the API according to the rˆ*…r‰*}rŠ*(hWXm, as the major and minor version components alone are supposed to uniquely identify the API according to the hXjp*ubjB)r‹*}rŒ*(hWXPVP_jEKhXjp*hejFhg}r*(UnameXPVPjjhl]hk]hi]hj]ho]uhs]rŽ*h|XPVPr*…r*}r‘*(hWUhXj‹*ubaubh|X. However, by designing r’*…r“*}r”*(hWX. However, by designing hXjp*ubhâ)r•*}r–*(hWX``^>=``hg}r—*(hi]hj]hk]hl]ho]uhXjp*hs]r˜*h|X^>=r™*…rš*}r›*(hWUhXj•*ubahehêubh|X to be closer to the rœ*…r*}rž*(hWX to be closer to the hXjp*ubhâ)rŸ*}r *(hWX``>=``hg}r¡*(hi]hj]hk]hl]ho]uhXjp*hs]r¢*h|X>=r£*…r¤*}r¥*(hWUhXjŸ*ubahehêubh|X8 operator, we avoid the potentially confusing effect of r¦*…r§*}r¨*(hWX8 operator, we avoid the potentially confusing effect of hXjp*ubhâ)r©*}rª*(hWX``^>=``hg}r«*(hi]hj]hk]hl]ho]uhXjp*hs]r¬*h|X^>=r­*…r®*}r¯*(hWUhXj©*ubahehêubh|X being more liberal than r°*…r±*}r²*(hWX being more liberal than hXjp*ubhâ)r³*}r´*(hWX``>=``hg}rµ*(hi]hj]hk]hl]ho]uhXjp*hs]r¶*h|X>=r·*…r¸*}r¹*(hWUhXj³*ubahehêubh|X) in the presence of patch-level versions.rº*…r»*}r¼*(hWX) in the presence of patch-level versions.hXjp*ubeubaubh€)r½*}r¾*(hWX<Consequently, the example declaration above is equivalent tor¿*hXjÉ'hchdheh„hg}rÀ*(hi]hj]hk]hl]ho]uhqM+hrhhs]rÁ*h|X<Consequently, the example declaration above is equivalent torÂ*…rÃ*}rÄ*(hWj¿*hcNhqNhrhhXj½*ubaubjÏ)rÅ*}rÆ*(hWX=build-depends: foo >= 1.2.3.4 && < 1.3, bar >= 1 && < 1.1hXjÉ'hchdhejÒhg}rÇ*(jÔjÕhl]hk]hi]hj]ho]uhqM/hrhhs]rÈ*h|X=build-depends: foo >= 1.2.3.4 && < 1.3, bar >= 1 && < 1.1rÉ*…rÊ*}rË*(hWUhXjÅ*ubaubhî)rÌ*}rÍ*(hWX=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.hXjÉ'hchdhehñhg}rÎ*(hi]hj]hk]hl]ho]uhqNhrhhs]rÏ*h€)rÐ*}rÑ*(hWX=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.hXjÌ*hchdheh„hg}rÒ*(hi]hj]hk]hl]ho]uhqM5hs]rÓ*(h|XPrior to Cabal 1.8, rÔ*…rÕ*}rÖ*(hWXPrior to Cabal 1.8, hXjÐ*ubhâ)r×*}rØ*(hWX``build-depends``hg}rÙ*(hi]hj]hk]hl]ho]uhXjÐ*hs]rÚ*h|X build-dependsrÛ*…rÜ*}rÝ*(hWUhXj×*ubahehêubh|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 rÞ*…rß*}rà*(hWX” 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 hXjÐ*ubjn)rá*}râ*(hWX:pkg-field:`build-depends`rã*hXjÐ*hchdhejrhg}rä*(UreftypeX pkg-fieldjtˆjuX build-dependsU refdomainXcabalrå*hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqM5hs]ræ*hâ)rç*}rè*(hWjã*hg}ré*(hi]hj]rê*(jjå*Xcabal-pkg-fieldrë*ehk]hl]ho]uhXjá*hs]rì*h|X build-dependsrí*…rî*}rï*(hWUhXjç*ubahehêubaubh|X8 to be local to each section, you must specify at least rð*…rñ*}rò*(hWX8 to be local to each section, you must specify at least hXjÐ*ubhâ)ró*}rô*(hWX``Cabal-Version: >= 1.8``hg}rõ*(hi]hj]hk]hl]ho]uhXjÐ*hs]rö*h|XCabal-Version: >= 1.8r÷*…rø*}rù*(hWUhXjó*ubahehêubh|X in your rú*…rû*}rü*(hWX in your hXjÐ*ubhâ)rý*}rþ*(hWX ``.cabal``hg}rÿ*(hi]hj]hk]hl]ho]uhXjÐ*hs]r+h|X.cabalr+…r+}r+(hWUhXjý*ubahehêubh|X file.r+…r+}r+(hWX file.hXjÐ*ubeubaubhî)r+}r+(hWX›Cabal 1.20 experimentally supported module thinning and renaming in ``build-depends``; however, this support has since been removed and should not be used.hXjÉ'hchdhehñhg}r +(hi]hj]hk]hl]ho]uhqNhrhhs]r +h€)r +}r +(hWX›Cabal 1.20 experimentally supported module thinning and renaming in ``build-depends``; however, this support has since been removed and should not be used.hXj+hchdheh„hg}r +(hi]hj]hk]hl]ho]uhqM=hs]r+(h|XDCabal 1.20 experimentally supported module thinning and renaming in r+…r+}r+(hWXDCabal 1.20 experimentally supported module thinning and renaming in hXj +ubhâ)r+}r+(hWX``build-depends``hg}r+(hi]hj]hk]hl]ho]uhXj +hs]r+h|X build-dependsr+…r+}r+(hWUhXj+ubahehêubh|XF; however, this support has since been removed and should not be used.r+…r+}r+(hWXF; however, this support has since been removed and should not be used.hXj +ubeubaubeubeubjü)r+}r+(hWUhXjw'hcNhejÿhg}r+(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r+}r +(hWUhXjw'hcNhejhg}r!+(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr"+j j"+uhqNhrhhs]r#+(j )r$+}r%+(hWXother-modules: identifier listhXj+hchdhejhg}r&+(hl]r'+Xpkg-field-other-modulesr(+ahk]hi]hj]ho]j‰uhqMMhrhhs]r)+(jü)r*+}r++(hWUhXj$+hchdhejÿhg}r,+(hl]hk]hi]hj]ho]Uentries]r-+(jX"other-modules; package.cabal fieldj(+UNtr.+auhqMMhrhhs]ubj)r/+}r0+(hWX other-modulesr1+hXj$+hchdhejhg}r2+(jÔjÕhl]hk]hi]hj]ho]uhqMMhrhhs]r3+h|X other-modulesr4+…r5+}r6+(hWUhcNhqNhrhhXj/+ubaubj%)r7+}r8+(hWjžhXj$+hchdhej(hg}r9+(jÔjÕhl]hk]hi]hj]ho]uhqMMhrhhs]r:+h|X: r;+…r<+}r=+(hWUhcNhqNhrhhXj7+ubaubj¤)r>+}r?+(hWXidentifier listhXj$+hchdhej§hg}r@+(jÔjÕhl]hk]hi]hj]ho]uhqMMhrhhs]rA+h|Xidentifier listrB+…rC+}rD+(hWUhcNhqNhrhhXj>+ubaubeubj-)rE+}rF+(hWUhXj+hchdhej0hg}rG+(hi]hj]hk]hl]ho]uhqMMhrhhs]rH+(h€)rI+}rJ+(hWX÷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.hXjE+hchdheh„hg}rK+(hi]hj]hk]hl]ho]uhqMChrhhs]rL+(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 rM+…rN+}rO+(hWXå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 hcNhqNhrhhXjI+ubhâ)rP+}rQ+(hWX ``main-is``hg}rR+(hi]hj]hk]hl]ho]uhXjI+hs]rS+h|Xmain-isrT+…rU+}rV+(hWUhXjP+ubahehêubh|X field.rW+…rX+}rY+(hWX field.hcNhqNhrhhXjI+ubeubhî)rZ+}r[+(hWX¢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.hXjE+hchdhehñhg}r\+(hi]hj]hk]hl]ho]uhqNhrhhs]r]+h€)r^+}r_+(hWX¢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.hXjZ+hchdheh„hg}r`+(hi]hj]hk]hl]ho]uhqMJhs]ra+(h|XEvery module in the package rb+…rc+}rd+(hWXEvery module in the package hXj^+ubhÂ)re+}rf+(hWX*must*hg}rg+(hi]hj]hk]hl]ho]uhXj^+hs]rh+h|Xmustri+…rj+}rk+(hWUhXje+ubahehÊubh|X be listed in one of rl+…rm+}rn+(hWX be listed in one of hXj^+ubjn)ro+}rp+(hWX:pkg-field:`other-modules`rq+hXj^+hchdhejrhg}rr+(UreftypeX pkg-fieldjtˆjuX other-modulesU refdomainXcabalrs+hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqMJhs]rt+hâ)ru+}rv+(hWjq+hg}rw+(hi]hj]rx+(jjs+Xcabal-pkg-fieldry+ehk]hl]ho]uhXjo+hs]rz+h|X other-modulesr{+…r|+}r}+(hWUhXju+ubahehêubaubh|X, r~+…r+}r€+(hWX, hXj^+ubjn)r+}r‚+(hWX$:pkg-field:`library:exposed-modules`rƒ+hXj^+hchdhejrhg}r„+(UreftypeX pkg-fieldjtˆjuXexposed-modulesU refdomainXcabalr…+hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽXlibraryuhqMJhs]r†+hâ)r‡+}rˆ+(hWjƒ+hg}r‰+(hi]hj]rŠ+(jj…+Xcabal-pkg-fieldr‹+ehk]hl]ho]uhXj+hs]rŒ+h|Xlibrary:exposed-modulesr+…rŽ+}r+(hWUhXj‡+ubahehêubaubh|X or r+…r‘+}r’+(hWX or hXj^+ubjn)r“+}r”+(hWX:pkg-field:`executable:main-is`r•+hXj^+hchdhejrhg}r–+(UreftypeX pkg-fieldjtˆjuXmain-isU refdomainXcabalr—+hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽX executableuhqMJhs]r˜+hâ)r™+}rš+(hWj•+hg}r›+(hi]hj]rœ+(jj—+Xcabal-pkg-fieldr+ehk]hl]ho]uhXj“+hs]rž+h|Xexecutable:main-isrŸ+…r +}r¡+(hWUhXj™+ubahehêubaubh|X fields.r¢+…r£+}r¤+(hWX fields.hXj^+ubeubaubeubeubjü)r¥+}r¦+(hWUhXjw'hchdhejÿhg}r§+(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r¨+}r©+(hWUhXjw'hchdhejhg}rª+(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr«+j j«+uhqNhrhhs]r¬+(j )r­+}r®+(hWXhs-source-dirs: directory listhXj¨+hchdhejhg}r¯+(hl]r°+Xpkg-field-hs-source-dirsr±+ahk]hi]hj]ho]j‰uhqMVhrhhs]r²+(jü)r³+}r´+(hWUhXj­+hchdhejÿhg}rµ+(hl]hk]hi]hj]ho]Uentries]r¶+(jX#hs-source-dirs; package.cabal fieldj±+UNtr·+auhqMVhrhhs]ubj)r¸+}r¹+(hWXhs-source-dirsrº+hXj­+hchdhejhg}r»+(jÔjÕhl]hk]hi]hj]ho]uhqMVhrhhs]r¼+h|Xhs-source-dirsr½+…r¾+}r¿+(hWUhcNhqNhrhhXj¸+ubaubj%)rÀ+}rÁ+(hWjžhXj­+hchdhej(hg}rÂ+(jÔjÕhl]hk]hi]hj]ho]uhqMVhrhhs]rÃ+h|X: rÄ+…rÅ+}rÆ+(hWUhcNhqNhrhhXjÀ+ubaubj¤)rÇ+}rÈ+(hWXdirectory listhXj­+hchdhej§hg}rÉ+(jÔjÕhl]hk]hi]hj]ho]uhqMVhrhhs]rÊ+h|Xdirectory listrË+…rÌ+}rÍ+(hWUhcNhqNhrhhXjÇ+ubaubeubj-)rÎ+}rÏ+(hWUhXj¨+hchdhej0hg}rÐ+(hi]hj]hk]hl]ho]uhqMVhrhhs]rÑ+(j3)rÒ+}rÓ+(hWUhXjÎ+hchdhej6hg}rÔ+(hi]hj]hk]hl]ho]uhqNhrhhs]rÕ+j9)rÖ+}r×+(hWUhg}rØ+(hi]hj]hk]hl]ho]uhXjÒ+hs]rÙ+(j?)rÚ+}rÛ+(hWX Default valuehXjÖ+hchdhejChg}rÜ+(hi]hj]hk]hl]ho]uhqKhs]rÝ+h|X Default valuerÞ+…rß+}rà+(hWUhXjÚ+ubaubjI)rá+}râ+(hWUhg}rã+(hi]hj]hk]hl]ho]uhXjÖ+hs]rä+h€)rå+}ræ+(hWX.hg}rç+(hi]hj]hk]hl]ho]uhXjá+hs]rè+hâ)ré+}rê+(hWX``.``hXjå+hchdhehêhg}rë+(hi]hj]hk]hl]ho]uhqNhrhhs]rì+h|X.…rí+}rî+(hWUhcNhqNhrhhXjé+ubaubaheh„ubahejVubehej<ubaubh€)rï+}rð+(hWX*Root directories for the module hierarchy.rñ+hXjÎ+hchdheh„hg}rò+(hi]hj]hk]hl]ho]uhqMRhrhhs]ró+h|X*Root directories for the module hierarchy.rô+…rõ+}rö+(hWjñ+hcNhqNhrhhXjï+ubaubh€)r÷+}rø+(hWXRFor backwards compatibility, the old variant ``hs-source-dir`` is also recognized.hXjÎ+hchdheh„hg}rù+(hi]hj]hk]hl]ho]uhqMThrhhs]rú+(h|X-For backwards compatibility, the old variant rû+…rü+}rý+(hWX-For backwards compatibility, the old variant hcNhqNhrhhXj÷+ubhâ)rþ+}rÿ+(hWX``hs-source-dir``hg}r,(hi]hj]hk]hl]ho]uhXj÷+hs]r,h|X hs-source-dirr,…r,}r,(hWUhXjþ+ubahehêubh|X is also recognized.r,…r,}r,(hWX is also recognized.hcNhqNhrhhXj÷+ubeubeubeubjü)r,}r ,(hWUhXjw'hchdhejÿhg}r ,(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r ,}r ,(hWUhXjw'hchdhejhg}r ,(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr,j j,uhqNhrhhs]r,(j )r,}r,(hWX#default-extensions: identifier listhXj ,hchdhejhg}r,(hl]r,Xpkg-field-default-extensionsr,ahk]hi]hj]ho]j‰uhqM_hrhhs]r,(jü)r,}r,(hWUhXj,hchdhejÿhg}r,(hl]hk]hi]hj]ho]Uentries]r,(jX'default-extensions; package.cabal fieldj,UNtr,auhqM_hrhhs]ubj)r,}r,(hWXdefault-extensionsr,hXj,hchdhejhg}r,(jÔjÕhl]hk]hi]hj]ho]uhqM_hrhhs]r,h|Xdefault-extensionsr ,…r!,}r",(hWUhcNhqNhrhhXj,ubaubj%)r#,}r$,(hWjžhXj,hchdhej(hg}r%,(jÔjÕhl]hk]hi]hj]ho]uhqM_hrhhs]r&,h|X: r',…r(,}r),(hWUhcNhqNhrhhXj#,ubaubj¤)r*,}r+,(hWXidentifier listhXj,hchdhej§hg}r,,(jÔjÕhl]hk]hi]hj]ho]uhqM_hrhhs]r-,h|Xidentifier listr.,…r/,}r0,(hWUhcNhqNhrhhXj*,ubaubeubj-)r1,}r2,(hWUhXj ,hchdhej0hg}r3,(hi]hj]hk]hl]ho]uhqM_hrhhs]r4,h€)r5,}r6,(hWXsA 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.hXj1,hchdheh„hg}r7,(hi]hj]hk]hl]ho]uhqMYhrhhs]r8,(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 r9,…r:,}r;,(hWX¥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 hcNhqNhrhhXj5,ubjB)r<,}r=,(hWXa`Extension <../release/cabal-latest/doc/API/Cabal/Language-Haskell-Extension.html#t:Extension>`__hg}r>,(UnameX ExtensionjXQ../release/cabal-latest/doc/API/Cabal/Language-Haskell-Extension.html#t:Extensionhl]hk]hi]hj]ho]uhXj5,hs]r?,h|X Extensionr@,…rA,}rB,(hWUhXj<,ubahejFubh|X type. For example, rC,…rD,}rE,(hWX type. For example, hcNhqNhrhhXj5,ubhâ)rF,}rG,(hWX``CPP``hg}rH,(hi]hj]hk]hl]ho]uhXj5,hs]rI,h|XCPPrJ,…rK,}rL,(hWUhXjF,ubahehêubh|XR specifies that Haskell source files are to be preprocessed with a C preprocessor.rM,…rN,}rO,(hWXR specifies that Haskell source files are to be preprocessed with a C preprocessor.hcNhqNhrhhXj5,ubeubaubeubjü)rP,}rQ,(hWUhXjw'hchdhejÿhg}rR,(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rS,}rT,(hWUhXjw'hchdhejhg}rU,(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrV,j jV,uhqNhrhhs]rW,(j )rX,}rY,(hWX!other-extensions: identifier listhXjS,hchdhejhg}rZ,(hl]r[,Xpkg-field-other-extensionsr\,ahk]hi]hj]ho]j‰uhqM{hrhhs]r],(jü)r^,}r_,(hWUhXjX,hchdhejÿhg}r`,(hl]hk]hi]hj]ho]Uentries]ra,(jX%other-extensions; package.cabal fieldj\,UNtrb,auhqM{hrhhs]ubj)rc,}rd,(hWXother-extensionsre,hXjX,hchdhejhg}rf,(jÔjÕhl]hk]hi]hj]ho]uhqM{hrhhs]rg,h|Xother-extensionsrh,…ri,}rj,(hWUhcNhqNhrhhXjc,ubaubj%)rk,}rl,(hWjžhXjX,hchdhej(hg}rm,(jÔjÕhl]hk]hi]hj]ho]uhqM{hrhhs]rn,h|X: ro,…rp,}rq,(hWUhcNhqNhrhhXjk,ubaubj¤)rr,}rs,(hWXidentifier listhXjX,hchdhej§hg}rt,(jÔjÕhl]hk]hi]hj]ho]uhqM{hrhhs]ru,h|Xidentifier listrv,…rw,}rx,(hWUhcNhqNhrhhXjr,ubaubeubj-)ry,}rz,(hWUhXjS,hchdhej0hg}r{,(hi]hj]hk]hl]ho]uhqM{hrhhs]r|,(h€)r},}r~,(hWXÃ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.hXjy,hchdheh„hg}r,(hi]hj]hk]hl]ho]uhqMbhrhhs]r€,(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 r,…r‚,}rƒ,(hWXŽ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 hcNhqNhrhhXj},ubhâ)r„,}r…,(hWX ``LANGUAGE``hg}r†,(hi]hj]hk]hl]ho]uhXj},hs]r‡,h|XLANGUAGErˆ,…r‰,}rŠ,(hWUhXj„,ubahehêubh|X) pragma in the source files affected e.g.r‹,…rŒ,}r,(hWX) pragma in the source files affected e.g.hcNhqNhrhhXj},ubeubjÏ)rŽ,}r,(hWX+{-# LANGUAGE CPP, MultiParamTypeClasses #-}hXjy,hchdhejÒhg}r,(j‰jXhaskelljÔjÕhl]hk]hi]j}hj]ho]uhqMfhrhhs]r‘,h|X+{-# LANGUAGE CPP, MultiParamTypeClasses #-}r’,…r“,}r”,(hWUhXjŽ,ubaubh€)r•,}r–,(hWXÅ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.hXjy,hchdheh„hg}r—,(hi]hj]hk]hl]ho]uhqMjhrhhs]r˜,(h|X6In Cabal-1.24 the dependency solver will use this and r™,…rš,}r›,(hWX6In Cabal-1.24 the dependency solver will use this and hcNhqNhrhhXj•,ubjn)rœ,}r,(hWX:pkg-field:`default-extensions`rž,hXj•,hchdhejrhg}rŸ,(UreftypeX pkg-fieldjtˆjuXdefault-extensionsU refdomainXcabalr ,hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqMjhs]r¡,hâ)r¢,}r£,(hWjž,hg}r¤,(hi]hj]r¥,(jj ,Xcabal-pkg-fieldr¦,ehk]hl]ho]uhXjœ,hs]r§,h|Xdefault-extensionsr¨,…r©,}rª,(hWUhXj¢,ubahehêubaubh|Xr information. Cabal prior to 1.24 will abort compilation if the current compiler doesn’t provide the extensions.r«,…r¬,}r­,(hWXp information. Cabal prior to 1.24 will abort compilation if the current compiler doesn't provide the extensions.hcNhqNhrhhXj•,ubeubh€)r®,}r¯,(hWX¥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:hXjy,hchdheh„hg}r°,(hi]hj]hk]hl]ho]uhqMnhrhhs]r±,(h|XzIf you use some extensions conditionally, using CPP or conditional module lists, it is good to replicate the condition in r²,…r³,}r´,(hWXzIf you use some extensions conditionally, using CPP or conditional module lists, it is good to replicate the condition in hcNhqNhrhhXj®,ubjn)rµ,}r¶,(hWX:pkg-field:`other-extensions`r·,hXj®,hchdhejrhg}r¸,(UreftypeX pkg-fieldjtˆjuXother-extensionsU refdomainXcabalr¹,hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqMnhs]rº,hâ)r»,}r¼,(hWj·,hg}r½,(hi]hj]r¾,(jj¹,Xcabal-pkg-fieldr¿,ehk]hl]ho]uhXjµ,hs]rÀ,h|Xother-extensionsrÁ,…rÂ,}rÃ,(hWUhXj»,ubahehêubaubh|X declarations:rÄ,…rÅ,}rÆ,(hWX declarations:hcNhqNhrhhXj®,ubeubjÏ)rÇ,}rÈ,(hWXGother-extensions: CPP if impl(ghc >= 7.5) other-extensions: PolyKindshXjy,hchdhejÒhg}rÉ,(jÔjÕhl]hk]hi]hj]ho]uhqMthrhhs]rÊ,h|XGother-extensions: CPP if impl(ghc >= 7.5) other-extensions: PolyKindsrË,…rÌ,}rÍ,(hWUhXjÇ,ubaubh€)rÎ,}rÏ,(hWX¯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.hXjy,hchdheh„hg}rÐ,(hi]hj]hk]hl]ho]uhqMxhrhhs]rÑ,(h|X„You could also omit the conditionally used extensions, as they are for information only, but it is recommended to replicate them in rÒ,…rÓ,}rÔ,(hWX„You could also omit the conditionally used extensions, as they are for information only, but it is recommended to replicate them in hcNhqNhrhhXjÎ,ubjn)rÕ,}rÖ,(hWX:pkg-field:`other-extensions`r×,hXjÎ,hchdhejrhg}rØ,(UreftypeX pkg-fieldjtˆjuXother-extensionsU refdomainXcabalrÙ,hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqMxhs]rÚ,hâ)rÛ,}rÜ,(hWj×,hg}rÝ,(hi]hj]rÞ,(jjÙ,Xcabal-pkg-fieldrß,ehk]hl]ho]uhXjÕ,hs]rà,h|Xother-extensionsrá,…râ,}rã,(hWUhXjÛ,ubahehêubaubh|X declarations.rä,…rå,}ræ,(hWX declarations.hcNhqNhrhhXjÎ,ubeubeubeubjü)rç,}rè,(hWUhXjw'hchdhejÿhg}ré,(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rê,}rë,(hWUhXjw'hchdhejhg}rì,(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrí,j jí,uhqNhrhhs]rî,(j )rï,}rð,(hWXextensions: identifier listhXjê,hchdhejhg}rñ,(hl]rò,Xpkg-field-extensionsró,ahk]hi]hj]ho]j‰uhqNhrhhs]rô,(jü)rõ,}rö,(hWUhXjï,hchdhejÿhg}r÷,(hl]hk]hi]hj]ho]Uentries]rø,(jXextensions; package.cabal fieldjó,UNtrù,auhqNhrhhs]ubj)rú,}rû,(hWX extensionsrü,hXjï,hchdhejhg}rý,(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]rþ,h|X extensionsrÿ,…r-}r-(hWUhcNhqNhrhhXjú,ubaubj%)r-}r-(hWjžhXjï,hchdhej(hg}r-(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]r-h|X: r-…r-}r-(hWUhcNhqNhrhhXj-ubaubj¤)r -}r -(hWXidentifier listhXjï,hchdhej§hg}r -(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]r -h|Xidentifier listr -…r-}r-(hWUhcNhqNhrhhXj -ubaubeubj-)r-}r-(hWUhXjê,hchdhej0hg}r-(hi]hj]hk]hl]ho]uhqNhrhhs]r-(j3)r-}r-(hWUhXj-hchdhej6hg}r-(hi]hj]hk]hl]ho]uhqNhrhhs]r-j9)r-}r-(hWUhXj-hchdhej<hg}r-(hi]hj]hk]hl]ho]uhqNhrhhs]r-(j?)r-}r-(hWU Deprecatedr-hXj-hchdhejChg}r-(hi]hj]hk]hl]ho]uhqKhs]r -h|X Deprecatedr!-…r"-}r#-(hWUhXj-ubaubjI)r$-}r%-(hWUhg}r&-(hi]hj]hk]hl]ho]uhXj-hs]r'-h€)r(-}r)-(hWUhg}r*-(hi]hj]hk]hl]ho]uhXj$-hs]heh„ubahejVubeubaubh€)r+-}r,-(hWX7Deprecated in favor of :pkg-field:`default-extensions`.hXj-hchdheh„hg}r--(hi]hj]hk]hl]ho]uhqMhrhhs]r.-(h|XDeprecated in favor of r/-…r0-}r1-(hWXDeprecated in favor of hcNhqNhrhhXj+-ubjn)r2-}r3-(hWX:pkg-field:`default-extensions`r4-hXj+-hchdhejrhg}r5-(UreftypeX pkg-fieldjtˆjuXdefault-extensionsU refdomainXcabalr6-hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqMhs]r7-hâ)r8-}r9-(hWj4-hg}r:-(hi]hj]r;-(jj6-Xcabal-pkg-fieldr<-ehk]hl]ho]uhXj2-hs]r=-h|Xdefault-extensionsr>-…r?-}r@-(hWUhXj8-ubahehêubaubh|X.…rA-}rB-(hWX.hcNhqNhrhhXj+-ubeubeubeubjü)rC-}rD-(hWUhXjw'hchdhejÿhg}rE-(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rF-}rG-(hWUhXjw'hchdhejhg}rH-(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrI-j jI-uhqNhrhhs]rJ-(j )rK-}rL-(hWX+build-tool-depends: package:executable listhXjF-hchdhejhg}rM-(hl]rN-Xpkg-field-build-tool-dependsrO-ahk]hi]hj]ho]j‰uhqNhrhhs]rP-(jü)rQ-}rR-(hWUhXjK-hchdhejÿhg}rS-(hl]hk]hi]hj]ho]Uentries]rT-(jX'build-tool-depends; package.cabal fieldjO-UNtrU-auhqNhrhhs]ubj)rV-}rW-(hWXbuild-tool-dependsrX-hXjK-hchdhejhg}rY-(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]rZ-h|Xbuild-tool-dependsr[-…r\-}r]-(hWUhcNhqNhrhhXjV-ubaubj%)r^-}r_-(hWjžhXjK-hchdhej(hg}r`-(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]ra-h|X: rb-…rc-}rd-(hWUhcNhqNhrhhXj^-ubaubj¤)re-}rf-(hWXpackage:executable listhXjK-hchdhej§hg}rg-(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]rh-h|Xpackage:executable listri-…rj-}rk-(hWUhcNhqNhrhhXje-ubaubeubj-)rl-}rm-(hWUhXjF-hchdhej0hg}rn-(hi]hj]hk]hl]ho]uhqNhrhhs]ro-(j3)rp-}rq-(hWUhXjl-hchdhej6hg}rr-(hi]hj]hk]hl]ho]uhqNhrhhs]rs-j9)rt-}ru-(hWUhXjp-hchdhej<hg}rv-(hi]hj]hk]hl]ho]uhqNhrhhs]rw-(j?)rx-}ry-(hWjBhXjt-hchdhejChg}rz-(hi]hj]hk]hl]ho]uhqKhs]r{-h|XSincer|-…r}-}r~-(hWUhXjx-ubaubjI)r-}r€-(hWU Cabal 2.0r-hg}r‚-(hi]hj]hk]hl]ho]uhXjt-hs]rƒ-h€)r„-}r…-(hWj-hg}r†-(hi]hj]hk]hl]ho]uhXj-hs]r‡-h|X Cabal 2.0rˆ-…r‰-}rŠ-(hWUhXj„-ubaheh„ubahejVubeubaubh€)r‹-}rŒ-(hWXjA list of Haskell programs needed to build this component. 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. It is fine for the package to be the current one, in which case this is termed an *internal*, rather than *external* executable dependency.hXjl-hchdheh„hg}r-(hi]hj]hk]hl]ho]uhqM„hrhhs]rŽ-(h|X1A list of Haskell programs needed to build this component. 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. It is fine for the package to be the current one, in which case this is termed an r-…r-}r‘-(hWX1A list of Haskell programs needed to build this component. 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. It is fine for the package to be the current one, in which case this is termed an hcNhqNhrhhXj‹-ubhÂ)r’-}r“-(hWX *internal*hg}r”-(hi]hj]hk]hl]ho]uhXj‹-hs]r•-h|Xinternalr–-…r—-}r˜-(hWUhXj’-ubahehÊubh|X, rather than r™-…rš-}r›-(hWX, rather than hcNhqNhrhhXj‹-ubhÂ)rœ-}r-(hWX *external*hg}rž-(hi]hj]hk]hl]ho]uhXj‹-hs]rŸ-h|Xexternalr -…r¡-}r¢-(hWUhXjœ-ubahehÊubh|X executable dependency.r£-…r¤-}r¥-(hWX executable dependency.hcNhqNhrhhXj‹-ubeubh€)r¦-}r§-(hWXÚExternal dependencies can (and should) contain a version bound like conventional :pkg-field:`build-depends` dependencies. Internal deps 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.hXjl-hchdheh„hg}r¨-(hi]hj]hk]hl]ho]uhqMˆhrhhs]r©-(h|XQExternal dependencies can (and should) contain a version bound like conventional rª-…r«-}r¬-(hWXQExternal dependencies can (and should) contain a version bound like conventional hcNhqNhrhhXj¦-ubjn)r­-}r®-(hWX:pkg-field:`build-depends`r¯-hXj¦-hchdhejrhg}r°-(UreftypeX pkg-fieldjtˆjuX build-dependsU refdomainXcabalr±-hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqMˆhs]r²-hâ)r³-}r´-(hWj¯-hg}rµ-(hi]hj]r¶-(jj±-Xcabal-pkg-fieldr·-ehk]hl]ho]uhXj­-hs]r¸-h|X build-dependsr¹-…rº-}r»-(hWUhXj³-ubahehêubaubh|Xs dependencies. Internal deps 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¼-…r½-}r¾-(hWXo dependencies. Internal deps 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.hcNhqNhrhhXj¦-ubeubh€)r¿-}rÀ-(hWXðCabal can make sure that specified programs are built and on the ``PATH`` before building the component in question. It will always do so for internal dependencies, and also do so for external dependencies when using Nix-style local builds.hXjl-hchdheh„hg}rÁ-(hi]hj]hk]hl]ho]uhqMŒhrhhs]rÂ-(h|XACabal can make sure that specified programs are built and on the rÃ-…rÄ-}rÅ-(hWXACabal can make sure that specified programs are built and on the hcNhqNhrhhXj¿-ubhâ)rÆ-}rÇ-(hWX``PATH``hg}rÈ-(hi]hj]hk]hl]ho]uhXj¿-hs]rÉ-h|XPATHrÊ-…rË-}rÌ-(hWUhXjÆ-ubahehêubh|X§ before building the component in question. It will always do so for internal dependencies, and also do so for external dependencies when using Nix-style local builds.rÍ-…rÎ-}rÏ-(hWX§ before building the component in question. It will always do so for internal dependencies, and also do so for external dependencies when using Nix-style local builds.hcNhqNhrhhXj¿-ubeubh€)rÐ-}rÑ-(hWXÍ: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.hXjl-hchdheh„hg}rÒ-(hi]hj]hk]hl]ho]uhqMhrhhs]rÓ-(jn)rÔ-}rÕ-(hWX:pkg-field:`build-tool-depends`rÖ-hXjÐ-hchdhejrhg}r×-(UreftypeX pkg-fieldjtˆjuXbuild-tool-dependsU refdomainXcabalrØ-hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqMhs]rÙ-hâ)rÚ-}rÛ-(hWjÖ-hg}rÜ-(hi]hj]rÝ-(jjØ-Xcabal-pkg-fieldrÞ-ehk]hl]ho]uhXjÔ-hs]rß-h|Xbuild-tool-dependsrà-…rá-}râ-(hWUhXjÚ-ubahehêubaubh|Xb was added in Cabal 2.0, and it will be ignored (with a warning) with old versions of Cabal. See rã-…rä-}rå-(hWXb was added in Cabal 2.0, and it will be ignored (with a warning) with old versions of Cabal. See hcNhqNhrhhXjÐ-ubjn)ræ-}rç-(hWX:pkg-field:`build-tools`rè-hXjÐ-hchdhejrhg}ré-(UreftypeX pkg-fieldjtˆjuX build-toolsU refdomainXcabalrê-hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqMhs]rë-hâ)rì-}rí-(hWjè-hg}rî-(hi]hj]rï-(jjê-Xcabal-pkg-fieldrð-ehk]hl]ho]uhXjæ-hs]rñ-h|X build-toolsrò-…ró-}rô-(hWUhXjì-ubahehêubaubh|X4 for more information about backwards compatibility.rõ-…rö-}r÷-(hWX4 for more information about backwards compatibility.hcNhqNhrhhXjÐ-ubeubeubeubjü)rø-}rù-(hWUhXjw'hchdhejÿhg}rú-(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rû-}rü-(hWUhXjw'hchdhejhg}rý-(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrþ-j jþ-uhqNhrhhs]rÿ-(j )r.}r.(hWXbuild-tools: program listhXjû-hchdhejhg}r.(hl]r.Xpkg-field-build-toolsr.ahk]hi]hj]ho]j‰uhqNhrhhs]r.(jü)r.}r.(hWUhXj.hchdhejÿhg}r.(hl]hk]hi]hj]ho]Uentries]r .(jX build-tools; package.cabal fieldj.UNtr .auhqNhrhhs]ubj)r .}r .(hWX build-toolsr .hXj.hchdhejhg}r.(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]r.h|X build-toolsr.…r.}r.(hWUhcNhqNhrhhXj .ubaubj%)r.}r.(hWjžhXj.hchdhej(hg}r.(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]r.h|X: r.…r.}r.(hWUhcNhqNhrhhXj.ubaubj¤)r.}r.(hWX program listhXj.hchdhej§hg}r.(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]r.h|X program listr.…r.}r .(hWUhcNhqNhrhhXj.ubaubeubj-)r!.}r".(hWUhXjû-hchdhej0hg}r#.(hi]hj]hk]hl]ho]uhqNhrhhs]r$.(j3)r%.}r&.(hWUhXj!.hchdhej6hg}r'.(hi]hj]hk]hl]ho]uhqNhrhhs]r(.j9)r).}r*.(hWUhXj%.hchdhej<hg}r+.(hi]hj]hk]hl]ho]uhqNhrhhs]r,.(j?)r-.}r..(hWj-hXj).hchdhejChg}r/.(hi]hj]hk]hl]ho]uhqKhs]r0.h|X Deprecatedr1.…r2.}r3.(hWUhXj-.ubaubjI)r4.}r5.(hWUhg}r6.(hi]hj]hk]hl]ho]uhXj).hs]r7.h€)r8.}r9.(hWUhg}r:.(hi]hj]hk]hl]ho]uhXj4.hs]heh„ubahejVubeubaubh€)r;.}r<.(hWX„Deprecated in favor of :pkg-field:`build-tool-depends`, but :ref:`see below for backwards compatibility information `.hXj!.hchdheh„hg}r=.(hi]hj]hk]hl]ho]uhqM—hrhhs]r>.(h|XDeprecated in favor of r?.…r@.}rA.(hWXDeprecated in favor of hcNhqNhrhhXj;.ubjn)rB.}rC.(hWX:pkg-field:`build-tool-depends`rD.hXj;.hchdhejrhg}rE.(UreftypeX pkg-fieldjtˆjuXbuild-tool-dependsU refdomainXcabalrF.hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqM—hs]rG.hâ)rH.}rI.(hWjD.hg}rJ.(hi]hj]rK.(jjF.Xcabal-pkg-fieldrL.ehk]hl]ho]uhXjB.hs]rM.h|Xbuild-tool-dependsrN.…rO.}rP.(hWUhXjH.ubahehêubaubh|X, but rQ.…rR.}rS.(hWX, but hcNhqNhrhhXj;.ubjn)rT.}rU.(hWXG:ref:`see below for backwards compatibility information `rV.hXj;.hchdhejrhg}rW.(UreftypeXrefjtˆjuX buildtoolsbcU refdomainXstdrX.hl]hk]U refexplicitˆhi]hj]ho]jwjxuhqM—hs]rY.jz)rZ.}r[.(hWjV.hg}r\.(hi]hj]r].(jjX.Xstd-refr^.ehk]hl]ho]uhXjT.hs]r_.h|X1see below for backwards compatibility informationr`.…ra.}rb.(hWUhXjZ.ubahej…ubaubh|X.…rc.}rd.(hWX.hcNhqNhrhhXj;.ubeubh€)re.}rf.(hWX¸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:rg.hXj!.hchdheh„hg}rh.(hi]hj]hk]hl]ho]uhqM™hrhhs]ri.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:rj.…rk.}rl.(hWjg.hcNhqNhrhhXje.ubaubj~)rm.}rn.(hWUhXj!.hcNhejhg}ro.(hi]hj]hk]hl]ho]uhqNhrhhs]rp.cdocutils.nodes enumerated_list rq.)rr.}rs.(hWUhg}rt.(Usuffixru.U.hl]hk]hi]Uprefixrv.Uhj]ho]Uenumtyperw.Uarabicrx.uhXjm.hs]ry.(h‘)rz.}r{.(hWXEAnother executables in the same package (supported since Cabal 1.12) hg}r|.(hi]hj]hk]hl]ho]uhXjr.hs]r}.h€)r~.}r.(hWXDAnother executables in the same package (supported since Cabal 1.12)r€.hXjz.hchdheh„hg}r.(hi]hj]hk]hl]ho]uhqMhs]r‚.h|XDAnother executables in the same package (supported since Cabal 1.12)rƒ.…r„.}r….(hWj€.hXj~.ubaubaheh”ubh‘)r†.}r‡.(hWXUTool name contained in Cabal's :ref:`hard-coded set of common tools ` hg}rˆ.(hi]hj]hk]hl]ho]uhXjr.hs]r‰.h€)rŠ.}r‹.(hWXTTool name contained in Cabal's :ref:`hard-coded set of common tools `hXj†.hchdheh„hg}rŒ.(hi]hj]hk]hl]ho]uhqMŸhs]r.(h|X!Tool name contained in Cabal’s rŽ.…r.}r.(hWXTool name contained in Cabal's hXjŠ.ubjn)r‘.}r’.(hWX5:ref:`hard-coded set of common tools `r“.hXjŠ.hchdhejrhg}r”.(UreftypeXrefjtˆjuX buildtoolsmapU refdomainXstdr•.hl]hk]U refexplicitˆhi]hj]ho]jwjxuhqMŸhs]r–.jz)r—.}r˜.(hWj“.hg}r™.(hi]hj]rš.(jj•.Xstd-refr›.ehk]hl]ho]uhXj‘.hs]rœ.h|Xhard-coded set of common toolsr.…rž.}rŸ.(hWUhXj—.ubahej…ubaubeubaheh”ubh‘)r .}r¡.(hWXZA pre-built executable that should already be on the ``PATH`` (supported since Cabal 2.0) hg}r¢.(hi]hj]hk]hl]ho]uhXjr.hs]r£.h€)r¤.}r¥.(hWXYA pre-built executable that should already be on the ``PATH`` (supported since Cabal 2.0)hXj .hchdheh„hg}r¦.(hi]hj]hk]hl]ho]uhqM¡hs]r§.(h|X5A pre-built executable that should already be on the r¨.…r©.}rª.(hWX5A pre-built executable that should already be on the hXj¤.ubhâ)r«.}r¬.(hWX``PATH``hg}r­.(hi]hj]hk]hl]ho]uhXj¤.hs]r®.h|XPATHr¯.…r°.}r±.(hWUhXj«.ubahehêubh|X (supported since Cabal 2.0)r².…r³.}r´.(hWX (supported since Cabal 2.0)hXj¤.ubeubaheh”ubeheUenumerated_listrµ.ubaubh€)r¶.}r·.(hWXÑ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``.hXj!.hchdheh„hg}r¸.(hi]hj]hk]hl]ho]uhqM¤hrhhs]r¹.(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 rº.…r».}r¼.(hWXÈ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 hcNhqNhrhhXj¶.ubhâ)r½.}r¾.(hWX``PATH``hg}r¿.(hi]hj]hk]hl]ho]uhXj¶.hs]rÀ.h|XPATHrÁ.…rÂ.}rÃ.(hWUhXj½.ubahehêubh|X.…rÄ.}rÅ.(hWX.hcNhqNhrhhXj¶.ubeubh€)rÆ.}rÇ.(hWXIn 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.hXj!.hchdheh„hg}rÈ.(hi]hj]hk]hl]ho]uhqM¨hrhhs]rÉ.(h|X;In the first two cases, the list entry is desugared into a rÊ.…rË.}rÌ.(hWX;In the first two cases, the list entry is desugared into a hcNhqNhrhhXjÆ.ubjn)rÍ.}rÎ.(hWX:pkg-field:`build-tool-depends`rÏ.hXjÆ.hchdhejrhg}rÐ.(UreftypeX pkg-fieldjtˆjuXbuild-tool-dependsU refdomainXcabalrÑ.hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqM¨hs]rÒ.hâ)rÓ.}rÔ.(hWjÏ.hg}rÕ.(hi]hj]rÖ.(jjÑ.Xcabal-pkg-fieldr×.ehk]hl]ho]uhXjÍ.hs]rØ.h|Xbuild-tool-dependsrÙ.…rÚ.}rÛ.(hWUhXjÓ.ubahehêubaubh|X9 entry. In the first case, the entry is desugared into a rÜ.…rÝ.}rÞ.(hWX9 entry. In the first case, the entry is desugared into a hcNhqNhrhhXjÆ.ubjn)rß.}rà.(hWX:pkg-field:`build-tool-depends`rá.hXjÆ.hchdhejrhg}râ.(UreftypeX pkg-fieldjtˆjuXbuild-tool-dependsU refdomainXcabalrã.hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqM¨hs]rä.hâ)rå.}ræ.(hWjá.hg}rç.(hi]hj]rè.(jjã.Xcabal-pkg-fieldré.ehk]hl]ho]uhXjß.hs]rê.h|Xbuild-tool-dependsrë.…rì.}rí.(hWUhXjå.ubahehêubaubh|X entry by prefixing with rî.…rï.}rð.(hWX entry by prefixing with hcNhqNhrhhXjÆ.ubhâ)rñ.}rò.(hWX ``$pkg:``hg}ró.(hi]hj]hk]hl]ho]uhXjÆ.hs]rô.h|X$pkg:rõ.…rö.}r÷.(hWUhXjñ.ubahehêubh|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 rø.…rù.}rú.(hWXÒ. 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 hcNhqNhrhhXjÆ.ubjn)rû.}rü.(hWX:pkg-field:`build-tool-depends`rý.hXjÆ.hchdhejrhg}rþ.(UreftypeX pkg-fieldjtˆjuXbuild-tool-dependsU refdomainXcabalrÿ.hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqM¨hs]r/hâ)r/}r/(hWjý.hg}r/(hi]hj]r/(jjÿ.Xcabal-pkg-fieldr/ehk]hl]ho]uhXjû.hs]r/h|Xbuild-tool-dependsr/…r/}r /(hWUhXj/ubahehêubaubh|XZ to understand the desugared field’s meaning, along with restrictions on version bounds.r /…r /}r /(hWXX to understand the desugared field's meaning, along with restrictions on version bounds.hcNhqNhrhhXjÆ.ubeubj£)r /}r/(hWX.. _buildtoolsbc:hXj!.hchdhej¦hg}r/(hl]hk]hi]hj]ho]jHU buildtoolsbcr/uhqM®hrhhs]ubh€)r/}r/(hWX**Backward Compatiblity**r/hXj!.hchdj}r/h?j /sheh„hg}r/(hi]hj]hk]hl]r/j/aho]r/h?auhqM°hrhj }r/j/j /shs]r/cdocutils.nodes strong r/)r/}r/(hWj/hg}r/(hi]hj]hk]hl]ho]uhXj/hs]r/h|XBackward Compatiblityr/…r /}r!/(hWUhXj/ubaheUstrongr"/ubaubh€)r#/}r$/(hWXRAlthough 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``.hXj!.hchdheh„hg}r%/(hi]hj]hk]hl]ho]uhqM²hrhhs]r&/(h|X.Although this field is deprecated in favor of r'/…r(/}r)/(hWX.Although this field is deprecated in favor of hcNhqNhrhhXj#/ubjn)r*/}r+/(hWX:pkg-field:`build-tool-depends`r,/hXj#/hchdhejrhg}r-/(UreftypeX pkg-fieldjtˆjuXbuild-tool-dependsU refdomainXcabalr./hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqM²hs]r//hâ)r0/}r1/(hWj,/hg}r2/(hi]hj]r3/(jj./Xcabal-pkg-fieldr4/ehk]hl]ho]uhXj*/hs]r5/h|Xbuild-tool-dependsr6/…r7/}r8/(hWUhXj0/ubahehêubaubh|X8, there are some situations where you may prefer to use r9/…r:/}r;/(hWX8, there are some situations where you may prefer to use hcNhqNhrhhXj#/ubjn)r/hXj#/hchdhejrhg}r?/(UreftypeX pkg-fieldjtˆjuX build-toolsU refdomainXcabalr@/hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqM²hs]rA/hâ)rB/}rC/(hWj>/hg}rD/(hi]hj]rE/(jj@/Xcabal-pkg-fieldrF/ehk]hl]ho]uhXjbuild-tools: alex >= 3.2.1 && < 3.3, happy >= 1.19.5 && < 1.20hXj!.hchdhejÒhg}r¼/(jÔjÕhl]hk]hi]hj]ho]uhqM¼hrhhs]r½/h|X>build-tools: alex >= 3.2.1 && < 3.3, happy >= 1.19.5 && < 1.20r¾/…r¿/}rÀ/(hWUhXjº/ubaubh€)rÁ/}rÂ/(hWX7is simply desugared into the equivalent specification::hXj!.hchdheh„hg}rÃ/(hi]hj]hk]hl]ho]uhqM¾hrhhs]rÄ/h|X6is simply desugared into the equivalent specification:rÅ/…rÆ/}rÇ/(hWX6is simply desugared into the equivalent specification:hcNhqNhrhhXjÁ/ubaubjÏ)rÈ/}rÉ/(hWXPbuild-tool-depends: alex:alex >= 3.2.1 && < 3.3, happy:happy >= 1.19.5 && < 1.20hXj!.hchdhejÒhg}rÊ/(jÔjÕhl]hk]hi]hj]ho]uhqMÀhrhhs]rË/h|XPbuild-tool-depends: alex:alex >= 3.2.1 && < 3.3, happy:happy >= 1.19.5 && < 1.20rÌ/…rÍ/}rÎ/(hWUhXjÈ/ubaubcdocutils.nodes table rÏ/)rÐ/}rÑ/(hWUhXj!.hchdheUtablerÒ/hg}rÓ/(hi]hj]hk]hl]ho]uhqNhrhhs]rÔ/cdocutils.nodes tgroup rÕ/)rÖ/}r×/(hWUhg}rØ/(hl]hk]hi]hj]ho]UcolsKuhXjÐ/hs]rÙ/(cdocutils.nodes colspec rÚ/)rÛ/}rÜ/(hWUhg}rÝ/(hl]hk]hi]hj]ho]UcolwidthKuhXjÖ/hs]heUcolspecrÞ/ubjÚ/)rß/}rà/(hWUhg}rá/(hl]hk]hi]hj]ho]UcolwidthK#uhXjÖ/hs]hejÞ/ubjÚ/)râ/}rã/(hWUhg}rä/(hl]hk]hi]hj]ho]UcolwidthKuhXjÖ/hs]hejÞ/ubcdocutils.nodes thead rå/)ræ/}rç/(hWUhg}rè/(hi]hj]hk]hl]ho]uhXjÖ/hs]ré/cdocutils.nodes row rê/)rë/}rì/(hWUhg}rí/(hi]hj]hk]hl]ho]uhXjæ/hs]rî/(cdocutils.nodes entry rï/)rð/}rñ/(hWUhg}rò/(hi]hj]hk]hl]ho]uhXjë/hs]ró/h€)rô/}rõ/(hWX#:pkg-field:`build-tools` identifierhXjð/hchdheh„hg}rö/(hi]hj]hk]hl]ho]uhqMÃhs]r÷/(jn)rø/}rù/(hWX:pkg-field:`build-tools`rú/hXjô/hchdhejrhg}rû/(UreftypeX pkg-fieldjtˆjuX build-toolsU refdomainXcabalrü/hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqMÄhs]rý/hâ)rþ/}rÿ/(hWjú/hg}r0(hi]hj]r0(jjü/Xcabal-pkg-fieldr0ehk]hl]ho]uhXjø/hs]r0h|X build-toolsr0…r0}r0(hWUhXjþ/ubahehêubaubh|X identifierr0…r0}r 0(hWX identifierhXjô/ubeubaheUentryr 0ubjï/)r 0}r 0(hWUhg}r 0(hi]hj]hk]hl]ho]uhXjë/hs]r0h€)r0}r0(hWX4desugared :pkg-field:`build-tool-depends` identifierhXj 0hchdheh„hg}r0(hi]hj]hk]hl]ho]uhqMÃhs]r0(h|X desugared r0…r0}r0(hWX desugared hXj0ubjn)r0}r0(hWX:pkg-field:`build-tool-depends`r0hXj0hchdhejrhg}r0(UreftypeX pkg-fieldjtˆjuXbuild-tool-dependsU refdomainXcabalr0hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqMÄhs]r0hâ)r0}r0(hWj0hg}r0(hi]hj]r0(jj0Xcabal-pkg-fieldr 0ehk]hl]ho]uhXj0hs]r!0h|Xbuild-tool-dependsr"0…r#0}r$0(hWUhXj0ubahehêubaubh|X identifierr%0…r&0}r'0(hWX identifierhXj0ubeubahej 0ubjï/)r(0}r)0(hWUhg}r*0(hi]hj]hk]hl]ho]uhXjë/hs]r+0h€)r,0}r-0(hWXNoter.0hXj(0hchdheh„hg}r/0(hi]hj]hk]hl]ho]uhqMÃhs]r00h|XNoter10…r20}r30(hWj.0hXj,0ubaubahej 0ubeheUrowr40ubaheUtheadr50ubcdocutils.nodes tbody r60)r70}r80(hWUhg}r90(hi]hj]hk]hl]ho]uhXjÖ/hs]r:0(jê/)r;0}r<0(hWUhg}r=0(hi]hj]hk]hl]ho]uhXj70hs]r>0(jï/)r?0}r@0(hWUhg}rA0(hi]hj]hk]hl]ho]uhXj;0hs]rB0h€)rC0}rD0(hWX``alex``rE0hXj?0hchdheh„hg}rF0(hi]hj]hk]hl]ho]uhqMÇhs]rG0hâ)rH0}rI0(hWjE0hg}rJ0(hi]hj]hk]hl]ho]uhXjC0hs]rK0h|XalexrL0…rM0}rN0(hWUhXjH0ubahehêubaubahej 0ubjï/)rO0}rP0(hWUhg}rQ0(hi]hj]hk]hl]ho]uhXj;0hs]rR0h€)rS0}rT0(hWX ``alex:alex``rU0hXjO0hchdheh„hg}rV0(hi]hj]hk]hl]ho]uhqMÇhs]rW0hâ)rX0}rY0(hWjU0hg}rZ0(hi]hj]hk]hl]ho]uhXjS0hs]r[0h|X alex:alexr\0…r]0}r^0(hWUhXjX0ubahehêubaubahej 0ubjï/)r_0}r`0(hWUhg}ra0(hi]hj]hk]hl]ho]uhXj;0hs]hej 0ubehej40ubjê/)rb0}rc0(hWUhg}rd0(hi]hj]hk]hl]ho]uhXj70hs]re0(jï/)rf0}rg0(hWUhg}rh0(hi]hj]hk]hl]ho]uhXjb0hs]ri0h€)rj0}rk0(hWX``c2hs``rl0hXjf0hchdheh„hg}rm0(hi]hj]hk]hl]ho]uhqMÉhs]rn0hâ)ro0}rp0(hWjl0hg}rq0(hi]hj]hk]hl]ho]uhXjj0hs]rr0h|Xc2hsrs0…rt0}ru0(hWUhXjo0ubahehêubaubahej 0ubjï/)rv0}rw0(hWUhg}rx0(hi]hj]hk]hl]ho]uhXjb0hs]ry0h€)rz0}r{0(hWX ``c2hs:c2hs``r|0hXjv0hchdheh„hg}r}0(hi]hj]hk]hl]ho]uhqMÉhs]r~0hâ)r0}r€0(hWj|0hg}r0(hi]hj]hk]hl]ho]uhXjz0hs]r‚0h|X c2hs:c2hsrƒ0…r„0}r…0(hWUhXj0ubahehêubaubahej 0ubjï/)r†0}r‡0(hWUhg}rˆ0(hi]hj]hk]hl]ho]uhXjb0hs]hej 0ubehej40ubjê/)r‰0}rŠ0(hWUhg}r‹0(hi]hj]hk]hl]ho]uhXj70hs]rŒ0(jï/)r0}rŽ0(hWUhg}r0(hi]hj]hk]hl]ho]uhXj‰0hs]r0h€)r‘0}r’0(hWX ``cpphs``r“0hXj0hchdheh„hg}r”0(hi]hj]hk]hl]ho]uhqMËhs]r•0hâ)r–0}r—0(hWj“0hg}r˜0(hi]hj]hk]hl]ho]uhXj‘0hs]r™0h|Xcpphsrš0…r›0}rœ0(hWUhXj–0ubahehêubaubahej 0ubjï/)r0}rž0(hWUhg}rŸ0(hi]hj]hk]hl]ho]uhXj‰0hs]r 0h€)r¡0}r¢0(hWX``cpphs:cpphs``r£0hXj0hchdheh„hg}r¤0(hi]hj]hk]hl]ho]uhqMËhs]r¥0hâ)r¦0}r§0(hWj£0hg}r¨0(hi]hj]hk]hl]ho]uhXj¡0hs]r©0h|X cpphs:cpphsrª0…r«0}r¬0(hWUhXj¦0ubahehêubaubahej 0ubjï/)r­0}r®0(hWUhg}r¯0(hi]hj]hk]hl]ho]uhXj‰0hs]hej 0ubehej40ubjê/)r°0}r±0(hWUhg}r²0(hi]hj]hk]hl]ho]uhXj70hs]r³0(jï/)r´0}rµ0(hWUhg}r¶0(hi]hj]hk]hl]ho]uhXj°0hs]r·0h€)r¸0}r¹0(hWX ``greencard``rº0hXj´0hchdheh„hg}r»0(hi]hj]hk]hl]ho]uhqMÍhs]r¼0hâ)r½0}r¾0(hWjº0hg}r¿0(hi]hj]hk]hl]ho]uhXj¸0hs]rÀ0h|X greencardrÁ0…rÂ0}rÃ0(hWUhXj½0ubahehêubaubahej 0ubjï/)rÄ0}rÅ0(hWUhg}rÆ0(hi]hj]hk]hl]ho]uhXj°0hs]rÇ0h€)rÈ0}rÉ0(hWX``greencard:greencard``rÊ0hXjÄ0hchdheh„hg}rË0(hi]hj]hk]hl]ho]uhqMÍhs]rÌ0hâ)rÍ0}rÎ0(hWjÊ0hg}rÏ0(hi]hj]hk]hl]ho]uhXjÈ0hs]rÐ0h|Xgreencard:greencardrÑ0…rÒ0}rÓ0(hWUhXjÍ0ubahehêubaubahej 0ubjï/)rÔ0}rÕ0(hWUhg}rÖ0(hi]hj]hk]hl]ho]uhXj°0hs]hej 0ubehej40ubjê/)r×0}rØ0(hWUhg}rÙ0(hi]hj]hk]hl]ho]uhXj70hs]rÚ0(jï/)rÛ0}rÜ0(hWUhg}rÝ0(hi]hj]hk]hl]ho]uhXj×0hs]rÞ0h€)rß0}rà0(hWX ``haddock``rá0hXjÛ0hchdheh„hg}râ0(hi]hj]hk]hl]ho]uhqMÏhs]rã0hâ)rä0}rå0(hWjá0hg}ræ0(hi]hj]hk]hl]ho]uhXjß0hs]rç0h|Xhaddockrè0…ré0}rê0(hWUhXjä0ubahehêubaubahej 0ubjï/)rë0}rì0(hWUhg}rí0(hi]hj]hk]hl]ho]uhXj×0hs]rî0h€)rï0}rð0(hWX``haddock:haddock``rñ0hXjë0hchdheh„hg}rò0(hi]hj]hk]hl]ho]uhqMÏhs]ró0hâ)rô0}rõ0(hWjñ0hg}rö0(hi]hj]hk]hl]ho]uhXjï0hs]r÷0h|Xhaddock:haddockrø0…rù0}rú0(hWUhXjô0ubahehêubaubahej 0ubjï/)rû0}rü0(hWUhg}rý0(hi]hj]hk]hl]ho]uhXj×0hs]hej 0ubehej40ubjê/)rþ0}rÿ0(hWUhg}r1(hi]hj]hk]hl]ho]uhXj70hs]r1(jï/)r1}r1(hWUhg}r1(hi]hj]hk]hl]ho]uhXjþ0hs]r1h€)r1}r1(hWX ``happy``r1hXj1hchdheh„hg}r 1(hi]hj]hk]hl]ho]uhqMÑhs]r 1hâ)r 1}r 1(hWj1hg}r 1(hi]hj]hk]hl]ho]uhXj1hs]r1h|Xhappyr1…r1}r1(hWUhXj 1ubahehêubaubahej 0ubjï/)r1}r1(hWUhg}r1(hi]hj]hk]hl]ho]uhXjþ0hs]r1h€)r1}r1(hWX``happy:happy``r1hXj1hchdheh„hg}r1(hi]hj]hk]hl]ho]uhqMÑhs]r1hâ)r1}r1(hWj1hg}r1(hi]hj]hk]hl]ho]uhXj1hs]r1h|X happy:happyr1…r 1}r!1(hWUhXj1ubahehêubaubahej 0ubjï/)r"1}r#1(hWUhg}r$1(hi]hj]hk]hl]ho]uhXjþ0hs]hej 0ubehej40ubjê/)r%1}r&1(hWUhg}r'1(hi]hj]hk]hl]ho]uhXj70hs]r(1(jï/)r)1}r*1(hWUhg}r+1(hi]hj]hk]hl]ho]uhXj%1hs]r,1h€)r-1}r.1(hWX ``hsc2hs``r/1hXj)1hchdheh„hg}r01(hi]hj]hk]hl]ho]uhqMÓhs]r11hâ)r21}r31(hWj/1hg}r41(hi]hj]hk]hl]ho]uhXj-1hs]r51h|Xhsc2hsr61…r71}r81(hWUhXj21ubahehêubaubahej 0ubjï/)r91}r:1(hWUhg}r;1(hi]hj]hk]hl]ho]uhXj%1hs]r<1h€)r=1}r>1(hWX``hsc2hs:hsc2hs``r?1hXj91hchdheh„hg}r@1(hi]hj]hk]hl]ho]uhqMÓhs]rA1hâ)rB1}rC1(hWj?1hg}rD1(hi]hj]hk]hl]ho]uhXj=1hs]rE1h|X hsc2hs:hsc2hsrF1…rG1}rH1(hWUhXjB1ubahehêubaubahej 0ubjï/)rI1}rJ1(hWUhg}rK1(hi]hj]hk]hl]ho]uhXj%1hs]hej 0ubehej40ubjê/)rL1}rM1(hWUhg}rN1(hi]hj]hk]hl]ho]uhXj70hs]rO1(jï/)rP1}rQ1(hWUhg}rR1(hi]hj]hk]hl]ho]uhXjL1hs]rS1h€)rT1}rU1(hWX ``hscolour``rV1hXjP1hchdheh„hg}rW1(hi]hj]hk]hl]ho]uhqMÕhs]rX1hâ)rY1}rZ1(hWjV1hg}r[1(hi]hj]hk]hl]ho]uhXjT1hs]r\1h|Xhscolourr]1…r^1}r_1(hWUhXjY1ubahehêubaubahej 0ubjï/)r`1}ra1(hWUhg}rb1(hi]hj]hk]hl]ho]uhXjL1hs]rc1h€)rd1}re1(hWX``hscolour:hscolour``rf1hXj`1hchdheh„hg}rg1(hi]hj]hk]hl]ho]uhqMÕhs]rh1hâ)ri1}rj1(hWjf1hg}rk1(hi]hj]hk]hl]ho]uhXjd1hs]rl1h|Xhscolour:hscolourrm1…rn1}ro1(hWUhXji1ubahehêubaubahej 0ubjï/)rp1}rq1(hWUhg}rr1(hi]hj]hk]hl]ho]uhXjL1hs]hej 0ubehej40ubjê/)rs1}rt1(hWUhg}ru1(hi]hj]hk]hl]ho]uhXj70hs]rv1(jï/)rw1}rx1(hWUhg}ry1(hi]hj]hk]hl]ho]uhXjs1hs]rz1h€)r{1}r|1(hWX``hspec-discover``r}1hXjw1hchdheh„hg}r~1(hi]hj]hk]hl]ho]uhqM×hs]r1hâ)r€1}r1(hWj}1hg}r‚1(hi]hj]hk]hl]ho]uhXj{1hs]rƒ1h|Xhspec-discoverr„1…r…1}r†1(hWUhXj€1ubahehêubaubahej 0ubjï/)r‡1}rˆ1(hWUhg}r‰1(hi]hj]hk]hl]ho]uhXjs1hs]rŠ1h€)r‹1}rŒ1(hWX!``hspec-discover:hspec-discover``r1hXj‡1hchdheh„hg}rŽ1(hi]hj]hk]hl]ho]uhqM×hs]r1hâ)r1}r‘1(hWj1hg}r’1(hi]hj]hk]hl]ho]uhXj‹1hs]r“1h|Xhspec-discover:hspec-discoverr”1…r•1}r–1(hWUhXj1ubahehêubaubahej 0ubjï/)r—1}r˜1(hWUhg}r™1(hi]hj]hk]hl]ho]uhXjs1hs]rš1h€)r›1}rœ1(hWXsince Cabal 2.0r1hXj—1hchdheh„hg}rž1(hi]hj]hk]hl]ho]uhqM×hs]rŸ1h|Xsince Cabal 2.0r 1…r¡1}r¢1(hWj1hXj›1ubaubahej 0ubehej40ubeheUtbodyr£1ubeheUtgroupr¤1ubaubh€)r¥1}r¦1(hWXÈ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.hXj!.hchdheh„hg}r§1(hi]hj]hk]hl]ho]uhqMÚhrhhs]r¨1(h|X7This built-in set can be programmatically extended via r©1…rª1}r«1(hWX7This built-in set can be programmatically extended via hcNhqNhrhhXj¥1ubhâ)r¬1}r­1(hWX ``Custom``hg}r®1(hi]hj]hk]hl]ho]uhXj¥1hs]r¯1h|XCustomr°1…r±1}r²1(hWUhXj¬1ubahehêubh|Xn setup scripts; this, however, is of limited use since the Cabal solver cannot access information injected by r³1…r´1}rµ1(hWXn setup scripts; this, however, is of limited use since the Cabal solver cannot access information injected by hcNhqNhrhhXj¥1ubhâ)r¶1}r·1(hWX ``Custom``hg}r¸1(hi]hj]hk]hl]ho]uhXj¥1hs]r¹1h|XCustomrº1…r»1}r¼1(hWUhXj¶1ubahehêubh|X setup scripts.r½1…r¾1}r¿1(hWX setup scripts.hcNhqNhrhhXj¥1ubeubeubeubjü)rÀ1}rÁ1(hWUhXjw'hchdhejÿhg}rÂ1(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rÃ1}rÄ1(hWUhXjw'hchdhejhg}rÅ1(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrÆ1j jÆ1uhqNhrhhs]rÇ1(j )rÈ1}rÉ1(hWXbuildable: booleanhXjÃ1hchdhejhg}rÊ1(hl]rË1Xpkg-field-buildablerÌ1ahk]hi]hj]ho]j‰uhqMährhhs]rÍ1(jü)rÎ1}rÏ1(hWUhXjÈ1hchdhejÿhg}rÐ1(hl]hk]hi]hj]ho]Uentries]rÑ1(jXbuildable; package.cabal fieldjÌ1UNtrÒ1auhqMährhhs]ubj)rÓ1}rÔ1(hWX buildablerÕ1hXjÈ1hchdhejhg}rÖ1(jÔjÕhl]hk]hi]hj]ho]uhqMährhhs]r×1h|X buildablerØ1…rÙ1}rÚ1(hWUhcNhqNhrhhXjÓ1ubaubj%)rÛ1}rÜ1(hWjžhXjÈ1hchdhej(hg}rÝ1(jÔjÕhl]hk]hi]hj]ho]uhqMährhhs]rÞ1h|X: rß1…rà1}rá1(hWUhcNhqNhrhhXjÛ1ubaubj¤)râ1}rã1(hWXbooleanhXjÈ1hchdhej§hg}rä1(jÔjÕhl]hk]hi]hj]ho]uhqMährhhs]rå1h|Xbooleanræ1…rç1}rè1(hWUhcNhqNhrhhXjâ1ubaubeubj-)ré1}rê1(hWUhXjÃ1hchdhej0hg}rë1(hi]hj]hk]hl]ho]uhqMährhhs]rì1(j3)rí1}rî1(hWUhXjé1hchdhej6hg}rï1(hi]hj]hk]hl]ho]uhqNhrhhs]rð1j9)rñ1}rò1(hWUhg}ró1(hi]hj]hk]hl]ho]uhXjí1hs]rô1(j?)rõ1}rö1(hWX Default valuehXjñ1hchdhejChg}r÷1(hi]hj]hk]hl]ho]uhqKhs]rø1h|X Default valuerù1…rú1}rû1(hWUhXjõ1ubaubjI)rü1}rý1(hWUhg}rþ1(hi]hj]hk]hl]ho]uhXjñ1hs]rÿ1h€)r2}r2(hWXTruehg}r2(hi]hj]hk]hl]ho]uhXjü1hs]r2hâ)r2}r2(hWX``True``r2hXj2hchdhehêhg}r2(hi]hj]hk]hl]ho]uhqNhrhhs]r2h|XTruer 2…r 2}r 2(hWUhcNhqNhrhhXj2ubaubaheh„ubahejVubehej<ubaubh€)r 2}r 2(hWXß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`_.hXjé1hchdheh„hg}r2(hi]hj]hk]hl]ho]uhqMàhrhhs]r2(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 r2…r2}r2(hWXÀ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 hcNhqNhrhhXj 2ubjB)r2}r2(hWX`system-dependent parameters`_jEKhXj 2hejFhg}r2(UnameXsystem-dependent parametershl]hk]hi]hj]ho]jHj“uhs]r2h|Xsystem-dependent parametersr2…r2}r2(hWUhXj2ubaubh|X.…r2}r2(hWX.hcNhqNhrhhXj 2ubeubeubeubjü)r2}r2(hWUhXjw'hchdhejÿhg}r2(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r2}r 2(hWUhXjw'hchdhejhg}r!2(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr"2j j"2uhqNhrhhs]r#2(j )r$2}r%2(hWXghc-options: token listhXj2hchdhejhg}r&2(hl]r'2Xpkg-field-ghc-optionsr(2ahk]hi]hj]ho]j‰uhqMðhrhhs]r)2(jü)r*2}r+2(hWUhXj$2hchdhejÿhg}r,2(hl]hk]hi]hj]ho]Uentries]r-2(jX ghc-options; package.cabal fieldj(2UNtr.2auhqMðhrhhs]ubj)r/2}r02(hWX ghc-optionsr12hXj$2hchdhejhg}r22(jÔjÕhl]hk]hi]hj]ho]uhqMðhrhhs]r32h|X ghc-optionsr42…r52}r62(hWUhcNhqNhrhhXj/2ubaubj%)r72}r82(hWjžhXj$2hchdhej(hg}r92(jÔjÕhl]hk]hi]hj]ho]uhqMðhrhhs]r:2h|X: r;2…r<2}r=2(hWUhcNhqNhrhhXj72ubaubj¤)r>2}r?2(hWX token listhXj$2hchdhej§hg}r@2(jÔjÕhl]hk]hi]hj]ho]uhqMðhrhhs]rA2h|X token listrB2…rC2}rD2(hWUhcNhqNhrhhXj>2ubaubeubj-)rE2}rF2(hWUhXj2hchdhej0hg}rG2(hi]hj]hk]hl]ho]uhqMðhrhhs]rH2(h€)rI2}rJ2(hWX~Additional options for GHC. You can often achieve the same effect using the :pkg-field:`extensions` field, which is preferred.hXjE2hchdheh„hg}rK2(hi]hj]hk]hl]ho]uhqMçhrhhs]rL2(h|XLAdditional options for GHC. You can often achieve the same effect using the rM2…rN2}rO2(hWXLAdditional options for GHC. You can often achieve the same effect using the hcNhqNhrhhXjI2ubjn)rP2}rQ2(hWX:pkg-field:`extensions`rR2hXjI2hchdhejrhg}rS2(UreftypeX pkg-fieldjtˆjuX extensionsU refdomainXcabalrT2hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqMçhs]rU2hâ)rV2}rW2(hWjR2hg}rX2(hi]hj]rY2(jjT2Xcabal-pkg-fieldrZ2ehk]hl]ho]uhXjP2hs]r[2h|X extensionsr\2…r]2}r^2(hWUhXjV2ubahehêubaubh|X field, which is preferred.r_2…r`2}ra2(hWX field, which is preferred.hcNhqNhrhhXjI2ubeubh€)rb2}rc2(hWXvOptions required only by one module may be specified by placing an ``OPTIONS_GHC`` pragma in the source file affected.hXjE2hchdheh„hg}rd2(hi]hj]hk]hl]ho]uhqMêhrhhs]re2(h|XCOptions required only by one module may be specified by placing an rf2…rg2}rh2(hWXCOptions required only by one module may be specified by placing an hcNhqNhrhhXjb2ubhâ)ri2}rj2(hWX``OPTIONS_GHC``hg}rk2(hi]hj]hk]hl]ho]uhXjb2hs]rl2h|X OPTIONS_GHCrm2…rn2}ro2(hWUhXji2ubahehêubh|X$ pragma in the source file affected.rp2…rq2}rr2(hWX$ pragma in the source file affected.hcNhqNhrhhXjb2ubeubh€)rs2}rt2(hWX•As with many other fields, whitespace can be escaped by using Haskell string syntax. Example: ``ghc-options: -Wcompat "-with-rtsopts=-T -I1" -Wall``.hXjE2hchdheh„hg}ru2(hi]hj]hk]hl]ho]uhqMíhrhhs]rv2(h|X^As with many other fields, whitespace can be escaped by using Haskell string syntax. Example: rw2…rx2}ry2(hWX^As with many other fields, whitespace can be escaped by using Haskell string syntax. Example: hcNhqNhrhhXjs2ubhâ)rz2}r{2(hWX6``ghc-options: -Wcompat "-with-rtsopts=-T -I1" -Wall``hg}r|2(hi]hj]hk]hl]ho]uhXjs2hs]r}2h|X2ghc-options: -Wcompat "-with-rtsopts=-T -I1" -Wallr~2…r2}r€2(hWUhXjz2ubahehêubh|X.…r2}r‚2(hWX.hcNhqNhrhhXjs2ubeubeubeubjü)rƒ2}r„2(hWUhXjw'hchdhejÿhg}r…2(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r†2}r‡2(hWUhXjw'hchdhejhg}rˆ2(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr‰2j j‰2uhqNhrhhs]rŠ2(j )r‹2}rŒ2(hWXghc-prof-options: token listhXj†2hchdhejhg}r2(hl]rŽ2Xpkg-field-ghc-prof-optionsr2ahk]hi]hj]ho]j‰uhqMhrhhs]r2(jü)r‘2}r’2(hWUhXj‹2hchdhejÿhg}r“2(hl]hk]hi]hj]ho]Uentries]r”2(jX%ghc-prof-options; package.cabal fieldj2UNtr•2auhqMhrhhs]ubj)r–2}r—2(hWXghc-prof-optionsr˜2hXj‹2hchdhejhg}r™2(jÔjÕhl]hk]hi]hj]ho]uhqMhrhhs]rš2h|Xghc-prof-optionsr›2…rœ2}r2(hWUhcNhqNhrhhXj–2ubaubj%)rž2}rŸ2(hWjžhXj‹2hchdhej(hg}r 2(jÔjÕhl]hk]hi]hj]ho]uhqMhrhhs]r¡2h|X: r¢2…r£2}r¤2(hWUhcNhqNhrhhXjž2ubaubj¤)r¥2}r¦2(hWX token listhXj‹2hchdhej§hg}r§2(jÔjÕhl]hk]hi]hj]ho]uhqMhrhhs]r¨2h|X token listr©2…rª2}r«2(hWUhcNhqNhrhhXj¥2ubaubeubj-)r¬2}r­2(hWUhXj†2hchdhej0hg}r®2(hi]hj]hk]hl]ho]uhqMhrhhs]r¯2(h€)r°2}r±2(hWXLAdditional options for GHC when the package is built with profiling enabled.r²2hXj¬2hchdheh„hg}r³2(hi]hj]hk]hl]ho]uhqMóhrhhs]r´2h|XLAdditional options for GHC when the package is built with profiling enabled.rµ2…r¶2}r·2(hWj²2hcNhqNhrhhXj°2ubaubh€)r¸2}r¹2(hWX²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.hXj¬2hchdheh„hg}rº2(hi]hj]hk]hl]ho]uhqMöhrhhs]r»2(h|XKNote that as of Cabal-1.24, the default profiling detail level defaults to r¼2…r½2}r¾2(hWXKNote that as of Cabal-1.24, the default profiling detail level defaults to hcNhqNhrhhXj¸2ubhâ)r¿2}rÀ2(hWX``exported-functions``hg}rÁ2(hi]hj]hk]hl]ho]uhXj¸2hs]rÂ2h|Xexported-functionsrÃ2…rÄ2}rÅ2(hWUhXj¿2ubahehêubh|X for libraries and rÆ2…rÇ2}rÈ2(hWX for libraries and hcNhqNhrhhXj¸2ubhâ)rÉ2}rÊ2(hWX``toplevel-functions``hg}rË2(hi]hj]hk]hl]ho]uhXj¸2hs]rÌ2h|Xtoplevel-functionsrÍ2…rÎ2}rÏ2(hWUhXjÉ2ubahehêubh|X8 for executables. For GHC these correspond to the flags rÐ2…rÑ2}rÒ2(hWX8 for executables. For GHC these correspond to the flags hcNhqNhrhhXj¸2ubhâ)rÓ2}rÔ2(hWX``-fprof-auto-exported``hg}rÕ2(hi]hj]hk]hl]ho]uhXj¸2hs]rÖ2h|X-fprof-auto-exportedr×2…rØ2}rÙ2(hWUhXjÓ2ubahehêubh|X and rÚ2…rÛ2}rÜ2(hWX and rÝ2hcNhqNhrhhXj¸2ubhâ)rÞ2}rß2(hWX``-fprof-auto-top``hg}rà2(hi]hj]hk]hl]ho]uhXj¸2hs]rá2h|X-fprof-auto-toprâ2…rã2}rä2(hWUhXjÞ2ubahehêubh|X-. Prior to Cabal-1.24 the level defaulted to rå2…ræ2}rç2(hWX-. Prior to Cabal-1.24 the level defaulted to hcNhqNhrhhXj¸2ubhâ)rè2}ré2(hWX``none``hg}rê2(hi]hj]hk]hl]ho]uhXj¸2hs]rë2h|Xnonerì2…rí2}rî2(hWUhXjè2ubahehêubh|XK. These levels can be adjusted by the person building the package with the rï2…rð2}rñ2(hWXK. These levels can be adjusted by the person building the package with the hcNhqNhrhhXj¸2ubhâ)rò2}ró2(hWX``--profiling-detail``hg}rô2(hi]hj]hk]hl]ho]uhXj¸2hs]rõ2h|X--profiling-detailrö2…r÷2}rø2(hWUhXjò2ubahehêubh|X and rù2…rú2}rû2(hWjÝ2hXj¸2ubhâ)rü2}rý2(hWX``--library-profiling-detail``hg}rþ2(hi]hj]hk]hl]ho]uhXj¸2hs]rÿ2h|X--library-profiling-detailr3…r3}r3(hWUhXjü2ubahehêubh|X flags.r3…r3}r3(hWX flags.hcNhqNhrhhXj¸2ubeubh€)r3}r3(hWX¯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.hXj¬2hchdheh„hg}r3(hi]hj]hk]hl]ho]uhqMþhrhhs]r 3(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 r 3…r 3}r 3(hWX×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 hcNhqNhrhhXj3ubhâ)r 3}r3(hWX``-fprof-auto*``hg}r3(hi]hj]hk]hl]ho]uhXj3hs]r3h|X -fprof-auto*r3…r3}r3(hWUhXj 3ubahehêubh|Xa flags here. However if you wish to override the profiling detail level, you can do so using the r3…r3}r3(hWXa flags here. However if you wish to override the profiling detail level, you can do so using the hcNhqNhrhhXj3ubjn)r3}r3(hWX:pkg-field:`ghc-prof-options`r3hXj3hchdhejrhg}r3(UreftypeX pkg-fieldjtˆjuXghc-prof-optionsU refdomainXcabalr3hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqMþhs]r3hâ)r3}r3(hWj3hg}r3(hi]hj]r 3(jj3Xcabal-pkg-fieldr!3ehk]hl]ho]uhXj3hs]r"3h|Xghc-prof-optionsr#3…r$3}r%3(hWUhXj3ubahehêubaubh|X field: use r&3…r'3}r(3(hWX field: use hcNhqNhrhhXj3ubhâ)r)3}r*3(hWX``-fno-prof-auto``hg}r+3(hi]hj]hk]hl]ho]uhXj3hs]r,3h|X-fno-prof-autor-3…r.3}r/3(hWUhXj)3ubahehêubh|X or one of the other r03…r13}r23(hWX or one of the other hcNhqNhrhhXj3ubhâ)r33}r43(hWX``-fprof-auto*``hg}r53(hi]hj]hk]hl]ho]uhXj3hs]r63h|X -fprof-auto*r73…r83}r93(hWUhXj33ubahehêubh|X flags.r:3…r;3}r<3(hWX flags.hcNhqNhrhhXj3ubeubeubeubjü)r=3}r>3(hWUhXjw'hchdhejÿhg}r?3(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r@3}rA3(hWUhXjw'hchdhejhg}rB3(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrC3j jC3uhqNhrhhs]rD3(j )rE3}rF3(hWXghc-shared-options: token listhXj@3hchdhejhg}rG3(hl]rH3Xpkg-field-ghc-shared-optionsrI3ahk]hi]hj]ho]j‰uhqM hrhhs]rJ3(jü)rK3}rL3(hWUhXjE3hchdhejÿhg}rM3(hl]hk]hi]hj]ho]Uentries]rN3(jX'ghc-shared-options; package.cabal fieldjI3UNtrO3auhqM hrhhs]ubj)rP3}rQ3(hWXghc-shared-optionsrR3hXjE3hchdhejhg}rS3(jÔjÕhl]hk]hi]hj]ho]uhqM hrhhs]rT3h|Xghc-shared-optionsrU3…rV3}rW3(hWUhcNhqNhrhhXjP3ubaubj%)rX3}rY3(hWjžhXjE3hchdhej(hg}rZ3(jÔjÕhl]hk]hi]hj]ho]uhqM hrhhs]r[3h|X: r\3…r]3}r^3(hWUhcNhqNhrhhXjX3ubaubj¤)r_3}r`3(hWX token listhXjE3hchdhej§hg}ra3(jÔjÕhl]hk]hi]hj]ho]uhqM hrhhs]rb3h|X token listrc3…rd3}re3(hWUhcNhqNhrhhXj_3ubaubeubj-)rf3}rg3(hWUhXj@3hchdhej0hg}rh3(hi]hj]hk]hl]ho]uhqM hrhhs]ri3h€)rj3}rk3(hWXî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.hXjf3hchdheh„hg}rl3(hi]hj]hk]hl]ho]uhqMhrhhs]rm3(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 rn3…ro3}rp3(hWX–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 hcNhqNhrhhXjj3ubjn)rq3}rr3(hWX:pkg-field:`ghc-options`rs3hXjj3hchdhejrhg}rt3(UreftypeX pkg-fieldjtˆjuX ghc-optionsU refdomainXcabalru3hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqMhs]rv3hâ)rw3}rx3(hWjs3hg}ry3(hi]hj]rz3(jju3Xcabal-pkg-fieldr{3ehk]hl]ho]uhXjq3hs]r|3h|X ghc-optionsr}3…r~3}r3(hWUhXjw3ubahehêubaubh|X@, and are passed to GHC during both the compile and link phases.r€3…r3}r‚3(hWX@, and are passed to GHC during both the compile and link phases.hcNhqNhrhhXjj3ubeubaubeubjü)rƒ3}r„3(hWUhXjw'hchdhejÿhg}r…3(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r†3}r‡3(hWUhXjw'hchdhejhg}rˆ3(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr‰3j j‰3uhqNhrhhs]rŠ3(j )r‹3}rŒ3(hWXincludes: filename listhXj†3hchdhejhg}r3(hl]rŽ3Xpkg-field-includesr3ahk]hi]hj]ho]j‰uhqMhrhhs]r3(jü)r‘3}r’3(hWUhXj‹3hchdhejÿhg}r“3(hl]hk]hi]hj]ho]Uentries]r”3(jXincludes; package.cabal fieldj3UNtr•3auhqMhrhhs]ubj)r–3}r—3(hWXincludesr˜3hXj‹3hchdhejhg}r™3(jÔjÕhl]hk]hi]hj]ho]uhqMhrhhs]rš3h|Xincludesr›3…rœ3}r3(hWUhcNhqNhrhhXj–3ubaubj%)rž3}rŸ3(hWjžhXj‹3hchdhej(hg}r 3(jÔjÕhl]hk]hi]hj]ho]uhqMhrhhs]r¡3h|X: r¢3…r£3}r¤3(hWUhcNhqNhrhhXjž3ubaubj¤)r¥3}r¦3(hWX filename listhXj‹3hchdhej§hg}r§3(jÔjÕhl]hk]hi]hj]ho]uhqMhrhhs]r¨3h|X filename listr©3…rª3}r«3(hWUhcNhqNhrhhXj¥3ubaubeubj-)r¬3}r­3(hWUhXj†3hchdhej0hg}r®3(hi]hj]hk]hl]ho]uhqMhrhhs]r¯3(h€)r°3}r±3(hWXA 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`.hXj¬3hchdheh„hg}r²3(hi]hj]hk]hl]ho]uhqMhrhhs]r³3(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 r´3…rµ3}r¶3(hWXƒ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 hcNhqNhrhhXj°3ubjn)r·3}r¸3(hWX:pkg-field:`include-dirs`r¹3hXj°3hchdhejrhg}rº3(UreftypeX pkg-fieldjtˆjuX include-dirsU refdomainXcabalr»3hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqMhs]r¼3hâ)r½3}r¾3(hWj¹3hg}r¿3(hi]hj]rÀ3(jj»3Xcabal-pkg-fieldrÁ3ehk]hl]ho]uhXj·3hs]rÂ3h|X include-dirsrÃ3…rÄ3}rÅ3(hWUhXj½3ubahehêubaubh|X.…rÆ3}rÇ3(hWX.hcNhqNhrhhXj°3ubeubh€)rÈ3}rÉ3(hWXThese 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.hXj¬3hchdheh„hg}rÊ3(hi]hj]hk]hl]ho]uhqMhrhhs]rË3(h|XrThese files typically contain function prototypes for foreign imports used by the package. This is in contrast to rÌ3…rÍ3}rÎ3(hWXrThese files typically contain function prototypes for foreign imports used by the package. This is in contrast to hcNhqNhrhhXjÈ3ubjn)rÏ3}rÐ3(hWX:pkg-field:`install-includes`rÑ3hXjÈ3hchdhejrhg}rÒ3(UreftypeX pkg-fieldjtˆjuXinstall-includesU refdomainXcabalrÓ3hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqMhs]rÔ3hâ)rÕ3}rÖ3(hWjÑ3hg}r×3(hi]hj]rØ3(jjÓ3Xcabal-pkg-fieldrÙ3ehk]hl]ho]uhXjÏ3hs]rÚ3h|Xinstall-includesrÛ3…rÜ3}rÝ3(hWUhXjÕ3ubahehêubaubh|Xv, which lists header files that are intended to be exposed to other packages that transitively depend on this library.rÞ3…rß3}rà3(hWXv, which lists header files that are intended to be exposed to other packages that transitively depend on this library.hcNhqNhrhhXjÈ3ubeubeubeubjü)rá3}râ3(hWUhXjw'hchdhejÿhg}rã3(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rä3}rå3(hWUhXjw'hchdhejhg}ræ3(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrç3j jç3uhqNhrhhs]rè3(j )ré3}rê3(hWXinstall-includes: filename listhXjä3hchdhejhg}rë3(hl]rì3Xpkg-field-install-includesrí3ahk]hi]hj]ho]j‰uhqM5hrhhs]rî3(jü)rï3}rð3(hWUhXjé3hchdhejÿhg}rñ3(hl]hk]hi]hj]ho]Uentries]rò3(jX%install-includes; package.cabal fieldjí3UNtró3auhqM5hrhhs]ubj)rô3}rõ3(hWXinstall-includesrö3hXjé3hchdhejhg}r÷3(jÔjÕhl]hk]hi]hj]ho]uhqM5hrhhs]rø3h|Xinstall-includesrù3…rú3}rû3(hWUhcNhqNhrhhXjô3ubaubj%)rü3}rý3(hWjžhXjé3hchdhej(hg}rþ3(jÔjÕhl]hk]hi]hj]ho]uhqM5hrhhs]rÿ3h|X: r4…r4}r4(hWUhcNhqNhrhhXjü3ubaubj¤)r4}r4(hWX filename listhXjé3hchdhej§hg}r4(jÔjÕhl]hk]hi]hj]ho]uhqM5hrhhs]r4h|X filename listr4…r4}r 4(hWUhcNhqNhrhhXj4ubaubeubj-)r 4}r 4(hWUhXjä3hchdhej0hg}r 4(hi]hj]hk]hl]ho]uhqM5hrhhs]r 4(h€)r4}r4(hWX$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`.hXj 4hchdheh„hg}r4(hi]hj]hk]hl]ho]uhqMhrhhs]r4(h|X>A list of header files from this package to be installed into r4…r4}r4(hWX>A list of header files from this package to be installed into hcNhqNhrhhXj4ubhâ)r4}r4(hWX``$libdir/includes``hg}r4(hi]hj]hk]hl]ho]uhXj4hs]r4h|X$libdir/includesr4…r4}r4(hWUhXj4ubahehêubh|X0 when the package is installed. Files listed in r4…r4}r4(hWX0 when the package is installed. Files listed in hcNhqNhrhhXj4ubjn)r4}r 4(hWX:pkg-field:`install-includes`r!4hXj4hchdhejrhg}r"4(UreftypeX pkg-fieldjtˆjuXinstall-includesU refdomainXcabalr#4hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqMhs]r$4hâ)r%4}r&4(hWj!4hg}r'4(hi]hj]r(4(jj#4Xcabal-pkg-fieldr)4ehk]hl]ho]uhXj4hs]r*4h|Xinstall-includesr+4…r,4}r-4(hWUhXj%4ubahehêubaubh|Xk should be found in relative to the top of the source tree or relative to one of the directories listed in r.4…r/4}r04(hWXk should be found in relative to the top of the source tree or relative to one of the directories listed in hcNhqNhrhhXj4ubjn)r14}r24(hWX:pkg-field:`include-dirs`r34hXj4hchdhejrhg}r44(UreftypeX pkg-fieldjtˆjuX include-dirsU refdomainXcabalr54hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqMhs]r64hâ)r74}r84(hWj34hg}r94(hi]hj]r:4(jj54Xcabal-pkg-fieldr;4ehk]hl]ho]uhXj14hs]r<4h|X include-dirsr=4…r>4}r?4(hWUhXj74ubahehêubaubh|X.…r@4}rA4(hWX.hcNhqNhrhhXj4ubeubh€)rB4}rC4(hWX\: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``::hXj 4hchdheh„hg}rD4(hi]hj]hk]hl]ho]uhqM%hrhhs]rE4(jn)rF4}rG4(hWX:pkg-field:`install-includes`rH4hXjB4hchdhejrhg}rI4(UreftypeX pkg-fieldjtˆjuXinstall-includesU refdomainXcabalrJ4hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqM%hs]rK4hâ)rL4}rM4(hWjH4hg}rN4(hi]hj]rO4(jjJ4Xcabal-pkg-fieldrP4ehk]hl]ho]uhXjF4hs]rQ4h|Xinstall-includesrR4…rS4}rT4(hWUhXjL4ubahehêubaubh|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 rU4…rV4}rW4(hWXÕ 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 hcNhqNhrhhXjB4ubhâ)rX4}rY4(hWX ``.cabal``hg}rZ4(hi]hj]hk]hl]ho]uhXjB4hs]r[4h|X.cabalr\4…r]4}r^4(hWUhXjX4ubahehêubh|X file for a hypothetical r_4…r`4}ra4(hWX file for a hypothetical hcNhqNhrhhXjB4ubhâ)rb4}rc4(hWX``bindings-clib``hg}rd4(hi]hj]hk]hl]ho]uhXjB4hs]re4h|X bindings-clibrf4…rg4}rh4(hWUhXjb4ubahehêubh|X, package that bundles the C source code for ri4…rj4}rk4(hWX, package that bundles the C source code for hcNhqNhrhhXjB4ubhâ)rl4}rm4(hWX``clib``hg}rn4(hi]hj]hk]hl]ho]uhXjB4hs]ro4h|Xclibrp4…rq4}rr4(hWUhXjl4ubahehêubh|X:…rs4}rt4(hWX:hcNhqNhrhhXjB4ubeubjÏ)ru4}rv4(hWXIinclude-dirs: cbits c-sources: clib.c install-includes: clib.hhXj 4hchdhejÒhg}rw4(jÔjÕhl]hk]hi]hj]ho]uhqM+hrhhs]rx4h|XIinclude-dirs: cbits c-sources: clib.c install-includes: clib.hry4…rz4}r{4(hWUhXju4ubaubh€)r|4}r}4(hWXlNow any package that depends (directly or transitively) on the ``bindings-clib`` library can use ``clib.h``.hXj 4hchdheh„hg}r~4(hi]hj]hk]hl]ho]uhqM/hrhhs]r4(h|X?Now any package that depends (directly or transitively) on the r€4…r4}r‚4(hWX?Now any package that depends (directly or transitively) on the hcNhqNhrhhXj|4ubhâ)rƒ4}r„4(hWX``bindings-clib``hg}r…4(hi]hj]hk]hl]ho]uhXj|4hs]r†4h|X bindings-clibr‡4…rˆ4}r‰4(hWUhXjƒ4ubahehêubh|X library can use rŠ4…r‹4}rŒ4(hWX library can use hcNhqNhrhhXj|4ubhâ)r4}rŽ4(hWX ``clib.h``hg}r4(hi]hj]hk]hl]ho]uhXj|4hs]r4h|Xclib.hr‘4…r’4}r“4(hWUhXj4ubahehêubh|X.…r”4}r•4(hWX.hcNhqNhrhhXj|4ubeubh€)r–4}r—4(hWX·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.hXj 4hchdheh„hg}r˜4(hi]hj]hk]hl]ho]uhqM2hrhhs]r™4(h|X'Note that in order for files listed in rš4…r›4}rœ4(hWX'Note that in order for files listed in hcNhqNhrhhXj–4ubjn)r4}rž4(hWX:pkg-field:`install-includes`rŸ4hXj–4hchdhejrhg}r 4(UreftypeX pkg-fieldjtˆjuXinstall-includesU refdomainXcabalr¡4hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqM2hs]r¢4hâ)r£4}r¤4(hWjŸ4hg}r¥4(hi]hj]r¦4(jj¡4Xcabal-pkg-fieldr§4ehk]hl]ho]uhXj4hs]r¨4h|Xinstall-includesr©4…rª4}r«4(hWUhXj£4ubahehêubaubh|XO to be usable when compiling the package itself, they need to be listed in the r¬4…r­4}r®4(hWXO to be usable when compiling the package itself, they need to be listed in the hcNhqNhrhhXj–4ubjn)r¯4}r°4(hWX:pkg-field:`includes`r±4hXj–4hchdhejrhg}r²4(UreftypeX pkg-fieldjtˆjuXincludesU refdomainXcabalr³4hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqM2hs]r´4hâ)rµ4}r¶4(hWj±4hg}r·4(hi]hj]r¸4(jj³4Xcabal-pkg-fieldr¹4ehk]hl]ho]uhXj¯4hs]rº4h|Xincludesr»4…r¼4}r½4(hWUhXjµ4ubahehêubaubh|X field as well.r¾4…r¿4}rÀ4(hWX field as well.hcNhqNhrhhXj–4ubeubeubeubjü)rÁ4}rÂ4(hWUhXjw'hchdhejÿhg}rÃ4(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rÄ4}rÅ4(hWUhXjw'hchdhejhg}rÆ4(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrÇ4j jÇ4uhqNhrhhs]rÈ4(j )rÉ4}rÊ4(hWXinclude-dirs: directory listhXjÄ4hchdhejhg}rË4(hl]rÌ4Xpkg-field-include-dirsrÍ4ahk]hi]hj]ho]j‰uhqM?hrhhs]rÎ4(jü)rÏ4}rÐ4(hWUhXjÉ4hchdhejÿhg}rÑ4(hl]hk]hi]hj]ho]Uentries]rÒ4(jX!include-dirs; package.cabal fieldjÍ4UNtrÓ4auhqM?hrhhs]ubj)rÔ4}rÕ4(hWX include-dirsrÖ4hXjÉ4hchdhejhg}r×4(jÔjÕhl]hk]hi]hj]ho]uhqM?hrhhs]rØ4h|X include-dirsrÙ4…rÚ4}rÛ4(hWUhcNhqNhrhhXjÔ4ubaubj%)rÜ4}rÝ4(hWjžhXjÉ4hchdhej(hg}rÞ4(jÔjÕhl]hk]hi]hj]ho]uhqM?hrhhs]rß4h|X: rà4…rá4}râ4(hWUhcNhqNhrhhXjÜ4ubaubj¤)rã4}rä4(hWXdirectory listhXjÉ4hchdhej§hg}rå4(jÔjÕhl]hk]hi]hj]ho]uhqM?hrhhs]ræ4h|Xdirectory listrç4…rè4}ré4(hWUhcNhqNhrhhXjã4ubaubeubj-)rê4}rë4(hWUhXjÄ4hchdhej0hg}rì4(hi]hj]hk]hl]ho]uhqM?hrhhs]rí4h€)rî4}rï4(hWXž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`.hXjê4hchdheh„hg}rð4(hi]hj]hk]hl]ho]uhqM8hrhhs]rñ4(h|XJA list of directories to search for header files, when preprocessing with rò4…ró4}rô4(hWXJA list of directories to search for header files, when preprocessing with hcNhqNhrhhXjî4ubhâ)rõ4}rö4(hWX``c2hs``hg}r÷4(hi]hj]hk]hl]ho]uhXjî4hs]rø4h|Xc2hsrù4…rú4}rû4(hWUhXjõ4ubahehêubh|X, rü4…rý4}rþ4(hWX, rÿ4hcNhqNhrhhXjî4ubhâ)r5}r5(hWX ``hsc2hs``hg}r5(hi]hj]hk]hl]ho]uhXjî4hs]r5h|Xhsc2hsr5…r5}r5(hWUhXj5ubahehêubh|X, r5…r5}r 5(hWjÿ4hXjî4ubhâ)r 5}r 5(hWX ``cpphs``hg}r 5(hi]hj]hk]hl]ho]uhXjî4hs]r 5h|Xcpphsr5…r5}r5(hWUhXj 5ubahehêubh|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 r5…r5}r5(hWXý 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 hcNhqNhrhhXjî4ubjn)r5}r5(hWX:pkg-field:`includes`r5hXjî4hchdhejrhg}r5(UreftypeX pkg-fieldjtˆjuXincludesU refdomainXcabalr5hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqM8hs]r5hâ)r5}r5(hWj5hg}r5(hi]hj]r5(jj5Xcabal-pkg-fieldr5ehk]hl]ho]uhXj5hs]r5h|Xincludesr 5…r!5}r"5(hWUhXj5ubahehêubaubh|X and r#5…r$5}r%5(hWX and hcNhqNhrhhXjî4ubjn)r&5}r'5(hWX:pkg-field:`install-includes`r(5hXjî4hchdhejrhg}r)5(UreftypeX pkg-fieldjtˆjuXinstall-includesU refdomainXcabalr*5hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqM8hs]r+5hâ)r,5}r-5(hWj(5hg}r.5(hi]hj]r/5(jj*5Xcabal-pkg-fieldr05ehk]hl]ho]uhXj&5hs]r15h|Xinstall-includesr25…r35}r45(hWUhXj,5ubahehêubaubh|X.…r55}r65(hWX.hcNhqNhrhhXjî4ubeubaubeubjü)r75}r85(hWUhXjw'hchdhejÿhg}r95(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r:5}r;5(hWUhXjw'hchdhejhg}r<5(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr=5j j=5uhqNhrhhs]r>5(j )r?5}r@5(hWXc-sources: filename listhXj:5hchdhejhg}rA5(hl]rB5Xpkg-field-c-sourcesrC5ahk]hi]hj]ho]j‰uhqMDhrhhs]rD5(jü)rE5}rF5(hWUhXj?5hchdhejÿhg}rG5(hl]hk]hi]hj]ho]Uentries]rH5(jXc-sources; package.cabal fieldjC5UNtrI5auhqMDhrhhs]ubj)rJ5}rK5(hWX c-sourcesrL5hXj?5hchdhejhg}rM5(jÔjÕhl]hk]hi]hj]ho]uhqMDhrhhs]rN5h|X c-sourcesrO5…rP5}rQ5(hWUhcNhqNhrhhXjJ5ubaubj%)rR5}rS5(hWjžhXj?5hchdhej(hg}rT5(jÔjÕhl]hk]hi]hj]ho]uhqMDhrhhs]rU5h|X: rV5…rW5}rX5(hWUhcNhqNhrhhXjR5ubaubj¤)rY5}rZ5(hWX filename listhXj?5hchdhej§hg}r[5(jÔjÕhl]hk]hi]hj]ho]uhqMDhrhhs]r\5h|X filename listr]5…r^5}r_5(hWUhcNhqNhrhhXjY5ubaubeubj-)r`5}ra5(hWUhXj:5hchdhej0hg}rb5(hi]hj]hk]hl]ho]uhqMDhrhhs]rc5h€)rd5}re5(hWXJA list of C source files to be compiled and linked with the Haskell files.rf5hXj`5hchdheh„hg}rg5(hi]hj]hk]hl]ho]uhqMBhrhhs]rh5h|XJA list of C source files to be compiled and linked with the Haskell files.ri5…rj5}rk5(hWjf5hcNhqNhrhhXjd5ubaubaubeubjü)rl5}rm5(hWUhXjw'hchdhejÿhg}rn5(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)ro5}rp5(hWUhXjw'hchdhejhg}rq5(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrr5j jr5uhqNhrhhs]rs5(j )rt5}ru5(hWXcxx-sources: filename listhXjo5hchdhejhg}rv5(hl]rw5Xpkg-field-cxx-sourcesrx5ahk]hi]hj]ho]j‰uhqMNhrhhs]ry5(jü)rz5}r{5(hWUhXjt5hchdhejÿhg}r|5(hl]hk]hi]hj]ho]Uentries]r}5(jX cxx-sources; package.cabal fieldjx5UNtr~5auhqMNhrhhs]ubj)r5}r€5(hWX cxx-sourcesr5hXjt5hchdhejhg}r‚5(jÔjÕhl]hk]hi]hj]ho]uhqMNhrhhs]rƒ5h|X cxx-sourcesr„5…r…5}r†5(hWUhcNhqNhrhhXj5ubaubj%)r‡5}rˆ5(hWjžhXjt5hchdhej(hg}r‰5(jÔjÕhl]hk]hi]hj]ho]uhqMNhrhhs]rŠ5h|X: r‹5…rŒ5}r5(hWUhcNhqNhrhhXj‡5ubaubj¤)rŽ5}r5(hWX filename listhXjt5hchdhej§hg}r5(jÔjÕhl]hk]hi]hj]ho]uhqMNhrhhs]r‘5h|X filename listr’5…r“5}r”5(hWUhcNhqNhrhhXjŽ5ubaubeubj-)r•5}r–5(hWUhXjo5hchdhej0hg}r—5(hi]hj]hk]hl]ho]uhqMNhrhhs]r˜5h€)r™5}rš5(hWX­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.hXj•5hchdheh„hg}r›5(hi]hj]hk]hl]ho]uhqMGhrhhs]rœ5(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 r5…rž5}rŸ5(hWX¾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 hcNhqNhrhhXj™5ubjn)r 5}r¡5(hWX:pkg-field:`cc-options`r¢5hXj™5hchdhejrhg}r£5(UreftypeX pkg-fieldjtˆjuX cc-optionsU refdomainXcabalr¤5hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqMGhs]r¥5hâ)r¦5}r§5(hWj¢5hg}r¨5(hi]hj]r©5(jj¤5Xcabal-pkg-fieldrª5ehk]hl]ho]uhXj 5hs]r«5h|X cc-optionsr¬5…r­5}r®5(hWUhXj¦5ubahehêubaubh|X and the r¯5…r°5}r±5(hWX and the hcNhqNhrhhXj™5ubjn)r²5}r³5(hWX:pkg-field:`cxx-options`r´5hXj™5hchdhejrhg}rµ5(UreftypeX pkg-fieldjtˆjuX cxx-optionsU refdomainXcabalr¶5hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqMGhs]r·5hâ)r¸5}r¹5(hWj´5hg}rº5(hi]hj]r»5(jj¶5Xcabal-pkg-fieldr¼5ehk]hl]ho]uhXj²5hs]r½5h|X cxx-optionsr¾5…r¿5}rÀ5(hWUhXj¸5ubahehêubaubh|X! fields. The files listed in the rÁ5…rÂ5}rÃ5(hWX! fields. The files listed in the hcNhqNhrhhXj™5ubjn)rÄ5}rÅ5(hWX:pkg-field:`cxx-sources`rÆ5hXj™5hchdhejrhg}rÇ5(UreftypeX pkg-fieldjtˆjuX cxx-sourcesU refdomainXcabalrÈ5hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqMGhs]rÉ5hâ)rÊ5}rË5(hWjÆ5hg}rÌ5(hi]hj]rÍ5(jjÈ5Xcabal-pkg-fieldrÎ5ehk]hl]ho]uhXjÄ5hs]rÏ5h|X cxx-sourcesrÐ5…rÑ5}rÒ5(hWUhXjÊ5ubahehêubaubh|X# can reference files listed in the rÓ5…rÔ5}rÕ5(hWX# can reference files listed in the hcNhqNhrhhXj™5ubjn)rÖ5}r×5(hWX:pkg-field:`c-sources`rØ5hXj™5hchdhejrhg}rÙ5(UreftypeX pkg-fieldjtˆjuX c-sourcesU refdomainXcabalrÚ5hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqMGhs]rÛ5hâ)rÜ5}rÝ5(hWjØ5hg}rÞ5(hi]hj]rß5(jjÚ5Xcabal-pkg-fieldrà5ehk]hl]ho]uhXjÖ5hs]rá5h|X c-sourcesrâ5…rã5}rä5(hWUhXjÜ5ubahehêubaubh|XE field and vice-versa. The object files will be linked appropriately.rå5…ræ5}rç5(hWXE field and vice-versa. The object files will be linked appropriately.hcNhqNhrhhXj™5ubeubaubeubjü)rè5}ré5(hWUhXjw'hchdhejÿhg}rê5(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rë5}rì5(hWUhXjw'hchdhejhg}rí5(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrî5j jî5uhqNhrhhs]rï5(j )rð5}rñ5(hWXasm-sources: filename listhXjë5hchdhejhg}rò5(hl]ró5Xpkg-field-asm-sourcesrô5ahk]hi]hj]ho]j‰uhqMShrhhs]rõ5(jü)rö5}r÷5(hWUhXjð5hchdhejÿhg}rø5(hl]hk]hi]hj]ho]Uentries]rù5(jX asm-sources; package.cabal fieldjô5UNtrú5auhqMShrhhs]ubj)rû5}rü5(hWX asm-sourcesrý5hXjð5hchdhejhg}rþ5(jÔjÕhl]hk]hi]hj]ho]uhqMShrhhs]rÿ5h|X asm-sourcesr6…r6}r6(hWUhcNhqNhrhhXjû5ubaubj%)r6}r6(hWjžhXjð5hchdhej(hg}r6(jÔjÕhl]hk]hi]hj]ho]uhqMShrhhs]r6h|X: r6…r6}r 6(hWUhcNhqNhrhhXj6ubaubj¤)r 6}r 6(hWX filename listhXjð5hchdhej§hg}r 6(jÔjÕhl]hk]hi]hj]ho]uhqMShrhhs]r 6h|X filename listr6…r6}r6(hWUhcNhqNhrhhXj 6ubaubeubj-)r6}r6(hWUhXjë5hchdhej0hg}r6(hi]hj]hk]hl]ho]uhqMShrhhs]r6h€)r6}r6(hWXQA list of assembly source files to be compiled and linked with the Haskell files.r6hXj6hchdheh„hg}r6(hi]hj]hk]hl]ho]uhqMQhrhhs]r6h|XQA list of assembly source files to be compiled and linked with the Haskell files.r6…r6}r6(hWj6hcNhqNhrhhXj6ubaubaubeubjü)r6}r6(hWUhXjw'hchdhejÿhg}r6(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r 6}r!6(hWUhXjw'hchdhejhg}r"6(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr#6j j#6uhqNhrhhs]r$6(j )r%6}r&6(hWXcmm-sources: filename listhXj 6hchdhejhg}r'6(hl]r(6Xpkg-field-cmm-sourcesr)6ahk]hi]hj]ho]j‰uhqMXhrhhs]r*6(jü)r+6}r,6(hWUhXj%6hchdhejÿhg}r-6(hl]hk]hi]hj]ho]Uentries]r.6(jX cmm-sources; package.cabal fieldj)6UNtr/6auhqMXhrhhs]ubj)r06}r16(hWX cmm-sourcesr26hXj%6hchdhejhg}r36(jÔjÕhl]hk]hi]hj]ho]uhqMXhrhhs]r46h|X cmm-sourcesr56…r66}r76(hWUhcNhqNhrhhXj06ubaubj%)r86}r96(hWjžhXj%6hchdhej(hg}r:6(jÔjÕhl]hk]hi]hj]ho]uhqMXhrhhs]r;6h|X: r<6…r=6}r>6(hWUhcNhqNhrhhXj86ubaubj¤)r?6}r@6(hWX filename listhXj%6hchdhej§hg}rA6(jÔjÕhl]hk]hi]hj]ho]uhqMXhrhhs]rB6h|X filename listrC6…rD6}rE6(hWUhcNhqNhrhhXj?6ubaubeubj-)rF6}rG6(hWUhXj 6hchdhej0hg}rH6(hi]hj]hk]hl]ho]uhqMXhrhhs]rI6h€)rJ6}rK6(hWXLA list of C-- source files to be compiled and linked with the Haskell files.rL6hXjF6hchdheh„hg}rM6(hi]hj]hk]hl]ho]uhqMVhrhhs]rN6h|XMA list of C– source files to be compiled and linked with the Haskell files.rO6…rP6}rQ6(hWjL6hcNhqNhrhhXjJ6ubaubaubeubjü)rR6}rS6(hWUhXjw'hchdhejÿhg}rT6(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rU6}rV6(hWUhXjw'hchdhejhg}rW6(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrX6j jX6uhqNhrhhs]rY6(j )rZ6}r[6(hWXjs-sources: filename listhXjU6hchdhejhg}r\6(hl]r]6Xpkg-field-js-sourcesr^6ahk]hi]hj]ho]j‰uhqM]hrhhs]r_6(jü)r`6}ra6(hWUhXjZ6hchdhejÿhg}rb6(hl]hk]hi]hj]ho]Uentries]rc6(jXjs-sources; package.cabal fieldj^6UNtrd6auhqM]hrhhs]ubj)re6}rf6(hWX js-sourcesrg6hXjZ6hchdhejhg}rh6(jÔjÕhl]hk]hi]hj]ho]uhqM]hrhhs]ri6h|X js-sourcesrj6…rk6}rl6(hWUhcNhqNhrhhXje6ubaubj%)rm6}rn6(hWjžhXjZ6hchdhej(hg}ro6(jÔjÕhl]hk]hi]hj]ho]uhqM]hrhhs]rp6h|X: rq6…rr6}rs6(hWUhcNhqNhrhhXjm6ubaubj¤)rt6}ru6(hWX filename listhXjZ6hchdhej§hg}rv6(jÔjÕhl]hk]hi]hj]ho]uhqM]hrhhs]rw6h|X filename listrx6…ry6}rz6(hWUhcNhqNhrhhXjt6ubaubeubj-)r{6}r|6(hWUhXjU6hchdhej0hg}r}6(hi]hj]hk]hl]ho]uhqM]hrhhs]r~6h€)r6}r€6(hWXdA list of JavaScript source files to be linked with the Haskell files (only for JavaScript targets).r6hXj{6hchdheh„hg}r‚6(hi]hj]hk]hl]ho]uhqM[hrhhs]rƒ6h|XdA list of JavaScript source files to be linked with the Haskell files (only for JavaScript targets).r„6…r…6}r†6(hWj6hcNhqNhrhhXj6ubaubaubeubjü)r‡6}rˆ6(hWUhXjw'hchdhejÿhg}r‰6(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rŠ6}r‹6(hWUhXjw'hchdhejhg}rŒ6(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr6j j6uhqNhrhhs]rŽ6(j )r6}r6(hWXextra-libraries: token listhXjŠ6hchdhejhg}r‘6(hl]r’6Xpkg-field-extra-librariesr“6ahk]hi]hj]ho]j‰uhqMahrhhs]r”6(jü)r•6}r–6(hWUhXj6hchdhejÿhg}r—6(hl]hk]hi]hj]ho]Uentries]r˜6(jX$extra-libraries; package.cabal fieldj“6UNtr™6auhqMahrhhs]ubj)rš6}r›6(hWXextra-librariesrœ6hXj6hchdhejhg}r6(jÔjÕhl]hk]hi]hj]ho]uhqMahrhhs]rž6h|Xextra-librariesrŸ6…r 6}r¡6(hWUhcNhqNhrhhXjš6ubaubj%)r¢6}r£6(hWjžhXj6hchdhej(hg}r¤6(jÔjÕhl]hk]hi]hj]ho]uhqMahrhhs]r¥6h|X: r¦6…r§6}r¨6(hWUhcNhqNhrhhXj¢6ubaubj¤)r©6}rª6(hWX token listhXj6hchdhej§hg}r«6(jÔjÕhl]hk]hi]hj]ho]uhqMahrhhs]r¬6h|X token listr­6…r®6}r¯6(hWUhcNhqNhrhhXj©6ubaubeubj-)r°6}r±6(hWUhXjŠ6hchdhej0hg}r²6(hi]hj]hk]hl]ho]uhqMahrhhs]r³6h€)r´6}rµ6(hWX'A list of extra libraries to link with.r¶6hXj°6hchdheh„hg}r·6(hi]hj]hk]hl]ho]uhqM`hrhhs]r¸6h|X'A list of extra libraries to link with.r¹6…rº6}r»6(hWj¶6hcNhqNhrhhXj´6ubaubaubeubjü)r¼6}r½6(hWUhXjw'hchdhejÿhg}r¾6(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r¿6}rÀ6(hWUhXjw'hchdhejhg}rÁ6(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrÂ6j jÂ6uhqNhrhhs]rÃ6(j )rÄ6}rÅ6(hWX extra-ghci-libraries: token listhXj¿6hchdhejhg}rÆ6(hl]rÇ6Xpkg-field-extra-ghci-librariesrÈ6ahk]hi]hj]ho]j‰uhqMfhrhhs]rÉ6(jü)rÊ6}rË6(hWUhXjÄ6hchdhejÿhg}rÌ6(hl]hk]hi]hj]ho]Uentries]rÍ6(jX)extra-ghci-libraries; package.cabal fieldjÈ6UNtrÎ6auhqMfhrhhs]ubj)rÏ6}rÐ6(hWXextra-ghci-librariesrÑ6hXjÄ6hchdhejhg}rÒ6(jÔjÕhl]hk]hi]hj]ho]uhqMfhrhhs]rÓ6h|Xextra-ghci-librariesrÔ6…rÕ6}rÖ6(hWUhcNhqNhrhhXjÏ6ubaubj%)r×6}rØ6(hWjžhXjÄ6hchdhej(hg}rÙ6(jÔjÕhl]hk]hi]hj]ho]uhqMfhrhhs]rÚ6h|X: rÛ6…rÜ6}rÝ6(hWUhcNhqNhrhhXj×6ubaubj¤)rÞ6}rß6(hWX token listhXjÄ6hchdhej§hg}rà6(jÔjÕhl]hk]hi]hj]ho]uhqMfhrhhs]rá6h|X token listrâ6…rã6}rä6(hWUhcNhqNhrhhXjÞ6ubaubeubj-)rå6}ræ6(hWUhXj¿6hchdhej0hg}rç6(hi]hj]hk]hl]ho]uhqMfhrhhs]rè6h€)ré6}rê6(hWXgA list of extra libraries to be used instead of 'extra-libraries' when the package is loaded with GHCi.rë6hXjå6hchdheh„hg}rì6(hi]hj]hk]hl]ho]uhqMdhrhhs]rí6h|XkA list of extra libraries to be used instead of ‘extra-libraries’ when the package is loaded with GHCi.rî6…rï6}rð6(hWjë6hcNhqNhrhhXjé6ubaubaubeubjü)rñ6}rò6(hWUhXjw'hchdhejÿhg}ró6(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rô6}rõ6(hWUhXjw'hchdhejhg}rö6(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr÷6j j÷6uhqNhrhhs]rø6(j )rù6}rú6(hWX#extra-bundled-libraries: token listhXjô6hchdhejhg}rû6(hl]rü6X!pkg-field-extra-bundled-librariesrý6ahk]hi]hj]ho]j‰uhqMohrhhs]rþ6(jü)rÿ6}r7(hWUhXjù6hchdhejÿhg}r7(hl]hk]hi]hj]ho]Uentries]r7(jX,extra-bundled-libraries; package.cabal fieldjý6UNtr7auhqMohrhhs]ubj)r7}r7(hWXextra-bundled-librariesr7hXjù6hchdhejhg}r7(jÔjÕhl]hk]hi]hj]ho]uhqMohrhhs]r7h|Xextra-bundled-librariesr 7…r 7}r 7(hWUhcNhqNhrhhXj7ubaubj%)r 7}r 7(hWjžhXjù6hchdhej(hg}r7(jÔjÕhl]hk]hi]hj]ho]uhqMohrhhs]r7h|X: r7…r7}r7(hWUhcNhqNhrhhXj 7ubaubj¤)r7}r7(hWX token listhXjù6hchdhej§hg}r7(jÔjÕhl]hk]hi]hj]ho]uhqMohrhhs]r7h|X token listr7…r7}r7(hWUhcNhqNhrhhXj7ubaubeubj-)r7}r7(hWUhXjô6hchdhej0hg}r7(hi]hj]hk]hl]ho]uhqMohrhhs]r7h€)r7}r7(hWXqA 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 lirbaries 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.hXj7hchdheh„hg}r 7(hi]hj]hk]hl]ho]uhqMihrhhs]r!7(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 lirbaries in the build directory (e.g. via a custom setup). Libraries listed here will be included when r"7…r#7}r$7(hWXA 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 lirbaries in the build directory (e.g. via a custom setup). Libraries listed here will be included when hcNhqNhrhhXj7ubhâ)r%7}r&7(hWX``copy``hg}r'7(hi]hj]hk]hl]ho]uhXj7hs]r(7h|Xcopyr)7…r*7}r+7(hWUhXj%7ubahehêubh|X#-ing packages and be listed in the r,7…r-7}r.7(hWX#-ing packages and be listed in the hcNhqNhrhhXj7ubhâ)r/7}r07(hWX``hs-libraries``hg}r17(hi]hj]hk]hl]ho]uhXj7hs]r27h|X hs-librariesr37…r47}r57(hWUhXj/7ubahehêubh|X of the package configuration.r67…r77}r87(hWX of the package configuration.hcNhqNhrhhXj7ubeubaubeubjü)r97}r:7(hWUhXjw'hchdhejÿhg}r;7(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r<7}r=7(hWUhXjw'hchdhejhg}r>7(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr?7j j?7uhqNhrhhs]r@7(j )rA7}rB7(hWXextra-lib-dirs: directory listhXj<7hchdhejhg}rC7(hl]rD7Xpkg-field-extra-lib-dirsrE7ahk]hi]hj]ho]j‰uhqMshrhhs]rF7(jü)rG7}rH7(hWUhXjA7hchdhejÿhg}rI7(hl]hk]hi]hj]ho]Uentries]rJ7(jX#extra-lib-dirs; package.cabal fieldjE7UNtrK7auhqMshrhhs]ubj)rL7}rM7(hWXextra-lib-dirsrN7hXjA7hchdhejhg}rO7(jÔjÕhl]hk]hi]hj]ho]uhqMshrhhs]rP7h|Xextra-lib-dirsrQ7…rR7}rS7(hWUhcNhqNhrhhXjL7ubaubj%)rT7}rU7(hWjžhXjA7hchdhej(hg}rV7(jÔjÕhl]hk]hi]hj]ho]uhqMshrhhs]rW7h|X: rX7…rY7}rZ7(hWUhcNhqNhrhhXjT7ubaubj¤)r[7}r\7(hWXdirectory listhXjA7hchdhej§hg}r]7(jÔjÕhl]hk]hi]hj]ho]uhqMshrhhs]r^7h|Xdirectory listr_7…r`7}ra7(hWUhcNhqNhrhhXj[7ubaubeubj-)rb7}rc7(hWUhXj<7hchdhej0hg}rd7(hi]hj]hk]hl]ho]uhqMshrhhs]re7h€)rf7}rg7(hWX.A list of directories to search for libraries.rh7hXjb7hchdheh„hg}ri7(hi]hj]hk]hl]ho]uhqMrhrhhs]rj7h|X.A list of directories to search for libraries.rk7…rl7}rm7(hWjh7hcNhqNhrhhXjf7ubaubaubeubjü)rn7}ro7(hWUhXjw'hchdhejÿhg}rp7(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rq7}rr7(hWUhXjw'hchdhejhg}rs7(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrt7j jt7uhqNhrhhs]ru7(j )rv7}rw7(hWXcc-options: token listhXjq7hchdhejhg}rx7(hl]ry7Xpkg-field-cc-optionsrz7ahk]hi]hj]ho]j‰uhqMyhrhhs]r{7(jü)r|7}r}7(hWUhXjv7hchdhejÿhg}r~7(hl]hk]hi]hj]ho]Uentries]r7(jXcc-options; package.cabal fieldjz7UNtr€7auhqMyhrhhs]ubj)r7}r‚7(hWX cc-optionsrƒ7hXjv7hchdhejhg}r„7(jÔjÕhl]hk]hi]hj]ho]uhqMyhrhhs]r…7h|X cc-optionsr†7…r‡7}rˆ7(hWUhcNhqNhrhhXj7ubaubj%)r‰7}rŠ7(hWjžhXjv7hchdhej(hg}r‹7(jÔjÕhl]hk]hi]hj]ho]uhqMyhrhhs]rŒ7h|X: r7…rŽ7}r7(hWUhcNhqNhrhhXj‰7ubaubj¤)r7}r‘7(hWX token listhXjv7hchdhej§hg}r’7(jÔjÕhl]hk]hi]hj]ho]uhqMyhrhhs]r“7h|X token listr”7…r•7}r–7(hWUhcNhqNhrhhXj7ubaubeubj-)r—7}r˜7(hWUhXjq7hchdhej0hg}r™7(hi]hj]hk]hl]ho]uhqMyhrhhs]rš7h€)r›7}rœ7(hWXÇ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`_.hXj—7hchdheh„hg}r7(hi]hj]hk]hl]ho]uhqMvhrhhs]rž7(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 rŸ7…r 7}r¡7(hWX¨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 hcNhqNhrhhXj›7ubjB)r¢7}r£7(hWX`system-dependent parameters`_jEKhXj›7hejFhg}r¤7(UnameXsystem-dependent parametershl]hk]hi]hj]ho]jHj“uhs]r¥7h|Xsystem-dependent parametersr¦7…r§7}r¨7(hWUhXj¢7ubaubh|X.…r©7}rª7(hWX.hcNhqNhrhhXj›7ubeubaubeubjü)r«7}r¬7(hWUhXjw'hchdhejÿhg}r­7(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r®7}r¯7(hWUhXjw'hchdhejhg}r°7(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr±7j j±7uhqNhrhhs]r²7(j )r³7}r´7(hWXcpp-options: token listhXj®7hchdhejhg}rµ7(hl]r¶7Xpkg-field-cpp-optionsr·7ahk]hi]hj]ho]j‰uhqMhrhhs]r¸7(jü)r¹7}rº7(hWUhXj³7hchdhejÿhg}r»7(hl]hk]hi]hj]ho]Uentries]r¼7(jX cpp-options; package.cabal fieldj·7UNtr½7auhqMhrhhs]ubj)r¾7}r¿7(hWX cpp-optionsrÀ7hXj³7hchdhejhg}rÁ7(jÔjÕhl]hk]hi]hj]ho]uhqMhrhhs]rÂ7h|X cpp-optionsrÃ7…rÄ7}rÅ7(hWUhcNhqNhrhhXj¾7ubaubj%)rÆ7}rÇ7(hWjžhXj³7hchdhej(hg}rÈ7(jÔjÕhl]hk]hi]hj]ho]uhqMhrhhs]rÉ7h|X: rÊ7…rË7}rÌ7(hWUhcNhqNhrhhXjÆ7ubaubj¤)rÍ7}rÎ7(hWX token listhXj³7hchdhej§hg}rÏ7(jÔjÕhl]hk]hi]hj]ho]uhqMhrhhs]rÐ7h|X token listrÑ7…rÒ7}rÓ7(hWUhcNhqNhrhhXjÍ7ubaubeubj-)rÔ7}rÕ7(hWUhXj®7hchdhej0hg}rÖ7(hi]hj]hk]hl]ho]uhqMhrhhs]r×7h€)rØ7}rÙ7(hWXÁ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.rÚ7hXjÔ7hchdheh„hg}rÛ7(hi]hj]hk]hl]ho]uhqM|hrhhs]rÜ7h|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.rÝ7…rÞ7}rß7(hWjÚ7hcNhqNhrhhXjØ7ubaubaubeubjü)rà7}rá7(hWUhXjw'hchdhejÿhg}râ7(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rã7}rä7(hWUhXjw'hchdhejhg}rå7(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldræ7j jæ7uhqNhrhhs]rç7(j )rè7}ré7(hWXcxx-options: token listhXjã7hchdhejhg}rê7(hl]rë7Xpkg-field-cxx-optionsrì7ahk]hi]hj]ho]j‰uhqM‹hrhhs]rí7(jü)rî7}rï7(hWUhXjè7hchdhejÿhg}rð7(hl]hk]hi]hj]ho]Uentries]rñ7(jX cxx-options; package.cabal fieldjì7UNtrò7auhqM‹hrhhs]ubj)ró7}rô7(hWX cxx-optionsrõ7hXjè7hchdhejhg}rö7(jÔjÕhl]hk]hi]hj]ho]uhqM‹hrhhs]r÷7h|X cxx-optionsrø7…rù7}rú7(hWUhcNhqNhrhhXjó7ubaubj%)rû7}rü7(hWjžhXjè7hchdhej(hg}rý7(jÔjÕhl]hk]hi]hj]ho]uhqM‹hrhhs]rþ7h|X: rÿ7…r8}r8(hWUhcNhqNhrhhXjû7ubaubj¤)r8}r8(hWX token listhXjè7hchdhej§hg}r8(jÔjÕhl]hk]hi]hj]ho]uhqM‹hrhhs]r8h|X token listr8…r8}r8(hWUhcNhqNhrhhXj8ubaubeubj-)r 8}r 8(hWUhXjã7hchdhej0hg}r 8(hi]hj]hk]hl]ho]uhqM‹hrhhs]r 8h€)r 8}r8(hWX0Command-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.hXj 8hchdheh„hg}r8(hi]hj]hk]hl]ho]uhqM‚hrhhs]r8(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 r8…r8}r8(hWX¯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 hcNhqNhrhhXj 8ubjn)r8}r8(hWX:pkg-field:`cxx-sources`r8hXj 8hchdhejrhg}r8(UreftypeX pkg-fieldjtˆjuX cxx-sourcesU refdomainXcabalr8hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqM‚hs]r8hâ)r8}r8(hWj8hg}r8(hi]hj]r8(jj8Xcabal-pkg-fieldr8ehk]hl]ho]uhXj8hs]r8h|X cxx-sourcesr 8…r!8}r"8(hWUhXj8ubahehêubaubh|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 r#8…r$8}r%8(hWX¨ 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 hcNhqNhrhhXj 8ubjn)r&8}r'8(hWX:pkg-field:`c-sources`r(8hXj 8hchdhejrhg}r)8(UreftypeX pkg-fieldjtˆjuX c-sourcesU refdomainXcabalr*8hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqM‚hs]r+8hâ)r,8}r-8(hWj(8hg}r.8(hi]hj]r/8(jj*8Xcabal-pkg-fieldr08ehk]hl]ho]uhXj&8hs]r18h|X c-sourcesr28…r38}r48(hWUhXj,8ubahehêubaubh|X and r58…r68}r78(hWX and hcNhqNhrhhXj 8ubjn)r88}r98(hWX:pkg-field:`cxx-sources`r:8hXj 8hchdhejrhg}r;8(UreftypeX pkg-fieldjtˆjuX cxx-sourcesU refdomainXcabalr<8hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqM‚hs]r=8hâ)r>8}r?8(hWj:8hg}r@8(hi]hj]rA8(jj<8Xcabal-pkg-fieldrB8ehk]hl]ho]uhXj88hs]rC8h|X cxx-sourcesrD8…rE8}rF8(hWUhXj>8ubahehêubaubh|XN fields respectively, and providing different command-line arguments with the rG8…rH8}rI8(hWXN fields respectively, and providing different command-line arguments with the hcNhqNhrhhXj 8ubjn)rJ8}rK8(hWX:pkg-field:`cc-options`rL8hXj 8hchdhejrhg}rM8(UreftypeX pkg-fieldjtˆjuX cc-optionsU refdomainXcabalrN8hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqM‚hs]rO8hâ)rP8}rQ8(hWjL8hg}rR8(hi]hj]rS8(jjN8Xcabal-pkg-fieldrT8ehk]hl]ho]uhXjJ8hs]rU8h|X cc-optionsrV8…rW8}rX8(hWUhXjP8ubahehêubaubh|X and the rY8…rZ8}r[8(hWX and the hcNhqNhrhhXj 8ubjn)r\8}r]8(hWX:pkg-field:`cxx-options`r^8hXj 8hchdhejrhg}r_8(UreftypeX pkg-fieldjtˆjuX cxx-optionsU refdomainXcabalr`8hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqM‚hs]ra8hâ)rb8}rc8(hWj^8hg}rd8(hi]hj]re8(jj`8Xcabal-pkg-fieldrf8ehk]hl]ho]uhXj\8hs]rg8h|X cxx-optionsrh8…ri8}rj8(hWUhXjb8ubahehêubaubh|X fields.rk8…rl8}rm8(hWX fields.hcNhqNhrhhXj 8ubeubaubeubjü)rn8}ro8(hWUhXjw'hchdhejÿhg}rp8(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rq8}rr8(hWUhXjw'hchdhejhg}rs8(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrt8j jt8uhqNhrhhs]ru8(j )rv8}rw8(hWXld-options: token listhXjq8hchdhejhg}rx8(hl]ry8Xpkg-field-ld-optionsrz8ahk]hi]hj]ho]j‰uhqM‘hrhhs]r{8(jü)r|8}r}8(hWUhXjv8hchdhejÿhg}r~8(hl]hk]hi]hj]ho]Uentries]r8(jXld-options; package.cabal fieldjz8UNtr€8auhqM‘hrhhs]ubj)r8}r‚8(hWX ld-optionsrƒ8hXjv8hchdhejhg}r„8(jÔjÕhl]hk]hi]hj]ho]uhqM‘hrhhs]r…8h|X ld-optionsr†8…r‡8}rˆ8(hWUhcNhqNhrhhXj8ubaubj%)r‰8}rŠ8(hWjžhXjv8hchdhej(hg}r‹8(jÔjÕhl]hk]hi]hj]ho]uhqM‘hrhhs]rŒ8h|X: r8…rŽ8}r8(hWUhcNhqNhrhhXj‰8ubaubj¤)r8}r‘8(hWX token listhXjv8hchdhej§hg}r’8(jÔjÕhl]hk]hi]hj]ho]uhqM‘hrhhs]r“8h|X token listr”8…r•8}r–8(hWUhcNhqNhrhhXj8ubaubeubj-)r—8}r˜8(hWUhXjq8hchdhej0hg}r™8(hi]hj]hk]hl]ho]uhqM‘hrhhs]rš8h€)r›8}rœ8(hWXÃ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`_.hXj—8hchdheh„hg}r8(hi]hj]hk]hl]ho]uhqMŽhrhhs]rž8(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 rŸ8…r 8}r¡8(hWX¤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 hcNhqNhrhhXj›8ubjB)r¢8}r£8(hWX`system-dependent parameters`_jEKhXj›8hejFhg}r¤8(UnameXsystem-dependent parametershl]hk]hi]hj]ho]jHj“uhs]r¥8h|Xsystem-dependent parametersr¦8…r§8}r¨8(hWUhXj¢8ubaubh|X.…r©8}rª8(hWX.hcNhqNhrhhXj›8ubeubaubeubjü)r«8}r¬8(hWUhXjw'hchdhejÿhg}r­8(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r®8}r¯8(hWUhXjw'hchdhejhg}r°8(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr±8j j±8uhqNhrhhs]r²8(j )r³8}r´8(hWXpkgconfig-depends: package listhXj®8hchdhejhg}rµ8(hl]r¶8Xpkg-field-pkgconfig-dependsr·8ahk]hi]hj]ho]j‰uhqM¡hrhhs]r¸8(jü)r¹8}rº8(hWUhXj³8hchdhejÿhg}r»8(hl]hk]hi]hj]ho]Uentries]r¼8(jX&pkgconfig-depends; package.cabal fieldj·8UNtr½8auhqM¡hrhhs]ubj)r¾8}r¿8(hWXpkgconfig-dependsrÀ8hXj³8hchdhejhg}rÁ8(jÔjÕhl]hk]hi]hj]ho]uhqM¡hrhhs]rÂ8h|Xpkgconfig-dependsrÃ8…rÄ8}rÅ8(hWUhcNhqNhrhhXj¾8ubaubj%)rÆ8}rÇ8(hWjžhXj³8hchdhej(hg}rÈ8(jÔjÕhl]hk]hi]hj]ho]uhqM¡hrhhs]rÉ8h|X: rÊ8…rË8}rÌ8(hWUhcNhqNhrhhXjÆ8ubaubj¤)rÍ8}rÎ8(hWX package listhXj³8hchdhej§hg}rÏ8(jÔjÕhl]hk]hi]hj]ho]uhqM¡hrhhs]rÐ8h|X package listrÑ8…rÒ8}rÓ8(hWUhcNhqNhrhhXjÍ8ubaubeubj-)rÔ8}rÕ8(hWUhXj®8hchdhej0hg}rÖ8(hi]hj]hk]hl]ho]uhqM¡hrhhs]r×8(h€)rØ8}rÙ8(hWX´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.hXjÔ8hchdheh„hg}rÚ8(hi]hj]hk]hl]ho]uhqM”hrhhs]rÛ8(h|X A list of rÜ8…rÝ8}rÞ8(hWX A list of hcNhqNhrhhXjØ8ubjB)rß8}rà8(hWXE`pkg-config `__hg}rá8(UnameX pkg-configjX4http://www.freedesktop.org/wiki/Software/pkg-config/hl]hk]hi]hj]ho]uhXjØ8hs]râ8h|X pkg-configrã8…rä8}rå8(hWUhXjß8ubahejFubh|XS packages, needed to build this package. They can be annotated with versions, e.g. ræ8…rç8}rè8(hWXS packages, needed to build this package. They can be annotated with versions, e.g. hcNhqNhrhhXjØ8ubhâ)ré8}rê8(hWX"``gtk+-2.0 >= 2.10, cairo >= 1.0``hg}rë8(hi]hj]hk]hl]ho]uhXjØ8hs]rì8h|Xgtk+-2.0 >= 2.10, cairo >= 1.0rí8…rî8}rï8(hWUhXjé8ubahehêubh|X]. If no version constraint is specified, any version is assumed to be acceptable. Cabal uses rð8…rñ8}rò8(hWX]. If no version constraint is specified, any version is assumed to be acceptable. Cabal uses hcNhqNhrhhXjØ8ubhâ)ró8}rô8(hWX``pkg-config``hg}rõ8(hi]hj]hk]hl]ho]uhXjØ8hs]rö8h|X pkg-configr÷8…rø8}rù8(hWUhXjó8ubahehêubh|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.rú8…rû8}rü8(hWX… to find if the packages are available on the system and to find the extra compilation and linker options needed to use the packages.hcNhqNhrhhXjØ8ubeubh€)rý8}rþ8(hWXàIf you need to bind to a C library that supports ``pkg-config`` (use ``pkg-config --list-all`` to find out if it is supported) then it is much preferable to use this field rather than hard code options into the other fields.hXjÔ8hchdheh„hg}rÿ8(hi]hj]hk]hl]ho]uhqMhrhhs]r9(h|X1If you need to bind to a C library that supports r9…r9}r9(hWX1If you need to bind to a C library that supports hcNhqNhrhhXjý8ubhâ)r9}r9(hWX``pkg-config``hg}r9(hi]hj]hk]hl]ho]uhXjý8hs]r9h|X pkg-configr9…r 9}r 9(hWUhXj9ubahehêubh|X (use r 9…r 9}r 9(hWX (use hcNhqNhrhhXjý8ubhâ)r9}r9(hWX``pkg-config --list-all``hg}r9(hi]hj]hk]hl]ho]uhXjý8hs]r9h|Xpkg-config --list-allr9…r9}r9(hWUhXj9ubahehêubh|X‚ to find out if it is supported) then it is much preferable to use this field rather than hard code options into the other fields.r9…r9}r9(hWX‚ to find out if it is supported) then it is much preferable to use this field rather than hard code options into the other fields.hcNhqNhrhhXjý8ubeubeubeubjü)r9}r9(hWUhXjw'hchdhejÿhg}r9(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r9}r9(hWUhXjw'hchdhejhg}r9(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr9j j9uhqNhrhhs]r9(j )r 9}r!9(hWXframeworks: token listhXj9hchdhejhg}r"9(hl]r#9Xpkg-field-frameworksr$9ahk]hi]hj]ho]j‰uhqM§hrhhs]r%9(jü)r&9}r'9(hWUhXj 9hchdhejÿhg}r(9(hl]hk]hi]hj]ho]Uentries]r)9(jXframeworks; package.cabal fieldj$9UNtr*9auhqM§hrhhs]ubj)r+9}r,9(hWX frameworksr-9hXj 9hchdhejhg}r.9(jÔjÕhl]hk]hi]hj]ho]uhqM§hrhhs]r/9h|X frameworksr09…r19}r29(hWUhcNhqNhrhhXj+9ubaubj%)r39}r49(hWjžhXj 9hchdhej(hg}r59(jÔjÕhl]hk]hi]hj]ho]uhqM§hrhhs]r69h|X: r79…r89}r99(hWUhcNhqNhrhhXj39ubaubj¤)r:9}r;9(hWX token listhXj 9hchdhej§hg}r<9(jÔjÕhl]hk]hi]hj]ho]uhqM§hrhhs]r=9h|X token listr>9…r?9}r@9(hWUhcNhqNhrhhXj:9ubaubeubj-)rA9}rB9(hWUhXj9hchdhej0hg}rC9(hi]hj]hk]hl]ho]uhqM§hrhhs]rD9h€)rE9}rF9(hWX¥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.rG9hXjA9hchdheh„hg}rH9(hi]hj]hk]hl]ho]uhqM¤hrhhs]rI9h|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.rJ9…rK9}rL9(hWjG9hcNhqNhrhhXjE9ubaubaubeubjü)rM9}rN9(hWUhXjw'hchdhejÿhg}rO9(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rP9}rQ9(hWUhXjw'hchdhejhg}rR9(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrS9j jS9uhqNhrhhs]rT9(j )rU9}rV9(hWX%extra-frameworks-dirs: directory listhXjP9hchdhejhg}rW9(hl]rX9Xpkg-field-extra-frameworks-dirsrY9ahk]hi]hj]ho]j‰uhqM¬hrhhs]rZ9(jü)r[9}r\9(hWUhXjU9hchdhejÿhg}r]9(hl]hk]hi]hj]ho]Uentries]r^9(jX*extra-frameworks-dirs; package.cabal fieldjY9UNtr_9auhqM¬hrhhs]ubj)r`9}ra9(hWXextra-frameworks-dirsrb9hXjU9hchdhejhg}rc9(jÔjÕhl]hk]hi]hj]ho]uhqM¬hrhhs]rd9h|Xextra-frameworks-dirsre9…rf9}rg9(hWUhcNhqNhrhhXj`9ubaubj%)rh9}ri9(hWjžhXjU9hchdhej(hg}rj9(jÔjÕhl]hk]hi]hj]ho]uhqM¬hrhhs]rk9h|X: rl9…rm9}rn9(hWUhcNhqNhrhhXjh9ubaubj¤)ro9}rp9(hWXdirectory listhXjU9hchdhej§hg}rq9(jÔjÕhl]hk]hi]hj]ho]uhqM¬hrhhs]rr9h|Xdirectory listrs9…rt9}ru9(hWUhcNhqNhrhhXjo9ubaubeubj-)rv9}rw9(hWUhXjP9hchdhej0hg}rx9(hi]hj]hk]hl]ho]uhqM¬hrhhs]ry9h€)rz9}r{9(hWXpOn Darwin/MacOS X, a list of directories to search for frameworks. This entry is ignored on all other platforms.r|9hXjv9hchdheh„hg}r}9(hi]hj]hk]hl]ho]uhqMªhrhhs]r~9h|XpOn Darwin/MacOS X, a list of directories to search for frameworks. This entry is ignored on all other platforms.r9…r€9}r9(hWj|9hcNhqNhrhhXjz9ubaubaubeubeubhY)r‚9}rƒ9(hWUh\KhXh_hchdhehfhg}r„9(hi]hj]hk]hl]r…9jÎaho]r†9hOauhqM®hrhhs]r‡9(hu)rˆ9}r‰9(hWXConfigurationsrŠ9hXj‚9hchdhehyhg}r‹9(hi]hj]hk]hl]ho]uhqM®hrhhs]rŒ9h|XConfigurationsr9…rŽ9}r9(hWjŠ9hcNhqNhrhhXjˆ9ubaubh€)r9}r‘9(hWXVLibrary 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:r’9hXj‚9hchdheh„hg}r“9(hi]hj]hk]hl]ho]uhqM°hrhhs]r”9h|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:r•9…r–9}r—9(hWj’9hcNhqNhrhhXj9ubaubhY)r˜9}r™9(hWUh\KhXj‚9hchdhehfhg}rš9(hi]r›9jIahj]hk]hl]rœ9Uid2r9aho]uhqM·hrhhs]rž9(hu)rŸ9}r 9(hWX?Example: A package containing a library and executable programsr¡9hXj˜9hchdhehyhg}r¢9(hi]hj]hk]hl]ho]uhqM·hrhhs]r£9h|X?Example: A package containing a library and executable programsr¤9…r¥9}r¦9(hWj¡9hcNhqNhrhhXjŸ9ubaubjÏ)r§9}r¨9(hWX.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: -DDEBUGhXj˜9hchdhejÒhg}r©9(jÔjÕhl]hk]hi]hj]ho]uhqM»hrhhs]rª9h|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: -DDEBUGr«9…r¬9}r­9(hWUhXj§9ubaubeubhY)r®9}r¯9(hWUhXj‚9hchdhehfhg}r°9(hi]hj]hk]hl]r±9Ulayoutr²9aho]r³9h=auhqMöhrhhs]r´9(hu)rµ9}r¶9(hWXLayoutr·9hXj®9hchdhehyhg}r¸9(hi]hj]hk]hl]ho]uhqMöhrhhs]r¹9h|XLayoutrº9…r»9}r¼9(hWj·9hcNhqNhrhhXjµ9ubaubh€)r½9}r¾9(hWX#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¿9hXj®9hchdheh„hg}rÀ9(hi]hj]hk]hl]ho]uhqMøhrhhs]rÁ9h|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Â9…rÃ9}rÄ9(hWj¿9hcNhqNhrhhXj½9ubaubh€)rÅ9}rÆ9(hWX 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:hXj®9hchdheh„hg}rÇ9(hi]hj]hk]hl]ho]uhqMþhrhhs]rÈ9(h|XCAs an alternative to using layout you can also use explicit braces rÉ9…rÊ9}rË9(hWXCAs an alternative to using layout you can also use explicit braces hcNhqNhrhhXjÅ9ubhâ)rÌ9}rÍ9(hWX``{}``hg}rÎ9(hi]hj]hk]hl]ho]uhXjÅ9hs]rÏ9h|X{}rÐ9…rÑ9}rÒ9(hWUhXjÌ9ubahehêubh|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:rÓ9…rÔ9}rÕ9(hWXÂ. 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:hcNhqNhrhhXjÅ9ubeubeubhY)rÖ9}r×9(hWUhXj‚9hchdhehfhg}rØ9(hi]hj]hk]hl]rÙ9U@example-using-explicit-braces-rather-than-indentation-for-layoutrÚ9aho]rÛ9h7auhqM hrhhs]rÜ9(hu)rÝ9}rÞ9(hWXAExample: Using explicit braces rather than indentation for layoutrß9hXjÖ9hchdhehyhg}rà9(hi]hj]hk]hl]ho]uhqM hrhhs]rá9h|XAExample: Using explicit braces rather than indentation for layoutrâ9…rã9}rä9(hWjß9hcNhqNhrhhXjÝ9ubaubjÏ)rå9}ræ9(hWXÿ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" } } }hXjÖ9hchdhejÒhg}rç9(jÔjÕhl]hk]hi]hj]ho]uhqM hrhhs]rè9h|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" } } }ré9…rê9}rë9(hWUhXjå9ubaubeubhY)rì9}rí9(hWUhXj‚9hchdhehfhg}rî9(hi]hj]hk]hl]rï9Uconfiguration-flagsrð9aho]rñ9h)auhqM& hrhhs]rò9(hu)ró9}rô9(hWXConfiguration Flagsrõ9hXjì9hchdhehyhg}rö9(hi]hj]hk]hl]ho]uhqM& hrhhs]r÷9h|XConfiguration Flagsrø9…rù9}rú9(hWjõ9hcNhqNhrhhXjó9ubaubjü)rû9}rü9(hWUhXjì9hcNhejÿhg}rý9(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rþ9}rÿ9(hWUhXjì9hcNhejhg}r:(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-sectionr:j j:uhqNhrhhs]r:(j )r:}r:(hWX flag namehXjþ9hchdhejhg}r:(hl]r:Xpkg-section-flag-flagr:ahk]hi]hj]ho]j‰uhqNhrhhs]r:(jü)r :}r :(hWUhXj:hchdhejÿhg}r :(hl]hk]hi]hj]ho]Uentries]r :(jX flag:flag; package.cabal sectionj:UNtr :auhqNhrhhs]ubj)r:}r:(hWXflagr:hXj:hchdhejhg}r:(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]r:h|Xflagr:…r:}r:(hWUhcNhqNhrhhXj:ubaubj%)r:}r:(hWU hXj:hchdhej(hg}r:(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]r:h|X …r:}r:(hWUhcNhqNhrhhXj:ubaubj¤)r:}r:(hWXnamehXj:hchdhej§hg}r:(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]r:h|Xnamer :…r!:}r":(hWUhcNhqNhrhhXj:ubaubeubj-)r#:}r$:(hWUhXjþ9hchdhej0hg}r%:(hi]hj]hk]hl]ho]uhqNhrhhs]r&:(h€)r':}r(:(hWXHFlag section declares a flag which can be used in `conditional blocks`_.hXj#:hchdheh„hg}r):(hi]hj]hk]hl]ho]uhqM+ hrhhs]r*:(h|X2Flag section declares a flag which can be used in r+:…r,:}r-:(hWX2Flag section declares a flag which can be used in hcNhqNhrhhXj':ubjB)r.:}r/:(hWX`conditional blocks`_jEKhXj':hejFhg}r0:(UnameXconditional blockshl]hk]hi]hj]ho]jHUconditional-blocksr1:uhs]r2:h|Xconditional blocksr3:…r4:}r5:(hWUhXj.:ubaubh|X.…r6:}r7:(hWX.hcNhqNhrhhXj':ubeubh€)r8:}r9:(hWXxFlag names are case-insensitive and must match ``[[:alnum:]_][[:alnum:]_-]*`` regular expression, or expressed as ABNF_:hXj#:hchdheh„hg}r::(hi]hj]hk]hl]ho]uhqM- hrhhs]r;:(h|X/Flag names are case-insensitive and must match r<:…r=:}r>:(hWX/Flag names are case-insensitive and must match hcNhqNhrhhXj8:ubhâ)r?:}r@:(hWX``[[:alnum:]_][[:alnum:]_-]*``hg}rA:(hi]hj]hk]hl]ho]uhXj8:hs]rB:h|X[[:alnum:]_][[:alnum:]_-]*rC:…rD:}rE:(hWUhXj?:ubahehêubh|X% regular expression, or expressed as rF:…rG:}rH:(hWX% regular expression, or expressed as hcNhqNhrhhXj8:ubjB)rI:}rJ:(hWXABNF_jEKhXj8:hejFhg}rK:(UnameXABNFjjEhl]hk]hi]hj]ho]uhs]rL:h|XABNFrM:…rN:}rO:(hWUhXjI:ubaubh|X:…rP:}rQ:(hWX:hcNhqNhrhhXj8:ubeubjÏ)rR:}rS:(hWX~flag-name = (UALNUM / "_") *(UALNUM / "_" / "-") UALNUM = UALPHA / DIGIT UALPHA = ... ; set of alphabetic Unicode code-pointshXj#:hchdhejÒhg}rT:(j‰jXabnfjÔjÕhl]hk]hi]j}hj]ho]uhqM0 hrhhs]rU:h|X~flag-name = (UALNUM / "_") *(UALNUM / "_" / "-") UALNUM = UALPHA / DIGIT UALPHA = ... ; set of alphabetic Unicode code-pointsrV:…rW:}rX:(hWUhXjR:ubaubhî)rY:}rZ:(hWXHHackage accepts ASCII-only flags, ``[a-zA-Z0-9_][a-zA-Z0-9_-]*`` regexp.r[:hXj#:hchdhehñhg}r\:(hi]hj]hk]hl]ho]uhqNhrhhs]r]:h€)r^:}r_:(hWj[:hXjY:hchdheh„hg}r`:(hi]hj]hk]hl]ho]uhqM9 hs]ra:(h|X"Hackage accepts ASCII-only flags, rb:…rc:}rd:(hWX"Hackage accepts ASCII-only flags, hXj^:ubhâ)re:}rf:(hWX``[a-zA-Z0-9_][a-zA-Z0-9_-]*``hg}rg:(hi]hj]hk]hl]ho]uhXj^:hs]rh:h|X[a-zA-Z0-9_][a-zA-Z0-9_-]*ri:…rj:}rk:(hWUhXje:ubahehêubh|X regexp.rl:…rm:}rn:(hWX regexp.hXj^:ubeubaubeubeubjü)ro:}rp:(hWUhXjì9hchdhejÿhg}rq:(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rr:}rs:(hWUhXjì9hchdhejhg}rt:(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldru:j ju:uhqNhrhhs]rv:(j )rw:}rx:(hWXdescription: freeformhXjr:hchdhejhg}ry:(hl]rz:Xpkg-field-flag-descriptionr{:ahk]hi]hj]ho]j‰uhqM> hrhhs]r|:(jü)r}:}r~:(hWUhXjw:hchdhejÿhg}r:(hl]hk]hi]hj]ho]Uentries]r€:(jX%flag:description; package.cabal fieldj{:UNtr:auhqM> hrhhs]ubj)r‚:}rƒ:(hWX descriptionr„:hXjw:hchdhejhg}r…:(jÔjÕhl]hk]hi]hj]ho]uhqM> hrhhs]r†:h|X descriptionr‡:…rˆ:}r‰:(hWUhcNhqNhrhhXj‚:ubaubj%)rŠ:}r‹:(hWjžhXjw:hchdhej(hg}rŒ:(jÔjÕhl]hk]hi]hj]ho]uhqM> hrhhs]r:h|X: rŽ:…r:}r:(hWUhcNhqNhrhhXjŠ:ubaubj¤)r‘:}r’:(hWXfreeformhXjw:hchdhej§hg}r“:(jÔjÕhl]hk]hi]hj]ho]uhqM> hrhhs]r”:h|Xfreeformr•:…r–:}r—:(hWUhcNhqNhrhhXj‘:ubaubeubj-)r˜:}r™:(hWUhXjr:hchdhej0hg}rš:(hi]hj]hk]hl]ho]uhqM> hrhhs]r›:h€)rœ:}r:(hWXThe description of this flag.rž:hXj˜:hchdheh„hg}rŸ:(hi]hj]hk]hl]ho]uhqM= hrhhs]r :h|XThe description of this flag.r¡:…r¢:}r£:(hWjž:hcNhqNhrhhXjœ:ubaubaubeubjü)r¤:}r¥:(hWUhXjì9hcNhejÿhg}r¦:(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r§:}r¨:(hWUhXjì9hcNhejhg}r©:(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrª:j jª:uhqNhrhhs]r«:(j )r¬:}r­:(hWXdefault: booleanhXj§:hchdhejhg}r®:(hl]r¯:Xpkg-field-flag-defaultr°:ahk]hi]hj]ho]j‰uhqMN hrhhs]r±:(jü)r²:}r³:(hWUhXj¬:hchdhejÿhg}r´:(hl]hk]hi]hj]ho]Uentries]rµ:(jX!flag:default; package.cabal fieldj°:UNtr¶:auhqMN hrhhs]ubj)r·:}r¸:(hWXdefaultr¹:hXj¬:hchdhejhg}rº:(jÔjÕhl]hk]hi]hj]ho]uhqMN hrhhs]r»:h|Xdefaultr¼:…r½:}r¾:(hWUhcNhqNhrhhXj·:ubaubj%)r¿:}rÀ:(hWjžhXj¬:hchdhej(hg}rÁ:(jÔjÕhl]hk]hi]hj]ho]uhqMN hrhhs]rÂ:h|X: rÃ:…rÄ:}rÅ:(hWUhcNhqNhrhhXj¿:ubaubj¤)rÆ:}rÇ:(hWXbooleanhXj¬:hchdhej§hg}rÈ:(jÔjÕhl]hk]hi]hj]ho]uhqMN hrhhs]rÉ:h|XbooleanrÊ:…rË:}rÌ:(hWUhcNhqNhrhhXjÆ:ubaubeubj-)rÍ:}rÎ:(hWUhXj§:hchdhej0hg}rÏ:(hi]hj]hk]hl]ho]uhqMN hrhhs]rÐ:(j3)rÑ:}rÒ:(hWUhXjÍ:hcNhej6hg}rÓ:(hi]hj]hk]hl]ho]uhqNhrhhs]rÔ:j9)rÕ:}rÖ:(hWUhg}r×:(hi]hj]hk]hl]ho]uhXjÑ:hs]rØ:(j?)rÙ:}rÚ:(hWX Default valuehXjÕ:hchdhejChg}rÛ:(hi]hj]hk]hl]ho]uhqKhs]rÜ:h|X Default valuerÝ:…rÞ:}rß:(hWUhXjÙ:ubaubjI)rà:}rá:(hWUhg}râ:(hi]hj]hk]hl]ho]uhXjÕ:hs]rã:h€)rä:}rå:(hWXTruehg}ræ:(hi]hj]hk]hl]ho]uhXjà:hs]rç:hâ)rè:}ré:(hWX``True``hXjä:hcNhehêhg}rê:(hi]hj]hk]hl]ho]uhqNhrhhs]rë:h|XTruerì:…rí:}rî:(hWUhcNhqNhrhhXjè:ubaubaheh„ubahejVubehej<ubaubh€)rï:}rð:(hWXThe default value of this flag.rñ:hXjÍ:hchdheh„hg}rò:(hi]hj]hk]hl]ho]uhqMC hrhhs]ró:h|XThe default value of this flag.rô:…rõ:}rö:(hWjñ:hcNhqNhrhhXjï:ubaubhî)r÷:}rø:(hWX™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.hXjÍ:hchdhehñhg}rù:(hi]hj]hk]hl]ho]uhqNhrhhs]rú:h€)rû:}rü:(hWX™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.hXj÷:hchdheh„hg}rý:(hi]hj]hk]hl]ho]uhqMG hs]rþ:(h|XThis value may be rÿ:…r;}r;(hWXThis value may be hXjû:ubjB)r;}r;(hWXV`overridden in several ways `__hg}r;(UnameXoverridden in several waysjX5installing-packages.html#controlling-flag-assignmentshl]hk]hi]hj]ho]uhXjû:hs]r;h|Xoverridden in several waysr;…r;}r;(hWUhXj;ubahejFubh|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.r ;…r ;}r ;(hWX1. 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.hXjû:ubeubaubeubeubjü)r ;}r ;(hWUhXjì9hchdhejÿhg}r;(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r;}r;(hWUhXjì9hchdhejhg}r;(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr;j j;uhqNhrhhs]r;(j )r;}r;(hWXmanual: booleanhXj;hchdhejhg}r;(hl]r;Xpkg-field-flag-manualr;ahk]hi]hj]ho]j‰uhqMW hrhhs]r;(jü)r;}r;(hWUhXj;hchdhejÿhg}r;(hl]hk]hi]hj]ho]Uentries]r;(jX flag:manual; package.cabal fieldj;UNtr;auhqMW hrhhs]ubj)r;}r ;(hWXmanualr!;hXj;hchdhejhg}r";(jÔjÕhl]hk]hi]hj]ho]uhqMW hrhhs]r#;h|Xmanualr$;…r%;}r&;(hWUhcNhqNhrhhXj;ubaubj%)r';}r(;(hWjžhXj;hchdhej(hg}r);(jÔjÕhl]hk]hi]hj]ho]uhqMW hrhhs]r*;h|X: r+;…r,;}r-;(hWUhcNhqNhrhhXj';ubaubj¤)r.;}r/;(hWXbooleanhXj;hchdhej§hg}r0;(jÔjÕhl]hk]hi]hj]ho]uhqMW hrhhs]r1;h|Xbooleanr2;…r3;}r4;(hWUhcNhqNhrhhXj.;ubaubeubj-)r5;}r6;(hWUhXj;hchdhej0hg}r7;(hi]hj]hk]hl]ho]uhqMW hrhhs]r8;(j3)r9;}r:;(hWUhXj5;hchdhej6hg}r;;(hi]hj]hk]hl]ho]uhqNhrhhs]r<;j9)r=;}r>;(hWUhg}r?;(hi]hj]hk]hl]ho]uhXj9;hs]r@;(j?)rA;}rB;(hWX Default valuehXj=;hchdhejChg}rC;(hi]hj]hk]hl]ho]uhqKhs]rD;h|X Default valuerE;…rF;}rG;(hWUhXjA;ubaubjI)rH;}rI;(hWUhg}rJ;(hi]hj]hk]hl]ho]uhXj=;hs]rK;h€)rL;}rM;(hWXFalsehg}rN;(hi]hj]hk]hl]ho]uhXjH;hs]rO;hâ)rP;}rQ;(hWX ``False``hXjL;hchdhehêhg}rR;(hi]hj]hk]hl]ho]uhqNhrhhs]rS;h|XFalserT;…rU;}rV;(hWUhcNhqNhrhhXjP;ubaubaheh„ubahejVubehej<ubaubh€)rW;}rX;(hWXBy 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.rY;hXj5;hchdheh„hg}rZ;(hi]hj]hk]hl]ho]uhqMS hrhhs]r[;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\;…r];}r^;(hWjY;hcNhqNhrhhXjW;ubaubeubeubeubeubhY)r_;}r`;(hWUh\KhXh_hchdhehfhg}ra;(hi]hj]hk]hl]rb;j1:aho]rc;hFauhqMY hrhhs]rd;(hu)re;}rf;(hWXConditional Blocksrg;hXj_;hchdhehyhg}rh;(hi]hj]hk]hl]ho]uhqMY hrhhs]ri;h|XConditional Blocksrj;…rk;}rl;(hWjg;hcNhqNhrhhXje;ubaubh€)rm;}rn;(hWX±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 shapero;hXj_;hchdheh„hg}rp;(hi]hj]hk]hl]ho]uhqM[ hrhhs]rq;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 shaperr;…rs;}rt;(hWjo;hcNhqNhrhhXjm;ubaubjÏ)ru;}rv;(hWX5if condition property-descriptions-or-conditionalshXj_;hchdhejÒhg}rw;(jÔjÕhl]hk]hi]hj]ho]uhqMa hrhhs]rx;h|X5if condition property-descriptions-or-conditionalsry;…rz;}r{;(hWUhXju;ubaubh€)r|;}r};(hWXorr~;hXj_;hchdheh„hg}r;(hi]hj]hk]hl]ho]uhqMd hrhhs]r€;h|Xorr;…r‚;}rƒ;(hWj~;hcNhqNhrhhXj|;ubaubjÏ)r„;}r…;(hWXgif condition property-descriptions-or-conditionals else property-descriptions-or-conditionalshXj_;hchdhejÒhg}r†;(jÔjÕhl]hk]hi]hj]ho]uhqMh hrhhs]r‡;h|Xgif condition property-descriptions-or-conditionals else property-descriptions-or-conditionalsrˆ;…r‰;}rŠ;(hWUhXj„;ubaubh€)r‹;}rŒ;(hWXGNote that the ``if`` and the condition have to be all on the same line.r;hXj_;hchdheh„hg}rŽ;(hi]hj]hk]hl]ho]uhqMm hrhhs]r;(h|XNote that the r;…r‘;}r’;(hWXNote that the hcNhqNhrhhXj‹;ubhâ)r“;}r”;(hWX``if``hg}r•;(hi]hj]hk]hl]ho]uhXj‹;hs]r–;h|Xifr—;…r˜;}r™;(hWUhXj“;ubahehêubh|X3 and the condition have to be all on the same line.rš;…r›;}rœ;(hWX3 and the condition have to be all on the same line.hcNhqNhrhhXj‹;ubeubh€)r;}rž;(hWX>Since Cabal 2.2 conditional blocks support ``elif`` construct.rŸ;hXj_;hchdheh„hg}r ;(hi]hj]hk]hl]ho]uhqMo hrhhs]r¡;(h|X+Since Cabal 2.2 conditional blocks support r¢;…r£;}r¤;(hWX+Since Cabal 2.2 conditional blocks support hcNhqNhrhhXj;ubhâ)r¥;}r¦;(hWX``elif``hg}r§;(hi]hj]hk]hl]ho]uhXj;hs]r¨;h|Xelifr©;…rª;}r«;(hWUhXj¥;ubahehêubh|X construct.r¬;…r­;}r®;(hWX construct.hcNhqNhrhhXj;ubeubjÏ)r¯;}r°;(hWX£if condition1 property-descriptions-or-conditionals elif condition2 property-descriptions-or-conditionals else property-descriptions-or-conditionalshXj_;hchdhejÒhg}r±;(jÔjÕhl]hk]hi]hj]ho]uhqMs hrhhs]r²;h|X£if condition1 property-descriptions-or-conditionals elif condition2 property-descriptions-or-conditionals else property-descriptions-or-conditionalsr³;…r´;}rµ;(hWUhXj¯;ubaubhY)r¶;}r·;(hWUhXj_;hchdhehfhg}r¸;(hi]hj]hk]hl]r¹;U conditionsrº;aho]r»;h*auhqM{ hrhhs]r¼;(hu)r½;}r¾;(hWX Conditionsr¿;hXj¶;hchdhehyhg}rÀ;(hi]hj]hk]hl]ho]uhqM{ hrhhs]rÁ;h|X ConditionsrÂ;…rÃ;}rÄ;(hWj¿;hcNhqNhrhhXj½;ubaubh€)rÅ;}rÆ;(hWX¶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)``.hXj¶;hchdheh„hg}rÇ;(hi]hj]hk]hl]ho]uhqM} hrhhs]rÈ;(h|XGConditions can be formed using boolean tests and the boolean operators rÉ;…rÊ;}rË;(hWXGConditions can be formed using boolean tests and the boolean operators hcNhqNhrhhXjÅ;ubhâ)rÌ;}rÍ;(hWX``||``hg}rÎ;(hi]hj]hk]hl]ho]uhXjÅ;hs]rÏ;h|X||rÐ;…rÑ;}rÒ;(hWUhXjÌ;ubahehêubh|X# (disjunction / logical “orâ€), rÓ;…rÔ;}rÕ;(hWX (disjunction / logical "or"), hcNhqNhrhhXjÅ;ubhâ)rÖ;}r×;(hWX``&&``hg}rØ;(hi]hj]hk]hl]ho]uhXjÅ;hs]rÙ;h|X&&rÚ;…rÛ;}rÜ;(hWUhXjÖ;ubahehêubh|X' (conjunction / logical “andâ€), or rÝ;…rÞ;}rß;(hWX# (conjunction / logical "and"), or hcNhqNhrhhXjÅ;ubhâ)rà;}rá;(hWX``!``hg}râ;(hi]hj]hk]hl]ho]uhXjÅ;hs]rã;h|X!…rä;}rå;(hWUhXjà;ubahehêubh|X+ (negation / logical “notâ€). The unary ræ;…rç;}rè;(hWX' (negation / logical "not"). The unary hcNhqNhrhhXjÅ;ubhâ)ré;}rê;(hWX``!``hg}rë;(hi]hj]hk]hl]ho]uhXjÅ;hs]rì;h|X!…rí;}rî;(hWUhXjé;ubahehêubh|X takes highest precedence, rï;…rð;}rñ;(hWX takes highest precedence, hcNhqNhrhhXjÅ;ubhâ)rò;}ró;(hWX``||``hg}rô;(hi]hj]hk]hl]ho]uhXjÅ;hs]rõ;h|X||rö;…r÷;}rø;(hWUhXjò;ubahehêubh|X` takes lowest. Precedence levels may be overridden through the use of parentheses. For example, rù;…rú;}rû;(hWX` takes lowest. Precedence levels may be overridden through the use of parentheses. For example, hcNhqNhrhhXjÅ;ubhâ)rü;}rý;(hWX,``os(darwin) && !arch(i386) || os(freebsd)``hg}rþ;(hi]hj]hk]hl]ho]uhXjÅ;hs]rÿ;h|X(os(darwin) && !arch(i386) || os(freebsd)r<…r<}r<(hWUhXjü;ubahehêubh|X is equivalent to r<…r<}r<(hWX is equivalent to hcNhqNhrhhXjÅ;ubhâ)r<}r<(hWX0``(os(darwin) && !(arch(i386))) || os(freebsd)``hg}r<(hi]hj]hk]hl]ho]uhXjÅ;hs]r <h|X,(os(darwin) && !(arch(i386))) || os(freebsd)r <…r <}r <(hWUhXj<ubahehêubh|X.…r <}r<(hWX.hcNhqNhrhhXjÅ;ubeubh€)r<}r<(hWX,The following tests are currently supported.r<hXj¶;hchdheh„hg}r<(hi]hj]hk]hl]ho]uhqM… hrhhs]r<h|X,The following tests are currently supported.r<…r<}r<(hWj<hcNhqNhrhhXj<ubaubj)r<}r<(hWUhXj¶;hchdhejhg}r<(hi]hj]hk]hl]ho]uhqNhrhhs]r<(j)r<}r<(hWXÒ: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.hXj<hchdhejhg}r<(hi]hj]hk]hl]ho]uhqM hs]r<(j)r<}r <(hWX:samp:`os({name})`r!<hXj<hchdhej#hg}r"<(hi]hj]hk]hl]ho]uhqM hs]r#<hâ)r$<}r%<(hWXos(name)hg}r&<(hl]hk]hi]hj]r'<Xsampr(<aUrolej(<ho]uhXj<hs]r)<(h|Xos(r*<…r+<}r,<(hWXos(hXj$<ubhÂ)r-<}r.<(hWXnamehg}r/<(hi]hj]hk]hl]ho]uhXj$<hs]r0<h|Xnamer1<…r2<}r3<(hWUhXj-<ubahehÊubh|X)…r4<}r5<(hWX)hXj$<ubehehêubaubj6)r6<}r7<(hWUhg}r8<(hi]hj]hk]hl]ho]uhXj<hs]r9<h€)r:<}r;<(hWX¿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.hXj6<hchdheh„hg}r<<(hi]hj]hk]hl]ho]uhqMˆ hs]r=<(h|X)Tests if the current operating system is r><…r?<}r@<(hWX)Tests if the current operating system is hXj:<ubhÂ)rA<}rB<(hWX*name*hg}rC<(hi]hj]hk]hl]ho]uhXj:<hs]rD<h|XnamerE<…rF<}rG<(hWUhXjA<ubahehÊubh|X!. The argument is tested against rH<…rI<}rJ<(hWX!. The argument is tested against hXj:<ubhâ)rK<}rL<(hWX``System.Info.os``hg}rM<(hi]hj]hk]hl]ho]uhXj:<hs]rN<h|XSystem.Info.osrO<…rP<}rQ<(hWUhXjK<ubahehêubh|X} on the target system. There is unfortunately some disagreement between Haskell implementations about the standard values of rR<…rS<}rT<(hWX} on the target system. There is unfortunately some disagreement between Haskell implementations about the standard values of hXj:<ubhâ)rU<}rV<(hWX``System.Info.os``hg}rW<(hi]hj]hk]hl]ho]uhXj:<hs]rX<h|XSystem.Info.osrY<…rZ<}r[<(hWUhXjU<ubahehêubh|X/. Cabal canonicalises it so that in particular r\<…r]<}r^<(hWX/. Cabal canonicalises it so that in particular hXj:<ubhâ)r_<}r`<(hWX``os(windows)``hg}ra<(hi]hj]hk]hl]ho]uhXj:<hs]rb<h|X os(windows)rc<…rd<}re<(hWUhXj_<ubahehêubh|X works on all implementations. If the canonicalised os names match, this test evaluates to true, otherwise false. The match is case-insensitive.rf<…rg<}rh<(hWX works on all implementations. If the canonicalised os names match, this test evaluates to true, otherwise false. The match is case-insensitive.hXj:<ubeubahejPubeubj)ri<}rj<(hWXò:samp:`arch({name})` Tests if the current architecture is *name*. The argument is matched against ``System.Info.arch`` on the target system. If the arch names match, this test evaluates to true, otherwise false. The match is case-insensitive.hXj<hchdhejhg}rk<(hi]hj]hk]hl]ho]uhqM’ hrhhs]rl<(j)rm<}rn<(hWX:samp:`arch({name})`ro<hXji<hchdhej#hg}rp<(hi]hj]hk]hl]ho]uhqM’ hs]rq<hâ)rr<}rs<(hWX arch(name)hg}rt<(hl]hk]hi]hj]ru<Xsamprv<aUrolejv<ho]uhXjm<hs]rw<(h|Xarch(rx<…ry<}rz<(hWXarch(hXjr<ubhÂ)r{<}r|<(hWXnamehg}r}<(hi]hj]hk]hl]ho]uhXjr<hs]r~<h|Xnamer<…r€<}r<(hWUhXj{<ubahehÊubh|X)…r‚<}rƒ<(hWX)hXjr<ubehehêubaubj6)r„<}r…<(hWUhg}r†<(hi]hj]hk]hl]ho]uhXji<hs]r‡<h€)rˆ<}r‰<(hWXÝTests if the current architecture is *name*. The argument is matched against ``System.Info.arch`` on the target system. If the arch names match, this test evaluates to true, otherwise false. The match is case-insensitive.hXj„<hchdheh„hg}rŠ<(hi]hj]hk]hl]ho]uhqM hs]r‹<(h|X%Tests if the current architecture is rŒ<…r<}rŽ<(hWX%Tests if the current architecture is hXjˆ<ubhÂ)r<}r<(hWX*name*hg}r‘<(hi]hj]hk]hl]ho]uhXjˆ<hs]r’<h|Xnamer“<…r”<}r•<(hWUhXj<ubahehÊubh|X". The argument is matched against r–<…r—<}r˜<(hWX". The argument is matched against hXjˆ<ubhâ)r™<}rš<(hWX``System.Info.arch``hg}r›<(hi]hj]hk]hl]ho]uhXjˆ<hs]rœ<h|XSystem.Info.archr<…rž<}rŸ<(hWUhXj™<ubahehêubh|X| on the target system. If the arch names match, this test evaluates to true, otherwise false. The match is case-insensitive.r <…r¡<}r¢<(hWX| on the target system. If the arch names match, this test evaluates to true, otherwise false. The match is case-insensitive.hXjˆ<ubeubahejPubeubj)r£<}r¤<(hWX:samp:`impl({compiler})` 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. 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. hXj<hchdhejhg}r¥<(hi]hj]hk]hl]ho]uhqM§ hrhhs]r¦<(j)r§<}r¨<(hWX:samp:`impl({compiler})`r©<hXj£<hchdhej#hg}rª<(hi]hj]hk]hl]ho]uhqM§ hs]r«<hâ)r¬<}r­<(hWXimpl(compiler)hg}r®<(hl]hk]hi]hj]r¯<Xsampr°<aUrolej°<ho]uhXj§<hs]r±<(h|Ximpl(r²<…r³<}r´<(hWXimpl(hXj¬<ubhÂ)rµ<}r¶<(hWXcompilerhg}r·<(hi]hj]hk]hl]ho]uhXj¬<hs]r¸<h|Xcompilerr¹<…rº<}r»<(hWUhXjµ<ubahehÊubh|X)…r¼<}r½<(hWX)hXj¬<ubehehêubaubj6)r¾<}r¿<(hWUhg}rÀ<(hi]hj]hk]hl]ho]uhXj£<hs]rÁ<(h€)rÂ<}rÃ<(hWX-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.hXj¾<hchdheh„hg}rÄ<(hi]hj]hk]hl]ho]uhqM• hs]rÅ<(h|XnTests for the configured Haskell implementation. An optional version constraint may be specified (for example rÆ<…rÇ<}rÈ<(hWXnTests for the configured Haskell implementation. An optional version constraint may be specified (for example hXjÂ<ubhâ)rÉ<}rÊ<(hWX``impl(ghc >= 6.6.1)``hg}rË<(hi]hj]hk]hl]ho]uhXjÂ<hs]rÌ<h|Ximpl(ghc >= 6.6.1)rÍ<…rÎ<}rÏ<(hWUhXjÉ<ubahehêubh|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.rÐ<…rÑ<}rÒ<(hWX©). 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.hXjÂ<ubeubh€)rÓ<}rÔ<(hWXcNote that including a version constraint in an ``impl`` test causes it to check for two properties:hXj¾<hchdheh„hg}rÕ<(hi]hj]hk]hl]ho]uhqM› hs]rÖ<(h|X/Note that including a version constraint in an r×<…rØ<}rÙ<(hWX/Note that including a version constraint in an hXjÓ<ubhâ)rÚ<}rÛ<(hWX``impl``hg}rÜ<(hi]hj]hk]hl]ho]uhXjÓ<hs]rÝ<h|XimplrÞ<…rß<}rà<(hWUhXjÚ<ubahehêubh|X, test causes it to check for two properties:rá<…râ<}rã<(hWX, test causes it to check for two properties:hXjÓ<ubeubhŠ)rä<}rå<(hWUhXj¾<hchdhehhg}ræ<(hX-hl]hk]hi]hj]ho]uhqMž hs]rç<(h‘)rè<}ré<(hWX1The current compiler has the specified name, and hg}rê<(hi]hj]hk]hl]ho]uhXjä<hs]rë<h€)rì<}rí<(hWX0The current compiler has the specified name, andrî<hXjè<hchdheh„hg}rï<(hi]hj]hk]hl]ho]uhqMž hs]rð<h|X0The current compiler has the specified name, andrñ<…rò<}ró<(hWjî<hXjì<ubaubaheh”ubh‘)rô<}rõ<(hWXBThe compiler's version satisfied the specified version constraint hg}rö<(hi]hj]hk]hl]ho]uhXjä<hs]r÷<h€)rø<}rù<(hWXAThe compiler's version satisfied the specified version constraintrú<hXjô<hchdheh„hg}rû<(hi]hj]hk]hl]ho]uhqM  hs]rü<h|XCThe compiler’s version satisfied the specified version constraintrý<…rþ<}rÿ<(hWjú<hXjø<ubaubaheh”ubeubh€)r=}r=(hWX‡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:hXj¾<hchdheh„hg}r=(hi]hj]hk]hl]ho]uhqM¢ hs]r=(h|X As a result, r=…r=}r=(hWX As a result, hXj=ubhâ)r=}r=(hWX``!impl(ghc >= x.y.z)``hg}r =(hi]hj]hk]hl]ho]uhXj=hs]r =h|X!impl(ghc >= x.y.z)r =…r =}r =(hWUhXj=ubahehêubh|X is not entirely equivalent to r=…r=}r=(hWX is not entirely equivalent to hXj=ubhâ)r=}r=(hWX``impl(ghc < x.y.z)``hg}r=(hi]hj]hk]hl]ho]uhXj=hs]r=h|Ximpl(ghc < x.y.z)r=…r=}r=(hWUhXj=ubahehêubh|X . The test r=…r=}r=(hWX . The test hXj=ubhâ)r=}r=(hWX``!impl(ghc >= x.y.z)``hg}r=(hi]hj]hk]hl]ho]uhXj=hs]r=h|X!impl(ghc >= x.y.z)r=…r =}r!=(hWUhXj=ubahehêubh|X checks that:r"=…r#=}r$=(hWX checks that:hXj=ubeubhŠ)r%=}r&=(hWUhXj¾<hchdhehhg}r'=(hX-hl]hk]hi]hj]ho]uhqM¥ hs]r(=(h‘)r)=}r*=(hWX$The current compiler is not GHC, or hg}r+=(hi]hj]hk]hl]ho]uhXj%=hs]r,=h€)r-=}r.=(hWX#The current compiler is not GHC, orr/=hXj)=hchdheh„hg}r0=(hi]hj]hk]hl]ho]uhqM¥ hs]r1=h|X#The current compiler is not GHC, orr2=…r3=}r4=(hWj/=hXj-=ubaubaheh”ubh‘)r5=}r6=(hWX2The version of GHC is earlier than version x.y.z. hg}r7=(hi]hj]hk]hl]ho]uhXj%=hs]r8=h€)r9=}r:=(hWX1The version of GHC is earlier than version x.y.z.r;=hXj5=hchdheh„hg}r<=(hi]hj]hk]hl]ho]uhqM§ hs]r==h|X1The version of GHC is earlier than version x.y.z.r>=…r?=}r@=(hWj;=hXj9=ubaubaheh”ubeubehejPubeubj)rA=}rB=(hWXÉ: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.hXj<hchdhejhg}rC=(hi]hj]hk]hl]ho]uhqM« hrhhs]rD=(j)rE=}rF=(hWX:samp:`flag({name})`rG=hXjA=hchdhej#hg}rH=(hi]hj]hk]hl]ho]uhqM« hs]rI=hâ)rJ=}rK=(hWX flag(name)hg}rL=(hl]hk]hi]hj]rM=XsamprN=aUrolejN=ho]uhXjE=hs]rO=(h|Xflag(rP=…rQ=}rR=(hWXflag(hXjJ=ubhÂ)rS=}rT=(hWXnamehg}rU=(hi]hj]hk]hl]ho]uhXjJ=hs]rV=h|XnamerW=…rX=}rY=(hWUhXjS=ubahehÊubh|X)…rZ=}r[=(hWX)hXjJ=ubehehêubaubj6)r\=}r]=(hWUhg}r^=(hi]hj]hk]hl]ho]uhXjA=hs]r_=h€)r`=}ra=(hWX´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.rb=hXj\=hchdheh„hg}rc=(hi]hj]hk]hl]ho]uhqMª hs]rd=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.re=…rf=}rg=(hWjb=hXj`=ubaubahejPubeubj)rh=}ri=(hWX``true`` Constant value true.hXj<hchdhejhg}rj=(hi]hj]hk]hl]ho]uhqM­ hrhhs]rk=(j)rl=}rm=(hWX``true``rn=hXjh=hchdhej#hg}ro=(hi]hj]hk]hl]ho]uhqM­ hs]rp=hâ)rq=}rr=(hWjn=hg}rs=(hi]hj]hk]hl]ho]uhXjl=hs]rt=h|Xtrueru=…rv=}rw=(hWUhXjq=ubahehêubaubj6)rx=}ry=(hWUhg}rz=(hi]hj]hk]hl]ho]uhXjh=hs]r{=h€)r|=}r}=(hWXConstant value true.r~=hXjx=hchdheh„hg}r=(hi]hj]hk]hl]ho]uhqM® hs]r€=h|XConstant value true.r=…r‚=}rƒ=(hWj~=hXj|=ubaubahejPubeubj)r„=}r…=(hWX ``false`` Constant value false. hXj<hchdhejhg}r†=(hi]hj]hk]hl]ho]uhqM° hrhhs]r‡=(j)rˆ=}r‰=(hWX ``false``rŠ=hXj„=hchdhej#hg}r‹=(hi]hj]hk]hl]ho]uhqM° hs]rŒ=hâ)r=}rŽ=(hWjŠ=hg}r=(hi]hj]hk]hl]ho]uhXjˆ=hs]r=h|Xfalser‘=…r’=}r“=(hWUhXj=ubahehêubaubj6)r”=}r•=(hWUhg}r–=(hi]hj]hk]hl]ho]uhXj„=hs]r—=h€)r˜=}r™=(hWXConstant value false.rš=hXj”=hchdheh„hg}r›=(hi]hj]hk]hl]ho]uhqM° hs]rœ=h|XConstant value false.r=…rž=}rŸ=(hWjš=hXj˜=ubaubahejPubeubeubeubhY)r =}r¡=(hWUhXj_;hchdhehfhg}r¢=(hi]hj]hk]hl]r£=U"resolution-of-conditions-and-flagsr¤=aho]r¥=h'auhqM³ hrhhs]r¦=(hu)r§=}r¨=(hWX"Resolution of Conditions and Flagsr©=hXj =hchdhehyhg}rª=(hi]hj]hk]hl]ho]uhqM³ hrhhs]r«=h|X"Resolution of Conditions and Flagsr¬=…r­=}r®=(hWj©=hcNhqNhrhhXj§=ubaubh€)r¯=}r°=(hWXIf 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.hXj =hchdheh„hg}r±=(hi]hj]hk]hl]ho]uhqMµ hrhhs]r²=(h|XMIf a package descriptions specifies configuration flags the package user can r³=…r´=}rµ=(hWXMIf a package descriptions specifies configuration flags the package user can hcNhqNhrhhXj¯=ubjB)r¶=}r·=(hWXY`control these in several ways `__hg}r¸=(UnameXcontrol these in several waysjX5installing-packages.html#controlling-flag-assignmentshl]hk]hi]hj]ho]uhXj¯=hs]r¹=h|Xcontrol these in several waysrº=…r»=}r¼=(hWUhXj¶=ubahejFubh|Xn. If the user does not fix the value of a flag, Cabal will try to find a flag assignment in the following way.r½=…r¾=}r¿=(hWXn. If the user does not fix the value of a flag, Cabal will try to find a flag assignment in the following way.hcNhqNhrhhXj¯=ubeubhŠ)rÀ=}rÁ=(hWUhXj =hchdhehhg}rÂ=(hX-hl]hk]hi]hj]ho]uhqM» hrhhs]rÃ=(h‘)rÄ=}rÅ=(hWXó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. hXjÀ=hchdheh”hg}rÆ=(hi]hj]hk]hl]ho]uhqNhrhhs]rÇ=h€)rÈ=}rÉ=(hWXò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Ê=hXjÄ=hchdheh„hg}rË=(hi]hj]hk]hl]ho]uhqM» hs]rÌ=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Í=…rÎ=}rÏ=(hWjÊ=hXjÈ=ubaubaubh‘)rÐ=}rÑ=(hWX9If 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. hXjÀ=hchdheh”hg}rÒ=(hi]hj]hk]hl]ho]uhqNhrhhs]rÓ=h€)rÔ=}rÕ=(hWX8If 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Ö=hXjÐ=hchdheh„hg}r×=(hi]hj]hk]hl]ho]uhqMÀ hs]rØ=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Ù=…rÚ=}rÛ=(hWjÖ=hXjÔ=ubaubaubeubh€)rÜ=}rÝ=(hWXTo 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.hXj =hchdheh„hg}rÞ=(hi]hj]hk]hl]ho]uhqMÆ hrhhs]rß=(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 rà=…rá=}râ=(hWX›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 hcNhqNhrhhXjÜ=ubjn)rã=}rä=(hWX:pkg-field:`build-depends`rå=hXjÜ=hchdhejrhg}ræ=(UreftypeX pkg-fieldjtˆjuX build-dependsU refdomainXcabalrç=hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽXflagrè=uhqMÆ hs]ré=hâ)rê=}rë=(hWjå=hg}rì=(hi]hj]rí=(jjç=Xcabal-pkg-fieldrî=ehk]hl]ho]uhXjã=hs]rï=h|X build-dependsrð=…rñ=}rò=(hWUhXjê=ubahehêubaubh|X\ field in conditional blocks that determine if a particular flag assignment is satisfiable (ró=…rô=}rõ=(hWX\ field in conditional blocks that determine if a particular flag assignment is satisfiable (hcNhqNhrhhXjÜ=ubjn)rö=}r÷=(hWX:pkg-field:`build-tools`rø=hXjÜ=hchdhejrhg}rù=(UreftypeX pkg-fieldjtˆjuX build-toolsU refdomainXcabalrú=hl]hk]U refexplicit‰hi]hj]ho]jwjxjŽjè=uhqMÆ hs]rû=hâ)rü=}rý=(hWjø=hg}rþ=(hi]hj]rÿ=(jjú=Xcabal-pkg-fieldr>ehk]hl]ho]uhXjö=hs]r>h|X build-toolsr>…r>}r>(hWUhXjü=ubahehêubaubh|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.r>…r>}r>(hWXè 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.hcNhqNhrhhXjÜ=ubeubh€)r>}r >(hWXbIf 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 >hXj =hchdheh„hg}r >(hi]hj]hk]hl]ho]uhqMÏ hrhhs]r >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 >…r>}r>(hWj >hcNhqNhrhhXj>ubaubeubeubhY)r>}r>(hWUhXh_hchdhehfhg}r>(hi]hj]hk]hl]r>U/meaning-of-field-values-when-using-conditionalsr>aho]r>hauhqM× hrhhs]r>(hu)r>}r>(hWX/Meaning of field values when using conditionalsr>hXj>hchdhehyhg}r>(hi]hj]hk]hl]ho]uhqM× hrhhs]r>h|X/Meaning of field values when using conditionalsr>…r>}r>(hWj>hcNhqNhrhhXj>ubaubh€)r>}r >(hWXDuring 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!>hXj>hchdheh„hg}r">(hi]hj]hk]hl]ho]uhqMÙ hrhhs]r#>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.r$>…r%>}r&>(hWj!>hcNhqNhrhhXj>ubaubhŠ)r'>}r(>(hWUhXj>hchdhehhg}r)>(hX-hl]hk]hi]hj]ho]uhqMÞ hrhhs]r*>(h‘)r+>}r,>(hWX?Boolean fields are combined using conjunction (logical "and"). hXj'>hchdheh”hg}r->(hi]hj]hk]hl]ho]uhqNhrhhs]r.>h€)r/>}r0>(hWX>Boolean fields are combined using conjunction (logical "and").r1>hXj+>hchdheh„hg}r2>(hi]hj]hk]hl]ho]uhqMÞ hs]r3>h|XBBoolean fields are combined using conjunction (logical “andâ€).r4>…r5>}r6>(hWj1>hXj/>ubaubaubh‘)r7>}r8>(hWX¸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. hXj'>hchdheh”hg}r9>(hi]hj]hk]hl]ho]uhqNhrhhs]r:>(h€)r;>}r<>(hWXUList fields are combined by appending the inner items to the outer items, for exampler=>hXj7>hchdheh„hg}r>>(hi]hj]hk]hl]ho]uhqMà hs]r?>h|XUList fields are combined by appending the inner items to the outer items, for exampler@>…rA>}rB>(hWj=>hXj;>ubaubjÏ)rC>}rD>(hWXLother-extensions: CPP if impl(ghc) other-extensions: MultiParamTypeClasseshXj7>hejÒhg}rE>(jÔjÕhl]hk]hi]hj]ho]uhqMå hs]rF>h|XLother-extensions: CPP if impl(ghc) other-extensions: MultiParamTypeClassesrG>…rH>}rI>(hWUhXjC>ubaubh€)rJ>}rK>(hWX+when compiled using GHC will be combined torL>hXj7>hchdheh„hg}rM>(hi]hj]hk]hl]ho]uhqMé hs]rN>h|X+when compiled using GHC will be combined torO>…rP>}rQ>(hWjL>hXjJ>ubaubjÏ)rR>}rS>(hWX,other-extensions: CPP, MultiParamTypeClasseshXj7>hejÒhg}rT>(jÔjÕhl]hk]hi]hj]ho]uhqMí hs]rU>h|X,other-extensions: CPP, MultiParamTypeClassesrV>…rW>}rX>(hWUhXjR>ubaubh€)rY>}rZ>(hWXŸSimilarly, if two conditional sections appear at the same nesting level, properties specified in the latter will come after properties specified in the former.r[>hXj7>hchdheh„hg}r\>(hi]hj]hk]hl]ho]uhqMï hs]r]>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.r^>…r_>}r`>(hWj[>hXjY>ubaubeubh‘)ra>}rb>(hWXAll 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 hXj'>hchdheh”hg}rc>(hi]hj]hk]hl]ho]uhqNhrhhs]rd>(h€)re>}rf>(hWXEAll other fields must not be specified in ambiguous ways. For examplerg>hXja>hchdheh„hg}rh>(hi]hj]hk]hl]ho]uhqMó hs]ri>h|XEAll other fields must not be specified in ambiguous ways. For examplerj>…rk>}rl>(hWjg>hXje>ubaubjÏ)rm>}rn>(hWX>Main-is: Main.hs if flag(useothermain) Main-is: OtherMain.hshXja>hejÒhg}ro>(jÔjÕhl]hk]hi]hj]ho]uhqM÷ hs]rp>h|X>Main-is: Main.hs if flag(useothermain) Main-is: OtherMain.hsrq>…rr>}rs>(hWUhXjm>ubaubh€)rt>}ru>(hWX"will lead to an error. Instead userv>hXja>hchdheh„hg}rw>(hi]hj]hk]hl]ho]uhqMû hs]rx>h|X"will lead to an error. Instead usery>…rz>}r{>(hWjv>hXjt>ubaubjÏ)r|>}r}>(hWXEif flag(useothermain) Main-is: OtherMain.hs else Main-is: Main.hshXja>hejÒhg}r~>(jÔjÕhl]hk]hi]hj]ho]uhqMÿ hs]r>h|XEif flag(useothermain) Main-is: OtherMain.hs else Main-is: Main.hsr€>…r>}r‚>(hWUhXj|>ubaubeubeubeubhY)rƒ>}r„>(hWUhXh_hchdhehfhg}r…>(hi]hj]hk]hl]r†>Ucommon-stanzasr‡>aho]rˆ>hauhqM hrhhs]r‰>(hu)rŠ>}r‹>(hWXCommon stanzasrŒ>hXjƒ>hchdhehyhg}r>(hi]hj]hk]hl]ho]uhqM hrhhs]rŽ>h|XCommon stanzasr>…r>}r‘>(hWjŒ>hcNhqNhrhhXjŠ>ubaubjü)r’>}r“>(hWUhXjƒ>hcNhejÿhg}r”>(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)r•>}r–>(hWUhXjƒ>hcNhejhg}r—>(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-sectionr˜>j j˜>uhqNhrhhs]r™>(j )rš>}r›>(hWX common namehXj•>hchdhejhg}rœ>(hl]r>Xpkg-section-common-commonrž>ahk]hi]hj]ho]j‰uhqNhrhhs]rŸ>(jü)r >}r¡>(hWUhXjš>hchdhejÿhg}r¢>(hl]hk]hi]hj]ho]Uentries]r£>(jX$common:common; package.cabal sectionjž>UNtr¤>auhqNhrhhs]ubj)r¥>}r¦>(hWXcommonr§>hXjš>hchdhejhg}r¨>(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]r©>h|Xcommonrª>…r«>}r¬>(hWUhcNhqNhrhhXj¥>ubaubj%)r­>}r®>(hWU hXjš>hchdhej(hg}r¯>(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]r°>h|X …r±>}r²>(hWUhcNhqNhrhhXj­>ubaubj¤)r³>}r´>(hWXnamehXjš>hchdhej§hg}rµ>(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]r¶>h|Xnamer·>…r¸>}r¹>(hWUhcNhqNhrhhXj³>ubaubeubj-)rº>}r»>(hWUhXj•>hchdhej0hg}r¼>(hi]hj]hk]hl]ho]uhqNhrhhs]r½>j3)r¾>}r¿>(hWUhXjº>hcNhej6hg}rÀ>(hi]hj]hk]hl]ho]uhqNhrhhs]rÁ>j9)rÂ>}rÃ>(hWUhXj¾>hcNhej<hg}rÄ>(hi]hj]hk]hl]ho]uhqNhrhhs]rÅ>(j?)rÆ>}rÇ>(hWjBhXjÂ>hchdhejChg}rÈ>(hi]hj]hk]hl]ho]uhqKhs]rÉ>h|XSincerÊ>…rË>}rÌ>(hWUhXjÆ>ubaubjI)rÍ>}rÎ>(hWU Cabal 2.2rÏ>hg}rÐ>(hi]hj]hk]hl]ho]uhXjÂ>hs]rÑ>h€)rÒ>}rÓ>(hWjÏ>hg}rÔ>(hi]hj]hk]hl]ho]uhXjÍ>hs]rÕ>h|X Cabal 2.2rÖ>…r×>}rØ>(hWUhXjÒ>ubaheh„ubahejVubeubaubaubeubh€)rÙ>}rÚ>(hWXGStarting with Cabal-2.2 it's possible to use common build info stanzas.rÛ>hXjƒ>hchdheh„hg}rÜ>(hi]hj]hk]hl]ho]uhqM hrhhs]rÝ>h|XIStarting with Cabal-2.2 it’s possible to use common build info stanzas.rÞ>…rß>}rà>(hWjÛ>hcNhqNhrhhXjÙ>ubaubjÏ)rá>}râ>(hWXcommon deps build-depends: base ^>= 4.11 ghc-options: -Wall common test-deps build-depends: tasty library import: deps exposed-modules: Foo test-suite tests import: deps, test-deps type: exitcode-stdio-1.0 main-is: Tests.hs build-depends: foohXjƒ>hchdhejÒhg}rã>(jÔjÕhl]hk]hi]hj]ho]uhqM hrhhs]rä>h|Xcommon deps build-depends: base ^>= 4.11 ghc-options: -Wall common test-deps build-depends: tasty 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å>…ræ>}rç>(hWUhXjá>ubaubhŠ)rè>}ré>(hWUhXjƒ>hchdhehhg}rê>(hX-hl]hk]hi]hj]ho]uhqM hrhhs]rë>(h‘)rì>}rí>(hWX;You can use `build information`_ fields in common stanzas. hXjè>hchdheh”hg}rî>(hi]hj]hk]hl]ho]uhqNhrhhs]rï>h€)rð>}rñ>(hWX:You can use `build information`_ fields in common stanzas.hXjì>hchdheh„hg}rò>(hi]hj]hk]hl]ho]uhqM hs]ró>(h|X You can use rô>…rõ>}rö>(hWX You can use hXjð>ubjB)r÷>}rø>(hWX`build information`_jEKhXjð>hejFhg}rù>(UnameXbuild informationhl]hk]hi]hj]ho]jHjZuhs]rú>h|Xbuild informationrû>…rü>}rý>(hWUhXj÷>ubaubh|X fields in common stanzas.rþ>…rÿ>}r?(hWX fields in common stanzas.hXjð>ubeubaubh‘)r?}r?(hWX+Common stanzas must be defined before use. hXjè>hchdheh”hg}r?(hi]hj]hk]hl]ho]uhqNhrhhs]r?h€)r?}r?(hWX*Common stanzas must be defined before use.r?hXj?hchdheh„hg}r?(hi]hj]hk]hl]ho]uhqM" hs]r ?h|X*Common stanzas must be defined before use.r ?…r ?}r ?(hWj?hXj?ubaubaubh‘)r ?}r?(hWX0Common stanzas can import other common stanzas. hXjè>hchdheh”hg}r?(hi]hj]hk]hl]ho]uhqNhrhhs]r?h€)r?}r?(hWX/Common stanzas can import other common stanzas.r?hXj ?hchdheh„hg}r?(hi]hj]hk]hl]ho]uhqM$ hs]r?h|X/Common stanzas can import other common stanzas.r?…r?}r?(hWj?hXj?ubaubaubh‘)r?}r?(hWXSYou can import multiple stanzas at once. Stanza names must be separated by commas. hXjè>hchdheh”hg}r?(hi]hj]hk]hl]ho]uhqNhrhhs]r?h€)r?}r?(hWXRYou can import multiple stanzas at once. Stanza names must be separated by commas.r?hXj?hchdheh„hg}r ?(hi]hj]hk]hl]ho]uhqM& hs]r!?h|XRYou can import multiple stanzas at once. Stanza names must be separated by commas.r"?…r#?}r$?(hWj?hXj?ubaubaubeubhî)r%?}r&?(hWXBThe name `import` was chosen, because there is ``includes`` field.r'?hXjƒ>hchdhehñhg}r(?(hi]hj]hk]hl]ho]uhqNhrhhs]r)?h€)r*?}r+?(hWj'?hXj%?hchdheh„hg}r,?(hi]hj]hk]hl]ho]uhqM* hs]r-?(h|X The name r.?…r/?}r0?(hWX The name hXj*?ubj¥ )r1?}r2?(hWX`import`hg}r3?(hi]hj]hk]hl]ho]uhXj*?hs]r4?h|Ximportr5?…r6?}r7?(hWUhXj1?ubahej­ ubh|X was chosen, because there is r8?…r9?}r:?(hWX was chosen, because there is hXj*?ubhâ)r;?}r?h|Xincludesr??…r@?}rA?(hWUhXj;?ubahehêubh|X field.rB?…rC?}rD?(hWX field.hXj*?ubeubaubeubhY)rE?}rF?(hWUhXh_hchdhehfhg}rG?(hi]hj]hk]hl]rH?Usource-repositoriesrI?aho]rJ?h.auhqM- hrhhs]rK?(hu)rL?}rM?(hWXSource RepositoriesrN?hXjE?hchdhehyhg}rO?(hi]hj]hk]hl]ho]uhqM- hrhhs]rP?h|XSource RepositoriesrQ?…rR?}rS?(hWjN?hcNhqNhrhhXjL?ubaubjü)rT?}rU?(hWUhXjE?hcNhejÿhg}rV?(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rW?}rX?(hWUhXjE?hcNhejhg}rY?(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-sectionrZ?j jZ?uhqNhrhhs]r[?(j )r\?}r]?(hWXsource-repositoryr^?hXjW?hchdhejhg}r_?(hl]r`?X/pkg-section-source-repository-source-repositoryra?ahk]hi]hj]ho]j‰uhqNhrhhs]rb?(jü)rc?}rd?(hWUhXj\?hchdhejÿhg}re?(hl]hk]hi]hj]ho]Uentries]rf?(jX:source-repository:source-repository; package.cabal sectionja?UNtrg?auhqNhrhhs]ubj)rh?}ri?(hWj^?hXj\?hchdhejhg}rj?(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]rk?h|Xsource-repositoryrl?…rm?}rn?(hWUhcNhqNhrhhXjh?ubaubj%)ro?}rp?(hWU hXj\?hchdhej(hg}rq?(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]rr?h|X …rs?}rt?(hWUhcNhqNhrhhXjo?ubaubeubj-)ru?}rv?(hWUhXjW?hchdhej0hg}rw?(hi]hj]hk]hl]ho]uhqNhrhhs]rx?j3)ry?}rz?(hWUhXju?hcNhej6hg}r{?(hi]hj]hk]hl]ho]uhqNhrhhs]r|?j9)r}?}r~?(hWUhXjy?hcNhej<hg}r?(hi]hj]hk]hl]ho]uhqNhrhhs]r€?(j?)r?}r‚?(hWjBhXj}?hchdhejChg}rƒ?(hi]hj]hk]hl]ho]uhqKhs]r„?h|XSincer…?…r†?}r‡?(hWUhXj?ubaubjI)rˆ?}r‰?(hWU Cabal 1.6rŠ?hg}r‹?(hi]hj]hk]hl]ho]uhXj}?hs]rŒ?h€)r?}rŽ?(hWjŠ?hg}r?(hi]hj]hk]hl]ho]uhXjˆ?hs]r?h|X Cabal 1.6r‘?…r’?}r“?(hWUhXj?ubaheh„ubahejVubeubaubaubeubh€)r”?}r•?(hWXYIt 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–?hXjE?hchdheh„hg}r—?(hi]hj]hk]hl]ho]uhqM2 hrhhs]r˜?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.r™?…rš?}r›?(hWj–?hcNhqNhrhhXj”?ubaubh€)rœ?}r?(hWX¥Cabal supports specifying different information for various common source control systems. Obviously not all automated tools will support all source control systems.rž?hXjE?hchdheh„hg}rŸ?(hi]hj]hk]hl]ho]uhqM8 hrhhs]r ?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¡?…r¢?}r£?(hWjž?hcNhqNhrhhXjœ?ubaubh€)r¤?}r¥?(hWXª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¦?hXjE?hchdheh„hg}r§?(hi]hj]hk]hl]ho]uhqM< hrhhs]r¨?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©?…rª?}r«?(hWj¦?hcNhqNhrhhXj¤?ubaubhŠ)r¬?}r­?(hWUhXjE?hchdhehhg}r®?(hX-hl]hk]hi]hj]ho]uhqM@ hrhhs]r¯?(h‘)r°?}r±?(hWXâ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. hXj¬?hchdheh”hg}r²?(hi]hj]hk]hl]ho]uhqNhrhhs]r³?h€)r´?}rµ?(hWXá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.hXj°?hchdheh„hg}r¶?(hi]hj]hk]hl]ho]uhqM@ hs]r·?(h|XThe r¸?…r¹?}rº?(hWXThe hXj´?ubhâ)r»?}r¼?(hWX``head``hg}r½?(hi]hj]hk]hl]ho]uhXj´?hs]r¾?h|Xheadr¿?…rÀ?}rÁ?(hWUhXj»?ubahehêubh|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.rÂ?…rÃ?}rÄ?(hWXÕ 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.hXj´?ubeubaubh‘)rÅ?}rÆ?(hWXâ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. hXj¬?hchdheh”hg}rÇ?(hi]hj]hk]hl]ho]uhqNhrhhs]rÈ?h€)rÉ?}rÊ?(hWXá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.hXjÅ?hchdheh„hg}rË?(hi]hj]hk]hl]ho]uhqME hs]rÌ?(h|XThe rÍ?…rÎ?}rÏ?(hWXThe hXjÉ?ubhâ)rÐ?}rÑ?(hWX``this``hg}rÒ?(hi]hj]hk]hl]ho]uhXjÉ?hs]rÓ?h|XthisrÔ?…rÕ?}rÖ?(hWUhXjÐ?ubahehêubh|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.r×?…rØ?}rÙ?(hWXÕ 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.hXjÉ?ubeubaubeubh€)rÚ?}rÛ?(hWX¨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.hXjE?hchdheh„hg}rÜ?(hi]hj]hk]hl]ho]uhqMN hrhhs]rÝ?(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 rÞ?…rß?}rà?(hWX|You can specify one kind or the other or both. As an example here are the repositories for the Cabal library. Note that the hcNhqNhrhhXjÚ?ubhâ)rá?}râ?(hWX``this``hg}rã?(hi]hj]hk]hl]ho]uhXjÚ?hs]rä?h|Xthisrå?…ræ?}rç?(hWUhXjá?ubahehêubh|X$ kind of repository specifies a tag.rè?…ré?}rê?(hWX$ kind of repository specifies a tag.hcNhqNhrhhXjÚ?ubeubjÏ)rë?}rì?(hWXÏ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.1hXjE?hchdhejÒhg}rí?(jÔjÕhl]hk]hi]hj]ho]uhqMT hrhhs]rî?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.1rï?…rð?}rñ?(hWUhXjë?ubaubh€)rò?}ró?(hWX The exact fields are as follows:rô?hXjE?hchdheh„hg}rõ?(hi]hj]hk]hl]ho]uhqM] hrhhs]rö?h|X The exact fields are as follows:r÷?…rø?}rù?(hWjô?hcNhqNhrhhXjò?ubaubjü)rú?}rû?(hWUhXjE?hchdhejÿhg}rü?(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rý?}rþ?(hWUhXjE?hchdhejhg}rÿ?(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldr@j j@uhqNhrhhs]r@(j )r@}r@(hWX type: tokenhXjý?hchdhejhg}r@(hl]r@X pkg-field-source-repository-typer@ahk]hi]hj]ho]j‰uhqMn hrhhs]r@(jü)r@}r @(hWUhXj@hchdhejÿhg}r @(hl]hk]hi]hj]ho]Uentries]r @(jX+source-repository:type; package.cabal fieldj@UNtr @auhqMn hrhhs]ubj)r @}r@(hWXtyper@hXj@hchdhejhg}r@(jÔjÕhl]hk]hi]hj]ho]uhqMn hrhhs]r@h|Xtyper@…r@}r@(hWUhcNhqNhrhhXj @ubaubj%)r@}r@(hWjžhXj@hchdhej(hg}r@(jÔjÕhl]hk]hi]hj]ho]uhqMn hrhhs]r@h|X: r@…r@}r@(hWUhcNhqNhrhhXj@ubaubj¤)r@}r@(hWXtokenhXj@hchdhej§hg}r@(jÔjÕhl]hk]hi]hj]ho]uhqMn hrhhs]r@h|Xtokenr @…r!@}r"@(hWUhcNhqNhrhhXj@ubaubeubj-)r#@}r$@(hWUhXjý?hchdhej0hg}r%@(hi]hj]hk]hl]ho]uhqMn hrhhs]r&@(h€)r'@}r(@(hWXcThe name of the source control system used for this repository. The currently recognised types are:r)@hXj#@hchdheh„hg}r*@(hi]hj]hk]hl]ho]uhqMa hrhhs]r+@h|XcThe name of the source control system used for this repository. The currently recognised types are:r,@…r-@}r.@(hWj)@hcNhqNhrhhXj'@ubaubhŠ)r/@}r0@(hWUhXj#@hchdhehhg}r1@(hX-hl]hk]hi]hj]ho]uhqMd hrhhs]r2@(h‘)r3@}r4@(hWX ``darcs``r5@hXj/@hchdheh”hg}r6@(hi]hj]hk]hl]ho]uhqNhrhhs]r7@h€)r8@}r9@(hWj5@hXj3@hchdheh„hg}r:@(hi]hj]hk]hl]ho]uhqMd hs]r;@hâ)r<@}r=@(hWj5@hg}r>@(hi]hj]hk]hl]ho]uhXj8@hs]r?@h|Xdarcsr@@…rA@}rB@(hWUhXj<@ubahehêubaubaubh‘)rC@}rD@(hWX``git``rE@hXj/@hchdheh”hg}rF@(hi]hj]hk]hl]ho]uhqNhrhhs]rG@h€)rH@}rI@(hWjE@hXjC@hchdheh„hg}rJ@(hi]hj]hk]hl]ho]uhqMe hs]rK@hâ)rL@}rM@(hWjE@hg}rN@(hi]hj]hk]hl]ho]uhXjH@hs]rO@h|XgitrP@…rQ@}rR@(hWUhXjL@ubahehêubaubaubh‘)rS@}rT@(hWX``svn``rU@hXj/@hchdheh”hg}rV@(hi]hj]hk]hl]ho]uhqNhrhhs]rW@h€)rX@}rY@(hWjU@hXjS@hchdheh„hg}rZ@(hi]hj]hk]hl]ho]uhqMf hs]r[@hâ)r\@}r]@(hWjU@hg}r^@(hi]hj]hk]hl]ho]uhXjX@hs]r_@h|Xsvnr`@…ra@}rb@(hWUhXj\@ubahehêubaubaubh‘)rc@}rd@(hWX``cvs``re@hXj/@hchdheh”hg}rf@(hi]hj]hk]hl]ho]uhqNhrhhs]rg@h€)rh@}ri@(hWje@hXjc@hchdheh„hg}rj@(hi]hj]hk]hl]ho]uhqMg hs]rk@hâ)rl@}rm@(hWje@hg}rn@(hi]hj]hk]hl]ho]uhXjh@hs]ro@h|Xcvsrp@…rq@}rr@(hWUhXjl@ubahehêubaubaubh‘)rs@}rt@(hWX``mercurial`` (or alias ``hg``)ru@hXj/@hchdheh”hg}rv@(hi]hj]hk]hl]ho]uhqNhrhhs]rw@h€)rx@}ry@(hWju@hXjs@hchdheh„hg}rz@(hi]hj]hk]hl]ho]uhqMh hs]r{@(hâ)r|@}r}@(hWX ``mercurial``hg}r~@(hi]hj]hk]hl]ho]uhXjx@hs]r@h|X mercurialr€@…r@}r‚@(hWUhXj|@ubahehêubh|X (or alias rƒ@…r„@}r…@(hWX (or alias hXjx@ubhâ)r†@}r‡@(hWX``hg``hg}rˆ@(hi]hj]hk]hl]ho]uhXjx@hs]r‰@h|XhgrŠ@…r‹@}rŒ@(hWUhXj†@ubahehêubh|X)…r@}rŽ@(hWX)hXjx@ubeubaubh‘)r@}r@(hWX``bazaar`` (or alias ``bzr``)r‘@hXj/@hchdheh”hg}r’@(hi]hj]hk]hl]ho]uhqNhrhhs]r“@h€)r”@}r•@(hWj‘@hXj@hchdheh„hg}r–@(hi]hj]hk]hl]ho]uhqMi hs]r—@(hâ)r˜@}r™@(hWX ``bazaar``hg}rš@(hi]hj]hk]hl]ho]uhXj”@hs]r›@h|Xbazaarrœ@…r@}rž@(hWUhXj˜@ubahehêubh|X (or alias rŸ@…r @}r¡@(hWX (or alias hXj”@ubhâ)r¢@}r£@(hWX``bzr``hg}r¤@(hi]hj]hk]hl]ho]uhXj”@hs]r¥@h|Xbzrr¦@…r§@}r¨@(hWUhXj¢@ubahehêubh|X)…r©@}rª@(hWX)hXj”@ubeubaubh‘)r«@}r¬@(hWX``arch``r­@hXj/@hchdheh”hg}r®@(hi]hj]hk]hl]ho]uhqNhrhhs]r¯@h€)r°@}r±@(hWj­@hXj«@hchdheh„hg}r²@(hi]hj]hk]hl]ho]uhqMj hs]r³@hâ)r´@}rµ@(hWj­@hg}r¶@(hi]hj]hk]hl]ho]uhXj°@hs]r·@h|Xarchr¸@…r¹@}rº@(hWUhXj´@ubahehêubaubaubh‘)r»@}r¼@(hWX ``monotone`` hXj/@hchdheh”hg}r½@(hi]hj]hk]hl]ho]uhqNhrhhs]r¾@h€)r¿@}rÀ@(hWX ``monotone``rÁ@hXj»@hchdheh„hg}rÂ@(hi]hj]hk]hl]ho]uhqMk hs]rÃ@hâ)rÄ@}rÅ@(hWjÁ@hg}rÆ@(hi]hj]hk]hl]ho]uhXj¿@hs]rÇ@h|XmonotonerÈ@…rÉ@}rÊ@(hWUhXjÄ@ubahehêubaubaubeubh€)rË@}rÌ@(hWXThis field is required.rÍ@hXj#@hchdheh„hg}rÎ@(hi]hj]hk]hl]ho]uhqMm hrhhs]rÏ@h|XThis field is required.rÐ@…rÑ@}rÒ@(hWjÍ@hcNhqNhrhhXjË@ubaubeubeubjü)rÓ@}rÔ@(hWUhXjE?hchdhejÿhg}rÕ@(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rÖ@}r×@(hWUhXjE?hchdhejhg}rØ@(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrÙ@j jÙ@uhqNhrhhs]rÚ@(j )rÛ@}rÜ@(hWX location: URLhXjÖ@hchdhejhg}rÝ@(hl]rÞ@X$pkg-field-source-repository-locationrß@ahk]hi]hj]ho]j‰uhqMy hrhhs]rà@(jü)rá@}râ@(hWUhXjÛ@hchdhejÿhg}rã@(hl]hk]hi]hj]ho]Uentries]rä@(jX/source-repository:location; package.cabal fieldjß@UNtrå@auhqMy hrhhs]ubj)ræ@}rç@(hWXlocationrè@hXjÛ@hchdhejhg}ré@(jÔjÕhl]hk]hi]hj]ho]uhqMy hrhhs]rê@h|Xlocationrë@…rì@}rí@(hWUhcNhqNhrhhXjæ@ubaubj%)rî@}rï@(hWjžhXjÛ@hchdhej(hg}rð@(jÔjÕhl]hk]hi]hj]ho]uhqMy hrhhs]rñ@h|X: rò@…ró@}rô@(hWUhcNhqNhrhhXjî@ubaubj¤)rõ@}rö@(hWXURLhXjÛ@hchdhej§hg}r÷@(jÔjÕhl]hk]hi]hj]ho]uhqMy hrhhs]rø@h|XURLrù@…rú@}rû@(hWUhcNhqNhrhhXjõ@ubaubeubj-)rü@}rý@(hWUhXjÖ@hchdhej0hg}rþ@(hi]hj]hk]hl]ho]uhqMy hrhhs]rÿ@(h€)rA}rA(hWXiThe location of the repository. The exact form of this field depends on the repository type. For example:rAhXjü@hchdheh„hg}rA(hi]hj]hk]hl]ho]uhqMq hrhhs]rAh|XiThe location of the repository. The exact form of this field depends on the repository type. For example:rA…rA}rA(hWjAhcNhqNhrhhXjAubaubhŠ)rA}r A(hWUhXjü@hchdhehhg}r A(hX-hl]hk]hi]hj]ho]uhqMt hrhhs]r A(h‘)r A}r A(hWX+for darcs: ``http://code.haskell.org/foo/``rAhXjAhchdheh”hg}rA(hi]hj]hk]hl]ho]uhqNhrhhs]rAh€)rA}rA(hWjAhXj Ahchdheh„hg}rA(hi]hj]hk]hl]ho]uhqMt hs]rA(h|X for darcs: rA…rA}rA(hWX for darcs: hXjAubhâ)rA}rA(hWX ``http://code.haskell.org/foo/``hg}rA(hi]hj]hk]hl]ho]uhXjAhs]rAh|Xhttp://code.haskell.org/foo/rA…rA}rA(hWUhXjAubahehêubeubaubh‘)rA}r A(hWX)for git: ``git://github.com/foo/bar.git``r!AhXjAhchdheh”hg}r"A(hi]hj]hk]hl]ho]uhqNhrhhs]r#Ah€)r$A}r%A(hWj!AhXjAhchdheh„hg}r&A(hi]hj]hk]hl]ho]uhqMu hs]r'A(h|X for git: r(A…r)A}r*A(hWX for git: hXj$Aubhâ)r+A}r,A(hWX ``git://github.com/foo/bar.git``hg}r-A(hi]hj]hk]hl]ho]uhXj$Ahs]r.Ah|Xgit://github.com/foo/bar.gitr/A…r0A}r1A(hWUhXj+Aubahehêubeubaubh‘)r2A}r3A(hWX&for CVS: ``anoncvs@cvs.foo.org:/cvs`` hXjAhchdheh”hg}r4A(hi]hj]hk]hl]ho]uhqNhrhhs]r5Ah€)r6A}r7A(hWX%for CVS: ``anoncvs@cvs.foo.org:/cvs``r8AhXj2Ahchdheh„hg}r9A(hi]hj]hk]hl]ho]uhqMv hs]r:A(h|X for CVS: r;A…rA}r?A(hWX``anoncvs@cvs.foo.org:/cvs``hg}r@A(hi]hj]hk]hl]ho]uhXj6Ahs]rAAh|Xanoncvs@cvs.foo.org:/cvsrBA…rCA}rDA(hWUhXj>Aubahehêubeubaubeubh€)rEA}rFA(hWXThis field is required.rGAhXjü@hchdheh„hg}rHA(hi]hj]hk]hl]ho]uhqMx hrhhs]rIAh|XThis field is required.rJA…rKA}rLA(hWjGAhcNhqNhrhhXjEAubaubeubeubjü)rMA}rNA(hWUhXjE?hchdhejÿhg}rOA(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rPA}rQA(hWUhXjE?hchdhejhg}rRA(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrSAj jSAuhqNhrhhs]rTA(j )rUA}rVA(hWX module: tokenhXjPAhchdhejhg}rWA(hl]rXAX"pkg-field-source-repository-modulerYAahk]hi]hj]ho]j‰uhqM hrhhs]rZA(jü)r[A}r\A(hWUhXjUAhchdhejÿhg}r]A(hl]hk]hi]hj]ho]Uentries]r^A(jX-source-repository:module; package.cabal fieldjYAUNtr_AauhqM hrhhs]ubj)r`A}raA(hWXmodulerbAhXjUAhchdhejhg}rcA(jÔjÕhl]hk]hi]hj]ho]uhqM hrhhs]rdAh|XmodulereA…rfA}rgA(hWUhcNhqNhrhhXj`Aubaubj%)rhA}riA(hWjžhXjUAhchdhej(hg}rjA(jÔjÕhl]hk]hi]hj]ho]uhqM hrhhs]rkAh|X: rlA…rmA}rnA(hWUhcNhqNhrhhXjhAubaubj¤)roA}rpA(hWXtokenhXjUAhchdhej§hg}rqA(jÔjÕhl]hk]hi]hj]ho]uhqM hrhhs]rrAh|XtokenrsA…rtA}ruA(hWUhcNhqNhrhhXjoAubaubeubj-)rvA}rwA(hWUhXjPAhchdhej0hg}rxA(hi]hj]hk]hl]ho]uhqM hrhhs]ryA(h€)rzA}r{A(hWXUCVS requires a named module, as each CVS server can host multiple named repositories.r|AhXjvAhchdheh„hg}r}A(hi]hj]hk]hl]ho]uhqM| hrhhs]r~Ah|XUCVS requires a named module, as each CVS server can host multiple named repositories.rA…r€A}rA(hWj|AhcNhqNhrhhXjzAubaubh€)r‚A}rƒA(hWXTThis field is required for the CVS repository type and should not be used otherwise.r„AhXjvAhchdheh„hg}r…A(hi]hj]hk]hl]ho]uhqM hrhhs]r†Ah|XTThis field is required for the CVS repository type and should not be used otherwise.r‡A…rˆA}r‰A(hWj„AhcNhqNhrhhXj‚Aubaubeubeubjü)rŠA}r‹A(hWUhXjE?hchdhejÿhg}rŒA(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rA}rŽA(hWUhXjE?hchdhejhg}rA(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrAj jAuhqNhrhhs]r‘A(j )r’A}r“A(hWX branch: tokenhXjAhchdhejhg}r”A(hl]r•AX"pkg-field-source-repository-branchr–Aahk]hi]hj]ho]j‰uhqM‹ hrhhs]r—A(jü)r˜A}r™A(hWUhXj’Ahchdhejÿhg}ršA(hl]hk]hi]hj]ho]Uentries]r›A(jX-source-repository:branch; package.cabal fieldj–AUNtrœAauhqM‹ hrhhs]ubj)rA}ržA(hWXbranchrŸAhXj’Ahchdhejhg}r A(jÔjÕhl]hk]hi]hj]ho]uhqM‹ hrhhs]r¡Ah|Xbranchr¢A…r£A}r¤A(hWUhcNhqNhrhhXjAubaubj%)r¥A}r¦A(hWjžhXj’Ahchdhej(hg}r§A(jÔjÕhl]hk]hi]hj]ho]uhqM‹ hrhhs]r¨Ah|X: r©A…rªA}r«A(hWUhcNhqNhrhhXj¥Aubaubj¤)r¬A}r­A(hWXtokenhXj’Ahchdhej§hg}r®A(jÔjÕhl]hk]hi]hj]ho]uhqM‹ hrhhs]r¯Ah|Xtokenr°A…r±A}r²A(hWUhcNhqNhrhhXj¬Aubaubeubj-)r³A}r´A(hWUhXjAhchdhej0hg}rµA(hi]hj]hk]hl]ho]uhqM‹ hrhhs]r¶A(h€)r·A}r¸A(hWXIMany 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¹AhXj³Ahchdheh„hg}rºA(hi]hj]hk]hl]ho]uhqM„ hrhhs]r»Ah|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¼A…r½A}r¾A(hWj¹AhcNhqNhrhhXj·Aubaubh€)r¿A}rÀA(hWXThis field is optional.rÁAhXj³Ahchdheh„hg}rÂA(hi]hj]hk]hl]ho]uhqMŠ hrhhs]rÃAh|XThis field is optional.rÄA…rÅA}rÆA(hWjÁAhcNhqNhrhhXj¿Aubaubeubeubjü)rÇA}rÈA(hWUhXjE?hchdhejÿhg}rÉA(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rÊA}rËA(hWUhXjE?hchdhejhg}rÌA(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrÍAj jÍAuhqNhrhhs]rÎA(j )rÏA}rÐA(hWX tag: tokenhXjÊAhchdhejhg}rÑA(hl]rÒAXpkg-field-source-repository-tagrÓAahk]hi]hj]ho]j‰uhqM” hrhhs]rÔA(jü)rÕA}rÖA(hWUhXjÏAhchdhejÿhg}r×A(hl]hk]hi]hj]ho]Uentries]rØA(jX*source-repository:tag; package.cabal fieldjÓAUNtrÙAauhqM” hrhhs]ubj)rÚA}rÛA(hWXtagrÜAhXjÏAhchdhejhg}rÝA(jÔjÕhl]hk]hi]hj]ho]uhqM” hrhhs]rÞAh|XtagrßA…ràA}ráA(hWUhcNhqNhrhhXjÚAubaubj%)râA}rãA(hWjžhXjÏAhchdhej(hg}räA(jÔjÕhl]hk]hi]hj]ho]uhqM” hrhhs]råAh|X: ræA…rçA}rèA(hWUhcNhqNhrhhXjâAubaubj¤)réA}rêA(hWXtokenhXjÏAhchdhej§hg}rëA(jÔjÕhl]hk]hi]hj]ho]uhqM” hrhhs]rìAh|XtokenríA…rîA}rïA(hWUhcNhqNhrhhXjéAubaubeubj-)rðA}rñA(hWUhXjÊAhchdhej0hg}ròA(hi]hj]hk]hl]ho]uhqM” hrhhs]róA(h€)rôA}rõA(hWX 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.hXjðAhchdheh„hg}röA(hi]hj]hk]hl]ho]uhqMŽ hrhhs]r÷A(h|XWA tag identifies a particular state of a source repository. The tag can be used with a røA…rùA}rúA(hWXWA tag identifies a particular state of a source repository. The tag can be used with a hcNhqNhrhhXjôAubhâ)rûA}rüA(hWX``this``hg}rýA(hi]hj]hk]hl]ho]uhXjôAhs]rþAh|XthisrÿA…rB}rB(hWUhXjûAubahehêubh|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.rB…rB}rB(hWXª 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.hcNhqNhrhhXjôAubeubh€)rB}rB(hWX8This field is required for the ``this`` repository kind.hXjðAhchdheh„hg}rB(hi]hj]hk]hl]ho]uhqM“ hrhhs]rB(h|XThis field is required for the r B…r B}r B(hWXThis field is required for the hcNhqNhrhhXjBubhâ)r B}r B(hWX``this``hg}rB(hi]hj]hk]hl]ho]uhXjBhs]rBh|XthisrB…rB}rB(hWUhXj Bubahehêubh|X repository kind.rB…rB}rB(hWX repository kind.hcNhqNhrhhXjBubeubeubeubjü)rB}rB(hWUhXjE?hchdhejÿhg}rB(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rB}rB(hWUhXjE?hchdhejhg}rB(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrBj jBuhqNhrhhs]rB(j )rB}rB(hWXsubdir: directoryhXjBhchdhejhg}r B(hl]r!BX"pkg-field-source-repository-subdirr"Bahk]hi]hj]ho]j‰uhqMŸ hrhhs]r#B(jü)r$B}r%B(hWUhXjBhchdhejÿhg}r&B(hl]hk]hi]hj]ho]Uentries]r'B(jX-source-repository:subdir; package.cabal fieldj"BUNtr(BauhqMŸ hrhhs]ubj)r)B}r*B(hWXsubdirr+BhXjBhchdhejhg}r,B(jÔjÕhl]hk]hi]hj]ho]uhqMŸ hrhhs]r-Bh|Xsubdirr.B…r/B}r0B(hWUhcNhqNhrhhXj)Bubaubj%)r1B}r2B(hWjžhXjBhchdhej(hg}r3B(jÔjÕhl]hk]hi]hj]ho]uhqMŸ hrhhs]r4Bh|X: r5B…r6B}r7B(hWUhcNhqNhrhhXj1Bubaubj¤)r8B}r9B(hWX directoryhXjBhchdhej§hg}r:B(jÔjÕhl]hk]hi]hj]ho]uhqMŸ hrhhs]r;Bh|X directoryrB(hWUhcNhqNhrhhXj8Bubaubeubj-)r?B}r@B(hWUhXjBhchdhej0hg}rAB(hi]hj]hk]hl]ho]uhqMŸ hrhhs]rBB(h€)rCB}rDB(hWXSome 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 ``.cabal`` file.hXj?Bhchdheh„hg}rEB(hi]hj]hk]hl]ho]uhqM— hrhhs]rFB(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 rGB…rHB}rIB(hWXö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 hcNhqNhrhhXjCBubhâ)rJB}rKB(hWX ``.cabal``hg}rLB(hi]hj]hk]hl]ho]uhXjCBhs]rMBh|X.cabalrNB…rOB}rPB(hWUhXjJBubahehêubh|X file.rQB…rRB}rSB(hWX file.hcNhqNhrhhXjCBubeubh€)rTB}rUB(hWXfThis field is optional. It default to empty which corresponds to the root directory of the repository.rVBhXj?Bhchdheh„hg}rWB(hi]hj]hk]hl]ho]uhqM hrhhs]rXBh|XfThis field is optional. It default to empty which corresponds to the root directory of the repository.rYB…rZB}r[B(hWjVBhcNhqNhrhhXjTBubaubeubeubeubhY)r\B}r]B(hWUhXh_hchdhehfhg}r^B(hi]hj]hk]hl]r_BUdownloading-a-package-s-sourcer`Baho]raBh auhqM¡ hrhhs]rbB(hu)rcB}rdB(hWXDownloading a package's sourcereBhXj\Bhchdhehyhg}rfB(hi]hj]hk]hl]ho]uhqM¡ hrhhs]rgBh|X Downloading a package’s sourcerhB…riB}rjB(hWjeBhcNhqNhrhhXjcBubaubh€)rkB}rlB(hWXÐ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.hXj\Bhchdheh„hg}rmB(hi]hj]hk]hl]ho]uhqM£ hrhhs]rnB(h|XThe roB…rpB}rqB(hWXThe hcNhqNhrhhXjkBubhâ)rrB}rsB(hWX ``cabal get``hg}rtB(hi]hj]hk]hl]ho]uhXjkBhs]ruBh|X cabal getrvB…rwB}rxB(hWUhXjrBubahehêubh|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.ryB…rzB}r{B(hWX¿ 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.hcNhqNhrhhXjkBubeubjÏ)r|B}r}B(hWX$ cabal get [FLAGS] PACKAGEShXj\BhchdhejÒhg}r~B(jÔjÕhl]hk]hi]hj]ho]uhqM© hrhhs]rBh|X$ cabal get [FLAGS] PACKAGESr€B…rB}r‚B(hWUhXj|Bubaubh€)rƒB}r„B(hWX3The ``get`` command supports the following options:r…BhXj\Bhchdheh„hg}r†B(hi]hj]hk]hl]ho]uhqM« hrhhs]r‡B(h|XThe rˆB…r‰B}rŠB(hWXThe hcNhqNhrhhXjƒBubhâ)r‹B}rŒB(hWX``get``hg}rB(hi]hj]hk]hl]ho]uhXjƒBhs]rŽBh|XgetrB…rB}r‘B(hWUhXj‹Bubahehêubh|X( command supports the following options:r’B…r“B}r”B(hWX( command supports the following options:hcNhqNhrhhXjƒBubeubj)r•B}r–B(hWUhXj\Bhchdhejhg}r—B(hi]hj]hk]hl]ho]uhqNhrhhs]r˜B(j)r™B}ršB(hWXq``-d --destdir`` *PATH* Where to place the package source, defaults to (a subdirectory of) the current directory.hXj•Bhchdhejhg}r›B(hi]hj]hk]hl]ho]uhqM® hs]rœB(j)rB}ržB(hWX``-d --destdir`` *PATH*rŸBhXj™Bhchdhej#hg}r B(hi]hj]hk]hl]ho]uhqM® hs]r¡B(hâ)r¢B}r£B(hWX``-d --destdir``hg}r¤B(hi]hj]hk]hl]ho]uhXjBhs]r¥Bh|X -d --destdirr¦B…r§B}r¨B(hWUhXj¢Bubahehêubh|X …r©B}rªB(hWX hXjBubhÂ)r«B}r¬B(hWX*PATH*hg}r­B(hi]hj]hk]hl]ho]uhXjBhs]r®Bh|XPATHr¯B…r°B}r±B(hWUhXj«BubahehÊubeubj6)r²B}r³B(hWUhg}r´B(hi]hj]hk]hl]ho]uhXj™Bhs]rµBh€)r¶B}r·B(hWXYWhere to place the package source, defaults to (a subdirectory of) the current directory.r¸BhXj²Bhchdheh„hg}r¹B(hi]hj]hk]hl]ho]uhqM® hs]rºBh|XYWhere to place the package source, defaults to (a subdirectory of) the current directory.r»B…r¼B}r½B(hWj¸BhXj¶BubaubahejPubeubj)r¾B}r¿B(hWXÄ``-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.hXj•Bhchdhejhg}rÀB(hi]hj]hk]hl]ho]uhqM² hrhhs]rÁB(j)rÂB}rÃB(hWX.``-s --source-repository`` *[head\|this\|...]*rÄBhXj¾Bhchdhej#hg}rÅB(hi]hj]hk]hl]ho]uhqM² hs]rÆB(hâ)rÇB}rÈB(hWX``-s --source-repository``hg}rÉB(hi]hj]hk]hl]ho]uhXjÂBhs]rÊBh|X-s --source-repositoryrËB…rÌB}rÍB(hWUhXjÇBubahehêubh|X …rÎB}rÏB(hWX hXjÂBubhÂ)rÐB}rÑB(hWX*[head\|this\|...]*hg}rÒB(hi]hj]hk]hl]ho]uhXjÂBhs]rÓBh|X[head|this|…]rÔB…rÕB}rÖB(hWUhXjÐBubahehÊubeubj6)r×B}rØB(hWUhg}rÙB(hi]hj]hk]hl]ho]uhXj¾Bhs]rÚBh€)rÛB}rÜB(hWX•Fork the package's source repository using the appropriate version control system. The optional argument allows to choose a specific repository kind.rÝBhXj×Bhchdheh„hg}rÞB(hi]hj]hk]hl]ho]uhqM± hs]rßBh|X—Fork the package’s source repository using the appropriate version control system. The optional argument allows to choose a specific repository kind.ràB…ráB}râB(hWjÝBhXjÛBubaubahejPubeubj)rãB}räB(hWX’``--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).hXj•Bhchdhejhg}råB(hi]hj]hk]hl]ho]uhqM¸ hrhhs]ræB(j)rçB}rèB(hWXF``--index-state`` *[HEAD\|@\|]*réBhXjãBhchdhej#hg}rêB(hi]hj]hk]hl]ho]uhqM¸ hs]rëB(hâ)rìB}ríB(hWX``--index-state``hg}rîB(hi]hj]hk]hl]ho]uhXjçBhs]rïBh|X --index-staterðB…rñB}ròB(hWUhXjìBubahehêubh|X …róB}rôB(hWX hXjçBubhÂ)rõB}röB(hWX4*[HEAD\|@\|]*hg}r÷B(hi]hj]hk]hl]ho]uhXjçBhs]røBh|X0[HEAD|@|]rùB…rúB}rûB(hWUhXjõBubahehÊubeubj6)rüB}rýB(hWUhg}rþB(hi]hj]hk]hl]ho]uhXjãBhs]rÿBh€)rC}rC(hWXKUse 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).hXjüBhchdheh„hg}rC(hi]hj]hk]hl]ho]uhqMµ hs]rC(h|X_Use source package index state as it existed at a previous time. Accepts unix-timestamps (e.g. rC…rC}rC(hWX_Use source package index state as it existed at a previous time. Accepts unix-timestamps (e.g. hXjCubhâ)rC}rC(hWX``@1474732068``hg}r C(hi]hj]hk]hl]ho]uhXjChs]r Ch|X @1474732068r C…r C}r C(hWUhXjCubahehêubh|X ), ISO8601 UTC timestamps (e.g. rC…rC}rC(hWX ), ISO8601 UTC timestamps (e.g. hXjCubhâ)rC}rC(hWX``2016-09-24T17:47:48Z``hg}rC(hi]hj]hk]hl]ho]uhXjChs]rCh|X2016-09-24T17:47:48ZrC…rC}rC(hWUhXjCubahehêubh|X), or rC…rC}rC(hWX), or hXjCubhâ)rC}rC(hWX``HEAD``hg}rC(hi]hj]hk]hl]ho]uhXjChs]rCh|XHEADrC…r C}r!C(hWUhXjCubahehêubh|XR (default). This determines which package versions are available as well as which r"C…r#C}r$C(hWXR (default). This determines which package versions are available as well as which hXjCubhâ)r%C}r&C(hWX ``.cabal``hg}r'C(hi]hj]hk]hl]ho]uhXjChs]r(Ch|X.cabalr)C…r*C}r+C(hWUhXj%Cubahehêubh|X# file revision is selected (unless r,C…r-C}r.C(hWX# file revision is selected (unless hXjCubhâ)r/C}r0C(hWX``--pristine``hg}r1C(hi]hj]hk]hl]ho]uhXjChs]r2Ch|X --pristiner3C…r4C}r5C(hWUhXj/Cubahehêubh|X is used).r6C…r7C}r8C(hWX is used).hXjCubeubahejPubeubj)r9C}r:C(hWX‘``--pristine`` Unpack the original pristine tarball, rather than updating the ``.cabal`` file with the latest revision from the package archive. hXj•Bhchdhejhg}r;C(hi]hj]hk]hl]ho]uhqM¼ hrhhs]rC(hWX``--pristine``r?ChXj9Chchdhej#hg}r@C(hi]hj]hk]hl]ho]uhqM¼ hs]rAChâ)rBC}rCC(hWj?Chg}rDC(hi]hj]hk]hl]ho]uhXj=Chs]rECh|X --pristinerFC…rGC}rHC(hWUhXjBCubahehêubaubj6)rIC}rJC(hWUhg}rKC(hi]hj]hk]hl]ho]uhXj9Chs]rLCh€)rMC}rNC(hWXUnpack the original pristine tarball, rather than updating the ``.cabal`` file with the latest revision from the package archive.hXjIChchdheh„hg}rOC(hi]hj]hk]hl]ho]uhqM» hs]rPC(h|X?Unpack the original pristine tarball, rather than updating the rQC…rRC}rSC(hWX?Unpack the original pristine tarball, rather than updating the hXjMCubhâ)rTC}rUC(hWX ``.cabal``hg}rVC(hi]hj]hk]hl]ho]uhXjMChs]rWCh|X.cabalrXC…rYC}rZC(hWUhXjTCubahehêubh|X8 file with the latest revision from the package archive.r[C…r\C}r]C(hWX8 file with the latest revision from the package archive.hXjMCubeubahejPubeubeubeubeubhchdhehfhg}r^C(hi]hj]hk]hl]r_CU benchmarksr`Caho]raChJauhqMËhrhhs]rbC(hu)rcC}rdC(hWX BenchmarksreChXh]hchdhehyhg}rfC(hi]hj]hk]hl]ho]uhqMËhrhhs]rgCh|X BenchmarksrhC…riC}rjC(hWjeChcNhqNhrhhXjcCubaubjü)rkC}rlC(hWUhXh]hchdhejÿhg}rmC(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rnC}roC(hWUhXh]hchdhejhg}rpC(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-sectionrqCj jqCuhqNhrhhs]rrC(j )rsC}rtC(hWXbenchmark namehXjnChchdhejhg}ruC(hl]rvCXpkg-section-benchmark-benchmarkrwCahk]hi]hj]ho]j‰uhqNhrhhs]rxC(jü)ryC}rzC(hWUhXjsChchdhejÿhg}r{C(hl]hk]hi]hj]ho]Uentries]r|C(jX*benchmark:benchmark; package.cabal sectionjwCUNtr}CauhqNhrhhs]ubj)r~C}rC(hWX benchmarkr€ChXjsChchdhejhg}rC(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]r‚Ch|X benchmarkrƒC…r„C}r…C(hWUhcNhqNhrhhXj~Cubaubj%)r†C}r‡C(hWU hXjsChchdhej(hg}rˆC(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]r‰Ch|X …rŠC}r‹C(hWUhcNhqNhrhhXj†Cubaubj¤)rŒC}rC(hWXnamehXjsChchdhej§hg}rŽC(jÔjÕhl]hk]hi]hj]ho]uhqNhrhhs]rCh|XnamerC…r‘C}r’C(hWUhcNhqNhrhhXjŒCubaubeubj-)r“C}r”C(hWUhXjnChchdhej0hg}r•C(hi]hj]hk]hl]ho]uhqNhrhhs]r–C(j3)r—C}r˜C(hWUhXj“Chchdhej6hg}r™C(hi]hj]hk]hl]ho]uhqNhrhhs]ršCj9)r›C}rœC(hWUhXj—Chchdhej<hg}rC(hi]hj]hk]hl]ho]uhqNhrhhs]ržC(j?)rŸC}r C(hWjBhXj›ChchdhejChg}r¡C(hi]hj]hk]hl]ho]uhqKhs]r¢Ch|XSincer£C…r¤C}r¥C(hWUhXjŸCubaubjI)r¦C}r§C(hWU Cabal 1.9.2r¨Chg}r©C(hi]hj]hk]hl]ho]uhXj›Chs]rªCh€)r«C}r¬C(hWj¨Chg}r­C(hi]hj]hk]hl]ho]uhXj¦Chs]r®Ch|X Cabal 1.9.2r¯C…r°C}r±C(hWUhXj«Cubaheh„ubahejVubeubaubh€)r²C}r³C(hWX¶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´ChXj“Chchdheh„hg}rµC(hi]hj]hk]hl]ho]uhqMÑhrhhs]r¶Ch|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·C…r¸C}r¹C(hWj´ChcNhqNhrhhXj²Cubaubeubeubh€)rºC}r»C(hWX‰The benchmark may be described using the following fields, as well as build information fields (see the section on `build information`_).hXh]hchdheh„hg}r¼C(hi]hj]hk]hl]ho]uhqMÙhrhhs]r½C(h|XsThe benchmark may be described using the following fields, as well as build information fields (see the section on r¾C…r¿C}rÀC(hWXsThe benchmark may be described using the following fields, as well as build information fields (see the section on hcNhqNhrhhXjºCubjB)rÁC}rÂC(hWX`build information`_jEKhXjºChejFhg}rÃC(UnameXbuild informationhl]hk]hi]hj]ho]jHjZuhs]rÄCh|Xbuild informationrÅC…rÆC}rÇC(hWUhXjÁCubaubh|X).rÈC…rÉC}rÊC(hWX).hcNhqNhrhhXjºCubeubjü)rËC}rÌC(hWUhXh]hchdhejÿhg}rÍC(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rÎC}rÏC(hWUhXh]hchdhejhg}rÐC(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrÑCj jÑCuhqNhrhhs]rÒC(j )rÓC}rÔC(hWXtype: interface (required)hXjÎChchdhejhg}rÕC(hl]rÖCXpkg-field-benchmark-typer×Cahk]hi]hj]ho]j‰uhqMàhrhhs]rØC(jü)rÙC}rÚC(hWUhXjÓChchdhejÿhg}rÛC(hl]hk]hi]hj]ho]Uentries]rÜC(jX#benchmark:type; package.cabal fieldj×CUNtrÝCauhqMàhrhhs]ubj)rÞC}rßC(hWXtyperàChXjÓChchdhejhg}ráC(jÔjÕhl]hk]hi]hj]ho]uhqMàhrhhs]râCh|XtyperãC…räC}råC(hWUhcNhqNhrhhXjÞCubaubj%)ræC}rçC(hWjžhXjÓChchdhej(hg}rèC(jÔjÕhl]hk]hi]hj]ho]uhqMàhrhhs]réCh|X: rêC…rëC}rìC(hWUhcNhqNhrhhXjæCubaubj¤)ríC}rîC(hWXinterface (required)hXjÓChchdhej§hg}rïC(jÔjÕhl]hk]hi]hj]ho]uhqMàhrhhs]rðCh|Xinterface (required)rñC…ròC}róC(hWUhcNhqNhrhhXjíCubaubeubj-)rôC}rõC(hWUhXjÎChchdhej0hg}röC(hi]hj]hk]hl]ho]uhqMàhrhhs]r÷Ch€)røC}rùC(hWX‰The interface type and version of the benchmark. At the moment Cabal only support one benchmark interface, called ``exitcode-stdio-1.0``.hXjôChchdheh„hg}rúC(hi]hj]hk]hl]ho]uhqMÞhrhhs]rûC(h|XrThe interface type and version of the benchmark. At the moment Cabal only support one benchmark interface, called rüC…rýC}rþC(hWXrThe interface type and version of the benchmark. At the moment Cabal only support one benchmark interface, called hcNhqNhrhhXjøCubhâ)rÿC}rD(hWX``exitcode-stdio-1.0``hg}rD(hi]hj]hk]hl]ho]uhXjøChs]rDh|Xexitcode-stdio-1.0rD…rD}rD(hWUhXjÿCubahehêubh|X.…rD}rD(hWX.hcNhqNhrhhXjøCubeubaubeubh€)rD}r D(hWXð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.hXh]hchdheh„hg}r D(hi]hj]hk]hl]ho]uhqMáhrhhs]r D(h|XBenchmarks using the r D…r D}rD(hWXBenchmarks using the hcNhqNhrhhXjDubhâ)rD}rD(hWX``exitcode-stdio-1.0``hg}rD(hi]hj]hk]hl]ho]uhXjDhs]rDh|Xexitcode-stdio-1.0rD…rD}rD(hWUhXjDubahehêubh|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.rD…rD}rD(hWXÅ 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.hcNhqNhrhhXjDubeubjü)rD}rD(hWUhXh]hchdhejÿhg}rD(hl]hk]hi]hj]ho]Uentries]uhqNhrhhs]ubj)rD}rD(hWUhXh]hchdhejhg}rD(j‰jXcabalhl]hk]hi]hj]ho]jX pkg-fieldrDj jDuhqNhrhhs]r D(j )r!D}r"D(hWXmain-is: filenamehXjDhchdhejhg}r#D(hl]r$DXpkg-field-benchmark-main-isr%Dahk]hi]hj]ho]j‰uhqMñhrhhs]r&D(jü)r'D}r(D(hWUhXj!Dhchdhejÿhg}r)D(hl]hk]hi]hj]ho]Uentries]r*D(jX&benchmark:main-is; package.cabal fieldj%DUNtr+DauhqMñhrhhs]ubj)r,D}r-D(hWXmain-isr.DhXj!Dhchdhejhg}r/D(jÔjÕhl]hk]hi]hj]ho]uhqMñhrhhs]r0Dh|Xmain-isr1D…r2D}r3D(hWUhcNhqNhrhhXj,Dubaubj%)r4D}r5D(hWjžhXj!Dhchdhej(hg}r6D(jÔjÕhl]hk]hi]hj]ho]uhqMñhrhhs]r7Dh|X: r8D…r9D}r:D(hWUhcNhqNhrhhXj4Dubaubj¤)r;D}rDh|Xfilenamer?D…r@D}rAD(hWUhcNhqNhrhhXj;Dubaubeubj-)rBD}rCD(hWUhXjDhchdhej0hg}rDD(hi]hj]hk]hl]ho]uhqMñhrhhs]rED(j3)rFD}rGD(hWUhXjBDhchdhej6hg}rHD(hi]hj]hk]hl]ho]uhqNhrhhs]rIDj9)rJD}rKD(hWUhXjFDhchdhej<hg}rLD(hi]hj]hk]hl]ho]uhqMèhrhhs]rMD(j?)rND}rOD(hWXrequiredhXjJDhchdhejChg}rPD(hi]hj]hk]hl]ho]uhqKhs]rQDh|XRequiredrRD…rSD}rTD(hWUhXjNDubaubjI)rUD}rVD(hWX``exitcode-stdio-1.0`` hg}rWD(hi]hj]hk]hl]ho]uhXjJDhs]rXDh€)rYD}rZD(hWX``exitcode-stdio-1.0``r[DhXjUDhchdheh„hg}r\D(hi]hj]hk]hl]ho]uhqMèhs]r]Dhâ)r^D}r_D(hWj[Dhg}r`D(hi]hj]hk]hl]ho]uhXjYDhs]raDh|Xexitcode-stdio-1.0rbD…rcD}rdD(hWUhXj^DubahehêubaubahejVubeubaubh€)reD}rfD(hWX¼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``.hXjBDhchdheh„hg}rgD(hi]hj]hk]hl]ho]uhqMêhrhhs]rhD(h|XThe name of the riD…rjD}rkD(hWXThe name of the hcNhqNhrhhXjeDubhâ)rlD}rmD(hWX``.hs``hg}rnD(hi]hj]hk]hl]ho]uhXjeDhs]roDh|X.hsrpD…rqD}rrD(hWUhXjlDubahehêubh|X or rsD…rtD}ruD(hWX or hcNhqNhrhhXjeDubhâ)rvD}rwD(hWX``.lhs``hg}rxD(hi]hj]hk]hl]ho]uhXjeDhs]ryDh|X.lhsrzD…r{D}r|D(hWUhXjvDubahehêubh|X file containing the r}D…r~D}rD(hWX file containing the hcNhqNhrhhXjeDubhâ)r€D}rD(hWX``Main``hg}r‚D(hi]hj]hk]hl]ho]uhXjeDhs]rƒDh|XMainr„D…r…D}r†D(hWUhXj€Dubahehêubh|X module. Note that it is the r‡D…rˆD}r‰D(hWX module. Note that it is the hcNhqNhrhhXjeDubhâ)rŠD}r‹D(hWX``.hs``hg}rŒD(hi]hj]hk]hl]ho]uhXjeDhs]rDh|X.hsrŽD…rD}rD(hWUhXjŠDubahehêubh|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 r‘D…r’D}r“D(hWX™ 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 hcNhqNhrhhXjeDubjn)r”D}r•D(hWX:pkg-field:`hs-source-dirs`r–DhXjeDhchdhejrhg}r—D(UreftypeX pkg-fieldjtˆjuXhs-source-dirsU refdomainXcabalr˜Dhl]hk]U refexplicit‰hi]hj]ho]jwjxjŽX benchmarkr™DuhqMêhs]ršDhâ)r›D}rœD(hWj–Dhg}rD(hi]hj]ržD(jj˜DXcabal-pkg-fieldrŸDehk]hl]ho]uhXj”Dhs]r Dh|Xhs-source-dirsr¡D…r¢D}r£D(hWUhXj›Dubahehêubaubh|X!. This field is analogous to the r¤D…r¥D}r¦D(hWX!. This field is analogous to the hcNhqNhrhhXjeDubhâ)r§D}r¨D(hWX ``main-is``hg}r©D(hi]hj]hk]hl]ho]uhXjeDhs]rªDh|Xmain-isr«D…r¬D}r­D(hWUhXj§Dubahehêubh|Xo field of an executable section. Further, while the name of the file may vary, the module itself must be named r®D…r¯D}r°D(hWXo field of an executable section. Further, while the name of the file may vary, the module itself must be named hcNhqNhrhhXjeDubhâ)r±D}r²D(hWX``Main``hg}r³D(hi]hj]hk]hl]ho]uhXjeDhs]r´Dh|XMainrµD…r¶D}r·D(hWUhXj±Dubahehêubh|X.…r¸D}r¹D(hWX.hcNhqNhrhhXjeDubeubeubeubhZhY)rºD}r»D(hWUhXh]hchdhehfhg}r¼D(hi]hj]hk]hl]r½DUrunning-benchmarksr¾Daho]r¿Dh(auhqMhrhhs]rÀD(hu)rÁD}rÂD(hWXRunning benchmarksrÃDhXjºDhchdhehyhg}rÄD(hi]hj]hk]hl]ho]uhqMhrhhs]rÅDh|XRunning benchmarksrÆD…rÇD}rÈD(hWjÃDhcNhqNhrhhXjÁDubaubh€)rÉD}rÊD(hWXJYou can have Cabal run your benchmark using its built-in benchmark runner:rËDhXjºDhchdheh„hg}rÌD(hi]hj]hk]hl]ho]uhqMhrhhs]rÍDh|XJYou can have Cabal run your benchmark using its built-in benchmark runner:rÎD…rÏD}rÐD(hWjËDhcNhqNhrhhXjÉDubaubjÏ)rÑD}rÒD(hWXA$ cabal configure --enable-benchmarks $ cabal build $ cabal benchhXjºDhchdhejÒhg}rÓD(jÔjÕhl]hk]hi]hj]ho]uhqM!hrhhs]rÔDh|XA$ cabal configure --enable-benchmarks $ cabal build $ cabal benchrÕD…rÖD}r×D(hWUhXjÑDubaubh€)rØD}rÙD(hWX]See the output of ``cabal help bench`` for a list of options you can pass to ``cabal bench``.hXjºDhchdheh„hg}rÚD(hi]hj]hk]hl]ho]uhqM%hrhhs]rÛD(h|XSee the output of rÜD…rÝD}rÞD(hWXSee the output of hcNhqNhrhhXjØDubhâ)rßD}ràD(hWX``cabal help bench``hg}ráD(hi]hj]hk]hl]ho]uhXjØDhs]râDh|Xcabal help benchrãD…räD}råD(hWUhXjßDubahehêubh|X' for a list of options you can pass to ræD…rçD}rèD(hWX' for a list of options you can pass to hcNhqNhrhhXjØDubhâ)réD}rêD(hWX``cabal bench``hg}rëD(hi]hj]hk]hl]ho]uhXjØDhs]rìDh|X cabal benchríD…rîD}rïD(hWUhXjéDubahehêubh|X.…rðD}rñD(hWX.hcNhqNhrhhXjØDubeubeubeubhchdhehfhg}ròD(hi]róDjQ#ahj]hk]hl]rôDUid1rõDaho]uhqMóhrhhs]röD(hu)r÷D}røD(hWX7Example: Package using ``exitcode-stdio-1.0`` interfacerùDhXhZhchdhehyhg}rúD(hi]hj]hk]hl]ho]uhqMóhrhhs]rûD(h|XExample: Package using rüD…rýD}rþD(hWXExample: Package using rÿDhcNhqNhrhhXj÷Dubhâ)rE}rE(hWX``exitcode-stdio-1.0``rEhg}rE(hi]hj]hk]hl]ho]uhXj÷Dhs]rEh|Xexitcode-stdio-1.0rE…rE}rE(hWUhXjEubahehêubh|X interfacerE…r E}r E(hWX interfacer EhcNhqNhrhhXj÷Dubeubh€)r E}r E(hWX}The example package description and executable source file below demonstrate the use of the ``exitcode-stdio-1.0`` interface.hXhZhchdheh„hg}rE(hi]hj]hk]hl]ho]uhqMõhrhhs]rE(h|X\The example package description and executable source file below demonstrate the use of the rE…rE}rE(hWX\The example package description and executable source file below demonstrate the use of the hcNhqNhrhhXj Eubhâ)rE}rE(hWX``exitcode-stdio-1.0``hg}rE(hi]hj]hk]hl]ho]uhXj Ehs]rEh|Xexitcode-stdio-1.0rE…rE}rE(hWUhXjEubahehêubh|X interface.rE…rE}rE(hWX interface.hcNhqNhrhhXj Eubeubj{#)rE}rE(hWUh\KhXhZhcUhej~#hg}rE(hl]r EUfoo-bench-cabalr!Eahk]hi]r"Eh4ahj]r#Ejƒ#aho]U literal_blockˆuhqNhrhhs]r$E(j…#)r%E}r&E(hWX foo.cabalr'EhXjEhchdhej‰#hg}r(E(hi]hj]hk]hl]ho]uhqMøhs]r)Eh|X foo.cabalr*E…r+E}r,E(hWj'EhXj%EubaubjÏ)r-E}r.E(hWXû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.7hXjEhchdhejÒhg}r/E(j‰jXcabaljÔjÕhl]hk]hi]j}hj]ho]uhqMøhs]r0Eh|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.7r1E…r2E}r3E(hWUhXj-Eubaubeubj{#)r4E}r5E(hWUhXhZhcUhej~#hg}r6E(hl]r7EUid7r8Eahk]hi]hj]r9Ejƒ#aho]U literal_blockˆuhqNhrhhs]r:E(j…#)r;E}rE(hi]hj]hk]hl]ho]uhqMhs]r?Eh|X bench-foo.hsr@E…rAE}rBE(hWj=EhXj;EubaubjÏ)rCE}rDE(hWX {-# 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)hXj4EhchdhejÒhg}rEE(j‰jXhaskelljÔjÕhl]hk]hi]j}hj]ho]uhqMhs]rFEh|X {-# 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)rGE…rHE}rIE(hWUhXjCEubaubeubeubhchdheUsystem_messagerJEhg}rKE(hi]UlevelKhl]hk]rLEjõDaUsourcehdhj]ho]UlineMóUtypeUINFOrMEuhqMóhrhhs]rNEh€)rOE}rPE(hWXVDuplicate implicit target name: "example: package using exitcode-stdio-1.0 interface".hg}rQE(hi]hj]hk]hl]ho]uhXhUhs]rREh|XZDuplicate implicit target name: “example: package using exitcode-stdio-1.0 interfaceâ€.rSE…rTE}rUE(hWUhXjOEubaheh„ubaubhT)rVE}rWE(hWUhXj˜9hchdhejJEhg}rXE(hi]UlevelKhl]hk]rYEj9aUsourcehdhj]ho]UlineM·UtypejMEuhqM·hrhhs]rZEh€)r[E}r\E(hWXbDuplicate implicit target name: "example: a package containing a library and executable programs".hg}r]E(hi]hj]hk]hl]ho]uhXjVEhs]r^Eh|XfDuplicate implicit target name: “example: a package containing a library and executable programsâ€.r_E…r`E}raE(hWUhXj[Eubaheh„ubaubeUcurrent_sourcerbENU decorationrcENUautofootnote_startrdEKUnameidsreE}rfE(hjzhj hjÀh U quickstartrgEh jÞh Uthe-point-of-packagesrhEh U6explicit-dependencies-and-automatic-package-managementriEh j`BhjIhjÈhj !hj‡>hUmodules-included-in-the-packagerjEhjGhj3hjÎhjU hjhhjhUediting-the-cabal-filerkEhjóhj´ hj“hj9hj©hj>h j0h!jh"Ubuilding-the-packagerlEh#j?h$hnh%j!h&j&h'j¤=h(j¾Dh)jð9h*jº;h+j@h,j-h-jK$h.jI?h/j°#h0j‘h1jh2j0&h3Upackage-names-and-versionsrmEh4j!Eh5j~/h6jüh7jÚ9h8j{ h9U next-stepsrnEh:Uunit-of-distributionroEh;U$modules-imported-from-other-packagesrpEhNh?j/h@Uusing-cabal-initrqEhAU portabilityrrEhBj$hCjZhDU'kinds-of-package-cabal-vs-ghc-vs-systemrsEhEUpackage-conceptsrtEhFj1:hGj±hHjhIjÝhJj`ChKNhLjhMjÇhNjhOjÎuhs]ruE(hY)rvE}rwE(hWUhXhhchdhehfhg}rxE(hi]hj]hk]hl]ryEjgEaho]rzEh auhqKhrhhs]r{E(hu)r|E}r}E(hWX Quickstartr~EhXjvEhchdhehyhg}rE(hi]hj]hk]hl]ho]uhqKhrhhs]r€Eh|X QuickstartrE…r‚E}rƒE(hWj~EhcNhqNhrhhXj|Eubaubh€)r„E}r…E(hWXYLets assume we have created a project directory and already have a Haskell module or two.r†EhXjvEhchdheh„hg}r‡E(hi]hj]hk]hl]ho]uhqKhrhhs]rˆEh|XYLets assume we have created a project directory and already have a Haskell module or two.r‰E…rŠE}r‹E(hWj†EhcNhqNhrhhXj„Eubaubh€)rŒE}rE(hWX>Every project needs a name, we'll call this example "proglet".rŽEhXjvEhchdheh„hg}rE(hi]hj]hk]hl]ho]uhqKhrhhs]rEh|XDEvery project needs a name, we’ll call this example “progletâ€.r‘E…r’E}r“E(hWjŽEhcNhqNhrhhXjŒEubaubcsphinx.addnodes highlightlang r”E)r•E}r–E(hWUhXjvEhchdheU highlightlangr—Ehg}r˜E(UlangXconsoleUlinenothresholdI9223372036854775807 hl]hk]hi]hj]ho]uhqK hrhhs]ubjÏ)r™E}ršE(hWX$ cd proglet/ $ ls Proglet.hshXjvEhchdhejÒhg}r›E(jÔjÕhl]hk]hi]hj]ho]uhqK hrhhs]rœEh|X$ cd proglet/ $ ls Proglet.hsrE…ržE}rŸE(hWUhXj™Eubaubh€)r E}r¡E(hWXý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¢EhXjvEhchdheh„hg}r£E(hi]hj]hk]hl]ho]uhqKhrhhs]r¤Eh|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¥E…r¦E}r§E(hWj¢EhcNhqNhrhhXj Eubaubh€)r¨E}r©E(hWXZTo turn this into a Cabal package we need two extra files in the project's root directory:rªEhXjvEhchdheh„hg}r«E(hi]hj]hk]hl]ho]uhqKhrhhs]r¬Eh|X\To turn this into a Cabal package we need two extra files in the project’s root directory:r­E…r®E}r¯E(hWjªEhcNhqNhrhhXj¨EubaubhŠ)r°E}r±E(hWUhXjvEhchdhehhg}r²E(hX-hl]hk]hi]hj]ho]uhqKhrhhs]r³E(h‘)r´E}rµE(hWXF``proglet.cabal``: containing package metadata and build information. hXj°Ehchdheh”hg}r¶E(hi]hj]hk]hl]ho]uhqNhrhhs]r·Eh€)r¸E}r¹E(hWXE``proglet.cabal``: containing package metadata and build information.hXj´Ehchdheh„hg}rºE(hi]hj]hk]hl]ho]uhqKhs]r»E(hâ)r¼E}r½E(hWX``proglet.cabal``hg}r¾E(hi]hj]hk]hl]ho]uhXj¸Ehs]r¿Eh|X proglet.cabalrÀE…rÁE}rÂE(hWUhXj¼Eubahehêubh|X4: containing package metadata and build information.rÃE…rÄE}rÅE(hWX4: containing package metadata and build information.hXj¸Eubeubaubh‘)rÆE}rÇE(hWXg``Setup.hs``: usually containing a few standardized lines of code, but can be customized if necessary. hXj°Ehchdheh”hg}rÈE(hi]hj]hk]hl]ho]uhqNhrhhs]rÉEh€)rÊE}rËE(hWXf``Setup.hs``: usually containing a few standardized lines of code, but can be customized if necessary.hXjÆEhchdheh„hg}rÌE(hi]hj]hk]hl]ho]uhqKhs]rÍE(hâ)rÎE}rÏE(hWX ``Setup.hs``hg}rÐE(hi]hj]hk]hl]ho]uhXjÊEhs]rÑEh|XSetup.hsrÒE…rÓE}rÔE(hWUhXjÎEubahehêubh|XZ: usually containing a few standardized lines of code, but can be customized if necessary.rÕE…rÖE}r×E(hWXZ: usually containing a few standardized lines of code, but can be customized if necessary.hXjÊEubeubaubeubh€)rØE}rÙE(hWXUWe can create both files manually or we can use ``cabal init`` to create them for us.hXjvEhchdheh„hg}rÚE(hi]hj]hk]hl]ho]uhqKhrhhs]rÛE(h|X0We can create both files manually or we can use rÜE…rÝE}rÞE(hWX0We can create both files manually or we can use hcNhqNhrhhXjØEubhâ)rßE}ràE(hWX``cabal init``hg}ráE(hi]hj]hk]hl]ho]uhXjØEhs]râEh|X cabal initrãE…räE}råE(hWUhXjßEubahehêubh|X to create them for us.ræE…rçE}rèE(hWX to create them for us.hcNhqNhrhhXjØEubeubhY)réE}rêE(hWUhXjvEhchdhehfhg}rëE(hi]hj]hk]hl]rìEjqEaho]ríEh@auhqK"hrhhs]rîE(hu)rïE}rðE(hWXUsing "cabal init"rñEhXjéEhchdhehyhg}ròE(hi]hj]hk]hl]ho]uhqK"hrhhs]róEh|XUsing “cabal initâ€rôE…rõE}röE(hWjñEhcNhqNhrhhXjïEubaubh€)r÷E}røE(hWXwThe ``cabal init`` command is interactive. It asks us a number of questions starting with the package name and version.hXjéEhchdheh„hg}rùE(hi]hj]hk]hl]ho]uhqK$hrhhs]rúE(h|XThe rûE…rüE}rýE(hWXThe hcNhqNhrhhXj÷Eubhâ)rþE}rÿE(hWX``cabal init``hg}rF(hi]hj]hk]hl]ho]uhXj÷Ehs]rFh|X cabal initrF…rF}rF(hWUhXjþEubahehêubh|Xe command is interactive. It asks us a number of questions starting with the package name and version.rF…rF}rF(hWXe command is interactive. It asks us a number of questions starting with the package name and version.hcNhqNhrhhXj÷EubeubjÏ)rF}r F(hWXS$ cabal init Package name [default "proglet"]? Package version [default "0.1"]? ...hXjéEhchdhejÒhg}r F(jÔjÕhl]hk]hi]hj]ho]uhqK)hrhhs]r Fh|XS$ cabal init Package name [default "proglet"]? Package version [default "0.1"]? ...r F…r F}rF(hWUhXjFubaubh€)rF}rF(hWX¡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.rFhXjéEhchdheh„hg}rF(hi]hj]hk]hl]ho]uhqK.hrhhs]rFh|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.rF…rF}rF(hWjFhcNhqNhrhhXjFubaubh€)rF}rF(hWXï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.rFhXjéEhchdheh„hg}rF(hi]hj]hk]hl]ho]uhqK2hrhhs]rFh|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.rF…rF}rF(hWjFhcNhqNhrhhXjFubaubjÏ)rF}r F(hWXHWhat does the package build: 1) Library 2) Executable Your choice?hXjéEhchdhejÒhg}r!F(jÔjÕhl]hk]hi]hj]ho]uhqK9hrhhs]r"Fh|XHWhat does the package build: 1) Library 2) Executable Your choice?r#F…r$F}r%F(hWUhXjFubaubh€)r&F}r'F(hWX«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.hXjéEhchdheh„hg}r(F(hi]hj]hk]hl]ho]uhqK>hrhhs]r)F(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 r*F…r+F}r,F(hWX‚For the moment these are the only choices. For more complex packages (e.g. a library and multiple executables or test suites) the hcNhqNhrhhXj&Fubhâ)r-F}r.F(hWX ``.cabal``hg}r/F(hi]hj]hk]hl]ho]uhXj&Fhs]r0Fh|X.cabalr1F…r2F}r3F(hWUhXj-Fubahehêubh|X file can be edited afterwards.r4F…r5F}r6F(hWX file can be edited afterwards.hcNhqNhrhhXj&Fubeubh€)r7F}r8F(hWXšFinally, ``cabal init`` creates the initial ``proglet.cabal`` and ``Setup.hs`` files, and depending on your choice of license, a ``LICENSE`` file as well.hXjéEhchdheh„hg}r9F(hi]hj]hk]hl]ho]uhqKBhrhhs]r:F(h|X Finally, r;F…rF}r?F(hWX``cabal init``hg}r@F(hi]hj]hk]hl]ho]uhXj7Fhs]rAFh|X cabal initrBF…rCF}rDF(hWUhXj>Fubahehêubh|X creates the initial rEF…rFF}rGF(hWX creates the initial hcNhqNhrhhXj7Fubhâ)rHF}rIF(hWX``proglet.cabal``hg}rJF(hi]hj]hk]hl]ho]uhXj7Fhs]rKFh|X proglet.cabalrLF…rMF}rNF(hWUhXjHFubahehêubh|X and rOF…rPF}rQF(hWX and hcNhqNhrhhXj7Fubhâ)rRF}rSF(hWX ``Setup.hs``hg}rTF(hi]hj]hk]hl]ho]uhXj7Fhs]rUFh|XSetup.hsrVF…rWF}rXF(hWUhXjRFubahehêubh|X3 files, and depending on your choice of license, a rYF…rZF}r[F(hWX3 files, and depending on your choice of license, a hcNhqNhrhhXj7Fubhâ)r\F}r]F(hWX ``LICENSE``hg}r^F(hi]hj]hk]hl]ho]uhXj7Fhs]r_Fh|XLICENSEr`F…raF}rbF(hWUhXj\Fubahehêubh|X file as well.rcF…rdF}reF(hWX file as well.hcNhqNhrhhXj7FubeubjÏ)rfF}rgF(hWX‹Generating LICENSE... Generating Setup.hs... Generating proglet.cabal... You may want to edit the .cabal file and add a Description field.hXjéEhchdhejÒhg}rhF(jÔjÕhl]hk]hi]hj]ho]uhqKHhrhhs]riFh|X‹Generating LICENSE... Generating Setup.hs... Generating proglet.cabal... You may want to edit the .cabal file and add a Description field.rjF…rkF}rlF(hWUhXjfFubaubh€)rmF}rnF(hWXÅ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.hXjéEhchdheh„hg}roF(hi]hj]hk]hl]ho]uhqKNhrhhs]rpF(h|XAs this stage the rqF…rrF}rsF(hWXAs this stage the hcNhqNhrhhXjmFubhâ)rtF}ruF(hWX``proglet.cabal``hg}rvF(hi]hj]hk]hl]ho]uhXjmFhs]rwFh|X proglet.cabalrxF…ryF}rzF(hWUhXjtFubahehêubh|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.r{F…r|F}r}F(hWX¢ 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.hcNhqNhrhhXjmFubeubeubhY)r~F}rF(hWUhXjvEhchdhehfhg}r€F(hi]hj]hk]hl]rFjkEaho]r‚FhauhqKShrhhs]rƒF(hu)r„F}r…F(hWXEditing the .cabal filer†FhXj~Fhchdhehyhg}r‡F(hi]hj]hk]hl]ho]uhqKShrhhs]rˆFh|XEditing the .cabal filer‰F…rŠF}r‹F(hWj†FhcNhqNhrhhXj„Fubaubj”E)rŒF}rF(hWUhXj~Fhchdhej—Ehg}rŽF(UlangXcabalUlinenothresholdI9223372036854775807 hl]hk]hi]hj]ho]uhqKVhrhhs]ubh€)rF}rF(hWXÛ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.hXj~Fhchdheh„hg}r‘F(hi]hj]hk]hl]ho]uhqKWhrhhs]r’F(h|X Load up the r“F…r”F}r•F(hWX Load up the hcNhqNhrhhXjFubhâ)r–F}r—F(hWX ``.cabal``hg}r˜F(hi]hj]hk]hl]ho]uhXjFhs]r™Fh|X.cabalršF…r›F}rœF(hWUhXj–Fubahehêubh|X. file in a text editor. The first part of the rF…ržF}rŸF(hWX. file in a text editor. The first part of the hcNhqNhrhhXjFubhâ)r F}r¡F(hWX ``.cabal``hg}r¢F(hi]hj]hk]hl]ho]uhXjFhs]r£Fh|X.cabalr¤F…r¥F}r¦F(hWUhXj Fubahehêubh|XQ file has the package metadata and towards the end of the file you will find the r§F…r¨F}r©F(hWXQ file has the package metadata and towards the end of the file you will find the hcNhqNhrhhXjFubjn)rªF}r«F(hWX:pkg-section:`executable`r¬FhXjFhchdhejrhg}r­F(UreftypeX pkg-sectionjtˆjuX executableU refdomainXcabalr®Fhl]hk]U refexplicit‰hi]hj]ho]jwjxuhqKWhs]r¯Fhâ)r°F}r±F(hWj¬Fhg}r²F(hi]hj]r³F(jj®FXcabal-pkg-sectionr´Fehk]hl]ho]uhXjªFhs]rµFh|X executabler¶F…r·F}r¸F(hWUhXj°Fubahehêubaubh|X or r¹F…rºF}r»F(hWX or hcNhqNhrhhXjFubjn)r¼F}r½F(hWX:pkg-section:`library`r¾FhXjFhchdhejrhg}r¿F(UreftypeX pkg-sectionjtˆjuXlibraryU refdomainXcabalrÀFhl]hk]U refexplicit‰hi]hj]ho]jwjxuhqKWhs]rÁFhâ)rÂF}rÃF(hWj¾Fhg}rÄF(hi]hj]rÅF(jjÀFXcabal-pkg-sectionrÆFehk]hl]ho]uhXj¼Fhs]rÇFh|XlibraryrÈF…rÉF}rÊF(hWUhXjÂFubahehêubaubh|X section.rËF…rÌF}rÍF(hWX section.hcNhqNhrhhXjFubeubh€)rÎF}rÏF(hWX'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.)hXj~Fhchdheh„hg}rÐF(hi]hj]hk]hl]ho]uhqK[hrhhs]rÑF(h|XaYou will see that the fields that have yet to be filled in are commented out. Cabal files use “rÒF…rÓF}rÔF(hWX_You will see that the fields that have yet to be filled in are commented out. Cabal files use "hcNhqNhrhhXjÎFubhâ)rÕF}rÖF(hWX``--``hg}r×F(hi]hj]hk]hl]ho]uhXjÎFhs]rØFh|X--rÙF…rÚF}rÛF(hWUhXjÕFubahehêubh|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.)rÜF…rÝF}rÞF(hWXÂ" 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.)hcNhqNhrhhXjÎFubeubh€)rßF}ràF(hWXwIf you selected earlier to create a library package then your ``.cabal`` file will have a section that looks like this:hXj~Fhchdheh„hg}ráF(hi]hj]hk]hl]ho]uhqKahrhhs]râF(h|X>If you selected earlier to create a library package then your rãF…räF}råF(hWX>If you selected earlier to create a library package then your hcNhqNhrhhXjßFubhâ)ræF}rçF(hWX ``.cabal``hg}rèF(hi]hj]hk]hl]ho]uhXjßFhs]réFh|X.cabalrêF…rëF}rìF(hWUhXjæFubahehêubh|X/ file will have a section that looks like this:ríF…rîF}rïF(hWX/ file will have a section that looks like this:hcNhqNhrhhXjßFubeubjÏ)rðF}rñF(hWXNlibrary exposed-modules: Proglet -- other-modules: -- build-depends:hXj~FhchdhejÒhg}ròF(jÔjÕhl]hk]hi]hj]ho]uhqKfhrhhs]róFh|XNlibrary exposed-modules: Proglet -- other-modules: -- build-depends:rôF…rõF}röF(hWUhXjðFubaubh€)r÷F}røF(hWXOAlternatively, if you selected an executable then there will be a section like:rùFhXj~Fhchdheh„hg}rúF(hi]hj]hk]hl]ho]uhqKkhrhhs]rûFh|XOAlternatively, if you selected an executable then there will be a section like:rüF…rýF}rþF(hWjùFhcNhqNhrhhXj÷FubaubjÏ)rÿF}rG(hWXHexecutable proglet -- main-is: -- other-modules: -- build-depends:hXj~FhchdhejÒhg}rG(jÔjÕhl]hk]hi]hj]ho]uhqKphrhhs]rGh|XHexecutable proglet -- main-is: -- other-modules: -- build-depends:rG…rG}rG(hWUhXjÿFubaubh€)rG}rG(hWX¨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.rGhXj~Fhchdheh„hg}r G(hi]hj]hk]hl]ho]uhqKuhrhhs]r Gh|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.r G…r G}r G(hWjGhcNhqNhrhhXjGubaubh€)rG}rG(hWXMost 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.hXj~Fhchdheh„hg}rG(hi]hj]hk]hl]ho]uhqKyhrhhs]rG(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 rG…rG}rG(hWXö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 hcNhqNhrhhXjGubhâ)rG}rG(hWX``Main``hg}rG(hi]hj]hk]hl]ho]uhXjGhs]rGh|XMainrG…rG}rG(hWUhXjGubahehêubh|X module.rG…rG}rG(hWX module.hcNhqNhrhhXjGubeubh€)rG}r G(hWXÝ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.r!GhXj~Fhchdheh„hg}r"G(hi]hj]hk]hl]ho]uhqK~hrhhs]r#Gh|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.r$G…r%G}r&G(hWj!GhcNhqNhrhhXjGubaubeubhY)r'G}r(G(hWUhXjvEhchdhehfhg}r)G(hi]hj]hk]hl]r*GjjEaho]r+GhauhqK„hrhhs]r,G(hu)r-G}r.G(hWXModules included in the packager/GhXj'Ghchdhehyhg}r0G(hi]hj]hk]hl]ho]uhqK„hrhhs]r1Gh|XModules included in the packager2G…r3G}r4G(hWj/GhcNhqNhrhhXj-Gubaubh€)r5G}r6G(hWXuFor 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.hXj'Ghchdheh„hg}r7G(hi]hj]hk]hl]ho]uhqK†hrhhs]r8G(h|XFor a library, r9G…r:G}r;G(hWXFor a library, hcNhqNhrhhXj5Gubhâ)rG(hi]hj]hk]hl]ho]uhXj5Ghs]r?Gh|X cabal initr@G…rAG}rBG(hWUhXjH(hWX.hcNhqNhrhhXjHubeubh€)r?H}r@H(hWXº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:hXjÇGhchdheh„hg}rAH(hi]hj]hk]hl]ho]uhqK¯hrhhs]rBH(h|X$You will notice that we have listed rCH…rDH}rEH(hWX$You will notice that we have listed hcNhqNhrhhXj?Hubhâ)rFH}rGH(hWX``base == 4.*``hg}rHH(hi]hj]hk]hl]ho]uhXj?Hhs]rIHh|X base == 4.*rJH…rKH}rLH(hWUhXjFHubahehêubh|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:rMH…rNH}rOH(hWX‡. This gives a constraint on the version of the base package that our package will work with. The most common kinds of constraints are:hcNhqNhrhhXj?HubeubhŠ)rPH}rQH(hWUhXjÇGhchdhehhg}rRH(hX-hl]hk]hi]hj]ho]uhqK³hrhhs]rSH(h‘)rTH}rUH(hWX``pkgname >= n``rVHhXjPHhchdheh”hg}rWH(hi]hj]hk]hl]ho]uhqNhrhhs]rXHh€)rYH}rZH(hWjVHhXjTHhchdheh„hg}r[H(hi]hj]hk]hl]ho]uhqK³hs]r\Hhâ)r]H}r^H(hWjVHhg}r_H(hi]hj]hk]hl]ho]uhXjYHhs]r`Hh|X pkgname >= nraH…rbH}rcH(hWUhXj]Hubahehêubaubaubh‘)rdH}reH(hWX#``pkgname ^>= n`` (since Cabal 2.0)rfHhXjPHhchdheh”hg}rgH(hi]hj]hk]hl]ho]uhqNhrhhs]rhHh€)riH}rjH(hWjfHhXjdHhchdheh„hg}rkH(hi]hj]hk]hl]ho]uhqK´hs]rlH(hâ)rmH}rnH(hWX``pkgname ^>= n``hg}roH(hi]hj]hk]hl]ho]uhXjiHhs]rpHh|X pkgname ^>= nrqH…rrH}rsH(hWUhXjmHubahehêubh|X (since Cabal 2.0)rtH…ruH}rvH(hWX (since Cabal 2.0)hXjiHubeubaubh‘)rwH}rxH(hWX``pkgname >= n && < m``ryHhXjPHhchdheh”hg}rzH(hi]hj]hk]hl]ho]uhqNhrhhs]r{Hh€)r|H}r}H(hWjyHhXjwHhchdheh„hg}r~H(hi]hj]hk]hl]ho]uhqKµhs]rHhâ)r€H}rH(hWjyHhg}r‚H(hi]hj]hk]hl]ho]uhXj|Hhs]rƒHh|Xpkgname >= n && < mr„H…r…H}r†H(hWUhXj€Hubahehêubaubaubh‘)r‡H}rˆH(hWX%``pkgname == n.*`` (since Cabal 1.6) hXjPHhchdheh”hg}r‰H(hi]hj]hk]hl]ho]uhqNhrhhs]rŠHh€)r‹H}rŒH(hWX$``pkgname == n.*`` (since Cabal 1.6)hXj‡Hhchdheh„hg}rH(hi]hj]hk]hl]ho]uhqK¶hs]rŽH(hâ)rH}rH(hWX``pkgname == n.*``hg}r‘H(hi]hj]hk]hl]ho]uhXj‹Hhs]r’Hh|Xpkgname == n.*r“H…r”H}r•H(hWUhXjHubahehêubh|X (since Cabal 1.6)r–H…r—H}r˜H(hWX (since Cabal 1.6)hXj‹Hubeubaubeubh€)r™H}ršH(hWXÍ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.hXjÇGhchdheh„hg}r›H(hi]hj]hk]hl]ho]uhqK¸hrhhs]rœH(h|X(The last is just shorthand, for example rH…ržH}rŸH(hWX(The last is just shorthand, for example hcNhqNhrhhXj™Hubhâ)r H}r¡H(hWX``base == 4.*``hg}r¢H(hi]hj]hk]hl]ho]uhXj™Hhs]r£Hh|X base == 4.*r¤H…r¥H}r¦H(hWUhXj Hubahehêubh|X! means exactly the same thing as r§H…r¨H}r©H(hWX! means exactly the same thing as hcNhqNhrhhXj™Hubhâ)rªH}r«H(hWX``base >= 4 && < 5``hg}r¬H(hi]hj]hk]hl]ho]uhXj™Hhs]r­Hh|Xbase >= 4 && < 5r®H…r¯H}r°H(hWUhXjªHubahehêubh|X+. Please refer to the documentation on the r±H…r²H}r³H(hWX+. Please refer to the documentation on the hcNhqNhrhhXj™Hubjn)r´H}rµH(hWX:pkg-field:`build-depends`r¶HhXj™Hhchdhejrhg}r·H(UreftypeX pkg-fieldjtˆjuX build-dependsU refdomainXcabalr¸Hhl]hk]U refexplicit‰hi]hj]ho]jwjxjŽNuhqK¸hs]r¹Hhâ)rºH}r»H(hWj¶Hhg}r¼H(hi]hj]r½H(jj¸HXcabal-pkg-fieldr¾Hehk]hl]ho]uhXj´Hhs]r¿Hh|X build-dependsrÀH…rÁH}rÂH(hWUhXjºHubahehêubaubh|X field for more information.rÃH…rÄH}rÅH(hWX field for more information.hcNhqNhrhhXj™HubeubeubhY)rÆH}rÇH(hWUhXjvEhchdhehfhg}rÈH(hi]hj]hk]hl]rÉHjlEaho]rÊHh"auhqK½hrhhs]rËH(hu)rÌH}rÍH(hWXBuilding the packagerÎHhXjÆHhchdhehyhg}rÏH(hi]hj]hk]hl]ho]uhqK½hrhhs]rÐHh|XBuilding the packagerÑH…rÒH}rÓH(hWjÎHhcNhqNhrhhXjÌHubaubh€)rÔH}rÕH(hWXSFor simple packages that's it! We can now try configuring and building the package:rÖHhXjÆHhchdheh„hg}r×H(hi]hj]hk]hl]ho]uhqK¿hrhhs]rØHh|XUFor simple packages that’s it! We can now try configuring and building the package:rÙH…rÚH}rÛH(hWjÖHhcNhqNhrhhXjÔHubaubjÏ)rÜH}rÝH(hWX$ cabal configure $ cabal buildhXjÆHhchdhejÒhg}rÞH(j‰jXconsolejÔjÕhl]hk]hi]j}hj]ho]uhqKÂhrhhs]rßHh|X$ cabal configure $ cabal buildràH…ráH}râH(hWUhXjÜHubaubh€)rãH}räH(hWXFAssuming those two steps worked then you can also install the package:råHhXjÆHhchdheh„hg}ræH(hi]hj]hk]hl]ho]uhqKÇhrhhs]rçHh|XFAssuming those two steps worked then you can also install the package:rèH…réH}rêH(hWjåHhcNhqNhrhhXjãHubaubjÏ)rëH}rìH(hWX$ cabal installhXjÆHhchdhejÒhg}ríH(j‰jXconsolejÔjÕhl]hk]hi]j}hj]ho]uhqKÉhrhhs]rîHh|X$ cabal installrïH…rðH}rñH(hWUhXjëHubaubh€)ròH}róH(hWXÖ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``).hXjÆHhchdheh„hg}rôH(hi]hj]hk]hl]ho]uhqKÍhrhhs]rõH(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 röH…r÷H}røH(hWXË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 hcNhqNhrhhXjòHubhâ)rùH}rúH(hWX ``$PATH``hg}rûH(hi]hj]hk]hl]ho]uhXjòHhs]rüHh|X$PATHrýH…rþH}rÿH(hWUhXjùHubahehêubh|X).rI…rI}rI(hWX).hcNhqNhrhhXjòHubeubeubhY)rI}rI(hWUhXjvEhchdhehfhg}rI(hi]hj]hk]hl]rIjnEaho]rIh9auhqKÒhrhhs]rI(hu)r I}r I(hWX Next stepsr IhXjIhchdhehyhg}r I(hi]hj]hk]hl]ho]uhqKÒhrhhs]r Ih|X Next stepsrI…rI}rI(hWj IhcNhqNhrhhXj Iubaubh€)rI}rI(hWXfWhat we have covered so far should be enough for very simple packages that you use on your own system.rIhXjIhchdheh„hg}rI(hi]hj]hk]hl]ho]uhqKÔhrhhs]rIh|XfWhat we have covered so far should be enough for very simple packages that you use on your own system.rI…rI}rI(hWjIhcNhqNhrhhXjIubaubh€)rI}rI(hWX‡The next few sections cover more details needed for more complex packages and details needed for distributing packages to other people.rIhXjIhchdheh„hg}rI(hi]hj]hk]hl]ho]uhqK×hrhhs]rIh|X‡The next few sections cover more details needed for more complex packages and details needed for distributing packages to other people.rI…rI}r I(hWjIhcNhqNhrhhXjIubaubh€)r!I}r"I(hWXtThe previous chapter covers building and installing packages -- your own packages or ones developed by other people.r#IhXjIhchdheh„hg}r$I(hi]hj]hk]hl]ho]uhqKÚhrhhs]r%Ih|XuThe previous chapter covers building and installing packages – your own packages or ones developed by other people.r&I…r'I}r(I(hWj#IhcNhqNhrhhXj!IubaubeubeubhY)r)I}r*I(hWUhXhhchdhehfhg}r+I(hi]hj]hk]hl]r,IjtEaho]r-IhEauhqKÞhrhhs]r.I(hu)r/I}r0I(hWXPackage conceptsr1IhXj)Ihchdhehyhg}r2I(hi]hj]hk]hl]ho]uhqKÞhrhhs]r3Ih|XPackage conceptsr4I…r5I}r6I(hWj1IhcNhqNhrhhXj/Iubaubh€)r7I}r8I(hWX¡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.r9IhXj)Ihchdheh„hg}r:I(hi]hj]hk]hl]ho]uhqKàhrhhs]r;Ih|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.rI(hWj9IhcNhqNhrhhXj7IubaubhY)r?I}r@I(hWUhXj)Ihchdhehfhg}rAI(hi]hj]hk]hl]rBIjhEaho]rCIh auhqKåhrhhs]rDI(hu)rEI}rFI(hWXThe point of packagesrGIhXj?Ihchdhehyhg}rHI(hi]hj]hk]hl]ho]uhqKåhrhhs]rIIh|XThe point of packagesrJI…rKI}rLI(hWjGIhcNhqNhrhhXjEIubaubh€)rMI}rNI(hWXç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.rOIhXj?Ihchdheh„hg}rPI(hi]hj]hk]hl]ho]uhqKçhrhhs]rQIh|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.rRI…rSI}rTI(hWjOIhcNhqNhrhhXjMIubaubh€)rUI}rVI(hWX¹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.rWIhXj?Ihchdheh„hg}rXI(hi]hj]hk]hl]ho]uhqKìhrhhs]rYIh|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.rZI…r[I}r\I(hWjWIhcNhqNhrhhXjUIubaubh€)r]I}r^I(hWXSPackages 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 simply this process and make it reliable.r_IhXj?Ihchdheh„hg}r`I(hi]hj]hk]hl]ho]uhqKðhrhhs]raIh|XSPackages 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 simply this process and make it reliable.rbI…rcI}rdI(hWj_IhcNhqNhrhhXj]Iubaubh€)reI}rfI(hWXEPackages 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.rgIhXj?Ihchdheh„hg}rhI(hi]hj]hk]hl]ho]uhqKöhrhhs]riIh|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.rjI…rkI}rlI(hWjgIhcNhqNhrhhXjeIubaubh€)rmI}rnI(hWXÏ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.roIhXj?Ihchdheh„hg}rpI(hi]hj]hk]hl]ho]uhqKührhhs]rqIh|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.rrI…rsI}rtI(hWjoIhcNhqNhrhhXjmIubaubeubhY)ruI}rvI(hWUhXj)Ihchdhehfhg}rwI(hi]hj]hk]hl]rxIjmEaho]ryIh3auhqMhrhhs]rzI(hu)r{I}r|I(hWXPackage names and versionsr}IhXjuIhchdhehyhg}r~I(hi]hj]hk]hl]ho]uhqMhrhhs]rIh|XPackage names and versionsr€I…rI}r‚I(hWj}IhcNhqNhrhhXj{Iubaubh€)rƒI}r„I(hWX 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…IhXjuIhchdheh„hg}r†I(hi]hj]hk]hl]ho]uhqMhrhhs]r‡Ih|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ˆI…r‰I}rŠI(hWj…IhcNhqNhrhhXjƒIubaubh€)r‹I}rŒI(hWXÄ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 `__).hXjuIhchdheh„hg}rI(hi]hj]hk]hl]ho]uhqM hrhhs]rŽI(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. rI…rI}r‘I(hWXè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. hcNhqNhrhhXj‹IubjB)r’I}r“I(hWX`SemVer `__hg}r”I(UnameXSemVerjXhttp://semver.orghl]hk]hi]hj]ho]uhXj‹Ihs]r•Ih|XSemVerr–I…r—I}r˜I(hWUhXj’IubahejFubh|XK; however, for packages intended to be distributed via Hackage Haskell’s r™I…ršI}r›I(hWXI; however, for packages intended to be distributed via Hackage Haskell's hcNhqNhrhhXj‹IubjB)rœI}rI(hWX`Package Versioning Policy`_jEKhXj‹IhejFhg}ržI(UnameXPackage Versioning Policyjjhl]hk]hi]hj]ho]uhs]rŸIh|XPackage Versioning Policyr I…r¡I}r¢I(hWUhXjœIubaubh|X applies (see also the r£I…r¤I}r¥I(hWX applies (see also the hcNhqNhrhhXj‹IubjB)r¦I}r§I(hWX@`PVP/SemVer FAQ section `__hg}r¨I(UnameXPVP/SemVer FAQ sectionjX#https://pvp.haskell.org/faq/#semverhl]hk]hi]hj]ho]uhXj‹Ihs]r©Ih|XPVP/SemVer FAQ sectionrªI…r«I}r¬I(hWUhXj¦IubahejFubh|X).r­I…r®I}r¯I(hWX).hcNhqNhrhhXj‹Iubeubh€)r°I}r±I(hWX—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".hXjuIhchdheh„hg}r²I(hi]hj]hk]hl]ho]uhqMhrhhs]r³I(h|X:The combination of package name and version is called the r´I…rµI}r¶I(hWX:The combination of package name and version is called the hcNhqNhrhhXj°IubhÂ)r·I}r¸I(hWX *package ID*hg}r¹I(hi]hj]hk]hl]ho]uhXj°Ihs]rºIh|X package IDr»I…r¼I}r½I(hWUhXj·IubahehÊubh|XU and is written with a hyphen to separate the name and version, e.g. “HUnit-1.1â€.r¾I…r¿I}rÀI(hWXQ and is written with a hyphen to separate the name and version, e.g. "HUnit-1.1".hcNhqNhrhhXj°Iubeubh€)rÁI}rÂI(hWXÎ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.hXjuIhchdheh„hg}rÃI(hi]hj]hk]hl]ho]uhqMhrhhs]rÄI(h|XDFor Cabal packages, the combination of the package name and version rÅI…rÆI}rÇI(hWXDFor Cabal packages, the combination of the package name and version hcNhqNhrhhXjÁIubhÂ)rÈI}rÉI(hWX *uniquely*hg}rÊI(hi]hj]hk]hl]ho]uhXjÁIhs]rËIh|XuniquelyrÌI…rÍI}rÎI(hWUhXjÈIubahehÊubh|Xr identifies each package. Or to put it another way: two packages with the same name and version are considered to rÏI…rÐI}rÑI(hWXr identifies each package. Or to put it another way: two packages with the same name and version are considered to hcNhqNhrhhXjÁIubhÂ)rÒI}rÓI(hWX*be*hg}rÔI(hi]hj]hk]hl]ho]uhXjÁIhs]rÕIh|XberÖI…r×I}rØI(hWUhXjÒIubahehÊubh|X the same.rÙI…rÚI}rÛI(hWX the same.hcNhqNhrhhXjÁIubeubh€)rÜI}rÝI(hWX@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.hXjuIhchdheh„hg}rÞI(hi]hj]hk]hl]ho]uhqM hrhhs]rßI(h|X=Strictly speaking, the package ID only identifies each Cabal ràI…ráI}râI(hWX=Strictly speaking, the package ID only identifies each Cabal hcNhqNhrhhXjÜIubhÂ)rãI}räI(hWX*source*hg}råI(hi]hj]hk]hl]ho]uhXjÜIhs]ræIh|XsourcerçI…rèI}réI(hWUhXjãIubahehÊubh|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.rêI…rëI}rìI(hWXû 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.hcNhqNhrhhXjÜIubeubeubhY)ríI}rîI(hWUhXj)Ihchdhehfhg}rïI(hi]hj]hk]hl]rðIjsEaho]rñIhDauhqM'hrhhs]ròI(hu)róI}rôI(hWX(Kinds of package: Cabal vs GHC vs systemrõIhXjíIhchdhehyhg}röI(hi]hj]hk]hl]ho]uhqM'hrhhs]r÷Ih|X(Kinds of package: Cabal vs GHC vs systemrøI…rùI}rúI(hWjõIhcNhqNhrhhXjóIubaubh€)rûI}rüI(hWXŸIt can be slightly confusing at first because there are various different notions of package floating around. Fortunately the details are not very complicated.rýIhXjíIhchdheh„hg}rþI(hi]hj]hk]hl]ho]uhqM)hrhhs]rÿIh|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.rJ…rJ}rJ(hWjýIhcNhqNhrhhXjûIubaubj)rJ}rJ(hWUhXjíIhchdhejhg}rJ(hi]hj]hk]hl]ho]uhqNhrhhs]rJ(j)rJ}rJ(hWXë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. hXjJhchdhejhg}r J(hi]hj]hk]hl]ho]uhqM2hs]r J(j)r J}r J(hWXCabal packagesr JhXjJhchdhej#hg}rJ(hi]hj]hk]hl]ho]uhqM2hs]rJh|XCabal packagesrJ…rJ}rJ(hWj JhXj Jubaubj6)rJ}rJ(hWUhg}rJ(hi]hj]hk]hl]ho]uhXjJhs]rJ(h€)rJ}rJ(hWXfCabal packages are really source packages. That is they contain Haskell (and sometimes C) source code.rJhXjJhchdheh„hg}rJ(hi]hj]hk]hl]ho]uhqM.hs]rJh|XfCabal packages are really source packages. That is they contain Haskell (and sometimes C) source code.rJ…rJ}rJ(hWjJhXjJubaubh€)rJ}r J(hWXsCabal packages can be compiled to produce GHC packages. They can also be translated into operating system packages.r!JhXjJhchdheh„hg}r"J(hi]hj]hk]hl]ho]uhqM1hs]r#Jh|XsCabal packages can be compiled to produce GHC packages. They can also be translated into operating system packages.r$J…r%J}r&J(hWj!JhXjJubaubehejPubeubj)r'J}r(J(hWXª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. hXjJhchdhejhg}r)J(hi]hj]hk]hl]ho]uhqMChrhhs]r*J(j)r+J}r,J(hWX GHC packagesr-JhXj'Jhchdhej#hg}r.J(hi]hj]hk]hl]ho]uhqMChs]r/Jh|X GHC packagesr0J…r1J}r2J(hWj-JhXj+Jubaubj6)r3J}r4J(hWUhg}r5J(hi]hj]hk]hl]ho]uhXj'Jhs]r6J(h€)r7J}r8J(hWXá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.r9JhXj3Jhchdheh„hg}r:J(hi]hj]hk]hl]ho]uhqM5hs]r;Jh|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.rJ(hWj9JhXj7Jubaubh€)r?J}r@J(hWXThe low-level tool ``ghc-pkg`` is used to register GHC packages and to get information on what packages are currently registered.hXj3Jhchdheh„hg}rAJ(hi]hj]hk]hl]ho]uhqM:hs]rBJ(h|XThe low-level tool rCJ…rDJ}rEJ(hWXThe low-level tool hXj?Jubhâ)rFJ}rGJ(hWX ``ghc-pkg``hg}rHJ(hi]hj]hk]hl]ho]uhXj?Jhs]rIJh|Xghc-pkgrJJ…rKJ}rLJ(hWUhXjFJubahehêubh|Xc is used to register GHC packages and to get information on what packages are currently registered.rMJ…rNJ}rOJ(hWXc is used to register GHC packages and to get information on what packages are currently registered.hXj?Jubeubh€)rPJ}rQJ(hWXYou 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.rRJhXj3Jhchdheh„hg}rSJ(hi]hj]hk]hl]ho]uhqM=hs]rTJh|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.rUJ…rVJ}rWJ(hWjRJhXjPJubaubh€)rXJ}rYJ(hWX—Haskell implementations other than GHC have essentially the same concept of registered packages. For the most part, Cabal hides the slight differences.rZJhXj3Jhchdheh„hg}r[J(hi]hj]hk]hl]ho]uhqMAhs]r\Jh|X—Haskell implementations other than GHC have essentially the same concept of registered packages. For the most part, Cabal hides the slight differences.r]J…r^J}r_J(hWjZJhXjXJubaubehejPubeubj)r`J}raJ(hWXfOperating 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. hXjJhchdhejhg}rbJ(hi]hj]hk]hl]ho]uhqMQhrhhs]rcJ(j)rdJ}reJ(hWXOperating system packagesrfJhXj`Jhchdhej#hg}rgJ(hi]hj]hk]hl]ho]uhqMQhs]rhJh|XOperating system packagesriJ…rjJ}rkJ(hWjfJhXjdJubaubj6)rlJ}rmJ(hWUhg}rnJ(hi]hj]hk]hl]ho]uhXj`Jhs]roJ(h€)rpJ}rqJ(hWX•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.rrJhXjlJhchdheh„hg}rsJ(hi]hj]hk]hl]ho]uhqMFhs]rtJh|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.ruJ…rvJ}rwJ(hWjrJhXjpJubaubh€)rxJ}ryJ(hWXå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.rzJhXjlJhchdheh„hg}r{J(hi]hj]hk]hl]ho]uhqMJhs]r|Jh|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}J…r~J}rJ(hWjzJhXjxJubaubh€)r€J}rJ(hWXÍ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‚JhXjlJhchdheh„hg}rƒJ(hi]hj]hk]hl]ho]uhqMOhs]r„Jh|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…J…r†J}r‡J(hWj‚JhXj€JubaubehejPubeubeubeubhY)rˆJ}r‰J(hWUhXj)Ihchdhehfhg}rŠJ(hi]hj]hk]hl]r‹JjoEaho]rŒJh:auhqMThrhhs]rJ(hu)rŽJ}rJ(hWXUnit of distributionrJhXjˆJhchdhehyhg}r‘J(hi]hj]hk]hl]ho]uhqMThrhhs]r’Jh|XUnit of distributionr“J…r”J}r•J(hWjJhcNhqNhrhhXjŽJubaubh€)r–J}r—J(hWXQThe 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˜JhXjˆJhchdheh„hg}r™J(hi]hj]hk]hl]ho]uhqMVhrhhs]ršJh|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›J…rœJ}rJ(hWj˜JhcNhqNhrhhXj–Jubaubh€)ržJ}rŸJ(hWX×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 JhXjˆJhchdheh„hg}r¡J(hi]hj]hk]hl]ho]uhqM\hrhhs]r¢Jh|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£J…r¤J}r¥J(hWj JhcNhqNhrhhXjžJubaubh€)r¦J}r§J(hWXCabal'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¨JhXjˆJhchdheh„hg}r©J(hi]hj]hk]hl]ho]uhqMdhrhhs]rªJh|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«J…r¬J}r­J(hWj¨JhcNhqNhrhhXj¦JubaubeubhY)r®J}r¯J(hWUhXj)Ihchdhehfhg}r°J(hi]hj]hk]hl]r±JjiEaho]r²Jh auhqMjhrhhs]r³J(hu)r´J}rµJ(hWX6Explicit dependencies and automatic package managementr¶JhXj®Jhchdhehyhg}r·J(hi]hj]hk]hl]ho]uhqMjhrhhs]r¸Jh|X6Explicit dependencies and automatic package managementr¹J…rºJ}r»J(hWj¶JhcNhqNhrhhXj´Jubaubh€)r¼J}r½J(hWXà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.hXj®Jhchdheh„hg}r¾J(hi]hj]hk]hl]ho]uhqMlhrhhs]r¿J(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 rÀJ…rÁJ}rÂJ(hWXÀ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 hcNhqNhrhhXj¼Jubhâ)rÃJ}rÄJ(hWX ``cabal``hg}rÅJ(hi]hj]hk]hl]ho]uhXj¼Jhs]rÆJh|XcabalrÇJ…rÈJ}rÉJ(hWUhXjÃJubahehêubh|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.rÊJ…rËJ}rÌJ(hWX 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.hcNhqNhrhhXj¼Jubeubh€)rÍJ}rÎJ(hWX-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.hXj®Jhchdheh„hg}rÏJ(hi]hj]hk]hl]ho]uhqMthrhhs]rÐJ(h|XtIt 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ÑJ…rÒJ}rÓJ(hWXpIt 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 hcNhqNhrhhXjÍJubhâ)rÔJ}rÕJ(hWX ``.cabal``hg}rÖJ(hi]hj]hk]hl]ho]uhXjÍJhs]r×Jh|X.cabalrØJ…rÙJ}rÚJ(hWUhXjÔJubahehêubh|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.rÛJ…rÜJ}rÝJ(hWX³ 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.hcNhqNhrhhXjÍJubeubh€)rÞJ}rßJ(hWX¾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.hXj®Jhchdheh„hg}ràJ(hi]hj]hk]hl]ho]uhqM~hrhhs]ráJ(h|XšThe explicit dependency approach is in contrast to the traditional “./configure†approach where instead of specifying dependencies declaratively, the râJ…rãJ}räJ(hWX–The explicit dependency approach is in contrast to the traditional "./configure" approach where instead of specifying dependencies declaratively, the hcNhqNhrhhXjÞJubhâ)råJ}ræJ(hWX``./configure``hg}rçJ(hi]hj]hk]hl]ho]uhXjÞJhs]rèJh|X ./configureréJ…rêJ}rëJ(hWUhXjåJubahehêubh|Xj script checks if the dependencies are present on the system. Some manual work is required to transform a rìJ…ríJ}rîJ(hWXj script checks if the dependencies are present on the system. Some manual work is required to transform a hcNhqNhrhhXjÞJubhâ)rïJ}rðJ(hWX``./configure``hg}rñJ(hi]hj]hk]hl]ho]uhXjÞJhs]ròJh|X ./configureróJ…rôJ}rõJ(hWUhXjïJubahehêubh|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.röJ…r÷J}røJ(hWX  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.hcNhqNhrhhXjÞJubeubh€)rùJ}rúJ(hWXMThe "./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.rûJhXj®Jhchdheh„hg}rüJ(hi]hj]hk]hl]ho]uhqMŠhrhhs]rýJh|XQThe “./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.rþJ…rÿJ}rK(hWjûJhcNhqNhrhhXjùJubaubh€)rK}rK(hWXË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.rKhXj®Jhchdheh„hg}rK(hi]hj]hk]hl]ho]uhqM”hrhhs]rKh|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.rK…rK}rK(hWjKhcNhqNhrhhXjKubaubeubhY)r K}r K(hWUhXj)Ihchdhehfhg}r K(hi]hj]hk]hl]r KjrEaho]r KhAauhqMhrhhs]rK(hu)rK}rK(hWX PortabilityrKhXj Khchdhehyhg}rK(hi]hj]hk]hl]ho]uhqMhrhhs]rKh|X PortabilityrK…rK}rK(hWjKhcNhqNhrhhXjKubaubh€)rK}rK(hWXOne 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!)rKhXj Khchdheh„hg}rK(hi]hj]hk]hl]ho]uhqMŸhrhhs]rKh|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!)rK…rK}rK(hWjKhcNhqNhrhhXjKubaubh€)rK}r K(hWXCabal 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!KhXj Khchdheh„hg}r"K(hi]hj]hk]hl]ho]uhqM¥hrhhs]r#Kh|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$K…r%K}r&K(hWj!KhcNhqNhrhhXjKubaubh€)r'K}r(K(hWX¾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.hXj Khchdheh„hg}r)K(hi]hj]hk]hl]ho]uhqMªhrhhs]r*K(h|X9For example a package author can list in the package’s r+K…r,K}r-K(hWX7For example a package author can list in the package's hcNhqNhrhhXj'Kubhâ)r.K}r/K(hWX ``.cabal``hg}r0K(hi]hj]hk]hl]ho]uhXj'Khs]r1Kh|X.cabalr2K…r3K}r4K(hWUhXj.Kubahehêubh|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.r5K…r6K}r7K(hWX} 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.hcNhqNhrhhXj'Kubeubh€)r8K}r9K(hWXÇ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:KhXj Khchdheh„hg}r;K(hi]hj]hk]hl]ho]uhqM²hrhhs]rK}r?K(hWj:KhcNhqNhrhhXj8Kubaubh€)r@K}rAK(hWX]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.rBKhXj Khchdheh„hg}rCK(hi]hj]hk]hl]ho]uhqMºhrhhs]rDKh|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.rEK…rFK}rGK(hWjBKhcNhqNhrhhXj@Kubaubh€)rHK}rIK(hWXzWhere 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.rJKhXj Khchdheh„hg}rKK(hi]hj]hk]hl]ho]uhqMÀhrhhs]rLKh|X~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.rMK…rNK}rOK(hWjJKhcNhqNhrhhXjHKubaubeubeubhaehWUU transformerrPKNU footnote_refsrQK}rRKUrefnamesrSK}rTK(Xforeign libraries]rUKjô$aXpvp]rVK(j(j€(jÀ(j+)jJ)j‹*ej]rWKjaXpackage properties]rXKjŽaXconditional blocks]rYKj.:aXbuild information]rZK(jÐjäj–jÀjO!jÁCj÷>jWjÞeXpackage descriptions]r[K(jCjejÇ]r\KjÄaXhackage]r]KjaXsystem-dependent parameters]r^K(jjrj¬jŒ'j2j¢7j¢8eXhaddock]r_K(jRjN eXpackage versioning policy]r`K(jœIjzeXabnf]raK(j8j’jI:eXmore complex packages]rbKjžajõ]rcKjòaj.]rdKj+aj±]reK(j®j–'jËeuUsymbol_footnotesrfK]rgKUautofootnote_refsrhK]riKUsymbol_footnote_refsrjK]rkKU citationsrlK]rmKhrhU current_linernKNUtransform_messagesroK]rpK(hT)rqK}rrK(hWUhg}rsK(hi]UlevelKhl]hk]rtKj!EaUsourcehdhj]ho]UlineMóUtypejMEuhs]ruKh€)rvK}rwK(hWUhg}rxK(hi]hj]hk]hl]ho]uhXjqKhs]ryKh|X2Duplicate implicit target name: "foo-bench.cabal".rzK…r{K}r|K(hWUhXjvKubaheh„ubahejJEubhT)r}K}r~K(hWUhg}rK(hi]UlevelKhl]hk]Usourcehdhj]ho]UlineM®UtypejMEuhs]r€Kh€)rK}r‚K(hWUhg}rƒK(hi]hj]hk]hl]ho]uhXj}Khs]r„Kh|X2Hyperlink target "buildtoolsbc" is not referenced.r…K…r†K}r‡K(hWUhXjKubaheh„ubahejJEubhT)rˆK}r‰K(hWUhg}rŠK(hi]UlevelKhl]hk]Usourcehdhj]ho]UlineM¶UtypejMEuhs]r‹Kh€)rŒK}rK(hWUhg}rŽK(hi]hj]hk]hl]ho]uhXjˆKhs]rKh|X3Hyperlink target "buildtoolsmap" is not referenced.rK…r‘K}r’K(hWUhXjŒKubaheh„ubahejJEubhT)r“K}r”K(hWUhg}r•K(hi]UlevelKhl]hk]Usourcejø hj]ho]UlineM­ UtypejMEuhs]r–Kh€)r—K}r˜K(hWUhg}r™K(hi]hj]hk]hl]ho]uhXj“Khs]ršKh|X-Hyperlink target "haskell" is not referenced.r›K…rœK}rK(hWUhXj—Kubaheh„ubahejJEubhT)ržK}rŸK(hWUhg}r K(hi]UlevelKhl]hk]Usourcejø hj]ho]UlineMµ UtypejMEuhs]r¡Kh€)r¢K}r£K(hWUhg}r¤K(hi]hj]hk]hl]ho]uhXjžKhs]r¥Kh|X,Hyperlink target "hoogle" is not referenced.r¦K…r§K}r¨K(hWUhXj¢Kubaheh„ubahejJEubhT)r©K}rªK(hWUhg}r«K(hi]UlevelKhl]hk]Usourcejø hj]ho]UlineM· UtypejMEuhs]r¬Kh€)r­K}r®K(hWUhg}r¯K(hi]hj]hk]hl]ho]uhXj©Khs]r°Kh|X.Hyperlink target "hscolour" is not referenced.r±K…r²K}r³K(hWUhXj­Kubaheh„ubahejJEubeUreporterr´KNUid_startrµKKU autofootnotesr¶K]r·KU citation_refsr¸K}r¹KUindirect_targetsrºK]r»KUsettingsr¼K(cdocutils.frontend Values r½Kor¾K}r¿K(Ufootnote_backlinksrÀKKUrecord_dependenciesrÁKNU language_coderÂKUenrÃKU tracebackrÄKˆUpep_referencesrÅKNUstrip_commentsrÆKNU toc_backlinksrÇKj 0U rfc_base_urlrÈKUhttps://tools.ietf.org/html/rÉKU datestamprÊKNU report_levelrËKKUsmartquotes_localesrÌKNU _destinationrÍKNU halt_levelrÎKKU strip_classesrÏKNhyNUerror_encoding_error_handlerrÐKUbackslashreplacerÑKUdebugrÒKNUembed_stylesheetrÓK‰Uoutput_encoding_error_handlerrÔKUstrictrÕKU sectnum_xformrÖKKUdump_transformsr×KNU docinfo_xformrØKKUwarning_streamrÙKNUpep_file_url_templaterÚKUpep-%04drÛKUexit_status_levelrÜKKUconfigrÝKNUstrict_visitorrÞKNUcloak_email_addressesrßKˆUtrim_footnote_reference_spaceràK‰UenvráKNUdump_pseudo_xmlrâKNUexpose_internalsrãKNUsectsubtitle_xformräK‰U source_linkråKNUrfc_referencesræKNUoutput_encodingrçKUutf-8rèKU source_urlréKNUinput_encodingrêKU utf-8-sigrëKU_disable_configrìKNU id_prefixríKUUcharacter_level_inline_markuprîK‰U tab_widthrïKKUerror_encodingrðKUUTF-8rñKU_sourceròKhdUgettext_compactróKˆU generatorrôKNUdump_internalsrõKNU smart_quotesröKˆU pep_base_urlr÷KU https://www.python.org/dev/peps/røKUsyntax_highlightrùKUlongrúKUinput_encoding_error_handlerrûKjÕKUauto_id_prefixrüKUidrýKUdoctitle_xformrþK‰Ustrip_elements_with_classesrÿKNU _config_filesrL]Ufile_insertion_enabledrLˆU raw_enabledrLKU dump_settingsrLNubUsymbol_footnote_startrLKUidsrL}rL(j;j;jç#jã#jZjw'j:j:j¦j¢jÓAjÏAj3j‹3jU jQ jjjrjnjð9jì9jhüj²9j®9jý6jù6j`Bj\Bj‘j³jS#jM#jÎjÊjÀj¼j±+j­+j?j;j~/j/jjj&j!joEjˆJjmEjuIj{ jw j/j/j·7j³7jÒ!jÎ!jFjBjí3jé3j@j;jcj_jtEj)Ij(+j$+j$9j 9jwCjsCjIh_jÎj‚9j jjiEj®JjÈj³j¤=j =jj jO-jK-jÍ4jÉ4j´ j° j)6j%6j^6jZ6jC5j?5j[%jW%j‡>jƒ>j×CjÓCj©j¤jqEjéEjý#jù#j8Ej4Ejš#j–#jójïj9j˜9j#j|#jõDhZj*j&j!EjEj‘jjÂj¾jº;j¶;jI3jE3j®jªjsEjíIj@j@jjj{:jw:jõjñjÝjÙjÚ9jÖ9j0j,j !j!j“jjlEjÆHjz8jv8jãjßjhjdjÕjÑj¬'j¨'jjjÛj×jhEj?Ij%Dj!DjÈ6jÄ6jzjvjjjhjdjjj3j/jÖjÒj–Aj’Ajƒjjž>jš>j™j•jGjBjj‰jÔ%jÐ%j.j.jj j#jjÞjÚjÎjÉj°:j¬:j-j(jY9jU9jô5jð5j"BjBjK$jG$jj jz7jv7jß@jÛ@jjEj'GjKjEj`j\jrEj Kj²$j®$j,j,jjj\,jX,j`Ch]j %j%j1:j_;j·8j³8jgEjvEjN jJ jüjøjó,jï,j3j/jÛj×j!jjj‰jI?jE?j9j5je!ja!jpEjÇGhnhaj$j$j(2j$2jdj`jÇjÃj>j>jkEj~Fjá"jÝ"j0&j,&ja?j\?j !j!jA&j=&jûj÷j¦j¢jµj±j2j‹2j¾DjºDjYAjUAj°#j¬#jÌ1jÈ1jWjSjnEjIj±j­j“6j6jì7jè7jÙ&jÕ&jE7jA7jjjx5jt5uUsubstitution_namesrL}rLhehrhg}r L(hi]hl]hk]Usourcehdhj]ho]uU footnotesr L]r LUrefidsr L}r L(j~/]rLj{/aj/]rLj /aj]rLjÿ auub.