€cdocutils.nodes document q)q}q(U nametypesq}q(X executablesqNXpvpqˆX&accessing data files from package codeqNX quickstartq NXrunning executablesq NX.example: a package containing a simple libraryq NXthe point of packagesq NX6explicit dependencies and automatic package managementq NXdownloading a package's sourceqNXpackage descriptionsqNXlibraryqNX test suitesqNXcommon stanzasqNXmodules included in the packageqNXabnfqˆXhoogleqˆX*listing outdated dependency version boundsqNXconditional compilationqNX$generating dependency version boundsqNXhackageqˆXediting the .cabal fileqNX'backward compatibility and custom-setupqNXsublibsqˆXsystem-dependent parametersqNXhscolourqˆXmore elaborate solutionsqˆX/meaning of field values when using conditionalsq NXfreezing dependency versionsq!NXhaddockq"ˆXbuilding the packageq#NXaccessing the package versionq$NXdeveloping packagesq%NX1example: a package containing executable programsq&NXalexq'ˆX"resolution of conditions and flagsq(NXrunning benchmarksq)NXconfiguration flagsq*NX conditionsq+NXcpphsq,ˆXhappyq-ˆXforeign librariesq.NXsource repositoriesq/NX-example: package using detailed-0.9 interfaceq0NXpackage propertiesq1NXcreating a packageq2NXghcq3ˆXpackage names and versionsq4NXfoo-bench.cabalq5ˆX buildtoolsmapq6ˆXexample: using autoconfq7NXAexample: using explicit braces rather than indentation for layoutq8NXmore complex packagesq9NX next stepsq:NXunit of distributionq;NX$modules imported from other packagesqNX?example: a package containing a library and executable programsq?NX buildtoolsbcq@ˆXusing "cabal init"qANX portabilityqBNXbgnu autoconf places restrictions on paths, including the path that the user builds a package from.qCˆXrunning test suitesqDNXbuild informationqENX(kinds of package: cabal vs ghc vs systemqFNXpackage conceptsqGNXconditional blocksqHNXcustom setup scriptsqINXpackage versioning policyqJˆXopening an interpreter sessionqKNX benchmarksqLNX3example: package using exitcode-stdio-1.0 interfaceqMNXhaskellqNˆXautogenerated modulesqONXfind these files at run-timeqPˆXconfigurationsqQNuUsubstitution_defsqR}qSUparse_messagesqT]qU(cdocutils.nodes system_message qV)qW}qX(U rawsourceqYUUparentqZcdocutils.nodes section q[)q\}q](hYUU referencedq^KhZh[)q_}q`(hYUhZh[)qa}qb(hYUh^KhZh[)qc}qd(hYUhZhUsourceqeXE/home/refold/code/haskell/cabal-2.4/Cabal/doc/developing-packages.rstqfUtagnameqgUsectionqhU attributesqi}qj(Udupnamesqk]Uclassesql]Ubackrefsqm]Uidsqn]qoUdeveloping-packagesqpaUnamesqq]qrh%auUlineqsMÑUdocumentqthUchildrenqu]qv(cdocutils.nodes title qw)qx}qy(hYXDeveloping packagesqzhZhchehfhgUtitleq{hi}q|(hk]hl]hm]hn]hq]uhsMÑhthhu]q}cdocutils.nodes Text q~XDeveloping packagesq…q€}q(hYhzheNhsNhthhZhxubaubcdocutils.nodes paragraph q‚)qƒ}q„(hYX`The Cabal package is the unit of distribution. When installed, its purpose is to make available:q…hZhchehfhgU paragraphq†hi}q‡(hk]hl]hm]hn]hq]uhsMÓhthhu]qˆh~X`The Cabal package is the unit of distribution. When installed, its purpose is to make available:q‰…qŠ}q‹(hYh…heNhsNhthhZhƒubaubcdocutils.nodes bullet_list qŒ)q}qŽ(hYUhZhchehfhgU bullet_listqhi}q(Ubulletq‘X-hn]hm]hk]hl]hq]uhsMÖhthhu]q’(cdocutils.nodes list_item q“)q”}q•(hYXOne or more Haskell programs. hZhhehfhgU list_itemq–hi}q—(hk]hl]hm]hn]hq]uhsNhthhu]q˜h‚)q™}qš(hYXOne or more Haskell programs.q›hZh”hehfhgh†hi}qœ(hk]hl]hm]hn]hq]uhsMÖhu]qh~XOne or more Haskell programs.qž…qŸ}q (hYh›hZh™ubaubaubh“)q¡}q¢(hYX;At most one library, exposing a number of Haskell modules. hZhhehfhgh–hi}q£(hk]hl]hm]hn]hq]uhsNhthhu]q¤h‚)q¥}q¦(hYX:At most one library, exposing a number of Haskell modules.q§hZh¡hehfhgh†hi}q¨(hk]hl]hm]hn]hq]uhsMØhu]q©h~X:At most one library, exposing a number of Haskell modules.qª…q«}q¬(hYh§hZh¥ubaubaubeubh‚)q­}q®(hYX­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¯hZhchehfhgh†hi}q°(hk]hl]hm]hn]hq]uhsMÚhthhu]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´(hYh¯heNhsNhthhZh­ubaubh‚)qµ}q¶(hYX×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·hZhchehfhgh†hi}q¸(hk]hl]hm]hn]hq]uhsMâhthhu]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¼(hYh·heNhsNhthhZhµubaubh‚)q½}q¾(hYXWA 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``".hZhchehfhgh†hi}q¿(hk]hl]hm]hn]hq]uhsMæhthhu]qÀ(h~X-A package is identified by a globally-unique qÁ…qÂ}qÃ(hYX-A package is identified by a globally-unique heNhsNhthhZh½ubcdocutils.nodes emphasis qÄ)qÅ}qÆ(hYX*package name*hi}qÇ(hk]hl]hm]hn]hq]uhZh½hu]qÈh~X package nameqÉ…qÊ}qË(hYUhZhÅubahgUemphasisqÌ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Ï(hYX/, 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 heNhsNhthhZh½ubhÄ)qÐ}qÑ(hYX*version number*hi}qÒ(hk]hl]hm]hn]hq]uhZh½hu]qÓh~Xversion numberqÔ…qÕ}qÖ(hYUhZhÐubahghÌ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Ù(hYX„, consisting of a sequence of one or more integers separated by dots. These can be combined to form a single text string called the heNhsNhthhZh½ubhÄ)qÚ}qÛ(hYX *package ID*hi}qÜ(hk]hl]hm]hn]hq]uhZh½hu]qÝh~X package IDqÞ…qß}qà(hYUhZhÚubahghÌubh~X@, using a hyphen to separate the name from the version, e.g. “qá…qâ}qã(hYX>, using a hyphen to separate the name from the version, e.g. "heNhsNhthhZh½ubcdocutils.nodes literal qä)qå}qæ(hYX ``HUnit-1.1``hi}qç(hk]hl]hm]hn]hq]uhZh½hu]qèh~X HUnit-1.1qé…qê}që(hYUhZhåubahgUliteralqìubh~Xâ€.qí…qî}qï(hYX".heNhsNhthhZh½ubeubcdocutils.nodes note qð)qñ}qò(hYXTPackages 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.hZhchehfhgUnoteqóhi}qô(hk]hl]hm]hn]hq]uhsNhthhu]qõh‚)qö}q÷(hYXTPackages 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øhZhñhehfhgh†hi}qù(hk]hl]hm]hn]hq]uhsMòhu]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ý(hYhøhZhöubaubaubh[)qþ}qÿ(hYUhZhchehfhghhhi}r(hk]hl]hm]hn]rUcreating-a-packagerahq]rh2auhsMùhthhu]r(hw)r}r(hYXCreating a packagerhZhþhehfhgh{hi}r(hk]hl]hm]hn]hq]uhsMùhthhu]r h~XCreating a packager …r }r (hYjheNhsNhthhZjubaubh‚)r }r(hYX§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:rhZhþhehfhgh†hi}r(hk]hl]hm]hn]hq]uhsMûhthhu]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(hYjheNhsNhthhZj ubaubcdocutils.nodes definition_list r)r}r(hYUhZhþhehfhgUdefinition_listrhi}r(hk]hl]hm]hn]hq]uhsNhthhu]r(cdocutils.nodes definition_list_item r)r}r(hYX­: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`_. hZjhehfhgUdefinition_list_itemrhi}r(hk]hl]hm]hn]hq]uhsMhu]r (cdocutils.nodes term r!)r"}r#(hYX:file:`{package-name}.cabal`r$hZjhehfhgUtermr%hi}r&(hk]hl]hm]hn]hq]uhsMhu]r'hä)r(}r)(hYXpackage-name.cabalhi}r*(hn]hm]hk]hl]r+Xfiler,aUrolej,hq]uhZj"hu]r-(hÄ)r.}r/(hYX package-namehi}r0(hk]hl]hm]hn]hq]uhZj(hu]r1h~X package-namer2…r3}r4(hYUhZj.ubahghÌubh~X.cabalr5…r6}r7(hYX.cabalhZj(ubehghìubaubcdocutils.nodes definition r8)r9}r:(hYUhi}r;(hk]hl]hm]hn]hq]uhZjhu]r<h‚)r=}r>(hYXa Unicode UTF-8 text file containing a package description. For details of the syntax of this file, see the section on `package descriptions`_.hZj9hehfhgh†hi}r?(hk]hl]hm]hn]hq]uhsMhu]r@(h~Xwa Unicode UTF-8 text file containing a package description. For details of the syntax of this file, see the section on rA…rB}rC(hYXwa Unicode UTF-8 text file containing a package description. For details of the syntax of this file, see the section on hZj=ubcdocutils.nodes reference rD)rE}rF(hYX`package descriptions`_UresolvedrGKhZj=hgU referencerHhi}rI(UnameXpackage descriptionshn]hm]hk]hl]hq]UrefidrJUpackage-descriptionsrKuhu]rLh~Xpackage descriptionsrM…rN}rO(hYUhZjEubaubh~X.…rP}rQ(hYX.hZj=ubeubahgU definitionrRubeubj)rS}rT(hYXÞ: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. hZjhehfhgjhi}rU(hk]hl]hm]hn]hq]uhsM hthhu]rV(j!)rW}rX(hYX:file:`Setup.hs`rYhZjShehfhgj%hi}rZ(hk]hl]hm]hn]hq]uhsM hu]r[hä)r\}r](hYXSetup.hshi}r^(hn]hm]hk]hl]r_Xfiler`aUrolej`hq]uhZjWhu]rah~XSetup.hsrb…rc}rd(hYXSetup.hshZj\ubahghìubaubj8)re}rf(hYUhi}rg(hk]hl]hm]hn]hq]uhZjShu]rhh‚)ri}rj(hYXÌ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.hZjehehfhgh†hi}rk(hk]hl]hm]hn]hq]uhsMhu]rl(h~Xoa single-module Haskell program to perform various setup tasks (with the interface described in the section on rm…rn}ro(hYXoa single-module Haskell program to perform various setup tasks (with the interface described in the section on hZjiubcsphinx.addnodes pending_xref rp)rq}rr(hYX:ref:`installing-packages`rshZjihehfhgU pending_xrefrthi}ru(UreftypeXrefUrefwarnrvˆU reftargetrwXinstalling-packagesU refdomainXstdrxhn]hm]U refexplicit‰hk]hl]hq]UrefdocryXdeveloping-packagesrzuhsMhu]r{cdocutils.nodes inline r|)r}}r~(hYjshi}r(hk]hl]r€(UxrefrjxXstd-refr‚ehm]hn]hq]uhZjqhu]rƒh~Xinstalling-packagesr„…r…}r†(hYUhZj}ubahgUinliner‡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Š(hYXµ). 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 hZjiubjp)r‹}rŒ(hYX:pkg-field:`build-type`rhZjihehfhgjthi}rŽ(UreftypeX pkg-fieldjvˆjwX build-typeU refdomainXcabalrhn]hm]U refexplicit‰hk]hl]hq]jyjzUcabal:pkg-sectionrNuhsMhu]r‘hä)r’}r“(hYjhi}r”(hk]hl]r•(jjXcabal-pkg-fieldr–ehm]hn]hq]uhZj‹hu]r—h~X build-typer˜…r™}rš(hYUhZj’ubahghìubaubh~X setting in the r›…rœ}r(hYX setting in the hZjiubhä)rž}rŸ(hYX ``.cabal``hi}r (hk]hl]hm]hn]hq]uhZjihu]r¡h~X.cabalr¢…r£}r¤(hYUhZjžubahghìubh~X] file. In most cases it will be trivial, calling on the Cabal library to do most of the work.r¥…r¦}r§(hYX] file. In most cases it will be trivial, calling on the Cabal library to do most of the work.hZjiubeubahgjRubeubeubh‚)r¨}r©(hYXª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`.hZhþhehfhgh†hi}rª(hk]hl]hm]hn]hq]uhsM hthhu]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®(hYXOnce you have these, you can create a source bundle of this directory for distribution. Building of the package is discussed in the section on heNhsNhthhZj¨ubjp)r¯}r°(hYX:ref:`installing-packages`r±hZj¨hehfhgjthi}r²(UreftypeXrefjvˆjwXinstalling-packagesU refdomainXstdr³hn]hm]U refexplicit‰hk]hl]hq]jyjzuhsM hu]r´j|)rµ}r¶(hYj±hi}r·(hk]hl]r¸(jj³Xstd-refr¹ehm]hn]hq]uhZj¯hu]rºh~Xinstalling-packagesr»…r¼}r½(hYUhZjµubahgj‡ubaubh~X.…r¾}r¿(hYX.heNhsNhthhZj¨ubeubh‚)rÀ}rÁ(hYX¤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.hZhþhehfhgh†hi}rÂ(hk]hl]hm]hn]hq]uhsMhthhu]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Æ(hYXË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 heNhsNhthhZjÀubhä)rÇ}rÈ(hYX ``.cabal``hi}rÉ(hk]hl]hm]hn]hq]uhZjÀhu]rÊh~X.cabalrË…rÌ}rÍ(hYUhZjÇubahghì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Ð(hYXÏ 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.heNhsNhthhZjÀubeubcdocutils.nodes literal_block rÑ)rÒ}rÓ(hYXÞ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.6hZhþhehfhgU literal_blockrÔhi}rÕ(U xml:spacerÖUpreserver×hn]hm]hk]hl]hq]uhsM%hthhu]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Û(hYUhZjÒubaubh[)rÜ}rÝ(hYUhZhþhehfhghhhi}rÞ(hk]hl]hm]hn]rßU-example-a-package-containing-a-simple-libraryràahq]ráh auhsM1hthhu]râ(hw)rã}rä(hYX.Example: A package containing a simple libraryråhZjÜhehfhgh{hi}ræ(hk]hl]hm]hn]hq]uhsM1hthhu]rçh~X.Example: A package containing a simple libraryrè…ré}rê(hYjåheNhsNhthhZjãubaubh‚)rë}rì(hYX=The HUnit package contains a file ``HUnit.cabal`` containing:ríhZjÜhehfhgh†hi}rî(hk]hl]hm]hn]hq]uhsM3hthhu]rï(h~X"The HUnit package contains a file rð…rñ}rò(hYX"The HUnit package contains a file heNhsNhthhZjëubhä)ró}rô(hYX``HUnit.cabal``hi}rõ(hk]hl]hm]hn]hq]uhZjëhu]röh~X HUnit.cabalr÷…rø}rù(hYUhZjóubahghìubh~X containing:rú…rû}rü(hYX containing:heNhsNhthhZjëubeubjÑ)rý}rþ(hYXê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: CPPhZjÜhehfhgjÔhi}rÿ(jÖj×hn]hm]hk]hl]hq]uhsM7hthhu]rh~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(hYUhZjýubaubh‚)r}r(hYXand the following ``Setup.hs``:rhZjÜhehfhgh†hi}r(hk]hl]hm]hn]hq]uhsMHhthhu]r(h~Xand the following r …r }r (hYXand the following heNhsNhthhZjubhä)r }r (hYX ``Setup.hs``hi}r(hk]hl]hm]hn]hq]uhZjhu]rh~XSetup.hsr…r}r(hYUhZj ubahghìubh~X:…r}r(hYX:heNhsNhthhZjubeubjÑ)r}r(hYX-import Distribution.Simple main = defaultMainhZjÜhehfhgjÔhi}r(Ulinenosr‰UlanguagerXhaskelljÖj×hn]hm]hk]Uhighlight_argsr}hl]hq]uhsMJhthhu]rh~X-import Distribution.Simple main = defaultMainr…r}r(hYUhZjubaubeubh[)r}r (hYUhZhþhehfhghhhi}r!(hk]hl]hm]hn]r"U0example-a-package-containing-executable-programsr#ahq]r$h&auhsMPhthhu]r%(hw)r&}r'(hYX1Example: A package containing executable programsr(hZjhehfhgh{hi}r)(hk]hl]hm]hn]hq]uhsMPhthhu]r*h~X1Example: A package containing executable programsr+…r,}r-(hYj(heNhsNhthhZj&ubaubjÑ)r.}r/(hYXº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: UtilshZjhehfhgjÔhi}r0(jÖj×hn]hm]hk]hl]hq]uhsMThthhu]r1h~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: Utilsr2…r3}r4(hYUhZj.ubaubh‚)r5}r6(hYX$with ``Setup.hs`` the same as above.r7hZjhehfhgh†hi}r8(hk]hl]hm]hn]hq]uhsMghthhu]r9(h~Xwith r:…r;}r<(hYXwith heNhsNhthhZj5ubhä)r=}r>(hYX ``Setup.hs``hi}r?(hk]hl]hm]hn]hq]uhZj5hu]r@h~XSetup.hsrA…rB}rC(hYUhZj=ubahghìubh~X the same as above.rD…rE}rF(hYX the same as above.heNhsNhthhZj5ubeubeubh[)rG}rH(hYUh^KhZhþhehfhghhhi}rI(hk]rJX?example: a package containing a library and executable programsrKahl]hm]hn]rLU>example-a-package-containing-a-library-and-executable-programsrMahq]uhsMjhthhu]rN(hw)rO}rP(hYX?Example: A package containing a library and executable programsrQhZjGhehfhgh{hi}rR(hk]hl]hm]hn]hq]uhsMjhthhu]rSh~X?Example: A package containing a library and executable programsrT…rU}rV(hYjQheNhsNhthhZjOubaubjÑ)rW}rX(hYXå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, UtilshZjGhehfhgjÔhi}rY(jÖj×hn]hm]hk]hl]hq]uhsMnhthhu]rZh~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, Utilsr[…r\}r](hYUhZjWubaubh‚)r^}r_(hYX‹with ``Setup.hs`` the same as above. Note that any library modules required (directly or indirectly) by an executable must be listed again.hZjGhehfhgh†hi}r`(hk]hl]hm]hn]hq]uhsM„hthhu]ra(h~Xwith rb…rc}rd(hYXwith heNhsNhthhZj^ubhä)re}rf(hYX ``Setup.hs``hi}rg(hk]hl]hm]hn]hq]uhZj^hu]rhh~XSetup.hsri…rj}rk(hYUhZjeubahghìubh~Xz the same as above. Note that any library modules required (directly or indirectly) by an executable must be listed again.rl…rm}rn(hYXz the same as above. Note that any library modules required (directly or indirectly) by an executable must be listed again.heNhsNhthhZj^ubeubh‚)ro}rp(hYX–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.hZjGhehfhgh†hi}rq(hk]hl]hm]hn]hq]uhsM‡hthhu]rr(h~X9The trivial setup script used in these examples uses the rs…rt}ru(hYX9The trivial setup script used in these examples uses the heNhsNhthhZjoubhÄ)rv}rw(hYX*simple build infrastructure*hi}rx(hk]hl]hm]hn]hq]uhZjohu]ryh~Xsimple build infrastructurerz…r{}r|(hYUhZjvubahghÌubh~X$ provided by the Cabal library (see r}…r~}r(hYX$ provided by the Cabal library (see heNhsNhthhZjoubjD)r€}r(hYXX`Distribution.Simple <../release/cabal-latest/doc/API/Cabal/Distribution-Simple.html>`__hi}r‚(UnameXDistribution.SimpleUrefurirƒX>../release/cabal-latest/doc/API/Cabal/Distribution-Simple.htmlhn]hm]hk]hl]hq]uhZjohu]r„h~XDistribution.Simpler……r†}r‡(hYUhZj€ubahgjHubh~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Š(hYXÄ). 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.heNhsNhthhZjoubeubh‚)r‹}rŒ(hYXThe 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 `_.hZjGhehfhgh†hi}r(hk]hl]hm]hn]hq]uhsMŽhthhu]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‘(hYX¥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 heNhsNhthhZj‹ubjD)r’}r“(hYX`system-dependent parameters`_jGKhZj‹hgjHhi}r”(UnameXsystem-dependent parametershn]hm]hk]hl]hq]jJUsystem-dependent-parametersr•uhu]r–h~Xsystem-dependent parametersr—…r˜}r™(hYUhZj’ubaubh~X). A few packages require rš…r›}rœ(hYX). A few packages require heNhsNhthhZj‹ubjD)r}rž(hYX3`more elaborate solutions `_hi}rŸ(UnameXmore elaborate solutionsjƒXmorecomplexpackagesr hn]hm]hk]hl]hq]uhZj‹hu]r¡h~Xmore elaborate solutionsr¢…r£}r¤(hYUhZjubahgjHubcdocutils.nodes target r¥)r¦}r§(hYX h^KhZj‹hgUtargetr¨hi}r©(Urefurij hn]rªUmore-elaborate-solutionsr«ahm]hk]hl]hq]r¬hauhu]ubh~X.…r­}r®(hYX.heNhsNhthhZj‹ubeubeubeubhah[)r¯}r°(hYUhZhchehfhghhhi}r±(hk]hl]hm]hn]r²Ucustom-setup-scriptsr³ahq]r´hIauhsMµ hthhu]rµ(hw)r¶}r·(hYXCustom setup scriptsr¸hZj¯hehfhgh{hi}r¹(hk]hl]hm]hn]hq]uhsMµ hthhu]rºh~XCustom setup scriptsr»…r¼}r½(hYj¸heNhsNhthhZj¶ubaubh‚)r¾}r¿(hYX+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.hZj¯hehfhgh†hi}rÀ(hk]hl]hm]hn]hq]uhsM· hthhu]rÁ(h~XSince Cabal 1.24, custom rÂ…rÃ}rÄ(hYXSince Cabal 1.24, custom heNhsNhthhZj¾ubhä)rÅ}rÆ(hYX ``Setup.hs``hi}rÇ(hk]hl]hm]hn]hq]uhZj¾hu]rÈh~XSetup.hsrÉ…rÊ}rË(hYUhZjÅubahghìubh~XN are required to accurately track their dependencies by declaring them in the rÌ…rÍ}rÎ(hYXN are required to accurately track their dependencies by declaring them in the heNhsNhthhZj¾ubhä)rÏ}rÐ(hYX ``.cabal``hi}rÑ(hk]hl]hm]hn]hq]uhZj¾hu]rÒh~X.cabalrÓ…rÔ}rÕ(hYUhZjÏubahghìubh~XP file rather than rely on dependencies being implicitly in scope. Please refer rÖ…r×}rØ(hYXP file rather than rely on dependencies being implicitly in scope. Please refer heNhsNhthhZj¾ubjD)rÙ}rÚ(hYXL`this article `__hi}rÛ(UnameX this articlejƒX9https://www.well-typed.com/blog/2015/07/cabal-setup-deps/hn]hm]hk]hl]hq]uhZj¾hu]rÜh~X this articlerÝ…rÞ}rß(hYUhZjÙubahgjHubh~X for more details.rà…rá}râ(hYX for more details.heNhsNhthhZj¾ubeubh‚)rã}rä(hYX†Declaring a ``custom-setup`` stanza also enables the generation of ``MIN_VERSION_package_(A,B,C)`` CPP macros for the Setup component.hZj¯hehfhgh†hi}rå(hk]hl]hm]hn]hq]uhsM½ hthhu]ræ(h~X Declaring a rç…rè}ré(hYX Declaring a heNhsNhthhZjãubhä)rê}rë(hYX``custom-setup``hi}rì(hk]hl]hm]hn]hq]uhZjãhu]ríh~X custom-setuprî…rï}rð(hYUhZjêubahghìubh~X' stanza also enables the generation of rñ…rò}ró(hYX' stanza also enables the generation of heNhsNhthhZjãubhä)rô}rõ(hYX``MIN_VERSION_package_(A,B,C)``hi}rö(hk]hl]hm]hn]hq]uhZjãhu]r÷h~XMIN_VERSION_package_(A,B,C)rø…rù}rú(hYUhZjôubahghìubh~X$ CPP macros for the Setup component.rû…rü}rý(hYX$ CPP macros for the Setup component.heNhsNhthhZjãubeubcsphinx.addnodes index rþ)rÿ}r(hYUhZj¯hehfhgUindexrhi}r(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubcsphinx.addnodes desc r)r}r(hYUhZj¯hehfhgUdescrhi}r(Unoindexr‰Udomainr Xcabalhn]hm]hk]hl]hq]Uobjtyper X pkg-sectionr Udesctyper j uhsNhthhu]r (csphinx.addnodes desc_signature r)r}r(hYX custom-setuprhZjhehfhgUdesc_signaturerhi}r(hn]rX%pkg-section-custom-setup-custom-setuprahm]hk]hl]hq]Ufirstr‰uhsNhthhu]r(jþ)r}r(hYUhZjhehfhgjhi}r(hn]hm]hk]hl]hq]Uentries]r(UpairrX0custom-setup:custom-setup; package.cabal sectionjUNtrauhsNhthhu]ubcsphinx.addnodes desc_name r)r}r (hYjhZjhehfhgU desc_namer!hi}r"(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r#h~X custom-setupr$…r%}r&(hYUheNhsNhthhZjubaubcsphinx.addnodes desc_addname r')r(}r)(hYU hZjhehfhgU desc_addnamer*hi}r+(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r,h~X …r-}r.(hYUheNhsNhthhZj(ubaubeubcsphinx.addnodes desc_content r/)r0}r1(hYUhZjhehfhgU desc_contentr2hi}r3(hk]hl]hm]hn]hq]uhsNhthhu]r4(cdocutils.nodes field_list r5)r6}r7(hYUhZj0hehfhgU field_listr8hi}r9(hk]hl]hm]hn]hq]uhsNhthhu]r:cdocutils.nodes field r;)r<}r=(hYUhZj6hehfhgUfieldr>hi}r?(hk]hl]hm]hn]hq]uhsNhthhu]r@(cdocutils.nodes field_name rA)rB}rC(hYUSincerDhZj<hehfhgU field_namerEhi}rF(hk]hl]hm]hn]hq]uhsKhu]rGh~XSincerH…rI}rJ(hYUhZjBubaubcdocutils.nodes field_body rK)rL}rM(hYU Cabal 1.24rNhi}rO(hk]hl]hm]hn]hq]uhZj<hu]rPh‚)rQ}rR(hYjNhi}rS(hk]hl]hm]hn]hq]uhZjLhu]rTh~X Cabal 1.24rU…rV}rW(hYUhZjQubahgh†ubahgU field_bodyrXubeubaubh‚)rY}rZ(hYXThe optional :pkg-section:`custom-setup` stanza contains information needed for the compilation of custom ``Setup.hs`` scripts,hZj0hehfhgh†hi}r[(hk]hl]hm]hn]hq]uhsMÄ hthhu]r\(h~X The optional r]…r^}r_(hYX The optional heNhsNhthhZjYubjp)r`}ra(hYX:pkg-section:`custom-setup`rbhZjYhehfhgjthi}rc(UreftypeX pkg-sectionjvˆjwX custom-setupU refdomainXcabalrdhn]hm]U refexplicit‰hk]hl]hq]jyjzuhsMÄ hu]rehä)rf}rg(hYjbhi}rh(hk]hl]ri(jjdXcabal-pkg-sectionrjehm]hn]hq]uhZj`hu]rkh~X custom-setuprl…rm}rn(hYUhZjfubahghìubaubh~XB stanza contains information needed for the compilation of custom ro…rp}rq(hYXB stanza contains information needed for the compilation of custom heNhsNhthhZjYubhä)rr}rs(hYX ``Setup.hs``hi}rt(hk]hl]hm]hn]hq]uhZjYhu]ruh~XSetup.hsrv…rw}rx(hYUhZjrubahghìubh~X scripts,ry…rz}r{(hYX scripts,heNhsNhthhZjYubeubeubeubjÑ)r|}r}(hYXUcustom-setup setup-depends: base >= 4.5 && < 4.11, Cabal >= 1.14 && < 1.25hZj¯hehfhgjÔhi}r~(jÖj×hn]hm]hk]hl]hq]uhsMÉ hthhu]rh~XUcustom-setup setup-depends: base >= 4.5 && < 4.11, Cabal >= 1.14 && < 1.25r€…r}r‚(hYUhZj|ubaubjþ)rƒ}r„(hYUhZj¯hehfhgjhi}r…(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r†}r‡(hYUhZj¯hehfhgjhi}rˆ(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr‰j j‰uhsNhthhu]rŠ(j)r‹}rŒ(hYXsetup-depends: package listhZj†hehfhgjhi}r(hn]rŽX$pkg-field-custom-setup-setup-dependsrahm]hk]hl]hq]j‰uhsNhthhu]r(jþ)r‘}r’(hYUhZj‹hehfhgjhi}r“(hn]hm]hk]hl]hq]Uentries]r”(jX/custom-setup:setup-depends; package.cabal fieldjUNtr•auhsNhthhu]ubj)r–}r—(hYX setup-dependsr˜hZj‹hehfhgj!hi}r™(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]ršh~X setup-dependsr›…rœ}r(hYUheNhsNhthhZj–ubaubj')rž}rŸ(hYU: r hZj‹hehfhgj*hi}r¡(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r¢h~X: r£…r¤}r¥(hYUheNhsNhthhZjžubaubcsphinx.addnodes desc_annotation r¦)r§}r¨(hYX package listhZj‹hehfhgUdesc_annotationr©hi}rª(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r«h~X package listr¬…r­}r®(hYUheNhsNhthhZj§ubaubeubj/)r¯}r°(hYUhZj†hehfhgj2hi}r±(hk]hl]hm]hn]hq]uhsNhthhu]r²(j5)r³}r´(hYUhZj¯hehfhgj8hi}rµ(hk]hl]hm]hn]hq]uhsNhthhu]r¶j;)r·}r¸(hYUhZj³hehfhgj>hi}r¹(hk]hl]hm]hn]hq]uhsNhthhu]rº(jA)r»}r¼(hYjDhZj·hehfhgjEhi}r½(hk]hl]hm]hn]hq]uhsKhu]r¾h~XSincer¿…rÀ}rÁ(hYUhZj»ubaubjK)rÂ}rÃ(hYU Cabal 1.24rÄhi}rÅ(hk]hl]hm]hn]hq]uhZj·hu]rÆh‚)rÇ}rÈ(hYjÄhi}rÉ(hk]hl]hm]hn]hq]uhZjÂhu]rÊh~X Cabal 1.24rË…rÌ}rÍ(hYUhZjÇubahgh†ubahgjXubeubaubh‚)rÎ}rÏ(hYX‘The dependencies needed to compile ``Setup.hs``. See the :pkg-field:`build-depends` field for a description of the syntax expected by this field.hZj¯hehfhgh†hi}rÐ(hk]hl]hm]hn]hq]uhsMÑ hthhu]rÑ(h~X#The dependencies needed to compile rÒ…rÓ}rÔ(hYX#The dependencies needed to compile heNhsNhthhZjÎubhä)rÕ}rÖ(hYX ``Setup.hs``hi}r×(hk]hl]hm]hn]hq]uhZjÎhu]rØh~XSetup.hsrÙ…rÚ}rÛ(hYUhZjÕubahghìubh~X . See the rÜ…rÝ}rÞ(hYX . See the heNhsNhthhZjÎubjp)rß}rà(hYX:pkg-field:`build-depends`ráhZjÎhehfhgjthi}râ(UreftypeX pkg-fieldjvˆjwX build-dependsU refdomainXcabalrãhn]hm]U refexplicit‰hk]hl]hq]jyjzjjuhsMÑ hu]rähä)rå}ræ(hYjáhi}rç(hk]hl]rè(jjãXcabal-pkg-fieldréehm]hn]hq]uhZjßhu]rêh~X build-dependsrë…rì}rí(hYUhZjåubahghìubaubh~X> field for a description of the syntax expected by this field.rî…rï}rð(hYX> field for a description of the syntax expected by this field.heNhsNhthhZjÎubeubeubeubh[)rñ}rò(hYUhZj¯hehfhghhhi}ró(hk]hl]hm]hn]rôU'backward-compatibility-and-custom-setuprõahq]röhauhsMÖ hthhu]r÷(hw)rø}rù(hYX+Backward compatibility and ``custom-setup``rúhZjñhehfhgh{hi}rû(hk]hl]hm]hn]hq]uhsMÖ hthhu]rü(h~XBackward compatibility and rý…rþ}rÿ(hYXBackward compatibility and rheNhsNhthhZjøubhä)r}r(hYX``custom-setup``rhi}r(hk]hl]hm]hn]hq]uhZjøhu]rh~X custom-setupr…r}r(hYUhZjubahghìubeubh‚)r }r (hYX¨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.hZjñhehfhgh†hi}r (hk]hl]hm]hn]hq]uhsMØ hthhu]r (h~X/Versions prior to Cabal 1.24 don’t recognise r …r}r(hYX-Versions prior to Cabal 1.24 don't recognise heNhsNhthhZj ubhä)r}r(hYX``custom-setup``hi}r(hk]hl]hm]hn]hq]uhZj hu]rh~X custom-setupr…r}r(hYUhZjubahghì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(hYX¬ 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 heNhsNhthhZj ubhä)r}r(hYX``setup-depends``hi}r(hk]hl]hm]hn]hq]uhZj hu]rh~X setup-dependsr…r}r (hYUhZjubahghì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#(hYXš are in scope, and instead whatever is registered in the current package database environment will become eligible (and resolved by the compiler) for the heNhsNhthhZj ubhä)r$}r%(hYX ``Setup.hs``hi}r&(hk]hl]hm]hn]hq]uhZj hu]r'h~XSetup.hsr(…r)}r*(hYUhZj$ubahghìubh~X module.r+…r,}r-(hYX module.heNhsNhthhZj ubeubh‚)r.}r/(hYXƒThe availability of the ``MIN_VERSION_package_(A,B,C)`` CPP macros inside ``Setup.hs`` scripts depends on the condition that eitherhZjñhehfhgh†hi}r0(hk]hl]hm]hn]hq]uhsMà hthhu]r1(h~XThe availability of the r2…r3}r4(hYXThe availability of the heNhsNhthhZj.ubhä)r5}r6(hYX``MIN_VERSION_package_(A,B,C)``hi}r7(hk]hl]hm]hn]hq]uhZj.hu]r8h~XMIN_VERSION_package_(A,B,C)r9…r:}r;(hYUhZj5ubahghìubh~X CPP macros inside r<…r=}r>(hYX CPP macros inside heNhsNhthhZj.ubhä)r?}r@(hYX ``Setup.hs``hi}rA(hk]hl]hm]hn]hq]uhZj.hu]rBh~XSetup.hsrC…rD}rE(hYUhZj?ubahghìubh~X- scripts depends on the condition that eitherrF…rG}rH(hYX- scripts depends on the condition that eitherheNhsNhthhZj.ubeubhŒ)rI}rJ(hYUhZjñhehfhghhi}rK(h‘X-hn]hm]hk]hl]hq]uhsMä hthhu]rL(h“)rM}rN(hYX¤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), orhZjIhehfhgh–hi}rO(hk]hl]hm]hn]hq]uhsNhthhu]rPh‚)rQ}rR(hYX¤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), orhZjMhehfhgh†hi}rS(hk]hl]hm]hn]hq]uhsMä hu]rT(h~Xa rU…rV}rW(hYXa hZjQubhä)rX}rY(hYX``custom-setup``hi}rZ(hk]hl]hm]hn]hq]uhZjQhu]r[h~X custom-setupr\…r]}r^(hYUhZjXubahghìubh~X section has been declared (or r_…r`}ra(hYX section has been declared (or hZjQubhä)rb}rc(hYX``cabal new-build``hi}rd(hk]hl]hm]hn]hq]uhZjQhu]reh~Xcabal new-buildrf…rg}rh(hYUhZjbubahghìubh~X4 is being used which injects an implicit hard-coded ri…rj}rk(hYX4 is being used which injects an implicit hard-coded hZjQubhä)rl}rm(hYX``custom-setup``hi}rn(hk]hl]hm]hn]hq]uhZjQhu]roh~X custom-setuprp…rq}rr(hYUhZjlubahghìubh~X stanza if it’s missing), orrs…rt}ru(hYX stanza if it's missing), orhZjQubeubaubh“)rv}rw(hYXMGHC 8.0 or later is used (which natively injects package version CPP macros) hZjIhehfhgh–hi}rx(hk]hl]hm]hn]hq]uhsNhthhu]ryh‚)rz}r{(hYXLGHC 8.0 or later is used (which natively injects package version CPP macros)r|hZjvhehfhgh†hi}r}(hk]hl]hm]hn]hq]uhsMæ hu]r~h~XLGHC 8.0 or later is used (which natively injects package version CPP macros)r…r€}r(hYj|hZjzubaubaubeubh‚)r‚}rƒ(hYXž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:hZjñhehfhgh†hi}r„(hk]hl]hm]hn]hq]uhsMè hthhu]r…(h~X7Consequently, if you need to write backward compatible r†…r‡}rˆ(hYX7Consequently, if you need to write backward compatible heNhsNhthhZj‚ubhä)r‰}rŠ(hYX ``Setup.hs``hi}r‹(hk]hl]hm]hn]hq]uhZj‚hu]rŒh~XSetup.hsr…rŽ}r(hYUhZj‰ubahghìubh~X) scripts using CPP, you should declare a r…r‘}r’(hYX) scripts using CPP, you should declare a heNhsNhthhZj‚ubhä)r“}r”(hYX``custom-setup``hi}r•(hk]hl]hm]hn]hq]uhZj‚hu]r–h~X custom-setupr—…r˜}r™(hYUhZj“ubahghìubh~X" stanza and use the pattern below:rš…r›}rœ(hYX" stanza and use the pattern below:heNhsNhthhZj‚ubeubjÑ)r}rž(hYX¬{-# 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 = ...hZjñhehfhgjÔhi}rŸ(j‰jXhaskelljÖj×hn]hm]hk]j}hl]hq]uhsMì hthhu]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£(hYUhZjubaubh‚)r¤}r¥(hYX…The simplified (heuristic) CPP pattern shown below is useful if all you need is to distinguish ``Cabal < 2.0`` from ``Cabal >= 2.0``.hZjñhehfhgh†hi}r¦(hk]hl]hm]hn]hq]uhsM hthhu]r§(h~X_The simplified (heuristic) CPP pattern shown below is useful if all you need is to distinguish r¨…r©}rª(hYX_The simplified (heuristic) CPP pattern shown below is useful if all you need is to distinguish heNhsNhthhZj¤ubhä)r«}r¬(hYX``Cabal < 2.0``hi}r­(hk]hl]hm]hn]hq]uhZj¤hu]r®h~X Cabal < 2.0r¯…r°}r±(hYUhZj«ubahghìubh~X from r²…r³}r´(hYX from heNhsNhthhZj¤ubhä)rµ}r¶(hYX``Cabal >= 2.0``hi}r·(hk]hl]hm]hn]hq]uhZj¤hu]r¸h~X Cabal >= 2.0r¹…rº}r»(hYUhZjµubahghìubh~X.…r¼}r½(hYX.heNhsNhthhZj¤ubeubjÑ)r¾}r¿(hYXë{-# 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 = ...hZjñhehfhgjÔhi}rÀ(j‰jXhaskelljÖj×hn]hm]hk]j}hl]hq]uhsM hthhu]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Ä(hYUhZj¾ubaubeubeubh[)rÅ}rÆ(hYUhZhchehfhghhhi}rÇ(hk]hl]hm]hn]rÈUautogenerated-modulesrÉahq]rÊhOauhsM hthhu]rË(hw)rÌ}rÍ(hYXAutogenerated modulesrÎhZjÅhehfhgh{hi}rÏ(hk]hl]hm]hn]hq]uhsM hthhu]rÐh~XAutogenerated modulesrÑ…rÒ}rÓ(hYjÎheNhsNhthhZjÌubaubh‚)rÔ}rÕ(hYXzModules 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.hZjÅhehfhgh†hi}rÖ(hk]hl]hm]hn]hq]uhsM hthhu]r×(h~XbModules that are built automatically at setup, created with a custom setup script, must appear on rØ…rÙ}rÚ(hYXbModules that are built automatically at setup, created with a custom setup script, must appear on heNhsNhthhZjÔubjp)rÛ}rÜ(hYX:pkg-field:`other-modules`rÝhZjÔhehfhgjthi}rÞ(UreftypeX pkg-fieldjvˆjwX other-modulesU refdomainXcabalrßhn]hm]U refexplicit‰hk]hl]hq]jyjzjjuhsM hu]ràhä)rá}râ(hYjÝhi}rã(hk]hl]rä(jjßXcabal-pkg-fieldråehm]hn]hq]uhZjÛhu]ræh~X other-modulesrç…rè}ré(hYUhZjáubahghìubaubh~XI for the library, executable, test-suite or benchmark stanzas or also on rê…rë}rì(hYXI for the library, executable, test-suite or benchmark stanzas or also on heNhsNhthhZjÔubjp)rí}rî(hYX$:pkg-field:`library:exposed-modules`rïhZjÔhehfhgjthi}rð(UreftypeX pkg-fieldjvˆjwXexposed-modulesU refdomainXcabalrñhn]hm]U refexplicit‰hk]hl]hq]jyjzjXlibraryuhsM hu]ròhä)ró}rô(hYjïhi}rõ(hk]hl]rö(jjñXcabal-pkg-fieldr÷ehm]hn]hq]uhZjíhu]røh~Xlibrary:exposed-modulesrù…rú}rû(hYUhZjóubahghì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þ(hYX‘ 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.heNhsNhthhZjÔubeubh‚)rÿ}r(hYXThese 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.hZjÅhehfhgh†hi}r(hk]hl]hm]hn]hq]uhsM# hthhu]r(h~X/These special modules must appear again on the r…r}r(hYX/These special modules must appear again on the heNhsNhthhZjÿubjp)r}r(hYX:pkg-field:`autogen-modules`rhZjÿhehfhgjthi}r (UreftypeX pkg-fieldjvˆjwXautogen-modulesU refdomainXcabalr hn]hm]U refexplicit‰hk]hl]hq]jyjzjjuhsM# hu]r hä)r }r (hYjhi}r(hk]hl]r(jj Xcabal-pkg-fieldrehm]hn]hq]uhZjhu]rh~Xautogen-modulesr…r}r(hYUhZj ubahghìubaubh~X/ field of the stanza that is using it, besides r…r}r(hYX/ field of the stanza that is using it, besides heNhsNhthhZjÿubjp)r}r(hYX:pkg-field:`other-modules`rhZjÿhehfhgjthi}r(UreftypeX pkg-fieldjvˆjwX other-modulesU refdomainXcabalrhn]hm]U refexplicit‰hk]hl]hq]jyjzjjuhsM# hu]rhä)r}r(hYjhi}r (hk]hl]r!(jjXcabal-pkg-fieldr"ehm]hn]hq]uhZjhu]r#h~X other-modulesr$…r%}r&(hYUhZjubahghìubaubh~X or r'…r(}r)(hYX or heNhsNhthhZjÿubjp)r*}r+(hYX$:pkg-field:`library:exposed-modules`r,hZjÿhehfhgjthi}r-(UreftypeX pkg-fieldjvˆjwXexposed-modulesU refdomainXcabalr.hn]hm]U refexplicit‰hk]hl]hq]jyjzjXlibraryuhsM# hu]r/hä)r0}r1(hYj,hi}r2(hk]hl]r3(jj.Xcabal-pkg-fieldr4ehm]hn]hq]uhZj*hu]r5h~Xlibrary:exposed-modulesr6…r7}r8(hYUhZj0ubahghìubaubh~XS. With this there is no need to create complex build hooks for this poweruser case.r9…r:}r;(hYXS. With this there is no need to create complex build hooks for this poweruser case.heNhsNhthhZjÿubeubjþ)r<}r=(hYUhZjÅheNhgjhi}r>(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r?}r@(hYUhZjÅheNhgjhi}rA(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrBj jBuhsNhthhu]rC(j)rD}rE(hYXautogen-modules: module listhZj?hehfhgjhi}rF(hn]rGX&pkg-field-custom-setup-autogen-modulesrHahm]hk]hl]hq]j‰uhsNhthhu]rI(jþ)rJ}rK(hYUhZjDhehfhgjhi}rL(hn]hm]hk]hl]hq]Uentries]rM(jX1custom-setup:autogen-modules; package.cabal fieldjHUNtrNauhsNhthhu]ubj)rO}rP(hYXautogen-modulesrQhZjDhehfhgj!hi}rR(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rSh~Xautogen-modulesrT…rU}rV(hYUheNhsNhthhZjOubaubj')rW}rX(hYj hZjDhehfhgj*hi}rY(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rZh~X: r[…r\}r](hYUheNhsNhthhZjWubaubj¦)r^}r_(hYX module listhZjDhehfhgj©hi}r`(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rah~X module listrb…rc}rd(hYUheNhsNhthhZj^ubaubeubj/)re}rf(hYUhZj?hehfhgj2hi}rg(hk]hl]hm]hn]hq]uhsNhthhu]rh(j5)ri}rj(hYUhZjeheNhgj8hi}rk(hk]hl]hm]hn]hq]uhsNhthhu]rlj;)rm}rn(hYUhZjiheNhgj>hi}ro(hk]hl]hm]hn]hq]uhsNhthhu]rp(jA)rq}rr(hYjDhZjmhehfhgjEhi}rs(hk]hl]hm]hn]hq]uhsKhu]rth~XSinceru…rv}rw(hYUhZjqubaubjK)rx}ry(hYU Cabal 2.0rzhi}r{(hk]hl]hm]hn]hq]uhZjmhu]r|h‚)r}}r~(hYjzhi}r(hk]hl]hm]hn]hq]uhZjxhu]r€h~X Cabal 2.0r…r‚}rƒ(hYUhZj}ubahgh†ubahgjXubeubaubcdocutils.nodes comment r„)r…}r†(hYX$TODO: document autogen-modules fieldhZjehehfhgUcommentr‡hi}rˆ(jÖj×hn]hm]hk]hl]hq]uhsM+ hthhu]r‰h~X$TODO: document autogen-modules fieldrŠ…r‹}rŒ(hYUhZj…ubaubeubeubh‚)r}rŽ(hYXdRight now :pkg-field:`executable:main-is` modules are not supported on :pkg-field:`autogen-modules`.hZjÅhehfhgh†hi}r(hk]hl]hm]hn]hq]uhsM- hthhu]r(h~X Right now r‘…r’}r“(hYX Right now heNhsNhthhZjubjp)r”}r•(hYX:pkg-field:`executable:main-is`r–hZjhehfhgjthi}r—(UreftypeX pkg-fieldjvˆjwXmain-isU refdomainXcabalr˜hn]hm]U refexplicit‰hk]hl]hq]jyjzjX executableuhsM- hu]r™hä)rš}r›(hYj–hi}rœ(hk]hl]r(jj˜Xcabal-pkg-fieldržehm]hn]hq]uhZj”hu]rŸh~Xexecutable:main-isr …r¡}r¢(hYUhZjšubahghìubaubh~X modules are not supported on r£…r¤}r¥(hYX modules are not supported on heNhsNhthhZjubjp)r¦}r§(hYX:pkg-field:`autogen-modules`r¨hZjhehfhgjthi}r©(UreftypeX pkg-fieldjvˆjwXautogen-modulesU refdomainXcabalrªhn]hm]U refexplicit‰hk]hl]hq]jyjzjjuhsM- hu]r«hä)r¬}r­(hYj¨hi}r®(hk]hl]r¯(jjªXcabal-pkg-fieldr°ehm]hn]hq]uhZj¦hu]r±h~Xautogen-modulesr²…r³}r´(hYUhZj¬ubahghìubaubh~X.…rµ}r¶(hYX.heNhsNhthhZjubeubjÑ)r·}r¸(hYX¨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: MyExeHelperModulehZjÅhehfhgjÔhi}r¹(jÖj×hn]hm]hk]hl]hq]uhsM2 hthhu]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½(hYUhZj·ubaubeubh[)r¾}r¿(hYUhZhchehfhghhhi}rÀ(hk]hl]hm]hn]rÁU&accessing-data-files-from-package-coderÂahq]rÃhauhsMH hthhu]rÄ(hw)rÅ}rÆ(hYX&Accessing data files from package coderÇhZj¾hehfhgh{hi}rÈ(hk]hl]hm]hn]hq]uhsMH hthhu]rÉh~X&Accessing data files from package coderÊ…rË}rÌ(hYjÇheNhsNhthhZjÅubaubh‚)rÍ}rÎ(hYXThe 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 functionhZj¾hehfhgh†hi}rÏ(hk]hl]hm]hn]hq]uhsMJ hthhu]rÐ(h~X:The placement on the target system of files listed in the rÑ…rÒ}rÓ(hYX:The placement on the target system of files listed in the heNhsNhthhZjÍubjp)rÔ}rÕ(hYX:pkg-field:`data-files`rÖhZjÍhehfhgjthi}r×(UreftypeX pkg-fieldjvˆjwX data-filesU refdomainXcabalrØhn]hm]U refexplicit‰hk]hl]hq]jyjzjjuhsMJ hu]rÙhä)rÚ}rÛ(hYjÖhi}rÜ(hk]hl]rÝ(jjØXcabal-pkg-fieldrÞehm]hn]hq]uhZjÔhu]rßh~X data-filesrà…rá}râ(hYUhZjÚubahghìubaubh~Xk field varies between systems, and in some cases one can even move packages around after installation (see rã…rä}rå(hYXk field varies between systems, and in some cases one can even move packages around after installation (see heNhsNhthhZjÍubjD)ræ}rç(hYXF`prefix independence `__hi}rè(UnameXprefix independencejƒX,installing-packages.html#prefix-independencehn]hm]hk]hl]hq]uhZjÍhu]réh~Xprefix independencerê…rë}rì(hYUhZjæubahgjHubh~X]). To enable packages to find these files in a portable way, Cabal generates a module called rí…rî}rï(hYX]). To enable packages to find these files in a portable way, Cabal generates a module called heNhsNhthhZjÍubhä)rð}rñ(hYX Paths_pkgnamehi}rò(hn]hm]hk]hl]róXfilerôaUrolejôhq]uhZjÍhu]rõ(h~XPaths_rö…r÷}rø(hYXPaths_hZjðubhÄ)rù}rú(hYXpkgnamehi}rû(hk]hl]hm]hn]hq]uhZjðhu]rüh~Xpkgnamerý…rþ}rÿ(hYUhZjùubahghÌubehghìubh~X (with any hyphens in r…r}r(hYX (with any hyphens in heNhsNhthhZjÍubhÄ)r}r(hYX *pkgname*hi}r(hk]hl]hm]hn]hq]uhZjÍhu]rh~Xpkgnamer…r}r (hYUhZjubahghÌ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 (hYX replaced by underscores) during building, so that it may be imported by modules of the package. This module defines a functionheNhsNhthhZjÍubeubjÑ)r }r(hYX*getDataFileName :: FilePath -> IO FilePathhZj¾hehfhgjÔhi}r(j‰jXhaskelljÖj×hn]hm]hk]j}hl]hq]uhsMS hthhu]rh~X*getDataFileName :: FilePath -> IO FilePathr…r}r(hYUhZj ubaubh‚)r}r(hYXª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.hZj¾hehfhgh†hi}r(hk]hl]hm]hn]hq]uhsMW hthhu]r(h~X,If the argument is a filename listed in the r…r}r(hYX,If the argument is a filename listed in the heNhsNhthhZjubjp)r}r(hYX:pkg-field:`data-files`rhZjhehfhgjthi}r(UreftypeX pkg-fieldjvˆjwX data-filesU refdomainXcabalrhn]hm]U refexplicit‰hk]hl]hq]jyjzjjuhsMW hu]r hä)r!}r"(hYjhi}r#(hk]hl]r$(jjXcabal-pkg-fieldr%ehm]hn]hq]uhZjhu]r&h~X data-filesr'…r(}r)(hYUhZj!ubahghìubaubh~Xg field, the result is the name of the corresponding file on the system on which the program is running.r*…r+}r,(hYXg field, the result is the name of the corresponding file on the system on which the program is running.heNhsNhthhZjubeubhð)r-}r.(hYXè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.hZj¾hehfhghóhi}r/(hk]hl]hm]hn]hq]uhsNhthhu]r0h‚)r1}r2(hYXè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.hZj-hehfhgh†hi}r3(hk]hl]hm]hn]hq]uhsM] hu]r4(h~XIf you decide to import the r5…r6}r7(hYXIf you decide to import the hZj1ubhä)r8}r9(hYX Paths_pkgnamehi}r:(hn]hm]hk]hl]r;Xfiler<aUrolej<hq]uhZj1hu]r=(h~XPaths_r>…r?}r@(hYXPaths_hZj8ubhÄ)rA}rB(hYXpkgnamehi}rC(hk]hl]hm]hn]hq]uhZj8hu]rDh~XpkgnamerE…rF}rG(hYUhZjAubahghÌubehghìubh~X module then it rH…rI}rJ(hYX module then it hZj1ubhÄ)rK}rL(hYX*must*hi}rM(hk]hl]hm]hn]hq]uhZj1hu]rNh~XmustrO…rP}rQ(hYUhZjKubahghÌubh~X be listed in the rR…rS}rT(hYX be listed in the hZj1ubjp)rU}rV(hYX:pkg-field:`other-modules`rWhZj1hehfhgjthi}rX(UreftypeX pkg-fieldjvˆjwX other-modulesU refdomainXcabalrYhn]hm]U refexplicit‰hk]hl]hq]jyjzjjuhsM] hu]rZhä)r[}r\(hYjWhi}r](hk]hl]r^(jjYXcabal-pkg-fieldr_ehm]hn]hq]uhZjUhu]r`h~X other-modulesra…rb}rc(hYUhZj[ubahghìubaubh~X9 field just like any other module in your package and on rd…re}rf(hYX9 field just like any other module in your package and on hZj1ubjp)rg}rh(hYX:pkg-field:`autogen-modules`rihZj1hehfhgjthi}rj(UreftypeX pkg-fieldjvˆjwXautogen-modulesU refdomainXcabalrkhn]hm]U refexplicit‰hk]hl]hq]jyjzjjuhsM] hu]rlhä)rm}rn(hYjihi}ro(hk]hl]rp(jjkXcabal-pkg-fieldrqehm]hn]hq]uhZjghu]rrh~Xautogen-modulesrs…rt}ru(hYUhZjmubahghìubaubh~X as the file is autogenerated.rv…rw}rx(hYX as the file is autogenerated.hZj1ubeubaubh‚)ry}rz(hYX­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``.hZj¾hehfhgh†hi}r{(hk]hl]hm]hn]hq]uhsMb hthhu]r|(h~XThe r}…r~}r(hYXThe heNhsNhthhZjyubhä)r€}r(hYX Paths_pkgnamehi}r‚(hn]hm]hk]hl]rƒXfiler„aUrolej„hq]uhZjyhu]r…(h~XPaths_r†…r‡}rˆ(hYXPaths_hZj€ubhÄ)r‰}rŠ(hYXpkgnamehi}r‹(hk]hl]hm]hn]hq]uhZj€hu]rŒh~Xpkgnamer…rŽ}r(hYUhZj‰ubahghÌubehghì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’(hYXˆ module is not platform independent, as any other autogenerated module, so it does not get included in the source tarballs generated by heNhsNhthhZjyubhä)r“}r”(hYX ``sdist``hi}r•(hk]hl]hm]hn]hq]uhZjyhu]r–h~Xsdistr—…r˜}r™(hYUhZj“ubahghìubh~X.…rš}r›(hYX.heNhsNhthhZjyubeubh‚)rœ}r(hYXThe :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``):hZj¾hehfhgh†hi}rž(hk]hl]hm]hn]hq]uhsMf hthhu]rŸ(h~XThe r …r¡}r¢(hYXThe heNhsNhthhZjœubhä)r£}r¤(hYX Paths_pkgnamehi}r¥(hn]hm]hk]hl]r¦Xfiler§aUrolej§hq]uhZjœhu]r¨(h~XPaths_r©…rª}r«(hYXPaths_hZj£ubhÄ)r¬}r­(hYXpkgnamehi}r®(hk]hl]hm]hn]hq]uhZj£hu]r¯h~Xpkgnamer°…r±}r²(hYUhZj¬ubahghÌubehghì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µ(hYXÕ 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 heNhsNhthhZjœubhä)r¶}r·(hYX``getDataDir``hi}r¸(hk]hl]hm]hn]hq]uhZjœhu]r¹h~X getDataDirrº…r»}r¼(hYUhZj¶ubahghìubh~X):r½…r¾}r¿(hYX):heNhsNhthhZjœubeubjÑ)rÀ}rÁ(hYXµversion :: Version getBinDir :: IO FilePath getLibDir :: IO FilePath getDynLibDir :: IO FilePath getDataDir :: IO FilePath getLibexecDir :: IO FilePath getSysconfDir :: IO FilePathhZj¾hehfhgjÔhi}rÂ(j‰jXhaskelljÖj×hn]hm]hk]j}hl]hq]uhsMk hthhu]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Æ(hYUhZjÀubaubh‚)rÇ}rÈ(hYXÚ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.hZj¾hehfhgh†hi}rÉ(hk]hl]hm]hn]hq]uhsMv hthhu]rÊ(h~XThe actual location of all these directories can be individually overridden at runtime using environment variables of the form rË…rÌ}rÍ(hYXThe actual location of all these directories can be individually overridden at runtime using environment variables of the form heNhsNhthhZjÇubhä)rÎ}rÏ(hYX``pkg_name_var``hi}rÐ(hk]hl]hm]hn]hq]uhZjÇhu]rÑh~X pkg_name_varrÒ…rÓ}rÔ(hYUhZjÎubahghìubh~X, where rÕ…rÖ}r×(hYX, where heNhsNhthhZjÇubhä)rØ}rÙ(hYX ``pkg_name``hi}rÚ(hk]hl]hm]hn]hq]uhZjÇhu]rÛh~Xpkg_namerÜ…rÝ}rÞ(hYUhZjØubahghìubh~XM is the name of the package with all hyphens converted into underscores, and rß…rà}rá(hYXM is the name of the package with all hyphens converted into underscores, and heNhsNhthhZjÇubhä)râ}rã(hYX``var``hi}rä(hk]hl]hm]hn]hq]uhZjÇhu]råh~Xvarræ…rç}rè(hYUhZjâubahghìubh~X is either ré…rê}rë(hYX is either heNhsNhthhZjÇubhä)rì}rí(hYX ``bindir``hi}rî(hk]hl]hm]hn]hq]uhZjÇhu]rïh~Xbindirrð…rñ}rò(hYUhZjìubahghìubh~X, ró…rô}rõ(hYX, heNhsNhthhZjÇubhä)rö}r÷(hYX ``libdir``hi}rø(hk]hl]hm]hn]hq]uhZjÇhu]rùh~Xlibdirrú…rû}rü(hYUhZjöubahghìubh~X, rý…rþ}rÿ(hYX, rheNhsNhthhZjÇubhä)r}r(hYX ``dynlibdir``hi}r(hk]hl]hm]hn]hq]uhZjÇhu]rh~X dynlibdirr…r}r(hYUhZjubahghìubh~X, r…r }r (hYX, hZjÇubhä)r }r (hYX ``datadir``hi}r (hk]hl]hm]hn]hq]uhZjÇhu]rh~Xdatadirr…r}r(hYUhZj ubahghìubh~X, r…r}r(hYjhZjÇubhä)r}r(hYX ``libexedir``hi}r(hk]hl]hm]hn]hq]uhZjÇhu]rh~X libexedirr…r}r(hYUhZjubahghìubh~X or r…r}r(hYX or heNhsNhthhZjÇubhä)r}r (hYX``sysconfdir``hi}r!(hk]hl]hm]hn]hq]uhZjÇhu]r"h~X sysconfdirr#…r$}r%(hYUhZjubahghìubh~X1. For example, the configured data directory for r&…r'}r((hYX1. For example, the configured data directory for heNhsNhthhZjÇubhä)r)}r*(hYX``pretty-show``hi}r+(hk]hl]hm]hn]hq]uhZjÇhu]r,h~X pretty-showr-…r.}r/(hYUhZj)ubahghìubh~X is controlled with the r0…r1}r2(hYX is controlled with the heNhsNhthhZjÇubhä)r3}r4(hYX``pretty_show_datadir``hi}r5(hk]hl]hm]hn]hq]uhZjÇhu]r6h~Xpretty_show_datadirr7…r8}r9(hYUhZj3ubahghìubh~X environment variable.r:…r;}r<(hYX environment variable.heNhsNhthhZjÇubeubh[)r=}r>(hYUhZj¾hehfhghhhi}r?(hk]hl]hm]hn]r@Uaccessing-the-package-versionrAahq]rBh$auhsM hthhu]rC(hw)rD}rE(hYXAccessing the package versionrFhZj=hehfhgh{hi}rG(hk]hl]hm]hn]hq]uhsM hthhu]rHh~XAccessing the package versionrI…rJ}rK(hYjFheNhsNhthhZjDubaubh‚)rL}rM(hYX 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.hZj=hehfhgh†hi}rN(hk]hl]hm]hn]hq]uhsM hthhu]rO(h~X"The aforementioned auto generated rP…rQ}rR(hYX"The aforementioned auto generated heNhsNhthhZjLubhä)rS}rT(hYX Paths_pkgnamehi}rU(hn]hm]hk]hl]rVXfilerWaUrolejWhq]uhZjLhu]rX(h~XPaths_rY…rZ}r[(hYXPaths_hZjSubhÄ)r\}r](hYXpkgnamehi}r^(hk]hl]hm]hn]hq]uhZjShu]r_h~Xpkgnamer`…ra}rb(hYUhZj\ubahghÌubehghìubh~X" module also exports the constant rc…rd}re(hYX" module also exports the constant heNhsNhthhZjLubhä)rf}rg(hYX``version ::``hi}rh(hk]hl]hm]hn]hq]uhZjLhu]rih~X version ::rj…rk}rl(hYUhZjfubahghìubh~X …rm}rn(hYX heNhsNhthhZjLubjD)ro}rp(hYXL`Version `__hi}rq(UnameXVersionjƒX>http://hackage.haskell.org/package/base/docs/Data-Version.htmlhn]hm]hk]hl]hq]uhZjLhu]rrh~XVersionrs…rt}ru(hYUhZjoubahgjHubh~XE which is defined as the version of your package as specified in the rv…rw}rx(hYXE which is defined as the version of your package as specified in the heNhsNhthhZjLubhä)ry}rz(hYX ``version``hi}r{(hk]hl]hm]hn]hq]uhZjLhu]r|h~Xversionr}…r~}r(hYUhZjyubahghìubh~X field.r€…r}r‚(hYX field.heNhsNhthhZjLubeubeubeubh[)rƒ}r„(hYUh^KhZhchehfhghhhi}r…(hk]hl]hm]hn]r†j•ahq]r‡hauhsMˆ hthhu]rˆ(hw)r‰}rŠ(hYXSystem-dependent parametersr‹hZjƒhehfhgh{hi}rŒ(hk]hl]hm]hn]hq]uhsMˆ hthhu]rh~XSystem-dependent parametersrŽ…r}r(hYj‹heNhsNhthhZj‰ubaubh‚)r‘}r’(hYXFor 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:hZjƒhehfhgh†hi}r“(hk]hl]hm]hn]hq]uhsMŠ hthhu]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—(hYX–For some packages, especially those interfacing with C libraries, implementation details and the build procedure depend on the build environment. The heNhsNhthhZj‘ubhä)r˜}r™(hYX``build-type``hi}rš(hk]hl]hm]hn]hq]uhZj‘hu]r›h~X build-typerœ…r}rž(hYUhZj˜ubahghìubh~X …rŸ}r (hYX heNhsNhthhZj‘ubhä)r¡}r¢(hYX ``Configure``hi}r£(hk]hl]hm]hn]hq]uhZj‘hu]r¤h~X Configurer¥…r¦}r§(hYUhZj¡ubahghìubh~X; can be used to handle many such situations. In this case, r¨…r©}rª(hYX; can be used to handle many such situations. In this case, heNhsNhthhZj‘ubhä)r«}r¬(hYX ``Setup.hs``hi}r­(hk]hl]hm]hn]hq]uhZj‘hu]r®h~XSetup.hsr¯…r°}r±(hYUhZj«ubahghìubh~X should be:r²…r³}r´(hYX should be:heNhsNhthhZj‘ubeubjÑ)rµ}r¶(hYXHimport Distribution.Simple main = defaultMainWithHooks autoconfUserHookshZjƒhehfhgjÔhi}r·(j‰jXhaskelljÖj×hn]hm]hk]j}hl]hq]uhsM hthhu]r¸h~XHimport Distribution.Simple main = defaultMainWithHooks autoconfUserHooksr¹…rº}r»(hYUhZjµubaubh‚)r¼}r½(hYXgMost packages, however, would probably do better using the ``Simple`` build type and `configurations`_.hZjƒhehfhgh†hi}r¾(hk]hl]hm]hn]hq]uhsM” hthhu]r¿(h~X;Most packages, however, would probably do better using the rÀ…rÁ}rÂ(hYX;Most packages, however, would probably do better using the heNhsNhthhZj¼ubhä)rÃ}rÄ(hYX ``Simple``hi}rÅ(hk]hl]hm]hn]hq]uhZj¼hu]rÆh~XSimplerÇ…rÈ}rÉ(hYUhZjÃubahghìubh~X build type and rÊ…rË}rÌ(hYX build type and heNhsNhthhZj¼ubjD)rÍ}rÎ(hYX`configurations`_jGKhZj¼hgjHhi}rÏ(UnameXconfigurationshn]hm]hk]hl]hq]jJUconfigurationsrÐuhu]rÑh~XconfigurationsrÒ…rÓ}rÔ(hYUhZjÍubaubh~X.…rÕ}rÖ(hYX.heNhsNhthhZj¼ubeubh‚)r×}rØ(hYXNThe :pkg-field:`build-type` ``Configure`` differs from ``Simple`` in two ways:rÙhZjƒhehfhgh†hi}rÚ(hk]hl]hm]hn]hq]uhsM— hthhu]rÛ(h~XThe rÜ…rÝ}rÞ(hYXThe heNhsNhthhZj×ubjp)rß}rà(hYX:pkg-field:`build-type`ráhZj×hehfhgjthi}râ(UreftypeX pkg-fieldjvˆjwX build-typeU refdomainXcabalrãhn]hm]U refexplicit‰hk]hl]hq]jyjzjjuhsM— hu]rähä)rå}ræ(hYjáhi}rç(hk]hl]rè(jjãXcabal-pkg-fieldréehm]hn]hq]uhZjßhu]rêh~X build-typerë…rì}rí(hYUhZjåubahghìubaubh~X …rî}rï(hYX heNhsNhthhZj×ubhä)rð}rñ(hYX ``Configure``hi}rò(hk]hl]hm]hn]hq]uhZj×hu]róh~X Configurerô…rõ}rö(hYUhZjðubahghìubh~X differs from r÷…rø}rù(hYX differs from heNhsNhthhZj×ubhä)rú}rû(hYX ``Simple``hi}rü(hk]hl]hm]hn]hq]uhZj×hu]rýh~XSimplerþ…rÿ}r(hYUhZjúubahghìubh~X in two ways:r…r}r(hYX in two ways:heNhsNhthhZj×ubeubhŒ)r}r(hYUhZjƒhehfhghhi}r(h‘X-hn]hm]hk]hl]hq]uhsM™ hthhu]r(h“)r}r (hYX'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.) hZjhehfhgh–hi}r (hk]hl]hm]hn]hq]uhsNhthhu]r h‚)r }r (hYX&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.)hZjhehfhgh†hi}r(hk]hl]hm]hn]hq]uhsM™ hu]r(h~X>The package root directory must contain a shell script called r…r}r(hYX>The package root directory must contain a shell script called hZj ubhä)r}r(hYX ``configure``hi}r(hk]hl]hm]hn]hq]uhZj hu]rh~X configurer…r}r(hYUhZjubahghìubh~X/. The configure step will run the script. This r…r}r(hYX/. The configure step will run the script. This hZj ubhä)r}r(hYX ``configure``hi}r(hk]hl]hm]hn]hq]uhZj hu]r h~X configurer!…r"}r#(hYUhZjubahghìubh~X script may be produced by r$…r%}r&(hYX script may be produced by hZj ubjD)r'}r((hYX4`autoconf `__hi}r)(UnameXautoconfjƒX%http://www.gnu.org/software/autoconf/hn]hm]hk]hl]hq]uhZj hu]r*h~Xautoconfr+…r,}r-(hYUhZj'ubahgjHubh~X or may be hand-written. The r.…r/}r0(hYX or may be hand-written. The hZj ubhä)r1}r2(hYX ``configure``hi}r3(hk]hl]hm]hn]hq]uhZj hu]r4h~X configurer5…r6}r7(hYUhZj1ubahghì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.)r8…r9}r:(hYX& 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.)hZj ubeubaubh“)r;}r<(hYXIf 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. hZjhehfhgh–hi}r=(hk]hl]hm]hn]hq]uhsNhthhu]r>h‚)r?}r@(hYXœ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.hZj;hehfhgh†hi}rA(hk]hl]hm]hn]hq]uhsM£ hu]rB(h~X5If the package root directory contains a file called rC…rD}rE(hYX5If the package root directory contains a file called hZj?ubhÄ)rF}rG(hYX *package*hi}rH(hk]hl]hm]hn]hq]uhZj?hu]rIh~XpackagerJ…rK}rL(hYUhZjFubahghÌubh~X…rM}rN(hYX\ hZj?ubhä)rO}rP(hYX``.buildinfo``hi}rQ(hk]hl]hm]hn]hq]uhZj?hu]rRh~X .buildinforS…rT}rU(hYUhZjOubahghìubh~X_ after the configuration step, subsequent steps will read it to obtain additional settings for rV…rW}rX(hYX_ after the configuration step, subsequent steps will read it to obtain additional settings for hZj?ubjD)rY}rZ(hYX`build information`_jGKhZj?hgjHhi}r[(UnameXbuild informationhn]hm]hk]hl]hq]jJUbuild-informationr\uhu]r]h~Xbuild informationr^…r_}r`(hYUhZjYubaubh~X0 fields,to be merged with the ones given in the ra…rb}rc(hYX0 fields,to be merged with the ones given in the hZj?ubhä)rd}re(hYX ``.cabal``hi}rf(hk]hl]hm]hn]hq]uhZj?hu]rgh~X.cabalrh…ri}rj(hYUhZjdubahghìubh~X8 file. In particular, this file may be generated by the rk…rl}rm(hYX8 file. In particular, this file may be generated by the hZj?ubhä)rn}ro(hYX ``configure``hi}rp(hk]hl]hm]hn]hq]uhZj?hu]rqh~X configurerr…rs}rt(hYUhZjnubahghìubh~X\ script mentioned above, allowing these settings to vary depending on the build environment.ru…rv}rw(hYX\ script mentioned above, allowing these settings to vary depending on the build environment.hZj?ubeubaubeubh‚)rx}ry(hYX?The build information file should have the following structure:rzhZjƒhehfhgh†hi}r{(hk]hl]hm]hn]hq]uhsM« hthhu]r|h~X?The build information file should have the following structure:r}…r~}r(hYjzheNhsNhthhZjxubaubcdocutils.nodes block_quote r€)r}r‚(hYUhZjƒhehfhgU block_quoterƒhi}r„(hk]hl]hm]hn]hq]uhsNhthhu]r…(h‚)r†}r‡(hYX *buildinfo*rˆhZjhehfhgh†hi}r‰(hk]hl]hm]hn]hq]uhsM­ hu]rŠhÄ)r‹}rŒ(hYjˆhi}r(hk]hl]hm]hn]hq]uhZj†hu]rŽh~X buildinfor…r}r‘(hYUhZj‹ubahghÌubaubh‚)r’}r“(hYX"``executable:`` *name* *buildinfo*hZjhehfhgh†hi}r”(hk]hl]hm]hn]hq]uhsM¯ hu]r•(hä)r–}r—(hYX``executable:``hi}r˜(hk]hl]hm]hn]hq]uhZj’hu]r™h~X executable:rš…r›}rœ(hYUhZj–ubahghìubh~X …r}rž(hYX hZj’ubhÄ)rŸ}r (hYX*name*hi}r¡(hk]hl]hm]hn]hq]uhZj’hu]r¢h~Xnamer£…r¤}r¥(hYUhZjŸubahghÌubh~X …r¦}r§(hYX hZj’ubhÄ)r¨}r©(hYX *buildinfo*hi}rª(hk]hl]hm]hn]hq]uhZj’hu]r«h~X buildinfor¬…r­}r®(hYUhZj¨ubahghÌubeubh‚)r¯}r°(hYX&``executable:`` *name* *buildinfo* ...hZjhehfhgh†hi}r±(hk]hl]hm]hn]hq]uhsM± hu]r²(hä)r³}r´(hYX``executable:``hi}rµ(hk]hl]hm]hn]hq]uhZj¯hu]r¶h~X executable:r·…r¸}r¹(hYUhZj³ubahghìubh~X …rº}r»(hYX hZj¯ubhÄ)r¼}r½(hYX*name*hi}r¾(hk]hl]hm]hn]hq]uhZj¯hu]r¿h~XnamerÀ…rÁ}rÂ(hYUhZj¼ubahghÌubh~X …rÃ}rÄ(hYX hZj¯ubhÄ)rÅ}rÆ(hYX *buildinfo*hi}rÇ(hk]hl]hm]hn]hq]uhZj¯hu]rÈh~X buildinforÉ…rÊ}rË(hYUhZjÅubahghÌubh~X …rÌ…rÍ}rÎ(hYX ...hZj¯ubeubeubh‚)rÏ}rÐ(hYX4where 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.)hZjƒhehfhgh†hi}rÑ(hk]hl]hm]hn]hq]uhsM³ hthhu]rÒ(h~X where each rÓ…rÔ}rÕ(hYX where each heNhsNhthhZjÏubhÄ)rÖ}r×(hYX *buildinfo*hi}rØ(hk]hl]hm]hn]hq]uhZjÏhu]rÙh~X buildinforÚ…rÛ}rÜ(hYUhZjÖubahghÌubh~X9 consists of settings of fields listed in the section on rÝ…rÞ}rß(hYX9 consists of settings of fields listed in the section on heNhsNhthhZjÏubjD)rà}rá(hYX`build information`_jGKhZjÏhgjHhi}râ(UnameXbuild informationhn]hm]hk]hl]hq]jJj\uhu]rãh~Xbuild informationrä…rå}ræ(hYUhZjà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é(hYXÑ. 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.)heNhsNhthhZjÏubeubh‚)rê}rë(hYXkNeither of these files is required. If they are absent, this setup script is equivalent to ``defaultMain``.hZjƒhehfhgh†hi}rì(hk]hl]hm]hn]hq]uhsM¹ hthhu]rí(h~X[Neither of these files is required. If they are absent, this setup script is equivalent to rî…rï}rð(hYX[Neither of these files is required. If they are absent, this setup script is equivalent to heNhsNhthhZjêubhä)rñ}rò(hYX``defaultMain``hi}ró(hk]hl]hm]hn]hq]uhZjêhu]rôh~X defaultMainrõ…rö}r÷(hYUhZjñubahghìubh~X.…rø}rù(hYX.heNhsNhthhZjêubeubh[)rú}rû(hYUhZjƒhehfhghhhi}rü(hk]hl]hm]hn]rýUexample-using-autoconfrþahq]rÿh7auhsM½ hthhu]r (hw)r }r (hYXExample: Using autoconfr hZjúhehfhgh{hi}r (hk]hl]hm]hn]hq]uhsM½ hthhu]r h~XExample: Using autoconfr …r }r (hYj heNhsNhthhZj ubaubh‚)r }r (hYXhThis example is for people familiar with the `autoconf `__ tools.hZjúhehfhgh†hi}r (hk]hl]hm]hn]hq]uhsM¿ hthhu]r (h~X-This example is for people familiar with the r …r }r (hYX-This example is for people familiar with the heNhsNhthhZj ubjD)r }r (hYX4`autoconf `__hi}r (UnameXautoconfjƒX%http://www.gnu.org/software/autoconf/hn]hm]hk]hl]hq]uhZj hu]r h~Xautoconfr …r }r (hYUhZj ubahgjHubh~X tools.r …r }r (hYX tools.heNhsNhthhZj ubeubh‚)r }r (hYX7In the X11 package, the file ``configure.ac`` contains:r hZjúhehfhgh†hi}r (hk]hl]hm]hn]hq]uhsM hthhu]r (h~XIn the X11 package, the file r …r }r! (hYXIn the X11 package, the file heNhsNhthhZj ubhä)r" }r# (hYX``configure.ac``hi}r$ (hk]hl]hm]hn]hq]uhZj hu]r% h~X configure.acr& …r' }r( (hYUhZj" ubahghìubh~X contains:r) …r* }r+ (hYX contains:heNhsNhthhZj ubeubjÑ)r, }r- (hYX*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_OUTPUThZjúhehfhgjÔhi}r. (j‰jXshelljÖj×hn]hm]hk]j}hl]hq]uhsMÄ hthhu]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_OUTPUTr0 …r1 }r2 (hYUhZj, ubaubh‚)r3 }r4 (hYX«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``:hZjúhehfhgh†hi}r5 (hk]hl]hm]hn]hq]uhsMÜ hthhu]r6 (h~X#Then the setup script will run the r7 …r8 }r9 (hYX#Then the setup script will run the heNhsNhthhZj3 ubhä)r: }r; (hYX ``configure``hi}r< (hk]hl]hm]hn]hq]uhZj3 hu]r= h~X configurer> …r? }r@ (hYUhZj: ubahghìubh~Xf script, which checks for the presence of the X11 libraries and substitutes for variables in the file rA …rB }rC (hYXf script, which checks for the presence of the X11 libraries and substitutes for variables in the file heNhsNhthhZj3 ubhä)rD }rE (hYX``X11.buildinfo.in``hi}rF (hk]hl]hm]hn]hq]uhZj3 hu]rG h~XX11.buildinfo.inrH …rI }rJ (hYUhZjD ubahghìubh~X:…rK }rL (hYX:heNhsNhthhZj3 ubeubjÑ)rM }rN (hYXKbuildable: @BUILD_PACKAGE_BOOL@ cc-options: @X_CFLAGS@ ld-options: @X_LIBS@hZjúhehfhgjÔhi}rO (jÖj×hn]hm]hk]hl]hq]uhsMâ hthhu]rP h~XKbuildable: @BUILD_PACKAGE_BOOL@ cc-options: @X_CFLAGS@ ld-options: @X_LIBS@rQ …rR }rS (hYUhZjM ubaubh‚)rT }rU (hYXXThis generates a file ``X11.buildinfo`` supplying the parameters needed by later stages:hZjúhehfhgh†hi}rV (hk]hl]hm]hn]hq]uhsMæ hthhu]rW (h~XThis generates a file rX …rY }rZ (hYXThis generates a file heNhsNhthhZjT ubhä)r[ }r\ (hYX``X11.buildinfo``hi}r] (hk]hl]hm]hn]hq]uhZjT hu]r^ h~X X11.buildinfor_ …r` }ra (hYUhZj[ ubahghìubh~X1 supplying the parameters needed by later stages:rb …rc }rd (hYX1 supplying the parameters needed by later stages:heNhsNhthhZjT ubeubjÑ)re }rf (hYXObuildable: True cc-options: -I/usr/X11R6/include ld-options: -L/usr/X11R6/libhZjúhehfhgjÔhi}rg (jÖj×hn]hm]hk]hl]hq]uhsMë hthhu]rh h~XObuildable: True cc-options: -I/usr/X11R6/include ld-options: -L/usr/X11R6/libri …rj }rk (hYUhZje ubaubh‚)rl }rm (hYXû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.hZjúhehfhgh†hi}rn (hk]hl]hm]hn]hq]uhsMï hthhu]ro (h~XThe rp …rq }rr (hYXThe heNhsNhthhZjl ubhä)rs }rt (hYX ``configure``hi}ru (hk]hl]hm]hn]hq]uhZjl hu]rv h~X configurerw …rx }ry (hYUhZjs ubahghìubh~X% script also generates a header file rz …r{ }r| (hYX% script also generates a header file heNhsNhthhZjl ubhä)r} }r~ (hYX``include/HsX11Config.h``hi}r (hk]hl]hm]hn]hq]uhZjl hu]r€ h~Xinclude/HsX11Config.hr …r‚ }rƒ (hYUhZj} ubahghì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† (hYX¬ 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.heNhsNhthhZjl ubeubhð)r‡ }rˆ (hYXÍ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``.hZjúhehfhghóhi}r‰ (hk]hl]hm]hn]hq]uhsNhthhu]rŠ h‚)r‹ }rŒ (hYXÍ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``.hZj‡ hehfhgh†hi}r (hk]hl]hm]hn]hq]uhsMö hu]rŽ (h~XNPackages using these features will also need to list additional files such as r …r }r‘ (hYXNPackages using these features will also need to list additional files such as hZj‹ ubhä)r’ }r“ (hYX ``configure``hi}r” (hk]hl]hm]hn]hq]uhZj‹ hu]r• h~X configurer– …r— }r˜ (hYUhZj’ ubahghìubh~X, templates for r™ …rš }r› (hYX, templates for hZj‹ ubhä)rœ }r (hYX``.buildinfo``hi}rž (hk]hl]hm]hn]hq]uhZj‹ hu]rŸ h~X .buildinfor  …r¡ }r¢ (hYUhZjœ ubahghìubh~X files, files named only in r£ …r¤ }r¥ (hYX files, files named only in hZj‹ ubhä)r¦ }r§ (hYX``.buildinfo``hi}r¨ (hk]hl]hm]hn]hq]uhZj‹ hu]r© h~X .buildinforª …r« }r¬ (hYUhZj¦ ubahghìubh~X& files, header files and so on in the r­ …r® }r¯ (hYX& files, header files and so on in the hZj‹ ubjp)r° }r± (hYX:pkg-field:`extra-source-files`r² hZj‹ hehfhgjthi}r³ (UreftypeX pkg-fieldjvˆjwXextra-source-filesU refdomainXcabalr´ hn]hm]U refexplicit‰hk]hl]hq]jyjzjjuhsMö hu]rµ hä)r¶ }r· (hYj² hi}r¸ (hk]hl]r¹ (jj´ Xcabal-pkg-fieldrº ehm]hn]hq]uhZj° hu]r» h~Xextra-source-filesr¼ …r½ }r¾ (hYUhZj¶ ubahghìubaubh~Xz field to ensure that they are included in source distributions. They should also list files and directories generated by r¿ …rÀ }rÁ (hYXz field to ensure that they are included in source distributions. They should also list files and directories generated by hZj‹ ubhä)r }rà (hYX ``configure``hi}rÄ (hk]hl]hm]hn]hq]uhZj‹ hu]rÅ h~X configurerÆ …rÇ }rÈ (hYUhZj ubahghìubh~X in the rÉ …rÊ }rË (hYX in the hZj‹ ubjp)rÌ }rÍ (hYX:pkg-field:`extra-tmp-files`rÎ hZj‹ hehfhgjthi}rÏ (UreftypeX pkg-fieldjvˆjwXextra-tmp-filesU refdomainXcabalrÐ hn]hm]U refexplicit‰hk]hl]hq]jyjzjjuhsMö hu]rÑ hä)rÒ }rÓ (hYjÎ hi}rÔ (hk]hl]rÕ (jjÐ Xcabal-pkg-fieldrÖ ehm]hn]hq]uhZjÌ hu]r× h~Xextra-tmp-filesrØ …rÙ }rÚ (hYUhZjÒ ubahghìubaubh~X* field to ensure that they are removed by rÛ …rÜ }rÝ (hYX* field to ensure that they are removed by hZj‹ ubhä)rÞ }rß (hYX``setup clean``hi}rà (hk]hl]hm]hn]hq]uhZj‹ hu]rá h~X setup cleanrâ …rã }rä (hYUhZjÞ ubahghìubh~X.…rå }ræ (hYX.hZj‹ ubeubaubh‚)rç }rè (hYXQuite 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``:hZjúhehfhgh†hi}ré (hk]hl]hm]hn]hq]uhsMþ hthhu]rê (h~X#Quite often the files generated by rë …rì }rí (hYX#Quite often the files generated by heNhsNhthhZjç ubhä)rî }rï (hYX ``configure``hi}rð (hk]hl]hm]hn]hq]uhZjç hu]rñ h~X configurerò …ró }rô (hYUhZjî ubahghìubh~XM need to be listed somewhere in the package description (for example, in the rõ …rö }r÷ (hYXM need to be listed somewhere in the package description (for example, in the heNhsNhthhZjç ubjp)rø }rù (hYX:pkg-field:`install-includes`rú hZjç hehfhgjthi}rû (UreftypeX pkg-fieldjvˆjwXinstall-includesU refdomainXcabalrü hn]hm]U refexplicit‰hk]hl]hq]jyjzjjuhsMþ hu]rý hä)rþ }rÿ (hYjú hi}r (hk]hl]r (jjü Xcabal-pkg-fieldr ehm]hn]hq]uhZjø hu]r h~Xinstall-includesr …r }r (hYUhZjþ ubahghì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 (hYX„ field). However, we usually don't want generated files to be included in the source tarball. The solution is again provided by the heNhsNhthhZjç ubhä)r }r (hYX``.buildinfo``hi}r (hk]hl]hm]hn]hq]uhZjç hu]r h~X .buildinfor …r }r (hYUhZj ubahghìubh~XC file. In the above example, the following line should be added to r …r }r (hYXC file. In the above example, the following line should be added to heNhsNhthhZjç ubhä)r }r (hYX``X11.buildinfo``hi}r (hk]hl]hm]hn]hq]uhZjç hu]r h~X X11.buildinfor …r }r (hYUhZj ubahghìubh~X:…r }r (hYX:heNhsNhthhZjç ubeubjÑ)r }r (hYXinstall-includes: HsX11Config.hhZjúhehfhgjÔhi}r (jÖj×hn]hm]hk]hl]hq]uhsM hthhu]r h~Xinstall-includes: HsX11Config.hr! …r" }r# (hYUhZj ubaubh‚)r$ }r% (hYXOIn 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.hZjúhehfhgh†hi}r& (hk]hl]hm]hn]hq]uhsM hthhu]r' (h~XIn this way, the generated r( …r) }r* (hYXIn this way, the generated heNhsNhthhZj$ ubhä)r+ }r, (hYX``HsX11Config.h``hi}r- (hk]hl]hm]hn]hq]uhZj$ hu]r. h~X HsX11Config.hr/ …r0 }r1 (hYUhZj+ ubahghìubh~X? file won’t be included in the source tarball in addition to r2 …r3 }r4 (hYX= file won't be included in the source tarball in addition to heNhsNhthhZj$ ubhä)r5 }r6 (hYX``HsX11Config.h.in``hi}r7 (hk]hl]hm]hn]hq]uhZj$ hu]r8 h~XHsX11Config.h.inr9 …r: }r; (hYUhZj5 ubahghìubh~Xc, but it will be copied to the right location during the install process. Packages that use custom r< …r= }r> (hYXc, but it will be copied to the right location during the install process. Packages that use custom heNhsNhthhZj$ ubhä)r? }r@ (hYX ``Setup.hs``hi}rA (hk]hl]hm]hn]hq]uhZj$ hu]rB h~XSetup.hsrC …rD }rE (hYUhZj? ubahghìubh~XO scripts can update the necessary fields programmatically instead of using the rF …rG }rH (hYXO scripts can update the necessary fields programmatically instead of using the heNhsNhthhZj$ ubhä)rI }rJ (hYX``.buildinfo``hi}rK (hk]hl]hm]hn]hq]uhZj$ hu]rL h~X .buildinforM …rN }rO (hYUhZjI ubahghìubh~X file.rP …rQ }rR (hYX file.heNhsNhthhZj$ ubeubeubeubh[)rS }rT (hYUhZhchehfhghhhi}rU (hk]hl]hm]hn]rV Uconditional-compilationrW ahq]rX hauhsM hthhu]rY (hw)rZ }r[ (hYXConditional compilationr\ hZjS hehfhgh{hi}r] (hk]hl]hm]hn]hq]uhsM hthhu]r^ h~XConditional compilationr_ …r` }ra (hYj\ heNhsNhthhZjZ ubaubh‚)rb }rc (hYXSometimes 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?hZjS hehfhgh†hi}rd (hk]hl]hm]hn]hq]uhsM hthhu]re (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 rf …rg }rh (hYX–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 heNhsNhthhZjb ubjp)ri }rj (hYX:pkg-field:`build-depends`rk hZjb hehfhgjthi}rl (UreftypeX pkg-fieldjvˆjwX build-dependsU refdomainXcabalrm hn]hm]U refexplicit‰hk]hl]hq]jyjzjjuhsM hu]rn hä)ro }rp (hYjk hi}rq (hk]hl]rr (jjm Xcabal-pkg-fieldrs ehm]hn]hq]uhZji hu]rt h~X build-dependsru …rv }rw (hYUhZjo ubahghìubaubh~XP, but how do you then write the code that can use different versions of the API?rx …ry }rz (hYXP, but how do you then write the code that can use different versions of the API?heNhsNhthhZjb ubeubh‚)r{ }r| (hYXË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:hZjS hehfhgh†hi}r} (hk]hl]hm]hn]hq]uhsM hthhu]r~ (h~XcHaskell lets you preprocess your code using the C preprocessor (either the real C preprocessor, or r …r€ }r (hYXcHaskell lets you preprocess your code using the C preprocessor (either the real C preprocessor, or heNhsNhthhZj{ ubhä)r‚ }rƒ (hYX ``cpphs``hi}r„ (hk]hl]hm]hn]hq]uhZj{ hu]r… h~Xcpphsr† …r‡ }rˆ (hYUhZj‚ ubahghìubh~X). To enable this, add r‰ …rŠ }r‹ (hYX). To enable this, add heNhsNhthhZj{ ubhä)rŒ }r (hYX``extensions: CPP``hi}rŽ (hk]hl]hm]hn]hq]uhZj{ hu]r h~Xextensions: CPPr …r‘ }r’ (hYUhZjŒ ubahghì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• (hYXÚ 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 heNhsNhthhZj{ ubhä)r– }r— (hYX``base``hi}r˜ (hk]hl]hm]hn]hq]uhZj{ hu]r™ h~Xbaserš …r› }rœ (hYUhZj– ubahghìubh~XS package, you could select the available version in your Haskell modules like this:r …rž }rŸ (hYXS package, you could select the available version in your Haskell modules like this:heNhsNhthhZj{ ubeubjÑ)r  }r¡ (hYXp#if MIN_VERSION_base(4,0,0) ... code that works with base-4 ... #else ... code that works with base-3 ... #endifhZjS hehfhgjÔhi}r¢ (j‰jXcppjÖj×hn]hm]hk]j}hl]hq]uhsM hthhu]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¦ (hYUhZj  ubaubh‚)r§ }r¨ (hYX›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).hZjS hehfhgh†hi}r© (hk]hl]hm]hn]hq]uhsM' hthhu]rª (h~X#In general, Cabal supplies a macro r« …r¬ }r­ (hYX#In general, Cabal supplies a macro heNhsNhthhZj§ ubhä)r® }r¯ (hYX``MIN_VERSION_``hi}r° (hk]hl]hm]hn]hq]uhZj§ hu]r± h~X MIN_VERSION_r² …r³ }r´ (hYUhZj® ubahghìubh~X…rµ }r¶ (hYX\ r· heNhsNhthhZj§ ubhÄ)r¸ }r¹ (hYX *``package``*hi}rº (hk]hl]hm]hn]hq]uhZj§ hu]r» h~X ``package``r¼ …r½ }r¾ (hYUhZj¸ ubahghÌubh~X…r¿ }rÀ (hYj· hZj§ ubhä)rÁ }r (hYX ``_(A,B,C)``hi}rà (hk]hl]hm]hn]hq]uhZj§ hu]rÄ h~X_(A,B,C)rÅ …rÆ }rÇ (hYUhZjÁ ubahghìubh~X" for each package depended on via rÈ …rÉ }rÊ (hYX" for each package depended on via heNhsNhthhZj§ ubjp)rË }rÌ (hYX:pkg-field:`build-depends`rÍ hZj§ hehfhgjthi}rÎ (UreftypeX pkg-fieldjvˆjwX build-dependsU refdomainXcabalrÏ hn]hm]U refexplicit‰hk]hl]hq]jyjzjjuhsM' hu]rÐ hä)rÑ }rÒ (hYjÍ hi}rÓ (hk]hl]rÔ (jjÏ Xcabal-pkg-fieldrÕ ehm]hn]hq]uhZjË hu]rÖ h~X build-dependsr× …rØ }rÙ (hYUhZjÑ ubahghìubaubh~X]. This macro is true if the actual version of the package in use is greater than or equal to rÚ …rÛ }rÜ (hYX]. This macro is true if the actual version of the package in use is greater than or equal to heNhsNhthhZj§ ubhä)rÝ }rÞ (hYX ``A.B.C``hi}rß (hk]hl]hm]hn]hq]uhZj§ hu]rà h~XA.B.Crá …râ }rã (hYUhZjÝ ubahghì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æ (hYX© (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).heNhsNhthhZj§ ubeubh‚)rç }rè (hYX¨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``).hZjS hehfhgh†hi}ré (hk]hl]hm]hn]hq]uhsM/ hthhu]rê (h~XSince version 1.20, the rë …rì }rí (hYXSince version 1.20, the heNhsNhthhZjç ubhä)rî }rï (hYX``MIN_TOOL_VERSION_``hi}rð (hk]hl]hm]hn]hq]uhZjç hu]rñ h~XMIN_TOOL_VERSION_rò …ró }rô (hYUhZjî ubahghìubh~X…rõ }rö (hYX\ heNhsNhthhZjç ubhÄ)r÷ }rø (hYX *``tool``*hi}rù (hk]hl]hm]hn]hq]uhZjç hu]rú h~X``tool``rû …rü }rý (hYUhZj÷ ubahghÌubh~Xc family of macros lets you condition on the version of build tools used to build the program (e.g. rþ …rÿ }r (hYXc family of macros lets you condition on the version of build tools used to build the program (e.g. heNhsNhthhZjç ubhä)r }r (hYX ``hsc2hs``hi}r (hk]hl]hm]hn]hq]uhZjç hu]r h~Xhsc2hsr …r }r (hYUhZj ubahghìubh~X).r …r }r (hYX).heNhsNhthhZjç ubeubh‚)r }r (hYX=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.hZjS hehfhgh†hi}r (hk]hl]hm]hn]hq]uhsM3 hthhu]r (h~XSince version 1.24, the macro r …r }r (hYXSince version 1.24, the macro heNhsNhthhZj ubhä)r }r (hYX``CURRENT_COMPONENT_ID``hi}r (hk]hl]hm]hn]hq]uhZj hu]r h~XCURRENT_COMPONENT_IDr …r }r (hYUhZj ubahghì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 (hYX˜, which expands to the string of the component identifier that uniquely identifies this component. Furthermore, if the package is a library, the macro heNhsNhthhZj ubhä)r }r (hYX``CURRENT_PACKAGE_KEY``hi}r (hk]hl]hm]hn]hq]uhZj hu]r h~XCURRENT_PACKAGE_KEYr …r! }r" (hYUhZj ubahghìubh~XX records the identifier that was passed to GHC for use in symbols and for type equality.r# …r$ }r% (hYXX records the identifier that was passed to GHC for use in symbols and for type equality.heNhsNhthhZj ubeubh‚)r& }r' (hYXuSince version 2.0, the macro ``CURRENT_PACKAGE_VERSION`` expands to the string version number of the current package.hZjS hehfhgh†hi}r( (hk]hl]hm]hn]hq]uhsM9 hthhu]r) (h~XSince version 2.0, the macro r* …r+ }r, (hYXSince version 2.0, the macro heNhsNhthhZj& ubhä)r- }r. (hYX``CURRENT_PACKAGE_VERSION``hi}r/ (hk]hl]hm]hn]hq]uhZj& hu]r0 h~XCURRENT_PACKAGE_VERSIONr1 …r2 }r3 (hYUhZj- ubahghìubh~X= expands to the string version number of the current package.r4 …r5 }r6 (hYX= expands to the string version number of the current package.heNhsNhthhZj& ubeubh‚)r7 }r8 (hYX¼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.r9 hZjS hehfhgh†hi}r: (hk]hl]hm]hn]hq]uhsM< hthhu]r; h~X¼Cabal places the definitions of these macros into an automatically-generated header file, which is included when preprocessing Haskell source code by passing options to the C preprocessor.r< …r= }r> (hYj9 heNhsNhthhZj7 ubaubh‚)r? }r@ (hYX¾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.hZjS hehfhgh†hi}rA (hk]hl]hm]hn]hq]uhsMA hthhu]rB (h~XaCabal also allows to detect when the source code is being used for generating documentation. The rC …rD }rE (hYXaCabal also allows to detect when the source code is being used for generating documentation. The heNhsNhthhZj? ubhä)rF }rG (hYX``__HADDOCK_VERSION__``hi}rH (hk]hl]hm]hn]hq]uhZj? hu]rI h~X__HADDOCK_VERSION__rJ …rK }rL (hYUhZjF ubahghìubh~X* macro is defined only when compiling via rM …rN }rO (hYX* macro is defined only when compiling via heNhsNhthhZj? ubjD)rP }rQ (hYXHaddock_jGKhZj? hgjHhi}rR (UnameXHaddockjƒXhttp://www.haskell.org/haddock/rS hn]hm]hk]hl]hq]uhu]rT h~XHaddockrU …rV }rW (hYUhZjP ubaubh~X8 instead of a normal Haskell compiler. The value of the rX …rY }rZ (hYX8 instead of a normal Haskell compiler. The value of the heNhsNhthhZj? ubhä)r[ }r\ (hYX``__HADDOCK_VERSION__``hi}r] (hk]hl]hm]hn]hq]uhZj? hu]r^ h~X__HADDOCK_VERSION__r_ …r` }ra (hYUhZj[ ubahghìubh~X macro is defined as rb …rc }rd (hYX macro is defined as heNhsNhthhZj? ubhä)re }rf (hYX``A*1000 + B*10 + C``hi}rg (hk]hl]hm]hn]hq]uhZj? hu]rh h~XA*1000 + B*10 + Cri …rj }rk (hYUhZje ubahghìubh~X, where rl …rm }rn (hYX, where heNhsNhthhZj? ubhä)ro }rp (hYX ``A.B.C``hi}rq (hk]hl]hm]hn]hq]uhZj? hu]rr h~XA.B.Crs …rt }ru (hYUhZjo ubahghìubh~XŠ is the Haddock version. This can be useful for working around bugs in Haddock or generating prettier documentation in some special cases.rv …rw }rx (hYXŠ is the Haddock version. This can be useful for working around bugs in Haddock or generating prettier documentation in some special cases.heNhsNhthhZj? ubeubeubh[)ry }rz (hYUh^KhZhchehfhghhhi}r{ (hk]hl]hm]hn]r| Umore-complex-packagesr} ahq]r~ h9auhsMK hthhu]r (hw)r€ }r (hYXMore complex packagesr‚ hZjy hehfhgh{hi}rƒ (hk]hl]hm]hn]hq]uhsMK hthhu]r„ h~XMore complex packagesr… …r† }r‡ (hYj‚ heNhsNhthhZj€ ubaubh‚)rˆ }r‰ (hYXWFor packages that don't fit the simple schemes described above, you have a few options:rŠ hZjy hehfhgh†hi}r‹ (hk]hl]hm]hn]hq]uhsMM hthhu]rŒ h~XYFor packages that don’t fit the simple schemes described above, you have a few options:r …rŽ }r (hYjŠ heNhsNhthhZjˆ ubaubhŒ)r }r‘ (hYUhZjy hehfhghhi}r’ (h‘X-hn]hm]hk]hl]hq]uhsMP hthhu]r“ (h“)r” }r• (hYXÇ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. hZj hehfhgh–hi}r– (hk]hl]hm]hn]hq]uhsNhthhu]r— (h‚)r˜ }r™ (hYXEBy 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:hZj” hehfhgh†hi}rš (hk]hl]hm]hn]hq]uhsMP hu]r› (h~X By using the rœ …r }rž (hYX By using the hZj˜ ubjp)rŸ }r  (hYX:pkg-field:`build-type`r¡ hZj˜ hehfhgjthi}r¢ (UreftypeX pkg-fieldjvˆjwX build-typeU refdomainXcabalr£ hn]hm]U refexplicit‰hk]hl]hq]jyjzjjuhsMP hu]r¤ hä)r¥ }r¦ (hYj¡ hi}r§ (hk]hl]r¨ (jj£ Xcabal-pkg-fieldr© ehm]hn]hq]uhZjŸ hu]rª h~X build-typer« …r¬ }r­ (hYUhZj¥ ubahghìubaubh~X …r® }r¯ (hYX hZj˜ ubhä)r° }r± (hYX ``Custom``hi}r² (hk]hl]hm]hn]hq]uhZj˜ hu]r³ h~XCustomr´ …rµ }r¶ (hYUhZj° ubahghìubh~X, you can supply your own r· …r¸ }r¹ (hYX, you can supply your own hZj˜ ubhä)rº }r» (hYX ``Setup.hs``hi}r¼ (hk]hl]hm]hn]hq]uhZj˜ hu]r½ h~XSetup.hsr¾ …r¿ }rÀ (hYUhZjº ubahghìubh~X; file, and customize the simple build infrastructure using rÁ …r }rà (hYX; file, and customize the simple build infrastructure using hZj˜ ubhÄ)rÄ }rÅ (hYX*hooks*hi}rÆ (hk]hl]hm]hn]hq]uhZj˜ hu]rÇ h~XhooksrÈ …rÉ }rÊ (hYUhZjÄ ubahghÌ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Í (hYXŽ. These allow you to perform additional actions before and after each command is run, and also to specify additional preprocessors. A typical hZj˜ ubhä)rÎ }rÏ (hYX ``Setup.hs``hi}rÐ (hk]hl]hm]hn]hq]uhZj˜ hu]rÑ h~XSetup.hsrÒ …rÓ }rÔ (hYUhZjÎ ubahghìubh~X may look like this:rÕ …rÖ }r× (hYX may look like this:hZj˜ ubeubjÑ)rØ }rÙ (hYXimport Distribution.Simple main = defaultMainWithHooks simpleUserHooks { postHaddock = posthaddock } posthaddock args flags desc info = ....hZj” hehfhgjÔhi}rÚ (j‰jXhaskelljÖj×hn]hm]hk]j}hl]hq]uhsMV hu]rÛ h~Ximport Distribution.Simple main = defaultMainWithHooks simpleUserHooks { postHaddock = posthaddock } posthaddock args flags desc info = ....rÜ …rÝ }rÞ (hYUhZjØ ubaubh‚)rß }rà (hYXÕ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.hZj” hehfhgh†hi}rá (hk]hl]hm]hn]hq]uhsM] hu]râ (h~XSee rã …rä }rå (hYXSee hZjß ubhä)ræ }rç (hYX ``UserHooks``hi}rè (hk]hl]hm]hn]hq]uhZjß hu]ré h~X UserHooksrê …rë }rì (hYUhZjæ ubahghìubh~X in rí …rî }rï (hYX in hZjß ubjD)rð }rñ (hYXX`Distribution.Simple <../release/cabal-latest/doc/API/Cabal/Distribution-Simple.html>`__hi}rò (UnameXDistribution.SimplejƒX>../release/cabal-latest/doc/API/Cabal/Distribution-Simple.htmlhn]hm]hk]hl]hq]uhZjß hu]ró h~XDistribution.Simplerô …rõ }rö (hYUhZjð ubahgjHubh~Xh for the details, but note that this interface is experimental, and likely to change in future releases.r÷ …rø }rù (hYXh for the details, but note that this interface is experimental, and likely to change in future releases.hZjß ubeubh‚)rú }rû (hYXô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.hZj” hehfhgh†hi}rü (hk]hl]hm]hn]hq]uhsMb hu]rý (h~XIf you use a custom rþ …rÿ }r (hYXIf you use a custom hZjú ubhä)r }r (hYX ``Setup.hs``hi}r (hk]hl]hm]hn]hq]uhZjú hu]r h~XSetup.hsr …r }r (hYUhZj ubahghìubh~X, file you should strongly consider adding a r …r }r (hYX, file you should strongly consider adding a hZjú ubjp)r }r (hYX:pkg-section:`custom-setup`r hZjú hehfhgjthi}r (UreftypeX pkg-sectionjvˆjwX custom-setupU refdomainXcabalr hn]hm]U refexplicit‰hk]hl]hq]jyjzuhsMb hu]r hä)r }r (hYj hi}r (hk]hl]r (jj Xcabal-pkg-sectionr ehm]hn]hq]uhZj hu]r h~X custom-setupr …r }r (hYUhZj ubahghìubaubh~X stanza with a r …r }r (hYX stanza with a hZjú ubjp)r }r (hYX':pkg-field:`custom-setup:setup-depends`r hZjú hehfhgjthi}r (UreftypeX pkg-fieldjvˆjwX setup-dependsU refdomainXcabalr! hn]hm]U refexplicit‰hk]hl]hq]jyjzjX custom-setupuhsMb hu]r" hä)r# }r$ (hYj hi}r% (hk]hl]r& (jj! Xcabal-pkg-fieldr' ehm]hn]hq]uhZj hu]r( h~Xcustom-setup:setup-dependsr) …r* }r+ (hYUhZj# ubahghìubaubh~XW field to ensure that your setup script does not break with future dependency versions.r, …r- }r. (hYXW field to ensure that your setup script does not break with future dependency versions.hZjú ubeubeubh“)r/ }r0 (hYX^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) \ hZj heNhgh–hi}r1 (hk]hl]hm]hn]hq]uhsNhthhu]r2 (h‚)r3 }r4 (hYXwYou 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:hZj/ hehfhgh†hi}r5 (hk]hl]hm]hn]hq]uhsMg hu]r6 (h~X#You could delegate all the work to r7 …r8 }r9 (hYX#You could delegate all the work to hZj3 ubhä)r: }r; (hYX``make``hi}r< (hk]hl]hm]hn]hq]uhZj3 hu]r= h~Xmaker> …r? }r@ (hYUhZj: ubahghìubh~XL, though this is unlikely to be very portable. Cabal supports this with the rA …rB }rC (hYXL, though this is unlikely to be very portable. Cabal supports this with the hZj3 ubjp)rD }rE (hYX:pkg-field:`build-type`rF hZj3 hehfhgjthi}rG (UreftypeX pkg-fieldjvˆjwX build-typeU refdomainXcabalrH hn]hm]U refexplicit‰hk]hl]hq]jyjzjjuhsMg hu]rI hä)rJ }rK (hYjF hi}rL (hk]hl]rM (jjH Xcabal-pkg-fieldrN ehm]hn]hq]uhZjD hu]rO h~X build-typerP …rQ }rR (hYUhZjJ ubahghìubaubh~X …rS }rT (hYX hZj3 ubhä)rU }rV (hYX``Make``hi}rW (hk]hl]hm]hn]hq]uhZj3 hu]rX h~XMakerY …rZ }r[ (hYUhZjU ubahghìubh~X and a trivial setup library r\ …r] }r^ (hYX and a trivial setup library hZj3 ubjD)r_ }r` (hYXT`Distribution.Make <../release/cabal-latest/doc/API/Cabal/Distribution-Make.html>`__hi}ra (UnameXDistribution.MakejƒX<../release/cabal-latest/doc/API/Cabal/Distribution-Make.htmlhn]hm]hk]hl]hq]uhZj3 hu]rb h~XDistribution.Makerc …rd }re (hYUhZj_ ubahgjHubh~X=, which simply parses the command line arguments and invokes rf …rg }rh (hYX=, which simply parses the command line arguments and invokes hZj3 ubhä)ri }rj (hYX``make``hi}rk (hk]hl]hm]hn]hq]uhZj3 hu]rl h~Xmakerm …rn }ro (hYUhZji ubahghìubh~X. Here rp …rq }rr (hYX. Here hZj3 ubhä)rs }rt (hYX ``Setup.hs``hi}ru (hk]hl]hm]hn]hq]uhZj3 hu]rv h~XSetup.hsrw …rx }ry (hYUhZjs ubahghìubh~X should look like this:rz …r{ }r| (hYX should look like this:hZj3 ubeubjÑ)r} }r~ (hYX+import Distribution.Make main = defaultMainhZj/ hehfhgjÔhi}r (j‰jXhaskelljÖj×hn]hm]hk]j}hl]hq]uhsMn hu]r€ h~X+import Distribution.Make main = defaultMainr …r‚ }rƒ (hYUhZj} ubaubh‚)r„ }r… (hYX1The 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:hZj/ hehfhgh†hi}r† (hk]hl]hm]hn]hq]uhsMs hu]r‡ (h~X3The root directory of the package should contain a rˆ …r‰ }rŠ (hYX3The root directory of the package should contain a hZj„ ubhä)r‹ }rŒ (hYX ``configure``hi}r (hk]hl]hm]hn]hq]uhZj„ hu]rŽ h~X configurer …r }r‘ (hYUhZj‹ ubahghìubh~X$ script, and, after that has run, a r’ …r“ }r” (hYX$ script, and, after that has run, a hZj„ ubhä)r• }r– (hYX ``Makefile``hi}r— (hk]hl]hm]hn]hq]uhZj„ hu]r˜ h~XMakefiler™ …rš }r› (hYUhZj• ubahghìubh~X= with a default target that builds the package, plus targets rœ …r }rž (hYX= with a default target that builds the package, plus targets hZj„ ubhä)rŸ }r  (hYX ``install``hi}r¡ (hk]hl]hm]hn]hq]uhZj„ hu]r¢ h~Xinstallr£ …r¤ }r¥ (hYUhZjŸ ubahghìubh~X, r¦ …r§ }r¨ (hYX, r© hZj„ ubhä)rª }r« (hYX ``register``hi}r¬ (hk]hl]hm]hn]hq]uhZj„ hu]r­ h~Xregisterr® …r¯ }r° (hYUhZjª ubahghìubh~X, r± …r² }r³ (hYX, hZj„ ubhä)r´ }rµ (hYX``unregister``hi}r¶ (hk]hl]hm]hn]hq]uhZj„ hu]r· h~X unregisterr¸ …r¹ }rº (hYUhZj´ ubahghìubh~X, r» …r¼ }r½ (hYX, hZj„ ubhä)r¾ }r¿ (hYX ``clean``hi}rÀ (hk]hl]hm]hn]hq]uhZj„ hu]rÁ h~Xcleanr …rà }rÄ (hYUhZj¾ ubahghìubh~X, rÅ …rÆ }rÇ (hYj© hZj„ ubhä)rÈ }rÉ (hYX``dist``hi}rÊ (hk]hl]hm]hn]hq]uhZj„ hu]rË h~XdistrÌ …rÍ }rÎ (hYUhZjÈ ubahghìubh~X and rÏ …rÐ }rÑ (hYX and hZj„ ubhä)rÒ }rÓ (hYX``docs``hi}rÔ (hk]hl]hm]hn]hq]uhZj„ hu]rÕ h~XdocsrÖ …r× }rØ (hYUhZjÒ ubahghìubh~X9. Some options to commands are passed through as follows:rÙ …rÚ }rÛ (hYX9. Some options to commands are passed through as follows:hZj„ ubeubhŒ)rÜ }rÝ (hYUhZj/ hehfhghhi}rÞ (h‘X-hn]hm]hk]hl]hq]uhsMy hu]rß (h“)rà }rá (hYXyThe ``--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. hi}râ (hk]hl]hm]hn]hq]uhZjÜ hu]rã h‚)rä }rå (hYXxThe ``--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.hZjà hehfhgh†hi}ræ (hk]hl]hm]hn]hq]uhsMy hu]rç (h~XThe rè …ré }rê (hYXThe hZjä ubhä)rë }rì (hYX``--with-hc-pkg``hi}rí (hk]hl]hm]hn]hq]uhZjä hu]rî h~X --with-hc-pkgrï …rð }rñ (hYUhZjë ubahghìubh~X, rò …ró }rô (hYX, rõ hZjä ubhä)rö }r÷ (hYX ``--prefix``hi}rø (hk]hl]hm]hn]hq]uhZjä hu]rù h~X--prefixrú …rû }rü (hYUhZjö ubahghìubh~X, rý …rþ }rÿ (hYX, hZjä ubhä)r }r (hYX ``--bindir``hi}r (hk]hl]hm]hn]hq]uhZjä hu]r h~X--bindirr …r }r (hYUhZj ubahghìubh~X, r …r }r (hYX, hZjä ubhä)r }r (hYX ``--libdir``hi}r (hk]hl]hm]hn]hq]uhZjä hu]r h~X--libdirr …r }r (hYUhZj ubahghìubh~X, r …r }r (hYX, hZjä ubhä)r }r (hYX``--dynlibdir``hi}r (hk]hl]hm]hn]hq]uhZjä hu]r h~X --dynlibdirr …r }r (hYUhZj ubahghìubh~X, r …r }r (hYX, hZjä ubhä)r }r (hYX ``--datadir``hi}r (hk]hl]hm]hn]hq]uhZjä hu]r! h~X --datadirr" …r# }r$ (hYUhZj ubahghìubh~X, r% …r& }r' (hYjõ hZjä ubhä)r( }r) (hYX``--libexecdir``hi}r* (hk]hl]hm]hn]hq]uhZjä hu]r+ h~X --libexecdirr, …r- }r. (hYUhZj( ubahghìubh~X and r/ …r0 }r1 (hYX and hZjä ubhä)r2 }r3 (hYX``--sysconfdir``hi}r4 (hk]hl]hm]hn]hq]uhZjä hu]r5 h~X --sysconfdirr6 …r7 }r8 (hYUhZj2 ubahghìubh~X options to the r9 …r: }r; (hYX options to the hZjä ubhä)r< }r= (hYX ``configure``hi}r> (hk]hl]hm]hn]hq]uhZjä hu]r? h~X configurer@ …rA }rB (hYUhZj< ubahghìubh~X command are passed on to the rC …rD }rE (hYX command are passed on to the hZjä ubhä)rF }rG (hYX ``configure``hi}rH (hk]hl]hm]hn]hq]uhZjä hu]rI h~X configurerJ …rK }rL (hYUhZjF ubahghìubh~X& script. In addition the value of the rM …rN }rO (hYX& script. In addition the value of the hZjä ubhä)rP }rQ (hYX``--with-compiler``hi}rR (hk]hl]hm]hn]hq]uhZjä hu]rS h~X--with-compilerrT …rU }rV (hYUhZjP ubahghìubh~X option is passed in a rW …rX }rY (hYX option is passed in a hZjä ubhä)rZ }r[ (hYX ``--with-hc``hi}r\ (hk]hl]hm]hn]hq]uhZjä hu]r] h~X --with-hcr^ …r_ }r` (hYUhZjZ ubahghìubh~X' option and all options specified with ra …rb }rc (hYX' option and all options specified with hZjä ubhä)rd }re (hYX``--configure-option=``hi}rf (hk]hl]hm]hn]hq]uhZjä hu]rg h~X--configure-option=rh …ri }rj (hYUhZjd ubahghìubh~X are passed on.rk …rl }rm (hYX are passed on.hZjä ubeubahgh–ubh“)rn }ro (hYX±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) \ hi}rp (hk]hl]hm]hn]hq]uhZjÜ hu]rq (h‚)rr }rs (hYXà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:hZjn hehfhgh†hi}rt (hk]hl]hm]hn]hq]uhsM€ hu]ru (h~XThe rv …rw }rx (hYXThe hZjr ubhä)ry }rz (hYX ``--destdir``hi}r{ (hk]hl]hm]hn]hq]uhZjr hu]r| h~X --destdirr} …r~ }r (hYUhZjy ubahghìubh~X option to the r€ …r }r‚ (hYX option to the hZjr ubhä)rƒ }r„ (hYX``copy``hi}r… (hk]hl]hm]hn]hq]uhZjr hu]r† h~Xcopyr‡ …rˆ }r‰ (hYUhZjƒ ubahghìubh~X command becomes a setting of a rŠ …r‹ }rŒ (hYX command becomes a setting of a hZjr ubhä)r }rŽ (hYX ``destdir``hi}r (hk]hl]hm]hn]hq]uhZjr hu]r h~Xdestdirr‘ …r’ }r“ (hYUhZj ubahghìubh~X variable on the invocation of r” …r• }r– (hYX variable on the invocation of hZjr ubhä)r— }r˜ (hYX ``make copy``hi}r™ (hk]hl]hm]hn]hq]uhZjr hu]rš h~X make copyr› …rœ }r (hYUhZj— ubahghìubh~X. The supplied rž …rŸ }r  (hYX. The supplied hZjr ubhä)r¡ }r¢ (hYX ``Makefile``hi}r£ (hk]hl]hm]hn]hq]uhZjr hu]r¤ h~XMakefiler¥ …r¦ }r§ (hYUhZj¡ ubahghìubh~X should provide a r¨ …r© }rª (hYX should provide a hZjr ubhä)r« }r¬ (hYX``copy``hi}r­ (hk]hl]hm]hn]hq]uhZjr hu]r® h~Xcopyr¯ …r° }r± (hYUhZj« ubahghìubh~X, target, which will probably look like this:r² …r³ }r´ (hYX, target, which will probably look like this:hZjr ubeubjÑ)rµ }r¶ (hYX˜copy : $(MAKE) install prefix=$(destdir)/$(prefix) \ bindir=$(destdir)/$(bindir) \ libdir=$(destdir)/$(libdir) \ dynlibdir=$(destdir)/$(dynlibdir) \ datadir=$(destdir)/$(datadir) \ libexecdir=$(destdir)/$(libexecdir) \ sysconfdir=$(destdir)/$(sysconfdir) \hZjn hehfhgjÔhi}r· (j‰jXmakejÖj×hn]hm]hk]j}hl]hq]uhsM… hu]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» (hYUhZjµ ubaubehgh–ubeubeubh“)r¼ }r½ (hYXFinally, 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. hZj hehfhgh–hi}r¾ (hk]hl]hm]hn]hq]uhsNhthhu]r¿ h‚)rÀ }rÁ (hYXŽ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.hZj¼ hehfhgh†hi}r (hk]hl]hm]hn]hq]uhsM hu]rà (h~XFinally, with the rÄ …rÅ }rÆ (hYXFinally, with the hZjÀ ubjp)rÇ }rÈ (hYX:pkg-field:`build-type`rÉ hZjÀ hehfhgjthi}rÊ (UreftypeX pkg-fieldjvˆjwX build-typeU refdomainXcabalrË hn]hm]U refexplicit‰hk]hl]hq]jyjzjjuhsM hu]rÌ hä)rÍ }rÎ (hYjÉ hi}rÏ (hk]hl]rÐ (jjË Xcabal-pkg-fieldrÑ ehm]hn]hq]uhZjÇ hu]rÒ h~X build-typerÓ …rÔ }rÕ (hYUhZjÍ ubahghìubaubh~X …rÖ }r× (hYX hZjÀ ubhä)rØ }rÙ (hYX ``Custom``hi}rÚ (hk]hl]hm]hn]hq]uhZjÀ hu]rÛ h~XCustomrÜ …rÝ }rÞ (hYUhZjØ ubahghì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á (hYXv, you can also write your own setup script from scratch. It must conform to the interface described in the section on hZjÀ ubjD)râ }rã (hYX?`building and installing packages `__hi}rä (UnameX building and installing packagesjƒXinstalling-packages.htmlhn]hm]hk]hl]hq]uhZjÀ hu]rå h~X building and installing packagesræ …rç }rè (hYUhZjâ ubahgjHubh~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ë (hYXe, and you may use the Cabal library for all or part of the work. One option is to copy the source of hZjÀ ubhä)rì }rí (hYX``Distribution.Simple``hi}rî (hk]hl]hm]hn]hq]uhZjÀ hu]rï h~XDistribution.Simplerð …rñ }rò (hYUhZjì ubahghìubh~X), and alter it for your needs. Good luck.ró …rô }rõ (hYX), and alter it for your needs. Good luck.hZjÀ ubeubaubeubj„)rö }r÷ (hYX[-*- rst -*- This file contains commonly used link-references See also "extlinks" in conf.pyhZjy hecdocutils.nodes reprunicode rø Xdoc/references.incrù …rú }rû bhgj‡hi}rü (jÖj×hn]hm]hk]hl]hq]uhsKhthhu]rý h~X[-*- rst -*- This file contains commonly used link-references See also "extlinks" in conf.pyrþ …rÿ }r(hYUhZjö ubaubj¥)r}r(hYX .. _`Package Versioning Policy`:h^KhZjy hejú hgj¨hi}r(hn]hm]hk]hl]hq]jJUpackage-versioning-policyruhsMž hthhu]ubj¥)r}r(hYX .. _PVP: http://pvp.haskell.org/h^KhZjy hejú Uexpect_referenced_by_namer}rhJjshgj¨hi}r (jƒXhttp://pvp.haskell.org/r hn]r (Upvpr jehm]hk]hl]hq]r (hhJeuhsMŸ hthUexpect_referenced_by_idr}rjjshu]ubj¥)r}r(hYX(.. _Hackage: http://hackage.haskell.org/h^KhZjy hejú hgj¨hi}r(jƒXhttp://hackage.haskell.org/rhn]rUhackagerahm]hk]hl]hq]rhauhsM¡ hthhu]ubj¥)r}r(hYX$.. _Haskell: http://www.haskell.org/hZjy hejú hgj¨hi}r(jƒXhttp://www.haskell.org/hn]rUhaskellrahm]hk]hl]hq]rhNauhsM£ hthhu]ubj¥)r}r(hYX,.. _Haddock: http://www.haskell.org/haddock/h^KhZjy hejú hgj¨hi}r(jƒjS hn]r Uhaddockr!ahm]hk]hl]hq]r"h"auhsM¥ hthhu]ubj¥)r#}r$(hYX&.. _Alex: http://www.haskell.org/alex/h^KhZjy hejú hgj¨hi}r%(jƒXhttp://www.haskell.org/alex/r&hn]r'Ualexr(ahm]hk]hl]hq]r)h'auhsM§ hthhu]ubj¥)r*}r+(hYX(.. _Happy: http://www.haskell.org/happy/h^KhZjy hejú hgj¨hi}r,(jƒXhttp://www.haskell.org/happy/r-hn]r.Uhappyr/ahm]hk]hl]hq]r0h-auhsM© hthhu]ubj¥)r1}r2(hYX*.. _Hoogle: http://www.haskell.org/hoogle/hZjy hejú hgj¨hi}r3(jƒXhttp://www.haskell.org/hoogle/hn]r4Uhoogler5ahm]hk]hl]hq]r6hauhsM« hthhu]ubj¥)r7}r8(hYX9.. _HsColour: http://www.cs.york.ac.uk/fp/darcs/hscolour/hZjy hejú hgj¨hi}r9(jƒX+http://www.cs.york.ac.uk/fp/darcs/hscolour/hn]r:Uhscolourr;ahm]hk]hl]hq]r<hauhsM­ hthhu]ubj¥)r=}r>(hYX-.. _cpphs: http://projects.haskell.org/cpphs/h^KhZjy hejú hgj¨hi}r?(jƒX"http://projects.haskell.org/cpphs/r@hn]rAUcpphsrBahm]hk]hl]hq]rCh,auhsM¯ hthhu]ubj¥)rD}rE(hYX-.. _ABNF: https://tools.ietf.org/html/rfc5234h^KhZjy hejú hgj¨hi}rF(jƒX#https://tools.ietf.org/html/rfc5234rGhn]rHUabnfrIahm]hk]hl]hq]rJhauhsM± hthhu]ubeubeubhehfhghhhi}rK(hk]hl]hm]hn]rLjKahq]rMhauhsM”hthhu]rN(hw)rO}rP(hYXPackage descriptionsrQhZhahehfhgh{hi}rR(hk]hl]hm]hn]hq]uhsM”hthhu]rSh~XPackage descriptionsrT…rU}rV(hYjQheNhsNhthhZjOubaubh‚)rW}rX(hYXuThe 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.hZhahehfhgh†hi}rY(hk]hl]hm]hn]hq]uhsM–hthhu]rZ(h~X;The package description file must have a name ending in “r[…r\}r](hYX9The package description file must have a name ending in "heNhsNhthhZjWubhä)r^}r_(hYX ``.cabal``hi}r`(hk]hl]hm]hn]hq]uhZjWhu]rah~X.cabalrb…rc}rd(hYUhZj^ubahghì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.re…rf}rg(hYX2". 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.heNhsNhthhZjWubeubh‚)rh}ri(hYX~In the package description file, lines whose first non-whitespace characters are "``--``" are treated as comments and ignored.hZhahehfhgh†hi}rj(hk]hl]hm]hn]hq]uhsMhthhu]rk(h~XTIn the package description file, lines whose first non-whitespace characters are “rl…rm}rn(hYXRIn the package description file, lines whose first non-whitespace characters are "heNhsNhthhZjhubhä)ro}rp(hYX``--``hi}rq(hk]hl]hm]hn]hq]uhZjhhu]rrh~X--rs…rt}ru(hYUhZjoubahghìubh~X(†are treated as comments and ignored.rv…rw}rx(hYX&" are treated as comments and ignored.heNhsNhthhZjhubeubh‚)ry}rz(hYXWThis file should contain of a number global property descriptions and several sections.r{hZhahehfhgh†hi}r|(hk]hl]hm]hn]hq]uhsM hthhu]r}h~XWThis file should contain of a number global property descriptions and several sections.r~…r}r€(hYj{heNhsNhthhZjyubaubhŒ)r}r‚(hYUhZhahehfhghhi}rƒ(h‘X-hn]hm]hk]hl]hq]uhsM£hthhu]r„(h“)r…}r†(hYX_The `package properties`_ describe the package as a whole, such as name, license, author, etc. hZjhehfhgh–hi}r‡(hk]hl]hm]hn]hq]uhsNhthhu]rˆh‚)r‰}rŠ(hYX^The `package properties`_ describe the package as a whole, such as name, license, author, etc.hZj…hehfhgh†hi}r‹(hk]hl]hm]hn]hq]uhsM£hu]rŒ(h~XThe r…rŽ}r(hYXThe hZj‰ubjD)r}r‘(hYX`package properties`_jGKhZj‰hgjHhi}r’(UnameXpackage propertieshn]hm]hk]hl]hq]jJUpackage-propertiesr“uhu]r”h~Xpackage propertiesr•…r–}r—(hYUhZjubaubh~XE describe the package as a whole, such as name, license, author, etc.r˜…r™}rš(hYXE describe the package as a whole, such as name, license, author, etc.hZj‰ubeubaubh“)r›}rœ(hYX­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`_). hZjhehfhgh–hi}r(hk]hl]hm]hn]hq]uhsNhthhu]ržh‚)rŸ}r (hYX¬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`_).hZj›hehfhgh†hi}r¡(hk]hl]hm]hn]hq]uhsM¦hu]r¢(h~XOptionally, a number of r£…r¤}r¥(hYXOptionally, a number of hZjŸubhÄ)r¦}r§(hYX*configuration flags*hi}r¨(hk]hl]hm]hn]hq]uhZjŸhu]r©h~Xconfiguration flagsrª…r«}r¬(hYUhZj¦ubahghÌ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¯(hYXl can be declared. These can be used to enable or disable certain features of a package. (see the section on hZjŸubjD)r°}r±(hYX`configurations`_jGKhZjŸhgjHhi}r²(UnameXconfigurationsr³hn]hm]hk]hl]hq]jJjÐuhu]r´h~Xconfigurationsrµ…r¶}r·(hYUhZj°ubaubh~X).r¸…r¹}rº(hYX).hZjŸubeubaubh“)r»}r¼(hYXfThe (optional) library section specifies the `library`_ properties and relevant `build information`_. hZjhehfhgh–hi}r½(hk]hl]hm]hn]hq]uhsNhthhu]r¾h‚)r¿}rÀ(hYXeThe (optional) library section specifies the `library`_ properties and relevant `build information`_.hZj»hehfhgh†hi}rÁ(hk]hl]hm]hn]hq]uhsMªhu]rÂ(h~X-The (optional) library section specifies the rÃ…rÄ}rÅ(hYX-The (optional) library section specifies the hZj¿ubjD)rÆ}rÇ(hYX `library`_jGKhZj¿hgjHhi}rÈ(UnameXlibraryrÉhn]hm]hk]hl]hq]jJUlibraryrÊuhu]rËh~XlibraryrÌ…rÍ}rÎ(hYUhZjÆubaubh~X properties and relevant rÏ…rÐ}rÑ(hYX properties and relevant hZj¿ubjD)rÒ}rÓ(hYX`build information`_jGKhZj¿hgjHhi}rÔ(UnameXbuild informationhn]hm]hk]hl]hq]jJj\uhu]rÕh~Xbuild informationrÖ…r×}rØ(hYUhZjÒubaubh~X.…rÙ}rÚ(hYX.hZj¿ubeubaubh“)rÛ}rÜ(hYX€Following is an arbitrary number of executable sections which describe an executable program and relevant `build information`_. hZjhehfhgh–hi}rÝ(hk]hl]hm]hn]hq]uhsNhthhu]rÞh‚)rß}rà(hYXFollowing is an arbitrary number of executable sections which describe an executable program and relevant `build information`_.hZjÛhehfhgh†hi}rá(hk]hl]hm]hn]hq]uhsM­hu]râ(h~XjFollowing is an arbitrary number of executable sections which describe an executable program and relevant rã…rä}rå(hYXjFollowing is an arbitrary number of executable sections which describe an executable program and relevant hZjßubjD)ræ}rç(hYX`build information`_jGKhZjßhgjHhi}rè(UnameXbuild informationhn]hm]hk]hl]hq]jJj\uhu]réh~Xbuild informationrê…rë}rì(hYUhZjæubaubh~X.…rí}rî(hYX.hZjßubeubaubeubh‚)rï}rð(hYXEach section consists of a number of property descriptions in the form of field/value pairs, with a syntax roughly like mail message headers.rñhZhahehfhgh†hi}rò(hk]hl]hm]hn]hq]uhsM°hthhu]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ö(hYjñheNhsNhthhZjïubaubhŒ)r÷}rø(hYUhZhahehfhghhi}rù(h‘X-hn]hm]hk]hl]hq]uhsM³hthhu]rú(h“)rû}rü(hYXLCase is not significant in field names, but is significant in field values. hZj÷hehfhgh–hi}rý(hk]hl]hm]hn]hq]uhsNhthhu]rþh‚)rÿ}r(hYXKCase is not significant in field names, but is significant in field values.rhZjûhehfhgh†hi}r(hk]hl]hm]hn]hq]uhsM³hu]rh~XKCase is not significant in field names, but is significant in field values.r…r}r(hYjhZjÿubaubaubh“)r}r(hYXLTo continue a field value, indent the next line relative to the field name. hZj÷hehfhgh–hi}r (hk]hl]hm]hn]hq]uhsNhthhu]r h‚)r }r (hYXKTo continue a field value, indent the next line relative to the field name.r hZjhehfhgh†hi}r(hk]hl]hm]hn]hq]uhsM¶hu]rh~XKTo continue a field value, indent the next line relative to the field name.r…r}r(hYj hZj ubaubaubh“)r}r(hYXeField names may be indented, but all field values in the same section must use the same indentation. hZj÷hehfhgh–hi}r(hk]hl]hm]hn]hq]uhsNhthhu]rh‚)r}r(hYXdField names may be indented, but all field values in the same section must use the same indentation.rhZjhehfhgh†hi}r(hk]hl]hm]hn]hq]uhsM¹hu]rh~XdField names may be indented, but all field values in the same section must use the same indentation.r…r}r(hYjhZjubaubaubh“)r}r (hYXhTabs are *not* allowed as indentation characters due to a missing standard interpretation of tab width. hZj÷hehfhgh–hi}r!(hk]hl]hm]hn]hq]uhsNhthhu]r"h‚)r#}r$(hYXgTabs are *not* allowed as indentation characters due to a missing standard interpretation of tab width.hZjhehfhgh†hi}r%(hk]hl]hm]hn]hq]uhsM¼hu]r&(h~X Tabs are r'…r(}r)(hYX Tabs are hZj#ubhÄ)r*}r+(hYX*not*hi}r,(hk]hl]hm]hn]hq]uhZj#hu]r-h~Xnotr.…r/}r0(hYUhZj*ubahghÌubh~XY allowed as indentation characters due to a missing standard interpretation of tab width.r1…r2}r3(hYXY allowed as indentation characters due to a missing standard interpretation of tab width.hZj#ubeubaubh“)r4}r5(hYX>To get a blank line in a field value, use an indented "``.``" hZj÷hehfhgh–hi}r6(hk]hl]hm]hn]hq]uhsNhthhu]r7h‚)r8}r9(hYX=To get a blank line in a field value, use an indented "``.``"hZj4hehfhgh†hi}r:(hk]hl]hm]hn]hq]uhsM¿hu]r;(h~X9To get a blank line in a field value, use an indented “r<…r=}r>(hYX7To get a blank line in a field value, use an indented "hZj8ubhä)r?}r@(hYX``.``hi}rA(hk]hl]hm]hn]hq]uhZj8hu]rBh~X.…rC}rD(hYUhZj?ubahghìubh~X rE}rF(hYX"hZj8ubeubaubeubh‚)rG}rH(hYXBThe syntax of the value depends on the field. Field types include:rIhZhahehfhgh†hi}rJ(hk]hl]hm]hn]hq]uhsMÁhthhu]rKh~XBThe syntax of the value depends on the field. Field types include:rL…rM}rN(hYjIheNhsNhthhZjGubaubj)rO}rP(hYUhZhahehfhgjhi}rQ(hk]hl]hm]hn]hq]uhsNhthhu]rR(j)rS}rT(hYXk*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.hZjOhehfhgjhi}rU(hk]hl]hm]hn]hq]uhsMÈhu]rV(j!)rW}rX(hYX *token*, *filename*, *directory*rYhZjShehfhgj%hi}rZ(hk]hl]hm]hn]hq]uhsMÈhu]r[(hÄ)r\}r](hYX*token*hi}r^(hk]hl]hm]hn]hq]uhZjWhu]r_h~Xtokenr`…ra}rb(hYUhZj\ubahghÌubh~X, rc…rd}re(hYX, rfhZjWubhÄ)rg}rh(hYX *filename*hi}ri(hk]hl]hm]hn]hq]uhZjWhu]rjh~Xfilenamerk…rl}rm(hYUhZjgubahghÌubh~X, rn…ro}rp(hYjfhZjWubhÄ)rq}rr(hYX *directory*hi}rs(hk]hl]hm]hn]hq]uhZjWhu]rth~X directoryru…rv}rw(hYUhZjqubahghÌubeubj8)rx}ry(hYUhi}rz(hk]hl]hm]hn]hq]uhZjShu]r{h‚)r|}r}(hYXJEither 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.hZjxhehfhgh†hi}r~(hk]hl]hm]hn]hq]uhsMÄhu]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‚(hYX¯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: hZj|ubhä)rƒ}r„(hYX-``ghc-options: -Wall "-with-rtsopts=-T -I1"``hi}r…(hk]hl]hm]hn]hq]uhZj|hu]r†h~X)ghc-options: -Wall "-with-rtsopts=-T -I1"r‡…rˆ}r‰(hYUhZjƒubahghìubh~Xn. Unless otherwise stated, relative filenames and directories are interpreted from the package root directory.rŠ…r‹}rŒ(hYXn. Unless otherwise stated, relative filenames and directories are interpreted from the package root directory.hZj|ubeubahgjRubeubj)r}rŽ(hYX@*freeform*, *URL*, *address* An arbitrary, uninterpreted string.hZjOhehfhgjhi}r(hk]hl]hm]hn]hq]uhsMÊhthhu]r(j!)r‘}r’(hYX*freeform*, *URL*, *address*r“hZjhehfhgj%hi}r”(hk]hl]hm]hn]hq]uhsMÊhu]r•(hÄ)r–}r—(hYX *freeform*hi}r˜(hk]hl]hm]hn]hq]uhZj‘hu]r™h~Xfreeformrš…r›}rœ(hYUhZj–ubahghÌubh~X, r…rž}rŸ(hYX, r hZj‘ubhÄ)r¡}r¢(hYX*URL*hi}r£(hk]hl]hm]hn]hq]uhZj‘hu]r¤h~XURLr¥…r¦}r§(hYUhZj¡ubahghÌubh~X, r¨…r©}rª(hYj hZj‘ubhÄ)r«}r¬(hYX *address*hi}r­(hk]hl]hm]hn]hq]uhZj‘hu]r®h~Xaddressr¯…r°}r±(hYUhZj«ubahghÌubeubj8)r²}r³(hYUhi}r´(hk]hl]hm]hn]hq]uhZjhu]rµh‚)r¶}r·(hYX#An arbitrary, uninterpreted string.r¸hZj²hehfhgh†hi}r¹(hk]hl]hm]hn]hq]uhsMËhu]rºh~X#An arbitrary, uninterpreted string.r»…r¼}r½(hYj¸hZj¶ubaubahgjRubeubj)r¾}r¿(hYXL*identifier* A letter followed by zero or more alphanumerics or underscores.hZjOhehfhgjhi}rÀ(hk]hl]hm]hn]hq]uhsMÌhthhu]rÁ(j!)rÂ}rÃ(hYX *identifier*rÄhZj¾hehfhgj%hi}rÅ(hk]hl]hm]hn]hq]uhsMÌhu]rÆhÄ)rÇ}rÈ(hYjÄhi}rÉ(hk]hl]hm]hn]hq]uhZjÂhu]rÊh~X identifierrË…rÌ}rÍ(hYUhZjÇubahghÌubaubj8)rÎ}rÏ(hYUhi}rÐ(hk]hl]hm]hn]hq]uhZj¾hu]rÑh‚)rÒ}rÓ(hYX?A letter followed by zero or more alphanumerics or underscores.rÔhZjÎhehfhgh†hi}rÕ(hk]hl]hm]hn]hq]uhsMÍhu]rÖh~X?A letter followed by zero or more alphanumerics or underscores.r×…rØ}rÙ(hYjÔhZjÒubaubahgjRubeubj)rÚ}rÛ(hYX™*compiler* A compiler flavor (one of: ``GHC``, ``UHC`` or ``LHC``) followed by a version range. For example, ``GHC ==6.10.3``, or ``LHC >=0.6 && <0.8``. hZjOhehfhgjhi}rÜ(hk]hl]hm]hn]hq]uhsMÑhthhu]rÝ(j!)rÞ}rß(hYX *compiler*ràhZjÚhehfhgj%hi}rá(hk]hl]hm]hn]hq]uhsMÑhu]râhÄ)rã}rä(hYjàhi}rå(hk]hl]hm]hn]hq]uhZjÞhu]ræh~Xcompilerrç…rè}ré(hYUhZjãubahghÌubaubj8)rê}rë(hYUhi}rì(hk]hl]hm]hn]hq]uhZjÚhu]ríh‚)rî}rï(hYXA compiler flavor (one of: ``GHC``, ``UHC`` or ``LHC``) followed by a version range. For example, ``GHC ==6.10.3``, or ``LHC >=0.6 && <0.8``.hZjêhehfhgh†hi}rð(hk]hl]hm]hn]hq]uhsMÏhu]rñ(h~XA compiler flavor (one of: rò…ró}rô(hYXA compiler flavor (one of: hZjîubhä)rõ}rö(hYX``GHC``hi}r÷(hk]hl]hm]hn]hq]uhZjîhu]røh~XGHCrù…rú}rû(hYUhZjõubahghìubh~X, rü…rý}rþ(hYX, hZjîubhä)rÿ}r(hYX``UHC``hi}r(hk]hl]hm]hn]hq]uhZjîhu]rh~XUHCr…r}r(hYUhZjÿubahghìubh~X or r…r}r(hYX or hZjîubhä)r }r (hYX``LHC``hi}r (hk]hl]hm]hn]hq]uhZjîhu]r h~XLHCr …r}r(hYUhZj ubahghìubh~X,) followed by a version range. For example, r…r}r(hYX,) followed by a version range. For example, hZjîubhä)r}r(hYX``GHC ==6.10.3``hi}r(hk]hl]hm]hn]hq]uhZjîhu]rh~X GHC ==6.10.3r…r}r(hYUhZjubahghìubh~X, or r…r}r(hYX, or hZjîubhä)r}r(hYX``LHC >=0.6 && <0.8``hi}r(hk]hl]hm]hn]hq]uhZjîhu]r h~XLHC >=0.6 && <0.8r!…r"}r#(hYUhZjubahghìubh~X.…r$}r%(hYX.hZjîubeubahgjRubeubeubh[)r&}r'(hYUhZhahehfhghhhi}r((hk]hl]hm]hn]r)Umodules-and-preprocessorsr*ahq]r+h=auhsMÔhthhu]r,(hw)r-}r.(hYXModules and preprocessorsr/hZj&hehfhgh{hi}r0(hk]hl]hm]hn]hq]uhsMÔhthhu]r1h~XModules and preprocessorsr2…r3}r4(hYj/heNhsNhthhZj-ubaubh‚)r5}r6(hYX<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:hZj&hehfhgh†hi}r7(hk]hl]hm]hn]hq]uhsMÖhthhu]r8(h~X#Haskell module names listed in the r9…r:}r;(hYX#Haskell module names listed in the heNhsNhthhZj5ubjp)r<}r=(hYX$:pkg-field:`library:exposed-modules`r>hZj5hehfhgjthi}r?(UreftypeX pkg-fieldjvˆjwXexposed-modulesU refdomainXcabalr@hn]hm]U refexplicit‰hk]hl]hq]jyjzjXlibraryuhsMÖhu]rAhä)rB}rC(hYj>hi}rD(hk]hl]rE(jj@Xcabal-pkg-fieldrFehm]hn]hq]uhZj<hu]rGh~Xlibrary:exposed-modulesrH…rI}rJ(hYUhZjBubahghìubaubh~X and rK…rL}rM(hYX and heNhsNhthhZj5ubjp)rN}rO(hYX":pkg-field:`library:other-modules`rPhZj5hehfhgjthi}rQ(UreftypeX pkg-fieldjvˆjwX other-modulesU refdomainXcabalrRhn]hm]U refexplicit‰hk]hl]hq]jyjzjXlibraryuhsMÖhu]rShä)rT}rU(hYjPhi}rV(hk]hl]rW(jjRXcabal-pkg-fieldrXehm]hn]hq]uhZjNhu]rYh~Xlibrary:other-modulesrZ…r[}r\(hYUhZjTubahghìubaubh~XM fields may correspond to Haskell source files, i.e. with names ending in “r]…r^}r_(hYXK fields may correspond to Haskell source files, i.e. with names ending in "heNhsNhthhZj5ubhä)r`}ra(hYX``.hs``hi}rb(hk]hl]hm]hn]hq]uhZj5hu]rch~X.hsrd…re}rf(hYUhZj`ubahghìubh~X †or “rg…rh}ri(hYX" or "heNhsNhthhZj5ubhä)rj}rk(hYX``.lhs``hi}rl(hk]hl]hm]hn]hq]uhZj5hu]rmh~X.lhsrn…ro}rp(hYUhZjjubahghìubh~Xpâ€, or to inputs for various Haskell preprocessors. The simple build infrastructure understands the extensions:rq…rr}rs(hYXn", or to inputs for various Haskell preprocessors. The simple build infrastructure understands the extensions:heNhsNhthhZj5ubeubhŒ)rt}ru(hYUhZj&hehfhghhi}rv(h‘X-hn]hm]hk]hl]hq]uhsMÜhthhu]rw(h“)rx}ry(hYX"``.gc`` (:hackage-pkg:`greencard`)rzhZjthehfhgh–hi}r{(hk]hl]hm]hn]hq]uhsNhthhu]r|h‚)r}}r~(hYjzhZjxhehfhgh†hi}r(hk]hl]hm]hn]hq]uhsMÜhu]r€(hä)r}r‚(hYX``.gc``hi}rƒ(hk]hl]hm]hn]hq]uhZj}hu]r„h~X.gcr……r†}r‡(hYUhZjubahghìubh~X (rˆ…r‰}rŠ(hYX (hZj}ubjD)r‹}rŒ(hYX greencardhi}r(UrefuriX,http://hackage.haskell.org/package/greencardhn]hm]hk]hl]hq]Uinternal‰uhZj}hu]rŽh~X greencardr…r}r‘(hYUhZj‹ubahgjHubh~X)…r’}r“(hYX)hZj}ubeubaubh“)r”}r•(hYX``.chs`` (:hackage-pkg:`c2hs`)r–hZjthehfhgh–hi}r—(hk]hl]hm]hn]hq]uhsNhthhu]r˜h‚)r™}rš(hYj–hZj”hehfhgh†hi}r›(hk]hl]hm]hn]hq]uhsMÝhu]rœ(hä)r}rž(hYX``.chs``hi}rŸ(hk]hl]hm]hn]hq]uhZj™hu]r h~X.chsr¡…r¢}r£(hYUhZjubahghìubh~X (r¤…r¥}r¦(hYX (hZj™ubjD)r§}r¨(hYXc2hshi}r©(UrefuriX'http://hackage.haskell.org/package/c2hshn]hm]hk]hl]hq]Uinternal‰uhZj™hu]rªh~Xc2hsr«…r¬}r­(hYUhZj§ubahgjHubh~X)…r®}r¯(hYX)hZj™ubeubaubh“)r°}r±(hYX ``.hsc`` (:hackage-pkg:`hsc2hs`)r²hZjthehfhgh–hi}r³(hk]hl]hm]hn]hq]uhsNhthhu]r´h‚)rµ}r¶(hYj²hZj°hehfhgh†hi}r·(hk]hl]hm]hn]hq]uhsMÞhu]r¸(hä)r¹}rº(hYX``.hsc``hi}r»(hk]hl]hm]hn]hq]uhZjµhu]r¼h~X.hscr½…r¾}r¿(hYUhZj¹ubahghìubh~X (rÀ…rÁ}rÂ(hYX (hZjµubjD)rÃ}rÄ(hYXhsc2hshi}rÅ(UrefuriX)http://hackage.haskell.org/package/hsc2hshn]hm]hk]hl]hq]Uinternal‰uhZjµhu]rÆh~Xhsc2hsrÇ…rÈ}rÉ(hYUhZjÃubahgjHubh~X)…rÊ}rË(hYX)hZjµubeubaubh“)rÌ}rÍ(hYX``.y`` and ``.ly`` (happy_)rÎhZjthehfhgh–hi}rÏ(hk]hl]hm]hn]hq]uhsNhthhu]rÐh‚)rÑ}rÒ(hYjÎhZjÌhehfhgh†hi}rÓ(hk]hl]hm]hn]hq]uhsMßhu]rÔ(hä)rÕ}rÖ(hYX``.y``hi}r×(hk]hl]hm]hn]hq]uhZjÑhu]rØh~X.yrÙ…rÚ}rÛ(hYUhZjÕubahghìubh~X and rÜ…rÝ}rÞ(hYX and hZjÑubhä)rß}rà(hYX``.ly``hi}rá(hk]hl]hm]hn]hq]uhZjÑhu]râh~X.lyrã…rä}rå(hYUhZjßubahghìubh~X (ræ…rç}rè(hYX (hZjÑubjD)ré}rê(hYXhappy_jGKhZjÑhgjHhi}rë(UnameXhappyrìjƒj-hn]hm]hk]hl]hq]uhu]ríh~Xhappyrî…rï}rð(hYUhZjéubaubh~X)…rñ}rò(hYX)hZjÑubeubaubh“)ró}rô(hYX``.x`` (alex_)rõhZjthehfhgh–hi}rö(hk]hl]hm]hn]hq]uhsNhthhu]r÷h‚)rø}rù(hYjõhZjóhehfhgh†hi}rú(hk]hl]hm]hn]hq]uhsMàhu]rû(hä)rü}rý(hYX``.x``hi}rþ(hk]hl]hm]hn]hq]uhZjøhu]rÿh~X.xr…r}r(hYUhZjüubahghìubh~X (r…r}r(hYX (hZjøubjD)r}r(hYXalex_jGKhZjøhgjHhi}r(UnameXalexr jƒj&hn]hm]hk]hl]hq]uhu]r h~Xalexr …r }r (hYUhZjubaubh~X)…r}r(hYX)hZjøubeubaubh“)r}r(hYX``.cpphs`` (cpphs_) hZjthehfhgh–hi}r(hk]hl]hm]hn]hq]uhsNhthhu]rh‚)r}r(hYX``.cpphs`` (cpphs_)hZjhehfhgh†hi}r(hk]hl]hm]hn]hq]uhsMáhu]r(hä)r}r(hYX ``.cpphs``hi}r(hk]hl]hm]hn]hq]uhZjhu]rh~X.cpphsr…r}r(hYUhZjubahghìubh~X (r…r }r!(hYX (hZjubjD)r"}r#(hYXcpphs_jGKhZjhgjHhi}r$(UnameXcpphsr%jƒj@hn]hm]hk]hl]hq]uhu]r&h~Xcpphsr'…r(}r)(hYUhZj"ubaubh~X)…r*}r+(hYX)hZjubeubaubeubh‚)r,}r-(hYXØ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.hZj&hehfhgh†hi}r.(hk]hl]hm]hn]hq]uhsMãhthhu]r/(h~X}When building, Cabal will automatically run the appropriate preprocessor and compile the Haskell module it produces. For the r0…r1}r2(hYX}When building, Cabal will automatically run the appropriate preprocessor and compile the Haskell module it produces. For the heNhsNhthhZj,ubhä)r3}r4(hYX``c2hs``hi}r5(hk]hl]hm]hn]hq]uhZj,hu]r6h~Xc2hsr7…r8}r9(hYUhZj3ubahghìubh~X and r:…r;}r<(hYX and heNhsNhthhZj,ubhä)r=}r>(hYX ``hsc2hs``hi}r?(hk]hl]hm]hn]hq]uhZj,hu]r@h~Xhsc2hsrA…rB}rC(hYUhZj=ubahghìubh~X} preprocessors, Cabal will also automatically add, compile and link any C sources generated by the preprocessor (produced by rD…rE}rF(hYX} preprocessors, Cabal will also automatically add, compile and link any C sources generated by the preprocessor (produced by heNhsNhthhZj,ubhä)rG}rH(hYX ``hsc2hs``hi}rI(hk]hl]hm]hn]hq]uhZj,hu]rJh~Xhsc2hsrK…rL}rM(hYUhZjGubahghìubh~X’s rN…rO}rP(hYX's heNhsNhthhZj,ubhä)rQ}rR(hYX``#def``hi}rS(hk]hl]hm]hn]hq]uhZj,hu]rTh~X#defrU…rV}rW(hYUhZjQubahghìubh~X feature or rX…rY}rZ(hYX feature or heNhsNhthhZj,ubhä)r[}r\(hYX``c2hs``hi}r](hk]hl]hm]hn]hq]uhZj,hu]r^h~Xc2hsr_…r`}ra(hYUhZj[ubahghìubh~X]’s auto-generated wrapper functions). Dependencies on pre-processors are specified via the rb…rc}rd(hYX['s auto-generated wrapper functions). Dependencies on pre-processors are specified via the heNhsNhthhZj,ubjp)re}rf(hYX:pkg-field:`build-tools`rghZj,hehfhgjthi}rh(UreftypeX pkg-fieldjvˆjwX build-toolsU refdomainXcabalrihn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMãhu]rjhä)rk}rl(hYjghi}rm(hk]hl]rn(jjiXcabal-pkg-fieldroehm]hn]hq]uhZjehu]rph~X build-toolsrq…rr}rs(hYUhZjkubahghìubaubh~X or rt…ru}rv(hYX or heNhsNhthhZj,ubjp)rw}rx(hYX:pkg-field:`build-tool-depends`ryhZj,hehfhgjthi}rz(UreftypeX pkg-fieldjvˆjwXbuild-tool-dependsU refdomainXcabalr{hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMãhu]r|hä)r}}r~(hYjyhi}r(hk]hl]r€(jj{Xcabal-pkg-fieldrehm]hn]hq]uhZjwhu]r‚h~Xbuild-tool-dependsrƒ…r„}r…(hYUhZj}ubahghìubaubh~X fields.r†…r‡}rˆ(hYX fields.heNhsNhthhZj,ubeubh‚)r‰}rŠ(hYXœ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.hZj&hehfhgh†hi}r‹(hk]hl]hm]hn]hq]uhsMëhthhu]rŒ(h~X[Some fields take lists of values, which are optionally separated by commas, except for the r…rŽ}r(hYX[Some fields take lists of values, which are optionally separated by commas, except for the heNhsNhthhZj‰ubjp)r}r‘(hYX:pkg-field:`build-depends`r’hZj‰hehfhgjthi}r“(UreftypeX pkg-fieldjvˆjwX build-dependsU refdomainXcabalr”hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMëhu]r•hä)r–}r—(hYj’hi}r˜(hk]hl]r™(jj”Xcabal-pkg-fieldršehm]hn]hq]uhZjhu]r›h~X build-dependsrœ…r}rž(hYUhZj–ubahghìubaubh~X' field, where the commas are mandatory.rŸ…r }r¡(hYX' field, where the commas are mandatory.heNhsNhthhZj‰ubeubh‚)r¢}r£(hYXvSome fields are marked as required. All others are optional, and unless otherwise specified have empty default values.r¤hZj&hehfhgh†hi}r¥(hk]hl]hm]hn]hq]uhsMïhthhu]r¦h~XvSome fields are marked as required. All others are optional, and unless otherwise specified have empty default values.r§…r¨}r©(hYj¤heNhsNhthhZj¢ubaubeubh[)rª}r«(hYUh^KhZhahehfhghhhi}r¬(hk]hl]hm]hn]r­j“ahq]r®h1auhsMóhthhu]r¯(hw)r°}r±(hYXPackage propertiesr²hZjªhehfhgh{hi}r³(hk]hl]hm]hn]hq]uhsMóhthhu]r´h~XPackage propertiesrµ…r¶}r·(hYj²heNhsNhthhZj°ubaubh‚)r¸}r¹(hYXeThese fields may occur in the first top-level properties section and describe the package as a whole:rºhZjªhehfhgh†hi}r»(hk]hl]hm]hn]hq]uhsMõhthhu]r¼h~XeThese fields may occur in the first top-level properties section and describe the package as a whole:r½…r¾}r¿(hYjºheNhsNhthhZj¸ubaubjþ)rÀ}rÁ(hYUhZjªheNhgjhi}rÂ(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rÃ}rÄ(hYUhZjªheNhgjhi}rÅ(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrÆj jÆuhsNhthhu]rÇ(j)rÈ}rÉ(hYXname: package-name (required)hZjÃhehfhgjhi}rÊ(hn]rËXpkg-field-namerÌahm]hk]hl]hq]j‰uhsMhthhu]rÍ(jþ)rÎ}rÏ(hYUhZjÈhehfhgjhi}rÐ(hn]hm]hk]hl]hq]Uentries]rÑ(jXname; package.cabal fieldjÌUNtrÒauhsMhthhu]ubj)rÓ}rÔ(hYXnamerÕhZjÈhehfhgj!hi}rÖ(jÖj×hn]hm]hk]hl]hq]uhsMhthhu]r×h~XnamerØ…rÙ}rÚ(hYUheNhsNhthhZjÓubaubj')rÛ}rÜ(hYj hZjÈhehfhgj*hi}rÝ(jÖj×hn]hm]hk]hl]hq]uhsMhthhu]rÞh~X: rß…rà}rá(hYUheNhsNhthhZjÛubaubj¦)râ}rã(hYXpackage-name (required)hZjÈhehfhgj©hi}rä(jÖj×hn]hm]hk]hl]hq]uhsMhthhu]råh~Xpackage-name (required)ræ…rç}rè(hYUheNhsNhthhZjâubaubeubj/)ré}rê(hYUhZjÃhehfhgj2hi}rë(hk]hl]hm]hn]hq]uhsMhthhu]rì(h‚)rí}rî(hYX;The unique name of the package, without the version number.rïhZjéhehfhgh†hi}rð(hk]hl]hm]hn]hq]uhsMúhthhu]rñh~X;The unique name of the package, without the version number.rò…ró}rô(hYjïheNhsNhthhZjíubaubh‚)rõ}rö(hYXÁ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`.hZjéhehfhgh†hi}r÷(hk]hl]hm]hn]hq]uhsMühthhu]rø(h~X!As pointed out in the section on rù…rú}rû(hYX!As pointed out in the section on heNhsNhthhZjõubjD)rü}rý(hYX`package descriptions`_jGKhZjõhgjHhi}rþ(UnameXpackage descriptionshn]hm]hk]hl]hq]jJjKuhu]rÿh~Xpackage descriptionsr…r}r(hYUhZjüubaubh~Xn, some tools require the package-name specified for this field to match the package description’s file-name r…r}r(hYXl, some tools require the package-name specified for this field to match the package description's file-name heNhsNhthhZjõubhä)r}r(hYXpackage-name.cabalhi}r(hn]hm]hk]hl]r Xfiler aUrolej hq]uhZjõhu]r (hÄ)r }r (hYX package-namehi}r(hk]hl]hm]hn]hq]uhZjhu]rh~X package-namer…r}r(hYUhZj ubahghÌubh~X.cabalr…r}r(hYX.cabalhZjubehghìubh~X.…r}r(hYX.heNhsNhthhZjõubeubh‚)r}r(hYXPackage 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:]]*)*``.hZjéhehfhgh†hi}r(hk]hl]hm]hn]hq]uhsMhthhu]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(hYX±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): heNhsNhthhZjubhä)r}r (hYXN``[[:digit:]]*[[:alpha:]][[:alnum:]]*(-[[:digit:]]*[[:alpha:]][[:alnum:]]*)*``hi}r!(hk]hl]hm]hn]hq]uhZjhu]r"h~XJ[[:digit:]]*[[:alpha:]][[:alnum:]]*(-[[:digit:]]*[[:alpha:]][[:alnum:]]*)*r#…r$}r%(hYUhZjubahghìubh~X.…r&}r'(hYX.heNhsNhthhZjubeubh‚)r(}r)(hYXOr, expressed in ABNF_:hZjéhehfhgh†hi}r*(hk]hl]hm]hn]hq]uhsMhthhu]r+(h~XOr, expressed in r,…r-}r.(hYXOr, expressed in heNhsNhthhZj(ubjD)r/}r0(hYXABNF_jGKhZj(hgjHhi}r1(UnameXABNFjƒjGhn]hm]hk]hl]hq]uhu]r2h~XABNFr3…r4}r5(hYUhZj/ubaubh~X:…r6}r7(hYX:heNhsNhthhZj(ubeubjÑ)r8}r9(hYX¶package-name = package-name-part *("-" package-name-part) package-name-part = *DIGIT UALPHA *UALNUM UALNUM = UALPHA / DIGIT UALPHA = ... ; set of alphabetic Unicode code-pointshZjéhehfhgjÔhi}r:(j‰jXabnfjÖj×hn]hm]hk]j}hl]hq]uhsMhthhu]r;h~X¶package-name = package-name-part *("-" package-name-part) package-name-part = *DIGIT UALPHA *UALNUM UALNUM = UALPHA / DIGIT UALPHA = ... ; set of alphabetic Unicode code-pointsr<…r=}r>(hYUhZj8ubaubhð)r?}r@(hYX4Hackage restricts package names to the ASCII subset.rAhZjéhehfhghóhi}rB(hk]hl]hm]hn]hq]uhsNhthhu]rCh‚)rD}rE(hYjAhZj?hehfhgh†hi}rF(hk]hl]hm]hn]hq]uhsMhu]rGh~X4Hackage restricts package names to the ASCII subset.rH…rI}rJ(hYjAhZjDubaubaubeubeubjþ)rK}rL(hYUhZjªheNhgjhi}rM(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rN}rO(hYUhZjªheNhgjhi}rP(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrQj jQuhsNhthhu]rR(j)rS}rT(hYXversion: numbers (required)hZjNhehfhgjhi}rU(hn]rVXpkg-field-versionrWahm]hk]hl]hq]j‰uhsMhthhu]rX(jþ)rY}rZ(hYUhZjShehfhgjhi}r[(hn]hm]hk]hl]hq]Uentries]r\(jXversion; package.cabal fieldjWUNtr]auhsMhthhu]ubj)r^}r_(hYXversionr`hZjShehfhgj!hi}ra(jÖj×hn]hm]hk]hl]hq]uhsMhthhu]rbh~Xversionrc…rd}re(hYUheNhsNhthhZj^ubaubj')rf}rg(hYj hZjShehfhgj*hi}rh(jÖj×hn]hm]hk]hl]hq]uhsMhthhu]rih~X: rj…rk}rl(hYUheNhsNhthhZjfubaubj¦)rm}rn(hYXnumbers (required)hZjShehfhgj©hi}ro(jÖj×hn]hm]hk]hl]hq]uhsMhthhu]rph~Xnumbers (required)rq…rr}rs(hYUheNhsNhthhZjmubaubeubj/)rt}ru(hYUhZjNhehfhgj2hi}rv(hk]hl]hm]hn]hq]uhsMhthhu]rw(h‚)rx}ry(hYX¯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_:hZjthehfhgh†hi}rz(hk]hl]hm]hn]hq]uhsMhthhu]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~(hYX‚The package version number, usually consisting of a sequence of natural numbers separated by dots, i.e. as the regular expression heNhsNhthhZjxubhä)r}r€(hYX``[0-9]+([.][0-9]+)*``hi}r(hk]hl]hm]hn]hq]uhZjxhu]r‚h~X[0-9]+([.][0-9]+)*rƒ…r„}r…(hYUhZjubahghìubh~X or expressed in r†…r‡}rˆ(hYX or expressed in heNhsNhthhZjxubjD)r‰}rŠ(hYXABNF_jGKhZjxhgjHhi}r‹(UnameXABNFjƒjGhn]hm]hk]hl]hq]uhu]rŒh~XABNFr…rŽ}r(hYUhZj‰ubaubh~X:…r}r‘(hYX:heNhsNhthhZjxubeubjÑ)r’}r“(hYX(package-version = 1*DIGIT *("." 1*DIGIT)hZjthehfhgjÔhi}r”(j‰jXabnfjÖj×hn]hm]hk]j}hl]hq]uhsMhthhu]r•h~X(package-version = 1*DIGIT *("." 1*DIGIT)r–…r—}r˜(hYUhZj’ubaubeubeubjþ)r™}rš(hYUhZjªhehfhgjhi}r›(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rœ}r(hYUhZjªhehfhgjhi}rž(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrŸj jŸuhsNhthhu]r (j)r¡}r¢(hYXcabal-version: >= x.yhZjœhehfhgjhi}r£(hn]r¤Xpkg-field-cabal-versionr¥ahm]hk]hl]hq]j‰uhsM?hthhu]r¦(jþ)r§}r¨(hYUhZj¡hehfhgjhi}r©(hn]hm]hk]hl]hq]Uentries]rª(jX"cabal-version; package.cabal fieldj¥UNtr«auhsM?hthhu]ubj)r¬}r­(hYX cabal-versionr®hZj¡hehfhgj!hi}r¯(jÖj×hn]hm]hk]hl]hq]uhsM?hthhu]r°h~X cabal-versionr±…r²}r³(hYUheNhsNhthhZj¬ubaubj')r´}rµ(hYj hZj¡hehfhgj*hi}r¶(jÖj×hn]hm]hk]hl]hq]uhsM?hthhu]r·h~X: r¸…r¹}rº(hYUheNhsNhthhZj´ubaubj¦)r»}r¼(hYX>= x.yhZj¡hehfhgj©hi}r½(jÖj×hn]hm]hk]hl]hq]uhsM?hthhu]r¾h~X>= x.yr¿…rÀ}rÁ(hYUheNhsNhthhZj»ubaubeubj/)rÂ}rÃ(hYUhZjœhehfhgj2hi}rÄ(hk]hl]hm]hn]hq]uhsM?hthhu]rÅ(h‚)rÆ}rÇ(hYXsThe 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ÈhZjÂhehfhgh†hi}rÉ(hk]hl]hm]hn]hq]uhsMhthhu]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Í(hYjÈheNhsNhthhZjÆubaubh‚)rÎ}rÏ(hYXFor 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.hZjÂhehfhgh†hi}rÐ(hk]hl]hm]hn]hq]uhsM&hthhu]rÑ(h~X6For historical reasons this is always expressed using rÒ…rÓ}rÔ(hYX6For historical reasons this is always expressed using heNhsNhthhZjÎubhÄ)rÕ}rÖ(hYX*>=*hi}r×(hk]hl]hm]hn]hq]uhZjÎhu]rØh~X>=rÙ…rÚ}rÛ(hYUhZjÕubahghÌ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Þ(hYXÆ 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.heNhsNhthhZjÎubeubh‚)rß}rà(hYXThe 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áhZjÂhehfhgh†hi}râ(hk]hl]hm]hn]hq]uhsM+hthhu]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æ(hYjáheNhsNhthhZjßubaubh‚)rç}rè(hYXDAs 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éhZjÂhehfhgh†hi}rê(hk]hl]hm]hn]hq]uhsM2hthhu]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î(hYjéheNhsNhthhZjçubaubh‚)rï}rð(hYX®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.hZjÂhehfhgh†hi}rñ(hk]hl]hm]hn]hq]uhsM8hthhu]rò(h~XgIn particular, the syntax of package descriptions changed significantly with Cabal version 1.2 and the ró…rô}rõ(hYXgIn particular, the syntax of package descriptions changed significantly with Cabal version 1.2 and the heNhsNhthhZjïubjp)rö}r÷(hYX:pkg-field:`cabal-version`røhZjïhehfhgjthi}rù(UreftypeX pkg-fieldjvˆjwX cabal-versionU refdomainXcabalrúhn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsM8hu]rûhä)rü}rý(hYjøhi}rþ(hk]hl]rÿ(jjúXcabal-pkg-fieldrehm]hn]hq]uhZjöhu]rh~X cabal-versionr…r}r(hYUhZjüubahghì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(hYX- 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.heNhsNhthhZjïubeubeubeubjþ)r}r (hYUhZjªhehfhgjhi}r (hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r }r (hYUhZjªhehfhgjhi}r (j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrj juhsNhthhu]r(j)r}r(hYXbuild-type: identifierhZj hehfhgjhi}r(hn]rXpkg-field-build-typerahm]hk]hl]hq]j‰uhsMththhu]r(jþ)r}r(hYUhZjhehfhgjhi}r(hn]hm]hk]hl]hq]Uentries]r(jXbuild-type; package.cabal fieldjUNtrauhsMththhu]ubj)r}r(hYX build-typerhZjhehfhgj!hi}r(jÖj×hn]hm]hk]hl]hq]uhsMththhu]rh~X build-typer …r!}r"(hYUheNhsNhthhZjubaubj')r#}r$(hYj hZjhehfhgj*hi}r%(jÖj×hn]hm]hk]hl]hq]uhsMththhu]r&h~X: r'…r(}r)(hYUheNhsNhthhZj#ubaubj¦)r*}r+(hYX identifierhZjhehfhgj©hi}r,(jÖj×hn]hm]hk]hl]hq]uhsMththhu]r-h~X identifierr.…r/}r0(hYUheNhsNhthhZj*ubaubeubj/)r1}r2(hYUhZj hehfhgj2hi}r3(hk]hl]hm]hn]hq]uhsMththhu]r4(j5)r5}r6(hYUhZj1hehfhgj8hi}r7(hk]hl]hm]hn]hq]uhsNhthhu]r8j;)r9}r:(hYUhi}r;(hk]hl]hm]hn]hq]uhZj5hu]r<(jA)r=}r>(hYX Default valuehZj9hehfhgjEhi}r?(hk]hl]hm]hn]hq]uhsKhu]r@h~X Default valuerA…rB}rC(hYUhZj=ubaubjK)rD}rE(hYUhi}rF(hk]hl]hm]hn]hq]uhZj9hu]rGh‚)rH}rI(hYXCustom or Simplehi}rJ(hk]hl]hm]hn]hq]uhZjDhu]rK(hä)rL}rM(hYX ``Custom``hZjHhehfhghìhi}rN(hk]hl]hm]hn]hq]uhsNhthhu]rOh~XCustomrP…rQ}rR(hYUheNhsNhthhZjLubaubh~X or rS…rT}rU(hYX or heNhsNhthhZjHubhä)rV}rW(hYX ``Simple``hZjHhehfhghìhi}rX(hk]hl]hm]hn]hq]uhsNhthhu]rYh~XSimplerZ…r[}r\(hYUheNhsNhthhZjVubaubehgh†ubahgjXubehgj>ubaubh‚)r]}r^(hYX%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:hZj1hehfhgh†hi}r_(hk]hl]hm]hn]hq]uhsMDhthhu]r`(h~XPThe type of build used by this package. Build types are the constructors of the ra…rb}rc(hYXPThe type of build used by this package. Build types are the constructors of the heNhsNhthhZj]ubjD)rd}re(hYXf`BuildType <../release/cabal-latest/doc/API/Cabal/Distribution-PackageDescription.html#t:BuildType>`__hi}rf(UnameX BuildTypejƒXV../release/cabal-latest/doc/API/Cabal/Distribution-PackageDescription.html#t:BuildTypehn]hm]hk]hl]hq]uhZj]hu]rgh~X BuildTyperh…ri}rj(hYUhZjdubahgjHubh~Xo type. This field is optional and when missing, its default value is inferred according to the following rules:rk…rl}rm(hYXo type. This field is optional and when missing, its default value is inferred according to the following rules:heNhsNhthhZj]ubeubj€)rn}ro(hYUhZj1heNhgjƒhi}rp(hk]hl]hm]hn]hq]uhsNhthhu]rqhŒ)rr}rs(hYUhZjnhehfhghhi}rt(h‘X-hn]hm]hk]hl]hq]uhsMJhu]ru(h“)rv}rw(hYX¶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``. hi}rx(hk]hl]hm]hn]hq]uhZjrhu]ryh‚)rz}r{(hYXµ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``.hZjvhehfhgh†hi}r|(hk]hl]hm]hn]hq]uhsMJhu]r}(h~XWhen r~…r}r€(hYXWhen hZjzubjp)r}r‚(hYX:pkg-field:`cabal-version`rƒhZjzhehfhgjthi}r„(UreftypeX pkg-fieldjvˆjwX cabal-versionU refdomainXcabalr…hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMJhu]r†hä)r‡}rˆ(hYjƒhi}r‰(hk]hl]rŠ(jj…Xcabal-pkg-fieldr‹ehm]hn]hq]uhZjhu]rŒh~X cabal-versionr…rŽ}r(hYUhZj‡ubahghìubaubh~X is set to r…r‘}r’(hYX is set to hZjzubhä)r“}r”(hYX``2.2``hi}r•(hk]hl]hm]hn]hq]uhZjzhu]r–h~X2.2r—…r˜}r™(hYUhZj“ubahghìubh~X or higher, the default is rš…r›}rœ(hYX or higher, the default is hZjzubhä)r}rž(hYX ``Simple``hi}rŸ(hk]hl]hm]hn]hq]uhZjzhu]r h~XSimpler¡…r¢}r£(hYUhZjubahghìubh~X unless a r¤…r¥}r¦(hYX unless a hZjzubjp)r§}r¨(hYX:pkg-section:`custom-setup`r©hZjzhehfhgjthi}rª(UreftypeX pkg-sectionjvˆjwX custom-setupU refdomainXcabalr«hn]hm]U refexplicit‰hk]hl]hq]jyjzuhsMJhu]r¬hä)r­}r®(hYj©hi}r¯(hk]hl]r°(jj«Xcabal-pkg-sectionr±ehm]hn]hq]uhZj§hu]r²h~X custom-setupr³…r´}rµ(hYUhZj­ubahghìubaubh~X/ exists, in which case the inferred default is r¶…r·}r¸(hYX/ exists, in which case the inferred default is hZjzubhä)r¹}rº(hYX ``Custom``hi}r»(hk]hl]hm]hn]hq]uhZjzhu]r¼h~XCustomr½…r¾}r¿(hYUhZj¹ubahghìubh~X.…rÀ}rÁ(hYX.hZjzubeubahgh–ubh“)rÂ}rÃ(hYXXFor lower :pkg-field:`cabal-version` values, the default is ``Custom`` unconditionally. hi}rÄ(hk]hl]hm]hn]hq]uhZjrhu]rÅh‚)rÆ}rÇ(hYXWFor lower :pkg-field:`cabal-version` values, the default is ``Custom`` unconditionally.hZjÂhehfhgh†hi}rÈ(hk]hl]hm]hn]hq]uhsMNhu]rÉ(h~X For lower rÊ…rË}rÌ(hYX For lower hZjÆubjp)rÍ}rÎ(hYX:pkg-field:`cabal-version`rÏhZjÆhehfhgjthi}rÐ(UreftypeX pkg-fieldjvˆjwX cabal-versionU refdomainXcabalrÑhn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMNhu]rÒhä)rÓ}rÔ(hYjÏhi}rÕ(hk]hl]rÖ(jjÑXcabal-pkg-fieldr×ehm]hn]hq]uhZjÍhu]rØh~X cabal-versionrÙ…rÚ}rÛ(hYUhZjÓubahghìubaubh~X values, the default is rÜ…rÝ}rÞ(hYX values, the default is hZjÆubhä)rß}rà(hYX ``Custom``hi}rá(hk]hl]hm]hn]hq]uhZjÆhu]râh~XCustomrã…rä}rå(hYUhZjßubahghìubh~X unconditionally.ræ…rç}rè(hYX unconditionally.hZjÆubeubahgh–ubeubaubh‚)ré}rê(hYX\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.hZj1hehfhgh†hi}rë(hk]hl]hm]hn]hq]uhsMQhthhu]rì(h~X)If the build type is anything other than rí…rî}rï(hYX)If the build type is anything other than heNhsNhthhZjéubhä)rð}rñ(hYX ``Custom``hi}rò(hk]hl]hm]hn]hq]uhZjéhu]róh~XCustomrô…rõ}rö(hYUhZjðubahghìubh~X , then the r÷…rø}rù(hYX , then the heNhsNhthhZjéubhä)rú}rû(hYX ``Setup.hs``hi}rü(hk]hl]hm]hn]hq]uhZjéhu]rýh~XSetup.hsrþ…rÿ}r(hYUhZjúubahghìubh~X file r…r}r(hYX file heNhsNhthhZjéubhÄ)r}r(hYX*must*hi}r(hk]hl]hm]hn]hq]uhZjéhu]rh~Xmustr…r }r (hYUhZjubahghÌubh~XV be exactly the standardized content discussed below. This is because in these cases, r …r }r (hYXV be exactly the standardized content discussed below. This is because in these cases, heNhsNhthhZjéubhä)r}r(hYX ``cabal``hi}r(hk]hl]hm]hn]hq]uhZjéhu]rh~Xcabalr…r}r(hYUhZjubahghìubh~X will ignore the r…r}r(hYX will ignore the heNhsNhthhZjéubhä)r}r(hYX ``Setup.hs``hi}r(hk]hl]hm]hn]hq]uhZjéhu]rh~XSetup.hsr…r}r(hYUhZjubahghìubh~XG file completely, whereas other methods of package management, such as r…r }r!(hYXG file completely, whereas other methods of package management, such as heNhsNhthhZjéubhä)r"}r#(hYX``runhaskell Setup.hs [CMD]``hi}r$(hk]hl]hm]hn]hq]uhZjéhu]r%h~Xrunhaskell Setup.hs [CMD]r&…r'}r((hYUhZj"ubahghìubh~X, still rely on the r)…r*}r+(hYX, still rely on the heNhsNhthhZjéubhä)r,}r-(hYX ``Setup.hs``hi}r.(hk]hl]hm]hn]hq]uhZjéhu]r/h~XSetup.hsr0…r1}r2(hYUhZj,ubahghìubh~X file.r3…r4}r5(hYX file.heNhsNhthhZjéubeubh‚)r6}r7(hYX@For build type ``Simple``, the contents of ``Setup.hs`` must be:hZj1hehfhgh†hi}r8(hk]hl]hm]hn]hq]uhsMXhthhu]r9(h~XFor build type r:…r;}r<(hYXFor build type heNhsNhthhZj6ubhä)r=}r>(hYX ``Simple``hi}r?(hk]hl]hm]hn]hq]uhZj6hu]r@h~XSimplerA…rB}rC(hYUhZj=ubahghìubh~X, the contents of rD…rE}rF(hYX, the contents of heNhsNhthhZj6ubhä)rG}rH(hYX ``Setup.hs``hi}rI(hk]hl]hm]hn]hq]uhZj6hu]rJh~XSetup.hsrK…rL}rM(hYUhZjGubahghìubh~X must be:rN…rO}rP(hYX must be:heNhsNhthhZj6ubeubjÑ)rQ}rR(hYX-import Distribution.Simple main = defaultMainhZj1hehfhgjÔhi}rS(j‰jXhaskelljÖj×hn]hm]hk]j}hl]hq]uhsMZhthhu]rTh~X-import Distribution.Simple main = defaultMainrU…rV}rW(hYUhZjQubaubh‚)rX}rY(hYX}For build type ``Configure`` (see the section on `system-dependent parameters`_ below), the contents of ``Setup.hs`` must be:hZj1hehfhgh†hi}rZ(hk]hl]hm]hn]hq]uhsM_hthhu]r[(h~XFor build type r\…r]}r^(hYXFor build type heNhsNhthhZjXubhä)r_}r`(hYX ``Configure``hi}ra(hk]hl]hm]hn]hq]uhZjXhu]rbh~X Configurerc…rd}re(hYUhZj_ubahghìubh~X (see the section on rf…rg}rh(hYX (see the section on heNhsNhthhZjXubjD)ri}rj(hYX`system-dependent parameters`_jGKhZjXhgjHhi}rk(UnameXsystem-dependent parametershn]hm]hk]hl]hq]jJj•uhu]rlh~Xsystem-dependent parametersrm…rn}ro(hYUhZjiubaubh~X below), the contents of rp…rq}rr(hYX below), the contents of heNhsNhthhZjXubhä)rs}rt(hYX ``Setup.hs``hi}ru(hk]hl]hm]hn]hq]uhZjXhu]rvh~XSetup.hsrw…rx}ry(hYUhZjsubahghìubh~X must be:rz…r{}r|(hYX must be:heNhsNhthhZjXubeubjÑ)r}}r~(hYXHimport Distribution.Simple main = defaultMainWithHooks autoconfUserHookshZj1hehfhgjÔhi}r(j‰jXhaskelljÖj×hn]hm]hk]j}hl]hq]uhsMchthhu]r€h~XHimport Distribution.Simple main = defaultMainWithHooks autoconfUserHooksr…r‚}rƒ(hYUhZj}ubaubh‚)r„}r…(hYXrFor build type ``Make`` (see the section on `more complex packages`_ below), the contents of ``Setup.hs`` must be:hZj1hehfhgh†hi}r†(hk]hl]hm]hn]hq]uhsMhhthhu]r‡(h~XFor build type rˆ…r‰}rŠ(hYXFor build type heNhsNhthhZj„ubhä)r‹}rŒ(hYX``Make``hi}r(hk]hl]hm]hn]hq]uhZj„hu]rŽh~XMaker…r}r‘(hYUhZj‹ubahghìubh~X (see the section on r’…r“}r”(hYX (see the section on heNhsNhthhZj„ubjD)r•}r–(hYX`more complex packages`_jGKhZj„hgjHhi}r—(UnameXmore complex packageshn]hm]hk]hl]hq]jJj} uhu]r˜h~Xmore complex packagesr™…rš}r›(hYUhZj•ubaubh~X below), the contents of rœ…r}rž(hYX below), the contents of heNhsNhthhZj„ubhä)rŸ}r (hYX ``Setup.hs``hi}r¡(hk]hl]hm]hn]hq]uhZj„hu]r¢h~XSetup.hsr£…r¤}r¥(hYUhZjŸubahghìubh~X must be:r¦…r§}r¨(hYX must be:heNhsNhthhZj„ubeubjÑ)r©}rª(hYX+import Distribution.Make main = defaultMainhZj1hehfhgjÔhi}r«(j‰jXhaskelljÖj×hn]hm]hk]j}hl]hq]uhsMkhthhu]r¬h~X+import Distribution.Make main = defaultMainr­…r®}r¯(hYUhZj©ubaubh‚)r°}r±(hYXwFor build type ``Custom``, the file ``Setup.hs`` can be customized, and will be used both by ``cabal`` and other tools.hZj1hehfhgh†hi}r²(hk]hl]hm]hn]hq]uhsMphthhu]r³(h~XFor build type r´…rµ}r¶(hYXFor build type heNhsNhthhZj°ubhä)r·}r¸(hYX ``Custom``hi}r¹(hk]hl]hm]hn]hq]uhZj°hu]rºh~XCustomr»…r¼}r½(hYUhZj·ubahghìubh~X , the file r¾…r¿}rÀ(hYX , the file heNhsNhthhZj°ubhä)rÁ}rÂ(hYX ``Setup.hs``hi}rÃ(hk]hl]hm]hn]hq]uhZj°hu]rÄh~XSetup.hsrÅ…rÆ}rÇ(hYUhZjÁubahghìubh~X- can be customized, and will be used both by rÈ…rÉ}rÊ(hYX- can be customized, and will be used both by heNhsNhthhZj°ubhä)rË}rÌ(hYX ``cabal``hi}rÍ(hk]hl]hm]hn]hq]uhZj°hu]rÎh~XcabalrÏ…rÐ}rÑ(hYUhZjËubahghìubh~X and other tools.rÒ…rÓ}rÔ(hYX and other tools.heNhsNhthhZj°ubeubh‚)rÕ}rÖ(hYX;For most packages, the build type ``Simple`` is sufficient.hZj1hehfhgh†hi}r×(hk]hl]hm]hn]hq]uhsMshthhu]rØ(h~X"For most packages, the build type rÙ…rÚ}rÛ(hYX"For most packages, the build type heNhsNhthhZjÕubhä)rÜ}rÝ(hYX ``Simple``hi}rÞ(hk]hl]hm]hn]hq]uhZjÕhu]rßh~XSimplerà…rá}râ(hYUhZjÜubahghìubh~X is sufficient.rã…rä}rå(hYX is sufficient.heNhsNhthhZjÕubeubeubeubjþ)ræ}rç(hYUhZjªhehfhgjhi}rè(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)ré}rê(hYUhZjªhehfhgjhi}rë(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrìj jìuhsNhthhu]rí(j)rî}rï(hYXlicense: identifierhZjéhehfhgjhi}rð(hn]rñXpkg-field-licenseròahm]hk]hl]hq]j‰uhsM}hthhu]ró(jþ)rô}rõ(hYUhZjîhehfhgjhi}rö(hn]hm]hk]hl]hq]Uentries]r÷(jXlicense; package.cabal fieldjòUNtrøauhsM}hthhu]ubj)rù}rú(hYXlicenserûhZjîhehfhgj!hi}rü(jÖj×hn]hm]hk]hl]hq]uhsM}hthhu]rýh~Xlicenserþ…rÿ}r(hYUheNhsNhthhZjùubaubj')r}r(hYj hZjîhehfhgj*hi}r(jÖj×hn]hm]hk]hl]hq]uhsM}hthhu]rh~X: r…r}r(hYUheNhsNhthhZjubaubj¦)r}r (hYX identifierhZjîhehfhgj©hi}r (jÖj×hn]hm]hk]hl]hq]uhsM}hthhu]r h~X identifierr …r }r(hYUheNhsNhthhZjubaubeubj/)r}r(hYUhZjéhehfhgj2hi}r(hk]hl]hm]hn]hq]uhsM}hthhu]r(j5)r}r(hYUhZjhehfhgj8hi}r(hk]hl]hm]hn]hq]uhsNhthhu]rj;)r}r(hYUhi}r(hk]hl]hm]hn]hq]uhZjhu]r(jA)r}r(hYX Default valuehZjhehfhgjEhi}r(hk]hl]hm]hn]hq]uhsKhu]rh~X Default valuer…r }r!(hYUhZjubaubjK)r"}r#(hYUhi}r$(hk]hl]hm]hn]hq]uhZjhu]r%h‚)r&}r'(hYXAllRightsReservedhi}r((hk]hl]hm]hn]hq]uhZj"hu]r)hä)r*}r+(hYX``AllRightsReserved``hZj&hehfhghìhi}r,(hk]hl]hm]hn]hq]uhsNhthhu]r-h~XAllRightsReservedr.…r/}r0(hYUheNhsNhthhZj*ubaubahgh†ubahgjXubehgj>ubaubh‚)r1}r2(hYXÁ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.hZjhehfhgh†hi}r3(hk]hl]hm]hn]hq]uhsMyhthhu]r4(h~XdThe type of license under which this package is distributed. License names are the constants of the r5…r6}r7(hYXdThe type of license under which this package is distributed. License names are the constants of the heNhsNhthhZj1ubjD)r8}r9(hYXW`License <../release/cabal-latest/doc/API/Cabal/Distribution-License.html#t:License>`__hi}r:(UnameXLicensejƒXI../release/cabal-latest/doc/API/Cabal/Distribution-License.html#t:Licensehn]hm]hk]hl]hq]uhZj1hu]r;h~XLicenser<…r=}r>(hYUhZj8ubahgjHubh~X type.r?…r@}rA(hYX type.heNhsNhthhZj1ubeubeubeubjþ)rB}rC(hYUhZjªheNhgjhi}rD(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rE}rF(hYUhZjªheNhgjhi}rG(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrHj jHuhsNhthhu]rI(j)rJ}rK(hYXlicense-file: filenamehZjEhehfhgjhi}rL(hn]rMXpkg-field-license-filerNahm]hk]hl]hq]j‰uhsM~hthhu]rO(jþ)rP}rQ(hYUhZjJhehfhgjhi}rR(hn]hm]hk]hl]hq]Uentries]rS(jX!license-file; package.cabal fieldjNUNtrTauhsM~hthhu]ubj)rU}rV(hYX license-filerWhZjJhehfhgj!hi}rX(jÖj×hn]hm]hk]hl]hq]uhsM~hthhu]rYh~X license-filerZ…r[}r\(hYUheNhsNhthhZjUubaubj')r]}r^(hYj hZjJhehfhgj*hi}r_(jÖj×hn]hm]hk]hl]hq]uhsM~hthhu]r`h~X: ra…rb}rc(hYUheNhsNhthhZj]ubaubj¦)rd}re(hYXfilenamehZjJhehfhgj©hi}rf(jÖj×hn]hm]hk]hl]hq]uhsM~hthhu]rgh~Xfilenamerh…ri}rj(hYUheNhsNhthhZjdubaubeubj/)rk}rl(hYUhZjEhehfhgj2hi}rm(hk]hl]hm]hn]hq]uhsM~hthhu]ubeubjþ)rn}ro(hYUhZjªhehfhgjhi}rp(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rq}rr(hYUhZjªhehfhgjhi}rs(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrtj jtuhsNhthhu]ru(j)rv}rw(hYXlicense-files: filename listhZjqhehfhgjhi}rx(hn]ryXpkg-field-license-filesrzahm]hk]hl]hq]j‰uhsM‡hthhu]r{(jþ)r|}r}(hYUhZjvhehfhgjhi}r~(hn]hm]hk]hl]hq]Uentries]r(jX"license-files; package.cabal fieldjzUNtr€auhsM‡hthhu]ubj)r}r‚(hYX license-filesrƒhZjvhehfhgj!hi}r„(jÖj×hn]hm]hk]hl]hq]uhsM‡hthhu]r…h~X license-filesr†…r‡}rˆ(hYUheNhsNhthhZjubaubj')r‰}rŠ(hYj hZjvhehfhgj*hi}r‹(jÖj×hn]hm]hk]hl]hq]uhsM‡hthhu]rŒh~X: r…rŽ}r(hYUheNhsNhthhZj‰ubaubj¦)r}r‘(hYX filename listhZjvhehfhgj©hi}r’(jÖj×hn]hm]hk]hl]hq]uhsM‡hthhu]r“h~X filename listr”…r•}r–(hYUheNhsNhthhZjubaubeubj/)r—}r˜(hYUhZjqhehfhgj2hi}r™(hk]hl]hm]hn]hq]uhsM‡hthhu]rš(h‚)r›}rœ(hYXˆThe name of a file(s) containing the precise copyright license for this package. The license file(s) will be installed with the package.rhZj—hehfhgh†hi}rž(hk]hl]hm]hn]hq]uhsMhthhu]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¢(hYjheNhsNhthhZj›ubaubh‚)r£}r¤(hYX”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.hZj—hehfhgh†hi}r¥(hk]hl]hm]hn]hq]uhsM…hthhu]r¦(h~X0If you have multiple license files then use the r§…r¨}r©(hYX0If you have multiple license files then use the heNhsNhthhZj£ubjp)rª}r«(hYX:pkg-field:`license-files`r¬hZj£hehfhgjthi}r­(UreftypeX pkg-fieldjvˆjwX license-filesU refdomainXcabalr®hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsM…hu]r¯hä)r°}r±(hYj¬hi}r²(hk]hl]r³(jj®Xcabal-pkg-fieldr´ehm]hn]hq]uhZjªhu]rµh~X license-filesr¶…r·}r¸(hYUhZj°ubahghìubaubh~X* field instead of (or in addition to) the r¹…rº}r»(hYX* field instead of (or in addition to) the heNhsNhthhZj£ubjp)r¼}r½(hYX:pkg-field:`license-file`r¾hZj£hehfhgjthi}r¿(UreftypeX pkg-fieldjvˆjwX license-fileU refdomainXcabalrÀhn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsM…hu]rÁhä)rÂ}rÃ(hYj¾hi}rÄ(hk]hl]rÅ(jjÀXcabal-pkg-fieldrÆehm]hn]hq]uhZj¼hu]rÇh~X license-filerÈ…rÉ}rÊ(hYUhZjÂubahghìubaubh~X field.rË…rÌ}rÍ(hYX field.heNhsNhthhZj£ubeubeubeubjþ)rÎ}rÏ(hYUhZjªhehfhgjhi}rÐ(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rÑ}rÒ(hYUhZjªhehfhgjhi}rÓ(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrÔj jÔuhsNhthhu]rÕ(j)rÖ}r×(hYXcopyright: freeformhZjÑhehfhgjhi}rØ(hn]rÙXpkg-field-copyrightrÚahm]hk]hl]hq]j‰uhsMhthhu]rÛ(jþ)rÜ}rÝ(hYUhZjÖhehfhgjhi}rÞ(hn]hm]hk]hl]hq]Uentries]rß(jXcopyright; package.cabal fieldjÚUNtràauhsMhthhu]ubj)rá}râ(hYX copyrightrãhZjÖhehfhgj!hi}rä(jÖj×hn]hm]hk]hl]hq]uhsMhthhu]råh~X copyrightræ…rç}rè(hYUheNhsNhthhZjáubaubj')ré}rê(hYj hZjÖhehfhgj*hi}rë(jÖj×hn]hm]hk]hl]hq]uhsMhthhu]rìh~X: rí…rî}rï(hYUheNhsNhthhZjéubaubj¦)rð}rñ(hYXfreeformhZjÖhehfhgj©hi}rò(jÖj×hn]hm]hk]hl]hq]uhsMhthhu]róh~Xfreeformrô…rõ}rö(hYUheNhsNhthhZjðubaubeubj/)r÷}rø(hYUhZjÑhehfhgj2hi}rù(hk]hl]hm]hn]hq]uhsMhthhu]rú(h‚)rû}rü(hYX¢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::hZj÷hehfhgh†hi}rý(hk]hl]hm]hn]hq]uhsMŠhthhu]rþh~X¡The content of a copyright notice, typically the name of the holder of the copyright on the package and the year(s) from which copyright is claimed. For example:rÿ…r}r(hYX¡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:heNhsNhthhZjûubaubjÑ)r}r(hYX#copyright: (c) 2006-2007 Joe BloggshZj÷hehfhgjÔhi}r(jÖj×hn]hm]hk]hl]hq]uhsMŽhthhu]rh~X#copyright: (c) 2006-2007 Joe Bloggsr…r}r(hYUhZjubaubeubeubjþ)r }r (hYUhZjªhehfhgjhi}r (hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r }r (hYUhZjªhehfhgjhi}r(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrj juhsNhthhu]r(j)r}r(hYXauthor: freeformhZj hehfhgjhi}r(hn]rXpkg-field-authorrahm]hk]hl]hq]j‰uhsM–hthhu]r(jþ)r}r(hYUhZjhehfhgjhi}r(hn]hm]hk]hl]hq]Uentries]r(jXauthor; package.cabal fieldjUNtrauhsM–hthhu]ubj)r}r(hYXauthorrhZjhehfhgj!hi}r(jÖj×hn]hm]hk]hl]hq]uhsM–hthhu]r h~Xauthorr!…r"}r#(hYUheNhsNhthhZjubaubj')r$}r%(hYj hZjhehfhgj*hi}r&(jÖj×hn]hm]hk]hl]hq]uhsM–hthhu]r'h~X: r(…r)}r*(hYUheNhsNhthhZj$ubaubj¦)r+}r,(hYXfreeformhZjhehfhgj©hi}r-(jÖj×hn]hm]hk]hl]hq]uhsM–hthhu]r.h~Xfreeformr/…r0}r1(hYUheNhsNhthhZj+ubaubeubj/)r2}r3(hYUhZj hehfhgj2hi}r4(hk]hl]hm]hn]hq]uhsM–hthhu]r5(h‚)r6}r7(hYX#The original author of the package.r8hZj2hehfhgh†hi}r9(hk]hl]hm]hn]hq]uhsM’hthhu]r:h~X#The original author of the package.r;…r<}r=(hYj8heNhsNhthhZj6ubaubh‚)r>}r?(hYXERemember that ``.cabal`` files are Unicode, using the UTF-8 encoding.hZj2hehfhgh†hi}r@(hk]hl]hm]hn]hq]uhsM”hthhu]rA(h~XRemember that rB…rC}rD(hYXRemember that heNhsNhthhZj>ubhä)rE}rF(hYX ``.cabal``hi}rG(hk]hl]hm]hn]hq]uhZj>hu]rHh~X.cabalrI…rJ}rK(hYUhZjEubahghìubh~X- files are Unicode, using the UTF-8 encoding.rL…rM}rN(hYX- files are Unicode, using the UTF-8 encoding.heNhsNhthhZj>ubeubeubeubjþ)rO}rP(hYUhZjªhehfhgjhi}rQ(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rR}rS(hYUhZjªhehfhgjhi}rT(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrUj jUuhsNhthhu]rV(j)rW}rX(hYXmaintainer: addresshZjRhehfhgjhi}rY(hn]rZXpkg-field-maintainerr[ahm]hk]hl]hq]j‰uhsMœhthhu]r\(jþ)r]}r^(hYUhZjWhehfhgjhi}r_(hn]hm]hk]hl]hq]Uentries]r`(jXmaintainer; package.cabal fieldj[UNtraauhsMœhthhu]ubj)rb}rc(hYX maintainerrdhZjWhehfhgj!hi}re(jÖj×hn]hm]hk]hl]hq]uhsMœhthhu]rfh~X maintainerrg…rh}ri(hYUheNhsNhthhZjbubaubj')rj}rk(hYj hZjWhehfhgj*hi}rl(jÖj×hn]hm]hk]hl]hq]uhsMœhthhu]rmh~X: rn…ro}rp(hYUheNhsNhthhZjjubaubj¦)rq}rr(hYXaddresshZjWhehfhgj©hi}rs(jÖj×hn]hm]hk]hl]hq]uhsMœhthhu]rth~Xaddressru…rv}rw(hYUheNhsNhthhZjqubaubeubj/)rx}ry(hYUhZjRhehfhgj2hi}rz(hk]hl]hm]hn]hq]uhsMœhthhu]r{h‚)r|}r}(hYX•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~hZjxhehfhgh†hi}r(hk]hl]hm]hn]hq]uhsM™hthhu]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ƒ(hYj~heNhsNhthhZj|ubaubaubeubjþ)r„}r…(hYUhZjªhehfhgjhi}r†(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r‡}rˆ(hYUhZjªhehfhgjhi}r‰(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrŠj jŠuhsNhthhu]r‹(j)rŒ}r(hYXstability: freeformhZj‡hehfhgjhi}rŽ(hn]rXpkg-field-stabilityrahm]hk]hl]hq]j‰uhsM¡hthhu]r‘(jþ)r’}r“(hYUhZjŒhehfhgjhi}r”(hn]hm]hk]hl]hq]Uentries]r•(jXstability; package.cabal fieldjUNtr–auhsM¡hthhu]ubj)r—}r˜(hYX stabilityr™hZjŒhehfhgj!hi}rš(jÖj×hn]hm]hk]hl]hq]uhsM¡hthhu]r›h~X stabilityrœ…r}rž(hYUheNhsNhthhZj—ubaubj')rŸ}r (hYj hZjŒhehfhgj*hi}r¡(jÖj×hn]hm]hk]hl]hq]uhsM¡hthhu]r¢h~X: r£…r¤}r¥(hYUheNhsNhthhZjŸubaubj¦)r¦}r§(hYXfreeformhZjŒhehfhgj©hi}r¨(jÖj×hn]hm]hk]hl]hq]uhsM¡hthhu]r©h~Xfreeformrª…r«}r¬(hYUheNhsNhthhZj¦ubaubeubj/)r­}r®(hYUhZj‡hehfhgj2hi}r¯(hk]hl]hm]hn]hq]uhsM¡hthhu]r°h‚)r±}r²(hYXbThe stability level of the package, e.g. ``alpha``, ``experimental``, ``provisional``, ``stable``.hZj­hehfhgh†hi}r³(hk]hl]hm]hn]hq]uhsMŸhthhu]r´(h~X)The stability level of the package, e.g. rµ…r¶}r·(hYX)The stability level of the package, e.g. heNhsNhthhZj±ubhä)r¸}r¹(hYX ``alpha``hi}rº(hk]hl]hm]hn]hq]uhZj±hu]r»h~Xalphar¼…r½}r¾(hYUhZj¸ubahghìubh~X, r¿…rÀ}rÁ(hYX, heNhsNhthhZj±ubhä)rÂ}rÃ(hYX``experimental``hi}rÄ(hk]hl]hm]hn]hq]uhZj±hu]rÅh~X experimentalrÆ…rÇ}rÈ(hYUhZjÂubahghìubh~X, rÉ…rÊ}rË(hYX, rÌheNhsNhthhZj±ubhä)rÍ}rÎ(hYX``provisional``hi}rÏ(hk]hl]hm]hn]hq]uhZj±hu]rÐh~X provisionalrÑ…rÒ}rÓ(hYUhZjÍubahghìubh~X, rÔ…rÕ}rÖ(hYjÌhZj±ubhä)r×}rØ(hYX ``stable``hi}rÙ(hk]hl]hm]hn]hq]uhZj±hu]rÚh~XstablerÛ…rÜ}rÝ(hYUhZj×ubahghìubh~X.…rÞ}rß(hYX.heNhsNhthhZj±ubeubaubeubjþ)rà}rá(hYUhZjªhehfhgjhi}râ(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rã}rä(hYUhZjªhehfhgjhi}rå(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldræj jæuhsNhthhu]rç(j)rè}ré(hYX homepage: URLhZjãhehfhgjhi}rê(hn]rëXpkg-field-homepagerìahm]hk]hl]hq]j‰uhsM¥hthhu]rí(jþ)rî}rï(hYUhZjèhehfhgjhi}rð(hn]hm]hk]hl]hq]Uentries]rñ(jXhomepage; package.cabal fieldjìUNtròauhsM¥hthhu]ubj)ró}rô(hYXhomepagerõhZjèhehfhgj!hi}rö(jÖj×hn]hm]hk]hl]hq]uhsM¥hthhu]r÷h~Xhomepagerø…rù}rú(hYUheNhsNhthhZjóubaubj')rû}rü(hYj hZjèhehfhgj*hi}rý(jÖj×hn]hm]hk]hl]hq]uhsM¥hthhu]rþh~X: rÿ…r}r(hYUheNhsNhthhZjûubaubj¦)r}r(hYXURLhZjèhehfhgj©hi}r(jÖj×hn]hm]hk]hl]hq]uhsM¥hthhu]rh~XURLr…r}r(hYUheNhsNhthhZjubaubeubj/)r }r (hYUhZjãhehfhgj2hi}r (hk]hl]hm]hn]hq]uhsM¥hthhu]r h‚)r }r(hYXThe package homepage.rhZj hehfhgh†hi}r(hk]hl]hm]hn]hq]uhsM¤hthhu]rh~XThe package homepage.r…r}r(hYjheNhsNhthhZj ubaubaubeubjþ)r}r(hYUhZjªhehfhgjhi}r(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r}r(hYUhZjªhehfhgjhi}r(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrj juhsNhthhu]r(j)r}r(hYXbug-reports: URLhZjhehfhgjhi}r(hn]r Xpkg-field-bug-reportsr!ahm]hk]hl]hq]j‰uhsMµhthhu]r"(jþ)r#}r$(hYUhZjhehfhgjhi}r%(hn]hm]hk]hl]hq]Uentries]r&(jX bug-reports; package.cabal fieldj!UNtr'auhsMµhthhu]ubj)r(}r)(hYX bug-reportsr*hZjhehfhgj!hi}r+(jÖj×hn]hm]hk]hl]hq]uhsMµhthhu]r,h~X bug-reportsr-…r.}r/(hYUheNhsNhthhZj(ubaubj')r0}r1(hYj hZjhehfhgj*hi}r2(jÖj×hn]hm]hk]hl]hq]uhsMµhthhu]r3h~X: r4…r5}r6(hYUheNhsNhthhZj0ubaubj¦)r7}r8(hYXURLhZjhehfhgj©hi}r9(jÖj×hn]hm]hk]hl]hq]uhsMµhthhu]r:h~XURLr;…r<}r=(hYUheNhsNhthhZj7ubaubeubj/)r>}r?(hYUhZjhehfhgj2hi}r@(hk]hl]hm]hn]hq]uhsMµhthhu]rA(h‚)rB}rC(hYXMThe URL where users should direct bug reports. This would normally be either:rDhZj>hehfhgh†hi}rE(hk]hl]hm]hn]hq]uhsM¨hthhu]rFh~XMThe URL where users should direct bug reports. This would normally be either:rG…rH}rI(hYjDheNhsNhthhZjBubaubhŒ)rJ}rK(hYUhZj>hehfhghhi}rL(h‘X-hn]hm]hk]hl]hq]uhsM«hthhu]rM(h“)rN}rO(hYX8A ``mailto:`` URL, e.g. for a person or a mailing list. hZjJhehfhgh–hi}rP(hk]hl]hm]hn]hq]uhsNhthhu]rQh‚)rR}rS(hYX7A ``mailto:`` URL, e.g. for a person or a mailing list.hZjNhehfhgh†hi}rT(hk]hl]hm]hn]hq]uhsM«hu]rU(h~XA rV…rW}rX(hYXA hZjRubhä)rY}rZ(hYX ``mailto:``hi}r[(hk]hl]hm]hn]hq]uhZjRhu]r\h~Xmailto:r]…r^}r_(hYUhZjYubahghìubh~X* URL, e.g. for a person or a mailing list.r`…ra}rb(hYX* URL, e.g. for a person or a mailing list.hZjRubeubaubh“)rc}rd(hYXDAn ``http:`` (or ``https:``) URL for an online bug tracking system. hZjJhehfhgh–hi}re(hk]hl]hm]hn]hq]uhsNhthhu]rfh‚)rg}rh(hYXCAn ``http:`` (or ``https:``) URL for an online bug tracking system.hZjchehfhgh†hi}ri(hk]hl]hm]hn]hq]uhsM­hu]rj(h~XAn rk…rl}rm(hYXAn hZjgubhä)rn}ro(hYX ``http:``hi}rp(hk]hl]hm]hn]hq]uhZjghu]rqh~Xhttp:rr…rs}rt(hYUhZjnubahghìubh~X (or ru…rv}rw(hYX (or hZjgubhä)rx}ry(hYX ``https:``hi}rz(hk]hl]hm]hn]hq]uhZjghu]r{h~Xhttps:r|…r}}r~(hYUhZjxubahghìubh~X() URL for an online bug tracking system.r…r€}r(hYX() URL for an online bug tracking system.hZjgubeubaubeubh‚)r‚}rƒ(hYX=For example Cabal itself uses a web-based bug tracking systemr„hZj>hehfhgh†hi}r…(hk]hl]hm]hn]hq]uhsM°hthhu]r†h~X=For example Cabal itself uses a web-based bug tracking systemr‡…rˆ}r‰(hYj„heNhsNhthhZj‚ubaubjÑ)rŠ}r‹(hYX4bug-reports: https://github.com/haskell/cabal/issueshZj>hehfhgjÔhi}rŒ(jÖj×hn]hm]hk]hl]hq]uhsM´hthhu]rh~X4bug-reports: https://github.com/haskell/cabal/issuesrŽ…r}r(hYUhZjŠubaubeubeubjþ)r‘}r’(hYUhZjªhehfhgjhi}r“(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r”}r•(hYUhZjªhehfhgjhi}r–(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr—j j—uhsNhthhu]r˜(j)r™}rš(hYXpackage-url: URLhZj”hehfhgjhi}r›(hn]rœXpkg-field-package-urlrahm]hk]hl]hq]j‰uhsMºhthhu]rž(jþ)rŸ}r (hYUhZj™hehfhgjhi}r¡(hn]hm]hk]hl]hq]Uentries]r¢(jX package-url; package.cabal fieldjUNtr£auhsMºhthhu]ubj)r¤}r¥(hYX package-urlr¦hZj™hehfhgj!hi}r§(jÖj×hn]hm]hk]hl]hq]uhsMºhthhu]r¨h~X package-urlr©…rª}r«(hYUheNhsNhthhZj¤ubaubj')r¬}r­(hYj hZj™hehfhgj*hi}r®(jÖj×hn]hm]hk]hl]hq]uhsMºhthhu]r¯h~X: r°…r±}r²(hYUheNhsNhthhZj¬ubaubj¦)r³}r´(hYXURLhZj™hehfhgj©hi}rµ(jÖj×hn]hm]hk]hl]hq]uhsMºhthhu]r¶h~XURLr·…r¸}r¹(hYUheNhsNhthhZj³ubaubeubj/)rº}r»(hYUhZj”hehfhgj2hi}r¼(hk]hl]hm]hn]hq]uhsMºhthhu]r½h‚)r¾}r¿(hYX\The location of a source bundle for the package. The distribution should be a Cabal package.rÀhZjºhehfhgh†hi}rÁ(hk]hl]hm]hn]hq]uhsM¸hthhu]rÂh~X\The location of a source bundle for the package. The distribution should be a Cabal package.rÃ…rÄ}rÅ(hYjÀheNhsNhthhZj¾ubaubaubeubjþ)rÆ}rÇ(hYUhZjªhehfhgjhi}rÈ(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rÉ}rÊ(hYUhZjªhehfhgjhi}rË(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrÌj jÌuhsNhthhu]rÍ(j)rÎ}rÏ(hYXsynopsis: freeformhZjÉhehfhgjhi}rÐ(hn]rÑXpkg-field-synopsisrÒahm]hk]hl]hq]j‰uhsMÁhthhu]rÓ(jþ)rÔ}rÕ(hYUhZjÎhehfhgjhi}rÖ(hn]hm]hk]hl]hq]Uentries]r×(jXsynopsis; package.cabal fieldjÒUNtrØauhsMÁhthhu]ubj)rÙ}rÚ(hYXsynopsisrÛhZjÎhehfhgj!hi}rÜ(jÖj×hn]hm]hk]hl]hq]uhsMÁhthhu]rÝh~XsynopsisrÞ…rß}rà(hYUheNhsNhthhZjÙubaubj')rá}râ(hYj hZjÎhehfhgj*hi}rã(jÖj×hn]hm]hk]hl]hq]uhsMÁhthhu]räh~X: rå…ræ}rç(hYUheNhsNhthhZjáubaubj¦)rè}ré(hYXfreeformhZjÎhehfhgj©hi}rê(jÖj×hn]hm]hk]hl]hq]uhsMÁhthhu]rëh~Xfreeformrì…rí}rî(hYUheNhsNhthhZjèubaubeubj/)rï}rð(hYUhZjÉhehfhgj2hi}rñ(hk]hl]hm]hn]hq]uhsMÁhthhu]ròh‚)ró}rô(hYXë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õhZjïhehfhgh†hi}rö(hk]hl]hm]hn]hq]uhsM½hthhu]r÷h~XíA very short description of the package, for use in a table of packages. This is your headline, so keep it short (one line) but as informative as possible. Save space by not including the package name or saying it’s written in Haskell.rø…rù}rú(hYjõheNhsNhthhZjóubaubaubeubjþ)rû}rü(hYUhZjªhehfhgjhi}rý(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rþ}rÿ(hYUhZjªhehfhgjhi}r(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrj juhsNhthhu]r(j)r}r(hYXdescription: freeformhZjþhehfhgjhi}r(hn]rXpkg-field-descriptionrahm]hk]hl]hq]j‰uhsMËhthhu]r(jþ)r }r (hYUhZjhehfhgjhi}r (hn]hm]hk]hl]hq]Uentries]r (jX description; package.cabal fieldjUNtr auhsMËhthhu]ubj)r}r(hYX descriptionrhZjhehfhgj!hi}r(jÖj×hn]hm]hk]hl]hq]uhsMËhthhu]rh~X descriptionr…r}r(hYUheNhsNhthhZjubaubj')r}r(hYj hZjhehfhgj*hi}r(jÖj×hn]hm]hk]hl]hq]uhsMËhthhu]rh~X: r…r}r(hYUheNhsNhthhZjubaubj¦)r}r(hYXfreeformhZjhehfhgj©hi}r(jÖj×hn]hm]hk]hl]hq]uhsMËhthhu]r h~Xfreeformr!…r"}r#(hYUheNhsNhthhZjubaubeubj/)r$}r%(hYUhZjþhehfhgj2hi}r&(hk]hl]hm]hn]hq]uhsMËhthhu]r'(h‚)r(}r)(hYX“Description of the package. This may be several paragraphs, and should be aimed at a Haskell programmer who has never heard of your package before.r*hZj$hehfhgh†hi}r+(hk]hl]hm]hn]hq]uhsMÄhthhu]r,h~X“Description of the package. This may be several paragraphs, and should be aimed at a Haskell programmer who has never heard of your package before.r-…r.}r/(hYj*heNhsNhthhZj(ubaubh‚)r0}r1(hYXš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.hZj$hehfhgh†hi}r2(hk]hl]hm]hn]hq]uhsMÈhthhu]r3(h~X=For library packages, this field is used as prologue text by r4…r5}r6(hYX=For library packages, this field is used as prologue text by heNhsNhthhZj0ubjp)r7}r8(hYX:ref:`setup-haddock`r9hZj0hehfhgjthi}r:(UreftypeXrefjvˆjwX setup-haddockU refdomainXstdr;hn]hm]U refexplicit‰hk]hl]hq]jyjzuhsMÈhu]r<j|)r=}r>(hYj9hi}r?(hk]hl]r@(jj;Xstd-refrAehm]hn]hq]uhZj7hu]rBh~X setup-haddockrC…rD}rE(hYUhZj=ubahgj‡ubaubh~X) and thus may contain the same markup as rF…rG}rH(hYX) and thus may contain the same markup as heNhsNhthhZj0ubjD)rI}rJ(hYXHaddock_jGKhZj0hgjHhi}rK(UnameXHaddockjƒjS hn]hm]hk]hl]hq]uhu]rLh~XHaddockrM…rN}rO(hYUhZjIubaubh~X documentation comments.rP…rQ}rR(hYX documentation comments.heNhsNhthhZj0ubeubeubeubjþ)rS}rT(hYUhZjªhehfhgjhi}rU(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rV}rW(hYUhZjªhehfhgjhi}rX(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrYj jYuhsNhthhu]rZ(j)r[}r\(hYXcategory: freeformhZjVhehfhgjhi}r](hn]r^Xpkg-field-categoryr_ahm]hk]hl]hq]j‰uhsMÒhthhu]r`(jþ)ra}rb(hYUhZj[hehfhgjhi}rc(hn]hm]hk]hl]hq]Uentries]rd(jXcategory; package.cabal fieldj_UNtreauhsMÒhthhu]ubj)rf}rg(hYXcategoryrhhZj[hehfhgj!hi}ri(jÖj×hn]hm]hk]hl]hq]uhsMÒhthhu]rjh~Xcategoryrk…rl}rm(hYUheNhsNhthhZjfubaubj')rn}ro(hYj hZj[hehfhgj*hi}rp(jÖj×hn]hm]hk]hl]hq]uhsMÒhthhu]rqh~X: rr…rs}rt(hYUheNhsNhthhZjnubaubj¦)ru}rv(hYXfreeformhZj[hehfhgj©hi}rw(jÖj×hn]hm]hk]hl]hq]uhsMÒhthhu]rxh~Xfreeformry…rz}r{(hYUheNhsNhthhZjuubaubeubj/)r|}r}(hYUhZjVhehfhgj2hi}r~(hk]hl]hm]hn]hq]uhsMÒhthhu]rh‚)r€}r(hYX¹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.hZj|hehfhgh†hi}r‚(hk]hl]hm]hn]hq]uhsMÎhthhu]rƒ(h~XBA classification category for future use by the package catalogue r„…r…}r†(hYXBA classification category for future use by the package catalogue heNhsNhthhZj€ubjD)r‡}rˆ(hYXHackage_jGKhZj€hgjHhi}r‰(UnameXHackagejƒjhn]hm]hk]hl]hq]uhu]rŠh~XHackager‹…rŒ}r(hYUhZj‡ubaubh~Xo. These categories have not yet been specified, but the upper levels of the module hierarchy make a good start.rŽ…r}r(hYXo. These categories have not yet been specified, but the upper levels of the module hierarchy make a good start.heNhsNhthhZj€ubeubaubeubjþ)r‘}r’(hYUhZjªhehfhgjhi}r“(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r”}r•(hYUhZjªhehfhgjhi}r–(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr—j j—uhsNhthhu]r˜(j)r™}rš(hYXtested-with: compiler listhZj”hehfhgjhi}r›(hn]rœXpkg-field-tested-withrahm]hk]hl]hq]j‰uhsM×hthhu]rž(jþ)rŸ}r (hYUhZj™hehfhgjhi}r¡(hn]hm]hk]hl]hq]Uentries]r¢(jX tested-with; package.cabal fieldjUNtr£auhsM×hthhu]ubj)r¤}r¥(hYX tested-withr¦hZj™hehfhgj!hi}r§(jÖj×hn]hm]hk]hl]hq]uhsM×hthhu]r¨h~X tested-withr©…rª}r«(hYUheNhsNhthhZj¤ubaubj')r¬}r­(hYj hZj™hehfhgj*hi}r®(jÖj×hn]hm]hk]hl]hq]uhsM×hthhu]r¯h~X: r°…r±}r²(hYUheNhsNhthhZj¬ubaubj¦)r³}r´(hYX compiler listhZj™hehfhgj©hi}rµ(jÖj×hn]hm]hk]hl]hq]uhsM×hthhu]r¶h~X compiler listr·…r¸}r¹(hYUheNhsNhthhZj³ubaubeubj/)rº}r»(hYUhZj”hehfhgj2hi}r¼(hk]hl]hm]hn]hq]uhsM×hthhu]r½h‚)r¾}r¿(hYX_A list of compilers and versions against which the package has been tested (or at least built).rÀhZjºhehfhgh†hi}rÁ(hk]hl]hm]hn]hq]uhsMÕhthhu]rÂh~X_A list of compilers and versions against which the package has been tested (or at least built).rÃ…rÄ}rÅ(hYjÀheNhsNhthhZj¾ubaubaubeubjþ)rÆ}rÇ(hYUhZjªhehfhgjhi}rÈ(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rÉ}rÊ(hYUhZjªhehfhgjhi}rË(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrÌj jÌuhsNhthhu]rÍ(j)rÎ}rÏ(hYXdata-files: filename listhZjÉhehfhgjhi}rÐ(hn]rÑXpkg-field-data-filesrÒahm]hk]hl]hq]j‰uhsM hthhu]rÓ(jþ)rÔ}rÕ(hYUhZjÎhehfhgjhi}rÖ(hn]hm]hk]hl]hq]Uentries]r×(jXdata-files; package.cabal fieldjÒUNtrØauhsM hthhu]ubj)rÙ}rÚ(hYX data-filesrÛhZjÎhehfhgj!hi}rÜ(jÖj×hn]hm]hk]hl]hq]uhsM hthhu]rÝh~X data-filesrÞ…rß}rà(hYUheNhsNhthhZjÙubaubj')rá}râ(hYj hZjÎhehfhgj*hi}rã(jÖj×hn]hm]hk]hl]hq]uhsM hthhu]räh~X: rå…ræ}rç(hYUheNhsNhthhZjáubaubj¦)rè}ré(hYX filename listhZjÎhehfhgj©hi}rê(jÖj×hn]hm]hk]hl]hq]uhsM hthhu]rëh~X filename listrì…rí}rî(hYUheNhsNhthhZjèubaubeubj/)rï}rð(hYUhZjÉhehfhgj2hi}rñ(hk]hl]hm]hn]hq]uhsM hthhu]rò(h‚)ró}rô(hYXA 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>`_.hZjïhehfhgh†hi}rõ(hk]hl]hm]hn]hq]uhsMÚhthhu]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ù(hYXÉ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 heNhsNhthhZjóubjD)rú}rû(hYXI`find these files at run-time <#accessing-data-files-from-package-code>`_hi}rü(UnameXfind these files at run-timejƒX'#accessing-data-files-from-package-coderýhn]hm]hk]hl]hq]uhZjóhu]rþh~Xfind these files at run-timerÿ…r}r(hYUhZjúubahgjHubj¥)r}r(hYX* <#accessing-data-files-from-package-code>h^KhZjóhgj¨hi}r(Urefurijýhn]rUfind-these-files-at-run-timerahm]hk]hl]hq]rhPauhu]ubh~X.…r}r (hYX.heNhsNhthhZjóubeubh‚)r }r (hYX A limited form of ``*`` wildcards in file names, for example ``data-files: images/*.png`` matches all the ``.png`` files in the ``images`` directory. ``data-files: audio/**/*.mp3`` matches all the ``.mp3`` files in the ``audio`` directory, including subdirectories.hZjïhehfhgh†hi}r (hk]hl]hm]hn]hq]uhsMßhthhu]r (h~XA limited form of r…r}r(hYXA limited form of heNhsNhthhZj ubhä)r}r(hYX``*``hi}r(hk]hl]hm]hn]hq]uhZj hu]rh~X*…r}r(hYUhZjubahghìubh~X& wildcards in file names, for example r…r}r(hYX& wildcards in file names, for example heNhsNhthhZj ubhä)r}r(hYX``data-files: images/*.png``hi}r(hk]hl]hm]hn]hq]uhZj hu]rh~Xdata-files: images/*.pngr…r}r (hYUhZjubahghìubh~X matches all the r!…r"}r#(hYX matches all the heNhsNhthhZj ubhä)r$}r%(hYX``.png``hi}r&(hk]hl]hm]hn]hq]uhZj hu]r'h~X.pngr(…r)}r*(hYUhZj$ubahghìubh~X files in the r+…r,}r-(hYX files in the heNhsNhthhZj ubhä)r.}r/(hYX ``images``hi}r0(hk]hl]hm]hn]hq]uhZj hu]r1h~Ximagesr2…r3}r4(hYUhZj.ubahghìubh~X directory. r5…r6}r7(hYX directory. heNhsNhthhZj ubhä)r8}r9(hYX``data-files: audio/**/*.mp3``hi}r:(hk]hl]hm]hn]hq]uhZj hu]r;h~Xdata-files: audio/**/*.mp3r<…r=}r>(hYUhZj8ubahghìubh~X matches all the r?…r@}rA(hYX matches all the heNhsNhthhZj ubhä)rB}rC(hYX``.mp3``hi}rD(hk]hl]hm]hn]hq]uhZj hu]rEh~X.mp3rF…rG}rH(hYUhZjBubahghìubh~X files in the rI…rJ}rK(hYX files in the heNhsNhthhZj ubhä)rL}rM(hYX ``audio``hi}rN(hk]hl]hm]hn]hq]uhZj hu]rOh~XaudiorP…rQ}rR(hYUhZjLubahghìubh~X% directory, including subdirectories.rS…rT}rU(hYX% directory, including subdirectories.heNhsNhthhZj ubeubh‚)rV}rW(hYX4The specific limitations of this wildcard syntax arerXhZjïhehfhgh†hi}rY(hk]hl]hm]hn]hq]uhsMåhthhu]rZh~X4The specific limitations of this wildcard syntax arer[…r\}r](hYjXheNhsNhthhZjVubaubhŒ)r^}r_(hYUhZjïhehfhghhi}r`(h‘X-hn]hm]hk]hl]hq]uhsMçhthhu]ra(h“)rb}rc(hYX/``*`` wildcards are only allowed in place of the file name, not in the directory name or file extension. It must replace the whole file name (e.g., ``*.html`` is allowed, but ``chapter-*.html`` is not). If a wildcard is used, it must be used with an extension, so ``data-files: data/*`` is not allowed. hZj^hehfhgh–hi}rd(hk]hl]hm]hn]hq]uhsNhthhu]reh‚)rf}rg(hYX.``*`` wildcards are only allowed in place of the file name, not in the directory name or file extension. It must replace the whole file name (e.g., ``*.html`` is allowed, but ``chapter-*.html`` is not). If a wildcard is used, it must be used with an extension, so ``data-files: data/*`` is not allowed.hZjbhehfhgh†hi}rh(hk]hl]hm]hn]hq]uhsMçhu]ri(hä)rj}rk(hYX``*``hi}rl(hk]hl]hm]hn]hq]uhZjfhu]rmh~X*…rn}ro(hYUhZjjubahghìubh~X wildcards are only allowed in place of the file name, not in the directory name or file extension. It must replace the whole file name (e.g., rp…rq}rr(hYX wildcards are only allowed in place of the file name, not in the directory name or file extension. It must replace the whole file name (e.g., hZjfubhä)rs}rt(hYX ``*.html``hi}ru(hk]hl]hm]hn]hq]uhZjfhu]rvh~X*.htmlrw…rx}ry(hYUhZjsubahghìubh~X is allowed, but rz…r{}r|(hYX is allowed, but hZjfubhä)r}}r~(hYX``chapter-*.html``hi}r(hk]hl]hm]hn]hq]uhZjfhu]r€h~Xchapter-*.htmlr…r‚}rƒ(hYUhZj}ubahghìubh~XG is not). If a wildcard is used, it must be used with an extension, so r„…r…}r†(hYXG is not). If a wildcard is used, it must be used with an extension, so hZjfubhä)r‡}rˆ(hYX``data-files: data/*``hi}r‰(hk]hl]hm]hn]hq]uhZjfhu]rŠh~Xdata-files: data/*r‹…rŒ}r(hYUhZj‡ubahghìubh~X is not allowed.rŽ…r}r(hYX is not allowed.hZjfubeubaubh“)r‘}r’(hYXPrior to Cabal 2.4, when matching a wildcard plus extension, a file's full extension must match exactly, so ``*.gz`` matches ``foo.gz`` but not ``foo.tar.gz``. This restriction has been lifted when ``cabal-version: 2.4`` or greater so that ``*.gz`` does match ``foo.tar.gz`` hZj^hehfhgh–hi}r“(hk]hl]hm]hn]hq]uhsNhthhu]r”h‚)r•}r–(hYXPrior to Cabal 2.4, when matching a wildcard plus extension, a file's full extension must match exactly, so ``*.gz`` matches ``foo.gz`` but not ``foo.tar.gz``. This restriction has been lifted when ``cabal-version: 2.4`` or greater so that ``*.gz`` does match ``foo.tar.gz``hZj‘hehfhgh†hi}r—(hk]hl]hm]hn]hq]uhsMîhu]r˜(h~XnPrior to Cabal 2.4, when matching a wildcard plus extension, a file’s full extension must match exactly, so r™…rš}r›(hYXlPrior to Cabal 2.4, when matching a wildcard plus extension, a file's full extension must match exactly, so hZj•ubhä)rœ}r(hYX``*.gz``hi}rž(hk]hl]hm]hn]hq]uhZj•hu]rŸh~X*.gzr …r¡}r¢(hYUhZjœubahghìubh~X matches r£…r¤}r¥(hYX matches hZj•ubhä)r¦}r§(hYX ``foo.gz``hi}r¨(hk]hl]hm]hn]hq]uhZj•hu]r©h~Xfoo.gzrª…r«}r¬(hYUhZj¦ubahghìubh~X but not r­…r®}r¯(hYX but not hZj•ubhä)r°}r±(hYX``foo.tar.gz``hi}r²(hk]hl]hm]hn]hq]uhZj•hu]r³h~X foo.tar.gzr´…rµ}r¶(hYUhZj°ubahghìubh~X(. This restriction has been lifted when r·…r¸}r¹(hYX(. This restriction has been lifted when hZj•ubhä)rº}r»(hYX``cabal-version: 2.4``hi}r¼(hk]hl]hm]hn]hq]uhZj•hu]r½h~Xcabal-version: 2.4r¾…r¿}rÀ(hYUhZjºubahghìubh~X or greater so that rÁ…rÂ}rÃ(hYX or greater so that hZj•ubhä)rÄ}rÅ(hYX``*.gz``hi}rÆ(hk]hl]hm]hn]hq]uhZj•hu]rÇh~X*.gzrÈ…rÉ}rÊ(hYUhZjÄubahghìubh~X does match rË…rÌ}rÍ(hYX does match hZj•ubhä)rÎ}rÏ(hYX``foo.tar.gz``hi}rÐ(hk]hl]hm]hn]hq]uhZj•hu]rÑh~X foo.tar.gzrÒ…rÓ}rÔ(hYUhZjÎubahghìubeubaubh“)rÕ}rÖ(hYXj``*`` wildcards will not match if the file name is empty (e.g., ``*.html`` will not match ``foo/.html``). hZj^hehfhgh–hi}r×(hk]hl]hm]hn]hq]uhsNhthhu]rØh‚)rÙ}rÚ(hYXi``*`` wildcards will not match if the file name is empty (e.g., ``*.html`` will not match ``foo/.html``).hZjÕhehfhgh†hi}rÛ(hk]hl]hm]hn]hq]uhsMôhu]rÜ(hä)rÝ}rÞ(hYX``*``hi}rß(hk]hl]hm]hn]hq]uhZjÙhu]ràh~X*…rá}râ(hYUhZjÝubahghìubh~X; wildcards will not match if the file name is empty (e.g., rã…rä}rå(hYX; wildcards will not match if the file name is empty (e.g., hZjÙubhä)ræ}rç(hYX ``*.html``hi}rè(hk]hl]hm]hn]hq]uhZjÙhu]réh~X*.htmlrê…rë}rì(hYUhZjæubahghìubh~X will not match rí…rî}rï(hYX will not match hZjÙubhä)rð}rñ(hYX ``foo/.html``hi}rò(hk]hl]hm]hn]hq]uhZjÙhu]róh~X foo/.htmlrô…rõ}rö(hYUhZjðubahghìubh~X).r÷…rø}rù(hYX).hZjÙubeubaubh“)rú}rû(hYX``**`` wildcards can only appear as the final path component before the file name (e.g., ``data/**/images/*.jpg`` is not allowed). If a ``**`` wildcard is used, then the file name must include a ``*`` wildcard (e.g., ``data/**/README.rst`` is not allowed). hZj^hehfhgh–hi}rü(hk]hl]hm]hn]hq]uhsNhthhu]rýh‚)rþ}rÿ(hYX``**`` wildcards can only appear as the final path component before the file name (e.g., ``data/**/images/*.jpg`` is not allowed). If a ``**`` wildcard is used, then the file name must include a ``*`` wildcard (e.g., ``data/**/README.rst`` is not allowed).hZjúhehfhgh†hi}r(hk]hl]hm]hn]hq]uhsM÷hu]r(hä)r}r(hYX``**``hi}r(hk]hl]hm]hn]hq]uhZjþhu]rh~X**r…r}r(hYUhZjubahghìubh~XS wildcards can only appear as the final path component before the file name (e.g., r …r }r (hYXS wildcards can only appear as the final path component before the file name (e.g., hZjþubhä)r }r (hYX``data/**/images/*.jpg``hi}r(hk]hl]hm]hn]hq]uhZjþhu]rh~Xdata/**/images/*.jpgr…r}r(hYUhZj ubahghìubh~X is not allowed). If a r…r}r(hYX is not allowed). If a hZjþubhä)r}r(hYX``**``hi}r(hk]hl]hm]hn]hq]uhZjþhu]rh~X**r…r}r(hYUhZjubahghìubh~X5 wildcard is used, then the file name must include a r…r}r(hYX5 wildcard is used, then the file name must include a hZjþubhä)r }r!(hYX``*``hi}r"(hk]hl]hm]hn]hq]uhZjþhu]r#h~X*…r$}r%(hYUhZj ubahghìubh~X wildcard (e.g., r&…r'}r((hYX wildcard (e.g., hZjþubhä)r)}r*(hYX``data/**/README.rst``hi}r+(hk]hl]hm]hn]hq]uhZjþhu]r,h~Xdata/**/README.rstr-…r.}r/(hYUhZj)ubahghìubh~X is not allowed).r0…r1}r2(hYX is not allowed).hZjþubeubaubh“)r3}r4(hYX6A wildcard that does not match any files is an error. hZj^hehfhgh–hi}r5(hk]hl]hm]hn]hq]uhsNhthhu]r6h‚)r7}r8(hYX5A wildcard that does not match any files is an error.r9hZj3hehfhgh†hi}r:(hk]hl]hm]hn]hq]uhsMýhu]r;h~X5A wildcard that does not match any files is an error.r<…r=}r>(hYj9hZj7ubaubaubeubh‚)r?}r@(hYXá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.rAhZjïhehfhgh†hi}rB(hk]hl]hm]hn]hq]uhsMÿhthhu]rCh~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.rD…rE}rF(hYjAheNhsNhthhZj?ubaubh‚)rG}rH(hYXMOn efficiency: if you use ``**`` patterns, the directory tree will be walked starting with the parent directory of the ``**``. If that's the root of the project, this might include ``.git/``, ``dist-newstyle/``, or other large directories! To avoid this behaviour, put the files that wildcards will match against in their own folder.hZjïhehfhgh†hi}rI(hk]hl]hm]hn]hq]uhsMhthhu]rJ(h~XOn efficiency: if you use rK…rL}rM(hYXOn efficiency: if you use heNhsNhthhZjGubhä)rN}rO(hYX``**``hi}rP(hk]hl]hm]hn]hq]uhZjGhu]rQh~X**rR…rS}rT(hYUhZjNubahghìubh~XW patterns, the directory tree will be walked starting with the parent directory of the rU…rV}rW(hYXW patterns, the directory tree will be walked starting with the parent directory of the heNhsNhthhZjGubhä)rX}rY(hYX``**``hi}rZ(hk]hl]hm]hn]hq]uhZjGhu]r[h~X**r\…r]}r^(hYUhZjXubahghìubh~X:. If that’s the root of the project, this might include r_…r`}ra(hYX8. If that's the root of the project, this might include heNhsNhthhZjGubhä)rb}rc(hYX ``.git/``hi}rd(hk]hl]hm]hn]hq]uhZjGhu]reh~X.git/rf…rg}rh(hYUhZjbubahghìubh~X, ri…rj}rk(hYX, heNhsNhthhZjGubhä)rl}rm(hYX``dist-newstyle/``hi}rn(hk]hl]hm]hn]hq]uhZjGhu]roh~Xdist-newstyle/rp…rq}rr(hYUhZjlubahghìubh~X{, or other large directories! To avoid this behaviour, put the files that wildcards will match against in their own folder.rs…rt}ru(hYX{, or other large directories! To avoid this behaviour, put the files that wildcards will match against in their own folder.heNhsNhthhZjGubeubh‚)rv}rw(hYX5``**`` wildcards are available starting in Cabal 2.4.hZjïhehfhgh†hi}rx(hk]hl]hm]hn]hq]uhsM hthhu]ry(hä)rz}r{(hYX``**``hi}r|(hk]hl]hm]hn]hq]uhZjvhu]r}h~X**r~…r}r€(hYUhZjzubahghìubh~X/ wildcards are available starting in Cabal 2.4.r…r‚}rƒ(hYX/ wildcards are available starting in Cabal 2.4.heNhsNhthhZjvubeubeubeubjþ)r„}r…(hYUhZjªhehfhgjhi}r†(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r‡}rˆ(hYUhZjªhehfhgjhi}r‰(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrŠj jŠuhsNhthhu]r‹(j)rŒ}r(hYXdata-dir: directoryhZj‡hehfhgjhi}rŽ(hn]rXpkg-field-data-dirrahm]hk]hl]hq]j‰uhsMhthhu]r‘(jþ)r’}r“(hYUhZjŒhehfhgjhi}r”(hn]hm]hk]hl]hq]Uentries]r•(jXdata-dir; package.cabal fieldjUNtr–auhsMhthhu]ubj)r—}r˜(hYXdata-dirr™hZjŒhehfhgj!hi}rš(jÖj×hn]hm]hk]hl]hq]uhsMhthhu]r›h~Xdata-dirrœ…r}rž(hYUheNhsNhthhZj—ubaubj')rŸ}r (hYj hZjŒhehfhgj*hi}r¡(jÖj×hn]hm]hk]hl]hq]uhsMhthhu]r¢h~X: r£…r¤}r¥(hYUheNhsNhthhZjŸubaubj¦)r¦}r§(hYX directoryhZjŒhehfhgj©hi}r¨(jÖj×hn]hm]hk]hl]hq]uhsMhthhu]r©h~X directoryrª…r«}r¬(hYUheNhsNhthhZj¦ubaubeubj/)r­}r®(hYUhZj‡hehfhgj2hi}r¯(hk]hl]hm]hn]hq]uhsMhthhu]r°h‚)r±}r²(hYX˜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³hZj­hehfhgh†hi}r´(hk]hl]hm]hn]hq]uhsMhthhu]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¸(hYj³heNhsNhthhZj±ubaubaubeubjþ)r¹}rº(hYUhZjªhehfhgjhi}r»(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r¼}r½(hYUhZjªhehfhgjhi}r¾(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr¿j j¿uhsNhthhu]rÀ(j)rÁ}rÂ(hYX!extra-source-files: filename listhZj¼hehfhgjhi}rÃ(hn]rÄXpkg-field-extra-source-filesrÅahm]hk]hl]hq]j‰uhsMhthhu]rÆ(jþ)rÇ}rÈ(hYUhZjÁhehfhgjhi}rÉ(hn]hm]hk]hl]hq]Uentries]rÊ(jX'extra-source-files; package.cabal fieldjÅUNtrËauhsMhthhu]ubj)rÌ}rÍ(hYXextra-source-filesrÎhZjÁhehfhgj!hi}rÏ(jÖj×hn]hm]hk]hl]hq]uhsMhthhu]rÐh~Xextra-source-filesrÑ…rÒ}rÓ(hYUheNhsNhthhZjÌubaubj')rÔ}rÕ(hYj hZjÁhehfhgj*hi}rÖ(jÖj×hn]hm]hk]hl]hq]uhsMhthhu]r×h~X: rØ…rÙ}rÚ(hYUheNhsNhthhZjÔubaubj¦)rÛ}rÜ(hYX filename listhZjÁhehfhgj©hi}rÝ(jÖj×hn]hm]hk]hl]hq]uhsMhthhu]rÞh~X filename listrß…rà}rá(hYUheNhsNhthhZjÛubaubeubj/)râ}rã(hYUhZj¼hehfhgj2hi}rä(hk]hl]hm]hn]hq]uhsMhthhu]råh‚)ræ}rç(hYX¼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.hZjâhehfhgh†hi}rè(hk]hl]hm]hn]hq]uhsMhthhu]ré(h~XMA list of additional files to be included in source distributions built with rê…rë}rì(hYXMA list of additional files to be included in source distributions built with heNhsNhthhZjæubjp)rí}rî(hYX:ref:`setup-sdist`rïhZjæhehfhgjthi}rð(UreftypeXrefjvˆjwX setup-sdistU refdomainXstdrñhn]hm]U refexplicit‰hk]hl]hq]jyjzuhsMhu]ròj|)ró}rô(hYjïhi}rõ(hk]hl]rö(jjñXstd-refr÷ehm]hn]hq]uhZjíhu]røh~X setup-sdistrù…rú}rû(hYUhZjóubahgj‡ubaubh~X . As with rü…rý}rþ(hYX . As with heNhsNhthhZjæubjp)rÿ}r(hYX:pkg-field:`data-files`rhZjæhehfhgjthi}r(UreftypeX pkg-fieldjvˆjwX data-filesU refdomainXcabalrhn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMhu]rhä)r}r(hYjhi}r(hk]hl]r(jjXcabal-pkg-fieldr ehm]hn]hq]uhZjÿhu]r h~X data-filesr …r }r (hYUhZjubahghìubaubh~X it can use a limited form of r…r}r(hYX it can use a limited form of heNhsNhthhZjæubhä)r}r(hYX``*``hi}r(hk]hl]hm]hn]hq]uhZjæhu]rh~X*…r}r(hYUhZjubahghìubh~X wildcards in file names.r…r}r(hYX wildcards in file names.heNhsNhthhZjæubeubaubeubjþ)r}r(hYUhZjªhehfhgjhi}r(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r}r(hYUhZjªhehfhgjhi}r(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr j j uhsNhthhu]r!(j)r"}r#(hYXextra-doc-files: filename listhZjhehfhgjhi}r$(hn]r%Xpkg-field-extra-doc-filesr&ahm]hk]hl]hq]j‰uhsMhthhu]r'(jþ)r(}r)(hYUhZj"hehfhgjhi}r*(hn]hm]hk]hl]hq]Uentries]r+(jX$extra-doc-files; package.cabal fieldj&UNtr,auhsMhthhu]ubj)r-}r.(hYXextra-doc-filesr/hZj"hehfhgj!hi}r0(jÖj×hn]hm]hk]hl]hq]uhsMhthhu]r1h~Xextra-doc-filesr2…r3}r4(hYUheNhsNhthhZj-ubaubj')r5}r6(hYj hZj"hehfhgj*hi}r7(jÖj×hn]hm]hk]hl]hq]uhsMhthhu]r8h~X: r9…r:}r;(hYUheNhsNhthhZj5ubaubj¦)r<}r=(hYX filename listhZj"hehfhgj©hi}r>(jÖj×hn]hm]hk]hl]hq]uhsMhthhu]r?h~X filename listr@…rA}rB(hYUheNhsNhthhZj<ubaubeubj/)rC}rD(hYUhZjhehfhgj2hi}rE(hk]hl]hm]hn]hq]uhsMhthhu]rFh‚)rG}rH(hYXí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.hZjChehfhgh†hi}rI(hk]hl]hm]hn]hq]uhsMhthhu]rJ(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 rK…rL}rM(hYXš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 heNhsNhthhZjGubjp)rN}rO(hYX:pkg-field:`data-files`rPhZjGhehfhgjthi}rQ(UreftypeX pkg-fieldjvˆjwX data-filesU refdomainXcabalrRhn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMhu]rShä)rT}rU(hYjPhi}rV(hk]hl]rW(jjRXcabal-pkg-fieldrXehm]hn]hq]uhZjNhu]rYh~X data-filesrZ…r[}r\(hYUhZjTubahghìubaubh~X it can use a limited form of r]…r^}r_(hYX it can use a limited form of heNhsNhthhZjGubhä)r`}ra(hYX``*``hi}rb(hk]hl]hm]hn]hq]uhZjGhu]rch~X*…rd}re(hYUhZj`ubahghìubh~X wildcards in file names.rf…rg}rh(hYX wildcards in file names.heNhsNhthhZjGubeubaubeubjþ)ri}rj(hYUhZjªhehfhgjhi}rk(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rl}rm(hYUhZjªhehfhgjhi}rn(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldroj jouhsNhthhu]rp(j)rq}rr(hYXextra-tmp-files: filename listhZjlhehfhgjhi}rs(hn]rtXpkg-field-extra-tmp-filesruahm]hk]hl]hq]j‰uhsM&hthhu]rv(jþ)rw}rx(hYUhZjqhehfhgjhi}ry(hn]hm]hk]hl]hq]Uentries]rz(jX$extra-tmp-files; package.cabal fieldjuUNtr{auhsM&hthhu]ubj)r|}r}(hYXextra-tmp-filesr~hZjqhehfhgj!hi}r(jÖj×hn]hm]hk]hl]hq]uhsM&hthhu]r€h~Xextra-tmp-filesr…r‚}rƒ(hYUheNhsNhthhZj|ubaubj')r„}r…(hYj hZjqhehfhgj*hi}r†(jÖj×hn]hm]hk]hl]hq]uhsM&hthhu]r‡h~X: rˆ…r‰}rŠ(hYUheNhsNhthhZj„ubaubj¦)r‹}rŒ(hYX filename listhZjqhehfhgj©hi}r(jÖj×hn]hm]hk]hl]hq]uhsM&hthhu]rŽh~X filename listr…r}r‘(hYUheNhsNhthhZj‹ubaubeubj/)r’}r“(hYUhZjlhehfhgj2hi}r”(hk]hl]hm]hn]hq]uhsM&hthhu]r•h‚)r–}r—(hYXä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`_hZj’hehfhgh†hi}r˜(hk]hl]hm]hn]hq]uhsM"hthhu]r™(h~X;A list of additional files or directories to be removed by rš…r›}rœ(hYX;A list of additional files or directories to be removed by heNhsNhthhZj–ubjp)r}rž(hYX:ref:`setup-clean`rŸhZj–hehfhgjthi}r (UreftypeXrefjvˆjwX setup-cleanU refdomainXstdr¡hn]hm]U refexplicit‰hk]hl]hq]jyjzuhsM"hu]r¢j|)r£}r¤(hYjŸhi}r¥(hk]hl]r¦(jj¡Xstd-refr§ehm]hn]hq]uhZjhu]r¨h~X setup-cleanr©…rª}r«(hYUhZj£ubahgj‡ubaubh~Xy. These would typically be additional files created by additional hooks, such as the scheme described in the section on r¬…r­}r®(hYXy. These would typically be additional files created by additional hooks, such as the scheme described in the section on heNhsNhthhZj–ubjD)r¯}r°(hYX`system-dependent parameters`_jGKhZj–hgjHhi}r±(UnameXsystem-dependent parametershn]hm]hk]hl]hq]jJj•uhu]r²h~Xsystem-dependent parametersr³…r´}rµ(hYUhZj¯ubaubeubaubeubeubh[)r¶}r·(hYUh^KhZhahehfhghhhi}r¸(hk]hl]hm]hn]r¹jÊahq]rºhauhsM(hthhu]r»(hw)r¼}r½(hYXLibraryr¾hZj¶hehfhgh{hi}r¿(hk]hl]hm]hn]hq]uhsM(hthhu]rÀh~XLibraryrÁ…rÂ}rÃ(hYj¾heNhsNhthhZj¼ubaubjþ)rÄ}rÅ(hYUhZj¶hehfhgjhi}rÆ(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rÇ}rÈ(hYUhZj¶hehfhgjhi}rÉ(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-sectionrÊj jÊuhsNhthhu]rË(j)rÌ}rÍ(hYX library namehZjÇhehfhgjhi}rÎ(hn]rÏXpkg-section-library-libraryrÐahm]hk]hl]hq]j‰uhsNhthhu]rÑ(jþ)rÒ}rÓ(hYUhZjÌhehfhgjhi}rÔ(hn]hm]hk]hl]hq]Uentries]rÕ(jX&library:library; package.cabal sectionjÐUNtrÖauhsNhthhu]ubj)r×}rØ(hYXlibraryrÙhZjÌhehfhgj!hi}rÚ(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rÛh~XlibraryrÜ…rÝ}rÞ(hYUheNhsNhthhZj×ubaubj')rß}rà(hYU hZjÌhehfhgj*hi}rá(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]râh~X …rã}rä(hYUheNhsNhthhZjßubaubj¦)rå}ræ(hYXnamehZjÌhehfhgj©hi}rç(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rèh~Xnameré…rê}rë(hYUheNhsNhthhZjåubaubeubj/)rì}rí(hYUhZjÇhehfhgj2hi}rî(hk]hl]hm]hn]hq]uhsNhthhu]rï(h‚)rð}rñ(hYX Build information for libraries.ròhZjìhehfhgh†hi}ró(hk]hl]hm]hn]hq]uhsM-hthhu]rôh~X Build information for libraries.rõ…rö}r÷(hYjòheNhsNhthhZjðubaubh‚)rø}rù(hYXòCurrently, there can only be one publicly exposed library in a package, and its name is the same as package name set by global :pkg-field:`name` field. In this case, the ``name`` argument to the :pkg-section:`library` section must be omitted.hZjìhehfhgh†hi}rú(hk]hl]hm]hn]hq]uhsM/hthhu]rû(h~XCurrently, there can only be one publicly exposed library in a package, and its name is the same as package name set by global rü…rý}rþ(hYXCurrently, there can only be one publicly exposed library in a package, and its name is the same as package name set by global heNhsNhthhZjøubjp)rÿ}r(hYX:pkg-field:`name`rhZjøhehfhgjthi}r(UreftypeX pkg-fieldjvˆjwXnameU refdomainXcabalrhn]hm]U refexplicit‰hk]hl]hq]jyjzjXlibraryruhsM/hu]rhä)r}r(hYjhi}r(hk]hl]r (jjXcabal-pkg-fieldr ehm]hn]hq]uhZjÿhu]r h~Xnamer …r }r(hYUhZjubahghìubaubh~X field. In this case, the r…r}r(hYX field. In this case, the heNhsNhthhZjøubhä)r}r(hYX``name``hi}r(hk]hl]hm]hn]hq]uhZjøhu]rh~Xnamer…r}r(hYUhZjubahghìubh~X argument to the r…r}r(hYX argument to the heNhsNhthhZjøubjp)r}r(hYX:pkg-section:`library`rhZjøhehfhgjthi}r(UreftypeX pkg-sectionjvˆjwXlibraryU refdomainXcabalr hn]hm]U refexplicit‰hk]hl]hq]jyjzuhsM/hu]r!hä)r"}r#(hYjhi}r$(hk]hl]r%(jj Xcabal-pkg-sectionr&ehm]hn]hq]uhZjhu]r'h~Xlibraryr(…r)}r*(hYUhZj"ubahghìubaubh~X section must be omitted.r+…r,}r-(hYX section must be omitted.heNhsNhthhZjøubeubh‚)r.}r/(hYXñStarting with Cabal 2.0, private internal sub-library components can be defined by using setting the ``name`` field to a name different from the current package's name; see section on :ref:`Internal Libraries ` for more information.hZjìhehfhgh†hi}r0(hk]hl]hm]hn]hq]uhsM4hthhu]r1(h~XeStarting with Cabal 2.0, private internal sub-library components can be defined by using setting the r2…r3}r4(hYXeStarting with Cabal 2.0, private internal sub-library components can be defined by using setting the heNhsNhthhZj.ubhä)r5}r6(hYX``name``hi}r7(hk]hl]hm]hn]hq]uhZj.hu]r8h~Xnamer9…r:}r;(hYUhZj5ubahghìubh~XM field to a name different from the current package’s name; see section on r<…r=}r>(hYXK field to a name different from the current package's name; see section on heNhsNhthhZj.ubjp)r?}r@(hYX#:ref:`Internal Libraries `rAhZj.hehfhgjthi}rB(UreftypeXrefjvˆjwXsublibsU refdomainXstdrChn]hm]U refexplicitˆhk]hl]hq]jyjzuhsM4hu]rDj|)rE}rF(hYjAhi}rG(hk]hl]rH(jjCXstd-refrIehm]hn]hq]uhZj?hu]rJh~XInternal LibrariesrK…rL}rM(hYUhZjEubahgj‡ubaubh~X for more information.rN…rO}rP(hYX for more information.heNhsNhthhZj.ubeubeubeubh‚)rQ}rR(hYX8The library section should contain the following fields:rShZj¶hehfhgh†hi}rT(hk]hl]hm]hn]hq]uhsM9hthhu]rUh~X8The library section should contain the following fields:rV…rW}rX(hYjSheNhsNhthhZjQubaubjþ)rY}rZ(hYUhZj¶hehfhgjhi}r[(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r\}r](hYUhZj¶hehfhgjhi}r^(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr_j j_uhsNhthhu]r`(j)ra}rb(hYX exposed-modules: identifier listhZj\hehfhgjhi}rc(hn]rdX!pkg-field-library-exposed-modulesreahm]hk]hl]hq]j‰uhsM@hthhu]rf(jþ)rg}rh(hYUhZjahehfhgjhi}ri(hn]hm]hk]hl]hq]Uentries]rj(jX,library:exposed-modules; package.cabal fieldjeUNtrkauhsM@hthhu]ubj)rl}rm(hYXexposed-modulesrnhZjahehfhgj!hi}ro(jÖj×hn]hm]hk]hl]hq]uhsM@hthhu]rph~Xexposed-modulesrq…rr}rs(hYUheNhsNhthhZjlubaubj')rt}ru(hYj hZjahehfhgj*hi}rv(jÖj×hn]hm]hk]hl]hq]uhsM@hthhu]rwh~X: rx…ry}rz(hYUheNhsNhthhZjtubaubj¦)r{}r|(hYXidentifier listhZjahehfhgj©hi}r}(jÖj×hn]hm]hk]hl]hq]uhsM@hthhu]r~h~Xidentifier listr…r€}r(hYUheNhsNhthhZj{ubaubeubj/)r‚}rƒ(hYUhZj\hehfhgj2hi}r„(hk]hl]hm]hn]hq]uhsM@hthhu]r…(j5)r†}r‡(hYUhZj‚hehfhgj8hi}rˆ(hk]hl]hm]hn]hq]uhsNhthhu]r‰j;)rŠ}r‹(hYUhZj†hehfhgj>hi}rŒ(hk]hl]hm]hn]hq]uhsM=hthhu]r(jA)rŽ}r(hYXrequiredhZjŠhehfhgjEhi}r(hk]hl]hm]hn]hq]uhsKhu]r‘h~XRequiredr’…r“}r”(hYUhZjŽubaubjK)r•}r–(hYX#if this package contains a library hi}r—(hk]hl]hm]hn]hq]uhZjŠhu]r˜h‚)r™}rš(hYX"if this package contains a libraryr›hZj•hehfhgh†hi}rœ(hk]hl]hm]hn]hq]uhsM=hu]rh~X"if this package contains a libraryrž…rŸ}r (hYj›hZj™ubaubahgjXubeubaubh‚)r¡}r¢(hYX(A list of modules added by this package.r£hZj‚hehfhgh†hi}r¤(hk]hl]hm]hn]hq]uhsM?hthhu]r¥h~X(A list of modules added by this package.r¦…r§}r¨(hYj£heNhsNhthhZj¡ubaubeubeubjþ)r©}rª(hYUhZj¶hehfhgjhi}r«(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r¬}r­(hYUhZj¶hehfhgjhi}r®(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr¯j j¯uhsNhthhu]r°(j)r±}r²(hYX virtual-modules: identifier listhZj¬hehfhgjhi}r³(hn]r´X!pkg-field-library-virtual-modulesrµahm]hk]hl]hq]j‰uhsNhthhu]r¶(jþ)r·}r¸(hYUhZj±hehfhgjhi}r¹(hn]hm]hk]hl]hq]Uentries]rº(jX,library:virtual-modules; package.cabal fieldjµUNtr»auhsNhthhu]ubj)r¼}r½(hYXvirtual-modulesr¾hZj±hehfhgj!hi}r¿(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rÀh~Xvirtual-modulesrÁ…rÂ}rÃ(hYUheNhsNhthhZj¼ubaubj')rÄ}rÅ(hYj hZj±hehfhgj*hi}rÆ(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rÇh~X: rÈ…rÉ}rÊ(hYUheNhsNhthhZjÄubaubj¦)rË}rÌ(hYXidentifier listhZj±hehfhgj©hi}rÍ(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rÎh~Xidentifier listrÏ…rÐ}rÑ(hYUheNhsNhthhZjËubaubeubj/)rÒ}rÓ(hYUhZj¬hehfhgj2hi}rÔ(hk]hl]hm]hn]hq]uhsNhthhu]rÕ(j5)rÖ}r×(hYUhZjÒhehfhgj8hi}rØ(hk]hl]hm]hn]hq]uhsNhthhu]rÙj;)rÚ}rÛ(hYUhZjÖhehfhgj>hi}rÜ(hk]hl]hm]hn]hq]uhsNhthhu]rÝ(jA)rÞ}rß(hYjDhZjÚhehfhgjEhi}rà(hk]hl]hm]hn]hq]uhsKhu]ráh~XSincerâ…rã}rä(hYUhZjÞubaubjK)rå}ræ(hYU Cabal 2.2rçhi}rè(hk]hl]hm]hn]hq]uhZjÚhu]réh‚)rê}rë(hYjçhi}rì(hk]hl]hm]hn]hq]uhZjåhu]ríh~X Cabal 2.2rî…rï}rð(hYUhZjêubahgh†ubahgjXubeubaubh‚)rñ}rò(hYXaA 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.hZjÒhehfhgh†hi}ró(hk]hl]hm]hn]hq]uhsMDhthhu]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÷(hYX}A list of virtual modules provided by this package. Virtual modules are modules without a source file. See for example the heNhsNhthhZjñubhä)rø}rù(hYX ``GHC.Prim``hi}rú(hk]hl]hm]hn]hq]uhZjñhu]rûh~XGHC.Primrü…rý}rþ(hYUhZjøubahghìubh~X module from the rÿ…r}r(hYX module from the heNhsNhthhZjñubhä)r}r(hYX ``ghc-prim``hi}r(hk]hl]hm]hn]hq]uhZjñhu]rh~Xghc-primr…r}r(hYUhZjubahghìubh~XR package. Modules listed here will not be built, but still end up in the list of r …r }r (hYXR package. Modules listed here will not be built, but still end up in the list of heNhsNhthhZjñubhä)r }r (hYX``exposed-modules``hi}r(hk]hl]hm]hn]hq]uhZjñhu]rh~Xexposed-modulesr…r}r(hYUhZj ubahghìubh~XV in the installed package info when the package is registered in the package database.r…r}r(hYXV in the installed package info when the package is registered in the package database.heNhsNhthhZjñubeubeubeubjþ)r}r(hYUhZj¶hehfhgjhi}r(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r}r(hYUhZj¶hehfhgjhi}r(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrj juhsNhthhu]r(j)r}r(hYXexposed: booleanhZjhehfhgjhi}r (hn]r!Xpkg-field-library-exposedr"ahm]hk]hl]hq]j‰uhsM[hthhu]r#(jþ)r$}r%(hYUhZjhehfhgjhi}r&(hn]hm]hk]hl]hq]Uentries]r'(jX$library:exposed; package.cabal fieldj"UNtr(auhsM[hthhu]ubj)r)}r*(hYXexposedr+hZjhehfhgj!hi}r,(jÖj×hn]hm]hk]hl]hq]uhsM[hthhu]r-h~Xexposedr.…r/}r0(hYUheNhsNhthhZj)ubaubj')r1}r2(hYj hZjhehfhgj*hi}r3(jÖj×hn]hm]hk]hl]hq]uhsM[hthhu]r4h~X: r5…r6}r7(hYUheNhsNhthhZj1ubaubj¦)r8}r9(hYXbooleanhZjhehfhgj©hi}r:(jÖj×hn]hm]hk]hl]hq]uhsM[hthhu]r;h~Xbooleanr<…r=}r>(hYUheNhsNhthhZj8ubaubeubj/)r?}r@(hYUhZjhehfhgj2hi}rA(hk]hl]hm]hn]hq]uhsM[hthhu]rB(j5)rC}rD(hYUhZj?hehfhgj8hi}rE(hk]hl]hm]hn]hq]uhsNhthhu]rFj;)rG}rH(hYUhi}rI(hk]hl]hm]hn]hq]uhZjChu]rJ(jA)rK}rL(hYX Default valuehZjGhehfhgjEhi}rM(hk]hl]hm]hn]hq]uhsKhu]rNh~X Default valuerO…rP}rQ(hYUhZjKubaubjK)rR}rS(hYUhi}rT(hk]hl]hm]hn]hq]uhZjGhu]rUh‚)rV}rW(hYXTruehi}rX(hk]hl]hm]hn]hq]uhZjRhu]rYhä)rZ}r[(hYX``True``hZjVhehfhghìhi}r\(hk]hl]hm]hn]hq]uhsNhthhu]r]h~XTruer^…r_}r`(hYUheNhsNhthhZjZubaubahgh†ubahgjXubehgj>ubaubh‚)ra}rb(hYXmSome 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).rchZj?hehfhgh†hi}rd(hk]hl]hm]hn]hq]uhsMOhthhu]reh~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).rf…rg}rh(hYjcheNhsNhthhZjaubaubh‚)ri}rj(hYX>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.hZj?hehfhgh†hi}rk(hk]hl]hm]hn]hq]uhsMVhthhu]rl(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 rm…rn}ro(hYXŸ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 heNhsNhthhZjiubhä)rp}rq(hYX``exposed: False``hi}rr(hk]hl]hm]hn]hq]uhZjihu]rsh~Xexposed: Falsert…ru}rv(hYUhZjpubahghì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.rw…rx}ry(hYX 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.heNhsNhthhZjiubeubeubeubjþ)rz}r{(hYUhZj¶hehfhgjhi}r|(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r}}r~(hYUhZj¶hehfhgjhi}r(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr€j j€uhsNhthhu]r(j)r‚}rƒ(hYXreexported-modules: exportlisthZj}hehfhgjhi}r„(hn]r…X$pkg-field-library-reexported-modulesr†ahm]hk]hl]hq]j‰uhsNhthhu]r‡(jþ)rˆ}r‰(hYUhZj‚hehfhgjhi}rŠ(hn]hm]hk]hl]hq]Uentries]r‹(jX/library:reexported-modules; package.cabal fieldj†UNtrŒauhsNhthhu]ubj)r}rŽ(hYXreexported-modulesrhZj‚hehfhgj!hi}r(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r‘h~Xreexported-modulesr’…r“}r”(hYUheNhsNhthhZjubaubj')r•}r–(hYj hZj‚hehfhgj*hi}r—(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r˜h~X: r™…rš}r›(hYUheNhsNhthhZj•ubaubj¦)rœ}r(hYX exportlisthZj‚hehfhgj©hi}rž(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rŸh~X exportlistr …r¡}r¢(hYUheNhsNhthhZjœubaubeubj/)r£}r¤(hYUhZj}hehfhgj2hi}r¥(hk]hl]hm]hn]hq]uhsNhthhu]r¦(j5)r§}r¨(hYUhZj£hehfhgj8hi}r©(hk]hl]hm]hn]hq]uhsNhthhu]rªj;)r«}r¬(hYUhZj§hehfhgj>hi}r­(hk]hl]hm]hn]hq]uhsNhthhu]r®(jA)r¯}r°(hYjDhZj«hehfhgjEhi}r±(hk]hl]hm]hn]hq]uhsKhu]r²h~XSincer³…r´}rµ(hYUhZj¯ubaubjK)r¶}r·(hYU Cabal 1.22r¸hi}r¹(hk]hl]hm]hn]hq]uhZj«hu]rºh‚)r»}r¼(hYj¸hi}r½(hk]hl]hm]hn]hq]uhZj¶hu]r¾h~X Cabal 1.22r¿…rÀ}rÁ(hYUhZj»ubahgh†ubahgjXubeubaubh‚)rÂ}rÃ(hYXÄ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.hZj£hehfhgh†hi}rÄ(hk]hl]hm]hn]hq]uhsM_hthhu]rÅ(h~X;Supported only in GHC 7.10 and later. A list of modules to rÆ…rÇ}rÈ(hYX;Supported only in GHC 7.10 and later. A list of modules to heNhsNhthhZjÂubhÄ)rÉ}rÊ(hYX *reexport*hi}rË(hk]hl]hm]hn]hq]uhZjÂhu]rÌh~XreexportrÍ…rÎ}rÏ(hYUhZjÉubahghÌubh~X0 from this package. The syntax of this field is rÐ…rÑ}rÒ(hYX0 from this package. The syntax of this field is heNhsNhthhZjÂubhä)rÓ}rÔ(hYX``orig-pkg:Name as NewName``hi}rÕ(hk]hl]hm]hn]hq]uhZjÂhu]rÖh~Xorig-pkg:Name as NewNamer×…rØ}rÙ(hYUhZjÓubahghìubh~X to reexport module rÚ…rÛ}rÜ(hYX to reexport module heNhsNhthhZjÂubhä)rÝ}rÞ(hYX``Name``hi}rß(hk]hl]hm]hn]hq]uhZjÂhu]ràh~XNamerá…râ}rã(hYUhZjÝubahghìubh~X from rä…rå}ræ(hYX from heNhsNhthhZjÂubhä)rç}rè(hYX ``orig-pkg``hi}ré(hk]hl]hm]hn]hq]uhZjÂhu]rêh~Xorig-pkgrë…rì}rí(hYUhZjçubahghìubh~X with the new name rî…rï}rð(hYX with the new name heNhsNhthhZjÂubhä)rñ}rò(hYX ``NewName``hi}ró(hk]hl]hm]hn]hq]uhZjÂhu]rôh~XNewNamerõ…rö}r÷(hYUhZjñubahghìubh~XB. We also support abbreviated versions of the syntax: if you omit rø…rù}rú(hYXB. We also support abbreviated versions of the syntax: if you omit heNhsNhthhZjÂubhä)rû}rü(hYX``as NewName``hi}rý(hk]hl]hm]hn]hq]uhZjÂhu]rþh~X as NewNamerÿ…r}r(hYUhZjûubahghìubh~X1, we’ll reexport without renaming; if you omit r…r}r(hYX/, we'll reexport without renaming; if you omit heNhsNhthhZjÂubhä)r}r(hYX ``orig-pkg``hi}r(hk]hl]hm]hn]hq]uhZjÂhu]rh~Xorig-pkgr …r }r (hYUhZjubahghìubh~X^, then we will automatically figure out which package to reexport from, if it’s unambiguous.r …r }r(hYX\, then we will automatically figure out which package to reexport from, if it's unambiguous.heNhsNhthhZjÂubeubh‚)r}r(hYXhReexported 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.rhZj£hehfhgh†hi}r(hk]hl]hm]hn]hq]uhsMhhthhu]rh~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(hYjheNhsNhthhZjubaubeubeubjþ)r}r(hYUhZj¶hehfhgjhi}r(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r}r(hYUhZj¶hehfhgjhi}r(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrj juhsNhthhu]r(j)r}r (hYXsignatures: signature listhZjhehfhgjhi}r!(hn]r"Xpkg-field-library-signaturesr#ahm]hk]hl]hq]j‰uhsNhthhu]r$(jþ)r%}r&(hYUhZjhehfhgjhi}r'(hn]hm]hk]hl]hq]Uentries]r((jX'library:signatures; package.cabal fieldj#UNtr)auhsNhthhu]ubj)r*}r+(hYX signaturesr,hZjhehfhgj!hi}r-(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r.h~X signaturesr/…r0}r1(hYUheNhsNhthhZj*ubaubj')r2}r3(hYj hZjhehfhgj*hi}r4(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r5h~X: r6…r7}r8(hYUheNhsNhthhZj2ubaubj¦)r9}r:(hYXsignature listhZjhehfhgj©hi}r;(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r<h~Xsignature listr=…r>}r?(hYUheNhsNhthhZj9ubaubeubj/)r@}rA(hYUhZjhehfhgj2hi}rB(hk]hl]hm]hn]hq]uhsNhthhu]rC(j5)rD}rE(hYUhZj@hehfhgj8hi}rF(hk]hl]hm]hn]hq]uhsNhthhu]rGj;)rH}rI(hYUhZjDhehfhgj>hi}rJ(hk]hl]hm]hn]hq]uhsNhthhu]rK(jA)rL}rM(hYjDhZjHhehfhgjEhi}rN(hk]hl]hm]hn]hq]uhsKhu]rOh~XSincerP…rQ}rR(hYUhZjLubaubjK)rS}rT(hYU Cabal 2.0rUhi}rV(hk]hl]hm]hn]hq]uhZjHhu]rWh‚)rX}rY(hYjUhi}rZ(hk]hl]hm]hn]hq]uhZjShu]r[h~X Cabal 2.0r\…r]}r^(hYUhZjXubahgh†ubahgjXubeubaubh‚)r_}r`(hYXÂSupported only in GHC 8.2 and later. A list of `module signatures `__ required by this package.hZj@hehfhgh†hi}ra(hk]hl]hm]hn]hq]uhsMrhthhu]rb(h~X/Supported only in GHC 8.2 and later. A list of rc…rd}re(hYX/Supported only in GHC 8.2 and later. A list of heNhsNhthhZj_ubjD)rf}rg(hYXy`module signatures `__hi}rh(UnameXmodule signaturesjƒXahttps://downloads.haskell.org/~ghc/master/users-guide/separate_compilation.html#module-signatureshn]hm]hk]hl]hq]uhZj_hu]rih~Xmodule signaturesrj…rk}rl(hYUhZjfubahgjHubh~X required by this package.rm…rn}ro(hYX required by this package.heNhsNhthhZj_ubeubh‚)rp}rq(hYX‡Module signatures are part of the `Backpack `__ extension to the Haskell module system.hZj@hehfhgh†hi}rr(hk]hl]hm]hn]hq]uhsMththhu]rs(h~X"Module signatures are part of the rt…ru}rv(hYX"Module signatures are part of the heNhsNhthhZjpubjD)rw}rx(hYX=`Backpack `__hi}ry(UnameXBackpackjƒX.https://ghc.haskell.org/trac/ghc/wiki/Backpackhn]hm]hk]hl]hq]uhZjphu]rzh~XBackpackr{…r|}r}(hYUhZjwubahgjHubh~X( extension to the Haskell module system.r~…r}r€(hYX( extension to the Haskell module system.heNhsNhthhZjpubeubh‚)r}r‚(hYXúPackages that do not export any modules and only export required signatures are called "signature-only packages", and their signatures are subjected to `signature thinning `__.hZj@hehfhgh†hi}rƒ(hk]hl]hm]hn]hq]uhsMxhthhu]r„(h~XœPackages that do not export any modules and only export required signatures are called “signature-only packagesâ€, and their signatures are subjected to r……r†}r‡(hYX˜Packages that do not export any modules and only export required signatures are called "signature-only packages", and their signatures are subjected to heNhsNhthhZjubjD)rˆ}r‰(hYXa`signature thinning `__hi}rŠ(UnameXsignature thinningjƒXHhttps://wiki.haskell.org/Module_signature#How_to_use_a_signature_packagehn]hm]hk]hl]hq]uhZjhu]r‹h~Xsignature thinningrŒ…r}rŽ(hYUhZjˆubahgjHubh~X.…r}r(hYX.heNhsNhthhZjubeubeubeubh‚)r‘}r’(hYXhThe library section may also contain build information fields (see the section on `build information`_).hZj¶hehfhgh†hi}r“(hk]hl]hm]hn]hq]uhsMhthhu]r”(h~XRThe library section may also contain build information fields (see the section on r•…r–}r—(hYXRThe library section may also contain build information fields (see the section on heNhsNhthhZj‘ubjD)r˜}r™(hYX`build information`_jGKhZj‘hgjHhi}rš(UnameXbuild informationhn]hm]hk]hl]hq]jJj\uhu]r›h~Xbuild informationrœ…r}rž(hYUhZj˜ubaubh~X).rŸ…r }r¡(hYX).heNhsNhthhZj‘ubeubj¥)r¢}r£(hYX .. _sublibs:hZj¶hehfhgj¨hi}r¤(hn]hm]hk]hl]hq]jJUsublibsr¥uhsM‚hthhu]ubh‚)r¦}r§(hYX**Internal Libraries**r¨hZj¶hehfj}r©hj¢shgh†hi}rª(hk]hl]hm]hn]r«j¥ahq]r¬hauhsM„hthj}r­j¥j¢shu]r®cdocutils.nodes strong r¯)r°}r±(hYj¨hi}r²(hk]hl]hm]hn]hq]uhZj¦hu]r³h~XInternal Librariesr´…rµ}r¶(hYUhZj°ubahgUstrongr·ubaubh‚)r¸}r¹(hYXÄ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:hZj¶hehfhgh†hi}rº(hk]hl]hm]hn]hq]uhsM†hthhu]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¾(hYXoCabal 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 heNhsNhthhZj¸ubjp)r¿}rÀ(hYX:pkg-field:`build-depends`rÁhZj¸hehfhgjthi}rÂ(UreftypeX pkg-fieldjvˆjwX build-dependsU refdomainXcabalrÃhn]hm]U refexplicit‰hk]hl]hq]jyjzjjuhsM†hu]rÄhä)rÅ}rÆ(hYjÁhi}rÇ(hk]hl]rÈ(jjÃXcabal-pkg-fieldrÉehm]hn]hq]uhZj¿hu]rÊh~X build-dependsrË…rÌ}rÍ(hYUhZjÅubahghìubaubh~X; upon. Then your Cabal file might look something like this:rÎ…rÏ}rÐ(hYX; upon. Then your Cabal file might look something like this:heNhsNhthhZj¸ubeubjÑ)rÑ}rÒ(hYXˆcabal-version: 2.0 name: foo version: 0.1.0.0 license: BSD3 build-type: Simple library foo-internal exposed-modules: Foo.Internal -- NOTE: no explicit constraints on base needed -- as they're inherited from the 'library' stanza build-depends: base library exposed-modules: Foo.Public build-depends: foo-internal, base >= 4.3 && < 5 test-suite test-foo type: exitcode-stdio-1.0 main-is: test-foo.hs -- NOTE: no constraints on 'foo-internal' as same-package -- dependencies implicitly refer to the same package instance build-depends: foo-internal, basehZj¶hehfhgjÔhi}rÓ(jÖj×hn]hm]hk]hl]hq]uhsMhthhu]rÔh~Xˆcabal-version: 2.0 name: foo version: 0.1.0.0 license: BSD3 build-type: Simple library foo-internal exposed-modules: Foo.Internal -- NOTE: no explicit constraints on base needed -- as they're inherited from the 'library' stanza build-depends: base library exposed-modules: Foo.Public build-depends: foo-internal, base >= 4.3 && < 5 test-suite test-foo type: exitcode-stdio-1.0 main-is: test-foo.hs -- NOTE: no constraints on 'foo-internal' as same-package -- dependencies implicitly refer to the same package instance build-depends: foo-internal, baserÕ…rÖ}r×(hYUhZjÑubaubh‚)rØ}rÙ(hYXEInternal libraries are also useful for packages that define multiple executables, but do not define a publically accessible library. Internal libraries are only visible internally in the package (so they can only be added to the :pkg-field:`build-depends` of same-package libraries, executables, test suites, etc.) Internal libraries locally shadow any packages which have the same name; consequently, don't name an internal library with the same name as an external dependency if you need to be able to refer to the external dependency in a :pkg-field:`build-depends` declaration.hZj¶hehfhgh†hi}rÚ(hk]hl]hm]hn]hq]uhsM§hthhu]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Þ(hYXå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 heNhsNhthhZjØubjp)rß}rà(hYX:pkg-field:`build-depends`ráhZjØhehfhgjthi}râ(UreftypeX pkg-fieldjvˆjwX build-dependsU refdomainXcabalrãhn]hm]U refexplicit‰hk]hl]hq]jyjzjjuhsM§hu]rähä)rå}ræ(hYjáhi}rç(hk]hl]rè(jjãXcabal-pkg-fieldréehm]hn]hq]uhZjßhu]rêh~X build-dependsrë…rì}rí(hYUhZjåubahghìubaubh~X! of same-package libraries, executables, test suites, etc.) Internal libraries locally shadow any packages which have the same name; consequently, don’t name an internal library with the same name as an external dependency if you need to be able to refer to the external dependency in a rî…rï}rð(hYX of same-package libraries, executables, test suites, etc.) Internal libraries locally shadow any packages which have the same name; consequently, don't name an internal library with the same name as an external dependency if you need to be able to refer to the external dependency in a heNhsNhthhZjØubjp)rñ}rò(hYX:pkg-field:`build-depends`róhZjØhehfhgjthi}rô(UreftypeX pkg-fieldjvˆjwX build-dependsU refdomainXcabalrõhn]hm]U refexplicit‰hk]hl]hq]jyjzjjuhsM§hu]röhä)r÷}rø(hYjóhi}rù(hk]hl]rú(jjõXcabal-pkg-fieldrûehm]hn]hq]uhZjñhu]rüh~X build-dependsrý…rþ}rÿ(hYUhZj÷ubahghìubaubh~X declaration.r…r}r(hYX declaration.heNhsNhthhZjØubeubh‚)r}r(hYX¢Shadowing can be used to vendor an external dependency into a package and thus emulate *private dependencies*. Below is an example based on a real-world use case:hZj¶hehfhgh†hi}r(hk]hl]hm]hn]hq]uhsM±hthhu]r(h~XWShadowing can be used to vendor an external dependency into a package and thus emulate r…r}r (hYXWShadowing can be used to vendor an external dependency into a package and thus emulate heNhsNhthhZjubhÄ)r }r (hYX*private dependencies*hi}r (hk]hl]hm]hn]hq]uhZjhu]r h~Xprivate dependenciesr…r}r(hYUhZj ubahghÌubh~X5. Below is an example based on a real-world use case:r…r}r(hYX5. Below is an example based on a real-world use case:heNhsNhthhZjubeubjÑ)r}r(hYXQcabal-version: 2.2 name: haddock-library version: 1.6.0 library build-depends: , base ^>= 4.11.1.0 , bytestring ^>= 0.10.2.0 , containers ^>= 0.4.2.1 || ^>= 0.5.0.0 , transformers ^>= 0.5.0.0 hs-source-dirs: src -- internal sub-lib build-depends: attoparsec exposed-modules: Documentation.Haddock library attoparsec build-depends: , base ^>= 4.11.1.0 , bytestring ^>= 0.10.2.0 , deepseq ^>= 1.4.0.0 hs-source-dirs: vendor/attoparsec-0.13.1.0 -- NB: haddock-library needs only small part of lib:attoparsec -- internally, so we only bundle that subset here exposed-modules: Data.Attoparsec.ByteString Data.Attoparsec.Combinator other-modules: Data.Attoparsec.Internal ghc-options: -funbox-strict-fields -Wall -fwarn-tabs -O2hZj¶hehfhgjÔhi}r(jÖj×hn]hm]hk]hl]hq]uhsM·hthhu]rh~XQcabal-version: 2.2 name: haddock-library version: 1.6.0 library build-depends: , base ^>= 4.11.1.0 , bytestring ^>= 0.10.2.0 , containers ^>= 0.4.2.1 || ^>= 0.5.0.0 , transformers ^>= 0.5.0.0 hs-source-dirs: src -- internal sub-lib build-depends: attoparsec exposed-modules: Documentation.Haddock library attoparsec build-depends: , base ^>= 4.11.1.0 , bytestring ^>= 0.10.2.0 , deepseq ^>= 1.4.0.0 hs-source-dirs: vendor/attoparsec-0.13.1.0 -- NB: haddock-library needs only small part of lib:attoparsec -- internally, so we only bundle that subset here exposed-modules: Data.Attoparsec.ByteString Data.Attoparsec.Combinator other-modules: Data.Attoparsec.Internal ghc-options: -funbox-strict-fields -Wall -fwarn-tabs -O2r…r}r(hYUhZjubaubeubh[)r}r(hYUhZhahehfhghhhi}r(hk]hl]hm]hn]rUopening-an-interpreter-sessionrahq]r hKauhsMßhthhu]r!(hw)r"}r#(hYXOpening an interpreter sessionr$hZjhehfhgh{hi}r%(hk]hl]hm]hn]hq]uhsMßhthhu]r&h~XOpening an interpreter sessionr'…r(}r)(hYj$heNhsNhthhZj"ubaubh‚)r*}r+(hYX”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:hZjhehfhgh†hi}r,(hk]hl]hm]hn]hq]uhsMáhthhu]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/}r0(hYXƒWhile developing a package, it is often useful to make its code available inside an interpreter session. This can be done with the heNhsNhthhZj*ubhä)r1}r2(hYX``repl``hi}r3(hk]hl]hm]hn]hq]uhZj*hu]r4h~Xreplr5…r6}r7(hYUhZj1ubahghìubh~X command:r8…r9}r:(hYX command:heNhsNhthhZj*ubeubjÑ)r;}r<(hYX $ cabal replhZjhehfhgjÔhi}r=(j‰jXconsolejÖj×hn]hm]hk]j}hl]hq]uhsMåhthhu]r>h~X $ cabal replr?…r@}rA(hYUhZj;ubaubh‚)rB}rC(hYX¥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:hZjhehfhgh†hi}rD(hk]hl]hm]hn]hq]uhsMéhthhu]rE(h~X The name comes from the acronym rF…rG}rH(hYX The name comes from the acronym heNhsNhthhZjBubjD)rI}rJ(hYXL`REPL `__hi}rK(UnameXREPLjƒXAhttp://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loophn]hm]hk]hl]hq]uhZjBhu]rLh~XREPLrM…rN}rO(hYUhZjIubahgjHubh~X:, which stands for “read-eval-print-loopâ€. By default rP…rQ}rR(hYX6, which stands for "read-eval-print-loop". By default heNhsNhthhZjBubhä)rS}rT(hYX``cabal repl``hi}rU(hk]hl]hm]hn]hq]uhZjBhu]rVh~X cabal replrW…rX}rY(hYUhZjSubahghì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 rZ…r[}r\(hYXƒ loads the first component in a package. If the package contains several named components, the name can be given as an argument to heNhsNhthhZjBubhä)r]}r^(hYX``repl``hi}r_(hk]hl]hm]hn]hq]uhZjBhu]r`h~Xreplra…rb}rc(hYUhZj]ubahghìubh~Xl. The name can be also optionally prefixed with the component’s type for disambiguation purposes. Example:rd…re}rf(hYXj. The name can be also optionally prefixed with the component's type for disambiguation purposes. Example:heNhsNhthhZjBubeubjÑ)rg}rh(hYXR$ cabal repl foo $ cabal repl exe:foo $ cabal repl test:bar $ cabal repl bench:bazhZjhehfhgjÔhi}ri(j‰jXconsolejÖj×hn]hm]hk]j}hl]hq]uhsMñhthhu]rjh~XR$ cabal repl foo $ cabal repl exe:foo $ cabal repl test:bar $ cabal repl bench:bazrk…rl}rm(hYUhZjgubaubh[)rn}ro(hYUhZjhehfhghhhi}rp(hk]hl]hm]hn]rqUfreezing-dependency-versionsrrahq]rsh!auhsMùhthhu]rt(hw)ru}rv(hYXFreezing dependency versionsrwhZjnhehfhgh{hi}rx(hk]hl]hm]hn]hq]uhsMùhthhu]ryh~XFreezing dependency versionsrz…r{}r|(hYjwheNhsNhthhZjuubaubh‚)r}}r~(hYX,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:hZjnhehfhgh†hi}r(hk]hl]hm]hn]hq]uhsMûhthhu]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‚}rƒ(hYXIf 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 heNhsNhthhZj}ubhä)r„}r…(hYX ``freeze``hi}r†(hk]hl]hm]hn]hq]uhZj}hu]r‡h~Xfreezerˆ…r‰}rŠ(hYUhZj„ubahghìubh~X command:r‹…rŒ}r(hYX command:heNhsNhthhZj}ubeubjÑ)rŽ}r(hYX$ cabal freezehZjnhehfhgjÔhi}r(j‰jXconsolejÖj×hn]hm]hk]j}hl]hq]uhsMhthhu]r‘h~X$ cabal freezer’…r“}r”(hYUhZjŽubaubh‚)r•}r–(hYX³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.hZjnhehfhgh†hi}r—(hk]hl]hm]hn]hq]uhsMhthhu]r˜(h~XDThe command writes the selected version for all dependencies to the r™…rš}r›(hYXDThe command writes the selected version for all dependencies to the heNhsNhthhZj•ubhä)rœ}r(hYX``cabal.config``hi}rž(hk]hl]hm]hn]hq]uhZj•hu]rŸh~X cabal.configr …r¡}r¢(hYUhZjœubahghìubh~X_ file. All environments which share this file will use the dependency versions specified in it.r£…r¤}r¥(hYX_ file. All environments which share this file will use the dependency versions specified in it.heNhsNhthhZj•ubeubeubh[)r¦}r§(hYUhZjhehfhghhhi}r¨(hk]hl]hm]hn]r©U$generating-dependency-version-boundsrªahq]r«hauhsM hthhu]r¬(hw)r­}r®(hYX$Generating dependency version boundsr¯hZj¦hehfhgh{hi}r°(hk]hl]hm]hn]hq]uhsM hthhu]r±h~X$Generating dependency version boundsr²…r³}r´(hYj¯heNhsNhthhZj­ubaubh‚)rµ}r¶(hYXð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:hZj¦hehfhgh†hi}r·(hk]hl]hm]hn]hq]uhsM hthhu]r¸(h~XPCabal also has the ability to suggest dependency version bounds that conform to r¹…rº}r»(hYXPCabal also has the ability to suggest dependency version bounds that conform to heNhsNhthhZjµubjD)r¼}r½(hYX`Package Versioning Policy`_jGKhZjµhgjHhi}r¾(UnameXPackage Versioning Policyjƒj hn]hm]hk]hl]hq]uhu]r¿h~XPackage Versioning PolicyrÀ…rÁ}rÂ(hYUhZj¼ubaubh~Xm, which is a recommended versioning system for publicly released Cabal packages. This is done by running the rÃ…rÄ}rÅ(hYXm, which is a recommended versioning system for publicly released Cabal packages. This is done by running the heNhsNhthhZjµubhä)rÆ}rÇ(hYX``gen-bounds``hi}rÈ(hk]hl]hm]hn]hq]uhZjµhu]rÉh~X gen-boundsrÊ…rË}rÌ(hYUhZjÆubahghìubh~X command:rÍ…rÎ}rÏ(hYX command:heNhsNhthhZjµubeubjÑ)rÐ}rÑ(hYX$ cabal gen-boundshZj¦hehfhgjÔhi}rÒ(j‰jXconsolejÖj×hn]hm]hk]j}hl]hq]uhsMhthhu]rÓh~X$ cabal gen-boundsrÔ…rÕ}rÖ(hYUhZjÐubaubh‚)r×}rØ(hYXVFor example, given the following dependencies specified in :pkg-field:`build-depends`:hZj¦hehfhgh†hi}rÙ(hk]hl]hm]hn]hq]uhsMhthhu]rÚ(h~X;For example, given the following dependencies specified in rÛ…rÜ}rÝ(hYX;For example, given the following dependencies specified in heNhsNhthhZj×ubjp)rÞ}rß(hYX:pkg-field:`build-depends`ràhZj×hehfhgjthi}rá(UreftypeX pkg-fieldjvˆjwX build-dependsU refdomainXcabalrâhn]hm]U refexplicit‰hk]hl]hq]jyjzjjuhsMhu]rãhä)rä}rå(hYjàhi}ræ(hk]hl]rç(jjâXcabal-pkg-fieldrèehm]hn]hq]uhZjÞhu]réh~X build-dependsrê…rë}rì(hYUhZjäubahghìubaubh~X:…rí}rî(hYX:heNhsNhthhZj×ubeubjÑ)rï}rð(hYX*build-depends: foo == 0.5.2 bar == 1.1hZj¦hehfhgjÔhi}rñ(jÖj×hn]hm]hk]hl]hq]uhsMhthhu]ròh~X*build-depends: foo == 0.5.2 bar == 1.1ró…rô}rõ(hYUhZjïubaubh‚)rö}r÷(hYX;``gen-bounds`` will suggest changing them to the following:røhZj¦hehfhgh†hi}rù(hk]hl]hm]hn]hq]uhsMhthhu]rú(hä)rû}rü(hYX``gen-bounds``hi}rý(hk]hl]hm]hn]hq]uhZjöhu]rþh~X gen-boundsrÿ…r }r (hYUhZjûubahghìubh~X- will suggest changing them to the following:r …r }r (hYX- will suggest changing them to the following:heNhsNhthhZjöubeubjÑ)r }r (hYX<build-depends: foo >= 0.5.2 && < 0.6 bar >= 1.1 && < 1.2hZj¦hehfhgjÔhi}r (jÖj×hn]hm]hk]hl]hq]uhsM"hthhu]r h~X<build-depends: foo >= 0.5.2 && < 0.6 bar >= 1.1 && < 1.2r …r }r (hYUhZj ubaubeubh[)r }r (hYUhZjhehfhghhhi}r (hk]hl]hm]hn]r U*listing-outdated-dependency-version-boundsr ahq]r hauhsM'hthhu]r (hw)r }r (hYX*Listing outdated dependency version boundsr hZj hehfhgh{hi}r (hk]hl]hm]hn]hq]uhsM'hthhu]r h~X*Listing outdated dependency version boundsr …r }r (hYj heNhsNhthhZj ubaubh‚)r }r (hYXManually 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.hZj hehfhgh†hi}r (hk]hl]hm]hn]hq]uhsM)hthhu]r (h~X1Manually updating dependency version bounds in a r …r }r! (hYX1Manually updating dependency version bounds in a heNhsNhthhZj ubhä)r" }r# (hYX ``.cabal``hi}r$ (hk]hl]hm]hn]hq]uhZj hu]r% h~X.cabalr& …r' }r( (hYUhZj" ubahghìubh~X\ file or a freeze file can be tedious, especially when there’s a lot of dependencies. The r) …r* }r+ (hYXZ file or a freeze file can be tedious, especially when there's a lot of dependencies. The heNhsNhthhZj ubhä)r, }r- (hYX``cabal outdated``hi}r. (hk]hl]hm]hn]hq]uhZj hu]r/ h~Xcabal outdatedr0 …r1 }r2 (hYUhZj, ubahghì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 r3 …r4 }r5 (hYX¨ 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 heNhsNhthhZj ubhä)r6 }r7 (hYX``build-depends``hi}r8 (hk]hl]hm]hn]hq]uhZj hu]r9 h~X build-dependsr: …r; }r< (hYUhZj6 ubahghìubh~X field. The r= …r> }r? (hYX field. The heNhsNhthhZj ubhä)r@ }rA (hYX ``outdated``hi}rB (hk]hl]hm]hn]hq]uhZj hu]rC h~XoutdatedrD …rE }rF (hYUhZj@ ubahghì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.rG …rH }rI (hYX¤ 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.heNhsNhthhZj ubeubh‚)rJ }rK (hYX>The following flags are supported by the ``outdated`` command:rL hZj hehfhgh†hi}rM (hk]hl]hm]hn]hq]uhsM3hthhu]rN (h~X)The following flags are supported by the rO …rP }rQ (hYX)The following flags are supported by the heNhsNhthhZjJ ubhä)rR }rS (hYX ``outdated``hi}rT (hk]hl]hm]hn]hq]uhZjJ hu]rU h~XoutdatedrV …rW }rX (hYUhZjR ubahghìubh~X command:rY …rZ }r[ (hYX command:heNhsNhthhZjJ ubeubj)r\ }r] (hYUhZj hehfhgjhi}r^ (hk]hl]hm]hn]hq]uhsNhthhu]r_ (j)r` }ra (hYXà``--freeze-file`` Read dependency version bounds from the freeze file (``cabal.config``) instead of the package description file (``$PACKAGENAME.cabal``). ``--v1-freeze-file`` is an alias for this flag starting in Cabal 2.4.hZj\ hehfhgjhi}rb (hk]hl]hm]hn]hq]uhsM7hu]rc (j!)rd }re (hYX``--freeze-file``rf hZj` hehfhgj%hi}rg (hk]hl]hm]hn]hq]uhsM7hu]rh hä)ri }rj (hYjf hi}rk (hk]hl]hm]hn]hq]uhZjd hu]rl h~X --freeze-filerm …rn }ro (hYUhZji ubahghìubaubj8)rp }rq (hYUhi}rr (hk]hl]hm]hn]hq]uhZj` hu]rs h‚)rt }ru (hYXÎRead dependency version bounds from the freeze file (``cabal.config``) instead of the package description file (``$PACKAGENAME.cabal``). ``--v1-freeze-file`` is an alias for this flag starting in Cabal 2.4.hZjp hehfhgh†hi}rv (hk]hl]hm]hn]hq]uhsM6hu]rw (h~X5Read dependency version bounds from the freeze file (rx …ry }rz (hYX5Read dependency version bounds from the freeze file (hZjt ubhä)r{ }r| (hYX``cabal.config``hi}r} (hk]hl]hm]hn]hq]uhZjt hu]r~ h~X cabal.configr …r€ }r (hYUhZj{ ubahghìubh~X+) instead of the package description file (r‚ …rƒ }r„ (hYX+) instead of the package description file (hZjt ubhä)r… }r† (hYX``$PACKAGENAME.cabal``hi}r‡ (hk]hl]hm]hn]hq]uhZjt hu]rˆ h~X$PACKAGENAME.cabalr‰ …rŠ }r‹ (hYUhZj… ubahghìubh~X). rŒ …r }rŽ (hYX). hZjt ubhä)r }r (hYX``--v1-freeze-file``hi}r‘ (hk]hl]hm]hn]hq]uhZjt hu]r’ h~X--v1-freeze-filer“ …r” }r• (hYUhZj ubahghìubh~X1 is an alias for this flag starting in Cabal 2.4.r– …r— }r˜ (hYX1 is an alias for this flag starting in Cabal 2.4.hZjt ubeubahgjRubeubj)r™ }rš (hYXé``--new-freeze-file`` Read dependency version bounds from the new-style freeze file (by default, ``cabal.project.freeze``) instead of the package description file. ``--v2-freeze-file`` is an alias for this flag starting in Cabal 2.4.hZj\ hehfhgjhi}r› (hk]hl]hm]hn]hq]uhsM<hthhu]rœ (j!)r }rž (hYX``--new-freeze-file``rŸ hZj™ hehfhgj%hi}r  (hk]hl]hm]hn]hq]uhsM<hu]r¡ hä)r¢ }r£ (hYjŸ hi}r¤ (hk]hl]hm]hn]hq]uhZj hu]r¥ h~X--new-freeze-filer¦ …r§ }r¨ (hYUhZj¢ ubahghìubaubj8)r© }rª (hYUhi}r« (hk]hl]hm]hn]hq]uhZj™ hu]r¬ h‚)r­ }r® (hYXÓRead dependency version bounds from the new-style freeze file (by default, ``cabal.project.freeze``) instead of the package description file. ``--v2-freeze-file`` is an alias for this flag starting in Cabal 2.4.hZj© hehfhgh†hi}r¯ (hk]hl]hm]hn]hq]uhsM:hu]r° (h~XKRead dependency version bounds from the new-style freeze file (by default, r± …r² }r³ (hYXKRead dependency version bounds from the new-style freeze file (by default, hZj­ ubhä)r´ }rµ (hYX``cabal.project.freeze``hi}r¶ (hk]hl]hm]hn]hq]uhZj­ hu]r· h~Xcabal.project.freezer¸ …r¹ }rº (hYUhZj´ ubahghìubh~X+) instead of the package description file. r» …r¼ }r½ (hYX+) instead of the package description file. hZj­ ubhä)r¾ }r¿ (hYX``--v2-freeze-file``hi}rÀ (hk]hl]hm]hn]hq]uhZj­ hu]rÁ h~X--v2-freeze-filer …rà }rÄ (hYUhZj¾ ubahghìubh~X1 is an alias for this flag starting in Cabal 2.4.rÅ …rÆ }rÇ (hYX1 is an alias for this flag starting in Cabal 2.4.hZj­ ubeubahgjRubeubj)rÈ }rÉ (hYXw``--project-file`` *PROJECTFILE* :since: 2.4 Read dependendency version bounds from the new-style freeze file related to the named project file (i.e., ``$PROJECTFILE.freeze``) instead of the package desctription file. If multiple ``--project-file`` flags are provided, only the final one is considered. This flag must only be passed in when ``--new-freeze-file`` is present.hZj\ hehfhgjhi}rÊ (hk]hl]hm]hn]hq]uhsMDhthhu]rË (j!)rÌ }rÍ (hYX ``--project-file`` *PROJECTFILE*rÎ hZjÈ hehfhgj%hi}rÏ (hk]hl]hm]hn]hq]uhsMDhu]rÐ (hä)rÑ }rÒ (hYX``--project-file``hi}rÓ (hk]hl]hm]hn]hq]uhZjÌ hu]rÔ h~X--project-filerÕ …rÖ }r× (hYUhZjÑ ubahghìubh~X …rØ }rÙ (hYX hZjÌ ubhÄ)rÚ }rÛ (hYX *PROJECTFILE*hi}rÜ (hk]hl]hm]hn]hq]uhZjÌ hu]rÝ h~X PROJECTFILErÞ …rß }rà (hYUhZjÚ ubahghÌubeubj8)rá }râ (hYUhi}rã (hk]hl]hm]hn]hq]uhZjÈ hu]rä (j5)rå }ræ (hYUhi}rç (hk]hl]hm]hn]hq]uhZjá hu]rè j;)ré }rê (hYUhZjå hehfhgj>hi}rë (hk]hl]hm]hn]hq]uhsM?hu]rì (jA)rí }rî (hYXsincerï hZjé hehfhgjEhi}rð (hk]hl]hm]hn]hq]uhsKhu]rñ h~Xsincerò …ró }rô (hYjï hZjí ubaubjK)rõ }rö (hYX2.4 hi}r÷ (hk]hl]hm]hn]hq]uhZjé hu]rø h‚)rù }rú (hYX2.4rû hZjõ hehfhgh†hi}rü (hk]hl]hm]hn]hq]uhsM?hu]rý h~X2.4rþ …rÿ }r!(hYjû hZjù ubaubahgjXubeubahgj8ubh‚)r!}r!(hYXIRead dependendency version bounds from the new-style freeze file related to the named project file (i.e., ``$PROJECTFILE.freeze``) instead of the package desctription file. If multiple ``--project-file`` flags are provided, only the final one is considered. This flag must only be passed in when ``--new-freeze-file`` is present.hZjá hehfhgh†hi}r!(hk]hl]hm]hn]hq]uhsMAhu]r!(h~XjRead dependendency version bounds from the new-style freeze file related to the named project file (i.e., r!…r!}r!(hYXjRead dependendency version bounds from the new-style freeze file related to the named project file (i.e., hZj!ubhä)r!}r !(hYX``$PROJECTFILE.freeze``hi}r !(hk]hl]hm]hn]hq]uhZj!hu]r !h~X$PROJECTFILE.freezer !…r !}r!(hYUhZj!ubahghìubh~X8) instead of the package desctription file. If multiple r!…r!}r!(hYX8) instead of the package desctription file. If multiple hZj!ubhä)r!}r!(hYX``--project-file``hi}r!(hk]hl]hm]hn]hq]uhZj!hu]r!h~X--project-filer!…r!}r!(hYUhZj!ubahghìubh~X] flags are provided, only the final one is considered. This flag must only be passed in when r!…r!}r!(hYX] flags are provided, only the final one is considered. This flag must only be passed in when hZj!ubhä)r!}r!(hYX``--new-freeze-file``hi}r!(hk]hl]hm]hn]hq]uhZj!hu]r!h~X--new-freeze-filer !…r!!}r"!(hYUhZj!ubahghìubh~X is present.r#!…r$!}r%!(hYX is present.hZj!ubeubehgjRubeubj)r&!}r'!(hYXP``--simple-output`` Print only the names of outdated dependencies, one per line.hZj\ hehfhgjhi}r(!(hk]hl]hm]hn]hq]uhsMFhthhu]r)!(j!)r*!}r+!(hYX``--simple-output``r,!hZj&!hehfhgj%hi}r-!(hk]hl]hm]hn]hq]uhsMFhu]r.!hä)r/!}r0!(hYj,!hi}r1!(hk]hl]hm]hn]hq]uhZj*!hu]r2!h~X--simple-outputr3!…r4!}r5!(hYUhZj/!ubahghìubaubj8)r6!}r7!(hYUhi}r8!(hk]hl]hm]hn]hq]uhZj&!hu]r9!h‚)r:!}r;!(hYX<Print only the names of outdated dependencies, one per line.r!h~X<Print only the names of outdated dependencies, one per line.r?!…r@!}rA!(hYj 1.9 && < 2.0``. ``--minor`` can also be used without arguments, in that case major version bumps are ignored for all packages. hZj\ hehfhgjhi}r³!(hk]hl]hm]hn]hq]uhsMUhthhu]r´!(j!)rµ!}r¶!(hYX``--minor`` *[PACKAGENAMES]*r·!hZj±!hehfhgj%hi}r¸!(hk]hl]hm]hn]hq]uhsMUhu]r¹!(hä)rº!}r»!(hYX ``--minor``hi}r¼!(hk]hl]hm]hn]hq]uhZjµ!hu]r½!h~X--minorr¾!…r¿!}rÀ!(hYUhZjº!ubahghìubh~X …rÁ!}rÂ!(hYX hZjµ!ubhÄ)rÃ!}rÄ!(hYX*[PACKAGENAMES]*hi}rÅ!(hk]hl]hm]hn]hq]uhZjµ!hu]rÆ!h~X[PACKAGENAMES]rÇ!…rÈ!}rÉ!(hYUhZjÃ!ubahghÌubeubj8)rÊ!}rË!(hYUhi}rÌ!(hk]hl]hm]hn]hq]uhZj±!hu]rÍ!h‚)rÎ!}rÏ!(hYX¸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.hZjÊ!hehfhgh†hi}rÐ!(hk]hl]hm]hn]hq]uhsMPhu]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Ô!(hYXZIgnore major version bumps for these packages. E.g. if there's a version 2.0 of a package hZjÎ!ubhä)rÕ!}rÖ!(hYX``pkg``hi}r×!(hk]hl]hm]hn]hq]uhZjÎ!hu]rØ!h~XpkgrÙ!…rÚ!}rÛ!(hYUhZjÕ!ubahghìubh~X9 on Hackage and the freeze file specifies the constraint rÜ!…rÝ!}rÞ!(hYX9 on Hackage and the freeze file specifies the constraint hZjÎ!ubhä)rß!}rà!(hYX``pkg == 1.9``hi}rá!(hk]hl]hm]hn]hq]uhZjÎ!hu]râ!h~X pkg == 1.9rã!…rä!}rå!(hYUhZjß!ubahghìubh~X, ræ!…rç!}rè!(hYX, hZjÎ!ubhä)ré!}rê!(hYX'``cabal outdated --freeze --minor=pkg``hi}rë!(hk]hl]hm]hn]hq]uhZjÎ!hu]rì!h~X#cabal outdated --freeze --minor=pkgrí!…rî!}rï!(hYUhZjé!ubahghìubh~X will only consider the rð!…rñ!}rò!(hYX will only consider the hZjÎ!ubhä)ró!}rô!(hYX``pkg``hi}rõ!(hk]hl]hm]hn]hq]uhZjÎ!hu]rö!h~Xpkgr÷!…rø!}rù!(hYUhZjó!ubahghìubh~X& outdated when there’s a version of rú!…rû!}rü!(hYX$ outdated when there's a version of hZjÎ!ubhä)rý!}rþ!(hYX``pkg``hi}rÿ!(hk]hl]hm]hn]hq]uhZjÎ!hu]r"h~Xpkgr"…r"}r"(hYUhZjý!ubahghìubh~X on Hackage satisfying r"…r"}r"(hYX on Hackage satisfying hZjÎ!ubhä)r"}r"(hYX``pkg > 1.9 && < 2.0``hi}r "(hk]hl]hm]hn]hq]uhZjÎ!hu]r "h~Xpkg > 1.9 && < 2.0r "…r "}r "(hYUhZj"ubahghìubh~X. r"…r"}r"(hYX. hZjÎ!ubhä)r"}r"(hYX ``--minor``hi}r"(hk]hl]hm]hn]hq]uhZjÎ!hu]r"h~X--minorr"…r"}r"(hYUhZj"ubahghìubh~Xc can also be used without arguments, in that case major version bumps are ignored for all packages.r"…r"}r"(hYXc can also be used without arguments, in that case major version bumps are ignored for all packages.hZjÎ!ubeubahgjRubeubeubh‚)r"}r"(hYX Examples:r"hZj hehfhgh†hi}r"(hk]hl]hm]hn]hq]uhsMWhthhu]r"h~X Examples:r "…r!"}r""(hYj"heNhsNhthhZj"ubaubjÑ)r#"}r$"(hYXM$ 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)hZj hehfhgjÔhi}r%"(j‰jXconsolejÖj×hn]hm]hk]j}hl]hq]uhsMYhthhu]r&"h~XM$ cd /some/package $ cabal outdated Outdated dependencies: haskell-src-exts <1.17 (latest: 1.19.1) language-javascript <0.6 (latest: 0.6.0.9) unix ==2.7.2.0 (latest: 2.7.2.1) $ cabal outdated --simple-output haskell-src-exts language-javascript unix $ cabal outdated --ignore=haskell-src-exts Outdated dependencies: language-javascript <0.6 (latest: 0.6.0.9) unix ==2.7.2.0 (latest: 2.7.2.1) $ cabal outdated --ignore=haskell-src-exts,language-javascript,unix All dependencies are up to date. $ cabal outdated --ignore=haskell-src-exts,language-javascript,unix -q $ echo $? 0 $ cd /some/other/package $ cabal outdated --freeze-file Outdated dependencies: HTTP ==4000.3.3 (latest: 4000.3.4) HUnit ==1.3.1.1 (latest: 1.5.0.0) $ cabal outdated --freeze-file --ignore=HTTP --minor=HUnit Outdated dependencies: HUnit ==1.3.1.1 (latest: 1.3.1.2)r'"…r("}r)"(hYUhZj#"ubaubeubeubh[)r*"}r+"(hYUhZhahehfhghhhi}r,"(hk]hl]hm]hn]r-"U executablesr."ahq]r/"hauhsMhthhu]r0"(hw)r1"}r2"(hYX Executablesr3"hZj*"hehfhgh{hi}r4"(hk]hl]hm]hn]hq]uhsMhthhu]r5"h~X Executablesr6"…r7"}r8"(hYj3"heNhsNhthhZj1"ubaubjþ)r9"}r:"(hYUhZj*"hehfhgjhi}r;"(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r<"}r="(hYUhZj*"hehfhgjhi}r>"(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-sectionr?"j j?"uhsNhthhu]r@"(j)rA"}rB"(hYXexecutable namehZj<"hehfhgjhi}rC"(hn]rD"X!pkg-section-executable-executablerE"ahm]hk]hl]hq]j‰uhsNhthhu]rF"(jþ)rG"}rH"(hYUhZjA"hehfhgjhi}rI"(hn]hm]hk]hl]hq]Uentries]rJ"(jX,executable:executable; package.cabal sectionjE"UNtrK"auhsNhthhu]ubj)rL"}rM"(hYX executablerN"hZjA"hehfhgj!hi}rO"(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rP"h~X executablerQ"…rR"}rS"(hYUheNhsNhthhZjL"ubaubj')rT"}rU"(hYU hZjA"hehfhgj*hi}rV"(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rW"h~X …rX"}rY"(hYUheNhsNhthhZjT"ubaubj¦)rZ"}r["(hYXnamehZjA"hehfhgj©hi}r\"(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r]"h~Xnamer^"…r_"}r`"(hYUheNhsNhthhZjZ"ubaubeubj/)ra"}rb"(hYUhZj<"hehfhgj2hi}rc"(hk]hl]hm]hn]hq]uhsNhthhu]rd"h‚)re"}rf"(hYXë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.rg"hZja"hehfhgh†hi}rh"(hk]hl]hm]hn]hq]uhsM„hthhu]ri"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.rj"…rk"}rl"(hYjg"heNhsNhthhZje"ubaubaubeubh‚)rm"}rn"(hYXŠThe executable may be described using the following fields, as well as build information fields (see the section on `build information`_).hZj*"hehfhgh†hi}ro"(hk]hl]hm]hn]hq]uhsM‰hthhu]rp"(h~XtThe executable may be described using the following fields, as well as build information fields (see the section on rq"…rr"}rs"(hYXtThe executable may be described using the following fields, as well as build information fields (see the section on heNhsNhthhZjm"ubjD)rt"}ru"(hYX`build information`_jGKhZjm"hgjHhi}rv"(UnameXbuild informationhn]hm]hk]hl]hq]jJj\uhu]rw"h~Xbuild informationrx"…ry"}rz"(hYUhZjt"ubaubh~X).r{"…r|"}r}"(hYX).heNhsNhthhZjm"ubeubjþ)r~"}r"(hYUhZj*"hehfhgjhi}r€"(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r"}r‚"(hYUhZj*"hehfhgjhi}rƒ"(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr„"j j„"uhsNhthhu]r…"(j)r†"}r‡"(hYXmain-is: filename (required)hZj"hehfhgjhi}rˆ"(hn]r‰"Xpkg-field-executable-main-isrŠ"ahm]hk]hl]hq]j‰uhsM”hthhu]r‹"(jþ)rŒ"}r"(hYUhZj†"hehfhgjhi}rŽ"(hn]hm]hk]hl]hq]Uentries]r"(jX'executable:main-is; package.cabal fieldjŠ"UNtr"auhsM”hthhu]ubj)r‘"}r’"(hYXmain-isr“"hZj†"hehfhgj!hi}r”"(jÖj×hn]hm]hk]hl]hq]uhsM”hthhu]r•"h~Xmain-isr–"…r—"}r˜"(hYUheNhsNhthhZj‘"ubaubj')r™"}rš"(hYj hZj†"hehfhgj*hi}r›"(jÖj×hn]hm]hk]hl]hq]uhsM”hthhu]rœ"h~X: r"…rž"}rŸ"(hYUheNhsNhthhZj™"ubaubj¦)r "}r¡"(hYXfilename (required)hZj†"hehfhgj©hi}r¢"(jÖj×hn]hm]hk]hl]hq]uhsM”hthhu]r£"h~Xfilename (required)r¤"…r¥"}r¦"(hYUheNhsNhthhZj "ubaubeubj/)r§"}r¨"(hYUhZj"hehfhgj2hi}r©"(hk]hl]hm]hn]hq]uhsM”hthhu]rª"h‚)r«"}r¬"(hYXqThe 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``.hZj§"hehfhgh†hi}r­"(hk]hl]hm]hn]hq]uhsMŽhthhu]r®"(h~XThe name of the r¯"…r°"}r±"(hYXThe name of the heNhsNhthhZj«"ubhä)r²"}r³"(hYX``.hs``hi}r´"(hk]hl]hm]hn]hq]uhZj«"hu]rµ"h~X.hsr¶"…r·"}r¸"(hYUhZj²"ubahghìubh~X or r¹"…rº"}r»"(hYX or heNhsNhthhZj«"ubhä)r¼"}r½"(hYX``.lhs``hi}r¾"(hk]hl]hm]hn]hq]uhZj«"hu]r¿"h~X.lhsrÀ"…rÁ"}rÂ"(hYUhZj¼"ubahghìubh~X file containing the rÃ"…rÄ"}rÅ"(hYX file containing the heNhsNhthhZj«"ubhä)rÆ"}rÇ"(hYX``Main``hi}rÈ"(hk]hl]hm]hn]hq]uhZj«"hu]rÉ"h~XMainrÊ"…rË"}rÌ"(hYUhZjÆ"ubahghìubh~X module. Note that it is the rÍ"…rÎ"}rÏ"(hYX module. Note that it is the heNhsNhthhZj«"ubhä)rÐ"}rÑ"(hYX``.hs``hi}rÒ"(hk]hl]hm]hn]hq]uhZj«"hu]rÓ"h~X.hsrÔ"…rÕ"}rÖ"(hYUhZjÐ"ubahghì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Ù"(hYX™ 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 heNhsNhthhZj«"ubjp)rÚ"}rÛ"(hYX:pkg-field:`hs-source-dirs`rÜ"hZj«"hehfhgjthi}rÝ"(UreftypeX pkg-fieldjvˆjwXhs-source-dirsU refdomainXcabalrÞ"hn]hm]U refexplicit‰hk]hl]hq]jyjzjX executablerß"uhsMŽhu]rà"hä)rá"}râ"(hYjÜ"hi}rã"(hk]hl]rä"(jjÞ"Xcabal-pkg-fieldrå"ehm]hn]hq]uhZjÚ"hu]ræ"h~Xhs-source-dirsrç"…rè"}ré"(hYUhZjá"ubahghìubaubh~XP. Further, while the name of the file may vary, the module itself must be named rê"…rë"}rì"(hYXP. Further, while the name of the file may vary, the module itself must be named heNhsNhthhZj«"ubhä)rí"}rî"(hYX``Main``hi}rï"(hk]hl]hm]hn]hq]uhZj«"hu]rð"h~XMainrñ"…rò"}ró"(hYUhZjí"ubahghìubh~X.…rô"}rõ"(hYX.heNhsNhthhZj«"ubeubaubeubjþ)rö"}r÷"(hYUhZj*"hehfhgjhi}rø"(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rù"}rú"(hYUhZj*"hehfhgjhi}rû"(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrü"j jü"uhsNhthhu]rý"(j)rþ"}rÿ"(hYX scope: tokenhZjù"hehfhgjhi}r#(hn]r#Xpkg-field-executable-scoper#ahm]hk]hl]hq]j‰uhsNhthhu]r#(jþ)r#}r#(hYUhZjþ"hehfhgjhi}r#(hn]hm]hk]hl]hq]Uentries]r#(jX%executable:scope; package.cabal fieldj#UNtr#auhsNhthhu]ubj)r #}r #(hYXscoper #hZjþ"hehfhgj!hi}r #(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r #h~Xscoper#…r#}r#(hYUheNhsNhthhZj #ubaubj')r#}r#(hYj hZjþ"hehfhgj*hi}r#(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r#h~X: r#…r#}r#(hYUheNhsNhthhZj#ubaubj¦)r#}r#(hYXtokenhZjþ"hehfhgj©hi}r#(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r#h~Xtokenr#…r#}r#(hYUheNhsNhthhZj#ubaubeubj/)r#}r #(hYUhZjù"hehfhgj2hi}r!#(hk]hl]hm]hn]hq]uhsNhthhu]r"#(j5)r##}r$#(hYUhZj#hehfhgj8hi}r%#(hk]hl]hm]hn]hq]uhsNhthhu]r&#j;)r'#}r(#(hYUhZj##hehfhgj>hi}r)#(hk]hl]hm]hn]hq]uhsNhthhu]r*#(jA)r+#}r,#(hYjDhZj'#hehfhgjEhi}r-#(hk]hl]hm]hn]hq]uhsKhu]r.#h~XSincer/#…r0#}r1#(hYUhZj+#ubaubjK)r2#}r3#(hYU Cabal 2.0r4#hi}r5#(hk]hl]hm]hn]hq]uhZj'#hu]r6#h‚)r7#}r8#(hYj4#hi}r9#(hk]hl]hm]hn]hq]uhZj2#hu]r:#h~X Cabal 2.0r;#…r<#}r=#(hYUhZj7#ubahgh†ubahgjXubeubaubh‚)r>#}r?#(hYXÀ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`.hZj#hehfhgh†hi}r@#(hk]hl]hm]hn]hq]uhsM˜hthhu]rA#(h~XWhether the executable is rB#…rC#}rD#(hYXWhether the executable is heNhsNhthhZj>#ubhä)rE#}rF#(hYX ``public``hi}rG#(hk]hl]hm]hn]hq]uhZj>#hu]rH#h~XpublicrI#…rJ#}rK#(hYUhZjE#ubahghìubh~X (default) or rL#…rM#}rN#(hYX (default) or heNhsNhthhZj>#ubhä)rO#}rP#(hYX ``private``hi}rQ#(hk]hl]hm]hn]hq]uhZj>#hu]rR#h~XprivaterS#…rT#}rU#(hYUhZjO#ubahghìubh~Xf, i.e. meant to be run by other programs rather than the user. Private executables are installed into rV#…rW#}rX#(hYXf, i.e. meant to be run by other programs rather than the user. Private executables are installed into heNhsNhthhZj>#ubcdocutils.nodes title_reference rY#)rZ#}r[#(hYX`$libexecdir/$libexecsubdir`hi}r\#(hk]hl]hm]hn]hq]uhZj>#hu]r]#h~X$libexecdir/$libexecsubdirr^#…r_#}r`#(hYUhZjZ#ubahgUtitle_referencera#ubh~X.…rb#}rc#(hYX.heNhsNhthhZj>#ubeubeubeubh[)rd#}re#(hYUhZj*"hehfhghhhi}rf#(hk]hl]hm]hn]rg#Urunning-executablesrh#ahq]ri#h auhsMhthhu]rj#(hw)rk#}rl#(hYXRunning executablesrm#hZjd#hehfhgh{hi}rn#(hk]hl]hm]hn]hq]uhsMhthhu]ro#h~XRunning executablesrp#…rq#}rr#(hYjm#heNhsNhthhZjk#ubaubh‚)rs#}rt#(hYXOYou can have Cabal build and run your executables by using the ``run`` command:hZjd#hehfhgh†hi}ru#(hk]hl]hm]hn]hq]uhsMŸhthhu]rv#(h~X?You can have Cabal build and run your executables by using the rw#…rx#}ry#(hYX?You can have Cabal build and run your executables by using the heNhsNhthhZjs#ubhä)rz#}r{#(hYX``run``hi}r|#(hk]hl]hm]hn]hq]uhZjs#hu]r}#h~Xrunr~#…r#}r€#(hYUhZjz#ubahghìubh~X command:r#…r‚#}rƒ#(hYX command:heNhsNhthhZjs#ubeubjÑ)r„#}r…#(hYX,$ cabal run EXECUTABLE [-- EXECUTABLE_FLAGS]hZjd#hehfhgjÔhi}r†#(j‰jXconsolejÖj×hn]hm]hk]j}hl]hq]uhsM¢hthhu]r‡#h~X,$ cabal run EXECUTABLE [-- EXECUTABLE_FLAGS]rˆ#…r‰#}rŠ#(hYUhZj„#ubaubh‚)r‹#}rŒ#(hYXgThis 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``.hZjd#hehfhgh†hi}r#(hk]hl]hm]hn]hq]uhsM¦hthhu]rŽ#(h~X:This command will configure, build and run the executable r#…r#}r‘#(hYX:This command will configure, build and run the executable heNhsNhthhZj‹#ubhä)r’#}r“#(hYX``EXECUTABLE``hi}r”#(hk]hl]hm]hn]hq]uhZj‹#hu]r•#h~X EXECUTABLEr–#…r—#}r˜#(hYUhZj’#ubahghìubh~XM. The double dash separator is required to distinguish executable flags from r™#…rš#}r›#(hYXM. The double dash separator is required to distinguish executable flags from heNhsNhthhZj‹#ubhä)rœ#}r#(hYX``run``hi}rž#(hk]hl]hm]hn]hq]uhZj‹#hu]rŸ#h~Xrunr #…r¡#}r¢#(hYUhZjœ#ubahghì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¥#(hYX„'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 heNhsNhthhZj‹#ubhä)r¦#}r§#(hYX``cabal help run``hi}r¨#(hk]hl]hm]hn]hq]uhZj‹#hu]r©#h~Xcabal help runrª#…r«#}r¬#(hYUhZj¦#ubahghìubh~X' for a list of options you can pass to r­#…r®#}r¯#(hYX' for a list of options you can pass to heNhsNhthhZj‹#ubhä)r°#}r±#(hYX ``cabal run``hi}r²#(hk]hl]hm]hn]hq]uhZj‹#hu]r³#h~X cabal runr´#…rµ#}r¶#(hYUhZj°#ubahghìubh~X.…r·#}r¸#(hYX.heNhsNhthhZj‹#ubeubeubeubh[)r¹#}rº#(hYUhZhahehfhghhhi}r»#(hk]hl]hm]hn]r¼#U test-suitesr½#ahq]r¾#hauhsM®hthhu]r¿#(hw)rÀ#}rÁ#(hYX Test suitesrÂ#hZj¹#hehfhgh{hi}rÃ#(hk]hl]hm]hn]hq]uhsM®hthhu]rÄ#h~X Test suitesrÅ#…rÆ#}rÇ#(hYjÂ#heNhsNhthhZjÀ#ubaubjþ)rÈ#}rÉ#(hYUhZj¹#hehfhgjhi}rÊ#(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rË#}rÌ#(hYUhZj¹#hehfhgjhi}rÍ#(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-sectionrÎ#j jÎ#uhsNhthhu]rÏ#(j)rÐ#}rÑ#(hYXtest-suite namehZjË#hehfhgjhi}rÒ#(hn]rÓ#X!pkg-section-test-suite-test-suiterÔ#ahm]hk]hl]hq]j‰uhsNhthhu]rÕ#(jþ)rÖ#}r×#(hYUhZjÐ#hehfhgjhi}rØ#(hn]hm]hk]hl]hq]Uentries]rÙ#(jX,test-suite:test-suite; package.cabal sectionjÔ#UNtrÚ#auhsNhthhu]ubj)rÛ#}rÜ#(hYX test-suiterÝ#hZjÐ#hehfhgj!hi}rÞ#(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rß#h~X test-suiterà#…rá#}râ#(hYUheNhsNhthhZjÛ#ubaubj')rã#}rä#(hYU hZjÐ#hehfhgj*hi}rå#(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]ræ#h~X …rç#}rè#(hYUheNhsNhthhZjã#ubaubj¦)ré#}rê#(hYXnamehZjÐ#hehfhgj©hi}rë#(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rì#h~Xnamerí#…rî#}rï#(hYUheNhsNhthhZjé#ubaubeubj/)rð#}rñ#(hYUhZjË#hehfhgj2hi}rò#(hk]hl]hm]hn]hq]uhsNhthhu]ró#h‚)rô#}rõ#(hYXTest 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.rö#hZjð#hehfhgh†hi}r÷#(hk]hl]hm]hn]hq]uhsM³hthhu]rø#h~X“Test suite sections (if present) describe package test suites and must have an argument after the section label, which defines the name of the test suite. This is a freeform argument, but may not contain spaces. It should be unique among the names of the package’s other test suites, the package’s executables, and the package itself. Using test suite sections requires at least Cabal version 1.9.2.rù#…rú#}rû#(hYjö#heNhsNhthhZjô#ubaubaubeubh‚)rü#}rý#(hYXŠThe test suite may be described using the following fields, as well as build information fields (see the section on `build information`_).hZj¹#hehfhgh†hi}rþ#(hk]hl]hm]hn]hq]uhsMºhthhu]rÿ#(h~XtThe test suite may be described using the following fields, as well as build information fields (see the section on r$…r$}r$(hYXtThe test suite may be described using the following fields, as well as build information fields (see the section on heNhsNhthhZjü#ubjD)r$}r$(hYX`build information`_jGKhZjü#hgjHhi}r$(UnameXbuild informationhn]hm]hk]hl]hq]jJj\uhu]r$h~Xbuild informationr$…r$}r $(hYUhZj$ubaubh~X).r $…r $}r $(hYX).heNhsNhthhZjü#ubeubjþ)r $}r$(hYUhZj¹#hehfhgjhi}r$(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r$}r$(hYUhZj¹#hehfhgjhi}r$(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr$j j$uhsNhthhu]r$(j)r$}r$(hYXtype: interface (required)hZj$hehfhgjhi}r$(hn]r$Xpkg-field-test-suite-typer$ahm]hk]hl]hq]j‰uhsMÃhthhu]r$(jþ)r$}r$(hYUhZj$hehfhgjhi}r$(hn]hm]hk]hl]hq]Uentries]r$(jX$test-suite:type; package.cabal fieldj$UNtr$auhsMÃhthhu]ubj)r $}r!$(hYXtyper"$hZj$hehfhgj!hi}r#$(jÖj×hn]hm]hk]hl]hq]uhsMÃhthhu]r$$h~Xtyper%$…r&$}r'$(hYUheNhsNhthhZj $ubaubj')r($}r)$(hYj hZj$hehfhgj*hi}r*$(jÖj×hn]hm]hk]hl]hq]uhsMÃhthhu]r+$h~X: r,$…r-$}r.$(hYUheNhsNhthhZj($ubaubj¦)r/$}r0$(hYXinterface (required)hZj$hehfhgj©hi}r1$(jÖj×hn]hm]hk]hl]hq]uhsMÃhthhu]r2$h~Xinterface (required)r3$…r4$}r5$(hYUheNhsNhthhZj/$ubaubeubj/)r6$}r7$(hYUhZj$hehfhgj2hi}r8$(hk]hl]hm]hn]hq]uhsMÃhthhu]r9$h‚)r:$}r;$(hYXÜ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.hZj6$hehfhgh†hi}r<$(hk]hl]hm]hn]hq]uhsM¿hthhu]r=$(h~XcThe interface type and version of the test suite. Cabal supports two test suite interfaces, called r>$…r?$}r@$(hYXcThe interface type and version of the test suite. Cabal supports two test suite interfaces, called heNhsNhthhZj:$ubhä)rA$}rB$(hYX``exitcode-stdio-1.0``hi}rC$(hk]hl]hm]hn]hq]uhZj:$hu]rD$h~Xexitcode-stdio-1.0rE$…rF$}rG$(hYUhZjA$ubahghìubh~X and rH$…rI$}rJ$(hYX and heNhsNhthhZj:$ubhä)rK$}rL$(hYX``detailed-0.9``hi}rM$(hk]hl]hm]hn]hq]uhZj:$hu]rN$h~X detailed-0.9rO$…rP$}rQ$(hYUhZjK$ubahghìubh~XN. Each of these types may require or disallow other fields as described below.rR$…rS$}rT$(hYXN. Each of these types may require or disallow other fields as described below.heNhsNhthhZj:$ubeubaubeubh‚)rU$}rV$(hYX%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.hZj¹#hehfhgh†hi}rW$(hk]hl]hm]hn]hq]uhsMÄhthhu]rX$(h~XTest suites using the rY$…rZ$}r[$(hYXTest suites using the heNhsNhthhZjU$ubhä)r\$}r]$(hYX``exitcode-stdio-1.0``hi}r^$(hk]hl]hm]hn]hq]uhZjU$hu]r_$h~Xexitcode-stdio-1.0r`$…ra$}rb$(hYUhZj\$ubahghì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 rc$…rd$}re$(hYX¾ 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 heNhsNhthhZjU$ubhä)rf$}rg$(hYX``exitcode-stdio-1.0``hi}rh$(hk]hl]hm]hn]hq]uhZjU$hu]ri$h~Xexitcode-stdio-1.0rj$…rk$}rl$(hYUhZjf$ubahghìubh~X type requires the rm$…rn$}ro$(hYX type requires the heNhsNhthhZjU$ubhä)rp$}rq$(hYX ``main-is``hi}rr$(hk]hl]hm]hn]hq]uhZjU$hu]rs$h~Xmain-isrt$…ru$}rv$(hYUhZjp$ubahghìubh~X field.rw$…rx$}ry$(hYX field.heNhsNhthhZjU$ubeubjþ)rz$}r{$(hYUhZj¹#hehfhgjhi}r|$(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r}$}r~$(hYUhZj¹#hehfhgjhi}r$(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr€$j j€$uhsNhthhu]r$(j)r‚$}rƒ$(hYXmain-is: filenamehZj}$hehfhgjhi}r„$(hn]r…$Xpkg-field-test-suite-main-isr†$ahm]hk]hl]hq]j‰uhsNhthhu]r‡$(jþ)rˆ$}r‰$(hYUhZj‚$hehfhgjhi}rŠ$(hn]hm]hk]hl]hq]Uentries]r‹$(jX'test-suite:main-is; package.cabal fieldj†$UNtrŒ$auhsNhthhu]ubj)r$}rŽ$(hYXmain-isr$hZj‚$hehfhgj!hi}r$(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r‘$h~Xmain-isr’$…r“$}r”$(hYUheNhsNhthhZj$ubaubj')r•$}r–$(hYj hZj‚$hehfhgj*hi}r—$(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r˜$h~X: r™$…rš$}r›$(hYUheNhsNhthhZj•$ubaubj¦)rœ$}r$(hYXfilenamehZj‚$hehfhgj©hi}rž$(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rŸ$h~Xfilenamer $…r¡$}r¢$(hYUheNhsNhthhZjœ$ubaubeubj/)r£$}r¤$(hYUhZj}$hehfhgj2hi}r¥$(hk]hl]hm]hn]hq]uhsNhthhu]r¦$(j5)r§$}r¨$(hYUhZj£$hehfhgj8hi}r©$(hk]hl]hm]hn]hq]uhsNhthhu]rª$(j;)r«$}r¬$(hYUhZj§$hehfhgj>hi}r­$(hk]hl]hm]hn]hq]uhsMÍhthhu]r®$(jA)r¯$}r°$(hYXrequiredhZj«$hehfhgjEhi}r±$(hk]hl]hm]hn]hq]uhsKhu]r²$h~XRequiredr³$…r´$}rµ$(hYUhZj¯$ubaubjK)r¶$}r·$(hYX``exitcode-stdio-1.0``r¸$hi}r¹$(hk]hl]hm]hn]hq]uhZj«$hu]rº$h‚)r»$}r¼$(hYj¸$hZj¶$hehfhgh†hi}r½$(hk]hl]hm]hn]hq]uhsMÍhu]r¾$hä)r¿$}rÀ$(hYj¸$hi}rÁ$(hk]hl]hm]hn]hq]uhZj»$hu]rÂ$h~Xexitcode-stdio-1.0rÃ$…rÄ$}rÅ$(hYUhZj¿$ubahghìubaubahgjXubeubj;)rÆ$}rÇ$(hYUhZj§$hehfhgj>hi}rÈ$(hk]hl]hm]hn]hq]uhsMÎhthhu]rÉ$(jA)rÊ$}rË$(hYX disallowedhZjÆ$hehfhgjEhi}rÌ$(hk]hl]hm]hn]hq]uhsKhu]rÍ$h~X DisallowedrÎ$…rÏ$}rÐ$(hYUhZjÊ$ubaubjK)rÑ$}rÒ$(hYX``detailed-0.9`` hi}rÓ$(hk]hl]hm]hn]hq]uhZjÆ$hu]rÔ$h‚)rÕ$}rÖ$(hYX``detailed-0.9``r×$hZjÑ$hehfhgh†hi}rØ$(hk]hl]hm]hn]hq]uhsMÎhu]rÙ$hä)rÚ$}rÛ$(hYj×$hi}rÜ$(hk]hl]hm]hn]hq]uhZjÕ$hu]rÝ$h~X detailed-0.9rÞ$…rß$}rà$(hYUhZjÚ$ubahghìubaubahgjXubeubeubh‚)rá$}râ$(hYXdThe 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.hZj£$hehfhgh†hi}rã$(hk]hl]hm]hn]hq]uhsMÐhthhu]rä$(h~XThe name of the rå$…ræ$}rç$(hYXThe name of the heNhsNhthhZjá$ubhä)rè$}ré$(hYX``.hs``hi}rê$(hk]hl]hm]hn]hq]uhZjá$hu]rë$h~X.hsrì$…rí$}rî$(hYUhZjè$ubahghìubh~X or rï$…rð$}rñ$(hYX or heNhsNhthhZjá$ubhä)rò$}ró$(hYX``.lhs``hi}rô$(hk]hl]hm]hn]hq]uhZjá$hu]rõ$h~X.lhsrö$…r÷$}rø$(hYUhZjò$ubahghìubh~X file containing the rù$…rú$}rû$(hYX file containing the heNhsNhthhZjá$ubhä)rü$}rý$(hYX``Main``hi}rþ$(hk]hl]hm]hn]hq]uhZjá$hu]rÿ$h~XMainr%…r%}r%(hYUhZjü$ubahghìubh~X module. Note that it is the r%…r%}r%(hYX module. Note that it is the heNhsNhthhZjá$ubhä)r%}r%(hYX``.hs``hi}r%(hk]hl]hm]hn]hq]uhZjá$hu]r %h~X.hsr %…r %}r %(hYUhZj%ubahghì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%(hYX™ 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 heNhsNhthhZjá$ubjp)r%}r%(hYX:pkg-field:`hs-source-dirs`r%hZjá$hehfhgjthi}r%(UreftypeX pkg-fieldjvˆjwXhs-source-dirsU refdomainXcabalr%hn]hm]U refexplicit‰hk]hl]hq]jyjzjX test-suiter%uhsMÐhu]r%hä)r%}r%(hYj%hi}r%(hk]hl]r%(jj%Xcabal-pkg-fieldr%ehm]hn]hq]uhZj%hu]r%h~Xhs-source-dirsr%…r%}r%(hYUhZj%ubahghìubaubh~X!. This field is analogous to the r %…r!%}r"%(hYX!. This field is analogous to the heNhsNhthhZjá$ubhä)r#%}r$%(hYX ``main-is``hi}r%%(hk]hl]hm]hn]hq]uhZjá$hu]r&%h~Xmain-isr'%…r(%}r)%(hYUhZj#%ubahghìubh~X field of an executable section.r*%…r+%}r,%(hYX field of an executable section.heNhsNhthhZjá$ubeubeubeubh‚)r-%}r.%(hYXì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.hZj¹#hehfhgh†hi}r/%(hk]hl]hm]hn]hq]uhsM×hthhu]r0%(h~XTest suites using the r1%…r2%}r3%(hYXTest suites using the heNhsNhthhZj-%ubhä)r4%}r5%(hYX``detailed-0.9``hi}r6%(hk]hl]hm]hn]hq]uhZj-%hu]r7%h~X detailed-0.9r8%…r9%}r:%(hYUhZj4%ubahghìubh~X, interface are modules exporting the symbol r;%…r<%}r=%(hYX, interface are modules exporting the symbol heNhsNhthhZj-%ubhä)r>%}r?%(hYX``tests :: IO [Test]``hi}r@%(hk]hl]hm]hn]hq]uhZj-%hu]rA%h~Xtests :: IO [Test]rB%…rC%}rD%(hYUhZj>%ubahghìubh~X. The rE%…rF%}rG%(hYX. The heNhsNhthhZj-%ubhä)rH%}rI%(hYX``Test``hi}rJ%(hk]hl]hm]hn]hq]uhZj-%hu]rK%h~XTestrL%…rM%}rN%(hYUhZjH%ubahghìubh~X type is exported by the module rO%…rP%}rQ%(hYX type is exported by the module heNhsNhthhZj-%ubhä)rR%}rS%(hYX``Distribution.TestSuite``hi}rT%(hk]hl]hm]hn]hq]uhZj-%hu]rU%h~XDistribution.TestSuiterV%…rW%}rX%(hYUhZjR%ubahghìubh~X< provided by Cabal. For more details, see the example below.rY%…rZ%}r[%(hYX< provided by Cabal. For more details, see the example below.heNhsNhthhZj-%ubeubh‚)r\%}r]%(hYX÷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.hZj¹#hehfhgh†hi}r^%(hk]hl]hm]hn]hq]uhsMÜhthhu]r_%(h~XThe r`%…ra%}rb%(hYXThe heNhsNhthhZj\%ubhä)rc%}rd%(hYX``detailed-0.9``hi}re%(hk]hl]hm]hn]hq]uhZj\%hu]rf%h~X detailed-0.9rg%…rh%}ri%(hYUhZjc%ubahghì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 rj%…rk%}rl%(hYXœ 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 heNhsNhthhZj\%ubhä)rm%}rn%(hYX``detailed-0.9``hi}ro%(hk]hl]hm]hn]hq]uhZj\%hu]rp%h~X detailed-0.9rq%…rr%}rs%(hYUhZjm%ubahghìubh~X interface requires the rt%…ru%}rv%(hYX interface requires the heNhsNhthhZj\%ubjp)rw%}rx%(hYX:pkg-field:`test-module`ry%hZj\%hehfhgjthi}rz%(UreftypeX pkg-fieldjvˆjwX test-moduleU refdomainXcabalr{%hn]hm]U refexplicit‰hk]hl]hq]jyjzjj%uhsMÜhu]r|%hä)r}%}r~%(hYjy%hi}r%(hk]hl]r€%(jj{%Xcabal-pkg-fieldr%ehm]hn]hq]uhZjw%hu]r‚%h~X test-modulerƒ%…r„%}r…%(hYUhZj}%ubahghìubaubh~X field.r†%…r‡%}rˆ%(hYX field.heNhsNhthhZj\%ubeubjþ)r‰%}rŠ%(hYUhZj¹#hehfhgjhi}r‹%(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rŒ%}r%(hYUhZj¹#hehfhgjhi}rŽ%(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr%j j%uhsNhthhu]r%(j)r‘%}r’%(hYXtest-module: identifierhZjŒ%hehfhgjhi}r“%(hn]r”%X pkg-field-test-suite-test-moduler•%ahm]hk]hl]hq]j‰uhsMçhthhu]r–%(jþ)r—%}r˜%(hYUhZj‘%hehfhgjhi}r™%(hn]hm]hk]hl]hq]Uentries]rš%(jX+test-suite:test-module; package.cabal fieldj•%UNtr›%auhsMçhthhu]ubj)rœ%}r%(hYX test-modulerž%hZj‘%hehfhgj!hi}rŸ%(jÖj×hn]hm]hk]hl]hq]uhsMçhthhu]r %h~X test-moduler¡%…r¢%}r£%(hYUheNhsNhthhZjœ%ubaubj')r¤%}r¥%(hYj hZj‘%hehfhgj*hi}r¦%(jÖj×hn]hm]hk]hl]hq]uhsMçhthhu]r§%h~X: r¨%…r©%}rª%(hYUheNhsNhthhZj¤%ubaubj¦)r«%}r¬%(hYX identifierhZj‘%hehfhgj©hi}r­%(jÖj×hn]hm]hk]hl]hq]uhsMçhthhu]r®%h~X identifierr¯%…r°%}r±%(hYUheNhsNhthhZj«%ubaubeubj/)r²%}r³%(hYUhZjŒ%hehfhgj2hi}r´%(hk]hl]hm]hn]hq]uhsMçhthhu]rµ%(j5)r¶%}r·%(hYUhZj²%hehfhgj8hi}r¸%(hk]hl]hm]hn]hq]uhsNhthhu]r¹%(j;)rº%}r»%(hYUhZj¶%hehfhgj>hi}r¼%(hk]hl]hm]hn]hq]uhsMãhthhu]r½%(jA)r¾%}r¿%(hYXrequiredhZjº%hehfhgjEhi}rÀ%(hk]hl]hm]hn]hq]uhsKhu]rÁ%h~XRequiredrÂ%…rÃ%}rÄ%(hYUhZj¾%ubaubjK)rÅ%}rÆ%(hYX``detailed-0.9``rÇ%hi}rÈ%(hk]hl]hm]hn]hq]uhZjº%hu]rÉ%h‚)rÊ%}rË%(hYjÇ%hZjÅ%hehfhgh†hi}rÌ%(hk]hl]hm]hn]hq]uhsMãhu]rÍ%hä)rÎ%}rÏ%(hYjÇ%hi}rÐ%(hk]hl]hm]hn]hq]uhZjÊ%hu]rÑ%h~X detailed-0.9rÒ%…rÓ%}rÔ%(hYUhZjÎ%ubahghìubaubahgjXubeubj;)rÕ%}rÖ%(hYUhZj¶%hehfhgj>hi}r×%(hk]hl]hm]hn]hq]uhsMähthhu]rØ%(jA)rÙ%}rÚ%(hYX disallowedhZjÕ%hehfhgjEhi}rÛ%(hk]hl]hm]hn]hq]uhsKhu]rÜ%h~X DisallowedrÝ%…rÞ%}rß%(hYUhZjÙ%ubaubjK)rà%}rá%(hYX``exitcode-stdio-1.0`` hi}râ%(hk]hl]hm]hn]hq]uhZjÕ%hu]rã%h‚)rä%}rå%(hYX``exitcode-stdio-1.0``ræ%hZjà%hehfhgh†hi}rç%(hk]hl]hm]hn]hq]uhsMähu]rè%hä)ré%}rê%(hYjæ%hi}rë%(hk]hl]hm]hn]hq]uhZjä%hu]rì%h~Xexitcode-stdio-1.0rí%…rî%}rï%(hYUhZjé%ubahghìubaubahgjXubeubeubh‚)rð%}rñ%(hYX*The module exporting the ``tests`` symbol.hZj²%hehfhgh†hi}rò%(hk]hl]hm]hn]hq]uhsMæhthhu]ró%(h~XThe module exporting the rô%…rõ%}rö%(hYXThe module exporting the heNhsNhthhZjð%ubhä)r÷%}rø%(hYX ``tests``hi}rù%(hk]hl]hm]hn]hq]uhZjð%hu]rú%h~Xtestsrû%…rü%}rý%(hYUhZj÷%ubahghìubh~X symbol.rþ%…rÿ%}r&(hYX symbol.heNhsNhthhZjð%ubeubeubeubh[)r&}r&(hYUh^KhZj¹#hehfhghhhi}r&(hk]r&X3example: package using exitcode-stdio-1.0 interfacer&ahl]hm]hn]r&U2example-package-using-exitcode-stdio-1-0-interfacer&ahq]uhsMéhthhu]r&(hw)r &}r &(hYX7Example: Package using ``exitcode-stdio-1.0`` interfacer &hZj&hehfhgh{hi}r &(hk]hl]hm]hn]hq]uhsMéhthhu]r &(h~XExample: Package using r&…r&}r&(hYXExample: Package using r&heNhsNhthhZj &ubhä)r&}r&(hYX``exitcode-stdio-1.0``r&hi}r&(hk]hl]hm]hn]hq]uhZj &hu]r&h~Xexitcode-stdio-1.0r&…r&}r&(hYUhZj&ubahghìubh~X interfacer&…r&}r&(hYX interfacer&heNhsNhthhZj &ubeubh‚)r&}r&(hYX}The example package description and executable source file below demonstrate the use of the ``exitcode-stdio-1.0`` interface.hZj&hehfhgh†hi}r &(hk]hl]hm]hn]hq]uhsMëhthhu]r!&(h~X\The example package description and executable source file below demonstrate the use of the r"&…r#&}r$&(hYX\The example package description and executable source file below demonstrate the use of the heNhsNhthhZj&ubhä)r%&}r&&(hYX``exitcode-stdio-1.0``hi}r'&(hk]hl]hm]hn]hq]uhZj&hu]r(&h~Xexitcode-stdio-1.0r)&…r*&}r+&(hYUhZj%&ubahghìubh~X interface.r,&…r-&}r.&(hYX interface.heNhsNhthhZj&ubeubcdocutils.nodes container r/&)r0&}r1&(hYUhZj&heUhgU containerr2&hi}r3&(hn]r4&Uid3r5&ahm]hk]hl]r6&Uliteral-block-wrapperr7&ahq]U literal_blockˆuhsNhthhu]r8&(cdocutils.nodes caption r9&)r:&}r;&(hYX foo.cabalr<&hZj0&hehfhgUcaptionr=&hi}r>&(hk]hl]hm]hn]hq]uhsMîhu]r?&h~X foo.cabalr@&…rA&}rB&(hYj<&hZj:&ubaubjÑ)rC&}rD&(hYXä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 && < 5hZj0&hehfhgjÔhi}rE&(j‰jXcabaljÖj×hn]hm]hk]j}hl]hq]uhsMîhu]rF&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 && < 5rG&…rH&}rI&(hYUhZjC&ubaubeubj/&)rJ&}rK&(hYUhZj&heUhgj2&hi}rL&(hn]rM&Uid4rN&ahm]hk]hl]rO&j7&ahq]U literal_blockˆuhsNhthhu]rP&(j9&)rQ&}rR&(hYX test-foo.hsrS&hZjJ&hehfhgj=&hi}rT&(hk]hl]hm]hn]hq]uhsMühu]rU&h~X test-foo.hsrV&…rW&}rX&(hYjS&hZjQ&ubaubjÑ)rY&}rZ&(hYXumodule Main where import System.Exit (exitFailure) main = do putStrLn "This test always fails!" exitFailurehZjJ&hehfhgjÔhi}r[&(j‰jXhaskelljÖj×hn]hm]hk]j}hl]hq]uhsMühu]r\&h~Xumodule Main where import System.Exit (exitFailure) main = do putStrLn "This test always fails!" exitFailurer]&…r^&}r_&(hYUhZjY&ubaubeubeubh[)r`&}ra&(hYUhZj¹#hehfhghhhi}rb&(hk]hl]hm]hn]rc&U,example-package-using-detailed-0-9-interfacerd&ahq]re&h0auhsMhthhu]rf&(hw)rg&}rh&(hYX1Example: Package using ``detailed-0.9`` interfaceri&hZj`&hehfhgh{hi}rj&(hk]hl]hm]hn]hq]uhsMhthhu]rk&(h~XExample: Package using rl&…rm&}rn&(hYXExample: Package using ro&heNhsNhthhZjg&ubhä)rp&}rq&(hYX``detailed-0.9``rr&hi}rs&(hk]hl]hm]hn]hq]uhZjg&hu]rt&h~X detailed-0.9ru&…rv&}rw&(hYUhZjp&ubahghìubh~X interfacerx&…ry&}rz&(hYX interfacer{&heNhsNhthhZjg&ubeubh‚)r|&}r}&(hYXNThe 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.hZj`&hehfhgh†hi}r~&(hk]hl]hm]hn]hq]uhsM hthhu]r&(h~X]The example package description and test module source file below demonstrate the use of the r€&…r&}r‚&(hYX]The example package description and test module source file below demonstrate the use of the heNhsNhthhZj|&ubhä)rƒ&}r„&(hYX``detailed-0.9``hi}r…&(hk]hl]hm]hn]hq]uhZj|&hu]r†&h~X detailed-0.9r‡&…rˆ&}r‰&(hYUhZjƒ&ubahghìubh~XZ interface. The test module also develops a simple implementation of the interface set by rŠ&…r‹&}rŒ&(hYXZ interface. The test module also develops a simple implementation of the interface set by heNhsNhthhZj|&ubhä)r&}rŽ&(hYX``Distribution.TestSuite``hi}r&(hk]hl]hm]hn]hq]uhZj|&hu]r&h~XDistribution.TestSuiter‘&…r’&}r“&(hYUhZj&ubahghìubh~Xm, but in actual usage the implementation would be provided by the library that provides the testing facility.r”&…r•&}r–&(hYXm, but in actual usage the implementation would be provided by the library that provides the testing facility.heNhsNhthhZj|&ubeubj/&)r—&}r˜&(hYUhZj`&heUhgj2&hi}r™&(hn]rš&Uid5r›&ahm]hk]hl]rœ&j7&ahq]U literal_blockˆuhsNhthhu]r&(j9&)rž&}rŸ&(hYX bar.cabalr &hZj—&hehfhgj=&hi}r¡&(hk]hl]hm]hn]hq]uhsMhu]r¢&h~X bar.cabalr£&…r¤&}r¥&(hYj &hZjž&ubaubjÑ)r¦&}r§&(hYXî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 && < 2hZj—&hehfhgjÔhi}r¨&(j‰jXcabaljÖj×hn]hm]hk]j}hl]hq]uhsMhu]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¬&(hYUhZj¦&ubaubeubj/&)r­&}r®&(hYUhZj`&heUhgj2&hi}r¯&(hn]r°&Uid6r±&ahm]hk]hl]r²&j7&ahq]U literal_blockˆuhsNhthhu]r³&(j9&)r´&}rµ&(hYXBar.hsr¶&hZj­&hehfhgj=&hi}r·&(hk]hl]hm]hn]hq]uhsMhu]r¸&h~XBar.hsr¹&…rº&}r»&(hYj¶&hZj´&ubaubjÑ)r¼&}r½&(hYX 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 }hZj­&hehfhgjÔhi}r¾&(j‰jXhaskelljÖj×hn]hm]hk]j}hl]hq]uhsMhu]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Â&(hYUhZj¼&ubaubeubeubh[)rÃ&}rÄ&(hYUhZj¹#hehfhghhhi}rÅ&(hk]hl]hm]hn]rÆ&Urunning-test-suitesrÇ&ahq]rÈ&hDauhsM9hthhu]rÉ&(hw)rÊ&}rË&(hYXRunning test suitesrÌ&hZjÃ&hehfhgh{hi}rÍ&(hk]hl]hm]hn]hq]uhsM9hthhu]rÎ&h~XRunning test suitesrÏ&…rÐ&}rÑ&(hYjÌ&heNhsNhthhZjÊ&ubaubh‚)rÒ&}rÓ&(hYXGYou can have Cabal run your test suites using its built-in test runner:rÔ&hZjÃ&hehfhgh†hi}rÕ&(hk]hl]hm]hn]hq]uhsM;hthhu]rÖ&h~XGYou can have Cabal run your test suites using its built-in test runner:r×&…rØ&}rÙ&(hYjÔ&heNhsNhthhZjÒ&ubaubjÑ)rÚ&}rÛ&(hYX;$ cabal configure --enable-tests $ cabal build $ cabal testhZjÃ&hehfhgjÔhi}rÜ&(jÖj×hn]hm]hk]hl]hq]uhsM?hthhu]rÝ&h~X;$ cabal configure --enable-tests $ cabal build $ cabal testrÞ&…rß&}rà&(hYUhZjÚ&ubaubh‚)rá&}râ&(hYX[See the output of ``cabal help test`` for a list of options you can pass to ``cabal test``.hZjÃ&hehfhgh†hi}rã&(hk]hl]hm]hn]hq]uhsMChthhu]rä&(h~XSee the output of rå&…ræ&}rç&(hYXSee the output of heNhsNhthhZjá&ubhä)rè&}ré&(hYX``cabal help test``hi}rê&(hk]hl]hm]hn]hq]uhZjá&hu]rë&h~Xcabal help testrì&…rí&}rî&(hYUhZjè&ubahghìubh~X' for a list of options you can pass to rï&…rð&}rñ&(hYX' for a list of options you can pass to heNhsNhthhZjá&ubhä)rò&}ró&(hYX``cabal test``hi}rô&(hk]hl]hm]hn]hq]uhZjá&hu]rõ&h~X cabal teströ&…r÷&}rø&(hYUhZjò&ubahghìubh~X.…rù&}rú&(hYX.heNhsNhthhZjá&ubeubeubeubh_h[)rû&}rü&(hYUh^KhZhahehfhghhhi}rý&(hk]hl]hm]hn]rþ&Uforeign-librariesrÿ&ahq]r'h.auhsM¥hthhu]r'(hw)r'}r'(hYXForeign librariesr'hZjû&hehfhgh{hi}r'(hk]hl]hm]hn]hq]uhsM¥hthhu]r'h~XForeign librariesr'…r'}r '(hYj'heNhsNhthhZj'ubaubh‚)r '}r '(hYXÞ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.hZjû&hehfhgh†hi}r '(hk]hl]hm]hn]hq]uhsM§hthhu]r '(h~X³Foreign libraries are system libraries intended to be linked against programs written in C or other “foreign†languages. They come in two primary flavours: dynamic libraries (r'…r'}r'(hYX¯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 (heNhsNhthhZj 'ubhä)r'}r'(hYX``.so``hi}r'(hk]hl]hm]hn]hq]uhZj 'hu]r'h~X.sor'…r'}r'(hYUhZj'ubahghìubh~X files on Linux, r'…r'}r'(hYX files on Linux, heNhsNhthhZj 'ubhä)r'}r'(hYX ``.dylib``hi}r'(hk]hl]hm]hn]hq]uhZj 'hu]r'h~X.dylibr'…r '}r!'(hYUhZj'ubahghìubh~X files on OSX, r"'…r#'}r$'(hYX files on OSX, heNhsNhthhZj 'ubhä)r%'}r&'(hYX``.dll``hi}r''(hk]hl]hm]hn]hq]uhZj 'hu]r('h~X.dllr)'…r*'}r+'(hYUhZj%'ubahghìubh~XŽ files on Windows, etc.) are linked against executables when the executable is run (or even lazily during execution), while static libraries (r,'…r-'}r.'(hYXŽ files on Windows, etc.) are linked against executables when the executable is run (or even lazily during execution), while static libraries (heNhsNhthhZj 'ubhä)r/'}r0'(hYX``.a``hi}r1'(hk]hl]hm]hn]hq]uhZj 'hu]r2'h~X.ar3'…r4'}r5'(hYUhZj/'ubahghìubh~X files on Linux/OSX, r6'…r7'}r8'(hYX files on Linux/OSX, heNhsNhthhZj 'ubhä)r9'}r:'(hYX``.lib``hi}r;'(hk]hl]hm]hn]hq]uhZj 'hu]r<'h~X.libr='…r>'}r?'(hYUhZj9'ubahghìubh~XE files on Windows) get linked against the executable at compile time.r@'…rA'}rB'(hYXE files on Windows) get linked against the executable at compile time.heNhsNhthhZj 'ubeubh‚)rC'}rD'(hYX3Foreign libraries only work with GHC 7.8 and later.rE'hZjû&hehfhgh†hi}rF'(hk]hl]hm]hn]hq]uhsM¯hthhu]rG'h~X3Foreign libraries only work with GHC 7.8 and later.rH'…rI'}rJ'(hYjE'heNhsNhthhZjC'ubaubh‚)rK'}rL'(hYX1A typical stanza for a foreign library looks likerM'hZjû&hehfhgh†hi}rN'(hk]hl]hm]hn]hq]uhsM±hthhu]rO'h~X1A typical stanza for a foreign library looks likerP'…rQ'}rR'(hYjM'heNhsNhthhZjK'ubaubjÑ)rS'}rT'(hYX©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: Haskell2010hZjû&hehfhgjÔhi}rU'(jÖj×hn]hm]hk]hl]hq]uhsMµhthhu]rV'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: Haskell2010rW'…rX'}rY'(hYUhZjS'ubaubjþ)rZ'}r['(hYUhZjû&hehfhgjhi}r\'(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r]'}r^'(hYUhZjû&hehfhgjhi}r_'(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-sectionr`'j j`'uhsNhthhu]ra'(j)rb'}rc'(hYXforeign-library namehZj]'hehfhgjhi}rd'(hn]re'X+pkg-section-foreign-library-foreign-libraryrf'ahm]hk]hl]hq]j‰uhsNhthhu]rg'(jþ)rh'}ri'(hYUhZjb'hehfhgjhi}rj'(hn]hm]hk]hl]hq]Uentries]rk'(jX6foreign-library:foreign-library; package.cabal sectionjf'UNtrl'auhsNhthhu]ubj)rm'}rn'(hYXforeign-libraryro'hZjb'hehfhgj!hi}rp'(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rq'h~Xforeign-libraryrr'…rs'}rt'(hYUheNhsNhthhZjm'ubaubj')ru'}rv'(hYU hZjb'hehfhgj*hi}rw'(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rx'h~X …ry'}rz'(hYUheNhsNhthhZju'ubaubj¦)r{'}r|'(hYXnamehZjb'hehfhgj©hi}r}'(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r~'h~Xnamer'…r€'}r'(hYUheNhsNhthhZj{'ubaubeubj/)r‚'}rƒ'(hYUhZj]'hehfhgj2hi}r„'(hk]hl]hm]hn]hq]uhsNhthhu]r…'(j5)r†'}r‡'(hYUhZj‚'hehfhgj8hi}rˆ'(hk]hl]hm]hn]hq]uhsNhthhu]r‰'j;)rŠ'}r‹'(hYUhZj†'hehfhgj>hi}rŒ'(hk]hl]hm]hn]hq]uhsNhthhu]r'(jA)rŽ'}r'(hYjDhZjŠ'hehfhgjEhi}r'(hk]hl]hm]hn]hq]uhsKhu]r‘'h~XSincer’'…r“'}r”'(hYUhZjŽ'ubaubjK)r•'}r–'(hYU Cabal 2.0r—'hi}r˜'(hk]hl]hm]hn]hq]uhZjŠ'hu]r™'h‚)rš'}r›'(hYj—'hi}rœ'(hk]hl]hm]hn]hq]uhZj•'hu]r'h~X Cabal 2.0rž'…rŸ'}r '(hYUhZjš'ubahgh†ubahgjXubeubaubh‚)r¡'}r¢'(hYX+Build information for `foreign libraries`_.hZj‚'hehfhgh†hi}r£'(hk]hl]hm]hn]hq]uhsMÉhthhu]r¤'(h~XBuild information for r¥'…r¦'}r§'(hYXBuild information for heNhsNhthhZj¡'ubjD)r¨'}r©'(hYX`foreign libraries`_jGKhZj¡'hgjHhi}rª'(UnameXforeign librarieshn]hm]hk]hl]hq]jJjÿ&uhu]r«'h~Xforeign librariesr¬'…r­'}r®'(hYUhZj¨'ubaubh~X.…r¯'}r°'(hYX.heNhsNhthhZj¡'ubeubeubeubjþ)r±'}r²'(hYUhZjû&hehfhgjhi}r³'(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r´'}rµ'(hYUhZjû&hehfhgjhi}r¶'(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr·'j j·'uhsNhthhu]r¸'(j)r¹'}rº'(hYXtype: foreign library typehZj´'hehfhgjhi}r»'(hn]r¼'Xpkg-field-foreign-library-typer½'ahm]hk]hl]hq]j‰uhsMÏhthhu]r¾'(jþ)r¿'}rÀ'(hYUhZj¹'hehfhgjhi}rÁ'(hn]hm]hk]hl]hq]Uentries]rÂ'(jX)foreign-library:type; package.cabal fieldj½'UNtrÃ'auhsMÏhthhu]ubj)rÄ'}rÅ'(hYXtyperÆ'hZj¹'hehfhgj!hi}rÇ'(jÖj×hn]hm]hk]hl]hq]uhsMÏhthhu]rÈ'h~XtyperÉ'…rÊ'}rË'(hYUheNhsNhthhZjÄ'ubaubj')rÌ'}rÍ'(hYj hZj¹'hehfhgj*hi}rÎ'(jÖj×hn]hm]hk]hl]hq]uhsMÏhthhu]rÏ'h~X: rÐ'…rÑ'}rÒ'(hYUheNhsNhthhZjÌ'ubaubj¦)rÓ'}rÔ'(hYXforeign library typehZj¹'hehfhgj©hi}rÕ'(jÖj×hn]hm]hk]hl]hq]uhsMÏhthhu]rÖ'h~Xforeign library typer×'…rØ'}rÙ'(hYUheNhsNhthhZjÓ'ubaubeubj/)rÚ'}rÛ'(hYUhZj´'hehfhgj2hi}rÜ'(hk]hl]hm]hn]hq]uhsMÏhthhu]rÝ'h‚)rÞ'}rß'(hYX…Cabal recognizes ``native-static`` and ``native-shared`` here, although we currently only support building `native-shared` libraries.hZjÚ'hehfhgh†hi}rà'(hk]hl]hm]hn]hq]uhsMÍhthhu]rá'(h~XCabal recognizes râ'…rã'}rä'(hYXCabal recognizes heNhsNhthhZjÞ'ubhä)rå'}ræ'(hYX``native-static``hi}rç'(hk]hl]hm]hn]hq]uhZjÞ'hu]rè'h~X native-staticré'…rê'}rë'(hYUhZjå'ubahghìubh~X and rì'…rí'}rî'(hYX and heNhsNhthhZjÞ'ubhä)rï'}rð'(hYX``native-shared``hi}rñ'(hk]hl]hm]hn]hq]uhZjÞ'hu]rò'h~X native-sharedró'…rô'}rõ'(hYUhZjï'ubahghìubh~X3 here, although we currently only support building rö'…r÷'}rø'(hYX3 here, although we currently only support building heNhsNhthhZjÞ'ubjY#)rù'}rú'(hYX`native-shared`hi}rû'(hk]hl]hm]hn]hq]uhZjÞ'hu]rü'h~X native-sharedrý'…rþ'}rÿ'(hYUhZjù'ubahgja#ubh~X libraries.r(…r(}r((hYX libraries.heNhsNhthhZjÞ'ubeubaubeubjþ)r(}r((hYUhZjû&hehfhgjhi}r((hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r(}r((hYUhZjû&hehfhgjhi}r((j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr (j j (uhsNhthhu]r ((j)r (}r ((hYX$options: foreign library option listhZj(hehfhgjhi}r ((hn]r(X!pkg-field-foreign-library-optionsr(ahm]hk]hl]hq]j‰uhsMÚhthhu]r((jþ)r(}r((hYUhZj (hehfhgjhi}r((hn]hm]hk]hl]hq]Uentries]r((jX,foreign-library:options; package.cabal fieldj(UNtr(auhsMÚhthhu]ubj)r(}r((hYXoptionsr(hZj (hehfhgj!hi}r((jÖj×hn]hm]hk]hl]hq]uhsMÚhthhu]r(h~Xoptionsr(…r(}r((hYUheNhsNhthhZj(ubaubj')r(}r((hYj hZj (hehfhgj*hi}r ((jÖj×hn]hm]hk]hl]hq]uhsMÚhthhu]r!(h~X: r"(…r#(}r$((hYUheNhsNhthhZj(ubaubj¦)r%(}r&((hYXforeign library option listhZj (hehfhgj©hi}r'((jÖj×hn]hm]hk]hl]hq]uhsMÚhthhu]r((h~Xforeign library option listr)(…r*(}r+((hYUheNhsNhthhZj%(ubaubeubj/)r,(}r-((hYUhZj(hehfhgj2hi}r.((hk]hl]hm]hn]hq]uhsMÚhthhu]r/(h‚)r0(}r1((hYX 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.hZj,(hehfhgh†hi}r2((hk]hl]hm]hn]hq]uhsMÒhthhu]r3((h~XOptions for building the foreign library, typically specific to the specified type of foreign library. Currently we only support r4(…r5(}r6((hYXOptions for building the foreign library, typically specific to the specified type of foreign library. Currently we only support heNhsNhthhZj0(ubhä)r7(}r8((hYX``standalone``hi}r9((hk]hl]hm]hn]hq]uhZj0(hu]r:(h~X standaloner;(…r<(}r=((hYUhZj7(ubahghì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@((hYX€ here. A standalone dynamic library is one that does not have any dependencies on other (Haskell) shared libraries; without the heNhsNhthhZj0(ubhä)rA(}rB((hYX``standalone``hi}rC((hk]hl]hm]hn]hq]uhZj0(hu]rD(h~X standalonerE(…rF(}rG((hYUhZjA(ubahghìubh~XV option the generated library would have dependencies on the Haskell runtime library (rH(…rI(}rJ((hYXV option the generated library would have dependencies on the Haskell runtime library (heNhsNhthhZj0(ubhä)rK(}rL((hYX ``libHSrts``hi}rM((hk]hl]hm]hn]hq]uhZj0(hu]rN(h~XlibHSrtsrO(…rP(}rQ((hYUhZjK(ubahghìubh~X), the base library (rR(…rS(}rT((hYX), the base library (heNhsNhthhZj0(ubhä)rU(}rV((hYX ``libHSbase``hi}rW((hk]hl]hm]hn]hq]uhZj0(hu]rX(h~X libHSbaserY(…rZ(}r[((hYUhZjU(ubahghìubh~X), etc. Currently, r\(…r](}r^((hYX), etc. Currently, heNhsNhthhZj0(ubhä)r_(}r`((hYX``standalone``hi}ra((hk]hl]hm]hn]hq]uhZj0(hu]rb(h~X standalonerc(…rd(}re((hYUhZj_(ubahghìubh~X …rf(}rg((hYX heNhsNhthhZj0(ubhÄ)rh(}ri((hYX*must*hi}rj((hk]hl]hm]hn]hq]uhZj0(hu]rk(h~Xmustrl(…rm(}rn((hYUhZjh(ubahghÌubh~X be used on Windows and ro(…rp(}rq((hYX be used on Windows and heNhsNhthhZj0(ubhÄ)rr(}rs((hYX *must not*hi}rt((hk]hl]hm]hn]hq]uhZj0(hu]ru(h~Xmust notrv(…rw(}rx((hYUhZjr(ubahghÌubh~X be used on any other platform.ry(…rz(}r{((hYX be used on any other platform.heNhsNhthhZj0(ubeubaubeubjþ)r|(}r}((hYUhZjû&hehfhgjhi}r~((hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r(}r€((hYUhZjû&hehfhgjhi}r((j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr‚(j j‚(uhsNhthhu]rƒ((j)r„(}r…((hYXmod-def-file: filenamehZj(hehfhgjhi}r†((hn]r‡(X&pkg-field-foreign-library-mod-def-filerˆ(ahm]hk]hl]hq]j‰uhsMãhthhu]r‰((jþ)rŠ(}r‹((hYUhZj„(hehfhgjhi}rŒ((hn]hm]hk]hl]hq]Uentries]r((jX1foreign-library:mod-def-file; package.cabal fieldjˆ(UNtrŽ(auhsMãhthhu]ubj)r(}r((hYX mod-def-filer‘(hZj„(hehfhgj!hi}r’((jÖj×hn]hm]hk]hl]hq]uhsMãhthhu]r“(h~X mod-def-filer”(…r•(}r–((hYUheNhsNhthhZj(ubaubj')r—(}r˜((hYj hZj„(hehfhgj*hi}r™((jÖj×hn]hm]hk]hl]hq]uhsMãhthhu]rš(h~X: r›(…rœ(}r((hYUheNhsNhthhZj—(ubaubj¦)rž(}rŸ((hYXfilenamehZj„(hehfhgj©hi}r ((jÖj×hn]hm]hk]hl]hq]uhsMãhthhu]r¡(h~Xfilenamer¢(…r£(}r¤((hYUheNhsNhthhZjž(ubaubeubj/)r¥(}r¦((hYUhZj(hehfhgj2hi}r§((hk]hl]hm]hn]hq]uhsMãhthhu]r¨(h‚)r©(}rª((hYX§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.hZj¥(hehfhgh†hi}r«((hk]hl]hm]hn]hq]uhsMÝhthhu]r¬((h~XZThis option can only be used when creating dynamic Windows libraries (that is, when using r­(…r®(}r¯((hYXZThis option can only be used when creating dynamic Windows libraries (that is, when using heNhsNhthhZj©(ubhä)r°(}r±((hYX``native-shared``hi}r²((hk]hl]hm]hn]hq]uhZj©(hu]r³(h~X native-sharedr´(…rµ(}r¶((hYUhZj°(ubahghìubh~X and the r·(…r¸(}r¹((hYX and the heNhsNhthhZj©(ubhä)rº(}r»((hYX``os``hi}r¼((hk]hl]hm]hn]hq]uhZj©(hu]r½(h~Xosr¾(…r¿(}rÀ((hYUhZjº(ubahghìubh~X is rÁ(…rÂ(}rÃ((hYX is heNhsNhthhZj©(ubhä)rÄ(}rÅ((hYX ``Windows``hi}rÆ((hk]hl]hm]hn]hq]uhZj©(hu]rÇ(h~XWindowsrÈ(…rÉ(}rÊ((hYUhZjÄ(ubahghìubh~X#). If used, it must be a path to a rË(…rÌ(}rÍ((hYX#). If used, it must be a path to a heNhsNhthhZj©(ubhÄ)rÎ(}rÏ((hYX*module definition file*hi}rÐ((hk]hl]hm]hn]hq]uhZj©(hu]rÑ(h~Xmodule definition filerÒ(…rÓ(}rÔ((hYUhZjÎ(ubahghÌubh~XX. The details of module definition files are beyond the scope of this document; see the rÕ(…rÖ(}r×((hYXX. The details of module definition files are beyond the scope of this document; see the heNhsNhthhZj©(ubjD)rØ(}rÙ((hYXX`GHC `_hi}rÚ((UnameXGHCjƒXOhttps://downloads.haskell.org/~ghc/latest/docs/html/users_guide/win32-dlls.htmlrÛ(hn]hm]hk]hl]hq]uhZj©(hu]rÜ(h~XGHCrÝ(…rÞ(}rß((hYUhZjØ(ubahgjHubj¥)rà(}rá((hYXR h^KhZj©(hgj¨hi}râ((UrefurijÛ(hn]rã(Ughcrä(ahm]hk]hl]hq]rå(h3auhu]ubh~X3 manual for some details and some further pointers.ræ(…rç(}rè((hYX3 manual for some details and some further pointers.heNhsNhthhZj©(ubeubaubeubjþ)ré(}rê((hYUhZjû&hehfhgjhi}rë((hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rì(}rí((hYUhZjû&hehfhgjhi}rî((j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrï(j jï(uhsNhthhu]rð((j)rñ(}rò((hYX&lib-version-info: current:revision:agehZjì(hehfhgjhi}ró((hn]rô(X*pkg-field-foreign-library-lib-version-inforõ(ahm]hk]hl]hq]j‰uhsMhthhu]rö((jþ)r÷(}rø((hYUhZjñ(hehfhgjhi}rù((hn]hm]hk]hl]hq]Uentries]rú((jX5foreign-library:lib-version-info; package.cabal fieldjõ(UNtrû(auhsMhthhu]ubj)rü(}rý((hYXlib-version-inforþ(hZjñ(hehfhgj!hi}rÿ((jÖj×hn]hm]hk]hl]hq]uhsMhthhu]r)h~Xlib-version-infor)…r)}r)(hYUheNhsNhthhZjü(ubaubj')r)}r)(hYj hZjñ(hehfhgj*hi}r)(jÖj×hn]hm]hk]hl]hq]uhsMhthhu]r)h~X: r)…r )}r )(hYUheNhsNhthhZj)ubaubj¦)r )}r )(hYXcurrent:revision:agehZjñ(hehfhgj©hi}r )(jÖj×hn]hm]hk]hl]hq]uhsMhthhu]r)h~Xcurrent:revision:ager)…r)}r)(hYUheNhsNhthhZj )ubaubeubj/)r)}r)(hYUhZjì(hehfhgj2hi}r)(hk]hl]hm]hn]hq]uhsMhthhu]r)(h‚)r)}r)(hYX+This field is currently only used on Linux.r)hZj)hehfhgh†hi}r)(hk]hl]hm]hn]hq]uhsMæhthhu]r)h~X+This field is currently only used on Linux.r)…r)}r)(hYj)heNhsNhthhZj)ubaubh‚)r)}r)(hYX 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``.hZj)hehfhgh†hi}r )(hk]hl]hm]hn]hq]uhsMèhthhu]r!)(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: r")…r#)}r$)(hYXÚ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: heNhsNhthhZj)ubhä)r%)}r&)(hYX ``6:3:2``hi}r')(hk]hl]hm]hn]hq]uhZj)hu]r()h~X6:3:2r))…r*)}r+)(hYUhZj%)ubahghìubh~X results in library version r,)…r-)}r.)(hYX results in library version heNhsNhthhZj)ubhä)r/)}r0)(hYX ``4.2.3``hi}r1)(hk]hl]hm]hn]hq]uhZj)hu]r2)h~X4.2.3r3)…r4)}r5)(hYUhZj/)ubahghìubh~X.…r6)}r7)(hYX.heNhsNhthhZj)ubeubh‚)r8)}r9)(hYXRWith this field set, the SONAME of the library is set, and symlinks are installed.r:)hZj)hehfhgh†hi}r;)(hk]hl]hm]hn]hq]uhsMíhthhu]r<)h~XRWith this field set, the SONAME of the library is set, and symlinks are installed.r=)…r>)}r?)(hYj:)heNhsNhthhZj8)ubaubh‚)r@)}rA)(hYXVHow you should bump this field on an ABI change depends on the breakage you introduce:rB)hZj)hehfhgh†hi}rC)(hk]hl]hm]hn]hq]uhsMðhthhu]rD)h~XVHow you should bump this field on an ABI change depends on the breakage you introduce:rE)…rF)}rG)(hYjB)heNhsNhthhZj@)ubaubhŒ)rH)}rI)(hYUhZj)hehfhghhi}rJ)(h‘X-hn]hm]hk]hl]hq]uhsMóhthhu]rK)(h“)rL)}rM)(hYXPrograms 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.hZjH)hehfhgh–hi}rN)(hk]hl]hm]hn]hq]uhsNhthhu]rO)h‚)rP)}rQ)(hYXPrograms 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.hZjL)hehfhgh†hi}rR)(hk]hl]hm]hn]hq]uhsMóhu]rS)(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 rT)…rU)}rV)(hYXç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 hZjP)ubhä)rW)}rX)(hYX ``revision``hi}rY)(hk]hl]hm]hn]hq]uhZjP)hu]rZ)h~Xrevisionr[)…r\)}r])(hYUhZjW)ubahghìubh~X% only, don’t touch current nor age.r^)…r_)}r`)(hYX# only, don't touch current nor age.hZjP)ubeubaubh“)ra)}rb)(hYXYPrograms 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.hZjH)hehfhgh–hi}rc)(hk]hl]hm]hn]hq]uhsNhthhu]rd)h‚)re)}rf)(hYXYPrograms 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.rg)hZja)hehfhgh†hi}rh)(hk]hl]hm]hn]hq]uhsMøhu]ri)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.rj)…rk)}rl)(hYjg)hZje)ubaubaubh“)rm)}rn)(hYX„Programs may need to be changed, recompiled, and relinked in order to use the new version. Bump current, set revision and age to 0. hZjH)hehfhgh–hi}ro)(hk]hl]hm]hn]hq]uhsNhthhu]rp)h‚)rq)}rr)(hYXƒPrograms may need to be changed, recompiled, and relinked in order to use the new version. Bump current, set revision and age to 0.rs)hZjm)hehfhgh†hi}rt)(hk]hl]hm]hn]hq]uhsMþhu]ru)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.rv)…rw)}rx)(hYjs)hZjq)ubaubaubeubh‚)ry)}rz)(hYXBAlso refer to the Libtool documentation on the version-info field.r{)hZj)hehfhgh†hi}r|)(hk]hl]hm]hn]hq]uhsMhthhu]r})h~XBAlso refer to the Libtool documentation on the version-info field.r~)…r)}r€)(hYj{)heNhsNhthhZjy)ubaubeubeubjþ)r)}r‚)(hYUhZjû&hehfhgjhi}rƒ)(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r„)}r…)(hYUhZjû&hehfhgjhi}r†)(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr‡)j j‡)uhsNhthhu]rˆ)(j)r‰)}rŠ)(hYXlib-version-linux: versionhZj„)hehfhgjhi}r‹)(hn]rŒ)X+pkg-field-foreign-library-lib-version-linuxr)ahm]hk]hl]hq]j‰uhsM hthhu]rŽ)(jþ)r)}r)(hYUhZj‰)hehfhgjhi}r‘)(hn]hm]hk]hl]hq]Uentries]r’)(jX6foreign-library:lib-version-linux; package.cabal fieldj)UNtr“)auhsM hthhu]ubj)r”)}r•)(hYXlib-version-linuxr–)hZj‰)hehfhgj!hi}r—)(jÖj×hn]hm]hk]hl]hq]uhsM hthhu]r˜)h~Xlib-version-linuxr™)…rš)}r›)(hYUheNhsNhthhZj”)ubaubj')rœ)}r)(hYj hZj‰)hehfhgj*hi}rž)(jÖj×hn]hm]hk]hl]hq]uhsM hthhu]rŸ)h~X: r )…r¡)}r¢)(hYUheNhsNhthhZjœ)ubaubj¦)r£)}r¤)(hYXversionhZj‰)hehfhgj©hi}r¥)(jÖj×hn]hm]hk]hl]hq]uhsM hthhu]r¦)h~Xversionr§)…r¨)}r©)(hYUheNhsNhthhZj£)ubaubeubj/)rª)}r«)(hYUhZj„)hehfhgj2hi}r¬)(hk]hl]hm]hn]hq]uhsM hthhu]r­)(h‚)r®)}r¯)(hYX!This field is only used on Linux.r°)hZjª)hehfhgh†hi}r±)(hk]hl]hm]hn]hq]uhsMhthhu]r²)h~X!This field is only used on Linux.r³)…r´)}rµ)(hYj°)heNhsNhthhZj®)ubaubh‚)r¶)}r·)(hYXSpecifies 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.hZjª)hehfhgh†hi}r¸)(hk]hl]hm]hn]hq]uhsMhthhu]r¹)(h~X_Specifies the library ABI version directly for foreign libraries built on Linux: so specifying rº)…r»)}r¼)(hYX_Specifies the library ABI version directly for foreign libraries built on Linux: so specifying heNhsNhthhZj¶)ubhä)r½)}r¾)(hYX ``4.2.3``hi}r¿)(hk]hl]hm]hn]hq]uhZj¶)hu]rÀ)h~X4.2.3rÁ)…rÂ)}rÃ)(hYUhZj½)ubahghìubh~X causes a library rÄ)…rÅ)}rÆ)(hYX causes a library heNhsNhthhZj¶)ubhä)rÇ)}rÈ)(hYX``libfoo.so.4.2.3``hi}rÉ)(hk]hl]hm]hn]hq]uhZj¶)hu]rÊ)h~Xlibfoo.so.4.2.3rË)…rÌ)}rÍ)(hYUhZjÇ)ubahghìubh~X to be built with SONAME rÎ)…rÏ)}rÐ)(hYX to be built with SONAME heNhsNhthhZj¶)ubhä)rÑ)}rÒ)(hYX``libfoo.so.4``hi}rÓ)(hk]hl]hm]hn]hq]uhZj¶)hu]rÔ)h~X libfoo.so.4rÕ)…rÖ)}r×)(hYUhZjÑ)ubahghìubh~X, and appropriate symlinks rØ)…rÙ)}rÚ)(hYX, and appropriate symlinks heNhsNhthhZj¶)ubhä)rÛ)}rÜ)(hYX``libfoo.so.4``hi}rÝ)(hk]hl]hm]hn]hq]uhZj¶)hu]rÞ)h~X libfoo.so.4rß)…rà)}rá)(hYUhZjÛ)ubahghìubh~X and râ)…rã)}rä)(hYX and heNhsNhthhZj¶)ubhä)rå)}ræ)(hYX ``libfoo.so``hi}rç)(hk]hl]hm]hn]hq]uhZj¶)hu]rè)h~X libfoo.soré)…rê)}rë)(hYUhZjå)ubahghìubh~X to be installed.rì)…rí)}rî)(hYX to be installed.heNhsNhthhZj¶)ubeubeubeubh‚)rï)}rð)(hYXØ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 likehZjû&hehfhgh†hi}rñ)(hk]hl]hm]hn]hq]uhsMhthhu]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ô)}rõ)(hYX”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 heNhsNhthhZjï)ubhä)rö)}r÷)(hYX``csrc/MyForeignLibWrapper.c``hi}rø)(hk]hl]hm]hn]hq]uhZjï)hu]rù)h~Xcsrc/MyForeignLibWrapper.crú)…rû)}rü)(hYUhZjö)ubahghìubh~X& file, which might look something likerý)…rþ)}rÿ)(hYX& file, which might look something likeheNhsNhthhZjï)ubeubjÑ)r*}r*(hYXn#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(); }hZjû&hehfhgjÔhi}r*(j‰jXcjÖj×hn]hm]hk]j}hl]hq]uhsMhthhu]r*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(); }r*…r*}r*(hYUhZj*ubaubh‚)r*}r*(hYXWith 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``.hZjû&hehfhgh†hi}r *(hk]hl]hm]hn]hq]uhsM(hthhu]r *(h~X¡With modern ghc regular libraries are installed in directories that contain package keys. This isn’t usually a problem because the package gets registered in ghc’s package DB and so we can figure out what the location of the library is. Foreign libraries however don’t get registered, which means that we’d have to have a way of finding out where a platform library got installed (other than by searching the r *…r *}r *(hYX™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 heNhsNhthhZj*ubhä)r*}r*(hYX``lib/``hi}r*(hk]hl]hm]hn]hq]uhZj*hu]r*h~Xlib/r*…r*}r*(hYUhZj*ubahghìubh~X6 directory). Instead, we install foreign libraries in r*…r*}r*(hYX6 directory). Instead, we install foreign libraries in heNhsNhthhZj*ubhä)r*}r*(hYX``~/.cabal/lib``hi}r*(hk]hl]hm]hn]hq]uhZj*hu]r*h~X ~/.cabal/libr*…r*}r*(hYUhZj*ubahghìubh~X&, much like we install executables in r*…r *}r!*(hYX&, much like we install executables in heNhsNhthhZj*ubhä)r"*}r#*(hYX``~/.cabal/bin``hi}r$*(hk]hl]hm]hn]hq]uhZj*hu]r%*h~X ~/.cabal/binr&*…r'*}r(*(hYUhZj"*ubahghìubh~X.…r)*}r**(hYX.heNhsNhthhZj*ubeubeubh[)r+*}r,*(hYUh^KhZhahehfhghhhi}r-*(hk]hl]hm]hn]r.*j\ahq]r/*hEauhsM1hthhu]r0*(hw)r1*}r2*(hYXBuild informationr3*hZj+*hehfhgh{hi}r4*(hk]hl]hm]hn]hq]uhsM1hthhu]r5*h~XBuild informationr6*…r7*}r8*(hYj3*heNhsNhthhZj1*ubaubh‚)r9*}r:*(hYXGThe 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.hZj+*hehfhgh†hi}r;*(hk]hl]hm]hn]hq]uhsM4hthhu]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?*(hYXÕ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 heNhsNhthhZj9*ubjD)r@*}rA*(hYX`system-dependent parameters`_jGKhZj9*hgjHhi}rB*(UnameXsystem-dependent parametershn]hm]hk]hl]hq]jJj•uhu]rC*h~Xsystem-dependent parametersrD*…rE*}rF*(hYUhZj@*ubaubh~X and rG*…rH*}rI*(hYX and heNhsNhthhZj9*ubjD)rJ*}rK*(hYX`configurations`_jGKhZj9*hgjHhi}rL*(UnameXconfigurationshn]hm]hk]hl]hq]jJjÐuhu]rM*h~XconfigurationsrN*…rO*}rP*(hYUhZjJ*ubaubh~X> for a way to supply system-dependent values for these fields.rQ*…rR*}rS*(hYX> for a way to supply system-dependent values for these fields.heNhsNhthhZj9*ubeubjþ)rT*}rU*(hYUhZj+*heNhgjhi}rV*(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rW*}rX*(hYUhZj+*heNhgjhi}rY*(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrZ*j jZ*uhsNhthhu]r[*(j)r\*}r]*(hYXbuild-depends: library listhZjW*hehfhgjhi}r^*(hn]r_*Xpkg-field-build-dependsr`*ahm]hk]hl]hq]j‰uhsMÎhthhu]ra*(jþ)rb*}rc*(hYUhZj\*hehfhgjhi}rd*(hn]hm]hk]hl]hq]Uentries]re*(jX"build-depends; package.cabal fieldj`*UNtrf*auhsMÎhthhu]ubj)rg*}rh*(hYX build-dependsri*hZj\*hehfhgj!hi}rj*(jÖj×hn]hm]hk]hl]hq]uhsMÎhthhu]rk*h~X build-dependsrl*…rm*}rn*(hYUheNhsNhthhZjg*ubaubj')ro*}rp*(hYj hZj\*hehfhgj*hi}rq*(jÖj×hn]hm]hk]hl]hq]uhsMÎhthhu]rr*h~X: rs*…rt*}ru*(hYUheNhsNhthhZjo*ubaubj¦)rv*}rw*(hYX library listhZj\*hehfhgj©hi}rx*(jÖj×hn]hm]hk]hl]hq]uhsMÎhthhu]ry*h~X library listrz*…r{*}r|*(hYUheNhsNhthhZjv*ubaubeubj/)r}*}r~*(hYUhZjW*hehfhgj2hi}r*(hk]hl]hm]hn]hq]uhsMÎhthhu]r€*(h‚)r*}r‚*(hYXóDeclares the *library* dependencies required to build the current package component; see :pkg-field:`build-tool-depends` for declaring build-time *tool* dependencies. External library dependencies should be annotated with a version constraint.hZj}*hehfhgh†hi}rƒ*(hk]hl]hm]hn]hq]uhsM<hthhu]r„*(h~X Declares the r…*…r†*}r‡*(hYX Declares the heNhsNhthhZj*ubhÄ)rˆ*}r‰*(hYX *library*hi}rŠ*(hk]hl]hm]hn]hq]uhZj*hu]r‹*h~XlibraryrŒ*…r*}rŽ*(hYUhZjˆ*ubahghÌubh~XC dependencies required to build the current package component; see r*…r*}r‘*(hYXC dependencies required to build the current package component; see heNhsNhthhZj*ubjp)r’*}r“*(hYX:pkg-field:`build-tool-depends`r”*hZj*hehfhgjthi}r•*(UreftypeX pkg-fieldjvˆjwXbuild-tool-dependsU refdomainXcabalr–*hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsM<hu]r—*hä)r˜*}r™*(hYj”*hi}rš*(hk]hl]r›*(jj–*Xcabal-pkg-fieldrœ*ehm]hn]hq]uhZj’*hu]r*h~Xbuild-tool-dependsrž*…rŸ*}r *(hYUhZj˜*ubahghìubaubh~X for declaring build-time r¡*…r¢*}r£*(hYX for declaring build-time heNhsNhthhZj*ubhÄ)r¤*}r¥*(hYX*tool*hi}r¦*(hk]hl]hm]hn]hq]uhZj*hu]r§*h~Xtoolr¨*…r©*}rª*(hYUhZj¤*ubahghÌubh~X[ dependencies. External library dependencies should be annotated with a version constraint.r«*…r¬*}r­*(hYX[ dependencies. External library dependencies should be annotated with a version constraint.heNhsNhthhZj*ubeubh‚)r®*}r¯*(hYX**Library Names**r°*hZj}*hehfhgh†hi}r±*(hk]hl]hm]hn]hq]uhsMAhthhu]r²*j¯)r³*}r´*(hYj°*hi}rµ*(hk]hl]hm]hn]hq]uhZj®*hu]r¶*h~X Library Namesr·*…r¸*}r¹*(hYUhZj³*ubahgj·ubaubh‚)rº*}r»*(hYX4External libraries are identified by the package's name they're provided by (currently a package can only publically expose its main library compeonent; in future, packages with multiple exposed public library components will be supported and a syntax for referring to public sub-libraries will be provided).r¼*hZj}*hehfhgh†hi}r½*(hk]hl]hm]hn]hq]uhsMChthhu]r¾*h~X8External libraries are identified by the package’s name they’re provided by (currently a package can only publically expose its main library compeonent; in future, packages with multiple exposed public library components will be supported and a syntax for referring to public sub-libraries will be provided).r¿*…rÀ*}rÁ*(hYj¼*heNhsNhthhZjº*ubaubh‚)rÂ*}rÃ*(hYXGIn order to specify an intra-package dependency on an internal library component you can use the unqualified name of the component library component. Note that locally defined sub-library names shadow external package names of the same name. See section on :ref:`Internal Libraries ` for examples and more information.hZj}*hehfhgh†hi}rÄ*(hk]hl]hm]hn]hq]uhsMIhthhu]rÅ*(h~XIn order to specify an intra-package dependency on an internal library component you can use the unqualified name of the component library component. Note that locally defined sub-library names shadow external package names of the same name. See section on rÆ*…rÇ*}rÈ*(hYXIn order to specify an intra-package dependency on an internal library component you can use the unqualified name of the component library component. Note that locally defined sub-library names shadow external package names of the same name. See section on heNhsNhthhZjÂ*ubjp)rÉ*}rÊ*(hYX#:ref:`Internal Libraries `rË*hZjÂ*hehfhgjthi}rÌ*(UreftypeXrefjvˆjwXsublibsU refdomainXstdrÍ*hn]hm]U refexplicitˆhk]hl]hq]jyjzuhsMIhu]rÎ*j|)rÏ*}rÐ*(hYjË*hi}rÑ*(hk]hl]rÒ*(jjÍ*Xstd-refrÓ*ehm]hn]hq]uhZjÉ*hu]rÔ*h~XInternal LibrariesrÕ*…rÖ*}r×*(hYUhZjÏ*ubahgj‡ubaubh~X# for examples and more information.rØ*…rÙ*}rÚ*(hYX# for examples and more information.heNhsNhthhZjÂ*ubeubh‚)rÛ*}rÜ*(hYX**Version Constraints**rÝ*hZj}*hehfhgh†hi}rÞ*(hk]hl]hm]hn]hq]uhsMOhthhu]rß*j¯)rà*}rá*(hYjÝ*hi}râ*(hk]hl]hm]hn]hq]uhZjÛ*hu]rã*h~XVersion Constraintsrä*…rå*}ræ*(hYUhZjà*ubahgj·ubaubh‚)rç*}rè*(hYXê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:hZj}*hehfhgh†hi}ré*(hk]hl]hm]hn]hq]uhsMQhthhu]rê*(h~X&Version constraints use the operators rë*…rì*}rí*(hYX&Version constraints use the operators heNhsNhthhZjç*ubhä)rî*}rï*(hYX``==, >=, >, <, <=``hi}rð*(hk]hl]hm]hn]hq]uhZjç*hu]rñ*h~X==, >=, >, <, <=rò*…ró*}rô*(hYUhZjî*ubahghìubh~XB and a version number. Multiple constraints can be combined using rõ*…rö*}r÷*(hYXB and a version number. Multiple constraints can be combined using heNhsNhthhZjç*ubhä)rø*}rù*(hYX``&&``hi}rú*(hk]hl]hm]hn]hq]uhZjç*hu]rû*h~X&&rü*…rý*}rþ*(hYUhZjø*ubahghìubh~X or rÿ*…r+}r+(hYX or heNhsNhthhZjç*ubhä)r+}r+(hYX``||``hi}r+(hk]hl]hm]hn]hq]uhZjç*hu]r+h~X||r+…r+}r+(hYUhZj+ubahghìubh~X^. If no version constraint is specified, any version is assumed to be acceptable. For example:r +…r +}r +(hYX^. If no version constraint is specified, any version is assumed to be acceptable. For example:heNhsNhthhZjç*ubeubjÑ)r +}r +(hYXJlibrary build-depends: base >= 2, foo >= 1.2.3 && < 1.3, barhZj}*hehfhgjÔhi}r+(jÖj×hn]hm]hk]hl]hq]uhsMXhthhu]r+h~XJlibrary build-depends: base >= 2, foo >= 1.2.3 && < 1.3, barr+…r+}r+(hYUhZj +ubaubh‚)r+}r+(hYX¨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_).hZj}*hehfhgh†hi}r+(hk]hl]hm]hn]hq]uhsM^hthhu]r+(h~XDependencies like r+…r+}r+(hYXDependencies like heNhsNhthhZj+ubhä)r+}r+(hYX``foo >= 1.2.3 && < 1.3``hi}r+(hk]hl]hm]hn]hq]uhZj+hu]r+h~Xfoo >= 1.2.3 && < 1.3r+…r+}r +(hYUhZj+ubahghì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#+(hYXw turn out to be very common because it is recommended practise for package versions to correspond to API versions (see heNhsNhthhZj+ubjD)r$+}r%+(hYXPVP_jGKhZj+hgjHhi}r&+(UnameXPVPjƒj hn]hm]hk]hl]hq]uhu]r'+h~XPVPr(+…r)+}r*+(hYUhZj$+ubaubh~X).r++…r,+}r-+(hYX).heNhsNhthhZj+ubeubh‚)r.+}r/+(hYXLSince Cabal 1.6, there is a special wildcard syntax to help with such rangesr0+hZj}*hehfhgh†hi}r1+(hk]hl]hm]hn]hq]uhsMbhthhu]r2+h~XLSince Cabal 1.6, there is a special wildcard syntax to help with such rangesr3+…r4+}r5+(hYj0+heNhsNhthhZj.+ubaubjÑ)r6+}r7+(hYXbuild-depends: foo ==1.2.*hZj}*hehfhgjÔhi}r8+(jÖj×hn]hm]hk]hl]hq]uhsMghthhu]r9+h~Xbuild-depends: foo ==1.2.*r:+…r;+}r<+(hYUhZj6+ubaubh‚)r=+}r>+(hYXPIt is only syntactic sugar. It is exactly equivalent to ``foo >= 1.2 && < 1.3``.hZj}*hehfhgh†hi}r?+(hk]hl]hm]hn]hq]uhsMihthhu]r@+(h~X8It is only syntactic sugar. It is exactly equivalent to rA+…rB+}rC+(hYX8It is only syntactic sugar. It is exactly equivalent to heNhsNhthhZj=+ubhä)rD+}rE+(hYX``foo >= 1.2 && < 1.3``hi}rF+(hk]hl]hm]hn]hq]uhZj=+hu]rG+h~Xfoo >= 1.2 && < 1.3rH+…rI+}rJ+(hYUhZjD+ubahghìubh~X.…rK+}rL+(hYX.heNhsNhthhZj=+ubeubcdocutils.nodes warning rM+)rN+}rO+(hYXA 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.hZj}*hehfhgUwarningrP+hi}rQ+(hk]hl]hm]hn]hq]uhsNhthhu]rR+h‚)rS+}rT+(hYXA 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.hZjN+hehfhgh†hi}rU+(hk]hl]hm]hn]hq]uhsMnhu]rV+(h~XBA potential pitfall of the wildcard syntax is that the constraint rW+…rX+}rY+(hYXBA potential pitfall of the wildcard syntax is that the constraint hZjS+ubhä)rZ+}r[+(hYX``nats == 1.0.*``hi}r\+(hk]hl]hm]hn]hq]uhZjS+hu]r]+h~X nats == 1.0.*r^+…r_+}r`+(hYUhZjZ+ubahghìubh~X doesn’t match the release ra+…rb+}rc+(hYX doesn't match the release hZjS+ubhä)rd+}re+(hYX ``nats-1``hi}rf+(hk]hl]hm]hn]hq]uhZjS+hu]rg+h~Xnats-1rh+…ri+}rj+(hYUhZjd+ubahghìubh~X because the version rk+…rl+}rm+(hYX because the version hZjS+ubhä)rn+}ro+(hYX``1``hi}rp+(hk]hl]hm]hn]hq]uhZjS+hu]rq+h~X1…rr+}rs+(hYUhZjn+ubahghìubh~X is lexicographically less than rt+…ru+}rv+(hYX is lexicographically less than hZjS+ubhä)rw+}rx+(hYX``1.0``hi}ry+(hk]hl]hm]hn]hq]uhZjS+hu]rz+h~X1.0r{+…r|+}r}+(hYUhZjw+ubahghìubh~X/. This is not an issue with the caret-operator r~+…r+}r€+(hYX/. This is not an issue with the caret-operator hZjS+ubhä)r+}r‚+(hYX``^>=``hi}rƒ+(hk]hl]hm]hn]hq]uhZjS+hu]r„+h~X^>=r…+…r†+}r‡+(hYUhZj+ubahghìubh~X described below.rˆ+…r‰+}rŠ+(hYX described below.hZjS+ubeubaubh‚)r‹+}rŒ+(hYXê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:hZj}*hehfhgh†hi}r+(hk]hl]hm]hn]hq]uhsMththhu]rŽ+(h~XEStarting with Cabal 2.0, there’s a new version operator to express r+…r+}r‘+(hYXCStarting with Cabal 2.0, there's a new version operator to express heNhsNhthhZj‹+ubjD)r’+}r“+(hYXPVP_jGKhZj‹+hgjHhi}r”+(UnameXPVPjƒj hn]hm]hk]hl]hq]uhu]r•+h~XPVPr–+…r—+}r˜+(hYUhZj’+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›+(hYX£-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:heNhsNhthhZj‹+ubeubjÑ)rœ+}r+(hYX-build-depends: foo ^>= 1.2.3.4, bar ^>= 1hZj}*hehfhgjÔhi}rž+(jÖj×hn]hm]hk]hl]hq]uhsM{hthhu]rŸ+h~X-build-depends: foo ^>= 1.2.3.4, bar ^>= 1r +…r¡+}r¢+(hYUhZjœ+ubaubh‚)r£+}r¤+(hYXpThis 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).hZj}*hehfhgh†hi}r¥+(hk]hl]hm]hn]hq]uhsMhthhu]r¦+(h~XBThis allows to assert the positive knowledge that this package is r§+…r¨+}r©+(hYXBThis allows to assert the positive knowledge that this package is heNhsNhthhZj£+ubhÄ)rª+}r«+(hYX*known*hi}r¬+(hk]hl]hm]hn]hq]uhZj£+hu]r­+h~Xknownr®+…r¯+}r°+(hYUhZjª+ubahghÌubh~X1 to be semantically compatible with the releases r±+…r²+}r³+(hYX1 to be semantically compatible with the releases heNhsNhthhZj£+ubhä)r´+}rµ+(hYX``foo-1.2.3.4``hi}r¶+(hk]hl]hm]hn]hq]uhZj£+hu]r·+h~X foo-1.2.3.4r¸+…r¹+}rº+(hYUhZj´+ubahghìubh~X and r»+…r¼+}r½+(hYX and heNhsNhthhZj£+ubhä)r¾+}r¿+(hYX ``bar-1``hi}rÀ+(hk]hl]hm]hn]hq]uhZj£+hu]rÁ+h~Xbar-1rÂ+…rÃ+}rÄ+(hYUhZj¾+ubahghìubh~X0 respectively. The information encoded via such rÅ+…rÆ+}rÇ+(hYX0 respectively. The information encoded via such heNhsNhthhZj£+ubhä)rÈ+}rÉ+(hYX``^>=``hi}rÊ+(hk]hl]hm]hn]hq]uhZj£+hu]rË+h~X^>=rÌ+…rÍ+}rÎ+(hYUhZjÈ+ubahghìubh~Xˆ-assertions is used by the cabal solver to infer version constraints describing semantically compatible version ranges according to the rÏ+…rÐ+}rÑ+(hYXˆ-assertions is used by the cabal solver to infer version constraints describing semantically compatible version ranges according to the heNhsNhthhZj£+ubjD)rÒ+}rÓ+(hYXPVP_jGKhZj£+hgjHhi}rÔ+(UnameXPVPjƒj hn]hm]hk]hl]hq]uhu]rÕ+h~XPVPrÖ+…r×+}rØ+(hYUhZjÒ+ubaubh~X contract (see below).rÙ+…rÚ+}rÛ+(hYX contract (see below).heNhsNhthhZj£+ubeubh‚)rÜ+}rÝ+(hYXÇ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.hZj}*hehfhgh†hi}rÞ+(hk]hl]hm]hn]hq]uhsM†hthhu]rß+(h~X Another way to say this is that rà+…rá+}râ+(hYX Another way to say this is that heNhsNhthhZjÜ+ubhä)rã+}rä+(hYX ``foo < 1.3``hi}rå+(hk]hl]hm]hn]hq]uhZjÜ+hu]ræ+h~X foo < 1.3rç+…rè+}ré+(hYUhZjã+ubahghìubh~X expresses rê+…rë+}rì+(hYX expresses heNhsNhthhZjÜ+ubhÄ)rí+}rî+(hYX *negative*hi}rï+(hk]hl]hm]hn]hq]uhZjÜ+hu]rð+h~Xnegativerñ+…rò+}ró+(hYUhZjí+ubahghÌubh~X information, i.e. “rô+…rõ+}rö+(hYX information, i.e. "heNhsNhthhZjÜ+ubhä)r÷+}rø+(hYX ``foo-1.3``hi}rù+(hk]hl]hm]hn]hq]uhZjÜ+hu]rú+h~Xfoo-1.3rû+…rü+}rý+(hYUhZj÷+ubahghìubh~X or rþ+…rÿ+}r,(hYX or heNhsNhthhZjÜ+ubhä)r,}r,(hYX ``foo-1.4.2``hi}r,(hk]hl]hm]hn]hq]uhZjÜ+hu]r,h~X foo-1.4.2r,…r,}r,(hYUhZj,ubahghìubh~X will r,…r ,}r ,(hYX will heNhsNhthhZjÜ+ubhÄ)r ,}r ,(hYX*not*hi}r ,(hk]hl]hm]hn]hq]uhZjÜ+hu]r,h~Xnotr,…r,}r,(hYUhZj ,ubahghÌubh~X be compatibleâ€; whereas r,…r,}r,(hYX be compatible"; whereas heNhsNhthhZjÜ+ubhä)r,}r,(hYX``foo ^>= 1.2.3.4``hi}r,(hk]hl]hm]hn]hq]uhZjÜ+hu]r,h~Xfoo ^>= 1.2.3.4r,…r,}r,(hYUhZj,ubahghìubh~X asserts the r,…r,}r,(hYX asserts the heNhsNhthhZjÜ+ubhÄ)r,}r ,(hYX *positive*hi}r!,(hk]hl]hm]hn]hq]uhZjÜ+hu]r",h~Xpositiver#,…r$,}r%,(hYUhZj,ubahghÌubh~X information that “r&,…r',}r(,(hYX information that "heNhsNhthhZjÜ+ubhä)r),}r*,(hYX``foo-1.2.3.4``hi}r+,(hk]hl]hm]hn]hq]uhZjÜ+hu]r,,h~X foo-1.2.3.4r-,…r.,}r/,(hYUhZj),ubahghìubh~X is r0,…r1,}r2,(hYX is heNhsNhthhZjÜ+ubhÄ)r3,}r4,(hYX*known*hi}r5,(hk]hl]hm]hn]hq]uhZjÜ+hu]r6,h~Xknownr7,…r8,}r9,(hYUhZj3,ubahghÌubh~XU to be compatible†and (in the absence of additional information) according to the r:,…r;,}r<,(hYXS to be compatible" and (in the absence of additional information) according to the heNhsNhthhZjÜ+ubjD)r=,}r>,(hYXPVP_jGKhZjÜ+hgjHhi}r?,(UnameXPVPjƒj hn]hm]hk]hl]hq]uhu]r@,h~XPVPrA,…rB,}rC,(hYUhZj=,ubaubh~XL contract we can (positively) infer right away that all versions satisfying rD,…rE,}rF,(hYXL contract we can (positively) infer right away that all versions satisfying heNhsNhthhZjÜ+ubhä)rG,}rH,(hYX``foo >= 1.2.3.4 && < 1.3``hi}rI,(hk]hl]hm]hn]hq]uhZjÜ+hu]rJ,h~Xfoo >= 1.2.3.4 && < 1.3rK,…rL,}rM,(hYUhZjG,ubahghìubh~X will be compatible as well.rN,…rO,}rP,(hYX will be compatible as well.heNhsNhthhZjÜ+ubeubhð)rQ,}rR,(hYX5More 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``.hZj}*hehfhghóhi}rS,(hk]hl]hm]hn]hq]uhsNhthhu]rT,h‚)rU,}rV,(hYX5More 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``.hZjQ,hehfhgh†hi}rW,(hk]hl]hm]hn]hq]uhsMhu]rX,(h~XMore generally, the rY,…rZ,}r[,(hYXMore generally, the hZjU,ubjD)r\,}r],(hYXPVP_jGKhZjU,hgjHhi}r^,(UnameXPVPjƒj hn]hm]hk]hl]hq]uhu]r_,h~XPVPr`,…ra,}rb,(hYUhZj\,ubaubh~X> contract implies that we can safely relax the lower bound to rc,…rd,}re,(hYX> contract implies that we can safely relax the lower bound to hZjU,ubhä)rf,}rg,(hYX ``>= 1.2``hi}rh,(hk]hl]hm]hn]hq]uhZjU,hu]ri,h~X>= 1.2rj,…rk,}rl,(hYUhZjf,ubahghìubh~X, because if we know that rm,…rn,}ro,(hYX, because if we know that hZjU,ubhä)rp,}rq,(hYX``foo-1.2.3.4``hi}rr,(hk]hl]hm]hn]hq]uhZjU,hu]rs,h~X foo-1.2.3.4rt,…ru,}rv,(hYUhZjp,ubahghìubh~X( is semantically compatible, then so is rw,…rx,}ry,(hYX( is semantically compatible, then so is hZjU,ubhä)rz,}r{,(hYX ``foo-1.2``hi}r|,(hk]hl]hm]hn]hq]uhZjU,hu]r},h~Xfoo-1.2r~,…r,}r€,(hYUhZjz,ubahghì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 r,…r‚,}rƒ,(hYX× (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 hZjU,ubhä)r„,}r…,(hYX ``foo-1.2``hi}r†,(hk]hl]hm]hn]hq]uhZjU,hu]r‡,h~Xfoo-1.2rˆ,…r‰,}rŠ,(hYUhZj„,ubahghìubh~Xr. But since we cannot do this analysis during constraint solving and to keep things simple, we pragmatically use r‹,…rŒ,}r,(hYXr. But since we cannot do this analysis during constraint solving and to keep things simple, we pragmatically use hZjU,ubhä)rŽ,}r,(hYX``foo >= 1.2.3.4``hi}r,(hk]hl]hm]hn]hq]uhZjU,hu]r‘,h~Xfoo >= 1.2.3.4r’,…r“,}r”,(hYUhZjŽ,ubahghìubh~XZ as the initially inferred approximation for the lower bound resulting from the assertion r•,…r–,}r—,(hYXZ as the initially inferred approximation for the lower bound resulting from the assertion hZjU,ubhä)r˜,}r™,(hYX``foo ^>= 1.2.3.4``hi}rš,(hk]hl]hm]hn]hq]uhZjU,hu]r›,h~Xfoo ^>= 1.2.3.4rœ,…r,}rž,(hYUhZj˜,ubahghìubh~X2. If further evidence becomes available that e.g. rŸ,…r ,}r¡,(hYX2. If further evidence becomes available that e.g. hZjU,ubhä)r¢,}r£,(hYX ``foo-1.2``hi}r¤,(hk]hl]hm]hn]hq]uhZjU,hu]r¥,h~Xfoo-1.2r¦,…r§,}r¨,(hYUhZj¢,ubahghìubh~XY typechecks, one can simply revise the dependency specification to include the assertion r©,…rª,}r«,(hYXY typechecks, one can simply revise the dependency specification to include the assertion hZjU,ubhä)r¬,}r­,(hYX``foo ^>= 1.2``hi}r®,(hk]hl]hm]hn]hq]uhZjU,hu]r¯,h~X foo ^>= 1.2r°,…r±,}r²,(hYUhZj¬,ubahghìubh~X.…r³,}r´,(hYX.hZjU,ubeubaubh‚)rµ,}r¶,(hYXLThe 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.hZj}*hehfhgh†hi}r·,(hk]hl]hm]hn]hq]uhsMŸhthhu]r¸,(h~X^The subtle but important difference in signaling allows tooling to treat explicitly expressed r¹,…rº,}r»,(hYX^The subtle but important difference in signaling allows tooling to treat explicitly expressed heNhsNhthhZjµ,ubhä)r¼,}r½,(hYX``<``hi}r¾,(hk]hl]hm]hn]hq]uhZjµ,hu]r¿,h~X<…rÀ,}rÁ,(hYUhZj¼,ubahghìubh~X!-style constraints and inferred (rÂ,…rÃ,}rÄ,(hYX!-style constraints and inferred (heNhsNhthhZjµ,ubhä)rÅ,}rÆ,(hYX``^>=``hi}rÇ,(hk]hl]hm]hn]hq]uhZjµ,hu]rÈ,h~X^>=rÉ,…rÊ,}rË,(hYUhZjÅ,ubahghìubh~X1-style) upper bounds differently. For instance, rÌ,…rÍ,}rÎ,(hYX1-style) upper bounds differently. For instance, heNhsNhthhZjµ,ubjp)rÏ,}rÐ,(hYX:option:`--allow-newer`rÑ,hZjµ,hehfhgjthi}rÒ,(UreftypeXoptionjvˆjwX --allow-newerU refdomainXstdrÓ,hn]hm]U refexplicit‰hk]hl]hq]jyjzU std:programrÔ,NuhsMŸhu]rÕ,hä)rÖ,}r×,(hYjÑ,hi}rØ,(hk]hl]rÙ,(jjÓ,X std-optionrÚ,ehm]hn]hq]uhZjÏ,hu]rÛ,h~X --allow-newerrÜ,…rÝ,}rÞ,(hYUhZjÖ,ubahghìubaubh~X’s rß,…rà,}rá,(hYX's heNhsNhthhZjµ,ubhä)râ,}rã,(hYX``^``hi}rä,(hk]hl]hm]hn]hq]uhZjµ,hu]rå,h~X^…ræ,}rç,(hYUhZjâ,ubahghìubh~X-modifier allows to relax only rè,…ré,}rê,(hYX-modifier allows to relax only heNhsNhthhZjµ,ubhä)rë,}rì,(hYX``^>=``hi}rí,(hk]hl]hm]hn]hq]uhZjµ,hu]rî,h~X^>=rï,…rð,}rñ,(hYUhZjë,ubahghìubh~X.-style bounds while leaving explicitly stated rò,…ró,}rô,(hYX.-style bounds while leaving explicitly stated heNhsNhthhZjµ,ubhä)rõ,}rö,(hYX``<``hi}r÷,(hk]hl]hm]hn]hq]uhZjµ,hu]rø,h~X<…rù,}rú,(hYUhZjõ,ubahghìubh~X-constraints unaffected.rû,…rü,}rý,(hYX-constraints unaffected.heNhsNhthhZjµ,ubeubh‚)rþ,}rÿ,(hYXIIgnoring the signaling intent, the default syntactic desugaring rules arer-hZj}*hehfhgh†hi}r-(hk]hl]hm]hn]hq]uhsM¦hthhu]r-h~XIIgnoring the signaling intent, the default syntactic desugaring rules arer-…r-}r-(hYj-heNhsNhthhZjþ,ubaubhŒ)r-}r-(hYUhZj}*hehfhghhi}r-(h‘X-hn]hm]hk]hl]hq]uhsM¨hthhu]r -(h“)r -}r -(hYX``^>= x`` == ``>= x && < x.1``r -hZj-hehfhgh–hi}r -(hk]hl]hm]hn]hq]uhsNhthhu]r-h‚)r-}r-(hYj -hZj -hehfhgh†hi}r-(hk]hl]hm]hn]hq]uhsM¨hu]r-(hä)r-}r-(hYX ``^>= x``hi}r-(hk]hl]hm]hn]hq]uhZj-hu]r-h~X^>= xr-…r-}r-(hYUhZj-ubahghìubh~X == r-…r-}r-(hYX == hZj-ubhä)r-}r-(hYX``>= x && < x.1``hi}r-(hk]hl]hm]hn]hq]uhZj-hu]r -h~X >= x && < x.1r!-…r"-}r#-(hYUhZj-ubahghìubeubaubh“)r$-}r%-(hYX&``^>= x.y`` == ``>= x.y && < x.(y+1)``r&-hZj-hehfhgh–hi}r'-(hk]hl]hm]hn]hq]uhsNhthhu]r(-h‚)r)-}r*-(hYj&-hZj$-hehfhgh†hi}r+-(hk]hl]hm]hn]hq]uhsM©hu]r,-(hä)r--}r.-(hYX ``^>= x.y``hi}r/-(hk]hl]hm]hn]hq]uhZj)-hu]r0-h~X^>= x.yr1-…r2-}r3-(hYUhZj--ubahghìubh~X == r4-…r5-}r6-(hYX == hZj)-ubhä)r7-}r8-(hYX``>= x.y && < x.(y+1)``hi}r9-(hk]hl]hm]hn]hq]uhZj)-hu]r:-h~X>= x.y && < x.(y+1)r;-…r<-}r=-(hYUhZj7-ubahghìubeubaubh“)r>-}r?-(hYX*``^>= x.y.z`` == ``>= x.y.z && < x.(y+1)``r@-hZj-hehfhgh–hi}rA-(hk]hl]hm]hn]hq]uhsNhthhu]rB-h‚)rC-}rD-(hYj@-hZj>-hehfhgh†hi}rE-(hk]hl]hm]hn]hq]uhsMªhu]rF-(hä)rG-}rH-(hYX ``^>= x.y.z``hi}rI-(hk]hl]hm]hn]hq]uhZjC-hu]rJ-h~X ^>= x.y.zrK-…rL-}rM-(hYUhZjG-ubahghìubh~X == rN-…rO-}rP-(hYX == hZjC-ubhä)rQ-}rR-(hYX``>= x.y.z && < x.(y+1)``hi}rS-(hk]hl]hm]hn]hq]uhZjC-hu]rT-h~X>= x.y.z && < x.(y+1)rU-…rV-}rW-(hYUhZjQ-ubahghìubeubaubh“)rX-}rY-(hYX.``^>= x.y.z.u`` == ``>= x.y.z.u && < x.(y+1)``rZ-hZj-hehfhgh–hi}r[-(hk]hl]hm]hn]hq]uhsNhthhu]r\-h‚)r]-}r^-(hYjZ-hZjX-hehfhgh†hi}r_-(hk]hl]hm]hn]hq]uhsM«hu]r`-(hä)ra-}rb-(hYX``^>= x.y.z.u``hi}rc-(hk]hl]hm]hn]hq]uhZj]-hu]rd-h~X ^>= x.y.z.ure-…rf-}rg-(hYUhZja-ubahghìubh~X == rh-…ri-}rj-(hYX == hZj]-ubhä)rk-}rl-(hYX``>= x.y.z.u && < x.(y+1)``hi}rm-(hk]hl]hm]hn]hq]uhZj]-hu]rn-h~X>= x.y.z.u && < x.(y+1)ro-…rp-}rq-(hYUhZjk-ubahghìubeubaubh“)rr-}rs-(hYXetc. hZj-hehfhgh–hi}rt-(hk]hl]hm]hn]hq]uhsNhthhu]ru-h‚)rv-}rw-(hYXetc.rx-hZjr-hehfhgh†hi}ry-(hk]hl]hm]hn]hq]uhsM¬hu]rz-h~Xetc.r{-…r|-}r}-(hYjx-hZjv-ubaubaubeubhð)r~-}r-(hYXÐ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.hZj}*hehfhghóhi}r€-(hk]hl]hm]hn]hq]uhsNhthhu]r-h‚)r‚-}rƒ-(hYXÐ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.hZj~-hehfhgh†hi}r„-(hk]hl]hm]hn]hq]uhsM°hu]r…-(h~XqOne might expected the desugaring to truncate all version components below (and including) the patch-level, i.e. r†-…r‡-}rˆ-(hYXqOne might expected the desugaring to truncate all version components below (and including) the patch-level, i.e. hZj‚-ubhä)r‰-}rŠ-(hYX``^>= x.y.z.u``hi}r‹-(hk]hl]hm]hn]hq]uhZj‚-hu]rŒ-h~X ^>= x.y.z.ur-…rŽ-}r-(hYUhZj‰-ubahghìubh~X == r-…r‘-}r’-(hYX == hZj‚-ubhä)r“-}r”-(hYX``>= x.y.z && < x.(y+1)``hi}r•-(hk]hl]hm]hn]hq]uhZj‚-hu]r–-h~X>= x.y.z && < x.(y+1)r—-…r˜-}r™-(hYUhZj“-ubahghìubh~Xm, as the major and minor version components alone are supposed to uniquely identify the API according to the rš-…r›-}rœ-(hYXm, as the major and minor version components alone are supposed to uniquely identify the API according to the hZj‚-ubjD)r-}rž-(hYXPVP_jGKhZj‚-hgjHhi}rŸ-(UnameXPVPjƒj hn]hm]hk]hl]hq]uhu]r -h~XPVPr¡-…r¢-}r£-(hYUhZj-ubaubh~X. However, by designing r¤-…r¥-}r¦-(hYX. However, by designing hZj‚-ubhä)r§-}r¨-(hYX``^>=``hi}r©-(hk]hl]hm]hn]hq]uhZj‚-hu]rª-h~X^>=r«-…r¬-}r­-(hYUhZj§-ubahghìubh~X to be closer to the r®-…r¯-}r°-(hYX to be closer to the hZj‚-ubhä)r±-}r²-(hYX``>=``hi}r³-(hk]hl]hm]hn]hq]uhZj‚-hu]r´-h~X>=rµ-…r¶-}r·-(hYUhZj±-ubahghìubh~X8 operator, we avoid the potentially confusing effect of r¸-…r¹-}rº-(hYX8 operator, we avoid the potentially confusing effect of hZj‚-ubhä)r»-}r¼-(hYX``^>=``hi}r½-(hk]hl]hm]hn]hq]uhZj‚-hu]r¾-h~X^>=r¿-…rÀ-}rÁ-(hYUhZj»-ubahghìubh~X being more liberal than rÂ-…rÃ-}rÄ-(hYX being more liberal than hZj‚-ubhä)rÅ-}rÆ-(hYX``>=``hi}rÇ-(hk]hl]hm]hn]hq]uhZj‚-hu]rÈ-h~X>=rÉ-…rÊ-}rË-(hYUhZjÅ-ubahghìubh~X) in the presence of patch-level versions.rÌ-…rÍ-}rÎ-(hYX) in the presence of patch-level versions.hZj‚-ubeubaubh‚)rÏ-}rÐ-(hYX<Consequently, the example declaration above is equivalent torÑ-hZj}*hehfhgh†hi}rÒ-(hk]hl]hm]hn]hq]uhsM¹hthhu]rÓ-h~X<Consequently, the example declaration above is equivalent torÔ-…rÕ-}rÖ-(hYjÑ-heNhsNhthhZjÏ-ubaubjÑ)r×-}rØ-(hYX=build-depends: foo >= 1.2.3.4 && < 1.3, bar >= 1 && < 1.1hZj}*hehfhgjÔhi}rÙ-(jÖj×hn]hm]hk]hl]hq]uhsM½hthhu]rÚ-h~X=build-depends: foo >= 1.2.3.4 && < 1.3, bar >= 1 && < 1.1rÛ-…rÜ-}rÝ-(hYUhZj×-ubaubhð)rÞ-}rß-(hYX=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.hZj}*hehfhghóhi}rà-(hk]hl]hm]hn]hq]uhsNhthhu]rá-h‚)râ-}rã-(hYX=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.hZjÞ-hehfhgh†hi}rä-(hk]hl]hm]hn]hq]uhsMÃhu]rå-(h~XPrior to Cabal 1.8, ræ-…rç-}rè-(hYXPrior to Cabal 1.8, hZjâ-ubhä)ré-}rê-(hYX``build-depends``hi}rë-(hk]hl]hm]hn]hq]uhZjâ-hu]rì-h~X build-dependsrí-…rî-}rï-(hYUhZjé-ubahghì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ò-(hYX” 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 hZjâ-ubjp)ró-}rô-(hYX:pkg-field:`build-depends`rõ-hZjâ-hehfhgjthi}rö-(UreftypeX pkg-fieldjvˆjwX build-dependsU refdomainXcabalr÷-hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMÃhu]rø-hä)rù-}rú-(hYjõ-hi}rû-(hk]hl]rü-(jj÷-Xcabal-pkg-fieldrý-ehm]hn]hq]uhZjó-hu]rþ-h~X build-dependsrÿ-…r.}r.(hYUhZjù-ubahghìubaubh~X8 to be local to each section, you must specify at least r.…r.}r.(hYX8 to be local to each section, you must specify at least hZjâ-ubhä)r.}r.(hYX``Cabal-Version: >= 1.8``hi}r.(hk]hl]hm]hn]hq]uhZjâ-hu]r.h~XCabal-Version: >= 1.8r .…r .}r .(hYUhZj.ubahghìubh~X in your r .…r .}r.(hYX in your hZjâ-ubhä)r.}r.(hYX ``.cabal``hi}r.(hk]hl]hm]hn]hq]uhZjâ-hu]r.h~X.cabalr.…r.}r.(hYUhZj.ubahghìubh~X file.r.…r.}r.(hYX file.hZjâ-ubeubaubhð)r.}r.(hYX›Cabal 1.20 experimentally supported module thinning and renaming in ``build-depends``; however, this support has since been removed and should not be used.hZj}*hehfhghóhi}r.(hk]hl]hm]hn]hq]uhsNhthhu]r.h‚)r.}r.(hYX›Cabal 1.20 experimentally supported module thinning and renaming in ``build-depends``; however, this support has since been removed and should not be used.hZj.hehfhgh†hi}r.(hk]hl]hm]hn]hq]uhsMËhu]r .(h~XDCabal 1.20 experimentally supported module thinning and renaming in r!.…r".}r#.(hYXDCabal 1.20 experimentally supported module thinning and renaming in hZj.ubhä)r$.}r%.(hYX``build-depends``hi}r&.(hk]hl]hm]hn]hq]uhZj.hu]r'.h~X build-dependsr(.…r).}r*.(hYUhZj$.ubahghìubh~XF; however, this support has since been removed and should not be used.r+.…r,.}r-.(hYXF; however, this support has since been removed and should not be used.hZj.ubeubaubeubeubjþ)r..}r/.(hYUhZj+*heNhgjhi}r0.(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r1.}r2.(hYUhZj+*heNhgjhi}r3.(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr4.j j4.uhsNhthhu]r5.(j)r6.}r7.(hYXother-modules: identifier listhZj1.hehfhgjhi}r8.(hn]r9.Xpkg-field-other-modulesr:.ahm]hk]hl]hq]j‰uhsMÛhthhu]r;.(jþ)r<.}r=.(hYUhZj6.hehfhgjhi}r>.(hn]hm]hk]hl]hq]Uentries]r?.(jX"other-modules; package.cabal fieldj:.UNtr@.auhsMÛhthhu]ubj)rA.}rB.(hYX other-modulesrC.hZj6.hehfhgj!hi}rD.(jÖj×hn]hm]hk]hl]hq]uhsMÛhthhu]rE.h~X other-modulesrF.…rG.}rH.(hYUheNhsNhthhZjA.ubaubj')rI.}rJ.(hYj hZj6.hehfhgj*hi}rK.(jÖj×hn]hm]hk]hl]hq]uhsMÛhthhu]rL.h~X: rM.…rN.}rO.(hYUheNhsNhthhZjI.ubaubj¦)rP.}rQ.(hYXidentifier listhZj6.hehfhgj©hi}rR.(jÖj×hn]hm]hk]hl]hq]uhsMÛhthhu]rS.h~Xidentifier listrT.…rU.}rV.(hYUheNhsNhthhZjP.ubaubeubj/)rW.}rX.(hYUhZj1.hehfhgj2hi}rY.(hk]hl]hm]hn]hq]uhsMÛhthhu]rZ.(h‚)r[.}r\.(hYX÷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.hZjW.hehfhgh†hi}r].(hk]hl]hm]hn]hq]uhsMÑhthhu]r^.(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 r_.…r`.}ra.(hYXå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 heNhsNhthhZj[.ubhä)rb.}rc.(hYX ``main-is``hi}rd.(hk]hl]hm]hn]hq]uhZj[.hu]re.h~Xmain-isrf.…rg.}rh.(hYUhZjb.ubahghìubh~X field.ri.…rj.}rk.(hYX field.heNhsNhthhZj[.ubeubhð)rl.}rm.(hYX¢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.hZjW.hehfhghóhi}rn.(hk]hl]hm]hn]hq]uhsNhthhu]ro.h‚)rp.}rq.(hYX¢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.hZjl.hehfhgh†hi}rr.(hk]hl]hm]hn]hq]uhsMØhu]rs.(h~XEvery module in the package rt.…ru.}rv.(hYXEvery module in the package hZjp.ubhÄ)rw.}rx.(hYX*must*hi}ry.(hk]hl]hm]hn]hq]uhZjp.hu]rz.h~Xmustr{.…r|.}r}.(hYUhZjw.ubahghÌubh~X be listed in one of r~.…r.}r€.(hYX be listed in one of hZjp.ubjp)r.}r‚.(hYX:pkg-field:`other-modules`rƒ.hZjp.hehfhgjthi}r„.(UreftypeX pkg-fieldjvˆjwX other-modulesU refdomainXcabalr….hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMØhu]r†.hä)r‡.}rˆ.(hYjƒ.hi}r‰.(hk]hl]rŠ.(jj….Xcabal-pkg-fieldr‹.ehm]hn]hq]uhZj.hu]rŒ.h~X other-modulesr.…rŽ.}r.(hYUhZj‡.ubahghìubaubh~X, r.…r‘.}r’.(hYX, hZjp.ubjp)r“.}r”.(hYX$:pkg-field:`library:exposed-modules`r•.hZjp.hehfhgjthi}r–.(UreftypeX pkg-fieldjvˆjwXexposed-modulesU refdomainXcabalr—.hn]hm]U refexplicit‰hk]hl]hq]jyjzjXlibraryuhsMØhu]r˜.hä)r™.}rš.(hYj•.hi}r›.(hk]hl]rœ.(jj—.Xcabal-pkg-fieldr.ehm]hn]hq]uhZj“.hu]rž.h~Xlibrary:exposed-modulesrŸ.…r .}r¡.(hYUhZj™.ubahghìubaubh~X or r¢.…r£.}r¤.(hYX or hZjp.ubjp)r¥.}r¦.(hYX:pkg-field:`executable:main-is`r§.hZjp.hehfhgjthi}r¨.(UreftypeX pkg-fieldjvˆjwXmain-isU refdomainXcabalr©.hn]hm]U refexplicit‰hk]hl]hq]jyjzjX executableuhsMØhu]rª.hä)r«.}r¬.(hYj§.hi}r­.(hk]hl]r®.(jj©.Xcabal-pkg-fieldr¯.ehm]hn]hq]uhZj¥.hu]r°.h~Xexecutable:main-isr±.…r².}r³.(hYUhZj«.ubahghìubaubh~X fields.r´.…rµ.}r¶.(hYX fields.hZjp.ubeubaubeubeubjþ)r·.}r¸.(hYUhZj+*hehfhgjhi}r¹.(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rº.}r».(hYUhZj+*hehfhgjhi}r¼.(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr½.j j½.uhsNhthhu]r¾.(j)r¿.}rÀ.(hYXhs-source-dirs: directory listhZjº.hehfhgjhi}rÁ.(hn]rÂ.Xpkg-field-hs-source-dirsrÃ.ahm]hk]hl]hq]j‰uhsMähthhu]rÄ.(jþ)rÅ.}rÆ.(hYUhZj¿.hehfhgjhi}rÇ.(hn]hm]hk]hl]hq]Uentries]rÈ.(jX#hs-source-dirs; package.cabal fieldjÃ.UNtrÉ.auhsMähthhu]ubj)rÊ.}rË.(hYXhs-source-dirsrÌ.hZj¿.hehfhgj!hi}rÍ.(jÖj×hn]hm]hk]hl]hq]uhsMähthhu]rÎ.h~Xhs-source-dirsrÏ.…rÐ.}rÑ.(hYUheNhsNhthhZjÊ.ubaubj')rÒ.}rÓ.(hYj hZj¿.hehfhgj*hi}rÔ.(jÖj×hn]hm]hk]hl]hq]uhsMähthhu]rÕ.h~X: rÖ.…r×.}rØ.(hYUheNhsNhthhZjÒ.ubaubj¦)rÙ.}rÚ.(hYXdirectory listhZj¿.hehfhgj©hi}rÛ.(jÖj×hn]hm]hk]hl]hq]uhsMähthhu]rÜ.h~Xdirectory listrÝ.…rÞ.}rß.(hYUheNhsNhthhZjÙ.ubaubeubj/)rà.}rá.(hYUhZjº.hehfhgj2hi}râ.(hk]hl]hm]hn]hq]uhsMähthhu]rã.(j5)rä.}rå.(hYUhZjà.hehfhgj8hi}ræ.(hk]hl]hm]hn]hq]uhsNhthhu]rç.j;)rè.}ré.(hYUhi}rê.(hk]hl]hm]hn]hq]uhZjä.hu]rë.(jA)rì.}rí.(hYX Default valuehZjè.hehfhgjEhi}rî.(hk]hl]hm]hn]hq]uhsKhu]rï.h~X Default valuerð.…rñ.}rò.(hYUhZjì.ubaubjK)ró.}rô.(hYUhi}rõ.(hk]hl]hm]hn]hq]uhZjè.hu]rö.h‚)r÷.}rø.(hYX.hi}rù.(hk]hl]hm]hn]hq]uhZjó.hu]rú.hä)rû.}rü.(hYX``.``rý.hZj÷.hehfhghìhi}rþ.(hk]hl]hm]hn]hq]uhsNhthhu]rÿ.h~X.…r/}r/(hYUheNhsNhthhZjû.ubaubahgh†ubahgjXubehgj>ubaubh‚)r/}r/(hYX*Root directories for the module hierarchy.r/hZjà.hehfhgh†hi}r/(hk]hl]hm]hn]hq]uhsMàhthhu]r/h~X*Root directories for the module hierarchy.r/…r/}r /(hYj/heNhsNhthhZj/ubaubh‚)r /}r /(hYXRFor backwards compatibility, the old variant ``hs-source-dir`` is also recognized.hZjà.hehfhgh†hi}r /(hk]hl]hm]hn]hq]uhsMâhthhu]r /(h~X-For backwards compatibility, the old variant r/…r/}r/(hYX-For backwards compatibility, the old variant heNhsNhthhZj /ubhä)r/}r/(hYX``hs-source-dir``hi}r/(hk]hl]hm]hn]hq]uhZj /hu]r/h~X hs-source-dirr/…r/}r/(hYUhZj/ubahghìubh~X is also recognized.r/…r/}r/(hYX is also recognized.heNhsNhthhZj /ubeubeubeubjþ)r/}r/(hYUhZj+*hehfhgjhi}r/(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r/}r/(hYUhZj+*hehfhgjhi}r /(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr!/j j!/uhsNhthhu]r"/(j)r#/}r$/(hYX#default-extensions: identifier listhZj/hehfhgjhi}r%/(hn]r&/Xpkg-field-default-extensionsr'/ahm]hk]hl]hq]j‰uhsMíhthhu]r(/(jþ)r)/}r*/(hYUhZj#/hehfhgjhi}r+/(hn]hm]hk]hl]hq]Uentries]r,/(jX'default-extensions; package.cabal fieldj'/UNtr-/auhsMíhthhu]ubj)r./}r//(hYXdefault-extensionsr0/hZj#/hehfhgj!hi}r1/(jÖj×hn]hm]hk]hl]hq]uhsMíhthhu]r2/h~Xdefault-extensionsr3/…r4/}r5/(hYUheNhsNhthhZj./ubaubj')r6/}r7/(hYj hZj#/hehfhgj*hi}r8/(jÖj×hn]hm]hk]hl]hq]uhsMíhthhu]r9/h~X: r:/…r;/}r/(hYXidentifier listhZj#/hehfhgj©hi}r?/(jÖj×hn]hm]hk]hl]hq]uhsMíhthhu]r@/h~Xidentifier listrA/…rB/}rC/(hYUheNhsNhthhZj=/ubaubeubj/)rD/}rE/(hYUhZj/hehfhgj2hi}rF/(hk]hl]hm]hn]hq]uhsMíhthhu]rG/h‚)rH/}rI/(hYXsA 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.hZjD/hehfhgh†hi}rJ/(hk]hl]hm]hn]hq]uhsMçhthhu]rK/(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 rL/…rM/}rN/(hYX¥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 heNhsNhthhZjH/ubjD)rO/}rP/(hYXa`Extension <../release/cabal-latest/doc/API/Cabal/Language-Haskell-Extension.html#t:Extension>`__hi}rQ/(UnameX ExtensionjƒXQ../release/cabal-latest/doc/API/Cabal/Language-Haskell-Extension.html#t:Extensionhn]hm]hk]hl]hq]uhZjH/hu]rR/h~X ExtensionrS/…rT/}rU/(hYUhZjO/ubahgjHubh~X type. For example, rV/…rW/}rX/(hYX type. For example, heNhsNhthhZjH/ubhä)rY/}rZ/(hYX``CPP``hi}r[/(hk]hl]hm]hn]hq]uhZjH/hu]r\/h~XCPPr]/…r^/}r_/(hYUhZjY/ubahghìubh~XR specifies that Haskell source files are to be preprocessed with a C preprocessor.r`/…ra/}rb/(hYXR specifies that Haskell source files are to be preprocessed with a C preprocessor.heNhsNhthhZjH/ubeubaubeubjþ)rc/}rd/(hYUhZj+*hehfhgjhi}re/(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rf/}rg/(hYUhZj+*hehfhgjhi}rh/(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldri/j ji/uhsNhthhu]rj/(j)rk/}rl/(hYX!other-extensions: identifier listhZjf/hehfhgjhi}rm/(hn]rn/Xpkg-field-other-extensionsro/ahm]hk]hl]hq]j‰uhsM hthhu]rp/(jþ)rq/}rr/(hYUhZjk/hehfhgjhi}rs/(hn]hm]hk]hl]hq]Uentries]rt/(jX%other-extensions; package.cabal fieldjo/UNtru/auhsM hthhu]ubj)rv/}rw/(hYXother-extensionsrx/hZjk/hehfhgj!hi}ry/(jÖj×hn]hm]hk]hl]hq]uhsM hthhu]rz/h~Xother-extensionsr{/…r|/}r}/(hYUheNhsNhthhZjv/ubaubj')r~/}r/(hYj hZjk/hehfhgj*hi}r€/(jÖj×hn]hm]hk]hl]hq]uhsM hthhu]r/h~X: r‚/…rƒ/}r„/(hYUheNhsNhthhZj~/ubaubj¦)r…/}r†/(hYXidentifier listhZjk/hehfhgj©hi}r‡/(jÖj×hn]hm]hk]hl]hq]uhsM hthhu]rˆ/h~Xidentifier listr‰/…rŠ/}r‹/(hYUheNhsNhthhZj…/ubaubeubj/)rŒ/}r/(hYUhZjf/hehfhgj2hi}rŽ/(hk]hl]hm]hn]hq]uhsM hthhu]r/(h‚)r/}r‘/(hYXÃ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.hZjŒ/hehfhgh†hi}r’/(hk]hl]hm]hn]hq]uhsMðhthhu]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–/(hYXŽ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 heNhsNhthhZj/ubhä)r—/}r˜/(hYX ``LANGUAGE``hi}r™/(hk]hl]hm]hn]hq]uhZj/hu]rš/h~XLANGUAGEr›/…rœ/}r/(hYUhZj—/ubahghìubh~X) pragma in the source files affected e.g.rž/…rŸ/}r /(hYX) pragma in the source files affected e.g.heNhsNhthhZj/ubeubjÑ)r¡/}r¢/(hYX+{-# LANGUAGE CPP, MultiParamTypeClasses #-}hZjŒ/hehfhgjÔhi}r£/(j‰jXhaskelljÖj×hn]hm]hk]j}hl]hq]uhsMôhthhu]r¤/h~X+{-# LANGUAGE CPP, MultiParamTypeClasses #-}r¥/…r¦/}r§/(hYUhZj¡/ubaubh‚)r¨/}r©/(hYXÅ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.hZjŒ/hehfhgh†hi}rª/(hk]hl]hm]hn]hq]uhsMøhthhu]r«/(h~X6In Cabal-1.24 the dependency solver will use this and r¬/…r­/}r®/(hYX6In Cabal-1.24 the dependency solver will use this and heNhsNhthhZj¨/ubjp)r¯/}r°/(hYX:pkg-field:`default-extensions`r±/hZj¨/hehfhgjthi}r²/(UreftypeX pkg-fieldjvˆjwXdefault-extensionsU refdomainXcabalr³/hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMøhu]r´/hä)rµ/}r¶/(hYj±/hi}r·/(hk]hl]r¸/(jj³/Xcabal-pkg-fieldr¹/ehm]hn]hq]uhZj¯/hu]rº/h~Xdefault-extensionsr»/…r¼/}r½/(hYUhZjµ/ubahghìubaubh~Xr information. Cabal prior to 1.24 will abort compilation if the current compiler doesn’t provide the extensions.r¾/…r¿/}rÀ/(hYXp information. Cabal prior to 1.24 will abort compilation if the current compiler doesn't provide the extensions.heNhsNhthhZj¨/ubeubh‚)rÁ/}rÂ/(hYX¥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:hZjŒ/hehfhgh†hi}rÃ/(hk]hl]hm]hn]hq]uhsMühthhu]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Ç/(hYXzIf you use some extensions conditionally, using CPP or conditional module lists, it is good to replicate the condition in heNhsNhthhZjÁ/ubjp)rÈ/}rÉ/(hYX:pkg-field:`other-extensions`rÊ/hZjÁ/hehfhgjthi}rË/(UreftypeX pkg-fieldjvˆjwXother-extensionsU refdomainXcabalrÌ/hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMühu]rÍ/hä)rÎ/}rÏ/(hYjÊ/hi}rÐ/(hk]hl]rÑ/(jjÌ/Xcabal-pkg-fieldrÒ/ehm]hn]hq]uhZjÈ/hu]rÓ/h~Xother-extensionsrÔ/…rÕ/}rÖ/(hYUhZjÎ/ubahghìubaubh~X declarations:r×/…rØ/}rÙ/(hYX declarations:heNhsNhthhZjÁ/ubeubjÑ)rÚ/}rÛ/(hYXGother-extensions: CPP if impl(ghc >= 7.5) other-extensions: PolyKindshZjŒ/hehfhgjÔhi}rÜ/(jÖj×hn]hm]hk]hl]hq]uhsMhthhu]rÝ/h~XGother-extensions: CPP if impl(ghc >= 7.5) other-extensions: PolyKindsrÞ/…rß/}rà/(hYUhZjÚ/ubaubh‚)rá/}râ/(hYX¯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.hZjŒ/hehfhgh†hi}rã/(hk]hl]hm]hn]hq]uhsMhthhu]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ç/(hYX„You could also omit the conditionally used extensions, as they are for information only, but it is recommended to replicate them in heNhsNhthhZjá/ubjp)rè/}ré/(hYX:pkg-field:`other-extensions`rê/hZjá/hehfhgjthi}rë/(UreftypeX pkg-fieldjvˆjwXother-extensionsU refdomainXcabalrì/hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMhu]rí/hä)rî/}rï/(hYjê/hi}rð/(hk]hl]rñ/(jjì/Xcabal-pkg-fieldrò/ehm]hn]hq]uhZjè/hu]ró/h~Xother-extensionsrô/…rõ/}rö/(hYUhZjî/ubahghìubaubh~X declarations.r÷/…rø/}rù/(hYX declarations.heNhsNhthhZjá/ubeubeubeubjþ)rú/}rû/(hYUhZj+*hehfhgjhi}rü/(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rý/}rþ/(hYUhZj+*hehfhgjhi}rÿ/(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr0j j0uhsNhthhu]r0(j)r0}r0(hYXextensions: identifier listhZjý/hehfhgjhi}r0(hn]r0Xpkg-field-extensionsr0ahm]hk]hl]hq]j‰uhsNhthhu]r0(jþ)r0}r 0(hYUhZj0hehfhgjhi}r 0(hn]hm]hk]hl]hq]Uentries]r 0(jXextensions; package.cabal fieldj0UNtr 0auhsNhthhu]ubj)r 0}r0(hYX extensionsr0hZj0hehfhgj!hi}r0(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r0h~X extensionsr0…r0}r0(hYUheNhsNhthhZj 0ubaubj')r0}r0(hYj hZj0hehfhgj*hi}r0(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r0h~X: r0…r0}r0(hYUheNhsNhthhZj0ubaubj¦)r0}r0(hYXidentifier listhZj0hehfhgj©hi}r0(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r0h~Xidentifier listr 0…r!0}r"0(hYUheNhsNhthhZj0ubaubeubj/)r#0}r$0(hYUhZjý/hehfhgj2hi}r%0(hk]hl]hm]hn]hq]uhsNhthhu]r&0(j5)r'0}r(0(hYUhZj#0hehfhgj8hi}r)0(hk]hl]hm]hn]hq]uhsNhthhu]r*0j;)r+0}r,0(hYUhZj'0hehfhgj>hi}r-0(hk]hl]hm]hn]hq]uhsNhthhu]r.0(jA)r/0}r00(hYU Deprecatedr10hZj+0hehfhgjEhi}r20(hk]hl]hm]hn]hq]uhsKhu]r30h~X Deprecatedr40…r50}r60(hYUhZj/0ubaubjK)r70}r80(hYUhi}r90(hk]hl]hm]hn]hq]uhZj+0hu]r:0h‚)r;0}r<0(hYUhi}r=0(hk]hl]hm]hn]hq]uhZj70hu]hgh†ubahgjXubeubaubh‚)r>0}r?0(hYX7Deprecated in favor of :pkg-field:`default-extensions`.hZj#0hehfhgh†hi}r@0(hk]hl]hm]hn]hq]uhsM hthhu]rA0(h~XDeprecated in favor of rB0…rC0}rD0(hYXDeprecated in favor of heNhsNhthhZj>0ubjp)rE0}rF0(hYX:pkg-field:`default-extensions`rG0hZj>0hehfhgjthi}rH0(UreftypeX pkg-fieldjvˆjwXdefault-extensionsU refdomainXcabalrI0hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsM hu]rJ0hä)rK0}rL0(hYjG0hi}rM0(hk]hl]rN0(jjI0Xcabal-pkg-fieldrO0ehm]hn]hq]uhZjE0hu]rP0h~Xdefault-extensionsrQ0…rR0}rS0(hYUhZjK0ubahghìubaubh~X.…rT0}rU0(hYX.heNhsNhthhZj>0ubeubeubeubjþ)rV0}rW0(hYUhZj+*hehfhgjhi}rX0(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rY0}rZ0(hYUhZj+*hehfhgjhi}r[0(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr\0j j\0uhsNhthhu]r]0(j)r^0}r_0(hYX+build-tool-depends: package:executable listhZjY0hehfhgjhi}r`0(hn]ra0Xpkg-field-build-tool-dependsrb0ahm]hk]hl]hq]j‰uhsNhthhu]rc0(jþ)rd0}re0(hYUhZj^0hehfhgjhi}rf0(hn]hm]hk]hl]hq]Uentries]rg0(jX'build-tool-depends; package.cabal fieldjb0UNtrh0auhsNhthhu]ubj)ri0}rj0(hYXbuild-tool-dependsrk0hZj^0hehfhgj!hi}rl0(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rm0h~Xbuild-tool-dependsrn0…ro0}rp0(hYUheNhsNhthhZji0ubaubj')rq0}rr0(hYj hZj^0hehfhgj*hi}rs0(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rt0h~X: ru0…rv0}rw0(hYUheNhsNhthhZjq0ubaubj¦)rx0}ry0(hYXpackage:executable listhZj^0hehfhgj©hi}rz0(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r{0h~Xpackage:executable listr|0…r}0}r~0(hYUheNhsNhthhZjx0ubaubeubj/)r0}r€0(hYUhZjY0hehfhgj2hi}r0(hk]hl]hm]hn]hq]uhsNhthhu]r‚0(j5)rƒ0}r„0(hYUhZj0hehfhgj8hi}r…0(hk]hl]hm]hn]hq]uhsNhthhu]r†0j;)r‡0}rˆ0(hYUhZjƒ0hehfhgj>hi}r‰0(hk]hl]hm]hn]hq]uhsNhthhu]rŠ0(jA)r‹0}rŒ0(hYjDhZj‡0hehfhgjEhi}r0(hk]hl]hm]hn]hq]uhsKhu]rŽ0h~XSincer0…r0}r‘0(hYUhZj‹0ubaubjK)r’0}r“0(hYU Cabal 2.0r”0hi}r•0(hk]hl]hm]hn]hq]uhZj‡0hu]r–0h‚)r—0}r˜0(hYj”0hi}r™0(hk]hl]hm]hn]hq]uhZj’0hu]rš0h~X Cabal 2.0r›0…rœ0}r0(hYUhZj—0ubahgh†ubahgjXubeubaubh‚)rž0}rŸ0(hYXjA 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.hZj0hehfhgh†hi}r 0(hk]hl]hm]hn]hq]uhsMhthhu]r¡0(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¢0…r£0}r¤0(hYX1A 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 heNhsNhthhZjž0ubhÄ)r¥0}r¦0(hYX *internal*hi}r§0(hk]hl]hm]hn]hq]uhZjž0hu]r¨0h~Xinternalr©0…rª0}r«0(hYUhZj¥0ubahghÌubh~X, rather than r¬0…r­0}r®0(hYX, rather than heNhsNhthhZjž0ubhÄ)r¯0}r°0(hYX *external*hi}r±0(hk]hl]hm]hn]hq]uhZjž0hu]r²0h~Xexternalr³0…r´0}rµ0(hYUhZj¯0ubahghÌubh~X executable dependency.r¶0…r·0}r¸0(hYX executable dependency.heNhsNhthhZjž0ubeubh‚)r¹0}rº0(hYXÚ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.hZj0hehfhgh†hi}r»0(hk]hl]hm]hn]hq]uhsMhthhu]r¼0(h~XQExternal dependencies can (and should) contain a version bound like conventional r½0…r¾0}r¿0(hYXQExternal dependencies can (and should) contain a version bound like conventional heNhsNhthhZj¹0ubjp)rÀ0}rÁ0(hYX:pkg-field:`build-depends`rÂ0hZj¹0hehfhgjthi}rÃ0(UreftypeX pkg-fieldjvˆjwX build-dependsU refdomainXcabalrÄ0hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMhu]rÅ0hä)rÆ0}rÇ0(hYjÂ0hi}rÈ0(hk]hl]rÉ0(jjÄ0Xcabal-pkg-fieldrÊ0ehm]hn]hq]uhZjÀ0hu]rË0h~X build-dependsrÌ0…rÍ0}rÎ0(hYUhZjÆ0ubahghì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Ï0…rÐ0}rÑ0(hYXo 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.heNhsNhthhZj¹0ubeubh‚)rÒ0}rÓ0(hYXð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.hZj0hehfhgh†hi}rÔ0(hk]hl]hm]hn]hq]uhsMhthhu]rÕ0(h~XACabal can make sure that specified programs are built and on the rÖ0…r×0}rØ0(hYXACabal can make sure that specified programs are built and on the heNhsNhthhZjÒ0ubhä)rÙ0}rÚ0(hYX``PATH``hi}rÛ0(hk]hl]hm]hn]hq]uhZjÒ0hu]rÜ0h~XPATHrÝ0…rÞ0}rß0(hYUhZjÙ0ubahghì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à0…rá0}râ0(hYX§ 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.heNhsNhthhZjÒ0ubeubh‚)rã0}rä0(hYXÍ: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.hZj0hehfhgh†hi}rå0(hk]hl]hm]hn]hq]uhsMhthhu]ræ0(jp)rç0}rè0(hYX:pkg-field:`build-tool-depends`ré0hZjã0hehfhgjthi}rê0(UreftypeX pkg-fieldjvˆjwXbuild-tool-dependsU refdomainXcabalrë0hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMhu]rì0hä)rí0}rî0(hYjé0hi}rï0(hk]hl]rð0(jjë0Xcabal-pkg-fieldrñ0ehm]hn]hq]uhZjç0hu]rò0h~Xbuild-tool-dependsró0…rô0}rõ0(hYUhZjí0ubahghìubaubh~Xb was added in Cabal 2.0, and it will be ignored (with a warning) with old versions of Cabal. See rö0…r÷0}rø0(hYXb was added in Cabal 2.0, and it will be ignored (with a warning) with old versions of Cabal. See heNhsNhthhZjã0ubjp)rù0}rú0(hYX:pkg-field:`build-tools`rû0hZjã0hehfhgjthi}rü0(UreftypeX pkg-fieldjvˆjwX build-toolsU refdomainXcabalrý0hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMhu]rþ0hä)rÿ0}r1(hYjû0hi}r1(hk]hl]r1(jjý0Xcabal-pkg-fieldr1ehm]hn]hq]uhZjù0hu]r1h~X build-toolsr1…r1}r1(hYUhZjÿ0ubahghìubaubh~X4 for more information about backwards compatibility.r1…r 1}r 1(hYX4 for more information about backwards compatibility.heNhsNhthhZjã0ubeubeubeubjþ)r 1}r 1(hYUhZj+*hehfhgjhi}r 1(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r1}r1(hYUhZj+*hehfhgjhi}r1(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr1j j1uhsNhthhu]r1(j)r1}r1(hYXbuild-tools: program listhZj1hehfhgjhi}r1(hn]r1Xpkg-field-build-toolsr1ahm]hk]hl]hq]j‰uhsNhthhu]r1(jþ)r1}r1(hYUhZj1hehfhgjhi}r1(hn]hm]hk]hl]hq]Uentries]r1(jX build-tools; package.cabal fieldj1UNtr1auhsNhthhu]ubj)r1}r1(hYX build-toolsr 1hZj1hehfhgj!hi}r!1(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r"1h~X build-toolsr#1…r$1}r%1(hYUheNhsNhthhZj1ubaubj')r&1}r'1(hYj hZj1hehfhgj*hi}r(1(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r)1h~X: r*1…r+1}r,1(hYUheNhsNhthhZj&1ubaubj¦)r-1}r.1(hYX program listhZj1hehfhgj©hi}r/1(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r01h~X program listr11…r21}r31(hYUheNhsNhthhZj-1ubaubeubj/)r41}r51(hYUhZj1hehfhgj2hi}r61(hk]hl]hm]hn]hq]uhsNhthhu]r71(j5)r81}r91(hYUhZj41hehfhgj8hi}r:1(hk]hl]hm]hn]hq]uhsNhthhu]r;1j;)r<1}r=1(hYUhZj81hehfhgj>hi}r>1(hk]hl]hm]hn]hq]uhsNhthhu]r?1(jA)r@1}rA1(hYj10hZj<1hehfhgjEhi}rB1(hk]hl]hm]hn]hq]uhsKhu]rC1h~X DeprecatedrD1…rE1}rF1(hYUhZj@1ubaubjK)rG1}rH1(hYUhi}rI1(hk]hl]hm]hn]hq]uhZj<1hu]rJ1h‚)rK1}rL1(hYUhi}rM1(hk]hl]hm]hn]hq]uhZjG1hu]hgh†ubahgjXubeubaubh‚)rN1}rO1(hYX„Deprecated in favor of :pkg-field:`build-tool-depends`, but :ref:`see below for backwards compatibility information `.hZj41hehfhgh†hi}rP1(hk]hl]hm]hn]hq]uhsM%hthhu]rQ1(h~XDeprecated in favor of rR1…rS1}rT1(hYXDeprecated in favor of heNhsNhthhZjN1ubjp)rU1}rV1(hYX:pkg-field:`build-tool-depends`rW1hZjN1hehfhgjthi}rX1(UreftypeX pkg-fieldjvˆjwXbuild-tool-dependsU refdomainXcabalrY1hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsM%hu]rZ1hä)r[1}r\1(hYjW1hi}r]1(hk]hl]r^1(jjY1Xcabal-pkg-fieldr_1ehm]hn]hq]uhZjU1hu]r`1h~Xbuild-tool-dependsra1…rb1}rc1(hYUhZj[1ubahghìubaubh~X, but rd1…re1}rf1(hYX, but heNhsNhthhZjN1ubjp)rg1}rh1(hYXG:ref:`see below for backwards compatibility information `ri1hZjN1hehfhgjthi}rj1(UreftypeXrefjvˆjwX buildtoolsbcU refdomainXstdrk1hn]hm]U refexplicitˆhk]hl]hq]jyjzuhsM%hu]rl1j|)rm1}rn1(hYji1hi}ro1(hk]hl]rp1(jjk1Xstd-refrq1ehm]hn]hq]uhZjg1hu]rr1h~X1see below for backwards compatibility informationrs1…rt1}ru1(hYUhZjm1ubahgj‡ubaubh~X.…rv1}rw1(hYX.heNhsNhthhZjN1ubeubh‚)rx1}ry1(hYX¸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:rz1hZj41hehfhgh†hi}r{1(hk]hl]hm]hn]hq]uhsM'hthhu]r|1h~X¸A list of Haskell programs needed to build this component. Each may be followed by an optional version bound. Confusingly, each program in the list either refer to one of three things:r}1…r~1}r1(hYjz1heNhsNhthhZjx1ubaubj€)r€1}r1(hYUhZj41heNhgjƒhi}r‚1(hk]hl]hm]hn]hq]uhsNhthhu]rƒ1cdocutils.nodes enumerated_list r„1)r…1}r†1(hYUhi}r‡1(Usuffixrˆ1U.hn]hm]hk]Uprefixr‰1Uhl]hq]UenumtyperŠ1Uarabicr‹1uhZj€1hu]rŒ1(h“)r1}rŽ1(hYXEAnother executables in the same package (supported since Cabal 1.12) hi}r1(hk]hl]hm]hn]hq]uhZj…1hu]r1h‚)r‘1}r’1(hYXDAnother executables in the same package (supported since Cabal 1.12)r“1hZj1hehfhgh†hi}r”1(hk]hl]hm]hn]hq]uhsM+hu]r•1h~XDAnother executables in the same package (supported since Cabal 1.12)r–1…r—1}r˜1(hYj“1hZj‘1ubaubahgh–ubh“)r™1}rš1(hYXUTool name contained in Cabal's :ref:`hard-coded set of common tools ` hi}r›1(hk]hl]hm]hn]hq]uhZj…1hu]rœ1h‚)r1}rž1(hYXTTool name contained in Cabal's :ref:`hard-coded set of common tools `hZj™1hehfhgh†hi}rŸ1(hk]hl]hm]hn]hq]uhsM-hu]r 1(h~X!Tool name contained in Cabal’s r¡1…r¢1}r£1(hYXTool name contained in Cabal's hZj1ubjp)r¤1}r¥1(hYX5:ref:`hard-coded set of common tools `r¦1hZj1hehfhgjthi}r§1(UreftypeXrefjvˆjwX buildtoolsmapU refdomainXstdr¨1hn]hm]U refexplicitˆhk]hl]hq]jyjzuhsM-hu]r©1j|)rª1}r«1(hYj¦1hi}r¬1(hk]hl]r­1(jj¨1Xstd-refr®1ehm]hn]hq]uhZj¤1hu]r¯1h~Xhard-coded set of common toolsr°1…r±1}r²1(hYUhZjª1ubahgj‡ubaubeubahgh–ubh“)r³1}r´1(hYXZA pre-built executable that should already be on the ``PATH`` (supported since Cabal 2.0) hi}rµ1(hk]hl]hm]hn]hq]uhZj…1hu]r¶1h‚)r·1}r¸1(hYXYA pre-built executable that should already be on the ``PATH`` (supported since Cabal 2.0)hZj³1hehfhgh†hi}r¹1(hk]hl]hm]hn]hq]uhsM/hu]rº1(h~X5A pre-built executable that should already be on the r»1…r¼1}r½1(hYX5A pre-built executable that should already be on the hZj·1ubhä)r¾1}r¿1(hYX``PATH``hi}rÀ1(hk]hl]hm]hn]hq]uhZj·1hu]rÁ1h~XPATHrÂ1…rÃ1}rÄ1(hYUhZj¾1ubahghìubh~X (supported since Cabal 2.0)rÅ1…rÆ1}rÇ1(hYX (supported since Cabal 2.0)hZj·1ubeubahgh–ubehgUenumerated_listrÈ1ubaubh‚)rÉ1}rÊ1(hYXÑ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``.hZj41hehfhgh†hi}rË1(hk]hl]hm]hn]hq]uhsM2hthhu]rÌ1(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Í1…rÎ1}rÏ1(hYXÈ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 heNhsNhthhZjÉ1ubhä)rÐ1}rÑ1(hYX``PATH``hi}rÒ1(hk]hl]hm]hn]hq]uhZjÉ1hu]rÓ1h~XPATHrÔ1…rÕ1}rÖ1(hYUhZjÐ1ubahghìubh~X.…r×1}rØ1(hYX.heNhsNhthhZjÉ1ubeubh‚)rÙ1}rÚ1(hYXIn 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.hZj41hehfhgh†hi}rÛ1(hk]hl]hm]hn]hq]uhsM6hthhu]rÜ1(h~X;In the first two cases, the list entry is desugared into a rÝ1…rÞ1}rß1(hYX;In the first two cases, the list entry is desugared into a heNhsNhthhZjÙ1ubjp)rà1}rá1(hYX:pkg-field:`build-tool-depends`râ1hZjÙ1hehfhgjthi}rã1(UreftypeX pkg-fieldjvˆjwXbuild-tool-dependsU refdomainXcabalrä1hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsM6hu]rå1hä)ræ1}rç1(hYjâ1hi}rè1(hk]hl]ré1(jjä1Xcabal-pkg-fieldrê1ehm]hn]hq]uhZjà1hu]rë1h~Xbuild-tool-dependsrì1…rí1}rî1(hYUhZjæ1ubahghìubaubh~X9 entry. In the first case, the entry is desugared into a rï1…rð1}rñ1(hYX9 entry. In the first case, the entry is desugared into a heNhsNhthhZjÙ1ubjp)rò1}ró1(hYX:pkg-field:`build-tool-depends`rô1hZjÙ1hehfhgjthi}rõ1(UreftypeX pkg-fieldjvˆjwXbuild-tool-dependsU refdomainXcabalrö1hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsM6hu]r÷1hä)rø1}rù1(hYjô1hi}rú1(hk]hl]rû1(jjö1Xcabal-pkg-fieldrü1ehm]hn]hq]uhZjò1hu]rý1h~Xbuild-tool-dependsrþ1…rÿ1}r2(hYUhZjø1ubahghìubaubh~X entry by prefixing with r2…r2}r2(hYX entry by prefixing with heNhsNhthhZjÙ1ubhä)r2}r2(hYX ``$pkg:``hi}r2(hk]hl]hm]hn]hq]uhZjÙ1hu]r2h~X$pkg:r2…r 2}r 2(hYUhZj2ubahghì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 2…r 2}r 2(hYXÒ. 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 heNhsNhthhZjÙ1ubjp)r2}r2(hYX:pkg-field:`build-tool-depends`r2hZjÙ1hehfhgjthi}r2(UreftypeX pkg-fieldjvˆjwXbuild-tool-dependsU refdomainXcabalr2hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsM6hu]r2hä)r2}r2(hYj2hi}r2(hk]hl]r2(jj2Xcabal-pkg-fieldr2ehm]hn]hq]uhZj2hu]r2h~Xbuild-tool-dependsr2…r2}r2(hYUhZj2ubahghìubaubh~XZ to understand the desugared field’s meaning, along with restrictions on version bounds.r2…r2}r2(hYXX to understand the desugared field's meaning, along with restrictions on version bounds.heNhsNhthhZjÙ1ubeubj¥)r 2}r!2(hYX.. _buildtoolsbc:hZj41hehfhgj¨hi}r"2(hn]hm]hk]hl]hq]jJU buildtoolsbcr#2uhsM<hthhu]ubh‚)r$2}r%2(hYX**Backward Compatiblity**r&2hZj41hehfj}r'2h@j 2shgh†hi}r(2(hk]hl]hm]hn]r)2j#2ahq]r*2h@auhsM>hthj}r+2j#2j 2shu]r,2j¯)r-2}r.2(hYj&2hi}r/2(hk]hl]hm]hn]hq]uhZj$2hu]r02h~XBackward Compatiblityr12…r22}r32(hYUhZj-2ubahgj·ubaubh‚)r42}r52(hYXRAlthough 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``.hZj41hehfhgh†hi}r62(hk]hl]hm]hn]hq]uhsM@hthhu]r72(h~X.Although this field is deprecated in favor of r82…r92}r:2(hYX.Although this field is deprecated in favor of heNhsNhthhZj42ubjp)r;2}r<2(hYX:pkg-field:`build-tool-depends`r=2hZj42hehfhgjthi}r>2(UreftypeX pkg-fieldjvˆjwXbuild-tool-dependsU refdomainXcabalr?2hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsM@hu]r@2hä)rA2}rB2(hYj=2hi}rC2(hk]hl]rD2(jj?2Xcabal-pkg-fieldrE2ehm]hn]hq]uhZj;2hu]rF2h~Xbuild-tool-dependsrG2…rH2}rI2(hYUhZjA2ubahghìubaubh~X8, there are some situations where you may prefer to use rJ2…rK2}rL2(hYX8, there are some situations where you may prefer to use heNhsNhthhZj42ubjp)rM2}rN2(hYX:pkg-field:`build-tools`rO2hZj42hehfhgjthi}rP2(UreftypeX pkg-fieldjvˆjwX build-toolsU refdomainXcabalrQ2hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsM@hu]rR2hä)rS2}rT2(hYjO2hi}rU2(hk]hl]rV2(jjQ2Xcabal-pkg-fieldrW2ehm]hn]hq]uhZjM2hu]rX2h~X build-toolsrY2…rZ2}r[2(hYUhZjS2ubahghìubaubh~XR in cases (1) and (2), as it is supported by more versions of Cabal. In case (3), r\2…r]2}r^2(hYXR in cases (1) and (2), as it is supported by more versions of Cabal. In case (3), heNhsNhthhZj42ubjp)r_2}r`2(hYX:pkg-field:`build-tool-depends`ra2hZj42hehfhgjthi}rb2(UreftypeX pkg-fieldjvˆjwXbuild-tool-dependsU refdomainXcabalrc2hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsM@hu]rd2hä)re2}rf2(hYja2hi}rg2(hk]hl]rh2(jjc2Xcabal-pkg-fieldri2ehm]hn]hq]uhZj_2hu]rj2h~Xbuild-tool-dependsrk2…rl2}rm2(hYUhZje2ubahghìubaubh~Xu is better for backwards-compatibility, as it will be ignored by old versions of Cabal; if you add the executable to rn2…ro2}rp2(hYXu is better for backwards-compatibility, as it will be ignored by old versions of Cabal; if you add the executable to heNhsNhthhZj42ubjp)rq2}rr2(hYX:pkg-field:`build-tools`rs2hZj42hehfhgjthi}rt2(UreftypeX pkg-fieldjvˆjwX build-toolsU refdomainXcabalru2hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsM@hu]rv2hä)rw2}rx2(hYjs2hi}ry2(hk]hl]rz2(jju2Xcabal-pkg-fieldr{2ehm]hn]hq]uhZjq2hu]r|2h~X build-toolsr}2…r~2}r2(hYUhZjw2ubahghìubaubh~X®, a setup script built against old Cabal will choke. If an old version of Cabal is used, an end-user will have to manually arrange for the requested executable to be in your r€2…r2}r‚2(hYX®, 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 heNhsNhthhZj42ubhä)rƒ2}r„2(hYX``PATH``hi}r…2(hk]hl]hm]hn]hq]uhZj42hu]r†2h~XPATHr‡2…rˆ2}r‰2(hYUhZjƒ2ubahghìubh~X.…rŠ2}r‹2(hYX.heNhsNhthhZj42ubeubj¥)rŒ2}r2(hYX.. _buildtoolsmap:hZj41hehfhgj¨hi}rŽ2(hn]hm]hk]hl]hq]jJU buildtoolsmapr2uhsMDhthhu]ubh‚)r2}r‘2(hYX**Set of Known Tool Names**r’2hZj41hehfj}r“2h6jŒ2shgh†hi}r”2(hk]hl]hm]hn]r•2j2ahq]r–2h6auhsMFhthj}r—2j2jŒ2shu]r˜2j¯)r™2}rš2(hYj’2hi}r›2(hk]hl]hm]hn]hq]uhZj2hu]rœ2h~XSet of Known Tool Namesr2…rž2}rŸ2(hYUhZj™2ubahgj·ubaubh‚)r 2}r¡2(hYXÒIdentifiers specified in :pkg-field:`build-tools` are desugared into their respective equivalent :pkg-field:`build-tool-depends` form according to the table below. Consequently, a legacy specification such as::hZj41hehfhgh†hi}r¢2(hk]hl]hm]hn]hq]uhsMHhthhu]r£2(h~XIdentifiers specified in r¤2…r¥2}r¦2(hYXIdentifiers specified in heNhsNhthhZj 2ubjp)r§2}r¨2(hYX:pkg-field:`build-tools`r©2hZj 2hehfhgjthi}rª2(UreftypeX pkg-fieldjvˆjwX build-toolsU refdomainXcabalr«2hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMHhu]r¬2hä)r­2}r®2(hYj©2hi}r¯2(hk]hl]r°2(jj«2Xcabal-pkg-fieldr±2ehm]hn]hq]uhZj§2hu]r²2h~X build-toolsr³2…r´2}rµ2(hYUhZj­2ubahghìubaubh~X0 are desugared into their respective equivalent r¶2…r·2}r¸2(hYX0 are desugared into their respective equivalent heNhsNhthhZj 2ubjp)r¹2}rº2(hYX:pkg-field:`build-tool-depends`r»2hZj 2hehfhgjthi}r¼2(UreftypeX pkg-fieldjvˆjwXbuild-tool-dependsU refdomainXcabalr½2hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMHhu]r¾2hä)r¿2}rÀ2(hYj»2hi}rÁ2(hk]hl]rÂ2(jj½2Xcabal-pkg-fieldrÃ2ehm]hn]hq]uhZj¹2hu]rÄ2h~Xbuild-tool-dependsrÅ2…rÆ2}rÇ2(hYUhZj¿2ubahghìubaubh~XQ form according to the table below. Consequently, a legacy specification such as:rÈ2…rÉ2}rÊ2(hYXQ form according to the table below. Consequently, a legacy specification such as:heNhsNhthhZj 2ubeubjÑ)rË2}rÌ2(hYX>build-tools: alex >= 3.2.1 && < 3.3, happy >= 1.19.5 && < 1.20hZj41hehfhgjÔhi}rÍ2(jÖj×hn]hm]hk]hl]hq]uhsMJhthhu]rÎ2h~X>build-tools: alex >= 3.2.1 && < 3.3, happy >= 1.19.5 && < 1.20rÏ2…rÐ2}rÑ2(hYUhZjË2ubaubh‚)rÒ2}rÓ2(hYX7is simply desugared into the equivalent specification::hZj41hehfhgh†hi}rÔ2(hk]hl]hm]hn]hq]uhsMLhthhu]rÕ2h~X6is simply desugared into the equivalent specification:rÖ2…r×2}rØ2(hYX6is simply desugared into the equivalent specification:heNhsNhthhZjÒ2ubaubjÑ)rÙ2}rÚ2(hYXPbuild-tool-depends: alex:alex >= 3.2.1 && < 3.3, happy:happy >= 1.19.5 && < 1.20hZj41hehfhgjÔhi}rÛ2(jÖj×hn]hm]hk]hl]hq]uhsMNhthhu]rÜ2h~XPbuild-tool-depends: alex:alex >= 3.2.1 && < 3.3, happy:happy >= 1.19.5 && < 1.20rÝ2…rÞ2}rß2(hYUhZjÙ2ubaubcdocutils.nodes table rà2)rá2}râ2(hYUhZj41hehfhgUtablerã2hi}rä2(hk]hl]hm]hn]hq]uhsNhthhu]rå2cdocutils.nodes tgroup ræ2)rç2}rè2(hYUhi}ré2(hn]hm]hk]hl]hq]UcolsKuhZjá2hu]rê2(cdocutils.nodes colspec rë2)rì2}rí2(hYUhi}rî2(hn]hm]hk]hl]hq]UcolwidthKuhZjç2hu]hgUcolspecrï2ubjë2)rð2}rñ2(hYUhi}rò2(hn]hm]hk]hl]hq]UcolwidthK#uhZjç2hu]hgjï2ubjë2)ró2}rô2(hYUhi}rõ2(hn]hm]hk]hl]hq]UcolwidthKuhZjç2hu]hgjï2ubcdocutils.nodes thead rö2)r÷2}rø2(hYUhi}rù2(hk]hl]hm]hn]hq]uhZjç2hu]rú2cdocutils.nodes row rû2)rü2}rý2(hYUhi}rþ2(hk]hl]hm]hn]hq]uhZj÷2hu]rÿ2(cdocutils.nodes entry r3)r3}r3(hYUhi}r3(hk]hl]hm]hn]hq]uhZjü2hu]r3h‚)r3}r3(hYX#:pkg-field:`build-tools` identifierhZj3hehfhgh†hi}r3(hk]hl]hm]hn]hq]uhsMQhu]r3(jp)r 3}r 3(hYX:pkg-field:`build-tools`r 3hZj3hehfhgjthi}r 3(UreftypeX pkg-fieldjvˆjwX build-toolsU refdomainXcabalr 3hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMRhu]r3hä)r3}r3(hYj 3hi}r3(hk]hl]r3(jj 3Xcabal-pkg-fieldr3ehm]hn]hq]uhZj 3hu]r3h~X build-toolsr3…r3}r3(hYUhZj3ubahghìubaubh~X identifierr3…r3}r3(hYX identifierhZj3ubeubahgUentryr3ubj3)r3}r3(hYUhi}r3(hk]hl]hm]hn]hq]uhZjü2hu]r3h‚)r 3}r!3(hYX4desugared :pkg-field:`build-tool-depends` identifierhZj3hehfhgh†hi}r"3(hk]hl]hm]hn]hq]uhsMQhu]r#3(h~X desugared r$3…r%3}r&3(hYX desugared hZj 3ubjp)r'3}r(3(hYX:pkg-field:`build-tool-depends`r)3hZj 3hehfhgjthi}r*3(UreftypeX pkg-fieldjvˆjwXbuild-tool-dependsU refdomainXcabalr+3hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMRhu]r,3hä)r-3}r.3(hYj)3hi}r/3(hk]hl]r03(jj+3Xcabal-pkg-fieldr13ehm]hn]hq]uhZj'3hu]r23h~Xbuild-tool-dependsr33…r43}r53(hYUhZj-3ubahghìubaubh~X identifierr63…r73}r83(hYX identifierhZj 3ubeubahgj3ubj3)r93}r:3(hYUhi}r;3(hk]hl]hm]hn]hq]uhZjü2hu]r<3h‚)r=3}r>3(hYXNoter?3hZj93hehfhgh†hi}r@3(hk]hl]hm]hn]hq]uhsMQhu]rA3h~XNoterB3…rC3}rD3(hYj?3hZj=3ubaubahgj3ubehgUrowrE3ubahgUtheadrF3ubcdocutils.nodes tbody rG3)rH3}rI3(hYUhi}rJ3(hk]hl]hm]hn]hq]uhZjç2hu]rK3(jû2)rL3}rM3(hYUhi}rN3(hk]hl]hm]hn]hq]uhZjH3hu]rO3(j3)rP3}rQ3(hYUhi}rR3(hk]hl]hm]hn]hq]uhZjL3hu]rS3h‚)rT3}rU3(hYX``alex``rV3hZjP3hehfhgh†hi}rW3(hk]hl]hm]hn]hq]uhsMUhu]rX3hä)rY3}rZ3(hYjV3hi}r[3(hk]hl]hm]hn]hq]uhZjT3hu]r\3h~Xalexr]3…r^3}r_3(hYUhZjY3ubahghìubaubahgj3ubj3)r`3}ra3(hYUhi}rb3(hk]hl]hm]hn]hq]uhZjL3hu]rc3h‚)rd3}re3(hYX ``alex:alex``rf3hZj`3hehfhgh†hi}rg3(hk]hl]hm]hn]hq]uhsMUhu]rh3hä)ri3}rj3(hYjf3hi}rk3(hk]hl]hm]hn]hq]uhZjd3hu]rl3h~X alex:alexrm3…rn3}ro3(hYUhZji3ubahghìubaubahgj3ubj3)rp3}rq3(hYUhi}rr3(hk]hl]hm]hn]hq]uhZjL3hu]hgj3ubehgjE3ubjû2)rs3}rt3(hYUhi}ru3(hk]hl]hm]hn]hq]uhZjH3hu]rv3(j3)rw3}rx3(hYUhi}ry3(hk]hl]hm]hn]hq]uhZjs3hu]rz3h‚)r{3}r|3(hYX``c2hs``r}3hZjw3hehfhgh†hi}r~3(hk]hl]hm]hn]hq]uhsMWhu]r3hä)r€3}r3(hYj}3hi}r‚3(hk]hl]hm]hn]hq]uhZj{3hu]rƒ3h~Xc2hsr„3…r…3}r†3(hYUhZj€3ubahghìubaubahgj3ubj3)r‡3}rˆ3(hYUhi}r‰3(hk]hl]hm]hn]hq]uhZjs3hu]rŠ3h‚)r‹3}rŒ3(hYX ``c2hs:c2hs``r3hZj‡3hehfhgh†hi}rŽ3(hk]hl]hm]hn]hq]uhsMWhu]r3hä)r3}r‘3(hYj3hi}r’3(hk]hl]hm]hn]hq]uhZj‹3hu]r“3h~X c2hs:c2hsr”3…r•3}r–3(hYUhZj3ubahghìubaubahgj3ubj3)r—3}r˜3(hYUhi}r™3(hk]hl]hm]hn]hq]uhZjs3hu]hgj3ubehgjE3ubjû2)rš3}r›3(hYUhi}rœ3(hk]hl]hm]hn]hq]uhZjH3hu]r3(j3)rž3}rŸ3(hYUhi}r 3(hk]hl]hm]hn]hq]uhZjš3hu]r¡3h‚)r¢3}r£3(hYX ``cpphs``r¤3hZjž3hehfhgh†hi}r¥3(hk]hl]hm]hn]hq]uhsMYhu]r¦3hä)r§3}r¨3(hYj¤3hi}r©3(hk]hl]hm]hn]hq]uhZj¢3hu]rª3h~Xcpphsr«3…r¬3}r­3(hYUhZj§3ubahghìubaubahgj3ubj3)r®3}r¯3(hYUhi}r°3(hk]hl]hm]hn]hq]uhZjš3hu]r±3h‚)r²3}r³3(hYX``cpphs:cpphs``r´3hZj®3hehfhgh†hi}rµ3(hk]hl]hm]hn]hq]uhsMYhu]r¶3hä)r·3}r¸3(hYj´3hi}r¹3(hk]hl]hm]hn]hq]uhZj²3hu]rº3h~X cpphs:cpphsr»3…r¼3}r½3(hYUhZj·3ubahghìubaubahgj3ubj3)r¾3}r¿3(hYUhi}rÀ3(hk]hl]hm]hn]hq]uhZjš3hu]hgj3ubehgjE3ubjû2)rÁ3}rÂ3(hYUhi}rÃ3(hk]hl]hm]hn]hq]uhZjH3hu]rÄ3(j3)rÅ3}rÆ3(hYUhi}rÇ3(hk]hl]hm]hn]hq]uhZjÁ3hu]rÈ3h‚)rÉ3}rÊ3(hYX ``greencard``rË3hZjÅ3hehfhgh†hi}rÌ3(hk]hl]hm]hn]hq]uhsM[hu]rÍ3hä)rÎ3}rÏ3(hYjË3hi}rÐ3(hk]hl]hm]hn]hq]uhZjÉ3hu]rÑ3h~X greencardrÒ3…rÓ3}rÔ3(hYUhZjÎ3ubahghìubaubahgj3ubj3)rÕ3}rÖ3(hYUhi}r×3(hk]hl]hm]hn]hq]uhZjÁ3hu]rØ3h‚)rÙ3}rÚ3(hYX``greencard:greencard``rÛ3hZjÕ3hehfhgh†hi}rÜ3(hk]hl]hm]hn]hq]uhsM[hu]rÝ3hä)rÞ3}rß3(hYjÛ3hi}rà3(hk]hl]hm]hn]hq]uhZjÙ3hu]rá3h~Xgreencard:greencardrâ3…rã3}rä3(hYUhZjÞ3ubahghìubaubahgj3ubj3)rå3}ræ3(hYUhi}rç3(hk]hl]hm]hn]hq]uhZjÁ3hu]hgj3ubehgjE3ubjû2)rè3}ré3(hYUhi}rê3(hk]hl]hm]hn]hq]uhZjH3hu]rë3(j3)rì3}rí3(hYUhi}rî3(hk]hl]hm]hn]hq]uhZjè3hu]rï3h‚)rð3}rñ3(hYX ``haddock``rò3hZjì3hehfhgh†hi}ró3(hk]hl]hm]hn]hq]uhsM]hu]rô3hä)rõ3}rö3(hYjò3hi}r÷3(hk]hl]hm]hn]hq]uhZjð3hu]rø3h~Xhaddockrù3…rú3}rû3(hYUhZjõ3ubahghìubaubahgj3ubj3)rü3}rý3(hYUhi}rþ3(hk]hl]hm]hn]hq]uhZjè3hu]rÿ3h‚)r4}r4(hYX``haddock:haddock``r4hZjü3hehfhgh†hi}r4(hk]hl]hm]hn]hq]uhsM]hu]r4hä)r4}r4(hYj4hi}r4(hk]hl]hm]hn]hq]uhZj4hu]r4h~Xhaddock:haddockr 4…r 4}r 4(hYUhZj4ubahghìubaubahgj3ubj3)r 4}r 4(hYUhi}r4(hk]hl]hm]hn]hq]uhZjè3hu]hgj3ubehgjE3ubjû2)r4}r4(hYUhi}r4(hk]hl]hm]hn]hq]uhZjH3hu]r4(j3)r4}r4(hYUhi}r4(hk]hl]hm]hn]hq]uhZj4hu]r4h‚)r4}r4(hYX ``happy``r4hZj4hehfhgh†hi}r4(hk]hl]hm]hn]hq]uhsM_hu]r4hä)r4}r4(hYj4hi}r4(hk]hl]hm]hn]hq]uhZj4hu]r4h~Xhappyr 4…r!4}r"4(hYUhZj4ubahghìubaubahgj3ubj3)r#4}r$4(hYUhi}r%4(hk]hl]hm]hn]hq]uhZj4hu]r&4h‚)r'4}r(4(hYX``happy:happy``r)4hZj#4hehfhgh†hi}r*4(hk]hl]hm]hn]hq]uhsM_hu]r+4hä)r,4}r-4(hYj)4hi}r.4(hk]hl]hm]hn]hq]uhZj'4hu]r/4h~X happy:happyr04…r14}r24(hYUhZj,4ubahghìubaubahgj3ubj3)r34}r44(hYUhi}r54(hk]hl]hm]hn]hq]uhZj4hu]hgj3ubehgjE3ubjû2)r64}r74(hYUhi}r84(hk]hl]hm]hn]hq]uhZjH3hu]r94(j3)r:4}r;4(hYUhi}r<4(hk]hl]hm]hn]hq]uhZj64hu]r=4h‚)r>4}r?4(hYX ``hsc2hs``r@4hZj:4hehfhgh†hi}rA4(hk]hl]hm]hn]hq]uhsMahu]rB4hä)rC4}rD4(hYj@4hi}rE4(hk]hl]hm]hn]hq]uhZj>4hu]rF4h~Xhsc2hsrG4…rH4}rI4(hYUhZjC4ubahghìubaubahgj3ubj3)rJ4}rK4(hYUhi}rL4(hk]hl]hm]hn]hq]uhZj64hu]rM4h‚)rN4}rO4(hYX``hsc2hs:hsc2hs``rP4hZjJ4hehfhgh†hi}rQ4(hk]hl]hm]hn]hq]uhsMahu]rR4hä)rS4}rT4(hYjP4hi}rU4(hk]hl]hm]hn]hq]uhZjN4hu]rV4h~X hsc2hs:hsc2hsrW4…rX4}rY4(hYUhZjS4ubahghìubaubahgj3ubj3)rZ4}r[4(hYUhi}r\4(hk]hl]hm]hn]hq]uhZj64hu]hgj3ubehgjE3ubjû2)r]4}r^4(hYUhi}r_4(hk]hl]hm]hn]hq]uhZjH3hu]r`4(j3)ra4}rb4(hYUhi}rc4(hk]hl]hm]hn]hq]uhZj]4hu]rd4h‚)re4}rf4(hYX ``hscolour``rg4hZja4hehfhgh†hi}rh4(hk]hl]hm]hn]hq]uhsMchu]ri4hä)rj4}rk4(hYjg4hi}rl4(hk]hl]hm]hn]hq]uhZje4hu]rm4h~Xhscolourrn4…ro4}rp4(hYUhZjj4ubahghìubaubahgj3ubj3)rq4}rr4(hYUhi}rs4(hk]hl]hm]hn]hq]uhZj]4hu]rt4h‚)ru4}rv4(hYX``hscolour:hscolour``rw4hZjq4hehfhgh†hi}rx4(hk]hl]hm]hn]hq]uhsMchu]ry4hä)rz4}r{4(hYjw4hi}r|4(hk]hl]hm]hn]hq]uhZju4hu]r}4h~Xhscolour:hscolourr~4…r4}r€4(hYUhZjz4ubahghìubaubahgj3ubj3)r4}r‚4(hYUhi}rƒ4(hk]hl]hm]hn]hq]uhZj]4hu]hgj3ubehgjE3ubjû2)r„4}r…4(hYUhi}r†4(hk]hl]hm]hn]hq]uhZjH3hu]r‡4(j3)rˆ4}r‰4(hYUhi}rŠ4(hk]hl]hm]hn]hq]uhZj„4hu]r‹4h‚)rŒ4}r4(hYX``hspec-discover``rŽ4hZjˆ4hehfhgh†hi}r4(hk]hl]hm]hn]hq]uhsMehu]r4hä)r‘4}r’4(hYjŽ4hi}r“4(hk]hl]hm]hn]hq]uhZjŒ4hu]r”4h~Xhspec-discoverr•4…r–4}r—4(hYUhZj‘4ubahghìubaubahgj3ubj3)r˜4}r™4(hYUhi}rš4(hk]hl]hm]hn]hq]uhZj„4hu]r›4h‚)rœ4}r4(hYX!``hspec-discover:hspec-discover``rž4hZj˜4hehfhgh†hi}rŸ4(hk]hl]hm]hn]hq]uhsMehu]r 4hä)r¡4}r¢4(hYjž4hi}r£4(hk]hl]hm]hn]hq]uhZjœ4hu]r¤4h~Xhspec-discover:hspec-discoverr¥4…r¦4}r§4(hYUhZj¡4ubahghìubaubahgj3ubj3)r¨4}r©4(hYUhi}rª4(hk]hl]hm]hn]hq]uhZj„4hu]r«4h‚)r¬4}r­4(hYXsince Cabal 2.0r®4hZj¨4hehfhgh†hi}r¯4(hk]hl]hm]hn]hq]uhsMehu]r°4h~Xsince Cabal 2.0r±4…r²4}r³4(hYj®4hZj¬4ubaubahgj3ubehgjE3ubehgUtbodyr´4ubehgUtgrouprµ4ubaubh‚)r¶4}r·4(hYXÈ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.hZj41hehfhgh†hi}r¸4(hk]hl]hm]hn]hq]uhsMhhthhu]r¹4(h~X7This built-in set can be programmatically extended via rº4…r»4}r¼4(hYX7This built-in set can be programmatically extended via heNhsNhthhZj¶4ubhä)r½4}r¾4(hYX ``Custom``hi}r¿4(hk]hl]hm]hn]hq]uhZj¶4hu]rÀ4h~XCustomrÁ4…rÂ4}rÃ4(hYUhZj½4ubahghìubh~Xn setup scripts; this, however, is of limited use since the Cabal solver cannot access information injected by rÄ4…rÅ4}rÆ4(hYXn setup scripts; this, however, is of limited use since the Cabal solver cannot access information injected by heNhsNhthhZj¶4ubhä)rÇ4}rÈ4(hYX ``Custom``hi}rÉ4(hk]hl]hm]hn]hq]uhZj¶4hu]rÊ4h~XCustomrË4…rÌ4}rÍ4(hYUhZjÇ4ubahghìubh~X setup scripts.rÎ4…rÏ4}rÐ4(hYX setup scripts.heNhsNhthhZj¶4ubeubeubeubjþ)rÑ4}rÒ4(hYUhZj+*hehfhgjhi}rÓ4(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rÔ4}rÕ4(hYUhZj+*hehfhgjhi}rÖ4(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr×4j j×4uhsNhthhu]rØ4(j)rÙ4}rÚ4(hYXbuildable: booleanhZjÔ4hehfhgjhi}rÛ4(hn]rÜ4Xpkg-field-buildablerÝ4ahm]hk]hl]hq]j‰uhsMrhthhu]rÞ4(jþ)rß4}rà4(hYUhZjÙ4hehfhgjhi}rá4(hn]hm]hk]hl]hq]Uentries]râ4(jXbuildable; package.cabal fieldjÝ4UNtrã4auhsMrhthhu]ubj)rä4}rå4(hYX buildableræ4hZjÙ4hehfhgj!hi}rç4(jÖj×hn]hm]hk]hl]hq]uhsMrhthhu]rè4h~X buildableré4…rê4}rë4(hYUheNhsNhthhZjä4ubaubj')rì4}rí4(hYj hZjÙ4hehfhgj*hi}rî4(jÖj×hn]hm]hk]hl]hq]uhsMrhthhu]rï4h~X: rð4…rñ4}rò4(hYUheNhsNhthhZjì4ubaubj¦)ró4}rô4(hYXbooleanhZjÙ4hehfhgj©hi}rõ4(jÖj×hn]hm]hk]hl]hq]uhsMrhthhu]rö4h~Xbooleanr÷4…rø4}rù4(hYUheNhsNhthhZjó4ubaubeubj/)rú4}rû4(hYUhZjÔ4hehfhgj2hi}rü4(hk]hl]hm]hn]hq]uhsMrhthhu]rý4(j5)rþ4}rÿ4(hYUhZjú4hehfhgj8hi}r5(hk]hl]hm]hn]hq]uhsNhthhu]r5j;)r5}r5(hYUhi}r5(hk]hl]hm]hn]hq]uhZjþ4hu]r5(jA)r5}r5(hYX Default valuehZj5hehfhgjEhi}r5(hk]hl]hm]hn]hq]uhsKhu]r 5h~X Default valuer 5…r 5}r 5(hYUhZj5ubaubjK)r 5}r5(hYUhi}r5(hk]hl]hm]hn]hq]uhZj5hu]r5h‚)r5}r5(hYXTruehi}r5(hk]hl]hm]hn]hq]uhZj 5hu]r5hä)r5}r5(hYX``True``hZj5hehfhghìhi}r5(hk]hl]hm]hn]hq]uhsNhthhu]r5h~XTruer5…r5}r5(hYUheNhsNhthhZj5ubaubahgh†ubahgjXubehgj>ubaubh‚)r5}r5(hYXß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`_.hZjú4hehfhgh†hi}r5(hk]hl]hm]hn]hq]uhsMnhthhu]r5(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 r 5…r!5}r"5(hYXÀ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 heNhsNhthhZj5ubjD)r#5}r$5(hYX`system-dependent parameters`_jGKhZj5hgjHhi}r%5(UnameXsystem-dependent parametershn]hm]hk]hl]hq]jJj•uhu]r&5h~Xsystem-dependent parametersr'5…r(5}r)5(hYUhZj#5ubaubh~X.…r*5}r+5(hYX.heNhsNhthhZj5ubeubeubeubjþ)r,5}r-5(hYUhZj+*hehfhgjhi}r.5(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r/5}r05(hYUhZj+*hehfhgjhi}r15(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr25j j25uhsNhthhu]r35(j)r45}r55(hYXghc-options: token listhZj/5hehfhgjhi}r65(hn]r75Xpkg-field-ghc-optionsr85ahm]hk]hl]hq]j‰uhsM~hthhu]r95(jþ)r:5}r;5(hYUhZj45hehfhgjhi}r<5(hn]hm]hk]hl]hq]Uentries]r=5(jX ghc-options; package.cabal fieldj85UNtr>5auhsM~hthhu]ubj)r?5}r@5(hYX ghc-optionsrA5hZj45hehfhgj!hi}rB5(jÖj×hn]hm]hk]hl]hq]uhsM~hthhu]rC5h~X ghc-optionsrD5…rE5}rF5(hYUheNhsNhthhZj?5ubaubj')rG5}rH5(hYj hZj45hehfhgj*hi}rI5(jÖj×hn]hm]hk]hl]hq]uhsM~hthhu]rJ5h~X: rK5…rL5}rM5(hYUheNhsNhthhZjG5ubaubj¦)rN5}rO5(hYX token listhZj45hehfhgj©hi}rP5(jÖj×hn]hm]hk]hl]hq]uhsM~hthhu]rQ5h~X token listrR5…rS5}rT5(hYUheNhsNhthhZjN5ubaubeubj/)rU5}rV5(hYUhZj/5hehfhgj2hi}rW5(hk]hl]hm]hn]hq]uhsM~hthhu]rX5(h‚)rY5}rZ5(hYX~Additional options for GHC. You can often achieve the same effect using the :pkg-field:`extensions` field, which is preferred.hZjU5hehfhgh†hi}r[5(hk]hl]hm]hn]hq]uhsMuhthhu]r\5(h~XLAdditional options for GHC. You can often achieve the same effect using the r]5…r^5}r_5(hYXLAdditional options for GHC. You can often achieve the same effect using the heNhsNhthhZjY5ubjp)r`5}ra5(hYX:pkg-field:`extensions`rb5hZjY5hehfhgjthi}rc5(UreftypeX pkg-fieldjvˆjwX extensionsU refdomainXcabalrd5hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMuhu]re5hä)rf5}rg5(hYjb5hi}rh5(hk]hl]ri5(jjd5Xcabal-pkg-fieldrj5ehm]hn]hq]uhZj`5hu]rk5h~X extensionsrl5…rm5}rn5(hYUhZjf5ubahghìubaubh~X field, which is preferred.ro5…rp5}rq5(hYX field, which is preferred.heNhsNhthhZjY5ubeubh‚)rr5}rs5(hYXvOptions required only by one module may be specified by placing an ``OPTIONS_GHC`` pragma in the source file affected.hZjU5hehfhgh†hi}rt5(hk]hl]hm]hn]hq]uhsMxhthhu]ru5(h~XCOptions required only by one module may be specified by placing an rv5…rw5}rx5(hYXCOptions required only by one module may be specified by placing an heNhsNhthhZjr5ubhä)ry5}rz5(hYX``OPTIONS_GHC``hi}r{5(hk]hl]hm]hn]hq]uhZjr5hu]r|5h~X OPTIONS_GHCr}5…r~5}r5(hYUhZjy5ubahghìubh~X$ pragma in the source file affected.r€5…r5}r‚5(hYX$ pragma in the source file affected.heNhsNhthhZjr5ubeubh‚)rƒ5}r„5(hYX•As with many other fields, whitespace can be escaped by using Haskell string syntax. Example: ``ghc-options: -Wcompat "-with-rtsopts=-T -I1" -Wall``.hZjU5hehfhgh†hi}r…5(hk]hl]hm]hn]hq]uhsM{hthhu]r†5(h~X^As with many other fields, whitespace can be escaped by using Haskell string syntax. Example: r‡5…rˆ5}r‰5(hYX^As with many other fields, whitespace can be escaped by using Haskell string syntax. Example: heNhsNhthhZjƒ5ubhä)rŠ5}r‹5(hYX6``ghc-options: -Wcompat "-with-rtsopts=-T -I1" -Wall``hi}rŒ5(hk]hl]hm]hn]hq]uhZjƒ5hu]r5h~X2ghc-options: -Wcompat "-with-rtsopts=-T -I1" -WallrŽ5…r5}r5(hYUhZjŠ5ubahghìubh~X.…r‘5}r’5(hYX.heNhsNhthhZjƒ5ubeubeubeubjþ)r“5}r”5(hYUhZj+*hehfhgjhi}r•5(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r–5}r—5(hYUhZj+*hehfhgjhi}r˜5(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr™5j j™5uhsNhthhu]rš5(j)r›5}rœ5(hYXghc-prof-options: token listhZj–5hehfhgjhi}r5(hn]rž5Xpkg-field-ghc-prof-optionsrŸ5ahm]hk]hl]hq]j‰uhsM“hthhu]r 5(jþ)r¡5}r¢5(hYUhZj›5hehfhgjhi}r£5(hn]hm]hk]hl]hq]Uentries]r¤5(jX%ghc-prof-options; package.cabal fieldjŸ5UNtr¥5auhsM“hthhu]ubj)r¦5}r§5(hYXghc-prof-optionsr¨5hZj›5hehfhgj!hi}r©5(jÖj×hn]hm]hk]hl]hq]uhsM“hthhu]rª5h~Xghc-prof-optionsr«5…r¬5}r­5(hYUheNhsNhthhZj¦5ubaubj')r®5}r¯5(hYj hZj›5hehfhgj*hi}r°5(jÖj×hn]hm]hk]hl]hq]uhsM“hthhu]r±5h~X: r²5…r³5}r´5(hYUheNhsNhthhZj®5ubaubj¦)rµ5}r¶5(hYX token listhZj›5hehfhgj©hi}r·5(jÖj×hn]hm]hk]hl]hq]uhsM“hthhu]r¸5h~X token listr¹5…rº5}r»5(hYUheNhsNhthhZjµ5ubaubeubj/)r¼5}r½5(hYUhZj–5hehfhgj2hi}r¾5(hk]hl]hm]hn]hq]uhsM“hthhu]r¿5(h‚)rÀ5}rÁ5(hYXLAdditional options for GHC when the package is built with profiling enabled.rÂ5hZj¼5hehfhgh†hi}rÃ5(hk]hl]hm]hn]hq]uhsMhthhu]rÄ5h~XLAdditional options for GHC when the package is built with profiling enabled.rÅ5…rÆ5}rÇ5(hYjÂ5heNhsNhthhZjÀ5ubaubh‚)rÈ5}rÉ5(hYX²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.hZj¼5hehfhgh†hi}rÊ5(hk]hl]hm]hn]hq]uhsM„hthhu]rË5(h~XKNote that as of Cabal-1.24, the default profiling detail level defaults to rÌ5…rÍ5}rÎ5(hYXKNote that as of Cabal-1.24, the default profiling detail level defaults to heNhsNhthhZjÈ5ubhä)rÏ5}rÐ5(hYX``exported-functions``hi}rÑ5(hk]hl]hm]hn]hq]uhZjÈ5hu]rÒ5h~Xexported-functionsrÓ5…rÔ5}rÕ5(hYUhZjÏ5ubahghìubh~X for libraries and rÖ5…r×5}rØ5(hYX for libraries and heNhsNhthhZjÈ5ubhä)rÙ5}rÚ5(hYX``toplevel-functions``hi}rÛ5(hk]hl]hm]hn]hq]uhZjÈ5hu]rÜ5h~Xtoplevel-functionsrÝ5…rÞ5}rß5(hYUhZjÙ5ubahghìubh~X8 for executables. For GHC these correspond to the flags rà5…rá5}râ5(hYX8 for executables. For GHC these correspond to the flags heNhsNhthhZjÈ5ubhä)rã5}rä5(hYX``-fprof-auto-exported``hi}rå5(hk]hl]hm]hn]hq]uhZjÈ5hu]ræ5h~X-fprof-auto-exportedrç5…rè5}ré5(hYUhZjã5ubahghìubh~X and rê5…rë5}rì5(hYX and rí5heNhsNhthhZjÈ5ubhä)rî5}rï5(hYX``-fprof-auto-top``hi}rð5(hk]hl]hm]hn]hq]uhZjÈ5hu]rñ5h~X-fprof-auto-toprò5…ró5}rô5(hYUhZjî5ubahghìubh~X-. Prior to Cabal-1.24 the level defaulted to rõ5…rö5}r÷5(hYX-. Prior to Cabal-1.24 the level defaulted to heNhsNhthhZjÈ5ubhä)rø5}rù5(hYX``none``hi}rú5(hk]hl]hm]hn]hq]uhZjÈ5hu]rû5h~Xnonerü5…rý5}rþ5(hYUhZjø5ubahghìubh~XK. These levels can be adjusted by the person building the package with the rÿ5…r6}r6(hYXK. These levels can be adjusted by the person building the package with the heNhsNhthhZjÈ5ubhä)r6}r6(hYX``--profiling-detail``hi}r6(hk]hl]hm]hn]hq]uhZjÈ5hu]r6h~X--profiling-detailr6…r6}r6(hYUhZj6ubahghìubh~X and r 6…r 6}r 6(hYjí5hZjÈ5ubhä)r 6}r 6(hYX``--library-profiling-detail``hi}r6(hk]hl]hm]hn]hq]uhZjÈ5hu]r6h~X--library-profiling-detailr6…r6}r6(hYUhZj 6ubahghìubh~X flags.r6…r6}r6(hYX flags.heNhsNhthhZjÈ5ubeubh‚)r6}r6(hYX¯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.hZj¼5hehfhgh†hi}r6(hk]hl]hm]hn]hq]uhsMŒhthhu]r6(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 r6…r6}r6(hYX×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 heNhsNhthhZj6ubhä)r6}r6(hYX``-fprof-auto*``hi}r6(hk]hl]hm]hn]hq]uhZj6hu]r 6h~X -fprof-auto*r!6…r"6}r#6(hYUhZj6ubahghìubh~Xa flags here. However if you wish to override the profiling detail level, you can do so using the r$6…r%6}r&6(hYXa flags here. However if you wish to override the profiling detail level, you can do so using the heNhsNhthhZj6ubjp)r'6}r(6(hYX:pkg-field:`ghc-prof-options`r)6hZj6hehfhgjthi}r*6(UreftypeX pkg-fieldjvˆjwXghc-prof-optionsU refdomainXcabalr+6hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMŒhu]r,6hä)r-6}r.6(hYj)6hi}r/6(hk]hl]r06(jj+6Xcabal-pkg-fieldr16ehm]hn]hq]uhZj'6hu]r26h~Xghc-prof-optionsr36…r46}r56(hYUhZj-6ubahghìubaubh~X field: use r66…r76}r86(hYX field: use heNhsNhthhZj6ubhä)r96}r:6(hYX``-fno-prof-auto``hi}r;6(hk]hl]hm]hn]hq]uhZj6hu]r<6h~X-fno-prof-autor=6…r>6}r?6(hYUhZj96ubahghìubh~X or one of the other r@6…rA6}rB6(hYX or one of the other heNhsNhthhZj6ubhä)rC6}rD6(hYX``-fprof-auto*``hi}rE6(hk]hl]hm]hn]hq]uhZj6hu]rF6h~X -fprof-auto*rG6…rH6}rI6(hYUhZjC6ubahghìubh~X flags.rJ6…rK6}rL6(hYX flags.heNhsNhthhZj6ubeubeubeubjþ)rM6}rN6(hYUhZj+*hehfhgjhi}rO6(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rP6}rQ6(hYUhZj+*hehfhgjhi}rR6(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrS6j jS6uhsNhthhu]rT6(j)rU6}rV6(hYXghc-shared-options: token listhZjP6hehfhgjhi}rW6(hn]rX6Xpkg-field-ghc-shared-optionsrY6ahm]hk]hl]hq]j‰uhsMšhthhu]rZ6(jþ)r[6}r\6(hYUhZjU6hehfhgjhi}r]6(hn]hm]hk]hl]hq]Uentries]r^6(jX'ghc-shared-options; package.cabal fieldjY6UNtr_6auhsMšhthhu]ubj)r`6}ra6(hYXghc-shared-optionsrb6hZjU6hehfhgj!hi}rc6(jÖj×hn]hm]hk]hl]hq]uhsMšhthhu]rd6h~Xghc-shared-optionsre6…rf6}rg6(hYUheNhsNhthhZj`6ubaubj')rh6}ri6(hYj hZjU6hehfhgj*hi}rj6(jÖj×hn]hm]hk]hl]hq]uhsMšhthhu]rk6h~X: rl6…rm6}rn6(hYUheNhsNhthhZjh6ubaubj¦)ro6}rp6(hYX token listhZjU6hehfhgj©hi}rq6(jÖj×hn]hm]hk]hl]hq]uhsMšhthhu]rr6h~X token listrs6…rt6}ru6(hYUheNhsNhthhZjo6ubaubeubj/)rv6}rw6(hYUhZjP6hehfhgj2hi}rx6(hk]hl]hm]hn]hq]uhsMšhthhu]ry6h‚)rz6}r{6(hYXî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.hZjv6hehfhgh†hi}r|6(hk]hl]hm]hn]hq]uhsM–hthhu]r}6(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 r~6…r6}r€6(hYX–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 heNhsNhthhZjz6ubjp)r6}r‚6(hYX:pkg-field:`ghc-options`rƒ6hZjz6hehfhgjthi}r„6(UreftypeX pkg-fieldjvˆjwX ghc-optionsU refdomainXcabalr…6hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsM–hu]r†6hä)r‡6}rˆ6(hYjƒ6hi}r‰6(hk]hl]rŠ6(jj…6Xcabal-pkg-fieldr‹6ehm]hn]hq]uhZj6hu]rŒ6h~X ghc-optionsr6…rŽ6}r6(hYUhZj‡6ubahghìubaubh~X@, and are passed to GHC during both the compile and link phases.r6…r‘6}r’6(hYX@, and are passed to GHC during both the compile and link phases.heNhsNhthhZjz6ubeubaubeubjþ)r“6}r”6(hYUhZj+*hehfhgjhi}r•6(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r–6}r—6(hYUhZj+*hehfhgjhi}r˜6(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr™6j j™6uhsNhthhu]rš6(j)r›6}rœ6(hYXincludes: filename listhZj–6hehfhgjhi}r6(hn]rž6Xpkg-field-includesrŸ6ahm]hk]hl]hq]j‰uhsMªhthhu]r 6(jþ)r¡6}r¢6(hYUhZj›6hehfhgjhi}r£6(hn]hm]hk]hl]hq]Uentries]r¤6(jXincludes; package.cabal fieldjŸ6UNtr¥6auhsMªhthhu]ubj)r¦6}r§6(hYXincludesr¨6hZj›6hehfhgj!hi}r©6(jÖj×hn]hm]hk]hl]hq]uhsMªhthhu]rª6h~Xincludesr«6…r¬6}r­6(hYUheNhsNhthhZj¦6ubaubj')r®6}r¯6(hYj hZj›6hehfhgj*hi}r°6(jÖj×hn]hm]hk]hl]hq]uhsMªhthhu]r±6h~X: r²6…r³6}r´6(hYUheNhsNhthhZj®6ubaubj¦)rµ6}r¶6(hYX filename listhZj›6hehfhgj©hi}r·6(jÖj×hn]hm]hk]hl]hq]uhsMªhthhu]r¸6h~X filename listr¹6…rº6}r»6(hYUheNhsNhthhZjµ6ubaubeubj/)r¼6}r½6(hYUhZj–6hehfhgj2hi}r¾6(hk]hl]hm]hn]hq]uhsMªhthhu]r¿6(h‚)rÀ6}rÁ6(hYXA 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`.hZj¼6hehfhgh†hi}rÂ6(hk]hl]hm]hn]hq]uhsMhthhu]rÃ6(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Ä6…rÅ6}rÆ6(hYXƒ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 heNhsNhthhZjÀ6ubjp)rÇ6}rÈ6(hYX:pkg-field:`include-dirs`rÉ6hZjÀ6hehfhgjthi}rÊ6(UreftypeX pkg-fieldjvˆjwX include-dirsU refdomainXcabalrË6hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMhu]rÌ6hä)rÍ6}rÎ6(hYjÉ6hi}rÏ6(hk]hl]rÐ6(jjË6Xcabal-pkg-fieldrÑ6ehm]hn]hq]uhZjÇ6hu]rÒ6h~X include-dirsrÓ6…rÔ6}rÕ6(hYUhZjÍ6ubahghìubaubh~X.…rÖ6}r×6(hYX.heNhsNhthhZjÀ6ubeubh‚)rØ6}rÙ6(hYXThese 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.hZj¼6hehfhgh†hi}rÚ6(hk]hl]hm]hn]hq]uhsM¥hthhu]rÛ6(h~XrThese files typically contain function prototypes for foreign imports used by the package. This is in contrast to rÜ6…rÝ6}rÞ6(hYXrThese files typically contain function prototypes for foreign imports used by the package. This is in contrast to heNhsNhthhZjØ6ubjp)rß6}rà6(hYX:pkg-field:`install-includes`rá6hZjØ6hehfhgjthi}râ6(UreftypeX pkg-fieldjvˆjwXinstall-includesU refdomainXcabalrã6hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsM¥hu]rä6hä)rå6}ræ6(hYjá6hi}rç6(hk]hl]rè6(jjã6Xcabal-pkg-fieldré6ehm]hn]hq]uhZjß6hu]rê6h~Xinstall-includesrë6…rì6}rí6(hYUhZjå6ubahghìubaubh~Xv, which lists header files that are intended to be exposed to other packages that transitively depend on this library.rî6…rï6}rð6(hYXv, which lists header files that are intended to be exposed to other packages that transitively depend on this library.heNhsNhthhZjØ6ubeubeubeubjþ)rñ6}rò6(hYUhZj+*hehfhgjhi}ró6(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rô6}rõ6(hYUhZj+*hehfhgjhi}rö6(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr÷6j j÷6uhsNhthhu]rø6(j)rù6}rú6(hYXinstall-includes: filename listhZjô6hehfhgjhi}rû6(hn]rü6Xpkg-field-install-includesrý6ahm]hk]hl]hq]j‰uhsMÃhthhu]rþ6(jþ)rÿ6}r7(hYUhZjù6hehfhgjhi}r7(hn]hm]hk]hl]hq]Uentries]r7(jX%install-includes; package.cabal fieldjý6UNtr7auhsMÃhthhu]ubj)r7}r7(hYXinstall-includesr7hZjù6hehfhgj!hi}r7(jÖj×hn]hm]hk]hl]hq]uhsMÃhthhu]r7h~Xinstall-includesr 7…r 7}r 7(hYUheNhsNhthhZj7ubaubj')r 7}r 7(hYj hZjù6hehfhgj*hi}r7(jÖj×hn]hm]hk]hl]hq]uhsMÃhthhu]r7h~X: r7…r7}r7(hYUheNhsNhthhZj 7ubaubj¦)r7}r7(hYX filename listhZjù6hehfhgj©hi}r7(jÖj×hn]hm]hk]hl]hq]uhsMÃhthhu]r7h~X filename listr7…r7}r7(hYUheNhsNhthhZj7ubaubeubj/)r7}r7(hYUhZjô6hehfhgj2hi}r7(hk]hl]hm]hn]hq]uhsMÃhthhu]r7(h‚)r7}r7(hYX$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`.hZj7hehfhgh†hi}r 7(hk]hl]hm]hn]hq]uhsM­hthhu]r!7(h~X>A list of header files from this package to be installed into r"7…r#7}r$7(hYX>A list of header files from this package to be installed into heNhsNhthhZj7ubhä)r%7}r&7(hYX``$libdir/includes``hi}r'7(hk]hl]hm]hn]hq]uhZj7hu]r(7h~X$libdir/includesr)7…r*7}r+7(hYUhZj%7ubahghìubh~X0 when the package is installed. Files listed in r,7…r-7}r.7(hYX0 when the package is installed. Files listed in heNhsNhthhZj7ubjp)r/7}r07(hYX:pkg-field:`install-includes`r17hZj7hehfhgjthi}r27(UreftypeX pkg-fieldjvˆjwXinstall-includesU refdomainXcabalr37hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsM­hu]r47hä)r57}r67(hYj17hi}r77(hk]hl]r87(jj37Xcabal-pkg-fieldr97ehm]hn]hq]uhZj/7hu]r:7h~Xinstall-includesr;7…r<7}r=7(hYUhZj57ubahghìubaubh~Xk should be found in relative to the top of the source tree or relative to one of the directories listed in r>7…r?7}r@7(hYXk should be found in relative to the top of the source tree or relative to one of the directories listed in heNhsNhthhZj7ubjp)rA7}rB7(hYX:pkg-field:`include-dirs`rC7hZj7hehfhgjthi}rD7(UreftypeX pkg-fieldjvˆjwX include-dirsU refdomainXcabalrE7hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsM­hu]rF7hä)rG7}rH7(hYjC7hi}rI7(hk]hl]rJ7(jjE7Xcabal-pkg-fieldrK7ehm]hn]hq]uhZjA7hu]rL7h~X include-dirsrM7…rN7}rO7(hYUhZjG7ubahghìubaubh~X.…rP7}rQ7(hYX.heNhsNhthhZj7ubeubh‚)rR7}rS7(hYX\: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``::hZj7hehfhgh†hi}rT7(hk]hl]hm]hn]hq]uhsM³hthhu]rU7(jp)rV7}rW7(hYX:pkg-field:`install-includes`rX7hZjR7hehfhgjthi}rY7(UreftypeX pkg-fieldjvˆjwXinstall-includesU refdomainXcabalrZ7hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsM³hu]r[7hä)r\7}r]7(hYjX7hi}r^7(hk]hl]r_7(jjZ7Xcabal-pkg-fieldr`7ehm]hn]hq]uhZjV7hu]ra7h~Xinstall-includesrb7…rc7}rd7(hYUhZj\7ubahghì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 re7…rf7}rg7(hYXÕ 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 heNhsNhthhZjR7ubhä)rh7}ri7(hYX ``.cabal``hi}rj7(hk]hl]hm]hn]hq]uhZjR7hu]rk7h~X.cabalrl7…rm7}rn7(hYUhZjh7ubahghìubh~X file for a hypothetical ro7…rp7}rq7(hYX file for a hypothetical heNhsNhthhZjR7ubhä)rr7}rs7(hYX``bindings-clib``hi}rt7(hk]hl]hm]hn]hq]uhZjR7hu]ru7h~X bindings-clibrv7…rw7}rx7(hYUhZjr7ubahghìubh~X, package that bundles the C source code for ry7…rz7}r{7(hYX, package that bundles the C source code for heNhsNhthhZjR7ubhä)r|7}r}7(hYX``clib``hi}r~7(hk]hl]hm]hn]hq]uhZjR7hu]r7h~Xclibr€7…r7}r‚7(hYUhZj|7ubahghìubh~X:…rƒ7}r„7(hYX:heNhsNhthhZjR7ubeubjÑ)r…7}r†7(hYXIinclude-dirs: cbits c-sources: clib.c install-includes: clib.hhZj7hehfhgjÔhi}r‡7(jÖj×hn]hm]hk]hl]hq]uhsM¹hthhu]rˆ7h~XIinclude-dirs: cbits c-sources: clib.c install-includes: clib.hr‰7…rŠ7}r‹7(hYUhZj…7ubaubh‚)rŒ7}r7(hYXlNow any package that depends (directly or transitively) on the ``bindings-clib`` library can use ``clib.h``.hZj7hehfhgh†hi}rŽ7(hk]hl]hm]hn]hq]uhsM½hthhu]r7(h~X?Now any package that depends (directly or transitively) on the r7…r‘7}r’7(hYX?Now any package that depends (directly or transitively) on the heNhsNhthhZjŒ7ubhä)r“7}r”7(hYX``bindings-clib``hi}r•7(hk]hl]hm]hn]hq]uhZjŒ7hu]r–7h~X bindings-clibr—7…r˜7}r™7(hYUhZj“7ubahghìubh~X library can use rš7…r›7}rœ7(hYX library can use heNhsNhthhZjŒ7ubhä)r7}rž7(hYX ``clib.h``hi}rŸ7(hk]hl]hm]hn]hq]uhZjŒ7hu]r 7h~Xclib.hr¡7…r¢7}r£7(hYUhZj7ubahghìubh~X.…r¤7}r¥7(hYX.heNhsNhthhZjŒ7ubeubh‚)r¦7}r§7(hYX·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.hZj7hehfhgh†hi}r¨7(hk]hl]hm]hn]hq]uhsMÀhthhu]r©7(h~X'Note that in order for files listed in rª7…r«7}r¬7(hYX'Note that in order for files listed in heNhsNhthhZj¦7ubjp)r­7}r®7(hYX:pkg-field:`install-includes`r¯7hZj¦7hehfhgjthi}r°7(UreftypeX pkg-fieldjvˆjwXinstall-includesU refdomainXcabalr±7hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMÀhu]r²7hä)r³7}r´7(hYj¯7hi}rµ7(hk]hl]r¶7(jj±7Xcabal-pkg-fieldr·7ehm]hn]hq]uhZj­7hu]r¸7h~Xinstall-includesr¹7…rº7}r»7(hYUhZj³7ubahghìubaubh~XO to be usable when compiling the package itself, they need to be listed in the r¼7…r½7}r¾7(hYXO to be usable when compiling the package itself, they need to be listed in the heNhsNhthhZj¦7ubjp)r¿7}rÀ7(hYX:pkg-field:`includes`rÁ7hZj¦7hehfhgjthi}rÂ7(UreftypeX pkg-fieldjvˆjwXincludesU refdomainXcabalrÃ7hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMÀhu]rÄ7hä)rÅ7}rÆ7(hYjÁ7hi}rÇ7(hk]hl]rÈ7(jjÃ7Xcabal-pkg-fieldrÉ7ehm]hn]hq]uhZj¿7hu]rÊ7h~XincludesrË7…rÌ7}rÍ7(hYUhZjÅ7ubahghìubaubh~X field as well.rÎ7…rÏ7}rÐ7(hYX field as well.heNhsNhthhZj¦7ubeubeubeubjþ)rÑ7}rÒ7(hYUhZj+*hehfhgjhi}rÓ7(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rÔ7}rÕ7(hYUhZj+*hehfhgjhi}rÖ7(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr×7j j×7uhsNhthhu]rØ7(j)rÙ7}rÚ7(hYXinclude-dirs: directory listhZjÔ7hehfhgjhi}rÛ7(hn]rÜ7Xpkg-field-include-dirsrÝ7ahm]hk]hl]hq]j‰uhsMÍhthhu]rÞ7(jþ)rß7}rà7(hYUhZjÙ7hehfhgjhi}rá7(hn]hm]hk]hl]hq]Uentries]râ7(jX!include-dirs; package.cabal fieldjÝ7UNtrã7auhsMÍhthhu]ubj)rä7}rå7(hYX include-dirsræ7hZjÙ7hehfhgj!hi}rç7(jÖj×hn]hm]hk]hl]hq]uhsMÍhthhu]rè7h~X include-dirsré7…rê7}rë7(hYUheNhsNhthhZjä7ubaubj')rì7}rí7(hYj hZjÙ7hehfhgj*hi}rî7(jÖj×hn]hm]hk]hl]hq]uhsMÍhthhu]rï7h~X: rð7…rñ7}rò7(hYUheNhsNhthhZjì7ubaubj¦)ró7}rô7(hYXdirectory listhZjÙ7hehfhgj©hi}rõ7(jÖj×hn]hm]hk]hl]hq]uhsMÍhthhu]rö7h~Xdirectory listr÷7…rø7}rù7(hYUheNhsNhthhZjó7ubaubeubj/)rú7}rû7(hYUhZjÔ7hehfhgj2hi}rü7(hk]hl]hm]hn]hq]uhsMÍhthhu]rý7h‚)rþ7}rÿ7(hYXž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`.hZjú7hehfhgh†hi}r8(hk]hl]hm]hn]hq]uhsMÆhthhu]r8(h~XJA list of directories to search for header files, when preprocessing with r8…r8}r8(hYXJA list of directories to search for header files, when preprocessing with heNhsNhthhZjþ7ubhä)r8}r8(hYX``c2hs``hi}r8(hk]hl]hm]hn]hq]uhZjþ7hu]r8h~Xc2hsr 8…r 8}r 8(hYUhZj8ubahghìubh~X, r 8…r 8}r8(hYX, r8heNhsNhthhZjþ7ubhä)r8}r8(hYX ``hsc2hs``hi}r8(hk]hl]hm]hn]hq]uhZjþ7hu]r8h~Xhsc2hsr8…r8}r8(hYUhZj8ubahghìubh~X, r8…r8}r8(hYj8hZjþ7ubhä)r8}r8(hYX ``cpphs``hi}r8(hk]hl]hm]hn]hq]uhZjþ7hu]r8h~Xcpphsr8…r8}r 8(hYUhZj8ubahghì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 r!8…r"8}r#8(hYXý 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 heNhsNhthhZjþ7ubjp)r$8}r%8(hYX:pkg-field:`includes`r&8hZjþ7hehfhgjthi}r'8(UreftypeX pkg-fieldjvˆjwXincludesU refdomainXcabalr(8hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMÆhu]r)8hä)r*8}r+8(hYj&8hi}r,8(hk]hl]r-8(jj(8Xcabal-pkg-fieldr.8ehm]hn]hq]uhZj$8hu]r/8h~Xincludesr08…r18}r28(hYUhZj*8ubahghìubaubh~X and r38…r48}r58(hYX and heNhsNhthhZjþ7ubjp)r68}r78(hYX:pkg-field:`install-includes`r88hZjþ7hehfhgjthi}r98(UreftypeX pkg-fieldjvˆjwXinstall-includesU refdomainXcabalr:8hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMÆhu]r;8hä)r<8}r=8(hYj88hi}r>8(hk]hl]r?8(jj:8Xcabal-pkg-fieldr@8ehm]hn]hq]uhZj68hu]rA8h~Xinstall-includesrB8…rC8}rD8(hYUhZj<8ubahghìubaubh~X.…rE8}rF8(hYX.heNhsNhthhZjþ7ubeubaubeubjþ)rG8}rH8(hYUhZj+*hehfhgjhi}rI8(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rJ8}rK8(hYUhZj+*hehfhgjhi}rL8(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrM8j jM8uhsNhthhu]rN8(j)rO8}rP8(hYXc-sources: filename listhZjJ8hehfhgjhi}rQ8(hn]rR8Xpkg-field-c-sourcesrS8ahm]hk]hl]hq]j‰uhsMÒhthhu]rT8(jþ)rU8}rV8(hYUhZjO8hehfhgjhi}rW8(hn]hm]hk]hl]hq]Uentries]rX8(jXc-sources; package.cabal fieldjS8UNtrY8auhsMÒhthhu]ubj)rZ8}r[8(hYX c-sourcesr\8hZjO8hehfhgj!hi}r]8(jÖj×hn]hm]hk]hl]hq]uhsMÒhthhu]r^8h~X c-sourcesr_8…r`8}ra8(hYUheNhsNhthhZjZ8ubaubj')rb8}rc8(hYj hZjO8hehfhgj*hi}rd8(jÖj×hn]hm]hk]hl]hq]uhsMÒhthhu]re8h~X: rf8…rg8}rh8(hYUheNhsNhthhZjb8ubaubj¦)ri8}rj8(hYX filename listhZjO8hehfhgj©hi}rk8(jÖj×hn]hm]hk]hl]hq]uhsMÒhthhu]rl8h~X filename listrm8…rn8}ro8(hYUheNhsNhthhZji8ubaubeubj/)rp8}rq8(hYUhZjJ8hehfhgj2hi}rr8(hk]hl]hm]hn]hq]uhsMÒhthhu]rs8h‚)rt8}ru8(hYXJA list of C source files to be compiled and linked with the Haskell files.rv8hZjp8hehfhgh†hi}rw8(hk]hl]hm]hn]hq]uhsMÐhthhu]rx8h~XJA list of C source files to be compiled and linked with the Haskell files.ry8…rz8}r{8(hYjv8heNhsNhthhZjt8ubaubaubeubjþ)r|8}r}8(hYUhZj+*hehfhgjhi}r~8(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r8}r€8(hYUhZj+*hehfhgjhi}r8(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr‚8j j‚8uhsNhthhu]rƒ8(j)r„8}r…8(hYXcxx-sources: filename listhZj8hehfhgjhi}r†8(hn]r‡8Xpkg-field-cxx-sourcesrˆ8ahm]hk]hl]hq]j‰uhsNhthhu]r‰8(jþ)rŠ8}r‹8(hYUhZj„8hehfhgjhi}rŒ8(hn]hm]hk]hl]hq]Uentries]r8(jX cxx-sources; package.cabal fieldjˆ8UNtrŽ8auhsNhthhu]ubj)r8}r8(hYX cxx-sourcesr‘8hZj„8hehfhgj!hi}r’8(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r“8h~X cxx-sourcesr”8…r•8}r–8(hYUheNhsNhthhZj8ubaubj')r—8}r˜8(hYj hZj„8hehfhgj*hi}r™8(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rš8h~X: r›8…rœ8}r8(hYUheNhsNhthhZj—8ubaubj¦)rž8}rŸ8(hYX filename listhZj„8hehfhgj©hi}r 8(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r¡8h~X filename listr¢8…r£8}r¤8(hYUheNhsNhthhZjž8ubaubeubj/)r¥8}r¦8(hYUhZj8hehfhgj2hi}r§8(hk]hl]hm]hn]hq]uhsNhthhu]r¨8(j5)r©8}rª8(hYUhZj¥8hehfhgj8hi}r«8(hk]hl]hm]hn]hq]uhsNhthhu]r¬8j;)r­8}r®8(hYUhZj©8hehfhgj>hi}r¯8(hk]hl]hm]hn]hq]uhsNhthhu]r°8(jA)r±8}r²8(hYjDhZj­8hehfhgjEhi}r³8(hk]hl]hm]hn]hq]uhsKhu]r´8h~XSincerµ8…r¶8}r·8(hYUhZj±8ubaubjK)r¸8}r¹8(hYU Cabal 2.2rº8hi}r»8(hk]hl]hm]hn]hq]uhZj­8hu]r¼8h‚)r½8}r¾8(hYjº8hi}r¿8(hk]hl]hm]hn]hq]uhZj¸8hu]rÀ8h~X Cabal 2.2rÁ8…rÂ8}rÃ8(hYUhZj½8ubahgh†ubahgjXubeubaubh‚)rÄ8}rÅ8(hYX­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.hZj¥8hehfhgh†hi}rÆ8(hk]hl]hm]hn]hq]uhsMÖhthhu]rÇ8(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 rÈ8…rÉ8}rÊ8(hYX¾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 heNhsNhthhZjÄ8ubjp)rË8}rÌ8(hYX:pkg-field:`cc-options`rÍ8hZjÄ8hehfhgjthi}rÎ8(UreftypeX pkg-fieldjvˆjwX cc-optionsU refdomainXcabalrÏ8hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMÖhu]rÐ8hä)rÑ8}rÒ8(hYjÍ8hi}rÓ8(hk]hl]rÔ8(jjÏ8Xcabal-pkg-fieldrÕ8ehm]hn]hq]uhZjË8hu]rÖ8h~X cc-optionsr×8…rØ8}rÙ8(hYUhZjÑ8ubahghìubaubh~X and the rÚ8…rÛ8}rÜ8(hYX and the heNhsNhthhZjÄ8ubjp)rÝ8}rÞ8(hYX:pkg-field:`cxx-options`rß8hZjÄ8hehfhgjthi}rà8(UreftypeX pkg-fieldjvˆjwX cxx-optionsU refdomainXcabalrá8hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMÖhu]râ8hä)rã8}rä8(hYjß8hi}rå8(hk]hl]ræ8(jjá8Xcabal-pkg-fieldrç8ehm]hn]hq]uhZjÝ8hu]rè8h~X cxx-optionsré8…rê8}rë8(hYUhZjã8ubahghìubaubh~X! fields. The files listed in the rì8…rí8}rî8(hYX! fields. The files listed in the heNhsNhthhZjÄ8ubjp)rï8}rð8(hYX:pkg-field:`cxx-sources`rñ8hZjÄ8hehfhgjthi}rò8(UreftypeX pkg-fieldjvˆjwX cxx-sourcesU refdomainXcabalró8hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMÖhu]rô8hä)rõ8}rö8(hYjñ8hi}r÷8(hk]hl]rø8(jjó8Xcabal-pkg-fieldrù8ehm]hn]hq]uhZjï8hu]rú8h~X cxx-sourcesrû8…rü8}rý8(hYUhZjõ8ubahghìubaubh~X# can reference files listed in the rþ8…rÿ8}r9(hYX# can reference files listed in the heNhsNhthhZjÄ8ubjp)r9}r9(hYX:pkg-field:`c-sources`r9hZjÄ8hehfhgjthi}r9(UreftypeX pkg-fieldjvˆjwX c-sourcesU refdomainXcabalr9hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMÖhu]r9hä)r9}r9(hYj9hi}r 9(hk]hl]r 9(jj9Xcabal-pkg-fieldr 9ehm]hn]hq]uhZj9hu]r 9h~X c-sourcesr 9…r9}r9(hYUhZj9ubahghìubaubh~XE field and vice-versa. The object files will be linked appropriately.r9…r9}r9(hYXE field and vice-versa. The object files will be linked appropriately.heNhsNhthhZjÄ8ubeubeubeubjþ)r9}r9(hYUhZj+*hehfhgjhi}r9(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r9}r9(hYUhZj+*hehfhgjhi}r9(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr9j j9uhsNhthhu]r9(j)r9}r9(hYXasm-sources: filename listhZj9hehfhgjhi}r9(hn]r9Xpkg-field-asm-sourcesr9ahm]hk]hl]hq]j‰uhsMâhthhu]r 9(jþ)r!9}r"9(hYUhZj9hehfhgjhi}r#9(hn]hm]hk]hl]hq]Uentries]r$9(jX asm-sources; package.cabal fieldj9UNtr%9auhsMâhthhu]ubj)r&9}r'9(hYX asm-sourcesr(9hZj9hehfhgj!hi}r)9(jÖj×hn]hm]hk]hl]hq]uhsMâhthhu]r*9h~X asm-sourcesr+9…r,9}r-9(hYUheNhsNhthhZj&9ubaubj')r.9}r/9(hYj hZj9hehfhgj*hi}r09(jÖj×hn]hm]hk]hl]hq]uhsMâhthhu]r19h~X: r29…r39}r49(hYUheNhsNhthhZj.9ubaubj¦)r59}r69(hYX filename listhZj9hehfhgj©hi}r79(jÖj×hn]hm]hk]hl]hq]uhsMâhthhu]r89h~X filename listr99…r:9}r;9(hYUheNhsNhthhZj59ubaubeubj/)r<9}r=9(hYUhZj9hehfhgj2hi}r>9(hk]hl]hm]hn]hq]uhsMâhthhu]r?9h‚)r@9}rA9(hYXQA list of assembly source files to be compiled and linked with the Haskell files.rB9hZj<9hehfhgh†hi}rC9(hk]hl]hm]hn]hq]uhsMàhthhu]rD9h~XQA list of assembly source files to be compiled and linked with the Haskell files.rE9…rF9}rG9(hYjB9heNhsNhthhZj@9ubaubaubeubjþ)rH9}rI9(hYUhZj+*hehfhgjhi}rJ9(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rK9}rL9(hYUhZj+*hehfhgjhi}rM9(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrN9j jN9uhsNhthhu]rO9(j)rP9}rQ9(hYXcmm-sources: filename listhZjK9hehfhgjhi}rR9(hn]rS9Xpkg-field-cmm-sourcesrT9ahm]hk]hl]hq]j‰uhsMçhthhu]rU9(jþ)rV9}rW9(hYUhZjP9hehfhgjhi}rX9(hn]hm]hk]hl]hq]Uentries]rY9(jX cmm-sources; package.cabal fieldjT9UNtrZ9auhsMçhthhu]ubj)r[9}r\9(hYX cmm-sourcesr]9hZjP9hehfhgj!hi}r^9(jÖj×hn]hm]hk]hl]hq]uhsMçhthhu]r_9h~X cmm-sourcesr`9…ra9}rb9(hYUheNhsNhthhZj[9ubaubj')rc9}rd9(hYj hZjP9hehfhgj*hi}re9(jÖj×hn]hm]hk]hl]hq]uhsMçhthhu]rf9h~X: rg9…rh9}ri9(hYUheNhsNhthhZjc9ubaubj¦)rj9}rk9(hYX filename listhZjP9hehfhgj©hi}rl9(jÖj×hn]hm]hk]hl]hq]uhsMçhthhu]rm9h~X filename listrn9…ro9}rp9(hYUheNhsNhthhZjj9ubaubeubj/)rq9}rr9(hYUhZjK9hehfhgj2hi}rs9(hk]hl]hm]hn]hq]uhsMçhthhu]rt9h‚)ru9}rv9(hYXLA list of C-- source files to be compiled and linked with the Haskell files.rw9hZjq9hehfhgh†hi}rx9(hk]hl]hm]hn]hq]uhsMåhthhu]ry9h~XMA list of C– source files to be compiled and linked with the Haskell files.rz9…r{9}r|9(hYjw9heNhsNhthhZju9ubaubaubeubjþ)r}9}r~9(hYUhZj+*hehfhgjhi}r9(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r€9}r9(hYUhZj+*hehfhgjhi}r‚9(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrƒ9j jƒ9uhsNhthhu]r„9(j)r…9}r†9(hYXjs-sources: filename listhZj€9hehfhgjhi}r‡9(hn]rˆ9Xpkg-field-js-sourcesr‰9ahm]hk]hl]hq]j‰uhsMìhthhu]rŠ9(jþ)r‹9}rŒ9(hYUhZj…9hehfhgjhi}r9(hn]hm]hk]hl]hq]Uentries]rŽ9(jXjs-sources; package.cabal fieldj‰9UNtr9auhsMìhthhu]ubj)r9}r‘9(hYX js-sourcesr’9hZj…9hehfhgj!hi}r“9(jÖj×hn]hm]hk]hl]hq]uhsMìhthhu]r”9h~X js-sourcesr•9…r–9}r—9(hYUheNhsNhthhZj9ubaubj')r˜9}r™9(hYj hZj…9hehfhgj*hi}rš9(jÖj×hn]hm]hk]hl]hq]uhsMìhthhu]r›9h~X: rœ9…r9}rž9(hYUheNhsNhthhZj˜9ubaubj¦)rŸ9}r 9(hYX filename listhZj…9hehfhgj©hi}r¡9(jÖj×hn]hm]hk]hl]hq]uhsMìhthhu]r¢9h~X filename listr£9…r¤9}r¥9(hYUheNhsNhthhZjŸ9ubaubeubj/)r¦9}r§9(hYUhZj€9hehfhgj2hi}r¨9(hk]hl]hm]hn]hq]uhsMìhthhu]r©9h‚)rª9}r«9(hYXdA list of JavaScript source files to be linked with the Haskell files (only for JavaScript targets).r¬9hZj¦9hehfhgh†hi}r­9(hk]hl]hm]hn]hq]uhsMêhthhu]r®9h~XdA list of JavaScript source files to be linked with the Haskell files (only for JavaScript targets).r¯9…r°9}r±9(hYj¬9heNhsNhthhZjª9ubaubaubeubjþ)r²9}r³9(hYUhZj+*hehfhgjhi}r´9(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rµ9}r¶9(hYUhZj+*hehfhgjhi}r·9(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr¸9j j¸9uhsNhthhu]r¹9(j)rº9}r»9(hYXextra-libraries: token listhZjµ9hehfhgjhi}r¼9(hn]r½9Xpkg-field-extra-librariesr¾9ahm]hk]hl]hq]j‰uhsMðhthhu]r¿9(jþ)rÀ9}rÁ9(hYUhZjº9hehfhgjhi}rÂ9(hn]hm]hk]hl]hq]Uentries]rÃ9(jX$extra-libraries; package.cabal fieldj¾9UNtrÄ9auhsMðhthhu]ubj)rÅ9}rÆ9(hYXextra-librariesrÇ9hZjº9hehfhgj!hi}rÈ9(jÖj×hn]hm]hk]hl]hq]uhsMðhthhu]rÉ9h~Xextra-librariesrÊ9…rË9}rÌ9(hYUheNhsNhthhZjÅ9ubaubj')rÍ9}rÎ9(hYj hZjº9hehfhgj*hi}rÏ9(jÖj×hn]hm]hk]hl]hq]uhsMðhthhu]rÐ9h~X: rÑ9…rÒ9}rÓ9(hYUheNhsNhthhZjÍ9ubaubj¦)rÔ9}rÕ9(hYX token listhZjº9hehfhgj©hi}rÖ9(jÖj×hn]hm]hk]hl]hq]uhsMðhthhu]r×9h~X token listrØ9…rÙ9}rÚ9(hYUheNhsNhthhZjÔ9ubaubeubj/)rÛ9}rÜ9(hYUhZjµ9hehfhgj2hi}rÝ9(hk]hl]hm]hn]hq]uhsMðhthhu]rÞ9h‚)rß9}rà9(hYX'A list of extra libraries to link with.rá9hZjÛ9hehfhgh†hi}râ9(hk]hl]hm]hn]hq]uhsMïhthhu]rã9h~X'A list of extra libraries to link with.rä9…rå9}ræ9(hYjá9heNhsNhthhZjß9ubaubaubeubjþ)rç9}rè9(hYUhZj+*hehfhgjhi}ré9(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rê9}rë9(hYUhZj+*hehfhgjhi}rì9(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrí9j jí9uhsNhthhu]rî9(j)rï9}rð9(hYX extra-ghci-libraries: token listhZjê9hehfhgjhi}rñ9(hn]rò9Xpkg-field-extra-ghci-librariesró9ahm]hk]hl]hq]j‰uhsMõhthhu]rô9(jþ)rõ9}rö9(hYUhZjï9hehfhgjhi}r÷9(hn]hm]hk]hl]hq]Uentries]rø9(jX)extra-ghci-libraries; package.cabal fieldjó9UNtrù9auhsMõhthhu]ubj)rú9}rû9(hYXextra-ghci-librariesrü9hZjï9hehfhgj!hi}rý9(jÖj×hn]hm]hk]hl]hq]uhsMõhthhu]rþ9h~Xextra-ghci-librariesrÿ9…r:}r:(hYUheNhsNhthhZjú9ubaubj')r:}r:(hYj hZjï9hehfhgj*hi}r:(jÖj×hn]hm]hk]hl]hq]uhsMõhthhu]r:h~X: r:…r:}r:(hYUheNhsNhthhZj:ubaubj¦)r :}r :(hYX token listhZjï9hehfhgj©hi}r :(jÖj×hn]hm]hk]hl]hq]uhsMõhthhu]r :h~X token listr :…r:}r:(hYUheNhsNhthhZj :ubaubeubj/)r:}r:(hYUhZjê9hehfhgj2hi}r:(hk]hl]hm]hn]hq]uhsMõhthhu]r:h‚)r:}r:(hYXgA list of extra libraries to be used instead of 'extra-libraries' when the package is loaded with GHCi.r:hZj:hehfhgh†hi}r:(hk]hl]hm]hn]hq]uhsMóhthhu]r:h~XkA list of extra libraries to be used instead of ‘extra-libraries’ when the package is loaded with GHCi.r:…r:}r:(hYj:heNhsNhthhZj:ubaubaubeubjþ)r:}r:(hYUhZj+*hehfhgjhi}r:(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r:}r :(hYUhZj+*hehfhgjhi}r!:(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr":j j":uhsNhthhu]r#:(j)r$:}r%:(hYX#extra-bundled-libraries: token listhZj:hehfhgjhi}r&:(hn]r':X!pkg-field-extra-bundled-librariesr(:ahm]hk]hl]hq]j‰uhsMþhthhu]r):(jþ)r*:}r+:(hYUhZj$:hehfhgjhi}r,:(hn]hm]hk]hl]hq]Uentries]r-:(jX,extra-bundled-libraries; package.cabal fieldj(:UNtr.:auhsMþhthhu]ubj)r/:}r0:(hYXextra-bundled-librariesr1:hZj$:hehfhgj!hi}r2:(jÖj×hn]hm]hk]hl]hq]uhsMþhthhu]r3:h~Xextra-bundled-librariesr4:…r5:}r6:(hYUheNhsNhthhZj/:ubaubj')r7:}r8:(hYj hZj$:hehfhgj*hi}r9:(jÖj×hn]hm]hk]hl]hq]uhsMþhthhu]r::h~X: r;:…r<:}r=:(hYUheNhsNhthhZj7:ubaubj¦)r>:}r?:(hYX token listhZj$:hehfhgj©hi}r@:(jÖj×hn]hm]hk]hl]hq]uhsMþhthhu]rA:h~X token listrB:…rC:}rD:(hYUheNhsNhthhZj>:ubaubeubj/)rE:}rF:(hYUhZj:hehfhgj2hi}rG:(hk]hl]hm]hn]hq]uhsMþhthhu]rH:h‚)rI:}rJ:(hYXqA 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.hZjE:hehfhgh†hi}rK:(hk]hl]hm]hn]hq]uhsMøhthhu]rL:(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 rM:…rN:}rO:(hYXA 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 heNhsNhthhZjI:ubhä)rP:}rQ:(hYX``copy``hi}rR:(hk]hl]hm]hn]hq]uhZjI:hu]rS:h~XcopyrT:…rU:}rV:(hYUhZjP:ubahghìubh~X#-ing packages and be listed in the rW:…rX:}rY:(hYX#-ing packages and be listed in the heNhsNhthhZjI:ubhä)rZ:}r[:(hYX``hs-libraries``hi}r\:(hk]hl]hm]hn]hq]uhZjI:hu]r]:h~X hs-librariesr^:…r_:}r`:(hYUhZjZ:ubahghìubh~X of the package configuration.ra:…rb:}rc:(hYX of the package configuration.heNhsNhthhZjI:ubeubaubeubjþ)rd:}re:(hYUhZj+*hehfhgjhi}rf:(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rg:}rh:(hYUhZj+*hehfhgjhi}ri:(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrj:j jj:uhsNhthhu]rk:(j)rl:}rm:(hYXextra-lib-dirs: directory listhZjg:hehfhgjhi}rn:(hn]ro:Xpkg-field-extra-lib-dirsrp:ahm]hk]hl]hq]j‰uhsM hthhu]rq:(jþ)rr:}rs:(hYUhZjl:hehfhgjhi}rt:(hn]hm]hk]hl]hq]Uentries]ru:(jX#extra-lib-dirs; package.cabal fieldjp:UNtrv:auhsM hthhu]ubj)rw:}rx:(hYXextra-lib-dirsry:hZjl:hehfhgj!hi}rz:(jÖj×hn]hm]hk]hl]hq]uhsM hthhu]r{:h~Xextra-lib-dirsr|:…r}:}r~:(hYUheNhsNhthhZjw:ubaubj')r:}r€:(hYj hZjl:hehfhgj*hi}r:(jÖj×hn]hm]hk]hl]hq]uhsM hthhu]r‚:h~X: rƒ:…r„:}r…:(hYUheNhsNhthhZj:ubaubj¦)r†:}r‡:(hYXdirectory listhZjl:hehfhgj©hi}rˆ:(jÖj×hn]hm]hk]hl]hq]uhsM hthhu]r‰:h~Xdirectory listrŠ:…r‹:}rŒ:(hYUheNhsNhthhZj†:ubaubeubj/)r:}rŽ:(hYUhZjg:hehfhgj2hi}r:(hk]hl]hm]hn]hq]uhsM hthhu]r:h‚)r‘:}r’:(hYX.A list of directories to search for libraries.r“:hZj:hehfhgh†hi}r”:(hk]hl]hm]hn]hq]uhsM hthhu]r•:h~X.A list of directories to search for libraries.r–:…r—:}r˜:(hYj“:heNhsNhthhZj‘:ubaubaubeubjþ)r™:}rš:(hYUhZj+*hehfhgjhi}r›:(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rœ:}r:(hYUhZj+*hehfhgjhi}rž:(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrŸ:j jŸ:uhsNhthhu]r :(j)r¡:}r¢:(hYXcc-options: token listhZjœ:hehfhgjhi}r£:(hn]r¤:Xpkg-field-cc-optionsr¥:ahm]hk]hl]hq]j‰uhsM hthhu]r¦:(jþ)r§:}r¨:(hYUhZj¡:hehfhgjhi}r©:(hn]hm]hk]hl]hq]Uentries]rª:(jXcc-options; package.cabal fieldj¥:UNtr«:auhsM hthhu]ubj)r¬:}r­:(hYX cc-optionsr®:hZj¡:hehfhgj!hi}r¯:(jÖj×hn]hm]hk]hl]hq]uhsM hthhu]r°:h~X cc-optionsr±:…r²:}r³:(hYUheNhsNhthhZj¬:ubaubj')r´:}rµ:(hYj hZj¡:hehfhgj*hi}r¶:(jÖj×hn]hm]hk]hl]hq]uhsM hthhu]r·:h~X: r¸:…r¹:}rº:(hYUheNhsNhthhZj´:ubaubj¦)r»:}r¼:(hYX token listhZj¡:hehfhgj©hi}r½:(jÖj×hn]hm]hk]hl]hq]uhsM hthhu]r¾:h~X token listr¿:…rÀ:}rÁ:(hYUheNhsNhthhZj»:ubaubeubj/)rÂ:}rÃ:(hYUhZjœ:hehfhgj2hi}rÄ:(hk]hl]hm]hn]hq]uhsM hthhu]rÅ:h‚)rÆ:}rÇ:(hYXÇ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`_.hZjÂ:hehfhgh†hi}rÈ:(hk]hl]hm]hn]hq]uhsM hthhu]rÉ:(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Ê:…rË:}rÌ:(hYX¨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 heNhsNhthhZjÆ:ubjD)rÍ:}rÎ:(hYX`system-dependent parameters`_jGKhZjÆ:hgjHhi}rÏ:(UnameXsystem-dependent parametershn]hm]hk]hl]hq]jJj•uhu]rÐ:h~Xsystem-dependent parametersrÑ:…rÒ:}rÓ:(hYUhZjÍ:ubaubh~X.…rÔ:}rÕ:(hYX.heNhsNhthhZjÆ:ubeubaubeubjþ)rÖ:}r×:(hYUhZj+*hehfhgjhi}rØ:(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rÙ:}rÚ:(hYUhZj+*hehfhgjhi}rÛ:(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrÜ:j jÜ:uhsNhthhu]rÝ:(j)rÞ:}rß:(hYXcpp-options: token listhZjÙ:hehfhgjhi}rà:(hn]rá:Xpkg-field-cpp-optionsrâ:ahm]hk]hl]hq]j‰uhsM hthhu]rã:(jþ)rä:}rå:(hYUhZjÞ:hehfhgjhi}ræ:(hn]hm]hk]hl]hq]Uentries]rç:(jX cpp-options; package.cabal fieldjâ:UNtrè:auhsM hthhu]ubj)ré:}rê:(hYX cpp-optionsrë:hZjÞ:hehfhgj!hi}rì:(jÖj×hn]hm]hk]hl]hq]uhsM hthhu]rí:h~X cpp-optionsrî:…rï:}rð:(hYUheNhsNhthhZjé:ubaubj')rñ:}rò:(hYj hZjÞ:hehfhgj*hi}ró:(jÖj×hn]hm]hk]hl]hq]uhsM hthhu]rô:h~X: rõ:…rö:}r÷:(hYUheNhsNhthhZjñ:ubaubj¦)rø:}rù:(hYX token listhZjÞ:hehfhgj©hi}rú:(jÖj×hn]hm]hk]hl]hq]uhsM hthhu]rû:h~X token listrü:…rý:}rþ:(hYUheNhsNhthhZjø:ubaubeubj/)rÿ:}r;(hYUhZjÙ:hehfhgj2hi}r;(hk]hl]hm]hn]hq]uhsM hthhu]r;h‚)r;}r;(hYXÁ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;hZjÿ:hehfhgh†hi}r;(hk]hl]hm]hn]hq]uhsM hthhu]r;h~XÃCommand-line arguments for pre-processing Haskell code. Applies to Haskell source and other pre-processed Haskell source like .hsc .chs. Does not apply to C code, that’s what cc-options is for.r;…r ;}r ;(hYj;heNhsNhthhZj;ubaubaubeubjþ)r ;}r ;(hYUhZj+*hehfhgjhi}r ;(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r;}r;(hYUhZj+*hehfhgjhi}r;(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr;j j;uhsNhthhu]r;(j)r;}r;(hYXcxx-options: token listhZj;hehfhgjhi}r;(hn]r;Xpkg-field-cxx-optionsr;ahm]hk]hl]hq]j‰uhsNhthhu]r;(jþ)r;}r;(hYUhZj;hehfhgjhi}r;(hn]hm]hk]hl]hq]Uentries]r;(jX cxx-options; package.cabal fieldj;UNtr;auhsNhthhu]ubj)r;}r;(hYX cxx-optionsr ;hZj;hehfhgj!hi}r!;(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r";h~X cxx-optionsr#;…r$;}r%;(hYUheNhsNhthhZj;ubaubj')r&;}r';(hYj hZj;hehfhgj*hi}r(;(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r);h~X: r*;…r+;}r,;(hYUheNhsNhthhZj&;ubaubj¦)r-;}r.;(hYX token listhZj;hehfhgj©hi}r/;(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r0;h~X token listr1;…r2;}r3;(hYUheNhsNhthhZj-;ubaubeubj/)r4;}r5;(hYUhZj;hehfhgj2hi}r6;(hk]hl]hm]hn]hq]uhsNhthhu]r7;(j5)r8;}r9;(hYUhZj4;hehfhgj8hi}r:;(hk]hl]hm]hn]hq]uhsNhthhu]r;;j;)r<;}r=;(hYUhZj8;hehfhgj>hi}r>;(hk]hl]hm]hn]hq]uhsNhthhu]r?;(jA)r@;}rA;(hYjDhZj<;hehfhgjEhi}rB;(hk]hl]hm]hn]hq]uhsKhu]rC;h~XSincerD;…rE;}rF;(hYUhZj@;ubaubjK)rG;}rH;(hYU Cabal 2.2rI;hi}rJ;(hk]hl]hm]hn]hq]uhZj<;hu]rK;h‚)rL;}rM;(hYjI;hi}rN;(hk]hl]hm]hn]hq]uhZjG;hu]rO;h~X Cabal 2.2rP;…rQ;}rR;(hYUhZjL;ubahgh†ubahgjXubeubaubh‚)rS;}rT;(hYX0Command-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.hZj4;hehfhgh†hi}rU;(hk]hl]hm]hn]hq]uhsM hthhu]rV;(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 rW;…rX;}rY;(hYX¯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 heNhsNhthhZjS;ubjp)rZ;}r[;(hYX:pkg-field:`cxx-sources`r\;hZjS;hehfhgjthi}r];(UreftypeX pkg-fieldjvˆjwX cxx-sourcesU refdomainXcabalr^;hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsM hu]r_;hä)r`;}ra;(hYj\;hi}rb;(hk]hl]rc;(jj^;Xcabal-pkg-fieldrd;ehm]hn]hq]uhZjZ;hu]re;h~X cxx-sourcesrf;…rg;}rh;(hYUhZj`;ubahghì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 ri;…rj;}rk;(hYX¨ 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 heNhsNhthhZjS;ubjp)rl;}rm;(hYX:pkg-field:`c-sources`rn;hZjS;hehfhgjthi}ro;(UreftypeX pkg-fieldjvˆjwX c-sourcesU refdomainXcabalrp;hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsM hu]rq;hä)rr;}rs;(hYjn;hi}rt;(hk]hl]ru;(jjp;Xcabal-pkg-fieldrv;ehm]hn]hq]uhZjl;hu]rw;h~X c-sourcesrx;…ry;}rz;(hYUhZjr;ubahghìubaubh~X and r{;…r|;}r};(hYX and heNhsNhthhZjS;ubjp)r~;}r;(hYX:pkg-field:`cxx-sources`r€;hZjS;hehfhgjthi}r;(UreftypeX pkg-fieldjvˆjwX cxx-sourcesU refdomainXcabalr‚;hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsM hu]rƒ;hä)r„;}r…;(hYj€;hi}r†;(hk]hl]r‡;(jj‚;Xcabal-pkg-fieldrˆ;ehm]hn]hq]uhZj~;hu]r‰;h~X cxx-sourcesrŠ;…r‹;}rŒ;(hYUhZj„;ubahghìubaubh~XN fields respectively, and providing different command-line arguments with the r;…rŽ;}r;(hYXN fields respectively, and providing different command-line arguments with the heNhsNhthhZjS;ubjp)r;}r‘;(hYX:pkg-field:`cc-options`r’;hZjS;hehfhgjthi}r“;(UreftypeX pkg-fieldjvˆjwX cc-optionsU refdomainXcabalr”;hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsM hu]r•;hä)r–;}r—;(hYj’;hi}r˜;(hk]hl]r™;(jj”;Xcabal-pkg-fieldrš;ehm]hn]hq]uhZj;hu]r›;h~X cc-optionsrœ;…r;}rž;(hYUhZj–;ubahghìubaubh~X and the rŸ;…r ;}r¡;(hYX and the heNhsNhthhZjS;ubjp)r¢;}r£;(hYX:pkg-field:`cxx-options`r¤;hZjS;hehfhgjthi}r¥;(UreftypeX pkg-fieldjvˆjwX cxx-optionsU refdomainXcabalr¦;hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsM hu]r§;hä)r¨;}r©;(hYj¤;hi}rª;(hk]hl]r«;(jj¦;Xcabal-pkg-fieldr¬;ehm]hn]hq]uhZj¢;hu]r­;h~X cxx-optionsr®;…r¯;}r°;(hYUhZj¨;ubahghìubaubh~X fields.r±;…r²;}r³;(hYX fields.heNhsNhthhZjS;ubeubeubeubjþ)r´;}rµ;(hYUhZj+*hehfhgjhi}r¶;(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r·;}r¸;(hYUhZj+*hehfhgjhi}r¹;(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrº;j jº;uhsNhthhu]r»;(j)r¼;}r½;(hYXld-options: token listhZj·;hehfhgjhi}r¾;(hn]r¿;Xpkg-field-ld-optionsrÀ;ahm]hk]hl]hq]j‰uhsM! hthhu]rÁ;(jþ)rÂ;}rÃ;(hYUhZj¼;hehfhgjhi}rÄ;(hn]hm]hk]hl]hq]Uentries]rÅ;(jXld-options; package.cabal fieldjÀ;UNtrÆ;auhsM! hthhu]ubj)rÇ;}rÈ;(hYX ld-optionsrÉ;hZj¼;hehfhgj!hi}rÊ;(jÖj×hn]hm]hk]hl]hq]uhsM! hthhu]rË;h~X ld-optionsrÌ;…rÍ;}rÎ;(hYUheNhsNhthhZjÇ;ubaubj')rÏ;}rÐ;(hYj hZj¼;hehfhgj*hi}rÑ;(jÖj×hn]hm]hk]hl]hq]uhsM! hthhu]rÒ;h~X: rÓ;…rÔ;}rÕ;(hYUheNhsNhthhZjÏ;ubaubj¦)rÖ;}r×;(hYX token listhZj¼;hehfhgj©hi}rØ;(jÖj×hn]hm]hk]hl]hq]uhsM! hthhu]rÙ;h~X token listrÚ;…rÛ;}rÜ;(hYUheNhsNhthhZjÖ;ubaubeubj/)rÝ;}rÞ;(hYUhZj·;hehfhgj2hi}rß;(hk]hl]hm]hn]hq]uhsM! hthhu]rà;h‚)rá;}râ;(hYXÃ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`_.hZjÝ;hehfhgh†hi}rã;(hk]hl]hm]hn]hq]uhsM hthhu]rä;(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å;…ræ;}rç;(hYX¤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 heNhsNhthhZjá;ubjD)rè;}ré;(hYX`system-dependent parameters`_jGKhZjá;hgjHhi}rê;(UnameXsystem-dependent parametershn]hm]hk]hl]hq]jJj•uhu]rë;h~Xsystem-dependent parametersrì;…rí;}rî;(hYUhZjè;ubaubh~X.…rï;}rð;(hYX.heNhsNhthhZjá;ubeubaubeubjþ)rñ;}rò;(hYUhZj+*hehfhgjhi}ró;(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rô;}rõ;(hYUhZj+*hehfhgjhi}rö;(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr÷;j j÷;uhsNhthhu]rø;(j)rù;}rú;(hYXpkgconfig-depends: package listhZjô;hehfhgjhi}rû;(hn]rü;Xpkg-field-pkgconfig-dependsrý;ahm]hk]hl]hq]j‰uhsM1 hthhu]rþ;(jþ)rÿ;}r<(hYUhZjù;hehfhgjhi}r<(hn]hm]hk]hl]hq]Uentries]r<(jX&pkgconfig-depends; package.cabal fieldjý;UNtr<auhsM1 hthhu]ubj)r<}r<(hYXpkgconfig-dependsr<hZjù;hehfhgj!hi}r<(jÖj×hn]hm]hk]hl]hq]uhsM1 hthhu]r<h~Xpkgconfig-dependsr <…r <}r <(hYUheNhsNhthhZj<ubaubj')r <}r <(hYj hZjù;hehfhgj*hi}r<(jÖj×hn]hm]hk]hl]hq]uhsM1 hthhu]r<h~X: r<…r<}r<(hYUheNhsNhthhZj <ubaubj¦)r<}r<(hYX package listhZjù;hehfhgj©hi}r<(jÖj×hn]hm]hk]hl]hq]uhsM1 hthhu]r<h~X package listr<…r<}r<(hYUheNhsNhthhZj<ubaubeubj/)r<}r<(hYUhZjô;hehfhgj2hi}r<(hk]hl]hm]hn]hq]uhsM1 hthhu]r<(h‚)r<}r<(hYX´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.hZj<hehfhgh†hi}r <(hk]hl]hm]hn]hq]uhsM$ hthhu]r!<(h~X A list of r"<…r#<}r$<(hYX A list of heNhsNhthhZj<ubjD)r%<}r&<(hYXE`pkg-config `__hi}r'<(UnameX pkg-configjƒX4http://www.freedesktop.org/wiki/Software/pkg-config/hn]hm]hk]hl]hq]uhZj<hu]r(<h~X pkg-configr)<…r*<}r+<(hYUhZj%<ubahgjHubh~XS packages, needed to build this package. They can be annotated with versions, e.g. r,<…r-<}r.<(hYXS packages, needed to build this package. They can be annotated with versions, e.g. heNhsNhthhZj<ubhä)r/<}r0<(hYX"``gtk+-2.0 >= 2.10, cairo >= 1.0``hi}r1<(hk]hl]hm]hn]hq]uhZj<hu]r2<h~Xgtk+-2.0 >= 2.10, cairo >= 1.0r3<…r4<}r5<(hYUhZj/<ubahghìubh~X]. If no version constraint is specified, any version is assumed to be acceptable. Cabal uses r6<…r7<}r8<(hYX]. If no version constraint is specified, any version is assumed to be acceptable. Cabal uses heNhsNhthhZj<ubhä)r9<}r:<(hYX``pkg-config``hi}r;<(hk]hl]hm]hn]hq]uhZj<hu]r<<h~X pkg-configr=<…r><}r?<(hYUhZj9<ubahghì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@<…rA<}rB<(hYX… to find if the packages are available on the system and to find the extra compilation and linker options needed to use the packages.heNhsNhthhZj<ubeubh‚)rC<}rD<(hYXà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.hZj<hehfhgh†hi}rE<(hk]hl]hm]hn]hq]uhsM- hthhu]rF<(h~X1If you need to bind to a C library that supports rG<…rH<}rI<(hYX1If you need to bind to a C library that supports heNhsNhthhZjC<ubhä)rJ<}rK<(hYX``pkg-config``hi}rL<(hk]hl]hm]hn]hq]uhZjC<hu]rM<h~X pkg-configrN<…rO<}rP<(hYUhZjJ<ubahghìubh~X (use rQ<…rR<}rS<(hYX (use heNhsNhthhZjC<ubhä)rT<}rU<(hYX``pkg-config --list-all``hi}rV<(hk]hl]hm]hn]hq]uhZjC<hu]rW<h~Xpkg-config --list-allrX<…rY<}rZ<(hYUhZjT<ubahghì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.r[<…r\<}r]<(hYX‚ 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.heNhsNhthhZjC<ubeubeubeubjþ)r^<}r_<(hYUhZj+*hehfhgjhi}r`<(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)ra<}rb<(hYUhZj+*hehfhgjhi}rc<(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrd<j jd<uhsNhthhu]re<(j)rf<}rg<(hYXframeworks: token listhZja<hehfhgjhi}rh<(hn]ri<Xpkg-field-frameworksrj<ahm]hk]hl]hq]j‰uhsM7 hthhu]rk<(jþ)rl<}rm<(hYUhZjf<hehfhgjhi}rn<(hn]hm]hk]hl]hq]Uentries]ro<(jXframeworks; package.cabal fieldjj<UNtrp<auhsM7 hthhu]ubj)rq<}rr<(hYX frameworksrs<hZjf<hehfhgj!hi}rt<(jÖj×hn]hm]hk]hl]hq]uhsM7 hthhu]ru<h~X frameworksrv<…rw<}rx<(hYUheNhsNhthhZjq<ubaubj')ry<}rz<(hYj hZjf<hehfhgj*hi}r{<(jÖj×hn]hm]hk]hl]hq]uhsM7 hthhu]r|<h~X: r}<…r~<}r<(hYUheNhsNhthhZjy<ubaubj¦)r€<}r<(hYX token listhZjf<hehfhgj©hi}r‚<(jÖj×hn]hm]hk]hl]hq]uhsM7 hthhu]rƒ<h~X token listr„<…r…<}r†<(hYUheNhsNhthhZj€<ubaubeubj/)r‡<}rˆ<(hYUhZja<hehfhgj2hi}r‰<(hk]hl]hm]hn]hq]uhsM7 hthhu]rŠ<h‚)r‹<}rŒ<(hYX¥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.r<hZj‡<hehfhgh†hi}rŽ<(hk]hl]hm]hn]hq]uhsM4 hthhu]r<h~X§On Darwin/MacOS X, a list of frameworks to link to. See Apple’s developer documentation for more details on frameworks. This entry is ignored on all other platforms.r<…r‘<}r’<(hYj<heNhsNhthhZj‹<ubaubaubeubjþ)r“<}r”<(hYUhZj+*hehfhgjhi}r•<(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r–<}r—<(hYUhZj+*hehfhgjhi}r˜<(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr™<j j™<uhsNhthhu]rš<(j)r›<}rœ<(hYX%extra-frameworks-dirs: directory listhZj–<hehfhgjhi}r<(hn]rž<Xpkg-field-extra-frameworks-dirsrŸ<ahm]hk]hl]hq]j‰uhsM< hthhu]r <(jþ)r¡<}r¢<(hYUhZj›<hehfhgjhi}r£<(hn]hm]hk]hl]hq]Uentries]r¤<(jX*extra-frameworks-dirs; package.cabal fieldjŸ<UNtr¥<auhsM< hthhu]ubj)r¦<}r§<(hYXextra-frameworks-dirsr¨<hZj›<hehfhgj!hi}r©<(jÖj×hn]hm]hk]hl]hq]uhsM< hthhu]rª<h~Xextra-frameworks-dirsr«<…r¬<}r­<(hYUheNhsNhthhZj¦<ubaubj')r®<}r¯<(hYj hZj›<hehfhgj*hi}r°<(jÖj×hn]hm]hk]hl]hq]uhsM< hthhu]r±<h~X: r²<…r³<}r´<(hYUheNhsNhthhZj®<ubaubj¦)rµ<}r¶<(hYXdirectory listhZj›<hehfhgj©hi}r·<(jÖj×hn]hm]hk]hl]hq]uhsM< hthhu]r¸<h~Xdirectory listr¹<…rº<}r»<(hYUheNhsNhthhZjµ<ubaubeubj/)r¼<}r½<(hYUhZj–<hehfhgj2hi}r¾<(hk]hl]hm]hn]hq]uhsM< hthhu]r¿<h‚)rÀ<}rÁ<(hYXpOn Darwin/MacOS X, a list of directories to search for frameworks. This entry is ignored on all other platforms.rÂ<hZj¼<hehfhgh†hi}rÃ<(hk]hl]hm]hn]hq]uhsM: hthhu]rÄ<h~XpOn Darwin/MacOS X, a list of directories to search for frameworks. This entry is ignored on all other platforms.rÅ<…rÆ<}rÇ<(hYjÂ<heNhsNhthhZjÀ<ubaubaubeubjþ)rÈ<}rÉ<(hYUhZj+*heNhgjhi}rÊ<(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rË<}rÌ<(hYUhZj+*heNhgjhi}rÍ<(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrÎ<j jÎ<uhsNhthhu]rÏ<(j)rÐ<}rÑ<(hYXmixins: mixin listhZjË<hehfhgjhi}rÒ<(hn]rÓ<Xpkg-field-mixinsrÔ<ahm]hk]hl]hq]j‰uhsNhthhu]rÕ<(jþ)rÖ<}r×<(hYUhZjÐ<hehfhgjhi}rØ<(hn]hm]hk]hl]hq]Uentries]rÙ<(jXmixins; package.cabal fieldjÔ<UNtrÚ<auhsNhthhu]ubj)rÛ<}rÜ<(hYXmixinsrÝ<hZjÐ<hehfhgj!hi}rÞ<(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rß<h~Xmixinsrà<…rá<}râ<(hYUheNhsNhthhZjÛ<ubaubj')rã<}rä<(hYj hZjÐ<hehfhgj*hi}rå<(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]ræ<h~X: rç<…rè<}ré<(hYUheNhsNhthhZjã<ubaubj¦)rê<}rë<(hYX mixin listhZjÐ<hehfhgj©hi}rì<(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rí<h~X mixin listrî<…rï<}rð<(hYUheNhsNhthhZjê<ubaubeubj/)rñ<}rò<(hYUhZjË<hehfhgj2hi}ró<(hk]hl]hm]hn]hq]uhsNhthhu]rô<(j5)rõ<}rö<(hYUhZjñ<heNhgj8hi}r÷<(hk]hl]hm]hn]hq]uhsNhthhu]rø<j;)rù<}rú<(hYUhZjõ<heNhgj>hi}rû<(hk]hl]hm]hn]hq]uhsNhthhu]rü<(jA)rý<}rþ<(hYjDhZjù<hehfhgjEhi}rÿ<(hk]hl]hm]hn]hq]uhsKhu]r=h~XSincer=…r=}r=(hYUhZjý<ubaubjK)r=}r=(hYU Cabal 2.0r=hi}r=(hk]hl]hm]hn]hq]uhZjù<hu]r=h‚)r =}r =(hYj=hi}r =(hk]hl]hm]hn]hq]uhZj=hu]r =h~X Cabal 2.0r =…r=}r=(hYUhZj =ubahgh†ubahgjXubeubaubh‚)r=}r=(hYXºSupported only in GHC 8.2 and later. A list of packages mentioned in the :pkg-field:`build-depends` field, each optionally accompanied by a list of module and module signature renamings.hZjñ<hehfhgh†hi}r=(hk]hl]hm]hn]hq]uhsM@ hthhu]r=(h~XISupported only in GHC 8.2 and later. A list of packages mentioned in the r=…r=}r=(hYXISupported only in GHC 8.2 and later. A list of packages mentioned in the heNhsNhthhZj=ubjp)r=}r=(hYX:pkg-field:`build-depends`r=hZj=hehfhgjthi}r=(UreftypeX pkg-fieldjvˆjwX build-dependsU refdomainXcabalr=hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsM@ hu]r=hä)r=}r=(hYj=hi}r=(hk]hl]r =(jj=Xcabal-pkg-fieldr!=ehm]hn]hq]uhZj=hu]r"=h~X build-dependsr#=…r$=}r%=(hYUhZj=ubahghìubaubh~XW field, each optionally accompanied by a list of module and module signature renamings.r&=…r'=}r(=(hYXW field, each optionally accompanied by a list of module and module signature renamings.heNhsNhthhZj=ubeubh‚)r)=}r*=(hYXyThe simplest mixin syntax is simply the name of a package mentioned in the :pkg-field:`build-depends` field. For example:hZjñ<hehfhgh†hi}r+=(hk]hl]hm]hn]hq]uhsMD hthhu]r,=(h~XKThe simplest mixin syntax is simply the name of a package mentioned in the r-=…r.=}r/=(hYXKThe simplest mixin syntax is simply the name of a package mentioned in the heNhsNhthhZj)=ubjp)r0=}r1=(hYX:pkg-field:`build-depends`r2=hZj)=hehfhgjthi}r3=(UreftypeX pkg-fieldjvˆjwX build-dependsU refdomainXcabalr4=hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMD hu]r5=hä)r6=}r7=(hYj2=hi}r8=(hk]hl]r9=(jj4=Xcabal-pkg-fieldr:=ehm]hn]hq]uhZj0=hu]r;=h~X build-dependsr<=…r==}r>=(hYUhZj6=ubahghìubaubh~X field. For example:r?=…r@=}rA=(hYX field. For example:heNhsNhthhZj)=ubeubjÑ)rB=}rC=(hYXDlibrary build-depends: foo >= 1.2.3 && < 1.3 mixins: foohZjñ<hehfhgjÔhi}rD=(jÖj×hn]hm]hk]hl]hq]uhsMI hthhu]rE=h~XDlibrary build-depends: foo >= 1.2.3 && < 1.3 mixins: foorF=…rG=}rH=(hYUhZjB=ubaubh‚)rI=}rJ=(hYX‡But this doesn't have any effect. More interesting is to use the mixin entry to rename one or more modules from the package, like this:rK=hZjñ<hehfhgh†hi}rL=(hk]hl]hm]hn]hq]uhsMO hthhu]rM=h~X‰But this doesn’t have any effect. More interesting is to use the mixin entry to rename one or more modules from the package, like this:rN=…rO=}rP=(hYjK=heNhsNhthhZjI=ubaubjÑ)rQ=}rR=(hYXPlibrary mixins: foo (Foo.Bar as AnotherFoo.Bar, Foo.Baz as AnotherFoo.Baz)hZjñ<hehfhgjÔhi}rS=(jÖj×hn]hm]hk]hl]hq]uhsMT hthhu]rT=h~XPlibrary mixins: foo (Foo.Bar as AnotherFoo.Bar, Foo.Baz as AnotherFoo.Baz)rU=…rV=}rW=(hYUhZjQ=ubaubh‚)rX=}rY=(hYX^Note that renaming a module like this will hide all the modules that are not explicitly named.rZ=hZjñ<hehfhgh†hi}r[=(hk]hl]hm]hn]hq]uhsMX hthhu]r\=h~X^Note that renaming a module like this will hide all the modules that are not explicitly named.r]=…r^=}r_=(hYjZ=heNhsNhthhZjX=ubaubh‚)r`=}ra=(hYXModules can also be hidden:rb=hZjñ<hehfhgh†hi}rc=(hk]hl]hm]hn]hq]uhsM[ hthhu]rd=h~XModules can also be hidden:re=…rf=}rg=(hYjb=heNhsNhthhZj`=ubaubjÑ)rh=}ri=(hYX+library: mixins: foo hiding (Foo.Bar)hZjñ<hehfhgjÔhi}rj=(jÖj×hn]hm]hk]hl]hq]uhsM_ hthhu]rk=h~X+library: mixins: foo hiding (Foo.Bar)rl=…rm=}rn=(hYUhZjh=ubaubh‚)ro=}rp=(hYX@Hiding modules exposes everything that is not explicitly hidden.rq=hZjñ<hehfhgh†hi}rr=(hk]hl]hm]hn]hq]uhsMc hthhu]rs=h~X@Hiding modules exposes everything that is not explicitly hidden.rt=…ru=}rv=(hYjq=heNhsNhthhZjo=ubaubhð)rw=}rx=(hYXÃThe current version of Cabal suffers from an infelicity in how the entries of :pkg-field:`mixins` are parsed: an entry will fail to parse if the provided renaming clause has whitespace after the opening parenthesis. This will be fixed in future versions of Cabal. See issues `#5150 `__, `#4864 `__, and `#5293 `__.hZjñ<hehfhghóhi}ry=(hk]hl]hm]hn]hq]uhsNhthhu]rz=(h‚)r{=}r|=(hYXThe current version of Cabal suffers from an infelicity in how the entries of :pkg-field:`mixins` are parsed: an entry will fail to parse if the provided renaming clause has whitespace after the opening parenthesis. This will be fixed in future versions of Cabal.hZjw=hehfhgh†hi}r}=(hk]hl]hm]hn]hq]uhsMg hu]r~=(h~XNThe current version of Cabal suffers from an infelicity in how the entries of r=…r€=}r=(hYXNThe current version of Cabal suffers from an infelicity in how the entries of hZj{=ubjp)r‚=}rƒ=(hYX:pkg-field:`mixins`r„=hZj{=hehfhgjthi}r…=(UreftypeX pkg-fieldjvˆjwXmixinsU refdomainXcabalr†=hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMg hu]r‡=hä)rˆ=}r‰=(hYj„=hi}rŠ=(hk]hl]r‹=(jj†=Xcabal-pkg-fieldrŒ=ehm]hn]hq]uhZj‚=hu]r=h~XmixinsrŽ=…r=}r=(hYUhZjˆ=ubahghìubaubh~X¦ are parsed: an entry will fail to parse if the provided renaming clause has whitespace after the opening parenthesis. This will be fixed in future versions of Cabal.r‘=…r’=}r“=(hYX¦ are parsed: an entry will fail to parse if the provided renaming clause has whitespace after the opening parenthesis. This will be fixed in future versions of Cabal.hZj{=ubeubh‚)r”=}r•=(hYXºSee issues `#5150 `__, `#4864 `__, and `#5293 `__.hZjw=hehfhgh†hi}r–=(hk]hl]hm]hn]hq]uhsMl hu]r—=(h~X See issues r˜=…r™=}rš=(hYX See issues hZj”=ubjD)r›=}rœ=(hYX8`#5150 `__hi}r=(UnameX#5150jƒX,https://github.com/haskell/cabal/issues/5150hn]hm]hk]hl]hq]uhZj”=hu]rž=h~X#5150rŸ=…r =}r¡=(hYUhZj›=ubahgjHubh~X, r¢=…r£=}r¤=(hYX, hZj”=ubjD)r¥=}r¦=(hYX8`#4864 `__hi}r§=(UnameX#4864jƒX,https://github.com/haskell/cabal/issues/4864hn]hm]hk]hl]hq]uhZj”=hu]r¨=h~X#4864r©=…rª=}r«=(hYUhZj¥=ubahgjHubh~X, and r¬=…r­=}r®=(hYX, and hZj”=ubjD)r¯=}r°=(hYX6`#5293 `__hi}r±=(UnameX#5293jƒX*https://github.com/haskell/cabal/pull/5293hn]hm]hk]hl]hq]uhZj”=hu]r²=h~X#5293r³=…r´=}rµ=(hYUhZj¯=ubahgjHubh~X.…r¶=}r·=(hYX.hZj”=ubeubeubh‚)r¸=}r¹=(hYXnThere can be multiple mixin entries for a given package, in effect creating multiple copies of the dependency:rº=hZjñ<hehfhgh†hi}r»=(hk]hl]hm]hn]hq]uhsMp hthhu]r¼=h~XnThere can be multiple mixin entries for a given package, in effect creating multiple copies of the dependency:r½=…r¾=}r¿=(hYjº=heNhsNhthhZj¸=ubaubjÑ)rÀ=}rÁ=(hYXxlibrary mixins: foo (Foo.Bar as AnotherFoo.Bar, Foo.Baz as AnotherFoo.Baz), foo (Foo.Bar as YetAnotherFoo.Bar)hZjñ<hehfhgjÔhi}rÂ=(jÖj×hn]hm]hk]hl]hq]uhsMu hthhu]rÃ=h~Xxlibrary mixins: foo (Foo.Bar as AnotherFoo.Bar, Foo.Baz as AnotherFoo.Baz), foo (Foo.Bar as YetAnotherFoo.Bar)rÄ=…rÅ=}rÆ=(hYUhZjÀ=ubaubh‚)rÇ=}rÈ=(hYXVThe ``requires`` clause is used to rename the module signatures required by a package:hZjñ<hehfhgh†hi}rÉ=(hk]hl]hm]hn]hq]uhsMz hthhu]rÊ=(h~XThe rË=…rÌ=}rÍ=(hYXThe heNhsNhthhZjÇ=ubhä)rÎ=}rÏ=(hYX ``requires``hi}rÐ=(hk]hl]hm]hn]hq]uhZjÇ=hu]rÑ=h~XrequiresrÒ=…rÓ=}rÔ=(hYUhZjÎ=ubahghìubh~XF clause is used to rename the module signatures required by a package:rÕ=…rÖ=}r×=(hYXF clause is used to rename the module signatures required by a package:heNhsNhthhZjÇ=ubeubjÑ)rØ=}rÙ=(hYXblibrary mixins: foo (Foo.Bar as AnotherFoo.Bar) requires (Foo.SomeSig as AnotherFoo.SomeSig)hZjñ<hehfhgjÔhi}rÚ=(jÖj×hn]hm]hk]hl]hq]uhsM hthhu]rÛ=h~Xblibrary mixins: foo (Foo.Bar as AnotherFoo.Bar) requires (Foo.SomeSig as AnotherFoo.SomeSig)rÜ=…rÝ=}rÞ=(hYUhZjØ=ubaubh‚)rß=}rà=(hYXqSignature-only packages don't have any modules, so only the signatures can be renamed, with the following syntax:rá=hZjñ<hehfhgh†hi}râ=(hk]hl]hm]hn]hq]uhsMƒ hthhu]rã=h~XsSignature-only packages don’t have any modules, so only the signatures can be renamed, with the following syntax:rä=…rå=}ræ=(hYjá=heNhsNhthhZjß=ubaubjÑ)rç=}rè=(hYXRlibrary mixins: sigonly requires (SigOnly.SomeSig as AnotherSigOnly.SomeSig)hZjñ<hehfhgjÔhi}ré=(jÖj×hn]hm]hk]hl]hq]uhsMˆ hthhu]rê=h~XRlibrary mixins: sigonly requires (SigOnly.SomeSig as AnotherSigOnly.SomeSig)rë=…rì=}rí=(hYUhZjç=ubaubh‚)rî=}rï=(hYX7See the :pkg-field:`signatures` field for more details.hZjñ<hehfhgh†hi}rð=(hk]hl]hm]hn]hq]uhsMŒ hthhu]rñ=(h~XSee the rò=…ró=}rô=(hYXSee the heNhsNhthhZjî=ubjp)rõ=}rö=(hYX:pkg-field:`signatures`r÷=hZjî=hehfhgjthi}rø=(UreftypeX pkg-fieldjvˆjwX signaturesU refdomainXcabalrù=hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMŒ hu]rú=hä)rû=}rü=(hYj÷=hi}rý=(hk]hl]rþ=(jjù=Xcabal-pkg-fieldrÿ=ehm]hn]hq]uhZjõ=hu]r>h~X signaturesr>…r>}r>(hYUhZjû=ubahghìubaubh~X field for more details.r>…r>}r>(hYX field for more details.heNhsNhthhZjî=ubeubh‚)r>}r>(hYX„Mixin packages are part of the `Backpack `__ extension to the Haskell module system.hZjñ<hehfhgh†hi}r >(hk]hl]hm]hn]hq]uhsMŽ hthhu]r >(h~XMixin packages are part of the r >…r >}r >(hYXMixin packages are part of the heNhsNhthhZj>ubjD)r>}r>(hYX=`Backpack `__hi}r>(UnameXBackpackjƒX.https://ghc.haskell.org/trac/ghc/wiki/Backpackhn]hm]hk]hl]hq]uhZj>hu]r>h~XBackpackr>…r>}r>(hYUhZj>ubahgjHubh~X( extension to the Haskell module system.r>…r>}r>(hYX( extension to the Haskell module system.heNhsNhthhZj>ubeubh‚)r>}r>(hYXÉThe matching of the module signatures required by a :pkg-field:`build-depends` dependency with the implementation modules present in another dependency is triggered by a coincidence of names. When the names of the signature and of the implementation are already the same, the matching is automatic. But when the names don't coincide, or we want to instantiate a signature in two different ways, adding mixin entries that perform renamings becomes necessary.hZjñ<hehfhgh†hi}r>(hk]hl]hm]hn]hq]uhsM’ hthhu]r>(h~X4The matching of the module signatures required by a r>…r>}r>(hYX4The matching of the module signatures required by a heNhsNhthhZj>ubjp)r>}r >(hYX:pkg-field:`build-depends`r!>hZj>hehfhgjthi}r">(UreftypeX pkg-fieldjvˆjwX build-dependsU refdomainXcabalr#>hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsM’ hu]r$>hä)r%>}r&>(hYj!>hi}r'>(hk]hl]r(>(jj#>Xcabal-pkg-fieldr)>ehm]hn]hq]uhZj>hu]r*>h~X build-dependsr+>…r,>}r->(hYUhZj%>ubahghìubaubh~X} dependency with the implementation modules present in another dependency is triggered by a coincidence of names. When the names of the signature and of the implementation are already the same, the matching is automatic. But when the names don’t coincide, or we want to instantiate a signature in two different ways, adding mixin entries that perform renamings becomes necessary.r.>…r/>}r0>(hYX{ dependency with the implementation modules present in another dependency is triggered by a coincidence of names. When the names of the signature and of the implementation are already the same, the matching is automatic. But when the names don't coincide, or we want to instantiate a signature in two different ways, adding mixin entries that perform renamings becomes necessary.heNhsNhthhZj>ubeubjM+)r1>}r2>(hYX#Backpack has the limitation that implementation modules that instantiate signatures required by a :pkg-field:`build-depends` dependency can't reside in the same component that has the dependency. They must reside in a different package dependency, or at least in a separate internal library.hZjñ<hehfhgjP+hi}r3>(hk]hl]hm]hn]hq]uhsNhthhu]r4>h‚)r5>}r6>(hYX#Backpack has the limitation that implementation modules that instantiate signatures required by a :pkg-field:`build-depends` dependency can't reside in the same component that has the dependency. They must reside in a different package dependency, or at least in a separate internal library.hZj1>hehfhgh†hi}r7>(hk]hl]hm]hn]hq]uhsMœ hu]r8>(h~XbBackpack has the limitation that implementation modules that instantiate signatures required by a r9>…r:>}r;>(hYXbBackpack has the limitation that implementation modules that instantiate signatures required by a hZj5>ubjp)r<>}r=>(hYX:pkg-field:`build-depends`r>>hZj5>hehfhgjthi}r?>(UreftypeX pkg-fieldjvˆjwX build-dependsU refdomainXcabalr@>hn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsMœ hu]rA>hä)rB>}rC>(hYj>>hi}rD>(hk]hl]rE>(jj@>Xcabal-pkg-fieldrF>ehm]hn]hq]uhZj<>hu]rG>h~X build-dependsrH>…rI>}rJ>(hYUhZjB>ubahghìubaubh~X© dependency can’t reside in the same component that has the dependency. They must reside in a different package dependency, or at least in a separate internal library.rK>…rL>}rM>(hYX§ dependency can't reside in the same component that has the dependency. They must reside in a different package dependency, or at least in a separate internal library.hZj5>ubeubaubeubeubeubh[)rN>}rO>(hYUh^KhZhahehfhghhhi}rP>(hk]hl]hm]hn]rQ>jÐahq]rR>hQauhsM£ hthhu]rS>(hw)rT>}rU>(hYXConfigurationsrV>hZjN>hehfhgh{hi}rW>(hk]hl]hm]hn]hq]uhsM£ hthhu]rX>h~XConfigurationsrY>…rZ>}r[>(hYjV>heNhsNhthhZjT>ubaubh‚)r\>}r]>(hYXVLibrary 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^>hZjN>hehfhgh†hi}r_>(hk]hl]hm]hn]hq]uhsM¥ hthhu]r`>h~XVLibrary and executable sections may include conditional blocks, which test for various system parameters and configuration flags. The flags mechanism is rather generic, but most of the time a flag represents certain feature, that can be switched on or off by the package user. Here is an example package description file using configurations:ra>…rb>}rc>(hYj^>heNhsNhthhZj\>ubaubh[)rd>}re>(hYUh^KhZjN>hehfhghhhi}rf>(hk]rg>jKahl]hm]hn]rh>Uid2ri>ahq]uhsM¬ hthhu]rj>(hw)rk>}rl>(hYX?Example: A package containing a library and executable programsrm>hZjd>hehfhgh{hi}rn>(hk]hl]hm]hn]hq]uhsM¬ hthhu]ro>h~X?Example: A package containing a library and executable programsrp>…rq>}rr>(hYjm>heNhsNhthhZjk>ubaubjÑ)rs>}rt>(hYX.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: -DDEBUGhZjd>hehfhgjÔhi}ru>(jÖj×hn]hm]hk]hl]hq]uhsM° hthhu]rv>h~X.Name: Test1 Version: 0.0.1 Cabal-Version: >= 1.8 License: BSD3 Author: Jane Doe Synopsis: Test package to test configurations Category: Example Build-Type: Simple Flag Debug Description: Enable debug support Default: False Manual: True Flag WebFrontend Description: Include API for web frontend. Default: False Manual: True Flag NewDirectory description: Whether to build against @directory >= 1.2@ -- This is an automatic flag which the solver will be -- assign automatically while searching for a solution Library Build-Depends: base >= 4.2 && < 4.9 Exposed-Modules: Testing.Test1 Extensions: CPP GHC-Options: -Wall if flag(Debug) CPP-Options: -DDEBUG if !os(windows) CC-Options: "-DDEBUG" else CC-Options: "-DNDEBUG" if flag(WebFrontend) Build-Depends: cgi >= 0.42 && < 0.44 Other-Modules: Testing.WebStuff CPP-Options: -DWEBFRONTEND if flag(NewDirectory) build-depends: directory >= 1.2 && < 1.4 Build-Depends: time >= 1.0 && < 1.9 else build-depends: directory == 1.1.* Build-Depends: old-time >= 1.0 && < 1.2 Executable test1 Main-is: T1.hs Other-Modules: Testing.Test1 Build-Depends: base >= 4.2 && < 4.9 if flag(debug) CC-Options: "-DDEBUG" CPP-Options: -DDEBUGrw>…rx>}ry>(hYUhZjs>ubaubeubh[)rz>}r{>(hYUhZjN>hehfhghhhi}r|>(hk]hl]hm]hn]r}>Ulayoutr~>ahq]r>h>auhsMë hthhu]r€>(hw)r>}r‚>(hYXLayoutrƒ>hZjz>hehfhgh{hi}r„>(hk]hl]hm]hn]hq]uhsMë hthhu]r…>h~XLayoutr†>…r‡>}rˆ>(hYjƒ>heNhsNhthhZj>ubaubh‚)r‰>}rŠ>(hYX#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‹>hZjz>hehfhgh†hi}rŒ>(hk]hl]hm]hn]hq]uhsMí hthhu]r>h~X#Flags, conditionals, library and executable sections use layout to indicate structure. This is very similar to the Haskell layout rule. Entries in a section have to all be indented to the same level which must be more than the section header. Tabs are not allowed to be used for indentation.rŽ>…r>}r>(hYj‹>heNhsNhthhZj‰>ubaubh‚)r‘>}r’>(hYX 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:hZjz>hehfhgh†hi}r“>(hk]hl]hm]hn]hq]uhsMó hthhu]r”>(h~XCAs an alternative to using layout you can also use explicit braces r•>…r–>}r—>(hYXCAs an alternative to using layout you can also use explicit braces heNhsNhthhZj‘>ubhä)r˜>}r™>(hYX``{}``hi}rš>(hk]hl]hm]hn]hq]uhZj‘>hu]r›>h~X{}rœ>…r>}rž>(hYUhZj˜>ubahghì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Ÿ>…r >}r¡>(hYXÂ. 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:heNhsNhthhZj‘>ubeubeubh[)r¢>}r£>(hYUhZjN>hehfhghhhi}r¤>(hk]hl]hm]hn]r¥>U@example-using-explicit-braces-rather-than-indentation-for-layoutr¦>ahq]r§>h8auhsMù hthhu]r¨>(hw)r©>}rª>(hYXAExample: Using explicit braces rather than indentation for layoutr«>hZj¢>hehfhgh{hi}r¬>(hk]hl]hm]hn]hq]uhsMù hthhu]r­>h~XAExample: Using explicit braces rather than indentation for layoutr®>…r¯>}r°>(hYj«>heNhsNhthhZj©>ubaubjÑ)r±>}r²>(hYXÿ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" } } }hZj¢>hehfhgjÔhi}r³>(jÖj×hn]hm]hk]hl]hq]uhsMý hthhu]r´>h~XÿName: Test1 Version: 0.0.1 Cabal-Version: >= 1.8 License: BSD3 Author: Jane Doe Synopsis: Test package to test configurations Category: Example Build-Type: Simple Flag Debug { Description: Enable debug support Default: False Manual: True } Library { Build-Depends: base >= 4.2 && < 4.9 Exposed-Modules: Testing.Test1 Extensions: CPP if flag(debug) { CPP-Options: -DDEBUG if !os(windows) { CC-Options: "-DDEBUG" } else { CC-Options: "-DNDEBUG" } } }rµ>…r¶>}r·>(hYUhZj±>ubaubeubh[)r¸>}r¹>(hYUhZjN>hehfhghhhi}rº>(hk]hl]hm]hn]r»>Uconfiguration-flagsr¼>ahq]r½>h*auhsM hthhu]r¾>(hw)r¿>}rÀ>(hYXConfiguration FlagsrÁ>hZj¸>hehfhgh{hi}rÂ>(hk]hl]hm]hn]hq]uhsM hthhu]rÃ>h~XConfiguration FlagsrÄ>…rÅ>}rÆ>(hYjÁ>heNhsNhthhZj¿>ubaubjþ)rÇ>}rÈ>(hYUhZj¸>heNhgjhi}rÉ>(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rÊ>}rË>(hYUhZj¸>heNhgjhi}rÌ>(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-sectionrÍ>j jÍ>uhsNhthhu]rÎ>(j)rÏ>}rÐ>(hYX flag namehZjÊ>hehfhgjhi}rÑ>(hn]rÒ>Xpkg-section-flag-flagrÓ>ahm]hk]hl]hq]j‰uhsNhthhu]rÔ>(jþ)rÕ>}rÖ>(hYUhZjÏ>hehfhgjhi}r×>(hn]hm]hk]hl]hq]Uentries]rØ>(jX flag:flag; package.cabal sectionjÓ>UNtrÙ>auhsNhthhu]ubj)rÚ>}rÛ>(hYXflagrÜ>hZjÏ>hehfhgj!hi}rÝ>(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rÞ>h~Xflagrß>…rà>}rá>(hYUheNhsNhthhZjÚ>ubaubj')râ>}rã>(hYU hZjÏ>hehfhgj*hi}rä>(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rå>h~X …ræ>}rç>(hYUheNhsNhthhZjâ>ubaubj¦)rè>}ré>(hYXnamehZjÏ>hehfhgj©hi}rê>(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rë>h~Xnamerì>…rí>}rî>(hYUheNhsNhthhZjè>ubaubeubj/)rï>}rð>(hYUhZjÊ>hehfhgj2hi}rñ>(hk]hl]hm]hn]hq]uhsNhthhu]rò>(h‚)ró>}rô>(hYXHFlag section declares a flag which can be used in `conditional blocks`_.hZjï>hehfhgh†hi}rõ>(hk]hl]hm]hn]hq]uhsM hthhu]rö>(h~X2Flag section declares a flag which can be used in r÷>…rø>}rù>(hYX2Flag section declares a flag which can be used in heNhsNhthhZjó>ubjD)rú>}rû>(hYX`conditional blocks`_jGKhZjó>hgjHhi}rü>(UnameXconditional blockshn]hm]hk]hl]hq]jJUconditional-blocksrý>uhu]rþ>h~Xconditional blocksrÿ>…r?}r?(hYUhZjú>ubaubh~X.…r?}r?(hYX.heNhsNhthhZjó>ubeubh‚)r?}r?(hYXxFlag names are case-insensitive and must match ``[[:alnum:]_][[:alnum:]_-]*`` regular expression, or expressed as ABNF_:hZjï>hehfhgh†hi}r?(hk]hl]hm]hn]hq]uhsM" hthhu]r?(h~X/Flag names are case-insensitive and must match r?…r ?}r ?(hYX/Flag names are case-insensitive and must match heNhsNhthhZj?ubhä)r ?}r ?(hYX``[[:alnum:]_][[:alnum:]_-]*``hi}r ?(hk]hl]hm]hn]hq]uhZj?hu]r?h~X[[:alnum:]_][[:alnum:]_-]*r?…r?}r?(hYUhZj ?ubahghìubh~X% regular expression, or expressed as r?…r?}r?(hYX% regular expression, or expressed as heNhsNhthhZj?ubjD)r?}r?(hYXABNF_jGKhZj?hgjHhi}r?(UnameXABNFjƒjGhn]hm]hk]hl]hq]uhu]r?h~XABNFr?…r?}r?(hYUhZj?ubaubh~X:…r?}r?(hYX:heNhsNhthhZj?ubeubjÑ)r?}r?(hYX~flag-name = (UALNUM / "_") *(UALNUM / "_" / "-") UALNUM = UALPHA / DIGIT UALPHA = ... ; set of alphabetic Unicode code-pointshZjï>hehfhgjÔhi}r ?(j‰jXabnfjÖj×hn]hm]hk]j}hl]hq]uhsM% hthhu]r!?h~X~flag-name = (UALNUM / "_") *(UALNUM / "_" / "-") UALNUM = UALPHA / DIGIT UALPHA = ... ; set of alphabetic Unicode code-pointsr"?…r#?}r$?(hYUhZj?ubaubhð)r%?}r&?(hYXHHackage accepts ASCII-only flags, ``[a-zA-Z0-9_][a-zA-Z0-9_-]*`` regexp.r'?hZjï>hehfhghóhi}r(?(hk]hl]hm]hn]hq]uhsNhthhu]r)?h‚)r*?}r+?(hYj'?hZj%?hehfhgh†hi}r,?(hk]hl]hm]hn]hq]uhsM. hu]r-?(h~X"Hackage accepts ASCII-only flags, r.?…r/?}r0?(hYX"Hackage accepts ASCII-only flags, hZj*?ubhä)r1?}r2?(hYX``[a-zA-Z0-9_][a-zA-Z0-9_-]*``hi}r3?(hk]hl]hm]hn]hq]uhZj*?hu]r4?h~X[a-zA-Z0-9_][a-zA-Z0-9_-]*r5?…r6?}r7?(hYUhZj1?ubahghìubh~X regexp.r8?…r9?}r:?(hYX regexp.hZj*?ubeubaubeubeubjþ)r;?}rhehfhgjhi}r=?(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r>?}r??(hYUhZj¸>hehfhgjhi}r@?(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrA?j jA?uhsNhthhu]rB?(j)rC?}rD?(hYXdescription: freeformhZj>?hehfhgjhi}rE?(hn]rF?Xpkg-field-flag-descriptionrG?ahm]hk]hl]hq]j‰uhsM3 hthhu]rH?(jþ)rI?}rJ?(hYUhZjC?hehfhgjhi}rK?(hn]hm]hk]hl]hq]Uentries]rL?(jX%flag:description; package.cabal fieldjG?UNtrM?auhsM3 hthhu]ubj)rN?}rO?(hYX descriptionrP?hZjC?hehfhgj!hi}rQ?(jÖj×hn]hm]hk]hl]hq]uhsM3 hthhu]rR?h~X descriptionrS?…rT?}rU?(hYUheNhsNhthhZjN?ubaubj')rV?}rW?(hYj hZjC?hehfhgj*hi}rX?(jÖj×hn]hm]hk]hl]hq]uhsM3 hthhu]rY?h~X: rZ?…r[?}r\?(hYUheNhsNhthhZjV?ubaubj¦)r]?}r^?(hYXfreeformhZjC?hehfhgj©hi}r_?(jÖj×hn]hm]hk]hl]hq]uhsM3 hthhu]r`?h~Xfreeformra?…rb?}rc?(hYUheNhsNhthhZj]?ubaubeubj/)rd?}re?(hYUhZj>?hehfhgj2hi}rf?(hk]hl]hm]hn]hq]uhsM3 hthhu]rg?h‚)rh?}ri?(hYXThe description of this flag.rj?hZjd?hehfhgh†hi}rk?(hk]hl]hm]hn]hq]uhsM2 hthhu]rl?h~XThe description of this flag.rm?…rn?}ro?(hYjj?heNhsNhthhZjh?ubaubaubeubjþ)rp?}rq?(hYUhZj¸>heNhgjhi}rr?(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rs?}rt?(hYUhZj¸>heNhgjhi}ru?(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrv?j jv?uhsNhthhu]rw?(j)rx?}ry?(hYXdefault: booleanhZjs?hehfhgjhi}rz?(hn]r{?Xpkg-field-flag-defaultr|?ahm]hk]hl]hq]j‰uhsMC hthhu]r}?(jþ)r~?}r?(hYUhZjx?hehfhgjhi}r€?(hn]hm]hk]hl]hq]Uentries]r?(jX!flag:default; package.cabal fieldj|?UNtr‚?auhsMC hthhu]ubj)rƒ?}r„?(hYXdefaultr…?hZjx?hehfhgj!hi}r†?(jÖj×hn]hm]hk]hl]hq]uhsMC hthhu]r‡?h~Xdefaultrˆ?…r‰?}rŠ?(hYUheNhsNhthhZjƒ?ubaubj')r‹?}rŒ?(hYj hZjx?hehfhgj*hi}r?(jÖj×hn]hm]hk]hl]hq]uhsMC hthhu]rŽ?h~X: r?…r?}r‘?(hYUheNhsNhthhZj‹?ubaubj¦)r’?}r“?(hYXbooleanhZjx?hehfhgj©hi}r”?(jÖj×hn]hm]hk]hl]hq]uhsMC hthhu]r•?h~Xbooleanr–?…r—?}r˜?(hYUheNhsNhthhZj’?ubaubeubj/)r™?}rš?(hYUhZjs?hehfhgj2hi}r›?(hk]hl]hm]hn]hq]uhsMC hthhu]rœ?(j5)r?}rž?(hYUhZj™?heNhgj8hi}rŸ?(hk]hl]hm]hn]hq]uhsNhthhu]r ?j;)r¡?}r¢?(hYUhi}r£?(hk]hl]hm]hn]hq]uhZj?hu]r¤?(jA)r¥?}r¦?(hYX Default valuehZj¡?hehfhgjEhi}r§?(hk]hl]hm]hn]hq]uhsKhu]r¨?h~X Default valuer©?…rª?}r«?(hYUhZj¥?ubaubjK)r¬?}r­?(hYUhi}r®?(hk]hl]hm]hn]hq]uhZj¡?hu]r¯?h‚)r°?}r±?(hYXTruehi}r²?(hk]hl]hm]hn]hq]uhZj¬?hu]r³?hä)r´?}rµ?(hYX``True``hZj°?heNhghìhi}r¶?(hk]hl]hm]hn]hq]uhsNhthhu]r·?h~XTruer¸?…r¹?}rº?(hYUheNhsNhthhZj´?ubaubahgh†ubahgjXubehgj>ubaubh‚)r»?}r¼?(hYXThe default value of this flag.r½?hZj™?hehfhgh†hi}r¾?(hk]hl]hm]hn]hq]uhsM8 hthhu]r¿?h~XThe default value of this flag.rÀ?…rÁ?}rÂ?(hYj½?heNhsNhthhZj»?ubaubhð)rÃ?}rÄ?(hYX™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.hZj™?hehfhghóhi}rÅ?(hk]hl]hm]hn]hq]uhsNhthhu]rÆ?h‚)rÇ?}rÈ?(hYX™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.hZjÃ?hehfhgh†hi}rÉ?(hk]hl]hm]hn]hq]uhsM< hu]rÊ?(h~XThis value may be rË?…rÌ?}rÍ?(hYXThis value may be hZjÇ?ubjD)rÎ?}rÏ?(hYXV`overridden in several ways `__hi}rÐ?(UnameXoverridden in several waysjƒX5installing-packages.html#controlling-flag-assignmentshn]hm]hk]hl]hq]uhZjÇ?hu]rÑ?h~Xoverridden in several waysrÒ?…rÓ?}rÔ?(hYUhZjÎ?ubahgjHubh~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×?(hYX1. 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.hZjÇ?ubeubaubeubeubjþ)rØ?}rÙ?(hYUhZj¸>hehfhgjhi}rÚ?(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rÛ?}rÜ?(hYUhZj¸>hehfhgjhi}rÝ?(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrÞ?j jÞ?uhsNhthhu]rß?(j)rà?}rá?(hYXmanual: booleanhZjÛ?hehfhgjhi}râ?(hn]rã?Xpkg-field-flag-manualrä?ahm]hk]hl]hq]j‰uhsMM hthhu]rå?(jþ)ræ?}rç?(hYUhZjà?hehfhgjhi}rè?(hn]hm]hk]hl]hq]Uentries]ré?(jX flag:manual; package.cabal fieldjä?UNtrê?auhsMM hthhu]ubj)rë?}rì?(hYXmanualrí?hZjà?hehfhgj!hi}rî?(jÖj×hn]hm]hk]hl]hq]uhsMM hthhu]rï?h~Xmanualrð?…rñ?}rò?(hYUheNhsNhthhZjë?ubaubj')ró?}rô?(hYj hZjà?hehfhgj*hi}rõ?(jÖj×hn]hm]hk]hl]hq]uhsMM hthhu]rö?h~X: r÷?…rø?}rù?(hYUheNhsNhthhZjó?ubaubj¦)rú?}rû?(hYXbooleanhZjà?hehfhgj©hi}rü?(jÖj×hn]hm]hk]hl]hq]uhsMM hthhu]rý?h~Xbooleanrþ?…rÿ?}r@(hYUheNhsNhthhZjú?ubaubeubj/)r@}r@(hYUhZjÛ?hehfhgj2hi}r@(hk]hl]hm]hn]hq]uhsMM hthhu]r@(j5)r@}r@(hYUhZj@hehfhgj8hi}r@(hk]hl]hm]hn]hq]uhsNhthhu]r@(j;)r @}r @(hYUhi}r @(hk]hl]hm]hn]hq]uhZj@hu]r @(jA)r @}r@(hYX Default valuehZj @hehfhgjEhi}r@(hk]hl]hm]hn]hq]uhsKhu]r@h~X Default valuer@…r@}r@(hYUhZj @ubaubjK)r@}r@(hYUhi}r@(hk]hl]hm]hn]hq]uhZj @hu]r@h‚)r@}r@(hYXFalsehi}r@(hk]hl]hm]hn]hq]uhZj@hu]r@hä)r@}r@(hYX ``False``hZj@hehfhghìhi}r@(hk]hl]hm]hn]hq]uhsNhthhu]r@h~XFalser @…r!@}r"@(hYUheNhsNhthhZj@ubaubahgh†ubahgjXubehgj>ubj;)r#@}r$@(hYUhZj@hehfhgj>hi}r%@(hk]hl]hm]hn]hq]uhsMG hthhu]r&@(jA)r'@}r(@(hYXsincehZj#@hehfhgjEhi}r)@(hk]hl]hm]hn]hq]uhsKhu]r*@h~XSincer+@…r,@}r-@(hYUhZj'@ubaubjK)r.@}r/@(hYX1.6 hi}r0@(hk]hl]hm]hn]hq]uhZj#@hu]r1@h‚)r2@}r3@(hYX1.6r4@hZj.@hehfhgh†hi}r5@(hk]hl]hm]hn]hq]uhsMG hu]r6@h~X1.6r7@…r8@}r9@(hYj4@hZj2@ubaubahgjXubeubeubh‚)r:@}r;@(hYXBy 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<@hZj@hehfhgh†hi}r=@(hk]hl]hm]hn]hq]uhsMI hthhu]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@@}rA@(hYj<@heNhsNhthhZj:@ubaubeubeubeubeubh[)rB@}rC@(hYUh^KhZhahehfhghhhi}rD@(hk]hl]hm]hn]rE@jý>ahq]rF@hHauhsMO hthhu]rG@(hw)rH@}rI@(hYXConditional BlocksrJ@hZjB@hehfhgh{hi}rK@(hk]hl]hm]hn]hq]uhsMO hthhu]rL@h~XConditional BlocksrM@…rN@}rO@(hYjJ@heNhsNhthhZjH@ubaubh‚)rP@}rQ@(hYX±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@hZjB@hehfhgh†hi}rS@(hk]hl]hm]hn]hq]uhsMQ hthhu]rT@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 shaperU@…rV@}rW@(hYjR@heNhsNhthhZjP@ubaubjÑ)rX@}rY@(hYX5if condition property-descriptions-or-conditionalshZjB@hehfhgjÔhi}rZ@(jÖj×hn]hm]hk]hl]hq]uhsMW hthhu]r[@h~X5if condition property-descriptions-or-conditionalsr\@…r]@}r^@(hYUhZjX@ubaubh‚)r_@}r`@(hYXorra@hZjB@hehfhgh†hi}rb@(hk]hl]hm]hn]hq]uhsMZ hthhu]rc@h~Xorrd@…re@}rf@(hYja@heNhsNhthhZj_@ubaubjÑ)rg@}rh@(hYXgif condition property-descriptions-or-conditionals else property-descriptions-or-conditionalshZjB@hehfhgjÔhi}ri@(jÖj×hn]hm]hk]hl]hq]uhsM^ hthhu]rj@h~Xgif condition property-descriptions-or-conditionals else property-descriptions-or-conditionalsrk@…rl@}rm@(hYUhZjg@ubaubh‚)rn@}ro@(hYXGNote that the ``if`` and the condition have to be all on the same line.rp@hZjB@hehfhgh†hi}rq@(hk]hl]hm]hn]hq]uhsMc hthhu]rr@(h~XNote that the rs@…rt@}ru@(hYXNote that the heNhsNhthhZjn@ubhä)rv@}rw@(hYX``if``hi}rx@(hk]hl]hm]hn]hq]uhZjn@hu]ry@h~Xifrz@…r{@}r|@(hYUhZjv@ubahghìubh~X3 and the condition have to be all on the same line.r}@…r~@}r@(hYX3 and the condition have to be all on the same line.heNhsNhthhZjn@ubeubh‚)r€@}r@(hYX>Since Cabal 2.2 conditional blocks support ``elif`` construct.r‚@hZjB@hehfhgh†hi}rƒ@(hk]hl]hm]hn]hq]uhsMe hthhu]r„@(h~X+Since Cabal 2.2 conditional blocks support r…@…r†@}r‡@(hYX+Since Cabal 2.2 conditional blocks support heNhsNhthhZj€@ubhä)rˆ@}r‰@(hYX``elif``hi}rŠ@(hk]hl]hm]hn]hq]uhZj€@hu]r‹@h~XelifrŒ@…r@}rŽ@(hYUhZjˆ@ubahghìubh~X construct.r@…r@}r‘@(hYX construct.heNhsNhthhZj€@ubeubjÑ)r’@}r“@(hYX£if condition1 property-descriptions-or-conditionals elif condition2 property-descriptions-or-conditionals else property-descriptions-or-conditionalshZjB@hehfhgjÔhi}r”@(jÖj×hn]hm]hk]hl]hq]uhsMi hthhu]r•@h~X£if condition1 property-descriptions-or-conditionals elif condition2 property-descriptions-or-conditionals else property-descriptions-or-conditionalsr–@…r—@}r˜@(hYUhZj’@ubaubh[)r™@}rš@(hYUhZjB@hehfhghhhi}r›@(hk]hl]hm]hn]rœ@U conditionsr@ahq]rž@h+auhsMq hthhu]rŸ@(hw)r @}r¡@(hYX Conditionsr¢@hZj™@hehfhgh{hi}r£@(hk]hl]hm]hn]hq]uhsMq hthhu]r¤@h~X Conditionsr¥@…r¦@}r§@(hYj¢@heNhsNhthhZj @ubaubh‚)r¨@}r©@(hYX¶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)``.hZj™@hehfhgh†hi}rª@(hk]hl]hm]hn]hq]uhsMs hthhu]r«@(h~XGConditions can be formed using boolean tests and the boolean operators r¬@…r­@}r®@(hYXGConditions can be formed using boolean tests and the boolean operators heNhsNhthhZj¨@ubhä)r¯@}r°@(hYX``||``hi}r±@(hk]hl]hm]hn]hq]uhZj¨@hu]r²@h~X||r³@…r´@}rµ@(hYUhZj¯@ubahghìubh~X# (disjunction / logical “orâ€), r¶@…r·@}r¸@(hYX (disjunction / logical "or"), heNhsNhthhZj¨@ubhä)r¹@}rº@(hYX``&&``hi}r»@(hk]hl]hm]hn]hq]uhZj¨@hu]r¼@h~X&&r½@…r¾@}r¿@(hYUhZj¹@ubahghìubh~X' (conjunction / logical “andâ€), or rÀ@…rÁ@}rÂ@(hYX# (conjunction / logical "and"), or heNhsNhthhZj¨@ubhä)rÃ@}rÄ@(hYX``!``hi}rÅ@(hk]hl]hm]hn]hq]uhZj¨@hu]rÆ@h~X!…rÇ@}rÈ@(hYUhZjÃ@ubahghìubh~X+ (negation / logical “notâ€). The unary rÉ@…rÊ@}rË@(hYX' (negation / logical "not"). The unary heNhsNhthhZj¨@ubhä)rÌ@}rÍ@(hYX``!``hi}rÎ@(hk]hl]hm]hn]hq]uhZj¨@hu]rÏ@h~X!…rÐ@}rÑ@(hYUhZjÌ@ubahghìubh~X takes highest precedence, rÒ@…rÓ@}rÔ@(hYX takes highest precedence, heNhsNhthhZj¨@ubhä)rÕ@}rÖ@(hYX``||``hi}r×@(hk]hl]hm]hn]hq]uhZj¨@hu]rØ@h~X||rÙ@…rÚ@}rÛ@(hYUhZjÕ@ubahghìubh~X` takes lowest. Precedence levels may be overridden through the use of parentheses. For example, rÜ@…rÝ@}rÞ@(hYX` takes lowest. Precedence levels may be overridden through the use of parentheses. For example, heNhsNhthhZj¨@ubhä)rß@}rà@(hYX,``os(darwin) && !arch(i386) || os(freebsd)``hi}rá@(hk]hl]hm]hn]hq]uhZj¨@hu]râ@h~X(os(darwin) && !arch(i386) || os(freebsd)rã@…rä@}rå@(hYUhZjß@ubahghìubh~X is equivalent to ræ@…rç@}rè@(hYX is equivalent to heNhsNhthhZj¨@ubhä)ré@}rê@(hYX0``(os(darwin) && !(arch(i386))) || os(freebsd)``hi}rë@(hk]hl]hm]hn]hq]uhZj¨@hu]rì@h~X,(os(darwin) && !(arch(i386))) || os(freebsd)rí@…rî@}rï@(hYUhZjé@ubahghìubh~X.…rð@}rñ@(hYX.heNhsNhthhZj¨@ubeubh‚)rò@}ró@(hYX,The following tests are currently supported.rô@hZj™@hehfhgh†hi}rõ@(hk]hl]hm]hn]hq]uhsM{ hthhu]rö@h~X,The following tests are currently supported.r÷@…rø@}rù@(hYjô@heNhsNhthhZjò@ubaubj)rú@}rû@(hYUhZj™@hehfhgjhi}rü@(hk]hl]hm]hn]hq]uhsNhthhu]rý@(j)rþ@}rÿ@(hYXÒ: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.hZjú@hehfhgjhi}rA(hk]hl]hm]hn]hq]uhsMƒ hu]rA(j!)rA}rA(hYX:samp:`os({name})`rAhZjþ@hehfhgj%hi}rA(hk]hl]hm]hn]hq]uhsMƒ hu]rAhä)rA}rA(hYXos(name)hi}r A(hn]hm]hk]hl]r AXsampr AaUrolej Ahq]uhZjAhu]r A(h~Xos(r A…rA}rA(hYXos(hZjAubhÄ)rA}rA(hYXnamehi}rA(hk]hl]hm]hn]hq]uhZjAhu]rAh~XnamerA…rA}rA(hYUhZjAubahghÌubh~X)…rA}rA(hYX)hZjAubehghìubaubj8)rA}rA(hYUhi}rA(hk]hl]hm]hn]hq]uhZjþ@hu]rAh‚)rA}rA(hYX¿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.hZjAhehfhgh†hi}rA(hk]hl]hm]hn]hq]uhsM~ hu]r A(h~X)Tests if the current operating system is r!A…r"A}r#A(hYX)Tests if the current operating system is hZjAubhÄ)r$A}r%A(hYX*name*hi}r&A(hk]hl]hm]hn]hq]uhZjAhu]r'Ah~Xnamer(A…r)A}r*A(hYUhZj$AubahghÌubh~X!. The argument is tested against r+A…r,A}r-A(hYX!. The argument is tested against hZjAubhä)r.A}r/A(hYX``System.Info.os``hi}r0A(hk]hl]hm]hn]hq]uhZjAhu]r1Ah~XSystem.Info.osr2A…r3A}r4A(hYUhZj.Aubahghìubh~X} on the target system. There is unfortunately some disagreement between Haskell implementations about the standard values of r5A…r6A}r7A(hYX} on the target system. There is unfortunately some disagreement between Haskell implementations about the standard values of hZjAubhä)r8A}r9A(hYX``System.Info.os``hi}r:A(hk]hl]hm]hn]hq]uhZjAhu]r;Ah~XSystem.Info.osrA(hYUhZj8Aubahghìubh~X/. Cabal canonicalises it so that in particular r?A…r@A}rAA(hYX/. Cabal canonicalises it so that in particular hZjAubhä)rBA}rCA(hYX``os(windows)``hi}rDA(hk]hl]hm]hn]hq]uhZjAhu]rEAh~X os(windows)rFA…rGA}rHA(hYUhZjBAubahghìubh~X works on all implementations. If the canonicalised os names match, this test evaluates to true, otherwise false. The match is case-insensitive.rIA…rJA}rKA(hYX works on all implementations. If the canonicalised os names match, this test evaluates to true, otherwise false. The match is case-insensitive.hZjAubeubahgjRubeubj)rLA}rMA(hYXò: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.hZjú@hehfhgjhi}rNA(hk]hl]hm]hn]hq]uhsMˆ hthhu]rOA(j!)rPA}rQA(hYX:samp:`arch({name})`rRAhZjLAhehfhgj%hi}rSA(hk]hl]hm]hn]hq]uhsMˆ hu]rTAhä)rUA}rVA(hYX arch(name)hi}rWA(hn]hm]hk]hl]rXAXsamprYAaUrolejYAhq]uhZjPAhu]rZA(h~Xarch(r[A…r\A}r]A(hYXarch(hZjUAubhÄ)r^A}r_A(hYXnamehi}r`A(hk]hl]hm]hn]hq]uhZjUAhu]raAh~XnamerbA…rcA}rdA(hYUhZj^AubahghÌubh~X)…reA}rfA(hYX)hZjUAubehghìubaubj8)rgA}rhA(hYUhi}riA(hk]hl]hm]hn]hq]uhZjLAhu]rjAh‚)rkA}rlA(hYXÝ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.hZjgAhehfhgh†hi}rmA(hk]hl]hm]hn]hq]uhsM† hu]rnA(h~X%Tests if the current architecture is roA…rpA}rqA(hYX%Tests if the current architecture is hZjkAubhÄ)rrA}rsA(hYX*name*hi}rtA(hk]hl]hm]hn]hq]uhZjkAhu]ruAh~XnamervA…rwA}rxA(hYUhZjrAubahghÌubh~X". The argument is matched against ryA…rzA}r{A(hYX". The argument is matched against hZjkAubhä)r|A}r}A(hYX``System.Info.arch``hi}r~A(hk]hl]hm]hn]hq]uhZjkAhu]rAh~XSystem.Info.archr€A…rA}r‚A(hYUhZj|Aubahghìubh~X| on the target system. If the arch names match, this test evaluates to true, otherwise false. The match is case-insensitive.rƒA…r„A}r…A(hYX| on the target system. If the arch names match, this test evaluates to true, otherwise false. The match is case-insensitive.hZjkAubeubahgjRubeubj)r†A}r‡A(hYX: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. hZjú@hehfhgjhi}rˆA(hk]hl]hm]hn]hq]uhsM hthhu]r‰A(j!)rŠA}r‹A(hYX:samp:`impl({compiler})`rŒAhZj†Ahehfhgj%hi}rA(hk]hl]hm]hn]hq]uhsM hu]rŽAhä)rA}rA(hYXimpl(compiler)hi}r‘A(hn]hm]hk]hl]r’AXsampr“AaUrolej“Ahq]uhZjŠAhu]r”A(h~Ximpl(r•A…r–A}r—A(hYXimpl(hZjAubhÄ)r˜A}r™A(hYXcompilerhi}ršA(hk]hl]hm]hn]hq]uhZjAhu]r›Ah~XcompilerrœA…rA}ržA(hYUhZj˜AubahghÌubh~X)…rŸA}r A(hYX)hZjAubehghìubaubj8)r¡A}r¢A(hYUhi}r£A(hk]hl]hm]hn]hq]uhZj†Ahu]r¤A(h‚)r¥A}r¦A(hYX-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.hZj¡Ahehfhgh†hi}r§A(hk]hl]hm]hn]hq]uhsM‹ hu]r¨A(h~XnTests for the configured Haskell implementation. An optional version constraint may be specified (for example r©A…rªA}r«A(hYXnTests for the configured Haskell implementation. An optional version constraint may be specified (for example hZj¥Aubhä)r¬A}r­A(hYX``impl(ghc >= 6.6.1)``hi}r®A(hk]hl]hm]hn]hq]uhZj¥Ahu]r¯Ah~Ximpl(ghc >= 6.6.1)r°A…r±A}r²A(hYUhZj¬Aubahghì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³A…r´A}rµA(hYX©). 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.hZj¥Aubeubh‚)r¶A}r·A(hYXcNote that including a version constraint in an ``impl`` test causes it to check for two properties:hZj¡Ahehfhgh†hi}r¸A(hk]hl]hm]hn]hq]uhsM‘ hu]r¹A(h~X/Note that including a version constraint in an rºA…r»A}r¼A(hYX/Note that including a version constraint in an hZj¶Aubhä)r½A}r¾A(hYX``impl``hi}r¿A(hk]hl]hm]hn]hq]uhZj¶Ahu]rÀAh~XimplrÁA…rÂA}rÃA(hYUhZj½Aubahghìubh~X, test causes it to check for two properties:rÄA…rÅA}rÆA(hYX, test causes it to check for two properties:hZj¶AubeubhŒ)rÇA}rÈA(hYUhZj¡Ahehfhghhi}rÉA(h‘X-hn]hm]hk]hl]hq]uhsM” hu]rÊA(h“)rËA}rÌA(hYX1The current compiler has the specified name, and hi}rÍA(hk]hl]hm]hn]hq]uhZjÇAhu]rÎAh‚)rÏA}rÐA(hYX0The current compiler has the specified name, andrÑAhZjËAhehfhgh†hi}rÒA(hk]hl]hm]hn]hq]uhsM” hu]rÓAh~X0The current compiler has the specified name, andrÔA…rÕA}rÖA(hYjÑAhZjÏAubaubahgh–ubh“)r×A}rØA(hYXBThe compiler's version satisfied the specified version constraint hi}rÙA(hk]hl]hm]hn]hq]uhZjÇAhu]rÚAh‚)rÛA}rÜA(hYXAThe compiler's version satisfied the specified version constraintrÝAhZj×Ahehfhgh†hi}rÞA(hk]hl]hm]hn]hq]uhsM– hu]rßAh~XCThe compiler’s version satisfied the specified version constraintràA…ráA}râA(hYjÝAhZjÛAubaubahgh–ubeubh‚)rãA}räA(hYX‡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:hZj¡Ahehfhgh†hi}råA(hk]hl]hm]hn]hq]uhsM˜ hu]ræA(h~X As a result, rçA…rèA}réA(hYX As a result, hZjãAubhä)rêA}rëA(hYX``!impl(ghc >= x.y.z)``hi}rìA(hk]hl]hm]hn]hq]uhZjãAhu]ríAh~X!impl(ghc >= x.y.z)rîA…rïA}rðA(hYUhZjêAubahghìubh~X is not entirely equivalent to rñA…ròA}róA(hYX is not entirely equivalent to hZjãAubhä)rôA}rõA(hYX``impl(ghc < x.y.z)``hi}röA(hk]hl]hm]hn]hq]uhZjãAhu]r÷Ah~Ximpl(ghc < x.y.z)røA…rùA}rúA(hYUhZjôAubahghìubh~X . The test rûA…rüA}rýA(hYX . The test hZjãAubhä)rþA}rÿA(hYX``!impl(ghc >= x.y.z)``hi}rB(hk]hl]hm]hn]hq]uhZjãAhu]rBh~X!impl(ghc >= x.y.z)rB…rB}rB(hYUhZjþAubahghìubh~X checks that:rB…rB}rB(hYX checks that:hZjãAubeubhŒ)rB}r B(hYUhZj¡Ahehfhghhi}r B(h‘X-hn]hm]hk]hl]hq]uhsM› hu]r B(h“)r B}r B(hYX$The current compiler is not GHC, or hi}rB(hk]hl]hm]hn]hq]uhZjBhu]rBh‚)rB}rB(hYX#The current compiler is not GHC, orrBhZj Bhehfhgh†hi}rB(hk]hl]hm]hn]hq]uhsM› hu]rBh~X#The current compiler is not GHC, orrB…rB}rB(hYjBhZjBubaubahgh–ubh“)rB}rB(hYX2The version of GHC is earlier than version x.y.z. hi}rB(hk]hl]hm]hn]hq]uhZjBhu]rBh‚)rB}rB(hYX1The version of GHC is earlier than version x.y.z.rBhZjBhehfhgh†hi}rB(hk]hl]hm]hn]hq]uhsM hu]r Bh~X1The version of GHC is earlier than version x.y.z.r!B…r"B}r#B(hYjBhZjBubaubahgh–ubeubehgjRubeubj)r$B}r%B(hYXÉ: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.hZjú@hehfhgjhi}r&B(hk]hl]hm]hn]hq]uhsM¡ hthhu]r'B(j!)r(B}r)B(hYX:samp:`flag({name})`r*BhZj$Bhehfhgj%hi}r+B(hk]hl]hm]hn]hq]uhsM¡ hu]r,Bhä)r-B}r.B(hYX flag(name)hi}r/B(hn]hm]hk]hl]r0BXsampr1BaUrolej1Bhq]uhZj(Bhu]r2B(h~Xflag(r3B…r4B}r5B(hYXflag(hZj-BubhÄ)r6B}r7B(hYXnamehi}r8B(hk]hl]hm]hn]hq]uhZj-Bhu]r9Bh~Xnamer:B…r;B}rB(hYX)hZj-Bubehghìubaubj8)r?B}r@B(hYUhi}rAB(hk]hl]hm]hn]hq]uhZj$Bhu]rBBh‚)rCB}rDB(hYX´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.rEBhZj?Bhehfhgh†hi}rFB(hk]hl]hm]hn]hq]uhsM  hu]rGBh~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.rHB…rIB}rJB(hYjEBhZjCBubaubahgjRubeubj)rKB}rLB(hYX``true`` Constant value true.hZjú@hehfhgjhi}rMB(hk]hl]hm]hn]hq]uhsM£ hthhu]rNB(j!)rOB}rPB(hYX``true``rQBhZjKBhehfhgj%hi}rRB(hk]hl]hm]hn]hq]uhsM£ hu]rSBhä)rTB}rUB(hYjQBhi}rVB(hk]hl]hm]hn]hq]uhZjOBhu]rWBh~XtruerXB…rYB}rZB(hYUhZjTBubahghìubaubj8)r[B}r\B(hYUhi}r]B(hk]hl]hm]hn]hq]uhZjKBhu]r^Bh‚)r_B}r`B(hYXConstant value true.raBhZj[Bhehfhgh†hi}rbB(hk]hl]hm]hn]hq]uhsM¤ hu]rcBh~XConstant value true.rdB…reB}rfB(hYjaBhZj_BubaubahgjRubeubj)rgB}rhB(hYX ``false`` Constant value false. hZjú@hehfhgjhi}riB(hk]hl]hm]hn]hq]uhsM¦ hthhu]rjB(j!)rkB}rlB(hYX ``false``rmBhZjgBhehfhgj%hi}rnB(hk]hl]hm]hn]hq]uhsM¦ hu]roBhä)rpB}rqB(hYjmBhi}rrB(hk]hl]hm]hn]hq]uhZjkBhu]rsBh~XfalsertB…ruB}rvB(hYUhZjpBubahghìubaubj8)rwB}rxB(hYUhi}ryB(hk]hl]hm]hn]hq]uhZjgBhu]rzBh‚)r{B}r|B(hYXConstant value false.r}BhZjwBhehfhgh†hi}r~B(hk]hl]hm]hn]hq]uhsM¦ hu]rBh~XConstant value false.r€B…rB}r‚B(hYj}BhZj{BubaubahgjRubeubeubeubh[)rƒB}r„B(hYUhZjB@hehfhghhhi}r…B(hk]hl]hm]hn]r†BU"resolution-of-conditions-and-flagsr‡Bahq]rˆBh(auhsM© hthhu]r‰B(hw)rŠB}r‹B(hYX"Resolution of Conditions and FlagsrŒBhZjƒBhehfhgh{hi}rB(hk]hl]hm]hn]hq]uhsM© hthhu]rŽBh~X"Resolution of Conditions and FlagsrB…rB}r‘B(hYjŒBheNhsNhthhZjŠBubaubh‚)r’B}r“B(hYXIf 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.hZjƒBhehfhgh†hi}r”B(hk]hl]hm]hn]hq]uhsM« hthhu]r•B(h~XMIf a package descriptions specifies configuration flags the package user can r–B…r—B}r˜B(hYXMIf a package descriptions specifies configuration flags the package user can heNhsNhthhZj’BubjD)r™B}ršB(hYXY`control these in several ways `__hi}r›B(UnameXcontrol these in several waysjƒX5installing-packages.html#controlling-flag-assignmentshn]hm]hk]hl]hq]uhZj’Bhu]rœBh~Xcontrol these in several waysrB…ržB}rŸB(hYUhZj™BubahgjHubh~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 B…r¡B}r¢B(hYXn. If the user does not fix the value of a flag, Cabal will try to find a flag assignment in the following way.heNhsNhthhZj’BubeubhŒ)r£B}r¤B(hYUhZjƒBhehfhghhi}r¥B(h‘X-hn]hm]hk]hl]hq]uhsM± hthhu]r¦B(h“)r§B}r¨B(hYXó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. hZj£Bhehfhgh–hi}r©B(hk]hl]hm]hn]hq]uhsNhthhu]rªBh‚)r«B}r¬B(hYXò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­BhZj§Bhehfhgh†hi}r®B(hk]hl]hm]hn]hq]uhsM± hu]r¯Bh~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°B…r±B}r²B(hYj­BhZj«Bubaubaubh“)r³B}r´B(hYX9If 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. hZj£Bhehfhgh–hi}rµB(hk]hl]hm]hn]hq]uhsNhthhu]r¶Bh‚)r·B}r¸B(hYX8If 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¹BhZj³Bhehfhgh†hi}rºB(hk]hl]hm]hn]hq]uhsM¶ hu]r»Bh~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¼B…r½B}r¾B(hYj¹BhZj·Bubaubaubeubh‚)r¿B}rÀB(hYXTo 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.hZjƒBhehfhgh†hi}rÁB(hk]hl]hm]hn]hq]uhsM¼ hthhu]rÂB(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ÃB…rÄB}rÅB(hYX›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 heNhsNhthhZj¿Bubjp)rÆB}rÇB(hYX:pkg-field:`build-depends`rÈBhZj¿Bhehfhgjthi}rÉB(UreftypeX pkg-fieldjvˆjwX build-dependsU refdomainXcabalrÊBhn]hm]U refexplicit‰hk]hl]hq]jyjzjXflagrËBuhsM¼ hu]rÌBhä)rÍB}rÎB(hYjÈBhi}rÏB(hk]hl]rÐB(jjÊBXcabal-pkg-fieldrÑBehm]hn]hq]uhZjÆBhu]rÒBh~X build-dependsrÓB…rÔB}rÕB(hYUhZjÍBubahghìubaubh~X\ field in conditional blocks that determine if a particular flag assignment is satisfiable (rÖB…r×B}rØB(hYX\ field in conditional blocks that determine if a particular flag assignment is satisfiable (heNhsNhthhZj¿Bubjp)rÙB}rÚB(hYX:pkg-field:`build-tools`rÛBhZj¿Bhehfhgjthi}rÜB(UreftypeX pkg-fieldjvˆjwX build-toolsU refdomainXcabalrÝBhn]hm]U refexplicit‰hk]hl]hq]jyjzjjËBuhsM¼ hu]rÞBhä)rßB}ràB(hYjÛBhi}ráB(hk]hl]râB(jjÝBXcabal-pkg-fieldrãBehm]hn]hq]uhZjÙBhu]räBh~X build-toolsråB…ræB}rçB(hYUhZjßBubahghì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èB…réB}rêB(hYXè 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.heNhsNhthhZj¿Bubeubh‚)rëB}rìB(hYXbIf 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íBhZjƒBhehfhgh†hi}rîB(hk]hl]hm]hn]hq]uhsMÅ hthhu]rïBh~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ðB…rñB}ròB(hYjíBheNhsNhthhZjëBubaubeubeubh[)róB}rôB(hYUhZhahehfhghhhi}rõB(hk]hl]hm]hn]röBU/meaning-of-field-values-when-using-conditionalsr÷Bahq]røBh auhsMÍ hthhu]rùB(hw)rúB}rûB(hYX/Meaning of field values when using conditionalsrüBhZjóBhehfhgh{hi}rýB(hk]hl]hm]hn]hq]uhsMÍ hthhu]rþBh~X/Meaning of field values when using conditionalsrÿB…rC}rC(hYjüBheNhsNhthhZjúBubaubh‚)rC}rC(hYXDuring 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.rChZjóBhehfhgh†hi}rC(hk]hl]hm]hn]hq]uhsMÏ hthhu]rCh~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.rC…rC}r C(hYjCheNhsNhthhZjCubaubhŒ)r C}r C(hYUhZjóBhehfhghhi}r C(h‘X-hn]hm]hk]hl]hq]uhsMÔ hthhu]r C(h“)rC}rC(hYX?Boolean fields are combined using conjunction (logical "and"). hZj Chehfhgh–hi}rC(hk]hl]hm]hn]hq]uhsNhthhu]rCh‚)rC}rC(hYX>Boolean fields are combined using conjunction (logical "and").rChZjChehfhgh†hi}rC(hk]hl]hm]hn]hq]uhsMÔ hu]rCh~XBBoolean fields are combined using conjunction (logical “andâ€).rC…rC}rC(hYjChZjCubaubaubh“)rC}rC(hYX¸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. hZj Chehfhgh–hi}rC(hk]hl]hm]hn]hq]uhsNhthhu]rC(h‚)rC}rC(hYXUList fields are combined by appending the inner items to the outer items, for exampler ChZjChehfhgh†hi}r!C(hk]hl]hm]hn]hq]uhsMÖ hu]r"Ch~XUList fields are combined by appending the inner items to the outer items, for exampler#C…r$C}r%C(hYj ChZjCubaubjÑ)r&C}r'C(hYXLother-extensions: CPP if impl(ghc) other-extensions: MultiParamTypeClasseshZjChgjÔhi}r(C(jÖj×hn]hm]hk]hl]hq]uhsMÛ hu]r)Ch~XLother-extensions: CPP if impl(ghc) other-extensions: MultiParamTypeClassesr*C…r+C}r,C(hYUhZj&Cubaubh‚)r-C}r.C(hYX+when compiled using GHC will be combined tor/ChZjChehfhgh†hi}r0C(hk]hl]hm]hn]hq]uhsMß hu]r1Ch~X+when compiled using GHC will be combined tor2C…r3C}r4C(hYj/ChZj-CubaubjÑ)r5C}r6C(hYX,other-extensions: CPP, MultiParamTypeClasseshZjChgjÔhi}r7C(jÖj×hn]hm]hk]hl]hq]uhsMã hu]r8Ch~X,other-extensions: CPP, MultiParamTypeClassesr9C…r:C}r;C(hYUhZj5Cubaubh‚)rChZjChehfhgh†hi}r?C(hk]hl]hm]hn]hq]uhsMå hu]r@Ch~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.rAC…rBC}rCC(hYj>ChZjMain-is: Main.hs if flag(useothermain) Main-is: OtherMain.hshZjDChgjÔhi}rRC(jÖj×hn]hm]hk]hl]hq]uhsMí hu]rSCh~X>Main-is: Main.hs if flag(useothermain) Main-is: OtherMain.hsrTC…rUC}rVC(hYUhZjPCubaubh‚)rWC}rXC(hYX"will lead to an error. Instead userYChZjDChehfhgh†hi}rZC(hk]hl]hm]hn]hq]uhsMñ hu]r[Ch~X"will lead to an error. Instead user\C…r]C}r^C(hYjYChZjWCubaubjÑ)r_C}r`C(hYXEif flag(useothermain) Main-is: OtherMain.hs else Main-is: Main.hshZjDChgjÔhi}raC(jÖj×hn]hm]hk]hl]hq]uhsMõ hu]rbCh~XEif flag(useothermain) Main-is: OtherMain.hs else Main-is: Main.hsrcC…rdC}reC(hYUhZj_Cubaubeubeubeubh[)rfC}rgC(hYUhZhahehfhghhhi}rhC(hk]hl]hm]hn]riCUcommon-stanzasrjCahq]rkChauhsMû hthhu]rlC(hw)rmC}rnC(hYXCommon stanzasroChZjfChehfhgh{hi}rpC(hk]hl]hm]hn]hq]uhsMû hthhu]rqCh~XCommon stanzasrrC…rsC}rtC(hYjoCheNhsNhthhZjmCubaubjþ)ruC}rvC(hYUhZjfCheNhgjhi}rwC(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rxC}ryC(hYUhZjfCheNhgjhi}rzC(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-sectionr{Cj j{CuhsNhthhu]r|C(j)r}C}r~C(hYX common namehZjxChehfhgjhi}rC(hn]r€CXpkg-section-common-commonrCahm]hk]hl]hq]j‰uhsNhthhu]r‚C(jþ)rƒC}r„C(hYUhZj}Chehfhgjhi}r…C(hn]hm]hk]hl]hq]Uentries]r†C(jX$common:common; package.cabal sectionjCUNtr‡CauhsNhthhu]ubj)rˆC}r‰C(hYXcommonrŠChZj}Chehfhgj!hi}r‹C(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rŒCh~XcommonrC…rŽC}rC(hYUheNhsNhthhZjˆCubaubj')rC}r‘C(hYU hZj}Chehfhgj*hi}r’C(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r“Ch~X …r”C}r•C(hYUheNhsNhthhZjCubaubj¦)r–C}r—C(hYXnamehZj}Chehfhgj©hi}r˜C(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]r™Ch~XnameršC…r›C}rœC(hYUheNhsNhthhZj–Cubaubeubj/)rC}ržC(hYUhZjxChehfhgj2hi}rŸC(hk]hl]hm]hn]hq]uhsNhthhu]r Cj5)r¡C}r¢C(hYUhZjCheNhgj8hi}r£C(hk]hl]hm]hn]hq]uhsNhthhu]r¤Cj;)r¥C}r¦C(hYUhZj¡CheNhgj>hi}r§C(hk]hl]hm]hn]hq]uhsNhthhu]r¨C(jA)r©C}rªC(hYjDhZj¥ChehfhgjEhi}r«C(hk]hl]hm]hn]hq]uhsKhu]r¬Ch~XSincer­C…r®C}r¯C(hYUhZj©CubaubjK)r°C}r±C(hYU Cabal 2.2r²Chi}r³C(hk]hl]hm]hn]hq]uhZj¥Chu]r´Ch‚)rµC}r¶C(hYj²Chi}r·C(hk]hl]hm]hn]hq]uhZj°Chu]r¸Ch~X Cabal 2.2r¹C…rºC}r»C(hYUhZjµCubahgh†ubahgjXubeubaubaubeubh‚)r¼C}r½C(hYXGStarting with Cabal-2.2 it's possible to use common build info stanzas.r¾ChZjfChehfhgh†hi}r¿C(hk]hl]hm]hn]hq]uhsM hthhu]rÀCh~XIStarting with Cabal-2.2 it’s possible to use common build info stanzas.rÁC…rÂC}rÃC(hYj¾CheNhsNhthhZj¼CubaubjÑ)rÄC}rÅC(hYXcommon 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: foohZjfChehfhgjÔhi}rÆC(jÖj×hn]hm]hk]hl]hq]uhsM hthhu]rÇCh~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ÈC…rÉC}rÊC(hYUhZjÄCubaubhŒ)rËC}rÌC(hYUhZjfChehfhghhi}rÍC(h‘X-hn]hm]hk]hl]hq]uhsM hthhu]rÎC(h“)rÏC}rÐC(hYX;You can use `build information`_ fields in common stanzas. hZjËChehfhgh–hi}rÑC(hk]hl]hm]hn]hq]uhsNhthhu]rÒCh‚)rÓC}rÔC(hYX:You can use `build information`_ fields in common stanzas.hZjÏChehfhgh†hi}rÕC(hk]hl]hm]hn]hq]uhsM hu]rÖC(h~X You can use r×C…rØC}rÙC(hYX You can use hZjÓCubjD)rÚC}rÛC(hYX`build information`_jGKhZjÓChgjHhi}rÜC(UnameXbuild informationhn]hm]hk]hl]hq]jJj\uhu]rÝCh~Xbuild informationrÞC…rßC}ràC(hYUhZjÚCubaubh~X fields in common stanzas.ráC…râC}rãC(hYX fields in common stanzas.hZjÓCubeubaubh“)räC}råC(hYX+Common stanzas must be defined before use. hZjËChehfhgh–hi}ræC(hk]hl]hm]hn]hq]uhsNhthhu]rçCh‚)rèC}réC(hYX*Common stanzas must be defined before use.rêChZjäChehfhgh†hi}rëC(hk]hl]hm]hn]hq]uhsM hu]rìCh~X*Common stanzas must be defined before use.ríC…rîC}rïC(hYjêChZjèCubaubaubh“)rðC}rñC(hYX0Common stanzas can import other common stanzas. hZjËChehfhgh–hi}ròC(hk]hl]hm]hn]hq]uhsNhthhu]róCh‚)rôC}rõC(hYX/Common stanzas can import other common stanzas.röChZjðChehfhgh†hi}r÷C(hk]hl]hm]hn]hq]uhsM hu]røCh~X/Common stanzas can import other common stanzas.rùC…rúC}rûC(hYjöChZjôCubaubaubh“)rüC}rýC(hYXSYou can import multiple stanzas at once. Stanza names must be separated by commas. hZjËChehfhgh–hi}rþC(hk]hl]hm]hn]hq]uhsNhthhu]rÿCh‚)rD}rD(hYXRYou can import multiple stanzas at once. Stanza names must be separated by commas.rDhZjüChehfhgh†hi}rD(hk]hl]hm]hn]hq]uhsM hu]rDh~XRYou can import multiple stanzas at once. Stanza names must be separated by commas.rD…rD}rD(hYjDhZjDubaubaubeubhð)rD}r D(hYXBThe name `import` was chosen, because there is ``includes`` field.r DhZjfChehfhghóhi}r D(hk]hl]hm]hn]hq]uhsNhthhu]r Dh‚)r D}rD(hYj DhZjDhehfhgh†hi}rD(hk]hl]hm]hn]hq]uhsM hu]rD(h~X The name rD…rD}rD(hYX The name hZj DubjY#)rD}rD(hYX`import`hi}rD(hk]hl]hm]hn]hq]uhZj Dhu]rDh~XimportrD…rD}rD(hYUhZjDubahgja#ubh~X was chosen, because there is rD…rD}rD(hYX was chosen, because there is hZj Dubhä)rD}rD(hYX ``includes``hi}r D(hk]hl]hm]hn]hq]uhZj Dhu]r!Dh~Xincludesr"D…r#D}r$D(hYUhZjDubahghìubh~X field.r%D…r&D}r'D(hYX field.hZj Dubeubaubeubh[)r(D}r)D(hYUhZhahehfhghhhi}r*D(hk]hl]hm]hn]r+DUsource-repositoriesr,Dahq]r-Dh/auhsM# hthhu]r.D(hw)r/D}r0D(hYXSource Repositoriesr1DhZj(Dhehfhgh{hi}r2D(hk]hl]hm]hn]hq]uhsM# hthhu]r3Dh~XSource Repositoriesr4D…r5D}r6D(hYj1DheNhsNhthhZj/Dubaubjþ)r7D}r8D(hYUhZj(DheNhgjhi}r9D(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r:D}r;D(hYUhZj(DheNhgjhi}rD(j)r?D}r@D(hYXsource-repositoryrADhZj:Dhehfhgjhi}rBD(hn]rCDX/pkg-section-source-repository-source-repositoryrDDahm]hk]hl]hq]j‰uhsNhthhu]rED(jþ)rFD}rGD(hYUhZj?Dhehfhgjhi}rHD(hn]hm]hk]hl]hq]Uentries]rID(jX:source-repository:source-repository; package.cabal sectionjDDUNtrJDauhsNhthhu]ubj)rKD}rLD(hYjADhZj?Dhehfhgj!hi}rMD(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rNDh~Xsource-repositoryrOD…rPD}rQD(hYUheNhsNhthhZjKDubaubj')rRD}rSD(hYU hZj?Dhehfhgj*hi}rTD(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rUDh~X …rVD}rWD(hYUheNhsNhthhZjRDubaubeubj/)rXD}rYD(hYUhZj:Dhehfhgj2hi}rZD(hk]hl]hm]hn]hq]uhsNhthhu]r[Dj5)r\D}r]D(hYUhZjXDheNhgj8hi}r^D(hk]hl]hm]hn]hq]uhsNhthhu]r_Dj;)r`D}raD(hYUhZj\DheNhgj>hi}rbD(hk]hl]hm]hn]hq]uhsNhthhu]rcD(jA)rdD}reD(hYjDhZj`DhehfhgjEhi}rfD(hk]hl]hm]hn]hq]uhsKhu]rgDh~XSincerhD…riD}rjD(hYUhZjdDubaubjK)rkD}rlD(hYU Cabal 1.6rmDhi}rnD(hk]hl]hm]hn]hq]uhZj`Dhu]roDh‚)rpD}rqD(hYjmDhi}rrD(hk]hl]hm]hn]hq]uhZjkDhu]rsDh~X Cabal 1.6rtD…ruD}rvD(hYUhZjpDubahgh†ubahgjXubeubaubaubeubh‚)rwD}rxD(hYXYIt 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.ryDhZj(Dhehfhgh†hi}rzD(hk]hl]hm]hn]hq]uhsM( hthhu]r{Dh~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|D…r}D}r~D(hYjyDheNhsNhthhZjwDubaubh‚)rD}r€D(hYX¥Cabal supports specifying different information for various common source control systems. Obviously not all automated tools will support all source control systems.rDhZj(Dhehfhgh†hi}r‚D(hk]hl]hm]hn]hq]uhsM. hthhu]rƒDh~X¥Cabal supports specifying different information for various common source control systems. Obviously not all automated tools will support all source control systems.r„D…r…D}r†D(hYjDheNhsNhthhZjDubaubh‚)r‡D}rˆD(hYXª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‰DhZj(Dhehfhgh†hi}rŠD(hk]hl]hm]hn]hq]uhsM2 hthhu]r‹Dh~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ŒD…rD}rŽD(hYj‰DheNhsNhthhZj‡DubaubhŒ)rD}rD(hYUhZj(Dhehfhghhi}r‘D(h‘X-hn]hm]hk]hl]hq]uhsM6 hthhu]r’D(h“)r“D}r”D(hYXâ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. hZjDhehfhgh–hi}r•D(hk]hl]hm]hn]hq]uhsNhthhu]r–Dh‚)r—D}r˜D(hYXá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.hZj“Dhehfhgh†hi}r™D(hk]hl]hm]hn]hq]uhsM6 hu]ršD(h~XThe r›D…rœD}rD(hYXThe hZj—Dubhä)ržD}rŸD(hYX``head``hi}r D(hk]hl]hm]hn]hq]uhZj—Dhu]r¡Dh~Xheadr¢D…r£D}r¤D(hYUhZjžDubahghì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¥D…r¦D}r§D(hYXÕ 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.hZj—Dubeubaubh“)r¨D}r©D(hYXâ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. hZjDhehfhgh–hi}rªD(hk]hl]hm]hn]hq]uhsNhthhu]r«Dh‚)r¬D}r­D(hYXá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.hZj¨Dhehfhgh†hi}r®D(hk]hl]hm]hn]hq]uhsM; hu]r¯D(h~XThe r°D…r±D}r²D(hYXThe hZj¬Dubhä)r³D}r´D(hYX``this``hi}rµD(hk]hl]hm]hn]hq]uhZj¬Dhu]r¶Dh~Xthisr·D…r¸D}r¹D(hYUhZj³Dubahghì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ºD…r»D}r¼D(hYXÕ 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.hZj¬Dubeubaubeubh‚)r½D}r¾D(hYX¨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.hZj(Dhehfhgh†hi}r¿D(hk]hl]hm]hn]hq]uhsMD hthhu]rÀD(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ÁD…rÂD}rÃD(hYX|You can specify one kind or the other or both. As an example here are the repositories for the Cabal library. Note that the heNhsNhthhZj½Dubhä)rÄD}rÅD(hYX``this``hi}rÆD(hk]hl]hm]hn]hq]uhZj½Dhu]rÇDh~XthisrÈD…rÉD}rÊD(hYUhZjÄDubahghìubh~X$ kind of repository specifies a tag.rËD…rÌD}rÍD(hYX$ kind of repository specifies a tag.heNhsNhthhZj½DubeubjÑ)rÎD}rÏD(hYXÏ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.1hZj(DhehfhgjÔhi}rÐD(jÖj×hn]hm]hk]hl]hq]uhsMJ hthhu]rÑDh~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ÒD…rÓD}rÔD(hYUhZjÎDubaubh‚)rÕD}rÖD(hYX The exact fields are as follows:r×DhZj(Dhehfhgh†hi}rØD(hk]hl]hm]hn]hq]uhsMS hthhu]rÙDh~X The exact fields are as follows:rÚD…rÛD}rÜD(hYj×DheNhsNhthhZjÕDubaubjþ)rÝD}rÞD(hYUhZj(Dhehfhgjhi}rßD(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)ràD}ráD(hYUhZj(Dhehfhgjhi}râD(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrãDj jãDuhsNhthhu]räD(j)råD}ræD(hYX type: tokenhZjàDhehfhgjhi}rçD(hn]rèDX pkg-field-source-repository-typeréDahm]hk]hl]hq]j‰uhsMd hthhu]rêD(jþ)rëD}rìD(hYUhZjåDhehfhgjhi}ríD(hn]hm]hk]hl]hq]Uentries]rîD(jX+source-repository:type; package.cabal fieldjéDUNtrïDauhsMd hthhu]ubj)rðD}rñD(hYXtyperòDhZjåDhehfhgj!hi}róD(jÖj×hn]hm]hk]hl]hq]uhsMd hthhu]rôDh~XtyperõD…röD}r÷D(hYUheNhsNhthhZjðDubaubj')røD}rùD(hYj hZjåDhehfhgj*hi}rúD(jÖj×hn]hm]hk]hl]hq]uhsMd hthhu]rûDh~X: rüD…rýD}rþD(hYUheNhsNhthhZjøDubaubj¦)rÿD}rE(hYXtokenhZjåDhehfhgj©hi}rE(jÖj×hn]hm]hk]hl]hq]uhsMd hthhu]rEh~XtokenrE…rE}rE(hYUheNhsNhthhZjÿDubaubeubj/)rE}rE(hYUhZjàDhehfhgj2hi}rE(hk]hl]hm]hn]hq]uhsMd hthhu]r E(h‚)r E}r E(hYXcThe name of the source control system used for this repository. The currently recognised types are:r EhZjEhehfhgh†hi}r E(hk]hl]hm]hn]hq]uhsMW hthhu]rEh~XcThe name of the source control system used for this repository. The currently recognised types are:rE…rE}rE(hYj EheNhsNhthhZj EubaubhŒ)rE}rE(hYUhZjEhehfhghhi}rE(h‘X-hn]hm]hk]hl]hq]uhsMZ hthhu]rE(h“)rE}rE(hYX ``darcs``rEhZjEhehfhgh–hi}rE(hk]hl]hm]hn]hq]uhsNhthhu]rEh‚)rE}rE(hYjEhZjEhehfhgh†hi}rE(hk]hl]hm]hn]hq]uhsMZ hu]rEhä)rE}r E(hYjEhi}r!E(hk]hl]hm]hn]hq]uhZjEhu]r"Eh~Xdarcsr#E…r$E}r%E(hYUhZjEubahghìubaubaubh“)r&E}r'E(hYX``git``r(EhZjEhehfhgh–hi}r)E(hk]hl]hm]hn]hq]uhsNhthhu]r*Eh‚)r+E}r,E(hYj(EhZj&Ehehfhgh†hi}r-E(hk]hl]hm]hn]hq]uhsM[ hu]r.Ehä)r/E}r0E(hYj(Ehi}r1E(hk]hl]hm]hn]hq]uhZj+Ehu]r2Eh~Xgitr3E…r4E}r5E(hYUhZj/Eubahghìubaubaubh“)r6E}r7E(hYX``svn``r8EhZjEhehfhgh–hi}r9E(hk]hl]hm]hn]hq]uhsNhthhu]r:Eh‚)r;E}rEhä)r?E}r@E(hYj8Ehi}rAE(hk]hl]hm]hn]hq]uhZj;Ehu]rBEh~XsvnrCE…rDE}rEE(hYUhZj?Eubahghìubaubaubh“)rFE}rGE(hYX``cvs``rHEhZjEhehfhgh–hi}rIE(hk]hl]hm]hn]hq]uhsNhthhu]rJEh‚)rKE}rLE(hYjHEhZjFEhehfhgh†hi}rME(hk]hl]hm]hn]hq]uhsM] hu]rNEhä)rOE}rPE(hYjHEhi}rQE(hk]hl]hm]hn]hq]uhZjKEhu]rREh~XcvsrSE…rTE}rUE(hYUhZjOEubahghìubaubaubh“)rVE}rWE(hYX``mercurial`` (or alias ``hg``)rXEhZjEhehfhgh–hi}rYE(hk]hl]hm]hn]hq]uhsNhthhu]rZEh‚)r[E}r\E(hYjXEhZjVEhehfhgh†hi}r]E(hk]hl]hm]hn]hq]uhsM^ hu]r^E(hä)r_E}r`E(hYX ``mercurial``hi}raE(hk]hl]hm]hn]hq]uhZj[Ehu]rbEh~X mercurialrcE…rdE}reE(hYUhZj_Eubahghìubh~X (or alias rfE…rgE}rhE(hYX (or alias hZj[Eubhä)riE}rjE(hYX``hg``hi}rkE(hk]hl]hm]hn]hq]uhZj[Ehu]rlEh~XhgrmE…rnE}roE(hYUhZjiEubahghìubh~X)…rpE}rqE(hYX)hZj[Eubeubaubh“)rrE}rsE(hYX``bazaar`` (or alias ``bzr``)rtEhZjEhehfhgh–hi}ruE(hk]hl]hm]hn]hq]uhsNhthhu]rvEh‚)rwE}rxE(hYjtEhZjrEhehfhgh†hi}ryE(hk]hl]hm]hn]hq]uhsM_ hu]rzE(hä)r{E}r|E(hYX ``bazaar``hi}r}E(hk]hl]hm]hn]hq]uhZjwEhu]r~Eh~XbazaarrE…r€E}rE(hYUhZj{Eubahghìubh~X (or alias r‚E…rƒE}r„E(hYX (or alias hZjwEubhä)r…E}r†E(hYX``bzr``hi}r‡E(hk]hl]hm]hn]hq]uhZjwEhu]rˆEh~Xbzrr‰E…rŠE}r‹E(hYUhZj…Eubahghìubh~X)…rŒE}rE(hYX)hZjwEubeubaubh“)rŽE}rE(hYX``arch``rEhZjEhehfhgh–hi}r‘E(hk]hl]hm]hn]hq]uhsNhthhu]r’Eh‚)r“E}r”E(hYjEhZjŽEhehfhgh†hi}r•E(hk]hl]hm]hn]hq]uhsM` hu]r–Ehä)r—E}r˜E(hYjEhi}r™E(hk]hl]hm]hn]hq]uhZj“Ehu]ršEh~Xarchr›E…rœE}rE(hYUhZj—Eubahghìubaubaubh“)ržE}rŸE(hYX ``monotone`` hZjEhehfhgh–hi}r E(hk]hl]hm]hn]hq]uhsNhthhu]r¡Eh‚)r¢E}r£E(hYX ``monotone``r¤EhZjžEhehfhgh†hi}r¥E(hk]hl]hm]hn]hq]uhsMa hu]r¦Ehä)r§E}r¨E(hYj¤Ehi}r©E(hk]hl]hm]hn]hq]uhZj¢Ehu]rªEh~Xmonotoner«E…r¬E}r­E(hYUhZj§Eubahghìubaubaubeubh‚)r®E}r¯E(hYXThis field is required.r°EhZjEhehfhgh†hi}r±E(hk]hl]hm]hn]hq]uhsMc hthhu]r²Eh~XThis field is required.r³E…r´E}rµE(hYj°EheNhsNhthhZj®Eubaubeubeubjþ)r¶E}r·E(hYUhZj(Dhehfhgjhi}r¸E(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r¹E}rºE(hYUhZj(Dhehfhgjhi}r»E(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr¼Ej j¼EuhsNhthhu]r½E(j)r¾E}r¿E(hYX location: URLhZj¹Ehehfhgjhi}rÀE(hn]rÁEX$pkg-field-source-repository-locationrÂEahm]hk]hl]hq]j‰uhsMo hthhu]rÃE(jþ)rÄE}rÅE(hYUhZj¾Ehehfhgjhi}rÆE(hn]hm]hk]hl]hq]Uentries]rÇE(jX/source-repository:location; package.cabal fieldjÂEUNtrÈEauhsMo hthhu]ubj)rÉE}rÊE(hYXlocationrËEhZj¾Ehehfhgj!hi}rÌE(jÖj×hn]hm]hk]hl]hq]uhsMo hthhu]rÍEh~XlocationrÎE…rÏE}rÐE(hYUheNhsNhthhZjÉEubaubj')rÑE}rÒE(hYj hZj¾Ehehfhgj*hi}rÓE(jÖj×hn]hm]hk]hl]hq]uhsMo hthhu]rÔEh~X: rÕE…rÖE}r×E(hYUheNhsNhthhZjÑEubaubj¦)rØE}rÙE(hYXURLhZj¾Ehehfhgj©hi}rÚE(jÖj×hn]hm]hk]hl]hq]uhsMo hthhu]rÛEh~XURLrÜE…rÝE}rÞE(hYUheNhsNhthhZjØEubaubeubj/)rßE}ràE(hYUhZj¹Ehehfhgj2hi}ráE(hk]hl]hm]hn]hq]uhsMo hthhu]râE(h‚)rãE}räE(hYXiThe location of the repository. The exact form of this field depends on the repository type. For example:råEhZjßEhehfhgh†hi}ræE(hk]hl]hm]hn]hq]uhsMg hthhu]rçEh~XiThe location of the repository. The exact form of this field depends on the repository type. For example:rèE…réE}rêE(hYjåEheNhsNhthhZjãEubaubhŒ)rëE}rìE(hYUhZjßEhehfhghhi}ríE(h‘X-hn]hm]hk]hl]hq]uhsMj hthhu]rîE(h“)rïE}rðE(hYX+for darcs: ``http://code.haskell.org/foo/``rñEhZjëEhehfhgh–hi}ròE(hk]hl]hm]hn]hq]uhsNhthhu]róEh‚)rôE}rõE(hYjñEhZjïEhehfhgh†hi}röE(hk]hl]hm]hn]hq]uhsMj hu]r÷E(h~X for darcs: røE…rùE}rúE(hYX for darcs: hZjôEubhä)rûE}rüE(hYX ``http://code.haskell.org/foo/``hi}rýE(hk]hl]hm]hn]hq]uhZjôEhu]rþEh~Xhttp://code.haskell.org/foo/rÿE…rF}rF(hYUhZjûEubahghìubeubaubh“)rF}rF(hYX)for git: ``git://github.com/foo/bar.git``rFhZjëEhehfhgh–hi}rF(hk]hl]hm]hn]hq]uhsNhthhu]rFh‚)rF}rF(hYjFhZjFhehfhgh†hi}r F(hk]hl]hm]hn]hq]uhsMk hu]r F(h~X for git: r F…r F}r F(hYX for git: hZjFubhä)rF}rF(hYX ``git://github.com/foo/bar.git``hi}rF(hk]hl]hm]hn]hq]uhZjFhu]rFh~Xgit://github.com/foo/bar.gitrF…rF}rF(hYUhZjFubahghìubeubaubh“)rF}rF(hYX&for CVS: ``anoncvs@cvs.foo.org:/cvs`` hZjëEhehfhgh–hi}rF(hk]hl]hm]hn]hq]uhsNhthhu]rFh‚)rF}rF(hYX%for CVS: ``anoncvs@cvs.foo.org:/cvs``rFhZjFhehfhgh†hi}rF(hk]hl]hm]hn]hq]uhsMl hu]rF(h~X for CVS: rF…rF}r F(hYX for CVS: hZjFubhä)r!F}r"F(hYX``anoncvs@cvs.foo.org:/cvs``hi}r#F(hk]hl]hm]hn]hq]uhZjFhu]r$Fh~Xanoncvs@cvs.foo.org:/cvsr%F…r&F}r'F(hYUhZj!Fubahghìubeubaubeubh‚)r(F}r)F(hYXThis field is required.r*FhZjßEhehfhgh†hi}r+F(hk]hl]hm]hn]hq]uhsMn hthhu]r,Fh~XThis field is required.r-F…r.F}r/F(hYj*FheNhsNhthhZj(Fubaubeubeubjþ)r0F}r1F(hYUhZj(Dhehfhgjhi}r2F(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r3F}r4F(hYUhZj(Dhehfhgjhi}r5F(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr6Fj j6FuhsNhthhu]r7F(j)r8F}r9F(hYX module: tokenhZj3Fhehfhgjhi}r:F(hn]r;FX"pkg-field-source-repository-modulerF}r?F(hYUhZj8Fhehfhgjhi}r@F(hn]hm]hk]hl]hq]Uentries]rAF(jX-source-repository:module; package.cabal fieldjG(hYj9GheNhsNhthhZj7Gubaubeubeubeubh[)r?G}r@G(hYUhZhahehfhghhhi}rAG(hk]hl]hm]hn]rBGUdownloading-a-package-s-sourcerCGahq]rDGhauhsM— hthhu]rEG(hw)rFG}rGG(hYXDownloading a package's sourcerHGhZj?Ghehfhgh{hi}rIG(hk]hl]hm]hn]hq]uhsM— hthhu]rJGh~X Downloading a package’s sourcerKG…rLG}rMG(hYjHGheNhsNhthhZjFGubaubh‚)rNG}rOG(hYXÐ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.hZj?Ghehfhgh†hi}rPG(hk]hl]hm]hn]hq]uhsM™ hthhu]rQG(h~XThe rRG…rSG}rTG(hYXThe heNhsNhthhZjNGubhä)rUG}rVG(hYX ``cabal get``hi}rWG(hk]hl]hm]hn]hq]uhZjNGhu]rXGh~X cabal getrYG…rZG}r[G(hYUhZjUGubahghì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.r\G…r]G}r^G(hYX¿ 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.heNhsNhthhZjNGubeubjÑ)r_G}r`G(hYX$ cabal get [FLAGS] PACKAGEShZj?GhehfhgjÔhi}raG(jÖj×hn]hm]hk]hl]hq]uhsMŸ hthhu]rbGh~X$ cabal get [FLAGS] PACKAGESrcG…rdG}reG(hYUhZj_Gubaubh‚)rfG}rgG(hYX3The ``get`` command supports the following options:rhGhZj?Ghehfhgh†hi}riG(hk]hl]hm]hn]hq]uhsM¡ hthhu]rjG(h~XThe rkG…rlG}rmG(hYXThe heNhsNhthhZjfGubhä)rnG}roG(hYX``get``hi}rpG(hk]hl]hm]hn]hq]uhZjfGhu]rqGh~XgetrrG…rsG}rtG(hYUhZjnGubahghìubh~X( command supports the following options:ruG…rvG}rwG(hYX( command supports the following options:heNhsNhthhZjfGubeubj)rxG}ryG(hYUhZj?Ghehfhgjhi}rzG(hk]hl]hm]hn]hq]uhsNhthhu]r{G(j)r|G}r}G(hYXq``-d --destdir`` *PATH* Where to place the package source, defaults to (a subdirectory of) the current directory.hZjxGhehfhgjhi}r~G(hk]hl]hm]hn]hq]uhsM¤ hu]rG(j!)r€G}rG(hYX``-d --destdir`` *PATH*r‚GhZj|Ghehfhgj%hi}rƒG(hk]hl]hm]hn]hq]uhsM¤ hu]r„G(hä)r…G}r†G(hYX``-d --destdir``hi}r‡G(hk]hl]hm]hn]hq]uhZj€Ghu]rˆGh~X -d --destdirr‰G…rŠG}r‹G(hYUhZj…Gubahghìubh~X …rŒG}rG(hYX hZj€GubhÄ)rŽG}rG(hYX*PATH*hi}rG(hk]hl]hm]hn]hq]uhZj€Ghu]r‘Gh~XPATHr’G…r“G}r”G(hYUhZjŽGubahghÌubeubj8)r•G}r–G(hYUhi}r—G(hk]hl]hm]hn]hq]uhZj|Ghu]r˜Gh‚)r™G}ršG(hYXYWhere to place the package source, defaults to (a subdirectory of) the current directory.r›GhZj•Ghehfhgh†hi}rœG(hk]hl]hm]hn]hq]uhsM¤ hu]rGh~XYWhere to place the package source, defaults to (a subdirectory of) the current directory.ržG…rŸG}r G(hYj›GhZj™GubaubahgjRubeubj)r¡G}r¢G(hYXÄ``-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.hZjxGhehfhgjhi}r£G(hk]hl]hm]hn]hq]uhsM¨ hthhu]r¤G(j!)r¥G}r¦G(hYX.``-s --source-repository`` *[head\|this\|...]*r§GhZj¡Ghehfhgj%hi}r¨G(hk]hl]hm]hn]hq]uhsM¨ hu]r©G(hä)rªG}r«G(hYX``-s --source-repository``hi}r¬G(hk]hl]hm]hn]hq]uhZj¥Ghu]r­Gh~X-s --source-repositoryr®G…r¯G}r°G(hYUhZjªGubahghìubh~X …r±G}r²G(hYX hZj¥GubhÄ)r³G}r´G(hYX*[head\|this\|...]*hi}rµG(hk]hl]hm]hn]hq]uhZj¥Ghu]r¶Gh~X[head|this|…]r·G…r¸G}r¹G(hYUhZj³GubahghÌubeubj8)rºG}r»G(hYUhi}r¼G(hk]hl]hm]hn]hq]uhZj¡Ghu]r½Gh‚)r¾G}r¿G(hYX•Fork the package's source repository using the appropriate version control system. The optional argument allows to choose a specific repository kind.rÀGhZjºGhehfhgh†hi}rÁG(hk]hl]hm]hn]hq]uhsM§ hu]rÂGh~X—Fork the package’s source repository using the appropriate version control system. The optional argument allows to choose a specific repository kind.rÃG…rÄG}rÅG(hYjÀGhZj¾GubaubahgjRubeubj)rÆG}rÇG(hYX’``--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).hZjxGhehfhgjhi}rÈG(hk]hl]hm]hn]hq]uhsM® hthhu]rÉG(j!)rÊG}rËG(hYXF``--index-state`` *[HEAD\|@\|]*rÌGhZjÆGhehfhgj%hi}rÍG(hk]hl]hm]hn]hq]uhsM® hu]rÎG(hä)rÏG}rÐG(hYX``--index-state``hi}rÑG(hk]hl]hm]hn]hq]uhZjÊGhu]rÒGh~X --index-staterÓG…rÔG}rÕG(hYUhZjÏGubahghìubh~X …rÖG}r×G(hYX hZjÊGubhÄ)rØG}rÙG(hYX4*[HEAD\|@\|]*hi}rÚG(hk]hl]hm]hn]hq]uhZjÊGhu]rÛGh~X0[HEAD|@|]rÜG…rÝG}rÞG(hYUhZjØGubahghÌubeubj8)rßG}ràG(hYUhi}ráG(hk]hl]hm]hn]hq]uhZjÆGhu]râGh‚)rãG}räG(hYXKUse 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).hZjßGhehfhgh†hi}råG(hk]hl]hm]hn]hq]uhsM« hu]ræG(h~X_Use source package index state as it existed at a previous time. Accepts unix-timestamps (e.g. rçG…rèG}réG(hYX_Use source package index state as it existed at a previous time. Accepts unix-timestamps (e.g. hZjãGubhä)rêG}rëG(hYX``@1474732068``hi}rìG(hk]hl]hm]hn]hq]uhZjãGhu]ríGh~X @1474732068rîG…rïG}rðG(hYUhZjêGubahghìubh~X ), ISO8601 UTC timestamps (e.g. rñG…ròG}róG(hYX ), ISO8601 UTC timestamps (e.g. hZjãGubhä)rôG}rõG(hYX``2016-09-24T17:47:48Z``hi}röG(hk]hl]hm]hn]hq]uhZjãGhu]r÷Gh~X2016-09-24T17:47:48ZrøG…rùG}rúG(hYUhZjôGubahghìubh~X), or rûG…rüG}rýG(hYX), or hZjãGubhä)rþG}rÿG(hYX``HEAD``hi}rH(hk]hl]hm]hn]hq]uhZjãGhu]rHh~XHEADrH…rH}rH(hYUhZjþGubahghìubh~XR (default). This determines which package versions are available as well as which rH…rH}rH(hYXR (default). This determines which package versions are available as well as which hZjãGubhä)rH}r H(hYX ``.cabal``hi}r H(hk]hl]hm]hn]hq]uhZjãGhu]r Hh~X.cabalr H…r H}rH(hYUhZjHubahghìubh~X# file revision is selected (unless rH…rH}rH(hYX# file revision is selected (unless hZjãGubhä)rH}rH(hYX``--pristine``hi}rH(hk]hl]hm]hn]hq]uhZjãGhu]rHh~X --pristinerH…rH}rH(hYUhZjHubahghìubh~X is used).rH…rH}rH(hYX is used).hZjãGubeubahgjRubeubj)rH}rH(hYX‘``--pristine`` Unpack the original pristine tarball, rather than updating the ``.cabal`` file with the latest revision from the package archive. hZjxGhehfhgjhi}rH(hk]hl]hm]hn]hq]uhsM² hthhu]rH(j!)r H}r!H(hYX``--pristine``r"HhZjHhehfhgj%hi}r#H(hk]hl]hm]hn]hq]uhsM² hu]r$Hhä)r%H}r&H(hYj"Hhi}r'H(hk]hl]hm]hn]hq]uhZj Hhu]r(Hh~X --pristiner)H…r*H}r+H(hYUhZj%Hubahghìubaubj8)r,H}r-H(hYUhi}r.H(hk]hl]hm]hn]hq]uhZjHhu]r/Hh‚)r0H}r1H(hYXUnpack the original pristine tarball, rather than updating the ``.cabal`` file with the latest revision from the package archive.hZj,Hhehfhgh†hi}r2H(hk]hl]hm]hn]hq]uhsM± hu]r3H(h~X?Unpack the original pristine tarball, rather than updating the r4H…r5H}r6H(hYX?Unpack the original pristine tarball, rather than updating the hZj0Hubhä)r7H}r8H(hYX ``.cabal``hi}r9H(hk]hl]hm]hn]hq]uhZj0Hhu]r:Hh~X.cabalr;H…rH…r?H}r@H(hYX8 file with the latest revision from the package archive.hZj0HubeubahgjRubeubeubeubeubhehfhghhhi}rAH(hk]hl]hm]hn]rBHU benchmarksrCHahq]rDHhLauhsMGhthhu]rEH(hw)rFH}rGH(hYX BenchmarksrHHhZh_hehfhgh{hi}rIH(hk]hl]hm]hn]hq]uhsMGhthhu]rJHh~X BenchmarksrKH…rLH}rMH(hYjHHheNhsNhthhZjFHubaubjþ)rNH}rOH(hYUhZh_hehfhgjhi}rPH(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rQH}rRH(hYUhZh_hehfhgjhi}rSH(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-sectionrTHj jTHuhsNhthhu]rUH(j)rVH}rWH(hYXbenchmark namehZjQHhehfhgjhi}rXH(hn]rYHXpkg-section-benchmark-benchmarkrZHahm]hk]hl]hq]j‰uhsNhthhu]r[H(jþ)r\H}r]H(hYUhZjVHhehfhgjhi}r^H(hn]hm]hk]hl]hq]Uentries]r_H(jX*benchmark:benchmark; package.cabal sectionjZHUNtr`HauhsNhthhu]ubj)raH}rbH(hYX benchmarkrcHhZjVHhehfhgj!hi}rdH(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]reHh~X benchmarkrfH…rgH}rhH(hYUheNhsNhthhZjaHubaubj')riH}rjH(hYU hZjVHhehfhgj*hi}rkH(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rlHh~X …rmH}rnH(hYUheNhsNhthhZjiHubaubj¦)roH}rpH(hYXnamehZjVHhehfhgj©hi}rqH(jÖj×hn]hm]hk]hl]hq]uhsNhthhu]rrHh~XnamersH…rtH}ruH(hYUheNhsNhthhZjoHubaubeubj/)rvH}rwH(hYUhZjQHhehfhgj2hi}rxH(hk]hl]hm]hn]hq]uhsNhthhu]ryH(j5)rzH}r{H(hYUhZjvHhehfhgj8hi}r|H(hk]hl]hm]hn]hq]uhsNhthhu]r}Hj;)r~H}rH(hYUhZjzHhehfhgj>hi}r€H(hk]hl]hm]hn]hq]uhsNhthhu]rH(jA)r‚H}rƒH(hYjDhZj~HhehfhgjEhi}r„H(hk]hl]hm]hn]hq]uhsKhu]r…Hh~XSincer†H…r‡H}rˆH(hYUhZj‚HubaubjK)r‰H}rŠH(hYU Cabal 1.9.2r‹Hhi}rŒH(hk]hl]hm]hn]hq]uhZj~Hhu]rHh‚)rŽH}rH(hYj‹Hhi}rH(hk]hl]hm]hn]hq]uhZj‰Hhu]r‘Hh~X Cabal 1.9.2r’H…r“H}r”H(hYUhZjŽHubahgh†ubahgjXubeubaubh‚)r•H}r–H(hYX¶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—HhZjvHhehfhgh†hi}r˜H(hk]hl]hm]hn]hq]uhsMMhthhu]r™Hh~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šH…r›H}rœH(hYj—HheNhsNhthhZj•Hubaubeubeubh‚)rH}ržH(hYX‰The benchmark may be described using the following fields, as well as build information fields (see the section on `build information`_).hZh_hehfhgh†hi}rŸH(hk]hl]hm]hn]hq]uhsMUhthhu]r H(h~XsThe benchmark may be described using the following fields, as well as build information fields (see the section on r¡H…r¢H}r£H(hYXsThe benchmark may be described using the following fields, as well as build information fields (see the section on heNhsNhthhZjHubjD)r¤H}r¥H(hYX`build information`_jGKhZjHhgjHhi}r¦H(UnameXbuild informationhn]hm]hk]hl]hq]jJj\uhu]r§Hh~Xbuild informationr¨H…r©H}rªH(hYUhZj¤Hubaubh~X).r«H…r¬H}r­H(hYX).heNhsNhthhZjHubeubjþ)r®H}r¯H(hYUhZh_hehfhgjhi}r°H(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)r±H}r²H(hYUhZh_hehfhgjhi}r³H(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldr´Hj j´HuhsNhthhu]rµH(j)r¶H}r·H(hYXtype: interface (required)hZj±Hhehfhgjhi}r¸H(hn]r¹HXpkg-field-benchmark-typerºHahm]hk]hl]hq]j‰uhsM\hthhu]r»H(jþ)r¼H}r½H(hYUhZj¶Hhehfhgjhi}r¾H(hn]hm]hk]hl]hq]Uentries]r¿H(jX#benchmark:type; package.cabal fieldjºHUNtrÀHauhsM\hthhu]ubj)rÁH}rÂH(hYXtyperÃHhZj¶Hhehfhgj!hi}rÄH(jÖj×hn]hm]hk]hl]hq]uhsM\hthhu]rÅHh~XtyperÆH…rÇH}rÈH(hYUheNhsNhthhZjÁHubaubj')rÉH}rÊH(hYj hZj¶Hhehfhgj*hi}rËH(jÖj×hn]hm]hk]hl]hq]uhsM\hthhu]rÌHh~X: rÍH…rÎH}rÏH(hYUheNhsNhthhZjÉHubaubj¦)rÐH}rÑH(hYXinterface (required)hZj¶Hhehfhgj©hi}rÒH(jÖj×hn]hm]hk]hl]hq]uhsM\hthhu]rÓHh~Xinterface (required)rÔH…rÕH}rÖH(hYUheNhsNhthhZjÐHubaubeubj/)r×H}rØH(hYUhZj±Hhehfhgj2hi}rÙH(hk]hl]hm]hn]hq]uhsM\hthhu]rÚHh‚)rÛH}rÜH(hYX‰The interface type and version of the benchmark. At the moment Cabal only support one benchmark interface, called ``exitcode-stdio-1.0``.hZj×Hhehfhgh†hi}rÝH(hk]hl]hm]hn]hq]uhsMZhthhu]rÞH(h~XrThe interface type and version of the benchmark. At the moment Cabal only support one benchmark interface, called rßH…ràH}ráH(hYXrThe interface type and version of the benchmark. At the moment Cabal only support one benchmark interface, called heNhsNhthhZjÛHubhä)râH}rãH(hYX``exitcode-stdio-1.0``hi}räH(hk]hl]hm]hn]hq]uhZjÛHhu]råHh~Xexitcode-stdio-1.0ræH…rçH}rèH(hYUhZjâHubahghìubh~X.…réH}rêH(hYX.heNhsNhthhZjÛHubeubaubeubh‚)rëH}rìH(hYXð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.hZh_hehfhgh†hi}ríH(hk]hl]hm]hn]hq]uhsM]hthhu]rîH(h~XBenchmarks using the rïH…rðH}rñH(hYXBenchmarks using the heNhsNhthhZjëHubhä)ròH}róH(hYX``exitcode-stdio-1.0``hi}rôH(hk]hl]hm]hn]hq]uhZjëHhu]rõHh~Xexitcode-stdio-1.0röH…r÷H}røH(hYUhZjòHubahghì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.rùH…rúH}rûH(hYXÅ 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.heNhsNhthhZjëHubeubjþ)rüH}rýH(hYUhZh_hehfhgjhi}rþH(hn]hm]hk]hl]hq]Uentries]uhsNhthhu]ubj)rÿH}rI(hYUhZh_hehfhgjhi}rI(j‰j Xcabalhn]hm]hk]hl]hq]j X pkg-fieldrIj jIuhsNhthhu]rI(j)rI}rI(hYXmain-is: filenamehZjÿHhehfhgjhi}rI(hn]rIXpkg-field-benchmark-main-isrIahm]hk]hl]hq]j‰uhsMmhthhu]r I(jþ)r I}r I(hYUhZjIhehfhgjhi}r I(hn]hm]hk]hl]hq]Uentries]r I(jX&benchmark:main-is; package.cabal fieldjIUNtrIauhsMmhthhu]ubj)rI}rI(hYXmain-isrIhZjIhehfhgj!hi}rI(jÖj×hn]hm]hk]hl]hq]uhsMmhthhu]rIh~Xmain-isrI…rI}rI(hYUheNhsNhthhZjIubaubj')rI}rI(hYj hZjIhehfhgj*hi}rI(jÖj×hn]hm]hk]hl]hq]uhsMmhthhu]rIh~X: rI…rI}rI(hYUheNhsNhthhZjIubaubj¦)rI}rI(hYXfilenamehZjIhehfhgj©hi}r I(jÖj×hn]hm]hk]hl]hq]uhsMmhthhu]r!Ih~Xfilenamer"I…r#I}r$I(hYUheNhsNhthhZjIubaubeubj/)r%I}r&I(hYUhZjÿHhehfhgj2hi}r'I(hk]hl]hm]hn]hq]uhsMmhthhu]r(I(j5)r)I}r*I(hYUhZj%Ihehfhgj8hi}r+I(hk]hl]hm]hn]hq]uhsNhthhu]r,Ij;)r-I}r.I(hYUhZj)Ihehfhgj>hi}r/I(hk]hl]hm]hn]hq]uhsMdhthhu]r0I(jA)r1I}r2I(hYXrequiredhZj-IhehfhgjEhi}r3I(hk]hl]hm]hn]hq]uhsKhu]r4Ih~XRequiredr5I…r6I}r7I(hYUhZj1IubaubjK)r8I}r9I(hYX``exitcode-stdio-1.0`` hi}r:I(hk]hl]hm]hn]hq]uhZj-Ihu]r;Ih‚)rIhZj8Ihehfhgh†hi}r?I(hk]hl]hm]hn]hq]uhsMdhu]r@Ihä)rAI}rBI(hYj>Ihi}rCI(hk]hl]hm]hn]hq]uhZj= 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.7hZjJhehfhgjÔhi}rJ(j‰jXcabaljÖj×hn]hm]hk]j}hl]hq]uhsMthu]rJh~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.7rJ…rJ}rJ(hYUhZjJubaubeubj/&)rJ}rJ(hYUhZh\heUhgj2&hi}rJ(hn]rJUid7rJahm]hk]hl]rJj7&ahq]U literal_blockˆuhsNhthhu]rJ(j9&)rJ}rJ(hYX bench-foo.hsr JhZjJhehfhgj=&hi}r!J(hk]hl]hm]hn]hq]uhsMƒhu]r"Jh~X bench-foo.hsr#J…r$J}r%J(hYj JhZjJubaubjÑ)r&J}r'J(hYX {-# 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)hZjJhehfhgjÔhi}r(J(j‰jXhaskelljÖj×hn]hm]hk]j}hl]hq]uhsMƒhu]r)Jh~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)r*J…r+J}r,J(hYUhZj&JubaubeubeubhehfhgUsystem_messager-Jhi}r.J(hk]UlevelKhn]hm]r/JjØIaUsourcehfhl]hq]UlineMoUtypeUINFOr0JuhsMohthhu]r1Jh‚)r2J}r3J(hYXVDuplicate implicit target name: "example: package using exitcode-stdio-1.0 interface".hi}r4J(hk]hl]hm]hn]hq]uhZhWhu]r5Jh~XZDuplicate implicit target name: “example: package using exitcode-stdio-1.0 interfaceâ€.r6J…r7J}r8J(hYUhZj2Jubahgh†ubaubhV)r9J}r:J(hYUhZjd>hehfhgj-Jhi}r;J(hk]UlevelKhn]hm]raUsourcehfhl]hq]UlineM¬ Utypej0JuhsM¬ hthhu]r=Jh‚)r>J}r?J(hYXbDuplicate implicit target name: "example: a package containing a library and executable programs".hi}r@J(hk]hl]hm]hn]hq]uhZj9Jhu]rAJh~XfDuplicate implicit target name: “example: a package containing a library and executable programsâ€.rBJ…rCJ}rDJ(hYUhZj>Jubahgh†ubaubeUcurrent_sourcerEJNU decorationrFJNUautofootnote_startrGJKUnameidsrHJ}rIJ(hj."hj hjÂh U quickstartrJJh jh#h jàh Uthe-point-of-packagesrKJh U6explicit-dependencies-and-automatic-package-managementrLJhjCGhjKhjÊhj½#hjjChUmodules-included-in-the-packagerMJhjIhj5hj hjW hjªhjhUediting-the-cabal-filerNJhjõhj¥hj•hj;hj«h j÷Bh!jrh"j!h#Ubuilding-the-packagerOJh$jAh%hph&j#h'j(h(j‡Bh)j¡Ih*j¼>h+j@h,jBh-j/h.jÿ&h/j,Dh0jd&h1j“h2jh3jä(h4Upackage-names-and-versionsrPJh5jJh6j2h7jþh8j¦>h9j} h:U next-stepsrQJh;Uunit-of-distributionrRJhj~>h?Nh@j#2hAUusing-cabal-initrTJhBU portabilityrUJhCU`gnu-autoconf-places-restrictions-on-paths-including-the-path-that-the-user-builds-a-package-fromrVJhDjÇ&hEj\hFU'kinds-of-package-cabal-vs-ghc-vs-systemrWJhGUpackage-conceptsrXJhHjý>hIj³hJjhKjhLjCHhMNhNjhOjÉhPjhQjÐuhu]rYJ(h[)rZJ}r[J(hYUhZhhehfhghhhi}r\J(hk]hl]hm]hn]r]JjJJahq]r^Jh auhsKhthhu]r_J(hw)r`J}raJ(hYX QuickstartrbJhZjZJhehfhgh{hi}rcJ(hk]hl]hm]hn]hq]uhsKhthhu]rdJh~X QuickstartreJ…rfJ}rgJ(hYjbJheNhsNhthhZj`Jubaubh‚)rhJ}riJ(hYXYLets assume we have created a project directory and already have a Haskell module or two.rjJhZjZJhehfhgh†hi}rkJ(hk]hl]hm]hn]hq]uhsKhthhu]rlJh~XYLets assume we have created a project directory and already have a Haskell module or two.rmJ…rnJ}roJ(hYjjJheNhsNhthhZjhJubaubh‚)rpJ}rqJ(hYX>Every project needs a name, we'll call this example "proglet".rrJhZjZJhehfhgh†hi}rsJ(hk]hl]hm]hn]hq]uhsKhthhu]rtJh~XDEvery project needs a name, we’ll call this example “progletâ€.ruJ…rvJ}rwJ(hYjrJheNhsNhthhZjpJubaubcsphinx.addnodes highlightlang rxJ)ryJ}rzJ(hYUhZjZJhehfhgU highlightlangr{Jhi}r|J(UlangXconsoleUlinenothresholdI9223372036854775807 hn]hm]hk]hl]hq]uhsK hthhu]ubjÑ)r}J}r~J(hYX$ cd proglet/ $ ls Proglet.hshZjZJhehfhgjÔhi}rJ(jÖj×hn]hm]hk]hl]hq]uhsK hthhu]r€Jh~X$ cd proglet/ $ ls Proglet.hsrJ…r‚J}rƒJ(hYUhZj}Jubaubh‚)r„J}r…J(hYXý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†JhZjZJhehfhgh†hi}r‡J(hk]hl]hm]hn]hq]uhsKhthhu]rˆJh~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‰J…rŠJ}r‹J(hYj†JheNhsNhthhZj„Jubaubh‚)rŒJ}rJ(hYXZTo turn this into a Cabal package we need two extra files in the project's root directory:rŽJhZjZJhehfhgh†hi}rJ(hk]hl]hm]hn]hq]uhsKhthhu]rJh~X\To turn this into a Cabal package we need two extra files in the project’s root directory:r‘J…r’J}r“J(hYjŽJheNhsNhthhZjŒJubaubhŒ)r”J}r•J(hYUhZjZJhehfhghhi}r–J(h‘X-hn]hm]hk]hl]hq]uhsKhthhu]r—J(h“)r˜J}r™J(hYXF``proglet.cabal``: containing package metadata and build information. hZj”Jhehfhgh–hi}ršJ(hk]hl]hm]hn]hq]uhsNhthhu]r›Jh‚)rœJ}rJ(hYXE``proglet.cabal``: containing package metadata and build information.hZj˜Jhehfhgh†hi}ržJ(hk]hl]hm]hn]hq]uhsKhu]rŸJ(hä)r J}r¡J(hYX``proglet.cabal``hi}r¢J(hk]hl]hm]hn]hq]uhZjœJhu]r£Jh~X proglet.cabalr¤J…r¥J}r¦J(hYUhZj Jubahghìubh~X4: containing package metadata and build information.r§J…r¨J}r©J(hYX4: containing package metadata and build information.hZjœJubeubaubh“)rªJ}r«J(hYXg``Setup.hs``: usually containing a few standardized lines of code, but can be customized if necessary. hZj”Jhehfhgh–hi}r¬J(hk]hl]hm]hn]hq]uhsNhthhu]r­Jh‚)r®J}r¯J(hYXf``Setup.hs``: usually containing a few standardized lines of code, but can be customized if necessary.hZjªJhehfhgh†hi}r°J(hk]hl]hm]hn]hq]uhsKhu]r±J(hä)r²J}r³J(hYX ``Setup.hs``hi}r´J(hk]hl]hm]hn]hq]uhZj®Jhu]rµJh~XSetup.hsr¶J…r·J}r¸J(hYUhZj²Jubahghìubh~XZ: usually containing a few standardized lines of code, but can be customized if necessary.r¹J…rºJ}r»J(hYXZ: usually containing a few standardized lines of code, but can be customized if necessary.hZj®Jubeubaubeubh‚)r¼J}r½J(hYXUWe can create both files manually or we can use ``cabal init`` to create them for us.hZjZJhehfhgh†hi}r¾J(hk]hl]hm]hn]hq]uhsKhthhu]r¿J(h~X0We can create both files manually or we can use rÀJ…rÁJ}rÂJ(hYX0We can create both files manually or we can use heNhsNhthhZj¼Jubhä)rÃJ}rÄJ(hYX``cabal init``hi}rÅJ(hk]hl]hm]hn]hq]uhZj¼Jhu]rÆJh~X cabal initrÇJ…rÈJ}rÉJ(hYUhZjÃJubahghìubh~X to create them for us.rÊJ…rËJ}rÌJ(hYX to create them for us.heNhsNhthhZj¼Jubeubh[)rÍJ}rÎJ(hYUhZjZJhehfhghhhi}rÏJ(hk]hl]hm]hn]rÐJjTJahq]rÑJhAauhsK"hthhu]rÒJ(hw)rÓJ}rÔJ(hYXUsing "cabal init"rÕJhZjÍJhehfhgh{hi}rÖJ(hk]hl]hm]hn]hq]uhsK"hthhu]r×Jh~XUsing “cabal initâ€rØJ…rÙJ}rÚJ(hYjÕJheNhsNhthhZjÓJubaubh‚)rÛJ}rÜJ(hYXwThe ``cabal init`` command is interactive. It asks us a number of questions starting with the package name and version.hZjÍJhehfhgh†hi}rÝJ(hk]hl]hm]hn]hq]uhsK$hthhu]rÞJ(h~XThe rßJ…ràJ}ráJ(hYXThe heNhsNhthhZjÛJubhä)râJ}rãJ(hYX``cabal init``hi}räJ(hk]hl]hm]hn]hq]uhZjÛJhu]råJh~X cabal initræJ…rçJ}rèJ(hYUhZjâJubahghìubh~Xe command is interactive. It asks us a number of questions starting with the package name and version.réJ…rêJ}rëJ(hYXe command is interactive. It asks us a number of questions starting with the package name and version.heNhsNhthhZjÛJubeubjÑ)rìJ}ríJ(hYXS$ cabal init Package name [default "proglet"]? Package version [default "0.1"]? ...hZjÍJhehfhgjÔhi}rîJ(jÖj×hn]hm]hk]hl]hq]uhsK)hthhu]rïJh~XS$ cabal init Package name [default "proglet"]? Package version [default "0.1"]? ...rðJ…rñJ}ròJ(hYUhZjìJubaubh‚)róJ}rôJ(hYX¡It also asks questions about various other bits of package metadata. For a package that you never intend to distribute to others, these fields can be left blank.rõJhZjÍJhehfhgh†hi}röJ(hk]hl]hm]hn]hq]uhsK.hthhu]r÷Jh~X¡It also asks questions about various other bits of package metadata. For a package that you never intend to distribute to others, these fields can be left blank.røJ…rùJ}rúJ(hYjõJheNhsNhthhZjóJubaubh‚)rûJ}rüJ(hYXï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.rýJhZjÍJhehfhgh†hi}rþJ(hk]hl]hm]hn]hq]uhsK2hthhu]rÿJh~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.rK…rK}rK(hYjýJheNhsNhthhZjûJubaubjÑ)rK}rK(hYXHWhat does the package build: 1) Library 2) Executable Your choice?hZjÍJhehfhgjÔhi}rK(jÖj×hn]hm]hk]hl]hq]uhsK9hthhu]rKh~XHWhat does the package build: 1) Library 2) Executable Your choice?rK…rK}r K(hYUhZjKubaubh‚)r K}r K(hYX«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.hZjÍJhehfhgh†hi}r K(hk]hl]hm]hn]hq]uhsK>hthhu]r K(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 rK…rK}rK(hYX‚For the moment these are the only choices. For more complex packages (e.g. a library and multiple executables or test suites) the heNhsNhthhZj Kubhä)rK}rK(hYX ``.cabal``hi}rK(hk]hl]hm]hn]hq]uhZj Khu]rKh~X.cabalrK…rK}rK(hYUhZjKubahghìubh~X file can be edited afterwards.rK…rK}rK(hYX file can be edited afterwards.heNhsNhthhZj Kubeubh‚)rK}rK(hYXšFinally, ``cabal init`` creates the initial ``proglet.cabal`` and ``Setup.hs`` files, and depending on your choice of license, a ``LICENSE`` file as well.hZjÍJhehfhgh†hi}rK(hk]hl]hm]hn]hq]uhsKBhthhu]rK(h~X Finally, rK…r K}r!K(hYX Finally, heNhsNhthhZjKubhä)r"K}r#K(hYX``cabal init``hi}r$K(hk]hl]hm]hn]hq]uhZjKhu]r%Kh~X cabal initr&K…r'K}r(K(hYUhZj"Kubahghìubh~X creates the initial r)K…r*K}r+K(hYX creates the initial heNhsNhthhZjKubhä)r,K}r-K(hYX``proglet.cabal``hi}r.K(hk]hl]hm]hn]hq]uhZjKhu]r/Kh~X proglet.cabalr0K…r1K}r2K(hYUhZj,Kubahghìubh~X and r3K…r4K}r5K(hYX and heNhsNhthhZjKubhä)r6K}r7K(hYX ``Setup.hs``hi}r8K(hk]hl]hm]hn]hq]uhZjKhu]r9Kh~XSetup.hsr:K…r;K}rK}r?K(hYX3 files, and depending on your choice of license, a heNhsNhthhZjKubhä)r@K}rAK(hYX ``LICENSE``hi}rBK(hk]hl]hm]hn]hq]uhZjKhu]rCKh~XLICENSErDK…rEK}rFK(hYUhZj@Kubahghìubh~X file as well.rGK…rHK}rIK(hYX file as well.heNhsNhthhZjKubeubjÑ)rJK}rKK(hYX‹Generating LICENSE... Generating Setup.hs... Generating proglet.cabal... You may want to edit the .cabal file and add a Description field.hZjÍJhehfhgjÔhi}rLK(jÖj×hn]hm]hk]hl]hq]uhsKHhthhu]rMKh~X‹Generating LICENSE... Generating Setup.hs... Generating proglet.cabal... You may want to edit the .cabal file and add a Description field.rNK…rOK}rPK(hYUhZjJKubaubh‚)rQK}rRK(hYXÅ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.hZjÍJhehfhgh†hi}rSK(hk]hl]hm]hn]hq]uhsKNhthhu]rTK(h~XAs this stage the rUK…rVK}rWK(hYXAs this stage the heNhsNhthhZjQKubhä)rXK}rYK(hYX``proglet.cabal``hi}rZK(hk]hl]hm]hn]hq]uhZjQKhu]r[Kh~X proglet.cabalr\K…r]K}r^K(hYUhZjXKubahghì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_K…r`K}raK(hYX¢ 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.heNhsNhthhZjQKubeubeubh[)rbK}rcK(hYUhZjZJhehfhghhhi}rdK(hk]hl]hm]hn]reKjNJahq]rfKhauhsKShthhu]rgK(hw)rhK}riK(hYXEditing the .cabal filerjKhZjbKhehfhgh{hi}rkK(hk]hl]hm]hn]hq]uhsKShthhu]rlKh~XEditing the .cabal filermK…rnK}roK(hYjjKheNhsNhthhZjhKubaubjxJ)rpK}rqK(hYUhZjbKhehfhgj{Jhi}rrK(UlangXcabalUlinenothresholdI9223372036854775807 hn]hm]hk]hl]hq]uhsKVhthhu]ubh‚)rsK}rtK(hYXÛ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.hZjbKhehfhgh†hi}ruK(hk]hl]hm]hn]hq]uhsKWhthhu]rvK(h~X Load up the rwK…rxK}ryK(hYX Load up the heNhsNhthhZjsKubhä)rzK}r{K(hYX ``.cabal``hi}r|K(hk]hl]hm]hn]hq]uhZjsKhu]r}Kh~X.cabalr~K…rK}r€K(hYUhZjzKubahghìubh~X. file in a text editor. The first part of the rK…r‚K}rƒK(hYX. file in a text editor. The first part of the heNhsNhthhZjsKubhä)r„K}r…K(hYX ``.cabal``hi}r†K(hk]hl]hm]hn]hq]uhZjsKhu]r‡Kh~X.cabalrˆK…r‰K}rŠK(hYUhZj„Kubahghìubh~XQ file has the package metadata and towards the end of the file you will find the r‹K…rŒK}rK(hYXQ file has the package metadata and towards the end of the file you will find the heNhsNhthhZjsKubjp)rŽK}rK(hYX:pkg-section:`executable`rKhZjsKhehfhgjthi}r‘K(UreftypeX pkg-sectionjvˆjwX executableU refdomainXcabalr’Khn]hm]U refexplicit‰hk]hl]hq]jyjzuhsKWhu]r“Khä)r”K}r•K(hYjKhi}r–K(hk]hl]r—K(jj’KXcabal-pkg-sectionr˜Kehm]hn]hq]uhZjŽKhu]r™Kh~X executableršK…r›K}rœK(hYUhZj”Kubahghìubaubh~X or rK…ržK}rŸK(hYX or heNhsNhthhZjsKubjp)r K}r¡K(hYX:pkg-section:`library`r¢KhZjsKhehfhgjthi}r£K(UreftypeX pkg-sectionjvˆjwXlibraryU refdomainXcabalr¤Khn]hm]U refexplicit‰hk]hl]hq]jyjzuhsKWhu]r¥Khä)r¦K}r§K(hYj¢Khi}r¨K(hk]hl]r©K(jj¤KXcabal-pkg-sectionrªKehm]hn]hq]uhZj Khu]r«Kh~Xlibraryr¬K…r­K}r®K(hYUhZj¦Kubahghìubaubh~X section.r¯K…r°K}r±K(hYX section.heNhsNhthhZjsKubeubh‚)r²K}r³K(hYX'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.)hZjbKhehfhgh†hi}r´K(hk]hl]hm]hn]hq]uhsK[hthhu]rµK(h~XaYou will see that the fields that have yet to be filled in are commented out. Cabal files use “r¶K…r·K}r¸K(hYX_You will see that the fields that have yet to be filled in are commented out. Cabal files use "heNhsNhthhZj²Kubhä)r¹K}rºK(hYX``--``hi}r»K(hk]hl]hm]hn]hq]uhZj²Khu]r¼Kh~X--r½K…r¾K}r¿K(hYUhZj¹Kubahghì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ÀK…rÁK}rÂK(hYXÂ" 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.)heNhsNhthhZj²Kubeubh‚)rÃK}rÄK(hYXwIf you selected earlier to create a library package then your ``.cabal`` file will have a section that looks like this:hZjbKhehfhgh†hi}rÅK(hk]hl]hm]hn]hq]uhsKahthhu]rÆK(h~X>If you selected earlier to create a library package then your rÇK…rÈK}rÉK(hYX>If you selected earlier to create a library package then your heNhsNhthhZjÃKubhä)rÊK}rËK(hYX ``.cabal``hi}rÌK(hk]hl]hm]hn]hq]uhZjÃKhu]rÍKh~X.cabalrÎK…rÏK}rÐK(hYUhZjÊKubahghìubh~X/ file will have a section that looks like this:rÑK…rÒK}rÓK(hYX/ file will have a section that looks like this:heNhsNhthhZjÃKubeubjÑ)rÔK}rÕK(hYXNlibrary exposed-modules: Proglet -- other-modules: -- build-depends:hZjbKhehfhgjÔhi}rÖK(jÖj×hn]hm]hk]hl]hq]uhsKfhthhu]r×Kh~XNlibrary exposed-modules: Proglet -- other-modules: -- build-depends:rØK…rÙK}rÚK(hYUhZjÔKubaubh‚)rÛK}rÜK(hYXOAlternatively, if you selected an executable then there will be a section like:rÝKhZjbKhehfhgh†hi}rÞK(hk]hl]hm]hn]hq]uhsKkhthhu]rßKh~XOAlternatively, if you selected an executable then there will be a section like:ràK…ráK}râK(hYjÝKheNhsNhthhZjÛKubaubjÑ)rãK}räK(hYXHexecutable proglet -- main-is: -- other-modules: -- build-depends:hZjbKhehfhgjÔhi}råK(jÖj×hn]hm]hk]hl]hq]uhsKphthhu]ræKh~XHexecutable proglet -- main-is: -- other-modules: -- build-depends:rçK…rèK}réK(hYUhZjãKubaubh‚)rêK}rëK(hYX¨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ìKhZjbKhehfhgh†hi}ríK(hk]hl]hm]hn]hq]uhsKuhthhu]rîKh~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ïK…rðK}rñK(hYjìKheNhsNhthhZjêKubaubh‚)ròK}róK(hYXMost 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.hZjbKhehfhgh†hi}rôK(hk]hl]hm]hn]hq]uhsKyhthhu]rõK(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 röK…r÷K}røK(hYXö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 heNhsNhthhZjòKubhä)rùK}rúK(hYX``Main``hi}rûK(hk]hl]hm]hn]hq]uhZjòKhu]rüKh~XMainrýK…rþK}rÿK(hYUhZjùKubahghìubh~X module.rL…rL}rL(hYX module.heNhsNhthhZjòKubeubh‚)rL}rL(hYXÝ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.rLhZjbKhehfhgh†hi}rL(hk]hl]hm]hn]hq]uhsK~hthhu]rLh~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.rL…r L}r L(hYjLheNhsNhthhZjLubaubeubh[)r L}r L(hYUhZjZJhehfhghhhi}r L(hk]hl]hm]hn]rLjMJahq]rLhauhsK„hthhu]rL(hw)rL}rL(hYXModules included in the packagerLhZj Lhehfhgh{hi}rL(hk]hl]hm]hn]hq]uhsK„hthhu]rLh~XModules included in the packagerL…rL}rL(hYjLheNhsNhthhZjLubaubh‚)rL}rL(hYXuFor 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.hZj Lhehfhgh†hi}rL(hk]hl]hm]hn]hq]uhsK†hthhu]rL(h~XFor a library, rL…rL}rL(hYXFor a library, heNhsNhthhZjLubhä)r L}r!L(hYX``cabal init``hi}r"L(hk]hl]hm]hn]hq]uhZjLhu]r#Lh~X cabal initr$L…r%L}r&L(hYUhZj Lubahghìubh~Xi looks in the project directory for files that look like Haskell modules and adds all the modules to the r'L…r(L}r)L(hYXi looks in the project directory for files that look like Haskell modules and adds all the modules to the heNhsNhthhZjLubjp)r*L}r+L(hYX$:pkg-field:`library:exposed-modules`r,LhZjLhehfhgjthi}r-L(UreftypeX pkg-fieldjvˆjwXexposed-modulesU refdomainXcabalr.Lhn]hm]U refexplicit‰hk]hl]hq]jyjzjXlibraryuhsK†hu]r/Lhä)r0L}r1L(hYj,Lhi}r2L(hk]hl]r3L(jj.LXcabal-pkg-fieldr4Lehm]hn]hq]uhZj*Lhu]r5Lh~Xlibrary:exposed-modulesr6L…r7L}r8L(hYUhZj0Lubahghìubaubh~Xr field. For modules that do not form part of your package’s public interface, you can move those modules to the r9L…r:L}r;L(hYXp field. For modules that do not form part of your package's public interface, you can move those modules to the heNhsNhthhZjLubjp)rLhZjLhehfhgjthi}r?L(UreftypeX pkg-fieldjvˆjwX other-modulesU refdomainXcabalr@Lhn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsK†hu]rALhä)rBL}rCL(hYj>Lhi}rDL(hk]hl]rEL(jj@LXcabal-pkg-fieldrFLehm]hn]hq]uhZj= n``r:MhZj4Mhehfhgh–hi}r;M(hk]hl]hm]hn]hq]uhsNhthhu]rM(hYj:MhZj8Mhehfhgh†hi}r?M(hk]hl]hm]hn]hq]uhsK³hu]r@Mhä)rAM}rBM(hYj:Mhi}rCM(hk]hl]hm]hn]hq]uhZj=Mhu]rDMh~X pkgname >= nrEM…rFM}rGM(hYUhZjAMubahghìubaubaubh“)rHM}rIM(hYX#``pkgname ^>= n`` (since Cabal 2.0)rJMhZj4Mhehfhgh–hi}rKM(hk]hl]hm]hn]hq]uhsNhthhu]rLMh‚)rMM}rNM(hYjJMhZjHMhehfhgh†hi}rOM(hk]hl]hm]hn]hq]uhsK´hu]rPM(hä)rQM}rRM(hYX``pkgname ^>= n``hi}rSM(hk]hl]hm]hn]hq]uhZjMMhu]rTMh~X pkgname ^>= nrUM…rVM}rWM(hYUhZjQMubahghìubh~X (since Cabal 2.0)rXM…rYM}rZM(hYX (since Cabal 2.0)hZjMMubeubaubh“)r[M}r\M(hYX``pkgname >= n && < m``r]MhZj4Mhehfhgh–hi}r^M(hk]hl]hm]hn]hq]uhsNhthhu]r_Mh‚)r`M}raM(hYj]MhZj[Mhehfhgh†hi}rbM(hk]hl]hm]hn]hq]uhsKµhu]rcMhä)rdM}reM(hYj]Mhi}rfM(hk]hl]hm]hn]hq]uhZj`Mhu]rgMh~Xpkgname >= n && < mrhM…riM}rjM(hYUhZjdMubahghìubaubaubh“)rkM}rlM(hYX%``pkgname == n.*`` (since Cabal 1.6) hZj4Mhehfhgh–hi}rmM(hk]hl]hm]hn]hq]uhsNhthhu]rnMh‚)roM}rpM(hYX$``pkgname == n.*`` (since Cabal 1.6)hZjkMhehfhgh†hi}rqM(hk]hl]hm]hn]hq]uhsK¶hu]rrM(hä)rsM}rtM(hYX``pkgname == n.*``hi}ruM(hk]hl]hm]hn]hq]uhZjoMhu]rvMh~Xpkgname == n.*rwM…rxM}ryM(hYUhZjsMubahghìubh~X (since Cabal 1.6)rzM…r{M}r|M(hYX (since Cabal 1.6)hZjoMubeubaubeubh‚)r}M}r~M(hYXÍ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.hZj«Lhehfhgh†hi}rM(hk]hl]hm]hn]hq]uhsK¸hthhu]r€M(h~X(The last is just shorthand, for example rM…r‚M}rƒM(hYX(The last is just shorthand, for example heNhsNhthhZj}Mubhä)r„M}r…M(hYX``base == 4.*``hi}r†M(hk]hl]hm]hn]hq]uhZj}Mhu]r‡Mh~X base == 4.*rˆM…r‰M}rŠM(hYUhZj„Mubahghìubh~X! means exactly the same thing as r‹M…rŒM}rM(hYX! means exactly the same thing as heNhsNhthhZj}Mubhä)rŽM}rM(hYX``base >= 4 && < 5``hi}rM(hk]hl]hm]hn]hq]uhZj}Mhu]r‘Mh~Xbase >= 4 && < 5r’M…r“M}r”M(hYUhZjŽMubahghìubh~X+. Please refer to the documentation on the r•M…r–M}r—M(hYX+. Please refer to the documentation on the heNhsNhthhZj}Mubjp)r˜M}r™M(hYX:pkg-field:`build-depends`ršMhZj}Mhehfhgjthi}r›M(UreftypeX pkg-fieldjvˆjwX build-dependsU refdomainXcabalrœMhn]hm]U refexplicit‰hk]hl]hq]jyjzjNuhsK¸hu]rMhä)ržM}rŸM(hYjšMhi}r M(hk]hl]r¡M(jjœMXcabal-pkg-fieldr¢Mehm]hn]hq]uhZj˜Mhu]r£Mh~X build-dependsr¤M…r¥M}r¦M(hYUhZjžMubahghìubaubh~X field for more information.r§M…r¨M}r©M(hYX field for more information.heNhsNhthhZj}Mubeubeubh[)rªM}r«M(hYUhZjZJhehfhghhhi}r¬M(hk]hl]hm]hn]r­MjOJahq]r®Mh#auhsK½hthhu]r¯M(hw)r°M}r±M(hYXBuilding the packager²MhZjªMhehfhgh{hi}r³M(hk]hl]hm]hn]hq]uhsK½hthhu]r´Mh~XBuilding the packagerµM…r¶M}r·M(hYj²MheNhsNhthhZj°Mubaubh‚)r¸M}r¹M(hYXSFor simple packages that's it! We can now try configuring and building the package:rºMhZjªMhehfhgh†hi}r»M(hk]hl]hm]hn]hq]uhsK¿hthhu]r¼Mh~XUFor simple packages that’s it! We can now try configuring and building the package:r½M…r¾M}r¿M(hYjºMheNhsNhthhZj¸MubaubjÑ)rÀM}rÁM(hYX$ cabal configure $ cabal buildhZjªMhehfhgjÔhi}rÂM(j‰jXconsolejÖj×hn]hm]hk]j}hl]hq]uhsKÂhthhu]rÃMh~X$ cabal configure $ cabal buildrÄM…rÅM}rÆM(hYUhZjÀMubaubh‚)rÇM}rÈM(hYXFAssuming those two steps worked then you can also install the package:rÉMhZjªMhehfhgh†hi}rÊM(hk]hl]hm]hn]hq]uhsKÇhthhu]rËMh~XFAssuming those two steps worked then you can also install the package:rÌM…rÍM}rÎM(hYjÉMheNhsNhthhZjÇMubaubjÑ)rÏM}rÐM(hYX$ cabal installhZjªMhehfhgjÔhi}rÑM(j‰jXconsolejÖj×hn]hm]hk]j}hl]hq]uhsKÉhthhu]rÒMh~X$ cabal installrÓM…rÔM}rÕM(hYUhZjÏMubaubh‚)rÖM}r×M(hYXÖ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``).hZjªMhehfhgh†hi}rØM(hk]hl]hm]hn]hq]uhsKÍhthhu]rÙM(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ÚM…rÛM}rÜM(hYXË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 heNhsNhthhZjÖMubhä)rÝM}rÞM(hYX ``$PATH``hi}rßM(hk]hl]hm]hn]hq]uhZjÖMhu]ràMh~X$PATHráM…râM}rãM(hYUhZjÝMubahghìubh~X).räM…råM}ræM(hYX).heNhsNhthhZjÖMubeubeubh[)rçM}rèM(hYUhZjZJhehfhghhhi}réM(hk]hl]hm]hn]rêMjQJahq]rëMh:auhsKÒhthhu]rìM(hw)ríM}rîM(hYX Next stepsrïMhZjçMhehfhgh{hi}rðM(hk]hl]hm]hn]hq]uhsKÒhthhu]rñMh~X Next stepsròM…róM}rôM(hYjïMheNhsNhthhZjíMubaubh‚)rõM}röM(hYXfWhat we have covered so far should be enough for very simple packages that you use on your own system.r÷MhZjçMhehfhgh†hi}røM(hk]hl]hm]hn]hq]uhsKÔhthhu]rùMh~XfWhat we have covered so far should be enough for very simple packages that you use on your own system.rúM…rûM}rüM(hYj÷MheNhsNhthhZjõMubaubh‚)rýM}rþM(hYX‡The next few sections cover more details needed for more complex packages and details needed for distributing packages to other people.rÿMhZjçMhehfhgh†hi}rN(hk]hl]hm]hn]hq]uhsK×hthhu]rNh~X‡The next few sections cover more details needed for more complex packages and details needed for distributing packages to other people.rN…rN}rN(hYjÿMheNhsNhthhZjýMubaubh‚)rN}rN(hYXtThe previous chapter covers building and installing packages -- your own packages or ones developed by other people.rNhZjçMhehfhgh†hi}rN(hk]hl]hm]hn]hq]uhsKÚhthhu]r Nh~XuThe previous chapter covers building and installing packages – your own packages or ones developed by other people.r N…r N}r N(hYjNheNhsNhthhZjNubaubeubeubh[)r N}rN(hYUhZhhehfhghhhi}rN(hk]hl]hm]hn]rNjXJahq]rNhGauhsKÞhthhu]rN(hw)rN}rN(hYXPackage conceptsrNhZj Nhehfhgh{hi}rN(hk]hl]hm]hn]hq]uhsKÞhthhu]rNh~XPackage conceptsrN…rN}rN(hYjNheNhsNhthhZjNubaubh‚)rN}rN(hYX¡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.rNhZj Nhehfhgh†hi}rN(hk]hl]hm]hn]hq]uhsKàhthhu]rNh~X¡Before diving into the details of writing packages it helps to understand a bit about packages in the Haskell world and the particular approach that Cabal takes.r N…r!N}r"N(hYjNheNhsNhthhZjNubaubh[)r#N}r$N(hYUhZj Nhehfhghhhi}r%N(hk]hl]hm]hn]r&NjKJahq]r'Nh auhsKåhthhu]r(N(hw)r)N}r*N(hYXThe point of packagesr+NhZj#Nhehfhgh{hi}r,N(hk]hl]hm]hn]hq]uhsKåhthhu]r-Nh~XThe point of packagesr.N…r/N}r0N(hYj+NheNhsNhthhZj)Nubaubh‚)r1N}r2N(hYXç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.r3NhZj#Nhehfhgh†hi}r4N(hk]hl]hm]hn]hq]uhsKçhthhu]r5Nh~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.r6N…r7N}r8N(hYj3NheNhsNhthhZj1Nubaubh‚)r9N}r:N(hYX¹People organise code into packages based on functionality and dependencies. Social factors are also important: most packages have a single author, or a relatively small team of authors.r;NhZj#Nhehfhgh†hi}rN…r?N}r@N(hYj;NheNhsNhthhZj9Nubaubh‚)rAN}rBN(hYXSPackages 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.rCNhZj#Nhehfhgh†hi}rDN(hk]hl]hm]hn]hq]uhsKðhthhu]rENh~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.rFN…rGN}rHN(hYjCNheNhsNhthhZjANubaubh‚)rIN}rJN(hYXEPackages 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.rKNhZj#Nhehfhgh†hi}rLN(hk]hl]hm]hn]hq]uhsKöhthhu]rMNh~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.rNN…rON}rPN(hYjKNheNhsNhthhZjINubaubh‚)rQN}rRN(hYXÏ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.rSNhZj#Nhehfhgh†hi}rTN(hk]hl]hm]hn]hq]uhsKühthhu]rUNh~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.rVN…rWN}rXN(hYjSNheNhsNhthhZjQNubaubeubh[)rYN}rZN(hYUhZj Nhehfhghhhi}r[N(hk]hl]hm]hn]r\NjPJahq]r]Nh4auhsMhthhu]r^N(hw)r_N}r`N(hYXPackage names and versionsraNhZjYNhehfhgh{hi}rbN(hk]hl]hm]hn]hq]uhsMhthhu]rcNh~XPackage names and versionsrdN…reN}rfN(hYjaNheNhsNhthhZj_Nubaubh‚)rgN}rhN(hYX 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.riNhZjYNhehfhgh†hi}rjN(hk]hl]hm]hn]hq]uhsMhthhu]rkNh~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.rlN…rmN}rnN(hYjiNheNhsNhthhZjgNubaubh‚)roN}rpN(hYXÄ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 `__).hZjYNhehfhgh†hi}rqN(hk]hl]hm]hn]hq]uhsM hthhu]rrN(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. rsN…rtN}ruN(hYXè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. heNhsNhthhZjoNubjD)rvN}rwN(hYX`SemVer `__hi}rxN(UnameXSemVerjƒXhttp://semver.orghn]hm]hk]hl]hq]uhZjoNhu]ryNh~XSemVerrzN…r{N}r|N(hYUhZjvNubahgjHubh~XK; however, for packages intended to be distributed via Hackage Haskell’s r}N…r~N}rN(hYXI; however, for packages intended to be distributed via Hackage Haskell's heNhsNhthhZjoNubjD)r€N}rN(hYX`Package Versioning Policy`_jGKhZjoNhgjHhi}r‚N(UnameXPackage Versioning Policyjƒj hn]hm]hk]hl]hq]uhu]rƒNh~XPackage Versioning Policyr„N…r…N}r†N(hYUhZj€Nubaubh~X applies (see also the r‡N…rˆN}r‰N(hYX applies (see also the heNhsNhthhZjoNubjD)rŠN}r‹N(hYX@`PVP/SemVer FAQ section `__hi}rŒN(UnameXPVP/SemVer FAQ sectionjƒX#https://pvp.haskell.org/faq/#semverhn]hm]hk]hl]hq]uhZjoNhu]rNh~XPVP/SemVer FAQ sectionrŽN…rN}rN(hYUhZjŠNubahgjHubh~X).r‘N…r’N}r“N(hYX).heNhsNhthhZjoNubeubh‚)r”N}r•N(hYX—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".hZjYNhehfhgh†hi}r–N(hk]hl]hm]hn]hq]uhsMhthhu]r—N(h~X:The combination of package name and version is called the r˜N…r™N}ršN(hYX:The combination of package name and version is called the heNhsNhthhZj”NubhÄ)r›N}rœN(hYX *package ID*hi}rN(hk]hl]hm]hn]hq]uhZj”Nhu]ržNh~X package IDrŸN…r N}r¡N(hYUhZj›NubahghÌubh~XU and is written with a hyphen to separate the name and version, e.g. “HUnit-1.1â€.r¢N…r£N}r¤N(hYXQ and is written with a hyphen to separate the name and version, e.g. "HUnit-1.1".heNhsNhthhZj”Nubeubh‚)r¥N}r¦N(hYXÎ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.hZjYNhehfhgh†hi}r§N(hk]hl]hm]hn]hq]uhsMhthhu]r¨N(h~XDFor Cabal packages, the combination of the package name and version r©N…rªN}r«N(hYXDFor Cabal packages, the combination of the package name and version heNhsNhthhZj¥NubhÄ)r¬N}r­N(hYX *uniquely*hi}r®N(hk]hl]hm]hn]hq]uhZj¥Nhu]r¯Nh~Xuniquelyr°N…r±N}r²N(hYUhZj¬NubahghÌubh~Xr identifies each package. Or to put it another way: two packages with the same name and version are considered to r³N…r´N}rµN(hYXr identifies each package. Or to put it another way: two packages with the same name and version are considered to heNhsNhthhZj¥NubhÄ)r¶N}r·N(hYX*be*hi}r¸N(hk]hl]hm]hn]hq]uhZj¥Nhu]r¹Nh~XberºN…r»N}r¼N(hYUhZj¶NubahghÌubh~X the same.r½N…r¾N}r¿N(hYX the same.heNhsNhthhZj¥Nubeubh‚)rÀN}rÁN(hYX@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.hZjYNhehfhgh†hi}rÂN(hk]hl]hm]hn]hq]uhsM hthhu]rÃN(h~X=Strictly speaking, the package ID only identifies each Cabal rÄN…rÅN}rÆN(hYX=Strictly speaking, the package ID only identifies each Cabal heNhsNhthhZjÀNubhÄ)rÇN}rÈN(hYX*source*hi}rÉN(hk]hl]hm]hn]hq]uhZjÀNhu]rÊNh~XsourcerËN…rÌN}rÍN(hYUhZjÇNubahghÌ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ÎN…rÏN}rÐN(hYXû 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.heNhsNhthhZjÀNubeubeubh[)rÑN}rÒN(hYUhZj Nhehfhghhhi}rÓN(hk]hl]hm]hn]rÔNjWJahq]rÕNhFauhsM'hthhu]rÖN(hw)r×N}rØN(hYX(Kinds of package: Cabal vs GHC vs systemrÙNhZjÑNhehfhgh{hi}rÚN(hk]hl]hm]hn]hq]uhsM'hthhu]rÛNh~X(Kinds of package: Cabal vs GHC vs systemrÜN…rÝN}rÞN(hYjÙNheNhsNhthhZj×Nubaubh‚)rßN}ràN(hYXŸ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áNhZjÑNhehfhgh†hi}râN(hk]hl]hm]hn]hq]uhsM)hthhu]rãNh~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.räN…råN}ræN(hYjáNheNhsNhthhZjßNubaubj)rçN}rèN(hYUhZjÑNhehfhgjhi}réN(hk]hl]hm]hn]hq]uhsNhthhu]rêN(j)rëN}rìN(hYXë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. hZjçNhehfhgjhi}ríN(hk]hl]hm]hn]hq]uhsM2hu]rîN(j!)rïN}rðN(hYXCabal packagesrñNhZjëNhehfhgj%hi}ròN(hk]hl]hm]hn]hq]uhsM2hu]róNh~XCabal packagesrôN…rõN}röN(hYjñNhZjïNubaubj8)r÷N}røN(hYUhi}rùN(hk]hl]hm]hn]hq]uhZjëNhu]rúN(h‚)rûN}rüN(hYXfCabal packages are really source packages. That is they contain Haskell (and sometimes C) source code.rýNhZj÷Nhehfhgh†hi}rþN(hk]hl]hm]hn]hq]uhsM.hu]rÿNh~XfCabal packages are really source packages. That is they contain Haskell (and sometimes C) source code.rO…rO}rO(hYjýNhZjûNubaubh‚)rO}rO(hYXsCabal packages can be compiled to produce GHC packages. They can also be translated into operating system packages.rOhZj÷Nhehfhgh†hi}rO(hk]hl]hm]hn]hq]uhsM1hu]rOh~XsCabal packages can be compiled to produce GHC packages. They can also be translated into operating system packages.rO…r O}r O(hYjOhZjOubaubehgjRubeubj)r O}r O(hYXª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. hZjçNhehfhgjhi}r O(hk]hl]hm]hn]hq]uhsMChthhu]rO(j!)rO}rO(hYX GHC packagesrOhZj Ohehfhgj%hi}rO(hk]hl]hm]hn]hq]uhsMChu]rOh~X GHC packagesrO…rO}rO(hYjOhZjOubaubj8)rO}rO(hYUhi}rO(hk]hl]hm]hn]hq]uhZj Ohu]rO(h‚)rO}rO(hYXá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.rOhZjOhehfhgh†hi}rO(hk]hl]hm]hn]hq]uhsM5hu]rOh~XãThis is GHC’s view on packages. GHC only cares about library packages, not executables. Library packages have to be registered with GHC for them to be available in GHCi or to be used when compiling other programs or packages.r O…r!O}r"O(hYjOhZjOubaubh‚)r#O}r$O(hYXThe low-level tool ``ghc-pkg`` is used to register GHC packages and to get information on what packages are currently registered.hZjOhehfhgh†hi}r%O(hk]hl]hm]hn]hq]uhsM:hu]r&O(h~XThe low-level tool r'O…r(O}r)O(hYXThe low-level tool hZj#Oubhä)r*O}r+O(hYX ``ghc-pkg``hi}r,O(hk]hl]hm]hn]hq]uhZj#Ohu]r-Oh~Xghc-pkgr.O…r/O}r0O(hYUhZj*Oubahghìubh~Xc is used to register GHC packages and to get information on what packages are currently registered.r1O…r2O}r3O(hYXc is used to register GHC packages and to get information on what packages are currently registered.hZj#Oubeubh‚)r4O}r5O(hYXYou 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.r6OhZjOhehfhgh†hi}r7O(hk]hl]hm]hn]hq]uhsM=hu]r8Oh~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.r9O…r:O}r;O(hYj6OhZj4Oubaubh‚)rOhZjOhehfhgh†hi}r?O(hk]hl]hm]hn]hq]uhsMAhu]r@Oh~X—Haskell implementations other than GHC have essentially the same concept of registered packages. For the most part, Cabal hides the slight differences.rAO…rBO}rCO(hYj>OhZj`_ Package authors using ``build-type: configure`` should be aware of these restrictions; because users may be unexpectedly constrained and face mysterious errors, it is recommended that ``build-type: configure`` is only used where strictly necessary.hZj’Ohehfhghóhi}rïO(hk]hl]hm]hn]hq]uhsNhthhu]rðOh‚)rñO}ròO(hYX³`GNU autoconf places restrictions on paths, including the path that the user builds a package from. `_ Package authors using ``build-type: configure`` should be aware of these restrictions; because users may be unexpectedly constrained and face mysterious errors, it is recommended that ``build-type: configure`` is only used where strictly necessary.hZjíOhehfhgh†hi}róO(hk]hl]hm]hn]hq]uhsMhu]rôO(jD)rõO}röO(hYXº`GNU autoconf places restrictions on paths, including the path that the user builds a package from. `_hi}r÷O(UnameXbGNU autoconf places restrictions on paths, including the path that the user builds a package from.jƒXRhttps://www.gnu.org/software/autoconf/manual/autoconf.html#File-System-ConventionsrøOhn]hm]hk]hl]hq]uhZjñOhu]rùOh~XbGNU autoconf places restrictions on paths, including the path that the user builds a package from.rúO…rûO}rüO(hYUhZjõOubahgjHubj¥)rýO}rþO(hYXU h^KhZjñOhgj¨hi}rÿO(UrefurijøOhn]rPjVJahm]hk]hl]hq]rPhCauhu]ubh~X Package authors using rP…rP}rP(hYX Package authors using hZjñOubhä)rP}rP(hYX``build-type: configure``hi}rP(hk]hl]hm]hn]hq]uhZjñOhu]rPh~Xbuild-type: configurer P…r P}r P(hYUhZjPubahghìubh~X‰ should be aware of these restrictions; because users may be unexpectedly constrained and face mysterious errors, it is recommended that r P…r P}rP(hYX‰ should be aware of these restrictions; because users may be unexpectedly constrained and face mysterious errors, it is recommended that hZjñOubhä)rP}rP(hYX``build-type: configure``hi}rP(hk]hl]hm]hn]hq]uhZjñOhu]rPh~Xbuild-type: configurerP…rP}rP(hYUhZjPubahghìubh~X' is only used where strictly necessary.rP…rP}rP(hYX' is only used where strictly necessary.hZjñOubeubaubeubh[)rP}rP(hYUhZj Nhehfhghhhi}rP(hk]hl]hm]hn]rPjUJahq]rPhBauhsM¦hthhu]rP(hw)rP}r P(hYX Portabilityr!PhZjPhehfhgh{hi}r"P(hk]hl]hm]hn]hq]uhsM¦hthhu]r#Ph~X Portabilityr$P…r%P}r&P(hYj!PheNhsNhthhZjPubaubh‚)r'P}r(P(hYXOne of the purposes of Cabal is to make it easier to build packages on different platforms (operating systems and CPU architectures), with different compiler versions and indeed even with different Haskell implementations. (Yes, there are Haskell implementations other than GHC!)r)PhZjPhehfhgh†hi}r*P(hk]hl]hm]hn]hq]uhsM¨hthhu]r+Ph~XOne of the purposes of Cabal is to make it easier to build packages on different platforms (operating systems and CPU architectures), with different compiler versions and indeed even with different Haskell implementations. (Yes, there are Haskell implementations other than GHC!)r,P…r-P}r.P(hYj)PheNhsNhthhZj'Pubaubh‚)r/P}r0P(hYXCabal 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.r1PhZjPhehfhgh†hi}r2P(hk]hl]hm]hn]hq]uhsM®hthhu]r3Ph~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.r4P…r5P}r6P(hYj1PheNhsNhthhZj/Pubaubh‚)r7P}r8P(hYX¾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.hZjPhehfhgh†hi}r9P(hk]hl]hm]hn]hq]uhsM³hthhu]r:P(h~X9For example a package author can list in the package’s r;P…rP}r?P(hYX ``.cabal``hi}r@P(hk]hl]hm]hn]hq]uhZj7Phu]rAPh~X.cabalrBP…rCP}rDP(hYUhZj>Pubahghì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.rEP…rFP}rGP(hYX} 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.heNhsNhthhZj7Pubeubh‚)rHP}rIP(hYXÇ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).rJPhZjPhehfhgh†hi}rKP(hk]hl]hm]hn]hq]uhsM»hthhu]rLPh~XÇAnother similar example is linking with foreign libraries. Rather than specifying GHC flags directly, the package author can list the libraries that are needed and the build system will take care of using the right flags for the compiler. Additionally this makes it easier for tools to discover what system C libraries a package needs, which is useful for tracking dependencies on system libraries (e.g. when translating into Linux distribution packages).rMP…rNP}rOP(hYjJPheNhsNhthhZjHPubaubh‚)rPP}rQP(hYX]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.rRPhZjPhehfhgh†hi}rSP(hk]hl]hm]hn]hq]uhsMÃhthhu]rTPh~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.rUP…rVP}rWP(hYjRPheNhsNhthhZjPPubaubh‚)rXP}rYP(hYXzWhere 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.rZPhZjPhehfhgh†hi}r[P(hk]hl]hm]hn]hq]uhsMÉhthhu]r\Ph~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.r]P…r^P}r_P(hYjZPheNhsNhthhZjXPubaubeubeubhcehYUU transformerr`PNU footnote_refsraP}rbPUrefnamesrcP}rdP(Xforeign libraries]rePj¨'aXpvp]rfP(j$+j’+jÒ+j=,j\,j-ej ]rgPjaXpackage properties]rhPjaXconditional blocks]riPjú>aXbuild information]rjP(jÒjæj˜jt"j$j¤HjÚCjYjàeXpackage descriptions]rkP(jEjüejÉ]rlPjÆaXhackage]rmPj‡aXsystem-dependent parameters]rnP(j’jij¯j@*j#5jÍ:jè;eXhaddock]roP(jIjP eXpackage versioning policy]rpP(j€Nj¼eXabnf]rqP(j/j‰j?eXmore complex packages]rrPj•ajì]rsPjéaj%]rtPj"aj³]ruP(j°jJ*jÍeuUsymbol_footnotesrvP]rwPUautofootnote_refsrxP]ryPUsymbol_footnote_refsrzP]r{PU citationsr|P]r}PhthU current_liner~PNUtransform_messagesrP]r€P(hV)rP}r‚P(hYUhi}rƒP(hk]UlevelKhn]hm]r„PjJaUsourcehfhl]hq]UlineMoUtypej0Juhu]r…Ph‚)r†P}r‡P(hYUhi}rˆP(hk]hl]hm]hn]hq]uhZjPhu]r‰Ph~X2Duplicate implicit target name: "foo-bench.cabal".rŠP…r‹P}rŒP(hYUhZj†Pubahgh†ubahgj-JubhV)rP}rŽP(hYUhi}rP(hk]UlevelKhn]hm]Usourcehfhl]hq]UlineM‚Utypej0Juhu]rPh‚)r‘P}r’P(hYUhi}r“P(hk]hl]hm]hn]hq]uhZjPhu]r”Ph~X-Hyperlink target "sublibs" is not referenced.r•P…r–P}r—P(hYUhZj‘Pubahgh†ubahgj-JubhV)r˜P}r™P(hYUhi}ršP(hk]UlevelKhn]hm]Usourcehfhl]hq]UlineM<Utypej0Juhu]r›Ph‚)rœP}rP(hYUhi}ržP(hk]hl]hm]hn]hq]uhZj˜Phu]rŸPh~X2Hyperlink target "buildtoolsbc" is not referenced.r P…r¡P}r¢P(hYUhZjœPubahgh†ubahgj-JubhV)r£P}r¤P(hYUhi}r¥P(hk]UlevelKhn]hm]Usourcehfhl]hq]UlineMDUtypej0Juhu]r¦Ph‚)r§P}r¨P(hYUhi}r©P(hk]hl]hm]hn]hq]uhZj£Phu]rªPh~X3Hyperlink target "buildtoolsmap" is not referenced.r«P…r¬P}r­P(hYUhZj§Pubahgh†ubahgj-JubhV)r®P}r¯P(hYUhi}r°P(hk]UlevelKhn]hm]Usourcejú hl]hq]UlineM£ Utypej0Juhu]r±Ph‚)r²P}r³P(hYUhi}r´P(hk]hl]hm]hn]hq]uhZj®Phu]rµPh~X-Hyperlink target "haskell" is not referenced.r¶P…r·P}r¸P(hYUhZj²Pubahgh†ubahgj-JubhV)r¹P}rºP(hYUhi}r»P(hk]UlevelKhn]hm]Usourcejú hl]hq]UlineM« Utypej0Juhu]r¼Ph‚)r½P}r¾P(hYUhi}r¿P(hk]hl]hm]hn]hq]uhZj¹Phu]rÀPh~X,Hyperlink target "hoogle" is not referenced.rÁP…rÂP}rÃP(hYUhZj½Pubahgh†ubahgj-JubhV)rÄP}rÅP(hYUhi}rÆP(hk]UlevelKhn]hm]Usourcejú hl]hq]UlineM­ Utypej0Juhu]rÇPh‚)rÈP}rÉP(hYUhi}rÊP(hk]hl]hm]hn]hq]uhZjÄPhu]rËPh~X.Hyperlink target "hscolour" is not referenced.rÌP…rÍP}rÎP(hYUhZjÈPubahgh†ubahgj-JubeUreporterrÏPNUid_startrÐPKU autofootnotesrÑP]rÒPU citation_refsrÓP}rÔPUindirect_targetsrÕP]rÖPUsettingsr×P(cdocutils.frontend Values rØPorÙP}rÚP(Ufootnote_backlinksrÛPKUrecord_dependenciesrÜPNU language_coderÝPUenrÞPU tracebackrßPˆUpep_referencesràPNUstrip_commentsráPNU toc_backlinksrâPj3U rfc_base_urlrãPUhttps://tools.ietf.org/html/räPU datestampråPNU report_levelræPKUsmartquotes_localesrçPNU _destinationrèPNU halt_levelréPKU strip_classesrêPNh{NUerror_encoding_error_handlerrëPUbackslashreplacerìPUdebugríPNUembed_stylesheetrîP‰Uoutput_encoding_error_handlerrïPUstrictrðPU sectnum_xformrñPKUdump_transformsròPNU docinfo_xformróPKUwarning_streamrôPNUpep_file_url_templaterõPUpep-%04dröPUexit_status_levelr÷PKUconfigrøPNUstrict_visitorrùPNUcloak_email_addressesrúPˆUtrim_footnote_reference_spacerûP‰UenvrüPNUdump_pseudo_xmlrýPNUexpose_internalsrþPNUsectsubtitle_xformrÿP‰U source_linkrQNUrfc_referencesrQNUoutput_encodingrQUutf-8rQU source_urlrQNUinput_encodingrQU utf-8-sigrQU_disable_configrQNU id_prefixrQUUcharacter_level_inline_markupr Q‰U tab_widthr QKUerror_encodingr QUUTF-8r QU_sourcer QhfUgettext_compactrQˆU generatorrQNUdump_internalsrQNU smart_quotesrQˆU pep_base_urlrQU https://www.python.org/dev/peps/rQUsyntax_highlightrQUlongrQUinput_encoding_error_handlerrQjðPUauto_id_prefixrQUidrQUdoctitle_xformrQ‰Ustrip_elements_with_classesrQNU _config_filesrQ]Ufile_insertion_enabledrQˆU raw_enabledrQKU dump_settingsrQNubUsymbol_footnote_startrQKUidsr Q}r!Q(jä?jà?j›&j—&j\j+*jÓ>jÏ>jj™j¶Fj²FjŸ6j›6jW jS j†j‚jujqj¼>j¸>jhþj~>jz>j(:j$:jCGj?Gj“jªj&j&j j jÂj¾jÃ.j¿.jAj=j2j2jejajVJjýOj(j#jRJjlOjPJjYNj} jy j#2j$2jâ:jÞ:j†$j‚$jHjDjý6jù6jBj=jµj±jXJj Nj:.j6.jj<jf<jZHjVHjKhajÐjN>j jjLJj’Oj¥j¦j)j‰)j#jjÊj¶j‡BjƒBjjjÝ7jÙ7jh#jd#jT9jP9j‰9j…9jS8jO8j(j (jjCjfCjºHj¶Hj«j¦jTJjÍJj±&j­&jJjJjN&jJ&jõjñji>jd>j5&j0&jØIh\j!jjJjJjE"jA"jÅjÁj@j™@jY6jU6jb0j^0jWJjÑNjéDjåDjjjG?jC?jìjèjjj¦>j¢>jrjnj½#j¹#j•jƒjOJjªMjÀ;j¼;jÚjÖj_j[jÌjÈj`*j\*jjjÒjÎjKJj#NjIjIjó9jï9j."j*"jjjªj¦jjj5j1jŠ"j†"jyFjuFjzjvjCj}CjjŒjIjDjj‹jˆ(j„(j1j1jjj&j"jàjÜjÐjÌj|?jx?j/j*jŸ<j›<j9j9jGjGjÿ&jû&jÔ<jÐ<jjj¥:j¡:jÂEj¾EjMJj LjMjGjWjSjUJjPjf'jb'j'/j#/j!jjo/jk/jCHh_j½'j¹'jý>jB@jý;jù;jJJjZJj#jþ"jþjúj0j0j*j&jÒjÎj#jjjŒj,Dj(Dj;j7j$j$jSJj«LhphcjÇ&jÃ&j85j45j[jWjÉjÅj÷BjóBjNJjbKj•%j‘%j¥j¡jDDj?DjÔ#jÐ#jõ(jñ(jòjîjj™j"jjŸ5j›5j¡IjIj