packages feed

portage-hs (empty) → 0.1.0.0

raw patch · 17 files changed

+2833/−0 lines, 17 filesdep +QuickCheckdep +basedep +conduit

Dependencies added: QuickCheck, base, conduit, containers, directory, filepath, hashable, mtl, parsable, parsable-test, portage-hs, pretty-simple, process, tasty, tasty-hunit, text, transformers

Files

+ CHANGELOG.md view
@@ -0,0 +1,5 @@+# Revision history for portage-hs++## 0.1.0.0 -- YYYY-mm-dd++* First version. Released on an unsuspecting world.
+ LICENSE view
@@ -0,0 +1,661 @@+                    GNU AFFERO GENERAL PUBLIC LICENSE+                       Version 3, 19 November 2007++ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>+ Everyone is permitted to copy and distribute verbatim copies+ of this license document, but changing it is not allowed.++                            Preamble++  The GNU Affero General Public License is a free, copyleft license for+software and other kinds of works, specifically designed to ensure+cooperation with the community in the case of network server software.++  The licenses for most software and other practical works are designed+to take away your freedom to share and change the works.  By contrast,+our General Public Licenses are intended to guarantee your freedom to+share and change all versions of a program--to make sure it remains free+software for all its users.++  When we speak of free software, we are referring to freedom, not+price.  Our General Public Licenses are designed to make sure that you+have the freedom to distribute copies of free software (and charge for+them if you wish), that you receive source code or can get it if you+want it, that you can change the software or use pieces of it in new+free programs, and that you know you can do these things.++  Developers that use our General Public Licenses protect your rights+with two steps: (1) assert copyright on the software, and (2) offer+you this License which gives you legal permission to copy, distribute+and/or modify the software.++  A secondary benefit of defending all users' freedom is that+improvements made in alternate versions of the program, if they+receive widespread use, become available for other developers to+incorporate.  Many developers of free software are heartened and+encouraged by the resulting cooperation.  However, in the case of+software used on network servers, this result may fail to come about.+The GNU General Public License permits making a modified version and+letting the public access it on a server without ever releasing its+source code to the public.++  The GNU Affero General Public License is designed specifically to+ensure that, in such cases, the modified source code becomes available+to the community.  It requires the operator of a network server to+provide the source code of the modified version running there to the+users of that server.  Therefore, public use of a modified version, on+a publicly accessible server, gives the public access to the source+code of the modified version.++  An older license, called the Affero General Public License and+published by Affero, was designed to accomplish similar goals.  This is+a different license, not a version of the Affero GPL, but Affero has+released a new version of the Affero GPL which permits relicensing under+this license.++  The precise terms and conditions for copying, distribution and+modification follow.++                       TERMS AND CONDITIONS++  0. Definitions.++  "This License" refers to version 3 of the GNU Affero General Public License.++  "Copyright" also means copyright-like laws that apply to other kinds of+works, such as semiconductor masks.++  "The Program" refers to any copyrightable work licensed under this+License.  Each licensee is addressed as "you".  "Licensees" and+"recipients" may be individuals or organizations.++  To "modify" a work means to copy from or adapt all or part of the work+in a fashion requiring copyright permission, other than the making of an+exact copy.  The resulting work is called a "modified version" of the+earlier work or a work "based on" the earlier work.++  A "covered work" means either the unmodified Program or a work based+on the Program.++  To "propagate" a work means to do anything with it that, without+permission, would make you directly or secondarily liable for+infringement under applicable copyright law, except executing it on a+computer or modifying a private copy.  Propagation includes copying,+distribution (with or without modification), making available to the+public, and in some countries other activities as well.++  To "convey" a work means any kind of propagation that enables other+parties to make or receive copies.  Mere interaction with a user through+a computer network, with no transfer of a copy, is not conveying.++  An interactive user interface displays "Appropriate Legal Notices"+to the extent that it includes a convenient and prominently visible+feature that (1) displays an appropriate copyright notice, and (2)+tells the user that there is no warranty for the work (except to the+extent that warranties are provided), that licensees may convey the+work under this License, and how to view a copy of this License.  If+the interface presents a list of user commands or options, such as a+menu, a prominent item in the list meets this criterion.++  1. Source Code.++  The "source code" for a work means the preferred form of the work+for making modifications to it.  "Object code" means any non-source+form of a work.++  A "Standard Interface" means an interface that either is an official+standard defined by a recognized standards body, or, in the case of+interfaces specified for a particular programming language, one that+is widely used among developers working in that language.++  The "System Libraries" of an executable work include anything, other+than the work as a whole, that (a) is included in the normal form of+packaging a Major Component, but which is not part of that Major+Component, and (b) serves only to enable use of the work with that+Major Component, or to implement a Standard Interface for which an+implementation is available to the public in source code form.  A+"Major Component", in this context, means a major essential component+(kernel, window system, and so on) of the specific operating system+(if any) on which the executable work runs, or a compiler used to+produce the work, or an object code interpreter used to run it.++  The "Corresponding Source" for a work in object code form means all+the source code needed to generate, install, and (for an executable+work) run the object code and to modify the work, including scripts to+control those activities.  However, it does not include the work's+System Libraries, or general-purpose tools or generally available free+programs which are used unmodified in performing those activities but+which are not part of the work.  For example, Corresponding Source+includes interface definition files associated with source files for+the work, and the source code for shared libraries and dynamically+linked subprograms that the work is specifically designed to require,+such as by intimate data communication or control flow between those+subprograms and other parts of the work.++  The Corresponding Source need not include anything that users+can regenerate automatically from other parts of the Corresponding+Source.++  The Corresponding Source for a work in source code form is that+same work.++  2. Basic Permissions.++  All rights granted under this License are granted for the term of+copyright on the Program, and are irrevocable provided the stated+conditions are met.  This License explicitly affirms your unlimited+permission to run the unmodified Program.  The output from running a+covered work is covered by this License only if the output, given its+content, constitutes a covered work.  This License acknowledges your+rights of fair use or other equivalent, as provided by copyright law.++  You may make, run and propagate covered works that you do not+convey, without conditions so long as your license otherwise remains+in force.  You may convey covered works to others for the sole purpose+of having them make modifications exclusively for you, or provide you+with facilities for running those works, provided that you comply with+the terms of this License in conveying all material for which you do+not control copyright.  Those thus making or running the covered works+for you must do so exclusively on your behalf, under your direction+and control, on terms that prohibit them from making any copies of+your copyrighted material outside their relationship with you.++  Conveying under any other circumstances is permitted solely under+the conditions stated below.  Sublicensing is not allowed; section 10+makes it unnecessary.++  3. Protecting Users' Legal Rights From Anti-Circumvention Law.++  No covered work shall be deemed part of an effective technological+measure under any applicable law fulfilling obligations under article+11 of the WIPO copyright treaty adopted on 20 December 1996, or+similar laws prohibiting or restricting circumvention of such+measures.++  When you convey a covered work, you waive any legal power to forbid+circumvention of technological measures to the extent such circumvention+is effected by exercising rights under this License with respect to+the covered work, and you disclaim any intention to limit operation or+modification of the work as a means of enforcing, against the work's+users, your or third parties' legal rights to forbid circumvention of+technological measures.++  4. Conveying Verbatim Copies.++  You may convey verbatim copies of the Program's source code as you+receive it, in any medium, provided that you conspicuously and+appropriately publish on each copy an appropriate copyright notice;+keep intact all notices stating that this License and any+non-permissive terms added in accord with section 7 apply to the code;+keep intact all notices of the absence of any warranty; and give all+recipients a copy of this License along with the Program.++  You may charge any price or no price for each copy that you convey,+and you may offer support or warranty protection for a fee.++  5. Conveying Modified Source Versions.++  You may convey a work based on the Program, or the modifications to+produce it from the Program, in the form of source code under the+terms of section 4, provided that you also meet all of these conditions:++    a) The work must carry prominent notices stating that you modified+    it, and giving a relevant date.++    b) The work must carry prominent notices stating that it is+    released under this License and any conditions added under section+    7.  This requirement modifies the requirement in section 4 to+    "keep intact all notices".++    c) You must license the entire work, as a whole, under this+    License to anyone who comes into possession of a copy.  This+    License will therefore apply, along with any applicable section 7+    additional terms, to the whole of the work, and all its parts,+    regardless of how they are packaged.  This License gives no+    permission to license the work in any other way, but it does not+    invalidate such permission if you have separately received it.++    d) If the work has interactive user interfaces, each must display+    Appropriate Legal Notices; however, if the Program has interactive+    interfaces that do not display Appropriate Legal Notices, your+    work need not make them do so.++  A compilation of a covered work with other separate and independent+works, which are not by their nature extensions of the covered work,+and which are not combined with it such as to form a larger program,+in or on a volume of a storage or distribution medium, is called an+"aggregate" if the compilation and its resulting copyright are not+used to limit the access or legal rights of the compilation's users+beyond what the individual works permit.  Inclusion of a covered work+in an aggregate does not cause this License to apply to the other+parts of the aggregate.++  6. Conveying Non-Source Forms.++  You may convey a covered work in object code form under the terms+of sections 4 and 5, provided that you also convey the+machine-readable Corresponding Source under the terms of this License,+in one of these ways:++    a) Convey the object code in, or embodied in, a physical product+    (including a physical distribution medium), accompanied by the+    Corresponding Source fixed on a durable physical medium+    customarily used for software interchange.++    b) Convey the object code in, or embodied in, a physical product+    (including a physical distribution medium), accompanied by a+    written offer, valid for at least three years and valid for as+    long as you offer spare parts or customer support for that product+    model, to give anyone who possesses the object code either (1) a+    copy of the Corresponding Source for all the software in the+    product that is covered by this License, on a durable physical+    medium customarily used for software interchange, for a price no+    more than your reasonable cost of physically performing this+    conveying of source, or (2) access to copy the+    Corresponding Source from a network server at no charge.++    c) Convey individual copies of the object code with a copy of the+    written offer to provide the Corresponding Source.  This+    alternative is allowed only occasionally and noncommercially, and+    only if you received the object code with such an offer, in accord+    with subsection 6b.++    d) Convey the object code by offering access from a designated+    place (gratis or for a charge), and offer equivalent access to the+    Corresponding Source in the same way through the same place at no+    further charge.  You need not require recipients to copy the+    Corresponding Source along with the object code.  If the place to+    copy the object code is a network server, the Corresponding Source+    may be on a different server (operated by you or a third party)+    that supports equivalent copying facilities, provided you maintain+    clear directions next to the object code saying where to find the+    Corresponding Source.  Regardless of what server hosts the+    Corresponding Source, you remain obligated to ensure that it is+    available for as long as needed to satisfy these requirements.++    e) Convey the object code using peer-to-peer transmission, provided+    you inform other peers where the object code and Corresponding+    Source of the work are being offered to the general public at no+    charge under subsection 6d.++  A separable portion of the object code, whose source code is excluded+from the Corresponding Source as a System Library, need not be+included in conveying the object code work.++  A "User Product" is either (1) a "consumer product", which means any+tangible personal property which is normally used for personal, family,+or household purposes, or (2) anything designed or sold for incorporation+into a dwelling.  In determining whether a product is a consumer product,+doubtful cases shall be resolved in favor of coverage.  For a particular+product received by a particular user, "normally used" refers to a+typical or common use of that class of product, regardless of the status+of the particular user or of the way in which the particular user+actually uses, or expects or is expected to use, the product.  A product+is a consumer product regardless of whether the product has substantial+commercial, industrial or non-consumer uses, unless such uses represent+the only significant mode of use of the product.++  "Installation Information" for a User Product means any methods,+procedures, authorization keys, or other information required to install+and execute modified versions of a covered work in that User Product from+a modified version of its Corresponding Source.  The information must+suffice to ensure that the continued functioning of the modified object+code is in no case prevented or interfered with solely because+modification has been made.++  If you convey an object code work under this section in, or with, or+specifically for use in, a User Product, and the conveying occurs as+part of a transaction in which the right of possession and use of the+User Product is transferred to the recipient in perpetuity or for a+fixed term (regardless of how the transaction is characterized), the+Corresponding Source conveyed under this section must be accompanied+by the Installation Information.  But this requirement does not apply+if neither you nor any third party retains the ability to install+modified object code on the User Product (for example, the work has+been installed in ROM).++  The requirement to provide Installation Information does not include a+requirement to continue to provide support service, warranty, or updates+for a work that has been modified or installed by the recipient, or for+the User Product in which it has been modified or installed.  Access to a+network may be denied when the modification itself materially and+adversely affects the operation of the network or violates the rules and+protocols for communication across the network.++  Corresponding Source conveyed, and Installation Information provided,+in accord with this section must be in a format that is publicly+documented (and with an implementation available to the public in+source code form), and must require no special password or key for+unpacking, reading or copying.++  7. Additional Terms.++  "Additional permissions" are terms that supplement the terms of this+License by making exceptions from one or more of its conditions.+Additional permissions that are applicable to the entire Program shall+be treated as though they were included in this License, to the extent+that they are valid under applicable law.  If additional permissions+apply only to part of the Program, that part may be used separately+under those permissions, but the entire Program remains governed by+this License without regard to the additional permissions.++  When you convey a copy of a covered work, you may at your option+remove any additional permissions from that copy, or from any part of+it.  (Additional permissions may be written to require their own+removal in certain cases when you modify the work.)  You may place+additional permissions on material, added by you to a covered work,+for which you have or can give appropriate copyright permission.++  Notwithstanding any other provision of this License, for material you+add to a covered work, you may (if authorized by the copyright holders of+that material) supplement the terms of this License with terms:++    a) Disclaiming warranty or limiting liability differently from the+    terms of sections 15 and 16 of this License; or++    b) Requiring preservation of specified reasonable legal notices or+    author attributions in that material or in the Appropriate Legal+    Notices displayed by works containing it; or++    c) Prohibiting misrepresentation of the origin of that material, or+    requiring that modified versions of such material be marked in+    reasonable ways as different from the original version; or++    d) Limiting the use for publicity purposes of names of licensors or+    authors of the material; or++    e) Declining to grant rights under trademark law for use of some+    trade names, trademarks, or service marks; or++    f) Requiring indemnification of licensors and authors of that+    material by anyone who conveys the material (or modified versions of+    it) with contractual assumptions of liability to the recipient, for+    any liability that these contractual assumptions directly impose on+    those licensors and authors.++  All other non-permissive additional terms are considered "further+restrictions" within the meaning of section 10.  If the Program as you+received it, or any part of it, contains a notice stating that it is+governed by this License along with a term that is a further+restriction, you may remove that term.  If a license document contains+a further restriction but permits relicensing or conveying under this+License, you may add to a covered work material governed by the terms+of that license document, provided that the further restriction does+not survive such relicensing or conveying.++  If you add terms to a covered work in accord with this section, you+must place, in the relevant source files, a statement of the+additional terms that apply to those files, or a notice indicating+where to find the applicable terms.++  Additional terms, permissive or non-permissive, may be stated in the+form of a separately written license, or stated as exceptions;+the above requirements apply either way.++  8. Termination.++  You may not propagate or modify a covered work except as expressly+provided under this License.  Any attempt otherwise to propagate or+modify it is void, and will automatically terminate your rights under+this License (including any patent licenses granted under the third+paragraph of section 11).++  However, if you cease all violation of this License, then your+license from a particular copyright holder is reinstated (a)+provisionally, unless and until the copyright holder explicitly and+finally terminates your license, and (b) permanently, if the copyright+holder fails to notify you of the violation by some reasonable means+prior to 60 days after the cessation.++  Moreover, your license from a particular copyright holder is+reinstated permanently if the copyright holder notifies you of the+violation by some reasonable means, this is the first time you have+received notice of violation of this License (for any work) from that+copyright holder, and you cure the violation prior to 30 days after+your receipt of the notice.++  Termination of your rights under this section does not terminate the+licenses of parties who have received copies or rights from you under+this License.  If your rights have been terminated and not permanently+reinstated, you do not qualify to receive new licenses for the same+material under section 10.++  9. Acceptance Not Required for Having Copies.++  You are not required to accept this License in order to receive or+run a copy of the Program.  Ancillary propagation of a covered work+occurring solely as a consequence of using peer-to-peer transmission+to receive a copy likewise does not require acceptance.  However,+nothing other than this License grants you permission to propagate or+modify any covered work.  These actions infringe copyright if you do+not accept this License.  Therefore, by modifying or propagating a+covered work, you indicate your acceptance of this License to do so.++  10. Automatic Licensing of Downstream Recipients.++  Each time you convey a covered work, the recipient automatically+receives a license from the original licensors, to run, modify and+propagate that work, subject to this License.  You are not responsible+for enforcing compliance by third parties with this License.++  An "entity transaction" is a transaction transferring control of an+organization, or substantially all assets of one, or subdividing an+organization, or merging organizations.  If propagation of a covered+work results from an entity transaction, each party to that+transaction who receives a copy of the work also receives whatever+licenses to the work the party's predecessor in interest had or could+give under the previous paragraph, plus a right to possession of the+Corresponding Source of the work from the predecessor in interest, if+the predecessor has it or can get it with reasonable efforts.++  You may not impose any further restrictions on the exercise of the+rights granted or affirmed under this License.  For example, you may+not impose a license fee, royalty, or other charge for exercise of+rights granted under this License, and you may not initiate litigation+(including a cross-claim or counterclaim in a lawsuit) alleging that+any patent claim is infringed by making, using, selling, offering for+sale, or importing the Program or any portion of it.++  11. Patents.++  A "contributor" is a copyright holder who authorizes use under this+License of the Program or a work on which the Program is based.  The+work thus licensed is called the contributor's "contributor version".++  A contributor's "essential patent claims" are all patent claims+owned or controlled by the contributor, whether already acquired or+hereafter acquired, that would be infringed by some manner, permitted+by this License, of making, using, or selling its contributor version,+but do not include claims that would be infringed only as a+consequence of further modification of the contributor version.  For+purposes of this definition, "control" includes the right to grant+patent sublicenses in a manner consistent with the requirements of+this License.++  Each contributor grants you a non-exclusive, worldwide, royalty-free+patent license under the contributor's essential patent claims, to+make, use, sell, offer for sale, import and otherwise run, modify and+propagate the contents of its contributor version.++  In the following three paragraphs, a "patent license" is any express+agreement or commitment, however denominated, not to enforce a patent+(such as an express permission to practice a patent or covenant not to+sue for patent infringement).  To "grant" such a patent license to a+party means to make such an agreement or commitment not to enforce a+patent against the party.++  If you convey a covered work, knowingly relying on a patent license,+and the Corresponding Source of the work is not available for anyone+to copy, free of charge and under the terms of this License, through a+publicly available network server or other readily accessible means,+then you must either (1) cause the Corresponding Source to be so+available, or (2) arrange to deprive yourself of the benefit of the+patent license for this particular work, or (3) arrange, in a manner+consistent with the requirements of this License, to extend the patent+license to downstream recipients.  "Knowingly relying" means you have+actual knowledge that, but for the patent license, your conveying the+covered work in a country, or your recipient's use of the covered work+in a country, would infringe one or more identifiable patents in that+country that you have reason to believe are valid.++  If, pursuant to or in connection with a single transaction or+arrangement, you convey, or propagate by procuring conveyance of, a+covered work, and grant a patent license to some of the parties+receiving the covered work authorizing them to use, propagate, modify+or convey a specific copy of the covered work, then the patent license+you grant is automatically extended to all recipients of the covered+work and works based on it.++  A patent license is "discriminatory" if it does not include within+the scope of its coverage, prohibits the exercise of, or is+conditioned on the non-exercise of one or more of the rights that are+specifically granted under this License.  You may not convey a covered+work if you are a party to an arrangement with a third party that is+in the business of distributing software, under which you make payment+to the third party based on the extent of your activity of conveying+the work, and under which the third party grants, to any of the+parties who would receive the covered work from you, a discriminatory+patent license (a) in connection with copies of the covered work+conveyed by you (or copies made from those copies), or (b) primarily+for and in connection with specific products or compilations that+contain the covered work, unless you entered into that arrangement,+or that patent license was granted, prior to 28 March 2007.++  Nothing in this License shall be construed as excluding or limiting+any implied license or other defenses to infringement that may+otherwise be available to you under applicable patent law.++  12. No Surrender of Others' Freedom.++  If conditions are imposed on you (whether by court order, agreement or+otherwise) that contradict the conditions of this License, they do not+excuse you from the conditions of this License.  If you cannot convey a+covered work so as to satisfy simultaneously your obligations under this+License and any other pertinent obligations, then as a consequence you may+not convey it at all.  For example, if you agree to terms that obligate you+to collect a royalty for further conveying from those to whom you convey+the Program, the only way you could satisfy both those terms and this+License would be to refrain entirely from conveying the Program.++  13. Remote Network Interaction; Use with the GNU General Public License.++  Notwithstanding any other provision of this License, if you modify the+Program, your modified version must prominently offer all users+interacting with it remotely through a computer network (if your version+supports such interaction) an opportunity to receive the Corresponding+Source of your version by providing access to the Corresponding Source+from a network server at no charge, through some standard or customary+means of facilitating copying of software.  This Corresponding Source+shall include the Corresponding Source for any work covered by version 3+of the GNU General Public License that is incorporated pursuant to the+following paragraph.++  Notwithstanding any other provision of this License, you have+permission to link or combine any covered work with a work licensed+under version 3 of the GNU General Public License into a single+combined work, and to convey the resulting work.  The terms of this+License will continue to apply to the part which is the covered work,+but the work with which it is combined will remain governed by version+3 of the GNU General Public License.++  14. Revised Versions of this License.++  The Free Software Foundation may publish revised and/or new versions of+the GNU Affero General Public License from time to time.  Such new versions+will be similar in spirit to the present version, but may differ in detail to+address new problems or concerns.++  Each version is given a distinguishing version number.  If the+Program specifies that a certain numbered version of the GNU Affero General+Public License "or any later version" applies to it, you have the+option of following the terms and conditions either of that numbered+version or of any later version published by the Free Software+Foundation.  If the Program does not specify a version number of the+GNU Affero General Public License, you may choose any version ever published+by the Free Software Foundation.++  If the Program specifies that a proxy can decide which future+versions of the GNU Affero General Public License can be used, that proxy's+public statement of acceptance of a version permanently authorizes you+to choose that version for the Program.++  Later license versions may give you additional or different+permissions.  However, no additional obligations are imposed on any+author or copyright holder as a result of your choosing to follow a+later version.++  15. Disclaimer of Warranty.++  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.++  16. Limitation of Liability.++  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF+SUCH DAMAGES.++  17. Interpretation of Sections 15 and 16.++  If the disclaimer of warranty and limitation of liability provided+above cannot be given local legal effect according to their terms,+reviewing courts shall apply local law that most closely approximates+an absolute waiver of all civil liability in connection with the+Program, unless a warranty or assumption of liability accompanies a+copy of the Program in return for a fee.++                     END OF TERMS AND CONDITIONS++            How to Apply These Terms to Your New Programs++  If you develop a new program, and you want it to be of the greatest+possible use to the public, the best way to achieve this is to make it+free software which everyone can redistribute and change under these terms.++  To do so, attach the following notices to the program.  It is safest+to attach them to the start of each source file to most effectively+state the exclusion of warranty; and each file should have at least+the "copyright" line and a pointer to where the full notice is found.++    <one line to give the program's name and a brief idea of what it does.>+    Copyright (C) <year>  <name of author>++    This program is free software: you can redistribute it and/or modify+    it under the terms of the GNU Affero General Public License as published by+    the Free Software Foundation, either version 3 of the License, or+    (at your option) any later version.++    This program is distributed in the hope that it will be useful,+    but WITHOUT ANY WARRANTY; without even the implied warranty of+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the+    GNU Affero General Public License for more details.++    You should have received a copy of the GNU Affero General Public License+    along with this program.  If not, see <http://www.gnu.org/licenses/>.++Also add information on how to contact you by electronic and paper mail.++  If your software can interact with users remotely through a computer+network, you should also make sure that it provides a way for users to+get its source.  For example, if your program is a web application, its+interface could display a "Source" link that leads users to an archive+of the code.  There are many ways you could offer source, and different+solutions will be better for different programs; see section 13 for the+specific requirements.++  You should also get your employer (if you work as a programmer) or school,+if any, to sign a "copyright disclaimer" for the program, if necessary.+For more information on this, and how to apply and follow the GNU AGPL, see+<http://www.gnu.org/licenses/>.
+ portage-hs.cabal view
@@ -0,0 +1,164 @@+cabal-version:      3.0+name:               portage-hs+version:            0.1.0.0+synopsis:           Data structures and functions for interacting with the Portage package manager++tested-with:        GHC == { 9.0.2, 9.2.8, 9.4.8, 9.6.6, 9.8.4, 9.10.1, 9.12.1 }++description:+    Currently, this includes:++    * data structures for package atoms+    * parsers for atoms, emerge output, and CONTENTS files+    * functions for running emerge+    * lots of tests++homepage:           https://github.com/gentoo-haskell/cabal-portage/tree/main/portage-hs+bug-reports:        https://github.com/gentoo-haskell/cabal-portage/issues++license:            AGPL-3.0-only+license-file:       LICENSE+author:             Gentoo Authors+maintainer:         hololeap@protonmail.com++copyright:          Copyright (C) 2022-2025 Gentoo Authors+category:           System+extra-doc-files: CHANGELOG.md++extra-source-files:+    test/data/**/*.stdout++source-repository head+    type:           git+    location:       https://github.com/hololeap/cabal-portage.git+    branch:         main+    subdir:         portage-hs++flag gentoo-tests+    description: Enable tests that depend on a working Gentoo environment+    default:     False+    manual:      True++flag pedantic+    description: Enable -Werror+    default:     False+    manual:      True++common all+    ghc-options:        -Wall+                        -foptimal-applicative-do+    if flag(pedantic)+        ghc-options:    -Werror++    default-extensions:+        , StrictData++common fast+    ghc-options:        -threaded+                        -with-rtsopts=-N++library+    import: all+    exposed-modules:+        , Distribution.Portage.Types+        , Distribution.Portage.PkgDb+        , Distribution.Portage.PkgDb.Contents+        , Distribution.Portage.Emerge+        , Distribution.Portage.Emerge.Parser++    hs-source-dirs:   src+    default-language: Haskell2010++    build-depends:+        , base >=4.13 && <4.22+        , containers <0.8+        , directory <1.4+        , filepath <1.6+        , mtl <2.4+        , process <1.7+        , text <2.2+        , transformers <0.7+        , parsable <0.2+        , portage-hs-internal <0.2++    other-extensions:+        , ApplicativeDo+        , FlexibleContexts+        , LambdaCase+        , NoImplicitPrelude+        , OverloadedStrings+        , ScopedTypeVariables+        , TypeFamilies++library portage-hs-internal+    import: all+    exposed-modules:+        , Internal.Distribution.Portage.Types++    build-depends:+        , base >=4.13 && <4.22+        , hashable <1.6+        , parsable <0.2+    hs-source-dirs:   src-internal+    default-language: Haskell2010+    other-extensions:+        , DeriveDataTypeable+        , DeriveGeneric+        , DerivingVia+        , FlexibleContexts+        , FlexibleInstances+        , GeneralizedNewtypeDeriving+        , LambdaCase+        , MultiParamTypeClasses+        , OverloadedStrings+        , ScopedTypeVariables+        , TypeApplications+        , TypeFamilies+        , UndecidableInstances++test-suite portage-hs-test+    import: all, fast+    default-language: Haskell2010+    type:             exitcode-stdio-1.0+    hs-source-dirs:   test+    main-is:          Main.hs+    other-modules:+        , Emerge.ParserTests+        , Types.ValidityTests+        , Types.UnitTests+        , Paths_portage_hs+    autogen-modules:+        , Paths_portage_hs+    build-depends:+        , parsable <0.2+        , parsable-test <0.2+        , portage-hs <0.2+        , portage-hs-internal <0.2+        , base >=4.13 && <4.22+        , conduit <1.4+        , containers <0.8+        , directory <1.4+        , filepath <1.6+        , QuickCheck <2.16+        , tasty <1.6+        , tasty-hunit <0.11+        , text <2.2+        , transformers <0.7++    other-extensions:+        , CPP+        , FlexibleContexts+        , LambdaCase+        , ScopedTypeVariables+        , TypeApplications+        , ViewPatterns++    if flag(gentoo-tests)+        build-depends:+            , pretty-simple+        CPP-Options:+            -DGENTOO_TESTS+        other-modules:+            , Emerge.GentooTests+            , PkgDb.GentooTests+            , Types.GentooTests
+ src-internal/Internal/Distribution/Portage/Types.hs view
@@ -0,0 +1,590 @@+{-|+Module      : Distribution.Portage.Internal.Types++Types for internal use+-}++{-# Language DeriveAnyClass #-}+{-# Language DeriveDataTypeable #-}+{-# Language DeriveGeneric #-}+{-# Language DerivingVia #-}+{-# Language FlexibleContexts #-}+{-# Language FlexibleInstances #-}+{-# Language GeneralizedNewtypeDeriving #-}+{-# Language LambdaCase #-}+{-# Language MultiParamTypeClasses #-}+{-# Language OverloadedStrings #-}+{-# Language ScopedTypeVariables #-}+{-# Language TypeApplications #-}+{-# Language TypeFamilies #-}+{-# Language UndecidableInstances #-}++module Internal.Distribution.Portage.Types+    (+    -- * Types+      Package(..)+    , Category(..)+    , PkgName(..)+    , Slot(..)+    , SubSlot(..)+    , Repository(..)+--     , EBuildFileName (..)+    -- ** Versions+    , Version(..)+    , VersionNum(..)+    , VersionLetter(..)+    , VersionSuffix(..)+    , VersionSuffixNum(..)+    , VersionRevision(..)+    -- ** Constraints+    , ConstrainedDep(..)+    , toConstrainedDep+    , fromConstrainedDep+    , doesConstraintMatch+    , Operator(..)+    -- * Internal+    , FauxVersion(..)+    , FauxVersionNum(..)+    ) where++import Control.Applicative (Alternative, some)+import Data.Data (Data)+import Data.Function (on)+import Data.Hashable+import qualified Data.List as L+import Data.List.NonEmpty (NonEmpty(..))+import qualified Data.List.NonEmpty as NE+import GHC.Exts (IsList(..))+import GHC.Generics (Generic)+import GHC.Natural (Natural)++import Data.Parsable++newtype Category = Category+    { unwrapCategory :: String }+    deriving stock (Show, Eq, Ord, Data, Generic)+    deriving newtype (IsString, Printable)+    deriving anyclass Hashable++instance Stream s m Char => Parsable Category m u s where+    parserName = "portage category"+    parser = Category <$> wordAllowed wordStart wordRest+      where+        wordStart =+            [ isAsciiUpper+            , isAsciiLower+            , isDigit+            , (== '_')+            ]+        wordRest = wordStart +++            [ (== '+')+            , (== '-')+            , (== '.')+            ]++newtype PkgName = PkgName+    { unwrapPkgName :: String }+    deriving stock (Show, Eq, Ord, Data, Generic)+    deriving newtype (IsString, Printable)+    deriving anyclass Hashable++instance forall m u s. Stream s m Char => Parsable PkgName m u s where+    parserName = "portage package name"+    parser = PkgName <$> pkgParser wordStart wordRest+      where+        wordStart =+            [ isAsciiUpper+            , isAsciiLower+            , isDigit+            , (== '_')+            ]+        wordRest = (== '+') : (== '-') : wordStart++newtype VersionNum = VersionNum+    { unwrapVersionNum :: NonEmpty (NonEmpty Char) }+    deriving stock (Show, Eq, Data, Generic)+    deriving anyclass Hashable++-- See section 3.3 "Version Comparison" of the Package Manager Specification+instance Ord VersionNum where+    VersionNum (s1 :| ss1) `compare` VersionNum (s2 :| ss2)+        = toNat s1 `compare` toNat s2 -- Algorithm 3.2+            <> mconcat ((zipWith compRest `on` fmap trim) ss1 ss2) -- Algorithm 3.3+            <> length ss1 `compare` length ss2+      where+        compRest :: (Bool, NonEmpty Char) -> (Bool, NonEmpty Char) -> Ordering+        -- Neither side had a leading zero so we use numeric comparison+        compRest (False, c1) (False, c2) = toNat c1 `compare` toNat c2+        -- At least one side a had leading zero so we use string comparison+        compRest (_    , c1) (_    , c2) =       c1 `compare`       c2++        -- If a component starts with a '0', mark it True and remove any+        -- trailing 0s+        trim :: NonEmpty Char -> (Bool, NonEmpty Char)+        trim = \case+            ('0' :| xs) -> (True, '0' :| foldr skipTrailing0s [] xs)+            xs -> (False, xs)+          where+            skipTrailing0s '0' [] = []+            skipTrailing0s c cs = c:cs++        toNat :: NonEmpty Char -> Natural+        toNat = read . toList++instance IsList VersionNum where+    type instance Item VersionNum = NonEmpty Char+    fromList = VersionNum . fromList+    toList = toList . unwrapVersionNum++instance Printable VersionNum where+    toString = L.intercalate "." . NE.toList . fmap NE.toList . unwrapVersionNum++instance Stream s m Char => Parsable VersionNum m u s where+    parserName = "portage version number"+    parser = versionNumParser (`sepBy1` char '.') (NE.fromList <$>)++newtype VersionLetter = VersionLetter+    { unwrapVersionLetter :: Char }+    deriving stock (Show, Eq, Ord, Data, Generic)+    deriving anyclass Hashable++instance Printable VersionLetter where+    toString (VersionLetter l) = [l]++instance Stream s m Char => Parsable VersionLetter m u s where+    parserName = "portage version letter"+    parser = VersionLetter <$> satisfy isAsciiLower++data VersionSuffix+    = SuffixAlpha+    | SuffixBeta+    | SuffixPre+    | SuffixRC+    | SuffixP+    deriving stock (Show, Eq, Ord, Data, Generic, Bounded, Enum)+    deriving anyclass Hashable++instance Printable VersionSuffix where+    toString = \case+        SuffixAlpha -> "alpha"+        SuffixBeta  -> "beta"+        SuffixPre   -> "pre"+        SuffixRC    -> "rc"+        SuffixP     -> "p"++instance Stream s m Char => Parsable VersionSuffix m u s where+    parserName = "portage version suffix"+    parser = choice+        [ SuffixAlpha <$ try (string "alpha")+        , SuffixBeta  <$ try (string "beta")+        , SuffixPre   <$ try (string "pre")+        , SuffixRC    <$ try (string "rc")+        , SuffixP     <$ string "p"+        ]++newtype VersionSuffixNum = VersionSuffixNum+    { unwrapVersionSuffixNum :: NonEmpty Char }+    deriving stock (Show, Eq, Ord, Data, Generic)+    deriving anyclass Hashable++instance Printable VersionSuffixNum where+    toString = NE.toList . unwrapVersionSuffixNum++instance Stream s m Char => Parsable VersionSuffixNum m u s where+    parserName = "portage version suffix number"+    parser = VersionSuffixNum . NE.fromList <$> some (satisfy isDigit)++newtype VersionRevision = VersionRevision+    { unwrapVersionRevision :: NonEmpty Char }+    deriving stock (Show, Eq, Ord, Data, Generic)+    deriving anyclass Hashable++instance Printable VersionRevision where+    toString (VersionRevision r) = "r" ++ NE.toList r++instance Stream s m Char => Parsable VersionRevision m u s where+    parserName = "portage version revision"+    parser = do+        _ <- char 'r'+        VersionRevision . NE.fromList <$> some (satisfy isDigit)++data Version = Version+    { getVersionNum :: VersionNum+    , getVersionLetter :: Maybe VersionLetter+    , getVersionSuffixes :: [(VersionSuffix, Maybe VersionSuffixNum)]+    , getVersionRevision :: Maybe VersionRevision+    } deriving stock (Show, Eq, Data, Generic)+    deriving anyclass Hashable++-- See section 3.3 "Version Comparison" of the Package Manager Specification+instance Ord Version where+    Version n1 l1 s1 r1 `compare` Version n2 l2 s2 r2+        =  n1 `compare` n2+        <> l1 `compare` l2+        <> s1 `compareSuffixes` s2+        <> r1 `compareRevisions` r2+      where+        -- Algorithm 3.5+        compareSuffixes [] [] = EQ+        compareSuffixes ((SuffixP,_):_) [] = GT+        compareSuffixes ((_,_):_) [] = LT+        compareSuffixes [] ((SuffixP,_):_) = LT+        compareSuffixes [] ((_,_):_) = GT+        compareSuffixes (u1:us1) (u2:us2) =+            (compare `on` fmap toNat) u1 u2+                <> us1 `compareSuffixes` us2+          where+            toNat :: Maybe VersionSuffixNum -> Natural+            toNat = maybe (0 :: Natural) (read . toList . unwrapVersionSuffixNum)++        compareRevisions = compare `on`+            maybe (0 :: Natural) (read . NE.toList . unwrapVersionRevision)++instance Printable Version where+    toString (Version n l s r)+        = toString n+        ++ foldMap toString l+        ++ (s >>= suffixString)+        ++ foldMap (\x -> "-" ++ toString x) r+      where+        suffixString (ss,sn) = "_" ++ toString ss ++ foldMap toString sn++instance Stream s m Char => Parsable Version m u s where+    parserName = "portage version"+    parser = versionParser parser++data Operator+    = Lesser+    | LesserOrEqual+    | Equal+    | EqualAsterisk+    | EqualIgnoreRevision+    | GreaterOrEqual+    | Greater+    deriving stock (Show, Eq, Ord, Bounded, Enum, Data, Generic)+    deriving anyclass Hashable++data ConstrainedDep = ConstrainedDep+    { constrainedOperator   :: Operator+    , constrainedCategory   :: Category+    , constrainedPkgName    :: PkgName+    , constrainedVersion    :: Version+    , constrainedSlot       :: Maybe Slot+    , constrainedRepository :: Maybe Repository+    } deriving stock (Show, Eq, Ord, Data, Generic)+      deriving anyclass Hashable++instance Printable ConstrainedDep where+    toString (ConstrainedDep o c n v ms mr)+        =  operStr+        ++ toString c+        ++ "/"+        ++ toString n+        ++ "-"+        ++ toString v+        ++ asterisk+        ++ foldMap (\s -> ":"  ++ toString s) ms+        ++ foldMap (\r -> "::" ++ toString r) mr+      where+        asterisk = case o of+            EqualAsterisk -> "*"+            _ -> ""++        operStr :: String+        operStr = case o of+            Lesser -> "<"+            LesserOrEqual -> "<="+            Greater -> ">"+            GreaterOrEqual -> ">="+            Equal -> "="+            EqualAsterisk -> "="+            EqualIgnoreRevision -> "~"++instance Stream s m Char => Parsable ConstrainedDep m u s where+    parserName = "portage package with version constraint"+    parser = do+        o <- operParser+        c <- parser+        _ <- char '/'+        n <- parser+        _ <- char '-'+        v <- parser+        o' <- option o $ try $ case o of+            Equal -> EqualAsterisk <$ char '*'+            _ -> char '*' *> fail "Unexpected asterisk (not Equal operator)"+        s <- optionMaybe $ try $ string ":"  *> parser+        r <- optionMaybe $ try $ string "::" *> parser+        pure $ ConstrainedDep o' c n v s r+      where+        operParser = choice+            [ char '>' *> option Greater (try (GreaterOrEqual <$ char '='))+            , char '<' *> option Lesser (try (LesserOrEqual <$ char '='))+            , Equal <$ char '='+            , EqualIgnoreRevision <$ char '~'+            ]++toConstrainedDep :: Operator -> Package -> Maybe ConstrainedDep+toConstrainedDep o (Package c n mv ms mr) =+    (\v -> ConstrainedDep o c n v ms mr) <$> mv++fromConstrainedDep :: ConstrainedDep -> Package+fromConstrainedDep (ConstrainedDep _ c p v ms mr) =+    Package c p (Just v) ms mr++-- | Uses "optimistic" matching, meaning: if a package does not provide+--   information that the constraint requires, it is assumed to be a match.+--+--   For example, the constraint @<dev-haskell/text-2.2:0::haskell@ matches+--   @dev-haskell/text@ but not @dev-haskell/text-2.3@.+doesConstraintMatch :: ConstrainedDep -> Package -> Bool+doesConstraintMatch (ConstrainedDep co cc cn cv cs cr) (Package pc pn pv ps pr)+    | cc /= pc = False+    | cn /= pn = False+    | otherwise+        =  checkConstrained cs ps+        && checkConstrained cr pr+        && case pv of+            Nothing -> True -- No version info on the package means it matches+            Just v -> case co of+                Lesser -> v < cv+                LesserOrEqual -> v <= cv+                Equal -> v == cv+                GreaterOrEqual -> v >= cv+                Greater -> v > cv+                EqualIgnoreRevision ->+                    v { getVersionRevision = Nothing }+                        == cv { getVersionRevision = Nothing }+                EqualAsterisk ->+                    checkEqAst+                        (toList (getVersionNum cv))+                        (toList (getVersionNum v))+  where+    checkEqAst [] [] = True+    checkEqAst (_cv:_cvs) [] = False+    checkEqAst [] (_v:_vs) = True+    checkEqAst (cv':cvs) (v:vs) = cv' == v && checkEqAst cvs vs++    checkConstrained :: Eq a => Maybe a -> Maybe a -> Bool+    checkConstrained m1 m2 = case (m1, m2) of+        -- Constraint specifies, package provides+        (Just x1, Just x2) -> x1 == x2+        -- Package does not specifiy+        _ -> True++data Slot = Slot+    { unwrapSlot :: String+    , getSubSlot :: Maybe SubSlot+    }+    deriving stock (Show, Eq, Ord, Data, Generic)+    deriving anyclass Hashable++instance Printable Slot where+    toString (Slot s mss)+        =  s+        ++ foldMap (\ss -> "/" ++ toString ss) mss++instance Stream s m Char => Parsable Slot m u s where+    parserName = "portage slot"+    parser = do+        s <- slotParser+        mss <- optionMaybe $ try $ char '/' *> parser+        pure $ Slot s mss++newtype SubSlot = SubSlot { unwrapSubSlot :: String }+    deriving stock (Show, Eq, Ord, Data, Generic)+    deriving newtype (IsString, Printable)+    deriving anyclass Hashable++instance Stream s m Char => Parsable SubSlot m u s where+    parserName = "portage sub-slot"+    parser = SubSlot <$> slotParser++slotParser :: Stream s m Char => ParsecT s u m String+slotParser = wordAllowed wordStart wordRest+  where+    wordStart =+        [ isAsciiUpper+        , isAsciiLower+        , isDigit+        , (== '_')+        ]+    wordRest = wordStart +++        [ (== '+')+        , (== '.')+        , (== '-')+        ]+++newtype Repository = Repository { unwrapRepository :: String }+    deriving stock (Show, Eq, Ord, Data, Generic)+    deriving newtype (IsString, Printable)+    deriving anyclass Hashable++instance Stream s m Char => Parsable Repository m u s where+    parserName = "portage repository"+    parser = Repository <$> pkgParser wordStart wordRest+      where+        wordStart =+            [ isAsciiUpper+            , isAsciiLower+            , isDigit+            , (== '_')+            ]++        wordRest = (== '-') : wordStart++data Package = Package+    { getCategory   :: Category+    , getPkgName    :: PkgName+    , getVersion    :: Maybe Version+    , getSlot       :: Maybe Slot+    , getRepository :: Maybe Repository+    }+    deriving stock (Show, Eq, Ord, Data, Generic)+    deriving anyclass Hashable++instance Printable Package where+    toString (Package c n mv ms mr)+        =  toString c+        ++ "/"+        ++ toString n+        ++ foldMap (\v -> "-"  ++ toString v) mv+        ++ foldMap (\s -> ":"  ++ toString s) ms+        ++ foldMap (\r -> "::" ++ toString r) mr++instance Stream s m Char => Parsable Package m u s where+    parserName = "portage package"+    parser = do+        c <- parser+        _ <- char '/'+        n <- parser+        v <- optionMaybe $ try $ string "-"  *> parser+        s <- optionMaybe $ try $ string ":"  *> parser+        r <- optionMaybe $ try $ string "::" *> parser+        pure $ Package c n v s r++-- data EBuildFileName = EBuildFileName+--     { ebuildName :: PkgName+--     , ebuildVersion :: Version+--     }+--     deriving stock (Show, Eq, Ord, Data, Generic)+--     deriving anyclass Hashable+--+-- instance Printable EBuildFileName where+--     toString (EBuildFileName n v)+--         =  toString n+--         ++ "-"+--         ++ toString v+--         ++ ".ebuild"+--+-- instance Stream s m Char => Parsable EBuildFileName m u s  where+--     parserName = "portage ebuild file name"+--     parser = do+--         n <- parser+--         _ <- char '-'+--         v <- parser+--         _ <- string ".ebuild"+--         pure $ EBuildFileName n v++-- | A type of Version that also forms valid PkgName and Repository strings:+--+--   "[A PkgName] must not end in a hyphen followed by anything matching the [Version]+--   syntax"+--   <https://projects.gentoo.org/pms/8/pms.html#x1-180003.1.2>+newtype FauxVersion = FauxVersion+    { unwrapFauxVersion :: Version }+    deriving stock (Show, Eq, Ord, Data, Generic)+    deriving newtype Printable+    deriving anyclass Hashable++instance Stream s m Char => Parsable FauxVersion m u s where+    parserName = "faux portage version"+    parser = FauxVersion <$> versionParser (unwrapFauxVersionNum <$> parser)++-- | A type of VersionNum which always has one digit. This avoids having '.' in+--   the resulting string, as this is an invalid character for both PkgName and+--   Category.+newtype FauxVersionNum = FauxVersionNum+    { unwrapFauxVersionNum :: VersionNum }+    deriving stock (Show, Eq, Ord, Data, Generic)+    deriving newtype Printable+    deriving anyclass Hashable++instance Stream s m Char => Parsable FauxVersionNum m u s where+    parserName = "faux portage version number"+    parser = FauxVersionNum <$> versionNumParser id pure++versionParser :: Stream s m Char+    => ParsecT s u m VersionNum -> ParsecT s u m Version+versionParser pn = do+        n <- pn+        l <- optionMaybe $ try parser+        s <- many $ do+            _ <- char '_'+            ss <- parser+            sn <- optionMaybe $ try parser+            pure (ss, sn)+        r <- optionMaybe $ try $ string "-" *> parser+        pure $ Version n l s r++versionNumParser :: Stream s m Char+    => (ParsecT s u m [Char] -> ParsecT s u m [a])+    -> (NonEmpty a -> NonEmpty (NonEmpty Char))+    -> ParsecT s u m VersionNum+versionNumParser f g = do+    ns <- f $ some $ satisfy isDigit+    pure $ VersionNum $ g $ NE.fromList ns++-- | Both 'PkgName' and 'Repository' have similar parsers+pkgParser :: forall s u m. Stream s m Char+    => [Char -> Bool]+    -> [Char -> Bool]+    -> ParsecT s u m String+pkgParser wordStart wordRest = (:) <$> satisfyAny wordStart <*> goOrEnd+  where+    goOrEnd :: ParsecT s u m String+    goOrEnd = try go <|> end++    -- If 'fauxV' gives back a 'Nothing', it means the wole parse ended with+    -- a Version string and we need to throw the error 'e'.+    go :: ParsecT s u m String+    go = do+        m <- choice+            [ try fauxV+            , Just <$> nextChar -- 'fauxV' did not match at all :)+            ]+        maybe e pure m++    -- Check for a hyphen followed by something that parses as a 'FauxVersion'.+    -- If this is matched, but there isn't a successful 'go' parser after it,+    -- the parser aborts.+    fauxV :: ParsecT s u m (Maybe String)+    fauxV = do+        h <- char '-'+        v <- parser @FauxVersion+        choice+            [ try $ do+                rest <- go -- Don't accept 'end' as a choice at this point+                pure $ Just $ h : toString v ++ rest+            , abort+            ]++    nextChar :: ParsecT s u m String+    nextChar = do+        c <- satisfyAny wordRest+        rest <- goOrEnd+        pure $ c : rest++    end :: ParsecT s u m String+    end = pure ""++    -- 'show' is used here to wrap the string in quotes+    e :: ParsecT s u m String+    e = fail $+            "ends in a hyphen followed by anything "+            ++ "matching the version syntax"++    -- This is a trick to abort without jumping to the next 'Alternative'+    -- choice.+    abort :: Alternative f => f (Maybe a)+    abort = pure Nothing
+ src/Distribution/Portage/Emerge.hs view
@@ -0,0 +1,73 @@+++module Distribution.Portage.Emerge+    ( EmergeArgs+    , StdOut+    , StdErr+    , emergeExe+    , upgradeWorldArgs+    , singleArgs+    , pretendArgs+    , stripPackageVersion+    , emergeProcess+    ) where++import Data.Text (Text)+import qualified Data.Text as T+import System.Exit+import System.Process++import Data.Parsable+import Distribution.Portage.Types++type EmergeArgs = [String]+type StdOut = Text+type StdErr = Text+++emergeExe :: FilePath+emergeExe = "/usr/bin/emerge"++upgradeWorldArgs :: EmergeArgs+upgradeWorldArgs = commonEmergeArgs +++    [ "--deep"+    , "--changed-use"+    , "--update"+    , "--complete-graph"+    , "@world"+    ]++singleArgs :: [Package] -> EmergeArgs+singleArgs ps = commonEmergeArgs +++    [ "--oneshot"+    , "--complete-graph"+    ] +++    (packageString <$> ps)++pretendArgs :: EmergeArgs+pretendArgs = [ "--pretend" ]++-- | Add a @'='@ character to the front of the string if the version is+--   specified.+packageString :: Package -> String+packageString p@(Package _ _ v _ _) =+    let pre = case v of+                Just _  -> "="+                Nothing -> ""+    in pre ++ toString p++stripPackageVersion :: Package -> Package+stripPackageVersion (Package c n _ s r) = Package c n Nothing s r++commonEmergeArgs :: EmergeArgs+commonEmergeArgs =+    [ "--ignore-default-opts"+    , "--color=n"+    , "--nospinner"+    , "--verbose"+    ]++emergeProcess :: FilePath -> EmergeArgs -> IO (ExitCode, StdOut, StdErr)+emergeProcess p a = do+    (c, o, e) <- readProcessWithExitCode p a ""+    pure (c, T.pack o, T.pack e)
+ src/Distribution/Portage/Emerge/Parser.hs view
@@ -0,0 +1,87 @@+{-# Language ApplicativeDo #-}+{-# Language FlexibleContexts #-}+{-# Language LambdaCase #-}+{-# Language OverloadedStrings #-}+{-# Language ScopedTypeVariables #-}+{-# Language TypeFamilies #-}++module Distribution.Portage.Emerge.Parser+    ( emergeParser+    ) where++import Control.Applicative (some)+-- import Control.Monad.Combinators+import Data.Coerce+import Data.Monoid (Last(..))+-- import qualified Data.List.NonEmpty as NE+import qualified Data.Set as S+import Data.Set (Set)+-- import Text.Parsec.Language (haskell)+-- import Text.Parsec.Token (GenTokenParser(decimal))+import Text.Read (readMaybe)++import Data.Parsable hiding (space)+import Distribution.Portage.Types++-- | Returns a set of packages and the count as reported by the emerge output+emergeParser :: (Stream s m Char, Parsable Package m u s)+    => ParsecT s u m (Integer, Set Package)+emergeParser = do+    r <- sepEndBy lineParser newline+    case coerce $ foldMap go r of+        (Nothing, _) -> fail e+        (Just i , s) -> pure (i, s)+  where+    go :: EmergeLine -> (Last Integer, Set Package)+    go = coerce . \case+        PackageLine p -> (Nothing, S.singleton p)+        TotalLine   i -> (Just i , S.empty      )+        OtherLine     -> (Nothing, S.empty      )++    e :: String+    e = "emerge output contains a package total"++data EmergeLine+    = PackageLine Package+    | TotalLine Integer+    | OtherLine+    deriving (Show, Eq, Ord)+++lineParser :: (Stream s m Char, Parsable Package m u s)+    => ParsecT s u m EmergeLine+lineParser = choice+    [ PackageLine <$> try packageLine+    , TotalLine   <$> try totalLine+    , OtherLine   <$  skipRest+    ]++packageLine :: (Stream s m Char, Parsable Package m u s) => ParsecT s u m Package+packageLine = do+    _ <- space+    _ <- char '['+    _ <- many $ satisfy (\c -> c /= ']' && c /= '\n')+    _ <- char ']'+    _ <- space+    pkg <- parser+    _ <- space+    _ <- skipRest+    pure pkg++totalLine :: Stream s m Char => ParsecT s u m Integer+totalLine = do+    _ <- string "Total:"+    _ <- space+    ds <- some digit+    _ <- space+    _ <- string "packages"+    _ <- skipRest+    case readMaybe ds of+        Just n  -> pure n+        Nothing -> fail $ "Could not parse as Integer: " ++ show ds++skipRest :: Stream s m Char => ParsecT s u m ()+skipRest = void $ many $ satisfy (/= '\n')++space :: Stream s m Char => ParsecT s u m ()+space = void $ many $ satisfy (\c -> c == ' ' || c == '\t')
+ src/Distribution/Portage/PkgDb.hs view
@@ -0,0 +1,20 @@+{-# Language FlexibleContexts #-}+{-# Language ScopedTypeVariables #-}++module Distribution.Portage.PkgDb+    ( PkgDbEntry(..)+    , pkgDbDirectory+    ) where++import System.FilePath.Posix++import Distribution.Portage.Types++data PkgDbEntry = PkgDbEntry+    { pkgDbEntryPackage :: Package+    , pkgDbEntryPath :: FilePath+    }+    deriving (Show, Eq, Ord)++pkgDbDirectory :: FilePath+pkgDbDirectory = "/var" </> "db" </> "pkg"
+ src/Distribution/Portage/PkgDb/Contents.hs view
@@ -0,0 +1,2 @@+module Distribution.Portage.PkgDb.Contents where+
+ src/Distribution/Portage/Types.hs view
@@ -0,0 +1,38 @@+{-|+Module      : Distribution.Portage.Types++Types for Portage atoms, etc.+-}++{-# Language NoImplicitPrelude #-}++module Distribution.Portage.Types+    (+    -- * Types+      Package(..)+    , Category(..)+    , PkgName(..)+    , Slot(..)+    , SubSlot(..)+    , Repository(..)+    -- ** Versions+    , Version(..)+    , VersionNum(..)+    , VersionLetter(..)+    , VersionSuffix(..)+    , VersionSuffixNum(..)+    , VersionRevision(..)+    -- ** Constraints+    , ConstrainedDep(..)+    , toConstrainedDep+    , fromConstrainedDep+    , doesConstraintMatch+    , Operator(..)+    -- * Internal+    , FauxVersion(..)+    , FauxVersionNum(..)+    ) where++import Internal.Distribution.Portage.Types++
+ test/Emerge/GentooTests.hs view
@@ -0,0 +1,25 @@+{-# Language ScopedTypeVariables #-}++module Emerge.GentooTests (gentooTests) where++import qualified Data.Text.IO as T+import Test.Tasty+import Test.Tasty.HUnit++import Distribution.Portage.Emerge++gentooTests :: TestTree+gentooTests = testGroup "gentoo system tests"+    [ emergeWorldTest+    ]++-- | Emerge world "test". Currently just writes to+--   @/tmp/emerge-world-test.stdout@,+--   @/tmp/emerge-world-test.stderr@,+--   @/tmp/emerge-world-test.exitcode@+emergeWorldTest :: TestTree+emergeWorldTest = testCase "emerge world \"test\"" $ do+    (c, o, e) <- emergeProcess emergeExe $ upgradeWorldArgs ++ pretendArgs+    T.writeFile "/tmp/emerge-world-test.stdout" o+    T.writeFile "/tmp/emerge-world-test.stderr" e+    writeFile "/tmp/emerge-world-test.exitcode" $ show c
+ test/Emerge/ParserTests.hs view
@@ -0,0 +1,75 @@+{-# Language LambdaCase #-}+{-# Language TupleSections #-}++module Emerge.ParserTests+    ( parserTests+    ) where++import Conduit+import Data.Set (Set)+import qualified Data.Set as S+import qualified Data.Text.IO as T+import System.Directory+import System.FilePath+import Test.Tasty+import Test.Tasty.HUnit++import Data.Parsable+import Distribution.Portage.Types+import Distribution.Portage.Emerge+import Distribution.Portage.Emerge.Parser+import Test.Parsable++import Paths_portage_hs (getDataFileName)++parserTests :: IO TestTree+parserTests = do+    stdouts <- emergeStdOuts+    pure $ testGroup "test against recorded emerge output" $+        map (uncurry stdoutTest) stdouts++stdoutTest :: FilePath -> StdOut -> TestTree+stdoutTest d o =+    case ecis of+        Left e ->+            testCase d $ assertFailure $+                "Could not parse recorded emerge ouptut:\n"+                ++ "Error:\n" ++ show e+        Right (c, (i,ps)) -> testGroup d+            [ testCase "complete coverage" (checkPC c)+            , testCase "package count" (checkCount i ps)+            , testGroup "round-trip on extracted packages" $+                printableHUnit <$> S.toList ps+            ]+  where+    checkPC :: ParseCoverage -> Assertion+    checkPC = \case+        c@(PartialParse _) ->+            assertFailure $+                "Got a PartialParse when it should be a CompleteParse:\n"+                ++ show c ++ "\n"+        _ -> pure ()++    checkCount :: Integer -> Set Package -> Assertion+    checkCount i ps = assertEqual "reported package count should equal set size" (fromInteger i) (S.size ps)++    ecis :: Either ParseError (ParseCoverage, (Integer, Set Package))+    ecis = runParser (checkCoverage emergeParser) () f o++    f = "test" </> "data" </> d </> "emerge-world-test.stdout"++emergeStdOuts :: IO [(FilePath, StdOut)]+emergeStdOuts = do+    dataDir <- getDataFileName ("test" </> "data") >>= canonicalizePath+    runConduitRes+        $  sourceDirectoryDeep False dataDir+        .| filterC (\f -> takeFileName f == validFile)+        .| (await >>= mapM_ readFileC)+        .| sinkList+  where+    validFile = "emerge-world-test" <.> "stdout"++    readFileC :: FilePath -> ConduitT i (FilePath, StdOut) (ResourceT IO) ()+    readFileC f = do+        o <- liftIO $ T.readFile f+        yield (f, o)
+ test/Main.hs view
@@ -0,0 +1,45 @@+{-# Language CPP #-}++module Main (main) where++import Test.Tasty++import Test.Parsable++import qualified Emerge.ParserTests as Emerge+import qualified Types.ValidityTests as Types+import qualified Types.UnitTests as Types+#if defined(GENTOO_TESTS)+import qualified Emerge.GentooTests as Emerge+import qualified PkgDb.GentooTests as PkgDb+import qualified Types.GentooTests as Types+#endif++main :: IO ()+main = do+    typesTests <- sequenceA+        [ atomically Types.validityTests+        , pure Types.unitTests+#if defined(GENTOO_TESTS)+        , Types.gentooTests+#endif+        ]++    emergeTests <- sequenceA+        [ Emerge.parserTests+#if defined(GENTOO_TESTS)+--        , pure Emerge.gentooTests+#endif+        ]++    let pkgDBTests = [+#if defined(GENTOO_TESTS)+--             PkgDb.gentooTests+#endif+            ]++    defaultMain $ testGroup "portage-hs tests"+        [ testGroup "portage types" typesTests+        , testGroup "emerge" emergeTests+        , testGroup "pkgdb" pkgDBTests+        ]
+ test/PkgDb/GentooTests.hs view
@@ -0,0 +1,15 @@++module PkgDb.GentooTests+    where+--     ( gentooTests+--     ) where++import Distribution.Portage.PkgDb++import Test.Tasty+import Test.Tasty.HUnit+import Text.Pretty.Simple++-- gentooTests :: TestTree+-- gentooTests = testCase "walk /var/db/pkg" $+--     pkgDbEntries >>= pPrintForceColor
+ test/Types/GentooTests.hs view
@@ -0,0 +1,79 @@+{-# Language ScopedTypeVariables #-}+{-# Language TypeApplications #-}++{-# Options_GHC -Wno-deprecations #-} -- Don't nag me about ListT++module Types.GentooTests (gentooTests) where++import Control.Applicative+import Control.Monad.Trans.Class+import Control.Monad.Trans.List+import Data.Proxy+import System.Directory+import System.FilePath.Posix+import Test.Tasty+import Test.Tasty.HUnit++import Internal.Distribution.Portage.Types+import Data.Parsable+import Test.Parsable++gentooTests :: IO TestTree+gentooTests = testGroup "strings from live Gentoo system" <$> sequenceA+    [ gentooParseTests "/var/db/repos parse tests" <$> repoTree+    , gentooParseTests "/var/db/pkg parse tests" <$> pkgTree+    ]++-- | Check all package atoms and make sure they are parsed successfully and+--   pass the "roundtrip" test.+gentooParseTests :: TestName -> [String] -> TestTree+gentooParseTests n pkgStrings = testGroup n $+    parsableHUnit (Proxy @Package) <$> pkgStrings++-- | Scan the entire @/var/db/repos@ tree for ebuilds and form these into+--  pacakge atoms.+repoTree :: IO [String]+repoTree = runListT $ do+    let reposDir = "/var/db/repos"+    checkDir reposDir $ do++        repo <- listDir reposDir+        cat  <- listDir $ reposDir </> repo+        n    <- listDir $ reposDir </> repo </> cat+        eb   <- listDir $ reposDir </> repo </> cat </> n++        let (nv,ext) = splitExtension eb++        guard $ ext == ".ebuild"++        pure $ cat ++ "/" ++ nv ++ "::" ++ repo++-- | Scan the entire @/var/db/pkg@ tree for package atoms in the form+--   @<category>/<pkg-name>-<version>@. This is inherently part of the directory+--   structure inside @/var/db/pkg@.+pkgTree :: IO [String]+pkgTree = runListT $ do+    let portagePkgDir = "/var/db/pkg"+    checkDir portagePkgDir $ do++        cat <- listDir portagePkgDir           -- Scan for categories+        nv  <- listDir $ portagePkgDir </> cat -- Scan for names/versions++        case nv of+            '.' : _ -> empty+            '-' : _ -> empty+            []      -> empty+            _       -> pure $ cat ++ "/" ++ nv++listDir :: FilePath -> ListT IO FilePath+listDir d = do+    lift (doesDirectoryExist d) >>= guard+    ListT $ listDirectory d++checkDir :: FilePath -> ListT IO a -> ListT IO a+checkDir d rest = do+    b <- lift $ doesDirectoryExist d+    if b+        then rest+        else lift $ assertFailure $+                show d ++ " is not a directory. Is this really a Gentoo system?"
+ test/Types/UnitTests.hs view
@@ -0,0 +1,214 @@+{-# Language FlexibleContexts #-}+{-# Language ScopedTypeVariables #-}+{-# Language TypeApplications #-}++module Types.UnitTests (unitTests) where++import Data.List.NonEmpty (NonEmpty(..))+import Test.Tasty+import Test.Tasty.HUnit++import Internal.Distribution.Portage.Types+import Data.Parsable+import Test.Parsable++unitTests :: TestTree+unitTests = testGroup "unit tests"+    [ testGroup "basic tests"+        [ "dev-python/nose" `parserTest`+            Package+                (Category "dev-python")+                (PkgName "nose")+                Nothing+                Nothing+                Nothing+        , "dev-python/nose-1" `parserTest`+            Package+                (Category "dev-python")+                (PkgName "nose")+                (Just (Version+                    (VersionNum (('1':|[]):|[]))+                    Nothing+                    []+                    Nothing+                ))+                Nothing+                Nothing+        , "dev-python/nose-1.23a-r123" `parserTest`+            Package+                (Category "dev-python")+                (PkgName "nose")+                (Just (Version+                    (VersionNum (('1':|[]):|['2':|"3"]))+                    (Just (VersionLetter 'a'))+                    []+                    (Just (VersionRevision ('1':|"23")))+                ))+                Nothing+                Nothing+        , "dev-python/nose:1337" `parserTest`+            Package+                (Category "dev-python")+                (PkgName "nose")+                Nothing+                (Just (Slot "1337" Nothing))+                Nothing+        , "dev-python/nose::uberRepo" `parserTest`+            Package+                (Category "dev-python")+                (PkgName "nose")+                Nothing+                Nothing+                (Just (Repository "uberRepo"))+        ,  "dev-python/nose-1.23a-r123:1337::uberRepo" `parserTest`+            Package+                (Category "dev-python")+                (PkgName "nose")+                (Just (Version+                    (VersionNum (('1':|[]):|['2':|"3"]))+                    (Just (VersionLetter 'a'))+                    []+                    (Just (VersionRevision ('1':|"23")))+                ))+                (Just (Slot "1337" Nothing))+                (Just (Repository "uberRepo"))+        , "=dev-python/nose-1.23*:1337::uberRepo" `parserTest`+            ConstrainedDep+                EqualAsterisk+                (Category "dev-python")+                (PkgName "nose")+                (Version+                    (VersionNum (('1':|[]):|['2':|"3"]))+                    Nothing+                    []+                    Nothing+                )+                (Just (Slot "1337" Nothing))+                (Just (Repository "uberRepo"))+        ]+    , testGroup "tricky tests"+        [ "dev-python/nose-1.3.7_p20211111_p1" `parserTest`+            Package+                (Category "dev-python")+                (PkgName "nose")+                (Just (Version+                    (VersionNum+                        (('1':|[]) :| ['3':|[],'7':|[]])+                    )+                    Nothing+                    [ (SuffixP, Just (VersionSuffixNum ('2' :| "0211111")))+                    , (SuffixP, Just (VersionSuffixNum ('1' :| [])))+                    ]+                    Nothing+                ))+                Nothing+                Nothing+        , "app-text/xdvik-22.87.03-r3" `parserTest`+            Package+                (Category "app-text")+                (PkgName "xdvik")+                (Just (Version+                    (VersionNum+                        (('2':|"2") :|+                            ['8':|"7"+                            ,'0':|"3"+                            ]+                        )+                    )+                    Nothing+                    []+                    (Just (VersionRevision ('3':|[])))+                ))+                Nothing+                Nothing+        , "dev-java/log4j-12-api-2.17.2" `parserTest`+            Package+                (Category "dev-java")+                (PkgName "log4j-12-api")+                (Just (Version+                    (VersionNum+                        (('2':|[]) :|+                            ['1':|"7"+                            ,'2':|[]+                            ]+                        )+                    )+                    Nothing+                    []+                    Nothing+                ))+                Nothing+                Nothing+        , "sec-keys/openpgp-keys-gawk-20220407" `parserTest`+            Package+                (Category "sec-keys")+                (PkgName "openpgp-keys-gawk")+                (Just (Version+                    (VersionNum (('2':|"0220407"):|[]))+                    Nothing+                    []+                    Nothing+                ))+                Nothing+                Nothing+        , "app-derp/f--98---54.321x_pre1:gawk--::goo" `parserTest`+            Package+                (Category "app-derp")+                (PkgName "f--98--")+                (Just (Version+                    (VersionNum (('5':|"4") :| ['3':|"21"]))+                    (Just (VersionLetter 'x'))+                    [ (SuffixPre, Just (VersionSuffixNum ('1' :| []))) ]+                    Nothing+                ))+                (Just (Slot "gawk--" Nothing))+                (Just (Repository "goo"))+        , "app-office/hledger-web-1.26.1:0/1.26.1::haskell" `parserTest`+            Package+                (Category "app-office")+                (PkgName "hledger-web")+                (Just (Version+                    (VersionNum (('1':|[]) :| ['2':|"6", '1':|[]]))+                    Nothing+                    []+                    Nothing+                ))+                (Just (Slot "0" (Just (SubSlot "1.26.1"))))+                (Just (Repository "haskell"))+        ]+    , testGroup "failed QuickCheck tests"+        [ "7-r2b" `parserTest` Repository "7-r2b"+        , "7-r2b" `parserTest` PkgName "7-r2b"+        , "1.3.7_p20211111_p1" `parserTest` Version+                    (VersionNum+                        (('1':|[]) :| ['3':|[],'7':|[]])+                    )+                    Nothing+                    [ (SuffixP, Just (VersionSuffixNum ('2' :| "0211111")))+                    , (SuffixP, Just (VersionSuffixNum ('1' :| [])))+                    ]+                    Nothing+        , "p" `parserTest` SuffixP+--         , "7-r4-8y-r3-o-7-r0-a-4.ebuild" `parserTest` EBuildFileName+--                     (PkgName "7-r4-8y-r3-o-7-r0-a")+--                     (Version+--                         (VersionNum+--                             (('4' :| "") :| [])+--                         )+--                         Nothing+--                         []+--                         Nothing+--                     )+        ]+    ]++-- Takes a string and an expected result, and creates a TestTree from them+parserTest :: forall a.+    ( Parsable a Identity () String+    , Eq a+    , Show a+    ) => String+    -> a+    -> TestTree+parserTest s x = testCase (show s) $+    Right (CompleteParse, x) @=? runParser (checkParsable @a) () "" s
+ test/Types/ValidityTests.hs view
@@ -0,0 +1,277 @@+{-# Language LambdaCase #-}+{-# Language TypeApplications #-}+{-# Language ViewPatterns #-}++{-# Options_GHC -Wno-orphans #-}++module Types.ValidityTests (validityTests) where++import Data.Either (isLeft)+import qualified Data.List as L+import qualified Data.List.NonEmpty as NE+import Data.Proxy+import GHC.Natural+import Test.QuickCheck+import Test.Tasty++import Data.Parsable+import Test.Parsable+import Internal.Distribution.Portage.Types+++validityTests :: STM TestTree+validityTests =+    testGroup "parsable validity tests" <$> sequenceA+        [ parsableQuickCheck (Proxy @Category)+        , parsableQuickCheck (Proxy @PkgName)+        , parsableQuickCheck (Proxy @VersionNum)+        , parsableQuickCheck (Proxy @VersionLetter)+        , parsableQuickCheck (Proxy @VersionSuffix)+        , parsableQuickCheck (Proxy @VersionSuffixNum)+        , parsableQuickCheck (Proxy @VersionRevision)+        , parsableQuickCheck (Proxy @Version)+--         , parsableQuickCheck (Proxy @Operator) -- lossy round-trip+        , parsableQuickCheck (Proxy @ConstrainedDep)+        , parsableQuickCheck (Proxy @Slot)+        , parsableQuickCheck (Proxy @SubSlot)+        , parsableQuickCheck (Proxy @Repository)+        , parsableQuickCheck (Proxy @Package)+--         , parsableQuickCheck (Proxy @EBuildFileName) -- removed+        , parsableQuickCheck (Proxy @FauxVersion)+        , parsableQuickCheck (Proxy @FauxVersionNum)+        ]++-- Arbitrary instances    --+-- Based off Gentoo PMS 8 --++instance Arbitrary Natural where+    arbitrary = arbitrarySizedNatural++-- > 3.1.1 Category names+-- > A category name may contain any of the characters [A-Za-z0-9+_.-].+-- > It must not begin with a hyphen, a dot or a plus sign.+instance Arbitrary Category where+    arbitrary = Category <$> wordGen wordStart wordRest+      where+        wordStart =+            [ isAsciiUpper+            , isAsciiLower+            , isDigit+            , (== '_')+            ]+        wordRest = (== '+') : (== '-') : (== '.') : wordStart++-- > 3.1.2 Package names+-- > A package name may contain any of the characters [A-Za-z0-9+_-]. It must+-- > not begin with a hyphen or a plus sign, and must not end in a hyphen+-- > followed by anything matching the version syntax described in section 3.2.+-- >+-- > Note: A package name does not include the category. The term qualified+-- > package name is used where a category/package pair is meant.+instance Arbitrary PkgName where+    arbitrary = PkgName <$> pkgGen wordStart wordRest+      where+        wordStart = [isAsciiUpper, isAsciiLower, isDigit, (== '_')]+        wordRest  = (== '+') : (== '-') : wordStart++-- > 3.1.3 Slot names+-- > A slot name may contain any of the characters [A-Za-z0-9+_.-].+-- > It must not begin with a hyphen, a dot or a plus sign.+instance Arbitrary Slot where+    arbitrary = Slot+        <$> slotGen+        <*> liftArbitrary arbitrary++instance Arbitrary SubSlot where+    arbitrary = SubSlot <$> slotGen++slotGen :: Gen String+slotGen = wordGen wordStart wordRest+  where+    wordStart =+        [ isAsciiUpper+        , isAsciiLower+        , isDigit+        , (== '_')+        ]+    wordRest = wordStart +++        [ (== '+')+        , (== '.')+        , (== '-')+        ]+++-- TODO+-- > 3.1.4 USE flag names+-- > A USE flag name may contain any of the characters [A-Za-z0-9+_@-].+-- > It must begin with an alphanumeric character. Underscores should be+-- > considered reserved for USE_EXPAND, as described in section 11.1.1.+-- >+-- > Note: Usage of the at-sign is deprecated. It was previously required for+-- > LINGUAS.+++-- > 3.1.5 Repository names+-- > A repository name may contain any of the characters [A-Za-z0-9_-].+-- > It must not begin with a hyphen. In addition, every repository+-- > name must also be a valid package name.+instance Arbitrary Repository where+    arbitrary = Repository <$> pkgGen wordStart wordRest+      where+        wordStart =+            [ isAsciiUpper+            , isAsciiLower+            , isDigit+            , (== '_')+            ]+        wordRest = (== '-') : wordStart+++-- TODO+-- > 3.1.6 License names+-- > A license name may contain any of the characters [A-Za-z0-9+_.-].+-- > It must not begin with a hyphen, a dot or a plus sign.+++-- TODO+-- > 3.1.7 Keyword names+-- > A keyword name may contain any of the characters [A-Za-z0-9_-].+-- > It must not begin with a hyphen. In contexts where it makes sense to do so,+-- > a keyword name may be prefixed by a tilde or a hyphen.+-- > In KEYWORDS, -* is also acceptable as a keyword.+++-- TODO+-- > 3.1.8 EAPI names+-- > An EAPI name may contain any of the characters [A-Za-z0-9+_.-].+-- > It must not begin with a hyphen, a dot or a plus sign.+++-- > 3.2 Version Specifications+-- > The package manager must neither impose fixed limits upon the number of+-- > version components, nor upon the length of any component. Package managers+-- > should indicate or reject any version that is invalid according to the+-- > rules below.++-- > A version starts with the number part, which is in the form+-- > [0-9]+(\.[0-9]+)* (an unsigned integer, followed by zero or more+-- > dot-prefixed unsigned integers).+instance Arbitrary VersionNum where+    arbitrary = VersionNum <$> nonEmptyGen nonEmptyDigitGen++-- > This may optionally be followed by one of [a-z] (a lowercase letter).+instance Arbitrary VersionLetter where+    arbitrary = VersionLetter <$> arbitrary `suchThat` isAsciiLower++-- > This may be followed by zero or more of the suffixes+-- > _alpha, _beta, _pre, _rc or _p [...]+instance Arbitrary VersionSuffix where+    arbitrary = arbitraryBoundedEnum++-- > [...] each of which may optionally be followed by an unsigned integer.+-- > Suffix and integer count as separate version components.+instance Arbitrary VersionSuffixNum where+    arbitrary = VersionSuffixNum <$> nonEmptyDigitGen++-- > This may optionally be followed by the suffix -r followed immediately by an+-- > unsigned integer (the “revision number”). If this suffix is not present, it+-- > is assumed to be -r0.+instance Arbitrary VersionRevision where+    arbitrary = VersionRevision <$> nonEmptyDigitGen++-- The composite of an entire version string+instance Arbitrary Version where+    arbitrary = Version+        <$> arbitrary+        <*> liftArbitrary arbitrary+        <*> liftArbitrary (liftArbitrary arbitrary)+        <*> liftArbitrary arbitrary++instance Arbitrary Operator where+    arbitrary = arbitraryBoundedEnum++instance Arbitrary ConstrainedDep where+    arbitrary = ConstrainedDep+        <$> arbitrary+        <*> arbitrary+        <*> arbitrary+        <*> arbitrary+        <*> liftArbitrary arbitrary+        <*> liftArbitrary arbitrary++-- The composite of an entire package atom+instance Arbitrary Package where+    arbitrary = Package+        <$> arbitrary+        <*> arbitrary+        <*> liftArbitrary arbitrary+        <*> liftArbitrary arbitrary+        <*> liftArbitrary arbitrary++-- instance Arbitrary EBuildFileName where+--     arbitrary = EBuildFileName+--         <$> arbitrary+--         <*> arbitrary++-- Generates version numbers with exactly one component. For use with+-- FauxVersion.+instance Arbitrary FauxVersionNum where+    arbitrary = FauxVersionNum . VersionNum . pure <$> nonEmptyDigitGen++-- Generates Versions that are both valid Versions and also valid+-- parts of PkgNames. This helps test the critera from "3.1.2 Package names":+--+-- > It [...] must not end in a hyphen followed by anything matching the+-- > version syntax described in section 3.2.+instance Arbitrary FauxVersion where+    arbitrary = fmap FauxVersion $ Version+        <$> (unwrapFauxVersionNum <$> arbitrary)+        <*> liftArbitrary arbitrary+        <*> liftArbitrary (liftArbitrary arbitrary)+        <*> liftArbitrary arbitrary++nonEmptyGen :: Gen a -> Gen (NE.NonEmpty a)+nonEmptyGen = fmap NE.fromList . listOf1++nonEmptyDigitGen :: Gen (NE.NonEmpty Char)+nonEmptyDigitGen = nonEmptyGen $ arbitrary `suchThat` isDigit++-- | PkgName and Repository share a similar generator+pkgGen :: [Char -> Bool] -> [Char -> Bool] -> Gen String+pkgGen+    (removeHyphens -> wordStart)+    (removeHyphens -> wordRest ) = do+        ls <- oneof+            [ do+                s <- oneof startChoices+                -- This generator can get out of hand if we don't limit the size+                -- of the list+                k <- choose (0,5)+                rest <- vectorOf k $ oneof restChoices+                pure $ s : rest+            , pure []+            ]+        end <- nonVersion+        pure $ L.intercalate "-" $ ls ++ [end]+  where+    nonVersion =+        wordGen wordStart wordRest+            `suchThat` (isLeft . runParsable @Version "")++    -- Don't start with @pure ""@ or it will end up creating a string that+    -- starts with @'-'@ (an invalid Package/Repository string)+    startChoices =+        [ nonVersion+--         Currently not behaving correctly; we're getting invalid package/repository names+--         , toString . unwrapFauxVersion <$> arbitrary+        ]++    restChoices = pure "" : startChoices++-- Sometimes hyphens are handled specially and should not be generated with+-- 'wordGen'. This removes hyphens which would normally be generated when+-- following specifcations.+removeHyphens :: [Char -> Bool] -> [Char -> Bool]+removeHyphens = map $ \f -> \case+    '-' -> False+    c   -> f c
+ test/data/2022-07-16/emerge-world-test.stdout view
@@ -0,0 +1,463 @@++These are the packages that would be merged, in order:++Calculating dependencies  ...... ..... .. .. ..... done!+[ebuild   R   ~] dev-haskell/th-abstraction-0.4.2.0:0/0.4.2.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/file-embed-0.0.15.0:0/0.0.15.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/inspection-testing-0.4.5.0:0/0.4.5.0::haskell  USE="doc hoogle hscolour test -profile" 22 KiB+[ebuild  N    ~] dev-haskell/nanospec-0.2.2:0/0.2.2::haskell  USE="doc hoogle hscolour -profile" 4 KiB+[ebuild   R   ~] dev-haskell/some-1.0.4:0/1.0.4::haskell  USE="doc hoogle hscolour newtype-unsafe test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/singletons-3.0.1:0/3.0.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/hostname-1.0-r1:0/1.0::haskell  USE="doc hoogle hscolour -profile" 2 KiB+[ebuild   R   ~] dev-haskell/ghc-byteorder-4.11.0.0.10:0/4.11.0.0.10::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/simple-reflect-0.3.3:0/0.3.3::haskell  USE="doc hoogle hscolour -profile" 5 KiB+[ebuild   R   ~] dev-haskell/first-class-families-0.8.0.1:0/0.8.0.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/generic-monoid-0.1.0.1:0/0.1.0.1::haskell  USE="doc hoogle hscolour -profile" 4 KiB+[ebuild  N    ~] dev-haskell/code-page-0.2.1:0/0.2.1::haskell  USE="doc hoogle hscolour test -profile" 7 KiB+[ebuild  N    ~] dev-haskell/pretty-hex-1.1:0/1.1::haskell  USE="doc hoogle hscolour -profile" 4 KiB+[ebuild  N    ~] dev-haskell/sop-core-0.5.0.2:0/0.5.0.2::haskell  USE="doc hoogle hscolour -profile" 28 KiB+[ebuild  N    ~] dev-haskell/patience-0.1.1-r1:0/0.1.1::haskell  USE="doc hoogle hscolour -profile" 5 KiB+[ebuild  N    ~] dev-haskell/monads-tf-0.1.0.3:0/0.1.0.3::haskell  USE="doc hoogle hscolour -profile" 14 KiB+[ebuild   R   ~] dev-haskell/lift-type-0.1.0.1:0/0.1.0.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/groups-0.5.3:0/0.5.3::haskell  USE="doc hoogle hscolour -profile" 4 KiB+[ebuild  N    ~] dev-haskell/prettyclass-1.0.0.0-r1:0/1.0.0.0::haskell  USE="doc hoogle hscolour -profile" 2 KiB+[ebuild  N    ~] dev-haskell/dec-0.0.4:0/0.0.4::haskell  USE="doc hoogle hscolour -profile" 3 KiB+[ebuild  N    ~] dev-haskell/managed-1.0.9:0/1.0.9::haskell  USE="doc hoogle hscolour -profile" 6 KiB+[ebuild  N    ~] dev-haskell/optional-args-1.0.2-r2:0/1.0.2::haskell  USE="doc hoogle hscolour -profile" 4 KiB+[ebuild  N    ~] dev-haskell/ieee754-0.8.0:0/0.8.0::haskell  USE="doc hoogle hscolour -profile" 18 KiB+[ebuild   R   ~] dev-haskell/compact-0.2.0.0:0/0.2.0.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/named-0.3.0.1:0/0.3.0.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/show-combinators-0.2.0.0:0/0.2.0.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/utf8-light-0.4.2:0/0.4.2::haskell  USE="doc hoogle hscolour -profile" 6 KiB+[ebuild   R   ~] dev-haskell/js-dgtable-0.5.2:0/0.5.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/call-stack-0.3.0:0/0.3.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/th-lift-0.8.2:0/0.8.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/microlens-th-0.4.3.10:0/0.4.3.10::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/generics-sop-0.5.1.1:0/0.5.1.1::haskell  USE="doc hoogle hscolour test -profile" 30 KiB+[ebuild  N    ~] dev-haskell/options-1.2.1.1:0/1.2.1.1::haskell  USE="doc hoogle hscolour -profile" 25 KiB+[ebuild  N    ~] dev-haskell/singleton-bool-0.1.5-r1:0/0.1.5::haskell  USE="doc hoogle hscolour -profile" 4 KiB+[ebuild   R   ~] dev-haskell/ap-normalize-0.1.0.1:0/0.1.0.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/quickcheck-2.14.2-r1:2/2.14.2::haskell  USE="doc hoogle hscolour template-haskell test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hunit-1.6.2.0:0/1.6.2.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/chell-0.4.0.2:0/0.4.0.2::haskell  USE="color-output doc hoogle hscolour -profile" 13 KiB+[ebuild   R   ~] dev-haskell/unagi-chan-0.4.1.3:0/0.4.1.3::haskell  USE="doc hoogle hscolour test* -compare-benchmarks -profile" 0 KiB+[ebuild   R   ~] dev-haskell/optics-th-0.4:0/0.4::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/optparse-applicative-0.16.1.0-r1:0/0.16.1.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/utf8-string-1.0.2:0/1.0.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/safe-0.3.19:0/0.3.19::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/dlist-1.0:0/1.0::haskell  USE="doc hoogle hscolour test* -profile -werror" 0 KiB+[ebuild   R   ~] dev-haskell/split-0.2.3.4:0/0.2.3.4::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hspec-expectations-0.8.2:0/0.8.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/tagsoup-0.14.8:0/0.14.8::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/emojis-0.1.2:0/0.1.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/utility-ht-0.0.14:0/0.0.14::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/string-qq-0.0.4:0/0.0.4::haskell  USE="doc hoogle hscolour test -profile" 2 KiB+[ebuild   R   ~] dev-haskell/raw-strings-qq-1.1:0/1.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/pcre-light-0.4.1.0:0/0.4.1.0::haskell  USE="doc hoogle hscolour test -profile" 29 KiB+[ebuild  N    ~] dev-haskell/selective-0.5:0/0.5::haskell  USE="doc hoogle hscolour test -profile" 34 KiB+[ebuild   R   ~] dev-haskell/pqueue-1.4.1.4:0/1.4.1.4::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/quickcheck-text-0.1.2.1:0/0.1.2.1::haskell  USE="doc hoogle hscolour test -profile" 4 KiB+[ebuild   R   ~] dev-haskell/regex-tdfa-1.3.1.1:0/1.3.1.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/hspec-meta-2.9.3:0/2.9.3::haskell  USE="doc hoogle hscolour -profile" 68 KiB+[ebuild     U  ] dev-libs/openssl-1.1.1q:0/1.1::gentoo [1.1.1o:0/1.1::gentoo] USE="asm sctp verify-sig -rfc3779 -sslv3 -static-libs -test -tls-compression -tls-heartbeat -vanilla -weak-ssl-ciphers" ABI_X86="32 (64) (-x32)" CPU_FLAGS_X86="(sse2)" 9,634 KiB+[ebuild   R    ] dev-lang/python-3.10.5:3.10::gentoo  USE="bluetooth gdbm hardened* libedit lto ncurses pgo readline sqlite ssl tk verify-sig xml -build -examples -test -wininst" 0 KiB+[ebuild   R    ] dev-lang/python-3.8.13_p2:3.8::gentoo  USE="bluetooth gdbm hardened* ncurses readline sqlite ssl tk verify-sig xml -build -examples -test -wininst" 0 KiB+[ebuild     U  ] dev-python/setuptools-62.6.0::gentoo [62.3.3::gentoo] USE="-test" PYTHON_TARGETS="python3_8 python3_10 (-pypy3) -python3_9 (-python3_11)" 2,539 KiB+[ebuild     U  ] sys-apps/systemd-251.2:0/2::gentoo [250.7:0/2::gentoo] USE="acl apparmor audit cryptsetup dns-over-tls gcrypt http idn kmod lz4 lzma openssl pam pcre (policykit) qrcode resolvconf seccomp (split-usr) sysv-utils xkb zstd -build -cgroup-hybrid -curl -elfutils -fido2 -gnuefi -gnutls -homed -importd -iptables -pkcs11 -pwquality (-selinux) -test -tpm -vanilla (-hostnamed-fallback%)" ABI_X86="32 (64) (-x32)" 11,167 KiB+[ebuild     U  ] dev-python/docutils-0.18.1-r1::gentoo [0.17.1-r1::gentoo] PYTHON_TARGETS="python3_8 python3_10 (-pypy3) -python3_9 (-python3_11)" 0 KiB+[ebuild     U  ] net-libs/rpcsvc-proto-1.4.3-r1::gentoo [1.4.3::gentoo] 165 KiB+[ebuild   R    ] dev-lang/python-3.9.13:3.9::gentoo  USE="bluetooth gdbm hardened* lto ncurses pgo readline sqlite ssl tk verify-sig xml -build -examples -test -wininst" 0 KiB+[ebuild  N     ] dev-ruby/mini_portile2-2.8.0:2.8::gentoo  USE="-doc -test" RUBY_TARGETS="ruby27 -ruby26 -ruby30 -ruby31" 0 KiB+[ebuild  N    ~] dev-ruby/rexical-1.0.7-r1::gentoo  USE="-doc -test" RUBY_TARGETS="ruby27 -ruby26 -ruby30 -ruby31" 0 KiB+[ebuild     U  ] sys-apps/pciutils-3.8.0-r1::gentoo [3.8.0::gentoo] USE="kmod udev zlib -dns -static-libs" ABI_X86="32 (64) (-x32)" 0 KiB+[ebuild     U  ] dev-python/PyQt5-sip-12.10.1:0/12::gentoo [12.9.0:0/12::gentoo] PYTHON_TARGETS="python3_8 python3_10 -python3_9 (-python3_11)" 119 KiB+[ebuild     U  ] app-eselect/eselect-timidity-20110513-r1::gentoo [20110513::gentoo] 0 KiB+[ebuild   R   ~] dev-haskell/happy-1.20.0::haskell  USE="doc test*" 0 KiB+[ebuild   R   ~] dev-haskell/alex-3.2.7.1::haskell  USE="doc test*" 0 KiB+[ebuild   R   ~] dev-haskell/config-value-0.8.1:0/0.8.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N     ] dev-util/spirv-headers-1.3.211::gentoo  0 KiB+[ebuild   R   ~] dev-haskell/postgresql-libpq-0.9.4.3-r1:0/0.9.4.3::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild     U ~] dev-ruby/nokogiri-1.13.7::gentoo [1.13.6::gentoo] USE="-doc -test" RUBY_TARGETS="ruby27 -ruby26 -ruby30 -ruby31" 6,105 KiB+[ebuild     U  ] www-client/brave-bin-1.41.96::brave-overlay [1.41.94::brave-overlay] USE="-gnome-keyring" L10N="en-US -am -ar -bg -bn -ca -cs -da -de -el -en-GB -es -es-419 -et -fa -fi -fil -fr -gu -he -hi -hr -hu -id -it -ja -kn -ko -lt -lv -ml -mr -ms -nb -nl -pl -pt-BR -pt-PT -ro -ru -sk -sl -sr -sv -sw -ta -te -th -tr -uk -vi -zh-CN -zh-TW" 131,689 KiB+[ebuild     U  ] media-libs/phonon-4.11.1-r2::gentoo [4.11.1-r1::gentoo] USE="designer gstreamer pulseaudio vlc -debug" 0 KiB+[ebuild     U  ] dev-python/sphinx-5.0.2::gentoo [4.5.0-r1::gentoo] USE="latex -doc -test" PYTHON_TARGETS="python3_8 python3_10 (-pypy3) -python3_9 (-python3_11)" 6,572 KiB+[ebuild     U  ] net-fs/cifs-utils-6.15::gentoo [6.13-r1::gentoo] USE="acl ads caps pam python systemd -creds" PYTHON_SINGLE_TARGET="python3_10 -python3_8 -python3_9 (-python3_11)" 407 KiB+[ebuild  N     ] media-sound/strawberry-1.0.5::gentoo  USE="cdda gstreamer mtp pulseaudio udisks vlc -debug -ipod -moodbar" 10,950 KiB+[ebuild   R   ~] dev-haskell/tasty-quickcheck-0.10.1.2:0/0.10.1.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/syb-0.7.2.1:0/0.7.2.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/lua-2.1.0:0/2.1.0::haskell  USE="allow-unsafe-gc doc export-dynamic hardcode-reg-keys hoogle hscolour test* -apicheck -lua-32bits -profile" 0 KiB+[ebuild   R   ~] dev-haskell/monad-loops-0.4.3:0/0.4.3::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/wl-pprint-annotated-0.1.0.1-r1:0/0.1.0.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/logict-0.7.0.3:0/0.7.0.3::haskell  USE="doc hoogle hscolour test -profile" 6 KiB+[ebuild  N    ~] dev-haskell/tasty-travis-0.2.0.2:0/0.2.0.2::haskell  USE="doc hoogle hscolour test -profile" 8 KiB+[ebuild   R   ~] dev-haskell/jira-wiki-markup-1.4.0:0/1.4.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/doctest-0.20.0:0/0.20.0::haskell  USE="doc hoogle hscolour -profile" 50 KiB+[ebuild   R   ~] dev-haskell/zlib-0.6.2.3:0/0.6.2.3::haskell  USE="doc hoogle hscolour test* -bundled-c-zlib -non-blocking-ffi -profile" 0 KiB+[ebuild   R   ~] dev-haskell/cookie-0.4.5:0/0.4.5::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hourglass-0.2.12:0/0.2.12::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/lua-arbitrary-1.0.1:0/1.0.1::haskell  USE="doc hoogle hscolour -profile" 3 KiB+[ebuild   R   ~] dev-haskell/rope-utf16-splay-0.3.2.0:0/0.3.2.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/tasty-kat-0.0.3:0/0.0.3::haskell  USE="doc hoogle hscolour test -profile" 7 KiB+[ebuild   R   ~] dev-haskell/hsyaml-0.2.1.1:0/0.2.1.1::haskell  USE="doc hoogle hscolour test* -exe -profile" 0 KiB+[ebuild   R   ~] dev-haskell/th-expand-syns-0.4.8.0:0/0.4.8.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/lpeg-1.0.3:0/1.0.3::haskell  USE="doc hoogle hscolour test* -profile -rely-on-shared-lpeg-library" 0 KiB+[ebuild  N    ~] dev-haskell/haskell-src-1.0.3.1:0/1.0.3.1::haskell  USE="doc hoogle hscolour -profile" 30 KiB+[ebuild   R   ~] dev-haskell/ghc-source-gen-0.4.2.0:0/0.4.2.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/asn1-encoding-0.9.6:0/0.9.6::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/th-reify-many-0.1.9:0/0.1.9::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/foundation-0.0.26.1:0/0.0.26.1::haskell  USE="doc hoogle hscolour test* -experimental -profile" 0 KiB+[ebuild   R   ~] dev-haskell/network-byte-order-0.1.6:0/0.1.6::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/type-errors-0.2.0.0:0/0.2.0.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/pcg-random-0.1.3.7:0/0.1.3.7::haskell  USE="doc hoogle hscolour test -profile" 25 KiB+[ebuild   R   ~] dev-haskell/memory-0.15.0:0/0.15.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/crypto-pubkey-types-0.4.3:0/0.4.3::haskell  USE="doc hoogle hscolour -profile" 11 KiB+[ebuild   R   ~] dev-haskell/cryptonite-0.28-r1:0/0.28::haskell  USE="doc hoogle hscolour integer-gmp target-attributes test* -profile" CPU_FLAGS_X86="sse -aes -rdrand -sse4_1" 0 KiB+[ebuild   R   ~] dev-haskell/uuid-types-1.0.5-r1:0/1.0.5::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/text-short-0.1.5:0/0.1.5::haskell  USE="doc hoogle hscolour test* -asserts -profile" 0 KiB+[ebuild   R   ~] dev-haskell/psqueues-0.2.7.3:0/0.2.7.3::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/nats-1.1.2-r1:0/1.1.2::haskell  USE="binary hashable template-haskell -profile" 11 KiB+[ebuild  N    ~] dev-haskell/smallcheck-1.2.1:0/1.2.1::haskell  USE="doc hoogle hscolour -profile" 19 KiB+[ebuild   R   ~] dev-haskell/primitive-unlifted-0.1.3.1:0/0.1.3.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/tasty-smallcheck-0.8.2:0/0.8.2::haskell  USE="doc hoogle hscolour -profile" 3 KiB+[ebuild   R   ~] dev-haskell/regex-applicative-0.3.3.1:0/0.3.3.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/resourcet-1.2.5:0/1.2.5::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/base-orphans-0.8.6:0/0.8.6::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/generic-deriving-1.14.1:0/1.14.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/th-compat-0.1.3:0/0.1.3::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/constraints-0.13.3:0/0.13.3::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/reflection-2.1.6:0/2.1.6::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/path-pieces-0.2.1:0/0.2.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/validity-0.12.0.0:0/0.12.0.0::haskell  USE="doc hoogle hscolour test -profile" 9 KiB+[ebuild   R   ~] dev-haskell/word8-0.1.3:0/0.1.3::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/css-text-0.1.3.0:0/0.1.3.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/http-date-0.0.11:0/0.0.11::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/unix-time-0.4.7:0/0.4.7::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/should-not-typecheck-2.1.0:0/2.1.0::haskell  USE="doc hoogle hscolour test -profile" 6 KiB+[ebuild  N    ~] dev-haskell/logging-facade-0.3.0:0/0.3.0::haskell  USE="doc hoogle hscolour test -profile" 4 KiB+[ebuild  N    ~] dev-haskell/stringbuilder-0.5.1:0/0.5.1::haskell  USE="doc hoogle hscolour test -profile" 3 KiB+[ebuild   R   ~] dev-haskell/zlib-bindings-0.1.1.5:0/0.1.1.5::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/quickcheck-assertions-0.3.0:0/0.3.0::haskell  USE="doc hoogle hscolour test -profile" 6 KiB+[ebuild   R   ~] dev-haskell/newtype-generics-0.6:0/0.6::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hlibsass-0.1.10.1:0/0.1.10.1::haskell  USE="doc hoogle hscolour test* -externallibsass -profile -sharedlibsass" 0 KiB+[ebuild   R   ~] dev-haskell/word-wrap-0.4.1:0/0.4.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/ini-0.4.1-r1:0/0.4.1::haskell  USE="doc hoogle hscolour test -profile" 5 KiB+[ebuild   R   ~] dev-haskell/indexed-list-literals-0.2.1.3:0/0.2.1.3::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/unicode-data-0.3.0:0/0.3.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/email-validate-2.3.2.15:0/2.3.2.15::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/hspec-attoparsec-0.1.0.2-r1:0/0.1.0.2::haskell  USE="doc hoogle hscolour test -profile" 4 KiB+[ebuild   R   ~] dev-haskell/fgl-5.7.0.3-r1:0/5.7.0.3::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/vector-0.12.3.1-r1:0/0.12.3.1::haskell  USE="boundschecks doc hoogle hscolour test* -internalchecks -profile -unsafechecks" 0 KiB+[ebuild  N    ~] dev-haskell/test-framework-0.8.2.0-r3:0/0.8.2.0::haskell  USE="doc hoogle hscolour -profile" 21 KiB+[ebuild   R   ~] dev-haskell/bifunctors-5.5.11:0/5.5.11::haskell  USE="doc hoogle hscolour semigroups tagged test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/distributive-0.6.2.1:0/0.6.2.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/time-compat-1.9.6.1:0/1.9.6.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/onetuple-0.3.1:0/0.3.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/errorcall-eq-instance-0.3.0:0/0.3.0::haskell  USE="doc hoogle hscolour test -profile" 2 KiB+[ebuild   R   ~] dev-haskell/deriving-compat-0.6:0/0.6::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/recursion-schemes-5.2.2.1:0/5.2.2.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/validated-literals-0.3.1:0/0.3.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/test-framework-hunit-0.3.0.2-r1:0/0.3.0.2::haskell  USE="doc hoogle hscolour -profile" 3 KiB+[ebuild  N    ~] dev-haskell/test-framework-quickcheck2-0.3.0.5-r2:0/0.3.0.5::haskell  USE="doc hoogle hscolour -profile" 4 KiB+[ebuild   R   ~] dev-haskell/th-lift-instances-0.1.19:0/0.1.19::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/base-compat-batteries-0.12.1:0/0.12.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/text-metrics-0.3.0:0/0.3.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/vector-algorithms-0.8.0.4:0/0.8.0.4::haskell  USE="bench boundschecks doc hoogle hscolour properties test* -internalchecks -profile -unsafechecks" 0 KiB+[ebuild   R   ~] dev-haskell/text-zipper-0.11:0/0.11::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/barbies-2.0.3.0:0/2.0.3.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/xss-sanitize-0.3.6:0/0.3.6::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/hashable-time-0.3:0/0.3::haskell  USE="doc hoogle hscolour test -profile" 3 KiB+[ebuild   R   ~] dev-haskell/listlike-4.7.4:0/4.7.4::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/test-framework-smallcheck-0.2:0/0.2::haskell  USE="doc hoogle hscolour -profile" 3 KiB+[ebuild  N    ~] dev-haskell/pgp-wordlist-0.1.0.3:0/0.1.0.3::haskell  USE="doc hoogle hscolour test -profile" 10 KiB+[ebuild   R   ~] dev-haskell/streaming-0.2.3.1:0/0.2.3.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/nonempty-vector-0.2.1.0:0/0.2.1.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/vector-th-unbox-0.2.1.9:0/0.2.1.9::haskell  USE="doc hoogle hscolour test -profile" 5 KiB+[ebuild   R   ~] dev-haskell/async-2.2.4-r1:0/2.2.4::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/exceptions-0.10.4:0/0.10.4::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/case-insensitive-1.2.1.0:0/1.2.1.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/base64-bytestring-1.2.1.0:0/1.2.1.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/blaze-builder-0.4.2.1:0/0.4.2.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/base16-bytestring-1.0.2.0:0/1.0.2.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/cereal-0.5.8.2:0/0.5.8.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/diff-0.4.0:0/0.4.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/lifted-base-0.2.3.12:0/0.2.3.12::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/glob-0.10.2:0/0.10.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/foldl-1.4.12:0/1.4.12::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/sha-1.6.4.4:0/1.6.4.4::haskell  USE="doc hoogle hscolour test* -exe -profile" 0 KiB+[ebuild   R   ~] dev-haskell/pem-0.2.4:0/0.2.4::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/adjunctions-4.4:0/4.4::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/invariant-0.5.5:0/0.5.5::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/th-orphans-0.13.11:0/0.13.11::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/fingertree-0.1.4.2:0/0.1.4.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/decimal-0.5.2:0/0.5.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/exception-transformers-0.4.0.9:0/0.4.0.9::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/math-functions-0.3.4.2:0/0.3.4.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/either-5.0.1.1:0/5.0.1.1::haskell  USE="doc hoogle hscolour test -profile" 10 KiB+[ebuild  N    ~] dev-haskell/keys-3.12.3-r1:0/3.12.3::haskell  USE="doc hoogle hscolour -profile" 17 KiB+[ebuild   R   ~] dev-haskell/infer-license-0.2.0:0/0.2.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/bindings-glfw-3.3.2.0:0/3.3.2.0::haskell  USE="X doc hoogle hscolour test* -exposenative -osmesa -profile" 0 KiB+[ebuild   R   ~] dev-haskell/edit-distance-0.2.2.1-r1:0/0.2.2.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/double-conversion-2.0.2.0:0/2.0.2.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/crypto-cipher-tests-0.0.11-r1:0/0.0.11::haskell  USE="doc hoogle hscolour test -profile" 7 KiB+[ebuild  N    ~] dev-haskell/checkers-0.5.6-r1:0/0.5.6::haskell  USE="doc hoogle hscolour -profile" 18 KiB+[ebuild   R   ~] dev-haskell/enummapset-0.6.0.3:0/0.6.0.3::haskell  USE="doc hoogle hscolour test* -debug -profile" 0 KiB+[ebuild   R   ~] dev-haskell/iso-deriving-0.0.8:0/0.0.8::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/process-extras-0.7.4:0/0.7.4::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/half-0.3.1:0/0.3.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/temporary-1.3:0/1.3::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/blaze-markup-0.8.2.8:0/0.8.2.8::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/unliftio-0.2.18:0/0.2.18::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/x509-1.7.7:0/1.7.7::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/safe-exceptions-0.1.7.1:0/0.1.7.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/vty-5.35.1:0/5.35.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/polysemy-1.7.1.0:0/1.7.1.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/mono-traversable-1.0.15.3:0/1.0.15.3::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/crypto-api-tests-0.3-r1:0/0.3::haskell  USE="doc hoogle hscolour -profile" 3,551 KiB+[ebuild   R   ~] dev-haskell/text-conversions-0.3.1:0/0.3.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/haskeline-0.8.2:0/0.8.2::haskell  USE="doc hoogle hscolour terminfo test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/filelock-0.1.1.5:0/0.1.1.5::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/cryptohash-sha256-0.11.102.0:0/0.11.102.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/th-desugar-1.12:0/1.12::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/mwc-random-0.15.0.2-r1:0/0.15.0.2::haskell  USE="doc hoogle hscolour test -profile" 30 KiB+[ebuild   R   ~] dev-haskell/cipher-aes-0.2.11:0/0.2.11::haskell  USE="doc hoogle hscolour test* -profile" CPU_FLAGS_X86="-aes -ssse3" 0 KiB+[ebuild   R   ~] dev-haskell/lucid-2.11.0:0/2.11.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/concurrent-extra-0.7.0.12:0/0.7.0.12::haskell  USE="doc hoogle hscolour test -profile" 16 KiB+[ebuild  N    ~] dev-haskell/cipher-aes128-0.7.0.5-r2:0/0.7.0.5::haskell  USE="doc hoogle hscolour -profile" 26 KiB+[ebuild  N    ~] dev-haskell/cryptohash-cryptoapi-0.1.4:0/0.1.4::haskell  USE="doc hoogle hscolour -profile" 4 KiB+[ebuild   R   ~] dev-haskell/bimap-0.4.0:0/0.4.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hinotify-0.4.1:0/0.4.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/enclosed-exceptions-1.0.3:0/1.0.3::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/blaze-textual-0.2.1.0:0/0.2.1.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/reducers-3.12.3-r1:0/3.12.3::haskell  USE="doc hoogle hscolour -profile" 14 KiB+[ebuild   R   ~] dev-haskell/language-javascript-0.7.0.0:0/0.7.0.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/skein-1.0.9.4:0/1.0.9.4::haskell  USE="doc hoogle hscolour test* (-big-endian) -force-endianness -profile -reference" 0 KiB+[ebuild  N    ~] dev-haskell/xmlgen-0.6.2.2:0/0.6.2.2::haskell  USE="doc hoogle hscolour -profile" 10 KiB+[ebuild   R   ~] dev-haskell/filestore-0.6.5:0/0.6.5::haskell  USE="doc hoogle hscolour maxcount test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hstringtemplate-0.8.8-r1:0/0.8.8::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/glfw-b-3.3.0.0:0/3.3.0.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/refinery-0.4.0.0:0/0.4.0.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/network-3.1.2.5:0/3.1.2.5::haskell  USE="doc hoogle hscolour test* -devel -profile" 0 KiB+[ebuild   R   ~] dev-haskell/http-types-0.12.3:0/0.12.3::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/extra-1.7.10:2/1.7.10::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/blaze-html-0.9.1.2:0/0.9.1.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hslua-core-2.1.0:0/2.1.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/silently-1.2.5.1:0/1.2.5.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/mockery-0.3.5:0/0.3.5::haskell  USE="doc hoogle hscolour test -profile" 4 KiB+[ebuild   R   ~] dev-haskell/x509-store-1.6.7:0/1.6.7::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/indexed-traversable-instances-0.1:0/0.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/prettyprinter-1.7.0:0/1.7.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/typed-process-0.2.9.0:0/0.2.9.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/zip-archive-0.4.2.1:0/0.4.2.1::haskell  USE="doc executable hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/githash-0.1.6.1:0/0.1.6.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/puremd5-2.1.3:0/2.1.3::haskell  USE="doc hoogle hscolour test -profile" 7 KiB+[ebuild  N    ~] dev-haskell/system-fileio-0.3.16.4:0/0.3.16.4::haskell  USE="doc hoogle hscolour test -profile" 16 KiB+[ebuild   R   ~] dev-haskell/hashtables-1.3:0/1.3::haskell  USE="doc hoogle hscolour test* -bounds-checking -debug -detailed-profiling -profile" CPU_FLAGS_X86="-sse4_2" 0 KiB+[ebuild   R   ~] dev-haskell/clientsession-0.9.1.2:0/0.9.1.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/cassava-0.5.2.0-r1:0/0.5.2.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/monoid-subclasses-0.4.6.1:0/0.4.6.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/polysemy-plugin-0.4.3.0:0/0.4.3.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/threads-0.5.1.6:0/0.5.1.6::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/weigh-0.0.16:0/0.0.16::haskell  USE="doc hoogle hscolour test -profile" 9 KiB+[ebuild  N    ~] dev-haskell/drbg-0.5.5:0/0.5.5::haskell  USE="doc hoogle hscolour test -profile" 1,511 KiB+[ebuild   R   ~] dev-haskell/lukko-0.1.1.3:0/0.1.1.3::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/direct-sqlite-2.3.26-r1:0/2.3.26::haskell  USE="doc fulltextsearch hoogle hscolour json1 test* urifilenames -profile" 0 KiB+[ebuild  N    ~] dev-haskell/random-bytestring-0.1.4:0/0.1.4::haskell  USE="doc hoogle hscolour pcg -profile" 79 KiB+[ebuild   R   ~] dev-haskell/config-schema-1.2.2.0:0/1.2.2.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/aeson-1.5.6.0-r2:0/1.5.6.0::haskell  USE="cffi doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/conduit-1.3.4.2:0/1.3.4.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/lens-5.1.1:0/5.1.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/wai-3.2.3:0/3.2.3::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/streaming-commons-0.2.2.1:0/0.2.2.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/haskell-src-exts-1.23.1:1.22/1.23.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/rio-0.1.21.0:0/0.1.21.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hspec-core-2.9.4:0/2.9.4::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hspec-discover-2.9.4:0/2.9.4::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/tasty-hslua-1.0.2:0/1.0.2::haskell  USE="doc hoogle hscolour -profile" 4 KiB+[ebuild   R   ~] dev-haskell/ghc-exactprint-0.6.4:0/0.6.4::haskell  USE="doc hoogle hscolour test* -profile -roundtrip" 0 KiB+[ebuild   R   ~] dev-haskell/witherable-0.4.2:0/0.4.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/iproute-1.7.12:0/1.7.12::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/doclayout-0.3.1.1:0/0.3.1.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/io-streams-1.5.2.1-r1:0/1.5.2.1::haskell  USE="doc hoogle hscolour network test* zlib -profile" 0 KiB+[ebuild   R   ~] dev-haskell/prettyprinter-ansi-terminal-1.1.2:0/1.1.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/sqlite-simple-0.4.18.2:0/0.4.18.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/cryptohash-md5-0.11.101.0:0/0.11.101.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/x509-validation-1.6.11:0/1.6.11::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/markdown-unlit-0.5.1-r1:0/0.5.1::haskell  USE="doc executable hoogle hscolour test -profile" 5 KiB+[ebuild   R   ~] dev-haskell/hjsmin-0.2.0.4:0/0.2.0.4::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/filepattern-0.1.2:0/0.1.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/optparse-simple-0.1.1.4:0/0.1.1.4::haskell  USE="doc hoogle hscolour test* -build-example -profile" 0 KiB+[ebuild  N    ~] dev-haskell/getopt-generics-0.13.0.4:0/0.13.0.4::haskell  USE="doc hoogle hscolour test -profile" 19 KiB+[ebuild  N    ~] dev-haskell/vector-instances-3.4:0/3.4::haskell  USE="doc hashable hoogle hscolour -profile" 6 KiB+[ebuild  N    ~] dev-haskell/rsa-2.3.1:0/2.3.1::haskell  USE="doc hoogle hscolour test -profile" 15 KiB+[ebuild  N    ~] dev-haskell/port-utils-0.2.1.0:0/0.2.1.0::haskell  USE="doc hoogle hscolour test -profile" 7 KiB+[ebuild   R   ~] dev-haskell/base64-0.4.2.3:0/0.4.2.3::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/algebraic-graphs-0.6:0/0.6::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/polysemy-zoo-0.8.0.0:0/0.8.0.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/fuzzy-0.1.0.0:0/0.1.0.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/conduit-extra-1.3.6:0/1.3.6::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hslua-marshalling-2.1.0:0/2.1.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/http-client-0.7.11:0/0.7.11::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hslogger-1.3.1.0-r2:0/1.3.1.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/shakespeare-2.0.25:0/2.0.25::haskell  USE="doc hoogle hscolour test* test-coffee test-export test-roy -profile" 0 KiB+[ebuild   R   ~] dev-haskell/pandoc-types-1.22.2:0/1.22.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/unicode-transforms-0.3.7.1:0/0.3.7.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/beam-core-0.9.2.1:0/0.9.2.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/tls-1.5.8:0/1.5.8::haskell  USE="compat doc hoogle hscolour network test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/genvalidity-1.0.0.1:0/1.0.0.1::haskell  USE="doc hoogle hscolour test -profile" 12 KiB+[ebuild   R   ~] dev-haskell/hiedb-0.4.1.0:0/0.4.1.0::haskell  USE="doc executable hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/tasty-th-0.1.7:0/0.1.7::haskell  USE="doc hoogle hscolour test -profile" 5 KiB+[ebuild   R   ~] dev-haskell/snap-core-1.0.5.0:0/1.0.5.0::haskell  USE="doc hoogle hscolour test* -debug -profile" 0 KiB+[ebuild   R   ~] dev-haskell/websockets-0.12.7.3:0/0.12.7.3::haskell  USE="doc examples hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hackage-security-0.6.1.0:0/0.6.1.0::haskell  USE="doc hoogle hscolour lukko test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/haskell-src-meta-0.8.7:0/0.8.7::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/generic-lens-2.2.1.0:0/2.2.1.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/postgresql-simple-0.6.4-r1:0/0.6.4::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/tasty-hspec-1.2:0/1.2::haskell  USE="doc hoogle hscolour -profile" 7 KiB+[ebuild   R   ~] dev-haskell/pretty-simple-4.1.1.0:0/4.1.1.0::haskell  USE="doc examples executable hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/quickcheck-classes-0.6.5.0:0/0.6.5.0::haskell  USE="aeson binary-laws doc hoogle hscolour semigroupoids semirings test* unary-laws vector -profile" 0 KiB+[ebuild   R   ~] dev-haskell/doctemplates-0.10:0/0.10::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/httpd-shed-0.4.1.1-r1:0/0.4.1.1::haskell  USE="doc hoogle hscolour -buildexamples -profile" 5 KiB+[ebuild   R   ~] dev-haskell/io-streams-haproxy-1.0.1.0-r2:0/1.0.1.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hi-file-parser-0.1.2.0:0/0.1.2.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/rebase-1.15.0.3:0/1.15.0.3::haskell  USE="doc hoogle hscolour -profile" 21 KiB+[ebuild  N    ~] dev-haskell/turtle-1.5.24:0/1.5.24::haskell  USE="doc hoogle hscolour test -profile" 57 KiB+[ebuild  N    ~] dev-haskell/hspec-contrib-0.5.1:0/0.5.1::haskell  USE="doc hoogle hscolour -profile" 3 KiB+[ebuild  N    ~] dev-haskell/microlens-aeson-2.3.1:0/2.3.1::haskell  USE="doc hoogle hscolour test -profile" 430 KiB+[ebuild  N    ~] dev-haskell/trifecta-2.1.2:0/2.1.2::haskell  USE="doc hoogle hscolour test -profile" 59 KiB+[ebuild  N    ~] dev-haskell/htf-0.14.0.6:0/0.14.0.6::haskell  USE="doc hoogle hscolour -profile" 79 KiB+[ebuild   R   ~] dev-haskell/apply-refact-0.9.3.0:0/0.9.3.0::haskell  USE="doc executable hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/clay-0.13.3-r1:0/0.13.3::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/optics-0.4:0/0.4::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-util/shellcheck-0.8.0:0/0.8.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hsass-0.8.0:0/0.8.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/linear-1.21.8:0/1.21.8::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/yaml-0.11.8.0:0/0.11.8.0::haskell  USE="doc examples executable hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/http-client-tls-0.3.6.1:0/0.3.6.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/xml-conduit-1.9.1.1:0/1.9.1.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/rerebase-1.15.0.3:0/1.15.0.3::haskell  USE="doc hoogle hscolour -profile" 18 KiB+[ebuild  N    ~] dev-haskell/tasty-lua-1.0.2:0/1.0.2::haskell  USE="doc hoogle hscolour test -profile" 11 KiB+[ebuild   R   ~] dev-haskell/cryptonite-conduit-0.2.2:0/0.2.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/http-4000.3.16-r1:0/4000.3.16::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/lifted-async-0.10.2:0/0.10.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/commonmark-0.2.2:0/0.2.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/genvalidity-property-1.0.0.0:0/1.0.0.0::haskell  USE="doc hoogle hscolour test -profile" 10 KiB+[ebuild   R   ~] dev-haskell/unicode-collation-0.1.3.1:0/0.1.3.1::haskell  USE="doc executable hoogle hscolour test* -doctests -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hslua-objectorientation-2.1.0:0/2.1.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/mod-0.1.2.2:0/0.1.2.2::haskell  USE="doc hoogle hscolour semirings test* vector -profile" 0 KiB+[ebuild   R   ~] dev-haskell/simple-sendfile-0.2.30:0/0.2.30::haskell  USE="allow-bsd doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/project-template-0.2.1.0:0/0.2.1.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/tar-conduit-0.3.2-r1:0/0.3.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/authenticate-oauth-1.6.0.1-r1:0/1.6.0.1::haskell  USE="doc hoogle hscolour -profile" 10 KiB+[ebuild  N    ~] dev-haskell/interpolate-0.2.1:0/0.2.1::haskell  USE="doc hoogle hscolour test -profile" 8 KiB+[ebuild   R   ~] dev-haskell/hslua-aeson-2.1.0:0/2.1.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/ipynb-0.2:0/0.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/texmath-0.12.4:0/0.12.4::haskell  USE="doc executable hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hslua-classes-2.1.0:0/2.1.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/tree-diff-0.2.1.1:0/0.2.1.1::haskell  USE="doc hoogle hscolour test -profile" 26 KiB+[ebuild   R   ~] dev-haskell/monad-dijkstra-0.1.1.3:0/0.1.1.3::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/aeson-casing-0.2.0.0:0/0.2.0.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/beam-sqlite-0.5.1.2:0/0.5.1.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/higgledy-0.4.1.1-r4:0/0.4.1.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/singletons-base-3.0:0/3.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/vinyl-0.13.3:0/0.13.3::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/happstack-server-7.6.1-r2:0/7.6.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/missingh-1.4.3.0-r2:0/1.4.3.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hedgehog-1.0.5:0/1.0.5::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hslua-packaging-2.1.0:0/2.1.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/focus-1.0.2:0/1.0.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/deferred-folds-0.9.18.1:0/0.9.18.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/skylighting-core-0.12.3:0/0.12.3::haskell  USE="doc executable hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hpack-0.34.4:0/0.34.4::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/commonmark-extensions-0.2.3.2:0/0.2.3.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/haddock-library-1.10.0-r2:0/1.10.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hie-bios-0.9.1:0/0.9.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/js-flot-0.8.3:0/0.8.3::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/js-jquery-3.3.1:0/3.3.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/genvalidity-hspec-1.0.0.0:0/1.0.0.0::haskell  USE="doc hoogle hscolour test -profile" 12 KiB+[ebuild  N    ~] dev-haskell/wreq-0.5.3.3:0/0.5.3.3::haskell  USE="doc hoogle hscolour test -aws -httpbin -profile" 57 KiB+[ebuild   R   ~] dev-haskell/shelly-1.9.0:0/1.9.0::haskell  USE="doc examples hoogle hscolour test* -lifted -profile" 0 KiB+[ebuild   R   ~] dev-haskell/citeproc-0.6.0.1:0/0.6.0.1::haskell  USE="doc executable hoogle hscolour icu test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/html-conduit-1.3.2.1:0/1.3.2.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/floskell-0.10.6:0/0.10.6::haskell  USE="doc executable hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/implicit-hie-0.1.2.7:0/0.1.2.7::haskell  USE="doc executable hoogle hscolour test* -profile" 0 KiB+[ebuild   R   *] app-portage/hackport-9999::haskell  USE="test*" 0 KiB+[ebuild   R   ~] dev-haskell/feed-1.3.2.1:0/1.3.2.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/lsp-1.4.0.0:0/1.4.0.0::haskell  USE="doc examples hoogle hscolour test* -profile" 0 KiB+[ebuild     U ~] dev-haskell/tasty-hedgehog-1.2.0.0:0/1.2.0.0::haskell [1.1.0.0:0/1.1.0.0::haskell] USE="doc hoogle hscolour test* -profile" 5 KiB+[ebuild   R   ~] dev-haskell/path-0.9.2:0/0.9.2::haskell  USE="doc hoogle hscolour test* -dev -profile" 0 KiB+[ebuild   R   ~] dev-haskell/fsnotify-0.3.0.1:0/0.3.0.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hslua-2.1.0:0/2.1.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/mustache-2.4.0:0/2.4.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/patch-0.0.5.2:0/0.0.5.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/hedgehog-fn-1.0:0/1.0::haskell  USE="doc hoogle hscolour -build-examples -profile" 7 KiB+[ebuild   R   ~] dev-haskell/hslua-module-path-1.0.2:0/1.0.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hslua-module-system-1.0.2:0/1.0.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hslua-module-text-1.0.2:0/1.0.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hslua-module-version-1.0.2:0/1.0.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/primitive-extras-0.10.1.4:0/0.10.1.4::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/implicit-hie-cradle-0.5.0.0:0/0.5.0.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/retry-0.9.0.0:0/0.9.0.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/path-io-1.6.3:0/1.6.3::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/uri-bytestring-0.3.3.1:0/0.3.3.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/bsb-http-chunked-0.0.0.4:0/0.0.0.4::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/linear-base-0.1.0:0/0.1.0::haskell  USE="doc hoogle hscolour test -profile" 130 KiB+[ebuild   R   ~] dev-haskell/pandoc-lua-marshal-0.1.6:0/0.1.6::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/stm-hamt-1.2.0.7:0/1.2.0.7::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/ghcid-0.8.7:0/0.8.7::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/nonempty-containers-0.3.4.4:0/0.3.4.4::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/auto-update-0.1.6:0/0.1.6::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/http-download-0.2.0.0:0/0.2.0.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/stm-containers-1.2:0/1.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/reflex-vty-0.2.0.0-r1:0/0.2.0.0::haskell  USE="doc examples hoogle hscolour test -profile" 0 KiB+[ebuild  N    ~] dev-haskell/one-liner-2.0:0/2.0::haskell  USE="doc hoogle hscolour test -profile" 17 KiB+[ebuild  N    ~] dev-haskell/postgres-options-0.2.0.0:0/0.2.0.0::haskell  USE="doc hoogle hscolour test -profile" 5 KiB+[ebuild   R   ~] dev-haskell/fast-logger-3.0.5:0/3.0.5::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hls-graph-1.7.0.0:0/1.7.0.0::haskell  USE="doc hoogle hscolour test* -embed-files -profile -stm-stats" 0 KiB+[ebuild  N    ~] dev-haskell/tmp-postgres-1.34.1.0-r1:0/1.34.1.0::haskell  USE="doc hoogle hscolour -profile" 33 KiB+[ebuild   R   ~] dev-haskell/generic-data-0.9.2.0:0/0.9.2.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/reflex-process-0.3.1.1:0/0.3.1.1::haskell  USE="doc examples hoogle hscolour test -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hls-plugin-api-1.4.0.0:0/1.4.0.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/beam-postgres-0.5.2.1:0/0.5.2.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/warp-3.3.21:0/3.3.21::haskell  USE="allow-sendfilefd doc hoogle hscolour test* x509 -debug -profile" 0 KiB+[ebuild   R   ~] dev-haskell/persistent-2.13.2.1:0/2.13.2.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/rio-orphans-0.1.2.0:0/0.1.2.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hls-explicit-imports-plugin-1.1.0.0:0/1.1.0.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hls-floskell-plugin-1.0.1.1:0/1.0.1.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hls-alternate-number-format-plugin-1.1.0.0:0/1.1.0.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hls-haddock-comments-plugin-1.0.1.0-r1:0/1.0.1.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hls-module-name-plugin-1.0.2.0:0/1.0.2.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hls-qualify-imported-names-plugin-1.0.1.0-r1:0/1.0.1.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hls-rename-plugin-1.0.0.2:0/1.0.0.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/wai-extra-3.1.12.1:0/3.1.12.1::haskell  USE="doc examples hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/persistent-test-2.13.0.4:0/2.13.0.4::haskell  USE="doc hoogle hscolour -profile" 31 KiB+[ebuild   R   ~] dev-haskell/hls-refine-imports-plugin-1.0.2.0:0/1.0.2.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/yesod-core-1.6.21.0:0/1.6.21.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/persistent-sqlite-2.13.0.4:0/2.13.0.4::haskell  USE="doc hoogle hscolour test* -build-sanity-exe -profile" 0 KiB+[ebuild   R   ~] dev-haskell/wai-app-static-3.1.7.2-r1:0/3.1.7.2::haskell  USE="doc hoogle hscolour test* -print -profile" 0 KiB+[ebuild   R   ~] app-text/pandoc-2.17.1.1:0/2.17.1.1::haskell  USE="doc hoogle hscolour test* trypandoc -embed-data-files -profile" 0 KiB+[ebuild   R   ~] dev-haskell/yesod-persistent-1.6.0.7:0/1.6.0.7::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/wai-websockets-3.0.1.2:0/3.0.1.2::haskell  USE="doc examples hoogle hscolour -profile" 7 KiB+[ebuild   R   ~] dev-haskell/hakyll-4.15.1.1-r1:0/4.15.1.1::haskell  USE="checkexternal doc hoogle hscolour previewserver test* usepandoc watchserver -buildwebsite -profile" 0 KiB+[ebuild   R   ~] dev-haskell/yesod-form-1.7.0:0/1.7.0::haskell  USE="doc hoogle hscolour network-uri test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/wai-cors-0.2.7:0/0.2.7::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/yesod-test-1.6.14:0/1.6.14::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/yesod-static-1.6.1.0:0/1.6.1.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hls-selection-range-plugin-1.0.0.0-r1:0/1.0.0.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/hspec-megaparsec-2.2.0:0/2.2.0::haskell  USE="doc hoogle hscolour test -profile" 0 KiB+[ebuild   R   ~] dev-haskell/neat-interpolation-0.5.1.2:0/0.5.1.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/config-ini-0.2.4.0-r2:0/0.2.4.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/brick-0.69.1:0/0.69.1::haskell  USE="demos doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/cassava-megaparsec-2.0.2:0/2.0.2::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/stack-2.7.6_pre20220421:0/2.7.6_pre20220421::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild  N    ~] dev-haskell/megaparsec-tests-9.2.0:0/9.2.0::haskell  USE="doc hoogle hscolour test -profile" 0 KiB+[ebuild   R   ~] dev-haskell/parser-combinators-1.3.0:0/1.3.0::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] dev-haskell/hledger-lib-1.26.1:0/1.26.1::haskell  USE="doc hoogle hscolour test* -profile" 0 KiB+[ebuild   R   ~] app-office/hledger-1.26.1:0/1.26.1::haskell  USE="doc hoogle hscolour terminfo test* threaded -profile" 0 KiB+[ebuild  N    ~] app-office/hledger-iadd-1.3.17:0/1.3.17::haskell  USE="doc hoogle hscolour test -profile" 68 KiB+[ebuild   R   ~] app-office/hledger-web-1.26.1:0/1.26.1::haskell  USE="doc hoogle hscolour test* threaded -library-only -profile" 0 KiB++Total: 453 packages (14 upgrades, 109 new, 330 reinstalls), Size of downloads: 186,415 KiB++ * IMPORTANT: 3 news items need reading for repository 'gentoo'.+ * Use eselect news read to view new items.+