Îõ³h&W“ó}»      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\] ^ _ ` a b c d e f g h i j k l m n o p q r s tuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãä å æ ç è é ê ë ì í!î!ï!ð!ñ!ò!ó!ô!õ!ö!÷!ø!ù!ú!û!ü!ý!þ!ÿ!€!�!‚!ƒ!„!…!†!‡!ˆ!‰!Š!‹!Œ!�!Ž!�!�!‘!’!“!”!•!–!—!˜!™!š!›!œ!�!ž!Ÿ! !¡!¢!£!¤!¥!¦!§!¨!©!ª!«!¬!­!®!¯!°!±!²!³!´!µ!¶!·!¸!¹!º!»"¼"½"¾"¿"À"Á"Â"Ã"Ä"Å"Æ"Ç"È"É"Ê"Ë"Ì"Í"Î"Ï"Ð"Ñ"Ò"Ó"Ô"Õ"Ö"×"Ø"Ù"Ú"Û"Ü"Ý"Þ"ß"à#á#â#ã#ä#å#æ#ç#è#é#ê#ë#ì#í#î#ï#ð#ñ$ò$ó$ô$õ$ö$÷$ø$ù$ú$û$ü$ý$þ$ÿ$€$�$‚$ƒ%„%…%†%‡%ˆ%‰&Š&‹&Œ&�&Ž&�&�&‘&’&“&”&•&–'—'˜'™'š'›'œ'�'ž'Ÿ' '¡'¢'£(¤(¥(¦(§(¨(©(ª(«(¬(­(®(¯(°(±(²(³)´)µ)¶)·)¸)¹)º)»)¼)½)¾*¿*À*Á*Â*Ã*Ä*Å*Æ*Ç*È*É*Ê+Ë+Ì+Í+Î+Ï+Ð+Ñ+Ò+Ó+Ô+Õ+Ö+×+Ø+Ù+Ú+Û+Ü+Ý+Þ+ß+à+á+â+ã+ä+å+æ+ç+è+é+ê+ë+ì+í+î+ï+ð+ñ+ò+ó+ô+õ+ö+÷+ø+ù+ú,û,ü,ý,þ,ÿ,€,�,‚,ƒ,„,…,†,‡,ˆ,‰,Š,‹,Œ,�,Ž,�,�,‘,’-“-”-•-–-—-˜-™-š-›-œ-�-ž-Ÿ- -¡-¢-£-¤-¥-¦-§-¨-©-ª-«-¬-­-®-¯-°-±-²-³-´-µ-¶-·-¸.¹.º.».¼.½.¾.¿.À.Á.Â.Ã.Ä.Å.Æ.Ç.È.É.Ê.Ë.Ì.Í/Î/Ï/Ð/Ñ/Ò/Ó/Ô/Õ/Ö/×/Ø/Ù/Ú/Û/Ü/Ý0Þ0ß0à0á0â0ã0ä0å0æ1ç1è1é1ê1ë1ì1í1î1ï1ð1ñ1ò1ó2ô2õ2ö2÷2ø2ù2ú2û2ü2ý2þ ÿ € � ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ � Ž � � ‘ ’ “ ” • – — ˜ ™ š ›3œ3�3ž3Ÿ3 3¡3¢3£3¤3¥3¦3§3¨3©3ª3«3¬3­3®3¯3°3±3²3³3´3µ3¶3·3¸3¹3º3»3¼3½3¾3¿3À3Á3Â3Ã3Ä3Å3Æ3Ç3È3É3Ê3Ë3Ì3Í3Î3Ï3Ð3Ñ3Ò3Ó3Ô3Õ3Ö3×3Ø4Ù4Ú4Û4Ü4Ý4Þ4ß4à4á4â4ã4ä4å4æ4ç4è4é4ê4ë4ì4í4î4ï4ð4ñ4ò4ó4ô4õ4ö4÷4ø4ù4ú4û4ü4ý4þ4ÿ4€4�4‚4ƒ4„4…4†4‡4ˆ4‰4Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸5¹5º6»6¼7½7¾7¿7À7Á7Â7Ã7Ä7Å7Æ7Ç7È7É7Ê7Ë7Ì7Í7Î7Ï7Ð7Ñ7Ò7Ó7Ô7Õ7Ö7×7Ø7Ù7Ú7Û7Ü7Ý7Þ7ß7à7á7â7ã7ä7å7æ7ç7è7é7ê7ë7ì7í7î7ï7ð7ñ7ò7ó7ô7õ7ö7÷7ø7ù7ú7û7ü7ý7þ7ÿ7€7�7‚7ƒ7„7…7†7‡7ˆ7‰7Š7‹7Œ7�7Ž7�7�7‘7’7“7”7•7–7—7˜7™7š7›7œ7�7ž7Ÿ7 7¡7¢7£7¤7¥7¦7§7¨7©7ª7«7¬7­7®7¯7°7±7²7³7´7µ7¶7·7¸7¹7º7»7¼7½7¾7¿7À7Á7Â7Ã7Ä7Å7Æ7Ç7È7É7Ê7Ë7Ì7Í7Î7Ï7Ð7Ñ7Ò7Ó7Ô7Õ7Ö7×7Ø7Ù7Ú7Û7Ü7Ý7Þ7ß7à7á7â7ã7ä7å7æ7ç7è7é7ê7ë7ì7í7î7ï7ð7ñ7ò7ó7ô7õ7ö7÷7ø7ù7ú7û7ü7ý7þ8ÿ8€ 8� 8‚ 9ƒ 9„ 9… 9† 9‡ 9ˆ 9‰ 9Š 9‹ 9Œ 9� 9Ž :� :� :‘ :’ :“ :” :• :– :— :˜ :™ :š :› :œ :� :ž :Ÿ :  :¡ :¢ :£ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ;½ ;¾ ;¿ ;À ;Á ; ;à ;Ä ;Å ;Æ ;Ç ;È ;É ;Ê ;Ë ;Ì ;Í ;Î ;Ï ;Ð ;Ñ ;Ò ;Ó ;Ô ;Õ ;Ö ;× ;Ø ;Ù ;Ú ;Û ;Ü ;Ý ;Þ <ß <à <á <â <ã =ä =å =æ =ç =è =é =ê =ë =ì =í =î >ï >ð >ñ >ò >ó >ô >õ >ö >÷ >ø >ù >ú >û >ü >ý >þ >ÿ >€ >� >‚ >ƒ >„ >… >† >‡ >ˆ >‰ >Š >‹ >Œ >� >Ž ?� ?� ?‘ ?’ ?“ ?” ?• ?– ?— ?˜ ?™ ?š ?› ?œ ?� ?ž ?Ÿ ?  ?¡ ?¢ @£ @¤ @¥ @¦ @§ @¨ @© @ª A« A¬ A­ A® A¯ A° A± A² A³ A´ Aµ A¶ A· A¸ A¹ Aº A» A¼ A½ A¾ A¿ AÀ AÁ A Aà AÄ AÅ AÆ AÇ AÈ AÉ AÊ AË AÌ AÍ AÎ AÏ AÐ AÑ AÒ AÓ AÔ AÕ AÖ A× AØ AÙ AÚ AÛ AÜ AÝ AÞ Aß Aà Aá Aâ Aã Aä Aå Aæ Aç Aè Aé Aê Aë Aì Aí Aî Aï Að Añ Aò Aó Aô Aõ Aö A÷ Aø Aù Aú Aû Aü Aý Aþ Aÿ A€ A� A‚ Aƒ A„ A… A† B‡ Bˆ B‰ BŠ B‹ BŒ B� BŽ B� B� B‘ B’ B“ B” B• B– B— B˜ B™ Bš B› Bœ C� Cž CŸ C  C¡ C¢ C£ C¤ C¥ C¦ C§ C¨ C© Cª C« C¬ C­ C® C¯ C° C± C² C³ C´ Cµ C¶ C· C¸ C¹ Cº C» C¼ C½ C¾ C¿ CÀ CÁ C Cà CÄ CÅ CÆ CÇ CÈ É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì Dí Dî Dï Dð Dñ Dò Dó Dô Dõ Dö D÷ Dø Dù Dú Dû Dü Dý Dþ Dÿ D€ D� D‚ Dƒ D„ D… D† D‡ Dˆ D‰ DŠ D‹ DŒ D� DŽ D� D� D‘ D’ D“ D” E• F– — ˜ ™ š › œ � ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ G­ H® H¯ H° H± H² H³ H´ Hµ H¶ H· H¸ H¹ Hº H» H¼ H½ H¾ H¿ HÀ HÁ Â Ã Ä Å IÆ IÇ IÈ IÉ IÊ IË IÌ IÍ IÎ IÏ IÐ IÑ IÒ IÓ IÔ IÕ IÖ I× IØ IÙ IÚ IÛ IÜ IÝ IÞ Iß Ià Iá Iâ Jã Jä Jå Jæ Jç Jè Jé Jê Jë Jì Kí Kî Kï Kð Kñ Kò Kó Kô Kõ Kö K÷ Kø Kù Kú Kû Kü Ký Kþ Kÿ K€ K� K‚ Kƒ K„ K… K† K‡ Kˆ K‰ KŠ K‹ KŒ K� KŽ K� K� K‘ K’ K“ K” K• K– K— K˜ K™ Kš K› Kœ K� Kž KŸ K  K¡ K¢ K£ K¤ K¥ K¦ K§ K¨ K© Kª K« K¬ K­ K® K¯ K° K± L² L³ L´ Lµ L¶ L· L¸ L¹ Lº L» L¼ L½ L¾ L¿ LÀ LÁ L Là LÄ LÅ LÆ LÇ LÈ LÉ LÊ LË LÌ LÍ LÎ LÏ LÐ LÑ LÒ LÓ LÔ LÕ LÖ L× LØ LÙ LÚ LÛ LÜ LÝ LÞ Lß Là Lá Lâ Lã Lä Lå Læ Lç Lè Lé Lê Lë Lì Lí Lî Lï Lð Lñ Lò Ló Lô Lõ Lö L÷ Lø Lù Lú Lû Lü Lý Lþ Lÿ L€L�L‚LƒL„L…L†L‡LˆL‰LŠL‹LŒL�LŽL�L�L‘L’L“L”L•L–L—L˜L™LšL›LœL�LžLŸL L¡L¢L£L¤L¥L¦L§L¨L©LªL«L¬L­L®L¯L°L±L²L³L´LµL¶L·L¸L¹LºL»L¼L½L¾L¿LÀLÁLÂLÃLÄLÅLÆLÇLÈLÉLÊLËLÌLÍLÎLÏLÐLÑLÒLÓLÔLÕLÖL×LØLÙLÚLÛLÜLÝLÞLßLàLáLâLãLäLåLæLçLèLéLêLëLìLíLîLïLðLñLòLóLôLõLöL÷LøLùLúLûLüLýLþLÿL€L�L‚LƒL„L…L†L‡LˆL‰LŠL‹LŒL�LŽL�L�L‘L’L“L”L•L–L—L˜L™LšL›LœL�LžLŸL L¡M¢M£M¤M¥M¦N§N¨N©NªO«O¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝPÞPßPàPáPâPãQäQåQæQçQèQéQêQëQìQíQîQïQðQñQòQóQôQõQöQ÷QøQùQúQûQüQýQþQÿQ€Q�Q‚QƒQ„Q…Q†Q‡QˆQ‰QŠQ‹QŒQ�QŽQ�Q�Q‘Q’Q“Q”Q•Q–Q—Q˜Q™QšQ›QœQ�QžQŸQ Q¡Q¢Q£Q¤Q¥Q¦Q§Q¨Q©QªQ«Q¬Q­Q®Q¯Q°Q±Q²Q³Q´QµQ¶Q·Q¸Q¹QºQ»Q¼Q½Q¾Q¿QÀQÁQÂQÃQÄQÅQÆQÇQÈQÉRÊRËRÌRÍRÎRÏRÐRÑRÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«S¬S­S®S¯S°S±S²S³S´SµS¶S·T¸T¹UºU»U¼U½U¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüVýVþWÿX€X�X‚XƒX„X…X†X‡XˆX‰XŠX‹XŒY�ZŽZ�Z�[‘P’P“P”P•P–P—P˜P™PšP›PœP�PžPŸP P¡P¢P£P¤P¥P¦P§P¨P©PªP«P¬\­\®\¯\°\±\²\³\´\µ\¶\·\¸\¹\º\»\¼\½\¾\¿\À\Á\Â\Ã\Ä\Å\Æ\Ç\È\É\Ê\Ë\Ì\Í\Î\Ï\Ð\Ñ\Ò\Ó\Ô\Õ\Ö\×\Ø\Ù\Ú]Û]Ü]Ý^Þ^ß^à^á^â^ã^ä^å^æ^ç^è^é^ê^ë^ì^í^î^ï^ð^ñ^ò^ó^ô^õ^ö^÷_ø_ù_ú_û_ü_ý_þ_ÿ_€`�`‚`ƒ`„`…`†`‡`ˆ`‰`Š`‹`Œ`�`Ž`�a�a‘a’a“b”b•b–b—b˜b™bšb›bœb�bžbŸb b¡b¢b£c¤c¥c¦c§c¨c©cªc«c¬c­c®c¯c°c±c²c³c´cµc¶c·c¸c¹cºc»c¼c½c¾d¿dÀdÁdÂeÃeÄeÅeÆeÇeÈfÉfÊfËfÌfÍfÎfÏgÐgÑhÒiÓiÔiÕiÖi×iØiÙiÚiÛiÜiÝiÞißiàiáiâiãiäiåiæiçièiéiêiëiìiíiîiïiðiñiòióiôiõiöi÷iøiùiúiûiüiýiþiÿi€i�i‚iƒi„j…j†j‡jˆj‰jŠj‹jŒk�kŽk�k�k‘k’k“k”k•k–k—k˜k™kšk›kœk�kžkŸk k¡k¢k£k¤k¥k¦k§k¨k©kªk«k¬k­k®k¯k°k±k²k³k´kµk¶k·k¸k¹kºk»k¼k½k¾k¿kÀkÁkÂkÃkÄkÅkÆkÇkÈkÉkÊkËkÌkÍkÎkÏkÐkÑkÒkÓkÔkÕkÖk×kØkÙkÚkÛkÜkÝkÞkßkàkákâkãkäkåkækçkèkékêkëkìkíkîkïkðkñkòkókôkõkök÷køkùkúkûkükýkþkÿk€k�k‚kƒk„k…k†k‡kˆk‰kŠk‹kŒk�kŽk�k�k‘k’k“k”k•k–k—k˜k™kšk›kœk�kžkŸk k¡k¢k£k¤k¥k¦k§k¨k©kªk«k¬k­k®k¯k°k±k²k³k´kµk¶k·k¸k¹kºk»k¼k½k¾k¿kÀkÁkÂkÃkÄkÅkÆkÇkÈkÉkÊkËkÌkÍkÎkÏkÐkÑkÒkÓkÔkÕkÖk×kØlÙmÚmÛmÜmÝmÞmßmàmámâmãmämåmæmçmèménênënìnínînïnðnñnònónônõnön÷nønùnúnûnünýnþnÿn€n�n‚nƒn„n…n†n‡nˆn‰nŠn‹nŒn�nŽn�n�n‘n’n“n”n•n–n—n˜n™nšn›nœn�nžnŸn n¡n¢n£o¤o¥o¦o§o¨o©oªo«o¬o­o®o¯o°o±o²o³o´oµo¶o·o¸o¹oºo»o¼o½o¾o¿oÀoÁoÂoÃoÄoÅoÆoÇoÈoÉoÊoËoÌoÍoÎoÏoÐoÑoÒoÓoÔoÕoÖo×oØoÙoÚoÛoÜoÝoÞoßoàoáoâoãoäoåoæoçoèpépêpëpìpípîpïpðpñpòpópôpõpöp÷pøpùqúqûqüqýqþqÿq€q�q‚qƒq„q…q†q‡qˆq‰qŠq‹qŒq�qŽq�q�q‘r’r“r”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄsÅsÆsÇsÈsÉsÊsËsÌsÍsÎsÏsÐsÑsÒsÓsÔsÕsÖs×sØtÙtÚtÛtÜtÝuÞußuàuáuâuãuäuåuævçvèvévêvëvìvívîvïvðwñwòwówôwõwöw÷xøxùxúxûxüxýxþxÿy€y�y‚yƒy„y…y†y‡yˆz‰zŠz‹zŒz�zŽz�z�{‘{’{“{”{•{–{—{˜|™|š|›|œ|�|ž|Ÿ| |¡|¢£}¤}¥~¦~§¨©ª€«€¬€­€®€¯€°€±€²€³�´�µ�¶�·‚¸‚¹‚ºƒ…  Safe-InferredÙÚ?popqrorqp Safe-InferredÙÚ@Ú» cabal-install Reads the FilePath1 pointed to by the symbolic link and returns it.See readlink(2)t cabal-install8Returns the absolute pathname of the current executable.áNote that for scripts and interactive sessions, this is the path to the interpreter (e.g. ghci.)Since: 4.6.0.0tt Safe-InferredÙÚA Safe-InferredÙÚA1ƒ¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®K¯°TUVXWY\[Z± KTUVXWY\[Z(c) Duncan Coutts 2009BSD-likecabal-devel@haskell.orgportable Safe-Inferred;ÙÚFà ‹ cabal-install&The package this build report is aboutŒ cabal-install(The OS and Arch the package was built onŽ cabal-install1The Haskell compiler (and hopefully version) used� cabal-install,The uploading client, ie cabal-install-x.y.z� cabal-install"Which configurations flags we used‘ cabal-install.Which dependent packages we were using exactly’ cabal-installDid installing work ok?“ cabal-install)Configure outcome, did configure work ok?” cabal-install)Configure outcome, did configure work ok?z}{|~€�‚ƒ„…†‡ˆ‰Š�Ž‹�Œ�‘’“”•–—˜•–—˜‰Š�Ž‹�Œ�‘’“”~€�‚ƒ„…†‡ˆz}{| Safe-InferredÙÚG] ‰²³´µ¶·¸¹º» ‰²³´µ¶·¸¹º» Safe-Inferred6ÙÚHu¼ cabal-install¼— is a quantity semaphore in which the resource is acquired and released in units of one. It provides guaranteed FIFO ordering for satisfying blocked ¾ calls.¼½¾¿¼½¾¿ Safe-Inferred;ÙÚL³Á cabal-install’Global policy for all packages to say if we prefer package versions that are already installed locally or if we just prefer the latest available. cabal-installÑAlways prefer the latest version irrespective of any existing installed version.(This is the standard policy for upgrade.à cabal-installòAlways prefer the oldest version irrespective of any existing installed version or packages explicitly requested.#This is enabled by --prefer-oldest.Ä cabal-installÌAlways prefer the installed versions over ones that would need to be installed. Secondarily, prefer latest versions (eg the latest installed version or if there are none then the latest source version).Å cabal-installÿPrefer the latest version for packages that are explicitly requested but prefers the installed version for any other packages.(This is the standard policy for install.Æ cabal-install!All the solvers that can be used.È cabal-install%All the solvers that can be selected. ÁÂÃÄÅÆÇÈÉ ÈÉÆÇÁÂÃÄÅ(c) Dmitry Astapov 2010BSD-likecabal-devel@gmail.com provisionalportable Safe-InferredÙÚÜOÝ cabal-installAttempts to decompress the bytesÉ under the assumption that "data format" error at the very beginning of the stream means that it is already decompressed. Caller should make sanity checks to verify that it is not, in fact, garbage.ƒThis is to deal with http proxies that lie to us and transparently decompress without removing the content-encoding header. See: +https://github.com/haskell/cabal/issues/678ÝÝ Safe-Inferred;ÙÚTK à cabal-installe.g. "/", "c:" or result of ²â cabal-installA piece of a globbing patternæ cabal-install6A single directory or file component of a globbed pathê cabal-installtrailing dir, a glob ending in /ë cabal-install!A file path specified by globbingí cabal-install Check if a ëÔ doesn't actually make use of any globbing and is in fact equivalent to a non-glob ‘.ËIf it is trivial in this sense then the result is the equivalent constant ‘î. On the other hand if it is not trivial (so could in principle match more than one file) then the result is Nothing.î cabal-installGet the ‘ corresponding to a Þ.The ‘2 argument is required to supply the path for the ß case.ï cabal-installMatch a ë» against the file system, starting from a given root directory for relative paths. The results of relative globs are relative to the given root. Matches for absolute globs are absolute.ð cabal-installMatch a çð against the file system, starting from a given root directory. The results are all relative to the given root.ñ cabal-install6Match a globbing pattern against a file path componentî cabal-installroot for relative pathsÞàßáâåãäæçèéêëìíîïðñëìÞàßáçèéêæâåãäïðñíî(c) Andrea Vezzosi 2009BSD-likecabal-devel@haskell.orgportable Safe-InferredÙÚUŒŒ Safe-Inferred6;ÙÚW-Ž cabal-install&Hash some data. Currently uses SHA256.‘ cabal-install(Hash the content of a file. Uses SHA256.’ cabal-install(Convert a hash from TUF metadata into a PackageSourceHash.éNote that TUF hashes don't necessarily have to be SHA256, since it can support new algorithms in future.“ cabal-install!Truncate a 32 byte SHA256 hash toÝFor example 20 bytes render as 40 hex chars, which we use for unit-ids. Or even 4 bytes for hashedInstalledPackageIdShort�Ž��‘’“�Ž“��‘’(c) 2016 Herbert Valerio RiedelBSD3 Safe-Inferred"%&;ÑÙÚYß™ cabal-installÂUNIX timestamp (expressed in seconds since unix epoch, i.e. 1970).� cabal-installCompute the maximum ™ valueReturns ž& for the empty list. Also note that ž compares as smaller to all non-ž values.³ cabal-installPretty-prints ™" in ISO8601/RFC3339 format (e.g. "2017-12-31T23:59:59Z")Returns empty string for ž in order for $null (display nullTimestamp) == Trueto hold.ž cabal-install(Special timestamp value to be used when  timestamp is missingunknowninvalid™š›œ�ž™žš›œ�4Factory functions for producing known license types.BSD-likecabal-devel@haskell.org provisionalportable Safe-InferredÙÚZ� ©ª«¬­®¯°±²³´ ©ª«¬­¯°®±²³´(c) Duncan Coutts 2012BSD-likecabal-devel@haskell.org provisionalportable Safe-InferredÂÙÚ_N· cabal-install‹A simple concurrency abstraction. Jobs can be spawned and can complete in any order. This allows both serial and parallel implementations.¸ cabal-install!Add a new job to the pool of jobs¹ cabal-installWait until one job is completeº cabal-installÔReturns True if there are any outstanding jobs (ie spawned but yet to be collected)» cabal-install>Try to cancel any outstanding but not-yet-started jobs. Call ºÊ after this to find out if any jobs are left (ie could not be cancelled).¼ cabal-installMake a ·õ that executes all jobs serially and in order. It only executes jobs on demand when they are collected, not eagerly.Cancelling will cancel all' jobs that have not been collected yet.½ cabal-installMake a ·Õ that eagerly executes jobs in parallel, with a given maximum degree of parallelism.™Cancelling will cancel jobs that have not yet begun executing, but jobs that have already been executed or are currently executing cannot be cancelled. µ¶·»º¸¹¼½¾¿ÀÁ ·¼½¸¹º»¶¾¿µÀÁ Safe-Inferred;ÙÚã_¯ÂÃÄÅÆÇÂÃÄÅÆÇ Safe-Inferred";ÙÚcÏ cabal-install)The cabal project file name; defaults to  cabal.projectö. The name itself denotes the cabal project file name, but it also is the base of auxiliary project files, such as cabal.project.local and cabal.project.freezeÆ which are also read and written out in some cases. If the path is not found in the current working directory, we will successively probe relative to parent directories until this name is found.Ð cabal-installŒWhether to ignore the local project (i.e. don't search for cabal.project) The exact interpretation might be slightly different per command.Ó cabal-installAs almost all commands use Í÷ but not all can honour "ignore-project" flag, provide this utility to remove the flag parsing from the help message.ÍÎÐÏÑÒÓÍÎÐÏÑÒÓ Safe-Inferred6ÙÚe<Ù cabal-installèWrite command-line flags to a file, separated by null characters. This format is also suitable for the xargs -0Ä command. Using the null character also avoids the problem of escaping newlines or spaces, because unlike other whitespace characters, the null character is not valid in command-line arguments.Û cabal-installþRead command-line arguments, separated by null characters, from a file. Returns the default flags if the file does not exist.ØÙÚÛÛÙÚØ Safe-InferredÙÚj;Þ cabal-installïTry to lookup RFC1464-encoded mirror urls for a Hackage repository url by performing a DNS TXT lookup on the  _mirrors.-prefixed URL hostname. Example: for  http://hackage.haskell.org/, perform a DNS TXT query for the hostname _mirrors.hackage.haskell.org which may look like e.g. —_mirrors.hackage.haskell.org. 300 IN TXT "0.urlbase=http://hackage.fpcomplete.com/" "1.urlbase=http://objects-us-west-1.dream.io/hackage-mirror/"†NB: hackage-security doesn't require DNS lookups being trustworthy, as the trust is established via the cryptographically signed TUF meta-data that is retrieved from the resolved Hackage repository. Moreover, we already have to protect against a compromised hackage.haskell.org" DNS entry, so an the additional _mirrors.hackage.haskell.orgÖ DNS entry in the same SOA doesn't constitute a significant new attack vector anyway.´ cabal-installExtract list of mirrors from µ result¶ cabal-installHelper used by ´ for extracting urlbase keys from Rfc1464-encoded data· cabal-installÅSplit a TXT string into key and value according to RFC1464. Returns Ý if parsing fails.ÞÞ Safe-InferredÙÚkìß cabal-installÓTerminated is an asynchronous exception, thrown when SIGTERM is received. It's to kill what  UserInterrupt is to Ctrl-C.á cabal-install³Install a signal handler that initiates a controlled shutdown on receiving SIGTERM by throwing an asynchronous exception at the main thread. Must be called from the main thread.It is a noop on Windows.ßàááßà í(c) 2007 Bjorn Bringert, 2008 Andrea Vezzosi, 2008-2009 Duncan CouttsBSD3duncan@community.haskell.orgportable Safe-Inferred8ÙÚo æ cabal-installžType code for the local build tree reference entry type. We don't use the symbolic link entry type because it allows only 100 ASCII characters for the path.ç cabal-install7Type code for the local build tree snapshot entry type.è cabal-install/Is this a type code for a build tree reference?ä cabal-installFull Tarball path cabal-installBase directory cabal-install*Directory to archive, relative to base dirå cabal-installDestination directory cabal-install'Expected subdir (to check for tarbombs) cabal-installTarballäåæçèéêëäåæçèéêë! Safe-Inferred;ÙÚzí cabal-install Express whether to relax bounds on all packages, or a single packageð cabal-install"Modifier for dependency relaxationñ cabal-installDefault semanticsò cabal-installApply relaxation only to ^>= constraintsó cabal-installþSpecify the scope of a relaxation, i.e. limit which depending packages are allowed to have their version constraints relaxed.ô cabal-installApply relaxation in any packageõ cabal-install0Apply relaxation to in all versions of a packageö cabal-install8Apply relaxation to a specific version of a package only÷ cabal-installäDependencies can be relaxed either for all packages in the install plan, or only for some packages.ù cabal-installáGeneric data type for policy when relaxing bounds in dependencies. Don't use this directly: use ü or ÿ× depending on whether or not you are relaxing an lower or upper bound (respectively).ú cabal-installÕIgnore upper (resp. lower) bounds in some (or no) dependencies on the given packages.RelaxDepsSome []ô is the default, i.e. honor the bounds in all dependencies, never choose versions newer (resp. older) than allowed.û cabal-installÂIgnore upper (resp. lower) bounds in dependencies on all packages.Note.: This is should be semantically equivalent to ÎRelaxDepsSome [RelaxedDep RelaxDepScopeAll RelaxDepModNone RelaxDepSubjectAll](TODO: consider normalising ù and/or ÷)ü cabal-installù* in the context of lower bounds (i.e. for  --allow-older flag)ÿ cabal-installù* in the context of upper bounds (i.e. for  --allow-newer flag)‚ cabal-installReturn Ñ if ù) specifies a non-empty set of relaxationsEquivalent to isRelaxDeps = (/= Î)ƒ cabal-install A smarter RelaxedDepsSome, *:* is the same as all.� cabal-installú [] is the identity element‘ cabal-installû is the absorbing element” cabal-install%simpleParsec "all" :: Maybe RelaxDepsJust RelaxDepsAll&simpleParsec "none" :: Maybe RelaxDepsJust (RelaxDepsSome [])&simpleParsec "*, *" :: Maybe RelaxDepsJust RelaxDepsAll%simpleParsec "*:*" :: Maybe RelaxDepsJust RelaxDepsAll2simpleParsec "foo:bar, quu:puu" :: Maybe RelaxDepsôJust (RelaxDepsSome [RelaxedDep (RelaxDepScopePackage (PackageName "foo")) RelaxDepModNone (RelaxDepSubjectPkg (PackageName "bar")),RelaxedDep (RelaxDepScopePackage (PackageName "quu")) RelaxDepModNone (RelaxDepSubjectPkg (PackageName "puu"))]))This is not a glitch, even it looks like:'simpleParsec ", all" :: Maybe RelaxDepsJust RelaxDepsAll"simpleParsec "" :: Maybe RelaxDepsNothingíîïðñòóôõö÷øùúûüýþÿ€�‚ƒÿ€�üýþùúûƒðñòóôõöíîï÷ø‚" Safe-Inferred;ÙÚ{7Í cabal-install>A summary of the outcome for building a whole set of packages.Î cabal-install7A summary of the outcome for building a single package.»¼½¾¿ÀÁÂÃÄÅÇÈÉÊËÌÆÍÎÎÍÄÅÇÈÉÊËÌÆÂû¼½¾¿ÀÁ# Safe-Inferred;ÙÚÙâ cabal-install8A ConfiguredId is a package ID for a configured package.®Once we configure a source package we know its UnitId. It is still however useful in lots of places to also know the source ID for the package. We therefore bundle the two.…An already installed package of course is also "configured" (all its configuration parameters and dependencies have been specified).ç cabal-install-Within Cabal the library we no longer have a InstalledPackageIdœ type. That's because it deals with the compilers' notion of a registered library, and those really are libraries not packages. Those are now named units. The package management layer does however deal with installed packages, as whole packages not just as libraries. So we do still need a type for installed package ids. At the moment however we track installed packages via their primary library, which is a unit id. In future this may change slightly and we may distinguish these two types and have an explicit conversion when we register units with the compiler. àáâãæäåçè çâãæäåèàá$ Safe-Inferred;ÌÙÚ„ñ cabal-installA ñ„ is a not-yet-installed package along with the total configuration information. The configuration information is total in the sense that it provides all the configuration information and so the final configure process will be independent of the environment.ñ0 is assumed to not support Backpack. Only the v2-build codepath supports Backpack.ô cabal-installpackage info, including repoõ cabal-install(complete flag assignment for the packageö cabal-install0list of enabled optional stanzas for the package÷ cabal-install0set of exact dependencies (installed or source)."These must be consistent with the  buildDepends in the PackageDescriptionÆ that you'd get by applying the flag assignment and optional stanzas.ÿ cabal-installà# indicates data types which have a âÃ. This type class is mostly used to conveniently finesse between ElaboratedPackage and ElaboratedComponent.ñòóôõö÷ñòóôõö÷% Safe-InferredÙÚ„Uƒ„…†‡ˆ†‡ˆƒ„…& Safe-Inferred;ÙÚ„±Ž cabal-installLast‰‹Š‰‹Š' Safe-Inferred;ÙÚ„è–™˜—–™˜—( Safe-Inferred;ÙÚã…% ‰Š‹£¤¥¦§¨©ª« ‰Š‹£¤¥¦§¨©ª«) Safe-Inferred8;ÙÚ†ÿ³ cabal-install5A fully or partially resolved reference to a package.´ cabal-installèA partially specified reference to a package (either source or installed). It is specified by package name and optionally some required properties. Use a dependency resolver to pick a specific package satisfying these properties.µ cabal-install!A fully specified source package.³´µ¶·³´µ¶·* Safe-Inferred;ÙÚˆ%¾ cabal-installRepository name.May be used as path segment.Á cabal-install4simpleParsec "hackage.haskell.org" :: Maybe RepoName%Just (RepoName "hackage.haskell.org")%simpleParsec "0123" :: Maybe RepoNameNothing¾¿À¾¿À+ Safe-Inferred;ÙÚ�pÊ cabal-installDifferent kinds of repositories:NOTE: It is important that this type remains serializable.Ë cabal-install Local repository, without index. ,https://github.com/haskell/cabal/issues/6359Ì cabal-install(Standard (unsecured) remote repositoriesÍ cabal-installSecure repositories*Although this contains the same fields as Ì<, we use a separate constructor to avoid confusing the two.„Not all access to a secure repo goes through the hackage-security library currently; code paths that do not still make use of the Ð and Ï fields directly.Ñ cabal-installno-index style local repositories. ,https://github.com/haskell/cabal/issues/6359Ú cabal-installEnable secure access?Ýç here represents "whatever the default is"; this is important to allow for a smooth transition from opt-in to opt-out security (once we switch to opt-out, all access to the central Hackage repository should be secure by default)Û cabal-install Root key IDs (for bootstrapping)Ü cabal-install/Threshold for verification during bootstrappingÝ cabal-install´Normally a repo just specifies an HTTP or HTTPS URI, but as a special case we may know a repo supports both and want to try HTTPS if we can, but still allow falling back to HTTP.çThis field is not currently stored in the config file, but is filled in automagically for known repos.Þ cabal-installConstruct a partial Ö* value to fold the field parser list over.ß cabal-installConstruct a partial Ñ* value to fold the field parser list over.à cabal-install%Calculate a cache key for local-repo.ïFor remote repositories we just use name, but local repositories may all be named "local", so we add a bit of Ô into the mix.á cabal-installCheck if this is a remote repoâ cabal-installExtract  RemoteRepo from Repo if remote.ä cabal-install#Note: serialised format represents Ö only partially.é cabal-installNote: doesn't parse Õ field.ÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãÖרÙÚÛÜÝÞÑÒÓÔÕßàÊËÌÍÎÏÐãáâ,(c) 2016 Herbert Valerio RiedelBSD3 Safe-Inferred";ÙÚ•ð ú cabal-install;Specification of the state of a specific repo package indexû cabal-installUse all available entriesü cabal-install2Use all entries that existed at the specified timeý cabal-install$Index state of multiple repositories¸ cabal-installRemove non-default values from ý.þ cabal-installý where all repositories are at HEAD index state.ÿ cabal-installCreate ý.€ cabal-install Lookup a ú# for an individual repository from ý.� cabal-install Insert a ú to ý.‡ cabal-install,simpleParsec "HEAD" :: Maybe TotalIndexState'Just (TIS IndexStateHead (fromList []))(simpleParsec "" :: Maybe TotalIndexStateNothingÀsimpleParsec "hackage.haskell.org HEAD" :: Maybe TotalIndexState'Just (TIS IndexStateHead (fromList []))ÖsimpleParsec "2020-02-04T12:34:56Z, hackage.haskell.org HEAD" :: Maybe TotalIndexStateèJust (TIS (IndexStateTime (TS 1580819696)) (fromList [(RepoName "hackage.haskell.org",IndexStateHead)]))ÐsimpleParsec "hackage.haskell.org 2020-02-04T12:34:56Z" :: Maybe TotalIndexStateæJust (TIS IndexStateHead (fromList [(RepoName "hackage.haskell.org",IndexStateTime (TS 1580819696))]))úûüýþÿ€�úûüýþÿ€�- Safe-Inferred";ÙÚÜžq “ cabal-installskip this repository” cabal-installmerge existing versions• cabal-installÍif later repository specifies a package, all package versions are replaced— cabal-install1rest repositories, i.e. not explicitly listed as ˜˜ cabal-installexplicit repository name™ cabal-install$Ordered list of active repositories.œ cabal-installNote, this does nothing if — is present.� cabal-install Sort values ¾ according to ™ list.6let repos = [RepoName "a", RepoName "b", RepoName "c"]ÌorganizeByRepos (ActiveRepos [ActiveRepoRest CombineStrategyMerge]) id reposóRight [(RepoName "a",CombineStrategyMerge),(RepoName "b",CombineStrategyMerge),(RepoName "c",CombineStrategyMerge)]ÿorganizeByRepos (ActiveRepos [ActiveRepo (RepoName "b") CombineStrategyOverride, ActiveRepoRest CombineStrategyMerge]) id reposöRight [(RepoName "b",CombineStrategyOverride),(RepoName "a",CombineStrategyMerge),(RepoName "c",CombineStrategyMerge)]ÿorganizeByRepos (ActiveRepos [ActiveRepoRest CombineStrategyMerge, ActiveRepo (RepoName "b") CombineStrategyOverride]) id reposöRight [(RepoName "a",CombineStrategyMerge),(RepoName "c",CombineStrategyMerge),(RepoName "b",CombineStrategyOverride)]ÿorganizeByRepos (ActiveRepos [ActiveRepoRest CombineStrategyMerge, ActiveRepo (RepoName "d") CombineStrategyOverride]) id reposLeft "no repository provided d"Note: currently if —Õ is provided more than once, rest-repositories will be multiple times in the output.¨ cabal-install Note: empty string is not valid ™.$simpleParsec "" :: Maybe ActiveReposNothing)simpleParsec ":none" :: Maybe ActiveReposJust (ActiveRepos []))simpleParsec ":rest" :: Maybe ActiveRepos8Just (ActiveRepos [ActiveRepoRest CombineStrategyMerge])ÕsimpleParsec "hackage.haskell.org, :rest, head.hackage:override" :: Maybe ActiveRepos¶Just (ActiveRepos [ActiveRepo (RepoName "hackage.haskell.org") CombineStrategyMerge,ActiveRepoRest CombineStrategyMerge,ActiveRepo (RepoName "head.hackage") CombineStrategyOverride]) ’”“•–—˜™š›œ� ™š›œ–—˜’”“•�. Safe-Inferred "/5;=Â×ÙÚÜ p¸ cabal-install»Ï without subdir. Used in clone errors. Cloning doesn't care about subdirectory.¹ cabal-installDistilled from „…º cabal-install Read from  cabal.project» cabal-installsource-repository-package definitionÅ cabal-install Split single source-repository-packageÓ declaration with multiple subdirs, into multiple ones with at most single subdir.¸¹º»¼½¾¿ÀÁÂÃÄÅÆ»¼½¾¿ÀÁº¹¸ÃÄÅÆ/ Safe-Inferred8;ÙÚ£Í cabal-install7Convenience alias for 'SourcePackage UnresolvedPkgLoc'.Ï cabal-install4An unpacked package in the given dir, or current dirÐ cabal-install:A package as a tarball that's available as a local tarballÑ cabal-install(A package as a tarball from a remote URIÒ cabal-install3A package available as a tarball from a repository.ÿIt may be from a local repository or from a remote repository, with a locally cached copy. ie a package available from hackageÓ cabal-installÃA package available from a version control system source repository ÍÎÏÐÑÒÓÔÕ ÎÏÐÑÒÓÕÔÍ0 Safe-Inferred;ÙÚ¦ÿÝ cabal-install&This is the information we get from a 00-index.tar.gz hackage index.á cabal-installÅDoes a case-sensitive search by package name and a range of versions.ïWe get back any number of versions of the specified package name, all satisfying the version range constraint.€Additionally, `preferred-versions` (such as version deprecation) are honoured in this lookup, which is the only difference to ¹â cabal-install-Does a case-sensitive search by package name.€Additionally, `preferred-versions` (such as version deprecation) are honoured in this lookup, which is the only difference to º» cabal-installfilterPreferredVersions range versions. If a range: is given, only keep versions that satisfy the range. If range is Ý, all versions are kept.The range% is expected to be obtained from the †‡.ÝÞßàáâÝÞßàáâ1 Safe-Inferred;ÌÑÙÚ§Ïç cabal-installLike ñä, but with all dependencies guaranteed to be installed already, hence itself ready to be installed.æçèçèæ2 Safe-Inferred;ÙÚ¨îó cabal-installÙWhether 'v2-build' should write a .ghc.environment file after success. Possible values: always, neverÝ (the default), 'ghc8.4.4+' (8.4.4 is the earliest version that supports '-package-env -').óôõöóôõöˆÁ(c) David Himmelstrup 2005 Duncan Coutts 2011BSD-likecabal-devel@haskell.org provisionalportable Safe-Inferred "68;ÌÑÙÚ©¬óíîïðñòóöôõ÷øùúûüýþÿ€�‚ƒ»¼½¾Á¿ÀÂÃÄÆÌËÊÉÈÅÇÍÎàáâåäãæçèñ÷öõôòó³´µ¶·¾¿ÀÊÐÏÎÍËÌÑÕÔÒÓÖÝÜÛÚÙרÞßàáâãÍÎÓÒÑÏÐÔÕÝàÞßáâæçèóöôõ (c) Duncan Coutts 2008BSD-likeduncan@community.haskell.org provisionalportable Safe-Inferred6;ÌÙÚ»1Š cabal-installÁBuild an installation plan from a valid set of resolved packages.� cabal-installÃRemove packages from the install plan. This will result in an error if there are remaining packages that depend on any matching package. This is primarily useful for obtaining an install plan for the dependencies of a package or set of packages without actually installing the package itself, as when doing development.Ž cabal-install7A valid installation plan is a set of packages that is ‘, ’ and “. Also, every ConfiguredPackage5 in the plan has to have a valid configuration (see configuredPackageValid).if the result is False use � to get a detailed list.� cabal-install‘For an invalid plan, produce a detailed list of problems as human readable error messages. This is mainly intended for debugging purposes. Use �" for a human readable explanation.¼ cabal-installñCompute all roots of the install plan, and verify that the transitive plans from those roots are all consistent.öNOTE: This does not check for dependency cycles. Moreover, dependency cycles may be absent from the subplans even if the larger plan contains a dependency cycle. Such cycles may or may not be an issue; either way, we don't check for them here.½ cabal-installCompute the root sets of a plan“A root set is a set of packages whose dependency closure must be consistent. This is the set of all top-level library roots (taken together normally, or as singletons sets if we are considering them as independent goals), along with all setup dependencies of all packages.¾ cabal-install#Compute the library roots of a plan‘The library roots are the set of packages with no reverse dependencies (no reverse library dependencies but also no reverse setup dependencies).¿ cabal-install2The setup dependencies of each package in the planÀ cabal-installÌGiven a package index where we assume we want to use all the packages (use ”Ø if you need to get such a index subset) find out if the dependencies within it use consistent versions of each package. Return all cases where multiple packages depend on different versions of some other package.œEach element in the result is a package name along with the packages that depend on it and the versions they require. These are guaranteed to be distinct.‘ cabal-installÇThe graph of packages (nodes) and dependencies (edges) must be acyclic.if the result is False use ‰ŠÁ to find out which packages are involved in dependency cycles.’ cabal-install¨An installation plan is closed if for every package in the set, all of its dependencies are also in the set. That is, the set is closed under the dependency relation.if the result is False use ‰‹à to find out which packages depend on packages not in the index.“ cabal-installóAn installation plan is consistent if all dependencies that target a single package name, target the same version.�This is slightly subtle. It is not the same as requiring that there be at most one version of any package in the set. It only requires that of packages which have more than one other package depending on them. We could actually make the condition even more precise and say that different versions are OK so long as they are not both in the transitive closure of any other package (or equivalently that their inverse closures do not intersect). The point is we do not want to have any packages depending directly or indirectly on two different versions of the same package. The current definition is just a safe approximation of that.if the result is False use ‰Œ# to find out which packages are.Á cabal-install÷The states of packages have that depend on each other must respect this relation. That is for very case where package a depends on package b we require that dependencyStatesOk a b = True.” cabal-install=Compute the dependency closure of a package in a install plan`_^þÿ€�‚ƒ„†…‡ˆ‰Š‹Œ�Ž��‘’“”•–—ƒ„†…‡`_^Š‹Œ�ˆ‰Ž’“‘þÿ€�‚��”•–—3 Safe-Inferred%&'6;ÙÚÇŽ› cabal-installÎThose parts of the package configuration that contribute to the package hash.Ê cabal-installÈAll the information that contributes to a package's hash, and thus its ç.Ò cabal-install Calculate a ç: for a package using our nix-style inputs hashing method.�Note that due to path length limitations on Windows, this function uses a different method on Windows that produces shorted package ids. See Ó vs Ô.Ó cabal-install Calculate a ç: for a package using our nix-style inputs hashing method.‡This produces large ids with big hashes. It is only suitable for systems without significant path length limitations (ie not Windows).Ô cabal-installìOn Windows we have serious problems with path lengths. Windows imposes a maximum path length of 260 chars, and even if we can use the windows long path APIs ourselves, we cannot guarantee that ghc, gcc, ld, ar, etc etc all do so too.÷So our only choice is to limit the lengths of the paths, and the only real way to do that is to limit the size of the çôs that we generate. We do this by truncating the package names and versions and also by truncating the hash sizes.§Truncating the package names and versions is technically ok because they are just included for human convenience, the full source package id is included in the hash.®Truncating the hash size is disappointing but also technically ok. We rely on the hash primarily for collision avoidance not for any security properties (at least for now). cabal-install„On macOS we shorten the name very aggressively. The mach-o linker on macOS has a limited load command size, to which the name of the library as well as its relative path (@rpath) entry count. To circumvent this, on macOS the libraries are not stored as store librarynamelibHS libraryname.dylibÐ where libraryname contains the libraries name, version and abi hash, but in storeliblibHS veryshort libraryname.dylibï where the very short library name drops all vowels from the package name, and truncates the hash to 4 bytes..We therefore we only need one @rpath entry to  store/libê instead of one @rpath entry for each library. And the reduced library name saves some additional space.ÀThis however has two major drawbacks: 1) Packages can collide more easily due to the shortened hash. 2) The libraries are *not* prefix relocatable anymore as they all end up in the same  store/lib folder.ñThe ultimate solution would have to include generating proxy dynamic libraries on macOS, such that the proxy libraries and the linked libraries stay under the load command limit, and the recursive linker is still able to link all of them.Õ cabal-install-Calculate the overall hash to be used for an ç.Ö cabal-install'Render a textual representation of the Ê.The Ž* of this text is the overall package hash.<›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ<ÊËÌÍÎÏÐÑ›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÒÕÖÓÔ4(c) Duncan Coutts 2008BSD-likeduncan@community.haskell.org provisionalportable Safe-Inferred /6;ÂÌÙÚÜàDØ cabal-install9The set of results we get from executing an install plan.Ù cabal-installThe Ùì type is used to keep track of the state of a traversal and includes the set of packages that are in the processing state, e.g. in the process of being installed, plus those that have been completed and those where processing failed.Ú cabal-installÛ) specialised to most commonly used types.ß cabal-installPackages in an install planNOTE: ñ, ç and ß intentionally have no PackageInstalledÝ instance. `This is important: PackageInstalled returns only library dependencies, but for package that aren't yet installed we know many more kinds of dependencies (setup dependencies, exe, test-suite, benchmark, ..). Any functions that operate on dependencies in cabal-install should consider what to do with these dependencies; if we give a PackageInstalledŸ instance it would be too easy to get this wrong (and, for instance, call graph traversal functions from Cabal rather than from cabal-install). Instead, see PackageInstalled.ã cabal-install'Convenience combinator for destructing ßÃ. This is handy because if you case manually, you have to handle á and â8 separately (where often you want them to be the same.)à cabal-install.Smart constructor that deals with caching the Ä representation.ç cabal-installÁBuild an installation plan from a valid set of resolved packages.í cabal-installÃRemove packages from the install plan. This will result in an error if there are remaining packages that depend on any matching package. This is primarily useful for obtaining an install plan for the dependencies of a package or set of packages without actually installing the package itself, as when doing development.î cabal-install#Change a number of packages in the á state to the â state.æTo preserve invariants, the package must have all of its dependencies already installed too (that is à or â).ï cabal-installLookup a package in the plan.ð cabal-install6Find all the direct dependencies of the given package.?Note that the package must exist in the plan or it is an error.ñ cabal-install>Find all the direct reverse dependencies of the given package.?Note that the package must exist in the plan or it is an error.ò cabal-installReturn all the packages in the Úè in reverse topological order. That is, for each package, all dependencies of the package appear first. Compared to ûü, this function returns all the installed and source packages rather than just the source ones. Also, while both this and ûö produce reverse topological orderings of the package dependency graph, it is not necessarily exactly the same order.ó cabal-installàReturn the packages in the plan that are direct or indirect dependencies of the given packages.ô cabal-installÚReturn the packages in the plan that depend directly or indirectly on the given packages.÷ cabal-installConversion of ƒ to Ú. Similar to elaboratedInstallPlanø cabal-install The packages in the plan that are initially ready to be installed. That is they are in the configured state and have all their dependencies installed already.ÏThe result is both the packages that are now ready to be installed and also a Ù° state containing those same packages. The assumption is that all the packages that are ready will now be processed and so we can consider them to be in the processing state.ù cabal-install¶Given a package in the processing state, mark the package as completed and return any packages that are newly in the processing state (ie ready to process), along with the updated Ù state.û cabal-install Flatten an Ú¹, producing the sequence of source packages in the order in which they would be processed when the plan is executed. This can be used for simulations or presenting execution dry-runs.1It is guaranteed to give the same order as using ý (with a serial in-order ·£), which is a reverse topological orderings of the source packages in the dependency graph, albeit not necessarily exactly the same ordering as that produced by ò.ü cabal-install-Lookup the build result for a single package.ý cabal-installÅExecute an install plan. This traverses the plan in dependency order.ýExecuting each individual package can fail and if so all dependents fail too. The result for each package is collected as a Ø map.ÏVisiting each package happens with optional parallelism, as determined by the ·È. By default, after any failure we stop as soon as possible (using the ·û to try to cancel in-progress tasks). This behaviour can be reversed to keep going and build as many packages as possible.Note that the Ø is notÎ guaranteed to cover all the packages in the plan. In particular in the default mode where we stop as soon as possible after a failure then there may be packages which are skipped and these will have no Î.Å cabal-installðA valid installation plan is a set of packages that is closed, acyclic and respects the package state relation.if the result is False use Æ to get a detailed list.Æ cabal-install‘For an invalid plan, produce a detailed list of problems as human readable error messages. This is mainly intended for debugging purposes. Use Ç" for a human readable explanation.È cabal-install÷The states of packages have that depend on each other must respect this relation. That is for very case where package a depends on package b we require that "stateDependencyRelation a b = True.ý cabal-installKeep going after failure cabal-install'Value for dependents of failed packages&ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüý&ÚÛÝßàáâãÞçèéêëìÜäõö÷íîïðñûýØüÙøùúåæóòô Safe-InferredÙÚÜöZ"Š cabal-installóPhase of building a dependency. Represents current status of package dependency processing. See #4040 for details.– cabal-installÊGeneric merging utility. For sorted input lists this is a full outer join.™ cabal-installLike ÉÀ, but does not throw an exception when the file does not exist.š cabal-install A variant of  withTempFileÿ that only gives us the file name, and while it will clean up the file afterwards, it's lenient if the file is moved/deleted.› cabal-install/Executes the action in the specified directory.ëWarning: This operation is NOT thread-safe, because current working directory is a process-global concept.œ cabal-installÄExecutes the action with an environment variable set to some value.åWarning: This operation is NOT thread-safe, because current environment is a process-global concept.� cabal-installÜExecutes the action with a list of environment variables and corresponding overrides, whereÞ v0 means "set the environment variable's value to v".Ý( means "unset the environment variable".åWarning: This operation is NOT thread-safe, because current environment is a process-global concept.ž cabal-installÁExecutes the action, increasing the PATH environment in some wayìWarning: This operation is NOT thread-safe, because the environment variables are a process-global concept.Ÿ cabal-installLog directory change in make compatible syntax¡ cabal-installÅDetermine the number of jobs to use given the value of the '-j' flag.¢ cabal-installóGiven a relative path, make it absolute relative to the current directory. Absolute paths are returned unmodified.£ cabal-installáGiven a path (relative or absolute), make it relative to the current directory, including using ../.. if necessary.¤ cabal-installßGiven a path (relative or absolute), make it relative to the given directory, including using ../.. if necessary.¥ cabal-installöGiven a canonical absolute path and canonical absolute dir, make the path relative to the directory, including using ../..ã if necessary. Returns the original absolute path if it is not on the same drive as the given dir.¦ cabal-install Convert a ‘ to a lazy  ByteString. Each Ó is encoded as a little-endian è.§ cabal-installReverse operation to ¦.¨ cabal-install-Workaround for the inconsistent behaviour of ÊÄ. Always throws an error if the path refers to a non-existent file.© cabal-installA non-throwing wrapper for Ê. If Ê< throws an exception, returns the path argument unmodified.ª cabal-installÊLike Distribution.Simple.Utils.moreRecentFile, but uses getModTime instead of getModificationTime for higher precision. We can't merge the two because Distribution.Client.Time uses MIN_VERSION macros.« cabal-installLike ª-, but also checks that the first file exists.¬ cabal-install½Sets the handler for encoding errors to one that transliterates invalid characters into one present in the encoding (i.e., '?'). This is opposed to the default behavior, which is to throw an exception on error. This function will ignore file handles that have a Unicode encoding set. It's a no-op for versions of base less than 4.4.­ cabal-installLike ®-, but with error specific to add-source deps.® cabal-installTry to find a .cabal file, in directory depPath&. Fails if one cannot be found, with errõ prefixing the error message. This function simply allows us to give a more descriptive error than that provided by findPackageDesc.± cabal-installËGiven a version, return an API-compatible (according to PVP) version range.ÏIf the boolean argument denotes whether to use a desugared representation (if Ñ) or the new-style ^>= -form (if Ð). Example: pvpize True (mkVersion [0,4,1]) produces the version range >= 0.4 && < 0.5 (which is the same as 0.4.*).² cabal-install6Increment the nth version component (counting from 0).³ cabal-install"Returns the current calendar year.´ cabal-installFrom System.Directory.Extra /https://hackage.haskell.org/package/extra-1.7.9µ cabal-installFrom System.Directory.Extra /https://hackage.haskell.org/package/extra-1.7.9Ë cabal-installFrom System.Directory.Extra /https://hackage.haskell.org/package/extra-1.7.9Ì cabal-installFrom Control.Monad.Extra /https://hackage.haskell.org/package/extra-1.7.9Í cabal-installÌ with swapped branches: ifNotM b t f = ifM (not  $ b) t fÎ cabal-installFrom Control.Monad.Extra /https://hackage.haskell.org/package/extra-1.7.9Ï cabal-installFrom Control.Monad.Extra /https://hackage.haskell.org/package/extra-1.7.9· cabal-installhasElem xs x = elem x xs except that xs is turned into a ›Á first. Use underapplied to speed up subsequent lookups, e.g. filter (hasElem xs) ys,. Only amortized when used several times!Time complexity O((n+m) \log(n)) for m lookups in a list of length n. (Compare this to elem's O(nm).)This is  Ôhttps://hackage.haskell.org/package/Agda-2.6.2.2/docs/Agda-Utils-List.html#v:hasElemAgda.Utils.List.hasElem./Š‹Œ�Ž��‘’•“”–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·/’•“”–—˜›œ�Ÿž¡ ™š¢£¤¥¦§¨©ª«­®¯¬Š‹Œ�Ž��‘°±²³µ´¶·5 Safe-Inferred"ÙÚù¸ cabal-install–List all source files of a given add-source dependency. Exits with error if something is wrong (e.g. there is no .cabal file in the given directory).àUsed in sandbox and projectbuilding. TODO: when sandboxes are removed, move to ProjectBuilding.¹ cabal-install-Create a tarball for a package in a directory¹ cabal-install read in GPD cabal-installdirectory containing that GPD cabal-installresulting sdist tarball¸¹¸¹6cabal-devel@haskell.orgportable Safe-InferredÙÚúº cabal-installëReturn the executable to run and any extra arguments that should be forwarded to it. Die in case of error.» cabal-installRun a given executable.º»»º7%(c) Brent Yorgey, Benedikt Huber 2009BSD-likecabal-devel@haskell.org provisionalportable Safe-Inferred8;ÙÚãî¼ cabal-install'Annotations for cabal file PrettyField.¾ cabal-installGuess the main file, returns a default value if none is found.ä  cabal-installåJuggling characters around to guess the desired cabal version based on the system's cabal version.å  cabal-install9Guess the language specification based on the GHC versionæ  cabal-install9Guess the package name based on the given root directory.ç  cabal-install2Try to guess the license from an already existing LICENSEÚ file in the package directory, comparing the file contents with the ones listed in  Licenses.hs*, for now it only returns a default value.é  cabal-install”Try to guess the package type from the files in the package directory, looking for unique characteristics from each type, defaults to Executable.ê  cabal-installêTry to guess the application directories from the package directory, using a default value as fallback.ë  cabal-installÇTry to guess the source directories, using a default value as fallback.ì  cabal-install7Guess author and email using git configuration options. ã ä å æ ç è é ê ë ì í æ ã ç è ì í ä å é ë ê > Safe-InferredÙÚã(Uî  cabal-install(Main driver for interactive prompt code.õ  cabal-install­Get the version of the cabal spec to use. The spec version can be specified by the InitFlags cabalVersion field. If none is specified then the default version is used.ö  cabal-installºGet the package name: use the package directory (supplied, or the current directory by default) as a guess. It looks at the SourcePackageDb to avoid using an existing package name.÷  cabal-install-Package version: use 0.1.0.0 as a last resortø  cabal-install¦Choose a license for the package. The license can come from Initflags (license field), if it is not present then prompt the user from a predefined list of licenses.ù  cabal-installÈThe author's name. Prompt, or try to guess from an existing git repo.ú  cabal-installÉThe author's email. Prompt, or try to guess from an existing git repo.û  cabal-install*Prompt for a homepage URL for the package.ü  cabal-installPrompt for a project synopsis.ý  cabal-install£Prompt for a package category. Note that it should be possible to do some smarter guessing here too, i.e. look at the name of the top level source directory.þ  cabal-install Try to guess extra source files.ÿ  cabal-installÅTry to guess if the project builds a library, an executable, or both.€  cabal-installÐTry to guess the main file, if nothing is found, fallback to a default value.ƒ  cabal-install1Ask for the Haskell base language of the package.„  cabal-install-Ask whether to generate explanatory comments.…  cabal-install'Ask for the application root directory.†  cabal-install,Ask for the source (library) root directory.‡  cabal-install$Retrieve the list of exposed modulesˆ  cabal-installòRetrieve the list of other modules for Libraries, filtering them based on the last component of the module name‰  cabal-install›Retrieve the list of other modules for Executables, it lists everything that is a Haskell file within the application directory, excluding the main fileŠ  cabal-install�Retrieve the list of other modules for Tests, it lists everything that is a Haskell file within the tests directory, excluding the main file‹  cabal-install Retrieve the list of build toolsŒ  cabal-install!Retrieve the list of dependencies�  cabal-installRetrieve the list of extensions î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ € � ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ � ï ð ñ ò î ÿ ù ú õ ö ÷ € ‚ � ‡ ˆ ‰ Š ‹ Œ � ø û ü ý þ … † ƒ „ ó ô ?(c) Brent Yorgey 2009BSD-likecabal-devel@haskell.org provisionalportable Safe-InferredÙÚãä.ZŽ  cabal-install(Main driver for interactive prompt code.�  cabal-installÎExtract flags relevant to a package description and interactively generate a ¤‚ object for creation. If the user specifies the generation of a simple package, then a simple target with defaults is generated.�  cabal-installÉExtract flags relevant to a library target and interactively generate a ›‚ object for creation. If the user specifies the generation of a simple package, then a simple target with defaults is generated.‘  cabal-installÌExtract flags relevant to a executable target and interactively generate a ’‚ object for creation. If the user specifies the generation of a simple package, then a simple target with defaults is generated.’  cabal-installÆExtract flags relevant to a test target and interactively generate a ‰‚ object for creation. If the user specifies the generation of a simple package, then a simple target with defaults is generated.ŸNote: this workflow is only enabled if the user answers affirmatively when prompted, or if the user passes in the flag to enable test suites at command line.   cabal-install'Ask for the application root directory.¡  cabal-install,Ask for the source (library) root directory.Ý Ž � � ‘ ’ “ ” • – — ˜ ™ š › œ � ž Ÿ   ¡ Ž � � ‘ ’ “ ” • – — ˜ ™ š › œ � ž Ÿ   Ý ¡ @(c) Brent Yorgey 2009BSD-likecabal-devel@haskell.org provisionalportable Safe-Inferred"ÙÚã1ª¦  cabal-installWrite the LICENSE file.ÏFor licenses that contain the author's name(s), the values are taken from the authors field of ±1, and if not specified will be the string "???".ÞIf the license type is unknown no license file will be prepared and a warning will be raised.§  cabal-install.Writes the changelog to the current directory.× cabal-installÏPossibly generate a message to stdout, taking into account the --quiet flag.Ø cabal-installíWrite a file "safely" if it doesn't exist, backing up any existing version when the overwrite flag is set.Ù cabal-install .cabal fields¢ £ ¤ ¥ ¦ § ¢ ¦ § £ ¤ ¥ A Safe-Inferred '8;ÑÙÚÜpÖ=Ú cabal-installÂWe really want to avoid re-hashing files all the time. We already make the assumption that if a file mtime has not changed then we don't need to bother checking if the content hash has changed. We can apply the same assumption when updating the file monitor state. In the typical case of updating a file monitor the set of files is the same or largely the same so we can grab the previously known content hashes with their corresponding mtimes.ª  cabal-installÊA timestamp to help with the problem of file changes during actions. See Ù  for details.«  cabal-installWhat kind of change Ø  detected.¬  cabal-installÙOne of the files changed (existence, file type, mtime or file content, depending on the Ä  in question)­  cabal-installThe pure input value changed.×The previous cached key value is also returned. This is sometimes useful when using a ¶  function that is not simply ×È, when invalidation can be partial. In such cases it can make sense to Ù Ì with a key value that's a combination of the new and old (e.g. set union).®  cabal-installÉThere was no saved monitor state, cached value etc. Ie the file for the ³  does not exist.¯  cabal-installþThere was existing state, but we could not read it. This typically happens when the code has changed compared to an existing ³ Ê cache file and type of the input value or cached value has changed such that we cannot decode the values. This is completely benign as we can treat is just as if there were no cache file and re-run.°  cabal-installThe result of Ø ÿ: either the monitored files or value changed (and it tells us which it was) or nothing changed and we get the cached result.±  cabal-installÄThe monitored files and value did not change. The cached result is b.ÖThe set of monitored files is also returned. This is useful for composing or nesting ³ s.²  cabal-install>The monitor found that something changed. The reason is given.³  cabal-installüA monitor for detecting changes to a set of files. It can be used to efficiently test if any of a set of files (specified individually or by glob patterns) has changed since some snapshot. In addition, it also checks for changes in a value (of type aÎ), and when there are no changes in either it returns a saved value (of type b).•The main use case looks like this: suppose we have some expensive action that depends on certain pure inputs and reads some set of files, and produces some pure result. We want to avoid re-running this action when it would produce the same result. So we need to monitor the files the action looked at, the other pure input values, and we need to cache the result. Then at some later point, if the input value didn't change, and none of the files changed, then we can re-use the cached result rather than re-running the action.This can be achieved using a ³ . Each ³ ‚ instance saves state in a disk file, so the file for that has to be specified, making sure it is unique. The pattern is to use Ø ë to see if there's been any change. If there is, re-run the action, keeping track of the files, then use Ù ÷ to record the current set of files to monitor, the current input value for the action, and the result of the action.6The typical occurrence of this pattern is captured by rerunIfChanged and the Rebuild0 monad. More complicated cases may need to use Ø  and Ù  directly.µ  cabal-installThe file where this ³  should store its state.¶  cabal-installãCompares a new cache key with old one to determine if a corresponding cached value is still valid.üTypically this is just an equality test, but in some circumstances it can make sense to do things like subset comparisons.ÃThe first arg is the new value, the second is the old cached value.·  cabal-installWhen this mode is enabled, if Ø  returns ­ « then we have the guarantee that no files changed, that the value change was the only change. In the default mode no such guarantee is provided which is slightly faster.¸  cabal-installÝThe state necessary to determine whether the files matched by a globbing match have changed.Û cabal-installcached file mtimeÜ cabal-installcached mtime and content hashÝ cabal-installcached dir mtime¹  cabal-installÆThe state necessary to determine whether a monitored file has changed.This covers all the cases of Ä 2 except for globs which is covered separately by ¸ .The  Maybe ModTimeç is to cover the case where we already consider the file to have changed, either because it had already changed by the time we did the snapshot (i.e. too new, changed since start of update process) or it no longer exists at all.º  cabal-installáThe state necessary to determine whether a set of monitored files has changed. It consists of two parts: a set of specific files to be monitored (index by their path), and a list of globs, which monitor may files at once.Ä  cabal-installÁA description of a file (or set of files) to monitor for changes.ŠWhere file paths are relative they are relative to a common directory (e.g. project root), not necessarily the process current directory.Ë  cabal-installµMonitor a single file for changes, based on its modification time. The monitored file is considered to have changed if it no longer exists or if its modification time has changed.Ì  cabal-installÙMonitor a single file for changes, based on its modification time and content hash. The monitored file is considered to have changed if it no longer exists or if its modification time and content hash have changed.Í  cabal-installïMonitor a single non-existent file for changes. The monitored file is considered to have changed if it exists.Î  cabal-installóMonitor a single file for existence only. The monitored file is considered to have changed if it no longer exists.Ï  cabal-install¿Monitor a single directory for changes, based on its modification time. The monitored directory is considered to have changed if it no longer exists or if its modification time has changed.Ð  cabal-installúMonitor a single non-existent directory for changes. The monitored directory is considered to have changed if it exists.Ñ  cabal-installýMonitor a single directory for existence. The monitored directory is considered to have changed only if it no longer exists.Ò  cabal-installÂMonitor a single file or directory for changes, based on its modification time. The monitored file is considered to have changed if it no longer exists or if its modification time has changed.Ó  cabal-installœMonitor a set of files (or directories) identified by a file glob. The monitored glob is considered to have changed if the set of files matching the glob changes (i.e. creations or deletions), or for files if the modification time and content hash of any matching file has changed.Ô  cabal-installÕMonitor a set of files (or directories) identified by a file glob for existence only. The monitored glob is considered to have changed if the set of files matching the glob changes (i.e. creations or deletions).Õ  cabal-installÞCreates a list of files to monitor when you search for a file which unsuccessfully looked in notFoundAtPaths before finding it at  foundAtPath.Ö  cabal-install Similar to Õ ?, but also instructs us to monitor the hash of the found file.Þ cabal-installWe can build a º  from a set of Ä ø by inspecting the state of the file system, and we can go in the reverse direction by just forgetting the extra info.×  cabal-installDefine a new file monitor.ØIt's best practice to define file monitor values once, and then use the same value for Ø  and Ù ) as this ensures you get the same types a and b for reading and writing.éThe path of the file monitor itself must be unique because it keeps state on disk and these would clash.Ø  cabal-install2Test if the input value or files monitored by the ³ 0 have changed. If not, return the cached value.See ³  for a full explanation.ß cabal-installÝLazily decode a triple, parsing the first two fields strictly and returning a lazy value containing either the last one or an error. This is helpful for cabal cache files where the first two components contain header data that lets one test if the cache is still valid, and the last (potentially large) component is the cached value itself. This way we can test for cache validity without needing to pay the cost of the decode of stale cache data. This lives here rather than Distribution.Utils.Structured because it depends on a newer version of binary than supported in the Cabal library proper.à cabal-install"Helper for reading the cache file.=This determines the type and format of the binary cache file.á cabal-install"Helper for writing the cache file.=This determines the type and format of the binary cache file.â cabal-installÈProbe the file system to see if any of the monitored files have changed.ÌIt returns Nothing if any file changed, or returns a possibly updated file º 2 plus an indicator of whether it actually changed.�We may need to update the cache since there may be changes in the filesystem state which don't change any of our affected files.Consider the glob {proj1,proj2}/*.cabal. Say we first run and find a proj1 directory containing  proj1.cabal yet no proj2. If we later run and find proj2- was created, yet contains no files matching *.cabalÅ then we want to update the cache despite no changes in our relevant file set. Specifically, we should add an mtime for this directory so we can avoid re-traversing the directory in future runs.ã cabal-installÄProbe the file system to see if a single monitored file has changed.ä cabal-installÂProbe the file system to see if a monitored file glob has changed.Ù  cabal-install>Update the input value and the set of files monitored by the ³ 7, plus the cached value that may be returned in future.ÉThis takes a snapshot of the state of the monitored files right now, so Ø > will look for file system changes relative to this snapshot.’This is typically done once the action has been completed successfully and we have the action's result and we know what files it looked at. See ³  for a full explanation.€If we do take the snapshot after the action has completed then we have a problem. The problem is that files might have changed while the action was running but afterç the action read them. If we take the snapshot after the action completes then we will miss these changes. The solution is to record a timestamp before beginning execution of the action and then we make the conservative assumption that any file that has changed since then has already changed, ie the file monitor state for these files will be such that Ø $ will report that they have changed.So if you do use Ù é after the action (so you can discover the files used rather than predicting them in advance) then use Ú › to get a timestamp and pass that. Alternatively, if you take the snapshot in advance of the action, or you're not monitoring any files then you can use Nothing for the timestamp parameter.Ú  cabal-installÖRecord a timestamp at the beginning of an action, and when the action completes call Ù  passing it the timestamp. See Ù  for details.å cabal-installñTake the snapshot of the monitored files. That is, given the specification of the set of files we need to monitor, inspect the state of the file system now and collect the information we'll need later to determine if anything has changed.æ cabal-install»If we have a timestamp for the beginning of the update, then any file mtime later than this means that it changed during the update and we ought to consider the file as already changed.ç cabal-install Much like å7 but for the somewhat complicated case of a file glob.This gets used both by å: when we're taking the file system snapshot, but also by probeGlobStatusà as part of checking the monitored (globed) files for changes when we find a whole new subtree.è cabal-installÇWe declare it a cache hit if the mtime of a file is the same as before.é cabal-install0Either get it from the cache or go read the fileê cabal-installBuild a Ú from the previous º É. While in principle we could preserve the structure of the previous state, given that the set of files to monitor can change then it's simpler just to throw away the structure and use a finite map.ë cabal-install Within the root directory, check if file has its ì is the same as mtime&, short-circuiting if it is different.í cabal-install Within the root directory, check if file has its ì and î is the same as mtime and hash', short-circuiting if it is different.ï cabal-install Within the root directory, check if fileÀ still exists as a file. If it *does not* exist, short-circuit.ð cabal-install Within the root directory, check if dir6 still exists. If it *does not* exist, short-circuit.ñ cabal-install Within the root directory, check if file: still does not exist. If it *does* exist, short-circuit.ò cabal-installReturns True if, inside the root directory, file has the same ì as mtime.ó cabal-installReturns True if, inside the root directory, file has the same ì and î as  mtime and chash@.ô cabal-install#Read a non-cryptographic hash of a file.õ cabal-installGiven a directory dir , return Nothing if its ì is the same as mtime, and the new ì if it is not.ö cabal-install4Run an IO computation, returning the first argument e if there is an � call. (÷)ø cabal-install!Run an IO computation, returning e if there is any •.îThis policy is OK in the file monitor code because it just causes the monitor to report that something changed, and then code reacting to that will normally encounter the same IO exception when it re-runs the action that uses the file. ×  cabal-installÁThe file to cache the state of the file monitor. Must be unique.Ø  cabal-installcache file path cabal-installroot directory cabal-installguard or key value cabal-install did the key or any paths change?ä cabal-install root pathù cabal-install root path cabal-install7path of the directory we are looking in relative to rootÙ  cabal-installcache file path cabal-installroot directory cabal-install(timestamp when the update action started cabal-install"files of interest relative to root cabal-installthe current key value cabal-installthe current result valueå cabal-install/optional: timestamp of the start of the action cabal-installexisting file hashes cabal-installroot directory cabal-install(patterns of interest relative to rootú cabal-installstart time of update cabal-installexisting file hashes cabal-installthe root directoryç cabal-installstart time of update cabal-installexisting file hashes cabal-installthe root directory cabal-installthe matching globû cabal-installstart time of update cabal-installexisting file hashes cabal-installthe root directory cabal-install2directory we are examining relative to the root cabal-installthe matching glob3ëìª « ¬ ­ ® ¯ ° ² ± ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú 3Ä Å Æ Ç È É Ê ¿ À Á  à » ¼ ½ ¾ ëìË Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö ³ ´ µ ¶ · × ° ² ± « ¬ ­ ® ¯ Ø Ù ª Ú º ¹ ¸ B Safe-InferredÑÙÚ܆  cabal-installA monad layered on top of äõ to help with re-running actions when the input files and values they depend on change. The crucial operations are ‹  and ‡ .‡  cabal-install#Use this within the body action of ‹ « to declare that the action depends on the given files. This can be based on what the action actually did. It is these files that will be checked for changes next time ‹  is called for that ³ .ÙRelative paths are interpreted as relative to an implicit root, ultimately passed in to ˆ .ü cabal-installRun a †  IO action.ˆ  cabal-installRun a †  IO action.‰  cabal-installRun a †  IO action.Š  cabal-installÂThe root that relative paths are interpreted as being relative to.‹  cabal-install-This captures the standard use pattern for a ³ æ: given a monitor, an action and the input value the action depends on, either re-run the action to get its output, or if the value and files the action depends on have not changed then return a previously cached action result.The result is still in the †  monad, so these can be nested. Do not share ³ s between different uses of ‹ .Œ  cabal-install When using ‹ û for each element of a list of actions, it is sometimes the case that each action needs to make use of some resource. e.g. ûsequence [ rerunIfChanged verbosity monitor key $ do resource <- mkResource ... -- use the resource | ... ]ºFor efficiency one would like to share the resource between the actions but the straightforward way of doing this means initialising it every time even when no actions need re-running. õresource <- mkResource sequence [ rerunIfChanged verbosity monitor key $ do ... -- use the resource | ... ]7This utility allows one to get the best of both worlds: ®getResource <- delayInitSharedResource mkResource sequence [ rerunIfChanged verbosity monitor key $ do resource <- getResource ... -- use the resource | ... ]�  cabal-install Much like Œ " but for a keyed set of resources. ²getResource <- delayInitSharedResource mkResource sequence [ rerunIfChanged verbosity monitor key $ do resource <- getResource key ... -- use the resource | ... ]Ž  cabal-installŒUtility to match a file glob against the file system, starting from a given root directory. The results are all relative to the given root.Since this operates in the † 5 monad, it also monitors the given glob for changes.‘  cabal-installMonitor a directory as in Ï  if it currently exists or as Ð  if it does not.’  cabal-installLike ý , but in the † . monad. This does NOT track the contents of ‘; use “  in that case.“  cabal-installMonitor a single file”  cabal-install˜Monitor a file if it exists; otherwise check for when it gets created. This is a bit better for recompilation avoidance because sometimes users give bad package metadata, and we don't want to repeatedly rebuild in this case (which we would if we need'ed a non-existent file).•  cabal-installLike findFileWithExtension , but in the †  monad.–  cabal-installLike  findFirstFile , but in the †  monad.—  cabal-installLike þ , but in the †  monad.2Þàßáâåãäçèéêëì³ ´ µ ¶ · Ä Ë Ì Í Ï Ð Ñ Ò Ó Ô Õ Ö × † ‡ ˆ ‰ Š ‹ Œ � Ž � � ‘ ’ “ ” • – — 2† ˆ ‰ Š ‡ Ä Ë Ì Í Ï Ð Ñ Ò Õ Ö Ó Ô ëìÞàßáçèéêâåãä³ ´ µ ¶ · × ‹ Œ � Ž � � ‘ ’ “ ” • – — C Safe-Inferred6ÙÚ�Oœ  cabal-install4Detail on the reason that a package failed to build.§  cabal-install?Information arising from the failure to build a single package.«  cabal-installÀInformation arising from successfully building a single package.°  cabal-installÓA summary of the outcome for building a single package: either success or failure.±  cabal-install>A summary of the outcome for building a whole set of packages.³  cabal-installÛThe dependencies of this package have been (re)built so the build phase needs to be rerun.´  cabal-installÃChanges in files within the package (or first run or corrupt cache)µ  cabal-install×An important special case is that no files have changed but the set of components the user asked to build. has changed. We track the set of components  we have builtÂ, which of course only grows (until some other change resets it).The Set LÌ is the set of components we have built previously. When we update the monitor we take the union of the ones we have built previously with the ones the user has asked for this time and save those. See updatePackageBuildFileMonitor.¶  cabal-installÏAlthough we're not going to build any additional targets as a whole, we're going to build some part of a component or run a repl or any other action that does not result in additional persistent artifacts.·  cabal-installÊFor a package that is going to be built or rebuilt, the state it's in now.åSo again, this tells us why a package needs to be rebuilt and what build phases need to be run. The « Ü gives us details like which file changed, which is mainly for high verbosity debug output.¸  cabal-installÜThe package configuration changed, so the configure and build phases needs to be (re)run.¹  cabal-install÷The configuration has not changed but the build phase needs to be rerun. We record the reason the (re)build is needed.‡The optional registration info here tells us if we've registered the package already, or if we still need to do that after building.  Just NothingÎ indicates that we know that no registration is necessary (e.g., executable.)º  cabal-installÐThe build status for an individual package is the state that the package is in prior to initiating a (re)build.#This should not be confused with a «  which is the result after! successfully building a package.It serves two purposes:åFor dry-run output, it lets us explain to the user if and why a package is going to be (re)built.õIt tell us what step to start or resume building from, and carries enough information for us to be able to do so.»  cabal-installThe package is in the �Ž% state, so does not need building.¼  cabal-installThe package is in the ��% state, so does not need building.½  cabal-installáThe package has not been downloaded yet, so it will have to be downloaded, unpacked and built.¾  cabal-installÓThe package has not been unpacked yet, so it will have to be unpacked and built.¿  cabal-installñThe package exists in a local dir already, and just needs building or rebuilding. So this can only happen for BuildInplaceOnly style packages.À  cabal-installëThe package exists in a local dir already, and is fully up to date. So this package can be put into the ��+ state and it does not need to be built.Á  cabal-installThe º  of every package in the ElaboratedInstallPlan.ÆThis is used as the result of the dry-run of building an install plan.  cabal-installWhich º ˜ values indicate we'll have to do some build work of some sort. In particular we use this as part of checking if any of a package's deps have changed.à  cabal-installÆThis is primarily here for debugging. It's not actually used anywhere.-« ¬ ­ ® ¯ œ ž Ÿ   ¡ ¤ ¦ � ¢ £ ¥ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º ¿ » ¼ ½ ¾ À Á  à -Á º ¿ » ¼ ½ ¾ À  à · ¸ ¹ ² ³ ´ µ ¶ « ¬ ­ ® ¯ ± ° « ¬ ­ ® ¯ § ¨ © ª œ ž Ÿ   ¡ ¤ ¦ � ¢ £ ¥ ê(c) David Himmelstrup 2005, Bjorn Bringert 2007 Duncan Coutts 2008BSD-likecabal-devel@gmail.com provisionalportable Safe-InferredÙÚ¦-ÿ cabal-install Errors for ê .€ cabal-install¬A package name which cannot be resolved to a specific package. Also gives the constraint on the version and whether there was a constraint on the package being installed.È  cabal-install8A package selection preference for a particular package.¹Preferences are soft constraints that the dependency resolver should try to respect where possible. It is not specified if preferences on some packages are more important than others.É  cabal-install-A suggested constraint on the version number.Ê  cabal-install=If we prefer versions of packages that are already installed.Ë  cabal-installÙIf we would prefer to enable these optional stanzas (i.e. test suites and/or benchmarks)Ì  cabal-installÁThe set of parameters to the dependency resolver. These parameters are relatively low level but many kinds of high level policies can be implemented in terms of adjustments to the parameters.� cabal-install;Whether to allow base and its dependencies to be installed.‚ cabal-installÚWhether to only allow explicitly constrained packages plus goals or to allow any package.ƒ cabal-installÛWhether or not to solve for dependencies on executables. This should be true, except in the legacy code path where we can't tell if an executable has been installed or not, so we shouldn't solve for them. See #3875.„ cabal-install;Function to override the solver's goal-ordering heuristics.… cabal-installÑProvide a textual representation of a package preference for debugging purposes.† cabal-installÕSome packages are specific to a given compiler version and should never be upgraded.‡ cabal-installÂThe set of non-reinstallable packages includes those which cannot be rebuilt using a GHC installation and Hackage-published source distribution. There are a few reasons why this might be true:3the package overrides its unit ID (e.g. with ghc's  -this-unit-id‚ flag), which can result in multiple indistinguishable packages (having potentially different ABIs) with the same unit ID.Šthe package contains definitions of wired-in declarations which tie it to a particular compiler (e.g. we can't build link against  base-4.18.0.0 using GHC 9.6.1).Ìthe package does not have a complete (that is, buildable) source distribution. For instance, some packages provided by GHC rely on files outside of the source tree generated by GHC's build system.éNote: the list of non-upgradable/non-installable packages used to be respectively in this module and in �‘Ì. Since they were kept synced, they are now combined in the following list.See:  ,https://github.com/haskell/cabal/issues/8581 and  ,https://github.com/haskell/cabal/issues/9064.ß  cabal-installÇRemove upper bounds in dependencies using the policy specified by the ÿ argument (allsomenone).Note: It's important to apply ß  after ˆ'. Otherwise, the packages inserted by ˆ1 won't have upper bounds in dependencies relaxed.à  cabal-installDual of ß ‰ cabal-install"Common internal implementation of à /ß Š cabal-install1Relax the dependencies of this package if needed.Helper function used by ‰‹ cabal-installInternal helper for Šá  cabal-installÀSupply defaults for packages without explicit Setup dependenciesNote: It's important to apply addDefaultSetupDepends after ˆ'. Otherwise, the packages inserted by ˆ1 won't have upper bounds in dependencies relaxed.â  cabal-installÎIf a package has a custom setup then we need to add a setup-depends on Cabal.ã  cabal-install Variant of â  which sets an upper bound on  setup.Cabal labeled with Œ.æ  cabal-install4A basic solver policy on which all others are built.ç  cabal-installöThe policy used by all the standard commands, install, fetch, freeze etc (but not the v2-build and related commands).It extends the æ  with a policy on setup deps.é  cabal-installRun the dependency solver.ÐSince this is potentially an expensive operation, the result is wrapped in a a eô structure that can be unfolded to provide progress information, logging messages and the final result or an error.� cabal-install%Give an interpretation to the global PackagesPreference as specific per-package É .Ž cabal-install‚Make an install plan from the output of the dep resolver. It checks that the plan is valid, or it's an error in the dep resolver.� cabal-installA ConfiguredPackage« is valid if the flag assignment is total and if in the configuration given by the flag assignment, all the package dependencies are satisfied by the specified packages.ê  cabal-install×A simplistic method of resolving a list of target package names to available packages.ÈSpecifically, it does not consider package dependencies at all. Unlike é �, no attempt is made to ensure that the selected packages have dependencies that are satisfiable or consistent with each other.‹It is suitable for tasks such as selecting packages to download for user inspection. It is not suitable for selecting packages to install.ÃNote: if no installed package index is available, it is OK to pass ÎÆ. It simply means preferences for installed packages will be ignored.9aecbdflkjihgnmÁÂÃÄų´µÈ É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê 9Ì è é ecbdaê lkjihgnmfÁÂÃÄÅÈ É Ê Ë æ ç ³´µä å Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ à ß á â ã D Safe-Inferred"ÙÚªüì  cabal-install%A type that can be converted to JSON.í  cabal-install=Convert a Haskell value to a JSON-friendly intermediate type.î  cabal-install A JSON "object" (key/value map).ï  cabal-installA key/value pair for an ð ð  cabal-install,A JSON value represented as a Haskell value.÷  cabal-install,A key-value pair for encoding a JSON object.ø  cabal-install Create a ð  from a list of name/value ï s.ù  cabal-install%Serialise value as JSON/UTF8-encoded �ú  cabal-install(Serialise value as JSON-encoded Unicode ð ‘ cabal-installTry to convert Ô into Ú , return Ý- if not representable loss-free as integral Ú value.’ cabal-installMinimally escape a ð * in accordance with RFC 7159, "7. Strings"ü  cabal-install$Possibly lossy due to conversion to Ôý  cabal-install$Possibly lossy due to conversion to Ôþ  cabal-install$Possibly lossy due to conversion to Ôì í î ï ð õ ó ò ô ö ñ ÷ ø ù ú ð õ ó ò ô ö ñ î ø ï ÷ ú ù ì í ÷ 8E Safe-InferredÙÚ«¹”  cabal-install;Render parse error highlighting the part of the input file.” ” F(c) Lennart Kolmodin 2008BSD-likekolmodin@haskell.org provisionalportable Safe-InferredÙÚ¬ •  cabal-installÕNote: must be called with the CWD set to the directory containing the '.cabal' file.• •  Safe-Inferred %&'×ÙÚÜã¿jš  cabal-install;A driver for a version control system, e.g. git, darcs etc.›  cabal-install*The type of repository this driver is for.œ  cabal-install.The vcs program itself. This is used at type I and J.“ cabal-installÒThe program invocation(s) to get/clone a repository into a fresh local directory.” cabal-install8The program invocation(s) to synchronise a whole set of related€ repositories with corresponding local directories. Also returns the files that the command depends on, for change monitoring.�  cabal-installValidates that the  SourceRepoÓ specifies a location URI and a repository type that is supported by a VCS driver.| It also returns the š & driver we should use to work with it.Ÿ  cabal-installAs �  but for a bunch of  SourceRepo6s, and return things in a convenient form to pass to ¡ , or to report problems.¢  cabal-installÊClone a single source repo into a fresh directory, using a configured VCS.ýThis is for making a new copy, not synchronising an existing copy. It will fail if the destination directory already exists.Make sure to validate the  SourceRepo using �  first.£  cabal-installSynchronise a set of  SourceRepoþs referring to the same repository with corresponding local directories. The local directories may or may not already exist.The  SourceRepo' values used in a single invocation of £ Ö, or used across a series of invocations with any local directory must refer to the sameê repository. That means it must be the same location but they can differ in the branch, or tag or subdir.%The reason to allow multiple related  SourceRepožs is to allow for the network or storage to be shared between different checkouts of the repo. For example if a single repo contains multiple packages in different subdirs and in some project it may make sense to use a different state of the repo for one subdir compared to another.¤  cabal-install3The set of all supported VCS drivers, organised by S.¥  cabal-installVCS driver for Bazaar.¦  cabal-installVCS driver for Darcs.§  cabal-installVCS driver for Git.¨  cabal-installVCS driver for Mercurial.©  cabal-installVCS driver for Subversion.ª  cabal-install?VCS driver for Pijul. Documentation for Pijul can be found at *https://pijul.org/manual/introduction.html2020-04-09 Oleg:ŠAs far as I understand pijul, there are branches and "tags" in pijul, but there aren't a "commit hash" identifying an arbitrary state.…One can create `a pijul tag`, which will make a patch hash, which depends on everything currently in the repository. I guess if you try to apply that patch, you'll be forced to apply all the dependencies too. In other words, there are no named tags.ÁIt's not clear to me whether there is an option to "apply this patch *and* all of its dependencies". And relatedly, whether how to make sure that there are no other patches applied.&With branches it's easier, as you can pull and checkoutÍ them, and they seem to be similar enough. Yet, pijul documentations says ÇNote that the purpose of branches in Pijul is quite different from Git,Ðsince Git's "feature branches" can usually be implemented by just patches.ÏI guess it means that indeed instead of creating a branch and making PR in GitHubÌ workflow, you'd just create a patch and offer it. You can do that with gité too. Push (a branch with) commit to remote and ask other to cherry-pick that commit. Yet, in git identity of commit changes when it applied to other trees, where patches in pijul have will continue to have the same hash.åUnfortunately pijul doesn't talk about conflict resolution. It seems that you get something like:&% pijul status On branch mergeáUnresolved conflicts: (fix conflicts and record the resolution with "pijul record ...")fooÏ% cat foo first line >> >>>>>>>>>>>>>>>>>>>>>>>>>>>>> branch BBB ================================ branch AAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< last line=And then the `pijul dependencies` would draw you a graph likeá----> foo on branch B -----> resolve conflict Initial patch----> foo on branch A ----->Which is seems reasonable.½So currently, pijul support is very experimental, and most likely won't work, even the basics are in place. Tests are also written but disabled, as the branching model differs from git& one, for which tests are written.IJS– — ˜ ™ š › œ � ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª š › œ SIJž � Ÿ – — ˜ ™   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª G Safe-InferredÙÚ¿î¬ ¬ H Safe-InferredÙÚÅT °  cabal-install˜GET a URI, with an optional ETag (to do a conditional fetch), write the resource to the given file and return the HTTP status code, and optional ETag.±  cabal-installøPOST a resource to a URI, with optional auth (username, password) and return the HTTP status code and any redirect URL.²  cabal-install¡POST a file resource to a URI using multipart/form-data encoding, with optional auth (username, password) and return the HTTP status code and any error string.³  cabal-installŒPUT a file resource to a URI, with optional auth (username, password), extra headers and return the HTTP status code and any error string.´  cabal-install3Whether this transport supports https or just http.µ  cabal-install’Whether this transport implementation was specifically chosen by the user via configuration, or whether it was automatically selected. Strictly speaking this is not a property of the transport itself but about how it was chosen. Nevertheless it's convenient to keep here.• cabal-install%already downloaded and sha256 matches– cabal-install#already downloaded and we have etag— cabal-install'needs download with optional hash check½  cabal-install$Utility function for legacy support.¹  cabal-installWhat to download cabal-installWhere to put it­ ® ¯ µ ° ´ ± ² ³ ¶ · ¸ ¹ º » ¼ ½ ¾ ¶ · ¸ ¾ ® ¯ µ ° ´ ± ² ³ ­ ¹ » º ¼ ½  Safe-Inferred %&56Â×ÙÚÜÊyÁ  cabal-install"Translate from hackage-security's s to cabal-install's ® ÀNOTE: The match between these two APIs is currently not perfect:0We don't get any response headers back from the ® î, so we don't know if the server supports range requests. For now we optimistically assume that it does.The ® Á wants to know where to place the resulting file, whereas the s expects an ä˜ action which streams the download; the security library then makes sure that the file gets written to a location which is suitable (in particular, to a temporary file in the directory where the file needs to end up, so that it can "finalize" the file simply by doing  renameFileü). Right now we write the file to a temporary file in the system temp directory here and then read it again to pass it to the security library; this is a problem for two reasons: it is a source of inefficiency; and it means that the security library cannot insist on a minimum download rate (potential security attack). Fixing it however would require changing the ® .˜ cabal-installInternal generalization of ˜ and ™sÁ sÁ I Safe-Inferred %&;É×ÙÚÜÑÇ š cabal-installWrapper around  Repository, hiding the type argumentÅ  cabal-installAccess to repositoriesÇ  cabal-installAll user-specified repositoriesÈ  cabal-installGet the HTTP transportÅThe transport will be initialized on the first call to this function.ÊNOTE: It is important that we don't eagerly initialize the transport. Initializing the transport is not free, and especially in contexts where we don't know a priori whether or not we need the transport (for instance when using cabal in "nix mode") incurring the overhead of transport initialization on _every_ invocation (eg  cabal build) is undesirable.É  cabal-install!Get the (initialized) secure repo(the ÊÏ type itself is stateless and must remain so, because it must be serializable)Ê  cabal-install7Should we ignore expiry times (when checking security)?Ë  cabal-install:Flags that apply at the top level, not to any sub-command.Ñ  cabal-installAvailable Hackage servers.Ö  cabal-installIgnore security expiry datesØ  cabal-installIntegrate with NixÚ  cabal-installÜExtra program path used for packagedb lookups in a global context (i.e. for http transports)› cabal-install+Initialize the provided secure repositoriesAssumed invariant: Ú# should be set for all these repos.œ cabal-install Initialize the given secure repoÑThe security library has its own concept of a "local" repository, distinct from  cabal-install™'s; these are secure repositories, but live in the local file system. We use the convention that these repositories are identified by URLs of the form file:pathtolocalrepo.œ cabal-install Secure repo (Ú assumed) cabal-install Cache dir cabal-installCallbackÅ Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Å Æ Ç È É Ê Ü Ý JÁ(c) David Himmelstrup 2005 Duncan Coutts 2011BSD-likecabal-devel@gmail.com provisionalportable Safe-Inferred%&ÙÚÜÚÄ ã  cabal-installReturns TrueÄ if the package has already been fetched or does not need fetching.ä  cabal-installøChecks if the package has already been fetched (or does not need fetching) and if so returns evidence in the form of a Î& with a resolved local file location.å  cabal-installLike ä  but for the specific case of a Ò.ç  cabal-install,Fetch a package if we don't have it already.è  cabal-install1Fetch a repo package if we don't have it already.é  cabal-install&Downloads an index file to [config-dirpackagesØserv-id] without hackage-security. You probably don't want to call this directly; use  updateRepo instead.ê  cabal-installÆFork off an async action to download the given packages (by location).ƒThe downloads are initiated in order, so you can arrange for packages that will likely be needed sooner to be earlier in the list.±The body action is passed a map from those packages (identified by their location) to a completion var for that package. So the body action should lookup the location and use ë  to get the result.ÉSynchronous exceptions raised by the download actions are delivered via ë .ë  cabal-install3Expect to find a download in progress in the given â  and wait on it to finish.ÂIf the download failed with an exception then this will be thrown.éNote: This function is supposed to be idempotent, as our install plans can now use the same tarball for many builds, e.g. different components and/or qualified goals, and these all go through the download phase so we end up using ë ( twice on the same package. C.f. #4461.� cabal-installÎGenerate the full path to the locally cached copy of the tarball for a given PackageIdentifier.ž cabal-installàGenerate the full path to the directory where the local cached copy of the tarball for a given PackageIdentifier is stored.Ÿ cabal-install4Generate the URI of the tarball for a given package. â ã ä å æ ç è é ê ë ç ã ä å è æ ê ë â é K(c) Duncan Coutts 2011BSD-likeduncan@community.haskell.org Safe-Inferred 89:;ÙÚÜè<ì  cabal-install Version of n0 that the user can specify on the command line.î  cabal-install Version of  . that a user may specify on the command line.ï  cabal-installÆScope that applies to the package when it has the specified qualifier.ð  cabal-installÀScope that applies to the package when it has a setup qualifier.ñ  cabal-installcabal install http://code.haskell.org/~user/foo/foo-0.9.tar.gzŒ  cabal-installÑGiven a bunch of user-specified targets, try to resolve what it is they refer to. They can either be specific packages (local dirs, tarballs etc) or they can be named packages (with or without version info).�  cabal-installóGiven a user-specified target, expand it to a bunch of package targets (each of which refers to only one package).Ž  cabal-install2Fetch any remote targets so that they can be read.�  cabal-installÃGiven a package target that has been fetched, read the .cabal file.ÊThis only affects targets given by location, named targets are unaffected.�  cabal-installîUsers are allowed to give package names case-insensitively, so we must disambiguate named package references.‘  cabal-installÙReport problems to the user. That is, if there are any problems then raise an exception.’  cabal-install±Given a package name and a list of matching names, figure out which one it might be referring to. If there is an exact case-sensitive match then that's ok (i.e. returned via ¢‰). If it matches just one package case-insensitively or if it matches multiple packages case-insensitively, in that case the result is £.ìNote: Before cabal 2.2, when only a single package matched case-insensitively it would be considered ¢.*ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ü ú û ý þ ÿ € � ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ � Ž � � ‘ ’ “ ” • *ƒ „ … † ‡ ˆ ‰ Œ ý þ ÿ € � ‚ Š ‹ � ù ü ú û Ž � ö ÷ ø ‘ � ’ ò ó ô õ î ï ð ñ ì í “ • ” L Safe-Inferred6;ÑÙÚù�±  cabal-installöResolved configuration for things that affect how we build and not the value of the things we build. The idea is that this is easier to use than the raw configuration because in the raw configuration everything is optional (monoidial). In the ± 6 every field is filled in, if only with the defaults.Use resolveBuildTimeSettingsÁ to make one from the project config (by applying defaults etc).Ç  cabal-install·Resolved configuration for the solver. The idea is that this is easier to use than the raw configuration because in the raw configuration everything is optional (monoidial). In the ± 6 every field is filled in, if only with the defaults.Use resolveSolverSettingsÁ to make one from the project config (by applying defaults etc).É  cabal-installAvailable Hackage servers.Í  cabal-installFor all local packagesß  cabal-installNewtype wrapper for š that provides a Ë instance that Ì:s values of overlapping keys rather than taking the first.â  cabal-installNewtype wrapper for š that provides a ËÖ instance that takes the last value rather than the first value for overlapping keys.å  cabal-install�Project configuration that is specific to each package, that is where we can in principle have different values for different packages in the same project.£ cabal-install‹Specifies the provenance of project configuration, whether defaults were used or if the configuration was read from an explicit file path.¤ cabal-installÑThe configuration is implicit due to no explicit configuration being found. See n’/ for how implicit configuration is determined.¥ cabal-installùThe path the project configuration was explicitly read from. | The configuration was explicitly read from the specified ‘.¦ cabal-install�Project configuration that is shared between all packages in the project. In particular this includes configuration that affects the solver.² cabal-installAvailable Hackage servers.Ê cabal-install9That part of the project configuration that only affects how we build and not the value„ of the things we build. This means this information does not need to be tracked for changes since it does not affect the outcome.Þ cabal-install>This type corresponds directly to what can be written in the  cabal.project‡ file. Other sources of configuration can also be injected into this type, such as the user-wide config file and the command line of cabal configure or  cabal build.ÈSince it corresponds to the external project file it is an instance of Ë” and all the fields can be empty. This also means there has to be a step where we resolve configuration. At a minimum resolving means applying defaults but it can also mean merging information from multiple sources. For example for package-specific configuration the project file can specify configuration that applies to all local packages, and then additional configuration for a specific package.ÎFuture directions: multiple profiles, conditionals. If we add these features then the gap between configuration as written in the config file and resolved settings we actually use will become even bigger.à cabal-install Packages in this project, including local dirs, local .cabal files local and remote tarballs. When these are file globs, they must match at least one package.á cabal-installLike projectConfigPackageGlobs but optionalñ in the sense that file globs are allowed to match nothing. The primary use case for this is to be able to say optional-packages: */ß to automagically pick up deps that we unpack locally without erroring when there aren't any.â cabal-install9Packages in this project from remote source repositories.ã cabal-install3Packages in this project from hackage repositories.ç cabal-installÁConfiguration to be applied to *all* packages, whether named in `cabal.project` or not.è cabal-installãConfiguration to be applied to *local* packages; i.e., any packages which are explicitly named in `cabal.project`.¹± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ €�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¶©¨ª«¬­®¯°±²³´µ·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÜÙÌÍÎÏÐÑÒÓÔÕÖרÚÛÝÞßäåàáâãæçèé¹ÞßäåàáâãæçèéÊËÜÙÌÍÎÏÐÑÒÓÔÕÖרÚÛݦ§¶©¨ª«¬­®¯°±²³´µ·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉ£¤¥å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ €�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ â ã ä ß à á M(c) David Waern 2008BSD-likedavid.waern@gmail.com experimentalportable Safe-Inferred"/ÙÚüë z}{|~€�‚ƒ„…†‡ˆ‰Š�Ž‹�Œ�‘’“”¡¢£¤¥ ‰Š�Ž‹�Œ�‘’“”~€�‚ƒ„…†‡ˆz}{|¡£¤¥¢N(c) David Waern 2008BSD-likedavid.waern@gmail.com experimentalportable Safe-InferredÙÚýÓ¦§¨©¦§¨©O(c) Duncan Coutts 2008BSD-likecabal-devel@haskell.org provisionalportable Safe-InferredÙÚþ[ª«ª«"(c) The University of Glasgow 2002/BSD-style (see the file libraries/base/LICENSE)libraries@haskell.orgportable Safe-Inferred)*ÙÚu"® cabal-installÌConsumes and returns the next character. Fails if there is no input left.¯ cabal-installÐLook-ahead: returns the part of the input that is left, without consuming it.° cabal-install Always fails.± cabal-install'Succeeds iff we are at the end of input² cabal-installSymmetric choice.³ cabal-installýLocal, exclusive, left-biased choice: If left parser locally produces any result at all, then right parser is not used.´ cabal-installúTransforms a parser into one that does the same, but in addition returns the exact characters read. IMPORTANT NOTE: ´Ý gives a runtime error if its first argument is built using any occurrences of readS_to_P.µ cabal-installÔConsumes and returns the next character, if it satisfies the specified predicate.¶ cabal-install+Parses and returns the specified character.· cabal-install(Parses and returns the specified string.¸ cabal-installÂParses the first zero or more characters satisfying the predicate.¹ cabal-installÁParses the first one or more characters satisfying the predicate.º cabal-install+Combines all parsers in the specified list.» cabal-installSkips all whitespace.¼ cabal-installLike »Ê but succeeds only if there is at least one whitespace character to skip.½ cabal-install count n p  parses n occurrences of p/ in sequence. A list of results is returned.¾ cabal-install between open close p  parses open, followed by p and finally close. Only the value of p is returned.¿ cabal-install option x p will either parse p or return x without consuming any input.À cabal-install optional p optionally parses p and always returns ().Á cabal-install4Parses zero or more occurrences of the given parser. cabal-install3Parses one or more occurrences of the given parser.à cabal-installLike Á, but discards the result.Ä cabal-installLike Â, but discards the result.Å cabal-install sepBy p sep$ parses zero or more occurrences of p, separated by sep*. Returns a list of values returned by p.Æ cabal-install sepBy1 p sep# parses one or more occurrences of p, separated by sep*. Returns a list of values returned by p.Ç cabal-install endBy p sep$ parses zero or more occurrences of p, separated and ended by sep.È cabal-install endBy p sep# parses one or more occurrences of p, separated and ended by sep.É cabal-install chainr p op x$ parses zero or more occurrences of p, separated by op#. Returns a value produced by a right9 associative application of all functions returned by op!. If there are no occurrences of p, x is returned.Ê cabal-install chainl p op x$ parses zero or more occurrences of p, separated by op#. Returns a value produced by a left9 associative application of all functions returned by op!. If there are no occurrences of p, x is returned.Ë cabal-installLike É(, but parses one or more occurrences of p.Ì cabal-installLike Ê(, but parses one or more occurrences of p.Í cabal-installmanyTill p end$ parses zero or more occurrences of p, until end3 succeeds. Returns a list of values returned by p.Î cabal-installèConverts a parser into a Haskell ReadS-style function. This is the main way in which you can "run" a ¬" parser: the expanded type is 1 readP_to_S :: ReadP a -> String -> [(a,String)] Ï cabal-install¨Converts a Haskell ReadS-style function into a parser. Warning: This introduces local backtracking in the resulting parser, and therefore a possible inefficiency.&¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐ&¬®¯²³´°±µ¶·¸¹»¼º½¾¿ÀÁÂÃÄÅÆÇÈÉÊÌËÍÎÏЭ²5³5“"(c) The University of Glasgow 2004BSD3cabal-devel@haskell.orgportable Safe-Inferred×ÙÚÜS¤ cabal-install A regular  property: value field¥ cabal-installËA section with a name and possible parameter. The syntactic structure is:   sectionname  arg {  field* } ¦ cabal-install´The type of a function which, given a name-value pair of an unrecognized field, and the current structure being built, decides whether to incorporate the unrecognized field (by returning Just x, where x is a possibly modified version of the structure being built), or not (by returning Nothing).Ý cabal-install!Field descriptor. The parameter a< parameterizes over where the field's value is stored in.á cabal-installfieldSet n str x5 Parses the field value from the given input string str and stores the result in xË if the parse was successful. Otherwise, reports an error on line number n.§ cabal-install'The parser for the stuff between commas2¨©ª«¥¤¦ÝÞßàᬭ®¯°±²³´µ¶·¸¹º»¼½¾¿ÀâÁÂÃÄÅÆÇÈÉÊËÌͧÎÏQ"(c) Duncan Coutts 2012, 2015, 2016BSD-likeduncan@community.haskell.org Safe-Inferred %&'8;ÙÚÜ9ÅÐ cabal-installíThe kind of match, inexact or exact. We keep track of this so we can prefer exact over inexact matches. The ˆ1 here is important: we try to maximise this, so Ñ is the top value and Ò the bottom.Ó cabal-installãMatches an unknown thing e.g. parses as a package name without it being a specific known packageÒ cabal-installÒMatches a known thing inexactly e.g. matches a known package case insensitivelyÑ cabal-installÏExactly matches a known thing, e.g. matches a known package case sensitivelyÔ cabal-install‰A matcher embodies a way to match some input as being some recognised value. In particular it deals with multiple and ambiguous matches.&There are various matcher primitives (Õ, Ö), ways to combine matchers (×, Ø;) and finally we can run a matcher against an input using Ù.Ú cabal-installSyntax for the �: the matcher and rendererã cabal-installÙQualification levels. Given the filepath src/F, executable component A, and package foo:ä cabal-install src/Få cabal-install foo:src F | A:srcFæ cabal-install  foo:A:src F | exe:A:srcFç cabal-install pkg:foo:exe:A:file:src/Fè cabal-install*The various ways that trying to resolve a ò to a � can fail.é cabal-install expected thing(actually got)ê cabal-install  ([in thing., no such thing, actually got, alternatives)]í cabal-install2Syntax error when trying to parse a target string.ï cabal-installÂbool that flags when it is acceptable to suggest "all" as a targetò cabal-installÂThe outline parse of a target selector. It takes one of the forms: 1str1 str1:str2 str1:str2:str3 str1:str2:str3:str4ÿ cabal-installÜEither the component as a whole or detail about a file or module target within a component.€ cabal-installThe component as a whole� cabal-install%A specific module within a component.‚ cabal-installÖA specific file within a component. Note that this does not carry the file extension.Š cabal-install Does this ŽÓ selector arise from syntax referring to a package in the current directory (e.g. testsï or no giving no explicit target at all) or does it come from syntax referring to a package name or location.� cabal-installÞA target selector is expression selecting a set of components (as targets for a actions like build, run, testæ etc). A target selector corresponds to the user syntax for referring to targets on the command line.¯From the users point of view a target can be many things: packages, dirs, component names, files etc. Internally we consider a target to be a specific component (or module/file within a component), and all the users' notions of targets are just different ways of referring to these component targets.þSo target selectors are expressions in the sense that they are interpreted to refer to one or more components. For example a Žó gets interpreted differently by different commands to refer to all or a subset of components within the package.&The syntax has lots of optional parts: ñ[ package name | package dir | package .cabal file ] [ [lib:|exe:] component name ] [ module name | source file ]Ž cabal-installåOne (or more) packages as a whole, or all the components of a particular kind within the package(s).ŽThese are always packages that are local to the project. In the case that there is more than one, they all share the same directory location.� cabal-install/A package specified by name. This may refer to extra-packages from the  cabal.project¢ file, or a dependency of a known project package or could refer to a package from a hackage archive. It needs further context to resolve to a specific package.� cabal-installÅAll packages, or all components of a particular kind in all packages.‘ cabal-install5A specific component in a package within the project.’ cabal-installŽA component in a package, but where it cannot be verified that the package has such a component, or because the package is itself not known.“ cabal-install&Parse a bunch of command line args as �Œs, failing with an error if any are unrecognised. The possible target selectors are based on the available packages (and their locations).Û cabal-installParse a bunch of ò's (purely without throwing exceptions).— cabal-install Render a òÁ back as the external syntax. This is mainly for error messages.Ü cabal-installÒGiven a bunch of user-specified targets, try to resolve what it is they refer to.™ cabal-installÆThrow an exception with a formatted message if there are any problems.Ý cabal-installAll the forms of syntax for �.Þ cabal-install3Syntax: "all" to select all packages in the project cabal build allß cabal-installSyntax: filter cabal build testsà cabal-install#Syntax: package (name, dir or file) 3cabal build foo cabal build ../bar ../bar/bar.cabalá cabal-installSyntax: component cabal build fooâ cabal-installSyntax: module cabal build Data.Fooã cabal-installSyntax: file name $cabal build Data/Foo.hs bar/Main.hscä cabal-install Syntax: :all cabal build :allå cabal-installSyntax: all : filer cabal build all:testsæ cabal-installSyntax: package : filer cabal build foo:testsç cabal-installSyntax: pkg : package name cabal build pkg:fooè cabal-installSyntax: package : component Åcabal build foo:foo cabal build ./foo:foo cabal build ./foo.cabal:fooé cabal-installSyntax: namespace : component cabal build lib:foo exe:fooê cabal-installSyntax: package : module Ôcabal build foo:Data.Foo cabal build ./foo:Data.Foo cabal build ./foo.cabal:Data.Fooë cabal-installSyntax: component : module cabal build foo:Data.Fooì cabal-installSyntax: package : filename Ýcabal build foo:Data/Foo.hs cabal build ./foo:Data/Foo.hs cabal build ./foo.cabal:Data/Foo.hsí cabal-installSyntax: component : filename cabal build foo:Data/Foo.hsî cabal-installSyntax: :all : filter cabal build :all:testsï cabal-installSyntax: :pkg : package name cabal build :pkg:fooð cabal-install'Syntax: package : namespace : component Îcabal build foo:lib:foo cabal build foo/:lib:foo cabal build foo.cabal:lib:fooñ cabal-install$Syntax: package : component : module Ýcabal build foo:foo:Data.Foo cabal build foo/:foo:Data.Foo cabal build foo.cabal:foo:Data.Fooò cabal-install&Syntax: namespace : component : module cabal build lib:foo:Data.Fooó cabal-install&Syntax: package : component : filename æcabal build foo:foo:Data/Foo.hs cabal build foo/:foo:Data/Foo.hs cabal build foo.cabal:foo:Data/Foo.hsô cabal-install(Syntax: namespace : component : filename cabal build lib:foo:Data/Foo.hsõ cabal-install.Syntax: :pkg : package : namespace : component cabal build :pkg:foo:lib:fooö cabal-installÀSyntax: :pkg : package : namespace : component : module : module ,cabal build :pkg:foo:lib:foo:module:Data.Foo÷ cabal-installÀSyntax: :pkg : package : namespace : component : file : filename -cabal build :pkg:foo:lib:foo:file:Data/Foo.hsø cabal-install�Compare two filepaths for equality using DirActions' canonicalizePath to normalize AND canonicalize filepaths before comparison.× cabal-installœCombine two matchers. Exact matches are used over inexact matches but if we have multiple exact, or inexact then the we collect all the ambiguous matches.'This operator is associative, has unit ú and is also commutative.Ø cabal-install)Combine two matchers. This is similar to ד with the difference that an exact match from the left matcher shadows any exact match on the right. Inexact matches are still collected however.'This operator is associative, has unit ú and is not commutative.ù cabal-install)Lift a list of matches to an exact match.ú cabal-install)Lift a list of matches to an exact match.Ù cabal-installæGiven a matcher and a key to look up, use the matcher to find all the possible matches. There may be û , a single ü match or you may have an ý" match with several possibilities.Õ cabal-install6A primitive matcher that looks up a value in a finite š . The value must match exactly.Ö cabal-install6A primitive matcher that looks up a value in a finite š¶. It checks for an exact or inexact match. We get an inexact match if the match is not exact, but the canonical forms match. It takes a canonicalisation function for this purpose.¿So for example if we used string case fold as the canonicalisation function, then we would get case insensitive matching (but it will still report an exact match when the case matches too).þ cabal-installMake a L given an ÿ and knowing the „. We also need the €Ì to distinguish the package's primary library from named private libraries.“ cabal-installÇThis parameter is used when there are ambiguous selectors. If it is Þ±, then we attempt to resolve ambiguity by applying it, since otherwise there is no way to allow contextually valid yet syntactically ambiguous selectors. (#4676, #5461)8ãäåæçèíðïîëìéêñòóôõö÷øùúûüýþÿ€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š8�Ž��‘’Š‹Œ„…†‡ˆ‰ƒÿ€�‚ãäåæçš“èíðïîëìéêñ™˜òóôõö÷ø—–”ùúûüýþ•�3R Safe-InferredÙÚ:0ÉÊËÌÍÎÏÐÉÊËÌÍÎÏÐ(c) David Himmelstrup 2005BSD-likelemmih@gmail.com provisionalportable Safe-Inferred %&;×ÙÚÜãA* â cabal-install9Is this a candidate package or a package to be published?å cabal-installÂInstall takes the same flags as configure along with a few extras.Ì cabal-installÄcabal configure takes some extra flags beyond runghc Setup configureÚ cabal-install Given some ?Ñ for the version of Cabal that cabal-install was built with, and a target older ‚ of Cabal that we want to pass these flags to, convert the flags into a form that will be accepted by the older Setup script. Generally speaking, this just means filtering out flags that the old Cabal library doesn't understand, but in some cases it may also mean "emulating" a feature using some more legacy flags.Û cabal-install'Get the package database settings from ?, accounting for  --package-db and --user flags.Ü cabal-install>Configure the compiler, but reduce verbosity during this step.â cabal-install Given some ƒÑ for the version of Cabal that cabal-install was built with, and a target older ‚ of Cabal that we want to pass these flags to, convert the flags into a form that will be accepted by the older Setup script. Generally speaking, this just means filtering out flags that the old Cabal library doesn't understand, but in some cases it may also mean "emulating" a feature using some more legacy flags.„ cabal-install!List of lines describing command get.… cabal-installNotes for the command get.… cabal-installEither "get" or "unpack". cabal-installE.g. "cabal". cabal-installList of lines.´?>=<;:9876543210/.-,+*)('&%$#"!  HGFEDCBA@±²»º¹¼½¿ÀÁÇÍÈÑгʵ´¶·¸¾ÂÃÄÅÆÉËÌÎÏÒÅ Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü ÒÓÔÕÖרÙÚÛÝÜÞßàáâãäåæéƒçèêëìíîïðñòóôõö÷øùúûüýþÿ€�‚„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ€�‚ƒ„…†‡ˆ´×Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Å Æ Ç È É Ê Ü Ø?>=<;:9876543210/.-,+*)('&%$#"!  ÙÚÛÜÞÌÍÎÏÐÑÒÓÔÕÖÝáHGFEDCBA@âãäåýþßàøåæéƒçèêëìíîïðñòóôõö÷øùúûüýþÿ€�‚„…†‡ˆÿõúûü÷öò�Ž��‘’“”󣤥¦éô‰Š‹Œæ¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊË秨©ª«¬­®¯°±²³´µ¶·¸èðñ•–—˜™š›œ�ëì€ÚÛÝÜÞßàáâãä ¡¢î�‚±²»º¹¼½¿ÀÁÇÍÈÑгʵ´¶·¸¾ÂÃÄÅÆÉËÌÎÏÒ…×ØÙ†ÒÓÔÕÖíùꃄ‡ˆS Safe-InferredÙÚE  «¬­®¯°±²³´µ¶ «¬­®¯°±²³´µ¶T(c) Maciek Makowski 2015BSD-likecabal-devel@haskell.org provisionalportable Safe-InferredÙÚG† cabal-installpath, description‡ cabal-install=A list of files that should be documented in the manual page.¸ cabal-installProduces a manual page with troff markup.ÂÆÇ·¸¸·ÂÆÇU(c) Duncan Coutts 2008BSD-likecabal-devel@haskell.org provisionalportable Safe-Inferred;ÙÚSˈ cabal-install0The file doesn't exist so we can make a symlink.‰ cabal-installéA symlink already exists, though it is ours. We'll have to delete it first before we make a new symlink.Š cabal-install¤A file already exists and it is not one of our existing symlinks (either because it is not a symlink or because it points somewhere other than our managed space).¹ cabal-install¢We would like by default to install binaries into some location that is on the user's PATH. For per-user installations on Unix systems that basically means the ~bin- directory. On the majority of platforms the ~bin… directory will be on the user's PATH. However some people are a bit nervous about letting a package manager install programs into ~bin.ÌA compromise solution is that instead of installing binaries directly into ~bin4, we could install them in a private location under ~.cabalbin and then create symlinks in ~binµ. We can be careful when setting up the symlinks that we do not overwrite any binary that the user installed. We can check if it was a symlink we made because it would point to the private dir where we install our binaries. This means we can install normally without worrying and in a later phase set up symlinks, and if that fails then we report it to the user, but even in this case the package is still in an OK installed state.ÆThis is an optional feature that users can choose to use or not. It is controlled from the config file. Of course it only works on POSIX systems with symlinks so is not available to Windows users.º cabal-installSymlink binary.ÉThe paths are take in pieces, so we can make relative link when possible.‹ cabal-installÚCheck a file path of a symlink that we would like to create to see if it is OK. For it to be OK to overwrite it must either not already exist yet or be a symlink to our target (in which case we can assume ownership).Œ cabal-installóTake two canonical paths and produce a relative path to get from the first to the second, even if it means adding .. path components.¼ cabal-install/Try to make a symlink in a temporary directory.6If this works, we can try to symlink: even on Windows.º cabal-install+Whether to force overwrite an existing file cabal-install/The canonical path of the public bin dir eg homeuser/bin cabal-install0The canonical path of the private bin dir eg homeuser.cabalbin cabal-install>The name of the executable to go in the public bin dir, eg foo cabal-installs, still maintaining the lazy nature of the original tar read.œ cabal-install Turn the Entries data structure from the tarÁ package into a list, and pair each entry with its block number.(NOTE: This preserves the lazy nature of Entries=: the tar file is only read as far as the list is evaluated.Õ cabal-install/Expected name of the 'preferred-versions' file.ôContains special constraints, such as a preferred version of a package or deprecations of certain package versions.Expected format: .binary > 0.9.0.0 || < 0.9.0.0 text == 1.2.1.0 Ö cabal-installÍDoes the given filename match with the expected name of 'preferred-versions'?ž cabal-install=Parse `preferred-versions` file, ignoring any parse failures.To obtain parse errors, use ×.× cabal-installÞParse `preferred-versions` file, collecting parse errors that can be shown in error messages.� cabal-install Variation on sequence# which evaluates the actions lazilyöPattern matching on the result list will execute just the first action; more generally pattern matching on the first n (:) nodes will execute the first n actions.Ÿ cabal-installáA lazy unfolder for lookup operations which return the current value and (possibly) the next key  cabal-installReturn Ñ if ¾' uses 01-index format (aka secure repo)¡ cabal-install4Read the index (for the purpose of building a cache)½The callback is provided with list of cache entries, which is guaranteed to be lazily constructed. This list must ONLY be used in the scope of the callback; when the callback is terminated the file handle to the index will be closed and further attempts to read from the list will result in (pure) I/O exceptions.àIn the construction of the index for a secure repo we take advantage of the index built by the hackage-security library to avoid reading the .tarœ file as much as possible (we need to read it only to extract preferred versions). This helps performance, but is also required for correctness: the new 01-index.tar.gz> may have multiple versions of preferred-versions files, and Ô­ does not correctly deal with that (see #2956); by reading the already-built cache from the security library we will be sure to only read the latest versions of all files.=TODO: It would be nicer if we actually incrementally updated cabalú's cache, rather than reconstruct it from zero on each update. However, this would require a change in the cache format.¢ cabal-installRead package listÐThe result package releases and preference entries are guaranteed to be unique.ëNote: 01-index.tar is an append-only index and therefore contains all .cabal edits and preference-updates. The masking happens here, i.e. the semantics that later entries in a tar file mask earlier ones is resolved in this function.£ cabal-install Read the ¾ cache from the filesystem‚If a corrupted index cache is detected this function regenerates the index cache and then reattempt to read the index once (and dies if it fails again).¤ cabal-install Read the ¾Ñ cache from the filesystem without attempting to regenerate on parsing failures.¥ cabal-install Write the ¾ cache to the filesystemÙ cabal-install Write the  IndexState to the filesystemÚ cabal-installåRead out the "current" index timestamp, i.e., what timestamp you would use to revert to this version¦ cabal-install Read the  IndexState from the filesystem§ cabal-install(Optimise sharing of equal values inside �c.f. *https://en.wikipedia.org/wiki/Hash_consingå cabal-install)We need to save only .cabal file contents$úûüý™œ¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚ$ÏËÌÍÐýΙœ¾¿ÀúûüÈÉÊÔÑØÙÚÅÆÇÒÓÕÖ×ÁÂÃÄVÆ(c) David Himmelstrup 2005 Duncan Coutts 2008-2011BSD-likecabal-devel@haskell.org Safe-InferredÙÚÜy~¨ cabal-installÃCovers source dependencies and installed dependencies in one type.© cabal-installƒThe info that we can display for each package. It is information per package name and covers all installed and available versions.ª cabal-install8Return a list of packages matching given search strings.ü cabal-install Show information about packages.« cabal-install We get the ©Î by combining the info for the installed and available versions of a package.žWe're building info about a various versions of a single named package so the input package info records are all supposed to refer to the same package name.¬ cabal-install»Not all the info is pure. We have to check if the docs really are installed, because the registered package info lies. Similarly we have to check if the tarball has indeed been fetched.­ cabal-install Rearrange installed and source packages into groups referring to the same package by name. In the result pairs, the lists are guaranteed to not both be empty.® cabal-install‡Reorder a bunch of versions to put the most interesting / significant versions first. A preferred version range is taken into account.çThis may be used in a user interface to select a small number of versions to present to the user, e.g. =let selectVersions = sort . take 5 . interestingVersions prefüýüýW(c) Brent Yorgey 2009BSD-likecabal-devel@haskell.org provisionalportable Safe-InferredÙÚz=þ cabal-install,This is the main driver for the init script.þþXå(c) Andrea Vezzosi 2008 Duncan Coutts 2011 John Millikin 2012BSD-likecabal-devel@haskell.org provisionalportable Safe-InferredÙÚ~c‡ cabal-install(Entry point for the 'cabal get' command.¯ cabal-installWrite a  pkgId.cabalÜ file with the package description to the destination directory, unless one already exists.ˆ cabal-installÀGiven a bunch of package ids and their corresponding available  SourceRepos, pick a single  SourceRepoÁ for each one and clone into new subdirs of the given directory.° cabal-install Pick the  SourceRepo( to use to get the package sources from.Note that this does not depend on what š É drivers we are able to successfully configure. It is based only on the  SourceRepo:s declared in the package, and optionally on a preferred ±.ˆ cabal-installdestination dir prefix cabal-install preferred ± cabal-install"the packages and their available  SourceRepos ÿ€�‚ƒ„…†‡ˆ ‡ˆÿ€�‚ƒ„…†Y Safe-InferredÙÚ~úŒ cabal-install0Fetch a list of packages and their dependencies.ŒŒZ Safe-InferredÙÚ)�Ž��Ž�[ Safe-InferredÙÚê� cabal-installõto view as a FieldDescr, we sort the list of interfaces (Req > Bool > Choice > Opt) and consider only the first one.��Pcabal-devel@haskell.orgportable Safe-Inferred'É×ÙÚÜ‹‘ cabal-install FieldGrammar section description— cabal-installøThe description of a section in a config file. It can contain both fields and optionally further subsections. See also Ý.  cabal-installÞGiven a collection of field descriptions, keep only a given list of them, identified by name.¡ cabal-installÿApply a name mangling function to the field names of all the field descriptions. The typical use case is to apply some prefix.¢ cabal-installReuse a command line ² as a config file Ý.£ cabal-installReuse a bunch of command line ²s as config file Ýs.¤ cabal-installÓTo help construction of config file descriptions in a modular way it is useful to define fields and sections on local types and then hoist them into the parent types when combining them in bigger descriptions.)This is essentially a lens operation for —' to help embedding one inside another.¥ cabal-installParse a bunch of semi-parsed «çs according to a set of field descriptions. It accumulates the result on top of a given initial value.ÏThis only covers the case of flat configuration without subsections. See also ¨.¦ cabal-installžThis is a customised version of the functions from Distribution.Deprecated.ParseUtils that also optionally print default values for empty fields as comments.§ cabal-installPretty print a section.Since ¦Ò does not cover subsections you can use this to add them. Or alternatively use a — and use ©.¨ cabal-install Much like ¥Ó but it also allows subsections. The permitted subsections are given by a list of —s.© cabal-install Much like ¦Ú but also pretty prints any subsections. Subsection are only shown if they are non-empty.Note that unlike ¦ô, at present it does not support printing default values. If needed, adding such support would be quite reasonable.³ cabal-installUnlike §6 which has to be called directly, this gets used via ©% and so does not need to be exported.´ cabal-install2TODO: subsections TODO: this should simply build  PrettyFieldª cabal-install�Parse a string in the config file syntax into a value, based on a description of the configuration file in terms of its fields and sections.ÌIt accumulates the result on top of a given initial (typically empty) value.« cabal-install€Render a value in the config file syntax, based on a description of the configuration file in terms of its fields and sections.¨ cabal-installfield cabal-installlegacy sections cabal-installFieldGrammar sections´ cabal-install section name cabal-install parameter!ÝÞßàáâ‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«!ÝÞßàá⟠¡¢£—˜™š›œ�ž¤‘’“”•–¥¦§¨©ª«\(c) David Himmelstrup 2005BSD-likelemmih@gmail.com provisionalportable Safe-Inferred;ÙÚ™9µ cabal-installProvenance of the config file.¼ cabal-installßThese are the absolute basic defaults. The fields that must be initialised. When we load the config from the file we layer the loaded values over these ones, so any missing fields in the file take their values from here.½ cabal-installäThis is the initial configuration that we write out to the config file if the file does not exist (or the config we use if the file cannot be read for some other reason). When the config gets loaded it gets layered on top of ¼× so we do not need to include it into the initial values we save into the config file.¶ cabal-installIssue a warning if both $XDG_CONFIG_HOMEcabalconfig and ~/.cabal exists.· cabal-installIf  CABAL_DIR is set, return Just its value. Otherwise, if ~/.cabal exists and $XDG_CONFIG_HOMEcabalconfig does not exist, return Just "~/.cabal". Otherwise, return NothingŠ. If this function returns Nothing, then it implies that we are not using a single directory for everything, but instead use XDG paths. Fundamentally, this function is used to implement transparent backwards compatibility with pre-XDG versions of cabal-install.¸ cabal-installÛThe default behaviour of cabal-install is to use the XDG directory standard. However, if  CABAL_DIRæ is set, we instead use that directory as a single store for everything cabal-related, like the old ~/.cabal4 behaviour. Also, for backwards compatibility, if ~/.cabal' exists we treat that as equivalent to  CABAL_DIR; being set. This function abstracts that decision-making.¹ cabal-install)The default prefix used for installation.º cabal-installÇThe current hackage.haskell.org repo root keys that we ship with cabal.» cabal-installÅThe required threshold of root key signatures for hackage.haskell.orgÇ cabal-installœLoads the main configuration, and applies additional defaults to give the effective configuration. To loads just what is actually in the config file, use ¼.¼ cabal-installLike ÇÛ but does not apply any additional defaults, it just loads what is actually in the config file. This is thus suitable for comparing or editing a config file, but not suitable for using as the effective configuration.È cabal-install�Returns the config file path, without checking that the file exists. The order of precedence is: input flag, CABAL_CONFIG, default location.Ê cabal-installâThese are the default values that get used in Cabal if a no value is given. We use these here to include in comments when we write out the initial config file so that the user can see what default value they are overriding.Ë cabal-installAll config file fields.Ð cabal-install'Fields for the 'install-dirs' sections.Ò cabal-installFields for the haddock section.½ cabal-installFields for the õ section.Ó cabal-install+Fields for the 'program-locations' section.Ô cabal-install1Fields for the 'program-default-options' section.Õ cabal-install…Get the differences (as a pseudo code diff) between the user's config file and the one that cabal would generate if it didn't exist.Ö cabal-installÀUpdate the user's config file keeping the user's customizations.+¬­®²³¯°±´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ+¬­®²³¯°±´µ¶·¸¹º»ÇÈÎÏ̾¿ÀÁÅÄÂÃÆ¼Ê½ËÒÐÓÔÕÖÉÑÍ] Safe-InferredÙÚšÚÛÜÚÛÜ^Ê(c) The University of Glasgow 2006, Duncan Coutts 2008cabal-devel@haskell.orgalphaportable Safe-Inferred"ÂÙڪ; cabal-installA  SetupRunner implements a ¿.Ý cabal-installSetupScriptOptions' are options used to configure and run À?, as opposed to options given to the Cabal command at runtime.ß cabal-install,The version of the Cabal library to use (if íŒ is not set). A suitable version of the Cabal library must be installed (or for some build-types be the one cabal-install was built with).ˆThe version found also determines the version of the Cabal specification that we us for talking to the Setup.hs, unless overridden by à.à cabal-install§This is the version of the Cabal specification that we believe that this package uses. This affects the semantics and in particular the Setup command line interface.This is similar to ß9 but instead of probing the system for a version of the  Cabal library, you just say exactly which version of the specè we will use. Using this also avoid adding the Cabal library as an additional dependency, so add it to ì if needed.é cabal-install;Extra things to add to PATH when invoking the setup script.ê cabal-install8Extra environment variables paired with overrides, whereÞ v0 means "set the environment variable's value to v".Ý( means "unset the environment variable".ì cabal-install3List of dependencies to use when building Setup.hs.í cabal-install,Is the list of setup dependencies exclusive? When this is False?, if we compile the Setup.hs script we do so with the list in ìÔ but all other packages in the environment are also visible. A suitable version of Cabal library (see ß5) is also added to the list of dependencies, unless ì% already contains a Cabal dependency.When True , only the ìà packages are used, with other packages in the environment hidden.§This feature is here to support the setup stanza in .cabal files that specifies explicit (and exclusive) dependencies, as well as the old style with no dependencies.î cabal-install¢Should we build the Setup.hs with CPP version macros available? We turn this on when we have a setup stanza in .cabal that declares explicit setup dependencies.ñ cabal-install»Is the task we are going to run an interactive foreground task, or an non-interactive background task? Based on this flag we decide whether or not to delegate ctrl+c to the spawned task¿ cabal-install SetupMethod: represents one of the methods used to run Cabal commands.Á cabal-install:run Cabal commands through "cabal" in the current process cabal-install6run Cabal commands through "cabal" as a child processà cabal-install6run Cabal commands through a custom "Setup" executableÀ cabal-installSetup× encapsulates the outcome of configuring a setup method to build a particular package.ó cabal-install,Prepare to build a package by configuring a ¿. The returned À# object identifies the method. The ÝÒ may be changed during the configuration process; the final values are given by Ä.Å cabal-installµDecide if we're going to be able to do a direct internal call to the entry point in the Cabal library or if we're going to have to compile and execute an external Setup.hs script.ô cabal-installRun a configured À with specific arguments.Æ cabal-installËThis is a horrible hack to make sure passing fancy verbosity flags (e.g., -v'info +callstack';) doesn't break horribly on old Setup. We can't do it in filterConfigureFlags, because verbosity applies to ALL commands.õ cabal-install#Run a command through a configured À.ö cabal-install Configure a Àâ and run a command in one step. The command flags may depend on the Cabal library version in use.ô cabal-installcommand-line argumentsõ cabal-installcommand definition cabal-install command flags cabal-installextra command-line argumentsö cabal-install5produce command flags given the Cabal library versionÝÞßàáâãäåæçèéêëìíîïðñòóôõöóôõöÝÞßàáâãäåæçèéêëìíîïðñò_Â(c) David Himmelstrup 2005, Duncan Coutts 2005BSD-likecabal-devel@haskell.orgportable Safe-InferredÙÚ²§ ÷ cabal-install÷Choose the Cabal version such that the setup scripts compiled against this version will support the given command-line flags. Currently, it implements no specific restrictions and allows any version, unless the second argument is filled with a ‚', in which case this version is picked.ø cabal-install2Configure the package found in the local directoryú cabal-installúWarn if any constraints or preferences name packages that are not in the source package index or installed package index.Ç cabal-installMake an  InstallPlanÎ for the unpacked package in the current directory, and all its dependencies.È cabal-installCall an installer for an ™> but override the configure flags with the ones given by the ç. In particular the ç specifies an exact FlagAssignment� and exactly versioned package dependencies. So we ignore any previous partial flag assignment or dependency constraints and use the new ones.>NB: when updating this function, don't forget to also update installReadyPackage in D.C.Install.û cabal-install×Read saved configure flags and restore the saved environment from the specified files.ü cabal-installThe path (relative to  --build-dir) where the arguments to  configure should be saved.ý cabal-installÖRead saved configure flags and restore the saved environment from the usual location.þ cabal-installÀSave the configure flags and environment to the specified files.ÿ cabal-install+Save the build flags to the usual location.û cabal-installpath to saved flags fileý cabal-install  --build-dirþ cabal-installpath to saved flags fileÿ cabal-install  --build-dir ÷øùúûüýþÿ øù÷úûýüþÿ`cabal-devel@haskell.orgportable Safe-Inferred;ÙÚ·M É cabal-installAccumulator type for  parseSections.€ cabal-install(Type of the current package environment.� cabal-install'./cabal.config'‚ cabal-install'~.config cabal/config'† cabal-installëOptional package environment file that can be used to customize the default settings. Created by the user.‡ cabal-install Is there a 'cabal.config' in this directory?Ê cabal-install™Load the user package environment if it exists (the optional "cabal.config" file). If it does not exist locally, attempt to load an optional global one.ˆ cabal-installSame as userPackageEnvironmentFile, but returns a SavedConfig.Ë cabal-install;Descriptions of all fields in the package environment file.‰ cabal-install"Read the package environment file.Ì cabal-install#Parse the package environment file.Š cabal-install%Pretty-print the package environment.‹ cabal-installƒPretty-print the package environment with default values for empty fields commented out (just like the default Cabal config file). €�‚ƒ„…†‡ˆ‰Š‹ ƒ„…€�‚‡‰Š‹ˆ†acabal-devel@haskell.orgportable Safe-InferredÂ×ÙÚܹé� cabal-installÕCheck which type of package environment we're in and return a correctly-initialised  SavedConfig and a  UseSandbox: value that indicates whether we're working in a sandbox.‘ cabal-install7Return the saved "dist/" prefix, or the default prefix.’ cabal-install but override the configure flags with the ones given by the ç. In particular the ç specifies an exact Û� and exactly versioned package dependencies. So we ignore any previous partial flag assignment or dependency constraints and use the new ones.>NB: when updating this function, don't forget to also update configurePackage in D.C.Configure.Ü cabal-install8Directory to change to before starting the installation. cabal-installFile to log output to (if any)ÈÉÊËÌÍÎÊËÌÍÈÉÎgÁ(c) David Himmelstrup 2005 Duncan Coutts 2011BSD-likecabal-devel@gmail.com provisionalportable Safe-InferredÙÚÛÏ cabal-installòFreeze all of the dependencies by writing a constraints section constraining each dependency to an exact version.Ð cabal-install?Get the list of packages whose versions would be frozen by the freeze command.Ý cabal-install2Remove all unneeded packages from an install plan.%A package is unneeded if it is either'1) the package that we are freezing, orÅ2) not a dependency (directly or transitively) of the package we are freezing. This is useful for removing previously installed packages which are no longer required from the install plan. Invariant:  pkgSpecifiers' must refer to packages which are not  PreExisting in the ƒ.ÏÐÏÐh(c) Doug Beardsley 2015BSD-likecabal-devel@gmail.com provisionalportable Safe-InferredÙÚÞqÞ cabal-installËGiven a version, return an API-compatible (according to PVP) version range. Example: 0.4.1.2 produces the version range >= 0.4.1 && < 0.5.4This version is slightly different than the one in ”•“. This one uses a.b.c as the lower bound because the user could be using a new function introduced in a.b.c which would make ">= a.b" incorrect.ß cabal-install:Show the PVP-mandated version range for this package. The padTo; parameter specifies the width of the package name column.Ñ cabal-installEntry point for the  gen-bounds command.à cabal-installßThe message printed when some dependencies are found to be lacking proper PVP-mandated bounds.ÑÑi Safe-Inferred%&ÙÚê@Ò cabal-install4Information about the root directory of the project.ÄIt can either be an implicit project root in the current dir if no  cabal.project9 file is found, or an explicit root if the file is found.Ó cabal-installÉ- ^ An implicit project root. It contains the absolute project root dir.Ô cabal-installÚ- ^ An explicit project root. It contains the absolute project root dir and the relative  cabal.project file (or explicit override)Õ cabal-install9The layout of the user-wide cabal directory, that is the ~/.cabal0 dir on unix, and equivalents on other systems.àAt the moment this is just a partial specification, but the idea is eventually to cover it all.Ù cabal-install&The layout of a cabal nix-style store.â cabal-installÓThe layout of the project state directory. Traditionally this has been called the dist directory.ä cabal-installçThe root directory of the project. Many other files are relative to this location. In particular, the  cabal.project lives here.å cabal-installThe  cabal.project file and related like cabal.project.freezeÏ. The parameter is for the extension, like "freeze", or "" for the main file.æ cabal-install…The "dist" directory, which is the root of where cabal keeps all its state including the build artifacts from each package we build.ç cabal-installðThe directory under dist where we keep the build artifacts for a package we're building from a local directory. This uses a á not just a  PackageNameê because technically we can have multiple instances of the same package in a solution (e.g. setup deps).é cabal-installÑThe directory under dist where we download tarballs and source control repos to.ê cabal-install¢The directory under dist where we put the unpacked sources of packages, in those cases where it makes sense to keep the build artifacts to reduce rebuild times.ì cabal-installÕThe location for project-wide cache files (e.g. state used in incremental rebuilds).î cabal-installÙThe location for package-specific cache files (e.g. state used in incremental rebuilds).ð cabal-install/The location that sdists are placed by default.õ cabal-install“Information which can be used to construct the path to the build directory of a build. This is LESS fine-grained than what goes into the hashed InstalledPackageIdð, and for good reason: we don't want this path to change if the user, say, adds a dependency to their project.þ cabal-installMake the default âÏ based on the project root dir and optional overrides for the location of the dist directory and the  cabal.project file.þ cabal-installthe project root cabal-installthe dist9 directory or default (absolute or relative to the root)� cabal-install!Store directory. Must be absolute cabal-install Log directory0ÒÓÔÕÖרÙÚÛÜÝÞßàáâãåäæçèéêëìíîïðñòóôõö÷øùúûüýþÿ€�0âãåäæçèéêëìíîïðñòóôõö÷øùúûüýþÒÓÔÙÚÛÜÝÞßàáÿÕÖר�€j Safe-Inferred%&'ÙÚð?„ cabal-installThe outcome of ‰›: either the store entry was newly created or it existed already. The latter case happens if there was a race between two builds of the same store entry.‡ cabal-installCheck if a particular á exists in the store.ˆ cabal-install Return the á=s of all packages/components already installed in the store.‰ cabal-installÝPlace a new entry into the store. See the concurrency strategy description for full details.¥In particular, it takes two actions: one to place files into a temporary location, and a second to perform any necessary registration. The first action is executed without any locks held (the temp dir is unique). The second action holds a lock that guarantees that only one cabal process is able to install this store entry. This means it is safe to register into the compiler package DB or do other similar actions.ÊNote that if you need to use the registration information later then you must check the „ and if its'UseExistingStoreEntryŠ then you must read the existing registration information (unless your registration information is constructed fully deterministically).‰ cabal-installAction to place files. cabal-installRegister action, if necessary.ÙÚÛÜÝÞßàáÿ„…†‡ˆ‰ÙÚÛÜÝÞßàáÿˆ‡‰„…†k Safe-Inferred'6;ÌÙÚt7Œ cabal-install1There are four major cases for Setup.hs handling:  build-type Custom with a  custom-setup section build-type Custom without a  custom-setup section build-type not Custom with #cabal-version > $our-cabal-version build-type not Custom with #cabal-version <= $our-cabal-version0It's also worth noting that packages specifying cabal-version: >= 1.23 or later that have  build-type Custom will always have a  custom-setup. section. Therefore in case 2, the specified  cabal-version will always be less than 1.23.�In cases 1 and 2 we obviously have to build an external Setup.hs script, while in case 4 we can use the internal library API. In case 3 we also have to build an external Setup.hs script because the package needs a later Cabal lib version than we can support internally.‘ cabal-installàSpecific targets within a package or component to act on e.g. to build, haddock or open a repl.• cabal-installÌThis is used in the install plan to indicate how the package will be built.– cabal-installˆThe classic approach where the package is built, then the files installed into some location and the result registered in a package db.ÜIf the package came from a tarball then it's built in a temp dir and the results discarded.— cabal-install„The package is built, but the files are not installed anywhere, rather the build dir is kept and the package is registered inplace.2Such packages can still subsequently be installed. Typically –% packages will only depend on other – style packages and not on — ones.› cabal-install/The exact dependencies (on other plan packages)œ cabal-installÝComponents which depend (transitively) on an internally defined library. These are used by “Ò, to determine if a user-requested build is going to need a library registration� cabal-install$Dependencies on executable packages.ž cabal-install)Paths where executable dependencies live.Ÿ cabal-installDependencies on  pkg-configª packages. NB: this is NOT per-component (although it could be) because Cabal library does not track per-component pkg-config depends; it always does them all at once.  cabal-installïWhich optional stanzas (ie testsuites, benchmarks) will actually be enabled during the package configure step.¡ cabal-install(Some extra metadata associated with an ®Ç which indicates that the "package" in question is actually a single component to be built. Arguably it would be clearer if there were an ADT which branched into package work items and component work items, but I've structured it this way to minimize change to the existing code (which I don't feel qualified to rewrite.)£ cabal-install=The name of the component to be built according to the solver¤ cabal-installÅThe name of the component to be built. Nothing if it's a setup dep.¥ cabal-installÞThe *external* library dependencies of this component. We pass this to the configure script.¦ cabal-installÀIn a component prior to instantiation, this list specifies the âÌs which, after instantiation, are the actual dependencies of this package. Note that this does NOT include signature packages, which do not turn into real ordering dependencies when we instantiate. This is intended to be a purely temporary field, to carry some information to the instantiation phase. It's more precise than ¥;, and also stores information about internal dependencies.§ cabal-installÐThe executable dependencies of this component (including internal executables).¨ cabal-installThe  pkg-config dependencies of the component© cabal-installØThe paths all our executable dependencies will be installed to once they are installed.ª cabal-installÔThe UnitIds of the libraries (identifying elaborated packages/ components) that must be built before this project. This is used purely for ordering purposes. It can contain both references to definite and indefinite packages; an indefinite UnitId indicates that we must typecheck that indefinite package before we can build this one.° cabal-installThe á4 which uniquely identifies this item in a build plan´ cabal-installÀThis is true if this is an indefinite package, or this is a package with no signatures. (Notably, it's not true for instantiated packages.) The motivation for this is if you ask to build  foo-indefü, this probably means that you want to typecheck it, NOT that you want to rebuild all of the various instantiations of it.µ cabal-installThe  of the originating package¶ cabal-install-Shape of the package/component, for Backpack.· cabal-install‡A total flag assignment for the package. TODO: Actually this can be per-component if we drop all flags that don't affect a component.¸ cabal-install>The original default flag assignment, used only for reporting.º cabal-install€Where the package comes from, e.g. tarball, local dir etc. This is not the same as where it may be unpacked to for the build.» cabal-installÜThe hash of the source, e.g. the tarball. We don't have this for local source dir packages.¼ cabal-install‡Is this package one of the ones specified by location in the project file? (As opposed to a dependency, or a named package pulled in)½ cabal-installòAre we going to build and install this package to the store, or are we going to build it and register it locally.¾ cabal-installAnother way of phrasing pkgStanzasAvailable.¿ cabal-install·Which optional stanzas (ie testsuites, benchmarks) can be built. This means the solver produced a plan that has them available. This doesn't necessary mean we build them by default.À cabal-installØWhich optional stanzas the user explicitly asked to enable or to disable. This tells us which ones we build by default, and helps with error messages when the user asks to build something they explicitly disabled. TODO: The ÏÝ here should be refined into an ADT with three cases: NotRequested, ExplicitlyRequested and ImplicitlyRequested. A stanza is explicitly requested if the user asked, for this *specific* package, that the stanza be enabled; it's implicitly requested if the user asked for all global packages to have this stanza enabled. The difference between an explicit and implicit request is error reporting behavior: if a user asks for tests to be enabled for a specific package that doesn't have any tests, we should warn them about it, but we shouldn't complain that a user enabled tests globally, and some local packages just happen not to have any tests. (But perhaps we should warn if ALL local packages don't have any tests.)ÿ cabal-installÆOne of four modes for how we build and interact with the Setup.hs script, based on whether it's a build-type Custom, with or without explicit deps and the cabal spec version the .cabal file needs.€ cabal-install¨The version of the Cabal command line interface that we are using for this package. This is typically the version of the Cabal lib that the Setup.hs is built against.ÇTODO: We might want to turn this into a enum, yet different enum than CabalSpecVersion.ˆ cabal-install&Component/package specific information� cabal-installïThe programs that the compiler configured (e.g. for GHC, the progs ghc & ghc-pkg). Once constructed, only the configuredPrograms are used.� cabal-install6The combination of an elaborated install plan plus a ‰ô contains all the details necessary to be able to execute the plan without having to make further policy decisions.ÓIt does not include dynamic elements such as resources (such as http connections).‘ cabal-install$User-friendly display string for an �.“ cabal-install The packagecomponent contains&is a library and so must be registered” cabal-installÚConstruct the environment needed for the data files to work. This consists of a separate  *_datadir0 variable for each inplace package in the plan.ã cabal-installñConstruct an environment variable that points the package's datadir to its correct location. This might be: * Þ× the package's source directory plus the data subdirectory for inplace packages. * Ýí for packages installed in the store (the path was already included in the package at install/build time).– cabal-install"A user-friendly descriptor for an ®.ä cabal-installñThe full set of dependencies which dictate what order we need to build things in the install plan: "order dependencies" balls everything together. This is mostly only useful for ordering; if you are, for example, trying to compute what  --dependency3 flags to pass to a Setup script, you need to use ™. This method is the same as å.(NB: this method DOES include setup deps.˜ cabal-installLike ä., but only returns dependencies on libraries.™ cabal-installžThe library dependencies (i.e., the libraries we depend on, NOT the dependencies of the library), NOT including setup dependencies. These are passed to the Setup script via  --dependency.š cabal-installLike äÇ, but only returns dependencies on executables. (This coincides with ›.)› cabal-install˜The executable dependencies (i.e., the executables we depend on); these are the executables we must add to the PATH before we invoke the setup script.œ cabal-install¤This returns the paths of all the executables we depend on; we must add these paths to PATH before invoking the setup script. (This is usually what you want, not ›,, if you actually want to build something.)� cabal-install§The setup dependencies (the library dependencies of the setup executable; note that it is not legal for setup scripts to have executable dependencies at the moment.)Ÿ cabal-installêThe cache files of all our inplace dependencies which, when updated, require us to rebuild. See #4202 for more details. Essentially, this is a list of filepaths that, if our dependencies get rebuilt, will themselves get updated.�Note: the hash of these cache files gets built into the build cache ourselves, which means that we end up tracking transitive dependencies!ûNote: This tracks the "build" cache file, but not "registration" or "config" cache files. Why not? Arguably we should...¥Note: This is a bit of a hack, because it is not really the hashes of the SOURCES of our (transitive) dependencies that we should use to decide whether or not to rebuild, but the output BUILD PRODUCTS. The strategy we use here will never work if we want to implement unchanging rebuilds.æ cabal-installSee ä.ç cabal-installSee š.  cabal-installSee äÒ. This gives the unflattened version, which can be useful in some circumstances.¡ cabal-installUnambiguously render a ‘), e.g., to pass to a Cabal Setup script.£ƒÿ€�‚Œ�Ž��‘’“”•—–˜™œ›�žŸš ¡¢¤ª¥§©¨£¦«­¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©£ƒ�’®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ€�‚ƒ„…†‡ˆ—œ™˜›š�žŸ“”‘–•«­¬¡¢¤ª¥§©¨£¦˜™œ›�žŸš  �‰Š‹Œ�Ž“•—–”‘’¡¢¤ÿ€�‚¨¦§£¥©Œ�Ž��l Safe-InferredÙÚ,ØØm Safe-Inferred %&'6;ÑÙÚÜ/©Û cabal-install“Packages that are known to be up to date. These were found to be up to date before the build, or they have a successful build outcome afterwards.±This does not include any packages outside of the subset of the plan that was executed because we did not check those and so don't know for sure that they're still up to date.Ü cabal-installƒPackages that are probably still up to date (and at least not known to be out of date, and certainly not invalid). This includes Ûú plus packages that were up to date previously and are outside of the subset of the plan that was executed. It excludes Ý.Ý cabal-install´Packages that are known to be out of date. These are packages that were determined to be out of date before the build, and they do not have a successful build outcome afterwards.…Note that this can sometimes include packages outside of the subset of the plan that was executed. For example suppose package A and B depend on C, and A is the target so only A and C are in the subset to be built. Now suppose C is found to have changed, then both A and B are out-of-date before the build and since B is outside the subset to be built then it will remain out of date.Note also that this is not the inverse of Û or Üõ. There are packages where we have no information (ones that were not in the subset of the plan that was executed).Þ cabal-installèPackages that depend on libraries that have changed during the build (either build success or failure).üThis corresponds to the fact that libraries and dynamic executables are invalid once any of the libs they depend on change.ÍThis does include packages that themselves failed (i.e. it is a superset of ßÒ). It does not include changes in dependencies on executables (i.e. build tools).ß cabal-installÑPackages that themselves failed during the build (i.e. them directly not a dep).¥This corresponds to the fact that static executables are invalid in unlucky circumstances such as linking failing half way though, or data file generation failing.This is a subset of Þ.à cabal-installßA subset of the plan graph, including only dependency-on-library edges. That is, dependencies on libraries, not dependencies ofà libraries. This tells us all the libraries that packages link to.íThis is here as a convenience, as strictly speaking it's not status as it's just a function of the original �.á cabal-installAs a convenience for è with any of the other éßs to select only packages that are part of the project locally (i.e. with a local source dir).â cabal-installAs a convenience for è with any of the other éîs to select only packages that are being built in-place within the project (i.e. not destined for the store).ã cabal-installAs a convenience for è or ê with any of the other éÞs to select only packages that were pre-installed or already in the store prior to the build.ä cabal-install:Write out a representation of the elaborated install plan.ÅThis is for the benefit of debugging and external tools like editors.ë cabal-installÎRenders a subset of the elaborated install plan in a semi-stable JSON format.ì cabal-installÁWork out which packages are out of date or invalid after a build.í cabal-install"Helper for reading the cache file.=This determines the type and format of the binary cache file.î cabal-install5Helper for writing the package up-to-date cache file.=This determines the type and format of the binary cache file.æ cabal-installÕPrepare a package environment that includes all the library dependencies for a plan.ôWhen running cabal new-exec, we want to set things up so that the compiler can find all the right packages (and nothing else). This function is intended to do that work. It takes a location where it can write files temporarily, in case the compiler wants to learn this information via the filesystem, and returns any environment variable overrides the compiler needs.ÙÚÛÜÝÞßàáâãäåæçèäÙÚÛÜÝÞßàáâãåæçèn Safe-Inferred %&'6;ÙÚãJ &ï cabal-installWhen looking for a package's .cabalÀ file we can find none, or several, both of which are failures.ð cabal-install(Errors reported upon failing to parse a .cabal file.÷ cabal-installException thrown by “.ù cabal-install£The location of a package as part of a project. Local file paths are either absolute (if the user specified it as such) or they are relative to the project root.€ cabal-installErrors returned by ‡.‚ cabal-install Look up a å  field in the Þ for a specific €þ. This returns the configuration that applies to all local packages plus any package-specific configuration for this package.ƒ cabal-installUse a Å  based on the ± .„ cabal-installUse a Å Ï, but only for the solver. The solver does not use the full facilities of the Å ø so we can get away with making one that doesn't have an http transport. And that avoids having to have access to the ± … cabal-installÇResolve the project configuration, with all its optional fields, into Ç 0 with no optional fields (by applying defaults).† cabal-installÇResolve the project configuration, with all its optional fields, into ± 0 with no optional fields (by applying defaults).‡ cabal-installFind the root of this project.Searches for an explicit  cabal.project¬ file, in the current directory or parent directories. If no project file is found then the current dir is the project root (and the project will use an implicit config).Š cabal-installíRead all the config relevant for a project. This includes the project file if any, plus other global config.ñ cabal-installReads an explicit  cabal.projectî file in the given project root dir, or returns the default project config for an implicitly defined project.‹ cabal-installReads a cabal.project.localÒ file in the given project root dir, or returns empty. This file gets written by cabal configure<, or in principle can be edited manually or by other tools.Œ cabal-installReads a cabal.project.freezeÒ file in the given project root dir, or returns empty. This file gets written by  cabal freeze<, or in principle can be edited manually or by other tools.ò cabal-installóReads a named extended (with imports and conditionals) config file in the given project root dir, or returns empty.� cabal-install Render the Þ format.÷For the moment this is implemented in terms of a pretty printer for the legacy configuration types, plus a conversion.Ž cabal-installWrite a cabal.project.local$ file in the given project root dir.� cabal-installWrite a cabal.project.freeze$ file in the given project root dir.� cabal-install Write in the  cabal.project format to the given file.‘ cabal-install*Read the user's cabal-install config file.ó cabal-installÀRender bad package location error information for the implicit  cabal.project configuration.èTODO: This is currently not fully realized, with only one of the implicit cases handled. More cases should be added with informative help text about the issues related specifically when having no project configuration is present.“ cabal-installGiven the project config,Throws ÷.ô cabal-install2A glob to find all the cabal files in a directory.For a directory somedir, this is a glob of the form somedir*.cabal9. The directory part can be either absolute or relative.” cabal-install Read the .cabalé files for a set of packages. For remote tarballs and VCS source repos this also fetches them if needed.ÒNote here is where we convert from project-root relative paths to absolute paths.õ cabal-install A helper for ” to handle the case of û and ú. We simply read the .cabal file.ö cabal-install A helper for ” to handle the case of ü. We scan through the .tar.gz file to find the .cabal file and read that.÷ cabal-install A helper for ” to handle the case of ýä. We download the tarball to the dist src dir and after that handle it like the local tarball case.ø cabal-install A helper for ” to handle all the cases of þ.ù cabal-install#Utility used by all the helpers of ” to make an appropriate ³ (™ (..)), for a given package from a given location.ú cabal-installWrapper for the .cabalÉ file parser. It reports warnings on higher verbosity levels and throws ð on failure.û cabal-install Find the .cabal3 file within a tarball file and return it by value.Can fail with a ü or ï exception.ý cabal-install/Scan through a tar file stream and collect the .cabal file, or fail.þ cabal-install6The name to use for a local file for a remote tarball  SourceRepo…. This is deterministic based on the remote tarball URI, and is intended to produce non-clashing file names for different tarballs.ÿ cabal-install5The name to use for a local file or dir for a remote  SourceRepo‰. This is deterministic based on the source repo identity details, and intended to produce non-clashing file names for different repos.€ cabal-installÁTruncate a string, with a visual indication that it is truncated.• cabal-install The project configuration is not allowed to specify program locations for programs used by the compiler as these have to be the same for each set of packages.„We cannot check this until we know which programs the compiler uses, which in principle is not until we've configured the compiler.Throws é™ cabal-install)Manual instance which skips file contents� cabal-install.cabal file path cabal-install.cabal file contents cabal-installerrors cabal-install4We might discover the spec version the package needs cabal-installwarnings‡ cabal-install(starting directory, or current directory cabal-install cabal.project file name overrideˆ cabal-install verbosity cabal-install --cabal-config cabal-install with global‰ cabal-install verbosity cabal-install7whether to ignore local project (--ignore-project flag) cabal-install --cabal-config cabal-install with project cabal-installwithout projectŠ cabal-install --ignore-projectõ cabal-installThe package directory cabal-install The package .cabal fileê± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ €�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¶©¨ª«¬­®¯°±²³´µ·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÜÙÌÍÎÏÐÑÒÓÔÕÖרÚÛÝÞßäåàáâãæçèéªÒÓÔéêëìíîïðòñóôõö÷øùúûüýþÿ€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•êÞßäåàáâãæçèéÊËÜÙÌÍÎÏÐÑÒÓÔÕÖרÚÛݦ§¶©¨ª«¬­®¯°±²³´µ·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉ£¤¥å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ €�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢â ã ä ß à á ‡ÒÓÔ€�Š‘‹Œ’�ˆ‰Ž��ªùúûüýþÿ÷øðòñóôõöëìíîï“”‚ƒ„Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ …± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ †•éêo Safe-Inferred %&'(68Ì×ÙÚÜu(,£ cabal-install¹It is not always possible to prune to only the dependencies of a set of targets. It may be the case that removing a package leaves something else that still needed the pruned package.ðThis lists all the packages that would be broken, and their dependencies that would be missing if we did prune.‚ cabal-installÛThis is a temporary data type, where we temporarily override the graph dependencies of an ˜€, so we can take a closure over them. We'll throw out the overridden dependencies when we're done so it's strictly temporary.For ¡À, this the cached unit IDs always coincide with the real thing.¥ cabal-installHow Ã# should interpret the per-package ‘%s: as build, repl or haddock targets.¬ cabal-install·This tells us whether a target ought to be built by default, or only if specifically requested. The policy is that components like libraries and executables are built by default by buildâ, but test suites and benchmarks are not, unless this is overridden in the project configuration.­ cabal-installTo be built by default® cabal-installNot to be built by default¯ cabal-installThe status of a an µô component. This tells us whether it's actually possible to select this component to be built, and if not why not.° cabal-installWhen the user does  tests: False± cabal-install&When the solver could not enable tests² cabal-installWhen the component has buildable: False³ cabal-install5When the component is non-core in a non-local package´ cabal-install!The target can or should be builtµ cabal-install“An available target represents a component within a package that a user command could plausibly refer to. In this sense, all the components defined within the package are things the user could refer to, whether or not it would actually be possible to build that component./In particular the available target contains an ¯´ which informs us about whether it's actually possible to select this component to be built, and if not why not. This detail makes it possible for command implementations (like build, test8 etc) to accurately report why a target cannot be used.¦Note that the type parameter is used to help enforce that command implementations can only select targets that can actually be built (by forcing them to return the k1 value for the selected targets). In particular resolveTargets makes use of this (with k as (á, ComponentName')() to identify the targets thus selected.ƒ cabal-installA newtype for ‡Ã for which the dependency graph considers only dependencies on libraries which are NOT from setup dependencies. Used to compute the set of packages needed for profiling and dynamic libraries.„ cabal-installCheck that an ®" actually makes sense under some ‰.» cabal-installâReturn the up-to-date project config and information about the local packages within the project.½ cabal-install-Return an up-to-date elaborated install plan.²Two variants of the install plan are returned: with and without packages from the store. That is, the "improved" plan where source packages are replaced by pre-existing installed packages from the store (when their ids match), and also the original elaborated plan which uses primarily source packages.… cabal-installIf a ³7 refers to a single package, return Just that package.† cabal-installSelect the bits of a ‡$ to monitor for value changes. Use ˆ for the files to monitor.‰ cabal-installÆSelect the config values to monitor for changes package source hashes.Š cabal-installGet the �ß for all the source packages where we use hashes, and download any packages required to do so.:Note that we don't get hashes for local unpacked packages.‹ cabal-installÅAppend the given package databases to an existing PackageDBStack. A Nothing' entry will clear everything before it.Œ cabal-installäProduce an elaborated install plan using the policy for local builds with a nix-style shared store.èIn theory should be able to make an elaborated install plan with a policy matching that of the classic cabal install --user or --global� cabal-installGiven a �, report if it matches a L.Ž cabal-installGet the appropriate L* which identifies an installed component.� cabal-installGiven a ®, report if it matches a L.� cabal-install Given an �, generate the mapping from € and L to the ‘# that should be used in this case.’ cabal-install Given an �, generate the mapping from ‘6 to the shape of this package, as per mix-in linking.¾ cabal-installÇGet the bin/ directories that a package's executables should reside in.ÆThe result may be empty if the package does not build any executables.èThe result may have several entries if this is an inplace build of a package with multiple executables.¿ cabal-install+Given the install plan, produce the set of µ#s for each package-component pair.€Typically there will only be one such target for each component, but for example if we have a plan with both normal and profiling variants of a component then we would get both as available targets, or similarly if we had a plan that contained two instances of the same version of a package. This approach makes it relatively easy to select all instances/variants of a component.À cabal-install‚Merge component targets that overlap each other. Specially when we have multiple targets for the same component and one of them refers to the whole component (rather than a module or file within) then all the other targets for that component are subsumed.”We also allow for information associated with each component target, and whenever we targets subsume each other we aggregate their associated info. cabal-install¶The components that we'll build all of, meaning that after they're built we can skip building them again (unlike with building just some modules or other files within a component).à cabal-installôGiven a set of per-package/per-component targets, take the subset of the install plan needed to build those targets. Also, update the package config to specify which optional stanzas to enable, and which targets within each package to build.ºNB: Pruning happens after improvement, which is important because we will prune differently depending on what is already installed (to implement "sticky" test suite enabling behavior).“ cabal-install÷Set the build targets based on the user targets (but not rev deps yet). This is required before we can prune anything.” cabal-install�Assuming we have previously set the root build targets (i.e. the user targets but not rev deps yet), the first pruning pass does two things:þA first go at determining which optional stanzas (testsuites, benchmarks) are needed. We have a second go in the next pass.ÚTake the dependency closure using pruned dependencies. We prune deps that are used only by unneeded optional stanzas. These pruned deps are only used for the dependency closure and are not persisted in this pass.• cabal-install*Given a set of already installed packages  availablePkgs8, determine the set of available optional stanzas from pkgÖ which have all of their dependencies already installed. This is used to implement "sticky" testsuites, where once we have installed all of the deps needed for the test suite, we go ahead and enable it always.Ä cabal-install6Try to remove the given targets from the install plan.This is not always possible.– cabal-install Work out the Œ given the package description.— cabal-install Part of our Setup.hs handling policy is implemented by getting the solver to work out setup dependencies for packages. The solver already handles packages that explicitly specify setup dependencies, but we can also tell the solver to treat other packages as if they had setup dependencies. That's what this function does, it gets called by the solver for all packages that don't already have setup dependencies.6The dependencies we want to add is different for each Œ.= 1.20 for Setup scripts.™ cabal-installéWork out which version of the Cabal we will be using to talk to the Setup.hs interface for this package.This depends somewhat on the Œ‚ but most cases are a result of what the solver picked for us, based on the explicit setup deps or the ones added implicitly by —.š cabal-install2To be used for the input for elaborateInstallPlan.>TODO: [code cleanup] make InstallDirs.defaultInstallDirs pure.› cabal-install Given the œ( for a nix-style package store, and an �ß, replace configured source packages by installed packages from the store whenever they exist.× cabal-installÓThe path to the directory that contains a specific executable. NB: For inplace NOT InstallPaths.bindir installDirs; for an inplace build those values are utter nonsense. So we have to guess where the directory is going to be. Fortunately this is "stable" part of Cabal API. But the way we get the build directory is A HORRIBLE HACK.� cabal-installThe path to the build directory for an inplace build.½ cabal-install '(improvedPlan, elaboratedPlan, _, _, _)¤ÿ€�‚‘’“”•—–®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��¡£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖפ�®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ€�‚ƒ„…†‡ˆ�‰Š‹Œ�Ž“•—–”»½¿µ¶·¸¹º¯°±²³´¬­®‘’ÿ€�‚¡ÀÃ¥¦§¨©ª«Ä£¤Á¼ÅÈÉÊËÐÑÌÍÎÏÒÓÔÕÖ×¾ÆÇp Safe-Inferred8ÙÚy‡è cabal-installType alias for a é& with no user-defined problems/errors.=Can use the utilities below for reporting/rendering problems.é cabal-install8Target problems that occur during project orchestration.ñ cabal-installThe � matches component (test benchmark...) but none are buildableò cabal-installThere are no targets at allõ cabal-installA custom target problemèéêëìíîïðñòóôõéêëìíîïðñòóôõèq Safe-Inferred%&'ÙÚ〠ù cabal-installÃA tag used in rendering messages to distinguish singular or plural.ü cabal-install8Used to render a singular or plural version of something 0plural (listPlural theThings) "it is" "they are"ý cabal-install2Singular for singleton lists and plural otherwise.þ cabal-install%Render a list of things in the style foo, bar and baz� cabal-install%Render a list of things in the style #blah blah; this that; and the other‚ cabal-install÷When rendering lists of things it often reads better to group related things, e.g. grouping components by package name ÍrenderListSemiAnd [ "the package " ++ prettyShow pkgname ++ " components " ++ renderListCommaAnd showComponentName components | (pkgname, components) <- sortGroupOn packageName allcomponents ]† cabal-installÁThe optional stanza type (test suite or benchmark), if it is one.‡ cabal-install Does the �* potentially refer to one package or many?ˆ cabal-install Does the �$ refer to packages or to components?Œ cabal-installDefault implementation of Œ% simply renders one problem per line.� cabal-installDefault implementation of �.Ž cabal-installSeveral commands have a TargetProblemNoneEnabledÅ problem constructor. This renders an error message for those cases.� cabal-installSeveral commands have a TargetProblemNoTargetsÅ problem constructor. This renders an error message for those cases.� cabal-installverb cabal-installhow to render custom problems+ÿ‚€�ƒ„‰ˆ‡…†�’‘�Ž�˜šùûúüýþÿ€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��+ùûúüýþÿ€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��ÿ‚€�ƒ„‰ˆ‡…†�’‘�Ž�˜šr Safe-Inferred %&'/ÌÙÚÜŽ ž cabal-install"This is all the components of the «  other than the [Ÿ].We have to split up the « â components since they get produced at different times (or rather, when different things change).  cabal-installŠAs part of the dry run for local unpacked packages we have to check if the package config or files have changed. That is the purpose of   and ¡.�When a package is (re)built, the monitor must be updated to reflect the new state of the package. Because we sometimes build without reconfiguring the state updates are split into two, one for package config changes and one for other changes. This is the purpose of ¢ and £.‘ cabal-install/Do the dry run pass. This is a prerequisite of “.It gives us the Á . This should be used with ’% to give an improved version of the � with packages switched to the â4 state when we find that they're already up to date.¤ cabal-install=A specialised traversal over the packages in an install plan.ŽThe packages are visited in dependency order, starting with packages with no dependencies. The result for each package is accumulated into a šà and returned as the final result. In addition, when visiting a package, the visiting function is passed the results for all the immediate package dependencies. This can be used to propagate information from dependencies.¥ cabal-installHelper function for ¡, ¢ and £.It selects the info from a ® that are used by the ³  s (in the  ) to detect value changes.¡ cabal-installõDo all the checks on whether a package has changed and thus needs either rebuilding or reconfiguring and rebuilding.“ cabal-installBuild things for real.It requires the Á  gathered by ‘.¦ cabal-installÎCreate a package DB if it does not currently exist. Note that this action is not safe to run concurrently.§ cabal-installÅGiven all the context and resources, (re)build an individual package.¨ cabal-installGiven the current  InstallPlan and Á Õ, select all the packages we have to download and fork off an async action to download them. We download them in dependency order so that the one's we'll need first are the ones we will start downloading first.±The body action is passed a map from those packages (identified by their location) to a completion var for that package. So the body action should lookup the location and use © to get the result.© cabal-installäCheck if a package needs downloading, and if so expect to find a download in progress in the given â  and wait on it to finish.ª cabal-install�Ensure that the package is unpacked in an appropriate directory, either a temporary one or a persistent one under the shared dist directory.« cabal-install›This is a bit of a hacky workaround. A number of packages ship pre-processed .hs files in a dist directory inside the tarball. We don't use the standard distŠ location so unless we move this dist dir to the right place then we'll miss the shipped pre-processed files. This hacky approach to shipped pre-processed files ought to be replaced by a proper system, though we'll still need to keep this hack for older packages./« ¬ ­ ® ¯ œ ž Ÿ   ¡ ¤ ¦ � ¢ £ ¥ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º ¿ » ¼ ½ ¾ À Á à ‘’“/‘’Á º ¿ » ¼ ½ ¾ À · ¸ ¹ ² ³ ´ µ ¶ « ¬ ­ ® ¯ à “± ° « ¬ ­ ® ¯ § ¨ © ª œ ž Ÿ   ¡ ¤ ¦ � ¢ £ ¥  Safe-Inferred %&'×ÙÚÜ£Z” cabal-install>The set of components to build, represented as a mapping from á s to the ‘Ðs within the unit that will be selected (e.g. selected to build, test or repl).Associated with each ‘ is the set of �Ùs that matched this target. Typically this is exactly one, but in general it is possible to for different selectors to match the same target. This extra information is primarily to help make helpful error messages.• cabal-installÊThis holds the context between the pre-build, build and post-build phases.— cabal-install£This is the improved plan, before we select a plan subset based on the build targets, and before we do the dry-run. So this contains all packages in the project.˜ cabal-install This is the —Þ after we select a plan subset and do the dry-run phase to find out what is up-to or out-of date. This is the plan that will be executed during the build phase. So this contains only a subset of packages in the project.™ cabal-install§The part of the install plan that's shared between all packages in the plan. This does not change between the two plan variants above, so there is just the one copy.š cabal-installÉThe result of the dry-run phase. This tells us about each member of the ˜.› cabal-installThe targets selected by selectPlanSubsetÉ. This is useful eg. in CmdRun, where we need a valid target to execute.œ cabal-installÊThis holds the context of a project prior to solving: the content of the  cabal.project and all the local package .cabal files.¥ cabal-install’Tracks what command is being executed, because we need to hide this somewhere for cases that need special handling (usually for error reporting).¬ cabal-installLike «% but doesn't search for project root.­ cabal-install#Pre-build phase: decide what to do.¯ cabal-installBuild phase: now do it.çExecute all or parts of the description of what to do to build or rebuild the various packages needed.° cabal-install.Post-build phase: various administrative tasksÉUpdate bits of state based on the build outcomes and report any failures.± cabal-installGet all target selectors.² cabal-install Get all unique target selectors.³ cabal-installGiven a set of �s, resolve which ás and ‘s they ought to refer to.ÈThe idea is that every user target identifies one or more roots in the �®, which we will use to determine the closure of what packages need to be built, dropping everything from the plan that is unnecessary. This closure and pruning is done by ¼2 and this needs to be told the roots in terms of á s and the ‘s within those.*This means we first need to translate the � s into the ás and ‘×s. This translation has to be different for the different command line commands, like build, repl etc. For example the command  build pkgfoo< could select a different set of components in pkgfoo than  repl pkgfoo. The buildÀ command would select any library and all executables, whereas repl» would select the library or a single executable. Furthermore, both of these examples could fail, and fail in different ways and each needs to be able to produce helpful error messages.So ³é takes two helpers: one to select the targets to be used by user targets that refer to a whole package (޽), and another to check user targets that refer to a component (or a module or file within a component). These helpers can fail, and use their own error type. Both helpers get given the µ info about the component(s).üWhile commands vary quite a bit in their behaviour about which components to select for a whole-package target, most commands have the same behaviour for checking a user target that refers to a specific component. To help with this commands can use »/, either directly or as a basis for their own selectComponentTarget implementation.» cabal-installA basic selectComponentTarget# implementation to use or pass to ³Á, that does the basic checks that the component is buildable and isn't a test suite or benchmark that is disabled. This can also be used to do these basic checks as part of a custom impl that¼ cabal-installWrapper around Ã2 that adjusts for the extra unneeded info in the ”.½ cabal-install‰Utility used by repl and run to check if the targets spans multiple components, since those commands do not support multiple components.¾ cabal-install×Print a user-oriented presentation of the install plan, indicating what will be built.¿ cabal-installÄIf there are build failures then report them and throw an exception.À cabal-installŒCreate a dummy project context, without a .cabal or a .cabal.project file (a place where to put a temporary dist directory is still needed)À cabal-install;Project configuration including the global config if needed cabal-installWhere to put the dist directory cabal-install*The packages to be included in the projectýLRQPONM± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ ÿ€�‚„…†‡ˆ‰Š‹Œ�Ž��‘’“™ª‘’£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹ºÄ”•–š™—˜›œ�ž ¡¤¢Ÿ£¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁ�¥¦§¨©ª«¬œ�ž ¡¤¢Ÿ£± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ ª­®•–š™—˜›“™³”±²�Ž��‘’Š‹Œµ¶·¸¹º¯°±²³´¬­®LRQPONMRQPO„…†‡ˆ‰‘’ÿ€�‚»½´µ¶·¸¹º¼¥¦§¨©ª«Ä£¤¾¯°¿ÀÁs Safe-Inferred"%&'ÙÚã°ßÄ cabal-install4Information about the context in which we found the �s.Å cabal-install+The target selectors are part of a project.Æ cabal-install1The target selectors are from the global context.Ç cabal-installûThe target selectors refer to a script. Contains the path to the script and the executable metadata parsed from the scriptÈ cabal-install6What your command should do when no targets are found.É cabal-installdie on ðÊ cabal-installreturn a default �Ë cabal-install)Get the hash of a script's absolute path)ÈTwo hashes will be the same as long as the absolute paths are the same.Ì cabal-install-Get the directory for caching a script build.×The only identity of a script is it's absolute path, so append the hashed path to the  script-builds dir to get the cache directory.Í cabal-installÂGet the directory for caching a script build and ensure it exists.×The only identity of a script is it's absolute path, so append the hashed path to the  script-builds dir to get the cache directory.Î cabal-installÕDetermine whether the targets represent regular targets or a script and return the proper context and target selectors. Die with an error message if selectors are valid as neither regular targets or as a script.ãIn the case that the context refers to a temporary directory, delete it after the action finishes.Ï cabal-installAdd the ™2 to the context and use it to write a .cabal file.Ð cabal-installÇAdd add the executable metadata to the context and write a .cabal file.¬ cabal-installëExtract the first encountered executable metadata block started and terminated by the below tokens or die.  {- cabal: -}Return the metadata.­ cabal-installáExtract the first encountered project metadata block started and terminated by the below tokens.  {- project: -}Return the metadata.® cabal-installÙExtract the first encountered script metadata block started end terminated by the tokens {-  header: -}ãappearing alone on lines (while tolerating trailing whitespace). These tokens are not part of the ì result.,In case of missing or unterminated blocks a ë-error is returned.Ñ cabal-installThe base for making a ™! for a fake project. It needs a –— or ¯ depending on the command.Ò cabal-installÂFind the path of an exe that has been relocated with a "-o" optionÓ cabal-installA lens for the ° field of ™Î cabal-install6What your command should do when no targets are found. cabal-installA target filter cabal-installCommand line flags cabal-install$Target strings or a script and args. cabal-install Global flags. cabal-install.Current Command (usually for error reporting). cabal-install The body of your command action.ÄÅÆÇÈÊÉËÌÍÎÏÐÑÒÓËÌÍÎÈÊÉÄÅÆÇÐÏÑÓÒt Safe-Inferred %&'(ÔÙÚÜã±UØÙØÙu Safe-Inferred%&ÙÚ·¬± cabal-install=The various error conditions that can occur when matching a � against µ s for the test command.² cabal-installThe �# matches targets but no test-suites³ cabal-installThe �/ refers to a component that is not a test-suite´ cabal-install command we just need the basic checks on being buildable etc.÷øùúûüýþúü÷øùûýþy Safe-Inferred%&ÙÚËν cabal-install=The various error conditions that can occur when matching a � against µ s for the bench command.¾ cabal-installThe �" matches targets but no benchmarks¿ cabal-installThe �. refers to a component that is not a benchmarkÀ cabal-installÁAsking to benchmark an individual file or module is not supported€ cabal-installThe buildŸ command does a lot. It brings the install plan up to date, selects that part of the plan needed by the given or implicit targets and then executes the plan.4For more details on how this works, see the module (Distribution.Client.ProjectOrchestration� cabal-installThis defines what a � means for the bench command. It selects the µ s that the �1 refers to, or otherwise classifies the problem.For the benchì command we select all buildable benchmarks, or fail if there are no benchmarks or no buildable benchmarks.‚ cabal-installFor a ‘ �*, check if the component can be selected.For the benchê command we just need to check it is a benchmark, in addition to the basic checks on being buildable etc.ÿ€�‚ƒ„…ÿ€„…ƒ�‚z Safe-Inferred "%&'(ÔÙÚä̈‰Š‹Œ�‹Œ�ˆ‰Š{ Safe-Inferred"%&'ÔÙÚäÔMÁ cabal-install=The various error conditions that can occur when matching a � against µ s for the repl command. cabal-install Multiple �s match multiple targets‘ cabal-installThe repl command is very much like build�. It brings the install plan up to date, selects that part of the plan needed by the given or implicit repl target and then executes the plan. Compared to buildÆ the difference is that only one target is allowed (given or implicit) and the target type is repl rather than build. The general plan execution infrastructure handles both build and repl targets.4For more details on how this works, see the module (Distribution.Client.ProjectOrchestrationà cabal-installÕAdd repl options to ensure the repl actually starts in the current working directory.ÁIn a global or script context, when we are using a fake package,  cabal repl• starts in the fake package directory instead of the directory it was called from, so we need to tell ghci to change back to the correct directory.The  -ghci-scriptø flag is path to the ghci script responsible for changing to the correct directory. Only works on GHC >= 7.6, though. ÁìÄ cabal-install=First version of GHC where GHCi supported the flag we need. Ñhttps://downloads.haskell.org/~ghc/7.6.1/docs/html/users_guide/release-7-6-1.html’ cabal-installThis defines what a � means for the repl command. It selects the µ s that the �1 refers to, or otherwise classifies the problem.For repl we select:7the library if there is only one and it's buildable; or3the exe if there is only one and it's buildable; orany other buildable component.ÚFail if there are no buildable lib/exe components, or if there are multiple libs or exes.“ cabal-installFor a ‘ �*, check if the component can be selected.For the repl> command we just need the basic checks on being buildable etc.�‘’“”�‘”’“| Safe-Inferred"%&'ÔÙÚäØÛÅ cabal-install=The various error conditions that can occur when matching a � against µ s for the run command.Æ cabal-installThe �# matches targets but no executablesÇ cabal-install A single � matches multiple targetsÈ cabal-install Multiple �s match multiple targetsÉ cabal-installThe �0 refers to a component that is not an executableÊ cabal-install;Asking to run an individual file or module is not supportedš cabal-installThis defines what a � means for the list-bin command. It selects the µ s that the �1 refers to, or otherwise classifies the problem.For the list-bin‡ command we select the exe or flib if there is only one and it's buildable. Fail if there are no or multiple buildable exe components.› cabal-installFor a ‘ �*, check if the component can be selected.For the run™ command we just need to check it is a executable-like (an executable, a test, or a benchmark), in addition to the basic checks on being buildable etc.˜™š›œ�žŸ˜™š›œ�žŸ Safe-InferredÙÚÙ%¢¢} Safe-Inferred%&'ÙÚÛõ¤ cabal-installTo a first approximation, the freeze& command runs the first phase of the buildè command where we bring the install plan up to date, and then based on the install plan we write out a cabal.project.freeze config file.4For more details on how this works, see the module (Distribution.Client.ProjectOrchestrationË cabal-installøGiven the install plan, produce a config value with constraints that freezes the versions of packages used in the plan.Ì cabal-install’Given the install plan, produce solver constraints that will ensure the solver picks the same solution again in future in different environments.£¤£¤~cabal-devel@haskell.orgportable Safe-Inferred%&ÙÚÝÍ cabal-install¸Execute an action with a temporary .ghc.environment file reflecting the current environment. The action takes an environment containing the env variable which points ghc to the file.¥¦¦¥ Safe-Inferred%&ÙÚߨ cabal-installTo a first approximation, the  configure# just runs the first phase of the buildØ command where we bring the install plan up to date (thus checking that it's possible).The only difference is that  configureÔ also allows the user to specify some extra config flags which we save in the file cabal.project.local.4For more details on how this works, see the module (Distribution.Client.ProjectOrchestration§¨©§¨©€cabal-devel@haskell.orgportable Safe-Inferred%&'ÙÚâS ª cabal-install/Various knobs for customising the behaviour of °.¬ cabal-installShould this package be ignored?­ cabal-install7Should major version bumps be ignored for this package?¯ cabal-installEntry point for the outdated command.Î cabal-installÖPrint either the list of all outdated dependencies, or a message that there are none.Ï cabal-installConvert a list of ì s to a Ð list.Ñ cabal-install3Read the list of dependencies from the freeze file.Ò cabal-install=Read the list of dependencies from the new-style freeze file.Ó cabal-install;Read the list of dependencies from the package description.° cabal-installFind all outdated dependencies.ª«¬­®¯°®¯ª«¬­°� Safe-Inferred%&'ÙÚÜãð"´ cabal-installThe installÒ command actually serves four different needs. It installs: * exes: For example a program from hackage. The behavior is similar to the old install command, except that now conflicts between separate runs of the command are impossible thanks to the store. Exes are installed in the store like a normal dependency, then they are symlinked/copied in the directory specified by --installdir. To do this we need a dummy projectBaseContext containing the targets as extra packages and using a temporary dist directory. * libraries Libraries install through a similar process, but using GHC environment files instead of symlinks. This means that 'v2-install'ing libraries only works on GHC >= 8.0.4For more details on how this works, see the module (Distribution.Client.ProjectOrchestrationÔ cabal-installÄTreat all direct targets of install command as local packages: #8637Õ cabal-installÊVerify that invalid config options were not passed to the install command.6If an invalid configuration is found the command will die'.Ö cabal-installÎPartitions the target selectors into known local targets and hackage packages.× cabal-installóInstall any built exe by symlinking/copying it we don't use BuildOutcomes because we also need the component namesØ cabal-installÅInstall any built library by adding it to the default ghc environmentÙ cabal-installÆReturn the package specifiers and non-global environment file entries.Ú cabal-installÁDisables tests and benchmarks if they weren't explicitly enabled.Û cabal-installÈSymlink/copy every exe from a package from the store to a given locationÜ cabal-installInstall a specific exe.Ý cabal-installCreate Þ&s for packages with exposed libraries.ß cabal-install3Gets the file path to the request environment file.à cabal-installReturns the list of GhcEnvFilePackageIjÁ values already existing in the environment being operated on.á cabal-install7Constructs the path to the global GHC environment file.2TODO(m-renaud): Create PkgEnvName newtype wrapper.â cabal-install4Constructs the path to a local GHC environment file.µ cabal-installThis defines what a � means for the bench command. It selects the µ s that the �1 refers to, or otherwise classifies the problem.For the buildù command select all components except non-buildable and disabled tests/benchmarks, fail if there are no such components¶ cabal-installFor a ‘ �*, check if the component can be selected.For the build> command we just need the basic checks on being buildable etc.ã cabal-installÄThe synthetic base context to use to produce the full build context.Ø cabal-installEnvironment fileÛ cabal-install#Whether to overwrite existing files cabal-install0A function to get an UnitId's ^ store directory cabal-install&A function to get an ^ exe's filename cabal-installÓA function to get an ^ exe's final possibly ^ different to the name in the store.Ü cabal-install,The directory where the built exe is located cabal-installThe exe's filename cabal-install2The exe's filename in the public install directory cabal-install*the directory where it should be installed cabal-install'Whether the installation was successfulÀÁ³´µ¶³´µ¶ÁÀ‚ Safe-Inferred%&ÙÚðg·¸·¸ƒ(c) David Himmelstrup 2005BSD-likelemmih@gmail.com provisionalportable Safe-InferredÙÚÜãóuº cabal-install Entry pointä cabal-installÆCheck whether assertions are enabled and print a warning in that case.å cabal-installÅActually do the work of building the package. This is separate from æ so that ç and è do not invoke Å twice.é cabal-installàMake sure that we don't pass new flags to setup scripts compiled against old versions of Cabal.ê cabal-installÈReturn the names of all buildable components matching a given predicate.ë cabal-install…Used as an entry point when cabal-install needs to invoke itself as a setup script. This can happen e.g. when doing parallel builds.ººì˜™š˜›œ�žŸ� ¡¢£¤¢¥¦¢¥§¢¥¨¢¥©¢¥ª¢¥«¢¥¬¢¥­¢¥®¢¥¯¢¥°¢¥±¢¥²¢¥³¢¥´¢¥µ¢¥¶¢¥·¢¥¸¢¥¹¢¥º¢¥»¢¥¼¢¥½¢¥¾¢¥¿¢¥À¢¥Á¢¥Â¢¥Ã¢¥Ä¢¥Å¢¥Æ¢¥Ç¢¥È¢¥É¢¥Ê¢¥Ë¢¥Ì¢¥Í¢¥Î¢¥Ï¢¥Ð¢¥Ñ¢¥Ò¢¥Ó¢¥Ô¢¥Õ¢¥Ö¢¥×¢¥Ø¢¥Ù¢¥Ú¢¥Û¢¥Ü¢¥Ý¢¥Þ¢¥ß¢¥ß¢¥à¢¥á¢¥â¢¥ã¢¥ä¢¥å¢¥æ¢¥ç¢¥ç¢èé¢èê¢ëì˜íî˜íï˜íð˜íñ˜íò˜íó˜íô˜„õ˜ö÷˜öø˜öù˜öú˜öû˜öü˜›ý˜›þ˜›ÿ˜€�‚ƒ„‚ƒŽ‚ƒ…‚†‡‚†ˆ‚†‰‚†Š‚†‹‚Œ�‚ŒŽ‚Œ�‚Œ�‚Œ‘‚Œ’‚Œ“‚Œ”‚Œ”•–—•–˜•–™•–š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚ´µ¶·¸¹º»¼½ÛÜÝÞßàáâãä‘åæçèéêëìíîïðñòóôõö÷øùúûüýüþÿ€�‚ƒ„…†‡ˆˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞÞßàáâãäåæçèèéêëìíîïðñòóôõö÷øùùúûü ý þ ÿ € � ‚ ƒ „ …!†!‡!ˆ!‰!Š!‹!Œ!�!Ž!�!�!�!‘!’!“!”!”!•!–!–!—!˜!™!š!›!œ!�!ž!Ÿ! !¡!¢!£!¤!¥!¦!§!¨!©!ª!«!¬!­!®!¯!°!±!²!³!´!µ!¶!·!¸!¹!º!»!¼!½!¾!¿!À!Á!Â!Ã!Ä!Å!Æ!Ç!È!É!Ê!Ë!Ì!Í!Î!Ï!Ð"Ñ"Ò"Ó"Ô"Õ"Ö"×"Ø"Ø"Ù"©"Ú"«"¬"®"¯"°"±"Û"Ü"Ý"Þ"ß"à"á"â"ã"ä"å"æ"ç"è"é"ê"ë"ì"í#î#ï#ð#ð#ñ#ò#ó#ô#õ#ö#÷#ø#ù#ú#û#ü#ý$þ$þ$ÿ$€$�$‚$ƒ$„$…$†$‡$ˆ$‰$Š$‹$Œ$�$Ž%�%�%�%‘%‘%’&“&”&•&–&—&˜&™&š&›&œ&�&ž&Ÿ' '¡'¢'£'¤'¥'¦'§'¨'©'ª'«'¬(­(­(®(¯(°(±(²(³(´(µ(¶(·(¸(¹(º(»)¼)½)¾)¿)À)Á)Â)Ã)Ä)Å)Æ*Ç*Ç*È*É*Ê*Ë*Ì*Í*Î*Ï*Ð*Ñ+Ò+Ó+Ô+Õ+Ö+×+Ø+Ù+Ù+Ú+Û+Ü+Ý+Ý+Þ+ß+à+á+â+ã+ä+å+æ+ç+è+é+ê+ë+ì+í+î+ï+ð+ñ+ò+ó+ô+õ+ö+÷+ø+ù+ú+û+ü+ý+þ+ÿ,€,�,‚,ƒ,„,…,†,‡,ˆ,‰,Š,‹,Œ,�,Ž,�,�,‘,’,“,”,•,–,—-˜-™-š-›-œ-�-ž-Ÿ-Ÿ- -¡-¢-£-¤-¥-¦-§-¨-©-ª-«-¬-­-®-¯-°-±-²-³-´-µ-¶-·-¸-¹-º-»-¼.½.¾.¿.À.À.Á.Â.Ã.Ä.Å.Æ.Ç.È.É.Ê.Ë.Ì.Í.Î.Ï.Ð/Ñ/Ò/Ó/Ô/Õ/Ö/×/Ø/Ù/Ú/Û/Ü/Ý/Þ/ß/à0†0†0á0‡0â0ã0ä0å0æ1ç1è1ç1é1ê1ë1ì1í1î1ï1ð1ñ1ò2ó2ô2õ2ö2÷2ø2ù2ú2û2ü2ý þ ÿ € � ‚ ƒ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ � Ž � � ‘ ’ “ ” • – — ˜ ™3š3š3›3œ3�3ž3Ÿ3 3¡3¢3£3¤3¥3¦3§3¨3©3ª3«3¬3­3®3¯3°3±3²3³3´3µ3¶3·3¸3¹3º3»3¼3½3¾3¿3À3Á3Â3Ã3Ä3Å3Æ3Ç3È3È3É3Ê3Ë3Ì3Í3Î3Ï3Ð3Ñ3Ò3Ó3Ô4Û4Õ4�4Ö4…4×4Ø4Ù4Ž4„4�4Ú4Û4Ü4ˆ4‰4Ý4Š4‹4Þ4ß4Œ4à4á4â4ã4–4“4”4ä4å4æ4ç4è4é4ê4ë4ì4í4î4ï4ð4ñ4ò4ó4ô4õ4ö4÷4øùúûüýþÿ€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦5§5¨6©6ª7«7«7¬7­7®7®7¯7°7±7²7³7´7µ7¶7·7¸7¸7¹7º7»7¼7½7¾7¿7À7Á7˜7Â7Ã7¢7£7¤7Ä7Å7Æ7Ç7È7ˆ7É7Ê7Ë7Ì7Í7Î7Ï7Ï7Ð7Ñ7Ñ7Ò7Ó7Ô7Õ7Ö7×7Ø7—7Ù7Ú7Û7Ü7Ü7Ý7Þ7ß7à7á7â7â7ã7ä7å7æ7ç7è7é7ê7ë7ë7ì7í7î7ï7ð7ñ7ò7ó7ó7ô7õ7ö7÷7ø7ù7ú7û7û7ü7ý7þ7ÿ7€ 7� 7‚ 7ƒ 7ƒ 7„ 7… 7† 7‡ 7ˆ 7‰ 7Š 7‹ 7Œ 7� 7Ž 7� 7� 7� 7‘ 7’ 7“ 7” 7• 7– 7— 7˜ 7™ 7š 7› 7œ 7� 7ž 7Ÿ 7  7¡ 7¢ 7£ 7¤ 7¥ 7¦ 7º7§ 7¨ 7© 7ª 7« 7¬ 7­ 7® 7¯ 7° 7± 7² 7³ 7´ 7µ 7¶ 7· 7¸ 7¹ 7º 7» 7¼ 7½ 7¾ 7¿ 7À 7Á 7 7à 7Ä 7Å 7Æ 7Ç 7È 7É 7Ê 7Ë 7Ì 7Í 7Î 7Ï 7Ð 7Ñ 7Ò 7Ó 7Ô 7Õ 7Ö 7× 7Ø 7Ù 8Ú 8Û 8Ü 8Ý 9Þ 9ß 9à 9á 9â 9ã 9ä 9å 9æ 9ç 9è 9é :ê :ë :ì :í :î :ï :ð :ñ :ò :ó :ô :õ :ö :÷ :ø :ù :ú :û :ü :ý :þ ÿ ÿ € � ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ � Ž � � ‘ ’ “ ” • – ;— ;˜ ;™ ;š ;› ;œ ;� ;ž ;Ÿ ;  ;¡ ;¢ ;£ ;¤ ;¥ ;¦ ;§ ;¨ ;© ;ª ;« ;¬ ;­ ;® ;¯ ;° ;± ;² ;³ ;´ ;µ ;¶ ;· ;¸ <¹ <º <» <¼ <½ =¾ =¿ =À =Á = =à =Ä =Å =Æ =Ç =È >¹ >É >Ê >Ë >Ì >Í >Î >Ï >Ð >Ñ >Ò >Ó >Ô >Õ >Ö >× >Ø >Ù >Ú >Û >Ü >Ý >Þ >ß >à >á >â >ã >ä >å >æ >ç ?¹ ?É ?Ê ?Ë ?Ì ?è ?é ?ê ?ë ?ì ?í ?î ?ï ?ð ?ñ ?ò ?ó ?ô ?õ ?ö @÷ @ø @ù @ú @û @ü @ý @þ Aÿ A€ A� A‚ Aƒ A„ A… A† A… A‡ A‡ Aˆ A‰ AŠ A‹ AŒ A� AŽ A� A� A‘ A’ A“ A” A• A– A— A˜ A™ Aš A› Aœ A� Až AŸ A  A¡ A¢ A£ A¤ A¥ A¦ A§ A¨ A© Aª A« A¬ A­ A® A¯ A° A± A² A³ A´ Aµ A¶ A· A¸ A¹ Aº A» A¼ A½ A¾ A¿ AÀ AÁ A Aà AÄ AÅ AÆ AÇ AÈ AÉ AÊ AË AÌ AÍ AÎ AÏ AÐ AÑ AÒ AÓ AÔ AÕ AÖ A× AØ BÙ BÚ BÛ BÜ BÝ BÞ Bß Bà B‹Bá Bâ Bã Bä Bå Bæ Bç Bè Bé Bê Bë Bì Bí Cî CÚC«C¬C®C¯Cï Cð C°Cñ C±CÙCÙCò Có CØCØCô Cõ Cö CÜCÛC÷ Cø Cù Cú Cû Cü Cý Cþ Cÿ C€ C� C‚ Cƒ Cü C„ C… C† C‡ CßCìCˆ Cæ ‰ Š ‹ Œ � Ž � � ‘ ’ “ ” • – — ˜ ™ š › œ � ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ D­ D® D¯ D° D± D¯ D² D³ D´ Dµ D¶ D· D¸ D¹ Dº D» D¼ D½ D¾ D¿ DÀ DÁ D Dà DÄ DÅ DÆ DÇ DÈ DÉ DÊ DË DÌ DÍ DÎ DÏ DÐ DÑ DÒ DÓ EÔ FÕ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë Gì Hí Hî Hî Hï Hð Hñ Hò Hó Hô Hõ Hö H÷ Hø Hù Hú Hû Hü Hý Hþ Hÿ € � ‚ ƒ I„ I„ I… I† I‡ Iˆ I‰ I‰ IŠ I‹ IŒ I� IŽ I� I� I‘ I’ I“ I” I• I– I— I˜ I™ Iš I› Iœ I� Iž JŸ J  J¡ J¢ J£ J¤ J¥ J¦ J§ J¨ K© K© Kª K« K¬ K­ K® K¯ K° K± K² K³ K´ Kµ K¶ K· K¸ K¹ Kº K» K¼ K½ K¾ K¿ KÀ KÁ K Kà KÄ KÅ KÆ KÇ KÈ KÉ KÊ KË KÌ KÍ KÎ KÏ KÐ KÑ KÒ KÓ KÔ KÕ KÖ K× KØ KÙ KÚ KÛ KÜ KÝ KÞ Kß Kà Ká Kâ Kã Kä Kå Kæ Kç Kè Ké Kê Kë Kì Lí Lí Lî Lï Lð Lñ Lò Ló Lô Lõ Lö L÷ Lø Lù Lú Lû Lü Lý Lþ Lÿ L€L�L‚L‚LƒL„L…L†L‡LˆL‰LŠL‹LŒL�LŽL�L�L‘L’L“L”L•L–L—L˜L™L™LšL›L›LœL�L�LžLŸL L¡L¢L£L¤L¥L¦L§L¨L©LªL«L¬L­L®L¯L°L±L²L³L´LµL¶L·L¸L¹LºL»L¼L½L¾L¿LÀLÁLÂLÃLÄLÅLÆLÇLÈLÉLÊLËLÌLÍLÎLÏLÐLÑLÒLÓLÔLÕLÖL×LØLÙLÚLÛLÜLÝLÝLÞLßLàLáLâLãLäLåLæLçLèLéLêLëLìLíLîLïLðLñLòLóLôLõLöL÷LøLùLúLûLüLýLþLÿL€L€L�L‚LƒL„L…L†L‡LˆL‰LŠL‹LŒL�LŽL�L�L‘L’L“L“L”L•L–L—L˜L™LšL›LœL�LžLŸL L¡L¢L£L¤L¥L¦L§L¨L©LªL«L¬L­L®L¯L°L±L²L³L´LµL¶L·L¸L¹LºL»L¼L½L¾L¿LÀLÁLÂLÃLÄLÅLÆLÇLÈLÉLÊLËLÌLÍLÎLÏLÐLÑLÒLÓLÔMÕMÖM×MØMÙNÚNÛNÜNÝOÞOßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��“‘“‘“’“““”“•Q–Q—Q˜Q™QšQ›QœQ�QžQŸQ Q¡Q¢Q£Q¤Q¥Q¦Q§Q¨Q©QªQ«Q¬Q¬QÁQÀQ­Q¼Q®Q¯Q°Q±Q²Q³Q´QµQ¶Q·Q¸Q¹Q¹QºQ»Q¼Q½Q¾Q¿QÀQÁQÂQÃQÄQÅQÆQÇQÈQÉQÊQËQÌQÍQÎQÏQÐQÑQÒQÓQÔQÕQÖQ×QØQÙQÚQÛQÜQÝQÞQßQàQáQâQãQäQåQæQçQèQéQêQëQìQíQîQïQðQñQòQóQôQõQöR÷RøRùRúRûRüRýRþRÿ€€�‚ƒ„„…††‡ˆ‰Š‹Œ��Ž���‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²²³´µµ¶·¸¹º»¼¼½¾¿ÀÁÂÃÄÄÅÆÇÈÈÉÊËËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÜÝÞßàáâãäåæçèéêëìíîîïðñòóôõö÷øùúûüýþÿ€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËSÌSÌSÍSÎSÏSÐSÑSÒSÓSÔSÕSÖT×TØUÙUÚUÛUÜUÝÞßàááâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™šV›VœW�XžXŸX X¡X¢X£X¤X¥XâX¦X§X¨X©YªZ«Z¬Z­[®P¯P¯P°P±P²P³P´P´PµP¶P·P¸P¹PºP»P¼P½P¾P¿PÀPÁPÂPÃPÄPÅPÆPÇ\È\È\É\Ê\Ë\Ì\Í\Î\Ï\Ð\Ñ\Ò\Ó\Ô\Õ\Ö\×\Ø\Ù\Ú\Û\Ü\Ý\Þ\ß\à\á\â\ã\ä\å\æ\Æ\ç\Ç\è\é\ê\ë\ì\í\î\ï\ð\ñ\ò]ó]ˆ]ô^õ^õ^ö^÷^ø^ù^ú^û^ü^ý^þ^ÿ^€^�^‚^ƒ^„^…^†^‡^ˆ^‰^Š^‹^Œ^�_Ž_�_�_‘_’_“_”_•_–`—`˜`™`š`š`›`œ`�`ž`Ÿ` `¡`¢`£`¤a¥a¦a§a¨b©bªb«b¬b­b®b¯b°b±b²b³b´bµb¶b·b¸c¹cºc»c¼c½c¾c¿cÀcÁcÂcÃcÄcÅcÆcÇcÈcÉcÊcËcÌcÍcÎcÏcÐcÑcÒcÓdÔdÕdÖd×eØeØeÙeÚeÛeÜfÝfÞfßfàfáfâfãgägåhæiçièiéiêiêiëiìiíiíiîiïiðiñiòióiôiõiõiöi÷iøiùiúiûiüiýiþiÿi€i�i‚iƒi„i…i†i‡i‡iˆi‰iŠi‹iŒi�iŽi�i�i‘i’i“i”j•j–j—j˜j™jšj›jœk�kžkŸk k¡k¢k¢k£k¤k¥k¦k§k¨k¨k©kªk«k¬k­k®k¯k°k°k±k²k³k´kµk¶k·k¸k¹kºk»k¼k¼k½k¾k¿kÀkÁkÂkÃkÄkÅkÆkÇkÈkÉkÊkËkÌkÍkÎkÏkÐkÑkÒkÓkÔkÕkÖk×kØkÙkÚkÛkÜkÝkÞkßkàkákâkãkäkåkækçkèkékêkëkìkíkîkïkðkñkòkókôkõkök÷køkùkúkûkükýkþkÿk€k�k‚kƒk„k…k†k‡kˆk‰kŠk‹kŒk�kŽk�k�k‘k’k“k”k•k–k–k—k˜k™kšk›kœk�kžkŸk k¡k¢k£k¤k¥k¦k§k¨k©kªk«k¬k­k®k¯k°k±k²k³k´kµk¶k·k¸k¹kºk»k¼k½k¾k¿kÀkÁkÂkÃkÄkÅkÆkÇkÈkÉkÊkËkÌkÍkÎkÏkÐkÑkÒkÓkÔkÕkÖk×kØkÙkÚkÛkÜkÝkÞkßkàkákâkãlämåmåmæmçmèmémêmëmìmímîmïmðmñmòmónônônõnön÷nønùnúnûnünýnþnÿn€n�n�n‚nƒn„n…n†n‡nˆn‰nŠn‹nŒn�nŽn�n�n‘n’n’n“n”n•n–n—n˜n™nšn›nœn�nžnŸn n¡n¢n£n¤n¥n¦n§n¨n©nªo«o«o¬o­o®o¯o°o±o²o³o´oµo¶o·o¸o¹oºo»o¼o¼o½o¾o¿oÀoÁoÂoÃoÄoÅoÆoÇoÈoÉoÊoËoÌoÍoÎoÏoÐoÑoÒoÓoÔoÕoÖo×oØoÙoÚoÛoÜoÝoÞoßoàoáoâoãoäoåoæoçoèoéoêoëoìoípîpïpðpñpòpópôpõpöp÷pøpùpúpûpüpýpþqÿq€qÿq�q‚qƒq„q…q†q‡qˆq‰qŠq‹qŒq�qŽq�q�q‘q’q“q”q•r–r—r˜™šš›œ�žŸ  ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾É¿ÀÁÂÃÄÅsÆsÇsÈsÉsÊsËsÊsÌsÍsÎsÏsÐsÑsÒsÓsÔsÕsÖs×sØtÙtÚtÛtÜtÝu…uÞußuàuáuâuãuäuåv�vævçvèvßvàvévêvëvìwíwíwîwšwïwßwàxçxçxðx‚xñxòxßxàyóyôyßyàyõyöyãy÷yøzùzúzûzüzýzþzÿz€{„{�{ß{à{ê{‚{ƒ{„|…|†|ß|à|‡|ê|ˆ|‰|Š|‹Œ}ˆ}�~Ž~�ù�‘€’€’€“€”€•€–€—€˜€™�™�š�ß�à‚‹‚›‚œƒ�ž�Ÿ ¡¢£�¤¥�¤¦�§¨�©ª�©«�Ÿ¬�Ÿ­�Ÿ®�¯°�¯±�²³�Ÿ´�µ¶�µ·�µ¸�µ¹�µº�µ»�µ¼�µ½�µ¾�µ¿�µÀ�µÁ¡ÂáÂÄ¡ÂÅ�ÆÇ�ÆÈ�ÆÉ�ÆÊ�ÆË�ÆÌ�ÆÍ�ÆÎ�ÆÏ�ÆÐ�ÆÑ�ÆÒ�ÆÓ�ÆÔ�ÆÕ�ÆÖ�Æ×�ÆØ�ÆÙ�¯Ú�¯Û�¯Ü�¯Ý�¯Þ�¯ß�¯à�¯á�¯â�¯ã�¯ä�¯å�Ÿæ�Ÿç�Ÿè�Ÿé�êë�Ÿì�Ÿí�Ÿî�ïð�ïñ�ïò�ïó�ïô�ïõ�ïö�ï÷¡Âø¡Âù¡Âú¡Âû¡Âü¡Âý¡Âþ¡Âÿ�€��€‚�€ƒ�¯„�¯…�Ɔ�Ƈ�ƈ�Ɖ�ÆŠ�Æ‹�ÆŒ�Æ��ÆŽ�Æ��Æ��Æ‘�Æ’�Æ“�Æ”�¯•�¯–�¯—�¯˜�¯™�¯š�›œ�›��›ž�›Ÿ� ¡�¢£�¢¤�¥¦�¥§�Ÿ¨�Ÿ©�Ÿª�Ÿ«�Ÿ¬�­®�­¯�­Š�­°�­±�­²�­³�­´�­µ�­¶�­·�­¸�­¹�º»�º¼�º½�¾¿�ŸÀ�ŸÁ�ŸÂ�ŸÃ�ŸÄ�ŸÅ¡Æµ ¡ÆÇ¡ÆÈ�Ÿ³ ¡ÆÉ¡ÆÊ¡ÆË¡ÆÌ�ÍÎ�ÍÏ�ÍÐ�ÍÑÒÓÔ�ÕÖ�Õ×�ÕØ¡ÆÙ¡ÆÚ¡ÆÛ¡ÆÜ�¯Ý¡ÆÞ¡Æß�àá�àâ�àã�àä�åæ�åç�åè�Ÿé�Ÿê�ëì�ëí�ëî�ïð�ïñ�ïò�ïó�ïô�õö�õ÷�õø�²ù�²ú�²û�ºü�ýþ�ýþ�ýÿ�§È�§€�§��§»�§Å�§Ä�§‚�§ƒ�§º�§„�§…�§†�‡ˆ�‡‰�‡Š�‡‹�Œ��ŒŽ�Œ��Œ��‡‘�‡’�‡“�”•�”–�”—�”˜�™š�™›�œ��œ��œž�­Ÿ�­ �­¡�­¢�­£�­¤�­¥�­¦�­§�­¨�­©�ª«�ª¬�ª­�ª®�ª¯�ª°�ª±�ª²�ª³�ª´�ªµ�ª¶�ª·�ª¸�ž¹�åº�å»�¼½�¼½�€¾�€¿�ÀÁ�ÀÂ�ÀÃ�ÀÄ�ÀÅ�ÀÆ�ÀÇ�¯È�¯É�¯Ê�¯Ë�¯Ì�¯Í�ÎÏ�›Ð�›Ñ�›Ò�›Ó�›Ô�¤Õ�¤Ö�¤×�¤Ø�¤Ù�¤Ú�¤Û�¤Ü�¤Ý�¤Þ�¤ß�¤à�¤á�¤â�¤ã�¤ä�¤á�¤å�¤æ�¤ç�¤è�¤Í�¤é�êë�êì�êí�êî�êï�êð�êñ�êò�óô�õö�õ÷�©ø�©ù�ïú�Ÿû�Ÿü�Ÿý�Ÿþ�Ÿõ�Ÿÿ�Ÿ€�Ÿ��Ÿ‚�Ÿƒ�Ÿ„�Ÿ…�Ÿ†�Ÿ‡�Ÿˆ�Ÿ‰�ŸŠ�Ÿ‹�ŸŒ�Ÿ��ŸŽ�����‘��’�”“�”“¡Â”¡Â•¡Â–—˜™—˜š—˜â—˜›œ�žœŸ ¡¢£¡¢¤¡¢¥¡¢¦§¨©˜ª«˜ª¬˜ª­˜®¯˜°±˜°²˜³´˜µ¶˜µ·˜µ¸˜µ¹˜µº˜µ»˜µ¼�ª½�¾¿�ÀÁÂÃÄÅÆÇÈÉÊË,Ì‚Íâ‚Íã0Î Œ Ï Ð Ñ Ò Ó3Ô4Õ˜Ö×4�4�4Ž4Ó•–Ø•–­ÙÚÛÜÝ8Þ8ß8à˜á⧨ã;ä<å@Ì@æ@çAèAéAêAëAìAíAîAïAðAñAòAóAôAõAöA÷AøAù¢úûAüAýAþAÿA€A�A‚AƒA„A…�†‡AˆA‰AŠA‹BŒ•–Á•–� Ž � � ‘ ’ “ ” • – — ˜ ™ š‚›œ � ž Ÿ ¡¢D£D¤¥¦H§H¨H© ª «I¬I­I®J¯J’ J°‚Œ±‚²³K´Kµ“¶“·“¸“¹˜›º˜›»˜›¼“½“¾“¿“À“Á“Á“Â“Ã“Ä“Å“Æ“Ç“È“É“Ê“Ë“Ì“Í“Î“Ï“Þ “ГѓғӓԓՓ֓דؓٓړۓܓݓޓßQàQáQâQãQäQåQæQçQèQéQêQëQìQíQîQïQðQñQòQóQôQõQöQ÷QøQùQúQûQüQýQþQÿQ€Q�Q‚QƒQ„Q…Q†Q‡QˆQ‰QŠQ‹Q´QµQŒ˜�Ž˜��Q‘˜’“¢¥”•–T—T˜U™UšU›UœU�žŸ ¡¢£ ¤¥¦§¨©¢£ê‚ª«¬­®¯°±²³´µ¶·¸¹º»V¼V½V¾V¿VÀVÁVÂXÃXƄŢÆÇPÈPÉ\Ê\Ë\Ì\Í\Î\Ï\Ð\Ñ\Ò^Ó^Ô^Õ^Ö^×^Ø^Ù^Ú^Û_Ü_Ý`Þ`ß`à`ácâcãcäcåcæcçcè�éêfëfìfífîfïfð˜ñòfógãh hôhõ˜ö÷˜øùkúkû˜ÖükýkþœŸÿm€œŸ�m‚mƒm„m…n†n‡nˆn‰nŠn‹nŒn�nŽn�n�n‘n’­®“n”n•n–n—n‡o˜o™ošoío›¢œ�ožoŸo o¡o¢o£o¤o¥o¦˜§¨o©oªo«o¬o­o®o¯o°o±o²¢³´oµr¶˜·¸r¹rºr»r¼r½r¾r¿rÀrÁrÂrÃrÄsÅsÆsǘÈÙ‚ªÉuÊuËuÌuÍuÎvÏvÐvÑvÒvÓvÍvÔyÕyÖy×yÍ{Ø{Ò{Ù{Ú|Û|Ü|Ñ|Ò|Ý|Í}Þ}ß~à€á€â˜ãä€å€æ€ç�è�é�ê�ë�ì�í�î�ï�ð�ñ¢òó�ô�õ�ö�÷�øƒùƒúƒòƒÞƒûƒüƒýƒþÿ,cabal-install-3.10.2.1-65TuIanu7V1TeNXBEsQf0(Distribution.Client.ProjectOrchestration"Distribution.Client.Compat.PreludeDistribution.Client.UtilsDistribution.Deprecated.ReadPDistribution.Client.IndexUtils%Distribution.Client.CmdHaddockProjectDistribution.Client.SetupDistribution.Client.VCSDistribution.Client.Init.Utils%Distribution.Client.SolverInstallPlanDistribution.Client.Dependency$Distribution.Client.Compat.Directory!Distribution.Client.Security.HTTP)Distribution.Client.Compat.ExecutablePath"Distribution.Client.Compat.Orphans&Distribution.Client.BuildReports.Types%Distribution.Client.BuildReports.Lens$Distribution.Client.Compat.Semaphore$Distribution.Client.Dependency.TypesDistribution.Client.GZipUtilsDistribution.Client.GlobDistribution.Client.HaddockDistribution.Client.HashValue(Distribution.Client.IndexUtils.Timestamp!Distribution.Client.Init.LicensesDistribution.Client.JobControl Distribution.Client.ManpageFlags Distribution.Client.ProjectFlagsDistribution.Client.SavedFlags Distribution.Client.Security.DNSDistribution.Client.SignalDistribution.Client.Tar$Distribution.Client.Types.AllowNewer&Distribution.Client.Types.BuildResults&Distribution.Client.Types.ConfiguredId+Distribution.Client.Types.ConfiguredPackage%Distribution.Client.Types.Credentials'Distribution.Client.Types.InstallMethod)Distribution.Client.Types.OverwritePolicy1Distribution.Client.CmdInstall.ClientInstallFlags*Distribution.Client.Types.PackageSpecifier"Distribution.Client.Types.RepoNameDistribution.Client.Types.Repo)Distribution.Client.IndexUtils.IndexState*Distribution.Client.IndexUtils.ActiveRepos$Distribution.Client.Types.SourceRepo)Distribution.Client.Types.PackageLocation)Distribution.Client.Types.SourcePackageDb&Distribution.Client.Types.ReadyPackage8Distribution.Client.Types.WriteGhcEnvironmentFilesPolicyDistribution.Client.PackageHashDistribution.Client.InstallPlanDistribution.Client.SrcDistDistribution.Client.RunDistribution.Client.Init.TypesDistribution.Client.Init.PromptDistribution.Client.Init.Format!Distribution.Client.Init.Defaults'Distribution.Client.Init.FlagExtractorsDistribution.Client.Init.Simple2Distribution.Client.Init.NonInteractive.Heuristics/Distribution.Client.Init.NonInteractive.Command,Distribution.Client.Init.Interactive.Command%Distribution.Client.Init.FileCreatorsDistribution.Client.FileMonitor Distribution.Client.RebuildMonad)Distribution.Client.ProjectBuilding.TypesDistribution.Client.Utils.Json Distribution.Client.Utils.ParsecDistribution.Client.CheckDistribution.Client.VersionDistribution.Client.HttpUtilsDistribution.Client.GlobalFlagsDistribution.Client.FetchUtilsDistribution.Client.Targets'Distribution.Client.ProjectConfig.Types*Distribution.Client.BuildReports.Anonymous(Distribution.Client.BuildReports.Storage$Distribution.Client.Win32SelfUpgradeDistribution.Client.ParseUtils"Distribution.Client.TargetSelector:Distribution.Client.CmdInstall.ClientInstallTargetSelector#Distribution.Client.NixStyleOptionsDistribution.Client.Manpage"Distribution.Client.InstallSymlinkDistribution.Client.ListDistribution.Client.InitDistribution.Client.GetDistribution.Client.Fetch'Distribution.Client.BuildReports.Upload(Distribution.Deprecated.ViewAsFieldDescrDistribution.Client.ConfigDistribution.Client.Upload Distribution.Client.SetupWrapperDistribution.Client.Configure.Distribution.Client.Sandbox.PackageEnvironmentDistribution.Client.SandboxDistribution.Client.CmdLegacy(Distribution.Client.ProjectConfig.LegacyDistribution.Client.NixDistribution.Client.ReconfigureDistribution.Client.InstallDistribution.Client.FreezeDistribution.Client.GenBounds!Distribution.Client.DistDirLayoutDistribution.Client.Store)Distribution.Client.ProjectPlanning.TypesDistribution.Client.SourceFiles%Distribution.Client.ProjectPlanOutput!Distribution.Client.ProjectConfig#Distribution.Client.ProjectPlanning!Distribution.Client.TargetProblem$Distribution.Client.CmdErrorMessages#Distribution.Client.ProjectBuildingDistribution.Client.ScriptUtilsDistribution.Client.CmdUpdateDistribution.Client.CmdTestDistribution.Client.CmdRunDistribution.Client.CmdHaddockDistribution.Client.CmdBuildDistribution.Client.CmdBenchDistribution.Client.CmdSdistDistribution.Client.CmdReplDistribution.Client.CmdListBinDistribution.Client.CmdFreezeDistribution.Client.CmdExec Distribution.Client.CmdConfigureDistribution.Client.CmdOutdatedDistribution.Client.CmdInstallDistribution.Client.CmdCleanDistribution.Client.MainDistribution.Types.SourceRepo SourceRepoSourcePackageDbpackagePreferencesDistribution.Client.Types PackageIndexdependencyCyclesbrokenPackagesdependencyInconsistencies InstallPlan PreExisting InstalledDistribution.Solver.ModularSolverreadProjectConfig"Distribution.Deprecated.ParseUtilsDistribution.ClientInitDistribution.Types.LibraryLibrary+Cabal-syntax-3.10.2.0-IMknsbS72h3ZjM7pQqM9nDistribution.Types.PackageId PackageIdDistribution.Pretty prettyShowbase Text.Read readMaybeText.ParserCombinators.ReadPReadS%Cabal-3.10.2.1-GyzoJJgKHqN4rPN6ewqdAHDistribution.Simple.Configure getInstalledPackagesMonitorFilesDistribution.Simple.SetuphaddockProjectCommand!configAllowDependingOnPrivateLibsconfigUseResponseFilesconfigDumpBuildInfoconfigDebugInfoconfigRelocatableconfigFlagErrorconfigExactConfigurationconfigLibCoverageconfigCoverageconfigBenchmarks configTestsconfigConfigurationsFlagsconfigInstantiateWithconfigDependenciesconfigConstraintsconfigStripLibsconfigStripExesconfigSplitObjsconfigSplitSections configGHCiLibconfigPackageDBsconfigUserInstallconfigVerbosityconfigCabalFilePathconfigDistPrefconfigDeterministic configCID configIPIDconfigExtraIncludeDirsconfigExtraFrameworkDirsconfigExtraLibDirsStaticconfigExtraLibDirsconfigScratchDirconfigInstallDirsconfigProgSuffixconfigProgPrefixconfigOptimizationconfigConfigureArgsconfigProfLibDetailconfigProfDetail configProf configProfExeconfigFullyStaticExe configDynExeconfigStaticLibconfigSharedLib configProfLibconfigVanillaLib configHcPkg configHcPathconfigHcFlavorconfigProgramPathExtraconfigProgramArgsconfigProgramPathsconfigPrograms_ configArgs ConfigFlagsbuildCabalFilePath buildArgs buildNumJobsbuildVerbosity buildDistPrefbuildProgramArgsbuildProgramPaths BuildFlags!Distribution.Simple.Program.TypesProgramConfiguredProgramDistribution.Verbosity Verbosity Distribution.Types.ComponentName ComponentNameCLibName CNotLibName CBenchName CTestNameCExeName CFLibNameRepoTypeDistribution.ParsecexplicitEitherParsec eitherParsec simpleParsecparsecParsec CabalParsingprettyVersionedprettyPrettyDistribution.Utils.Stringtrim4cabal-install-solver-3.10.2.1-GnF3uB9dEL2KuhzkWzaRPT)Distribution.Solver.Types.ResolverPackage ConfiguredResolverPackage"Distribution.Solver.Types.Progress foldProgressDoneFailStepProgress+Distribution.Solver.Types.PackageConstraint scopeToplevelPackagePropertyStanzasPackagePropertyFlagsPackagePropertySourcePackagePropertyInstalledPackagePropertyVersionPackagePropertyPackageConstraint(directory-1.3.7.1-5opj6QQ4DFqGFOHgd4OGISSystem.DirectorysetModificationTimegetSymbolicLinkTargetpathIsSymbolicLinkcreateFileLink/hackage-security-0.6.2.3-AwTIWwlEtNOExk8RpBOEn5*Hackage.Security.Client.Repository.HttpLibHttpLibgetExecutablePath$fStructuredSomeException$fBinarySomeException$fBinaryURIAuth$fStructuredURI $fBinaryURIOutcomeNotTriedFailedOkInstallOutcomePlanningFailedDependencyFailedDownloadFailed UnpackFailed SetupFailedConfigureFailed BuildFailed TestsFailed InstallFailed InstallOk BuildReportpackageosarchcompilerclientflagAssignment dependenciesinstallOutcome docsOutcome testsOutcome ReportLevel NoReportsAnonymousReportsDetailedReports$fParsecReportLevel$fPrettyReportLevel$fStructuredReportLevel$fBinaryReportLevel$fParsecInstallOutcome$fPrettyInstallOutcome$fParsecOutcome$fPrettyOutcome$fEqBuildReport$fShowBuildReport$fGenericBuildReport $fEqOutcome $fShowOutcome $fEnumOutcome$fBoundedOutcome$fGenericOutcome$fEqInstallOutcome$fShowInstallOutcome$fGenericInstallOutcome$fEqReportLevel$fOrdReportLevel$fEnumReportLevel$fBoundedReportLevel$fShowReportLevel$fGenericReportLevelQSemnewQSemwaitQSem signalQSem$fEqQSemPackagesPreferenceDefaultPreferAllLatestPreferAllOldestPreferAllInstalledPreferLatestForSelectedModular PreSolver AlwaysModular$fParsecPreSolver$fPrettyPreSolver$fStructuredPreSolver$fBinaryPreSolver$fStructuredSolver$fBinarySolver$fShowPackagesPreferenceDefault $fEqSolver $fOrdSolver $fShowSolver$fBoundedSolver $fEnumSolver$fGenericSolver $fEqPreSolver$fOrdPreSolver$fShowPreSolver$fBoundedPreSolver$fEnumPreSolver$fGenericPreSolvermaybeDecompress FilePathRootFilePathRelativeFilePathHomeDir GlobPieceWildCardLiteralUnionGlobFilePathGlobRelGlobDirGlobFileGlobDirTrailing FilePathGlobisTrivialFilePathGlobgetFilePathRootDirectory matchFileGlobmatchFileGlobRel matchGlob$fStructuredGlobPiece$fBinaryGlobPiece$fParsecFilePathGlobRel$fPrettyFilePathGlobRel$fStructuredFilePathGlobRel$fBinaryFilePathGlobRel$fParsecFilePathRoot$fPrettyFilePathRoot$fStructuredFilePathRoot$fBinaryFilePathRoot$fParsecFilePathGlob$fPrettyFilePathGlob$fStructuredFilePathGlob$fBinaryFilePathGlob$fEqFilePathGlob$fShowFilePathGlob$fGenericFilePathGlob$fEqFilePathRoot$fShowFilePathRoot$fGenericFilePathRoot$fEqFilePathGlobRel$fShowFilePathGlobRel$fGenericFilePathGlobRel $fEqGlobPiece$fShowGlobPiece$fGenericGlobPieceregenerateHaddockIndex HashValue hashValue showHashValueshowHashValueBase64readFileHashValue hashFromTUF truncateHash$fStructuredHashValue$fBinaryHashValue $fEqHashValue$fGenericHashValue$fShowHashValue TimestampepochTimeToTimestamptimestampToUTCTimeutcTimeToTimestampmaximumTimestamp nullTimestamp$fParsecTimestamp$fPrettyTimestamp$fStructuredTimestamp$fBinaryTimestamp $fEqTimestamp$fOrdTimestamp$fEnumTimestamp$fNFDataTimestamp$fShowTimestamp$fGenericTimestampLicensebsd2bsd3gplv2gplv3agplv3lgpl21lgpl3apache20mitmpl20iscLockJobLimit JobControlspawnJob collectJob remainingJobs cancelJobsnewSerialJobControlnewParallelJobControl newJobLimit withJobLimitnewLockcriticalSection ManpageFlagsmanpageVerbosity manpageRawdefaultManpageFlagsmanpageOptions$fSemigroupManpageFlags$fMonoidManpageFlags$fEqManpageFlags$fShowManpageFlags$fGenericManpageFlags ProjectFlagsflagProjectFileNameflagIgnoreProjectdefaultProjectFlagsprojectFlagsOptionsremoveIgnoreProjectOption$fSemigroupProjectFlags$fMonoidProjectFlags$fShowProjectFlags$fGenericProjectFlagswriteSavedArgswriteCommandFlags readSavedArgsreadCommandFlags$fExceptionSavedArgsError$fShowSavedArgsErrorqueryBootstrapMirrors TerminatedinstallTerminationHandler$fShowTerminated$fExceptionTerminatedcreateTarGzFileextractTarGzFilebuildTreeRefTypeCodebuildTreeSnapshotTypeCodeisBuildTreeRefTypeCode filterEntriesfilterEntriesM entriesToList$fExceptionEitherRelaxDepSubjectRelaxDepSubjectAllRelaxDepSubjectPkg RelaxDepModRelaxDepModNoneRelaxDepModCaret RelaxDepScopeRelaxDepScopeAllRelaxDepScopePackageRelaxDepScopePackageId RelaxedDep RelaxDeps RelaxDepsSome RelaxDepsAll AllowOlder unAllowOlder AllowNewer unAllowNewer isRelaxDepsmkRelaxDepSome$fStructuredRelaxDepScope$fBinaryRelaxDepScope$fStructuredRelaxDepMod$fBinaryRelaxDepMod$fStructuredRelaxDepSubject$fBinaryRelaxDepSubject$fParsecRelaxDepSubject$fPrettyRelaxDepSubject$fStructuredRelaxedDep$fBinaryRelaxedDep$fParsecRelaxedDep$fPrettyRelaxedDep$fMonoidRelaxDeps$fSemigroupRelaxDeps$fStructuredRelaxDeps$fBinaryRelaxDeps$fParsecRelaxDeps$fPrettyRelaxDeps$fMonoidAllowOlder$fSemigroupAllowOlder$fStructuredAllowOlder$fBinaryAllowOlder$fMonoidAllowNewer$fSemigroupAllowNewer$fStructuredAllowNewer$fBinaryAllowNewer$fEqAllowNewer$fReadAllowNewer$fShowAllowNewer$fGenericAllowNewer$fEqAllowOlder$fReadAllowOlder$fShowAllowOlder$fGenericAllowOlder $fEqRelaxDeps$fReadRelaxDeps$fShowRelaxDeps$fGenericRelaxDeps$fEqRelaxedDep$fReadRelaxedDep$fShowRelaxedDep$fGenericRelaxedDep$fEqRelaxDepSubject$fOrdRelaxDepSubject$fReadRelaxDepSubject$fShowRelaxDepSubject$fGenericRelaxDepSubject$fEqRelaxDepMod$fReadRelaxDepMod$fShowRelaxDepMod$fGenericRelaxDepMod$fEqRelaxDepScope$fReadRelaxDepScope$fShowRelaxDepScope$fGenericRelaxDepScope TestsResult TestsNotTriedTestsOk DocsResult DocsNotTried DocsFailedDocsOk BuildResult BuildFailureDependentFailed BuildOutcomes BuildOutcome$fStructuredBuildFailure$fBinaryBuildFailure$fExceptionBuildFailure$fStructuredDocsResult$fBinaryDocsResult$fStructuredTestsResult$fBinaryTestsResult$fStructuredBuildResult$fBinaryBuildResult$fShowBuildResult$fGenericBuildResult$fShowTestsResult$fGenericTestsResult$fShowDocsResult$fGenericDocsResult$fShowBuildFailure$fGenericBuildFailureHasConfiguredId configuredId ConfiguredId confSrcId confCompName confInstIdInstalledPackageIdannotatedIdToConfiguredId$fPackageConfiguredId$fShowConfiguredId$fStructuredConfiguredId$fBinaryConfiguredId%$fHasConfiguredIdInstalledPackageInfo$fEqConfiguredId$fOrdConfiguredId$fGenericConfiguredIdConfiguredPackage confPkgId confPkgSource confPkgFlagsconfPkgStanzas confPkgDeps#$fPackageInstalledConfiguredPackage$fHasUnitIdConfiguredPackage%$fHasMungedPackageIdConfiguredPackage$fPackageConfiguredPackage$fBinaryConfiguredPackage$fIsNodeConfiguredPackage#$fPackageFixedDepsConfiguredPackage"$fHasConfiguredIdConfiguredPackage$fEqConfiguredPackage$fShowConfiguredPackage$fGenericConfiguredPackagePassword unPasswordUsername unUsername InstallMethodInstallMethodCopyInstallMethodSymlink$fPrettyInstallMethod$fParsecInstallMethod$fSemigroupInstallMethod$fStructuredInstallMethod$fBinaryInstallMethod$fEqInstallMethod$fShowInstallMethod$fGenericInstallMethod$fBoundedInstallMethod$fEnumInstallMethodOverwritePolicyNeverOverwriteAlwaysOverwritePromptOverwrite$fPrettyOverwritePolicy$fParsecOverwritePolicy$fStructuredOverwritePolicy$fBinaryOverwritePolicy$fShowOverwritePolicy$fEqOverwritePolicy$fGenericOverwritePolicy$fBoundedOverwritePolicy$fEnumOverwritePolicyClientInstallFlagscinstInstallLibscinstEnvironmentPathcinstOverwritePolicycinstInstallMethodcinstInstalldirdefaultClientInstallFlagsclientInstallOptions$fStructuredClientInstallFlags$fBinaryClientInstallFlags$fSemigroupClientInstallFlags$fMonoidClientInstallFlags$fEqClientInstallFlags$fShowClientInstallFlags$fGenericClientInstallFlagsPackageSpecifier NamedPackageSpecificSourcePackagepkgSpecifierTargetpkgSpecifierConstraints$fStructuredPackageSpecifier$fBinaryPackageSpecifier$fEqPackageSpecifier$fShowPackageSpecifier$fFunctorPackageSpecifier$fGenericPackageSpecifierRepoName unRepoName$fParsecRepoName$fPrettyRepoName$fNFDataRepoName$fStructuredRepoName$fBinaryRepoName$fShowRepoName $fEqRepoName $fOrdRepoName$fGenericRepoNameRepoRepoLocalNoIndex RepoRemote RepoSecure repoLocal repoLocalDir repoRemote LocalRepo localRepoName localRepoPathlocalRepoSharedCache RemoteReporemoteRepoName remoteRepoURIremoteRepoSecureremoteRepoRootKeysremoteRepoKeyThresholdremoteRepoShouldTryHttpsemptyRemoteRepoemptyLocalRepolocalRepoCacheKey isRepoRemotemaybeRepoRemoterepoName$fParsecRemoteRepo$fPrettyRemoteRepo$fStructuredRemoteRepo$fBinaryRemoteRepo$fPrettyLocalRepo$fParsecLocalRepo$fStructuredLocalRepo$fBinaryLocalRepo$fStructuredRepo $fBinaryRepo $fShowRepo$fEqRepo $fOrdRepo $fGenericRepo$fShowLocalRepo $fEqLocalRepo$fOrdLocalRepo$fGenericLocalRepo$fShowRemoteRepo$fEqRemoteRepo$fOrdRemoteRepo$fGenericRemoteRepoRepoIndexStateIndexStateHeadIndexStateTimeTotalIndexStateheadTotalIndexStatemakeTotalIndexStatelookupIndexStateinsertIndexState$fParsecRepoIndexState$fPrettyRepoIndexState$fNFDataRepoIndexState$fStructuredRepoIndexState$fBinaryRepoIndexState$fParsecTotalIndexState$fPrettyTotalIndexState$fNFDataTotalIndexState$fStructuredTotalIndexState$fBinaryTotalIndexState$fEqTotalIndexState$fShowTotalIndexState$fGenericTotalIndexState$fEqRepoIndexState$fGenericRepoIndexState$fShowRepoIndexStateCombineStrategyCombineStrategySkipCombineStrategyMergeCombineStrategyOverrideActiveRepoEntryActiveRepoRest ActiveRepo ActiveReposdefaultActiveReposfilterSkippedActiveReposorganizeByRepos$fParsecCombineStrategy$fPrettyCombineStrategy$fNFDataCombineStrategy$fStructuredCombineStrategy$fBinaryCombineStrategy$fParsecActiveRepoEntry$fPrettyActiveRepoEntry$fNFDataActiveRepoEntry$fStructuredActiveRepoEntry$fBinaryActiveRepoEntry$fParsecActiveRepos$fPrettyActiveRepos$fNFDataActiveRepos$fStructuredActiveRepos$fBinaryActiveRepos$fEqActiveRepos$fShowActiveRepos$fGenericActiveRepos$fEqActiveRepoEntry$fShowActiveRepoEntry$fGenericActiveRepoEntry$fEqCombineStrategy$fShowCombineStrategy$fEnumCombineStrategy$fBoundedCombineStrategy$fGenericCombineStrategySourceRepoProxySourceRepoMaybeSourceRepoListSourceRepositoryPackagesrpType srpLocationsrpTag srpBranch srpSubdir srpCommandsrpHoist srpToProxy srpFanOutsourceRepositoryPackageGrammar $fGenericSourceRepositoryPackage#$fStructuredSourceRepositoryPackage$fBinarySourceRepositoryPackage$fShowSourceRepositoryPackage$fOrdSourceRepositoryPackage$fEqSourceRepositoryPackageUnresolvedSourcePackagePackageLocationLocalUnpackedPackageLocalTarballPackageRemoteTarballPackageRepoTarballPackageRemoteSourceRepoPackageResolvedPkgLocUnresolvedPkgLoc$fStructuredPackageLocation$fBinaryPackageLocation$fShowPackageLocation$fFunctorPackageLocation$fEqPackageLocation$fOrdPackageLocation$fGenericPackageLocation packageIndexlookupDependencylookupPackageName$fBinarySourcePackageDb$fEqSourcePackageDb$fGenericSourcePackageDb ReadyPackageGenericReadyPackage$fIsNodeGenericReadyPackage$fEqGenericReadyPackage$fShowGenericReadyPackage$fGenericGenericReadyPackage$fPackageGenericReadyPackage%$fPackageFixedDepsGenericReadyPackage'$fHasMungedPackageIdGenericReadyPackage$fHasUnitIdGenericReadyPackage%$fPackageInstalledGenericReadyPackage$fBinaryGenericReadyPackageWriteGhcEnvironmentFilesPolicyAlwaysWriteGhcEnvironmentFilesNeverWriteGhcEnvironmentFiles-WriteGhcEnvironmentFilesOnlyForGhc844AndNewer*$fStructuredWriteGhcEnvironmentFilesPolicy&$fBinaryWriteGhcEnvironmentFilesPolicy"$fEqWriteGhcEnvironmentFilesPolicy$$fEnumWriteGhcEnvironmentFilesPolicy'$fBoundedWriteGhcEnvironmentFilesPolicy'$fGenericWriteGhcEnvironmentFilesPolicy$$fShowWriteGhcEnvironmentFilesPolicySolverPlanProblemPackageMissingDeps PackageCyclePackageInconsistencyPackageStateInvalidSolverInstallPlan planIndexplanIndepGoalsSolverPlanPackage showPlanIndexshowInstallPlannewtoListtoMapremovevalidshowPlanProblemproblemsacyclicclosed consistentdependencyClosurereverseDependencyClosuretopologicalOrderreverseTopologicalOrder$fStructuredSolverInstallPlan$fBinarySolverInstallPlan$fGenericSolverInstallPlanPackageHashConfigInputspkgHashCompilerIdpkgHashPlatformpkgHashFlagAssignmentpkgHashConfigureScriptArgspkgHashVanillaLibpkgHashSharedLib pkgHashDynExepkgHashFullyStaticExepkgHashGHCiLibpkgHashProfLibpkgHashProfExepkgHashProfLibDetailpkgHashProfExeDetailpkgHashCoveragepkgHashOptimizationpkgHashSplitObjspkgHashSplitSectionspkgHashStripLibspkgHashStripExespkgHashDebugInfopkgHashProgramArgspkgHashExtraLibDirspkgHashExtraLibDirsStaticpkgHashExtraFrameworkDirspkgHashExtraIncludeDirspkgHashProgPrefixpkgHashProgSuffixpkgHashPackageDbspkgHashDocumentationpkgHashHaddockHooglepkgHashHaddockHtmlpkgHashHaddockHtmlLocationpkgHashHaddockForeignLibspkgHashHaddockExecutablespkgHashHaddockTestSuitespkgHashHaddockBenchmarkspkgHashHaddockInternalpkgHashHaddockCsspkgHashHaddockLinkedSourcepkgHashHaddockQuickJumppkgHashHaddockContentspkgHashHaddockIndexpkgHashHaddockBaseUrlpkgHashHaddockLibPackageSourceHashPackageHashInputs pkgHashPkgIdpkgHashComponentpkgHashSourceHashpkgHashPkgConfigDepspkgHashDirectDepspkgHashOtherConfighashedInstalledPackageIdhashedInstalledPackageIdLonghashedInstalledPackageIdShorthashPackageHashInputsrenderPackageHashInputs$fShowPackageHashConfigInputs ProcessingGenericInstallPlan PlanPackageIsUnitGenericPlanPackagefoldPlanPackagedepends showPlanGraphtoGraphkeyskeysSet installedlookup directDeps revDirectDepsfromSolverInstallPlan!fromSolverInstallPlanWithProgressconfigureInstallPlanready completedfailedexecutionOrderlookupBuildOutcomeexecute#$fHasConfiguredIdGenericPlanPackage$fHasUnitIdGenericPlanPackage&$fHasMungedPackageIdGenericPlanPackage$fPackageGenericPlanPackage$fStructuredGenericPlanPackage$fBinaryGenericPlanPackage$fIsNodeGenericPlanPackage$fBinaryGenericInstallPlan$fStructuredGenericInstallPlan$fEqGenericPlanPackage$fShowGenericPlanPackage$fGenericGenericPlanPackage ProgressPhaseProgressDownloadingProgressDownloadedProgressStartingProgressBuildingProgressHaddockProgressInstallingProgressCompleted MergeResult OnlyInLeftInBoth OnlyInRightmergeBy duplicates duplicatesByremoveExistingFilewithTempFileNameinDirwithEnvwithEnvOverrideswithExtraPathEnv logDirChangenumberOfProcessorsdetermineNumJobsmakeAbsoluteToCwdmakeRelativeToCwdmakeRelativeToDirmakeRelativeCanonicalfilePathToByteStringbyteStringToFilePathtryCanonicalizePathcanonicalizePathNoThrowmoreRecentFileexistsAndIsMoreRecentThanrelaxEncodingErrorstryFindAddSourcePackageDesctryFindPackageDescfindOpenProgramLocationprogressMessagepvpize incVersiongetCurrentYearlistFilesInsidelistFilesRecursivesafeReadhasElemallPackageSourceFilespackageDirToSdist splitRunArgsrunFieldAnnotationannCommentedOutannCommentLines DefaultPromptOptionalPromptMandatoryPromptIsSimple IsLiterateSeverityLogInfoWarningErrorBreakException InteractivegetLinereadFilegetCurrentDirectorygetHomeDirectorygetDirectoryContents listDirectorydoesDirectoryExist doesFileExistreadProcessWithExitCodegetEnvironmentputStrputStrLncreateDirectoryremoveDirectory writeFilecopyFilerenameDirectoryhFlushmessagebreak throwPrompt PurePrompt _runPrompt HsFilePath _hsFilePath _hsFileType HsFileTypeLiterateStandard InvalidHsPath PackageType ExecutableLibraryAndExecutable TestSuiteProjectSettings_pkgOpts_pkgDesc _pkgLibTarget _pkgExeTarget_pkgTestTarget WriteOpts _optOverwrite _optMinimal_optNoComments _optVerbosity _optPkgDir _optPkgType _optPkgName _optCabalSpec TestTarget _testMainIs _testDirs _testLanguage_testOtherModules_testOtherExts_testDependencies_testBuildTools ExeTarget _exeMainIs_exeApplicationDirs _exeLanguage_exeOtherModules _exeOtherExts_exeDependencies_exeBuildTools LibTarget_libSourceDirs _libLanguage_libExposedModules_libOtherModules _libOtherExts_libDependencies_libBuildToolsPkgDescription_pkgCabalVersion_pkgName _pkgVersion _pkgLicense _pkgAuthor _pkgEmail _pkgHomePage _pkgSynopsis _pkgCategory_pkgExtraSrcFiles_pkgExtraDocFiles InitFlags interactivequiet packageDir noCommentsminimal simpleProject packageNameversion cabalVersionlicenseauthoremailhomepagesynopsiscategoryextraSrcextraDoc packageTypemainIslanguageexposedModules otherModules otherExtsapplicationDirs sourceDirs buildToolsinitializeTestSuitetestDirs initHcPath initVerbosity overwritefromHsFilePath isHsFilePath toHsFilePath toLiterateHs toStandardHs mkLiterate evalPrompt$fSemigroupInitFlags$fMonoidInitFlags$fShowHsFilePath$fExceptionBreakException$fMonadPurePrompt$fApplicativePurePrompt$fInteractivePurePrompt$fInteractiveIO$fEqDefaultPrompt$fFunctorDefaultPrompt $fEqSeverity$fShowSeverity$fFunctorPurePrompt$fEqBreakException$fShowBreakException$fEqProjectSettings$fShowProjectSettings$fShowExeTarget $fEqExeTarget$fShowTestTarget$fEqTestTarget$fEqHsFilePath$fEqHsFileType$fShowHsFileType $fEqInitFlags$fShowInitFlags$fGenericInitFlags $fEqWriteOpts$fShowWriteOpts$fEqPackageType$fShowPackageType$fGenericPackageType$fShowLibTarget $fEqLibTarget$fShowPkgDescription$fEqPkgDescription promptStr promptYesNoprompt promptListfieldfieldDcommentedOutWithComments withComments annNoCommentspostProcessFieldLinesmkCommonStanza mkLibStanza mkExeStanza mkTestStanzamkPkgDescription listFieldSdefaultVersiondefaultApplicationDirdefaultSourceDirdefaultTestDirdefaultCabalVersiondefaultPackageTypedefaultChangelogdefaultLicense defaultMainIsdefaultLanguagedefaultLicenseIdsdefaultCategoriesdefaultCabalVersionsdefaultInitFlags myLibModule myLibTestFile myLibFilemyLibHsmyExeHs myLibExeHsmyTestHsSourceFileEntryrelativeSourcePath moduleName fileExtensionimports extensionsisMain isHaskellretrieveBuildToolsretrieveSourceFilesretrieveModuleNameretrieveModuleImportsretrieveModuleExtensions isSourceFileretrieveDependenciesfilePathToPkgNamecurrentDirPkgNamemkPackageNameDep fixupDocFiles mkStringyDep getBaseDepaddLibDepToTestaddLibDepToExe$fShowSourceFileEntry getPackageDirgetSimpleProject getMinimalgetCabalVersiongetCabalVersionNoPromptgetPackageName getVersion getLicense getAuthorgetEmail getHomepage getSynopsis getCategorygetExtraSrcFilesgetExtraDocFilesgetPackageType getMainFilegetInitializeTestSuite getTestDirs getLanguage getNoComments getAppDirs getSrcDirsgetExposedModulesgetOtherModules getBuildToolsgetDependencies getOtherExts getOverwritesimpleProjectPromptinitializeTestSuitePromptpackageTypePrompttestMainPromptdependenciesPrompt createProjectgenSimplePkgDescgenSimpleLibTargetgenSimpleExeTargetgenSimpleTestTarget guessMainFileguessCabalSpecVersion guessLanguageguessPackageName guessLicenseguessExtraDocFilesguessPackageTypeguessApplicationDirectoriesguessSourceDirectoriesguessAuthorNameguessAuthorEmailgenPkgDescription genLibTarget genExeTarget genTestTargetminimalHeuristicsoverwriteHeuristicscabalVersionHeuristicspackageNameHeuristicsversionHeuristicslicenseHeuristicsauthorHeuristicsemailHeuristicshomepageHeuristicssynopsisHeuristicscategoryHeuristicsextraDocFileHeuristicspackageTypeHeuristicsmainFileHeuristicsinitializeTestSuiteHeuristicstestDirsHeuristicslanguageHeuristicsnoCommentsHeuristicsappDirsHeuristicssrcDirsHeuristicsexposedModulesHeuristicslibOtherModulesHeuristicsexeOtherModulesHeuristicstestOtherModulesHeuristicsbuildToolsHeuristicsdependenciesHeuristicsotherExtsHeuristicscabalVersionPromptpackageNamePrompt versionPrompt licensePrompt authorPrompt emailPrompthomepagePromptsynopsisPromptcategoryPromptmainFilePrompttestDirsPromptlanguagePromptnoCommentsPrompt appDirsPrompt srcDirsPrompt writeProjectprepareLibTargetprepareExeTargetprepareTestTarget writeLicensewriteChangeLog$fShowWriteAction$fEqWriteActionMonitorTimestampMonitorChangedReasonMonitoredFileChangedMonitoredValueChangedMonitorFirstRunMonitorCorruptCacheMonitorChangedMonitorUnchanged FileMonitorfileMonitorCacheFilefileMonitorKeyValid"fileMonitorCheckIfOnlyValueChangedMonitorStateGlobMonitorStateFileMonitorStateFileSetMonitorKindDir DirExists DirModTime DirNotExistsMonitorKindFile FileExists FileModTime FileHashed FileNotExistsMonitorFilePath MonitorFileMonitorFileGlobmonitorKindFilemonitorKindDir monitorPathmonitorPathGlob monitorFilemonitorFileHashedmonitorNonExistentFilemonitorFileExistencemonitorDirectorymonitorNonExistentDirectorymonitorDirectoryExistencemonitorFileOrDirectorymonitorFileGlobmonitorFileGlobExistencemonitorFileSearchPathmonitorFileHashedSearchPathnewFileMonitorcheckFileMonitorChangedupdateFileMonitorbeginUpdateFileMonitor$fStructuredMonitorKindFile$fBinaryMonitorKindFile$fStructuredMonitorKindDir$fBinaryMonitorKindDir$fStructuredMonitorFilePath$fBinaryMonitorFilePath"$fStructuredMonitorStateFileStatus$fBinaryMonitorStateFileStatus$fStructuredMonitorStateFile$fBinaryMonitorStateFile$fStructuredMonitorStateGlobRel$fBinaryMonitorStateGlobRel$fStructuredMonitorStateGlob$fBinaryMonitorStateGlob$fStructuredMonitorStateFileSet$fBinaryMonitorStateFileSet$fFunctorChangedM$fApplicativeChangedM$fMonadChangedM$fMonadIOChangedM$fShowMonitorChanged$fEqMonitorChangedReason$fShowMonitorChangedReason$fFunctorMonitorChangedReason$fShowMonitorStateFileSet$fGenericMonitorStateFileSet$fShowMonitorStateGlob$fGenericMonitorStateGlob$fShowMonitorStateGlobRel$fGenericMonitorStateGlobRel$fShowMonitorStateFile$fGenericMonitorStateFile$fShowMonitorStateFileStatus$fGenericMonitorStateFileStatus$fEqMonitorFilePath$fShowMonitorFilePath$fGenericMonitorFilePath$fEqMonitorKindDir$fShowMonitorKindDir$fGenericMonitorKindDir$fEqMonitorKindFile$fShowMonitorKindFile$fGenericMonitorKindFileRebuild monitorFiles runRebuild execRebuildaskRootrerunIfChangeddelayInitSharedResourcedelayInitSharedResourcesgetDirectoryContentsMonitoredcreateDirectoryMonitoredmonitorDirectoryStatusdoesFileExistMonitoredneed needIfExistsfindFileWithExtensionMonitoredfindFirstFileMonitoredfindFileMonitored$fFunctorRebuild$fApplicativeRebuild$fMonadRebuild$fMonadIORebuildBuildFailureReason ReplFailedHaddocksFailed BenchFailedbuildFailureLogFilebuildFailureReasonbuildResultDocsbuildResultTestsbuildResultLogFile BuildReasonBuildReasonDepsRebuiltBuildReasonFilesChangedBuildReasonExtraTargetsBuildReasonEphemeralTargetsBuildStatusRebuildBuildStatusConfigureBuildStatusBuild BuildStatusBuildStatusPreExistingBuildStatusInstalledBuildStatusDownloadBuildStatusUnpackBuildStatusUpToDateBuildStatusMapbuildStatusRequiresBuildbuildStatusToString$fShowBuildFailureReasonPackagePreferencePackageVersionPreferencePackageInstalledPreferencePackageStanzasPreferenceDepResolverParamsaddConstraintsaddPreferencessetPreferenceDefaultsetReorderGoalssetCountConflictssetFineGrainedConflictssetMinimizeConflictSetsetIndependentGoalssetAvoidReinstalls setShadowPkgssetStrongFlagssetAllowBootLibInstallssetOnlyConstrainedsetMaxBackjumpssetEnableBackjumpingsetSolveExecutables setGoalOrdersetSolverVerbosityremoveUpperBoundsremoveLowerBoundsaddDefaultSetupDependencies!addSetupCabalMinVersionConstraint!addSetupCabalMaxVersionConstraintupgradeDependenciesreinstallTargetsbasicInstallPolicystandardInstallPolicy chooseSolverresolveDependenciesresolveWithoutDependencies$fShowResolveNoDepsErrorToJSONtoJSONObjectPairValueArrayStringNumberBoolNull.=objectencodeToBuilderencodeToString$fIsStringValue$fToJSONInteger$fToJSONWord64 $fToJSONInt64$fToJSONWord32$fToJSONWord16 $fToJSONWord8 $fToJSONWord $fToJSONInt32 $fToJSONInt16 $fToJSONInt8 $fToJSONInt$fToJSONDouble $fToJSONFloat $fToJSON(,,,) $fToJSON(,,) $fToJSON(,) $fToJSONMaybe $fToJSON[] $fToJSONBool $fToJSONValue $fToJSON() $fEqValue $fReadValue $fShowValuerenderParseErrorcheckSourceRepoProblemSourceRepoRepoTypeUnspecifiedSourceRepoRepoTypeUnsupportedSourceRepoLocationUnspecifiedVCS vcsRepoType vcsProgramvalidateSourceRepovalidatePDSourceRepovalidateSourceRepos configureVCS configureVCSscloneSourceReposyncSourceRepos knownVCSsvcsBzrvcsDarcsvcsGitvcsHgvcsSvnvcsPijul$fShowSourceRepoProblemcabalInstallVersionHttpCode HttpTransportgetHttppostHttp postHttpFile putHttpFiletransportSupportsHttpstransportManuallySelectedDownloadResultFileAlreadyInCacheFileDownloaded downloadURIremoteRepoCheckHttpstransportCheckHttpsremoteRepoTryUpgradeToHttpsisOldHackageURIconfigureTransport$fEqDownloadCheck$fEqDownloadResulttransportAdapter$fExceptionUnexpectedResponse$fPrettyUnexpectedResponse$fShowUnexpectedResponse RepoContextrepoContextReposrepoContextGetTransportrepoContextWithSecureReporepoContextIgnoreExpiry GlobalFlags globalVersionglobalNumericVersionglobalConfigFileglobalConstraintsFileglobalRemoteReposglobalCacheDirglobalLocalNoIndexReposglobalActiveRepos globalLogsDirglobalIgnoreExpiryglobalHttpTransport globalNixglobalStoreDirglobalProgPathExtradefaultGlobalFlagswithRepoContextwithRepoContext'$fSemigroupGlobalFlags$fMonoidGlobalFlags$fShowGlobalFlags$fGenericGlobalFlags AsyncFetchMap isFetched checkFetchedcheckRepoTarballFetchedverifyFetchedTarball fetchPackagefetchRepoTarball downloadIndexasyncFetchPackageswaitAsyncFetchPackageUserConstraintUserConstraintScope UserQualifiedUserAnySetupQualifierUserAnyQualifier UserQualifierUserQualToplevel UserQualSetup UserQualExePackageTargetProblemPackageNameUnknownPackageNameAmbiguous PackageTargetPackageTargetNamedPackageTargetNamedFuzzyPackageTargetLocationUserTargetProblemUserTargetUnexpectedFileUserTargetNonexistantFileUserTargetUnexpectedUriSchemeUserTargetUnrecognisedUriUserTargetUnrecognised UserTargetUserTargetNamedUserTargetLocalDirUserTargetLocalCabalFileUserTargetLocalTarballUserTargetRemoteTarballreadUserTargetsreadUserTargetreportUserTargetProblemsresolveUserTargetsexpandUserTargetfetchPackageTargetreadPackageTargetdisambiguatePackageTargetsreportPackageTargetProblemsdisambiguatePackageNameuserConstraintPackageNameuserToPackageConstraintreadUserConstraint$fSemigroupPackageNameEnv$fMonoidPackageNameEnv$fStructuredUserQualifier$fBinaryUserQualifier$fStructuredUserConstraintScope$fBinaryUserConstraintScope$fParsecUserConstraint$fPrettyUserConstraint$fStructuredUserConstraint$fBinaryUserConstraint$fEqUserConstraint$fShowUserConstraint$fGenericUserConstraint$fEqUserConstraintScope$fShowUserConstraintScope$fGenericUserConstraintScope$fEqUserQualifier$fShowUserQualifier$fGenericUserQualifier$fShowPackageTargetProblem$fShowPackageTarget$fFunctorPackageTarget$fFoldablePackageTarget$fTraversablePackageTarget$fShowUserTargetProblem$fShowUserTarget$fEqUserTargetBuildTimeSettingsbuildSettingDryRunbuildSettingOnlyDepsbuildSettingOnlyDownloadbuildSettingSummaryFilebuildSettingLogFilebuildSettingLogVerbositybuildSettingBuildReports!buildSettingReportPlanningFailurebuildSettingSymlinkBinDirbuildSettingNumJobsbuildSettingKeepGoingbuildSettingOfflineModebuildSettingKeepTempFilesbuildSettingRemoteReposbuildSettingLocalNoIndexReposbuildSettingCacheDirbuildSettingHttpTransportbuildSettingIgnoreExpirybuildSettingProgPathExtrabuildSettingHaddockOpenSolverSettingssolverSettingRemoteRepossolverSettingLocalNoIndexRepossolverSettingConstraintssolverSettingPreferencessolverSettingFlagAssignmentsolverSettingFlagAssignmentssolverSettingCabalVersionsolverSettingSolversolverSettingAllowOldersolverSettingAllowNewersolverSettingMaxBackjumpssolverSettingReorderGoalssolverSettingCountConflicts!solverSettingFineGrainedConflicts solverSettingMinimizeConflictSetsolverSettingStrongFlags!solverSettingAllowBootLibInstallssolverSettingOnlyConstrainedsolverSettingIndexStatesolverSettingActiveRepossolverSettingIndependentGoalssolverSettingPreferOldest MapMappend getMapMappendMapLast getMapLast PackageConfigpackageConfigProgramPathspackageConfigProgramArgspackageConfigProgramPathExtrapackageConfigFlagAssignmentpackageConfigVanillaLibpackageConfigSharedLibpackageConfigStaticLibpackageConfigDynExepackageConfigFullyStaticExepackageConfigProfpackageConfigProfLibpackageConfigProfExepackageConfigProfDetailpackageConfigProfLibDetailpackageConfigConfigureArgspackageConfigOptimizationpackageConfigProgPrefixpackageConfigProgSuffixpackageConfigExtraLibDirspackageConfigExtraLibDirsStaticpackageConfigExtraFrameworkDirspackageConfigExtraIncludeDirspackageConfigGHCiLibpackageConfigSplitSectionspackageConfigSplitObjspackageConfigStripExespackageConfigStripLibspackageConfigTestspackageConfigBenchmarkspackageConfigCoveragepackageConfigRelocatablepackageConfigDebugInfopackageConfigDumpBuildInfopackageConfigRunTestspackageConfigDocumentationpackageConfigHaddockHooglepackageConfigHaddockHtml packageConfigHaddockHtmlLocationpackageConfigHaddockForeignLibspackageConfigHaddockExecutablespackageConfigHaddockTestSuitespackageConfigHaddockBenchmarkspackageConfigHaddockInternalpackageConfigHaddockCss packageConfigHaddockLinkedSourcepackageConfigHaddockQuickJumppackageConfigHaddockHscolourCsspackageConfigHaddockContentspackageConfigHaddockIndexpackageConfigHaddockBaseUrlpackageConfigHaddockLibpackageConfigHaddockForHackagepackageConfigTestHumanLogpackageConfigTestMachineLogpackageConfigTestShowDetailspackageConfigTestKeepTixpackageConfigTestWrapper%packageConfigTestFailWhenNoTestSuitespackageConfigTestTestOptionspackageConfigBenchmarkOptionsProjectConfigProvenanceImplicitExplicitProjectConfigSharedprojectConfigDistDirprojectConfigConfigFileprojectConfigProjectFileprojectConfigIgnoreProjectprojectConfigHcFlavorprojectConfigHcPathprojectConfigHcPkgprojectConfigHaddockIndexprojectConfigInstallDirsprojectConfigPackageDBsprojectConfigRemoteReposprojectConfigLocalNoIndexReposprojectConfigActiveReposprojectConfigIndexStateprojectConfigStoreDirprojectConfigConstraintsprojectConfigPreferencesprojectConfigCabalVersionprojectConfigSolverprojectConfigAllowOlderprojectConfigAllowNewer+projectConfigWriteGhcEnvironmentFilesPolicyprojectConfigMaxBackjumpsprojectConfigReorderGoalsprojectConfigCountConflicts!projectConfigFineGrainedConflicts projectConfigMinimizeConflictSetprojectConfigStrongFlags!projectConfigAllowBootLibInstallsprojectConfigOnlyConstrainedprojectConfigPerComponentprojectConfigIndependentGoalsprojectConfigPreferOldestprojectConfigProgPathExtraProjectConfigBuildOnlyprojectConfigVerbosityprojectConfigDryRunprojectConfigOnlyDepsprojectConfigOnlyDownloadprojectConfigSummaryFileprojectConfigLogFileprojectConfigBuildReports"projectConfigReportPlanningFailureprojectConfigSymlinkBinDirprojectConfigNumJobsprojectConfigKeepGoingprojectConfigOfflineModeprojectConfigKeepTempFilesprojectConfigHttpTransportprojectConfigIgnoreExpiryprojectConfigCacheDirprojectConfigLogsDirprojectConfigClientInstallFlags ProjectConfigprojectPackagesprojectPackagesOptionalprojectPackagesRepoprojectPackagesNamedprojectConfigBuildOnlyprojectConfigSharedprojectConfigProvenanceprojectConfigAllPackagesprojectConfigLocalPackagesprojectConfigSpecificPackage!$fSemigroupProjectConfigBuildOnly$fMonoidProjectConfigBuildOnly"$fStructuredProjectConfigBuildOnly$fBinaryProjectConfigBuildOnly$fSemigroupProjectConfigShared$fMonoidProjectConfigShared$fStructuredProjectConfigShared$fBinaryProjectConfigShared#$fStructuredProjectConfigProvenance$fBinaryProjectConfigProvenance$fSemigroupMapLast$fMonoidMapLast$fStructuredMapLast$fSemigroupMapMappend$fMonoidMapMappend$fStructuredMapMappend$fSemigroupPackageConfig$fMonoidPackageConfig$fStructuredPackageConfig$fBinaryPackageConfig$fSemigroupProjectConfig$fMonoidProjectConfig$fStructuredProjectConfig$fBinaryProjectConfig$fStructuredSolverSettings$fBinarySolverSettings$fEqSolverSettings$fShowSolverSettings$fGenericSolverSettings$fEqProjectConfig$fShowProjectConfig$fGenericProjectConfig$fEqPackageConfig$fShowPackageConfig$fGenericPackageConfig$fEqMapMappend$fShowMapMappend$fFunctorMapMappend$fGenericMapMappend$fBinaryMapMappend $fEqMapLast $fShowMapLast$fFunctorMapLast$fGenericMapLast$fBinaryMapLast$fEqProjectConfigProvenance$fOrdProjectConfigProvenance$fShowProjectConfigProvenance $fGenericProjectConfigProvenance$fEqProjectConfigShared$fShowProjectConfigShared$fGenericProjectConfigShared$fEqProjectConfigBuildOnly$fShowProjectConfigBuildOnly$fGenericProjectConfigBuildOnlynewBuildReportcabalInstallIDparseBuildReportparseBuildReportListshowBuildReportstoreAnonymous storeLocalfromInstallPlanfromPlanningFailurepossibleSelfUpgradedeleteOldExeFileReadPParsergetlookpfaileof+++<++gathersatisfycharstringmunchmunch1choice skipSpaces skipSpaces1countbetweenoptionoptionalmanymany1skipMany skipMany1sepBysepBy1endByendBy1chainrchainlchainr1chainl1manyTill readP_to_S readS_to_P readP_to_E $fMonadPlusP$fAlternativeP $fMonadFailP$fMonadP$fApplicativeP $fFunctorP$fMonadPlusParser$fMonadFailParser $fMonadParser$fAlternativeParser$fApplicativeParser$fFunctorParser FieldDescr fieldNamefieldGetfieldSet liftField QualLevelQL1QL2QL3QLFullTargetSelectorProblemTargetSelectorExpectedTargetSelectorNoSuchTargetSelectorAmbiguousMatchingInternalErrorTargetSelectorUnrecognisedTargetSelectorNoCurrentPackageTargetSelectorNoTargetsInCwd TargetSelectorNoTargetsInProjectTargetSelectorNoScript TargetString TargetString1 TargetString2 TargetString3 TargetString4 TargetString5 TargetString7 DirActionscanonicalizePathSubComponentTargetWholeComponent ModuleTarget FileTargetComponentKindFilter ComponentKindLibKindFLibKindExeKindTestKind BenchKindTargetImplicitCwdTargetExplicitNamedTargetSelector TargetPackageTargetPackageNamedTargetAllPackagesTargetComponentTargetComponentUnknownreadTargetSelectorsreadTargetSelectorsWithdefaultDirActionsparseTargetStringshowTargetStringshowTargetSelectorreportTargetSelectorProblems componentKind$fStructuredSubComponentTarget$fBinarySubComponentTarget$fMonadPlusMatch $fMonadMatch$fAlternativeMatch$fApplicativeMatch$fFunctorMatch$fShowMaybeAmbiguous $fShowMatch$fShowMatchError$fEqMatchError$fShowMatchClass$fEqMatchClass$fOrdMatchClass$fShowKnownTargets$fShowKnownPackage$fShowKnownComponent $fEqQualLevel$fEnumQualLevel$fShowQualLevel$fShowTargetSelectorProblem$fEqTargetSelectorProblem$fEqTargetStringFileStatus$fOrdTargetStringFileStatus$fShowTargetStringFileStatus$fEqFileStatus$fOrdFileStatus$fShowFileStatus$fShowTargetString$fEqTargetString$fEqTargetSelector$fOrdTargetSelector$fShowTargetSelector$fGenericTargetSelector$fEqSubComponentTarget$fOrdSubComponentTarget$fShowSubComponentTarget$fGenericSubComponentTarget$fEqComponentKind$fOrdComponentKind$fEnumComponentKind$fShowComponentKind$fEqTargetImplicitCwd$fOrdTargetImplicitCwd$fShowTargetImplicitCwd$fGenericTargetImplicitCwdWithoutProjectTargetSelector WoPackageIdWoPackageComponentWoURI!parseWithoutProjectTargetSelectorwoPackageNameswoPackageTargetswoPackageSpecifiers"$fShowWithoutProjectTargetSelectorUserConfigFlagsuserConfigVerbosityuserConfigForceuserConfigAppendLinesActAsSetupFlagsactAsSetupBuildType UploadFlagsuploadCandidate uploadDocuploadUsernameuploadPassworduploadPasswordCmduploadVerbosity IsCandidate IsPublished InstallFlagsinstallDocumentationinstallHaddockIndex installDest installDryRuninstallOnlyDownloadinstallMaxBackjumpsinstallReorderGoalsinstallCountConflictsinstallFineGrainedConflictsinstallMinimizeConflictSetinstallIndependentGoalsinstallPreferOldestinstallShadowPkgsinstallStrongFlagsinstallAllowBootLibInstallsinstallOnlyConstrainedinstallReinstallinstallAvoidReinstallsinstallOverrideReinstallinstallUpgradeDeps installOnlyinstallOnlyDepsinstallIndexStateinstallRootCmdinstallSummaryFileinstallLogFileinstallBuildReportsinstallReportPlanningFailureinstallSymlinkBinDirinstallPerComponentinstallNumJobsinstallKeepGoinginstallRunTestsinstallOfflineMode InfoFlags infoVerbosityinfoPackageDBs ListFlags listInstalledlistSimpleOutputlistCaseInsensitive listVerbositylistPackageDBs listHcPathGetFlags getDestDirgetOnlyPkgDescr getPristine getIndexStategetActiveReposgetSourceRepository getVerbosity ReportFlagsreportUsernamereportPasswordreportVerbosity UpdateFlagsupdateVerbosityupdateIndexState FreezeFlags freezeDryRun freezeTestsfreezeBenchmarks freezeSolverfreezeMaxBackjumpsfreezeReorderGoalsfreezeCountConflictsfreezeFineGrainedConflictsfreezeMinimizeConflictSetfreezeIndependentGoalsfreezePreferOldestfreezeShadowPkgsfreezeStrongFlagsfreezeAllowBootLibInstallsfreezeOnlyConstrainedfreezeVerbosity FetchFlags fetchDeps fetchDryRun fetchSolverfetchMaxBackjumpsfetchReorderGoalsfetchCountConflictsfetchFineGrainedConflictsfetchMinimizeConflictSetfetchIndependentGoalsfetchPreferOldestfetchShadowPkgsfetchStrongFlagsfetchAllowBootLibInstallsfetchOnlyConstrained fetchTestsfetchBenchmarksfetchVerbosity ConfigExFlagsconfigCabalVersion configAppend configBackupconfigExConstraintsconfigPreferences configSolverconfigAllowNewerconfigAllowOlder$configWriteGhcEnvironmentFilesPolicy globalCommandconfigureCommandconfigureOptionsfilterConfigureFlagsconfigPackageDB'configCompilerAux'defaultConfigExFlagsconfigureExCommandconfigureExOptionsreconfigureCommand buildCommandfilterTestFlags replCommand testCommandbenchmarkCommand fetchCommand freezeCommandgenBoundsCommanddefaultUpdateFlags cleanCommand checkCommand formatCommandmanpageCommand runCommand reportCommand getCommand unpackCommand listCommandlistNeedsCompiler infoCommanddefaultInstallFlagsdefaultMaxBackjumps defaultSolverinstallCommandhaddockCommandfilterHaddockArgsfilterHaddockFlagshaddockOptions testOptionsbenchmarkOptionsinstallOptions uploadCommand initCommand initOptions copyCommandregisterCommandactAsSetupCommanduserConfigCommand liftOptionsyesNoOpt$fSemigroupConfigExFlags$fMonoidConfigExFlags$fSemigroupReportFlags$fMonoidReportFlags$fSemigroupGetFlags$fMonoidGetFlags$fSemigroupListFlags$fMonoidListFlags$fSemigroupInfoFlags$fMonoidInfoFlags$fSemigroupInstallFlags$fMonoidInstallFlags$fBinaryInstallFlags$fSemigroupUploadFlags$fMonoidUploadFlags$fSemigroupActAsSetupFlags$fMonoidActAsSetupFlags$fSemigroupUserConfigFlags$fMonoidUserConfigFlags$fGenericUserConfigFlags$fGenericActAsSetupFlags$fGenericUploadFlags$fEqIsCandidate$fEqInstallFlags$fShowInstallFlags$fGenericInstallFlags$fGenericInfoFlags$fGenericListFlags$fGenericGetFlags$fGenericReportFlags$fGenericUpdateFlags$fEqConfigExFlags$fShowConfigExFlags$fGenericConfigExFlags NixStyleFlags configFlags configExFlags installFlags haddockFlags testFlagsbenchmarkFlags projectFlags extraFlagsnixStyleOptionsdefaultNixStyleFlags manpageCmdmanpagesymlinkBinaries symlinkBinary promptRun trySymlink$fShowSymlinkStatusIndex RepoIndex SandboxIndexPreferredVersionsParseErrorpreferredVersionsParsecError#preferredVersionsOriginalDependencyBuildTreeRefType SnapshotRefLinkRef PackageEntry NormalPackage BuildTreeRefgetInstalledPackages indexBaseNamegetSourcePackagesgetSourcePackagesAtIndexStategetIndexFileAgegetSourcePackagesMonitorFilesupdateRepoIndexCacherefTypeFromTypeCodetypeCodeFromRefTypeparsePackageIndexpreferredVersionsisPreferredVersionsparsePreferredVersionsWarningsupdatePackageIndexCacheFilewriteIndexTimestampcurrentIndexTimestamp$fStructuredBuildTreeRefType$fBinaryBuildTreeRefType$fPackagePackageEntry$fStructuredIndexCacheEntry$fBinaryIndexCacheEntry$fNFDataIndexCacheEntry$fStructuredCache $fBinaryCache $fNFDataCache$fStructuredNoIndexCacheEntry$fBinaryNoIndexCacheEntry$fNFDataNoIndexCacheEntry$fStructuredNoIndexCache$fBinaryNoIndexCache$fNFDataNoIndexCache$fShowNoIndexCache$fGenericNoIndexCache$fEqNoIndexCacheEntry$fShowNoIndexCacheEntry$fGenericNoIndexCacheEntry $fShowCache$fGenericCache$fEqIndexCacheEntry$fShowIndexCacheEntry$fGenericIndexCacheEntry$$fGenericPreferredVersionsParseError!$fReadPreferredVersionsParseError!$fShowPreferredVersionsParseError$fEqPreferredVersionsParseError $fOrdPreferredVersionsParseError$fEqBuildTreeRefType$fShowBuildTreeRefType$fGenericBuildTreeRefTypelistinfoinitCmdClonePackageExceptionClonePackageNoSourceReposClonePackageNoSourceReposOfKindClonePackageNoRepoTypeClonePackageUnsupportedRepoTypeClonePackageNoRepoLocationClonePackageDestinationExistsClonePackageFailedWithExitCodeclonePackagesFromSourceRepo $fExceptionClonePackageException$fShowClonePackageException$fEqClonePackageExceptionfetchBuildLog BuildReportId uploadReportsviewAsFieldDescrFGSectionDescr fgSectionNamefgSectionGrammar fgSectionGet fgSectionSet SectionDescr sectionName sectionFieldssectionSubsections sectionGet sectionSet sectionEmpty liftFields filterFields mapFieldNamescommandOptionToFieldcommandOptionsToFields liftSection parseFieldsppFields ppSectionparseFieldsAndSectionsppFieldsAndSections parseConfig showConfig SavedConfigsavedGlobalFlagssavedInitFlagssavedInstallFlagssavedClientInstallFlagssavedConfigureFlagssavedConfigureExFlagssavedUserInstallDirssavedGlobalInstallDirssavedUploadFlagssavedReportFlagssavedHaddockFlagssavedTestFlagssavedBenchmarkFlagssavedProjectFlagsbaseSavedConfiginitialSavedConfigdefaultConfigFiledefaultCacheDirdefaultScriptBuildsDirdefaultStoreDirdefaultLogsDirdefaultReportsDirdefaultInstallPathdefaultCompilerdefaultUserInstall loadConfiggetConfigFilePathcreateDefaultConfigFilecommentSavedConfigconfigFieldDescriptionspostProcessReposhowConfigWithCommentsinstallDirsFieldsremoteRepoFieldshaddockFlagsFieldswithProgramsFieldswithProgramOptionsFieldsuserConfigDiffuserConfigUpdate$fSemigroupSavedConfig$fMonoidSavedConfig$fGenericSavedConfiguploadreportSetupScriptOptionsuseCabalVersionuseCabalSpecVersion useCompiler usePlatform usePackageDBusePackageIndex useProgramDb useDistPrefuseLoggingHandle useWorkingDiruseExtraPathEnvuseExtraEnvOverridesforceExternalSetupMethoduseDependenciesuseDependenciesExclusiveuseVersionMacrosuseWin32CleanHacksetupCacheLock isInteractivedefaultSetupScriptOptionsgetSetuprunSetuprunSetupCommand setupWrapperchooseCabalVersion configureconfigureSetupScriptcheckConfigExFlagsreadConfigFlagsFromcabalConfigFlagsFilereadConfigFlagswriteConfigFlagsTowriteConfigFlagsPackageEnvironmentTypeUserPackageEnvironmentAmbientPackageEnvironmentPackageEnvironmentpkgEnvSavedConfiguserPackageEnvironmentFileclassifyPackageEnvironmentloadUserConfigreadPackageEnvironmentFileshowPackageEnvironment"showPackageEnvironmentWithComments$fSemigroupPackageEnvironment$fMonoidPackageEnvironment$fGenericPackageEnvironmentupdateInstallDirsloadConfigOrSandboxConfigfindSavedDistPrefgetPersistOrConfigCompiler legacyCmdlegacyWrapperCmdnewCmd$fHasVerbosityCleanFlags$fHasVerbosityUpdateFlags$fHasVerbosityHaddockFlags$fHasVerbosityFreezeFlags$fHasVerbosityReplFlags$fHasVerbosityConfigFlags$fHasVerbosityBuildFlags$fHasVerbosity(,,,,,)$fHasVerbosity(,,,,)$fHasVerbosity(,,,)$fHasVerbosity(,,)$fHasVerbosity(,)$fHasVerbosityFlagLegacyProjectConfigProjectConfigSkeletonsingletonProjectConfigSkeleton0instantiateProjectConfigSkeletonFetchingCompiler,instantiateProjectConfigSkeletonWithCompilerprojectSkeletonImportsparseProjectSkeletoncommandLineFlagsToProjectConfigconvertLegacyGlobalConfigconvertLegacyProjectConfigconvertToLegacyProjectConfigparseLegacyProjectConfigshowLegacyProjectConfigparsePackageLocationTokenQrenderPackageLocationToken$fSemigroupLegacyPackageConfig$fMonoidLegacyPackageConfig$fSemigroupLegacySharedConfig$fMonoidLegacySharedConfig$fSemigroupLegacyProjectConfig$fMonoidLegacyProjectConfig$fShowLegacyProjectConfig$fGenericLegacyProjectConfig$fShowLegacySharedConfig$fGenericLegacySharedConfig$fShowLegacyPackageConfig$fGenericLegacyPackageConfig findNixExprnixInstantiatenixShell inNixShellCheckrunCheck reconfigure $fMonoidCheck$fSemigroupCheck InstallArgsInstallContextinstallmakeInstallContextmakeInstallPlanprocessInstallPlanpruneInstallPlanfreeze getFreezePkgs genBounds ProjectRootProjectRootImplicitProjectRootExplicitCabalDirLayoutcabalStoreDirLayoutcabalLogsDirectoryStoreDirLayoutstoreDirectorystorePackageDirectorystorePackageDBPathstorePackageDBstorePackageDBStackstoreIncomingDirectorystoreIncomingLock DistDirLayoutdistProjectRootDirectorydistProjectFile distDirectorydistBuildDirectorydistBuildRootDirectorydistDownloadSrcDirectorydistUnpackedSrcDirectorydistUnpackedSrcRootDirectorydistProjectCacheFiledistProjectCacheDirectorydistPackageCacheFiledistPackageCacheDirectory distSdistFiledistSdistDirectorydistTempDirectorydistBinDirectory distPackageDB DistDirParamsdistParamUnitIddistParamPackageIddistParamComponentIddistParamComponentNamedistParamCompilerIddistParamPlatformdistParamOptimizationdefaultDistDirLayoutdefaultStoreDirLayoutdefaultCabalDirLayoutmkCabalDirLayout$fEqProjectRoot$fShowProjectRootNewStoreEntryOutcomeUseNewStoreEntryUseExistingStoreEntrydoesStoreEntryExistgetStoreEntries newStoreEntry$fEqNewStoreEntryOutcome$fShowNewStoreEntryOutcomeSetupScriptStyleSetupCustomExplicitDepsSetupCustomImplicitDepsSetupNonCustomExternalLibSetupNonCustomInternalLibComponentTargetElaboratedReadyPackage CabalFileText BuildStyleBuildAndInstallBuildInplaceOnlyElaboratedPackagepkgInstalledIdpkgLibDependenciespkgDependsOnSelfLibpkgExeDependenciespkgExeDependencyPathspkgPkgConfigDependenciespkgStanzasEnabledElaboratedComponentcompSolverNamecompComponentNamecompLibDependenciescompLinkedLibDependenciescompExeDependenciescompPkgConfigDependenciescompExeDependencyPathscompOrderLibDependenciesElaboratedPackageOrComponent ElabPackage ElabComponentElaboratedConfiguredPackage elabUnitIdelabComponentIdelabInstantiatedWithelabLinkedInstantiatedWithelabIsCanonicalelabPkgSourceIdelabModuleShapeelabFlagAssignmentelabFlagDefaultselabPkgDescriptionelabPkgSourceLocationelabPkgSourceHashelabLocalToProjectelabBuildStyleelabEnabledSpecelabStanzasAvailableelabStanzasRequestedelabPackageDbselabSetupPackageDBStackelabBuildPackageDBStackelabRegisterPackageDBStackelabInplaceSetupPackageDBStackelabInplaceBuildPackageDBStack!elabInplaceRegisterPackageDBStackelabPkgDescriptionOverrideelabVanillaLib elabSharedLib elabStaticLib elabDynExeelabFullyStaticExe elabGHCiLib elabProfLib elabProfExeelabProfLibDetailelabProfExeDetail elabCoverageelabOptimization elabSplitObjselabSplitSections elabStripLibs elabStripExes elabDebugInfoelabDumpBuildInfoelabProgramPathselabProgramArgselabProgramPathExtraelabConfigureScriptArgselabExtraLibDirselabExtraLibDirsStaticelabExtraFrameworkDirselabExtraIncludeDirselabProgPrefixelabProgSuffixelabInstallDirselabHaddockHoogleelabHaddockHtmlelabHaddockHtmlLocationelabHaddockForeignLibselabHaddockForHackageelabHaddockExecutableselabHaddockTestSuiteselabHaddockBenchmarkselabHaddockInternalelabHaddockCsselabHaddockLinkedSourceelabHaddockQuickJumpelabHaddockHscolourCsselabHaddockContentselabHaddockIndexelabHaddockBaseUrlelabHaddockLibelabTestMachineLogelabTestHumanLogelabTestShowDetailselabTestKeepTixelabTestWrapperelabTestFailWhenNoTestSuiteselabTestTestOptionselabBenchmarkOptionselabSetupScriptStyleelabSetupScriptCliVersionelabConfigureTargetselabBuildTargetselabTestTargetselabBenchTargetselabReplTargetelabHaddockTargetselabBuildHaddocks elabPkgOrCompElaboratedSharedConfigpkgConfigPlatformpkgConfigCompilerpkgConfigCompilerProgspkgConfigReplOptionsElaboratedPlanPackageElaboratedInstallPlanelabPlanPackageNamenormaliseConfiguredPackageelabRequiresRegistrationdataDirsEnvironmentForPlanelabComponentNameelabConfiguredNameelabDistDirParamselabOrderLibDependencieselabLibDependencieselabOrderExeDependencieselabExeDependencieselabExeDependencyPathselabSetupDependencieselabPkgConfigDependencies$elabInplaceDependencyBuildCacheFilespkgOrderDependenciesshowComponentTargetshowTestComponentTargetisTestComponentTargetshowBenchComponentTargetisBenchComponentTargetisForeignLibComponentTargetisExeComponentTargetisSubLibComponentTargetcomponentOptionalStanza"$fStructuredElaboratedSharedConfig$fBinaryElaboratedSharedConfig$fStructuredElaboratedComponent$fBinaryElaboratedComponent$fStructuredElaboratedPackage$fBinaryElaboratedPackage($fStructuredElaboratedPackageOrComponent$$fBinaryElaboratedPackageOrComponent$fMonoidBuildStyle$fSemigroupBuildStyle$fStructuredBuildStyle$fBinaryBuildStyle$fStructuredComponentTarget$fBinaryComponentTarget$fStructuredSetupScriptStyle$fBinarySetupScriptStyle'$fStructuredElaboratedConfiguredPackage#$fBinaryElaboratedConfiguredPackage#$fIsNodeElaboratedConfiguredPackage&$fHasUnitIdElaboratedConfiguredPackage,$fHasConfiguredIdElaboratedConfiguredPackage$$fPackageElaboratedConfiguredPackage$fEqElaboratedConfiguredPackage!$fShowElaboratedConfiguredPackage$$fGenericElaboratedConfiguredPackage$fEqSetupScriptStyle$fShowSetupScriptStyle$fGenericSetupScriptStyle$fEqComponentTarget$fOrdComponentTarget$fShowComponentTarget$fGenericComponentTarget$fEqBuildStyle$fShowBuildStyle$fGenericBuildStyle $fEqElaboratedPackageOrComponent"$fShowElaboratedPackageOrComponent%$fGenericElaboratedPackageOrComponent$fEqElaboratedPackage$fShowElaboratedPackage$fGenericElaboratedPackage$fEqElaboratedComponent$fShowElaboratedComponent$fGenericElaboratedComponent$fShowElaboratedSharedConfig$fGenericElaboratedSharedConfigneedElaboratedConfiguredPackagePostBuildProjectStatuspackagesDefinitelyUpToDatepackagesProbablyUpToDatepackagesOutOfDatepackagesInvalidByChangedLibDepspackagesInvalidByFailedBuildpackagesLibDepGraphpackagesBuildLocalpackagesBuildInplacepackagesAlreadyInStorewritePlanExternalRepresentationupdatePostBuildProjectStatuscreatePackageEnvironmentwritePlanGhcEnvironment"argsEquivalentOfGhcEnvironmentFileBadPerPackageCompilerPathsBadPackageLocationMatchBadLocUnexpectedFileBadLocNonexistantFileBadLocDirNoCabalFileBadLocDirManyCabalFilesBadPackageLocationBadPackageLocationFileBadLocGlobEmptyMatchBadLocGlobBadMatchesBadLocUnexpectedUriSchemeBadLocUnrecognisedUriBadLocUnrecognisedBadPackageLocationsProjectPackageLocationProjectPackageLocalCabalFileProjectPackageLocalDirectoryProjectPackageLocalTarballProjectPackageRemoteTarballProjectPackageRemoteRepoProjectPackageNamedBadProjectRootBadProjectRootExplicitFilelookupLocalPackageConfig#projectConfigWithBuilderRepoContext"projectConfigWithSolverRepoContextresolveSolverSettingsresolveBuildTimeSettingsfindProjectRootwithGlobalConfigwithProjectOrGlobalConfigreadProjectLocalExtraConfigreadProjectLocalFreezeConfigshowProjectConfigwriteProjectLocalExtraConfigwriteProjectLocalFreezeConfigwriteProjectConfigFilereadGlobalConfigreportParseResultfindProjectPackagesfetchAndReadSourcePackagescheckBadPerPackageCompilerPaths$fExceptionBadProjectRoot$fExceptionBadPackageLocations$fExceptionCabalFileParseError$fShowCabalFileParseError!$fExceptionCabalFileSearchFailure%$fExceptionBadPerPackageCompilerPaths $fShowBadPerPackageCompilerPaths$fShowCabalFileSearchFailure$fShowBadPackageLocations$fShowBadPackageLocation$fShowBadPackageLocationMatch$fShowProjectPackageLocation$fShowBadProjectRootCannotPruneDependencies TargetActionTargetActionConfigureTargetActionBuildTargetActionReplTargetActionTestTargetActionBenchTargetActionHaddockTargetRequestedTargetRequestedByDefaultTargetNotRequestedByDefaultAvailableTargetStatusTargetDisabledByUserTargetDisabledBySolverTargetNotBuildableTargetNotLocalTargetBuildableAvailableTargetavailableTargetPackageIdavailableTargetComponentNameavailableTargetStatusavailableTargetLocalToProjectrebuildProjectConfigconfigureCompilerrebuildInstallPlanbinDirectoriesavailableTargetsnubComponentTargetspkgHasEphemeralBuildTargetselabBuildTargetWholeComponentspruneInstallPlanToTargetspruneInstallPlanToDependenciessetupHsScriptOptionsstorePackageInstallDirsstorePackageInstallDirs'setupHsConfigureFlagssetupHsConfigureArgssetupHsBuildFlagssetupHsBuildArgssetupHsTestFlagssetupHsTestArgssetupHsBenchFlagssetupHsBenchArgssetupHsReplFlagssetupHsReplArgssetupHsCopyFlagssetupHsRegisterFlagssetupHsHaddockFlagssetupHsHaddockArgspackageHashInputsbinDirectoryFor'$fIsNodeNonSetupLibDepSolverPlanPackage($fPackageNonSetupLibDepSolverPlanPackage$fIsNodePrunedPackage$fHasUnitIdPrunedPackage$fPackagePrunedPackage$fShowCannotPruneDependencies$fEqAvailableTarget$fShowAvailableTarget$fFunctorAvailableTarget$fEqAvailableTargetStatus$fOrdAvailableTargetStatus$fShowAvailableTargetStatus$fFunctorAvailableTargetStatus$fEqTargetRequested$fOrdTargetRequested$fShowTargetRequestedTargetProblem' TargetProblemTargetNotInProjectTargetAvailableInIndexTargetComponentNotProjectLocalTargetComponentNotBuildable"TargetOptionalStanzaDisabledByUser$TargetOptionalStanzaDisabledBySolverTargetProblemUnknownComponentTargetProblemNoneEnabledTargetProblemNoTargetsTargetProblemNoSuchPackageTargetProblemNoSuchComponentCustomTargetProblem$fEqTargetProblem$fShowTargetProblem$fFunctorTargetProblemPluralSingularplural listPluralrenderListCommaAndrenderListTabularrenderListPrettyrenderListSemiAnd sortGroupOnrenderTargetSelectorrenderSubComponentTargetrenderOptionalStanzaoptionalStanzatargetSelectorPluralPkgstargetSelectorRefersToPkgstargetSelectorFilterrenderComponentNamerenderComponentKindreportTargetProblemsrenderTargetProblemrenderTargetProblemNoneEnabledrenderTargetProblemNoTargetsrenderCannotPruneDependenciesrebuildTargetsDryRun&improveInstallPlanWithUpToDatePackagesrebuildTargets TargetsMapProjectBuildContextelaboratedPlanOriginalelaboratedPlanToExecuteelaboratedSharedpkgsBuildStatus targetsMapProjectBaseContext distDirLayoutcabalDirLayout projectConfig localPackages buildSettingscurrentCommandinstalledPackagesCurrentCommandInstallCommandHaddockCommand BuildCommand ReplCommand OtherCommandestablishProjectBaseContext#establishProjectBaseContextWithRootwithInstallPlanrunProjectPreBuildPhaserunProjectBuildPhaserunProjectPostBuildPhaseallTargetSelectorsuniqueTargetSelectorsresolveTargetsfilterTargetsKindfilterTargetsKindWithselectBuildableTargetsselectBuildableTargetsWithselectBuildableTargets'selectBuildableTargetsWith'forgetTargetsDetailselectComponentTargetBasicdistinctTargetComponents printPlandieOnBuildFailures establishDummyProjectBaseContextestablishDummyDistDirLayout$fShowCurrentCommand$fEqCurrentCommand TargetContextProjectContext GlobalContext ScriptContextAcceptNoTargetsRejectNoTargets getScriptHashgetScriptCacheDirectoryensureScriptCacheDirectorywithContextAndSelectors!updateContextAndWriteProjectFile' updateContextAndWriteProjectFilefakeProjectSourcePackage movedExePathlSrcpkgDescription$fEqTargetContext$fShowTargetContext$fEqAcceptNoTargets$fShowAcceptNoTargets updateCommand updateAction$fParsecUpdateRequest$fPrettyUpdateRequest$fShowUpdateRequest testActionselectPackageTargetsselectComponentTargetnoTestsProblemnotTestProblemisSubComponentProblem$fEqTestProblem$fShowTestProblem runAction validScript handleShebang noExesProblemmatchesMultipleProblem$fEqRunProblem$fShowRunProblemClientHaddockFlags openInBrowser haddockActionbuildOnlyConfiguredefaultBuildFlags buildAction benchCommand benchActionnoBenchmarksProblemcomponentNotBenchmarkProblem$fEqBenchProblem$fShowBenchProblem OutputFormat SourceList TarGzArchive sdistCommand sdistActionpackageToSdist$fShowOutputFormat$fEqOutputFormat replAction$fEqReplProblem$fShowReplProblem$fShowOriginalComponentInfolistbinCommand listbinActionnoComponentsProblemmultipleTargetsProblemcomponentNotRightKindProblem$fEqListBinProblem$fShowListBinProblemhaddockProjectAction freezeAction execCommand execActionconfigureActionconfigureAction'ListOutdatedSettingslistOutdatedIgnorePredlistOutdatedMinorPredoutdatedCommandoutdatedAction listOutdated"$fSemigroupIgnoreMajorVersionBumps$fMonoidIgnoreMajorVersionBumps installAction cleanAction$fEqCleanFlagsmainreadSymbolicLinkGHC.Base++ghc-primGHC.PrimseqGHC.Listfilterzip System.IOprint Data.Tuplefstsnd otherwisemap$GHC.Real fromIntegral realToFrac Control.MonadguardjoinGHC.EnumBoundedminBoundmaxBoundEnum enumFromThenenumFrom enumFromToenumFromThenTotoEnumsuccfromEnumpred GHC.ClassesEq==/= GHC.FloatFloatingtantanhsqrtsinhsinpilogBaselogexpcoshcosatanhatanasinhasinacosh**acos Fractionalrecip/ fromRationalIntegralrem toIntegerquotRemquotmoddivdivModMonad>>return>>= Data.DataDataFunctorfmap<$GHC.NumNum- fromIntegernegatesignumabs*+Ord<>=<=>compareminmaxGHC.ReadRead readsPrecreadListReal toRational RealFloat scaleFloat significandisNegativeZeroisNaN isInfiniteisIEEEisDenormalized floatRange floatRadix floatDigitsexponent encodeFloatatan2 decodeFloatRealFracroundtruncateproperFractionceilingfloorGHC.ShowShowshowListshow showsPrecData.Typeable.InternalTypeableControl.Monad.Fail MonadFailfail Data.StringIsString fromString Applicativepure<*><**> Data.FoldableFoldablesumproductminimummaximumlengthfoldrfoldl'foldlfoldMapnullelemData.Traversable Traversabletraverse sequenceA GHC.GenericsGeneric Semigroup<>Monoidmappendmconcatmempty GHC.TypesFalseTrueCharDoubleFloatIntGHC.IntInt8Int16Int32Int64 ghc-bignumGHC.Num.IntegerInteger GHC.MaybeMaybeNothingJustOrderingEQGTLTRationalIOWordGHC.WordWord8Word16Word32Word64 Data.EitherEitherLeftRightNonEmpty:| Data.VoidVoidvacuousabsurdData.List.NonEmptytailnonEmptylastinithead System.ExitexitWith exitSuccess exitFailureunlessfoldMfilterMforData.Functor.IdentityIdentity runIdentityreadLnreadIOputCharinteract getContentsgetChar appendFileGHC.IO.ExceptionExitCode ExitSuccess ExitFailureioErrorGHC.IOFilePaththrowIOevaluatecatch IOExceptionIOError userErrorGHC.Exception.Type Exception fromExceptiondisplayException toException Data.TypeableTypeReptypeRepData.Functor.ConstConstgetConst traverse_ sequence_ornotElemfor_find concatMapconcatanyandall Data.OldListwordsunwordsunlinesunfoldrsortBysort partitionnubBynublines isSuffixOf isPrefixOf intersperse dropWhileEndreadspartitionEitherseither Data.ProxyProxy readParenlex GHC.UnicodetoUppertoLowerisUpperisSpaceisDigit isAlphaNumisAlphaoddlcmgcdeven^^^GHC.CharchrShowSshows showString showParenshowCharzipWith3zipWithzip3unzip3unzip takeWhiletakesplitAtspanscanr1scanrscanl1scanlreverse replicaterepeatiterate dropWhiledropcycle!! Data.Maybe maybeToListmaybemapMaybe listToMaybe isNothingisJust fromMaybe catMaybes Data.Functionon Data.Functorvoid<$>uncurrycurrysubtract MonadPlusmzeromplus Alternativesome<|>emptywhenuntilordliftM2liftMidflipconstasTypeOfap=<<.$!GHC.Err undefinederrorWithoutStackTraceerror SomeException&&not||binary-0.8.9.0Data.Binary.ClassBinaryputputListcontainers-0.6.5.1Data.Map.InternalMapData.Set.InternalSetdeepseq-1.4.6.1Control.DeepSeqNFDatarnfforcedeepseqpretty-1.1.3.6Text.PrettyPrint.HughesPJ<+>Distribution.Compat.ExceptiontryIOcatchIO catchExitDistribution.Utils.Structured StructuredDistribution.Compat.SemigroupgmappendgmemptyDistribution.Compat.NonEmptySet NonEmptySetDistribution.Compat.Prelude<<>> genericRnffoldr1foldl1trace traceShowId traceShow intercalateData.Ord comparing Control.Arrowfirstfilepath-1.4.2.2System.FilePath.Posix takeDrive showTimestampextractMirrors%resolv-0.2.0.2-HhVyuJr72HJ6BM42lc2dBL Network.DNSqueryTXT isUrlBase splitRfc1464 normalise&Distribution.Solver.Types.PackageIndexfilterPreferredVersionsrootSets libraryRoots setupRootsdependencyInconsistencies'stateDependencyRelation!hashedInstalledPackageIdVeryShort mkInstallPlanDistribution.Compat.GraphGraph removeFile listContentsifMifNotM concatMapM partitionM mkDefPrompt promptDefaultbreakOrContinueDistribution.Fields.Pretty PrettyFieldDocfromFlagOrPromptaddBaseDepToFlags writeFileSafewriteCabalFile FileHashCacheMonitorStateFileModTimeMonitorStateFileHashedMonitorStateDirModTimereconstructMonitorFilePathsstructuredDecodeTriple withCacheFilerewriteCacheFileprobeFileSystemprobeMonitorStateFileStatusprobeMonitorStateGlobbuildMonitorStateFileSetchangedDuringUpdatebuildMonitorStateGloblookupFileHashCache getFileHashreadCacheFileHashesprobeFileModificationTimeDistribution.Compat.TimeModTime probeFileModificationTimeAndHashHashprobeFileExistenceprobeDirExistenceprobeFileNonExistencecheckModificationTimeUnchanged)checkFileModificationTimeAndHashUnchanged readFileHashcheckDirectoryModificationTimehandleErrorCall GHC.Exception ErrorCallhandleIOExceptionprobeMonitorStateGlobRelbuildMonitorStateFilebuildMonitorStateGlobRel unRebuildfindFileResolveNoDepsErrorResolveUnsatisfiabledepResolverAllowBootLibInstallsdepResolverOnlyConstraineddepResolverSolveExecutablesdepResolverGoalOrdershowPackagePreference!dontUpgradeNonUpgradeablePackagesnonUpgradeablePackagesaddSourcePackages removeBoundsrelaxPackageDeps removeBound*Distribution.Solver.Types.ConstraintSourceConstraintSetupCabalMaxVersioninterpretPackagesPreferencevalidateSolverResultconfiguredPackageProblemsbytestring-0.11.3.1 Data.ByteString.Builder.InternalBuilder doubleToInt64 escapeString vcsCloneRepo vcsSyncRepos Downloaded CheckETag NeedsDownloadget'getRange SecureRepoinitSecureReposinitSecureRepo packageFile packageURIConstraintScope%Distribution.Solver.Types.PackagePath Qualifier Unambiguous AmbiguousFSectionUnrecFieldParserparseSpaceList showFreeText showToken showFilePathField ParseResult ParseFailedParseOkPWarning UTFWarningPErrorAmbiguousParseNoParse TabsError FromStringLineNo showPWarning parseFailrunPrunElocatedErrorMsg syntaxErrorwarning fieldParsec simpleFieldsimpleFieldParseccommaListFieldParseccommaNewLineListFieldParsecspaceListFieldnewLineListFieldlistFieldWithSep listFieldlistFieldParseclineNo readFieldsparseHaskellString parseTokenQparseOptCommaList readPToMaybe MatchClassExactInexactUnknownMatch matchExactlymatchInexactly matchPlusmatchPlusShadowing findMatchSyntaxparseTargetStringsresolveTargetSelectors syntaxFormssyntaxForm1AllsyntaxForm1FiltersyntaxForm1PackagesyntaxForm1ComponentsyntaxForm1ModulesyntaxForm1FilesyntaxForm2MetaAllsyntaxForm2AllFiltersyntaxForm2PackageFiltersyntaxForm2NamespacePackagesyntaxForm2PackageComponentsyntaxForm2KindComponentsyntaxForm2PackageModulesyntaxForm2ComponentModulesyntaxForm2PackageFilesyntaxForm2ComponentFilesyntaxForm3MetaAllFiltersyntaxForm3MetaNamespacePackagesyntaxForm3PackageKindComponent!syntaxForm3PackageComponentModulesyntaxForm3KindComponentModulesyntaxForm3PackageComponentFilesyntaxForm3KindComponentFile,syntaxForm5MetaNamespacePackageKindComponent;syntaxForm7MetaNamespacePackageKindComponentNamespaceModule9syntaxForm7MetaNamespacePackageKindComponentNamespaceFilecompareFilePath exactMatchesinexactMatchesNonemkComponentName&Distribution.Types.UnqualComponentNameUnqualComponentNameDistribution.Types.PackageName PackageNameDistribution.Types.VersionVersion TestFlagsdescriptionOfGetCommandnotesOfGetCommandFileInfofiles NotExists OkToOverwrite NotOurFiletargetOkToOverwrite makeRelativeBlockNo NoIndexCacheCache cacheHeadTs cacheEntries PackageOrDepData.ByteString.Lazy.Internal ByteStringIndexStateInfo filterCache isiMaxTime isiHeadTime'Distribution.Solver.Types.SourcePackage SourcePackage readRepoIndex"tar-0.5.1.1-Cvo1F3CgsHr7V2aFsJw5rdCodec.Archive.Tar.ReadreadtarEntriesList lazySequenceparsePreferredVersions lazyUnfold is01IndexwithIndexEntriespackageListFromCachereadIndexCachereadIndexCache'writeIndexCachereadIndexTimestamp hashConsCache ExtDependencyPackageDisplayInfo getPkgListmergePackageInfoupdateFileSystemPackageDetails mergePackagesinterestingVersionsunpackOnlyPkgDescrselectPackageSourceRepoRepoKindDistribution.Simple.Command OptionFieldppSectionAndSubsections ppFgSectionConfigFileSourcewarnOnTwoConfigsmaybeGetCabalDir getDefaultDirdefaultInstallPrefixdefaultHackageRemoteRepoKeys$defaultHackageRemoteRepoKeyThreshold loadRawConfiginitFlagsFields SetupRunner SetupMethodSetupInternalMethodSelfExecMethodExternalMethodsetupScriptOptionsgetSetupMethod verbosityHackplanLocalPackageconfigurePackage SectionsAccumuserPackageEnvironmentpkgEnvFieldDescrsparsePackageEnvironmentconvertLegacyAllPackageFlagsconvertLegacyPerPackageFlagsconvertLegacyBuildOnlyFlags!packageSpecificOptionsFieldDescrs"packageSpecificOptionsSectionDescrprogramDbOptionsmonoidFieldParsecData.Semigroup.InternalAny UseLogFilecheckPrintPlanreportPlanningFailurepostInstallActionstheSpecifiedPackageinstallReadyPackageDistribution.Types.FlagFlagAssignmentinstallUnpackedPackage showBoundsboundsNeededMsgDistribution.Types.UnitIdUnitIdDistribution.Backpack OpenUnitIddataDirEnvVarForPackageelabOrderDependencies nodeNeighborscompOrderDependenciescompOrderExeDependencies intersection PackageIdSet differenceencodePlanAsJsonpostBuildProjectStatusreadPackagesUpToDateCacheFilewritePackagesUpToDateCacheFileCabalFileSearchFailureCabalFileParseErrorreadProjectLocalConfigOrDefaultreadProjectFileSkeleton renderImplicitBadPackageLocationglobStarDotCabalreadSourcePackageLocalDirectoryreadSourcePackageLocalTarball&fetchAndReadSourcePackageRemoteTarball$syncAndReadSourcePackagesRemoteReposmkSpecificSourcePackagereadSourcePackageCabalFileextractTarballPackageCabalFile FormatError"extractTarballPackageCabalFilePurelocalFileNameForRemoteTarballlocalFileNameForRemoteRepotruncateString PrunedPackageNonSetupLibDepSolverPlanPackage&sanityCheckElaboratedConfiguredPackageprogramDbSignatureDistribution.Simple.Program.Db ProgramDbprogramsMonitorFilespackageLocationsSignaturegetPackageSourceHashesapplyPackageDbFlagselaborateInstallPlan matchPlanPkgipiComponentName matchElabPkg mkCCMappingDistribution.Types.ComponentId ComponentIdmkShapeMappingsetRootTargetspruneInstallPlanPass1 optionalStanzasWithDepsAvailablepackageSetupScriptStyledefaultSetupDeps planPackagespackageSetupScriptSpecVersionuserInstallDirTemplates'improveInstallPlanWithInstalledPackages Distribution.Simple.PackageIndexInstalledPackageIndexinplaceBinRootBuildResultMisc'Distribution.Types.InstalledPackageInfoInstalledPackageInfoPackageFileMonitorcheckPackageFileMonitorChangedupdatePackageConfigFileMonitorupdatePackageBuildFileMonitorfoldMInstallPlanDepOrderpackageFileMonitorKeyValuescreatePackageDBIfMissing rebuildTargetasyncDownloadPackageswaitAsyncPackageDownloadwithTarballLocalDirectorymoveTarballShippedDistDirectoryreadExecutableBlockFromScriptreadProjectBlockFromScriptextractScriptBlockDistribution.Types.ExecutablesrcpkgDescription TestProblemTargetProblemNoTestsTargetProblemComponentNotTestTargetProblemIsSubComponentrenderAllowedNoTestsProblem RunProblemTargetProblemNoExesTargetProblemMatchesMultipleTargetProblemMultipleTargetsTargetProblemComponentNotExematchingPackagesByUnitId BenchProblemTargetProblemNoBenchmarks"TargetProblemComponentNotBenchmarkReplTargetProblemusingGhciScriptminGhciScriptVersionListBinProblemTargetProblemNoRightComps"TargetProblemComponentNotRightKindprojectFreezeConfigprojectFreezeConstraintswithTempEnvFile showResultuserConstraintsToDependenciesDistribution.Types.Dependency DependencydepsFromFreezeFiledepsFromNewFreezeFiledepsFromPkgDescaddLocalConfigToTargetsverifyPreconditionsOrDie)partitionToKnownTargetsAndHackagePackages installExesinstallLibrariesgetEnvSpecsAndNonGlobalEntriesdisableTestsBenchsByDefaultinstallUnitExesinstallBuiltExeentriesForLibraryComponents Distribution.Simple.GHC.InternalGhcEnvironmentFileEntry getEnvFilegetExistingEnvEntries getGlobalEnv getLocalEnvconstructProjectBuildContextwarnIfAssertionsAreEnabledbuildbenchmarkActionfilterBuildFlagscomponentNamesFromLBIactAsSetupAction