ݣ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO P Q R STUV W X Y Z [ \ ] ^ _ ` abcdefghijklmnopqrstuvwxyz{|}~                                     ! " # $ % & ' ( )*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~          !!!""""""""################$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % % %%%%&&&&&&&&&&''''' '!'"'#'$'%'&'''(')'*'+','-'.'/(0(1(2(3(4(5(6(7(8(9(:(;(<(=(>(?(@(A(B(C(D(E(F(G(H(I(J(K(L(M(N(O(P(Q(R(S(T(U(V(W(X(Y(Z([(\(](^(_(`(a(b(c(d(e(f(g(h(i(j(k(l(m(n(o(p(q(r(s)t)u)v)w)x)y)z){)|)})~))))))))))))))))))))********************************************************+++++++,,,,,,,,,,,,,,,------------------............/////////// / / / / 0000000000000001111 1!1"1#1$1%1&1'1(1)1*1+1,2-2.2/202122232425262728293:3;3<3=3>3?3@3A3B3C3D3E3F3G3H3I3J3K3L3M3N3O3P3Q3R3S3T3U3V3W3X3Y3Z3[3\3]3^3_3`3a3b3c3d3e3f3g3h3i3j3k3l3m3n3o3p3q3r3s3t3u3v3w3x3y3z3{3|3}3~3333333333333344444444444444455555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 5 5 5 5 5555555555555555555 5!5"5#5$5%5&5'5(5)5*5+5,5-5.5/505152535455565758595:5;5<5=5>5?5@5A5B5C5D5E5F5G5H5I5J5K5L5M5N5O5P5Q5R5S5T5U5V5W5X5Y5Z5[5\5]5^5_5`5a5b5c5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5s5t5u5v5w5x5y5z5{5|5}5~5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555666666 6 6 6 6 6666666666666666666 6!6"6#6$6%6&6'6(6)6*6+6,6-6.7/707172737475767778797:7;7<7=7>7?7@7A7B7C7D7E7F7G7H7I7J7K8L8M8N8O8P8Q8R8S8T8U8V8W8X9Y9Z9[9\9]9^9_9`9a9b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:{:|:}:~;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<=================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>??????????@@@@@@@@@@@@@@@AAAAAAAAAAA A A B B BBBBBBBBBBCCCCCCCCC C!C"C#C$C%D&D'D(D)D*D+D,D-D.D/D0D1E2E3E4E5E6E7E8E9E:E;E<E=E>F?F@FAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF[G\G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}G~GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG G G G G H H H H H H H H H H H H H H H H H H H H H H H H H H H H H !H "H #H $H %H &H 'H (H )H *H +H ,H -H .H /H 0H 1H 2H 3H 4H 5H 6H 7H 8H 9H :H ;H <H =H >H ?H @H AI BI CI DI EI FI GI HI II JI KI LI MI NI OI PI QI RI SI TI UI VI WI XI YI ZI [I \I ]I ^I _I `I aI bI cI dI eI fI gI hI iI jI kI lI mI nI oI pI qI rI sI tI uI vI wI xI yI zI {I |I }I ~I I I I I I I I J J J J J J J J J K L L L L L L L L L L L L L L L M M M 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 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 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 R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R !R "R #R $R %R &R 'R (R )R *R +R ,R -S .S /S 0S 1S 2S 3S 4S 5T 6T 7T 8T 9T :T ;T <U =U >V ?V @V AV BV CV DV EV FV GV HV IV JV KV LV MW NW OW PW QW RW SW TW UW VW WW XW YW ZW [W \X ]X ^X _X `X aX bX cX dX eX fX gX hX iY jY kY lY mY nY oY pY qY rY sY tY uY vY wY xY yY zZ {Z |Z }Z ~Z Z Z Z Z Z Z Z Z [ [ \ \ \ \ \ \ \ \ ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ` ` ` ` ` ` ` ` ` ` a a a a a a a a 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 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 0c 1c 2c 3c 4c 5c 6c 7c 8c 9c :c ;c <d =d >d ?d @d Ad Bd Cd Dd Ed Fd Gd He Ie Je Ke Le Me Ne Oe Pe Qe Re Se Te Ue Ve We Xe Ye Ze [e \e ]e ^e _e `e ae be ce de ee fe ge he ie je ke le me ne oe pe qe re se te ue ve we xe ye ze {e |e }e ~e e e e e e e f f g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g h h h h h h h h h h h h h h h h h h h i i i j j j j j j j j j j j j j j j j j j j j j j 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 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 'o (o )o *p +p ,p -p .p /p 0p 1p 2p 3p 4p 5p 6p 7p 8p 9p :p ;p <p =q >q ?q @q Aq Bq Cq Dq Eq Fq Gq Hq Iq Jq Kq Lq Mr Nr Or Pr Qr Rr Sr Tr Ur Vr Wr Xr Yr Zr [r \r ]r ^r _r `s as bs cs ds es fs gs hs is js ks ls ms ns os ps qs rs ss ts us vs ws xs ys zs {s |s }s ~s s s s s s s s s s s s s s s s s s 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 t t t t t t t t t t t t t t t t t t t t t t t t t t u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u v v v v v v v v v v v v v v v v v !w "x #x $x %y &y 'y (y )z *z +z ,z -z .z /z 0z 1z 2z 3z 4z 5z 6{ 7{ 8{ 9{ :{ ;{ <{ ={ >{ ?{ @{ A{ B{ C{ D{ E{ F{ G{ H{ I{ J{ K{ L{ M{ N{ O{ P{ Q{ R{ S{ T{ U{ V{ W{ X{ Y{ Z{ [{ \{ ]{ ^{ _{ `{ a{ b{ c{ d{ e{ f{ g{ h{ i{ j{ k{ l{ m{ n| o| p| q| r| s| t| u| v| w| x| y| z| {| || }| ~| | | | | | | | | | | | | | | | | | | | | | | |                                                                                        } } } } } } } } } } } } } } } } } } }~~~~~~~~~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFKGKHKIKJKKKLKMKNKOKPKQKRKSKTKUKVKWKXKYKZK[K\K]K^K_K`KaKbKcKdKeKfKgKhKiKjKkKlKmKnKoKpKqKrKsKtKuKvKwKxKyKzK{K|K}K~KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK K K K K KKKKKKKKKKKKKKKKKKK K!K"K#K$K%K&K'K(K)K*K+K,K-K.K/K0K1K2K3K4K5K6K7K8K9K:K;K<K=K>K?K@KAKBKCKDKEKFKGKHKIKJKKKLKMKNKOKPKQKRKSKTKUKVKWKXKYKZK[K\K]K^K_K`KaKbKcKdKeKfKgKhKiKjKkKlKmKnKoKpKqKrKsKtKuKvKwKxKyKzK{K|K}K~KKKKKKKKKKKKKKKKKKKKKKK      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrJsJtJuJvJwJxJyJzJ{J|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      SafeeQ8Lazily reconstruct a value previously written to a file.KLMNO !"#$%&'()*+HFGE,-./QRRQ SafeOPOPSafeuSTUTUSuSafe30123Safe}456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ISafe  Safe;=>?AVThe FunctionalDependencies version of V type-class.Note:0 for actual newtypes the implementation can be pack = coerce; unpack = coerce1. We don't have default implementation, because Cabal have to support older than  base >= 4.7 compilers. Also, V, could witness a non-structural isomorphism.Y#ala Sum foldMap [1, 2, 3, 4 :: Int]10Note:/ the user supplied function for the newtype is ignored.,ala (Sum . (+1)) foldMap [1, 2, 3, 4 :: Int]10Z,alaf Sum foldMap length ["cabal", "install"]12Note: as with Y0, the user supplied function for the newtype is ignored.[ Variant of W, which takes a phantom type.\ Variant of W, which takes a phantom type.VWXYZ[\VWXYZ[\None6<KST>a Cabal's own $ copy to avoid requiring an orphan H instance.Once the oldest binary version we support provides a H instance for  we can remove this one here.NB: " is defined differently and not a =dGenerically generate a < (') operation for any type implementing ;. This operation will append two values by point-wise appending their component fields. It is only defined for product types. d a (d b c) = d (d a b) c eGenerically generate a =  ) for any product-like type implementing ;.%It is only defined for product types. d e a = a = d a e <= !"abcde<= !"abcdeSafeQV'wGive the *parent* of the person who invoked this; so it's most suitable for being called from a utility function. You probably want to call this using n; otherwise it's not very useful. We didn't implement this for base-4.8.1 because we cannot rely on freezing to have taken place.yeThis function is for when you *really* want to add a call stack to raised IO, but you don't have a > so you can't use . If you have a  Verbosity$, please use that function instead.QnotvwxyvQynxotwNone<QSTV.Hidden internal type-class| New name for } GHC.Generics-based M implementation#This is needed in order to support  deepseq < 1.4 which didn't have a ;-based default M implementation yet.&In order to define instances, use e.g. -instance NFData MyType where rnf = genericRnf'The implementation has been taken from  deepseq-1.4.2 's default M implementation.D &' (;)* +,-.-/  0DCBA=<12345678$#%.9:_`;<= !">RU?@ABCDEFGHSTIXYZJKLMNOPVW[\]^bcdefghijklmpqrsvwxyz{|}~      !"#$%&'()*+,3210/654789:>?@HFGEINMdez{|}BSD3cabal-dev@haskell.org experimentalportableNone4 "(c) The University of Glasgow 2002/BSD-style (see the file libraries/base/LICENSE)libraries@haskell.orgportableNone&'ej"LConsumes and returns the next character. Fails if there is no input left.PLook-ahead: returns the part of the input that is left, without consuming it. Always fails.'Succeeds iff we are at the end of inputSymmetric choice.}Local, exclusive, left-biased choice: If left parser locally produces any result at all, then right parser is not used.zTransforms 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.TConsumes and returns the next character, if it satisfies the specified predicate.+Parses and returns the specified character.(Parses and returns the specified string.BParses the first zero or more characters satisfying the predicate.AParses the first one or more characters satisfying the predicate.+Combines all parsers in the specified list.Skips all whitespace.Like J but succeeds only if there is at least one whitespace character to skip. count n p  parses n occurrences of p/ in sequence. A list of results is returned. between open close p  parses open, followed by p and finally close. Only the value of p is returned. option x p will either parse p or return x without consuming any input. optional p optionally parses p and always returns ().4Parses zero or more occurrences of the given parser.3Parses one or more occurrences of the given parser.Like , but discards the result.Like , but discards the result. sepBy p sep$ parses zero or more occurrences of p, separated by sep*. Returns a list of values returned by p. sepBy1 p sep# parses one or more occurrences of p, separated by sep*. Returns a list of values returned by p. endBy p sep$ parses zero or more occurrences of p, separated and ended by sep. endBy p sep# parses one or more occurrences of p, separated and ended by sep. 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. 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.Like (, but parses one or more occurrences of p.Like (, but parses one or more occurrences of p.manyTill p end$ parses zero or more occurrences of p, until end3 succeeds. Returns a list of values returned by p.hConverts 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)] Converts a Haskell ReadS-style function into a parser. Warning: This introduces local backtracking in the resulting parser, and therefore a possible inefficiency.%~%~55NonefD &' (;)* +,-.-/  0DCBA=<12345678$#%.9:`_;<= !">RU?@ABCDEFGHSTIXYZJKLMNOPVW[\]^bcdefghijklmpqrsvwxyz{|}~      !"#$%&'()*+,3210/654789:>?@HFGEINMdez{|}F &' (;)* +,.-/  0DCBA=<123458$#%.<= !">RU?@ABGHSTIXYZJPVWbcdefghijklmpqrswz{|}~      !"#$%&,789:>?@<de6-;NM}HFGE3210/6547{zI9vyx:`_^*)[+(\]'KLMNOCDEF|(c) Edward Kmett 2011-2012BSD3ekmett@gmail.com experimental non-portableNone&'NAdditional functionality needed to describe parsers independent of input type.zTake a parser that may consume input, and on failure, go back to where we started and fail as if we didn't consume input.Give a parser a nameiA version of many that discards its input. Specialized because it can often be implemented more cheaply. skipSome p applies the parser p one? or more times, skipping its result. (aka skipMany1 in parsec),Used to emit an error on an unexpected tokenkThis parser only succeeds at the end of the input. This is not a primitive parser but it is defined using . 0 eof = notFollowedBy anyChar <?> "end of input"notFollowedBy p only succeeds when parser p fails. This parser does not consume any input. This parser can be used to implement the 'longest match' rule. For example, when recognizing keywords (for example let), we want to make sure that a keyword is not followed by a legal identifier character, in which case the keyword is actually an identifier (for example lets-). We can program this behaviour as follows: ; keywordLet = try $ string "let" <* notFollowedBy alphaNum choice ps( tries to apply the parsers in the list psT in order, until one of them succeeds. Returns the value of the succeeding parser. option x p tries to apply parser p. If p6 fails without consuming input, it returns the value x#, otherwise the value returned by p. + priority = option 0 (digitToInt <$> digit)skipOptional p tries to apply parser p. It will parse p or nothing. It only fails if p9 fails after consuming input. It discards the result of pT. (Plays the role of parsec's optional, which conflicts with Applicative's optional)between open close p parses open, followed by p and close!. Returns the value returned by p. , braces = between (symbol "{") (symbol "}") sepBy p sep parses zero or more occurrences of p, separated by sep'. Returns a list of values returned by p. % commaSep p = p `sepBy` (symbol ",") sepBy1 p sep parses one or more occurrences of p, separated by sep'. Returns a list of values returned by p.sepEndBy1 p sep parses one or more occurrences of p%, separated and optionally ended by sep(. Returns a list of values returned by p.sepEndBy p sep parses zero or more occurrences of p%, separated and optionally ended by sepF, ie. haskell style statements. Returns a list of values returned by p. 6 haskellStatements = haskellStatement `sepEndBy` semi endBy1 p sep parses one or more occurrences of p, separated and ended by sep'. Returns a list of values returned by p. endBy p sep parses zero or more occurrences of p, separated and ended by sep'. Returns a list of values returned by p. ( cStatements = cStatement `endBy` semi count n p parses n occurrences of p. If n4 is smaller or equal to zero, the parser equals to  return []. Returns a list of n values returned by p. chainr p op x parses zero or more occurrences of p, separated by op Returns a value obtained by a right7 associative application of all functions returned by op to the values returned by p!. If there are no occurrences of p , the value x is returned. chainl p op x parses zero or more occurrences of p, separated by op . Returns a value obtained by a left7 associative application of all functions returned by op to the values returned by p#. If there are zero occurrences of p , the value x is returned.chainl1 p op x parses one or more occurrences of p, separated by op Returns a value obtained by a left7 associative application of all functions returned by op to the values returned by ps. . This parser can for example be used to eliminate left recursion which typically occurs in expression grammars.  expr = term `chainl1` addop term = factor `chainl1` mulop factor = parens expr <|> integer mulop = (*) <$ symbol "*" <|> div <$ symbol "/" addop = (+) <$ symbol "+" <|> (-) <$ symbol "-"chainr1 p op x parses one or more occurrences of p, separated by op Returns a value obtained by a right7 associative application of all functions returned by op to the values returned by p.manyTill p end applies parser p zero or more times until parser end2 succeeds. Returns the list of values returned by p,. This parser can be used to scan comments: x simpleComment = do{ string "<!--" ; manyTill anyChar (try (string "-->")) }Note the overlapping parsers anyChar and  string "-->"#, and therefore the use of the  combinator.a/0a0/0(c) Edward Z. Yang 2016BSD3cabal-dev@haskell.org experimentalportableNone 1<FTt,A simple, trivial data type which admits an  instance.The T class is used for datatypes which represent directed graph nodes. A node of type a- is associated with some unique key of type  a); given a node we can determine its key (") and the keys of its neighbors ().A graph of nodes a5. The nodes are expected to have instance of class .Get the value from a .O(1). Is the graph empty?O(1)#. The number of nodes in the graph.O(log V)#. Check if the key is in the graph.O(log V)(. Lookup the node at a key in the graph.O(1). The empty graph.O(log V). Insert a node into a graph.O(log V)*. Delete the node at a key from the graph.O(log V)M. Lookup and delete. This function returns the deleted value if it existed. O(V + V')U. Right-biased union, preferring entries from the second map when conflicts occur.  x =  (f x). O(V + V')Q. Left-biased union, preferring entries from the first map when conflicts occur.(V + E)b. Compute the strongly connected components of a graph. Requires amortized construction of graph.(V + E)K. Compute the cycles of a graph. Requires amortized construction of graph.O(1). Return a list of nodes paired with their broken neighbors (i.e., neighbor keys which are not in the graph). Requires amortized construction of graph.bLookup the immediate neighbors from a key in the graph. Requires amortized construction of graph.jLookup the immediate reverse neighbors from a key in the graph. Requires amortized construction of graph.HCompute the subgraph which is the closure of some set of keys. Returns Nothing` if one (or more) keys are not present in the graph. Requires amortized construction of graph.HCompute the reverse closure of a graph from some set of keys. Returns Nothing` if one (or more) keys are not present in the graph. Requires amortized construction of graph.STopologically sort the nodes of a graph. Requires amortized construction of graph.[Reverse topologically sort the nodes of a graph. Requires amortized construction of graph.O(1)[. Convert a map from keys to nodes into a graph. The map must satisfy the invariant that  m == fromList ( m)+; if you can't fulfill this invariant use fromList ( m)E instead. The values of the map are assumed to already be in WHNF. O(V log V)<. Convert a list of nodes (with distinct keys) into a graph.O(V)'. Convert a graph into a list of nodes.O(V)&. Convert a graph into a list of keys.O(V)%. Convert a graph into a set of keys.O(1)D. Convert a graph into a map from keys to nodes. The resulting map m* is guaranteed to have the property that x ((k,n) -> k ==  n) ( m).O(1). Convert a graph into a ,. Requires amortized construction of graph.$LKJ$LKJcabal-devel@haskell.org Windows-onlyNone` (c) Ben Gamari 2015-2019BSD3cabal-dev@haskell.org experimentalportableNoneDifference list.Make  with containing single element. NoneQVylens, variant is also parametrised by profunctor." is a reverse application operator$      !"#$%&'$     ' !"#$%& 1844 4!4"4#4$8%4&4None:Copies a file to a new destination. Often you should use  instead.Like , but does not touch the target if source and destination are already byte-identical. This is recommended as it is useful for time-stamp based recompilation avoidance.~Checks if two files are byte-identical. Returns False if either of the files do not exist or if files are of different size.)*(c) Edward Kmett 2011BSD3ekmett@gmail.com experimental non-portableNone&'<V+;Additional functionality needed to parse character streams.,:Parse a single character of the input, with UTF-8 decoding-char c parses a single character c&. Returns the parsed character (i.e. c).e.g.  semiColon = - ';'. notChar c( parses any single character other than c . Returns the parsed character./EThis parser succeeds for any character. Returns the parsed character.0string s* parses a sequence of characters given by s#. Returns the parsed string (i.e. s). ; divOrMod = string "div" <|> string "mod"1text t8 parses a sequence of characters determined by the text t) Returns the parsed text fragment (i.e. t).Using OverloadedStrings: 7 divOrMod = text "div" <|> text "mod"2oneOf csJ succeeds if the current character is in the supplied list of characters cs*. Returns the parsed character. See also ,.  vowel = oneOf "aeiou"3As the dual of 2,  noneOf cs' succeeds if the current character is not$ in the supplied list of characters cs . Returns the parsed character.  consonant = noneOf "aeiou"4Skips zero* or more white space characters. See also .5>Parses a white space character (any character which satisfies  ) Returns the parsed character.6?Parses a newline character ('\n'). Returns a newline character.77Parses a tab character ('\t'). Returns a tab character.8:Parses an upper case letter. Returns the parsed character.9<Parses a lower case character. Returns the parsed character.:7Parses a letter or digit. Returns the parsed character.;WParses a letter (an upper case or lower case character). Returns the parsed character.<-Parses a digit. Returns the parsed character.=sParses a hexadecimal digit (a digit or a letter between 'a' and 'f' or 'A' and 'F'). Returns the parsed character.>WParses an octal digit (a character between '0' and '7'). Returns the parsed character.AQGreedily munch characters while predicate holds. Require at least one character.BBGreedely munch characters while predicate holds. Always succeeds.4a0/+1,-0/.23456789:;<=>?@ABC23456789:;<=>?+1,-0/.@ABCNone16W"Different Cabal-the-spec versions./We branch based on this at least in the parser.NPOQSRTVUW\[ZYX]^_`aW\[ZYX]^_`aTVUQSRNPONone<QVsetEnv name value, sets the specified environment variable to value.Throws  if either name or value1 is the empty string or contains an equals sign.None<QV^vv(c) Sven Panne 2002-2005/BSD-style (see the file libraries/base/LICENSE)libraries@haskell.orgportableNone*Return a string describing the usage of a command, derived from the header (first argument) and the options described by the second argument.pProcess the command-line, and return the list of values that matched (and those that didn't). The arguments are:The order requirements (see )The option descriptions (see )9The actual command line arguments (presumably got from ).j returns a triple consisting of the option arguments, a list of non-options, and a list of error messages.This is almost the same as , but returns a quadruple consisting of the option arguments, a list of non-options, a list of unrecognized options, and a list of error messages. Ben Gamari 2015-2019cabal-devel@haskell.orgportableNone+NoneQV19w Patch legacy .cabal@ file contents to allow parsec parser to accept all of Hackage.=Bool part of the result tells whether the output is modified.K contains first 256 bytes, pre- and post-fingerprints and a patch function.#Helper to create entries in patchesneedleneedle replacementneedlewwcabal-devel@haskell.orgportableSafe1xyyxNone6Az-1-indexed row and column positions in a file.|Parser warning.~0Type of parser warning. We do classify warnings.TDifferent application may decide not to show some, or have fatal behaviour on othersUnclassified warningInvalid UTF encodingtrue or false, not True or Falsethere are version with tagsNew syntax used, but no cabal-version: >= 1.2 specifiedOld syntax used, and cabal-version >= 1.2 specifiedextra main-is fieldextra test-module fieldextra benchmark-module field+legacy cabal file that we know how to patchBDouble dash token, most likely it's a mistake - it's not a comment3e.g. name or version should be specified only once.>Workaround for derive-package having build-type: Default. See  ,https://github.com/haskell/cabal/issues/5020.See <https://github.com/haskell-infra/hackage-trustees/issues/128 Parser error.)Shift position by n columns to the right.(Shift position to beginning of next row.#z{|}~#|}~z{None3L^  A field name. Invariant:  is lower-case ASCII.+Section arguments, e.g. name of the librarySidentifier, or omething which loos like number. Also many dot numbers, i.e. "7.6.3" quoted string@everything else, mm. operators (e.g. in if-section conditionals)hA line of text representing the value of a field from a Cabal file. A field may contain multiple lines. Invariant:  has no newlines.2A Cabal-like file consists of a series of fields (foo: bar) and sections ( library ...).Section of field nameAll transitive descendands of , including itself.Note:# the resulting list is never empty.Extract annotation from .BSD3cabal-devel@haskell.orgportableNoneQ"position at current input locationthe current input lexer codeEncountered non breaking space"BOM at the start of the cabal file Leading tags5Execute the given lexer on the supplied input stream.#Add warning at the current positionAn alex lexer start codeBSD3cabal-devel@haskell.orgportableNoneDVHTokens of outer cabal file structure. Field values are treated opaquely.+Haskell-like identifier, number or operatorString in quotesOperators and parensIndentation token Lines after :BSD3cabal-devel@haskell.orgportableNone>?\The + (with a prime) is an instance of parsec's  wrapped around lexer's  (without a prime)%Get lexer warnings accumulated so far0Set Alex code i.e. the mode "state" lexer is in. Parse cabal style  into list of s, i.e. the cabal AST. Like   but also return lexer warnings     Noned}The default rendering style used in Cabal for console output. It has a fixed page width and adds line breaks automatically.&A style for rendering all on one line.Pretty-print free-format text, ensuring that it is vertically aligned, and with blank lines replaced by dots for correct re-parsing.r breaks a string up into a list of strings at newline characters. The resulting strings do not contain newlines.(the indentation used for pretty printing  2011, Dan Knappcabal-devel@haskell.orgportableNonepvRepresents a dialect of C. The Monoid instance expresses backward compatibility, in the sense that 'mappend a b' is the least inclusive dialect which both a and b! can be correctly interpreted as.!A list of all file extensions which are recognized as possibly containing some dialect of C code. Note that this list is only for source files, not for header files."Takes a dialect of C and whether code is intended to be passed through the preprocessor, and returns a filename extension for containing that code.#Infers from a filename's extension the dialect of C which it contains, and whether it is intended to be passed through the preprocessor. !"# !"#...cabal-devel@haskell.orgportableNones(No unliteration.)) takes a filename (for error reports), and transforms the given string, to eliminate the literate comments from the program text.())(cabal-devel@haskell.orgportableNoney*@Extract the version number from the output of 'strip --version'.Invoking "strip --version" gives very inconsistent results. We ignore everything in parentheses (see #2497), look for the first word that starts with a number, and try parsing out the first two components of it. Non-GNU strip' doesn't appear to have a version flag.**Thomas Tuegel 2010BSD3cabal-devel@haskell.orgportableNone<QV8If true, then children of this group may be run in parallel. Note that this setting is not inherited by children. In particular, consider a group F with "concurrently = False" that has some children, including a group T with "concurrently = True". The children of group T may be run concurrently with each other, as long as none are run at the same time as any of the direct children of group F.KIA human-readable description of the option to guide the user setting it.PPerform the test.Q1A name for the test, unique within a test suite.R0Users can select groups of tests by their tags.S5Descriptions of the options recognized by this test.TTry to set the named option to the given value. Returns an error message if the option is not supported or the value could not be correctly parsed; otherwise, a N5 with the option set to the given value is returned.UPCreate a named group of tests, which are assumed to be safe to run in parallel.++-.,/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTU+NOPQRSTHIJKLM:;<=>?@ABCDEFG34567892/01+-.,UNone16_?A boolean expression parameterized over the variable type used.eBoolean negation of a _ value.fBoolean AND of two Condtion values.gBoolean OR of two _ values.h5Simplify the condition and return its free variables.h(partial) variable assignment _`abcdefgh _`abcdefghNone134563xA x( represents a conditional branch, e.g.,  if flag(foo) on some syntax a). It also has an optional false branch.}A } is used to represent the conditional structure of a Cabal file, reflecting a syntax element subject to constraints, and then any number of sub-elements which may be enabled subject to some condition. Both a and c are usually =s.:To be more concrete, consider the following fragment of a Cabal file: Ibuild-depends: base >= 4.0 if flag(extra) build-depends: base >= 4.2 %One way to represent this is to have } ConfVar [ Dependency]  BuildInfo . Here, L represents the actual fields which are not behind any conditional, while J recursively records any further fields which are behind a conditional. ) records the constraints (in this case,  base >= 4.0V) which would be applied if you use this syntax; in general, this is derived off of targetBuildInfo (perhaps a good refactoring would be to convert this into an opaque type, with a smart constructor that pre-computes the dependencies.) /Traversal (CondTree v c a) (CondTree w c a) v w 3Traversal (CondBranch v c a) (CondBranch w c a) v wFExtract the condition matched by the given predicate from a cond tree.wWe use this mainly for extracting buildable conditions (see the Note above), but the function is in fact more general.wFlattens a CondTree using a partial flag assignment. When a condition cannot be evaluated, both branches are ignored.Flatten a CondTree. This will resolve the CondTree by taking all possible paths into account. Note that since branches represent exclusive choices this may not result in a "sane" result.xyz{|}~}~xyz{|SafewHash a string using GHC's fingerprinting algorithm (a 128-bit MD5 hash) and then encode the resulting hash in base 62. NoneaRepresents either textual or binary data passed via I/O functions which support binary/text mode2How Text gets encoded is usually locale-dependent.2Raw binary which gets read/written in binary mode. Test whether  is empty Wrapper for Note$: This operation uses lazy I/O. Use NW to force all data to be read and consequently the internal file handle to be closed. Wrapper for  and This is the dual operation ot ioDataHGetContents., and consequently the handle is closed with hClose.  !NoneMonadic variant of  mapAccumL."None3A type to represent the unfolding of an expensive long running calculation that may fail (or maybe not expensive, but complicated!) We may get intermediate steps before the final result which may be used to indicate progress and/or logging messages.@TODO: Apply Codensity to avoid left-associativity problem. See  4http://comonad.com/reader/2011/free-monads-for-less/ and Hhttp://blog.ezyang.com/2012/01/problem-set-the-codensity-transformation/Emit a step and then continue.Fail the computation. Consume a  calculation. Much like P for lists but with two base cases, one for a final result and one for failure.Eg to convert into a simple P result use: $foldProgress (flip const) Left RightSafeDecode 7 from UTF8-encoded octets.;Invalid data in the UTF8 stream (this includes code-points U+D800 through U+DFFF0) will be decoded as the replacement character (U+FFFD). See also Encode 7! to a list of UTF8-encoded octetsCode-points in the U+D800-U+DFFF; range will be encoded as the replacement character (i.e. U+FFFD). See also  decodeUtf8#None16 Compact representation of short Strings-The data is stored internally as UTF8 in an  when compiled against bytestring >= 0.10.4F, and otherwise the fallback is to use plain old non-compat '[Char]'.3Note: This type is for internal uses (such as e.g.  PackageName*) and shall not be exposed in Cabal's API Construct  from 7Convert  to 7#Isaac Jones, Simon Marlow 2003-2004=BSD3 portions Copyright (c) 2007, Galois Inc.cabal-devel@haskell.orgportableNone6<QV,FWraps text to the default line width. Existing newlines are preserved.HWraps a list of words to a list of lines of words of a particular width.?Gets the contents of a file, but guarantee that it gets closed.The file is read lazily but if it is not fully consumed by the action then the remaining input is truncated and the file is closed.Writes a file atomically.nThe file is either written successfully or an IO exception is raised and the original file is left unchanged.On windows it is not possible to delete a file that is open by a process. This case will give an IO exception but the atomic property is not affected.Decode 7 from UTF8-encoded ;Invalid data in the UTF8 stream (this includes code-points U+D800 through U+DFFF0) will be decoded as the replacement character (U+FFFD). Variant of  for lazy sEncode 7 to to UTF8-encoded Code-points in the U+D800-U+DFFF; range will be encoded as the replacement character (i.e. U+FFFD). Variant of  for lazy sCheck that strict  ByteString2 is valid UTF8. Returns 'Just offset' if it's not.DIgnore a Unicode byte order mark (BOM) at the beginning of the input2Reads a UTF8 encoded text file as a Unicode StringReads lazily using ordinary f.2Reads a UTF8 encoded text file as a Unicode StringSame behaviour as .4Writes a Unicode String as a UTF8 encoded text file.Uses ", so provides the same guarantees.3Fix different systems silly line ending conventionsdropWhileEndLE p is equivalent to reverse . dropWhile p . reversep, but quite a bit faster. The difference between "Data.List.dropWhileEnd" and this version is that the one in  Data.Listj is strict in elements, but spine-lazy, while this one is spine-strict but lazy in elements. That's what LE" stands for - "lazy in elements".Example:=tail $ Data.List.dropWhileEnd (<3) [undefined, 5, 4, 3, 2, 1] *** Exception: Prelude.undefined...5tail $ dropWhileEndLE (<3) [undefined, 5, 4, 3, 2, 1][5,4,3]?take 3 $ Data.List.dropWhileEnd (<3) [5, 4, 3, 2, 1, undefined][5,4,3]7take 3 $ dropWhileEndLE (<3) [5, 4, 3, 2, 1, undefined] *** Exception: Prelude.undefined...takeWhileEndLE p is equivalent to reverse . takeWhile p . reverse;, but is usually faster (as well as being easier to read).Like  , but has  O(n log n) complexity instead of O(n^2) . Code for  and  taken from Niklas Hambchen's  $http://github.com/nh2/haskell-ordnubordnub package.Like  and F. Selects a key for each element and takes the nub based on that key. Like "Data.List.union", but has  O(n log n) complexity instead of O(n^2).A right-biased version of .Example:ordNub [1,2,1] :: [Int][1,2]ordNubRight [1,2,1] :: [Int][2,1]A right-biased version of .Example:listUnion [1,2,3,4,3] [2,1,1] [1,2,3,4,3]"listUnionRight [1,2,3,4,3] [2,1,1] [4,3,2,1,1]A total variant of .Lower case stringlowercase "Foobar""foobar"Ascii charactersAscii letters.Ascii letters and digits.isAsciiAlphaNum 'a'TrueisAsciiAlphaNum ''FalseLike  , but with H predicateMbreakMaybe (readMaybe :: String -> Maybe Int) ["foo", "bar", "1", "2", "quu"]$(["foo","bar"],Just (1,["2","quu"]))<breakMaybe (readMaybe :: String -> Maybe Int) ["foo", "bar"](["foo","bar"],Nothing)Like  but with H predicate0spanMaybe listToMaybe [[1,2],[3],[],[4,5],[6,7]]([1,3],[[],[4,5],[6,7]])>spanMaybe (readMaybe :: String -> Maybe Int) ["1", "2", "foo"]([1,2],["foo"]) with monadic action.<take 5 $ unfoldrM (\b r -> Just (r + b, b + 1)) (1 :: Int) 2 [3,4,5,6,7] and  are like  and K but have platform independent heuristics. The System.FilePath exists in two versions, Windows and Posix. The two versions don't agree on what is a relative path and we don't know if we're given Windows or Posix paths. This results in false positives when running on Posix and inspecting Windows paths, like the hackage server does. System.FilePath.Posix.isAbsolute "C:\hello" == False System.FilePath.Windows.isAbsolute "/hello" == False This means that we would treat paths that start with "/" to be absolute. On Posix they are indeed absolute, while on Windows they are not.The portable versions should be used when we might deal with paths that are from another OS than the host OS. For example, the Hackage Server deals with both Windows and Posix paths while performing the PackageDescription checks. In contrast, when we run 'cabal configure' we do expect the paths to be correct for our OS and we should not have to use the platform independent heuristics.  isRelativeOnAnyPlatform = not . $$$None;=>?VIThis is essentially a lazy bytestring, but chunks are glued with newline '\n'.Convert 7 to .Note: inefficient!%None&'<QV% Parsing class which!can report Cabal parser warnings.knows  cabal-version we work withClass for parsing with parsec. Mainly used for .cabal file fields. could( consume trailing spaces, this function will consume.Parse a 7 with .Parse a 7 with .Parse a 7 with given ". Trailing whitespace is accepted.Run  with ]. [^ ,] [^ ]#Parse a benchmark/test-suite types.Like & but accept leading or trailing comma. p (comma p)* -- p sepByF comma (comma p)* -- leading comma (p comma)* -- trailing comma Content isn't unquotedparsecMaybeQuoted p =  p  | p./~/~&Duncan Coutts 2007cabal-devel@haskell.orgportableNone7*Note:C this class will soon be deprecated. It's not yet, so that we are -Wall clean.%Pretty-prints with the default style.!Parser for non-negative integers.'None16=lA - represents the version of a software entity. Instances of ( and 0 are provided, which gives exact equality and lexicographic ordering of the version number components (i.e. 2.1 > 2.0, 1.2.3 > 1.2.2, etc.).*This type is opaque and distinct from the  type in  Data.Version since  Cabal-2.0!. The difference extends to the H8 instance using a different (and more compact) encoding. Construct ( from list of version number components.For instance, mkVersion [3,2,1] constructs a  representing the version 3.2.1.-All version components must be non-negative.  mkVersion []# currently represents the special null version; see also  .Version 0. A lower bound of . Variant of  which converts a  Data.Version  into Cabal's  type.Unpack ( into list of version number components.This is the inverse to , so the following holds: %(versionNumbers . mkVersion) vs == vs "Constant representing the special null The   compares (via 0) as less than every proper  value.!3Apply function to list of version number components 0alterVersion f == mkVersion . f . versionNumbers  !"#  !#"(None13456<d/ F-Algebra of ;. See T.GThe version range -any4. That is, a version range containing all versions. withinRange v anyVersion = TrueHHThe empty version range, that is a version range containing no versions.WThis can be constructed using any unsatisfiable version range expression, for example  > 1 && < 1. withinRange v noVersion = FalseIThe version range == v (withinRange v' (thisVersion v) = v' == vJThe version range  v|| v +withinRange v' (notThisVersion v) = v' /= vKThe version range > v (withinRange v' (laterVersion v) = v' > vLThe version range >= v +withinRange v' (orLaterVersion v) = v' >= vMThe version range < v *withinRange v' (earlierVersion v) = v' < vNThe version range <= v -withinRange v' (orEarlierVersion v) = v' <= vOThe version range  vr1 || vr2 X withinRange v' (unionVersionRanges vr1 vr2) = withinRange v' vr1 || withinRange v' vr2PThe version range  vr1 && vr2 \ withinRange v' (intersectVersionRanges vr1 vr2) = withinRange v' vr1 && withinRange v' vr2QThe version range == v.*.For example, for version 1.2, the version range == 1.2.* is the same as >= 1.2 && < 1.3 withinRange v' (laterVersion v) = v' >= v && v' < upper v where upper (Version lower t) = Version (init lower ++ [last lower + 1]) tRThe version range ^>= v.For example, for version 1.2.3.4, the version range  ^>= 1.2.3.4 is the same as >= 1.2.3.4 && < 1.3. Note that ^>= 1 is equivalent to  >= 1 && < 1.1.STFold ;.UVUnfold ;.W-Fold over the basic syntactic structure of a ;.bThis provides a syntactic view of the expression defining the version range. The syntactic sugar ">= v", "<= v" and "== v.*"2 is presented in terms of the other basic syntax.For a semantic view use asVersionIntervals.XRefold ;Y Normalise ;.In particular collapse  (== v || > v) into >= v , and so on.ZRemove F constructors.[.Does this version fall within the given range?(This is the evaluation function for the ; type.\^<Compute next greater major version to be used as upper bound Example: 0.4.1 produces the version 0.5. which then can be used to construct a range >= 0.4.1 && < 0.5_+Does the version range have an upper bound?`4Does the version range have an explicit lower bound?jNote: this function only considers the user-specified lower bounds, but not the implicit >=0 lower bound.W"-any" version "== v" "> v" "< v""_ || _" union"_ && _" intersection2/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`2;<=>?@ABCDEFGHIJKMLNOPQR[WYZ_`/0123456789:TVXSU\^])None1&|$A complementary representation of a ;r. Instead of a boolean version predicate it uses an increasing sequence of non-overlapping, non-empty intervals.aThe key point is that this representation gives a canonical representation for the semantics of ;xs. This makes it easier to check things like whether a version range is empty, covers all versions, or requires a certain minimum or maximum version. It also makes it easy to check equality or containment. It also makes it easier to identify 'simple' version predicates for translation into foreign packaging systems that do not support complex version range expressions.}View a ; as a union of intervals.5This provides a canonical view of the semantics of a ;\ as opposed to the syntax of the expression used to define it. For the syntactic view use W.Each interval is non-empty. The sequence is in increasing order and no intervals overlap or touch. Therefore only the first and last can be unbounded. The sequence can be empty if the range is empty (e.g. a range expression like  1&& 2).COther checks are trivial to implement using this view. For example: hisNoVersion vr | [] <- asVersionIntervals vr = True | otherwise = False isSpecificVersion vr | [(LowerBound v InclusiveBound ,UpperBound v' InclusiveBound)] <- asVersionIntervals vr , v == v' = Just v | otherwise = Nothing~&Inspect the list of version intervals.Directly construct a | from a list of intervals.In  Cabal-2.2 the H! is dropped from the result type.6Check an upper bound does not intersect a lower bound:--| or ---) or ---] or ---) but not ---] |--- (--- (--- [--- [---5Test if a version falls within the version intervals.VIt exists mostly for completeness and testing. It satisfies the following properties: }withinIntervals v (toVersionIntervals vr) = withinRange v vr withinIntervals v ivs = withinRange v (fromVersionIntervals ivs) Convert a ;$ to a sequence of version intervals. Convert a | value back into a ;0 expression representing the version intervals.stuvxwyz{|}~|~}{yzvxwstu*None16 IAn enumeration of common source control systems. The fields used in the n depend on the type of repo. The tools and methods used to obtain and track the repo depend on the repo type./What this repo info is for, what it represents.The repository for the "head" or development version of the project. This repo is where we should track the latest development activity or the usual repo people should get to contribute patches.The repository containing the sources for this exact package version or release. For this kind of repo a tag should be given to give enough information to re-create the exact sources.CInformation about the source revision control system for a package.When specifying a repo it is useful to know the meaning or intention of the information as doing so enables automation. There are two obvious common purposes: one is to find the repo for the latest development version, the other is to find the repo for this specific release. The ReopKind6 specifies which one we mean (or another custom one).A package can specify one or the other kind or both. Most will specify just a head repo but some may want to specify a repo to reconstruct the sources for this package release. The required information is the  which tells us if it's using ,  for example. The ? and other details are interpreted according to the repo type.)The kind of repo. This field is required.;The type of the source repository system for this repo, eg  or . This field is required.)The location of the repository. For most )s this is a URL. This field is required. can put multiple "modules" on one server and requires a module name in addition to the location to identify a particular repo. Logically this is part of the location but unfortunately has to be specified separately. This field is required for the  $ and should not be given otherwise.The name or identifier of the branch, if any. Many source control systems have the notion of multiple branches in a repo that exist in the same location. For example  and  use this while systems like  use different locations for different branches. This field is optional but should be used if necessary to identify the sources, especially for the  repo kind.UThe tag identify a particular state of the repository. This should be given for the  repo kind and not for  kind.Some repositories contain multiple projects in different subdirectories This field specifies the subdirectory where this packages sources can be found, eg the subdirectory containing the .cabal file. It is interpreted relative to the root of the repository. This field is optional. If not given the default is "." ie no subdirectory.+None,None16KA pkg-config library name?This is parsed as any valid argument to the pkg-config utility.Convert  to 7 Construct a  from a 7 is the inverse to ANote: No validations are performed to ensure that the resulting  is valid-None16,What kind of foreign library is to be built?A native shared library (.so on Linux, .dylib on OSX, or .dll on Windows).2A native static library (not currently supported.).None16-Merge in all dependent libraries (i.e., use ghc -shared -static0 rather than just record the dependencies, ala ghc -shared -dynamicM). This option is compulsory on Windows and unsupported on other platforms./None16  = Any like semigroup, where  is 'Any True'0None16K A  f uniquely identifies the transitive source code closure of a component (i.e. libraries, executables).CFor non-Backpack components, this corresponds one to one with the UnitIdD, which serves as the basis for install paths, linker symbols, etc.Use  and  to convert from/to a 7.This type is opaque since  Cabal-2.0 Construct a   from a 7 is the inverse to ANote: No validations are performed to ensure that the resulting   is validConvert   to 7  1None16.The type of build system used by this package.calls Distribution.Simple.defaultMaincalls 9Distribution.Simple.defaultMainWithHooks defaultUserHooks, which invokes  configure@ to generate additional build information used by later phases.calls Distribution.Make.defaultMain uses user-supplied Setup.hs or  Setup.lhs (default) ! !2None16K|, ABI HashesUse . and - to convert from/to a 7.This type is opaque since  Cabal-2.0- Construct a , from a 7. is the inverse to -ANote: No validations are performed to ensure that the resulting , is valid.Convert , to 74.,-.,-.3Duncan Coutts 2007-2008cabal-devel@haskell.orgportableNone16<;These are the known Arches: I386, X86_64, PPC, PPC64, Sparc ,Arm, Mips, SH, IA64, S39, Alpha, Hppa, Rs6000, M68k, Vax and JavaScript.The following aliases can also be used: * PPC alias: powerpc * PPC64 alias : powerpc64 * Sparc aliases: sparc64, sun4 * Mips aliases: mipsel, mipseb * Arm aliases: armeb, armelMThese are the known OS names: Linux, Windows, OSX ,FreeBSD, OpenBSD, NetBSD, DragonFly ,Solaris, AIX, HPUX, IRIX ,HaLVM ,Hurd ,IOS, Android,GhcjsThe following aliases can also be used:, * Windows aliases: mingw32, win32, cygwin32 * OSX alias: darwin * Hurd alias: gnu * FreeBSD alias: kfreebsdgnu * Solaris alias: solaris2_3How strict to be when classifying strings into the M and ; enums.vThe reason we have multiple ways to do the classification is because there are two situations where we need to do it.For parsing OS and arch names in .cabal files we really want everyone to be referring to the same or or arch by the same name. Variety is not a virtue in this case. We don't mind about case though.For the System.Info.os/arch different Haskell implementations use different names for the same or/arch. Also they tend to distinguish versions of an OS/arch which we just don't care about.The a classification allows us to recognise aliases that are already in common use but it allows us to distinguish them from the canonical name which enables us to warn about such deprecated aliases.i4The platform Cabal was compiled on. In most cases, LocalBuildInfo.hostPlatform8 should be used instead (the platform we're targeting).29:;C<=>?@ABDEFGHIJKLMONPQRSTUVWXYZ[\]^_b`acdefghij2MONPQRSTUVWXYZ[\]^e;C<=>?@ABDEFGHIJKLh9:ijcf_b`adg4None16,AuserdefinedlicensereferencedenotedbyLicenseRef-[idstring].(foralicensenotontheSPDX LicenseList)~License reference.Document reference.Create % from optional document ref and name.Like % but convert invalid characters into -.5None16v]SPDX License identifier0BSD, BSD Zero Clause LicenseAAL, Attribution Assurance LicenseAbstyles, Abstyles License Adobe-2006:, Adobe Systems Incorporated Source Code License Agreement Adobe-Glyph, Adobe Glyph List LicenseADSL!, Amazon Digital Services LicenseAFL-1.1, Academic Free License v1.1AFL-1.2, Academic Free License v1.2AFL-2.0, Academic Free License v2.0AFL-2.1, Academic Free License v2.1AFL-3.0, Academic Free License v3.0Afmparse, Afmparse LicenseAGPL-1.0$, Affero General Public License v1.0 AGPL-3.0-only-, GNU Affero General Public License v3.0 onlyAGPL-3.0-or-later1, GNU Affero General Public License v3.0 or laterAladdin, Aladdin Free Public LicenseAMDPLPA, AMD's plpa_map.c LicenseAML, Apple MIT LicenseAMPAS1, Academy of Motion Picture Arts and Sciences BSDANTLR-PD, ANTLR Software Rights Notice Apache-1.0, Apache License 1.0 Apache-1.1, Apache License 1.1 Apache-2.0, Apache License 2.0APAFML, Adobe Postscript AFM LicenseAPL-1.0, Adaptive Public License 1.0APSL-1.0!, Apple Public Source License 1.0APSL-1.1!, Apple Public Source License 1.1APSL-1.2!, Apple Public Source License 1.2APSL-2.0!, Apple Public Source License 2.0Artistic-1.0-cl8!, Artistic License 1.0 w/clause 8Artistic-1.0-Perl, Artistic License 1.0 (Perl) Artistic-1.0, Artistic License 1.0 Artistic-2.0, Artistic License 2.0Bahyph, Bahyph LicenseBarr, Barr LicenseBeerware, Beerware LicenseBitTorrent-1.0%, BitTorrent Open Source License v1.0BitTorrent-1.1%, BitTorrent Open Source License v1.1Borceux, Borceux license BSD-1-Clause, BSD 1-Clause LicenseBSD-2-Clause-FreeBSD, BSD 2-Clause FreeBSD LicenseBSD-2-Clause-NetBSD, BSD 2-Clause NetBSD LicenseBSD-2-Clause-Patent", BSD-2-Clause Plus Patent License BSD-2-Clause, BSD 2-Clause  Simplified LicenseBSD-3-Clause-Attribution, BSD with attributionBSD-3-Clause-Clear, BSD 3-Clause Clear LicenseBSD-3-Clause-LBNL5, Lawrence Berkeley National Labs BSD variant license$BSD-3-Clause-No-Nuclear-License-2014&, BSD 3-Clause No Nuclear License 2014BSD-3-Clause-No-Nuclear-License!, BSD 3-Clause No Nuclear License BSD-3-Clause-No-Nuclear-Warranty", BSD 3-Clause No Nuclear Warranty BSD-3-Clause, BSD 3-Clause New or Revised LicenseBSD-4-Clause-UC2, BSD-4-Clause (University of California-Specific) BSD-4-Clause, BSD 4-Clause Original or Old LicenseBSD-Protection, BSD Protection LicenseBSD-Source-Code, BSD Source Code AttributionBSL-1.0, Boost Software License 1.0 bzip2-1.0.5#, bzip2 and libbzip2 License v1.0.5 bzip2-1.0.6#, bzip2 and libbzip2 License v1.0.6Caldera, Caldera License CATOSL-1.15, Computer Associates Trusted Open Source License 1.1 CC-BY-1.0", Creative Commons Attribution 1.0 CC-BY-2.0", Creative Commons Attribution 2.0 CC-BY-2.5", Creative Commons Attribution 2.5 CC-BY-3.0", Creative Commons Attribution 3.0 CC-BY-4.0", Creative Commons Attribution 4.0 CC-BY-NC-1.01, Creative Commons Attribution Non Commercial 1.0 CC-BY-NC-2.01, Creative Commons Attribution Non Commercial 2.0 CC-BY-NC-2.51, Creative Commons Attribution Non Commercial 2.5 CC-BY-NC-3.01, Creative Commons Attribution Non Commercial 3.0 CC-BY-NC-4.01, Creative Commons Attribution Non Commercial 4.0CC-BY-NC-ND-1.0@, Creative Commons Attribution Non Commercial No Derivatives 1.0CC-BY-NC-ND-2.0@, Creative Commons Attribution Non Commercial No Derivatives 2.0CC-BY-NC-ND-2.5@, Creative Commons Attribution Non Commercial No Derivatives 2.5CC-BY-NC-ND-3.0@, Creative Commons Attribution Non Commercial No Derivatives 3.0CC-BY-NC-ND-4.0@, Creative Commons Attribution Non Commercial No Derivatives 4.0CC-BY-NC-SA-1.0=, Creative Commons Attribution Non Commercial Share Alike 1.0CC-BY-NC-SA-2.0=, Creative Commons Attribution Non Commercial Share Alike 2.0CC-BY-NC-SA-2.5=, Creative Commons Attribution Non Commercial Share Alike 2.5CC-BY-NC-SA-3.0=, Creative Commons Attribution Non Commercial Share Alike 3.0CC-BY-NC-SA-4.0=, Creative Commons Attribution Non Commercial Share Alike 4.0 CC-BY-ND-1.01, Creative Commons Attribution No Derivatives 1.0 CC-BY-ND-2.01, Creative Commons Attribution No Derivatives 2.0 CC-BY-ND-2.51, Creative Commons Attribution No Derivatives 2.5 CC-BY-ND-3.01, Creative Commons Attribution No Derivatives 3.0 CC-BY-ND-4.01, Creative Commons Attribution No Derivatives 4.0 CC-BY-SA-1.0., Creative Commons Attribution Share Alike 1.0 CC-BY-SA-2.0., Creative Commons Attribution Share Alike 2.0 CC-BY-SA-2.5., Creative Commons Attribution Share Alike 2.5 CC-BY-SA-3.0., Creative Commons Attribution Share Alike 3.0 CC-BY-SA-4.0., Creative Commons Attribution Share Alike 4.0CC0-1.0&, Creative Commons Zero v1.0 UniversalCDDL-1.01, Common Development and Distribution License 1.0CDDL-1.11, Common Development and Distribution License 1.1CDLA-Permissive-1.01, Community Data License Agreement Permissive 1.0CDLA-Sharing-1.0., Community Data License Agreement Sharing 1.0 CECILL-1.0-, CeCILL Free Software License Agreement v1.0 CECILL-1.1-, CeCILL Free Software License Agreement v1.1 CECILL-2.0-, CeCILL Free Software License Agreement v2.0 CECILL-2.1-, CeCILL Free Software License Agreement v2.1CECILL-B*, CeCILL-B Free Software License AgreementCECILL-C*, CeCILL-C Free Software License Agreement ClArtistic, Clarified Artistic License CNRI-Jython, CNRI Jython LicenseCNRI-Python-GPL-Compatible:, CNRI Python Open Source GPL Compatible License Agreement CNRI-Python, CNRI Python License Condor-1.1, Condor Public License v1.1CPAL-1.0', Common Public Attribution License 1.0CPL-1.0, Common Public License 1.0 CPOL-1.02 , Code Project Open License 1.02  Crossword, Crossword License CrystalStacker, CrystalStacker License  CUA-OPL-1.0 , CUA Office Public License v1.0 Cube, Cube License curl, curl License D-FSL-1.0 , Deutsche Freie Software Lizenzdiffmark, diffmark licenseDOC , DOC LicenseDotseqn, Dotseqn LicenseDSDP, DSDP Licensedvipdfm, dvipdfm LicenseECL-1.0$, Educational Community License v1.0ECL-2.0$, Educational Community License v2.0EFL-1.0, Eiffel Forum License v1.0EFL-2.0, Eiffel Forum License v2.0eGenix!, eGenix.com Public License 1.1.0Entessa, Entessa Public License v1.0EPL-1.0, Eclipse Public License 1.0EPL-2.0, Eclipse Public License 2.0 ErlPL-1.1, Erlang Public License v1.1 EUDatagrid, EU DataGrid Software LicenseEUPL-1.0#, European Union Public License 1.0EUPL-1.1#, European Union Public License 1.1 EUPL-1.2#, European Union Public License 1.2!Eurosym, Eurosym License"Fair, Fair License# Frameworx-1.0, Frameworx Open License 1.0$ FreeImage, FreeImage Public License v1.0%FSFAP, FSF All Permissive License&FSFUL, FSF Unlimited License'FSFULLR0, FSF Unlimited License (with License Retention)(FTL, Freetype Project License) GFDL-1.1-only*, GNU Free Documentation License v1.1 only*GFDL-1.1-or-later., GNU Free Documentation License v1.1 or later+ GFDL-1.2-only*, GNU Free Documentation License v1.2 only,GFDL-1.2-or-later., GNU Free Documentation License v1.2 or later- GFDL-1.3-only*, GNU Free Documentation License v1.3 only.GFDL-1.3-or-later., GNU Free Documentation License v1.3 or later/Giftware, Giftware License0GL2PS, GL2PS License1Glide, 3dfx Glide License2Glulxe, Glulxe License3gnuplot, gnuplot License4 GPL-1.0-only&, GNU General Public License v1.0 only5GPL-1.0-or-later*, GNU General Public License v1.0 or later6 GPL-2.0-only&, GNU General Public License v2.0 only7GPL-2.0-or-later*, GNU General Public License v2.0 or later8 GPL-3.0-only&, GNU General Public License v3.0 only9GPL-3.0-or-later*, GNU General Public License v3.0 or later: gSOAP-1.3b, gSOAP Public License v1.3b; HaskellReport!, Haskell Language Report License<HPND-, Historical Permission Notice and Disclaimer=IBM-pibs., IBM PowerPC Initialization and Boot Software>ICU , ICU License?IJG , Independent JPEG Group License@ ImageMagick, ImageMagick LicenseAiMatix,, iMatix Standard Function Library AgreementBImlib2, Imlib2 LicenseCInfo-ZIP, Info-ZIP LicenseD Intel-ACPI', Intel ACPI Software License AgreementEIntel, Intel Open Source LicenseF Interbase-1.0, Interbase Public License v1.0GIPA, IPA Font LicenseHIPL-1.0, IBM Public License v1.0IISC , ISC LicenseJ JasPer-2.0, JasPer LicenseKJSON, JSON LicenseLLAL-1.2, Licence Art Libre 1.2MLAL-1.3, Licence Art Libre 1.3NLatex2e, Latex2e LicenseO Leptonica, Leptonica LicenseP LGPL-2.0-only,, GNU Library General Public License v2 onlyQLGPL-2.0-or-later0, GNU Library General Public License v2 or laterR LGPL-2.1-only-, GNU Lesser General Public License v2.1 onlySLGPL-2.1-or-later1, GNU Lesser General Public License v2.1 or laterT LGPL-3.0-only-, GNU Lesser General Public License v3.0 onlyULGPL-3.0-or-later1, GNU Lesser General Public License v3.0 or laterVLGPLLR8, Lesser General Public License For Linguistic ResourcesWLibpng, libpng LicenseXlibtiff, libtiff LicenseY LiLiQ-P-1.12, Licence Libre du Qubec  Permissive version 1.1Z LiLiQ-R-1.13, Licence Libre du Qubec  Rciprocit version 1.1[LiLiQ-Rplus-1.19, Licence Libre du Qubec  Rciprocit forte version 1.1\LPL-1.0#, Lucent Public License Version 1.0]LPL-1.02, Lucent Public License v1.02^LPPL-1.0#, LaTeX Project Public License v1.0_LPPL-1.1#, LaTeX Project Public License v1.1`LPPL-1.2#, LaTeX Project Public License v1.2a LPPL-1.3a$, LaTeX Project Public License v1.3ab LPPL-1.3c$, LaTeX Project Public License v1.3cc MakeIndex, MakeIndex LicensedMirOS, MirOS LicenseeMIT-advertising, Enlightenment License (e16)fMIT-CMU , CMU LicensegMIT-enna, enna LicensehMIT-feh , feh LicenseiMIT , MIT LicensejMITNFA, MIT +no-false-attribs licensekMotosoto, Motosoto Licenselmpich2, mpich2 LicensemMPL-1.0, Mozilla Public License 1.0nMPL-1.1, Mozilla Public License 1.1oMPL-2.0-no-copyleft-exception4, Mozilla Public License 2.0 (no copyleft exception)pMPL-2.0, Mozilla Public License 2.0qMS-PL, Microsoft Public LicenserMS-RL, Microsoft Reciprocal LicensesMTLL!, Matrix Template Library LicensetMultics, Multics LicenseuMup , Mup LicensevNASA-1.3 , NASA Open Source Agreement 1.3wNaumen, Naumen Public LicensexNBPL-1.0, Net Boolean Public License v1yNCSA1, University of Illinois/NCSA Open Source LicensezNet-SNMP, Net-SNMP License{NetCDF, NetCDF license|Newsletr, Newsletr License}NGPL , Nethack General Public License~NLOD-1.0,, Norwegian Licence for Open Government DataNLPL, No Limit Public LicenseNokia, Nokia Open Source LicenseNOSL, Netizen Open Source LicenseNoweb, Noweb LicenseNPL-1.0, Netscape Public License v1.0NPL-1.1, Netscape Public License v1.1 NPOSL-3.0&, Non-Profit Open Software License 3.0NRL , NRL LicenseNTP , NTP LicenseOCCT-PL(, Open CASCADE Technology Public LicenseOCLC-2.0", OCLC Research Public License 2.0ODbL-1.0 , ODC Open Database License v1.0OFL-1.0, SIL Open Font License 1.0OFL-1.1, SIL Open Font License 1.1OGTSL, Open Group Test Suite License OLDAP-1.1, Open LDAP Public License v1.1 OLDAP-1.2, Open LDAP Public License v1.2 OLDAP-1.3, Open LDAP Public License v1.3 OLDAP-1.4, Open LDAP Public License v1.4 OLDAP-2.0.1!, Open LDAP Public License v2.0.1 OLDAP-2.0;, Open LDAP Public License v2.0 (or possibly 2.0A and 2.0B) OLDAP-2.1, Open LDAP Public License v2.1 OLDAP-2.2.1!, Open LDAP Public License v2.2.1 OLDAP-2.2.2 , Open LDAP Public License 2.2.2 OLDAP-2.2, Open LDAP Public License v2.2 OLDAP-2.3, Open LDAP Public License v2.3 OLDAP-2.4, Open LDAP Public License v2.4 OLDAP-2.5, Open LDAP Public License v2.5 OLDAP-2.6, Open LDAP Public License v2.6 OLDAP-2.7, Open LDAP Public License v2.7 OLDAP-2.8, Open LDAP Public License v2.8OML, Open Market LicenseOpenSSL, OpenSSL LicenseOPL-1.0, Open Public License v1.0 OSET-PL-2.1!, OSET Public License version 2.1OSL-1.0, Open Software License 1.0OSL-1.1, Open Software License 1.1OSL-2.0, Open Software License 2.0OSL-2.1, Open Software License 2.1OSL-3.0, Open Software License 3.0PDDL-1.0,, ODC Public Domain Dedication & License 1.0PHP-3.0, PHP License v3.0PHP-3.01, PHP License v3.01Plexus, Plexus Classworlds License PostgreSQL, PostgreSQL Licensepsfrag, psfrag Licensepsutils, psutils License Python-2.0, Python License 2.0Qhull, Qhull LicenseQPL-1.0, Q Public License 1.0Rdisc, Rdisc License RHeCos-1.1", Red Hat eCos Public License v1.1RPL-1.1, Reciprocal Public License 1.1RPL-1.5, Reciprocal Public License 1.5RPSL-1.0), RealNetworks Public Source License v1.0RSA-MD, RSA Message-Digest License RSCPL", Ricoh Source Code Public LicenseRuby, Ruby LicenseSAX-PD, Sax Public Domain NoticeSaxpath, Saxpath LicenseSCEA, SCEA Shared Source LicenseSendmail, Sendmail License SGI-B-1.0", SGI Free Software License B v1.0 SGI-B-1.1", SGI Free Software License B v1.1 SGI-B-2.0", SGI Free Software License B v2.0 SimPL-2.0, Simple Public License 2.0 SISSL-1.2,, Sun Industry Standards Source License v1.2SISSL,, Sun Industry Standards Source License v1.1 Sleepycat, Sleepycat LicenseSMLNJ#, Standard ML of New Jersey LicenseSMPPL*, Secure Messaging Protocol Public LicenseSNIA, SNIA Public License 1.1 Spencer-86, Spencer License 86 Spencer-94, Spencer License 94 Spencer-99, Spencer License 99SPL-1.0, Sun Public License v1.0SugarCRM-1.1.3 , SugarCRM Public License v1.1.3SWL8, Scheme Widget Library (SWL) Software License AgreementTCL, TCL/TK License TCP-wrappers, TCP Wrappers LicenseTMate, TMate Open Source License TORQUE-1.1$, TORQUE v2.5+ Software License v1.1TOSL, Trusster Open Source LicenseUnicode-DFS-2015<, Unicode License Agreement - Data Files and Software (2015)Unicode-DFS-2016<, Unicode License Agreement - Data Files and Software (2016) Unicode-TOU, Unicode Terms of Use Unlicense, The UnlicenseUPL-1.0#, Universal Permissive License v1.0Vim , Vim LicenseVOSTROM(, VOSTROM Public License for Open SourceVSL-1.0, Vovida Software License v1.0 W3C-19980720., W3C Software Notice and License (1998-07-20) W3C-201505137, W3C Software Notice and Document License (2015-05-13)W3C., W3C Software Notice and License (2002-12-31) Watcom-1.0', Sybase Open Watcom Public License 1.0Wsuipa, Wsuipa LicenseWTFPL-, Do What The F*ck You Want To Public LicenseX11 , X11 LicenseXerox, Xerox License XFree86-1.1, XFree86 License 1.1xinetd, xinetd LicenseXnet, X.Net Licensexpp , XPP LicenseXSkat, XSkat LicenseYPL-1.0, Yahoo! Public License v1.0YPL-1.1, Yahoo! Public License v1.1Zed , Zed LicenseZend-2.0, Zend License v2.0 Zimbra-1.3, Zimbra Public License v1.3 Zimbra-1.4, Zimbra Public License v1.4zlib-acknowledgement*, zlib/libpng License with AcknowledgementZlib, zlib LicenseZPL-1.1, Zope Public License 1.1ZPL-2.0, Zope Public License 2.0ZPL-2.1, Zope Public License 2.1=Help message for migrating from non-SDPX license identifiers.Old License is almost SDPX, except for BSD2, BSD3'. This function suggests SPDX variant: licenseIdMigrationMessage "BSD3""Do you mean BSD-3-Clause?"Also  OtherLicense, AllRightsReserved, and  PublicDomain aren't valid SPDX identifiersetraverse_ (print . licenseIdMigrationMessage) [ "OtherLicense", "AllRightsReserved", "PublicDomain" ]"SPDX license list contains plenty of licenses. See https://spdx.org/licenses/. Also they can be combined into complex expressions with AND and OR."/"You can use NONE as a value of license field.""Public Domain is a complex matter. See https://wiki.spdx.org/view/Legal_Team/Decisions/Dealing_with_Public_Domain_within_SPDX_Files. Consider using a proper license."kSPDX License list version 3.0 introduced "-only" and "-or-later" variants for GNU family of licenses. See  ;https://spdx.org/news/news/2018/01/license-list-30-released >>> licenseIdMigrationMessage "GPL-2.0" "SDPX license list 3.0 deprecated suffixless variants of GNU family of licenses. Use GPL-2.0-only or GPL-2.0-or-later."WFor other common licenses their old license format coincides with the SPDX identifiers:traverse eitherParsec ["GPL-2.0-only", "GPL-3.0-only", "LGPL-2.1-only", "MIT", "ISC", "MPL-2.0", "Apache-2.0"] :: Either String [LicenseId]JRight [GPL_2_0_only,GPL_3_0_only,LGPL_2_1_only,MIT,ISC,MPL_2_0,Apache_2_0]License SPDX identifier, e.g.  BSD-3-Clause.License name, e.g. &"GNU General Public License v2.0 only"@Whether the license is approved by Open Source Initiative (OSI).See  ,https://opensource.org/licenses/alphabetical. Create a  from a 7.6eitherParsec "BSD-3-Clause" :: Either String LicenseIdRight BSD_3_Clause.eitherParsec "BSD3" :: Either String LicenseIdKLeft "...Unknown SPDX license identifier: 'BSD3' Do you mean BSD-3-Clause?"\      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~\      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~6None16MSPDX License identifier 389-exception , 389 Directory Server ExceptionAutoconf-exception-2.0, Autoconf exception 2.0Autoconf-exception-3.0, Autoconf exception 3.0Bison-exception-2.2, Bison exception 2.2Bootloader-exception#, Bootloader Distribution Exception Classpath-exception-2.0, Classpath exception 2.0 CLISP-exception-2.0, CLISP exception 2.0 DigiRule-FOSS-exception!, DigiRule FOSS License Exception eCos-exception-2.0, eCos exception 2.0 Fawkes-Runtime-exception, Fawkes Runtime ExceptionFLTK-exception, FLTK exceptionFont-exception-2.0, Font exception 2.0freertos-exception-2.0, FreeRTOS Exception 2.0GCC-exception-2.0#, GCC Runtime Library exception 2.0GCC-exception-3.1#, GCC Runtime Library exception 3.1gnu-javamail-exception, GNU JavaMail exceptioni2p-gpl-java-exception, i2p GPL+Java ExceptionLibtool-exception, Libtool ExceptionLinux-syscall-note, Linux Syscall NoteLZMA-exception, LZMA exception mif-exception', Macros and Inline Functions ExceptionNokia-Qt-exception-1.1, Nokia Qt LGPL exception 1.1OCCT-exception-1.0, Open CASCADE Exception 1.0openvpn-openssl-exception, OpenVPN OpenSSL ExceptionQwt-exception-1.0, Qwt exception 1.0u-boot-exception-2.0, U-Boot exception 2.0WxWindows-exception-3.1!, WxWindows Library Exception 3.1License SPDX identifier, e.g.  BSD-3-Clause. License name, e.g. &"GNU General Public License v2.0 only"! Create a  from a 7.      !      !7None162).Simple License Expressions./9An SPDX License List Short Form Identifier. For example:  GPL-2.0-only0An SPDX License List Short Form Identifier with a unary"+" operator suffix to represent the current version of the license or any later version. For example: GPL-2.0+14A SPDX user defined license reference: For example:  LicenseRef-23, LicenseRef-MIT-Style-1, or 0DocumentRef-spdx-tool-1.2:LicenseRef-MIT-Style-22SPDX License Expression. idstring = 1*(ALPHA / DIGIT / "-" / "." ) license id = <short form license identifier inAppendix I.1> license exception id = <short form license exception identifier inAppendix I.2> license ref = ["DocumentRef-"1*(idstring)":"]"LicenseRef-"1*(idstring) simple expression = license id / license id"+" / license ref compound expression = 1*1(simple expression / simple expression "WITH" license exception id / compound expression "AND" compound expression / compound expression "OR" compound expression ) / "(" compound expression ")" ) license expression = 1*1(simple expression / compound expression) ./0123456 2345./0168None16DKDeclared license. See <https://spdx.org/spdx-specification-21-web-version#h.1hmsyys&section 3.15 of SPDX Specification 2.1Note:! the NOASSERTION case is omitted.Old K' can be migrated using following rules:AllRightsReserved and UnspecifiedLicense to L4. No license specified which legally defaults to All Rights Reserved`. The package may not be legally modified or redistributed by anyone but the rightsholder. OtherLicense can be converted to  LicenseRef( pointing to the file in the package.UnknownLicense! i.e. other licenses of the form name-x.y;, should be covered by SPDX license list, otherwise use  LicenseRef. PublicDomain+ isn't covered. Consider using CC0. See  \https://wiki.spdx.org/view/Legal_Team/Decisions/Dealing_with_Public_Domain_within_SPDX_Files for more information.L=if the package contains no license information whatsoever; orM:A valid SPDX License Expression as defined in Appendix IV.N<eitherParsec "BSD-3-Clause AND MIT" :: Either String LicensegRight (License (EAnd (ELicense (ELicenseId BSD_3_Clause) Nothing) (ELicense (ELicenseId MIT) Nothing))),eitherParsec "NONE" :: Either String License Right NONEKMLKMLNoneE=      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !./0123456KMLKML2345./016      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !9Jose Iborra 2008BSD3cabal-devel@haskell.orgportableNoneS3X"Parser with simple error reporting XYZ[\]^_` XYZ[\]^_`:Duncan Coutts 2008BSD3cabal-devel@haskell.orgportableNone16_"Strict/unpacked representation of  [ShortText]bA valid Haskell module name.f Construct a b= from valid module components, i.e. parts separated by dots.gThe module name Main.hDThe individual components of a hierarchical module name. For example 1components (fromString "A.B.C") = ["A", "B", "C"]iSConvert a module name to a file path, but without any file extension. For example: )toFilePath (fromString "A.B.C") = "A/B/C"n Construct a b from a valid module name 7.This is just a convenience function intended for valid module strings. It is an error if it is used with a string that is not a valid module name. If you are parsing user input then use  instead. bcdefghi bcfhiged;None16n~Renaming applied to the modules provided by a package. The boolean indicates whether or not to also include all of the original names of modules. Thus, ModuleRenaming False []$ is "don't expose any modules, and ModuleRenaming True [( Data.Bool, Bool)]+ is, "expose all modules, but also expose  Data.Bool as Bool)". If a renaming is omitted you get the .=(NB: This is a list not a map so that we can preserve order.)"A module renaming/thinning; e.g., (A as B, C as C) brings B and C into scope.@The default renaming, bringing all exported modules into scope.Hiding renaming, e.g.,  hiding (A, B)C, bringing all exported modules into scope except the hidden ones. Interpret a ~ as a partial map from b to b7. For efficiency, you should partially apply it with ~ and then reuse it.3The default renaming, if something is specified in  build-depends only.HTests if its the default renaming; we can use a more compact syntax in < in this case.~~<None16q@A renaming on an include: (provides renaming, requires renaming)The  applied when you only  build-depends on a package.Is an  the default one?=None is parametrised bysZ which is a structure we are parsing. We need this to provide prettyprinter functionalitya type of the field.Note: We'd like to have forall s. Applicative (f s) context.Unfocus, zoom out, blur .,Field which should be defined, exactly once.#Boolean field with a default value.Optional field."Optional field with default value.Monoidal field.Values are combined with !.Note:  is a  monoidalField with Last monoid.>Parser matching all fields with a name starting with a prefix.8Known field, which we don't parse, neither pretty print.-Field which is parsed but not pretty printed.Deprecated since'Annotate field with since spec-version.(Field which can be defined at most once.(Field which can be defined at most once."Optional field with default value.>Field which can be define multiple times, and the results are mappended..Deprecated field. If found, warning is issued.Note: also it's not pretty printed!  field nameV packlens into the field field namelens into the fielddefault field namepacklens into the field field nameV pack  s a: lens into the field default value field namepacklens into the fieldfield name prefixlens into the fieldversiondeprecation message spec version default value field namelens into the field field namelens into the field field name  s a: lens into the field default value field namelens into the fielddeprecation messageSafeZn "The internal data structure for a ^, which either records the representative element of an equivalence class, or a link to the . that actually stores the representative type.A variable which can be unified; alternately, this can be thought of as an equivalence class with a distinguished representative.Mutable write to a Read the current value of .2Create a fresh equivalence class with one element.)Flatten any chains of links, returning a 8 which points directly to the canonical representation.6Return the canonical element of an equivalence class .gUnify two equivalence classes, so that they share a canonical element. Keeps the descriptor of point2.5Test if two points are in the same equivalence class.>Ian Lynagh 2007BSD3cabal-devel@haskell.orgportableNone6WCombinator for transforming verbosity level while retaining the original hidden state.*For instance, the following property holdsFisVerboseNoWrap (modifyVerbosity (max verbose) v) == isVerboseNoWrap vNote: you can use modifyVerbosity (const v1) v0 to overwrite v1's flags with v0 's flags./Turn on verbose call-site printing when we log.0Turn on verbose call-stack printing when we log.Turn on -----BEGIN CABAL OUTPUT-----I markers for output from Cabal (as opposed to GHC, or system dependent).ATurn off marking; useful for suppressing nondeterministic output.'Disable line-wrapping for log messages.Mark the verbosity as quiet$Turn on timestamps for log messages.%Turn off timestamps for log messages.+Helper function for flag enabling functions,Helper function for flag disabling functionsTurn off all flags0Test if we should output call sites when we log.1Test if we should output call stacks when we log.!Test if we should output markets.3Test if line-wrapping is disabled for log messages.Test if we had called  on the verbosity3Test if if we should output timestamps when we log.+Helper function for flag testing functions.?FIsaac Jones, Simon Marlow 2003-2004 Duncan Coutts 2008BSD3cabal-devel@haskell.orgportableNoneЗ  Does this ; place any restriction on the ! or is it in fact equivalent to <.^Note this is a semantic check, not simply a syntactic check. So for example the following is True (for all v). EisAnyVersion (EarlierVersion v `UnionVersionRanges` orLaterVersion v)This is the converse of l. It check if the version range is empty, if there is no possible version that satisfies the version range.For example this is True (for all v): FisNoVersion (EarlierVersion v `IntersectVersionRanges` LaterVersion v)6Is this version range in fact just a specific version?For example the version range ">= 3 && <= 3" contains only the version 3. Simplify a ; expression. For non-empty version ranges this produces a canonical form. Empty or inconsistent version ranges are left as-is because that provides more information."If you need a canonical form use )fromVersionIntervals . toVersionIntervals&It satisfies the following properties: 8withinRange v (simplifyVersionRange r) = withinRange v r  withinRange v r = withinRange v r' ==> simplifyVersionRange r = simplifyVersionRange r' || isNoVersion r || isNoVersion r'$The difference of two version ranges c withinRange v' (differenceVersionRanges vr1 vr2) = withinRange v' vr1 && not (withinRange v' vr2)The inverse of a version range B withinRange v' (invertVersionRange vr) = not (withinRange v' vr)@Given a version range, remove the highest upper bound. Example: (>= 1 && < 3) || (>= 4 && < 5) is converted to  (>= 1 &&  3)|| (= 4).@Given a version range, remove the lowest lower bound. Example:  (>= 1 &&  3)|| ( = 4 && < 5) is converted to  (>= 0 &&  3)|| ( = 4 && < 5).An extended variant of WK that also provides a view of the expression in which the syntactic sugar ">= v", "<= v" and  "== v.*"I is presented explicitly rather than in terms of the other basic syntax. "-any" version "== v" "> v" "< v" ">= v" "<= v""== v.*" wildcard. The function is passed the inclusive lower bound and the exclusive upper bounds of the range defined by the wildcard."^>= v" major upper bound The function is passed the inclusive lower bound and the exclusive major upper bounds of the range defined by this operator."_ || _" union "_ && _" intersection "(_)" parenthesesV !#/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\^_`stuvxwyz{|}~V !#;<=>?@ABCDEFGHIJKMLNOPQR[WYZ_`/0123456789:TVXSU\^}{yzvxwstu|~@None16ս/The "test-type" field in the test suite stanza."type: exitcode-stdio-x.y""type: detailed-x.y"'Some unknown test type e.g. "type: foo"ANone16WpThe test suite interfaces that are currently defined. Each test suite must specify which interface it supports.ZMore interfaces may be defined in future, either new revisions or totally new interfaces.Test interface "exitcode-stdio-1.0". The test-suite takes the form of an executable. It returns a zero exit code for success, non-zero for failure. The stdout and stderr channels may be logged. It takes no command line parameters and nothing on stdin.Test interface "detailed-0.9". The test-suite takes the form of a library containing a designated module that exports "tests :: [Test]".qA test suite that does not conform to one of the above interfaces for the given reason (e.g. unknown test type).BNone16 .Describes a dependency on a pkg-config library    CNone163The "benchmark-type" field in the benchmark stanza."type: exitcode-stdio-x.y",Some unknown benchmark type e.g. "type: foo"DNone16v%nThe benchmark interfaces that are currently defined. Each benchmark must specify which interface it supports.ZMore interfaces may be defined in future, either new revisions or totally new interfaces.&Benchmark interface "exitcode-stdio-1.0". The benchmark takes the form of an executable. It returns a zero exit code for success, non-zero for failure. The stdout and stderr channels may be logged. It takes no command line parameters and nothing on stdin.'uA benchmark that does not conform to one of the above interfaces for the given reason (e.g. unknown benchmark type).%&'%&'ENoneQV} 1:A monad with failure and accumulating errors and warnings.2 Destruct a 1 into the emitted warnings and either a successful value or list of errors and possibly recovered a spec-version declaration.3Recover/ the parse result, so we can proceed parsing. 2 will still result in S, if there are recorded errors.4Set cabal spec version.5Get cabal spec version.65Add a warning. This doesn't fail the parsing process.7Add multiple warnings at once.8*Add an error, but not fail the parser yet.For fatal failure use 99Add an fatal error.:A 5. 123456789: 1236789:54FThe License data type.8Isaac Jones 2003-2005 Duncan Coutts 2008BSD3cabal-devel@haskell.orgportableNone16#>Indicates the license under which a package's source code is released. Versions of the licenses not listed here will be rejected by Hackage and cause  cabal check to issue a warning.?GNU General Public License,  6https://www.gnu.org/licenses/old-licenses/gpl-2.0.html version 2 or  %https://www.gnu.org/licenses/gpl.html version 3.@ &https://www.gnu.org/licenses/agpl.html,GNU Affero General Public License, version 3.A$GNU Lesser General Public License,  7https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html version 2.1 or  &https://www.gnu.org/licenses/lgpl.html version 3.B .http://www.opensource.org/licenses/bsd-license2-clause BSD license.C /http://www.opensource.org/licenses/bsd-3-clause3-clause BSD license.D 1http://directory.fsf.org/wiki/License:BSD_4Clause4-clause BSD license. This license has not been approved by the OSI and is incompatible with the GNU GPL. It is provided for historical reasons and should be avoided.E &http://www.opensource.org/licenses/MIT MIT license.F Ahttp://www.isc.org/downloads/software-support-policy/isc-license/ ISC licenseG https://www.mozilla.org/MPL/#Mozilla Public License, version 2.0.H https://www.apache.org/licenses/Apache License, version 2.0.IZThe author of a package disclaims any copyright to its source code and dedicates it to the public domain. This is not a software license. Please note that it is not possible to dedicate works to the public domain in every jurisdiction, nor is a work that is in the public domain in one jurisdiction necessarily in the public domain elsewhere.JExplicitly 'All Rights Reserved', eg for proprietary software. The package may not be legally modified or redistributed by anyone but the rightsholder.KNo license specified which legally defaults to 'All Rights Reserved'. The package may not be legally modified or redistributed by anyone but the rightsholder.LAny other software license.M$Indicates an erroneous license name.N.The list of all currently recognised licenses.O Convert old > to SPDX K&. Non-SPDX licenses are converted to .PConvert K to >,*This is lossy conversion. We try our best.&licenseFromSPDX . licenseToSPDX $ BSD3BSD3<licenseFromSPDX . licenseToSPDX $ GPL (Just (mkVersion [3]))GPL (Just (mkVersion [3])).licenseFromSPDX . licenseToSPDX $ PublicDomain'UnknownLicense "LicenseRefPublicDomain"KlicenseFromSPDX $ SPDX.License $ SPDX.simpleLicenseExpression SPDX.EUPL_1_1UnknownLicense "EUPL-1.1"3licenseFromSPDX . licenseToSPDX $ AllRightsReservedAllRightsReserved?licenseFromSPDX <$> simpleParsec "BSD-3-Clause OR GPL-3.0-only"-Just (UnknownLicense "BSD3ClauseORGPL30only")>FECBJLI?@ADGHKMNOP>FECBJLI?@ADGHKMNOPGIsaac Jones 2003-2004BSD3libraries@haskell.orgportableNone16\cAllow overlapping class instances, provided there is a unique most specific instance for each use. jhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XOverlappingInstances]Ignore structural rules guaranteeing the termination of class instance resolution. Termination is guaranteed by a fixed-depth recursion stack, and compilation may fail if this depth is exceeded. jhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XUndecidableInstances^Implies \. Allow the implementation to choose an instance even when it is possible that further instantiation of types will lead to a more specific instance being applicable. ihttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XIncoherentInstances_ (deprecated) Deprecated in favour of `.-Old description: Allow recursive bindings in do blocks, using the rec keyword. See also `.`Allow recursive bindings in do blocks, using the rec keyword, or mdo, a variant of do. ahttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XRecursiveDoadProvide syntax for writing list comprehensions which iterate over several lists together, like the  family of functions. fhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XParallelListCompb*Allow multiple parameters in a type class. khttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XMultiParamTypeClassesc,Enable the dreaded monomorphism restriction. ohttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XNoMonomorphismRestrictiond$Allow a specification attached to a multi-parameter type class which indicates that some parameters are entirely determined by others. The implementation will check that this property holds for the declared instances, and will use this property to reduce ambiguity in instance resolution. lhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XFunctionalDependenciese (deprecated) A synonym for f.Old description: Like fZ but does not allow a higher-rank type to itself appear on the left of a function arrow. `https://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XRank2TypesfNAllow a universally-quantified type to occur on the left of a function arrow. `https://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XRankNTypesg (deprecated) A synonym for f.QOld description: Allow data constructors to have polymorphic arguments. Unlike f., does not allow this for ordinary functions. fhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#arbitrary-rank-polymorphismh1Allow existentially-quantified data constructors. ohttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XExistentialQuantificationi=Cause a type variable in a signature, which has an explicit forallQ quantifier, to scope over the definition of the accompanying value declaration. ihttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XScopedTypeVariablesjDeprecated, use i instead.k7Enable implicit function parameters with dynamic scope. dhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XImplicitParamslHRelax some restrictions on the form of the context of a type signature. fhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XFlexibleContextsmORelax some restrictions on the form of the context of an instance declaration. ghttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XFlexibleInstancesn2Allow data type declarations with no constructors. dhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XEmptyDataDeclso.Run the C preprocessor on Haskell source code. Zhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#language-pragmap]Allow an explicit kind signature giving the kind of types over which a type variable ranges. dhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XKindSignaturesqbEnable a form of pattern which forces evaluation before an attempted match, and a form of strict let/where binding. bhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XBangPatternsr&Allow type synonyms in instance heads. jhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XTypeSynonymInstancessDEnable Template Haskell, a system for compile-time metaprogramming. ehttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XTemplateHaskelltEnable the Foreign Function Interface. In GHC, implements the standard Haskell 98 Foreign Function Interface Addendum, plus some GHC-specific extensions. Zhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#language-pragmauEnable arrow notation. \https://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XArrowsv (deprecated)l Enable generic type classes, with default instances defined in terms of the algebraic structure of a type. Vhttps://haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#generic-classesw,Enable the implicit importing of the module Prelude. When disabled, when desugaring certain built-in syntax into ordinary identifiers, use whatever is in scope rather than the Prelude -- version. xhttps://haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#rebindable-syntax-and-the-implicit-prelude-importxEnable syntax for implicitly binding local names corresponding to the field names of a record. Puns bind specific names, unlike . dhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XNamedFieldPunsyDEnable a form of guard which matches a pattern and binds variables. chttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XPatternGuardszAllow a type declared with newtype to use deriving9 for any class with an instance for the underlying type. phttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XGeneralizedNewtypeDeriving{,Enable the "Trex" extensible records system. =http://haskell.org/hugs/pages/users_guide/hugs-only.html#TREX|Enable type synonyms which are transparent in some definitions and opaque elsewhere, as a way of implementing abstract datatypes. Bhttp://haskell.org/hugs/pages/users_guide/restricted-synonyms.html}HEnable an alternate syntax for string literals, with string templating. =http://haskell.org/hugs/pages/users_guide/here-documents.html~Allow the character #W as a postfix modifier on identifiers. Also enables literal syntax for unboxed values. _https://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XMagicHashcAllow data types and type synonyms which are indexed by types, i.e. ad-hoc polymorphism for types. bhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XTypeFamilies=Allow a standalone declaration which invokes the type class deriving mechanism. hhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XStandaloneDerivingpAllow certain Unicode characters to stand for certain ASCII character sequences, e.g. keywords and punctuation. chttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XUnicodeSyntax:Allow the use of unboxed types as foreign types, e.g. in foreign import and foreign export. [https://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#language-optionsEnable interruptible FFI. ^https://haskell.org/ghc/docs/latest/html/users_guide/ffi-chap.html#interruptible-foreign-calls*Allow use of CAPI FFI calling convention (foreign import capi). ^https://haskell.org/ghc/docs/latest/html/users_guide/ffi-chap.html#the-capi-calling-convention|Defer validity checking of types until after expanding type synonyms, relaxing the constraints on how synonyms may be used. ihttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XLiberalTypeSynonyms`Allow the name of a type constructor, type class, or type variable to be an infix operator. * chttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XTypeOperatorsEnable syntax for implicitly binding local names corresponding to the field names of a record. A wildcard binds all unmentioned names, unlike x. ehttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XRecordWildCardsDeprecated, use x instead.QAllow a record field name to be disambiguated by the type of the record it's in. nhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XDisambiguateRecordFields=Enable traditional record syntax (as supported by Haskell 98) `https://haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#traditional-record-syntaxVEnable overloading of string literals using a type class, much like integer literals. ghttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XOverloadedStrings{Enable generalized algebraic data types, in which type variables may be instantiated on a per-constructor basis. Implies . mhttps://haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#generalised-algebraic-data-types-gadts>Enable GADT syntax for declaring ordinary algebraic datatypes. `https://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XGADTSyntax (deprecated) Has no effect.3Old description: Make pattern bindings monomorphic. Phttps://downloads.haskell.org/~ghc/7.6.3/docs/html/users_guide/monomorphism.htmlDRelax the requirements on mutually-recursive polymorphic functions. dhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XRelaxedPolyRecEAllow default instantiation of polymorphic types in more situations. `http://downloads.haskell.org/~ghc/latest/docs/html/users_guide/ghci.html#type-defaulting-in-ghciEnable unboxed tuples. chttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XUnboxedTuplesEnable deriving for classes  and . hhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XDeriveDataTypeableEnable deriving for  and . chttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XDeriveGeneric&Enable support for default signatures. ghttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XDefaultSignatures?Allow type signatures to be specified in instance declarations. bhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XInstanceSigsVAllow a class method's type to place additional constraints on a class type variable. mhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XConstrainedClassMethodscAllow imports to be qualified by the package name the module is intended to be imported from, e.g. import "network" Network.Socket dhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XPackageImports (deprecated)A Allow a type variable to be instantiated at a polymorphic type. hhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XImpredicativeTypes (deprecated)1 Change the syntax for qualified infix operators. ahttp://www.haskell.org/ghc/docs/6.12.3/html/users_guide/syntax-extns.html#new-qualified-operatorsURelax the interpretation of left operator sections to allow unary postfix operators. fhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XPostfixOperatorscEnable quasi-quotation, a mechanism for defining new concrete syntax for expressions and patterns. ahttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XQuasiQuotes\Enable generalized list comprehensions, supporting operations such as sorting and grouping. ghttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XTransformListCompcEnable monad comprehensions, which generalise the list comprehension syntax to work for any monad. ihttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XMonadComprehensions]Enable view patterns, which match a value by applying a function and matching on the result. bhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XViewPatternsxAllow concrete XML syntax to be used in expressions and patterns, as per the Haskell Server Pages extension language:  &http://www.haskell.org/haskellwiki/HSP. The ideas behind it are discussed in the paper "Haskell Server Pages through Dynamic Loading" by Niklas Broberg, from Haskell Workshop '05.Allow regular pattern matching over lists, as discussed in the paper "Regular Expression Patterns" by Niklas Broberg, Andreas Farre and Josef Svenningsson, from ICFP '04.'Enable the use of tuple sections, e.g. (, True) desugars into x -> (x, True). chttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XTupleSectionsGAllow GHC primops, written in C--, to be imported into a Haskell file.!Support for patterns of the form n + k, where k is an integer literal. dhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XNPlusKPatternsImprove the layout rule when if expressions are used in a do block.Enable support for multi-way if -expressions. `https://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XMultiWayIfEnable support lambda-case expressions. `https://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XLambdaCaseqMakes much of the Haskell sugar be desugared into calls to the function with a particular name that is in scope. fhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XRebindableSyntaxMake forallN a keyword in types, which can be used to give the generalisation explicitly. dhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XExplicitForAll0Allow contexts to be put on datatypes, e.g. the Eq a in /data Eq a => Set a = NilSet | ConsSet a (Set a). fhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XDatatypeContextsLocal (let and where) bindings are monomorphic. dhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XMonoLocalBindsEnable deriving for the  class. chttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XDeriveFunctorEnable deriving for the  class. ghttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XDeriveTraversableEnable deriving for the  class. dhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XDeriveFoldable&Enable non-decreasing indentation for do blocks. Rhttps://haskell.org/ghc/docs/latest/html/users_guide/bugs.html#context-free-syntaxAllow imports to be qualified with a safe keyword that requires the imported module be trusted as according to the Safe Haskell definition of trust. import safe Network.Socket Shttps://haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#safe-importstCompile a module in the Safe, Safe Haskell mode -- a restricted form of the Haskell language to ensure type safety. Zhttps://www.haskell.org/ghc/docs/latest/html/users_guide/safe_haskell.html#ghc-flag--XSafeCompile a module in the Trustworthy, Safe Haskell mode -- no restrictions apply but the module is marked as trusted as long as the package the module resides in is trusted. ahttps://www.haskell.org/ghc/docs/latest/html/users_guide/safe_haskell.html#ghc-flag--XTrustworthyzCompile a module in the Unsafe, Safe Haskell mode so that modules compiled using Safe, Safe Haskell mode can't import it. \https://www.haskell.org/ghc/docs/latest/html/users_guide/safe_haskell.html#ghc-flag--XUnsafeAllow type classimplicit parameterbequality constraints to be used as types with the special kind constraint. Also generalise the  (ctxt => ty)H syntax so that any type of kind constraint can occur before the arrow. ehttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XConstraintKindsEnable kind polymorphism. _https://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XPolyKindsEnable datatype promotion. _https://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XDataKindsEnable parallel arrays syntax ([:, :]) for Data Parallel Haskell. <http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell+Enable explicit role annotations, like in (/type role Foo representational representational). ehttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XRoleAnnotationsWEnable overloading of list literals, arithmetic sequences and list patterns using the IsList type class. ehttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XOverloadedListsoEnable case expressions that have no alternatives. Also applies to lambda-case expressions if they are enabled. _https://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XEmptyCase (deprecated) Deprecated in favour of .4Old description: Triggers the generation of derived 6: instances for every datatype and type class declaration. Vhttps://haskell.org/ghc/docs/7.8.4/html/users_guide/deriving.html#auto-derive-typeable;Desugars negative literals directly (without using negate). fhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XNegativeLiterals5Allow the use of binary integer literal syntax (e.g.  0b11001001 to denote 201). dhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XBinaryLiterals>Allow the use of floating literal syntax for all instances of / , including B and G. ahttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XNumDecimals7Enable support for type classes with no type parameter. hhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XNullaryTypeClasses9Enable explicit namespaces in module import/export lists. hhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XExplicitNamespacesUAllow the user to write ambiguous types, and the type inference engine to infer them. ihttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XAllowAmbiguousTypesEnable foreign import javascript.4Allow giving names to and abstracting over patterns. ehttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XPatternSynonymsAllow anonymous placeholders (underscore) inside type signatures. The type inference engine will generate a message describing the type inferred at the hole's location. khttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XPartialTypeSignaturesAllow named placeholders written with a leading underscore inside type signatures. Wildcards with the same name unify to the same type. dhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XNamedWildCardsEnable deriving for any class. dhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XDeriveAnyClassEnable deriving for the  class. `https://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XDeriveLift.Enable support for 'static pointers' (and the staticN keyword) to refer to globally stable names, even across different programs. dhttps://www.haskell.org/ghc/docs/latest/html/users_guide/glasgow_exts.html#ghc-flag--XStaticPointersVSwitches data type declarations to be strict by default (as if they had a bang using  BangPatterns*), and allow opt-in field laziness using ~. ghttps://downloads.haskell.org/~ghc/latest/docs/html/users_guide/glasgow_exts.html#ghc-flag--XStrictDataTSwitches all pattern bindings to be strict by default (as if they had a bang using  BangPatterns*), ordinary patterns are recovered using ~ . Implies  StrictData. chttps://downloads.haskell.org/~ghc/latest/docs/html/users_guide/glasgow_exts.html#ghc-flag--XStrictAllows do-notation for types that are 8 as well as ,. When enabled, desugaring do notation tries to use ( *) and  and join as far as possible.;Allow records to use duplicated field labels for accessors.2Enable explicit type applications with the syntax id @Int.Dissolve the distinction between types and kinds, allowing the compiler to reason about kind equality and therefore enabling GADTs to be promoted to the type-level.GAllow recursive (and therefore undecideable) super-class relationships.xA temporary extension to help library authors check if their code will compile with the new planned desugaring of fail. A subset of TemplateHaskell including only quoting.Allows use of the #label syntax.WAllow functional dependency annotations on type families to declare them as injective.Allow multiple deriving, clauses, each optionally qualified with a strategy.%Enable the use of unboxed sum syntax.DAllow use of hexadecimal literal notation for floating-point values.2This represents language extensions beyond a base  definition (such as L) that are supported by some implementations, usually in some special mode.VWhere applicable, references are given to an implementation's official documentation.Enable a known extensionDisable a known extension4An unknown extension, identified by the name of its LANGUAGE pragma.+This represents a Haskell language dialect. Language ;s are interpreted relative to one of these base languages.>The Haskell 98 language as defined by the Haskell 98 report. http://haskell.org/onlinereport/BThe Haskell 2010 language as defined by the Haskell 2010 report. /http://www.haskell.org/onlinereport/haskell2010,An unknown language, identified by its name._Extensions that have been deprecated, possibly paired with another extension that replaces it. for [s is really really slow so for the Text instance what we do is make a simple table indexed off the first letter in the extension name. The extension names actually cover the range 'A'-'Z'q pretty densely and the biggest bucket is 7 so it's not too bad. We just do a linear search within each bucket.This gives an order of magnitude improvement in parsing speed, and it'll also allow us to do case insensitive matches in future if we prefer.[mzyfielo]qdvkbh~r\^_`acgjnpstuwx{|}[mzyfielo]qdvkbh~r\^_`acgjnpstuwx{|}HIsaac Jones 2003-2004BSD3cabal-devel@haskell.orgportableNone16 Compiler information used for resolving configurations. Some fields can be set to Nothing to indicate that the information is unknown. Compiler flavour and version. GTag for distinguishing incompatible ABI's on the same architecture/os. QOther implementations that this compiler claims to be compatible with, if known. 'Supported language standards, if known. Supported extensions, if known. Like  * but compatible with the old ReadS parser.IIt is compatible in the sense that it accepts only the same strings, eg GHC4 but not "ghc". However other strings get mapped to   . The point of this is that we do not allow extra valid values that would upset older Cabal versions that had a stricter parser however we cope with new values more gracefully so that we'll be able to introduce new value in future without breaking things so much. !vThe default compiler flavour to pick when compiling stuff. This defaults to the compiler used to build the Cabal lib.4However if it's not a recognised compiler then it's S= and the user will have to specify which compiler they want. #Make a CompilerInfo of which only the known information is its CompilerId, its AbiTag and that it does not claim to be compatible with other compiler id's.                        ! " #               !       #    "INone ;<=>?AQV AFilepath are parsed as  V. DThis is almost / , but it(trims whitespace from ends of the lines,4converts lines with only single dot into empty line. GVersion range or just version J)SPDX License expression or legacy license M$Version range or just version, i.e.  cabal-version field.!There are few things to consider:Starting with 2.2 the cabal-version field should be the first field in the file and only exact version is accepted. Therefore if we get e.g. >= 2.2, we fail. See ,https://github.com/haskell/cabal/issues/4899 PEither "quoted" or  un-quoted. SHaskell string or [^ ]+ VHaskell string or [^ ,]+ Y4List separated with optional commas. Displayed with sep, arguments of type a" are parsed and pretty-printed as b.Proxy, internal to this module. Z3Paragraph fill list without commas. Displayed with . \9Paragraph fill list with optional commas. Displayed with . ^3Vertical list with optional commas. Displayed with . `0Paragraph fill list with commas. Displayed with  b*Vertical list with commas. Displayed with  d d and  e are simply  YE, with additional phantom arguments to constraint the resulting type:t alaList VCat/alaList VCat :: [a] -> List VCat (Identity a) a:t alaList' FSep Token9alaList' FSep Token :: [String] -> List FSep Token String eMore general version of  d.% A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e% d e b c ` a ^ _ \ ] Z [ Y M N O G H I J K L V W X S T U P Q R D E F A B C"(c) The University of Glasgow 2004BSD3cabal-devel@haskell.orgportableNoneQVWe parse generically based on indent level and braces '{' '}'. To do that we split into lines and then '{' '}' tokens and other spans within a line.The  token is for bits that start a line, eg: "\n blah blah { blah" tokenises to: 8[Line n 2 False "blah blah", OpenBracket, Span n "blah"]cso lines are the only ones that can have nested layout, since they have a known indentation level.eg: we can't have this: if ... { } else otherubecause other cannot nest under else, since else doesn't start a line so cannot have nested layout. It'd have to be: if ... { } else other]but that's not so common, people would normally use layout or brackets not both in a single if else construct. "if ... { foo : bar } else other this is OK"span in a line, following brackets A regular  property: value fieldKA section with a name and possible parameter. The syntactic structure is:   sectionname  arg {  field* } 1A conditional block with an optional else branch:  if  condition {  field* } else {  field* } 4The 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).!Field descriptor. The parameter a< parameterizes over where the field's value is stored in.fieldSet n str x5 Parses the field value from the given input string str and stores the result in xK if the parse was successful. Otherwise, reports an error on line number n.A default unrecognized field parser which simply returns Nothing, i.e. ignores all unrecognized fields, so warnings will be generated.A default unrecognized field parser which silently (i.e. no warnings will be generated) ignores unrecognized fields, by returning the structure being built unmodified.Tokenise a single line, splitting on '{' '}' and the spans in between. Also trims leading & trailing space on those spans within the line.HParse the stream of tokens into a tree of them, based on indent / layoutParse the stream of tokens into a tree of them, based on indent This parse state expect to be in a layout context, though possibly nested within a braces context so we may still encounter closing braces.}Parse the stream of tokens into a tree of them, based on explicit braces This parse state expects to find a closing bracket.\Convert the parse tree into the Field AST Also check for dodgy uses of tabs in indentation. Convert ifthenelse s to s parse a module name(indent level of the parent/previous line'accumulating param, trees in this levelremaining tokens1collected trees on this level and trailing tokens(line of the '{', used for error messages'accumulating param, trees in this levelremaining tokens1collected trees on this level and trailing tokens 'The parser for the stuff between commas 'The parser for the stuff between commas 'The parser for the stuff between commas 'The parser for the stuff between commasL   !"#$%&'()*+,-./012 3456789:;   <=> ?LNone16KW A package name.Use   and   to convert from/to a 7.This type is opaque since  Cabal-2.0 Convert   to 7  Construct a   from a 7  is the inverse to  ANote: No validations are performed to ensure that the resulting   is valid    MNone16K 9An unqualified component name, for any kind of component.This is distinguished from a  ComponentName and  ComponentId. The former also states which of a library, executable, etc the name refers too. The later uniquely identifiers a component and its closure. Convert   to 7  Construct a   from a 7  is the inverse to  ANote: No validations are performed to ensure that the resulting   is valid 8Converts a package name to an unqualified component namewUseful in legacy situations where a package name may refer to an internal component, if one is defined with that name. 8Converts an unqualified component name to a package name  is the inverse of  .wUseful in legacy situations where a package name may refer to an internal component, if one is defined with that name.    NNone16 }This gets the underlying unqualified component name. In fact, it is guaranteed to uniquely identify a component, returning Nothing if the   was for the public library.  Convert the   of a library into a  . ONone16K "The name and version of a package. !The name of this package, eg. foo #the version of this package, eg 1.2 4Type alias so we can use the shorter name PackageId.  PNone16<K- A   for a definite package. The   invariant says that a  B identified this way is definite; i.e., it has no unfilled holes. A unit identifier identifies a (possibly instantiated) package/component that can be installed the installed package database. There are several types of components that can be installed:-A traditional library with no holes, so that  unitIdHash is Nothing. In the absence of Backpack,   is the same as a  .?An indefinite, Backpack library with holes. In this case,  unitIdHash is still NothingI, but in the install, there are only interfaces, no compiled objects.DAn instantiated Backpack library with all the holes filled in.  unitIdHash is a Just) a hash of the instantiating mapping.A unit is a component plus the additional information on how the holes are filled in. Thus there is a one to many relationship: for a particular component there are many different ways of filling in the holes, and each different combination is a unit (and has a separate  ).  is distinct from  OpenUnitId+, in that it is always installed, whereas  OpenUnitId are intermediate unit identities that arise during mixin linking, and don't necessarily correspond to any actually installed unit. Since the mapping is not actually recorded in a  H, you can't actually substitute over them (but you can substitute over  OpenUnitId). See also  Distribution.Backpack.FullUnitId0 for a mechanism for expanding an instantiated   to retrieve its mapping.lBackwards compatibility note: if you need to get the string representation of a UnitId to pass, e.g., as a  -package-id flag, use the 5 function, which will work on all versions of Cabal. 4If you need backwards compatibility, consider using 7 instead, which is supported by all versions of Cabal. @Create a unit identity with no associated hash directly from a  . YMake an old-style UnitId from a package identifier. Assumed to be for the public library =Returns library name prefixed with HS, suitable for filenames Unsafely create a   from a  .. Your responsibility is to ensure that the   invariant holds.  The textual format for  , coincides with the format GHC accepts for  -package-id. The textual format for  , coincides with the format GHC accepts for  -package-id. QNone16K4 HA module identity uniquely identifies a Haskell module by qualifying a b with the  4 which defined it. This type distinguishes between two packages which provide a module with the same name, or a module from the same package compiled with different dependencies. There are a few cases where Cabal needs to know about module identities, e.g., when writing out reexported modules in the InstalledPackageInfo.  RNone16;=KQVj6 $An explicit substitution on modules.cNB: These substitutions are NOT idempotent, for example, a valid substitution is (A -> B, B -> A).  Unlike a  , an  5 is either an ordinary module from some unit, OR an  ], representing a hole that needs to be filled in. Substitutions are over module variables. An   describes a (possibly partially) instantiated Backpack component, with a description of how the holes are filled in. Unlike  , the  ModuleSubst is kept in a structured form that allows for substitution (which fills in holes.) This form of unit cannot be installed. It must first be converted to a  .In the absence of Backpack, there are no holes to fill, so any such component always has an empty module substitution; thus we can lossly represent it as an 'OpenUnitId uid'.For a source component using Backpack, however, there is more structure as components may be parametrized over some signatures, and these "holes" may be partially or wholly filled.OpenUnitId plays an important role when we are mix-in linking, and is recorded to the installed packaged database for indefinite packages; however, for compiled packages that are fully instantiated, we instantiate   into  .(For more details see the Backpack spec Qhttps://github.com/ezyang/ghc-proposals/blob/backpack/proposals/0000-backpack.rst KIdentifies a component which may have some unfilled holes; specifying its   and its  . TODO: Invariant that  + is non-empty? See also the Text instance. mIdentifies a fully instantiated component, which has been compiled and abbreviated as a hash. The embedded  . MUST NOT be for an indefinite component; an  & is guaranteed not to have any holes. Get the set of holes ( ModuleVar) embedded in a  . eSafe constructor from a UnitId. The only way to do this safely is if the instantiation is provided.  Create a   from a  % and an instantiation with no holes. Get the set of holes ( ModuleVar) embedded in a  . RPretty-print the entries of a module substitution, suitable for embedding into a   or passing to GHC via --instantiate-with. 5Pretty-print a single entry of a module substitution.  Inverse to  dispModSubst.  Inverse to dispModSubstEntry.  Inverse to  dispModSubst.  Inverse to dispModSubstEntry. Get the set of holes ( ModuleVar) embedded in a  .. This is NOT the domain of the substitution. @When typechecking, we don't demand that a freshly instantiated  Y be compiled; instead, we just depend on the installed indefinite unit installed at the  . CTake a module substitution and hash it into a string suitable for  . Note that since this takes  , not  2, you are responsible for recursively converting   into   . See also $Distribution.Backpack.ReadyComponent. YeitherParsec "Includes2-0.1.0.0-inplace-mysql:Database.MySQL" :: Either String OpenModuleRight (OpenModule (DefiniteUnitId (DefUnitId {unDefUnitId = UnitId "Includes2-0.1.0.0-inplace-mysql"})) (ModuleName ["Database","MySQL"])) 1eitherParsec "foobar" :: Either String OpenUnitIdBRight (DefiniteUnitId (DefUnitId {unDefUnitId = UnitId "foobar"}))MeitherParsec "foo[Str=text-1.2.3:Data.Text.Text]" :: Either String OpenUnitIdRight (IndefFullUnitId (ComponentId "foo") (fromList [(ModuleName ["Str"],OpenModule (DefiniteUnitId (DefUnitId {unDefUnitId = UnitId "text-1.2.3"})) (ModuleName ["Data","Text","Text"]))]))                              SNone;=k -2Applying module substitutions to semantic objects. - . - .TNone6lJ 5 6 7 8 9 6 7 5 8 9UNonel < = < =VNone16m > ? @ A B > ? @ A BWNone16mt M N O P M N O PXNone16n \6Describes a dependency on an executable from a package \ ] ^ \ ] ^YNone16p i0Describes a dependency on a source package (API) o Simplify the ; expression in a  i. See . i j k l m n o i j k l m n oZNone16tg }Is this a default 'custom-setup' section added by the cabal-install code (as opposed to user-provided)? This field is only used internally, and doesn't correspond to anything in the .cabal file. See #3199. z { | } z { | }[Nonet z  z \Nonew} tA map of dependencies. Newtyped since the default monoid instance is not appropriate. The monoid instance uses P.  Input mapExtra constraints  "(c) The University of Glasgow 2004BSD3cabal-devel@haskell.orgportableNone{;@This is a indeed a munged package id, but the constructor name cannot be changed or the Read instance (the entire point of this type) will break.A@BCDNone345>EAn  4, annotated with where it came from in a Cabal file.FHDescription of where a module participating in mixin linking came from.GHINVARIANT: entries for ModuleName m, have msrc_module is OpenModuleVar mHEvery Module in scope at a b is annotated with the   it comes from.IA Il describes the modules and requirements that are in-scope as we are processing a Cabal package. Unlike a  ModuleShape6, there may be multiple modules in scope at the same bV; this is only an error if we attempt to use those modules to fill a requirement. A I can influence the  ModuleShape via a reexport.J An empty I.KELFMNOPQGHIRSTJUVW]None16m tA combination of a package and component name used in various legacy interfaces, chiefly bundled with a version as MungedPackageId". It's generally better to use a UnitId to opaquely refer to some compilation/packing unit, but that doesn't always work, e.g. where a "name" is needed, in which case this can be used as a fallback.Use   and   to convert from/to a 7. Convert   to 7  Construct a   from a 7  is the inverse to  ANote: No validations are performed to ensure that the resulting   is valid Computes the package name for a library. If this is the public library, it will just be the original package name; otherwise, it will be a munged package name recording the original package name as well as the name of the internal library.A lot of tooling in the Haskell ecosystem assumes that if something is installed to the package database with the package name fooJ, then it actually is an entry for the (only public) library in package foo. With internal packages, this is not necessarily true: a public library as well as arbitrarily many internal libraries may come from the same package. To prevent tools from getting confused in this case, the package name of these internal libraries is munged so that they do not conflict the public library proper. A particular case where this matters is ghc-pkg: if we don't munge the package name, the inplace registration will OVERRIDE a different internal library.We munge into a reserved namespace, "z-", and encode both the component name and the package name of an internal library using the following format:8compat-pkg-name ::= "z-" package-name "-z-" library-namedwhere package-name and library-name have "-" ( "z" + ) "-" segments encoded by adding an extra "z".cWhen we have the public library, the compat-pkg-name is just the package-name, no surprises there!    ^None16K A simple pair of a   and .   is to   as  PackageName is to  . See   for more info. @The combined package and component name. see documentation for  . /The version of this package / component, eg 1.2  See docs for ]&. this is a thin wrapper around that.  _Isaac Jones 2003-2004BSD3cabal-devel@haskell.orgportableNone16K Class of installed packages.?The primary data type which is an instance of this package is InstalledPackageInfo, but when we are doing install plans in Cabal install we may have other, installed package-like things which contain more metadata. Installed packages have exact dependencies  . 'Packages that have an installed unit ID Class of things that have a  Types in this class are all notions of a package. This allows us to have different types for the different phases that packages go though, from simple name/id, package description, configured or installed packages.;Not all kinds of packages can be uniquely identified by a  n. In particular, installed packages cannot, there may be many installed instances of the same source package. )Compatibility wrapper for Cabal pre-1.24.1 ,-. i j k l m n o `None An   is a  ,  i, etc. which is annotated with some other useful information that is useful for printing to users, etc._Invariant: if ann_id x == ann_id y, then ann_pid x == ann_pid y and ann_cname x == ann_cname y  aNone Did this come from an entry in mixins", or was implicitly generated by  build-depends? This should always return   or    bNone6ĵ QAn ABI dependency is a dependency on a library which also records the ABI hash (abiHash ) of the library it depends on.SThe primary utility of this is to enable an extra sanity when GHC loads libraries: it can check if the dependency has a matching ABI and if not, refuse to load this library. This information is critical if we are shadowing libraries; differences in the ABI hash let us know what packages get shadowed by the new version of a package.  cIsaac Jones 2003-2004BSD3cabal-devel@haskell.orgportableNone36<QV " The $prefix path variable The $bindir path variable The $libdir path variable The  $libsubdir path variable The  $dynlibdir path variable The $datadir path variable The  $datasubdir path variable The $docdir path variable The $htmldir path variable The $pkg package name path variable The $version package version path variable The $pkgid package Id path variable, eg foo-1.0 The $libname path variable "The compiler name and version, eg  ghc-6.6.1 The operating system name, eg windows or linux The CPU architecture name, eg i386 or x86_64 :The Compiler's ABI identifier, $arch-$os-$compiler-$abitag %The optional ABI tag for the compiler +The executable name; used in shell wrappers $The name of the test suite being run ,The result of the test suite being run, eg pass, fail, or error. #The name of the benchmark being run _An abstract path, possibly containing variables that need to be substituted for to get a real q. The location prefix for the copy command. when using the ${pkgroot} as prefix. The CopyToDb will adjust the paths to be relative to the provided package database when copying / installing. )The installation directories in terms of  s that contain variables.The defaults for most of the directories are relative to each other, in particular they are all relative to a single prefix. This makes it convenient for the user to override the default installation directory by only having to specify --prefix=... rather than overriding each individually. This is done by allowing $-style variables in the dirs. These are expanded by textual substitution (see  ).A few of these installation directories are split into two components, the dir and subdir. The full installation path is formed by combining the two together with /Y. The reason for this is compatibility with other Unix build systems which also support --libdir and  --datadir/. We would like users to be able to configure --libdir=/usr/lib64 for example but because by default we want to support installing multiple versions of packages and building the same package for multiple compilers we append the libsubdir to get: /usr/lib64/$libname/$compiler.{An additional complication is the need to support relocatable packages on systems which support such things, like Windows. 9The directories where we will install files for packages.We have several different directories for different types of files since many systems have conventions whereby different types of files in a package are installed in different directories. This is particularly the case on Unix style systems. foreign libraries 5Substitute the install dir templates into each other.To prevent cyclic substitutions, only some variables are allowed in particular dir templates. If out of scope vars are present, they are not substituted for. Checking for any remaining unsubstituted vars can be done as a subsequent operation.-The reason it is done this way is so that in   we can replace   with the   and get resulting  s that still have the  U in them. Doing this makes it each to check which paths are relative to the $prefix. Convert from abstract install directories to actual absolute ones by substituting for all the variables in the abstract paths, to get real absolute path. BCheck which of the paths are relative to the installation $prefix.If any of the paths are not relative, ie they are absolute paths, then it prevents us from making a relocatable package (also known as a "prefix independent" package).  Convert a q to a   including any template vars. 7Convert back to a path, any remaining vars are included =The initial environment has all the static stuff but no paths@                        @                        dNone16 n <Describes a legacy  `build-tools`"-style dependency on an executableIt is "legacy" because we do not know what the build-tool referred to. It could refer to a pkg-config executable (PkgconfigName), or an internal executable (UnqualComponentName). Thus the name is stringly typed. < = < =eNone16 3% Jcomponent is buildable here KTools needed to build this bit.This is a legacy field that  L larely supersedes.CUnless use are very sure what you are doing, use the functions in $Distribution.Simple.BuildToolDepends, rather than accessing this field directly. L&Haskell tools needed to build this bitThis field is better than  KH because it allows one to precisely specify an executable in a package.CUnless use are very sure what you are doing, use the functions in $Distribution.Simple.BuildToolDepends, rather than accessing this field directly. M'options for pre-processing Haskell code Noptions for assmebler Ooptions for C-- compiler Poptions for C compiler Qoptions for C++ compiler Roptions for linker S!pkg-config packages that are used Tsupport frameworks for Mac OS X U#extra locations to find frameworks. VAssembly files. W C-- files. [.where to look for the Haskell module hierarchy \non-exposed or non-main modules ]5exposed modules that do not have a source file (e.g. GHC.Prim from ghc-prim package) ^Fnot present on sdist, Paths_* or user-generated with a custom Setup.hs _+language used when not explicitly specified `'other languages used within the package a'language extensions used by all modules b1other language extensions used within the package c*the old extensions field, treated same as  a dKwhat libraries to link with when compiling a program that uses your package eAif present, overrides extraLibs when package is loaded with GHCi. fif present, adds libs to hs-lirbaries, which become part of the package. Example: the Cffi library shipping with the rts, alognside the HSrts-1.0.a,.o,... Example 2: a library that is being built by a foreing tool (e.g. rust) and copied and registered together with this library. The logic on how this library is built will have to be encoded in a custom Setup for now. Oherwise cabal would need to lear how to call arbitary lirbary builders. gaHidden Flag. This set of strings, will be appended to all lirbaries when copying. E.g. [libHS name_ flavour` | flavour <- extraLibFlavours]. This should only be needed in very specific cases, e.g. the rtsP package, where there are multiple copies of slightly differently built libs. idirectories to find .h files j'The .h files to be found in includeDirs k$.h files to install with the package p@Custom fields starting with x-, stored in a simple assoc-list. q7Dependencies specific to a library or executable target tThe s used by this component uThe +s that are used somewhere by this component vThe  Extensions/ that are used by all modules in this component wKWhether any modules in this component use Template Haskell or Quasi Quotes x1Select options for a particular Haskell compiler.4 H I i l j J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h k m n o p q r s t u v w x y z {4 H I i l j J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h k m n o p q r s t u v w x y z {fNone16 [  2 is mechanism that hooks can use to override the  Hs inside packages. One example use-case (which is used in core libraries today) is as a way of passing flags which are computed by a configure script into Cabal. In this case, the autoconf build type adds hooks to read in a textual  ' format prior to doing any operations.TQuite honestly, this mechanism is a massive hack since we shouldn't be editing the PackageDescription data structure (it's easy to assume that this data structure shouldn't change and run into bugs, see for example 1c20a6328579af9e37677d507e2e9836ef70ab9d). But it's a bit convenient, because there isn't another data structure that allows adding extra  H style things.=In any case, a lot of care has to be taken to make sure the   is applied to the PackageDescription&. In general this process occurs in Distribution.SimpleV, which is responsible for orchestrating the hooks mechanism. The general strategy: &We run the pre-hook, which produces a  D (e.g., in the Autoconf case, it reads it out from a file).4We sanity-check the hooked build info with sanityCheckHookedBuildInfo.We update our PackageDescription. (either freshly read or cached from LocalBuildInfo) with updatePackageDescription.FIn principle, we are also supposed to update the copy of the PackageDescription stored in LocalBuildInfo at  localPkgDescrm. Unfortunately, in practice, there are lots of Custom setup scripts which fail to update  localPkgDescr so you really shouldn't rely on it. It's not DEPRECATED because there are legitimate uses for it, but... yeah. Sharp knife. See  ,https://github.com/haskell/cabal/issues/3606, for more information on the issue.*It is not well-specified whether or not a  1 applied at configure time is persistent to the LocalBuildInfo. The fact that   is passed to confHook MIGHT SUGGEST that the   is applied at this time, but actually since 9317b67e6122ab14e53f81b573bd0ecb388eca5a it has been ONLY used to create a modified package description that we check for problems: it is never actually saved to the LBI. Since   is applied monoidally to the existing build infos (and it is not an idempotent monoid), it could break things to save it, since we are obligated to apply any new  y and then we'd get the effect twice. But this does mean we have to re-apply it every time. Hey, it's more flexibility.  gNone \ Classy lenses for  H., H , H hNone16 ` &A "test-suite" stanza in a cabal file. +Get all the module names from a test suite. QGet all the auto generated module names from a test suite. This are a subset of  . iNone ag  jNone16 o) What sigs need implementations? $Is the lib to be exposed by default? NGet all the module names from the library (exposed and internal modules) which are explicitly listed in the package description which would need to be compiled. (This does not include reexports, which do not need to be compiled.) This may not include all modules for which GHC generated interface files (i.e., implicit modules.) `Get all the auto generated module names from the library, exposed or not. This are a subset of  . !Backwards-compatibility shim for  %. In most cases, you actually want  allLibModules, which returns all modules that will actually be compiled, as opposed to those which are explicitly listed in the package description ( *); unfortunately, the type signature for  allLibModules" is incompatible since we need a ComponentLocalBuildInfo. kNone o  lNone16  A foreign library stanza is like a library stanza, except that the built code is intended for consumption by a non-Haskell client. Name of the foreign library 9What kind of foreign library is this (static or dynamic). _What options apply to this foreign library (e.g., are we merging in all foreign dependencies.) +Build information for this foreign library. Libtool-style version-info data to compute library version. Refer to the libtool documentation on the current:revision:age versioning scheme. Linux library version *(Windows-specific) module definition files{This is a list rather than a maybe field so that we can flatten the condition trees (for instance, when creating an sdist)  Construct   from (current, revision, age) numbers.For instance, mkLibVersionInfo (3,0,0) constructs a   representing the version-info 3:0:0.,All version components must be non-negative.  From a given  , extract the (current, revision, age) numbers. &Given a version-info field, produce a major.minor.build version #Given a version-info field, return "major.minor.build" as a 7  Return the major! version of a version-info field. An empty foreign library. %Modules defined by a foreign library. Is the foreign library shared? 1Get a version number for a foreign library. If we're on Linux, and a Linux version is specified, use that. If we're on Linux, and libtool-style version-info is specified, translate that field into appropriate version numbers. Otherwise, this feature is unsupported so we don't return any version data.  mNone Y            nNone16  $Get all the module names from an exe JGet all the auto generated module names from an exe This are a subset of  .                  oNone 2  ' ( )  ' ( )pNone16 9 *%A "benchmark" stanza in a cabal file. 1*Get all the module names from a benchmark. 2PGet all the auto generated module names from a benchmark. This are a subset of  1. * + , - . / 0 1 2 * + , - . / 0 1 2qNone6  E0Is a component buildable (i.e., not marked with buildable: False)? See also this note in IDistribution.Types.ComponentRequestedSpec#buildable_vs_enabled_components. = > ? @ A B C D E F G = > ? @ A B C D E F GrNone6  M0A reason explaining why a component is disabled. RSDescribes what components are enabled by user-interaction. See also this note in IDistribution.Types.ComponentRequestedSpec#buildable_vs_enabled_components. WfThe default set of enabled components. Historically tests and benchmarks are NOT enabled by default. X3Is this component enabled? See also this note in IDistribution.Types.ComponentRequestedSpec#buildable_vs_enabled_components. Y8Is this component name enabled? See also this note in IDistribution.Types.ComponentRequestedSpec#buildable_vs_enabled_components. Z+Is this component disabled, and if so, why?X0Is this component name disabled, and if so, why? M N O P Q R S T U V W X Y Z R S T U V M N O P Q W Y X ZsIsaac Jones 2003-2005BSD3cabal-devel@haskell.orgportableNone16<QV  `:This data type is the internal representation of the file  pkg.cabal. It contains two kinds of information about the package: information which is needed for all packages, such as the package name and version, and information which is needed for the simple build system only, such as the compiler options and library name. bThe version of the Cabal spec that this package description uses. For historical reasons this is specified with a version range but only ranges of the form >= vq make sense. We are in the process of transitioning to specifying just a single version, not a range. See also  . o"A one-line summary of this package p*A more verbose description of this package r@Custom fields starting with x-, stored in a simple assoc-list. s#YOU PROBABLY DON'T WANT TO USE THIS FIELD. This field is special! Depending on how far along processing the PackageDescription we are, the contents of this field are either nonsense, or the collected dependencies of *all* the components in this package. buildDepends is initialized by  finalizePD and flattenPackageDescription3; prior to that, dependency info is stored in the CondTree built around a GenericPackageDescriptionK. When this resolution is done, dependency info is written to the inner  H\ and this field. This is all horrible, and #2066 tracks progress to get rid of this field. t The original  build-type value as parsed from the .cabal# file without defaulting. See also  . OThe version of the Cabal spec that this package should be interpreted against.Historically we used a version range but we are switching to using a single version. Currently we accept either. This function converts into a single version by ignoring upper bounds in the version range.   The SPDX LicenseExpression of the package. See  . UThe range of versions of the Cabal tools that this package is intended to work with.This function is deprecated and should not be used for new purposes, only to support old packages that rely on the old interpretation. The effective  build-type! after applying defaulting rules. The original  build-type value parsed is stored in the  t field. However, the  build-typeU field is optional and can therefore be empty in which case we need to compute the  effective  build-type;. This function implements the following defaulting rules:For cabal-version:2.0 and below, default to the Custom build-type unconditionally.Otherwise, if a  custom-setup' stanza is defined, default to the Custom build-type; else default to Simple build-type. 2Does this package have a buildable PUBLIC library? %Does this package have any libraries? If the package description has a buildable library section, call the given function with the library build info as argument. You probably want  withLibLBI if you have a LocalBuildInfo, see the note in IDistribution.Types.ComponentRequestedSpec#buildable_vs_enabled_components for more information. 'does this package have any executables? %Perform the action on each buildable  1 in the package description. You probably want  withExeLBI if you have a LocalBuildInfo, see the note in IDistribution.Types.ComponentRequestedSpec#buildable_vs_enabled_components for more information. 'Does this package have any test suites? $Perform an action on each buildable  " in a package. You probably want  withTestLBI if you have a LocalBuildInfo, see the note in IDistribution.Types.ComponentRequestedSpec#buildable_vs_enabled_components for more information. &Does this package have any benchmarks? $Perform an action on each buildable  *" in a package. You probably want  withBenchLBI if you have a LocalBuildInfo, see the note in IDistribution.Types.ComponentRequestedSpec#buildable_vs_enabled_components for more information. -Does this package have any foreign libraries? %Perform the action on each buildable   in the package description. All  H in the  `6: libraries, executables, test-suites and benchmarks.'Useful for implementing package checks. Return all of the  HOs of enabled components, i.e., all of the ones that would be built if you run  ./Setup build. "All the components in the package. XA list of all components in the package that are buildable, i.e., were not marked with buildable: FalseQ. This does NOT indicate if we are actually going to build the component, see   instead. 9A list of all components in the package that are enabled.< ` a c p v b d e f g h i j k l m n o q r s t u w x y z { | } ~  < ` a c p v b d e f g h i j k l m n o q r s t u w x y z { | } ~  tNone ` ` uNone16<K  A ConfVar# represents the variable type used. A  " is a total or partial mapping of  s to >j flag values. It represents the flags chosen by the user or discovered during configuration. For example --flags=foo --flags=-bar becomes [("foo", True), ("bar", False)] A  1 is the name of a user-defined configuration flagUse   and   to convert from/to a 7.This type is opaque since  Cabal-2.0 A flag can represent a feature to be included, or a way of linking a target against its dependencies, or in fact whatever you can think of. A  % initialized with default parameters.  Construct a   from a 7  is the inverse to  ANote: No validations are performed to ensure that the resulting   is valid Convert   to 7Y*Combines pairs of values contained in the   Map.cThe last flag specified takes precedence, and we record the number of times we have seen the flag.  Construct a  ! from a list of flag/value pairs.`If duplicate flags occur in the input list, the later entries in the list will take precedence. Deconstruct a  ! into a list of flag/value pairs.   (  fa) ==> (  .   ) fa == fa  Test whether   is empty. Lookup the value for a flagReturns S$ if the flag isn't contained in the  . -Insert or update the boolean value of a flag.&If the flag is already present in the  FlagAssigment, the value will be updated and the fact that multiple values have been provided for that flag will be recorded so that a warning can be generated later on. +Remove all flag-assignments from the first  # that are contained in the second  NB/TODO: This currently only removes flag assignments which also match the value assignment! We should review the code which uses this operation to figure out if this it's not enough to only compare the flagnames without the values.  Find the  's that have been listed more than once. +String representation of a flag-value pair.  Pretty-prints a flag assignment. Parses a flag assignment. Parses a flag assignment.   & & vNone                                   wNone M !Parse _  A from section arguments provided by parsec based outline parser. ! !xNone  * " # $ * " # $None  < = z H        ' ( ) * `                 " # $Isaac Jones 2003-2005BSD3cabal-devel@haskell.orgportableNone 3_`abcdefg}~ !~%&' > ? @ A B z { | } H I i l j J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h k m n o p q r s t u v w x y z {          * + , - . / 0 1 2 ` a c p v b d e f g h i j k l m n o q r s t u w x y z { | } ~   ` a c p v b d e f g h i j k l m n o q r s t u w x y z { | } ~   ! ~ > ? @ A B            * + , - .%&' 0 / 1 2 H I i l j J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h k m n o p q r s t u v w x y z { }~ _`abcdefg z { | }yNone 8 %ODesugar a "build-tools" entry into proper a executable dependency if possible.*An entry can be so desguared in two cases: The name in build-tools matches a locally defined executable. The executable dependency produced is on that exe in the current package.The name in build-tools matches a hard-coded set of known tools. For now, the executable dependency produced is one an executable in a package of the same, but the hard-coding could just as well be per-key.The first cases matches first. &mGet everything from "build-tool-depends", along with entries from "build-tools" that we know how to desugar.AThis should almost always be used instead of just accessing the  L field directly. 'ADoes the given executable dependency map to this current package?8This is a tiny function, but used in a number of places.'This function is only sound to call on  Hs from the given package description. This is because it just filters the package names of each dependency, and does not check whether version bounds in fact exclude the current package, or the referenced components in fact exist in the current package.@This is OK because when a package is loaded, it is checked (in _}) that dependencies matching internal components do indeed have version bounds accepting the current package, and any depended-on component in the current package actually exists. In fact this check is performed by gathering the internal tool dependencies of each component of the package according to this module, and ensuring those properties on each so-gathered dependency.version bounds and components of the package are unchecked. This is because we sanitize exe deps so that the matching name implies these other conditions. (DGet internal "build-tool-depends", along with internal "build-tools"^This is a tiny function, but used in a number of places. The same restrictions that apply to  ' also apply to this function. % & ' ( % & ' (zNone6 9E ) * , + ) * , +{None16FT ; P overrides  O a5Returns the munged package name, which we write into name- for compatibility with old versions of GHC.5 ) * + , 6 7 ; > _ U H 8 F V W Y Z \ K ? @ A B C D E G Q 9 : < = I J L M N O P R S T X [ ] ^ ` a b5 6 7 ; > _ U H 8 F V W Y Z \ K ? @ A B C D E G Q 9 : < = I J L M N O P R S T X [ ] ^ b ` a ) * + ,|None =) 6 n o p q r s t u v w x y z { | } ~  ) 6 n o p q r s t u v w x y z { | } ~  "(c) The University of Glasgow 2004BSD3cabal-devel@haskell.orgportableNone @?Safe @sZ[\]^_`a#Isaac Jones, Simon Marlow 2003-2004=BSD3 portions Copyright (c) 2007, Galois Inc.cabal-devel@haskell.orgportableNone6<QV HE Advanced options for   and  . Keep temporary files? %No glob at all, just an ordinary file dir prefix and extension, like "foo/bar/*.baz" corresponds to FileGlob "foo/bar" ".baz"b/When should we output the marker? Things like   always get marked, but a c5 will only be output if we're not a quiet verbosity.dWhen should we emit the call stack? We always emit for internal errors, emit the trace for errors when we are in verbose mode, and otherwise only emit it if explicitly asked for using the  +callstack# verbosity flag. (At the moment, e is not used.fTag an s= whose error string should be output to the screen verbatim.g Check if an s% should be output verbatim to screen.h Create a r) whose error text will be output verbatim Given a block of IO code that may raise an exception, annotate it with the metadata from the current scope. Use this as close to external code that raises IO exceptions as possible, since this function unconditionally wraps the error message with a trace (so it is NOT idempotent.)iBC wrapper around u. CNon fatal conditions that may be indicative of an error or problem.We display these at the  verbosity level. Useful status messages.We display these at the  verbosity level.This is for the ordinary helpful status messages that users see. Just enough information to know that things are working but not floods of detail. Display a message at ( verbosity level, but without wrapping. Pretty-print a j status message at : verbosity level. Use this if you need fancy formatting. KDisplay a "setup status message". Prefer using setupMessage' if possible. ,More detail on the operation of some action.6We display these messages when the verbosity level is  'Detailed internal debugging information6We display these messages when the verbosity level is   A variant of  Y that doesn't perform the automatic line wrapping. Produces better output in some cases. XPerform an IO action, catching any IO exceptions and printing an error if one occurs. !Run an IO computation, returning e- if it raises a "file does not exist" error.kWraps text unless the +nowrap verbosity flag is activelPrepends a timestamp if  +timestamp verbosity flag is setThis is used by mnWrap output with a marker if  +markoutput verbosity flag is set.NB: Why is markoutput done with start/end markers, and not prefixes? Markers are more convenient to add (if we want to add prefixes, we have to  and then ; here's it's just some concatenates). Note that even in the prefix case, we can't guarantee that the markers are unambiguous, because some of Cabal's output comes straight from external programs, where we don't have the ability to interpose on the output.This is used by moVAppend a trailing newline to a string if it does not already have a trailing newline.p8Prepend a call-site and/or call-stack based on VerbosityqbDetermine if we should emit a call stack. If we trace, it also emits any prefix we should append.m/Add all necessary metadata to a logging message $Run a command and return its output.8The output is assumed to be text in the locale encoding. Run a command and return its output, errors and exit status. Optionally also supply some input. Also provides control over whether the binary/text mode of the input and output. Look for a program on the path. Look for a program and try to find it's version number. It can accept either an absolute path or the name of a program binary, in which case we will look for the program on the path. Like the Unix xargs program. Useful for when we've got very long command lines that might overflow an OS limit on command line length and so you need to invoke a command multiple times to get all the args in.@Use it with either of the rawSystem variants above. For example: @xargs (32*1024) (rawSystemExit verbosity) prog fixedArgs bigArgs JFind a file by looking in a search path. The file path must match exactly. Find a file by looking in a search path with one of a list of possible file extensions. The file base name should be given and it will be tried with each of the extensions in each element of the search path. Like  x but returns which element of the search path the file was found in, and the file path relative to that base directory. @Finds the files corresponding to a list of Haskell module names.As   but for a list of module names. 5Find the file corresponding to a Haskell module name.This is similar to  j but specialised to a module name. The function fails if the file corresponding to the module is missing. 9List all the files in a directory and all subdirectories.The order places files in sub-directories after all the files in their parent directories. The list is generated lazily so is not well defined if the source directory structure changes before the list is used. ,Is this directory in the system search path? (Compare the modification times of two files to see if the first is newer than the second. The first file must exist but the second need not. The expected use case is when the second file is generated using the first. In this use case, if the result is True then the second file is out of date. Like  -, but also checks that the first file exists. Same as createDirectoryIfMissing% but logs at higher verbosity levels. Copies a file without copying file permissions. The target file is created with default permissions. Any existing target file is replaced.3At higher verbosity levels it logs an info message. Install an ordinary file. This is like a file copy but the permissions are set appropriately for an installed file. On Unix it is "-rw-r--r--" while on Windows it uses the default permissions for the target directory. Install an executable file. This is like a file copy but the permissions are set appropriately for an installed file. On Unix it is "-rwxr-xr-x" while on Windows it uses the default permissions for the target directory. EInstall a file that may or not be executable, preserving permissions. Given a relative path to a file, copy it to the given directory, preserving the relative path and creating the parent directories if needed.rCommon implementation of  ,  ,   and  . Copies a bunch of files to a target directory, preserving the directory structure in the target location. The target directories are created if they do not exist.The files are identified by a pair of base directory and a path relative to that base. It is only the relative part that is preserved in the destination. For example: RcopyFiles normal "dist/src" [("", "src/Foo.hs"), ("dist/build/", "src/Bar.hs")]qThis would copy "src/Foo.hs" to "dist/src/src/Foo.hs" and copy "dist/build/src/Bar.hs" to "dist/src/src/Bar.hs".This operation is not atomic. Any IO failure during the copy (including any missing source files) leaves the target in an unknown state so it is best to use it with a freshly created directory so that it can be simply deleted if anything goes wrong.  This is like   but uses  .  This is like   but uses  .  This is like   but uses  . This installs all the files in a directory to a target location, preserving the directory layout. All the files are assumed to be ordinary rather than executable files. ?Recursively copy the contents of one directory to another path. Like s., but also checks that the file is executable. 4Use a temporary filename that doesn't already exist.  A version of   that additionally takes a   argument. %Create and use a temporary directory.Creates a new temporary directory inside the given directory, making use of the template. The temp directory is deleted after use. For example: >withTempDirectory verbosity "src" "sdist." $ \tmpDir -> do ...The tmpDir: will be a new subdirectory of the given directory, e.g.  src/sdist.342.  A version of   that additionally takes a   argument. Write a file but only if it would have new content. If we would be writing the same as the existing content then leave the file as is so that we do not update the file's modification time.,NB: the file is assumed to be ASCII-encoded. DThe path name that represents the current directory. In Unix, it's "."D, but this is system-specific. (E.g. AmigaOS uses the empty string "" for the current directory.) "Drop the extension if it's one of   , or return the path unchanged. DList of possible executable file extensions on the current platform. Package description file (pkgname.cabal) DFind a package description file in the given directory. Looks for .cabal files. Like   , but calls   in case of error. -Optional auxiliary package information file (pkgname .buildinfo) FFind auxiliary package information in the given directory. Looks for  .buildinfo files. .a description of the action we were attemptingthe action itself New working dir or inheritNew environment or inheritstdinstdoutstderr New working dir or inheritNew environment or inheritstdinstdoutstderr7Any handles created for stdin, stdout, or stderr with  CreateProcess, and a handle to the process. Program location ArgumentsNew working dir or inheritNew environment or inheritinput text and binary modeoutput in binary modeoutput, errors, exit  version args8function to select version number from program outputlocation search locations File Name "build prefix (location of objects)search suffixesmodules "build prefix (location of objects)search suffixesmodule Create its parents too? Temp dir to create the file inFile name template. See 1. Temp dir to create the file inFile name template. See 1.  Where to look pkgname.cabal Directory to searchdir/pkgname .buildinfo , if present{)* {  )*  }None1 ^ %NubListR : A right-biased version of   . That is +toNubListR ["-XNoFoo", "-XFoo", "-XNoFoo"] will result in ["-XFoo", "-XNoFoo"], unlike the normal  ), which is left-biased. Built on top of  and . ANubList : A de-duplicated list that maintains the original order. 'Smart constructor for the NubList type. 7Lift a function over lists to a function over NubLists.t1Helper used by NubList/NubListR's Read instances. (Smart constructor for the NubListR type. 8Lift a function over lists to a function over NubListRs. >Binary instance for 'NubList a' is the same as for '[a]'. For G6, we just pull off constructor and put the list. For F, we get the list and make a   out of it using  . Monoid operations on NubLists. For a valid Monoid instance we need to satistfy the required monoid laws; identity, associativity and closure.'Identity : by inspection: mempty ! NubList xs == NubList xs ! mempty1Associativity : by inspection: (NubList xs ! NubList ys) ! NubList zs == NubList xs ! (NubList ys ! NubList zs)dClosure : appending two lists of type a and removing duplicates obviously does not change the type.  ~None<KQV The 4 monad with specialized logging and error messages.Run !, outputting traces according to ,   if there is an error."Output a warning trace message in .)Output an informational trace message in .+Fail the computation with an error message.u:Format a message with context. (Something simple for now.)+Add a message to the error/warning context.(c) Sergey Vinokurov 2017 BSD3-stylecabal-devel@haskell.orgNone<QV  -Working directory to create response file in. Template for response file name.+Encoding to use for response file contents.$Arguments to put into response file.  Duncan Coutts 2013cabal-devel@haskell.orgportableNone6<QV @ A specific dir The system default OA search path to use when locating executables. This is analogous to the unix $PATH or win32 %PATH%Q but with the ability to use the system default method for finding executables (v) which on unix is simply looking on the $PATH* but on win32 is a bit more complicated).The default to use is [ProgSearchPathDefault] but you can add extra dirs either before, after or instead of the default, e.g. here we add an extra dir to search after the usual ones. 8['ProgramSearchPathDefault', 'ProgramSearchPathDir' dir] Interpret a   to construct a new $PATHx env var. Note that this is close but not perfect because on Windows the search algorithm looks at more than just the %PATH%.=Get the system search path. On Unix systems this is just the $PATH6 env var, but on windows it's a bit more complicated.        )Isaac Jones 2006, Duncan Coutts 2007-2009cabal-devel@haskell.orgportableNone16<QV 9Where a program was found. Also tells us whether it's specified by user or not. This includes not just the path, but the program as well.HThe user gave the path to this program, eg. --ghc-path=/usr/bin/ghc-6.6$The program was found automatically.KRepresents a program which has been configured and is thus ready to be run.(These are usually made by configuring a $=, but if you have to construct one directly then start with - and override any extra fields.Just the name again,The version of this program, if it is known.Default command-line args for this program. These flags will appear first on the command line, so they can be overridden by subsequent flags.Override command-line args for this program. These flags will appear last on the command line, so they override all earlier flags.Override environment variables for this program. These env vars will extend/override the prevailing environment of the current to form the environment for the new process. A key-value map listing various properties of the program, useful for feature detection. Populated during the configuration step, key names depend on the specific program.!Location of the program. eg. /usr/bin/ghc-6.4"In addition to the !" where the program was found, these are additional locations that were looked at. The combination of ths found location and these not-found locations can be used to monitor to detect when the re-configuring the program might give a different result (e.g. found in a different location).$-Represents a program which can be configured.9Note: rather than constructing this directly, start with , and override any extra fields.&'The simple name of the program, eg. ghc'zA function to search for the program if its location was not specified by the user. Usually this will just be a call to .It is supplied with the prevailing search path which will typically just be used as-is, but can be extended or ignored as needed.For the purpose of change monitoring, in addition to the location where the program was found, it returns all the other places that were tried.(Try to find the version of the program. For many programs this is not possible or is not necessary so it's OK to return Nothing.)A function to do any additional configuration after we have located the program (and perhaps identified its version). For example it could add args, or environment vars.*&The full path of a configured program.+/Suppress any extra arguments added by the user.,Make a simple named program.By default we'll just search for it in the path and not try to find the version name. You can override these behaviours if necessary, eg: L(simpleProgram "foo") { programFindLocation = ... , programFindVersion ... }-Make a simple . 2simpleConfiguredProgram "foo" (FoundOnSystem path)     !"#$%&'()*+,-$%&'()    , !"*+#-Duncan Coutts 2009cabal-devel@haskell.orgportableNone<QV M/<7Represents a specific invocation of a specific program.This is used as an intermediate type between deciding how to call a program and actually doing it. This provides the opportunity to the caller to adjust how the program will be called. These invocations can either be run directly or turned into shell or batch scripts.LeReturn the current environment extended with the given overrides. If an entry is specified twice in  overrides%, the second entry takes precedence.MLike the unix xargs program. Useful for when we've got very long command lines that might overflow an OS limit on command line length and so you need to invoke a command multiple times to get all the args in.It takes four template invocations corresponding to the simple, initial, middle and last invocations. If the number of args given is small enough that we can get away with just a single invocation then the simple one is used:  $ simple argsIf the number of args given means that we need to use multiple invocations then the templates for the initial, middle and last invocations are used: I$ initial args_0 $ middle args_1 $ middle args_2 ... $ final args_n9:;<=>?@ABCDEFGHIJKLM<=>?@ABCDE9:;FGHMIJKLDuncan Coutts 2009cabal-devel@haskell.orgportableNone RPNoGenerate a system script, either POSIX shell script or Windows batch file as appropriate for the given system.O5Generate a POSIX shell script that invokes a program.P5Generate a Windows batch file that invokes a program.NOPNOPThomas Tuegel 2011cabal-devel@haskell.orgportableNone<QV `Q%Invoke hpc with the given parameters.TPrior to HPC version 0.7 (packaged with GHC 7.8), hpc did not handle multiple .mix paths correctly, so we print a warning, and only pass it the first path in the list. This means that e.g. test suites that import their library as a dependency can still work, but those that include the library modules directly (in other-modules) don't.QPath to .tix filePaths to .mix file directories(Path where html output should be located&List of modules to exclude from reportwPath to .tix filePaths to .mix file directories)Path where html output should be located'List of modules to exclude from reportRPaths to .tix filesPath to resultant .tix file%List of modules to exclude from unionxPaths to .tix filesPath to resultant .tix file%List of modules to exclude from unionQRQR)Isaac Jones 2006, Duncan Coutts 2007-2009cabal-devel@haskell.orgportableNone czSUThe default list of programs. These programs are typically used internally to Cabal.STUVWXYZ[\]^_`abcdefghijklmnopSTVUWXYZ[\_`]cdeabfghijklmnop^)Isaac Jones 2006, Duncan Coutts 2007-2009cabal-devel@haskell.orgportableNone1<QV qThe configuration is a collection of information about programs. It contains information both about configured programs and also about programs that we are yet to configure.The idea is that we start from a collection of unconfigured programs and one by one we try to configure them at which point we move them into the configured collection. For unconfigured programs we record not just the $C but also any user-provided arguments and location for the program.tThe 'Read'\/'Show' and H1 instances do not preserve all the unconfigured Programs because $ is not in 'Read'\/'Show'D because it contains functions. So to fully restore a deserialised q. use this function to add back all the known $s.IIt does not add the default programs, but you probably want them, use S) in addition to any extra you might need.u/Add a known program that we may configure lateryGet the current   used by the q. This is the default list of locations where programs are looked for when configuring them. This can be overridden for specific programs (with |f), and specific known programs can modify or ignore this search path in their own configuration code.zChange the current   used by the q}. This will affect programs that are configured from here on, so you should usually set it before configuring any programs.{Modify the current   used by the q. This will affect programs that are configured from here on, so you should usually modify it before configuring any programs.|User-specify this path. Basically override any path information for this program in the configuration. If it's not a known program ignore it.~User-specify the arguments for this program. Basically override any args information for this program in the configuration. If it's not a known program, ignore it..Like |) but for a list of progs and their paths.Like |( but for a list of progs and their args.yFGet the path that has been previously specified for a program, if any.EGet any extra args that have been previously specified for a program. Try to find a configured program,Update a configured program in the database.List all configured programs.Try to configure a specific program. If the program is already included in the collection of unconfigured programs then we use any user-supplied location and arguments. If the program gets configured successfully it gets added to the configured collection.Note that it is not a failure if the program cannot be configured. It's only a failure if the user supplied a location and the program could not be found at that location.The reason for it not being a failure at this stage is that we don't know up front all the programs we will need, so we try to configure them all. To verify that a program was actually successfully configured use .z$Configure a bunch of programs using  . Just a \.rUnconfigure a program. This is basically a hack and you shouldn't use it, but it can be handy for making sure a  actually reconfigures.JTry to configure all the known programs that have not yet been configured.\reconfigure a bunch of programs given new user-specified args. It takes the same inputs as | and ~- and for all progs with a new path it calls .;Check that a program is configured and available to be run.lIt raises an exception if the program could not be configured, otherwise it returns the configured program.;Check that a program is configured and available to be run.mAdditionally check that the program version number is suitable and return it. For example you could require < or L ( [1,0] [])NIt returns the configured program, its version number and a possibly updated qb. If the program could not be configured or the version is unsuitable, it returns an error value.Like O, but raises an exception in case of error instead of returning 'Left errMsg'.4Note that this instance does not preserve the known $s. See t for details.4Note that this instance does not preserve the known $s. See t for details.4Note that this instance does not preserve the known $s. See t for details.| Program name"user-specified path to the program~ Program nameuser-specified argsqrstuvwxyz{|}~qrstuvwxyz{|}~)Isaac Jones 2006, Duncan Coutts 2007-2009cabal-devel@haskell.orgportableNone<QV I"Runs the given configured program.6Runs the given configured program and gets the output.?Looks up the given program in the program database and runs it.?Looks up the given program in the program database and runs it. VerbosityThe program to runAny extra arguments to add VerbosityThe program to runAny extra arguments to add verbosityThe program to runlook up the program hereAny extra arguments to add verbosityThe program to runlook up the program hereAny extra arguments to addo      !"#$%&'()*+,<=>?@ABCDEFGHIJSTVWXYZ[\]^abcdefghijklmnopqrstuvwxyz|}~o$%&'()    ,  !"*#+<=>?@ABCDEFGHIJSqsrtuvwxyz|}~TVWXYZ[\]cdeabfghijklmnop^ cabal-devel@haskell.orgportableNone<QV Isaac Jones 2003-2004BSD3cabal-devel@haskell.orgportableNone16 nSome compilers (notably GHC) support profiling and can instrument programs so the system can account costs to different functions. There are different levels of detail that can be used for this accounting. For compilers that do not support this notion or the particular detail levels, this is either ignored or just capped to some similar level they do support.Some compilers support emitting debug info. Some have different levels. For compilers that do not the level is just capped to the level they do support.Some compilers support optimising. Some have different levels. For compilers that do not the level is just capped to the level they do support.We typically get packages from several databases, and stack them together. This type lets us be explicit about that stacking. For example typical stacks include: n[GlobalPackageDB] [GlobalPackageDB, UserPackageDB] [GlobalPackageDB, SpecificPackageDB "package.conf.inplace"]Note that the k is invariably at the bottom since it contains the rts, base and other special compiler-specific packages.We are not restricted to using just the above combinations. In particular we can use several custom package dbs and the user package db together.>When it comes to writing, the top most (last) package is used.rSome compilers have a notion of a database of available packages. For some there is just one global db of packages, other compilers support a per-user or an arbitrary db specified at some location in the file system. This can be used to build isloated environments of packages, for example to build a collection of related packages without installing them globally.Compiler flavour and version.GTag for distinguishing incompatible ABI's on the same architecture/os.GOther implementations that this compiler claims to be compatible with.Supported language standards.Supported extensions.?A key-value map for properties not covered by the above fields.JIs this compiler compatible with the compiler flavour we're interested in?For example this checks if the compiler is actually GHC or is another compiler that claims to be compatible with some version of GHC, e.g. GHCJS. 6if compilerCompatFlavor GHC compiler then ... else ...Is this compiler compatible with the compiler flavour we're interested in, and if so what version does it claim to be compatible with.For example this checks if the compiler is actually GHC-7.x or is another compiler that claims to be compatible with some GHC-7.x version. fcase compilerCompatVersion GHC compiler of Just (Version (7:_)) -> ... _ -> ...aReturn the package that we should register into. This is the package db at the top of the stack.Make package paths absoluteBFor the given compiler, return the extensions it does not support.FFor the given compiler, return the flags for the supported extensions.{Looks up the flag for a given extension, for a given compiler. Ignores the subtlety of extensions which lack associated flags.|Looks up the flag for a given extension, for a given compiler. However, the extension may be valid for the compiler but not have a flag. For example, NondecreasingIndentation is enabled by default on GHC 7.0.4, hence it is considered a supported extension but not an accepted flag.The outer layer of Maybe indicates whether the extensions is supported, while the inner layer indicates whether it has a flag. When building strings, it is often more convenient to use { , which ignores the difference.0Does this compiler support parallel --make mode?.Does this compiler support reexported-modules?>Does this compiler support thinning/renaming on package flags?:Does this compiler have unified IPIDs (so no package keys)(Does this compiler support package keys?$Does this compiler support unit IDs?$Does this compiler support Backpack?RDoes this compiler support a package database entry with: "dynamic-library-dirs"?aDoes this compiler's "ar" command supports response file arguments (i.e. @file-style arguments).4Does this compiler support Haskell program coverage?%Does this compiler support profiling?}&Utility function for GHC only features\                        ! " #<cabal-devel@haskell.orgportableNone B DInformation about features and quirks of a GHC-based implementation.Compiler flavors based on GHC behave similarly enough that some of the support code for them is shared. Every implementation has its own peculiarities, that may or may not be a direct result of the underlying GHC version. This record keeps track of these differences.All shared code (i.e. everything not in the Distribution.Simple.FLAVOR module) should use implementation info rather than version numbers to test for supported features."XHaskell2010 and -XHaskell98 flags(-supported-languages gives Ext and NoExt%NondecreasingIndentation is always onghci-script flag supportednew style -fprof-auto* flags&use package-conf instead of package-dbg flag supportedsupports numeric -g levels picks up .ghc.environment files"Wmissing-home-modules is supported~The GHCJS versionThe GHC version~Duncan Coutts 2007BSD3cabal-devel@haskell.org(non-portable (ExistentialQuantification)None<CQV 8wraps a  CommandUI/ together with a function that turns it into a Command. By hiding the type of flags for the UI allows construction of a list of all UIs at the top level of the program. That list can then be used for generation of manual page as well as for executing the selected command.(Common flags that apply to every command Long command line option strings!Short command line option stringsaAn OptionField takes one or more OptDescrs, describing the command line interface for the field.LWe usually have a data type for storing configuration values, where every field stores a configuration option, and the user sets the value either via command line flags or a configuration file. An individual OptionField models such a field, and we usually build a list of options associated to a configuration data type.%QThe name of the command as it would be entered on the command line. For example "build".&BA short, one line description of the command to use in help texts.'IA function that maps a program name to a usage summary for this command.(;Additional explanation of the command to use in help texts.)+Post-Usage notes and examples in help texts*Initial / empty flags+&All the Option fields for this command,zCreate an option taking a single OptDescr. No explicit Name is given for the Option, the name is the first LFlag given.-Create an option taking several OptDescrs. You will have to give the flags and description individually to the OptDescr constructor...Create a string-valued command line interface./CCreate a string-valued command line interface with a default value.0!(String -> a) variant of "reqArg"1!(String -> a) variant of "optArg"5create a Choice option6create a Choice option out of an enumeration type. As long flags, the Show output is used. As short flags, the first character which does not conflict with a previous one is used.7uto view as a FieldDescr, we sort the list of interfaces (Req > Bool > Choice > Opt) and consider only the first one.9:Show flags in the standard long option command line formatDThe help text for this command with descriptions of all the options.:0Default "usage" documentation text for commands.;HCreate "usage" documentation from a list of parameter configurations.<Make a Command from standard GetOpt options.='Parse a bunch of command line arguments>jMark command as hidden. Hidden commands don't show up in the 'progname help' or 'progname --help' output.AUtility function, many commands do not accept additional flags. This action fails with a helpful error message if the user supplies any extra.B6Helper function for creating globalCommand description-DMkOptDescr constructors partially applied to flags and description.<namesynopsisusage alternativesinitial/empty flagsoptions=&Is the command a global or subcommand?@      !"#$%&'()*+,-./0123456789:;<=>?@ABCD@#$%&'()*+9   =BC !":;<>?A  D@,-87.0/123456K8Isaac Jones 2003-2004 Duncan Coutts 2007BSD3cabal-devel@haskell.orgportableNone6<QV )E9When we build haddock documentation, there are two cases: We build haddocks only for the current development version, intended for local use and not for distribution. In this case, we store the generated documentation in  distdochtml/ packagename..We build haddocks for intended for uploading them to hackage. In this case, we need to follow the layout that hackage expects from documentation tarballs, and we might also want to use different flags than for development builds, so in this case we store the generated documentation in  distdochtml/ packageid-docs. Flags to register and  unregister2: (user package, gen-script, in-place, verbosity) Flags to sdist: (snapshot, verbosity) Flags to install: (package db, verbosity) Flags to copy6: (destdir, copy-prefix (backwards compat), verbosity) Flags to  configure command.+IMPORTANT: every time a new flag is added, f should be updated. IMPORTANT: every time a new flag is added, it should be added to the Eq instanceAll programs that cabal may runuser specified programs pathsuser specified programs argsExtend the $PATH3The "flavor" of the compiler, such as GHC or JHC.given compiler locationgiven hc-pkg locationEnable vanilla libraryEnable profiling in the libraryBuild shared libraryBuild static library+Enable dynamic linking of the executables.%Enable profiling in the executables.1Enable profiling in the library and executables.8Profiling detail level in the library and executables.'Profiling detail level in the libraryExtra arguments to  configureEnable optimization.Installed executable prefix.Installed executable suffix.Installation paths"path to search for extra libraries0path to search for extra frameworks (OS X only)path to search for header filesexplicit IPID to be usedexplicit CID to be useddbe as deterministic as possible (e.g., invariant over GHC, database, etc). Used by the test suite "dist" prefixCabal file to useverbosity levelThe --user/--global flagWhich package DBs to use!Enable compiling library for GHCiEnable -split-sections with GHCEnable -split-objs with GHCEnable executable strippingEnable library stripping)Additional constraints for dependencies.The packages depended on.The requested Backpack instantiation. If empty, either this package does not use Backpack, or we just want to typecheck the indefinite package.Enable test suite compilationEnable benchmark compilationEnable program coverage$Enable program coverage (deprecated)XAll direct dependencies and flags are provided on the command line by the user via the '--dependency' and  '--flags' options.EHalt and show an error message indicating an error in flag assignment Enable relocatable package builtEmit debug info.XWhether to use response files at all. They're used for such tools as haddock, or or ld.:Flags that apply at the top level, not to any sub-command.#Types that represent boolean flags.1All flags are monoids, they come in two flavours:  list flags eg !--ghc-option=foo --ghc-option=bar&gives us all the values ["foo", "bar"] singular value flags, eg: --enable-foo --disable-foogives us Just False So this Flag type is for the latter singular kind of flag. Its monoid instance gives us the behaviour where it starts out as ' and later flags override earlier ones.More convenient version of . Results in an :# if internal invariant is violated. Inverse to .5Pretty-print a single entry of a module substitution.For each known program PROG in progDb , produce a  with-PROG .3Like *, but allows to customise the option name.4Like *, but allows to customise the option name.For each known program PROG in progDb , produce a  PROG-option .5For each known program PROG in progDb , produce a  PROG-options .6For each known program PROG in progDb , produce a  PROG-options .>Arguments to pass to a  configure script, e.g. generated by autoconf.ApHelper function to split a string into a list of arguments. It's supposed to handle quoted things sensibly, eg: \splitArgs "--foo=\"C:/Program Files/Bar/" --baz" = ["--foo=C:/Program Files/Bar", "--baz"] SsplitArgs "\"-DMSGSTR=\\\"foo bar\\\"\" --baz" = ["-DMSGSTR=\"foo bar\"","--baz"] FGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@A    pqrstuvwxyz{|}~" abcdefghi*'(&Z[\]^_`+,jklmno%#$KLMNOPQRS/-.TUVWXYFGHIJ201 >?@)! 6453A;789:<= None6<QV ɁC  -fprof-auto -fprof-auto-top -fprof-auto-exported -static -dynamic -static -dynamic-too -O0 -O -O2e.g. -Odph ghc -c ghc  ghc --makeghci / ghc --interactiveghc --abi-hash( | GhcModeDepAnalysis -- ^ ghc -M( | GhcModeEvaluate -- ^ ghc -e%A structured set of GHC options/flags&The major mode for the ghc invocation._Any extra options to pass directly to ghc. These go at the end and hence override other stuff.pExtra default flags to pass directly to ghc. These go at the beginning and so can be overridden by other stuff.CThe main input files; could be .hs, .hi, .c, .o, depending on mode./The names of input Haskell modules, mainly for --make mode.Location for output file; the ghc -o flag.$Location for dynamic output file in  mode; the  ghc -dyno flag.?Start with an empty search path for Haskell source files; the ghc -i flag (-i# on its own with no path argument).*Search path for Haskell source files; the ghc -i flag.,The unit ID the modules will belong to; the ghc -this-unit-id flag (or -this-package-key or  -package-name( on older versions of GHC). This is a 7 because we assume you've already figured out what the correct format for this string is (we need to handle backwards compatibility.)GHC doesn't make any assumptions about the format of definite unit ids, so when we are instantiating a package it needs to be told explicitly what the component being instantiated is. This only gets set when  is non-emptytHow the requirements of the package being compiled are to be filled. When typechecking an indefinite package, the   is always a  L; otherwise, it specifies the installed module that instantiates a package.*No code? (But we turn on interface writing"GHC package databases to use, the ghc -package-conf flag.:The GHC packages to bring into scope when compiling, the ghc -package-id flags.$Start with a clean package set; the ghc -hide-all-packages flag.Warn about modules, not listed in command line/Don't automatically link in Haskell98 etc; the ghc -no-auto-link-packages flag.#Names of libraries to link in; the ghc -l flag.*Search path for libraries to link in; the ghc -L flag.+Options to pass through to the linker; the  ghc -optl flag.%OSX only: frameworks to link in; the ghc -framework flag.6OSX only: Search path for frameworks to link in; the ghc -framework-path flag.1Don't do the link step, useful in make mode; the  ghc -no-link flag.Don't link in the normal RTS main entry point; the ghc -no-hs-main flag.*Module definition files (Windows specific)/Options to pass through to the C compiler; the  ghc -optc flag.,Options to pass through to the C++ compiler.$Options to pass through to CPP; the  ghc -optP flag.4Search path for CPP includes like header files; the ghc -I flag.0Extra header files to include at CPP stage; the ghc -optP-include flag.5Extra header files to include for old-style FFI; the  ghc -#include flag.The base language; the ghc -XHaskell98 or  -XHaskell2010 flag.The language extensions; the ghc -X flag.hA GHC version-dependent mapping of extensions to flags. This must be set to be able to make use of the .$What optimisation level to use; the ghc -O flag.Emit debug info; the ghc -g flag.Compile in profiling mode; the  ghc -prof flag..Automatically add profiling cost centers; the ghc -fprof-auto* flags.&Use the "split sections" feature; the ghc -split-sections flag.*Use the "split object files" feature; the ghc -split-objs flag.(Run N jobs simultaneously (if possible).Enable coverage analysis; the ghc -fhpc -hpcdir flags. Extra GHCi startup scripts; the  -ghci-script flagonly in  modeonly in  mode9Get GHC to be quiet or verbose with what it's doing; the ghc -v flag.JPut the extra folders in the PATH environment variable we invoke GHC withZLet GHC know that it is Cabal that's calling it. Modifies some of the GHC error messages.GHC <7.6 uses '-package-conf' instead of  '-package-db'.GHC >= 7.6 uses the  '-package-db' flag. See  ,https://ghc.haskell.org/trac/ghc/ticket/5977.VVThomas Schilling, 2007BSD3cabal-devel@haskell.orgportableNone (0A set of targets with their package dependencies9A map of dependencies that combines version ranges using O.)Result of dependency test. Isomorphic to Maybe d but renamed for clarity.Simplify a configuration condition using the OS and arch names. Returns the names of all the flags occurring in the condition..Parse a configuration condition from a string.JTry to find a flag assignment that satisfies the constraints of all trees.Returns either the missing dependencies, or a tuple containing the resulting data, the associated dependencies, and the chosen flag assignments.In case of failure, the union of the dependencies that led to backtracking on all branches is returned. [TODO: Could also be specified with a function argument.]LTODO: The current algorithm is rather naive. A better approach would be to:IRule out possible paths, by taking a look at the associated dependencies.Infer the required values for the conditions of these paths, and calculate the required domains for the variables used in these conditions. Then picking a flag assignment would be linear (I guess).iThis would require some sort of SAT solving, though, thus it's not implemented unless we really need it. Transforms a }h by putting the input under the "then" branch of a conditional that is True when Buildable is True. If  can determine that Buildable is always True, it returns the input unchanged. If Buildable is always False, it returns the empty }.This is a special version of  for the  type.fIt is not simply a specialisation. It is more complicated than it ought to be because of the way the  monoid instance works. The  mempty = l forgets the component type, which has the effect of completely deleting components that are not buildable.See  *https://github.com/haskell/cabal/pull/4094 for more details.LExtract conditions matched by the given predicate from all cond trees in a  .mCombine the target-specific dependencies in a TargetSet to give the dependencies for the package as a whole.\Collect up the targets in a TargetSet of tagged targets, storing the dependencies as we go.>Create a package description with all configurations resolved.This function takes a  ; and several environment parameters and tries to generate  `G by finding a flag assignment that result in satisfiable dependencies.&It takes as inputs a not necessarily complete specifications of flags assignments, an optional package index as well as platform parameters. If some flags are not assigned explicitly, this function will try to pick an assignment that causes this function to succeed. The package index is optional since on some platforms we cannot determine which packages have been installed before. When no package index is supplied, every dependency is assumed to be satisfiable, therefore all not explicitly assigned flags will get their default values.This function will fail if it cannot find a flag assignment that leads to satisfiable dependencies. (It will not try alternative assignments for explicitly specified flags.) In case of failure it will return the missing dependencies that it encountered when trying different flag assignments. On success, it will return the package description and the full flag assignment chosen.,Note that this drops any stanzas which have buildable: Falseu. While this is arguably the right thing to do, it means we give bad error messages in some situations, see #3858.hFlatten a generic package description by ignoring all conditions and just join the field descriptors into on package description. Note, however, that this may lead to inconsistent field values, since all values are joined into one field, which may not be possible in the original package description, due to the use of exclusive choices (if ... else ...).TODO: One particularly tricky case is defaulting. In the original package description, e.g., the source directory might either be the default or a certain, explicitly set path. Since defaults are filled in only after the package has been resolved and when no explicit value has been set, the default path will be missing from the package description returned by this function.Walk a   and apply f to all nested  build-depends fields. Walk all } s inside a  O and apply appropriate transformations to all nodes. Helper function used by  and .3Domain for each flag name, will be tested in order.-OS as returned by Distribution.System.buildOS1Arch as returned by Distribution.System.buildArchCompiler informationAdditional constraintsDependency test function.}Either the missing dependencies (error case), or a pair of (set of build targets with dependencies, chosen flag assignments)%Explicitly specified flag assignmentsjIs a given dependency satisfiable from the set of available packages? If this is unknown then use True.The ; and MCompiler informationAdditional constraintshEither missing dependencies or the resolved package description along with the flag assignments chosen.%Explicitly specified flag assignmentsjIs a given dependency satisfiable from the set of available packages? If this is unknown then use True.The ; and MCompiler informationAdditional constraintsMartin Sj&#xF6;gren 2004BSD3cabal-devel@haskell.orgportableNone<QV !E ,-.>FECBJLI?@ADGHKM i j k l m n o >FECBJLI?@ADGHKMNone3 $  We can use  to pp print the s.Note: there is not trailing  ($+$ text "").  None3V &kThe  constructor of .4Single field, without name, but with its annotation.    None;<=V -%Partitioning state#6Reverse function application which binds tighter than  and #-. Useful for refining grammar specification. <*> L "extensions" (alaList' FSep MQuoted) oldExtensions ^^^  [1,12] "Please use 'default-extensions' or 'other-extensions' fields." $;Partition field list into field map and groups of sections.%Take all fields from the front.   !"#$%  "! #$%#5None 2d&sAn intermediate type just used for parsing the benchmark stanza. After validation it is converted into the proper  * type.,tAn intermediate type just used for parsing the test-suite stanza. After validation it is converted into the proper   type."&'()*+,-./0123456789:;<=>?@ABCDEFG"2345,-./01:;<6789&'()*+ABC=>?@EFGDJrgen Nicklisch-Franken 2010BSD3cabal-devel@haskell.org provisionalportableNone 7#J7Writes a .cabal file from a generic package descriptionK0Writes a generic package description to a stringLMNOJKLMNOJKLMNOIsaac Jones 2003-2005BSD3cabal-devel@haskell.orgportableNone<QV PR See .Create a from  H.Law: #view buildInfo . fromBuildInfo = idState of section parser3Helper combinator to do parsing plumbing for files.`Given a parser and a filename, return the parse of the file, after checking if the file exists.:Argument order is chosen to encourage partial application.PParse the given package file.QParses the given file into a  .In Cabal 1.2 the syntax for package descriptions was changed to a format with sections and possibly indented property descriptions.RH variant of Q%Parse a non-recursive list of fields. Sectionize2 an old-style Cabal file. A sectionized file has:/all global fields at the beginning, followed by"all flag declarations, followed by_an optional library section, and an arbitrary number of executable sections (in any order).The current implementation just gathers all library-specific fields in a library section and wraps all executable stanzas in an executable section.U#Quickly scan new-style spec-versionA new-style spec-version declaration begins the .cabal file and follow the following case-insensitive grammar (expressed in RFC5234 ABNF): newstyle-spec-version-decl = "cabal-version" *WS ":" *WS newstyle-pec-version *WS spec-version = NUM "." NUM [ "." NUM ] NUM = DIGIT0 / DIGITP 1*DIGIT0 DIGIT0 = %x30-39 DIGITP = %x31-39 WS = %20 #File contents to final value parserVerbosity level File to readfields to be parsedaccept elifgrammarcondition extractorgrammarcommon stanzas12PQRSTUPQR12USTNone3QV SD^/A collection field parsers and pretty-printers._$Lookup a field value pretty-printer.`Lookup a field value parser.bNote: default values are printed.^_`a^_`aNone"#;=>? XJSPDX License expression or legacy license. Lenient parser, accepts either.Returns Just if the named field of the IPI record would not contain the package name verbatim. This helps us avoid writing  package-name when it's redundant.Setter for the  package-name9 field. It should be acceptable for this to be a no-op.ee4J"(c) The University of Glasgow 2004libraries@haskell.orgportableNone gsGet the indefinite unit identity representing this package. This IS NOT guaranteed to give you a substitution; for instantiated packages you will get $DefiniteUnitId (installedUnitId ipi)A. For indefinite libraries, however, you will correctly get an  OpenUnitId with the appropriate  .tReturns the set of module names which need to be filled for an indefinite package, or the empty set if the package is definite.u,Backwards compatibility with Cabal pre-1.24.KThis type synonym is slightly awful because in cabal-install we define an  ' but it's a ComponentId, not a UnitId!x Pretty print  6.pkgRoot; isn't printed, as ghc-pkg prints it manually (as GHC-8.4).yThe variant of x which outputs pkgroot field too.z=let ipi = emptyInstalledPackageInfo { maintainer = "Tester" }9fmap ($ ipi) $ showInstalledPackageInfoField "maintainer"Just "maintainer: Tester"F ) * + , 6 7 ; > _ U H 8 F V W Y Z \ K ? @ A B C D E G Q 9 : < = I J L M N O P R S T X [ ] ^ brstuvwxyz{F 6 7 ; > _ U H 8 F V W Y Z \ K ? @ A B C D E G Q 9 : < = I J L M N O P R S T X [ ] ^ursvt ) * + , bwxyz{None6FT |?The first five fields are common across all algebraic variants.NIt would be very convenient to store the literal Library here, but if we do that, it will get serialized (via the Binary) instance twice. So instead we just provide the ComponentName, which can be used to find the Component in the PackageDescription. NB: eventually, this will NOT uniquely identify the ComponentLocalBuildInfo. The computed   of this component. The computed  = which uniquely identifies this component. Might be hashed.:Is this an indefinite component (i.e. has unfilled holes)?"How the component was instantiatedMResolved internal and external package dependencies for this component. The  H specifies a set of build dependencies that must be satisfied in terms of version ranges. This field fixes those dependencies to the specific versions available on this machine for this compiler.QThe set of packages that are brought into scope during compilation, including a ~P which may used to hide or rename modules. This is what gets translated into  -package-id. arguments. This is a modernized version of ', which is kept around for BC purposes.7The internal dependencies which induce a graph on the |0 of this package. This does NOT coincide with  because it ALSO records  'build-tool'. dependencies on executables. Maybe one day  cabal-install& will also handle these correctly too!BCompatibility "package key" that we pass to older versions of GHC.@Compatibility "package name" that we register this component as.dA list of exposed modules (either defined in this component, or reexported from another component.)qConvenience field, specifying whether or not this is the "public library" that has the same name as the package.|}~|}~NoneFT The T contains all the information necessary to build a specific target (e.g., componentmodule4file) in a package. In principle, one can get the  = from a | and LocalBuildInfo@, but it is much more convenient to have the component in hand.Duncan Coutts 2009, 2013cabal-devel@haskell.orgportableNone<QV d+Additional variations in the behaviour for .7Allows re-registering / overwriting an existing packageuInsist on the ability to register multiple instances of a single version of a single package. This will fail if the hc-pkg does not support it, see  and .Require that no checks are performed on the existence of package files mentioned in the registration info. This must be used if registering prior to putting the files in their final place. This will fail if the hc-pkg does not support it, see .6Information about the features and capabilities of an hc-pkg program.no package DB stack supported'hc-pkg does not support verbosity flags-use package-conf option instead of package-db*supports directory style package databases*requires directory style package databases%supports --enable-multi-instance flag#supports multi-instance via recache$supports --force-files or equivalentCall hc-pkg9 to initialise a package database at the location {path}. hc-pkg init {path}Run hc-pkg` using a given package DB stack, directly forwarding the provided command-line arguments to it. Defaults are True, False and FalseCall hc-pkg to register a package. Ahc-pkg register {filename | -} [--user | --global | --package-db]Call hc-pkg to unregister a package <hc-pkg unregister [pkgid] [--user | --global | --package-db]Call hc-pkg$ to recache the registered packages. 1hc-pkg recache [--user | --global | --package-db]Call hc-pkg to expose a package. 8hc-pkg expose [pkgid] [--user | --global | --package-db]Call hc-pkg to retrieve a specific package :hc-pkg describe [pkgid] [--user | --global | --package-db]Call hc-pkg to hide a package. 6hc-pkg hide [pkgid] [--user | --global | --package-db]Call hc-pkgK to get all the details of all the packages in the given package database.Call hc-pkgQ to get the source package Id of all the packages in the given package database.(This is much less information than with L, but also rather quicker. Note in particular that it does not include the  , just the source  3 which is not necessarily unique in any package db.$$p(c) David Himmelstrup 2005, Bjorn Bringert 2007, Duncan Coutts 2008-2009cabal-devel@haskell.orgportableNone6;<=(We maintain the invariant that, for any =, there is only one instance of the package in our database.)The default package index which contains InstalledPackageInfo. Normally use this.>The collection of information about packages from one or more  PackageDB8s. These packages generally should have an instance of  -Packages are uniquely identified in by their  Q, they can also be efficiently looked up by package name or by name and version.*Build an index out of a bunch of packages.If there are duplicates by  $ then later ones mask earlier ones.Merge two indexes.SPackages from the second mask packages from the first if they have the exact same  ."For packages with the same source  , packages from the second are "preferred" over those from the first. Being preferred means they are top result when we do a lookup by source  M. This is the mechanism we use to prefer user packages over global packages.(Inserts a single package into the index.8This is equivalent to (but slightly quicker than) using ! or  with a singleton index.2Removes a single installed package from the index.3Backwards compatibility wrapper for Cabal pre-1.24.&Removes all packages with this source   from the index.DRemoves all packages with this (case-sensitive) name from the index.9NB: Does NOT delete internal libraries from this package.$Get all the packages from the index.$Get all the packages from the index.4They are grouped by package name (case-sensitively).$(Doesn't include private libraries.)$Get all the packages from the index.AThey are grouped by source package id (package name and version).#(Doesn't include private libraries)$Get all the packages from the index.7They are grouped by source package id and library name.%This DOES include internal libraries.!Does a lookup by unit identifier..Since multiple package DBs mask each other by  (, then we get back at most one package.TDoes a lookup by component identifier. In the absence of Backpack, this is just a .+Backwards compatibility for Cabal pre-1.24.4Does a lookup by source package id (name & version).>There can be multiple installed packages with the same source   but different  K. They are returned in order of preference, with the most preferred first.Convenient alias of 0, but assuming only one package per package ID.%Does a lookup by source package name.=Does a lookup by source package name and a range of versions.oWe get back any number of versions of the specified package name, all satisfying the version range constraint.VThis does NOT work for internal dependencies, DO NOT use this function on those; use  instead.INVARIANT: List of eligible  6 is non-empty.=Does a lookup by source package name and a range of versions.oWe get back any number of versions of the specified package name, all satisfying the version range constraint.INVARIANT: List of eligible  6 is non-empty./Does a case-insensitive search by package name.If there is only one package that compares case-insensitively to this name then the search is unambiguous and we get back all versions of that package. If several match case-insensitively but one matches exactly then it is also unambiguous. If however several match case-insensitively and none match exactly then we have an ambiguous result, and we get back all the versions of all the packages. The list of ambiguous results is split by exact package name. So it is a non-empty list of non-empty lists.9Does a case-insensitive substring search by package name.BThat is, all packages that contain the given string in their name.\Find if there are any cycles in the dependency graph. If there are no cycles the result is [].This actually computes the strongly connected components. So it gives us a list of groups of packages where within each group they all depend on each other, directly or indirectly.HAll packages that have immediate dependencies that are not in the index.GReturns such packages along with the dependencies that they're missing.ATries to take the transitive closure of the package dependencies.If the transitive closure is complete then it returns that subset of the index. Otherwise it returns the broken packages as in .Note that if the result is Right []3 it is because at least one of the original given  s do not occur in the index.BTakes the transitive closure of the packages reverse dependencies. The given  s must be in the index.+Builds a graph of the package dependencies.Dependencies on other packages that are not in the index are discarded. You can check if there are any such dependencies with .LGiven 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.7A rough approximation of GHC's module finder, takes a c and turns it into a map from module names to their source packages. It's used to initialize the  build-deps field in  cabal init.$$None6<QVM11Data cached after configuration step. See also .dOptions passed to the configuration step. Needed to re-run configuration when .cabal is out of date9The final set of flags which were picked for this package;What components were enabled during configuration, and why.uExtra args on the command line for the configuration step. Needed to re-run configuration when .cabal is out of datexThe installation directories for the various different kinds of files TODO: inplaceDirTemplates :: InstallDirs FilePath The compiler we're building withThe platform we're building forWhere to build the package.6Path to the cabal file, if given during configuration.All the components to build, ordered by topological sort, and with their INTERNAL dependencies over the intrapackage dependency graph. TODO: this is assumed to be short; otherwise we want some sort of ordered map.LA map from component name to all matching components. These coincide with All the info about the installed packages that the current package depends on (directly or indirectly). The copy saved on disk does NOT include internal dependencies (because we just don't have enough information at this point to have an InstalledPackageInfoe for an internal dep), but we will often update it with the internal dependencies; see for example <. (This admonition doesn't apply for per-component builds.)5the filename containing the .cabal file, if availableWARNING WARNING WARNING Be VERY careful about using this function; we haven't deprecated it but using it could introduce subtle bugs related to  .In principle, this is supposed to contain the resolved package description, that does not contain any conditionals. However, it MAY NOT contain the description wtih a   applied to it; see  c for the whole sordid saga. As much as possible, Cabal library should avoid using this parameter."Location and args for all programs)What package database to use, global/userWhether to build normal libs.,Whether to build profiling versions of libs.)Whether to build shared versions of libs.HWhether to build static versions of libs (with all other libs rolled in)'Whether to link executables dynamically+Whether to build executables for profiling."Level of automatic profile detail."Level of automatic profile detail.2Whether to build with optimization (if available).*Whether to emit debug info (if available).1Whether to build libs suitable for use with GHCi.*Use -split-sections with GHC, if available&Use -split-objs with GHC, if available +Whether to strip executables during install )Whether to strip libraries during install -Whether to enable executable program coverage *Whether to enable library program coverage /Prefix to be prepended to installed executables.Suffix to be appended to installed executables Extract the  ) from the public library component of a D if it exists, or make a fake component ID based on the package ID. Extract the   of a . This is a "safe" use of  Extract the  " from the library component of a ? if it exists, or make a fake unit ID based on the package ID.NExtract the compatibility package key from the public library component of a C if it exists, or make a fake package key based on the package ID.+Convenience function to generate a default  from a |0. The idea is to call this once, and then use * everywhere else. Private to this module. Return all s associated with  [. In the presence of Backpack there may be more than one! Has a prime because it takes a  `# argument which may disagree with  in . Return all |s associated with  :. In the presence of Backpack there may be more than one!Return the list of default ms associated with a configured package, in the order they need to be built. Has a prime because it takes a  `# argument which may disagree with  in .Execute f for every w in the package, respecting the build dependency order. (TODO: We should use Shake!) Has a prime because it takes a  `# argument which may disagree with  in .3Return the list of all targets needed to build the uidsG, in the order they need to be built. Has a prime because it takes a  `# argument which may disagree with  in .Execute f for every  needed to build uidKs, respecting the build dependency order. Has a prime because it takes a  `# argument which may disagree with  in .pIs coverage enabled for test suites? In practice, this requires library and executable profiling to be enabled.#_External package dependencies for the package as a whole. This is the union of the individual , less any internal deps.:      !"#:      !"#Isaac Jones 2003-2004BSD3cabal-devel@haskell.orgportableNone6<QVg *#Perform the action on each enabled  v& in the package description with the |.+#Perform the action on each enabled  3 in the package description. Extended version of  + that also gives corresponding build info.,#Perform the action on each enabled  * in the package description.1%Perform the action on each buildable   or  V (Component) in the PackageDescription, subject to the build order specified by the compBuildOrder field of the given CPrivate helper function for some of the deprecated implementations.5|Determine the directories containing the dynamic libraries of the transitive dependencies of the component we are building.EWhen wanted, and possible, returns paths relative to the installDirs  6IGet all module names that needed to be built by GHC; i.e., all of these bGs have interface files associated with them that need to be installed.7OBackwards compatibility function which computes the InstallDirs assuming that $libname points to the public library (or some fake package identifier if there is no public library.) IF AT ALL POSSIBLE, please use 8 instead.8See  .9OBackwards compatibility function which computes the InstallDirs assuming that $libname points to the public library (or some fake package identifier if there is no public library.) IF AT ALL POSSIBLE, please use : instead.:See  5Building for inplace?&Generate prefix-relative library pathsComponent that is being built                      = > ? @ A B C D E F |}~     #()*+,-./0123456789:;     # = > ? @ A B |}~( C F D E )3456120*+,-./                     798:;None<QV{ B/Logs test suite results, itemized by test case.G\Logs all test results for a package, broken down first by test suite and then by test case.MA G1 with package and platform information specified.N<Count the number of pass, fail, and error test results in a < tree.OFrom a B%, determine if the test suite passed.PFrom a B%, determine if the test suite failed.QFrom a B1, determine if the test suite encountered errors.SPrint a summary to the console after all test suites have been run indicating the number of successful test suites and cases. Returns U if all test suites passed and R otherwise.T~Print a summary of a single test case's result to the console, supressing output for certain verbosity or test filter levels.U|Print a summary of the test suite's results on the console, suppressing output for certain verbosity or test filter levels.N)Passes, fails, and errors, respectively.Rtest suite nametest suite results<=>?@ABCDEFGHIJKLMNOPQRSTUVGHIJKL<=>?@ABCDEFNMSUVTQPORDuncan Coutts 2009cabal-devel@haskell.orgportableNone<QV~`Call ld -r* to link a bunch of object files together.``Duncan Coutts 2009cabal-devel@haskell.orgportableNone<QVZqaCall ar: to create a library archive from a bunch of object files.ar by default includes various metadata for each object file in their respective headers, so the output can differ for the same inputs, making it difficult to avoid re-linking. GNU ar(1) has a deterministic mode (-Dr) flag that always writes zero for the mtime, UID and GID, and 0644 for the file mode. However detecting whether -DJ is supported seems rather harder than just re-implementing this feature.MaaMThomas Tuegel 2011BSD3cabal-devel@haskell.orgportableNone<QVh?Path to the .tix file containing a test suite's sum statistics.jAttempt to guess the way the test suites in this package were compiled and linked with the library so the correct module interfaces are found.k*Generate the HTML markup for a test suite.l<Generate the HTML markup for all of a package's test suites."dist/" prefix/Directory containing component's HPC .mix filesf"dist/" prefixComponent name,Directory containing test suite's .mix filesg"dist/" prefixComponent name,Directory containing test suite's .tix filesh"dist/" prefixComponent namePath to test suite's .tix filei"dist/" prefixComponent name*Path to test suite's HTML markup directoryk"dist/" prefix Library namel"dist/" prefix Library name bcdefghijkl bcdejifghlk(c) Duncan Coutts 2012BSD-likeduncan@community.haskell.orgNone6<QVA 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 ( matchExactly, ), ways to combine matchers ( ambiguousWith, shadows;) and finally we can run a matcher against an input using .w expected thing(actually got)x (no such thing, actually got)|A fully resolved build target.}A specific component~.A specific module within a specific component.,A specific file within a specific component.4Various ways that a user may specify a build target.OA target specified by a single name. This could be a component module or file. Jcabal build foo cabal build Data.Foo cabal build Data/Foo.hs Data/Foo.hscA target specified by a qualifier and name. This could be a component name qualified by the component namespace kind, or a module or file qualified by the component name. Pcabal build lib:foo exe:foo cabal build foo:Data.Foo cabal build foo:Data/Foo.hssA fully qualified target, either a module or file qualified by a component name with the component namespace kind. acabal build lib:foo:Data/Foo.hs exe:foo:Data/Foo.hs cabal build lib:foo:Data.Foo exe:foo:Data.FooTake a list of 79 build targets, and parse and validate them into actual  s to be built registered whatever.GRead a list of user-supplied build target strings and resolve them to |s according to a  `f. If there are problems with any of the targets e.g. they don't exist or are misformatted, throw an  IOException.Unless you use s!, this function is PARTIAL; use  instead.Unambiguously render a |., so that it can be parsed in all situations.RGiven a bunch of user-specified targets, try to resolve what it is they refer to.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.)Combine two matchers. This is similar to  ambiguousWith with the difference that an exact match from the left matcher shadows any exact match on the right. Inexact matches are still collected however.)Lift a list of matches to an exact match.)Lift a list of matches to an exact match.fGiven 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.6A primitive matcher that looks up a value in a finite I. 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).DCheck that the given build targets are valid in the current context.)Also swizzle into a more convenient form.rtusvywxz{|}~|}~rtusz{vywx9Isaac Jones 2003-2004, Duncan Coutts 2008BSD3cabal-devel@haskell.orgportableNone<QVmThis is the name of the directory in which the generated haddocks should be stored. It does not include the  distdochtml prefix.IThe directory to which generated haddock documentation should be written.rThe directory in which we put auto-generated modules for EVERY component in the package. See deprecation notice.YThe directory in which we put auto-generated modules for EVERY component in the package.QThe directory in which we put auto-generated modules for a particular component.?The name of the auto-generated module associated with a packageGThe name of the auto-generated Paths_* module associated with a package:The directory where we put build results for an executable>The directory where we put build results for a foreign libraryHCreate a library name for a static library from a given name. Prepends lib+ and appends the static library extension ('.a').HCreate a library name for a shared lirbary from a given name. Prepends lib and appends the %'-<compilerFlavour><compilerVersion>'* as well as the shared library extension.LDefault extension for executable files on the current platform. (typically "" on Unix and "exe" on Windows or OS/2)5Extension for object files. For GHC the extension is "o".CExtension for dynamically linked (or shared) libraries (typically "so" on Unix and "dll" on Windows)Extension for static librariesnTODO: Here, as well as in dllExtension, it's really the target OS that we're interested in, not the build OS.Andres Loeh 2009BSD3cabal-devel@haskell.orgportableNone<QV'The flags for the supported extensions.lHack to add version numbers to UHC-built-in packages. This should sooner or later be fixed on the UHC side.*Name of the installed package config file.Check if a certain dir contains a valid package. Currently, we are looking only for the presence of an installed package configuration. TODO: Actually make use of the information provided in the file.4Create a trivial package info from a directory name.Lennart Kolmodin 2008BSD3cabal-devel@haskell.orgportableNone!JA record of operations needed to check the contents of packages. Used by .-Results of some kind of failed package check.There are a range of severities, from merely dubious to totally insane. All of them come with a human readable explanation. In future we may augment them with more machine readable explanations, for example to help an IDE suggest automatic corrections.This package description is no good. There's no way it's going to build sensibly. This should give an error at configure time.A problem that is likely to affect building the package, or an issue that we'd like every package author to be aware of, even if the package is never distributed.$An issue that might not be a problem for the package author but might be annoying or detrimental when the package is distributed to users. We should encourage distributed packages to be free from these issues, but occasionally there are justifiable reasons so we cannot ban them entirely.xLike PackageDistSuspicious but will only display warnings rather than causing abnormal exit when you run 'cabal check'.An issue that is OK in the author's environment but is almost certain to be a portability problem for other environments. We can quite legitimately refuse to publicly distribute packages with these problems.?Check for common mistakes and problems in package descriptions.This is the standard collection of checks covering all aspects except for checks that require looking at files within the package. For those see .It requires the  I and optionally a particular configuration of that package. If you pass S@ then we just check a version of the generic description using .,Check that this package description is sane.3Check that the package declares the version in the "cabal-version" field correctly.ACheck the build-depends fields for any weirdness or bad practise.Fcabal-version <2.2 + Paths_module + default-extensions: doesn't build.Sanity check things that requires IO. It looks at the files in the package and expects to find the package unpacked in at the given file path.eSanity check things that requires looking at files in the package. This is a generalised version of 7 that can work in any monad for which you can provide  operations.zThe point of this extra generality is to allow doing checks in some virtual file system, for example a tarball in memory.DFind a package description file in the given directory. Looks for .cabal files. Like , but generalized over monads.Check the names of all files in a package for portability problems. This should be done for example when creating or validating a package tarball.=Check a file name is valid for the portable POSIX tar format.vThe POSIX tar format has a restriction on the length of file names. It is unfortunately not a simple restriction like a maximum length. The exact restriction is that either the whole path be 100 characters or less, or it be possible to split the path on a directory separator such that the first part is 155 characters or less and the second part 100 characters or less. pkgname.cabalbIsaac Jones 2003-2005, Ross Paterson 2006, Duncan Coutts 2007-2008cabal-devel@haskell.orgportableNone!S[Generates the name of the environment variable controlling the path component of interest.Note: The format of these strings is part of Cabal's public API; changing this function constitutes a *backwards-compatibility* break.Tpath component; one of "bindir", "libdir", "datadir", "libexecdir", or "sysconfdir"environment variable nameNone<QV3:The name of the stub executable associated with a library  TestSuite.SThe filename of the source file for the stub executable associated with a library  TestSuite.$Write the source file for a library  TestSuite stub executable.2Source code for library test suite stub executableMain function for test stubs. Once, it was written directly into the stub, but minimizing the amount of code actually in the stub maximizes the number of detectable errors when Cabal is compiled. The test runner used in library  TestSuite$ stub executables. Runs a list of 3gs. An executable calling this function is meant to be invoked as the child of a Cabal process during  ./setup test. A B , provided by Cabal, is read from the standard input; it supplies the name of the test suite and the location of the machine-readable test suite log file. Human-readable log information is written to the standard output for capture by the calling Cabal process.From a test stub, write the B: to temporary file for the calling Cabal process to read.library  TestSuite# for which a stub is being created6path to directory where stub source should be locatedNone<QV4dSimon Marlow 2008cabal-devel@haskell.orgportableNone>The contents of the cabal_macros.h" for the given configured package.(Helper function that generates just the  VERSION_pkg and MIN_VERSION_pkgb macros for a list of package ids (usually used with the specific deps of a configured package).(Helper function that generates just the TOOL_VERSION_pkg and MIN_TOOL_VERSION_pkg* macros for a list of configured programs.Common implementation of  and . Generate the CURRENT_COMPONENT_ID; definition for the component ID of the current package. Generate the CURRENT_PACKAGE_VERSION? definition for the declared version of the current package.None;=QV`z.This method computes a default, "good enough"  l for a package. The intent is that cabal-install (or the user) will specify a more detailed IPID via the --ipid flag if necessary.In GHC 8.0, the string we pass to GHC to use for symbol names for a package can be an arbitrary, IPID-compatible string. However, prior to GHC 8.0 there are some restrictions on what format this string can be (due to how ghc-pkg parsed the key): In GHC 7.10, the string had either be of the form foo_ABCD, where foo is a non-semantic alphanumeric/hyphenated prefix and ABCD is two base-64 encoded 64-bit integers, or a GHC 7.8 style identifier.OIn GHC 7.8, the string had to be a valid package identifier like foo-0.1.So, the problem is that Cabal, in general, has a general IPID, but needs to figure out a package key / package ID that the old ghc-pkg will actually accept. But there's an EVERY WORSE problem: if ghc-pkg decides to parse an identifier foo-0.1-xxx as if it were a package identifier, which means it will SILENTLY DROP the "xxx" (because it's a tag, and Cabal does not allow tags.) So we must CONNIVE to ensure that we don't pick something that looks like this.CSo this function attempts to define a mapping into the old formats.#The mapping for GHC 7.8 and before:We use the *compatibility* package name and version. For public libraries this is just the package identifier; for internal libraries, it's something like "z-pkgname-z-libname-0.1". See   for more details.The mapping for GHC 7.10:For CLibName: If the IPID is of the form foo-0.1-ABCDEF where foo_ABCDEF would validly parse as a package key, we pass ABCDEF. (NB: not all hashes parse this way, because GHC 7.10 mandated that these hashes be two base-62 encoded 64 bit integers), but hashes that Cabal generated using , are guaranteed to have this form.RIf it is not of this form, we rehash the IPID into the correct form and pass that.UFor sub-components, we rehash the IPID into the correct format and pass that. Nonex 1A configured component, we know exactly what its   is, and the  s of the things it depends on.7Unique identifier of component, plus extra useful info.FThe fragment of syntax from the Cabal file describing this component.Is this the public library component of the package? (If we invoke Setup with an instantiation, this is the component the instantiation applies to.) Note that in one-component configure mode, this is always True, because any component is the "public" one.)!Dependencies on executables from  build-tools and build-tool-depends.?The mixins of this package, including both explicit (from the mixins field) and implicit (from  build-dependsC). Not mix-in linked yet; component configuration only looks at  s.+Uniquely identifies a configured component.%The package this component came from.The  x of a component; this uniquely identifies a fragment of syntax within a specified Cabal file describing the component.Pretty-print a . Construct a , given that the  c and library/executable dependencies are known. The primary work this does is handling implicit backpack-include fields.Also computes the  U, and sets cc_public if necessary. This is Cabal-only; cabal-install won't use this.'build-depends:' stanzas are currently ambiguous as the external packages and internal libraries are specified the same. For now, we assume internal libraries shadow, and this function disambiguates accordingly, but soon the underlying ambiguity will be addressed.NoneQA list of components associated with the source level dependencies between them.FA graph of source-level components by their source-level dependencies Pretty-print . Create a  of  =+, or report a cycle if there is a problem.$Given the package description and a  ` (used to determine if a package name is internal or not), sort the components in dependency order (fewest dependencies first). This is NOT necessarily the build order (although it is in the absence of Backpack.)AError message when there is a cycle; takes the SCC of components.Isaac Jones 2003-2007BSD3cabal-devel@haskell.orgportableNone<QV%/Adjust the way we find and configure gcc and ld:Get the packages from specific PackageDBs, not cumulative.Build a library with LHC.Build an executable with LHC.YFilter the "-threaded" flag when profiling as it does not work with ghc-6.8 and older.Install executables for GHC.6Install for ghc, .hi, .a and, if --with-ghci given, .oWhere to copy the files toBuild locationExecutable (prefix,suffix)install location&install location for dynamic librariesBuild location  Isaac Jones 2003-2006BSD3cabal-devel@haskell.orgportableNone<QV&The flags for the supported extensionsHBuilding a package for JHC. Currently C source files are not supported.LBuilding an executable for JHC. Currently C source files are not supported.    None<QV^install location&install location for dynamic librariesBuild location        Isaac Jones 2003-2007cabal-devel@haskell.orgportableNone<QVe'The kinds of entries we can stick in a .ghc.environment file.  -- a comment package-id foo-1.0-4fe301a...global-package-db, user-package-db or package-db blahpackage.conf.d clear-package-db/Adjust the way we find and configure gcc and ld.Strip out flags that are not supported in ghci&GHC's rendering of its host or target ;` as used in its platform strings and certain file locations (such as user package db location).&GHC's rendering of its host or target M` as used in its platform strings and certain file locations (such as user package db location).GHC's rendering of its platform and compiler version string as used in certain file locations (such as user package db location). For example x86_64-linux-7.10.43Make entries for a GHC environment file based on a $ and a bunch of package (unit) ids.If you need to do anything more complicated then either use this as a basis and add more entries, or just make all the entries directly.Write a .ghc.environment-$arch-$os-$ver file in the given directory.The 9 and GHC % are needed as part of the file name.%Returns the name of the file written.The .ghc.environment-$arch-$os-$ver file name.Render a bunch of GHC environment file entries/Render an individual GHC environment file entrydirectory in which to put itthe GHC target platformthe GHC version the contentNone<QVO9Given a single package DB, return all installed packages. 8Given a package DB stack, return all installed packages." Return the q$ to the global GHC package database.%.Start a REPL without loading any source files.(6Install for ghc, .hi, .a and, if --with-ghci given, .o/Get the JavaScript file name and command and arguments to run a program compiled by GHCJS the exe should be the base program name without exe extension(install location&install location for dynamic librariesBuild location)Where to copy the files toBuild locationExecutable (prefix,suffix) !"#$%&'()*+,-./ #&$'%()*.+,!-"/"(c) The University of Glasgow 2004BSD3cabal-devel@haskell.orgportableNoneaBThis is the InstalledPackageInfo type used by ghc-6.4.2 and later.It's here purely for the 1 instance so that we can read the package database used by those ghc versions. It is a little hacky to read the package db directly, but we do need the info and until ghc-6.9 there was no better method.@In ghc-6.4.1 and before the format was slightly different. See Distribution.Simple.GHC.IPI642Isaac Jones 2003-2007BSD3cabal-devel@haskell.orgportableNone<QV sBuilding an executable, starting the REPL, and building foreign libraries are all very similar and implemented in . The 6 distinguishes between the various kinds of operation.Given something like usrlocalbinghc-6.6.1(.exe) we try and find the corresponding tool; e.g. if the tool is ghc-pkg, we try looking for a versioned or unversioned ghc-pkg in the same dir, that is: f/usr/local/bin/ghc-pkg-ghc-6.6.1(.exe) /usr/local/bin/ghc-pkg-6.6.1(.exe) /usr/local/bin/ghc-pkg(.exe)Given something like usrlocalbinghc-6.6.1(.exe) we try and find a corresponding ghc-pkg, we try looking for both a versioned and unversioned ghc-pkg in the same dir, that is: f/usr/local/bin/ghc-pkg-ghc-6.6.1(.exe) /usr/local/bin/ghc-pkg-6.6.1(.exe) /usr/local/bin/ghc-pkg(.exe)Given something like usrlocalbinghc-6.6.1(.exe) we try and find a corresponding hsc2hs, we try looking for both a versioned and unversioned hsc2hs in the same dir, that is: c/usr/local/bin/hsc2hs-ghc-6.6.1(.exe) /usr/local/bin/hsc2hs-6.6.1(.exe) /usr/local/bin/hsc2hs(.exe)Given something like usrlocalbinghc-6.6.1(.exe) we try and find a corresponding haddock, we try looking for both a versioned and unversioned haddock in the same dir, that is: f/usr/local/bin/haddock-ghc-6.6.1(.exe) /usr/local/bin/haddock-6.6.1(.exe) /usr/local/bin/haddock(.exe)29Given a single package DB, return all installed packages.38Given a package DB stack, return all installed packages.Given a list of !(PackageDB, InstalledPackageInfo) pairs, produce a  PackageIndex. Helper function used by 2 and 3.5 Return the q$ to the global GHC package database. Return the q& to the per-user GHC package database.:Get the packages from specific PackageDBs, not cumulative.9.Start a REPL without loading any source files.:Build a foreign library;Build a foreign library<Build an executable with GHC.=Build an executable with GHC. 8Target name for a foreign library (the actual file name)We do not use mkLibName and co here because the naming for foreign libraries is slightly different (we don't use "_p" or compiler version suffices, and we don't want the "lib" prefix on Windows).TODO: We do use  and co here, but really that's wrong: they use the OS used to build cabal to determine which extension to use, rather than the target OS (but this is wrong elsewhere in Cabal as well). #Name for the library when building.If the `lib-version-info` field or the `lib-version-linux`g field of a foreign library target is set, we need to incorporate that version into the SONAME field.If a foreign library foo has lib-version-info 5:1:2, it should be built as libfoo.so.3.2.1. We want it to get soname libfoo.so.3. However, GHC does not allow overriding soname by setting linker options, as it sets a soname of its own (namely the output filename), after the user-supplied linker options. Hence, we have to compile the library with the soname as its filename. We rename the compiled binary afterwards.lThis method allows to adjust the name of the library at build time such that the correct soname can be set. Main module name when overridden by ghc-options: -main-is ... or S if no -main-is flag could be found. In case of S, : can be assumed. Decode argument to  '-main-is'Returns S( if argument set only the function name.This code has been stolen/refactored from GHC's DynFlags.setMainIs function. The logic here is deliberately imperfect as it is intended to be bug-compatible with GHC's parser. See discussion in  @https://github.com/haskell/cabal/pull/4539#discussion_r118981753. 7Return C sources, GHC input files and GHC input modules(Generic build function. See comment for . Do we need the RPATH workaround?See Note [RPATH].7Extract (and compute) information about the RTS library!TODO: This hardcodes the name as  HSrts-ghc versionM. I don't know if we can find this information somewhere. We can lookup the  hsLibraries field of  6 but it will tell us [HSrts, Cffi], which doesn't really help.Returns True if the modification date of the given source file is newer than the object file we last compiled for it, or if no object file exists yet.3Finds the object file name of the given source file7Calculate the RPATHs for the component we are building. Calculates relative RPATHs when  is set.YFilter the "-threaded" flag when profiling as it does not work with ghc-6.8 and older.>yExtracts a String representing a hash of the ABI of a built library. It can fail if the library has not yet been built.AInstall executables for GHC.B Install foreign library for GHC.C6Install for ghc, .hi, .a and, if --with-ghci given, .o  specVersionComponent we are buildingAWhere to copy the files toBuild locationExecutable (prefix,suffix)Binstall locationBuild locationCinstall location&install location for dynamic librariesBuild location,0123456789:;<=>?@ABCDEFG,103627:<8;=9CBA>DE?@4G5FIsaac Jones 2003-2004BSD3cabal-devel@haskell.orgportableNone<QVH Perform the "./setup install" and " ./setup copy@" actions. Move files into place based on the prefix argument.2This does NOT register libraries, you should call register to do that.Copy package global files.'Copy files associated with a component.&Install the files listed in data-files:Install the files listed in install-includes for a libraryH information from the .cabal file#information from the configure stepflags sent to copy or installHHNone6wIA IL describes the provisions and requirements of a library. We can extract a I from an  6.MAThe default module shape, with no provisions and no requirements.IJKLMNIJKLMNNoneQV5 The mutable counterpart of HThe mutable counterpart of I.The mutable counterpart of a  ModuleSubst (not defined here).!An integer for uniquely labeling A nodes. We need these labels in order to efficiently serialize s into  s (we use the label to check if any parent is the node in question, and if so insert a deBruijn index instead.) These labels must be unique across all 'UnitId's/'Module'$s which participate in unification!A mutable version of  # which can be imperatively unified.A mutable version of  # which can be imperatively unified.Contents of a mutable  reference.Contents of a mutable  reference. CA convenient alias for mutable references in the unification monad.!The unification environment."%A supply of unique integers to label h cells. This is used to determine loops in unit identifiers (which can happen with mutual recursion.)#The set of requirements in scope. When a provision is brought into scope, we unify with the requirement at the same module name to fill it. This mapping grows monotonically.$Component id of the unit we're linking. We use this to detect if we fill a requirement with a local module, which in principle should be OK but is not currently supported by GHC.%'How verbose the error message should be&The error reporting context'0The package index for expanding unit identifiers(Accumulated errors)GThe unification monad, this monad encapsulates imperative unification.*+Run a computation in the unification monad.+Lift a computation from , monad to ) monad. Internal use only.-Imperatively read a  ..Imperatively write a  ./(Get the current unification environment.0)Add a fixed message to the error context.1AAdd a message to the error context. It may make monadic queries.2Conversion of  ModuleSubst to 3Conversion of  to  ModuleSubst4 An empty .5 Convert a I into a ", so we can do unification on it.6 Convert a  to a I.7 Convert a H to a 8 Convert a  to a H)9:;<=!>"#$%&'()*+?@AB/01CD23EF45678 NoneZ:aGCGiven to scopes of provisions and requirements, link them together.HLink a list of possibly provided modules to a single requirement. This applies a side-condition that all of the provided modules at the same name are *actually* the same module.IImperatively unify two modules.GNone16:TUVWXYZTUVWXYZ NoneBtJStripped down version of LinkedComponent0 for things we don't need to know how to build.K7The actual name of the package. This may DISAGREE with pc_pkgid9 for internal dependencies: e.g., an internal component lib may be munged to  z-pkg-z-lib+, but we still want to use it when we see lib in  build-dependsL!The actual name of the component.M Convert an  6 into a J*, which was brought into scope under the  0 (important for a package qualified reference.) JNKLOPQRSMNoneFTVU _A linked component is a component that has been mix-in linked, at which point we have determined how all the dependencies of the component are explicitly instantiated (in the form of an OpenUnitId).  is mix-in linked into _#, which is then instantiated into ReadyComponent.a$Uniquely identifies linked componentbCorresponds to .c build-tools and build-tool-depends dependencies. Corresponds to .d:Is this the public library of a package? Corresponds to .eCorresponds to i, but (1) this does not contain includes of signature packages (packages with no exports), and (2) the ~ for requirements (stored in +) has been removed, as it is reflected in  .)fLike eK, but this specifies includes on signature packages which have no exports.gKThe module shape computed by mix-in linking. This is newly computed from hUniquely identifies a _. Corresponds to .iCorresponds to .jThe  = of this component in the "default" instantiation. See also k. _-s cannot be instantiated (e.g., there is no ModSubst instance for them).kThe instantiation of jI; this always has the invariant that it is a mapping from a module name A to  A (the hole A).^_`abcdefghijklmno_`abcdefgkjhimnl^oNone<KQVcmqAn opaque type representing a file's modification time, represented internally as a 64-bit unsigned integer in the Windows UTC format.s`Return modification time of the given file. Works around the low clock resolution problem that T has on GHC < 7.8.}This is a modified version of the code originally written for Shake by Neil Mitchell. See module Development.Shake.FileInfo.t!Convert POSIX seconds to ModTime.UConvert V to q.u!Return age of given file in days.vReturn the current time as q.w7Based on code written by Neil Mitchell for Shake. See sleepFileTimeCalibrate in   . Returns a pair of microsecond values: first, the maximum delay seen, and the recommended delay to use before testing for file modification change. The returned delay is never smaller than 10 ms, but never larger than 1 second.qrstuvwqrsuvtw NoneFTWkA state monad for doing instantiations (can't use actual State because that would be an extra dependency.)X The state of W; a mapping from   s to their ready component, or Nothing@ if its an external component which we don't know how to build.YAn Y> is a library with requirements which we will typecheck only.Z The requirements of the library.[0The modules exported/reexported by this library.\bThe dependencies which need to be passed to the compiler to bring modules into scope. These are  > because these may refer to partially instantiated libraries.]An ]V is a library which is fully instantiated (or, possibly, has no requirements at all.)^"How this library was instantiated._Dependencies induced by ^W. These are recorded here because there isn't a convenient way otherwise to get the   we need to fill componentPackageDeps as needed.`0The modules exported/reexported by this library.aThe dependencies which need to be passed to the compiler to bring modules into scope. These always refer to installed fully instantiated libraries.bA b is one that we can actually generate build products for. We have a ready component for the typecheck-only products of every indefinite package, as well as a ready component for every way these packages can be fully instantiated.cThe   for this package. At the moment, this is used in only one case, which is to determine if an export is of a module from this library (indefinite libraries record these exports as  ); c9 can be conveniently used to test for equality, whereas  % cannot always be used in this case.dCorresponds to h. Invariant: if c records a  , it coincides with this one.eCorresponds to b.fCorresponds to cN. Build-tools don't participate in mix-in linking. (but what if they could?)gCorresponds to d.hExtra metadata depending on whether or not this is an indefinite library (typechecked only) or an instantiated component (can be compiled).iThe final, string  I that will uniquely identify the compilation products of this component.jCorresponds to i.kCompute the dependencies of a b! that should be recorded in the depends field of InstalledPackageInfo.lGet the   of a b IF it is a library.mGiven a list of _s, expand the module graph so that we have an instantiated graph containing all of the instantiated components we need to build.:Instantiation intuitively follows the following algorithm:instantiate a definite unit id p[S]: recursively instantiate each module M in S recursively instantiate modules exported by this unit recursively instantiate dependencies substituted by S_The implementation is a bit more involved to memoize instantiation if we have done it already. We also call  improveUnitIdG during this process, so that fully instantiated components are given  HashedUnitId.YnZ[\]o^_`abpqcdefghijkrmNone "#1FTVZ~~None<QVPrint a Setup message stating (1) what operation we are doing, for (2) which component (with enough details to uniquely identify the build in question.)'Operation being done (capitalized), on:PackageComponent name3Instantiation, if available. Polymorphic to take  OpenModule or ModuleIsaac Jones 2003-2004BSD3cabal-devel@haskell.orgportableNone<QV Compute the ,$ of a library that we built inplace.5Create an empty package DB at the specified location.Run hc-pkg` using a given package DB stack, directly forwarding the provided command-line arguments to it. Construct  6F for a library in a package, given a set of installation directories. Construct  63 for a library that is in place in the build tree.:This function knows about the layout of in place packages. Construct  66 for the final install location of a library package.;This function knows about the layout of installed packages.(Install in the user's database?; verbose8Translate relative include dir paths to absolute paths.top of the build treelocation of the dist tree+(c) 2003-2005, Isaac Jones, Malcolm WallaceBSD3cabal-devel@haskell.orgportableNone<QVю gA preprocessor for turning non-Haskell files with the given extension into plain Haskell source files.sFunction to determine paths to possible extra C sources for a preprocessor: just takes the path to the build directory and uses this to search for C sources with names that match the preprocessor's output name format.The interface to a preprocessor, which may be implemented using an external program, but need not be. The arguments are the name of the input file, the name of the output file and a verbosity level. Here is a simple example that merely prepends a comment to the given source file: tppTestHandler :: PreProcessor ppTestHandler = PreProcessor { platformIndependent = True, runPreProcessor = mkSimplePreProcessor $ \inFile outFile verbosity -> do info verbosity (inFile++" has been preprocessed to "++outFile) stuff <- readFile inFile writeFile outFile ("-- preprocessed as a test\n\n" ++ stuff) return ExitSuccess We split the input and output file names into a base directory and the rest of the file name. The input base dir is the path in the list of search dirs that this file was found in. The output base dir is the build dir where all the generated source files are put.(The reason for splitting it up this way is that some pre-processors don't simply generate one output .hs file from one input file but have dependencies on other generated files (notably c2hs, where building one .hs file may require reading other .chi files, and then compiling the .hs file may require reading a generated .h file). In these cases the generated files need to embed relative path names to each other (eg the generated .hs file mentions the .h file in the FFI imports). This path must be relative to the base directory where the generated files are located, it cannot be relative to the top level of the build tree because the compilers do not look for .h files relative to there, ie we do not use "-I .", instead we use "-I dist/build" (or whatever dist dir has been set by the user)Most pre-processors do not care of course, so mkSimplePreProcessor and runSimplePreProcessor functions handle the simple case.(Apply preprocessors to the sources from  [2 for a given component (lib, exe, or test suite).tQFind the first extension of the file that exists, and preprocess it if required.>Convenience function; get the suffixes of these preprocessors.GStandard preprocessors: GreenCard, c2hs, hsc2hs, happy, alex and cpphs.uCStandard preprocessors with possible extra C sources: c2hs, hsc2hs.sFind any extra C sources generated by preprocessing that need to be added to the component (addresses issue #238).tsource directoriesbuild directorypreprocess for sdistmodule file name verbositybuiltin suffixespossible preprocessorsIsaac Jones 2003-2005BSD3cabal-devel@haskell.orgportableNone<QV0Hooks allow authors to add specific functionality before and after a command is run, and also to specify additional preprocessors.WARNING: The hooks interface is under rather constant flux as we try to understand users needs. Setup files that depend on this interface may break in future releases. Used for  ./setup testRead the description file3Custom preprocessors in addition to and overriding .gThese programs are detected at configure time. Arguments for them are added to the configure command.$Hook to run before configure command?Over-ride this hook to get different behavior during configure.#Hook to run after configure commandHHook to run before build command. Second arg indicates verbosity level.;Over-ride this hook to get different behavior during build.GHook to run after build command. Second arg indicates verbosity level.GHook to run before repl command. Second arg indicates verbosity level.DOver-ride this hook to get different behavior during interpretation.FHook to run after repl command. Second arg indicates verbosity level.HHook to run before clean command. Second arg indicates verbosity level.;Over-ride this hook to get different behavior during clean.GHook to run after clean command. Second arg indicates verbosity level.Hook to run before copy command:Over-ride this hook to get different behavior during copy.Hook to run after copy command"Hook to run before install command=Over-ride this hook to get different behavior during install.dHook to run after install command. postInst should be run on the target, not on the build machine.HHook to run before sdist command. Second arg indicates verbosity level.;Over-ride this hook to get different behavior during sdist.GHook to run after sdist command. Second arg indicates verbosity level.#Hook to run before register commandBOver-ride this hook to get different behavior during registration."Hook to run after register command%Hook to run before unregister commandDOver-ride this hook to get different behavior during unregistration.$Hook to run after unregister commandKHook to run before hscolour command. Second arg indicates verbosity level.>Over-ride this hook to get different behavior during hscolour.JHook to run after hscolour command. Second arg indicates verbosity level.JHook to run before doctest command. Second arg indicates verbosity level.=Over-ride this hook to get different behavior during doctest.IHook to run after doctest command. Second arg indicates verbosity level.JHook to run before haddock command. Second arg indicates verbosity level.=Over-ride this hook to get different behavior during haddock.IHook to run after haddock command. Second arg indicates verbosity level. Hook to run before test command.:Over-ride this hook to get different behavior during test.Hook to run after test command.!Hook to run before bench command.;Over-ride this hook to get different behavior during bench. Hook to run after bench command.Empty  which do nothing.22Thomas Tuegel 2010BSD3cabal-devel@haskell.orgportableNone<QV6 Perform the " ./setup test " action.!positional command-line arguments information from the .cabal file#information from the configure stepflags sent to testJohan Tibell 2011BSD3cabal-devel@haskell.orgportableNone<QV  Perform the " ./setup bench " action.!positional command-line arguments information from the .cabal file#information from the configure stepflags sent to benchmarkSimon Marlow 2004BSD3cabal-devel@haskell.orgportableNone<QV0v#Callback type for use by sdistWith.Create a source distribution.List all source files of a package. Returns a tuple of lists: first component is a list of ordinary files, second one is a list of those files that may be executable.wKList those source files that may be executable (e.g. the configure script).xHList those source files that should be copied with ordinary permissions.)Prepare a directory tree of source files.y)Find the setup script file, if it exists.zKCreate a default setup script in the target directory, if it doesn't exist.{Find the main executable file.|Find a module definition file#TODO: I don't know if this is right}CGiven a list of include paths, try to find the include file named f]. Return the name of the file and the full path, or exit with error if there's no such file.~(Remove the auto-generated modules (like  'Paths_*') from 'exposed-modules' and 'other-modules'.Prepare a directory tree of source files for a snapshot version. It is expected that the appropriate snapshot version has already been set in the package description, eg using  or . Modifies a  `A by appending a snapshot number corresponding to the given date. Modifies a A by appending a snapshot number corresponding to the given date.WGiven a date produce a corresponding integer representation. For example given a date 18032008 produce the number 20080318.ECreate an archive from a tree of source files, and clean up the tree.8Given a buildinfo, return the names of all source files.)The name of the tarball without extensionv verbosityinfo from cabal fileinfo from configuresource tree to archivename of archive to createinformation from the tarballInformation from configureverbosity & snapshotbuild prefix (temp dir)'extra preprocessors (includes suffixes) verbosityinfo from the cabal file'extra preprocessors (include suffixes) verbosityinfo from the cabal filesource tree to populate'extra preprocessors (includes suffixes) verbosityinfo from the cabal filesource tree to populate(extra preprocessors (includes suffixes) verbosityinfo from the cabal file source treeExtra preprocessorsExposed modules  Isaac Jones 2003-2005BSD3cabal-devel@haskell.orgportableNone"#1<QV++}An external dependency from the package database, OR an internal dependency which we are getting from the package database.An internal dependency ( H should be a library name) which we are going to have to build. (The  C here is a hack to get a modest amount of polymorphism out of the   typeclass.)/The errors that can be thrown when reading the  setup-config file.No header found.Incorrect header.Cannot parse file contents.No file!Mismatched version. Format a  as a user-facing error message. Read the . Throw an exception if the file is missing, if the file cannot be read, or if the file was created by an older version of Cabal. Read the 5, returning either an error or the local build info.Try to read the . Read the . Throw an exception if the file is missing, if the file cannot be read, or if the file was created by an older version of Cabal.Try to read the .$After running configure, output the  to the .(Identifier of the current Cabal package.+Identifier of the current compiler package. Parse the  setup-configL file header, returning the package identifiers for Cabal and the compiler. Generate the  setup-config file header.MCheck that localBuildInfoFile is up-to-date with respect to the .cabal file.Get the path of dist/setup-config.Return the "dist/" prefix, or the default prefix. The prefix is taken from (in order of highest to lowest preference) the override prefix, the "CABAL_BUILDDIR" environment variable, or the default prefix.Return the "dist/" prefix, or the default prefix. The prefix is taken from (in order of highest to lowest preference) the override prefix, the "CABAL_BUILDDIR" environment variable, or + is used. Call this function to resolve a  *DistPref0 flag whenever it is not known to be set. (The  *DistPref; flags are always set to a definite value before invoking  UserHooks.) Perform the "./setup configure" action. Returns the  .setup-config file.,Check if the user used any deprecated flags.Sanity check: if '--exact-configuration'X was given, ensure that the complete flag assignment was specified on the command line.Create a PackageIndex that makes *any libraries that might be* defined internally to this package look like installed packages, in case an executable should refer to any of them as dependencies.It must be *any libraries that might be* defined rather than the actual definitions, because these depend on conditionals in the .cabal file, and we haven't resolved them yet. finalizePD does the resolution of conditionals, and it takes internalPackageSet as part of its input.Returns true if a dependency is satisfiable. This function may report a dependency satisfiable even when it is not, but not vice versa. This is to be passed to finalizePD.;Finalize a generic package description. The workhorse is 7 but there's a bit of other nattering about necessary.(TODO: what exactly is the business with  flaggedTests and flaggedBenchmarks?>Check for use of Cabal features which require compiler support$Select dependencies for the package.?Select and apply coverage settings for the build based on the  and .4Compute the effective value of the profiling flags --enable-library-profiling and --enable-executable-profiling from the specified . This may be useful for external Cabal tools which need to interact with Setup in a backwards-compatible way: the most predictable mechanism for enabling profiling across many legacy versions is to NOT use --enable-profiling! and use those two flags instead. Note that --enable-executable-profilingF also affects profiling of benchmarks and (non-detailed) test suites.@Select and apply profiling settings for the build based on the  and .GTest for a package dependency and record the version we have installed.;List all installed packages in the given package databases.Like , but for a single package DB.,NB: Why isn't this always a fall through to ? That is because  performs some sanity checks on the package database stack in question. However, when sandboxes are involved these sanity checks are not desirable.A set of files (or directories) that can be monitored to detect when there might have been a change in the installed packages.KThe user interface specifies the package dbs to use with a combination of --global, --user and $--package-db=global|user|clear|$filer. This function combines the global/user flag and interprets the package-db flag into a single package db stack.Configure a required program, ensuring that it exists in the PATH (or where the user has specified the program must live) and making it available for use via the q; interface. If the program is known (exists in the input q), we will make sure that the program matches the required version; otherwise we will accept any version of the program and assume that it is a simpleProgram.Makes a  H" from C compiler and linker flags.This can be used with the output from configuration programs like pkg-config and similar package-specific programs like mysql-config, freealut-config etc. For example: ccflags <- getDbProgramOutput verbosity prog progdb ["--cflags"] ldflags <- getDbProgramOutput verbosity prog progdb ["--libs"] return (ccldOptionsBuildInfo (words ccflags) (words ldflags))=Output package check warnings and errors. Exit if any errors.0Preform checks if a relocatable build is allowedThe file path of the  setup-config file.The file path of the  setup-config file.The dist directory path.The dist directory path.The dist directory path.The dist directory path.The  to write.The file contents.The processed package.The dist directory path.default "dist" prefixoverride "dist" prefixoverride "dist" prefixuse external internal deps?exact configuration? installed set internal setrequired dependenciesPtests if a dependency is satisfiable. Might say it's satisfiable even when not.internal packagesinstalled packages required depsPackage id of current packageInstalled packages;Packages for which we have been given specific deps to use'Are we configuring a single component?The stack of package databases.! ! hIsaac Jones 2003-2005, Ross Paterson 2006, Duncan Coutts 2007-2008, 2012BSD3cabal-devel@haskell.orgportableNone<QV 4Build the libraries and executables in this package.7Start an interpreter without loading any package files.EAdd extra C sources generated by preprocessing to build information.GAdd extra C++ sources generated by preprocessing to build information.Translate a exe-style  # component into an exe for buildingTranslate a lib-style  ( component into a lib + exe for buildingTranslate a exe-style  *# component into an exe for buildingRInitialize a new package db file for libraries defined internally to the package.Build a foreign libraryeNOTE: We assume that we already checked that we can actually build the foreign library in configure.Runs  on every configured component.FCreates the autogenerated files for a particular configured component.!Generate and write out the Paths_ pkg.hs and cabal_macros.h files'Mostly information from the .cabal fileConfiguration information#Flags that the user passed to build%preprocessors to run before compiling'Mostly information from the .cabal fileConfiguration information#Flags that the user passed to build%preprocessors to run before compiling "dist" prefix'mostly information from the .cabal fileConfiguration informationThe verbosity to use "dist" prefix'mostly information from the .cabal fileConfiguration informationThe verbosity to useIsaac Jones 2003-2005BSD3cabal-devel@haskell.orgportableNone6<QV`3The FilePath of a directory, it's a monoid under '( /)'.TA record that represents the arguments to the haddock executable, a product monoid.?Path to the interface file, relative to argOutputDir, required.Package name, required.!(Hide modules ?, modules to hide)Ignore export lists in modules?A(Template for modules, template for symbols, template for lines).Generate hyperlinked sourcesOptional custom CSS file.Optional URL to contents page.%HTML or Hoogle doc or both? Required. 0(Interface file, URL to the HTML docs for links).$Where to generate the documentation.Page title, required.Prologue text, required. Additional flags to pass to GHC."To find the correct GHC, required.Modules to process.*Call haddock with the specified arguments.Given a list of  6ps, return a list of interfaces and HTML paths, and an optional warning for packages with missing documentation.template for HTML locationtemplate for HTML locationtemplate for HTML locationtemplate for HTML locationtemplate for HTML locationCalled when the  exe is not found.Moritz Angermann 2017BSD3cabal-devel@haskell.orgportableNone6<QVAA record that represents the arguments to the doctest executable.Modules to processIsaac Jones 2003-2005BSD3cabal-devel@haskell.orgportableNone<QVS A simple implementation of main for a Cabal setup script. It reads the package description file using IO, and performs the action specified on the command line. A version of [ that is passed the command line arguments, rather than getting them from the environment.A customizable version of .A customizable version of - that also takes the command line arguments.Like P, but accepts the package description as input rather than using IO to read it.A customizable version of .A customizable version of - that also takes the command line arguments.VCombine the preprocessors in the given hooks with the preprocessors built into cabal.Try to read the  Read the  or throw an exception.LHooks that correspond to a plain instantiation of the "simple" build systemBasic autoconf : runs  ./configure , if present.the pre-hooks , , , ,  and + read additional build information from package .buildinfo , if present.Thus  configure/ can use local system information to generate package .buildinfo and possibly other files. !#/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\^_`stuvxwyz{|}~ ,-.>FECBJLI?@ADGHKMNOP[mzyfielo]qdvkbh~r\^_`acgjnpstuwx{|}                        ! " # i j k l m n o                         ! " #  !"#$%$&$'$()*)+,-./012345"6"7"8"9:;<=>?$@$A)BCD"E"FGHI)JKL"MCN"OPQR4STUVWXWYWZW[W\]^]_]`]abcdeWf"gWhijikilimnopqWrstWunvnwWxWyWz{|{}{~nKKKKCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"""""""""""""" " " " " "$$$$$$PPPPPPPP !"#$%&'()*+,-./0123456789:;:<:=:>:?:@:A:BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcbdbe)f)g)h)i)j)k)l)m)n)opqrpqspqtpquvwxvyvzv{|}~|}             sY%\                 ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_``abbcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./012345657  89:;<=>?@ABCDEFGHIJKKLMNOPPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyyz{|}~          !!!"5"""""""##############$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % % %&&&&&&&&&&'''''''' '!''"'#'$'%'&'''(')'*'+(,(-(.(/(0(1(2(3(4(5(6(7(8(9(:(;(<(=(>(?(@(A(B(C(D(E(F(G(H(I(J(K(L(M(N(O(P(Q(R(S(T(U(V(W(X(Y(Z([(\(](^(_(`(a(b(c(d(e(f(g(h(i(j(k(l(m(n(o)p)q)r)s)t)s)u)u)v)w)x)y)z){)|)})~))))))))))))))********************************************************+++++++,,,,,,,,,,,,,,,------------------............///////////////0000000000 0 0 0 0 0111111111111111122 2!2"2#2$2%2&2'2(2)2*2+3,3,3-3.3/303132333435363738393:3;3<3=3>3?3@3A3B3C3D3E3F3G3H3I3J3K3L3M3N3O3P3Q3R3S3T3U3V3W3X3Y3Z3[3\3]3^3_3`3a3b3c3d3e3f3g3h3i3j3k3l3m3n3o3p3q3r3s3t3u3v3w3x3y3z3{3|3}4~4444444444444455555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 5 5 5 5 5555555555555555555 5!5"5#5$5%5&5'5(5)5*5+5,5-5.5/505152535455565758595:5;5<5=5>5?5@5A5B5C5D5E5F5G5H5I5J5K5L5M5N5O5P5Q5R5S5T5U5V5W5X5Y5Z5[5\5]5^5_5`5a5b5c5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5s5t5u5v5w5x5y5z5{5|5}5~5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555666666666666666666666 6 6 6 6 6666666666666666667 7!7"7#7$7%7&7'7(7)7*7+7,7-7.7/707172737475767778797:7;7<8=8>8=8?8@8A8B8C8D8E8F8G8H9I9I9J9K9L9M9N9O9P9Q:R:R:S:T:U::V:W:X:Y:Z:[:\:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k;l;l;m;n;o;p;q;r;s;t;u;v;w;x;y;z;{;|<<<}<~<<<<<<<<<<<<<=================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>??????????@@@@@@@@@@@@@@@AAAAAAAAAAAAABBBBBBBBBBBBC 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 E E E E E E E E !E "E #E $E %E &F=F 'F (F )F *F +F ,F[F;F -F .F /F 0F 1F 2F 3F 4F 5F 6F 7F?F@FAFBFHFDFCFEFGG 8G 9G :G ;G <G =G >G ?G @G AG BG CG DG EG FG GG HG IG JG KG LG MG NG OG PG QG RG SG TG UG VG WG XG YG ZG [G \G ]G ^G _G `G aG bG cG dG eG fG gG hG iG jG kG lG mG nG oG pG qG rG sG tG uG vG wG xG yG zG {G |G }G ~G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G GTG G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H 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 'III (I )I *I *I +I +I ,I ,I -I -I .I .I /I 0I 1I 2I 3I 4I 5I 6I 7I 8I 9I :I ;I <I =I >I ?I @I AI BI CI DI EI FI GI HI II JI KI LI MI NI OI P  Q R S T U V WL XL YL ZL [L \L ]L ^L _L `L aL bL cL dL eL fM gM hM iM jM kM lM mM nM oM pM qM rM sM tM uM vM wM xM yN zN {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 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 P P P P P P Q Q Q Q Q Q Q Q Q Q Q Q Q R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R S S S S S S S S T T T T T T T U U V V V V V V V V V V V V V V V W W W W W W W W W W W W W W W X X X X X X X !X "X #X $X %X &X 'Y (Y (Y )Y *Y +Y ,Y -Y .Y /Y 0Y 1Y 2Y 3Y 4Y 5Y 6Y 7Z 8Z 8Z 9Z :Z ;Z <Z =Z >Z ?Z @Z AZ BZ C[ 9[ :\ D\ E\ F\ G\ H\ I\ J\ K] L] M] N] O] P] Q] R] S] T] U] V] W] X] Y] Z] [] \^ ]^ ]^ ^^ _^^ `^ a^ b^ c^ d^ e^ f^ g^ h_ i_ j_ k_ l_ m_ n_ o_ p_ q_ r_ s_ t_ u_ v_ w` x` x` y` z` {` |` }` ~` ` a a a a a a a a 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 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 c c c c c c d d d d d d d d d d d d e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e eTe e e !e "e #e $e %e &e 'e (e )e *e +e ,e -e .e /e 0e 1e 2e 3e 4e 5e 6f 7f 8g 9g :g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g gTg g g !g "g #g $g ;h <h <h =h >h ?h @h Ah Bh Ch Dh Eh Fh Gh Hh Ih Jh Kh Lh Mi =i >i ?j Nj Nj Oj Pj Qj Rj Sj Tj Uj Vj Wj Xj Yj Zj [j \j ]j ^j _j `j aj bk Ok Pk Qk Rk Sk Tl cl dl dl el fl gl hl il jl kl ll ml nl ol pl ql rl sl tl ul vl wl xl yl zl {l |l }l ~l l l l l l l l l l l m em fm gm hm im jm kn n n n n n :n n n n n n n n n n n n n o o o p p 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 r r r r r r r r r r r r r r r r r r r s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s 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 t t t t t t t t t t t t t t t t t t t t t t t t t t u u?u-u u u u u u u u u u u u u u u u u !u "u #u $u %u &u 'u (u )u *u +u ,u -u .u /u 0u 1u 2u 3u 4u 5u 6u 7u 8u 9u :u ;u <u =u >u ?u @u Au Bu Cu Du Eu Fu Gu Hu Iu Ju Ku Lu Mu Nu Ou Pu Qu Ru Su Tu Uu Vu Wu Xu Yu Zv $v "v !v v v #v v v [v v v v v \v ]v ^v _w `x x x y ay by cy dz ez ez fz gz hz iz jz kz lz mz nz oz p{ q{ q{ r{ s{ t{ l{ u{ v{ { { { { { { { { { { w{ x{ y{ P{ z{ {{ |{ }{ ~{ { { { { { { { { { { { { { { { { { { { { { { { { { { { { | r| l| t| u| s| v| | | | | | | | | | | w| x| y| P| z| {| || }| ~| | | | | | | | | | | | | | |                                                                                      } } } } } } } } } } } } } } } } } } } ~ ~ ~ ~ ~~~~~      !"#$%&'()*+,-./01234566789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      L !"#$%&'()*+,-./012345K6K6K7K8K9K:K:K;K<K=K>K?K@KAKBKCKDKEKFKGKHKHKIKJKKKLKMKNKNKOKPKQKRKSKTKUKVKVKWKXKYKZK[K[K\K]K^K_K`KaKbKcKdKeKfKgKhKiKjKkKlKmKnKoKpKqKrKrKsKtKuKvKwKwKxKyKzK{K|K}K~KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK K KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK K K K K KKKKKKKKKK#K$KKKKKKKKKK K!K"K#K$K :K%K&K'K(K)K*K+K,K-K.K/K0K1K2K3K4K5K6K7K8K9K:K;K<K=K>K?K@KAKBKCKDKEKFKGKHKIKJK NK PK MKKKLKMKNKOKPKQKRKSKTKUKVKWKXKYKZK[K\K]K^K_K`KaKbKcKdKeKfKgKhKiKjKkKlKmKnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGJHJIJJJ uJKJLJMJNJOJPQRSTUVWXYZ[\]^_`abcdefghijkklmnoopqrsstuvwxyz{6|}~    =         !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      ~ w !"#$%&'()*+,--./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~iiipppppppqpqpqpqppppvvvvvvvvvvvvvvvvvvvvvvvv;vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvwvwvwvwvwvwvwvwvw vwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvw vwKvw vw vw vw vwvwvwvwvwvwvwvwvw)vw*vw+vwvwvwvwvw\vwvwvwvwvwvwvw%vwvwvwvw vw!"#"-$%&'()*+,-./012345676 8696:6;6<6=6>6 6 ?@ABCDEFGHIJKLMNOPQQRSTEUVEWG&XY)Z:[\]^_`aKb>c>d>e>fGgIhijkijlmnopqrstuvwxyz{|}~r =ruij}~KKKK      !"#$%&'()*+,)-./0123456789:;< q q          P        y z | }      =>?@ABCDEF*GHIJKLMNOP+QRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwYxZy^z{|}~                                         #Cabal-2.2.0.1-JS0vobxWxH7sbYKd0omMO$Distribution.Compat.Prelude.InternalDistribution.Compat.SemigroupDistribution.Compat.StackDistribution.Compat.ParsingDistribution.Compat.ExceptionDistribution.Utils.GenericDistribution.Compat.ReadPDistribution.Compat.GraphDistribution.Compat.DirectoryDistribution.Compat.BinaryDistribution.Compat.NewtypeDistribution.Compat.DListDistribution.Compat.LensDistribution.Simple.UtilsDistribution.Compat.CharParsingDistribution.CabalSpecVersionDistribution.Compat.CreatePipe&Distribution.PackageDescription.Quirks%Distribution.PackageDescription.UtilsDistribution.Parsec.CommonDistribution.Parsec.FieldDistribution.Parsec.LexerMonadDistribution.Parsec.LexerDistribution.Parsec.ParserDistribution.PrettyDistribution.Simple.CCompiler$Distribution.Simple.PreProcess.Unlit$Distribution.Simple.Program.InternalDistribution.TestSuiteDistribution.Types.ConditionDistribution.Types.CondTreeDistribution.Utils.IODataDistribution.Utils.MapAccumDistribution.Utils.ProgressDistribution.Utils.ShortText#Distribution.Parsec.FieldLineStreamDistribution.Parsec.ClassDistribution.TextDistribution.Types.VersionDistribution.Types.VersionRange"Distribution.Types.VersionIntervalDistribution.Types.SourceRepo"Distribution.Types.SourceRepo.Lens Distribution.Types.PkgconfigName!Distribution.Types.ForeignLibType#Distribution.Types.ForeignLibOption"Distribution.Types.ExecutableScopeDistribution.Types.ComponentIdDistribution.Types.BuildTypeDistribution.Types.AbiHashDistribution.System"Distribution.SPDX.LicenseReferenceDistribution.SPDX.LicenseId$Distribution.SPDX.LicenseExceptionId#Distribution.SPDX.LicenseExpressionDistribution.SPDX.LicenseDistribution.ReadEDistribution.ModuleName!Distribution.Types.ModuleRenaming"Distribution.Types.IncludeRenamingDistribution.FieldGrammar.ClassDistribution.VerbosityDistribution.VersionDistribution.Types.TestType%Distribution.Types.TestSuiteInterface&Distribution.Types.PkgconfigDependency Distribution.Types.BenchmarkType%Distribution.Types.BenchmarkInterfaceDistribution.Parsec.ParseResultDistribution.LicenseLanguage.Haskell.ExtensionDistribution.CompilerDistribution.Parsec.Newtypes!Distribution.InstalledPackageInfoDistribution.Simple.SetupDistribution.Types.PackageName&Distribution.Types.UnqualComponentName Distribution.Types.ComponentNameDistribution.Types.PackageIdDistribution.Types.UnitIdDistribution.Types.ModuleDistribution.BackpackDistribution.Backpack.ModSubst Distribution.Backpack.FullUnitId!Distribution.Types.PackageId.Lens!Distribution.Types.ModuleReexportDistribution.Types.Mixin Distribution.Types.ExeDependencyDistribution.Types.Dependency!Distribution.Types.SetupBuildInfo&Distribution.Types.SetupBuildInfo.Lens Distribution.Types.DependencyMap$Distribution.Types.MungedPackageName"Distribution.Types.MungedPackageIdDistribution.PackageDistribution.Types.AnnotatedId#Distribution.Types.ComponentInclude Distribution.Types.AbiDependencyDistribution.Simple.InstallDirs&Distribution.Types.LegacyExeDependencyDistribution.Types.BuildInfo"Distribution.Types.HookedBuildInfo!Distribution.Types.BuildInfo.LensDistribution.Types.TestSuite!Distribution.Types.TestSuite.LensDistribution.Types.LibraryDistribution.Types.Library.LensDistribution.Types.ForeignLib"Distribution.Types.ForeignLib.LensDistribution.Types.Executable"Distribution.Types.Executable.LensDistribution.Types.BenchmarkDistribution.Types.Component)Distribution.Types.ComponentRequestedSpec%Distribution.Types.PackageDescription*Distribution.Types.PackageDescription.Lens,Distribution.Types.GenericPackageDescription1Distribution.Types.GenericPackageDescription.LensDistribution.Parsec.ConfVar!Distribution.Types.Benchmark.Lens$Distribution.Simple.BuildToolDepends Distribution.Types.ExposedModule'Distribution.Types.InstalledPackageInfo,Distribution.Types.InstalledPackageInfo.LensDistribution.Utils.NubListDistribution.Utils.LogProgress(Distribution.Simple.Program.ResponseFile Distribution.Simple.Program.Find!Distribution.Simple.Program.TypesDistribution.Simple.Program.Run"Distribution.Simple.Program.ScriptDistribution.Simple.Program.Hpc#Distribution.Simple.Program.BuiltinDistribution.Simple.Program.DbDistribution.Simple.Program!Distribution.Simple.Program.StripDistribution.Simple.CompilerDistribution.Simple.GHCDistribution.Simple.CommandDistribution.Simple.Program.GHC-Distribution.PackageDescription.ConfigurationDistribution.Make Distribution.FieldGrammar.Pretty Distribution.FieldGrammar.ParsecDistribution.FieldGrammar,Distribution.PackageDescription.FieldGrammar+Distribution.PackageDescription.PrettyPrint&Distribution.PackageDescription.Parsec%Distribution.FieldGrammar.FieldDescrs4Distribution.Types.InstalledPackageInfo.FieldGrammar*Distribution.Types.ComponentLocalBuildInfoDistribution.Types.TargetInfo!Distribution.Simple.Program.HcPkg Distribution.Simple.PackageIndex!Distribution.Types.LocalBuildInfo"Distribution.Simple.LocalBuildInfoDistribution.Simple.Test.LogDistribution.Simple.Program.LdDistribution.Simple.Program.ArDistribution.Simple.HpcDistribution.Simple.BuildTargetDistribution.Simple.BuildPathsDistribution.Simple.UHC%Distribution.PackageDescription.Check%Distribution.Simple.Build.PathsModuleDistribution.Simple.Test.LibV09Distribution.Simple.Test.ExeV10 Distribution.Simple.Build.MacrosDistribution.Simple.Configure)Distribution.Backpack.ConfiguredComponent%Distribution.Backpack.ComponentsGraphDistribution.Simple.LHCDistribution.Simple.JHC Distribution.Simple.HaskellSuiteDistribution.Simple.GHCJSDistribution.Simple.Install!Distribution.Backpack.ModuleShape$Distribution.Backpack.PreModuleShape%Distribution.Backpack.LinkedComponentDistribution.Compat.TimeDistribution.Backpack.Configure$Distribution.Backpack.DescribeUnitIdDistribution.Simple.RegisterDistribution.Simple.PreProcessDistribution.Simple.UserHooksDistribution.Simple.TestDistribution.Simple.BenchDistribution.Simple.SrcDistDistribution.Simple.BuildDistribution.Simple.HaddockDistribution.Simple.DoctestDistribution.Simple%Distribution.Compat.Internal.TempFileDistribution.Compat.Map.StrictDistribution.Compat.MonadFail Data.MonoidLast Verbosity annotateIODistribution.Compat.PreludeText.PrettyPrint<>Distribution.Compat.SnocListData.MapelemstoList Data.GraphGraph$Distribution.Compat.GetShortPathNameDistribution.Compat.CopyFileDistribution.Compat.EnvironmentControl.Exception IOExceptionDistribution.GetOptSystem.EnvironmentgetArgsDistribution.LexDistribution.Utils.Base62Distribution.Utils.String Data.ListnubnubBySystem.FilePath isAbsolute isRelativeDistribution.SPDXIncludeRenamingDistribution.Utils.UnionFind Data.TypeableTypeable Data.GenericsData GHC.GenericsGenericGeneric1 Data.FunctorFunctorData.Traversable Traversable Data.FoldableFoldableLanguage.Haskell.TH.SyntaxLiftDistribution.Compat.PanyCharDistribution.ParseUtils"Distribution.Simple.GHC.IPIConvert!Distribution.Backpack.ModuleScopecomputeCompatPackageIdDistribution.Types.LensDistribution.PackageDescriptionCheckDistribution.PrettyUtils Paths_Cabal Distribution.Simple.GHC.ImplInfo D.C.SetupfilterConfigureFlagsbuildfindPackageDescDistribution.Backpack.Id Distribution.Simple.GHC.InternalDistribution.Simple.GHC.IPI642mainDistribution.Backpack.UnifyMDistribution.Backpack.MixLink*Distribution.Backpack.PreExistingComponentTestType$Distribution.Backpack.ReadyComponentbaseGHC.Base++ghc-primGHC.PrimseqGHC.Listfilterzip System.IOprint Data.Tuplefstsnd otherwisemap$GHC.Num fromInteger-GHC.Real fromRationalGHC.EnumenumFrom enumFromThen enumFromToenumFromThenTo GHC.Classes==>=negatefail>>=>>fmapreturn Control.Arrowfirst Data.String fromString fromIntegral realToFrac toInteger toRationalmemptymappendmconcat<*>pure*>BoundedEnumEq GHC.FloatFloating FractionalIntegralMonad Data.DataNumOrdGHC.ReadReadReal RealFloatRealFracGHC.ShowShowData.Typeable.InternalIsString Applicative SemigroupMonoid GHC.TypesBoolCharDoubleFloatIntGHC.IntInt8Int16Int32Int64 integer-gmpGHC.Integer.TypeIntegerMaybeOrderingRationalWordGHC.WordWord8Word16Word32Word64 Data.EitherEitherGHC.Stack.Types CallStackFalseNothingJustTrueLeftRightLTEQGT Control.MonadunlessfoldMfilterMfor sequenceAtraverseControl.ApplicativeoptionalreadIOreadLn appendFile writeFilereadFileinteract getContentsgetLinegetCharputStrLnputStrputChar GHC.StackwithFrozenCallStack callStackGHC.IO.ExceptionioErrorGHC.IOFilePath userErrorIOError GHC.ExceptionprettyCallStackdisplayExceptionfindnotElemallanyorand concatMapconcat sequence_for_ traverse_productsumminimummaximumelemlengthnullfoldl1foldr1foldl'foldlfoldrfoldMapData.Semigroup.InternalgetAllAllgetAnyAny Data.OldListunwordswordsunlineslinesunfoldrsortBysort intercalate intersperse isInfixOf isSuffixOf isPrefixOf Text.ReadreadreadseitherData.Ord comparinglex readParenreadList readsPrecText.ParserCombinators.ReadPReadSatanhacoshasinhtanhcoshsinhatanacosasintancossinlogBase**sqrtlogexppiatan2isIEEEisNegativeZeroisDenormalized isInfiniteisNaN scaleFloat significandexponent encodeFloat decodeFloat floatRange floatDigits floatRadix GHC.UnicodetoUppertoLowerisUpper isAlphaNumisAlphaisDigitisSpacevoid<$>lcmgcd^^^oddevendivModquotRemmoddivremquotrecip/floorceilingroundtruncateproperFractionmaxBoundminBoundfromEnumtoEnumpredsuccGHC.Charchr showParen showStringshowCharshowsShowSshowListshow showsPrecunzip3unzipzipWith3zipWithzip3!!lookupreversebreakspansplitAtdroptake dropWhile takeWhilecycle replicaterepeatiteratescanr1scanrscanl1scanlinitlasttailhead Data.MaybemapMaybe catMaybes listToMaybe maybeToList fromMaybe isNothingisJustmaybeuncurrycurrysubtractsignumabs*+asTypeOfuntil$!flip.constidordapliftM2liftMwhen=<<<$<*manysome<|>empty Alternativemplusmzero MonadPlusStringGHC.Err undefinederrorWithoutStackTraceerror/=compare<=&&||not<>maxminbinary-0.8.5.1Data.Binary.ClassputListgetputBinarycontainers-0.5.11.0Data.Map.InternalMap CyclicSCC AcyclicSCCSCCdeepseq-1.4.3.0Control.DeepSeqrnfNFDatadirectory-1.3.1.5System.Directory listDirectory makeAbsolutedecodeFileOrFail'decodeOrFailIOtryIOcatchIO catchExitNewtypepackunpackalaalafpack'unpack'$fNewtypeEndo(->)$fNewtypeProducta $fNewtypeSuma$fNewtypeIdentityaLast'getLast'gmappendgmempty $fMonoidLast'$fSemigroupLast'$fGSemigroup:*:$fGSemigroupM1$fGSemigroupK1 $fGMonoid:*: $fGMonoidM1 $fGMonoidK1 $fEqLast' $fOrdLast' $fReadLast' $fShowLast' $fBinaryLast'$fFunctorLast'$fApplicativeLast'$fGenericLast' WithCallStackparentSrcLocPrefixwithLexicalCallStackannotateCallStackIO NoCallStackIOIO<<>> genericRnfReadPParserlookpfaileof+++<++gathersatisfycharstringmunchmunch1choice skipSpaces skipSpaces1countbetweenoptionmany1skipMany skipMany1sepBysepBy1endByendBy1chainrchainlchainr1chainl1manyTill readP_to_S readS_to_P $fMonadPlusP$fAlternativeP $fMonadFailP$fMonadP$fApplicativeP $fFunctorP$fMonadPlusParser$fMonadFailParser $fMonadParser$fAlternativeParser$fApplicativeParser$fFunctorParserParsingtryskipSome unexpected notFollowedBy skipOptional sepEndBy1sepEndBy$fParsingParser$fParsingParsecT$fParsingIdentityT $fParsingRWST$fParsingRWST0$fParsingWriterT$fParsingWriterT0$fParsingReaderT$fParsingStateT$fParsingStateT0NodeNIsNodeKeynodeKey nodeNeighbors nodeValuesizememberinsert deleteKey deleteLookup unionRight unionLeftstronglyConnCompcyclesbroken neighbors revNeighborsclosure revClosuretopSort revTopSortfromDistinctListkeyskeysSettoMaptoGraph$fIsNodeEither $fNFDataGraph$fFoldableGraph $fEqGraph $fBinaryGraph $fReadGraph $fShowGraph $fIsNodeNode $fFunctorNode $fShowNode$fEqNodeDListrunDList singletonfromListsnoc$fSemigroupDList $fMonoidDListPretext runPretextALens'ALensASetterAGetterGetting Traversal'Lens' TraversalLens LensLike'LensLikeviewusesetover toDListOftoListOftoSetOfaview_1_2&^..~?~%~.=?=%=^##~#%~ cloneLens$fFunctorPretextsetFileOrdinarysetFileExecutable CharParsingnotChartextoneOfnoneOfspacesspacenewlinetabupperloweralphaNumletterdigithexDigitoctDigit satisfyRangeintegral$fCharParsingParser$fCharParsingParsecT$fCharParsingIdentityT$fCharParsingRWST$fCharParsingRWST0$fCharParsingWriterT$fCharParsingWriterT0$fCharParsingReaderT$fCharParsingStateT$fCharParsingStateT0HasCommonStanzasNoCommonStanzasHasElifNoElif CabalFeatureElif CommonStanzasCabalSpecVersion CabalSpecOldCabalSpecV1_22CabalSpecV1_24 CabalSpecV2_0 CabalSpecV2_2cabalSpecLatestcabalSpecFeaturescabalSpecSupportsspecHasCommonStanzas specHasElif$fEqCabalSpecVersion$fOrdCabalSpecVersion$fShowCabalSpecVersion$fReadCabalSpecVersion$fEnumCabalSpecVersion$fBoundedCabalSpecVersion$fDataCabalSpecVersion$fGenericCabalSpecVersion$fEqCabalFeature$fOrdCabalFeature$fShowCabalFeature$fReadCabalFeature$fEnumCabalFeature$fBoundedCabalFeature$fDataCabalFeature$fGenericCabalFeature $fEqHasElif $fShowHasElif$fEqHasCommonStanzas$fShowHasCommonStanzas createPipe patchQuirksuserBugcabalBugPositionPWarning PWarnTypePWTOtherPWTUTF PWTBoolCase PWTVersionTag PWTNewSyntax PWTOldSyntaxPWTDeprecatedFieldPWTInvalidSubsectionPWTUnknownFieldPWTUnknownSectionPWTTrailingFieldsPWTExtraMainIsPWTExtraTestModulePWTExtraBenchmarkModule PWTLexNBSP PWTLexBOM PWTLexTabPWTQuirkyCabalFile PWTDoubleDashPWTMultipleSingularFieldPWTBuildTypeDefaultPWTVersionLeadingZerosPError showPWarning showPErrorincPosretPosshowPoszeroPos$fNFDataPWarnType$fBinaryPWarnType$fNFDataPosition$fBinaryPosition$fNFDataPWarning$fBinaryPWarning$fNFDataPError$fBinaryPError $fEqPWarnType$fOrdPWarnType$fShowPWarnType$fEnumPWarnType$fBoundedPWarnType$fGenericPWarnType $fEqPosition $fOrdPosition$fShowPosition$fGenericPosition$fShowPWarning$fGenericPWarning $fShowPError$fGenericPErrorName FieldName SectionArg SecArgName SecArgStr SecArgOther FieldLineFieldSection fieldNamefieldAnn fieldUniverse sectionArgAnnmkNamegetNamenameAnn $fEqFieldLine$fShowFieldLine$fFunctorFieldLine$fEqSectionArg$fShowSectionArg$fFunctorSectionArg$fEqName $fShowName $fFunctorName $fEqField $fShowField$fFunctorField InputStreamLexStatecurPoscurInputcurCodewarnings LexWarningLexWarningTypeLexWarningNBSP LexWarningBOM LexWarningTab LexResultLexunLex toPWarnings execLexersetPosgetPos adjustPosgetInputsetInput getStartCode setStartCode addWarning $fMonadLex$fApplicativeLex $fFunctorLex$fEqLexWarningType$fOrdLexWarningType$fShowLexWarningType$fShowLexWarningLTokenLTokenTokSymTokStrTokOtherIndent TokFieldLineColon OpenBrace CloseBraceEOF LexicalErrorlexTokenltest mkLexState bol_sectionin_field_bracesin_field_layout in_section$fFunctorAlexLastAcc $fShowToken $fShowLToken readFields readFields'$fStreamLexState'IdentityLToken SeparatorPrettypretty prettyShow defaultStyle flatStyle showFilePath showToken showFreeText indentWith$fPrettyIdentity $fPrettyInt $fPrettyBoolCDialectC ObjectiveC CPlusPlusObjectiveCPlusPluscSourceExtensionscDialectFilenameExtensionfilenameCDialect$fSemigroupCDialect$fMonoidCDialect $fEqCDialect$fShowCDialectplainunlitstripExtractVersionResultPassFailErrorProgressFinishedOptionsGroup ExtraOptions groupName concurrently groupTests OptionType OptionFile OptionString OptionNumber OptionBool OptionEnum OptionSet OptionRngSeedoptionFileMustExistoptionFileIsDiroptionFileExtensionsoptionStringMultilineoptionNumberIsIntoptionNumberBounds OptionDescr optionNameoptionDescription optionType optionDefault TestInstancerunnametagsoptions setOption testGroup$fEqOptionType$fReadOptionType$fShowOptionType$fEqOptionDescr$fReadOptionDescr$fShowOptionDescr $fEqResult $fReadResult $fShowResult ConditionVarLitCNotCOrCAndcNotcAndcOrsimplifyCondition$fNFDataCondition$fBinaryCondition$fMonadPlusCondition$fAlternativeCondition$fSemigroupCondition$fMonoidCondition$fMonadCondition$fApplicativeCondition$fTraversableCondition$fFoldableCondition$fFunctorCondition$fShowCondition $fEqCondition$fDataCondition$fGenericCondition CondBranchcondBranchConditioncondBranchIfTruecondBranchIfFalseCondTreeCondNode condTreeDatacondTreeConstraintscondTreeComponents condIfThencondIfThenElse mapCondTreemapTreeConstrs mapTreeConds mapTreeDatatraverseCondTreeVtraverseCondBranchVextractConditionsimplifyCondTreeignoreConditions$fNFDataCondBranch$fBinaryCondBranch$fFoldableCondBranch$fNFDataCondTree$fBinaryCondTree$fShowCondBranch$fEqCondBranch$fDataCondBranch$fGenericCondBranch$fFunctorCondBranch$fTraversableCondBranch$fShowCondTree $fEqCondTree$fDataCondTree$fGenericCondTree$fFunctorCondTree$fFoldableCondTree$fTraversableCondTree IODataModeIODataModeTextIODataModeBinaryIOData IODataText IODataBinary hGetContents hPutContents$fNFDataIOData mapAccumM$fApplicativeStateM$fFunctorStateM stepProgress failProgress foldProgress$fAlternativeProgress$fApplicativeProgress$fMonadProgress$fFunctorProgressdecodeStringUtf8encodeStringUtf8 ShortText toShortText fromShortText$fIsStringShortText$fMonoidShortText$fSemigroupShortText$fReadShortText$fShowShortText$fNFDataShortText$fBinaryShortText $fEqShortText$fOrdShortText$fGenericShortText$fDataShortTextwrapTextwrapLinewithFileContentswriteFileAtomic fromUTF8BS fromUTF8LBStoUTF8BS toUTF8LBS validateUTF8 ignoreBOM readUTF8FilewithUTF8FileContents writeUTF8FilenormaliseLineEndingsdropWhileEndLEtakeWhileEndLEordNubordNubBy listUnion ordNubRightlistUnionRightsafeTailequating lowercaseisAscii isAsciiAlphaisAsciiAlphaNum unintersperse breakMaybe spanMaybeunfoldrMisAbsoluteOnAnyPlatformisRelativeOnAnyPlatformFieldLineStreamFLSLastFLSConsfieldLinesToStreamfieldLineStreamFromStringfieldLineStreamFromBS$fStreamFieldLineStreammChar$fShowFieldLineStream ParsecParserPPunPP CabalParsing parsecWarningparsecHaskellStringaskCabalSpecVersionParsecparsec lexemeParsec simpleParsec eitherParsecexplicitEitherParsecrunParsecParser parsecToken parsecToken'parsecFilePathparsecStandardparsecCommaListparsecLeadingCommaListparsecOptCommaList parsecQuotedparsecMaybeQuotedparsecUnqualComponentName$fCabalParsingParser $fParsecBool$fParsecIdentity$fCabalParsingParsecParser$fCharParsingParsecParser$fParsingParsecParser$fMonadFailParsecParser$fMonadPlusParsecParser$fMonadParsecParser$fAlternativeParsecParser$fApplicativeParsecParser$fFunctorParsecParserTextdispparsedisplay simpleParsestdParse $fTextVersion$fTextIdentity $fTextInt $fTextBoolVersion mkVersionversion0 mkVersion'versionNumbers nullVersion alterVersion validVersion showVersion$fParsecVersion$fPrettyVersion$fNFDataVersion$fBinaryVersion $fReadVersion $fShowVersion $fOrdVersion $fDataVersion $fEqVersion$fGenericVersion VersionRangeF AnyVersionF ThisVersionF LaterVersionFOrLaterVersionFEarlierVersionFOrEarlierVersionFWildcardVersionFMajorBoundVersionFUnionVersionRangesFIntersectVersionRangesFVersionRangeParensF VersionRange AnyVersion ThisVersion LaterVersionOrLaterVersionEarlierVersionOrEarlierVersionWildcardVersionMajorBoundVersionUnionVersionRangesIntersectVersionRangesVersionRangeParens anyVersion noVersion thisVersionnotThisVersion laterVersionorLaterVersionearlierVersionorEarlierVersionunionVersionRangesintersectVersionRanges withinVersionmajorBoundVersionprojectVersionRangecataVersionRangeembedVersionRangeanaVersionRangefoldVersionRangehyloVersionRangenormaliseVersionRangestripParensVersionRange withinRangewildcardUpperBoundisWildcardRangemajorUpperBound hasUpperBound hasLowerBound$fTextVersionRange$fNFDataVersionRange$fBinaryVersionRange$fParsecVersionRange$fPrettyVersionRange$fDataVersionRange$fEqVersionRange$fGenericVersionRange$fReadVersionRange$fShowVersionRange$fDataVersionRangeF$fEqVersionRangeF$fGenericVersionRangeF$fReadVersionRangeF$fShowVersionRangeF$fFunctorVersionRangeF$fFoldableVersionRangeF$fTraversableVersionRangeFBoundExclusiveBoundInclusiveBound UpperBound NoUpperBound LowerBoundVersionIntervalVersionIntervalsasVersionIntervalsversionIntervalsmkVersionIntervalswithinIntervalstoVersionIntervalsfromVersionIntervalsunionVersionIntervalsintersectVersionIntervalsinvertVersionIntervalsrelaxLastIntervalrelaxHeadInterval$fOrdUpperBound$fOrdLowerBound $fEqBound $fShowBound$fEqUpperBound$fShowUpperBound$fEqLowerBound$fShowLowerBound$fEqVersionIntervals$fShowVersionIntervalsRepoTypeDarcsGitSVNCVS MercurialGnuArchBazaarMonotone OtherRepoTypeRepoKindRepoHeadRepoThisRepoKindUnknown SourceReporepoKindrepoType repoLocation repoModule repoBranchrepoTag repoSubdiremptySourceRepoknownRepoTypesclassifyRepoKindclassifyRepoType$fTextRepoKind$fParsecRepoKind$fPrettyRepoKind$fNFDataRepoKind$fBinaryRepoKind$fTextRepoType$fParsecRepoType$fPrettyRepoType$fNFDataRepoType$fBinaryRepoType$fNFDataSourceRepo$fBinarySourceRepo $fEqRepoKind$fGenericRepoKind $fOrdRepoKind$fReadRepoKind$fShowRepoKind$fDataRepoKind $fEqRepoType$fGenericRepoType $fOrdRepoType$fReadRepoType$fShowRepoType$fDataRepoType$fEqSourceRepo$fGenericSourceRepo$fReadSourceRepo$fShowSourceRepo$fDataSourceRepo PkgconfigNameunPkgconfigNamemkPkgconfigName$fNFDataPkgconfigName$fTextPkgconfigName$fParsecPkgconfigName$fPrettyPkgconfigName$fBinaryPkgconfigName$fIsStringPkgconfigName$fGenericPkgconfigName$fReadPkgconfigName$fShowPkgconfigName$fEqPkgconfigName$fOrdPkgconfigName$fDataPkgconfigNameForeignLibTypeForeignLibNativeSharedForeignLibNativeStaticForeignLibTypeUnknownknownForeignLibTypesforeignLibTypeIsShared$fMonoidForeignLibType$fSemigroupForeignLibType$fNFDataForeignLibType$fBinaryForeignLibType$fTextForeignLibType$fParsecForeignLibType$fPrettyForeignLibType$fGenericForeignLibType$fShowForeignLibType$fReadForeignLibType$fEqForeignLibType$fDataForeignLibTypeForeignLibOptionForeignLibStandalone$fNFDataForeignLibOption$fBinaryForeignLibOption$fTextForeignLibOption$fParsecForeignLibOption$fPrettyForeignLibOption$fGenericForeignLibOption$fShowForeignLibOption$fReadForeignLibOption$fEqForeignLibOption$fDataForeignLibOptionExecutableScopeExecutablePublicExecutablePrivate$fMonoidExecutableScope$fSemigroupExecutableScope$fNFDataExecutableScope$fBinaryExecutableScope$fTextExecutableScope$fParsecExecutableScope$fPrettyExecutableScope$fGenericExecutableScope$fShowExecutableScope$fReadExecutableScope$fEqExecutableScope$fDataExecutableScope ComponentId mkComponentId unComponentId$fNFDataComponentId$fTextComponentId$fParsecComponentId$fPrettyComponentId$fBinaryComponentId$fIsStringComponentId$fGenericComponentId$fReadComponentId$fShowComponentId$fEqComponentId$fOrdComponentId$fDataComponentId BuildTypeSimple ConfigureMakeCustomknownBuildTypes$fTextBuildType$fParsecBuildType$fPrettyBuildType$fNFDataBuildType$fBinaryBuildType$fGenericBuildType$fShowBuildType$fReadBuildType $fEqBuildType$fDataBuildTypeAbiHash unAbiHash mkAbiHash $fTextAbiHash$fParsecAbiHash$fPrettyAbiHash$fNFDataAbiHash$fBinaryAbiHash$fIsStringAbiHash $fEqAbiHash $fShowAbiHash $fReadAbiHash$fGenericAbiHashPlatformArchI386X86_64PPCPPC64SparcArmMipsSHIA64S390AlphaHppaRs6000M68kVax JavaScript OtherArchOSLinuxWindowsOSXFreeBSDOpenBSDNetBSD DragonFlySolarisAIXHPUXIRIXHaLVMHurdIOSAndroidGhcjsOtherOSClassificationStrictness PermissiveCompatStrictknownOSs classifyOSbuildOS knownArches classifyArch buildArch buildPlatformplatformFromTriple$fTextOS $fParsecOS $fPrettyOS $fNFDataOS $fBinaryOS $fTextArch $fParsecArch $fPrettyArch $fNFDataArch $fBinaryArch$fTextPlatform$fParsecPlatform$fPrettyPlatform$fNFDataPlatform$fBinaryPlatform$fEqOS $fGenericOS$fOrdOS$fShowOS$fReadOS$fDataOS$fEqArch $fGenericArch $fOrdArch $fShowArch $fReadArch $fDataArch $fEqPlatform$fGenericPlatform $fOrdPlatform$fShowPlatform$fReadPlatform$fDataPlatform LicenseRef licenseReflicenseDocumentRef mkLicenseRef mkLicenseRef'$fParsecLicenseRef$fPrettyLicenseRef$fNFDataLicenseRef$fBinaryLicenseRef$fShowLicenseRef$fReadLicenseRef$fEqLicenseRef$fOrdLicenseRef$fDataLicenseRef$fGenericLicenseRef LicenseIdNullBSDAALAbstyles Adobe_2006 Adobe_GlyphADSLAFL_1_1AFL_1_2AFL_2_0AFL_2_1AFL_3_0AfmparseAGPL_1_0 AGPL_3_0_onlyAGPL_3_0_or_laterAladdinAMDPLPAAMLAMPASANTLR_PD Apache_1_0 Apache_1_1 Apache_2_0APAFMLAPL_1_0APSL_1_0APSL_1_1APSL_1_2APSL_2_0Artistic_1_0_cl8Artistic_1_0_Perl Artistic_1_0 Artistic_2_0BahyphBarrBeerwareBitTorrent_1_0BitTorrent_1_1Borceux BSD_1_ClauseBSD_2_Clause_FreeBSDBSD_2_Clause_NetBSDBSD_2_Clause_Patent BSD_2_ClauseBSD_3_Clause_AttributionBSD_3_Clause_ClearBSD_3_Clause_LBNL$BSD_3_Clause_No_Nuclear_License_2014BSD_3_Clause_No_Nuclear_License BSD_3_Clause_No_Nuclear_Warranty BSD_3_ClauseBSD_4_Clause_UC BSD_4_ClauseBSD_ProtectionBSD_Source_CodeBSL_1_0 Bzip2_1_0_5 Bzip2_1_0_6Caldera CATOSL_1_1 CC_BY_1_0 CC_BY_2_0 CC_BY_2_5 CC_BY_3_0 CC_BY_4_0 CC_BY_NC_1_0 CC_BY_NC_2_0 CC_BY_NC_2_5 CC_BY_NC_3_0 CC_BY_NC_4_0CC_BY_NC_ND_1_0CC_BY_NC_ND_2_0CC_BY_NC_ND_2_5CC_BY_NC_ND_3_0CC_BY_NC_ND_4_0CC_BY_NC_SA_1_0CC_BY_NC_SA_2_0CC_BY_NC_SA_2_5CC_BY_NC_SA_3_0CC_BY_NC_SA_4_0 CC_BY_ND_1_0 CC_BY_ND_2_0 CC_BY_ND_2_5 CC_BY_ND_3_0 CC_BY_ND_4_0 CC_BY_SA_1_0 CC_BY_SA_2_0 CC_BY_SA_2_5 CC_BY_SA_3_0 CC_BY_SA_4_0CC0_1_0CDDL_1_0CDDL_1_1CDLA_Permissive_1_0CDLA_Sharing_1_0 CECILL_1_0 CECILL_1_1 CECILL_2_0 CECILL_2_1CECILL_BCECILL_C ClArtistic CNRI_JythonCNRI_Python_GPL_Compatible CNRI_Python Condor_1_1CPAL_1_0CPL_1_0 CPOL_1_02 CrosswordCrystalStacker CUA_OPL_1_0CubeCurl D_FSL_1_0DiffmarkDOCDotseqnDSDPDvipdfmECL_1_0ECL_2_0EFL_1_0EFL_2_0EGenixEntessaEPL_1_0EPL_2_0 ErlPL_1_1 EUDatagridEUPL_1_0EUPL_1_1EUPL_1_2EurosymFair Frameworx_1_0 FreeImageFSFAPFSFULFSFULLRFTL GFDL_1_1_onlyGFDL_1_1_or_later GFDL_1_2_onlyGFDL_1_2_or_later GFDL_1_3_onlyGFDL_1_3_or_laterGiftwareGL2PSGlideGlulxeGnuplot GPL_1_0_onlyGPL_1_0_or_later GPL_2_0_onlyGPL_2_0_or_later GPL_3_0_onlyGPL_3_0_or_later GSOAP_1_3b HaskellReportHPNDIBM_pibsICUIJG ImageMagickIMatixImlib2Info_ZIP Intel_ACPIIntel Interbase_1_0IPAIPL_1_0ISC JasPer_2_0JSONLAL_1_2LAL_1_3Latex2e Leptonica LGPL_2_0_onlyLGPL_2_0_or_later LGPL_2_1_onlyLGPL_2_1_or_later LGPL_3_0_onlyLGPL_3_0_or_laterLGPLLRLibpngLibtiff LiLiQ_P_1_1 LiLiQ_R_1_1LiLiQ_Rplus_1_1LPL_1_0LPL_1_02LPPL_1_0LPPL_1_1LPPL_1_2 LPPL_1_3a LPPL_1_3c MakeIndexMirOSMIT_advertisingMIT_CMUMIT_ennaMIT_fehMITMITNFAMotosotoMpich2MPL_1_0MPL_1_1MPL_2_0_no_copyleft_exceptionMPL_2_0MS_PLMS_RLMTLLMulticsMupNASA_1_3NaumenNBPL_1_0NCSANet_SNMPNetCDFNewsletrNGPLNLOD_1_0NLPLNokiaNOSLNowebNPL_1_0NPL_1_1 NPOSL_3_0NRLNTPOCCT_PLOCLC_2_0ODbL_1_0OFL_1_0OFL_1_1OGTSL OLDAP_1_1 OLDAP_1_2 OLDAP_1_3 OLDAP_1_4 OLDAP_2_0_1 OLDAP_2_0 OLDAP_2_1 OLDAP_2_2_1 OLDAP_2_2_2 OLDAP_2_2 OLDAP_2_3 OLDAP_2_4 OLDAP_2_5 OLDAP_2_6 OLDAP_2_7 OLDAP_2_8OMLOpenSSLOPL_1_0 OSET_PL_2_1OSL_1_0OSL_1_1OSL_2_0OSL_2_1OSL_3_0PDDL_1_0PHP_3_0PHP_3_01Plexus PostgreSQLPsfragPsutils Python_2_0QhullQPL_1_0Rdisc RHeCos_1_1RPL_1_1RPL_1_5RPSL_1_0RSA_MDRSCPLRubySAX_PDSaxpathSCEASendmail SGI_B_1_0 SGI_B_1_1 SGI_B_2_0 SimPL_2_0 SISSL_1_2SISSL SleepycatSMLNJSMPPLSNIA Spencer_86 Spencer_94 Spencer_99SPL_1_0SugarCRM_1_1_3SWLTCL TCP_wrappersTMate TORQUE_1_1TOSLUnicode_DFS_2015Unicode_DFS_2016 Unicode_TOU UnlicenseUPL_1_0VimVOSTROMVSL_1_0 W3C_19980720 W3C_20150513W3C Watcom_1_0WsuipaWTFPLX11Xerox XFree86_1_1XinetdXnetXppXSkatYPL_1_0YPL_1_1ZedZend_2_0 Zimbra_1_3 Zimbra_1_4Zlib_acknowledgementZlibZPL_1_1ZPL_2_0ZPL_2_1licenseIdMigrationMessage licenseId licenseNamelicenseIsOsiApproved mkLicenseId$fNFDataLicenseId$fParsecLicenseId$fPrettyLicenseId$fBinaryLicenseId $fEqLicenseId$fOrdLicenseId$fEnumLicenseId$fBoundedLicenseId$fShowLicenseId$fReadLicenseId$fDataLicenseId$fGenericLicenseIdLicenseExceptionIdDS389_exceptionAutoconf_exception_2_0Autoconf_exception_3_0Bison_exception_2_2Bootloader_exceptionClasspath_exception_2_0CLISP_exception_2_0DigiRule_FOSS_exceptionECos_exception_2_0Fawkes_Runtime_exceptionFLTK_exceptionFont_exception_2_0Freertos_exception_2_0GCC_exception_2_0GCC_exception_3_1Gnu_javamail_exceptionI2p_gpl_java_exceptionLibtool_exceptionLinux_syscall_noteLZMA_exception Mif_exceptionNokia_Qt_exception_1_1OCCT_exception_1_0Openvpn_openssl_exceptionQwt_exception_1_0U_boot_exception_2_0WxWindows_exception_3_1licenseExceptionIdlicenseExceptionNamemkLicenseExceptionId$fNFDataLicenseExceptionId$fParsecLicenseExceptionId$fPrettyLicenseExceptionId$fBinaryLicenseExceptionId$fEqLicenseExceptionId$fOrdLicenseExceptionId$fEnumLicenseExceptionId$fBoundedLicenseExceptionId$fShowLicenseExceptionId$fReadLicenseExceptionId$fDataLicenseExceptionId$fGenericLicenseExceptionIdSimpleLicenseExpression ELicenseIdELicenseIdPlus ELicenseRefLicenseExpressionELicenseEAndEOrsimpleLicenseExpression$fNFDataSimpleLicenseExpression$fParsecSimpleLicenseExpression$fPrettySimpleLicenseExpression$fBinarySimpleLicenseExpression$fNFDataLicenseExpression$fParsecLicenseExpression$fPrettyLicenseExpression$fBinaryLicenseExpression$fShowSimpleLicenseExpression$fReadSimpleLicenseExpression$fEqSimpleLicenseExpression$fOrdSimpleLicenseExpression$fDataSimpleLicenseExpression $fGenericSimpleLicenseExpression$fShowLicenseExpression$fReadLicenseExpression$fEqLicenseExpression$fOrdLicenseExpression$fDataLicenseExpression$fGenericLicenseExpressionLicenseNONE$fParsecLicense$fPrettyLicense$fNFDataLicense$fBinaryLicense $fShowLicense $fReadLicense $fEqLicense $fOrdLicense $fDataLicense$fGenericLicenseReadErunReadE succeedReadE failReadE parseReadE readEOrFail readP_to_E parsecToReadE$fFunctorReadE ModuleNamevalidModuleComponentsimplefromComponents components toFilePath$fBinaryShortTextLst$fReadShortTextLst$fShowShortTextLst$fNFDataShortTextLst$fIsStringModuleName$fTextModuleName$fParsecModuleName$fPrettyModuleName$fNFDataModuleName$fBinaryModuleName$fEqShortTextLst$fGenericShortTextLst$fOrdShortTextLst$fDataShortTextLst$fEqModuleName$fGenericModuleName$fOrdModuleName$fReadModuleName$fShowModuleName$fDataModuleNameModuleRenamingDefaultRenamingHidingRenaminginterpModuleRenamingdefaultRenamingisDefaultRenaming$fTextModuleRenaming$fParsecModuleRenaming$fPrettyModuleRenaming$fNFDataModuleRenaming$fBinaryModuleRenaming$fShowModuleRenaming$fReadModuleRenaming$fEqModuleRenaming$fOrdModuleRenaming$fDataModuleRenaming$fGenericModuleRenamingincludeProvidesRnincludeRequiresRndefaultIncludeRenamingisDefaultIncludeRenaming$fTextIncludeRenaming$fParsecIncludeRenaming$fPrettyIncludeRenaming$fNFDataIncludeRenaming$fBinaryIncludeRenaming$fShowIncludeRenaming$fReadIncludeRenaming$fEqIncludeRenaming$fOrdIncludeRenaming$fDataIncludeRenaming$fGenericIncludeRenaming FieldGrammarblurFieldGrammaruniqueFieldAlabooleanFieldDefoptionalFieldAlaoptionalFieldDefAlamonoidalFieldAlaprefixedFields knownField hiddenFielddeprecatedSinceavailableSince uniqueField optionalFieldoptionalFieldDef monoidalFielddeprecatedField'silentnormalverbose deafening moreVerbose lessVerbosemodifyVerbosityintToVerbosityflagToVerbosity showForCabal showForGHCverboseCallSiteverboseCallStackverboseMarkOutputverboseUnmarkOutput verboseNoWrapverboseTimestampverboseNoTimestampverboseNoFlagsverboseHasFlagsisVerboseCallSiteisVerboseCallStackisVerboseMarkOutputisVerboseNoWrapisVerboseQuietisVerboseTimestamp$fBinaryVerbosityLevel$fBinaryVerbosityFlag$fBinaryVerbosity$fBoundedVerbosity$fEnumVerbosity$fOrdVerbosity $fEqVerbosity$fReadVerbosity$fShowVerbosity$fGenericVerbosityLevel$fShowVerbosityLevel$fReadVerbosityLevel$fEqVerbosityLevel$fOrdVerbosityLevel$fEnumVerbosityLevel$fBoundedVerbosityLevel$fGenericVerbosityFlag$fShowVerbosityFlag$fReadVerbosityFlag$fEqVerbosityFlag$fOrdVerbosityFlag$fEnumVerbosityFlag$fBoundedVerbosityFlag$fGenericVerbosity isAnyVersion isNoVersionisSpecificVersionsimplifyVersionRangedifferenceVersionRangesinvertVersionRangeremoveUpperBoundremoveLowerBoundbetweenVersionsInclusivefoldVersionRange'TestType TestTypeExe TestTypeLibTestTypeUnknownknownTestTypes$fTextTestType$fParsecTestType$fPrettyTestType$fNFDataTestType$fBinaryTestType$fGenericTestType$fShowTestType$fReadTestType $fEqTestType$fDataTestTypeTestSuiteInterfaceTestSuiteExeV10TestSuiteLibV09TestSuiteUnsupported$fSemigroupTestSuiteInterface$fMonoidTestSuiteInterface$fNFDataTestSuiteInterface$fBinaryTestSuiteInterface$fEqTestSuiteInterface$fGenericTestSuiteInterface$fReadTestSuiteInterface$fShowTestSuiteInterface$fDataTestSuiteInterfacePkgconfigDependency$fTextPkgconfigDependency$fParsecPkgconfigDependency$fPrettyPkgconfigDependency$fNFDataPkgconfigDependency$fBinaryPkgconfigDependency$fGenericPkgconfigDependency$fReadPkgconfigDependency$fShowPkgconfigDependency$fEqPkgconfigDependency$fDataPkgconfigDependency BenchmarkTypeBenchmarkTypeExeBenchmarkTypeUnknownknownBenchmarkTypes$fTextBenchmarkType$fParsecBenchmarkType$fPrettyBenchmarkType$fNFDataBenchmarkType$fBinaryBenchmarkType$fGenericBenchmarkType$fShowBenchmarkType$fReadBenchmarkType$fEqBenchmarkType$fDataBenchmarkTypeBenchmarkInterfaceBenchmarkExeV10BenchmarkUnsupported$fSemigroupBenchmarkInterface$fMonoidBenchmarkInterface$fNFDataBenchmarkInterface$fBinaryBenchmarkInterface$fEqBenchmarkInterface$fGenericBenchmarkInterface$fReadBenchmarkInterface$fShowBenchmarkInterface$fDataBenchmarkInterface ParseResultrunParseResult recoverWithsetCabalSpecVersiongetCabalSpecVersion parseWarning parseWarnings parseFailureparseFatalFailureparseFatalFailure'$fMonadParseResult$fApplicativeParseResult$fFunctorParseResultGPLAGPLLGPLBSD2BSD3BSD4MPLApache PublicDomainAllRightsReservedUnspecifiedLicense OtherLicenseUnknownLicense knownLicenses licenseToSPDXlicenseFromSPDX $fTextLicenseKnownExtensionOverlappingInstancesUndecidableInstancesIncoherentInstancesDoRec RecursiveDoParallelListCompMultiParamTypeClassesMonomorphismRestrictionFunctionalDependencies Rank2Types RankNTypesPolymorphicComponentsExistentialQuantificationScopedTypeVariablesPatternSignaturesImplicitParamsFlexibleContextsFlexibleInstancesEmptyDataDeclsCPPKindSignatures BangPatternsTypeSynonymInstancesTemplateHaskellForeignFunctionInterfaceArrowsGenericsImplicitPreludeNamedFieldPuns PatternGuardsGeneralizedNewtypeDerivingExtensibleRecordsRestrictedTypeSynonyms HereDocuments MagicHash TypeFamiliesStandaloneDeriving UnicodeSyntaxUnliftedFFITypesInterruptibleFFICApiFFILiberalTypeSynonyms TypeOperatorsRecordWildCards RecordPunsDisambiguateRecordFieldsTraditionalRecordSyntaxOverloadedStringsGADTs GADTSyntax MonoPatBindsRelaxedPolyRecExtendedDefaultRules UnboxedTuplesDeriveDataTypeable DeriveGenericDefaultSignatures InstanceSigsConstrainedClassMethodsPackageImportsImpredicativeTypesNewQualifiedOperatorsPostfixOperators QuasiQuotesTransformListCompMonadComprehensions ViewPatterns XmlSyntaxRegularPatterns TupleSectionsGHCForeignImportPrimNPlusKPatternsDoAndIfThenElse MultiWayIf LambdaCaseRebindableSyntaxExplicitForAllDatatypeContextsMonoLocalBinds DeriveFunctorDeriveTraversableDeriveFoldableNondecreasingIndentation SafeImportsSafe TrustworthyUnsafeConstraintKinds PolyKinds DataKindsParallelArraysRoleAnnotationsOverloadedLists EmptyCaseAutoDeriveTypeableNegativeLiteralsBinaryLiterals NumDecimalsNullaryTypeClassesExplicitNamespacesAllowAmbiguousTypes JavaScriptFFIPatternSynonymsPartialTypeSignaturesNamedWildCardsDeriveAnyClass DeriveLiftStaticPointers StrictData ApplicativeDoDuplicateRecordFieldsTypeApplications TypeInTypeUndecidableSuperClassesMonadFailDesugaringTemplateHaskellQuotesOverloadedLabelsTypeFamilyDependenciesDerivingStrategies UnboxedSumsHexFloatLiterals ExtensionEnableExtensionDisableExtensionUnknownExtensionLanguage Haskell98 Haskell2010UnknownLanguageknownLanguagesclassifyLanguageknownExtensionsdeprecatedExtensionsclassifyExtension$fTextLanguage$fParsecLanguage$fPrettyLanguage$fNFDataLanguage$fBinaryLanguage$fTextKnownExtension$fPrettyKnownExtension$fNFDataKnownExtension$fBinaryKnownExtension$fTextExtension$fParsecExtension$fPrettyExtension$fNFDataExtension$fBinaryExtension$fGenericLanguage$fShowLanguage$fReadLanguage $fEqLanguage$fDataLanguage$fGenericKnownExtension$fShowKnownExtension$fReadKnownExtension$fEqKnownExtension$fOrdKnownExtension$fEnumKnownExtension$fBoundedKnownExtension$fDataKnownExtension$fGenericExtension$fShowExtension$fReadExtension $fEqExtension$fOrdExtension$fDataExtensionAbiTagNoAbiTag CompilerInfocompilerInfoIdcompilerInfoAbiTagcompilerInfoCompatcompilerInfoLanguagescompilerInfoExtensions CompilerIdCompilerFlavorGHCGHCJSNHCYHCHugsHBCHeliumJHCLHCUHC HaskellSuite OtherCompilerclassifyCompilerFlavorparseCompilerFlavorCompatbuildCompilerFlavorbuildCompilerIddefaultCompilerFlavor abiTagStringunknownCompilerInfo$fTextCompilerFlavor$fParsecCompilerFlavor$fPrettyCompilerFlavor$fNFDataCompilerFlavor$fBinaryCompilerFlavor$fTextCompilerId$fNFDataCompilerId$fBinaryCompilerId $fTextAbiTag$fBinaryAbiTag$fBinaryCompilerInfo$fGenericCompilerFlavor$fShowCompilerFlavor$fReadCompilerFlavor$fEqCompilerFlavor$fOrdCompilerFlavor$fDataCompilerFlavor$fEqCompilerId$fGenericCompilerId$fOrdCompilerId$fReadCompilerId$fShowCompilerId $fEqAbiTag$fGenericAbiTag $fShowAbiTag $fReadAbiTag$fGenericCompilerInfo$fShowCompilerInfo$fReadCompilerInfo FilePathNT getFilePathNTFreeText getFreeText TestedWith getTestedWith SpecLicensegetSpecLicense SpecVersiongetSpecVersionMQuoted getMQuotedToken' getToken'getTokenList NoCommaFSepFSepVCat CommaFSep CommaVCatalaListalaList'$fSepNoCommaFSep $fSepFSep $fSepVCat$fSepCommaFSep$fSepCommaVCat $fPrettyList $fParsecList$fNewtypeList[] $fPrettyToken $fParsecToken$fNewtypeToken[]$fPrettyToken'$fParsecToken'$fNewtypeToken'[]$fPrettyMQuoted$fParsecMQuoted$fNewtypeMQuoteda$fPrettySpecVersion$fParsecSpecVersion$fNewtypeSpecVersionEither$fPrettySpecLicense$fParsecSpecLicense$fNewtypeSpecLicenseEither$fPrettyTestedWith$fParsecTestedWith$fNewtypeTestedWith(,)$fPrettyFreeText$fParsecFreeText$fNewtypeFreeText[]$fPrettyFilePathNT$fParsecFilePathNT$fNewtypeFilePathNT[] ParseFailedParseOkAmbiguousParseNoParse TabsError FromString readPToMaybe PackageName unPackageName mkPackageName$fNFDataPackageName$fTextPackageName$fParsecPackageName$fPrettyPackageName$fBinaryPackageName$fIsStringPackageName$fGenericPackageName$fReadPackageName$fShowPackageName$fEqPackageName$fOrdPackageName$fDataPackageNameUnqualComponentNameunUnqualComponentNamemkUnqualComponentName packageNameToUnqualComponentName unqualComponentNameToPackageName$fNFDataUnqualComponentName$fTextUnqualComponentName$fParsecUnqualComponentName$fPrettyUnqualComponentName$fBinaryUnqualComponentName$fIsStringUnqualComponentName$fGenericUnqualComponentName$fReadUnqualComponentName$fShowUnqualComponentName$fEqUnqualComponentName$fOrdUnqualComponentName$fDataUnqualComponentName$fSemigroupUnqualComponentName$fMonoidUnqualComponentName ComponentNameCLibName CSubLibName CFLibNameCExeName CTestName CBenchNamedefaultLibNameshowComponentNamecomponentNameStanzacomponentNameStringlibraryComponentName$fTextComponentName$fPrettyComponentName$fBinaryComponentName$fEqComponentName$fGenericComponentName$fOrdComponentName$fReadComponentName$fShowComponentNamePackageIdentifierpkgName pkgVersion PackageId$fNFDataPackageIdentifier$fTextPackageIdentifier$fPrettyPackageIdentifier$fBinaryPackageIdentifier$fGenericPackageIdentifier$fReadPackageIdentifier$fShowPackageIdentifier$fEqPackageIdentifier$fOrdPackageIdentifier$fDataPackageIdentifier DefUnitId unDefUnitIdInstalledPackageIdUnitIdunUnitIdmkUnitIdnewSimpleUnitIdmkLegacyUnitIdgetHSLibraryNameunsafeMkDefUnitId$fIsStringUnitId $fTextUnitId$fParsecUnitId$fPrettyUnitId$fBinaryUnitId$fParsecDefUnitId$fGenericUnitId $fReadUnitId $fShowUnitId $fEqUnitId $fOrdUnitId $fDataUnitId$fNFDataUnitId$fGenericDefUnitId$fReadDefUnitId$fShowDefUnitId $fEqDefUnitId$fOrdDefUnitId$fDataDefUnitId$fBinaryDefUnitId$fNFDataDefUnitId$fPrettyDefUnitId$fTextDefUnitIdModule$fNFDataModule $fTextModule$fParsecModule$fPrettyModule$fBinaryModule$fGenericModule $fReadModule $fShowModule $fEqModule $fOrdModule $fDataModuleOpenModuleSubst OpenModule OpenModuleVar OpenUnitIdIndefFullUnitIdDefiniteUnitIdopenUnitIdFreeHoles mkOpenUnitId mkDefUnitIdopenModuleFreeHolesdispOpenModuleSubstdispOpenModuleSubstEntryparseOpenModuleSubstparseOpenModuleSubstEntryparsecOpenModuleSubstparsecOpenModuleSubstEntryopenModuleSubstFreeHolesabstractUnitIdhashModuleSubst$fTextOpenModule$fParsecOpenModule$fPrettyOpenModule$fNFDataOpenModule$fBinaryOpenModule$fTextOpenUnitId$fParsecOpenUnitId$fPrettyOpenUnitId$fNFDataOpenUnitId$fBinaryOpenUnitId$fGenericOpenModule$fReadOpenModule$fShowOpenModule$fEqOpenModule$fOrdOpenModule$fDataOpenModule$fGenericOpenUnitId$fReadOpenUnitId$fShowOpenUnitId$fEqOpenUnitId$fOrdOpenUnitId$fDataOpenUnitIdModSubstmodSubst $fModSubst(,) $fModSubst[] $fModSubstMap $fModSubstSet$fModSubstOpenUnitId$fModSubstOpenModuleFullDb FullUnitIdexpandOpenUnitId expandUnitId$fShowFullUnitId$fGenericFullUnitIdModuleReexportmoduleReexportOriginalPackagemoduleReexportOriginalNamemoduleReexportName$fTextModuleReexport$fParsecModuleReexport$fPrettyModuleReexport$fNFDataModuleReexport$fBinaryModuleReexport$fEqModuleReexport$fGenericModuleReexport$fReadModuleReexport$fShowModuleReexport$fDataModuleReexportMixinmixinPackageNamemixinIncludeRenaming $fTextMixin $fParsecMixin $fPrettyMixin $fNFDataMixin $fBinaryMixin $fShowMixin $fReadMixin $fEqMixin $fOrdMixin $fDataMixin$fGenericMixin ExeDependencyqualifiedExeName$fTextExeDependency$fParsecExeDependency$fPrettyExeDependency$fNFDataExeDependency$fBinaryExeDependency$fGenericExeDependency$fReadExeDependency$fShowExeDependency$fEqExeDependency$fDataExeDependency Dependency depPkgName depVerRangethisPackageVersionnotThisPackageVersionsimplifyDependency$fTextDependency$fParsecDependency$fPrettyDependency$fNFDataDependency$fBinaryDependency$fGenericDependency$fReadDependency$fShowDependency$fEqDependency$fDataDependencySetupBuildInfo setupDependsdefaultSetupDepends$fSemigroupSetupBuildInfo$fMonoidSetupBuildInfo$fNFDataSetupBuildInfo$fBinarySetupBuildInfo$fGenericSetupBuildInfo$fShowSetupBuildInfo$fEqSetupBuildInfo$fReadSetupBuildInfo$fDataSetupBuildInfo DependencyMaptoDepMap fromDepMap constrainBy$fSemigroupDependencyMap$fMonoidDependencyMap$fShowDependencyMap$fReadDependencyMapMungedPackageNameunMungedPackageNamemkMungedPackageNamecomputeCompatPackageNamedecodeCompatPackageName$fNFDataMungedPackageName$fTextMungedPackageName$fParsecMungedPackageName$fPrettyMungedPackageName$fBinaryMungedPackageName$fIsStringMungedPackageName$fGenericMungedPackageName$fReadMungedPackageName$fShowMungedPackageName$fEqMungedPackageName$fOrdMungedPackageName$fDataMungedPackageNameMungedPackageId mungedName mungedVersion$fNFDataMungedPackageId$fTextMungedPackageId$fBinaryMungedPackageId$fGenericMungedPackageId$fReadMungedPackageId$fShowMungedPackageId$fEqMungedPackageId$fOrdMungedPackageId$fDataMungedPackageIdPackageInstalledinstalledDepends HasUnitIdinstalledUnitIdHasMungedPackageIdmungedIdPackage packageId mungedName'mungedVersion' packageNamepackageVersioninstalledPackageId$fPackagePackageIdentifier#$fHasMungedPackageIdMungedPackageId AnnotatedIdann_pid ann_cnameann_id$fFunctorAnnotatedId$fPackageAnnotatedId$fOrdAnnotatedId$fEqAnnotatedId$fShowAnnotatedIdComponentInclude ci_ann_id ci_renaming ci_implicitci_idci_pkgidci_cname AbiDependency depUnitId depAbiHash$fNFDataAbiDependency$fBinaryAbiDependency$fTextAbiDependency$fParsecAbiDependency$fPrettyAbiDependency$fEqAbiDependency$fGenericAbiDependency$fReadAbiDependency$fShowAbiDependencyPathTemplateEnvPathTemplateVariable PrefixVar BindirVar LibdirVar LibsubdirVar DynlibdirVar DatadirVar DatasubdirVar DocdirVar HtmldirVar PkgNameVar PkgVerVarPkgIdVar LibNameVar CompilerVarOSVarArchVarAbiVar AbiTagVarExecutableNameVarTestSuiteNameVarTestSuiteResultVarBenchmarkNameVar PathTemplateCopyDest NoCopyDestCopyToCopyToDbInstallDirTemplates InstallDirsprefixbindirlibdir libsubdir dynlibdirflibdir libexecdir libexecsubdir includedirdatadir datasubdirdocdirmandirhtmldir haddockdir sysconfdircombineInstallDirsdefaultInstallDirsdefaultInstallDirs'substituteInstallDirTemplatesabsoluteInstallDirsprefixRelativeInstallDirstoPathTemplatefromPathTemplatecombinePathTemplatesubstPathTemplateinitialPathTemplateEnvpackageTemplateEnvcompilerTemplateEnvplatformTemplateEnvabiTemplateEnvinstallDirsTemplateEnv$fSemigroupInstallDirs$fMonoidInstallDirs$fBinaryInstallDirs$fBinaryCopyDest$fReadPathTemplateVariable$fShowPathTemplateVariable$fBinaryPathTemplateVariable$fReadPathComponent$fShowPathComponent$fBinaryPathComponent$fReadPathTemplate$fShowPathTemplate$fBinaryPathTemplate$fEqInstallDirs$fReadInstallDirs$fShowInstallDirs$fFunctorInstallDirs$fGenericInstallDirs $fEqCopyDest$fShowCopyDest$fGenericCopyDest$fEqPathTemplateVariable$fOrdPathTemplateVariable$fGenericPathTemplateVariable$fEqPathComponent$fOrdPathComponent$fGenericPathComponent$fEqPathTemplate$fOrdPathTemplate$fGenericPathTemplateLegacyExeDependency$fTextLegacyExeDependency$fParsecLegacyExeDependency$fPrettyLegacyExeDependency$fNFDataLegacyExeDependency$fBinaryLegacyExeDependency$fGenericLegacyExeDependency$fReadLegacyExeDependency$fShowLegacyExeDependency$fEqLegacyExeDependency$fDataLegacyExeDependency BuildInfo buildable buildToolsbuildToolDepends cppOptions asmOptions cmmOptions ccOptions cxxOptions ldOptionspkgconfigDepends frameworksextraFrameworkDirs asmSources cmmSourcescSources cxxSources jsSources hsSourceDirs otherModulesvirtualModulesautogenModulesdefaultLanguageotherLanguagesdefaultExtensionsotherExtensions oldExtensions extraLibs extraGHCiLibsextraBundledLibsextraLibFlavours extraLibDirs includeDirsincludesinstallIncludes profOptions sharedOptions staticOptionscustomFieldsBItargetBuildDependsmixinsemptyBuildInfo allLanguages allExtensionsusedExtensionsusesTemplateHaskellOrQQ hcOptions hcProfOptionshcSharedOptionshcStaticOptions$fSemigroupBuildInfo$fMonoidBuildInfo$fNFDataBuildInfo$fBinaryBuildInfo$fGenericBuildInfo$fShowBuildInfo$fReadBuildInfo $fEqBuildInfo$fDataBuildInfoHookedBuildInfoemptyHookedBuildInfo HasBuildInfo buildInfo$fHasBuildInfoBuildInfo TestSuitetestName testInterface testBuildInfoemptyTestSuitetestType testModulestestModulesAutogen$fSemigroupTestSuite$fMonoidTestSuite$fNFDataTestSuite$fBinaryTestSuite$fHasBuildInfoTestSuite$fGenericTestSuite$fShowTestSuite$fReadTestSuite $fEqTestSuite$fDataTestSuiteLibrarylibNameexposedModulesreexportedModules signatures libExposed libBuildInfo emptyLibraryexplicitLibModuleslibModulesAutogen libModules$fSemigroupLibrary$fMonoidLibrary$fNFDataLibrary$fBinaryLibrary$fHasBuildInfoLibrary$fGenericLibrary $fShowLibrary $fEqLibrary $fReadLibrary $fDataLibraryLibVersionInfo ForeignLibforeignLibNameforeignLibTypeforeignLibOptionsforeignLibBuildInfoforeignLibVersionInfoforeignLibVersionLinuxforeignLibModDefFilemkLibVersionInfolibVersionInfoCRAlibVersionNumberlibVersionNumberShowlibVersionMajoremptyForeignLibforeignLibModulesforeignLibIsSharedforeignLibVersion$fTextLibVersionInfo$fParsecLibVersionInfo$fPrettyLibVersionInfo$fNFDataLibVersionInfo$fBinaryLibVersionInfo$fReadLibVersionInfo$fShowLibVersionInfo$fOrdLibVersionInfo$fMonoidForeignLib$fSemigroupForeignLib$fNFDataForeignLib$fBinaryForeignLib$fHasBuildInfoForeignLib$fDataLibVersionInfo$fEqLibVersionInfo$fGenericLibVersionInfo$fGenericForeignLib$fShowForeignLib$fReadForeignLib$fEqForeignLib$fDataForeignLib ExecutableexeName modulePathexeScopeemptyExecutable exeModulesexeModulesAutogen$fSemigroupExecutable$fMonoidExecutable$fNFDataExecutable$fBinaryExecutable$fHasBuildInfoExecutable$fGenericExecutable$fShowExecutable$fReadExecutable$fEqExecutable$fDataExecutable Benchmark benchmarkNamebenchmarkInterfacebenchmarkBuildInfoemptyBenchmark benchmarkTypebenchmarkModulesbenchmarkModulesAutogen$fSemigroupBenchmark$fMonoidBenchmark$fHasBuildInfoBenchmark$fNFDataBenchmark$fBinaryBenchmark$fGenericBenchmark$fShowBenchmark$fReadBenchmark $fEqBenchmark$fDataBenchmark ComponentCLibCFLibCExeCTestCBench foldComponentcomponentBuildInfocomponentBuildable componentNamepartitionComponents$fHasBuildInfoComponent$fSemigroupComponent$fShowComponent $fEqComponent$fReadComponentComponentDisabledReasonDisabledComponentDisabledAllTestsDisabledAllBenchmarksDisabledAllButOneComponentRequestedSpecOneComponentRequestedSpectestsRequestedbenchmarksRequesteddefaultComponentRequestedSpeccomponentEnabledcomponentNameRequestedcomponentDisabledReason$fBinaryComponentRequestedSpec$fGenericComponentRequestedSpec$fReadComponentRequestedSpec$fShowComponentRequestedSpec$fEqComponentRequestedSpecPackageDescriptionspecVersionRawpackage licenseRaw licenseFiles copyright maintainerauthor stability testedWithhomepagepkgUrl bugReports sourceRepossynopsis descriptioncategorycustomFieldsPD buildDepends buildTypeRawsetupBuildInfolibrary subLibraries executables foreignLibs testSuites benchmarks dataFilesdataDir extraSrcFiles extraTmpFiles extraDocFiles specVersion specVersion'licenselicense'descCabalVersion buildTypeemptyPackageDescription hasPublicLibhasLibs allLibrarieswithLibhasExeswithExehasTestswithTest hasBenchmarks withBenchmarkhasForeignLibswithForeignLib allBuildInfoenabledBuildInfosupdatePackageDescription pkgComponentspkgBuildableComponentsenabledComponentslookupComponent getComponent$fPackagePackageDescription$fNFDataPackageDescription$fBinaryPackageDescription$fGenericPackageDescription$fShowPackageDescription$fReadPackageDescription$fEqPackageDescription$fDataPackageDescriptionConfVarFlagImplFlagAssignmentFlagNameMkFlagflagNameflagDescription flagDefault flagManualGenericPackageDescriptionpackageDescriptiongenPackageFlags condLibrarycondSubLibrariescondForeignLibscondExecutablescondTestSuitescondBenchmarks emptyFlag mkFlagName unFlagNamemkFlagAssignmentunFlagAssignmentnullFlagAssignmentlookupFlagAssignmentinsertFlagAssignmentdiffFlagAssignmentfindDuplicateFlagAssignments showFlagValuedispFlagAssignmentparsecFlagAssignmentparseFlagAssignmentemptyGenericPackageDescription$fTextFlagName$fParsecFlagName$fPrettyFlagName$fBinaryFlagName$fIsStringFlagName $fNFDataFlag $fBinaryFlag$fShowFlagAssignment$fReadFlagAssignment$fMonoidFlagAssignment$fSemigroupFlagAssignment$fOrdFlagAssignment$fEqFlagAssignment$fNFDataConfVar$fBinaryConfVar!$fNFDataGenericPackageDescription!$fBinaryGenericPackageDescription"$fPackageGenericPackageDescription $fEqFlagName$fGenericFlagName $fOrdFlagName$fShowFlagName$fReadFlagName$fDataFlagName$fNFDataFlagName $fShowFlag$fEqFlag $fDataFlag $fGenericFlag$fBinaryFlagAssignment$fNFDataFlagAssignment $fEqConfVar $fShowConfVar $fDataConfVar$fGenericConfVar$fShowGenericPackageDescription$fEqGenericPackageDescription$fDataGenericPackageDescription"$fGenericGenericPackageDescription buildInfos_OS_Arch_Flag_ImplparseConditionConfVardesugarBuildToolgetAllToolDependencies isInternalgetAllInternalToolDependencies ExposedModule exposedNameexposedReexport$fNFDataExposedModule$fBinaryExposedModule$fTextExposedModule$fParsecExposedModule$fPrettyExposedModule$fEqExposedModule$fGenericExposedModule$fReadExposedModule$fShowExposedModuleInstalledPackageInfosourcePackageId sourceLibNameinstalledComponentId_instantiatedWithcompatPackageKeyabiHash indefiniteexposed hiddenModulestrusted importDirs libraryDirslibraryDynDirs hsLibrariesextraLibrariesextraGHCiLibrariesdepends abiDepends frameworkDirshaddockInterfaces haddockHTMLspkgRootmungedPackageIdmungedPackageNameemptyInstalledPackageInfo$fIsNodeInstalledPackageInfo&$fPackageInstalledInstalledPackageInfo$fHasUnitIdInstalledPackageInfo$fPackageInstalledPackageInfo($fHasMungedPackageIdInstalledPackageInfo$fNFDataInstalledPackageInfo$fBinaryInstalledPackageInfo$fEqInstalledPackageInfo$fGenericInstalledPackageInfo$fReadInstalledPackageInfo$fShowInstalledPackageInfoTempFileOptionsoptKeepTempFilesFileGlobNoGlob cabalVersiondieWithLocationdiedieNoVerbositydieWithLocation'die' dieNoWraptopHandlerWith topHandlerwarnnotice noticeNoWrap noticeDoc setupMessageinfo infoNoWrapdebug debugNoWrap chattyTryhandleDoesNotExist maybeExitprintRawCommandAndArgsprintRawCommandAndArgsAndEnv rawSystemExitrawSystemExitCoderawSystemExitWithEnvrawSystemIOWithEnvcreateProcessWithEnvrawSystemStdoutrawSystemStdInOutfindProgramLocationfindProgramVersionxargsfindFilefindFileWithExtensionfindAllFilesWithExtensionfindFileWithExtension' findFirstFilefindModuleFilesfindModuleFilegetDirectoryContentsRecursiveisInSearchPathaddLibraryPath parseFileGlob matchFileGlobmatchDirFileGlobmoreRecentFileexistsAndIsMoreRecentThancreateDirectoryIfMissingVerbosecopyFileVerboseinstallOrdinaryFileinstallExecutableFileinstallMaybeExecutableFile copyFileTo copyFilesinstallOrdinaryFilesinstallExecutableFilesinstallMaybeExecutableFilesinstallDirectoryContentscopyDirectoryRecursivedoesExecutableExistsmartCopySourcescopyDirectoryRecursiveVerbosedefaultTempFileOptions withTempFilewithTempFileExwithTempDirectorywithTempDirectoryEx rewriteFile rewriteFileEx currentDirshortRelativePathdropExeExtension exeExtensionsdefaultPackageDesctryFindPackageDescdefaultHookedPackageDescfindHookedPackageDesc $fEqTraceWhenNubListR fromNubListRNubList fromNubList toNubList overNubList toNubListR overNubListR$fBinaryNubList $fReadNubList $fShowNubList$fSemigroupNubList$fMonoidNubList$fReadNubListR$fShowNubListR$fSemigroupNubListR$fMonoidNubListR $fEqNubList $fEqNubListR LogProgressrunLogProgress warnProgress infoProgress dieProgressaddProgressCtx$fMonadLogProgress$fApplicativeLogProgress$fFunctorLogProgresswithResponseFileProgramSearchPathEntryProgramSearchPathDirProgramSearchPathDefaultProgramSearchPathdefaultProgramSearchPathfindProgramOnSearchPathprogramSearchPathAsPATHVargetSystemSearchPath$fBinaryProgramSearchPathEntry$fEqProgramSearchPathEntry$fGenericProgramSearchPathEntryProgramLocation UserSpecified FoundOnSystem locationPathConfiguredProgram programIdprogramVersionprogramDefaultArgsprogramOverrideArgsprogramOverrideEnvprogramPropertiesprogramLocationprogramMonitorFilesProgArgProgram programNameprogramFindLocationprogramFindVersionprogramPostConf programPathsuppressOverrideArgs simpleProgramsimpleConfiguredProgram$fBinaryProgramLocation$fBinaryConfiguredProgram $fShowProgram$fEqProgramLocation$fGenericProgramLocation$fReadProgramLocation$fShowProgramLocation$fEqConfiguredProgram$fGenericConfiguredProgram$fReadConfiguredProgram$fShowConfiguredProgram IOEncodingIOEncodingTextIOEncodingUTF8ProgramInvocationprogInvokePathprogInvokeArgs progInvokeEnvprogInvokePathEnv progInvokeCwdprogInvokeInputprogInvokeInputEncodingprogInvokeOutputEncodingemptyProgramInvocationsimpleProgramInvocationprogramInvocationrunProgramInvocationgetProgramInvocationOutput#getProgramInvocationOutputAndErrorsgetEffectiveEnvironmentmultiStageProgramInvocationinvocationAsSystemScriptinvocationAsShellScriptinvocationAsBatchFilemarkupunionbuiltinPrograms ghcProgram runghcProgram ghcPkgProgram ghcjsProgramghcjsPkgProgram lhcProgram lhcPkgProgram hmakeProgram jhcProgram uhcProgram hpcProgramhaskellSuiteProgramhaskellSuitePkgProgram happyProgram alexProgram gccProgram arProgram stripProgram hsc2hsProgram c2hsProgram cpphsProgramhscolourProgramdoctestProgramhaddockProgramgreencardProgram ldProgram tarProgram cppProgrampkgConfigProgram ProgramDbemptyProgramDbdefaultProgramDbrestoreProgramDbaddKnownProgramaddKnownProgramslookupKnownProgram knownProgramsgetProgramSearchPathsetProgramSearchPathmodifyProgramSearchPathuserSpecifyPathuserMaybeSpecifyPathuserSpecifyArgsuserSpecifyPathsuserSpecifyArgssuserSpecifiedArgs lookupProgram updateProgramconfiguredProgramsconfigureProgramunconfigureProgramconfigureAllKnownProgramsreconfigureProgramsrequireProgramlookupProgramVersionrequireProgramVersion$fBinaryProgramDb$fReadProgramDb$fShowProgramDbProgramConfiguration runProgramgetProgramOutput runDbProgramgetDbProgramOutputrawSystemProgramrawSystemProgramStdoutrawSystemProgramConfrawSystemProgramStdoutConfemptyProgramConfigurationdefaultProgramConfigurationrestoreProgramConfigurationfindProgramOnPathstripExestripLibProfDetailLevelProfDetailNoneProfDetailDefaultProfDetailExportedFunctionsProfDetailToplevelFunctionsProfDetailAllFunctionsProfDetailOtherDebugInfoLevel NoDebugInfoMinimalDebugInfoNormalDebugInfoMaximalDebugInfoOptimisationLevelNoOptimisationNormalOptimisationMaximumOptimisationPackageDBStack PackageDBGlobalPackageDB UserPackageDBSpecificPackageDBCompiler compilerIdcompilerAbiTagcompilerCompatcompilerLanguagescompilerExtensionscompilerPropertiesshowCompilerIdshowCompilerIdWithAbicompilerFlavorcompilerVersioncompilerCompatFlavorcompilerCompatVersion compilerInforegistrationPackageDBabsolutePackageDBPathsabsolutePackageDBPathflagToOptimisationLevelflagToDebugInfoLevelunsupportedLanguageslanguageToFlagsunsupportedExtensionsextensionsToFlagsparmakeSupportedreexportedModulesSupportedrenamingPackageFlagsSupportedunifiedIPIDRequiredpackageKeySupportedunitIdSupportedbackpackSupportedlibraryDynDirSupportedarResponseFilesSupportedcoverageSupportedprofilingSupportedflagToProfDetailLevelknownProfDetailLevelsshowProfDetailLevel$fBinaryPackageDB$fBinaryOptimisationLevel$fBinaryDebugInfoLevel$fBinaryCompiler$fBinaryProfDetailLevel $fEqPackageDB$fGenericPackageDB$fOrdPackageDB$fShowPackageDB$fReadPackageDB$fBoundedOptimisationLevel$fEnumOptimisationLevel$fEqOptimisationLevel$fGenericOptimisationLevel$fReadOptimisationLevel$fShowOptimisationLevel$fBoundedDebugInfoLevel$fEnumDebugInfoLevel$fEqDebugInfoLevel$fGenericDebugInfoLevel$fReadDebugInfoLevel$fShowDebugInfoLevel $fEqCompiler$fGenericCompiler$fShowCompiler$fReadCompiler$fEqProfDetailLevel$fGenericProfDetailLevel$fReadProfDetailLevel$fShowProfDetailLevel GhcImplInfosupportsHaskell2010 reportsNoExtalwaysNondecIndentflagGhciScript flagProfAutoflagPackageConf flagDebugInfosupportsDebugLevelssupportsPkgEnvFilesflagWarnMissingHomeModules getImplInfo CommandSpecCommand CommandType NormalCommand HiddenCommand CommandParse CommandHelp CommandList CommandErrorsCommandReadyToGo MkOptDescrArgPlaceHolderOptFlagsLFlagsSFlagsOptDescrReqArgOptArg ChoiceOptBoolOpt OptionField optionDescr DescriptionShowOrParseArgsShowArgs ParseArgs CommandUI commandNamecommandSynopsis commandUsagecommandDescription commandNotescommandDefaultFlagscommandOptions multiOptionreqArgoptArgreqArg'optArg'noArgboolOptboolOpt' choiceOptchoiceOptFromEnumviewAsFieldDescr liftOptioncommandShowOptions usageDefaultusageAlternatives mkCommandUIcommandParseArgs hiddenCommandcommandAddAction commandsRun noExtraFlagsgetNormalCommandDescriptions helpCommandUIcommandFromSpec$fFunctorCommandParseBenchmarkFlagsbenchmarkDistPrefbenchmarkVerbositybenchmarkOptions TestFlags testDistPref testVerbosity testHumanLogtestMachineLogtestShowDetails testKeepTix testOptionsTestShowDetailsNeverFailuresAlways StreamingDirect ReplFlagsreplProgramPathsreplProgramArgs replDistPref replVerbosity replReload BuildFlagsbuildProgramPathsbuildProgramArgs buildDistPrefbuildVerbosity buildNumJobs buildArgsbuildCabalFilePath CleanFlags cleanSaveConf cleanDistPrefcleanVerbositycleanCabalFilePath HaddockFlagshaddockProgramPathshaddockProgramArgs haddockHoogle haddockHtmlhaddockHtmlLocationhaddockForHackagehaddockExecutableshaddockTestSuiteshaddockBenchmarkshaddockForeignLibshaddockInternal haddockCsshaddockLinkedSourcehaddockHscolourCsshaddockContentshaddockDistPrefhaddockKeepTempFileshaddockVerbosityhaddockCabalFilePath HaddockTarget ForHackageForDevelopment DoctestFlagsdoctestProgramPathsdoctestProgramArgsdoctestDistPrefdoctestVerbosity HscolourFlags hscolourCSShscolourExecutableshscolourTestSuiteshscolourBenchmarkshscolourForeignLibshscolourDistPrefhscolourVerbosityhscolourCabalFilePath RegisterFlags regPackageDB regGenScript regGenPkgConf regInPlace regDistPref regPrintId regVerbosityregArgsregCabalFilePath SDistFlags sDistSnapshotsDistDirectory sDistDistPrefsDistListSourcessDistVerbosity InstallFlagsinstallPackageDB installDestinstallDistPrefinstallUseWrapperinstallInPlaceinstallVerbosityinstallCabalFilePath CopyFlagscopyDest copyDistPref copyVerbositycopyArgscopyCabalFilePath ConfigFlags configArgsconfigPrograms_configProgramPathsconfigProgramArgsconfigProgramPathExtraconfigHcFlavor configHcPath configHcPkgconfigVanillaLib configProfLibconfigSharedLibconfigStaticLib configDynExe configProfExe configProfconfigProfDetailconfigProfLibDetailconfigConfigureArgsconfigOptimizationconfigProgPrefixconfigProgSuffixconfigInstallDirsconfigScratchDirconfigExtraLibDirsconfigExtraFrameworkDirsconfigExtraIncludeDirs configIPID configCIDconfigDeterministicconfigDistPrefconfigCabalFilePathconfigVerbosityconfigUserInstallconfigPackageDBs configGHCiLibconfigSplitSectionsconfigSplitObjsconfigStripExesconfigStripLibsconfigConstraintsconfigDependenciesconfigInstantiateWithconfigConfigurationsFlags configTestsconfigBenchmarksconfigCoverageconfigLibCoverageconfigExactConfigurationconfigFlagErrorconfigRelocatableconfigDebugInfoconfigUseResponseFiles GlobalFlags globalVersionglobalNumericVersion BooleanFlagasBoolNoFlagdefaultDistPreftoFlagfromFlagfromFlagOrDefault flagToMaybe flagToList maybeToFlagdefaultGlobalFlags globalCommandemptyGlobalFlagsconfigProgramsconfigAbsolutePathsdefaultConfigFlagsconfigureCommandconfigureOptionsreadPackageDbListshowPackageDbListinstallDirsOptionsemptyConfigFlagsdefaultCopyFlags copyCommandemptyCopyFlagsdefaultInstallFlagsinstallCommandemptyInstallFlagsdefaultSDistFlags sdistCommandemptySDistFlagsdefaultRegisterFlagsregisterCommandunregisterCommandemptyRegisterFlagsemptyHscolourFlagsdefaultHscolourFlagshscolourCommanddefaultDoctestFlagsdoctestCommandemptyDoctestFlagsdefaultHaddockFlagshaddockCommandhaddockOptionsemptyHaddockFlagsdefaultCleanFlags cleanCommandemptyCleanFlags buildVerbosedefaultBuildFlags buildCommand buildOptionsemptyBuildFlagsdefaultReplFlags replCommanddefaultTestFlags testCommandemptyTestFlagsdefaultBenchmarkFlagsbenchmarkCommandemptyBenchmarkFlagsprogramConfigurationPaths'programDbPaths'programConfigurationOptionsprogramDbOptionstrueArgfalseArgoptionDistPrefoptionVerbosity optionNumJobs configureArgsconfigureCCompilerconfigureLinker splitArgs $fEnumFlag $fBoundedFlag$fSemigroupFlag $fMonoidFlag $fFunctorFlag$fBooleanFlagBool$fSemigroupGlobalFlags$fMonoidGlobalFlags$fSemigroupConfigFlags$fMonoidConfigFlags$fEqConfigFlags$fBinaryConfigFlags$fSemigroupCopyFlags$fMonoidCopyFlags$fSemigroupInstallFlags$fMonoidInstallFlags$fSemigroupSDistFlags$fMonoidSDistFlags$fSemigroupRegisterFlags$fMonoidRegisterFlags$fSemigroupHscolourFlags$fMonoidHscolourFlags$fSemigroupDoctestFlags$fMonoidDoctestFlags$fTextHaddockTarget$fBinaryHaddockTarget$fSemigroupHaddockFlags$fMonoidHaddockFlags$fSemigroupCleanFlags$fMonoidCleanFlags$fSemigroupBuildFlags$fMonoidBuildFlags$fSemigroupReplFlags$fMonoidReplFlags$fSemigroupTestShowDetails$fMonoidTestShowDetails$fTextTestShowDetails$fParsecTestShowDetails$fPrettyTestShowDetails$fSemigroupTestFlags$fMonoidTestFlags$fSemigroupBenchmarkFlags$fMonoidBenchmarkFlags $fReadFlag$fGenericGlobalFlags$fGenericConfigFlags$fReadConfigFlags$fShowConfigFlags$fShowCopyFlags$fGenericCopyFlags$fShowInstallFlags$fGenericInstallFlags$fShowSDistFlags$fGenericSDistFlags$fShowRegisterFlags$fGenericRegisterFlags$fShowHscolourFlags$fGenericHscolourFlags$fShowDoctestFlags$fGenericDoctestFlags$fEqHaddockTarget$fShowHaddockTarget$fGenericHaddockTarget$fShowHaddockFlags$fGenericHaddockFlags$fShowCleanFlags$fGenericCleanFlags$fReadBuildFlags$fShowBuildFlags$fGenericBuildFlags$fShowReplFlags$fGenericReplFlags$fEqTestShowDetails$fOrdTestShowDetails$fEnumTestShowDetails$fBoundedTestShowDetails$fShowTestShowDetails$fGenericTestFlags$fGenericBenchmarkFlags GhcProfAutoGhcProfAutoAllGhcProfAutoToplevelGhcProfAutoExportedGhcDynLinkMode GhcStaticOnlyGhcDynamicOnlyGhcStaticAndDynamicGhcOptimisationGhcNoOptimisationGhcNormalOptimisationGhcMaximumOptimisationGhcSpecialOptimisationGhcModeGhcModeCompile GhcModeLink GhcModeMakeGhcModeInteractiveGhcModeAbiHash GhcOptions ghcOptMode ghcOptExtraghcOptExtraDefaultghcOptInputFilesghcOptInputModulesghcOptOutputFileghcOptOutputDynFileghcOptSourcePathClearghcOptSourcePathghcOptThisUnitIdghcOptThisComponentIdghcOptInstantiatedWith ghcOptNoCodeghcOptPackageDBsghcOptPackagesghcOptHideAllPackagesghcOptWarnMissingHomeModulesghcOptNoAutoLinkPackagesghcOptLinkLibsghcOptLinkLibPathghcOptLinkOptionsghcOptLinkFrameworksghcOptLinkFrameworkDirs ghcOptNoLinkghcOptLinkNoHsMainghcOptLinkModDefFilesghcOptCcOptionsghcOptCxxOptionsghcOptCppOptionsghcOptCppIncludePathghcOptCppIncludesghcOptFfiIncludesghcOptLanguageghcOptExtensionsghcOptExtensionMapghcOptOptimisationghcOptDebugInfoghcOptProfilingModeghcOptProfilingAutoghcOptSplitSectionsghcOptSplitObjs ghcOptNumJobs ghcOptHPCDirghcOptGHCiScriptsghcOptHiSuffixghcOptObjSuffixghcOptDynHiSuffixghcOptDynObjSuffix ghcOptHiDir ghcOptObjDirghcOptOutputDir ghcOptStubDirghcOptDynLinkModeghcOptStaticLib ghcOptShared ghcOptFPicghcOptDylibName ghcOptRPathsghcOptVerbosityghcOptExtraPath ghcOptCabalrunGHC ghcInvocationrenderGhcOptionspackageDbArgsDb$fSemigroupGhcOptions$fMonoidGhcOptions $fShowGhcMode $fEqGhcMode$fShowGhcOptimisation$fEqGhcOptimisation$fShowGhcDynLinkMode$fEqGhcDynLinkMode$fShowGhcProfAuto$fEqGhcProfAuto$fShowGhcOptions$fGenericGhcOptionsparseConditionaddBuildableConditionextractConditionsfreeVars finalizePDfinalizePackageDescriptionflattenPackageDescriptiontransformAllBuildInfostransformAllBuildDepends$fSemigroupDepTestRslt$fMonoidDepTestRslt$fSemigroupPDTagged$fMonoidPDTagged$fShowPDTagged defaultMaindefaultMainArgsdefaultMainNoReadPrettyFieldGrammarprettyFieldGrammar $fFieldGrammarPrettyFieldGrammar$fApplicativePrettyFieldGrammar$fFunctorPrettyFieldGrammarParsecFieldGrammar MkSection NamelessFieldMkNamelessFieldFieldsnamelessFieldAnnparseFieldGrammarfieldGrammarKnownFieldListrunFieldParser'runFieldParser $fFieldGrammarParsecFieldGrammar$fApplicativeParsecFieldGrammar$fEqNamelessField$fShowNamelessField$fFunctorNamelessField $fEqSection $fShowSection$fFunctorSection$fFunctorParsecFieldGrammarPrettyFieldGrammar'ParsecFieldGrammar'^^^partitionFields takeFieldsBenchmarkStanza_benchmarkStanzaBenchmarkType_benchmarkStanzaMainIs_benchmarkStanzaBenchmarkModule_benchmarkStanzaBuildInfoTestSuiteStanza_testStanzaTestType_testStanzaMainIs_testStanzaTestModule_testStanzaBuildInfopackageDescriptionFieldGrammarlibraryFieldGrammarforeignLibFieldGrammarexecutableFieldGrammartestStanzaTestTypetestStanzaMainIstestStanzaTestModuletestStanzaBuildInfotestSuiteFieldGrammarvalidateTestSuiteunvalidateTestSuitebenchmarkStanzaBenchmarkTypebenchmarkStanzaMainIsbenchmarkStanzaBenchmarkModulebenchmarkStanzaBuildInfobenchmarkFieldGrammarvalidateBenchmarkunvalidateBenchmarkbuildInfoFieldGrammarflagFieldGrammarsourceRepoFieldGrammarsetupBInfoFieldGrammar$fHasBuildInfoTestSuiteStanza$fHasBuildInfoBenchmarkStanzawriteGenericPackageDescriptionshowGenericPackageDescriptionwritePackageDescriptionshowPackageDescriptionwriteHookedBuildInfoshowHookedBuildInforeadGenericPackageDescriptionparseGenericPackageDescription#parseGenericPackageDescriptionMaybereadHookedBuildInfoparseHookedBuildInfoscanSpecVersion$fFromBuildInfoBenchmarkStanza$fFromBuildInfoTestSuiteStanza$fFromBuildInfoExecutable$fFromBuildInfoForeignLib$fFromBuildInfoLibrary$fFromBuildInfoBuildInfo $fEqSyntax $fShowSyntax FieldDescrsfieldDescrPrettyfieldDescrParsefieldDescrsToList$fFieldGrammarFieldDescrs$fApplicativeFieldDescrs$fFunctorFieldDescrsipiFieldGrammar$fPrettyExposedModules$fParsecExposedModules$fNewtypeExposedModules[]$fParsecCompatPackageKey$fPrettyCompatPackageKey$fNewtypeCompatPackageKey[]$fParsecInstWith$fPrettyInstWith$fNewtypeInstWith[]$fPrettySpecLicenseLenient$fParsecSpecLicenseLenient!$fNewtypeSpecLicenseLenientEitherinstalledComponentIdinstalledOpenUnitIdrequiredSignaturessourceComponentNameparseInstalledPackageInfoshowInstalledPackageInfoshowFullInstalledPackageInfoshowInstalledPackageInfoField#showSimpleInstalledPackageInfoFieldComponentLocalBuildInfoLibComponentLocalBuildInfoFLibComponentLocalBuildInfoExeComponentLocalBuildInfoTestComponentLocalBuildInfoBenchComponentLocalBuildInfocomponentLocalNamecomponentComponentIdcomponentUnitIdcomponentIsIndefinite_componentInstantiatedWithcomponentPackageDepscomponentIncludescomponentExeDepscomponentInternalDepscomponentCompatPackageKeycomponentCompatPackageNamecomponentExposedModulescomponentIsPubliccomponentIsIndefinitemaybeComponentInstantiatedWith$fIsNodeComponentLocalBuildInfo$fBinaryComponentLocalBuildInfo $fGenericComponentLocalBuildInfo$fReadComponentLocalBuildInfo$fShowComponentLocalBuildInfo TargetInfo targetCLBItargetComponent$fIsNodeTargetInfoRegisterOptionsregisterAllowOverwriteregisterMultiInstanceregisterSuppressFilesCheck HcPkgInfo hcPkgProgram noPkgDbStack noVerboseFlagsupportsDirDbsrequiresDirDbsnativeMultiInstancerecacheMultiInstancesuppressFilesCheckinvokedefaultRegisterOptionsregister unregisterrecacheexposedescribehidedumplistinitInvocationregisterInvocationunregisterInvocationrecacheInvocationexposeInvocationdescribeInvocationhideInvocationdumpInvocationlistInvocation SearchResultNone Unambiguous AmbiguousInstalledPackageIndex PackageIndexmerge deleteUnitIddeleteInstalledPackageIddeleteSourcePackageIddeletePackageName allPackagesallPackagesByNameallPackagesBySourcePackageId&allPackagesBySourcePackageIdAndLibName lookupUnitIdlookupComponentIdlookupInstalledPackageIdlookupSourcePackageIdlookupPackageIdlookupPackageNamelookupDependencylookupInternalDependency searchByNamesearchByNameSubstringdependencyCyclesbrokenPackagesdependencyClosurereverseDependencyClosuretopologicalOrderreverseTopologicalOrderdependencyGraphdependencyInconsistenciesmoduleNameIndex$fSemigroupPackageIndex$fMonoidPackageIndex$fBinaryPackageIndex$fEqPackageIndex$fGenericPackageIndex$fShowPackageIndex$fReadPackageIndexLocalBuildInfo configFlagsflagAssignmentcomponentEnabledSpecextraConfigArgsinstallDirTemplatescompiler hostPlatformbuildDir cabalFilePathcomponentGraphcomponentNameMap installedPkgs pkgDescrFile localPkgDescr withPrograms withPackageDBwithVanillaLib withProfLib withSharedLib withStaticLib withDynExe withProfExewithProfLibDetailwithProfExeDetailwithOptimization withDebugInfo withGHCiLib splitSections splitObjs stripExes stripLibs exeCoverage libCoverage progPrefix progSuffix relocatablelocalComponentId localPackage localUnitIdlocalCompatPackageKeycomponentNameTargets' unitIdTarget'componentNameCLBIsallTargetsInBuildOrder'withAllTargetsInBuildOrder'neededTargetsInBuildOrder'withNeededTargetsInBuildOrder' testCoveragecomponentNameTargets unitIdTargetallTargetsInBuildOrderwithAllTargetsInBuildOrderneededTargetsInBuildOrderwithNeededTargetsInBuildOrdercomponentsConfigsexternalPackageDeps$fBinaryLocalBuildInfo$fGenericLocalBuildInfo$fReadLocalBuildInfo$fShowLocalBuildInfocomponentBuildDirgetComponentLocalBuildInfo withLibLBI withExeLBI withBenchLBI withTestLBIenabledTestLBIsenabledBenchLBIswithComponentsLBIwithAllComponentsInBuildOrderwithComponentsInBuildOrderallComponentsInBuildOrdercomponentsInBuildOrderdepLibraryPaths allLibModulesabsoluteComponentInstallDirs"prefixRelativeComponentInstallDirsTestLogsTestLog GroupLogstestOptionsReturned testResult TestSuiteLog testSuiteNametestLogslogFile PackageLogplatformlocalPackageLogcountTestResults suitePassed suiteFailed suiteErrortestSuiteLogPathsummarizePackage summarizeTestsummarizeSuiteFinishsummarizeSuiteStart$fReadTestLogs$fShowTestLogs $fEqTestLogs$fReadTestSuiteLog$fShowTestSuiteLog$fEqTestSuiteLog$fReadPackageLog$fShowPackageLog$fEqPackageLogcombineObjectFilescreateArLibArchiveWayVanillaProfDynmixDirtixDir tixFilePathhtmlDirguessWay markupTest markupPackage $fBoundedWay $fEnumWay$fEqWay $fReadWay $fShowWay QualLevelQL1QL2QL3BuildTargetProblemBuildTargetExpectedBuildTargetNoSuchBuildTargetAmbiguousUserBuildTargetProblemUserBuildTargetUnrecognised BuildTargetBuildTargetComponentBuildTargetModuleBuildTargetFileUserBuildTargetreadTargetInfosbuildTargetComponentNamereadBuildTargetsreadUserBuildTargetsreportUserBuildTargetProblemsshowUserBuildTargetshowBuildTargetresolveBuildTargetsreportBuildTargetProblems$fBinaryBuildTarget $fMonadMatch$fApplicativeMatch$fFunctorMatch$fMonadPlusMatch$fAlternativeMatch$fShowUserBuildTarget$fEqUserBuildTarget$fOrdUserBuildTarget$fEqBuildTarget$fShowBuildTarget$fGenericBuildTarget$fShowUserBuildTargetProblem$fShowBuildTargetProblem$fEnumQualLevel$fShowQualLevel$fEqComponentKind$fOrdComponentKind$fShowComponentKind$fShowMatchError$fEqMatchError $fShowMatch$fShowMaybeAmbiguoussrcPref hscolourPrefhaddockDirName haddockPrefautogenModulesDirautogenPackageModulesDirautogenComponentModulesDir cppHeaderNameautogenModuleNameautogenPathsModuleName haddockNamegetLibSourceFilesgetExeSourceFilesgetFLibSourceFilesgetSourceFiles exeBuildDir flibBuildDirmkGenericStaticLibName mkLibName mkProfLibNamemkGenericSharedLibNamemkSharedLibNamemkStaticLibName exeExtension objExtension dllExtensionstaticLibExtension configuregetInstalledPackagesbuildLibbuildExe installLibregisterPackageinplacePackageDbPathCheckPackageContentOps doesFileExistdoesDirectoryExistgetDirectoryContentsgetFileContents PackageCheckPackageBuildImpossiblePackageBuildWarningPackageDistSuspiciousPackageDistSuspiciousWarnPackageDistInexcusable explanation checkPackagecheckConfiguredPackagecheckPackageFilescheckPackageContentcheckPackageFileNames$fShowPackageCheck$fEqPackageCheckgenerate pkgPathEnvVarrunTeststubName stubFilePathwriteSimpleTestStubsimpleTestStubstubMain stubWriteLoggeneratePackageVersionMacroscomputeComponentIdcomputeCompatPackageKeyConfiguredComponentMapConfiguredComponent cc_ann_id cc_component cc_public cc_exe_deps cc_includescc_cidcc_pkgidcc_namedispConfiguredComponenttoConfiguredComponentextendConfiguredComponentMaptoConfiguredComponentsnewPackageDepsBehaviourComponentsWithDepsComponentsGraphdispComponentsWithDepsmkComponentsGraphcomponentsGraphToListcomponentCycleMsgghcVerbosityOptions ghcOptions installExe hcPkgInfo hstoolVersionnumericVersiongetCompilerVersion getExtensions getLanguages initPackageDB packageDbOptGhcEnvironmentFileEntryGhcEnvFileCommentGhcEnvFilePackageIdGhcEnvFilePackageDbGhcEnvFileClearPackageDbStacksimpleGhcEnvironmentFilewriteGhcEnvironmentFilegetPackageDBContents getLibDirgetGlobalPackageDBreplLibstartInterpreterreplExe libAbiHashcomponentGhcOptions isDynamicrunCmd getGhcInfo getInstalledPackagesMonitorFiles buildFLibreplFLibcomponentCcGhcOptions installFLibinstall ModuleShapemodShapeProvidesmodShapeRequiresemptyModuleShapeshapeInstalledPackage$fModSubstModuleShape$fBinaryModuleShape$fEqModuleShape$fShowModuleShape$fGenericModuleShapePreModuleShapepreModShapeProvidespreModShapeRequirestoPreModuleShaperenamePreModuleShapemixLinkPreModuleShape$fEqPreModuleShape$fShowPreModuleShape$fGenericPreModuleShapeLinkedComponentMapLinkedComponent lc_ann_id lc_component lc_exe_deps lc_public lc_includeslc_sig_includeslc_shapelc_cidlc_pkgidlc_uidlc_instsdispLinkedComponenttoLinkedComponenttoLinkedComponentsextendLinkedComponentMap$fPackageLinkedComponentModTime getModTimeposixSecondsToModTime getFileAge getCurTimecalibrateMtimeChangeDelay $fReadModTime $fShowModTime$fBinaryModTime$fBoundedModTime $fEqModTime $fOrdModTime!configureComponentLocalBuildInfos setupMessage'generateRegistrationInfocreatePackageDBdoesPackageDBExistdeletePackageDB invokeHcPkggeneralInstalledPackageInfoinplaceInstalledPackageInfoabsoluteInstalledPackageInfointernalPackageDBPathPPSuffixHandler PreProcessorplatformIndependentrunPreProcessormkSimplePreProcessorrunSimplePreProcessorpreprocessComponent ppGreenCardppUnlitppCppppCpp'ppHsc2hsppC2hsplatformDefinesppHappyppAlex ppSuffixesknownSuffixHandlerspreprocessExtras UserHooksrunTestsreadDeschookedPreProcessorshookedProgramspreConfconfHookpostConfpreBuild buildHook postBuildpreReplreplHookpostReplpreClean cleanHook postCleanpreCopycopyHookpostCopypreInstinstHookpostInstpreSDist sDistHook postSDistpreRegregHookpostRegpreUnreg unregHook postUnreg preHscolour hscolourHook postHscolour preDoctest doctestHook postDoctest preHaddock haddockHook postHaddockpreTesttestHookpostTestpreBench benchHook postBenchArgsemptyUserHookstestbenchsdistlistPackageSources prepareTreeprepareSnapshotTreesnapshotPackagesnapshotVersiondateToSnapshotNumber createArchiveprintPackageProblemsConfigStateFileErrorConfigStateFileNoHeaderConfigStateFileBadHeaderConfigStateFileNoParseConfigStateFileMissingConfigStateFileBadVersiongetConfigStateFiletryGetConfigStateFiletryGetPersistBuildConfiggetPersistBuildConfigmaybeGetPersistBuildConfigwritePersistBuildConfigcheckPersistBuildConfigOutdatedlocalBuildInfoFile findDistPreffindDistPrefOrDefaultgetInternalPackagescomputeEffectiveProfilinginterpretPackageDbFlagsccLdOptionsBuildInfoconfigCompilerAuxExconfigCompilerExconfigCompilerconfigCompilerAuxcheckForeignDeps$fExceptionConfigStateFileError$fShowConfigStateFileErrorreplinitialBuildStepscomponentInitialBuildStepswriteAutogenFileshaddockhaddockPackagePathshscolour$fSemigroupDirectory$fMonoidDirectory$fSemigroupHaddockArgs$fMonoidHaddockArgs$fReadDirectory$fShowDirectory $fEqDirectory$fOrdDirectory$fGenericHaddockArgsdoctest$fSemigroupDoctestArgs$fMonoidDoctestArgs$fShowDoctestArgs$fGenericDoctestArgsdefaultMainWithHooksdefaultMainWithHooksArgsdefaultMainWithHooksNoReaddefaultMainWithHooksNoReadArgssimpleUserHooksdefaultUserHooksautoconfUserHooks byteSwap64 byteSwap32 byteSwap16 Data.BinarydecodeFileOrFail decodeFile encodeFile decodeOrFaildecodeencode GBinaryPutgput GBinaryGetggetData.Binary.PutputWord8PutData.Binary.GetgetWord8Data.Binary.Get.InternalGetopenBinaryTempFile openTempFileopenNewBinaryFilecreateTempDirectoryData.Map.Strict.InternalfromDistinctDescListfromDistinctAscListfromDescListWithKeyfromAscListWithKeyfromDescListWithfromAscListWith fromDescList fromAscListfromListWithKey fromListWithfromSet mapKeysWithmapAccumRWithKeymapAccumWithKeymapAccumtraverseWithKey mapWithKeymapEitherWithKey mapEithertraverseMaybeWithKeymapMaybeWithKey mergeWithKeyintersectionWithKeyintersectionWithdifferenceWithKeydifferenceWith unionWithKey unionWith unionsWithupdateMaxWithKeyupdateMinWithKey updateMax updateMinupdateAtalterFalterupdateLookupWithKey updateWithKeyupdate adjustWithKeyadjustinsertLookupWithKey insertWithKey insertWithfindWithDefault$Data.Map.Internal.DeprecatedShowTree showTreeWithshowTreeData.Map.Internal.Debugvalid splitRoot deleteFindMax deleteFindMin splitLookupsplit toDescList toAscListassocsfoldMapWithKey foldlWithKey' foldlWithKey foldrWithKey' foldrWithKeyfoldr'mapKeysMonotonicmapKeyspartitionWithKey partition spanAntitonedropWhileAntitonetakeWhileAntitone filterWithKeyisProperSubmapOfByisProperSubmapOf isSubmapOfBy isSubmapOf restrictKeys intersection withoutKeys differenceunionsmaxViewminViewmaxViewWithKeyminViewWithKey deleteMax deleteMinfindMax lookupMaxfindMin lookupMindeleteAtelemAt lookupIndex findIndexdeletelookupGElookupLElookupGTlookupLT notMember\\!?!Control.Monad.Fail MonadFailData.SemigroupGNFDataSnocList runSnocListfromMapgetShortPathNamecopyFilecopyFileChanged filesEqualcopyOrdinaryFilecopyExecutableFilesetDirOrdinarysetEnvunsetEnv lookupEnvgetEnvironment usageInfogetOptSystem.Console.GetOptArgOrdergetOpt' RequireOrderPermute ReturnInOrderOptionArgDescrNoArgtokenizeQuotedWordspatches _makePatchKeybsRemove bsReplacebsRemoveStartingbytestring-0.10.8.2Data.ByteString.Internal ByteString StartCode LexState'parsec-3.1.13.0Text.Parsec.PrimStreamgetLexerWarnings setLexerModelines_ hashToBase62GHC.IO.Handle.TexthPutStr GHC.IO.HandlehCloseData.ByteString.Short.InternalShortByteStringData.ByteString.Lazy.InternalparseNat Data.VersiondoesNotIntersect ShortTextLstLinkPoint writePoint readPointfreshrepr equivalent verboseQuiet verboseFlag verboseNoFlag isVerboseFlagclassifyKnownExtensionPpretty-1.1.3.6Text.PrettyPrint.HughesPJfsepvcatLineSpanFIfBlockUnrecFieldParser FieldDescrfieldSet warnUnrec ignoreUnrec tokeniseLinemkTreelayoutbracesmkFieldifelseparseModuleNameQ parseSepListparseSpaceListparseCommaListparseOptCommaListfieldGet UTFWarningLineNocatchParseError parseFailrunPrunElocatedErrorMsg syntaxErrorwarningfield liftField simpleFieldcommaListFieldWithSepcommaListFieldcommaNewLineListFieldspaceListFieldlistFieldWithSep listField optsField boolFieldppFieldsppField showFieldsshowSingleNamedFieldshowSimpleSingleNamedField parseFieldsparseFieldsFlatlineNofNamereadFieldsFlatparseFilePathQparsePackageNameparseOptVersionparseTestedWithQ parseLicenseQparseLanguageQparseExtensionQ parseTokenQ parseTokenQ' parseQuotedparseMaybeQuoted parseFreeTextshowTestedWithconvertPackageIdconvertModuleNameconvertLicense WithSource ModuleSourceModuleRequiresModuleProvides ModuleScopeemptyModuleScopeModuleWithSource FromMixinsFromBuildDependsFromExposedModulesFromOtherModulesFromSignaturesmodScopeProvidesmodScopeRequiresdispModuleSource unWithSource getSourcecomponentNameNotRequestedReasoncombineFlagValuesversion getBinDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileNameMarkWhen NormalMark TraceWhen AlwaysTraceioeSetVerbatimioeGetVerbatimverbatimUserErrordisplaySomeExceptionDocwrapTextVerbosity withTimestamp withMetadatawithOutputMarkerwithTrailingNewlinewithCallStackPrefix traceWhen copyFilesWith readNubList formatMsgfindExecutablemarkupInvocationunionInvocationuserSpecifiedPathconfigureProgramsextensionToFlagextensionToFlag' ghcSupportedghcjsVersionImplInfoghcVersionImplInfolhcVersionImplInfo CommonFlag commandHelpparsecModSubstEntrydispModSubstEntryprogramDbPathsprogramDbOptionpackageDbArgsConf TargetSet DepMapUnion DepTestRsltsimplifyWithSysParamsresolveWithFlagsaddBuildableConditionPDTaggedPDTaggedPDNulloverallDependenciesflattenTaggedTargetstransformAllCondTreesPSSyntaxsectionizeFields FromBuildInfoSectionSreadAndParseFile parseCondTreeparseCondTreeWithCommonStanzasSpecLicenseLenientmaybePackageNamesetMaybePackageName<+> DepUniqueKey mkTargetInfocomponentNameToUnitIds wipeMetadatahpcDirMatchmatchInexactly findMatchUserBuildTargetSingleUserBuildTargetDoubleUserBuildTargetTripleshowBuildTarget' matchPlusmatchPlusShadowing exactMatchesinexactMatchescheckBuildTargetsuhcLanguageExtensionsaddBuiltinVersionsinstalledPkgConfigisPkgDirmkInstalledPackageInfo checkSanitycheckCabalVersioncheckPackageVersionscheckPathsModuleExtensions checkTarPath stubRunTestsgenerateToolVersionMacrosgenerateMacrosgenerateComponentIdMacrogenerateCurrentPackageVersionmkConfiguredComponenttoConfiguredComponent'fixFakePkgNameconfigureToolchaingetInstalledPackages'hackThreadedFlagjhcLanguageExtensionsfilterGhciFlags ghcArchString ghcOsStringghcPlatformAndVersionStringghcEnvironmentFileNamerenderGhcEnvironmentFilerenderGhcEnvironmentFileEntrytargetPlatformcomponentCxxGhcOptions mkGHCiLibNameghcLookupPropertygetHaskellObjectsmkGhcOptPackages substTopDircheckPackageDbEnvVarprofDetailLevelFlag hugsOptions toCurrent GBuildModegbuildguessToolFromGhcPathguessGhcPkgFromGhcPathguessHsc2hsFromGhcPathguessHaddockFromGhcPathtoPackageIndexgetUserPackageDBflibTargetName flibBuildNameexeMainModuleNamedecodeMainIsArg gbuildSourcesifNeedsRPathWorkaroundextractRtsInfocheckNeedsRecompilationgetObjectFileName getRPaths copyPackage copyComponentinstallDataFilesinstallIncludeFilesModuleProvidesU ModuleScopeU ModuleSubstU UnitIdUniqueUnitIdUModuleUUnitIdU'ModuleU'UnifRefUnifEnv unify_uniq unify_reqsunify_self_cidunify_verbosity unify_ctxunify_db unify_errsUnifyM runUnifyMliftSTGHC.STST readUnifRef writeUnifRef getUnifEnv addErrContextaddErrContextMconvertModuleSubstconvertModuleSubstUemptyModuleScopeUconvertIncludeconvertModuleScopeUconvertModuleProvidesconvertModuleProvidesUModuleWithSourceU UnitIdThunkU ModuleVarUaddErrfailWith failIfErrstryM convertUnitId convertModuleconvertUnitIdUconvertModuleUmixLink linkProvision unifyModulePreExistingComponent pc_pkgname pc_compnameipiToPreExistingComponent pc_munged_idpc_uidpc_cid pc_open_uidpc_shapegetModificationTimeposixTimeToModTime time-1.8.0.2"Data.Time.Clock.Internal.POSIXTime POSIXTimeInstMInstSIndefiniteComponentindefc_requiresindefc_providesindefc_includesInstantiatedComponent instc_instsinstc_insts_depsinstc_providesinstc_includesReadyComponent rc_open_uidrc_cid rc_component rc_exe_deps rc_publicrc_irc_uidrc_pkgid rc_depends rc_munged_idtoReadyComponents rc_ann_iddispReadyComponentPreProcessorExtraspreprocessFileknownExtrasHandlersCreateArchiveFun!listPackageSourcesMaybeExecutablelistPackageSourcesOrdinary findSetupFilemaybeCreateDefaultSetupScriptfindMainExeFilefindModDefFilefindIncludeFilefilterAutogenModulesallSourcesBuildInfo tarBallNameoverwriteSnapshotPackageDescExternalDependencyInternalDependencydispConfigStateFileErrorcurrentCabalIdcurrentCompilerId parseHeader showHeadercheckDeprecatedFlagscheckExactConfigurationdependencySatisfiableconfigureFinalizedPackagecheckCompilerProblemsconfigureDependenciesconfigureCoverageconfigureProfilingselectDependencyconfigureRequiredProgramcheckPackageProblemscheckRelocatableaddExtraCSourcesaddExtraCxxSourcestestSuiteExeV10AsExetestSuiteLibV09AsLibAndExebenchmarkExeV10asExecreateInternalPackageDB Directory HaddockArgsargInterfaceFileargPackageNameargHideModulesargIgnoreExports argLinkSourceargLinkedSource argCssFile argContents argOutput argInterfaces argOutputDirargTitle argPrologue argGhcOptions argGhcLibDir argTargets runHaddock mkHaddockArgs fromLibraryfromExecutablefromForeignLib getInterfaces hscolour' DoctestArgsallSuffixHandlerstryGetBuildConfiggetBuildConfig