#9147R       !"#$%&'() * + , - . / 0 1 2 3 4 56789:;<=>?@ABCDEFGHIJKLMNOPQRST U V W X Y Z [\]^_`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&{&|&}&~&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'((((((((((((((((((((()))))))))))))*************+++ + , - . ... !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~///////////////////////////000000000000000000000000000000000000000000000000000111111111111111111111112222 2 2 2 2 23333333            ! " # $4%4&4'4(4)4*4+4,4-4.5/505152535455565758595:5;5<5=5>5?5@5A5B5C5D5E5F5G5H5I5J5K5L5M5N5O5P5Q5R5S5T5U5V5W5X5Y5Z5[5\5]5^5_5`5a5b5c5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5s5t5u5v5w5x y z { | } ~                                                                                                                                                                   ! " # $ % & ' ( ) * + , - . / 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 b6c7d8e9f8g7h8i6j8k7l7m8n8o8p8q8r:s:t:u:v;w;x;y;z;{;|;};~;;;;;;;;<<<<<<<<<<<<<<<<<<<<<==============>>>>>>>>>>>????????????????????????????????????????????????????????????????????????????????????? ? ? ? ? ???????????@@@@@@AA A!A"A#A$A%A&A'A(A)A*A+B,C-C.C/C0C1C2C3C4C5C6C7C8C9C:C;C<C=C>C?C@CACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC[C\C]C^C_C`CaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzC{C|C}C~CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C C CCCCCCCCCCCCCCCCCCC C!C"C#C$C%C&C'C(C)C*C+C,C-C.C/C0C1C2C3C4C5C6C7C8C9C:C;C<C=C>C?C@CACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC[C\C]C^C_C`CaCbCcCdCeCfCgChCiCjCkClCmCnDoDpDqDrDsDtDuDvDwDxDyDzD{D|D}D~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGG G G G G GGGGGGGGGGGGGGGGGGG G!G"G#H$H%H&H'H(H)H*H+H,H-H.H/H0H1H2H3H4H5H6H7H8H9H:H;H<H=H>H?H@HAHBHCHDHEHFHGHHIIIJIKILIMINIOIPIQIRISITIUIVIWIXJYJZJ[J\J]J^J_J`JaJbJcJdJeJfJgJhJiJjJkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJzJ{J|J}J~JJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOPPPPPPPPPPPPPPPPPPPPPPPPPPP P P P P P P P P P P P P P Q 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 (T )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 ZU [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 zU {U |U }U ~U U U U U U U U U U U U U U U 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 !2 "2 #2 $2 %2 &2 '2 (2 )2 *2 +2 ,2 -2 .2 /2 02 12 22 32 42 52 62 72 82 92 :2 ;2 <2 =2 >2 ?2 @2 A2 B2 C2 D2 E2 F2 G2 H2 I2 J2 K2 L2 MV NV O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e fW gW hW iW jW kW lW mW nW oW pW qW rW sW tW uW vW wW xW yW zW {W |W }W ~W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W X X X X X X X X X Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z                          ! " # $ % & ' ([ )[ *[ +[ ,[ -[ .[ /[ 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\ {\ |\ }\ ~\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % !% "% #% $% %% &% '% (% )% *% +% ,% -% .% /% 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% {% |% }% ~% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % !% "% #% $% %% &% '% (% )% *% +% ,% -% .% /% 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% {% |% }% ~% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %%%%%%%%%% % % % % %%%%%%%%%%%%%%%%%%% %!%"%#%$%%%&%'%(%)%*%+%,%-%.%/%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%{%|%}%~%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % % %%%%%%%%%%%%%%%%%%% %!%"%#%$%%%&%'%(%)%*%+%,%-%.%/%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%{%|%}%~%%%%%%%%%%%%%%%]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^________      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~``````````````````````````````````````````aaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbcc c c c c ccccccccccccccccccd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/e0e1e2f3f4f5f6f7f8f9f:f;f<f=f>f?f@fAfBfCfDfEfFfGfHfI 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 jgkglgmAnAoApAqArAsAtAuAvAwAxAyAzA{A|A}A~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA333333333333333333333333333333333333333333333333333333333333333333333333hiiiiiiiiiiiiiij j j j j jjjjjjjjjjjjjjjkkkk k!l"l#l$m%m&m'm(m)m*m+m,m-m.m/m0m1m2m3m4m5m6m7m8m9m:m;m<m=m>m?m@mAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm[m\m]m^m_m`mambmcmdmemfmgmhmimjmkmlmmmnmompmqnrnsntnunvnwnxnynzn{n|n}n~nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn n n n n nnnnnnnnnnnnnnnnnnn n!n"n#n$n%n&n'n(n)n*n+n,n-n.n/n0n1o2o3o4o5o6o7o8o9o:o;o<p=p>p?p@pApBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq[r\r]r^r_r`rarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzr{r|r}r~rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV V V V V VVVVVVVVVVVVVVVVVVV V!V"V#V$V%V&V'V(V)V*V+V,V-V.V/V0V1V2V3V4V5V6V7V8V9V:V;V<V=V>V?V@VAVBVCVDVEVFVGVHVIVJVKVLVMVNVOVPVQVRVSVTVUVVVWVXVYVZV[V\V]V^V_V`VaVbVcVdVeVfVgVhViVjVkVlVmVnVoVpVqVrVsVtVuVvVwVxVyVzV{V|V}V~VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV V V V V VVVVVVVVVVVVVVVVVVV V!V"V#V$V%V&V'V(V)V*V+V,V-V.V/V0V1V2V3V4V5V6V7V8V9V:V;V<V=V>V?V@VAVBVCVDVEVFVGVHVIVJVKVLVMVNVOVPVQVRVSVTVUVVVWVXVYVZV[V\V]V^V_V`VaVbVcVdVeVfVgVhViVjVkVlVmVnVoVpVqVrVsVtVuVvVwVxVyVzV{V|V}V~VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV V V V V VVVVVVVVVVVVVVVVVVV V!V"V#V$V%V&V'V(V)V*V+V,V-V.V/V0V1V2V3V4V5V6V7V8V9V:V;V<V=V>V?V@VAVBVCVDVEVFVGVHVIVJVKVLVMVNVOVPVQVRVSVTVUVVVWVXVYVZV[V\V]V^V_V`VaVbVcVdVeVfVgVhViVjVkVlVmVnVoVpVqVrVsVtVuVvVwVxVyVzV{V|V}V~VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV V V V V VVVVVVVVVVVVVVVVVVV V!V"V#V$V%V&V'V(V)V*V+V,V-V.V/V0V1V2V3V4V5V6V7V8V9V:V;V<V=V>V?V@VAVBVCVDVEVFVGVHVIVJVKVLVMVNVOVPVQVRVSVTVUVVVWVXVYVZV[V\V]V^V_V`VaVbVcVdVeVfVgVhViVjVkVlVmVnVoVpVqVrVsVtVuVvVwVxVyVzV{V|V}V~VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVssssssssssssssssssssssssssssssss s s s s sssssssssssssssssss s!s"s#s$s%s&s's(s)s*s+s,s-s.s/s0s1s2s3s4s5s6s7s8s9s:s;s<s=s>s?s@sAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs[s\s]s^s_s`sasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszs{s|s}s~sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss s s s s sssssssssssssssssss s!s"s#s$s%s&s's(s)s*s+s,s-s.s/s0s1s2s3s4s5s6s7s8s9s:s;s<s=s>s?s@sAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs[s\s]s^s_s`sasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszs{s|s}s~ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssttttttttttt t t t t ttttttttttttttttttt t!t"t#t$t%t&t't(t)t*t+t,t-t.t/t0t1t2t3t4t5t6t7t8t9t:t;t<t=t>t?t@tAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt[t\t]t^t_t`tatbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytzt{t|t}t~tttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu u u u u uuuuuuuuuuuuuuuuuuu u!u"u#u$u%u&u'u(u)u*u+u,u-u.u/u0u1u2u3u4u5u6u7u8u9u:u;u<u=u>u?u@uAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu\u]u^u_u`uaubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzu{u|u}u~uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww w w w w wwwwwwwwxxxxxxxxxxx x!x"x#x$x%x&x'x(x)x*x+x,x-x.x/x0x1x2x3x4x5x6x7x8x9x:x;x<x=8>x?x@xAxBxCxDxExFxGyHyIzJzKzLzMzN{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|{|||}|~||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| | | | | ||||||||||||||||||| |!|"|#|$|%|&|'|(|)|*|+|,|-|.|/|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|{|||}|~||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~777777777777777777777777777777777      !"#$%&'()*+,-./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. {. |. }. ~. . . . . . . . . . . . . . . . . 8 8 8 8 8 8 8 8 8 8 8 8 { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { {!{!{!{!{!{!{!{!{!{! {! {! {! {! {!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{! {!!{!"{!#!$!%!&!'!(!)!*!+!,!-!.!/!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!{!|!}!~!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!7!8!8!7!7!7!7!6!6!6!6!7!7!7!6!7!7!6!6!6!6!6!6!6!6!6!6!6!6!6!6!6!6!6!6!6!6!6!8!6!6!6!6!6!6!6!6!6!6"8"8"8"8"8"8"8":"6" 8" 8" 8" 6" 6"8"8":":"8"8"6"8"8"8"8"8"8"8"8"9"9"6" 6"!8""7"#7"$8"%8"&7"'7"(6")6"*8"+:",:"-:".8"/8"08"18"2:"37"46"57"67"78"88"97":6";6"<6"=6">8"?6"@8"A7"B8"C8"D8"E8"F8"G8"H:"I6"J8"K7"L8"M8"N8"O8"P8"Q6"R8"S8"T8"U8"V8"W8"X8"Y8"Z8"[8"\6"]8"^8"_8"`8"a8"b6"c8"d8"e8"f8"g8"h8"i6"j7"k8"l:"m8"n6"o8"p6"q6"r8"s8"t8"u8"v8"w8"x8"y8"z6"{8"|7"}8"~7"6"6"7"7"7"8"8"8"8"7"6"8"8"8"8"6"6"8"7"7"8"8":"8"8"8"8"8"8"8"8"6"6"8"8"8"8"6"8"8"8"8"8"8"8"8"8"8"8"8"8"7"7"8"7"6"6"6"6"6"6"6"6"6"6"6"6"6"6"6"6"6"6"6"6""""""""""""""""""""""""""""""""""""""""""""""""""""""########## # # # # ################### #!#"###$#%#&#'#(#)#*#+#,#-#.#/#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#{#|#}#~#######9#9#9#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8$8$8$8$8$8$8$8$8$8$ 8$ 8$ 8$ 8$ 8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$ 8$!8$"8$#8$$8$%8$&8$'8$(8$)8$*8$+8$,8$-8$.8$/8$08$18$28$38$48$58$68$78$88$98$:8$;8$<8$=8$>8$?8$@8$A8$B8$C8$D8$E$F$Gz$Hz$Iz$Jz$Kz$Lz$Mz$Nz$Oz$Pz$Qz$Rz$Sz$Tz$Uz$Vz$Wz$Xz$Yz$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${$|$}$~$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%% % % % % %%%%%%%%%%%%%%%%%%% %!%"%#%$%%%&%'%(%)%*%+%,%-%.%/%0%1%2%3%4%5%6%7%8%9%:%;7%<7%=7%>7%?7%@7%A7%B7%C7%D7%E7%F7%G7%H7%I7%J7%K7%L7%M7%N7%O7%P7%Q7%R7%S7%T7%U7%V7%W7%X7%Y7%Z7%[7%\7%]7%^7%_7%`7%a7%b7%c7%d7%e7%f7%g7%h7%i7%j7%k7%l7%m7%n7%o7%p7%q7%r7%s7%t7%u7%v7%w7%x7%y7%z7%{7%|7%}7%~7%7%7%7%7%7%7%7%7%7%7%7%7%7%7%7%7%7%7%7%7%7%7%7%7%7%7%7%7%7%7%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&& & & & & &&&&&&&&&&&&&&&&&&& &!&"&#&$&%&&&'&(&)&*&+&,&-&.&/&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&{&|&}&~&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''' ' ' ' ' ''''''''''''''''''' '!'"'#'$'%'&'''(')'*'+','-'.'/'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'{'|'}'~'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(((((((((( @( @( @( @( @(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@( @(!@("@(#@($@(%@(&@('@((@()@(*@(+@(,@(-@(.@(/@(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({(|(}(~(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((x(x(x(x(x(x(x(x(x(x(x(x(x(x(x(x(x(x(x(x(x(x(x(x(x(x(x(x(x(x(x)x)x)x)x)x)x)x)x)x) x) x) x) x) x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x) x)!x)"x)#x)$x)%x)&x)'x)(x))x)*x)+x),x)-x).x)/x)0x)1x)2x)3x)4x)5x)6x)7x)8x)9x):x);x)<x)=x)>x)?x)@x)Ax)Bx)Cx)Dx)Ex)Fx)Gx)Hx)Ix)Jx)Kx)Lx)Mx)Nx)Ox)Px)Qx)Rx)Sx)Tx)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'){')|')}')~')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')')'*'*'*'*'*'*'*'*'*'* '* '* '* '* '*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'* '*!'*"'*#'*$'*%'*&'*''*('*)'**'*+'*,'*-'*.'*/'*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'*{'*|'*}'*~'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'+'+'+'+'+'+'+'+'+'+ '+ '+ '+ '+ '+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+ '+!'+"'+#'+$'+%'+&'+''+('+)'+*'++'+,'+-'+.'+/'+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'+{'+|'+}'+~'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,,, , , , , ,,,,,,,,,,,,,,,,,,, ,!,",#,$,%,&,',(,),*,+,,,-,.,/,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,{,|,},~,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---------- - - - - ------------------- -!-"-#-$-%-&-'-(-)-*-+-,---.-/-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-{-|-}-~---------------------------------------------------------------------------------------------------------------------------------.......... . . . . ................... .!.".#.$.%.&.'.(.).*.+.,.-.../.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.{.|.}.~.................................................................................................................................////////// / / / / /////////////////// /!/"/#/$/%/&/'/(/)/*/+/,/-/.///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/{/|/}/~/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0000000000 0 0 0 0 0000000000000000000 0!0"0#0$0%0&0'0(0)0*0+0,0-0.0/000102030405060708090:0;0<0=0>0?0@0A0B0C0D0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0W0X0Y0Z0[0\0]0^0_0`0a0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p0q0r0s0t0u0v0w0x0y0z0{0|0}0~0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111 1 1 1 1 1111111111111111111 1!1"1#1$1%1&1'1(1)1*1+1,1-1.1/101112131415161718191:1;1<1=1>1?1@1A1B1C1D1E1F1G1H1I1J1K1L1M1N1O1P1Q1R1S1T1U1V1W1X1Y1Z1[1\1]1^1_1`1a1b1c1d1e1f1g1h1i1j1k1l1m1n1o1p1q1r1s1t1u1v1w1x1y1z1{1|1}1~1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222 2 2 2 2 2222222222222222222 2!2"2#2$2%2&2'2(2)2*2+2,2-2.2/202122232425262728292:2;2<2=2>2?2@2A2B2C2D2E2F2G2H2I2J2K2L2M2N2O2P2Q2R2S2T2U2V2W2X2Y2Z2[2\2]2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2q2r2s2t2u2v2w2x2y2z2{2|2}2~2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222223333333333 3 3 3 3 3333333333333333333 3!3"3#3$3%3&3'3(3)3*3+3,3-3.3/303132333435363738393:3;3<3=3>3?3@3A3B3C3D3E3F3G3H3I3J3K3L3M3N3O3P3Q3R3S3T3U3V3W3X3Y3Z3[3\3]3^3_3`3a3b3c3d3e3f3g3h3i3j3k3l3m3n3o3p3q3r3s3t3u3v3w3x3y3z3{3|3}3~3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333334444444444 4 4 4 4 4444444444444444444 4!4"4#4$4%4&4'4(4)4*4+4,4-4.4/404142434445464748494:4;4<4=4>4?4@4A4B4C4D4E4F4G4H4I4J4K4L4M4N4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4\4]4^4_4`4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x4y4z4{4|4}4~4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444445555555555 5 5 5 5 555555555555555555:5 :5!:5":5#:5$:5%:5&:5':5(:5):5*:5+:5,:5-:5.:5/:50:51:52:53:54:55:56:57:58:59:5::5;:5<:5=:5>:5?:5@:5A:5B:5C:5D:5E:5F:5G:5H:5I:5J:5K:5L:5M:5N:5O:5P:5Q:5R:5S:5T:5U:5V:5W:5X:5Y:5Z:5[:5\:5]:5^:5_:5`:5a:5b:5c:5d:5e:5f:5g:5h:5i:5j:5k:5l:5m:5n:5o:5p:5q:5r:5s:5t:5u:5v:5w:5x:5y:5z:5{:5|:5}:5~:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:6:666666666 6 6 6 6 6666666666666666666 6!6"6#6$6%6&6'6(6)6*6+6,6-6.6/606162636465666768696:6;6<6=6>6?6@6A6B6C6D6E6F6G6H6I6J6K6L6M6N6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6\6]6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6w6x6y6z6{6|6}6~6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666667777777777 7 7 7 7 7777777777777777777 7!7"7#7$7%7&7'7(7)7*7+7,7-7.7/707172737475767778797:7;7<7=7>7?7@7A7B7C7D7E7F7G7H7I7J7K7L7M7N7O7P7Q7R7S7T7U7V7W7X7Y7Z7[7\7]7^7_7`7a7b7c7d7e7f7g7h7i7j7k7l7m7n7o7p7q7r7s7t7u7v7w7x7y7z7{7|7}7~7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777778888888888 8 8 8 8 8888888888888888888 8!8"8#8$8%8&8'8(8)8*8+8,8-8.8/808182838485868788898:8;8<8=8>8?8@8A8B8C8D8E8F8G8H8I8J8K8L8M8N8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8\8]8^8_8`8a8b8c8d8e8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}8~88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888}8}8}8}8}8}8}8}8}8}8}8}8}8}8}8}8}8}8}8}8}8}8}8}8}8}9}9}9}9}9}9}9}9}9}9 }9 }9 }9 }9 }9}9}9}9}9}9}9}9}9}9}9}9}9}9}9}9}9}9}9 }9!}9"}9#}9$}9%}9&}9'}9(}9)}9*}9+}9,}9-}9.}9/}90}91}92939495969798999:9;9<9=9>9?9@9A9B9C9D9E9F9G9H9I9J9K9L9M9N9O9P9Q9R9S9T9U9V9W9X9Y9Z9[9\9]9^9_9`9a9b9c9d9e9f9g9h9i9j9k9l9m9n9o9p9q9r9s9t9u9v9w9x9y9z9{9|9}9~999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999:::::::::: : : : : ::::::::::::::::::: :!:":#:$:%:&:':(:):*:+:,:-:.:/: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:{:|:}:~:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;; ; ; ; ; ;;;;;;;;;;;;;;;;;;; ;!;";#;$;%;&;';(;);*;+;,;-;.;/;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;{;|;};~;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<< < < < < <<<<<<<<<<<<<<<<<<< =?=@=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={=|=}=~==================================================================================== = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >! >" ># >$ >% >& >' >( >) >* >+ >, >- >. >/ >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 >{ >| >} >~ > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?! ?" ?# ?$ ?% ?& ?' ?( ?) ?* ?+ ?, ?- ?. ?/ ?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 ?{ ?| ?} ?~ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-@-@-@-@-@-@-@-@-@-@ -@ -@ -@ -@ -@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@ -@!-@"-@#-@$-@%-@&-@'-@(-@)-@*-@+-@,-@--@.-@/-@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-@{-@|-@}-@~-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-A-A-A-A-A-A-A-A-A-A -A -A -A -A -A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A -A!-A"-A#-A$-A%-A&-A'-A(-A)-A*-A+-A,-A--A.-A/-A0-A1-A2-A3-A4-A5-A6-A7-A8-A9-A:-A;-A<-A=-A>-A?-A@-AA-AB-AC-AD-AE-AF-AG-AH-AI-AJ-AK-AL-AM-AN-AO-AP-AQ-AR-AS-AT-AU-AV-AW-AX-AY-AZ-A[-A\-A]-A^-A_-A`-Aa-Ab-Ac-Ad-Ae-Af-Ag-Ah-Ai-Aj-Ak-Al-Am-An-Ao-Ap-Aq-Ar-As-At-Au-Av-Aw-Ax-Ay-Az-A{-A|-A}-A~-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-AAA A A A A A A A A A A A A A A A A A B B B B B B B B B B  B  B  B  B  B BBBBBBBBBBBBBBBBBB B!B"B#B$B%B&B'B(B)B*B+B,B-B.B/B0B1B2B3B4B5B6B7B8B9B:B;B<B=B>B?B@BABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB[B\B]B^B_B`BaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzB{B|B}B~BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCC C C C C CCCCCCCCCCCCCCCCCCC C!C"C#C$C%C&C'C(C)C*C+C,C-C.C/C0C1C2C3C4C5C6C7C8C9C:C;C<C=C>C?C@CACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC[C\C]C^C_C`CaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzC{C|C}C~CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDD D D D D DDDD D D D D D D D D D D D D D D D  D! D" D#!D$!D%"D&"D'"D(gD)gD*gD+gD,gD-gD.gD/gD0gD1gD2gD3gD4gD5gD6gD7gD8gD9gD:gD;gD<gD=gD>gD?gD@gDAgDBgDCgDDgDEgDFgDGgDHgDIgDJgDKgDLgDMgDNgDOgDPgDQgDRgDSgDTgDUgDVgDWgDXgDYgDZgD[gD\gD]gD^gD_gD`gDagDbgDcgDdgDegDfgDggDhgDigDjgDkgDlgDmgDngDogDpgDqgDrgDsgDtgDugDvgDwgDxgDygDzgD{gD|gD}gD~gDgDgDgDgDgDgDgDgDgDgDgDgDgDgDgDgDgDgD#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D$D%D&D&D&D&D&D&D'D'D'D'D'D(D(D(D(D(D(D(D(D(D(D(D(D(D(D(D(D(D(D(D(D(D(D(D(D(D(D(D(D(D(D(D(D(D(D(D(D)D)D)D)D)D)D)D)D)D)D)D)D)D*D*D*D*D*D*DDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEE E E E E EEEEEEEEEEEEEEEE+E+E+E +E!+E"+E#+E$+E%,E&,E',E(,E),E*,E+,E,,E--E..E//E0/E1/E2/E3/E4/E5/E6/E7/E8/E9/E:/E;/E</E=/E>/E?/E@/EA/EB/EC/ED/EE/EF/EG/EH/EI/EJ/EK/EL/EM/EN/EO/EP/EQ/ER/ES/ET/EU/EV/EW/EX/EY/EZ/E[/E\/E]/E^/E_/E`/Ea/Eb/Ec/Ed/Ee/Ef/Eg/Eh/Ei/Ej/Ek0El1Em1En1Eo1Ep1Eq1Er1Es1Et1Eu1Ev1Ew1Ex1Ey1Ez1E{1E|1E}1E~1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E4E5E6E6E6E6F6F6F6F6F6F6F6F6F6F 6F 6F 6F 6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F!6F"6F#6F$6F%6F&6F'6F(6F)6F*6F+6F,6F-6F.6F/6F06F16F26F37F47F58F68F78F88F98F:8F;8F<8F=8F>8F?8F@8FA9FB9FC9FD9FE9FF9FG9FH9FI9FJ9FK9FL9FM9FN9FO9FP9FQ9FR9FS9FT9FU9FV9FW9FX9FY:FZ:F[:F\:F]:F^:F_;F`;Fa<Fb<Fc<Fd<Fe=Ff=Fg=Fh=Fi=Fj=Fk=Fl=Fm=Fn=Fo=Fp=Fq=Fr>Fs>Ft>Fu>Fv>Fw>Fx>Fy>Fz>F{>F|>F}>F~>F>F>F>F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F@F@F@F@F@F@F@F@F@F@FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFFFFFFGGGGGGGGGG G G G G GGGGBGBGCGCGCGCGCGCGCGGGGGGG G!G"G#G$G%G&G'G(G)G*G+G,G-G.G/G0G1G2G3G4G5DG6DG7DG8DG9DG:DG;DG<DG=DG>DG?DG@DGADGBDGCDGDDGEDGFDGGDGHDGIDGJDGKDGLDGMDGNDGODGPDGQDGRDGSDGTDGUDGVDGWDGXDGYDGZDG[DG\DG]DG^DG_DG`DGaDGbEGcEGdEGeEGfEGgEGhEGiEGjEGkEGlEGmEGnFGoFGpFGqGGrGGsGGtGGuGGvGGwGGxGGyGGzGG{HG|HG}HG~IGGGGGJGKGLGLGLGLGLGLGLGLGLGLGLGLGLGLGMGMGMGMGMGMGMGMGMGMGMGMGMGMGMGMGMGMGNGNGNGNGNGNGNGNGNGNGNGNGNGOGOGOGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHH H H H H HHHHHHHHHHHHHHHHHHPH PH!QH"QH#QH$QH%QH&QH'QH(QH)QH*QH+QH,QH-QH.QH/QH0QH1QH2QH3QH4QH5QH6QH7QH8QH9QH:QH;QH<QH=QH>QH?QH@QHAQHBQHCQHDQHEQHFQHGQHHQHIQHJQHKQHLQHMQHNQHOQHPRHQRHRRHSRHTRHURHVSHWSHXSHYSHZSH[SH\SH]SH^SH_SH`SHaSHbSHcSHdSHeSHfSHgSHhSHiSHjSHkSHlSHmSHnSHoSHpSHqSHrSHsSHtSHuSHvSHwSHxSHySHzSH{SH|SH}SH~SHSHSHSHSHSHSHSHSHSHSHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHVHVHWHWHWHWHWHWHWHWHWHWHWHWHWHWHWHWHWHWHXHXHXHXHXHXHXHYHYHYHYHYHYHZH[H[H[H[H[H[H[H[H[H[H[H[H[H[H[H[H[H\H\H\I\I\I\I\I\I\I\I\I]I ]I ]I ]I ]I ]I]I]I]I]I]I]I]I^I^I^I^I^I^I^I^I^I^I^I _I!_I"_I#_I$_I%`I&`I'`I(`I)`I*`I+`I,`I-aI.aI/bI0bI1cI2cI3cI4cI5cI6cI7cI8cI9cI:cI;cI<cI=cI>cI?cI@cIAcIBcICcIDcIEcIFcIGcIHcIIcIJcIKcILcIMcINcIOcIPcIQcIRcIScITcIUcIVcIWcIXcIYcIZcI[cI\cI]cI^cI_cI`cIacIbcIccIdcIecIfcIgcIhcIicIjcIkcIlcImcIncIocIpcIqcIrcIscItcIucIvcIwcIxcIycIz I{ I| I} I~ I I IdIdIdIdIdIdIdIdIdIdIdIdIdIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIfIfIfIfIfIfIfIfIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIgIgIgIgIhIhIhIhIhIiIiIiIiIiIiJiJiJiJiJiJiJiJiJiJ iJ iJ iJ iJ iJiJiJiJiJiJiJiJiJiJiJiJiJiJjJjJjJjJjJ jJ!jJ"jJ#jJ$jJ%kJ&kJ'kJ(kJ)kJ*kJ+kJ,kJ-kJ.kJ/kJ0kJ1kJ2kJ3kJ4kJ5kJ6kJ7kJ8kJ9kJ:kJ;kJ<lJ=lJ>lJ?lJ@lJAlJBlJClJDlJElJFlJGlJHlJImJJmJKmJLJMJNJOJPJQJRJSJTJUJVJWJXnJYnJZnJ[nJ\nJ]nJ^nJ_nJ`nJanJbnJcnJdnJenJfnJgnJhnJinJjnJkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJzJ{J|J}J~JJJJJJJJJJJJJJJJJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJpJpJpJpJpJpJpJpJpJpJpJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrKrKrKrKrKrKrKrKrKrK rK rK rK rK rKrKrKrKrKrKrKrKrKrKrKrKrKrKrKrKrKrKrK rK!rK"rK#rK$rK%rK&rK'rK(rK)rK*rK+rK,rK-rK.rK/rK0rK1rK2rK3rK4rK5rK6rK7rK8rK9rK:rK;rK<rK=rK>rK?rK@rKArKBrKCrKDrKErKFrKGrKHrKIrKJrKKrKLrKMrKNrKOrKPrKQrKRrKSrKTrKUrKVrKWrKXrKYrKZrK[rK\rK]rK^rK_rK`rKarKbrKcrKdrKerKfrKgrKhrKirKjrKkrKlrKmrKnrKorKprKqrKrrKsrKtrKurKvrKwrKxrKyrKzrK{rK|rK}rK~rKrKrKrKrKrKrKrKrKrKrKrKrKrKrKrKrKrKrKrKrKrKrKrKrKrKsKsKsKsKsKsKsKsKsKsKsKtKtKtKtKtKtKtKtKtKtKtKtKuKuKuKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKyKyKyKyKyKyKyKyKyLyLyLyLyLyLyLyLzLzL zL zL zL zL zL{L{L{L{L{L{L{L{L{L{L{L{L{L{L{L{L{L{L {L!{L"{L#{L${L%{L&{L'{L({L){L*{L+{L,{L-{L.{L/{L0{L1{L2{L3{L4{L5{L6{L7{L8{L9{L:{L;{L<{L={L>{L?{L@{LA{LB{LC{LD{LE{LF{LG{LH{LI{LJ{LK{LL{LM{LN{LO{LP{LQ{LR{LS{LT{LU{LV|LW|LX|LY|LZ|L[|L\|L]|L^|L_|L`|La|Lb|Lc|Ld|Le|Lf|Lg|Lh|Li|Lj|Lk|Ll|Lm|Ln|Lo|Lp|Lq|Lr|Ls|Lt|Lu|Lv|Lw|Lx|Ly|Lz|L{|L||L}|L~|L|L|L|L|L|L|L|L|L|L|L|L|L|L|L|L|L|L|L|L}L}L}L}L}L}L}L}L}L}L}L}L}L}L}L}L~L~L~L~L~L~L~L~L~L~L~L~L L L L L L L L L L L L L L L L L L L L L L L L L LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL L L L L L L L L L L L L L L L LLLLLLLLLMMMMMMMMMM M M M M MMMMMMMMMMMMMMMMMMM M!M"M#M$M%M&M'M(M)M*M+M,M-M.M/M0M1M2M3M4M5M6M7M8M9M:M;M<M=M>M?M@MAMBMCMDMEMFMGMHMIMJMKMLMMMNMOMPMQMRMSMTMUMVMWMXMYMZM[M\M]M^M_M`MaMbMcMdMeMfMgMhMiMjMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzM{M|M}M~MMgMgMMMMhMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM M M M M M M M M M M M M M M M M M M M M M M M MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNN N N N N NNNNNNNNNNNNNNNNNNN N!N"N#N$N%N&N'N(N)N*N+N,N-N.N/N0N1N2N3N4N5N6N7N8N9N:N;N<N=N>N?N@NANBNCNDNENFNGNHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXNYNZN[N\N]N^N_N`NaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuNvNwNxNyNzN{N|N}N~NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOO O O O O OOOOOOOOOOOOOOOOOOO O!O"O#O$O%O&O'O(O)O*O+O,O-O.O/O0O1O2O3O4O5O6O7O8O9O:O;O<O=O>O?O@OAOBOCODOEOFOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOYOZO[O\O]O^O_O`OaObOcOdOeOfOgOhOiOjOkOlOmOnOoOpOqOrOsOtOuOvOwOxOyOzO{O|O}O~OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPP P P P P PPPPPPPPPPPPPPPPPPP P!P"P#P$P%P&P'P(P)P*P+P,P-P.P/P0P1P2P3P4P5P6P7P8P9P:P;P<P=P>P?P@PAPBPCPDPEPFPGPHPIPJPKPLPMPNPOPPPQPRPSPTPUPVPWPXPYPZP[P\P]P^P_P`PaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzP{P|P}P~PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQ Q Q Q Q QQQQQQQQQQQQQQQQQQQ Q!Q"Q#Q$Q%Q&Q'Q(Q)Q*Q+Q,Q-Q.Q/Q0Q1Q2Q3Q4Q5Q6Q7Q8Q9Q:Q;Q<Q=Q>Q?Q@QAQBQCQDQEQFQG QH QI QJQKQLQMQNQOQPQQQRQSQTQUQVQWQXQYQZQ[Q\Q]Q^Q_Q`QaQbQcQdQeQfQgQhQiQjQkQlQmQnQoQpQqQrQsQtQuQvQwQxQyQzQ{Q|Q}Q~QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRR R R R R RRRRRRRSafe+cRRRRRRRRRRRR R!R"R#R$R%R&R'R(R)R*R+R,R-R.R/R0R1R2R3R4R5R6R7R8R9R:R;R<R=R>R?R@RARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYRZR[R\R]R^R_R`RaRbRcRdReRfRgRhRiRjRkRlRmRnRoRpRqRrRsRtRuRvRwRxRyRzR{R|R}R~RRRRRRR&RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR%RRRRSSSSSSSSSS S S S S Safe/None0 !"# # !"NoneF0NoneF1(Safe@ghcSA monad that can catch exceptions. A minimal definition requires a definition of .Implementations on top of R should implement # to eventually call the primitive Sn. These are used for implementations that support asynchronous exceptions. The default implementations of  and  use ! thus rarely require overriding.ghcGeneralised version of SB, allowing an arbitrary exception handling monad instead of just R.ghcGeneralised version of SB, allowing an arbitrary exception handling monad instead of just R.ghcGeneralised version of SB, allowing an arbitrary exception handling monad instead of just R.ghcGeneralised version of SB, allowing an arbitrary exception handling monad instead of just R.ghcGeneralised version of SB, allowing an arbitrary exception handling monad instead of just R.ghcAlways executes the first argument. If this throws an exception the second argument is executed and the exception is raised again.dSSSSSSSSSSSSSSSS S!S"S#S$S%S&S'S(S)S*S+S,S-S.S/RS0S1S2S3S4S5S6S7S8S9S:S;S<S=S>S?S@SASBSCSDSESFSGSHSISJSSSKSLSMSSNSOSPSQSRSSSTSUSV SWSXSYSZS[S\S]S^S_ SafeBNoneFDS`ghc6Size of a 64-bit word when written as a base-62 stringghc,Converts a 64-bit word into a base-62 stringSafeESafeIghceDefault maximum depth for both class instance search and type family reduction. See also Trac #5395.ghcPDefault maximum constraint-solver iterations Typically there should be very few NoneMV ghc File name.ghcFile modification time.ghc File owner.ghc File group.ghc File mode.ghc File size.ghc File bytes.Saghc<Archives have numeric values padded with 'x20' to the right.SbghcGNU Archives feature a special //D entry that contains the extended names. Those are referred to as / num$, where num is the offset into the //4 entry. In addition, filenames are terminated with RE in the archive.Scghcput an Archive Entry. This assumes that the entries have been preprocessed to account for the extenden file name table section "//" e.g. for GNU Archives. Or that the names have been move into the payload for BSD Archives.Sdghc@Take a filePath and return (mod time, own, grp, mode in decimal)Sdghc%mod time, own, grp, mode (in decimal)Safe &'HSVXj ghc2A sequence of nodes. May be any of four shapes (OO, OC, CO, COC). Open at the entry means single entry, mutatis mutandis for exit. A closedclosed block is a basic/ block and can't be extended further. Clients should avoid manipulating blocks and should stick to either nodes or graphs.Seghc!Maybe type indexed by closed/open ghc!Maybe type indexed by open/closedghc6Either type indexed by closed/open using type familiesghcUsed at the type level to indicate a "closed" structure which supports control transfer only through the use of named labels---no "fallthrough" is permitted. The number of control-flow edges is unconstrained.ghcuUsed at the type level to indicate an "open" structure with a unique, unnamed control-flow edge flowing in or out.  Fallthrough2 and concatenation are permitted at an open point.ghcLSplit a closed block into its entry node, open middle block, and exit node.#ghc#map a function over the nodes of a $ghc A strict #%ghcmap over a block, with different functions to apply to first nodes, middle nodes and last nodes respectively. The map is strict.SfghcFold a function over every node in a block, forward or backward. The fold function must be polymorphic in the shape of the nodes.&      !"#$%&'(&      ('&#$%!"None456HMVl_:+,-.I42/01356789:;<=>?@ABCDEFGHJKLMNPOQRSTUVWXYZ[\]^_`abcd:MNPOQRSTUVWXYZ[\]^_`a-.I42/01356789:;<=>?@ABCDEFGHJKLbcd+, (c) Dan DoelBSD3dan.doel@gmail.com experimental+non-portable (multi-parameter type classes)Safe=?@ASXsrghcYA monad transformer for performing backtracking computations layered over another monad mwghcWRuns a ListT computation with the specified initial success and failure continuations.rstuvwrstwuvSafeM~ghcLift an R- operation with 1 argument into another monadghcLift an R. operation with 2 arguments into another monadghcLift an R. operation with 3 arguments into another monadghcLift an R. operation with 4 arguments into another monadghcmapAndUnzipM for triplesghcMonadic version of mapAccumLghcMonadic version of mapSndghcMonadic version of concatMapghcApplicative version of mapMaybeghcMonadic version of fmapghcMonadic version of fmapghcMonadic version of R&, aborts the computation at the first True valueghcMonad version of R&, aborts the computation at the first False valueghcMonadic version of orghcMonadic version of foldlghc1Monadic version of foldl that discards its resultghcMonadic version of foldrghc-Monadic version of fmap specialised for MaybeghcMonadic version of when#, taking the condition in the monadghcMonadic version of unless#, taking the condition in the monadghcLike Sg), only it reverses the sense of the test.ghccombining functionghc initial stateghcinputsghcfinal state, outputs''&%~''&%~!NoneX_ghcThis type is very similar to C, but it omits the constructors that involve pretty-printing via   . Due to the implementation of  for  , this type can be caught as a .RNote that this should only be used for throwing exceptions, not for catching, as 3 will not be converted to this type when catching.ghc(Some other fatal signal (SIGHUP,SIGTERM)ghc*Prints the short usage msg after the errorghcAA problem with the command line arguments, but don't print usage.ghcThe  impossible happened.ghc_The user tickled something that's known not to work yet, but we're not counting it as a bug.ghcAn installation problem.ghc&An error in the user's code, probably.ghcThe name of this GHC.ShghcRShort usage information to display when we are given the wrong cmd line arguments.ghc;Append a description of the given exception to this string.ghcPanics and asserts.ghcPanics and asserts.ghcPanics and asserts.ghcHThrow a failed assertion exception for a given filename and line number.NoneX_Xghc=GHC's own exception type error messages all take the form:   location:  error BIf the location is on the command line, or in GHC itself, then  location9="ghc". All of the error types below correspond to a  locationx of "ghc", except for ProgramError (where the string is assumed to contain a location already, so we don't print one).ghc(Some other fatal signal (SIGHUP,SIGTERM)ghc*Prints the short usage msg after the errorghcAA problem with the command line arguments, but don't print usage.ghcThe  impossible happened.ghc_The user tickled something that's known not to work yet, but we're not counting it as a bug.ghcAn installation problem.ghc&An error in the user's code, probably.ghcShow an exception as a string.ghcsShow an exception which can possibly throw other exceptions. Used when displaying exception thrown within TH code.ghc;Append a description of the given exception to this string.Note that this uses %>, which may have some uninitialized fields if invoked before  has been called. If the error message to be printed includes a pretty-printer document which forces one of these fields this call may bottom.ghcLike try, but pass through UserInterrupt and Panic exceptions. Used when we want soft failures when reading interface files, for example. TODO: I'm not entirely sure if this is catching what we really want to catchSighc-We use reference counting for signal handlersghcsTemporarily install standard signal handlers for catching ^C, which just throw an exception in the current thread.$ $ "None#NoneSjghc\The predicates below look costly, but aren't, GHC+GCC do a great job at the big case below.SkghcnWe really mean .|. instead of + below, but GHC currently doesn't do any constant folding with bitops. *sigh*$Safe&ghcPowerPC 64-bit ABIghc4ARM Instruction Set Architecture, Extensions and ABIghcOperating systems that the native code generator knows about. Having OSUnknown should produce a sensible default, but no promises.ghcArchitectures that the native code generator knows about. TODO: It might be nice to extend these constructors with information about what instruction set extensions an architecture might support.ghc_Contains enough information for the native code generator to emit code for this platform.%ghc7This predicate tells us whether the platform is 32-bit.&ghcJThis predicate tells us whether the OS supports ELF-like shared libraries.'ghcGThis predicate tells us whether the OS support Mach-O shared libraries.B      !"#$%&'()B !"#     %$&')(&SafetMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~҆MNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~(SafeLghcBranch condition codes.)Safe*  *Safeghc Stream m a b is a computation in some Monad m/ that delivers a sequence of elements of type a followed by a result of type b.!More concretely, a value of type  Stream m a b can be run using  runStream in the Monad m, and it delivers eitherthe final result: Left b, or Right (a,str), where a( is the next element in the stream, and str4 is a computation to get the rest of the stream.4Stream is itself a Monad, and provides an operation { that produces a new element of the stream. This makes it convenient to turn existing monadic computations into streams.The idea is that Stream is useful for making a monadic computation that produces values from time to time. This can be used for knitting together two complex monadic operations, so that the producer does not have to produce all its values before the consumer starts consuming them. We make the producer into a Stream, and the consumer pulls on the stream each time it wants a new value.ghcCTurn a Stream into an ordinary list, by demanding all the elements.ghcTurn a list into a #, by yielding each element in turn.ghc&Apply a function to each element of a , lazilyghc/Apply a monadic operation to each element of a , lazilyghcanalog of the list-based Z on Streams. This is a simple way to map over a Stream while carrying some state around.  +NoneXghcExpand occurrences of the $topdir interpolation in a string.ghcExpand occurrences of the $tooldirM interpolation in a string on Windows, leave the string untouched otherwise.Slghc expandPathVar var value str replaces occurences of variable $var with value in str.ghc.Returns a Unix-format path pointing to TopDir. ghctopdir  ,SafeX{ ghcFCheck if ANSI escape sequences can be used to control color in stderr.  SafeNone,HP4 ghc'A call stack constraint, but only when  isDebugOn.ghc@Compose a function with itself n times. (nth rather than twice),ghc3Like filter, only it reverses the sense of the test-ghcSUses a function to determine which of two output lists an input element should join3ghc3 is a kind of R0 that is lazy in the second list (observe the ~)4ghc4 is like Ro but is lazy in the second list. The length of the output is always the same as the length of the first list.5ghc5 is like Rz but is lazy in the second and third lists. The length of the output is always the same as the length of the first list.6ghc6 takes a list of Bools and a list of some elements and filters out these elements for which the corresponding value in the list of Bools is False. This function does not check whether the lists have equal length.7ghc7 takes a list of Bools and two lists as input, and outputs a new list consisting of elements from the last two input lists. For each Bool in the list, if it is R;, then it takes an element from the former list. If it is R~, it takes an element from the latter list. The elements taken correspond to the index of the Bool in its list. For example: @filterByLists [True, False, True, False] "abcd" "wxyz" = "axcz" AThis function does not check whether the lists have equal length.8ghc8 takes a list of Bools and a list of some elements and partitions the list according to the list of Bools. Elements corresponding to R+ go to the left; elements corresponding to R go to the right. For example, ;partitionByList [True, False, True] [1,2,3] == ([1,3], [2])D This function does not check whether the lists have equal length.9ghcstretchZipWith p z f xs ys stretches ys by inserting z in the places where p returns True?ghcfThis has the effect of making the two lists have equal length by dropping the tail of the longer one.BghcatLength atLen atEnd ls n unravels list ls to position n . Precisely:  atLength atLenPred atEndPred ls n | n < 0 = atLenPred ls | length ls < n = atEndPred (n - length ls) | otherwise = atLenPred (drop n ls) Cghc &(lengthExceeds xs n) = (length xs > n)Dghc '(lengthAtLeast xs n) = (length xs >= n)Eghc "(lengthIs xs n) = (length xs == n)Fghc %(lengthIsNot xs n) = (length xs /= n)Gghc &(lengthAtMost xs n) = (length xs <= n)Hghc ((lengthLessThan xs n) == (length xs < n)JghcTrue if length xs == length ysLghcTrue if length xs <= length ysMghcTrue if length xs < length ysTghcSplit a list into chunks of n elementsUghc8Replace the last element of a list with another element.Xghc=Remove duplicates but keep elements in order. O(n * log n)cghc+spanEnd p l == reverse (span p (reverse l))b. The first list returns actually comes after the second list (when you look at the input list).dghc-Get the last two elements in a list. Partial!gghc=Convert a word to title case by capitalising the first letterSmghcSFind the "restricted" Damerau-Levenshtein edit distance between two strings. See:  9http://en.wikipedia.org/wiki/Damerau-Levenshtein_distance. Based on the algorithm presented in "A Bit-Vector Algorithm for Computing Levenshtein and Damerau Edit Distances" in PSC'02 (Heikki Hyyro). See  *http://www.cs.uta.fi/~helmu/pubs/psc02.pdf and  ,http://www.cs.uta.fi/~helmu/pubs/PSCerr.html for an explanationqghcmSearch for possible matches to the users input in the given list, returning a small number of ranked resultsghcqA sample hash function for Strings. We keep multiplying by the golden ratio and adding. The implementation is: rhashString = foldl' f golden where f m c = fromIntegral (ord c) * magic + hashInt32 m magic = 0xdeadbeef2Where hashInt32 works just as hashInt shown above.Knuth argues that repeated multiplication by the golden ratio will minimize gaps in the hash space, and thus it's a good choice for combining together multiple keys to form one.;Here we know that individual characters c are often small, and this produces frequent collisions if we use ord c alone. A particular problem are the shorter low ASCII and ISO-8859-1 character strings. We pre-multiply by a magic twiddle factor to obtain a good distribution. In fact, given the following test: testp :: Int32 -> Int testp k = (n - ) . length . group . sort . map hs . take n $ ls where ls = [] : [c : l | l <- ls, c <- ['\0'..'\xff']] hs = foldl' f golden f m c = fromIntegral (ord c) * k + hashInt32 m n = 100000!We discover that testp magic = 0.SnghcA sample (and useful) hash function for Int32, implemented by extracting the uppermost 32 bits of the 64-bit result of multiplying by a 33-bit constant. The constant is from Knuth, derived from the golden ratio: $golden = round ((sqrt 5 - 1) * 2^32)We get good key uniqueness on small inputs (a problem with previous versions): (length $ group $ sort $ map hashInt32 [-32767..65536]) == 65536 + 32768 $( !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~/01239>?45678r:;.<=@A,-bcd$Z\][CEFDGHIBJKLMOQNPeRSTU !")*+#$%&'(^_`fag VWXhjkilmnopqYsyz{|}~tuvwx(i9 n3o2/None<ghcA colour/style for use with coloured.ghc;Parse the colour scheme from a string (presumably from the  GHC_COLORS environment variable).ghcdAllow colours to be combined (e.g. bold + red); In case of conflict, right side takes precedence.None,>H@ghcTakes a list of Maybes and returns the first Just if there is one, or Nothing otherwise.ghcFlipped version of  fromMaybe, useful for chaining.ghcTry performing an R action, failing on error.RRRSoSpSqSrSsStSuSvR40NoneFM\ghcA 5 is a pointer to some array of Latin-1 encoded chars.ghcA  is an array of bytes, hashed to support fast O(1) comparison. It is also associated with a character encoding, so that we know how to convert a M to the local encoding, or to the Z-encoding used by the compiler internally.@s support a memoized conversion to the Z-encoding via zEncodeFS.ghc Create a  from an existing Sw#; the difference between this and L is that we don't have to copy the bytes if the string is new to the table.ghc Create a  from an existing Sw#; the difference between this and L is that we don't have to copy the bytes if the string is new to the table.ghcCreates a UTF-8 encoded  from a Sghc Creates a  from a UTF-8 encoded [Word8]SxghcCreates a Z-encoded  from a SghcReturns the length of the  in charactersghcReturns True if this Q is not Z-encoded but already has a Z-encoding cached (used in producing stats).ghcReturns True if the  is emptyghc"Unpacks and decodes the FastStringghc1Gives the UTF-8 encoded bytes corresponding to a ghc!Returns a Z-encoded version of a w. This might be the original, if it was already Z-encoded. The first time this function is applied to a particular , the results are memoized.ghc Outputs a  with no decoding at all,, that is, you get the actual bytes in the  written to the Sy.ghcWrap an unboxed address into a .ghc Encode a S into a newly allocated i using Latin-1 encoding. The original string must not contain non-Latin-1 characters (above codepoint 0xff).ghc Decode a  back into a SH using Latin-1 encoding. This does not free the memory associated with .ghcReturn the length of a ++1NoneF ghcA StringBuffer is an internal pointer to a sized chunk of bytes. The bytes are intended to be *immutable*. There are pure operations to read the contents of a StringBuffer.GA StringBuffer may have a finalizer, depending on how it was obtained.ghcRead a file into a K. The resulting buffer is automatically managed by the garbage collector.Szghc.Skip the byte-order mark if there is one (see  1744 and ;6016), and return the new position of the handle in bytes.This is better than treating #FEFF as whitespace, because that would mess up layout. We don't have a concept of zero-width whitespace in Haskell: all whitespace codepoints have a width of one column.ghc Encode a S into a T as UTF-8. The resulting buffer is automatically managed by the garbage collector.ghc/Return the first UTF-8 character of a nonempty 2 and as well the remaining portion (analogous to ). Warning:# The behavior is undefined if the L is empty. The result shares the same buffer as the original. Similar to 0, if the character cannot be decoded as UTF-8, '\0' is returned.ghc/Return the first UTF-8 character of a nonempty  (analogous to ). Warning:# The behavior is undefined if the  is empty. Similar to 0, if the character cannot be decoded as UTF-8, '\0' is returned.ghc Return a 7 with the first UTF-8 character removed (analogous to ). Warning:# The behavior is undefined if the ? is empty. The result shares the same buffer as the original.ghc Return a  with the first n bytes removed. Warning:2 If there aren't enough characters, the returned x will be invalid and any use of it may lead to undefined behavior. The result shares the same buffer as the original.ghc-Compute the difference in offset between two  s that share the same buffer. Warning:# The behavior is undefined if the s use separate buffers.ghcCheck whether a  is empty (analogous to ).ghc Computes a K which points to the first character of the wanted line. Lines begin at 1.ghcDecode the first n bytes of a  as UTF-8 into a S. Similar to K, if the character cannot be decoded as UTF-8, they will be replaced with '\0'.ghcReturn the previous n* characters (or fewer if we are less than n characters into the buffer.ghcn, the number of bytesghcn, the number of bytesghcn, the number of bytes Noneb ghc$Is this an acceptable variable name?ghc'Is this an acceptable constructor name?ghc Is this an acceptable type name? ghc`Is this an acceptable alphanumeric variable name, assuming it starts with an acceptable letter?!ghc_Is this an acceptable symbolic variable name, assuming it starts with an acceptable character?"ghccIs this an acceptable alphanumeric constructor name, assuming it starts with an acceptable letter?#ghcbIs this an acceptable symbolic constructor name, assuming it starts with an acceptable character?S{ghcIs this string an acceptable id, possibly with a suffix of hashes, but not worrying about case or clashing with reserved words?S|ghccIs this character acceptable in an identifier (after the first letter)? See alexGetByte in Lexer.xS}ghcDAll reserved identifiers. Taken from section 2.4 of the 2010 Report.S~ghcBAll reserved operators. Taken from section 2.4 of the 2010 Report.Sghc@Does this string contain only dashes and has at least 2 of them?TUVW !"#WUVT !"#4None,ghcReplicate an 8-bit character $%&'()*+,- $%&'()*+,-5"(c) The University of Glasgow 2001 BSD-style (see the file LICENSE)!David Terei <code@davidterei.com>stableportableNoneFӨ*.ghcRendering mode./ghcNormal0ghcWith zig-zag cuts1ghc%No indentation, infinitely long lines2ghcAll on one line3ghcA rendering style.5ghcThe rendering mode6ghcLength of line, in chars7ghc%Ratio of line length to ribbon length8ghcThe TextDetails data typeOA TextDetails represents a fragment of text that will be output at some point.9ghcA single Char fragment:ghcA whole String fragmentSghcMRDoc is a "reduced GDoc", guaranteed not to have a top-level Above or Beside.?ghcThe abstract type of documents. A Doc represents a *set* of layouts. A Doc with no occurrences of Union or NoDoc represents just one layout.@ghcAA document of height and width 1, containing a literal character.Aghc5A document of height 1 containing a literal string. A satisfies the following laws: A s j A t = A (sRt)A "" j x = x, if x non-empty8The side condition on the last law is necessary because A "" has height 1, while G has no height.EghcSome text with any width. (text s = sizedText (length s) s)FghcYSome text, but without any width. Use for non-printing text such as a HTML or Latex tagsGghc2The empty document, with no height and no width. G is the identity for j, k, h and i), and anywhere in the argument list for l, a, b, c, n etc.HghcReturns R if the document is empty`ghcApply ] to ? if boolean is true.Sghc*Perform some simplification of a built up GDoc.aghcList version of j.bghcList version of k.cghcList version of h.dghc[Nest (or indent) a document by a given number of positions (which may also be negative). d satisfies the laws: d 0 x = x d k (d k' x) = d (k+k') x d k (x j y) = d k z j d k y d k (x h y) = d k x h d k y d k G = Gx j d k y = x j y, if x non-empty6The side condition on the last law is needed because G is a left identity for j.eghc "hang d1 n d2 = sep [d1, nest n d2]fghcApply e to the arguments if the first ? is not empty.gghc @punctuate p [d1, ... dn] = [d1 <> p, d2 <> p, ... dn-1 <> p, dn]hghcAbove, except that if the last line of the first argument stops at least one position before the first line of the second begins, these two lines are overlapped. For example: % text "hi" $$ nest 5 (text "there") lays out as  hi there rather than  hi thereh is associative, with identity G, and also satisfies(x h y) j z = x h (y j z), if y non-empty.ighcAbove, with no overlapping. i is associative, with identity G.jghc Beside. j is associative, with identity G.kghc;Beside, separated by space, unless one of the arguments is G. k is associative, with identity G.lghcEither b or c.mghcEither a or c.nghc"Paragraph fill" version of m.oghc"Paragraph fill" version of l.SghcfirstE returns its first argument if it is non-empty, otherwise its second.pghcThe default style (1mode=PageMode, lineLength=100, ribbonsPerLine=1.5).qghc Render the Doc to a String using the given Style.rghcDefault TextDetails printersghc The general rendering interface.IghcA ';' characterJghcA ',' characterKghcA : characterLghcA space characterMghcA '=' characterNghcA '(' characterOghcA ')' characterPghcA '[' characterQghcA ']' characterRghcA '{' characterSghcA '}' characterTghc int n = text (show n)Ughc integer n = text (show n)Vghc float n = text (show n)Wghc double n = text (show n)Xghc rational n = text (show n)Yghc%See Note [Print Hexadecimal Literals]ZghcWrap document in '...'\ghcWrap document in "..."]ghcWrap document in (...)^ghcWrap document in [...]_ghcWrap document in {...}sghcRendering modeghc Line lengthghcRibbons per lineghcWhat to do with textghcWhat to do at the endghc The documentghcResultI./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvI?89:;<=>@ABCDEFTUVWXYIJKLMNOPQRS]^_Z[\`GjkabhiclmondefgH34567pq./012srtuvh5i5j6k6 None3<ghc'Represents a pretty-printable document.To display an , use , , , or . Avoid calling . directly as it breaks the abstraction layer.ghcJust warn about an assertion failure, recording the given file and line number. Should typically be accessed with the WARN macrosxghcBWhen we print a binder, we often want to print its type too. The OutputableBndr class encapsulates this idea.}ghc} is used to tell the thing that prints binder what language construct is binding the identifier. This can be used to decide how much info to print. Also see Note [Binding-site specific printing] in PprCore~ghcThe x in (x. e)ghc+The x in case scrut of x { (y,z) -> ... }ghc+The y,z in case scrut of x { (y,z) -> ... }ghcThe x in (let x = rhs in e)ghc(Class designating that some type has an  representationSghc<The most recently used colour. This allows nesting colours.ghccFor a given package, we need to know whether to print it with the component id to disambiguate it.ghc`For a given module, we need to know whether to print it with a package name to disambiguate it.ghcGiven a Name's   and (, decide whether and how to qualify it.ghcWhen printing code that contains original names, we need to map the original names back to something the user understands. This is the purpose of the triple of functions that gets passed around when rendering .ghc$NB: This won't ever show package IDsghc!Style for printing error messagesghc(This is not a recommended way to render ,, since it breaks the abstraction layer of . Prefer to use , , , or  instead.ghc6Truncate a list that is longer than the current depth.ghc,Says what to do with and without -dppr-debugghc7Says what to do with -dppr-debug; without, return emptyghcThe analog of u for , which tries to make sure the terminal doesn't get screwed up by the ANSI color codes if an exception is thrown during pretty-printing.ghcLike  but appends an extra newline.ghcLike  but specialized with 1 and S -. This is typically used to output C-- code.ghcAn efficient variant of  specialized for 1 that outputs to a $.ghcdoublePrec p n shows a floating point number n with p. digits of precision after the decimal point.ghcIndent  some specified amountghc Join two $ together horizontally without a gapghc Join two . together horizontally with a gap between themghc Join two [ together vertically; if there is no vertical overlap it "dovetails" the two onto one lineghc Join two  together vertically ghc Concatenate  horizontally ghc Concatenate + horizontally with a space between each one ghc Concatenate  vertically with dovetailing ghcSeparate: is either like   or like  , depending on what fits ghcCatenate: is either like   or like  , depending on what fitsghcwA paragraph-fill combinator. It's much like sep, only it keeps fitting things on one line until it can't fit any more.ghcThis behaves like , but it uses ( for horizontal conposition rather than ghcThis behaves like D, but does not indent the second document when the header is empty.ghc.Apply the given colour/style for the argument.)Only takes effect if colours are enabled.ghc2Special combinator for showing character literals.ghc/Special combinator for showing string literals.ghc3Special combinator for showing bytestring literals.!ghc0Special combinator for showing unboxed literals.+ghcAReturns the separated concatenation of the pretty printed things.,ghcGReturns the comma-separated concatenation of the pretty printed things.-ghcNReturns the comma-separated concatenation of the quoted pretty printed things. ,y,z] ==> `x', `y', `z'1ghc&Converts an integer to a verbal index: MspeakNth 1 = text "first" speakNth 5 = text "fifth" speakNth 21 = text "21st"2ghc-Converts an integer to a verbal multiplicity: CspeakN 0 = text "none" speakN 5 = text "five" speakN 10 = text "10"3ghccConverts an integer and object description to a statement about the multiplicity of those objects: speakNOf 0 (text "melon") = text "no melons" speakNOf 1 (text "melon") = text "one melon" speakNOf 3 (text "melon") = text "three melons"4ghcIDetermines the pluralisation suffix appropriate for the length of a list: Rplural [] = char 's' plural ["Hello"] = empty plural ["Hello", "World"] = char 's'5ghcBDetermines the form of to be appropriate for the length of a list: ]isOrAre [] = text "are" isOrAre ["Hello"] = text "is" isOrAre ["Hello", "World"] = text "are"6ghcBDetermines the form of to do appropriate for the length of a list: `doOrDoes [] = text "do" doOrDoes ["Hello"] = text "does" doOrDoes ["Hello", "World"] = text "do"8ghc&Throw an exception saying "bug in GHC"9ghc3Throw an exception saying "this isn't finished yet":ghcWThrow an exception saying "bug in pgm being compiled" (used for unusual program errors)<ghc!If debug output is on, show some  on the screen>ghcpprTraceIt desc x is equivalent to pprTrace desc (ppr x) x?ghcpprTraceException desc x action< runs action, printing a message if it throws an exception.@ghc!If debug output is on, show some 7 on the screen along with a call stack when available.AghcPanic with an assertation failure, recording the given file and line number. Should typically be accessed with the ASSERT family of macrosghc The headerghcAmount to indent the hung bodyghc3The hung body, indented and placed below the headerghcThe punctuationghcQThe list that will have punctuation added between every adjacent pair of elementsghcPunctuated list)ghc#The pretty printing function to useghcThe things to be pretty printedghca where the things have been pretty printed, comma-separated and finally packed into a paragraph.*ghc#The pretty printing function to useghcThe things to be pretty printedghc_ where the things have been pretty printed, bar-separated and finally packed into a paragraph.xzy{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABxzy{|+,-)./*0     123456'& !"#$%(}~89A:<;>@?=B7;None: vwxyz{|}~ vwxyz{|}~<None;E555=None@ghc4Calculate the set difference of two lists. This is O((m + n) log n), where we subtract a list of n elements from a list of m elements.3Extremely short cases are handled specially: When m or n is 0, this takes O(1) time. When m is 1, it takes O(n) time.>None&'B ghc-Simple data type to represent JSON documents.  ?None"#%12456=>?HVg/ghcA typeclass to set/get SrcSpansghc Composes a Q decoration with an undecorated syntactic entity to form its decorated variantghc1Decomposes a decorated syntactic entity into its * decoration and its undecorated variantghcSDetermines the type of undecorated syntactic entities For most syntactic entities E@, where source location spans are introduced by a wrapper construtor of the same syntactic entity, we have `SrcSpanLess E = E`. However, some syntactic entities have a different type compared to a syntactic entity `e :: E` may have the type `Located E` when decorated by wrapping it with `L sp e` for a source span sp.ghcFWe attach SrcSpans to lots of things, so let's have a datatype for it.ghc Source SpanA d identifies either a specific portion of a text file or a human-readable description of a location.ghcA  delimits a portion of a text file. It could be represented by a pair of (line,column) coordinates, but in fact we optimise slightly by using more compact representations for single-line and zero-length spans, both of which are quite common.-The end position is defined to be the column after the end of the span. That is, a span of (1,1)-(1,2) is one character long, and a span of (1,1)-(1,1) is zero characters long.Real Source SpanghcSource LocationghcReal Source Location'Represents a single point within a fileghc%A Pattern Synonym to Set/Get SrcSpansghcBuilt-in "bad"  values for particular locationsghcBuilt-in "bad"  values for particular locationsghcBuilt-in "bad"  values for particular locationsghcCreates a "bad" 4 that has no detailed information about its locationghcGives the filename of the ghc%Raises an error when used on a "bad" ghc%Raises an error when used on a "bad" ghc Move the  down by one line if the character is a newline, to the next 8-char tabstop if it is a tab, and across by one character in any other caseghcBuilt-in "bad" ,s for common sources of location uncertaintyghcBuilt-in "bad" ,s for common sources of location uncertaintyghcBuilt-in "bad" ,s for common sources of location uncertaintyghcCreate a "bad" " that has not location informationghc Create a  corresponding to a single pointghc Create a  between two points in a fileSghcR0 if the span is known to straddle only one line.SghcR if the span is a single pointghc Create a  between two points in a fileghc Combines two o into one that spans at least all the characters within both spans. Returns UnhelpfulSpan if the files differ.Sghc Combines two w into one that spans at least all the characters within both spans. Assumes the "file" part is the same in both inputsghcCConvert a SrcSpan into one that represents only its first characterghc Test if a 1 is "good", i.e. has precise location informationghc@True if the span is known to straddle only one line. For "bad" , it returns FalseghcTests whether the first span "contains" the other span, meaning that it covers at least as much source code. True where spans are equal.ghc)Returns the location at the start of the  or a "bad"  if that is unavailableghc'Returns the location at the end of the  or a "bad"  if that is unavailableghcObtains the filename for a  if it is "good"ghcCombine locations from two % things and add them to a third thingghc.Tests whether the two located things are equalghc,Tests the ordering of the two located thingsghc$Alternative strategies for ordering sghc$Alternative strategies for ordering sghc$Alternative strategies for ordering sghc@Determines whether a span encloses a given line and column indexghc4Determines whether a span is enclosed by another oneghcMAn abbreviated form of decomposeSrcSpan, mainly to be used in ViewPatternsghcJAn abbreviated form of composeSrcSpan, mainly to replace the hardcoded ghcALifts a function of undecorated entities to one of decorated onesghc*The span that may be enclosed by the otherghcThe span it may be enclosed byGGBNone+ghcGenerate a section type (e.g.  @progbits). See #13937.+ghc section typeghcpretty assembler fragment++CNone2/-ghc = $(f x y).ghc =* f x y, i.e. a naked top level expression/ghcAn integer or infinity0ghcFractional LiteralMUsed (instead of Rational) to represent exactly the floating point literal that we encountered in the user's source program. This allows us to pretty-print exactly what the user wrote, which is important e.g. for floating point numbers that can't represented as Doubles (we used to via Double for pretty-printing). See also #2245.5ghcIntegral LiteralUsed (instead of Integer) to represent negative zegative zero which is required for NegativeLiterals extension to correctly parse `-0::Double` as negative zero. See also #13211.:ghcInline SpecificationFghcRule Match InformationQghc Phase NumberTghcvFor when code is generated, e.g. TH, deriving. The pretty printer will then make its own representation of the item.XghcDefault Method Specification_ghc Inside Lambda`ghcInteresting Contextaghc!identifier Occurrence Informationbghc2There are many occurrences, or unknown occurrencescghcOMarks unused variables. Sometimes useful for lambda and case-bound variables.dghc3Occurs exactly once (per branch), not inside a ruleeghcThis identifier breaks a loop of mutually recursive functions. The field marks whether it is only a loop breaker due to a reference in a rulekghcEmbedding Projection pairsghc2A general-purpose pretty-printing precedence type.vghc'This instance must not overlap another v- instance. However, it may be overlapped by x instances, and it may overlap w instances.wghcuSilently ignore this instance if you find a more specific one that matches the constraint you are trying to resolveYExample: constraint (Foo [Int]) instance Foo [Int] instance {- OVERLAPPABLE  -} Foo [a]Since the second instance has the Overlappable flag, the first instance will be chosen (otherwise its ambiguous which to choose)xghcWSilently ignore any more general instances that may be used to solve the constraint..Example: constraint (Foo [Int]) instance {- OVERLAPPING 4-} Foo [Int] instance Foo [a]Since the first instance has the Overlapping flag, the second---more general---instance will be ignored (otherwise it is ambiguous which to choose)yghcEquivalent to having both x and w flags.zghcBehave like Overlappable and Overlapping, and in addition pick an an arbitrary one if there are multiple matching candidates, and don't worry about later instantiationExample: constraint (Foo [b]) instance {-# INCOHERENT -} Foo [Int] instance Foo [a] Without the Incoherent flag, we'd complain that instantiating bY would change which instance was chosen. See also note [Incoherent instances] in InstEnv{ghcvThe semantics allowed for overlapping instances for a particular instance. See Note [Safe Haskell isSafeOverlap] (in ) for a explanation of the ~ field.t : t '{-# OVERLAPPABLE'" or '{-# OVERLAPPING'" or '{-# OVERLAPS'" or '{-# INCOHERENT', t `#-}`,ghcRecursivity FlagghcCaptures the fixity of declarations as they are parsed. This is not necessarily the same as the fixity declaration, as the normal fixity may be overridden using parens or backticks.ghc Warning Text6reason/explanation from a WARNING or DEPRECATED pragmaghcrA String Literal in the source, including its original raw format for use by source to source manipulation tools.ghcIIs a TyCon a promoted data constructor or just a normal type constructor?ghcIf the Id is a lambda-bound variable then it may have lambda-bound variable info. Sometimes we know whether the lambda binding this variable is a "one-shot" lambda; that is, whether it is applied at most once.This information may be useful in optimisation, as computations may safely be floated inside such a lambda without risk of duplicating work.ghcNo informationghc#The lambda is applied at most once.ghc A *zero-indexed* constructor tagghcConstructor TagUType of the tags associated with each constructor possibility or superclass selectorghcThe number of arguments that a join point takes. Unlike the arity of a function, this is a purely syntactic property and is fixed when the join point is created (or converted from a value). Both type and value arguments are counted.ghcRepresentation ArityThe number of represented arguments that can be applied to a value before it does "real work". So: fib 100 has representation arity 0 x -> fib x has representation arity 1 ( x, y +) -> fib (x + y) has representation arity 2ghcThe number of value arguments that can be applied to a value before it does "real work". So: fib 100 has arity 0 x -> fib x has arity 1 See also Note [Definition of arity] in CoreArityghcQTags are allocated from here for real constructors or for superclass selectorsghc$It is always safe to assume that an Id) has no lambda-bound variable informationghc=Pretty print an alternative in an unboxed sum e.g. "| a | |".ghc/Special combinator for showing string literals.ghcA representation of infinitySghcAdd two /sSghc Multiply two /sghcTurn a positive number into an /, where 0 represents infinityghcInject any integer into an /ghc#The pretty printing function to useghcThe things to be pretty printedghcAlternative (one-based)ghcArityghcU where the alternative havs been pretty printed and finally packed into a paragraph.,-./0142356978:=;<>?@ABCDEFGHIMJKLNOPQRSTUWVXYZ[]\^_`abcdefghijklmnopqrstuwxyzv{|}~     {|}~uwxyzvstopqrabcdefghij_^`[]\klmnXYZNOPQIMJKL    FGH:=;<>?@ABCDEUWV5697801423 RST/,-.DNoneFnghc%Class of things that we can obtain a p frompghcUnique identifier.The type of unique identifiers that are used in many places in GHC for fast ordering and equality tests. You should generate these with the functions from the  UniqSupply moduleBThese are sometimes also referred to as "keys" in comments in GHC.SghcSHow many bits are devoted to the unique index (as opposed to the class character).xghceThe interface file symbol-table encoding assumes that known-key uniques fit in 30-bits; verify this.HSee Note [Symbol table representation of names] in BinIface for details.*nopqrstuvwxyz{|}~*pnoqy}rsvwz{tu|x~ENonegghc)A monad for generating unique identifiersghcGet a new UniqueSupplyghcGet a new unique identifierghc.Get an infinite list of new unique identifiersghc/A monad which just gives the ability to obtain psghc Unique SupplyA value of type  is unique, and it can supply one distinct pS. Also, from the supply, one can also manufacture an arbitrary number of further  UniqueSupplyD values, which will be distinct from the first and from all others.ghcCreate a unique supply out of thin air. The character given must be distinct from those of all calls to this function in the compiler for the values generated to be truly unique.ghc Build two 6 from a single one, each of which can supply its own p.ghcCreate an infinite list of  from a single oneghc Obtain the p from this particular ghcObtain an infinite list of p: that can be generated by constant splitting of the supplyghc Obtain the p from this particular , and a new supplyghc Build three < from a single one, each of which can supply its own uniqueghc Build four < from a single one, each of which can supply its own uniqueghcRun the  action, returning the final ghcRun the  action, discarding the final FNone2Mghc1`plusUFM_CD f m1 d1 m2 d2` merges the maps using f! as the combinding function and d1 resp. d2/ as the default value if there is no entry in m1 reps. m2-. The domain is the union of the domains of m1 and m2.Representative example: UplusUFM_CD f {A: 1, B: 2} 23 {B: 3, C: 4} 42 == {A: f 1 42, B: f 2 3, C: f 23 4 } ghcPretty-print a non-deterministic set. The order of variables is non-deterministic and for pretty-printing that shouldn't be a problem. Having this function helps contain the non-determinism created with nonDetEltsUFM.ghcPretty-print a non-deterministic set. The order of variables is non-deterministic and for pretty-printing that shouldn't be a problem. Having this function helps contain the non-determinism created with nonDetUFMToList.ghcDetermines the pluralisation suffix appropriate for the length of a set in the same way that plural from Outputable does for lists.ghcThe things to be pretty printedghc3The pretty printing function to use on the elementsghc+ where the things have been pretty printedghcThe things to be pretty printedghc3The pretty printing function to use on the elementsghc+ where the things have been pretty printed<<GNone2MBghc converts a  a into a  a0 assuming, without checking, that it maps each p to a value that has that p. See Note [UniqSet invariant].#     #     HNone24IP$#ghcMaps indexed by n keys#$%&'()*+,-./0123456789:;<=>?@A#$%&'()*+,-./0123456789:;<=>?@AINone7HghcGraph nodes. Represents a thing that can conflict with another thing. For the register allocater the nodes represent registers.Jghc"A unique identifier for this node.KghcLThe class of this node, determines the set of colors that can be used.LghcThe color of this node, if any.Mghc9Neighbors which must be colored differently to this node.Nghc(Colors that cannot be used by this node.Oghc=Colors that this node would prefer to be, in decending order.Pghc>Neighbors that this node would like to be colored the same as.QghcThe Interference graph. There used to be more fields, but they were turfed out in a previous revision. maybe we'll want more later..SghcAll active nodes in the graph.TghcA fn to check if a node is trivially colorable For graphs who's color classes are disjoint then a node is 'trivially colorable' when it has less neighbors and exclusions than available colors for that node.hFor graph's who's color classes overlap, ie some colors alias other colors, then this can be a bit more tricky. There is a general way to calculate this, but it's likely be too slow for use in the code. The coloring algorithm takes a canned function which can be optimised by the user to be specific to the specific graph being colored.for details, see "A Generalised Algorithm for Graph-Coloring Register Allocation" Smith, Ramsey, Holloway - PLDI 2004.UghcAn empty graph.Vghc5Modify the finite map holding the nodes in the graph.WghcAn empty node.HIJKLMNOPQRSTUVWTQRSUVHIJKLMNOPWJNone24>K Xghc(Type of unique deterministic finite mapsSghc+A type of values tagged with insertion timeSghcinsertion timedghcePerforms a deterministic fold over the UniqDFM. It's O(n log n) while the corresponding function on  is O(n).eghcePerforms a nondeterministic fold over the UniqDFM. It's O(n), same as the corresponding function on [. If you use this please provide a justification why it doesn't introduce nondeterminism.ighc Converts Xg to a list, with elements in deterministic order. It's O(n log n) while the corresponding function on  is O(n).tghc>Partition UniqDFM into two UniqDFMs according to the predicateughc(Delete a list of elements from a UniqDFMvghc7This allows for lossy conversion from UniqDFM to UniqFMxghc(Apply a function to a particular elementyghcThe expression (alterUDFM f k map) alters value x at k, or absence thereof. alterUDFM can be used to insert, delete, or update a value in UniqDFM. Use addToUDFM, delFromUDFM or adjustUDFM when possible, they are more efficient.zghc,Map a function over every value in a UniqDFMghcThe things to be pretty printedghc3The pretty printing function to use on the elementsghc+ where the things have been pretty printed(XYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~(XYZ[\]^uxyz`_abcdfghklmnopqjrwst{|~ive}KNone2MM LNoneRghcA non-deterministic set of FastStrings. See Note [Deterministic UniqFM] in UniqDFM for explanation why it's not deterministic and why it matters. Use DFastStringEnv if the set eventually gets converted into a list or folded over in a way where the order changes the generated code.MNoneUghcThe class of a register. Used in the register allocator. We treat all registers in a class as being interchangable.NNonedghc"A subcomponent of another registerghcA register of some classghcWorst case displacementTa node N of classN has some number of neighbors, all of which are from classC.(worst neighbors classN classC) is the maximum number of potential colors for N that can be lost by coloring its neighbors.pThis should be hand coded/cached for each particular architecture, because the compute time is very long..ghcFor a node N of classN and neighbors of classesC (bound classN classesC) is the maximum number of potential colors for N that can be lost by coloring its neighbors.ghc@The total squeese on a particular node with a list of neighbors.A version of this should be constructed for each particular architecture, possibly including uses of bound, so that alised registers don't get counted twice, as per the paper.Sghcpowerset (for lists)SghcpowersetLS (list of sets)ghcso we can put regs in UniqSetsONonejVghc!Determine the class of a registerghc4Determine all the regs that make up a certain class.ghc`Determine the common name of a reg returns Nothing if this reg is not part of the machine.ghc!Which regs alias what other regs.ghcCOptimised versions of RegColorBase.{worst, squeese} specific to x86PNoneughc"A register, either virtual or realghcRealRegs are machine regs which are available for allocation, in the usual way. We know what class they are, because that's part of the processor's architecture.RealRegPairs are pairs of real registers that are allocated together to hold a larger value, such as with Double regs on SPARC.ghc4An identifier for a primitive real machine register.ghcThe patch function supplied by the allocator maps VirtualReg to RealReg regs, but sometimes we want to apply it to plain old Reg. ghcPrint a reg in a generic manner If you want the architecture specific names, then use the pprReg function from the appropriate Ppr module.QNonev  RNone ghc9Pretty print a graph in a somewhat human readable format. ghcsPretty print a graph in graphviz .dot format. Conflicts get solid edges. Coalescences get dashed edges.SghcNodes in the graph are doubly linked, but we only want one edge for each conflict if the graphviz graph. Traverse over the graph, but make sure to only print the edges for each node once. ghcWhat graphviz color to use for each node color It's usually safe to return X11 style colors here, ie "red", "green" etc or a hex triplet #aaff55 etc    SNone' ghcLookup a node from the graph. ghc>Get a node from the graph, throwing an error if it's not there ghc-Add a node to the graph, linking up its edges ghc/Delete a node and all its edges from the graph. ghcLModify a node in the graph. returns Nothing if the node isn't present. ghcGet the size of the graph, O(n) ghcUnion two graphs together. ghcAdd a conflict between nodes to the graph, creating the nodes required. Conflicts are virtual regs which need to be colored differently. ghcUDelete a conflict edge. k1 -> k2 returns Nothing if the node isn't in the graph ghcAdd some conflicts to the graph, creating nodes if required. All the nodes in the set are taken to conflict with each other. ghcqAdd an exclusion to the graph, creating nodes if required. These are extra colors that the node cannot use. ghcAdd a coalescence edge to the graph, creating nodes if requried. It is considered adventageous to assign the same color to nodes in a coalesence. ghc4Delete a coalescence edge (k1 -> k2) from the graph. ghcAdd a color preference to the graph, creating nodes if required. The most recently added preference is the most prefered. The algorithm tries to assign a node it's prefered color if possible. ghcDo aggressive coalescing on this graph. returns the new graph and the list of pairs of nodes that got coalesced together. for each pair, the resulting node will have the least key and be second in the pair. ghcsCoalesce this pair of nodes unconditionally / aggressively. The resulting node is the one with the least key.returns: Just the pair of keys if the nodes were coalesced the second element of the pair being the least one3Nothing if either of the nodes weren't in the graph !ghcFreeze a node This is for the iterative coalescer. By freezing a node we give up on ever coalescing it. Move all its coalesce edges into the frozen set - and update back edges from other nodes. "ghcFreeze one node in the graph This if for the iterative coalescer. Look for a move related node of low degree and freeze it.4We probably don't need to scan the whole graph looking for the node of absolute lowest degree. Just sample the first few and choose the one with the lowest degree out of those. Also, we don't make any distinction between conflicts of different classes.. this is just a heuristic, after all.IDEA: freezing a node might free it up for Simplify.. would be good to check for triv right here, and add it to a worklist if known triv/non-move nodes. #ghcNFreeze all the nodes in the graph for debugging the iterative allocator. $ghc7Find all the nodes in the graph that meet some criteria %ghcvalidate the internal structure of a graph all its edges should point to valid nodes If they don't then throw an errorSghceIf this node is colored, check that all the nodes which conflict with it have different colors. &ghcMSlurp out a map of how many nodes had a certain number of conflict neighbours 'ghcSet the color of a certain node ghcfIf True, coalesce nodes even if this might make the graph less colorable (aggressive coalescing) ghcfIf True, coalesce nodes even if this might make the graph less colorable (aggressive coalescing)ghc!keys of the nodes to be coalesced !ghckey of the node to freezeghc the graphghcgraph with that node frozen %ghc(extra debugging info to display on errorghc-whether this graph is supposed to be colored.ghcgraph to validateghcvalidated graphSghcTrue if this node is ok &ghc9(conflict neighbours, num nodes with that many conflicts)                 ! " # $ % & '                 ! " # $ ' % &TNone (ghcTry to color a graph with this set of colors. Uses Chaitin's algorithm to color the graph. The graph is scanned for nodes which are deamed 'trivially colorable'. These nodes are pushed onto a stack and removed from the graph. Once this process is complete the graph can be colored by removing nodes from the stack (ie in reverse order) and assigning them colors different to their neighbors.SghcuScan through the conflict graph separating out trivially colorable and potentially uncolorable (problem) nodes.Checking whether a node is trivially colorable or not is a reasonably expensive operation, so after a triv node is found and removed from the graph it's no good to return to the starte of the graph and recheck a bunch of nodes that will probably still be non-trivially colorable.@To ward against this, during each pass through the graph we collect up a list of triv nodes that were found, and only remove them once we've finished the pass. The more nodes we can delete at once the more likely it is that nodes we've already checked will become trivially colorable for the next pass.TODO: add work lists to finding triv nodes is easier. If we've just scanned the graph, and removed triv nodes, then the only nodes that we need to rescan are the ones we've removed edges from.Sghc)Try to assign a color to all these nodes.SghcSelect a color for a certain node taking into account preferences, neighbors and exclusions. returns Nothing if no color can be assigned to this node. (ghc"whether to do iterative coalescingghc6how many times we've tried to color this graph so far.ghc>map of (node class -> set of colors available for this class).ghc3fn to decide whether a node is trivially colorable.ghcUfn to choose a node to potentially leave uncolored if nothing is trivially colorable.ghcthe graph to color.Sghc"whether to do iterative coalescingghc2fn to decide whether a node is trivially colorableghcUfn to choose a node to potentially leave uncolored if nothing is trivially colorable.ghcthe graph to scanSghc>map of (node class -> set of colors available for this class).ghc the graphghcnodes to assign a color to.Sghc>map of (node class -> set of colors available for this class).ghc the graphghc&key of the node to select a color for.+HIJKLMNOPQRSTUVW                   ! " # $ % & ' ( (UNone &'-=?HX` +ghcInformation we keep around during interface file serialization/deserialization. Namely we keep the functions for serializing and deserializing s and Ns. We do this because we actually use serialization in two distinct settings,+When serializing interface files themselvesjWhen computing the fingerprint of an IfaceDecl (which we computing by hashing its Binary serialization)@These two settings have different needs while serializing Names:|Names in interface files are serialized via a symbol table (see Note [Symbol table representation of names] in BinIface).During fingerprinting a binding Name is serialized as the OccName and a non-binding Name is serialized as the fingerprint of the thing they represent. See Note [Fingerprinting IfaceDecls] for further discussion. /ghcserialize a non-binding ( (e.g. a reference to another binding). 0ghcserialize a binding  (e.g. the name of an IfaceDecl) :ghc$Get access to the underlying buffer.0It is quite important that no references to the S; leak out of the continuation lest terrible things happen. Ighchow to deserialize s Jghchow to serialize non-binding sghchow to serialize binding s% ) * + , - . / 0 1 2 5 4 3 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M% 6 2 5 4 3 7 ) * > @ A ? ; B : C D < = E F H G + , - . / 0 1 8 9 I J K L M2None"#@Ak-7ghcA  consists of the package name, package version, component ID, the transitive dependencies of the component, and other information to uniquely identify the source code and build configuration of a component.This used to be known as an InstalledPackageId7, but a package can contain multiple components and a ` uniquely identifies a component within a package. When a package only has one component, the  coincides with the InstalledPackageIdghcAn installed unit identifier identifies a library which has been installed to the package database. These strings are provided to us via the  -this-unit-id flag. The library in question may be definite or indefinite; if it is indefinite, none of the holes have been filled (we never install partially instantiated libraries.) Put another way, an installed unit id is either fully instantiated, or not instantiated at all./Installed unit identifiers look something like p+af23SAj2dZ219, or maybe just p if they don't use Backpack.ghclA unit identifier identifies a (possibly partially) instantiated library. It is primarily used as part of  , which in turn is used in Name=, which is used to give names to entities when typechecking.#There are two possible forms for a . It can be a  A, in which case we just have a string that uniquely identifies some fully compiled, installed library we have on disk. However, when we are typechecking a library with missing holes, we may need to instantiate a library on the fly (in which case we don't have any on-disk representation.) In that case, you have an  Q, which explicitly records the instantiation, so that we can substitute over it. ghc2A ModuleName is essentially a simple string, e.g.  Data.List. ghcA Module is a pair of a  and a  .Module variables (i.e.  Hd) which can be instantiated to a specific module at some later point in time are represented with   set to S* (this allows us to avoid having to make   a partial operation.) ghcA map keyed off of  s (actually, their pLs) Has deterministic folds and can be deterministically converted to a list ghcA map keyed off of  s (actually, their ps) ghc A set of  s ghcA map keyed off of  s ghcNSubstitution on module variables, mapping module names to module identifiers. ghcA map keyed off of  ghcA   is an f with the invariant that it only refers to a definite library; i.e., one we have generated code for. ghcA   is a   which contains a . ghcJThe full hashed unit identifier, including the component id and the hash. ghcA unit identifier which identifies an indefinite library (with holes) that has been *on-the-fly* instantiated with a substitution  . In fact, an indefinite unit identifier could have no holes, but we haven't gotten around to compiling the actual library yet.?An indefinite unit identifier pretty-prints to something like p[H= H ,A=aimpl:A>] (p is the 5, and the brackets enclose the module substitution). ghcA private, uniquely identifying representation of a UnitId. This string is completely private to GHC and is just used to get a unique; in particular, we don't use it for symbols (indefinite libraries are not compiled). ghcCached unique of  . ghcMThe component identity of the indefinite library that is being instantiated. ghcThe sorted (by  !) instantiations of this library. ghc(A cache of the free module variables of  unitIdInsts&. This lets us efficiently tell if a w has been fully instantiated (free module variables are empty) and whether or not a substitution can have any effect. ghcModule LocationlWhere a module lives on the file system: the actual locations of the .hs, .hi and .o files, if we have them ghcAdd the -boot suffix to .hs, .hi and .o files ghcAdd the -boot suffix if the Bool argument is True ghcAdd the -boot4 suffix to all file paths associated with the module ghcAdd the -boota suffix to all output file paths associated with the module, not including the input file itself ghc6Compares module names lexically, rather than by their ps ghc!Get a string representation of a  p that's unique and stable across recompilations. eg. "$aeson_70dylHtv1FFGeai1IoxcQr$Data.Aeson.Types.Internal" ghcMReturns the string version of the module name, with dots replaced by slashes. ghcLReturns the string version of the module name, with dots replaced by colons. ghcCalculate the free holes of a  m. If this set is non-empty, this module was defined in an indefinite library that had required signatures.If a module has free holes, that means that substitutions can operate on it; if it has no free holes, substituting over a module has no effect. ghcA  % is definite if it has no free holes. ghc!Create a module variable at some  5. See Note [Representation of module/name variables] ghccThis gives a stable ordering, as opposed to the Ord instance which gives an ordering based on the pNs of the components, which may not be stable from run to run of the compiler. ghc Create a new  ' given an explicit module substitution. ghc Injects an  > (indefinite library which was on-the-fly instantiated) to a - (either an indefinite or definite library). ghc Injects an   to   (see also  . ghc Lossy conversion to the on-disk  for a component. ghc Test if a   corresponds to a given  , modulo instantiation. ghc Test if a  corresponds to a given , modulo instantiation. ghc$Retrieve the set of free holes of a . ghcA % is definite if it has no free holes. ghc Generate a uniquely identifying  for a unit identifier. This is a one-way function. You can rely on one special property: if a unit identifier is in most general form, its  coincides with its [. This hash is completely internal to GHC and is not used for symbol names or file paths.Sghc1Generate a hash for a sorted module substitution. ghc(Create a new, un-hashed unit identifier. ghc5Compares package ids lexically, rather than by their ps ghc6Create a new simple unit identifier (no holes) from a . ghc+Create a new simple unit identifier from a L. Internally, this is primarily used to specify wired-in unit identifiers. ghcSubstitutes holes in a  0. NOT suitable for being called directly on a  nameModule6, see Note [Representation of module/name variable]. p[A= A]:B maps to  p[A=q():A]:B with A=q():A; similarly,  A maps to q():A. ghcSubstitutes holes in a c, suitable for renaming when an include occurs; see Note [Representation of module/name variable].p[A= A] maps to p[A= B] with A= B. ghcLike  , but requires only  so it can be used by Packages. ghc*Like 'renameHoleUnitId, but requires only  so it can be used by Packages. ghcBGiven a possibly on-the-fly instantiated module, split it into a   that we definitely can find on-disk, as well as an instantiation if we need to instantiate it on the fly. If the instantiation is Nothing" no on-the-fly renaming is needed. ghcSee  . ghcThis is the package Id for the current program. It is the default package Id if you don't specify a package name. We don't add this prefix to symbol names, since there can be only one main package per program.SghcThis is a fake package id used to provide identities to any un-implemented signatures. The set of hole identities is global over an entire compilation. Don't use this directly: use   or  = instead. See Note [Representation of module/name variables]                                              None"#=?@Ap Xghc Get the GHC  right out of a Cabalish  S2SRMQPONLKJIHGFEDCBA@?>=<;:98765 O P Q R S T U V W X Y Z [2 Y Z [ X SSRMQPONLKJIHGFEDCBA@?>=<;:98765 Q R O P T U V WWNone2u  fghc A C type, used in CAPI FFI callst : t  '{-# CTYPE' , t,t , t '#-}', qghc,How to call a particular function in C-land.! f g h i j k l m n o p q r s t u v w x y z { | } ~  ! | } ~ x y z {  v w j t u q r s k l m n o p h i f gXNone2MzI ghc9An index into a given cost centre module,name,flavour set ghc2Per-module state for tracking cost centre indices.See documentation of  for more details. ghcInitialize cost centre state. ghc-Get a new index for a given cost centre name.  YNone2456z  ZNone8 ghcWhen we are given files (modified by -x arguments) we need to determine if they are Haskellish or not to figure out how we should try to compile it. The rules are: If no -x flag was specified, we check to see if the file looks like a module name, has no extension, or has a Haskell source extension.^If an -x flag was specified, we just make sure the specified suffix is a Haskell one.3 3 None%MX ghc*Edge direction based on DFS Classification ghc7Loop back towards the root node. Eg backjumps in loops ghcv -> v ghc&Representation for nodes of the Graph.The payload1 is user data, just carried around in this moduleThe keyL is the node identifier. Key has an Ord instance for performance reasons.The [key] are the dependencies of the node; it's ok to have extra keys in the dependencies that are not the key of any Node in the graph ghc User data ghcUser defined node id ghc#Dependencies/successors of the node ghcFind a reasonably short cycle a->b->c->a, in a strongly connected component. The input nodes are presumed to be a SCC, so you can start anywhere. ghc1Given a list of roots return all reachable nodes. ghcvGiven a start vertex, a way to get successors from a node and a list of (directed) edges classify the types of edges.!)*-,+                       ! -,+   )*                    [NoneX Jghccombining functionghc initial stateghcinputsghcfinal state, outputs Kghccombining functionghc initial stateghcinputsghcfinal state, outputs& ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M& ( ) * . - A , + 3 : ; 8 9 < = > 1 2 / 0 6 5 L M J B C D ? @ E F G H I K 7 4 /3 03\None Vghc6A command-line warning message and the reason it arose ZghcA command-line error message ]ghc[Used when filtering warnings: if a reason is given it can be filtered out when displaying. lghc4GHC flag modes describing when a flag has an effect. mghc-The flag only affects the non-interactive GHC nghc)The flag only affects the interactive GHC oghc#The flag affects multiple ghc modes pghc.This flag should not be seen in cli completionSghc Parse an IntlLooks for "433" or "=342", with no trailing gubbins * n or =n => Just n * gibberish => NothingSghcDiscards a leading equals sign4 R S T U V W Y X Z [ \ ] ^ _ ` a e b c d f g h i j k l o m n p q r s t u v w x y z { | } ~  4 a e b c d f g h i j k l o m n p R S T q r s t u v w x y Z [ \ V W Y X ] ^ _ ` U z { | }  ~%None=? ?ghc-Enumerates the simple on-or-off dynamic flagsAghc"Contains not only a collection of ?as but also a plethora of information relating to the compilation of a single file or GHC sessionGghcEAn internal helper to check whether to use unicode syntax for output.&Note: You should very likely be using  instead of this function. ghcyA collection of files that must be deleted before ghc exits. The current collection is stored in an IORef in DynFlags,  . ghc2Files that will be deleted at the end of runGhc(T) ghc*Files that will be deleted the next time i4 is called, or otherwise at the end of the session. ghcFlag in string form ghcFlag in internal form ghcNExtra action to run when the flag is found Typically, emit a warning or error ghc%In which ghc mode the flag has effect ghcWhen invoking external tools as part of the compilation pipeline, we pass these a sequence of options on the command-line. Rather than just using a list of Strings, we use a type that allows us to distinguish between filepaths and 'other stuff'. The reason for this is that this type gives us a handle on transforming filenames, and filenames only, to whatever format they're expected to be on a particular platform. ghc+Flags for manipulating packages visibility. ghc-package,  -package-id ghc  -hide-package ghc%Flags for manipulating package trust. ghc -trust ghc  -distrust ghc6Flags for manipulating the set of non-broken packages. ghc -ignore-package ghcRRepresents the renaming that may be associated with an exposed package, e.g. the rns part of -package "foo (rns)"._Here are some example parsings of the package flags (where a string literal is punned to be a  : -package foo is ModRenaming True []-package foo () is ModRenaming False []-package foo (A) is ModRenaming False [(A, A)]-package foo (A as B) is ModRenaming False [(A, B)]-package foo with (A as B) is ModRenaming True [(A, B)] ghc%Bring all exposed modules into scope? ghc Bring module m into scope under name n. ghcWe accept flags which make packages visible, but how they select the package varies; this data type reflects what selection criterion is used. ghc-package, by  O ghc -package-id, by  ghc-What to do in the link step, if there is one. ghcDon't link at all ghcLink object code into a binary ghcNUse the in-memory dynamic linker (works for both bytecode and object code). ghcFLink objects into a dynamic lib (DLL on Windows, DSO on ELF platforms) ghcLink objects into a static lib ghcThe  L tells us whether we're doing multi-module compilation (controlled via the GHC[ API) or one-shot (single-module) compilation. This makes a difference primarily to the Finder: in one-shot mode we look for interface files for imported modules, but in multi-module mode we look for source files in order to check whether they need to be recompiled. ghc--make , GHCi, etc. ghc  ghc -c Foo.hs ghcghc -M, see Finder for why we need this ghc1The target code type of the compilation (if any).6Whenever you change the target, also make sure to set  7 to something sensible. A can be used to avoid generating any output, however, note that:If a program uses Template Haskell the typechecker may need to run code from an imported module. To facilitate this, code generation is enabled for modules imported by modules that use template haskell. See Note [-fno-code mode]. ghcGenerate C code. ghc2Generate assembly using the native code generator. ghc0Generate assembly using the llvm code generator. ghcGenerate bytecode. (Requires  ) ghc*Don't generate any code. See notes above. "ghcno SCC annotations added #ghc,top-level and nested functions are annotated $ghc"top-level functions annotated only %ghc!exported functions annotated only &ghcannotate call-sites +ghc2Edge weights to use when generating a CFG from CMM :ghcIntegerGMP or IntegerSimple. Set at configure time, but may be overriden by GHC-API users. See Note [The integer library] in PrelNames =ghc,Verbosity level: see Note [Verbosity levels] >ghcOptimisation level ?ghc%How much debug information to produce @ghcNumber of simplifier phases AghcMax simplifier iterations Bghc!Max no iterations for pm checking Dghc+A prefix to report inlining decisions about EghcAdditional demand analysis FghcThe number of modules to compile in parallel in --make mode, where Nothing ==> compile as many in parallel as there are CPUs. GghcEnable RTS timing statistics? HghcThe heap size to set. IghcOMaximum number of bindings from the type envt to show in type error messages JghcCMaximum number of hole fits to show in typed hole error messages KghcQMaximum number of refinement hole fits to show in typed hole error messages LghcWMaximum level of refinement for refinement hole fits in typed hole error messages MghcNMaximum number of unmatched patterns to show in non-exhaustiveness warnings NghcMultiplier for simplifier ticks OghcThreshold for SpecConstr Pghc2Max number of specialisations for any one function QghciMax number of specialisations for recursive types Not optional; otherwise ForceSpecConstr can diverge. RghcThreshold for LiberateCase Sghc?Arg count for lambda floating See CoreMonad.FloatOutSwitches TghcIMaximum number of arguments after lambda lifting a recursive function. UghcMMaximum number of arguments after lambda lifting a non-recursive function. VghcFLambda lift even when this turns a known call into an unknown call. Wghc4Align Cmm functions at this boundary or use default. XghcSimplification history size \ghcTypechecker maximum stack depth ]ghcLNumber of iterations in the constraints solver Typically only 1 is needed aghcWay flags from the command line bghc$The global "way" (e.g. "p" for prof) ughcThis is set by ( based on where its output is going. vghc Override the  u set by  . Set by -ddump-file-prefix ghcPath to store the .mix files ghcthe -ffrontend-opta flags given on the command line, in *reverse* order that they're specified on the command line. ghcplugins dynamically loaded after processing arguments. What will be loaded here is directed by pluginModNames. Arguments are loaded from pluginModNameOpts. The purpose of this field is to cache the plugins so they don't have to be loaded each time they are needed. See !. ghcstaic plugins which do not need dynamic loading. These plugins are intended to be added by GHC API users directly to this list.;To add dynamically loaded plugins through the GHC API see  instead. ghcThe  -package-db flags given on the command line, In *reverse* order that they're specified on the command line. This is intended to be applied with the list of "initial" package databases derived from GHC_PACKAGE_PATH; see getPackageConfRefs. ghcThe -ignore-package] flags from the command line. In *reverse* order that they're specified on the command line. ghcThe -package and  -hide-package] flags from the command-line. In *reverse* order that they're specified on the command line. ghcThe -plugin-package-idY flags from command line. In *reverse* order that they're specified on the command line. ghcThe -trust and  -distrustG flags. In *reverse* order that they're specified on the command line. ghc@Filepath to the package environment file (if overriding default) ghcSafe Haskell mode ghcMsgDoc output action: use ErrUtils instead of this if you can ghc8GHCi scripts specified by -ghci-script, in reverse order ghcwhat kind of {- SCC -} to add automatically ghcMachine dependent flags (-m blah stuff) ghc8Run-time linker information (what options we need, etc.) ghcRun-time compiler information ghc0Max size, in bytes, of inline array allocations. ghc^Only inline memcpy if it generates no more than this many pseudo (roughly: Cmm) instructions. ghc^Only inline memset if it generates no more than this many pseudo (roughly: Cmm) instructions. ghc/Reverse the order of error messages in GHC/GHCi ghc*Limit the maximum number of errors to show ghc9Unique supply configuration for testing build determinism ghc/Temporary: CFG Edge weights for fast iterations ghcThe various Safe Haskell modes #ghcUsed to differentiate the scope an include needs to apply to. We have to split the include paths to avoid accidentally forcing recursive includes since -I overrides the system search paths. See Trac #14312. 'ghcUsed when outputting warnings: if a reason is given, it is displayed. If a warning isn't controlled by a flag, this is made explicit at the point of use. )ghc!Warning was enabled with the flag *ghcCWarning was made an error because of -Werror or -Werror=WarningFlag +ghc.Append dump output to files instead of stdout. kghc)Use the cfg based block layout algorithm. lghc+Layout based on last instruction per block. ghc -fPIC ghc -fPIE ghc -pie ghcSuppress timestamps in dumps ghc#Dump the cfg used for block layout.1ghcAppend to the list of includes a path that shall be included using `-I` when the C compiler is called. These paths override system search paths.2ghcAppend to the list of includes a path that shall be included using `-iquote` when the C compiler is called. These paths only apply when quoted includes are used. e.g. #include "foo.h"3ghcdConcatenate and flatten the list of global and quoted includes returning just a flat list of paths.[ghc]The directory for this version of ghc in the user's app directory (typically something like ~.ghcx86_64-linux-7.6.3)SghcA filepath like x86_64-linux-7.6.3k with the platform string to use when constructing platform-version-dependent files that need to co-exist.\ghc6Will this target result in an object file on the disk?]ghcbDoes this target retain *all* top-level bindings for a module, rather than just the exported bindings, in the TypeEnv and compiled code (if any)? In interpreted mode we do this, so that GHCi can call functions inside a module. In HscNothing mode we also do it, so that Haddock can get access to the GlobalRdrEnv for a module after typechecking it.aghcThe  X value corresponding to the default way to create object files on the current platform.dghcAre we building with -fPIE or -fPIC enabled?mghcUsed by  to partially initialize a new A valuenghc The normal AY. Note that they are not suitable for use in this form and must be fully initialized by  first.ughcLike v but appends an extra newline.|ghcTest whether a @ is set}ghcSet a @~ghcUnset a @ghcTest whether a ? is setghcSet a ?ghcUnset a ?ghcTest whether a   is setghcSet a  ghcUnset a  ghcTest whether a   is set as fatalghcMark a   as fatal (do not set the flag)ghcMark a   as not fatalghcTest whether a S is setghcSet a SghcUnset a SghcSet or unset a S7, unless it has been explicitly set or unset before.Sghc(Set the Haskell language standard to useghcYSome modules have dependencies on others through the DynFlags rather than textual importsghcIs the -fpackage-trust mode onghc9Is Safe Haskell on in some way (including inference mode)ghc(Is the Safe Haskell safe language in useghc.Is the Safe Haskell safe inference mode activeghc(Test if Safe Imports are on in some formSghcSet a 'Safe Haskell' flagghcAre all direct imports required to be safe for this Safe Haskell mode? Direct imports are when the code explicitly imports a moduleghcAre all implicit imports required to be safe for this Safe Haskell mode? Implicit imports are things in the prelude. e.g System.IO when print is used.SghcCombine two Safe Haskell modes correctly. Used for dealing with multiple flags. This makes Safe Haskell very much a monoid but for now I prefer this as I don't want to export this functionality from the module but do want to export the type constructors.ghcA list of unsafe flags under Safe Haskell. Tuple elements are: * name of the flag * function to get srcspan that enabled the flag * function to test if the flag is on * function to turn the flag offghcA list of unsafe flags under Safe Haskell. Tuple elements are: * name of the flag * function to get srcspan that enabled the flag * function to test if the flag is on * function to turn the flag offghc3Retrieve the options corresponding to a particular opt_* field in the correct orderghc{Gets the verbosity flag for the current verbosity level. This is fed to other tools, so GHC-specific verbosity flags like  -ddump-most are not includedghc Sets the A, to be appropriate to the optimisation levelghcPParse dynamic flags from a list of command line arguments. Returns the parsed A=, the left-over arguments, and a list of warnings. Throws a Q if errors occurred during parsing (such as unknown flags or missing arguments).ghcLike  but does not allow the package flags (-package, -hide-package, -ignore-package, -hide-all-packages, -package-db). Used to parse flags set in a modules pragma.ghcParses the dynamically set flags for GHC. This is the most general form of the dynamic flag parser that the other methods simply wrap. It allows saying which flags are valid flags and indicating if we are parsing arguments from the command line or from a file pragma.ghc!Write an error or warning to the  LogOutput.SghcQCheck (and potentially disable) any extensions that aren't allowed in safe mode.The bool is to indicate if we are parsing command line flags (false means file pragma). This allows us to generate better warnings.ghcAll dynamic flags option strings without the deprecated ones. These are the user facing strings for enabling and disabling options.Sghc4All flags with possibility to filter deprecated onesSghcThis is where we handle unrecognised warning flags. We only issue a warning if -Wunrecognised-warning-flags is set. See Trac #11429 for context.ghcyMake a list of flags for shell completion. Filter all available flags into two groups, for interactive GHC vs all other.SghcDefine a new flag.Sghc!Define a new flag with an effect.Sghc,Define a new deprecated flag with an effect.SghcDefine a new deprecated flag.SghcdDefine a new deprecated flag with an effect where the deprecation message depends on the flag valueSghcUDefine a new deprecated flag where the deprecation message depends on the flag valueSghc`Define a new deprecated flag where the deprecation message is shown depending on the flag valueSghcDefine a new flag for GHCi.Sghc*Define a new flag for GHCi with an effect.Sghc.Define a new flag invisible to CLI completion.Sghc=Define a new flag invisible to CLI completion with an effect.SghcHide a   from being displayed in --show-options.vThis is for example useful for flags that are obsolete, but should not (yet) be deprecated for compatibility reasons.Sghc Find the   for a  .ghcThese -W<blah> flags can all be reversed with  -Wno-<blah>SghcThese -<blah> flags can all be reversed with  -no-<blah>SghcThese -d<blah> flags can all be reversed with  -dno-<blah>ghcThese -f<blah> flags can all be reversed with  -fno-<blah>SghcThese -f<blah> flags have to do with the typed-hole error message or the valid hole fits in that message. See Note [Valid hole fits include ...] in the TcHoleErrors module. These flags can all be reversed with  -fno-<blah>ghcThese -f<blah> flags can all be reversed with  -fno-<blah>SghcThese -X blah# flags cannot be reversed with -XNo blahSghcThese -X blah# flags cannot be reversed with -XNo blah^ They are used to place hard requirements on what GHC Haskell language features can be used.ghcThese -X blah$ flags can all be reversed with -XNo blahSghcThese are the default settings for the display and sorting of valid hole fits in typed-hole error messages. See Note [Valid hole fits include ...] in the TcHoleErrors module.ghcWarning groups.sAs all warnings are in the Weverything set, it is ignored when displaying to the user which group a warning is in.ghcJWarning group hierarchies, where there is an explicit inclusion relation.Each inner list is a hierarchy of warning groups, ordered from smallest to largest, where each group is a superset of the one before it.Separating this from J allows for multiple hierarchies with no inherent relation to be defined.3The special-case Weverything group is not included.Sghc^Find the smallest group in every hierarchy which a warning belongs to, excluding Weverything.Sghc+Warnings enabled unless specified otherwiseSghcThings you get with -WSghcThings you get with -WallSghcAThings you get with -Weverything, i.e. *all* known warnings flagsSghcThings you get with -Wcompat.This is intended to group together warnings that will be enabled by default at some point in the future, so that library authors eager to make their code future compatible to fix issues before they even generate warnings.ghc4Was the runtime system built with profiling enabled?ghcGiven a  j of a signature in the home library, find out how it is instantiated. E.g., the canonical form of A in  p[A=q[]:A] is q[]:A.ghc,Find the package environment (if one exists){We interpret the package environment as a set of package flags; to be specific, if we find a package environment file like _clear-package-db global-package-db package-db blah/package.conf.d package-id id1 package-id id2we interpret this as [ -hide-all-packages , -clear-package-db , -global-package-db , -package-db blah/package.conf.d , -package-id id1 , -package-id id2 ]YThere's also an older syntax alias for package-id, which is just an unadorned package id id1 id2Cghc1Resolve any internal inconsistencies in a set of A. Returns the consistent A6 as well as a list of warnings to report to the user.SghcThis is the value that I! takes before it is initialized.PghcAn empty FilesToCleanghcA to retrieve the options fromghc%Relevant record accessor: one of the opt_* accessorsghc#Correctly ordered extracted optionsghcUpdated A-, left-over arguments, and list of warnings.ghcUpdated A-, left-over arguments, and list of warnings.ghcvalid flags to match againstghc(are the arguments from the command line?ghccurrent dynamic flagsghcarguments to parseSghcTrue  = it should be turned onghcThe flag prefixghc!What to do when the flag is foundghc&Specification of this particular flagU? : S @ ; + , - . / 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 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 { | } ~  @       !"#$%&'()*+,-./A 5 ]KJH 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 { | } ~  BCDEFGILMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4                           ! " # $ % & ' ) ( *0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPU@       !"#$%&'()*+,-./? : S @ ; + , - . / 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 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 { | } ~                            ! " ' ) ( * MNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ! " # $ % &CBz{|}~GFijklA 5 ]KJH 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 { | } ~  ) * ' ( \a] ^ _ `  bcCEDd0 efgh                           L56789:;[<=>?@ABCDEFGHJKLMINOPRSTUZQVXYWnopqrmstuvwxy      !"#$%&'()*+,-./0123456789:;<=>?@ABIDEFGNOHIJKLM P # $ % &123 + , - . / 0 1 2 3 44]None ghc9We need 8 bytes because our largest registers are 64 bit.ghcqWe (allegedly) put the first six C-call arguments in registers; where do we start putting the rest of them?ghc6Check whether an offset is representable with 13 bits.ghc Check whether an integer will fit in 32 bits. A CmmInt is intended to be truncated to the appropriate number of bits, so here we truncate it to Int64. This is important because e.g. -1 as a CmmInt might be either -1 or 18446744073709551615.ghcSadness.^NoneM SghcTrue  = This is a static closure. Affects how we garbage-collect it. Static closure have an extra static link field at the end. Constructors do not have a static variant; see Note [static constructors]ghcaA description of the layout of a closure. Corresponds directly to the closure types in includesrtsstorage/ClosureTypes.h.ghcByte offset, or byte countghcWord offset, or word countghccRound up the given byte count to the next byte count that's a multiple of the machine's word size.ghc Round up base to a multiple of size.ghc7Convert the given number of words to a number of bytes.This function morally has type WordOff -> ByteOff , but uses Num a to allow for overloading.ghcsFirst round the given byte count up to a multiple of the machine's word size and then convert the result to words.ghc/Size of a closure header (StgHeader in includesrtsstorage/Closures.h)ghcJSize of the profiling part of a closure header (StgProfHeader in includesrtsstorage/Closures.h)SghcPThe garbage collector requires that every closure is at least as big as this.ghc(The total size of the closure, in words.ghcCThe byte offset into the card table of the card for a given elementghc>Convert a number of elements to a number of cards, rounding upghc"The size of a card table, in bytesghc"The size of a card table, in wordsghc%Derives the RTS closure type from an JJ_None ghc3The slots that are still available to be allocated.ghc#Assignment of vregs to stack slots.ghcIdentifier for a stack slot.ghc-An empty stack map, with all slots available.ghcIf this vreg unique already has a stack assignment then return the slot number, otherwise allocate a new slot, and update the map.ghc4Return the number of stack slots that were allocatedNone2 3l ghcOccurrence NamexIn this context that means: "classified (i.e. as a type name, value name, etc) but not qualified and not yet resolved"ghcOther names in the compiler add additional information to an OccName. This class provides a consistent way to access the underlying OccName. ;ghcValue OccNamesKs are those that are either in the variable or data constructor namespaces=ghc Test if the 8 is a data constructor that starts with a symbol (e.g. :, or [])>ghc Test if the U is that for any operator (whether it is a data constructor or variable or whatever)?ghcWrap parens around an operator@ghchHaskell 98 encourages compilers to suppress warnings about unsed names in a pattern if they start with _: this implements that testSghc Build an  derived from another .4Note that the pieces of the name are passed in as a  [FastString]: so that the whole name can be constructed with a single 3, minimizing unnecessary intermediate allocations.AghcTest for definitions internally generated by GHC. This predicte is used to suppress printing of internal definitions in some debug printsCghcIs an  one of a Typeable TyCon or Modulew binding? This is needed as these bindings are renamed differently. See Note [Grand plan for Typeable] in TcTypeable.^ghc<Derive a name for the representation type constructor of a data/newtype instance.SghcCA prefix which distinguishes one sort of derived name from anotherghcDThe name we are deriving from in pieces which will be concatenated.\ghcIndex of superclass, e.g. 3ghc Class, e.g. OrdghcDerived Occname, e.g. $p3Ord]ghcUnique to combine with the ghcLocal name, e.g. satghcNice unique version, e.g. $L23sat^ghcFamily name, e.g. Mapghcavoid these Occsghc R:Map_ghc3Typically the class and type glommed together e.g. OrdMaybe-. Only used in debug mode, for extra clarityghc Is this a hs-boot instance DFun?ghcavoid these OccsghcE.g.  $f3OrdMaybe`ghcTyCon or data con stringghcavoid these OccsghcE.g.  $f3OrdMaybe data T = MkT ... deriving( Data ) needs definitions for $tT :: Data.Generics.Basics.DataType $cMkT :: Data.Generics.Basics.ConstraghcTyCon or data con stringghcavoid these OccsghcE.g.  $f3OrdMaybe data T = MkT ... deriving( Data ) needs definitions for $tT :: Data.Generics.Basics.DataType $cMkT :: Data.Generics.Basics.Constr~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef~     _7ADEFGHBCPISTUOJKLMNWX`aZ\[]b^QRYV689:<=>;?@"# !&%$'()*+,-./012345cdfeNone "#=?HVg `ghcdA unique, unambiguous name for something, containing information about where that thing originated.ughc*A class allowing convenient access to the  of various datatypesxghc!BuiltInSyntax is for things like (:), []Q and tuples, which have special syntactic forms. They aren't in scope as such.ghcwReturns True if the name is (a) Internal (b) External but from the specified module (c) External but from the  interactive packageThe key idea is that False means: the entity is defined in some other module you can find the details (type, fixity, instances) in some interface file those details will be stored in the EPT or HPTTrue means: the entity is defined in this module or earlier in the GHCi session you can find details (type, fixity, instances) in the TcGblEnv or TcLclEnvThe isInteractiveModule part is because successive interactions of a GHCi session each give rise to a fresh module (Ghci1, Ghci2, etc), but they all come from the magic  interactive package; and all the details are kept in the TcLclEnv, TcGblEnv, NOT in the HPT or EPT. See Note [The interactive package] in HscTypesghcjReturns True if the Name comes from some other package: neither this package nor the interactive package.ghcaCreate a name which is (for now at least) local to the current module and hence does not need a   to disambiguate it from other sghc=Create a name which definitely originates in the given moduleghc>Create a name which is actually defined by the compiler itselfghc0Create a name brought into being by the compilerghcMake a name for a foreign callghc Make the ? into an internal name, regardless of what it was to begin withghcrCompare Names lexicographically This only works for Names that originate in the source code or have been tidied.ghc0Print the string of Name unqualifiedly directly.ghc!Get a string representation of a  that's unique and stable across recompilations. Used for deterministic generation of binds for derived instances. eg. "$aeson_70dylHtv1FFGeai1IoxcQr$Data.Aeson.Types.Internal$String"ghcAssumes that the  is a non-binding one. See  and  for serializing binding s. See  +( for the rationale for this distinction.ghcCaution#: This instance is implemented via |R, which means that the ordering is not stable across deserialization or rebuilds.See |] for further information, and trac #15240 for a bug caused by improper use of this instance.ghcThe same comments as for 's R^ instance apply.      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefuwvxyz{|}~7xyz{|}~uwv`None w ghc A number of s in dependency order: earlier  scope over later B In a single (def, use) pair, the defs also scope over the usesghc(Just ds, us) => The use of any member of the ds, implies that all the us+ are used too. Also, us may mention ds. Nothing => Nothing is defined in this group, but nevertheless all the uses are essential. Used for instance declarations, for exampleghc&A set of names that are used somewhereghc)A set of names that are defined somewhereghc,True if there is a non-empty intersection. s1  s2 doesn't compute s2 if s1 is emptyghcGet the elements of a NameSet with some stable ordering. This only works for Names that originate in the source code or have been tidied. See Note [Deterministic UniqFM] to learn about nondeterminismghc Just like , but  are not eliminated from the  returnedghc Collect all >, regardless of whether the group is itself used, but remove  on the wayghc Given some  and some J, find all the uses, transitively. The result is a superset of the input ,; and includes things defined in the input  (but only if they are used)**aNone {ghcDeterministic Name EnvironmentQSee Note [Deterministic UniqFM] in UniqDFM for explanation why we need DNameEnv.ghcName EnvironmentcNone2M !ghc>Docs for arguments. E.g. function arguments, method arguments. ghcEDocs for declarations: functions, data types, instances, methods etc. ghc$Located Haskell Documentation String ghcHaskell Documentation String"Internally this is a UTF8-Encoded S.ghc Create a   from a UTF8-encoded S.ghcReturn the contents of a   as a UTF8-encoded S.ghcJoin two docstrings.`Non-empty docstrings are joined with two newlines in between, resulting in separate paragraphs.ghc/Concat docstrings with two newlines in between.Empty docstrings are skipped.If all inputs are empty, R is returned.          dNone12456 ghc"Fields in an algebraic record type!ghcUser-visible label of the field"ghcIWas DuplicateRecordFields on in the defining module for this datatype?#ghcRecord selector function%ghc2A map from labels to all the auxiliary information&ghceField labels are just represented as strings; they are not necessarily unique (even within a module)'ghcRecord selector OccNames are built from the underlying field name and the name of the first data constructor of the type, to support duplicate record field names. See Note [Why selector names include data constructors].  #!"$%&' &% #!"$'eNone i1ghcxUsed when we want to fingerprint a structure without depending on the fingerprints of external Names that it refers to./01/01fNone 2ghc^A collection of annotations Can't use a type synonym or we hit bug #2412 due to source import3ghcEThe kind of annotation target found in the middle end of the compiler4ghcAn annotation target5ghcCWe are annotating something with a name: a type or identifier6ghc%We are annotating a particular module8ghc]Represents an annotation after it has been sufficiently desugared from it's initial form of :ghcThe target of the annotation<ghcGet the name& of an annotation target if it exists.=ghc An empty annotation environment.>ghcWConstruct a new annotation environment that contains the list of annotations provided.?ghc,Add the given annotation to the environment.@ghc"Union two annotation environments.Aghc5Find the annotations attached to the given target as Sk values of your choice. If no deserializer is specified, only transient annotations will be returned.Bghc5Find the annotations attached to the given target as Sk values of your choice. If no deserializer is specified, only transient annotations will be returned.CghcDeserialize all annotations of a given type. This happens lazily, that is no deserialization will take place until the [a] is actually demanded and the [a] can also be empty (the UniqFM is not filtered).7ghc|The "payload" of an annotation allows recovery of its value at a given type, and can be persisted to an interface file23456789:;<=>?@ABC89:;74563<2>?@=ABC None YghcwAtomically update the reference. Does not force the evaluation of the new variable contents. For strict update, use Z.ZghcStrict variant of Y.\ghc2Perform a computation with a different environment]ghc1Perform a computation with an altered environment='&%~IJKLMNOPQRSTUVWXYZ[\]KLMIJ[\]NSTPQROUWVXYZANone"# i#ghc5Log message intended for compiler developers No fileline column stuff$ghc-Log messages intended for end users. No fileline column stuff.&ghcTSevWarning and SevError are used for warnings and errors o The message has a filelinercolumn heading, plus "warning:" or "error:", added by mkLocMessags o Output is intended for end users'ghcA wrapper around  which uses PprDump style.)ghc;Make a possibly annotated error message with location info.*ghc5Make an unannotated error message with location info.nghcCategorise error msgs by their importance. This is so each section can be rendered visually distinct. See Note [Error report] for where these come from.oghcPrimary error msg.pghc-Context e.g. "In the second argument of ...".qghc@Supplementary information, e.g. "Relevant bindings include ...".Sghc6This has the same text as errDocImportant . errMsgDoc.|ghcEverything is fine}ghc%A problem, and some indication of whyghc*If they aren't all valid, return the firstghc!A long (multi-line) error messageghc A short (one-line) error messageghc;Variant that doesn't care about qualified/unqualified namesghc!A long (multi-line) error messageghc A short (one-line) error messageghc;Variant that doesn't care about qualified/unqualified namesghca wrapper around 'F. First check whether the dump flag is set Do nothing if it is unsetghca wrapper around 'F. First check whether the dump flag is set Do nothing if it is unsetUnlike 0, has a printer argument but no header argumentSghc#Run an action with the handle of a @, if we are outputting to a file, otherwise R.ghcA wrapper around  which uses PprUser style.ghc`Write out a dump. If --dump-to-file is set then this goes to a file. otherwise emit to stdout.When hdrM is empty, we print in a more compact format (no separators and blank lines)The @/ is used only to choose the filename to use if --dump-to-file> is used; it is not used to decide whether to dump the outputSghc1Choose where to put a dump file based on DynFlagsSghc&Build a nice file name from name of a @ constructorghcTime a compilation phase.(When timings are enabled (e.g. with the -v2o flag), the allocations and CPU time used by the phase will be reported to stderr. Consider a typical usage: 3withTiming getDynFlags (text "simplify") force passY. When timings are enabled the following costs are included in the produced accounting,The cost of executing pass to a result r in WHNFThe cost of evaluating force r to WHNF (e.g. ())The choice of the force function depends upon the amount of forcing desired; the goal here is to ensure that the cost of evaluating the result is, to the greatest extent possible, included in the accounting provided by [. Often the pass already sufficiently forces its result during construction; in this case const () is a reasonable choice. In other cases, it is necessary to evaluate the result to normal form, in which case something like Control.DeepSeq.rnf is appropriate.To avoid adversely affecting compiler performance when timings are not requested, the result is only forced when timings are enabled.ghcLike  but with   rather then $ghcChecks if given m is a fatal warning.)ghcoptional annotationghcseverityghclocationghcmessageghcA means of getting a A (often  * will work here)ghcThe name of the phaseghc.A function to force the result (often either const () or rnf)ghc!The body of the phase to be timedN !"#$%&'()*mnopqruvwstxyz{|}~N{|}~ !"#$%&ruvwnopqmzxyst*)('3None>X Ughc map from  to  S3, plus the transitive closure of preload packages.ghc Retrieve the  from A; used in the hs-boot loop-breaker.ghcGiven a fully instantiated , improve it into a + if we can find it in the package database.ghc!The result of performing a lookupghc-Found the module uniquely, nothing else to doghc,Multiple modules with the same name in scopeghcNo modules found, but there were some hidden ones with an exact name match. First is due to package hidden, second is due to module being hiddenghcMNo modules found, but there were some unusable ones with an exact name matchghc6Nothing found, here are some suggested different namesSghcgFor each package, a mapping from uid -> i indicates that this package was brought into GHC by the ith  -package-db flag on the command line. We use this mapping to make sure we prefer packages that were defined later on the command line, if there is an ambiguity.Sghc'A reverse dependency index, mapping an  to the  s which have a dependency on it.ghc%The reason why a package is unusable.ghcWe ignored it explicitly using -ignore-package.ghchThis package transitively depends on a package that was never present in any of the provided databases.ghc[This package transitively depends on a package involved in a cycle. Note that the list of  reports the direct dependencies of this package that (transitively) depended on the cycle, and not the actual cycle itself (which we report separately at high verbosity.)ghcAThis package transitively depends on a package which was ignored.ghcbThis package transitively depends on a package which was shadowed by an ABI-incompatible package.Sghc A mapping of  to  SA. This list is adjusted so that only valid packages are here.  S5 reflects what was stored *on disk*, except for the 5_ flag, which is adjusted at runtime. (In particular, some packages in this map may have the 6 flag be R.)Sghc A mapping of  O to C. This is used when users refer to packages in Backpack includes.SghcOA mapping from wired in names to the original names from the package database.ghcThe packages we're going to link in eagerly. This list should be in reverse dependency order; that is, a package is always mentioned before the packages it depends on.ghcnPackages which we explicitly depend on (from a command line flag). We'll use this to generate version macros.ghcThis is a full map from   to all modules which may possibly be providing it. These providers may be hidden (but we'll still want to report them in error messages), or it may be an ambiguous import.Sghc A map, like $, but controlling plugin visibility.ghcA map saying, for each requirement, what interfaces must be merged together when we use them. For example, if our dependencies are p[A= A] and q[A= A,B=r[C= A]:B]*, then the interfaces to merge for A are p[A= A]:A, q[A= A,B=r[C= A]:B]:A and r[C= A]:C.?There's an entry in this map for each hole in our home library.Sghc Map from   to  4 to all the origins of the bindings in scope. The  PackageConfk is not cached, mostly for convenience reasons (since this is the slow path, we'll just look it up again).SghcS< records the various aspects of visibility of a particular .Sghc-Any custom renamings that should bring extra  s into scope.Sghc(The package name is associated with the 4. This is used to implement legacy behavior where -package foo-0.1& implicitly hides any packages named fooSghcTThe signatures which are contributed to the requirements context from this unit ID.Sghc^Whether or not this unit was explicitly brought into scope, as opposed to implicitly via the 6' fields in the package database (when -hide-all-packages is not passed.)Sghc map from  to a S.SghcThe set of transitively reachable packages according to the explicitly provided command line arguments. See Note [UnitId to InstalledUnitId improvement]Sghc map from ghcPackage state is all stored in Af, including the details of all packages, which packages are exposed, and which modules they provide.!The package state is computed by C, and kept in DynFlags. It is influenced by various package flags: -package pkg and  -package-id pkg cause  pkg to become exposed. If -hide-all-packagesk was not specified, these commands also cause all other packages with the same name to become hidden.-hide-package pkg causes  pkg to become hidden.=(there are a few more flags, check below for their semantics)/The package state has the following properties.Let exposedPackages/ be the set of packages thus exposed. Let depExposedPackages be the transitive closure from exposedPackages of their dependencies.`When searching for a module from a preload import declaration, only the exposed modules in exposedPackages are valid.KWhen searching for a module from an implicit import, all modules from depExposedPackages are valid.When linking in a compilation manager mode, we link in packages the program depends on (the compiler knows this list by the time it gets to the link step). Also, we link in all packages which were mentioned with preload -package flags on the command-line, or are a transitive dependency of same, or are "base"/"rts". The reason for this is that we might need packages which don't contain any Haskell modules, and therefore won't be discovered by the normal mechanism of dependency tracking.Given a module name, there may be multiple ways it came into scope, possibly simultaneously. This data type tracks all the possible ways it could have come into scope. Warning: don't use the record functions, they're partial!ghcModule is hidden, and thus never will be available for import. (But maybe the user didn't realize), so we'll still keep track of these modules.)ghc6Module is unavailable because the package is unusable.ghc7Module is public, and could have come from some places.ghc Just False) means that this module is in someone's exported-modules$ list, but that package is hidden;  Just True means that it is available; Nothing means neither applies.ghcXIs the module available from a reexport of an exposed package? There could be multiple.ghc<Is the module available from a reexport of a hidden package?ghcODid the module export come from a package flag? (ToDo: track more information.Sghc+Smart constructor for a module which is in exposed-modulesH. Takes as an argument whether or not the defining package is exposed.Sghc+Smart constructor for a module which is in reexported-modulesY. Takes as an argument whether or not the reexporting package is expsed, and also its  S.SghcASmart constructor for a module which was bound by a package flag.SghcIs the name from the import actually visible? (i.e. does it cause ambiguity, or is it only relevant when we're making suggestions?)Sghc~Are there actually no providers for this module? This will never occur except when we're filtering based on package imports.SghcEmpty package configuration mapghc=Find the package we know about with the given unit id, if anyghcA more specialized interface, which takes a boolean specifying whether or not to look for on-the-fly renamed interfaces, and just a  rather than a A. (so it can be used while we're initializing AghcAFind the package we know about with the given package name (e.g. fooP), if any (NB: there might be a locally defined unit name which overrides this)ghc<Search for packages with a given package ID (e.g. "foo-0.1")SghcEExtends the package configuration map with a list of package configs.ghcYLooks up the package with the given id in the package state, panicing if it is not foundghcGet a list of entries from the package database. NB: be careful with this function, although all packages in this map are "visible", this does not imply that the exposed-modules of the package are available (they may have been thinned or renamed).ghcCall this after %. It reads the package database files, and sets up various internal tables of package information, according to the package-related flags on the command-line (-package,  -hide-package etc.)Returns a list of packages to link in if we're doing dynamic linking. This list contains the packages that the user explicitly mentioned with -package flags.6 can be called again subsequently after updating the   field of the A, and it will update the   in A+ and return a list of packages to link in.ghc A little utility to tell if the H is indefinite (if it is not, we should never use on-the-fly renaming.)SghcLike Sp, but doesn't return a list of unmatched packages. Furthermore, any packages it returns are *renamed* if the UnitArg# has a renaming associated with it.Sghc Rename a  S( according to some module instantiation.SghcHThis sorts a list of packages, putting "preferred" packages first. See S# for the semantics of "preference".SghcReturns R if pkg should be preferred over pkg'J when picking which should be "active". Here is the order of preference:  First, prefer the latest version`If the versions are the same, prefer the package that came in the latest package database.Pursuant to #12518, we could change this policy to, for example, remove the version preference, meaning that we would always prefer the packages in later package database.Instead, we use that preference based policy only when one of the packages is integer-gmp and the other is integer-simple. This currently only happens when we're looking up which concrete package to use in place of integer-wired-inh and that two different package databases supply a different integer library. For more about the fake integer-wired-in1 package, see Note [The integer library] in the  PrelNames module.Sghc;Compute the reverse dependency index of a package database.SghcGiven a list of Is to remove, a database, and a reverse dependency index (as computed by Sv), remove those packages, plus any packages which depend on them. Returns the pruned database, as well as a list of  Ss that was removed.SghcGiven a  S from some S, return all entries in I> which correspond to packages that do not exist in the index.SghcGiven a  S from some S return all entries in HK which correspond to packages that do not exist, OR have mismatching ABIs.SghcGiven a list of databases, merge them together, where packages with the same unit id in later databases override earlier ones. This does NOT check if the resulting database makes sense (that's done by S).SghcValidates a database, removing unusable packages from it (this includes removing packages that the user has explicitly ignored.) Our general strategy: 2Remove all broken packages (dangling dependencies)#Remove all packages that are cyclicApply ignore flags9Remove all packages which have deps with mismatching ABIsghcGiven a wired-in , "unwire" it into the 2 that it was recorded as in the package database.Sghc-Makes the mapping from module to package infoSghcMake a S% covering a set of unusable packages.Sghc.Add a list of key/value pairs to a nested map. The outer map is processed with  to prevent memory leaks when reloading modules in GHCi (see Trac #4029). This ensures that each value is forced before installing into the map.Sghc!Create a singleton module mappingghcBFind all the include directories in these and the preload packagesghc<Find all the library paths in these and the preload packagesghcFind all the link options in these and the preload packages, returning (package hs lib options, extra library options, other flags)Sghc Either the C or B as appropriate for the way.ghcAFind all the C-compiler options in these and the preload packagesghcFFind all the package framework paths in these and the preload packagesghcAFind all the package frameworks in these and the preload packagesghcTakes a  T, and if the module is in any package returns list of modules which take that name.ghc Find all the  S# in both the preload packages from A# and corresponding to the list of  Ssghc Will the ( come from a dynamically linked library?ghc Show (very verbose) package infoghcShow simplified package info.The idea is to only print package id, and any information that might be different from the package databases (exposure, trust)ghc4Show the mapping of modules to where they come from.zSRMQPONLKJIHGFEDCBA@?>=<;:98765 O P Q R S T U V W X Y Z [HhNone ghc!Read in assembly file and processSghc4These are the rewrites that the mangler will performSghcbRewrite a line of assembly source with the given rewrites, taking the first rewrite that applies.SghcThis rewrites .type$ annotations of function symbols to %object+. This is done as the linker can relocate  %functions through the Procedure Linking Table (PLT). This is bad since we expect that the info table will appear directly before the symbol's location. In the case that the PLT is used, this will be not an info table but instead some random PLT garbage.SghcThis rewrites aligned AVX instructions to their unaligned counterparts on x86-64. This is necessary because the stack is not adequately aligned for aligned AVX spills, so LLVM would emit code that adjusts the stack pointer and disable tail call optimization. Both would be catastrophic here so GHC tells LLVM that the stack is 32-byte aligned (even though it isn't) and then rewrites the instructions in the mangler.SghcreplaceOnce match replace bs1 replaces the first occurrence of the substring match in bs with replace.SghcVThis function splits a line of assembly code into the label and the rest of the code.iNone < ghcmUsed when a temp file is created. This determines which component Set of FilesToClean will get the temp fileghcSA file with lifetime TFL_CurrentModule will be cleaned up at the end of upweep_modghcOA file with lifetime TFL_GhcSession will be cleaned up at the end of runGhc(T)ghcDelete all files in filesToClean dflags.ghcDelete all files in filesToClean dflags. That have lifetime TFL_CurrentModule. If a file must be cleaned eventually, but must survive a cleanCurrentModuleTempFiles, ensure it has lifetime TFL_GhcSession.ghc7Ensure that new_files are cleaned on the next call of  or j, depending on lifetime. If any of new_files are already tracked, they will have their lifetime updated.ghcoUpdate the lifetime of files already being tracked. If any files are not being tracked they will be discarded.ghcQCreate and use a temporary directory in the system standard temporary directory.Behaves exactly the same as G, except that the parent temporary directory will be that returned by S.ghc%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: 4withTempDirectory "src" "sdist." $ \tmpDir -> do ...The tmpDir: will be a new subdirectory of the given directory, e.g.  src/sdist.342.ghcDirectory name template. See  openTempFile.ghc#Callback that can use the directoryghc)Temp directory to create the directory inghcDirectory name template. See  openTempFile.ghc#Callback that can use the directory  jNone 5ghc Version of &System.Process.readProcessWithExitCode> that takes a key-value tuple to insert into the environment.ghcBRun a command, placing the arguments in an external response file.This command is used in order to avoid overlong command line arguments on Windows. The command line arguments are first written to an external, temporary response file, and then passed to the linker via @filepath. response files for passing them in. See: 'https://gcc.gnu.org/wiki/Response_Files -https://ghc.haskell.org/trac/ghc/ticket/10777 ghcstdoutghc program pathghc program argsghcaddition to the environmentghc(exit_code, stdout, stderr)          kNoneX   lNone OSghc A sectionSghcName of the sectionSghcContent of the sectionSghc Description of the section tableSghc'offset of the table describing sectionsSghc%size of an entry in the section tableSghcnumber of sectionsSghc<index of a special section which contains section's namesSghc ELF headerThe ELF header indicates the native word size (32-bit or 64-bit) and the endianness of the target machine. We directly store getters for words of different sizes as it is more convenient to use. We also store the word size as it is useful to skip some uninteresting fields.Other information such as the target machine and OS are left out as we don't use them yet. We could add them in the future if we ever need them.Sghc(Get a Word16 with the correct endiannessSghc(Get a Word32 with the correct endiannessSghc7Get a Word with the correct word size and endiannessSghcWord size in bytesSghcRead the ELF headerSghcRead the ELF section tableTghcRead a ELF sectionTghc:Find a section from its name. Return the section contents.0We do not perform any check on the section type.!ghc8Given a section name, read its contents as a ByteString.OIf the section isn't found or if there is any parsing error, we return NothingTghcread a Note as a ByteStringIf you try to read a note from a section which does not support the Note format, the parsing is likely to fail and Nothing will be returned"ghcread a Note as a StringIf you try to read a note from a section which does not support the Note format, the parsing is likely to fail and Nothing will be returned#ghc.Generate the GAS code to create a Note sectionGHeader fields for notes are 32-bit long (see Note [ELF specification]).It seems there is no easy way to force GNU AS to generate a 32-bit word in every case. Hence we use .int directive to create them: however "The byte order and bit size of the number depends on what kind of target the assembly is for." (https:/sourceware.orgbinutilsdocsas/Int.html#Int)If we add new target platforms, we need to check that the generated words are 32-bit long, otherwise we need to use platform specific directives to force 32-bit .int in asWord32.Tghc8runGet in IO monad that throws an IOException on failure!"#!"#mNone E$%&'()*+,-/01.23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghE289:;<=>?@ABCD67534EFGIHKJ)*+,-/01.PQSRLMONTUefgh$%&'(VWXYZ[\]^_`abcdnNone # qghc$The operation to perform atomically.ghceMachine-level primops; ones which we can reasonably delegate to the native code generators to handle.)Most operations are parameterised by the )r that they operate on. Some operations have separate signed and unsigned versions, and float and integer versions. ghcReturns Re if the MachOp has commutable arguments. This is used in the platform-independent Cmm optimisations.If in doubt, return RM. This generates worse code on the native routes, but is otherwise harmless.!ghcReturns R$ if the MachOp is associative (i.e. (x+y)+z == x+(y+z)=) This is used in the platform-independent Cmm optimisations.If in doubt, return RM. This generates worse code on the native routes, but is otherwise harmless."ghcReturns R if the MachOp is a comparison.fIf in doubt, return False. This generates worse code on the native routes, but is otherwise harmless.#ghcReturns Just w6 if the operation is an integer comparison with width w, or Nothing otherwise.&ghc.Returns the MachRep of the result of a MachOp.'ghcThis function is used for debugging only: we can check whether an application of a MachOp is "type-correct" by checking that the MachReps of its arguments are the same as the MachOp expects. This is used when linting a CmmExpr.*ghcThe alignment of a memcpy-ish operation.qrstuvwxyz{|}~      !"#$%&'()* !"#&'%$     xyz{|}~)(*qrstuvwoNone ) 123456789:; :;891234567pNone :0<ghc&A bitmap represented by a sequence of  s on the target architecture. These are used for bitmaps in info tables and other generated code which need to be emitted as sequences of StgWords.=ghc%Make a bitmap from a sequence of bits>ghc0Make a bitmap where the slots specified are the ones in the bitmap. eg. [0,1,3], size 4 ==> 0xb. The list of Ints must be already sorted.?ghc0Make a bitmap where the slots specified are the zeros in the bitmap. eg. [0,1,3], size 4 ==> 0x4X (we leave any bits outside the size as zero, just to make the bitmap easier to read). The list of Ints must& be already sorted and duplicate-free.@ghcMagic number, must agree with BITMAP_BITS_SHIFT in InfoTables.h. Some kinds of bitmap pack a size/bitmap into a single word if possible, or fall back to an external pointer when the bitmap is too large. This value represents the largest size of bitmap that can be packed into a single word.>ghc size in bitsghcsorted indices of ones?ghc size in bitsghc*sorted indices of zeros free of duplicates<=>?@A<=>?@AqNone2 UBghcA collection of C& - several things that are "available"Cghc2Records what things are "available", i.e. in scopeDghcAn ordinary identifier in scopeEghcA type or class in scopeThe AvailTC Invariant=: If the type or class is itself to be in scope, it must be first in this list. Thus, typically: AvailTC Eq [Eq, ==, \/=] []FghcCompare lexicographicallyKghcmJust the main name made available, i.e. not the available pieces of type or class brought into scope by the  GenAvailInfoLghcYAll names made available by the availability information (excluding overloaded selectors)MghcYAll names made available by the availability information (including overloaded selectors)NghcCNames for non-fields made available by the availability informationOghc5Fields made available by the availability informationQghcCs made available by the availability information, paired with the  used to refer to each one.When DuplicateRecordFields is in use, the 5 may be the mangled name of a record selector (e.g.  $sel:foo:MkT ) while the & will be the label of the field (e.g. foo).,See Note [Representing fields in AvailInfo].Sghc trims an C to keep only a single nameTghcfilters Cs by the given predicateUghc filters an C by the given predicateVghc Combines Cs from the same family avails may have several items with the same availName E.g import Ix( Ix(..), index ) will give Ix(Ix,index,range) and Ix(index) We want to combine these; addAvail does thatYghc/Used when deciding if the interface has changedEghcThe name of the type or classghcBThe available pieces of type or class, excluding field selectors.ghcMThe record fields of the type (see Note [Representing fields in AvailInfo]).BCDEFGHIJKLMNOPQRSTUVBCDEGHIJKLNMOPQFRSUTVrNone2 c#[ghcImport Item Specification'Describes import info a particular Name\ghc4The import had no import list, or had a hiding list]ghc$The import had an import list. The ^ field is True iff the thing was named  explicitlyT in the import specs rather than being imported as part of a "..." group. Consider: import C( T(..) )Here the constructors of T! are not named explicitly; only T is named explicitly.`ghc Import Declaration SpecificationGDescribes a particular import declaration and is shared among all the  Provenances for that declbghcModule imported, e.g.  import Muggle Note the Muggle5 may well not be the defining module for this thing!cghcImport alias, e.g. from as M (or Muggle if there is no as clause)dghcWas this import qualified?eghc-The location of the entire import declarationfghcImport SpecificationThe fv of something says how it came to be imported It's quite elaborate so that we can give accurate unused-name warnings.jghcwThe children of a Name are the things that are abbreviated by the ".." notation in export lists. See Note [Parents]mghc$See Note [Parents for record fields]pghcGlobal Reader ElementAn element of the vtghcTrue  = the thing was defined locallyughcIn scope through these importsvghcGlobal Reader Environment Keyed by 3; when looking up a qualified name we look up the  part, and then check the  Provenance to see if the appropriate qualification is valid. This saves routinely doubling the size of the env by adding both qualified and unqualified names to the domain.~The list in the codomain is required because there may be name clashes These only get reported on lookup, not on constructionEINVARIANT 1: All the members of the list have distinct r$ fields; that is, no duplicate Names>INVARIANT 2: Imported provenance => Name is an ExternalName However LocalDefs can have an InternalName. This happens only when type-checking a [d| ... |] Template Haskell quotation; see this note in RnNames Note [Top-level Names in Template Haskell decl quotes]^INVARIANT 3: If the GlobalRdrEnv maps [occ -> gre], then greOccName gre = occNB: greOccName gre is usually the same as nameOccName (gre_name gre), but not always in the case of record seectors; see greOccNamewghcLocal Reader Environment3This environment is used to store local bindings (let, where , lambda, case). It is keyed by OccName, because we never use it for qualified names We keep the current mapping, *and* the set of all Names in scope Reason: see Note [Splicing Exact names] in RnEnvxghc Reader NameqDo not use the data constructors of RdrName directly: prefer the family of functions that creates them, such as `Note: A Located RdrName will only have API Annotations if it is a compound one, e.g.  `bar` ( ~ )t : t , t '(' or '[' or '[:' , t ')' or ']' or ':]',, t '`' , t t,yghcUnqualified name1Used for ordinary, unqualified occurrences, e.g. x, y or Foo. Create such a x with zghcQualified name)A qualified name written by the user in source code. The module isn't necessarily the module where the thing is defined; just the one from which it is imported. Examples are Bar.x, Bar.y or Bar.Foo. Create such a x with {ghc Original name$An original name; the module is the defining module. This is used when GHC generates code that will be fed into the renamer (e.g. from deriving clauses), but where we want to say "Use Prelude.map dammit". One of these can be created with |ghc Exact nameWe know exactly the . This is used: ,When the parser parses built-in syntax like [] and (,), but wants a x from it8By Template Haskell, when TH has generated a unique nameSuch a x can be created by using  on a ghcMake a qualified x& in the given namespace and where the   and the G are taken from the first and second elements of the tuple respectivelyghcmake a vp where all the elements point to the same Provenance (useful for "hiding" imports, or imports with no details).ghcTakes a list of distinct GREs and folds them into AvailInfos. This is more efficient than mapping each individual GRE to an AvailInfo and the folding using R& but needs the uniqueness assumption.ghcLook for precisely this w in the environment. This tests whether it is in scope, ignoring anything else that might be in scope with the same .ghcLook for a particular record field selector in the environment, where the selector name and field label may be different: the GlobalRdrEnv is keyed on the label. See Note [Parents for record fields] for why this happens.ghcLook for precisely this ! in the environment, but with an % that might differ from that of the . See ' and Note [Parents for record fields].ghc>Test if an unqualified version of this thing would be in scopeghc2Takes a list of GREs which have the right OccName x: Pick those GREs that are in scope * Qualified, as 4 if want_qual is Qual M _ * Unqualified, as x if want_unqual is Unqual _Return each such GRE, with its ImportSpecs filtered, to reflect how it is in scope qualified or unqualified respectively. See Note [GRE filtering]ghcPick GREs that are in scope *both* qualified *and* unqualified Return each GRE that is, as a pair (qual_gre, unqual_gre) These two GREs are the original GRE with imports filtered to express how it is in scope qualified an unqualified respectivelySUsed only for the 'module M' item in export list; see RnNames.exports_from_availghc>Apply a transformation function to the GREs for these OccNamesghcIs in scope unqualified?ghc,Is in scope qualified with the given module?ghcZPrint out one place where the name was define/imported (With -dppr-debug, print them all)ghc$Display info about the treatment of RX under NoStarIsType.%With StarIsType, three properties of RX hold:f(a) it is not an infix operator (b) it is always in scope (c) it is a synonym for Data.Kind.TypeHowever, the user might not know that he's working on a module with NoStarIsType and write code that still assumes (a), (b), and (c), which actually do not hold in that module.[Violation of (a) shows up in the parser. For instance, in the following examples, we have RX! not applied to enough arguments:data A :: * data F :: * -> *_Violation of (b) or (c) show up in the renamer and the typechecker respectively. For instance:type K = Either * BoolThis will parse differently depending on whether StarIsType is enabled, but it will parse nonetheless. With NoStarIsType it is parsed as a type operator, thus we have ((*) Either Bool). Now there are two cases to consider: There is no definition of (*) in scope. In this case the renamer will fail to look it up. This is a violation of assumption (b).There is a definition of the (*) type operator in scope (for example coming from GHC.TypeNats). In this case the user will get a kind mismatch error. This is a violation of assumption (c).LThe user might unknowingly be working on a module with NoStarIsType or use RX as 8O out of habit. So it is important to give a hint whenever an assumption about RXn is violated. Unfortunately, it is somewhat difficult to deal with (c), so we limit ourselves to (a) and (b). generates an appropriate hint to the user depending on the extensions enabled in the module and the name that triggered the error. That is, if we have NoStarIsType and the error is related to RXg or its Unicode variant, the resulting SDoc will contain a helpful suggestion. Otherwise it is empty.g[\]^_`acdebfghijklmnopqrstuvwxzy{|}~gxzy{|}~wvpqrstujklmnofghi`acdeb[\]^_VNone nopy M N      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~pnoy M N      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~sNone       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDMNOPEFGHIJKLQRSTUVWXYZ[\]^_`acefghijlbdmnorpqstuvwxkyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~tNone2 5@Lghc<Some template haskell tokens have two variants, one with an e the other not:  [| or [e| [|| or [e|| This type indicates whether the e is present or not.ghcCertain tokens can have alternate representations when unicode syntax is enabled. This flag is attached to those tokens in the lexer so that the original source representation can be reproduced in the corresponding  ApiAnnotationghc  : E, ,, T b May have  when in a listghcsomething beginning '-- |'ghcsomething beginning '-- ^'ghcsomething beginning '-- $' ghca section heading ghc(doc options (prune, ignore-exports, etc) ghccomment starting by "--" ghccomment in {- -} ghcAPI Annotations exist so that tools can perform source to source conversions of Haskell code. They are used to keep track of the various syntactic keywords that are not captured in the existing AST.SThe annotations, together with original source comments are made available in the pm_annotations field of !. Comments are only retained if Opt_KeepRawTokenStream is set in %% before parsing.*The wiki page describing this feature is 4https://ghc.haskell.org/trac/ghc/wiki/ApiAnnotationsNote: in general the names of these are taken from the corresponding token, unless otherwise noted See note [Api annotations] above for details of the usageghc!ghc'`'ghccase or lambda caseghc'#)' or '#-}' etcghc'|)'ghc'|)', unicode variantghc'}'ghc'|]'ghc'|]', unicode variantghc')'ghc']'ghcas a list separator ghcin a RdrName for a tuple!ghc'=>'"ghc'=>', unicode variant$ghc'::'%ghc'::', unicode variant)ghcS*ghc'..'0ghcUnicode variant2ghcRfor function name in matches where there are multiple equations for the function.4ghc for CType9ghc'infix' or 'infixl' or 'infixr'<ghc'<-'=ghc'<-', unicode variant@ghcRYCghc;where a name loses its location in the AST, this carries itEghc'(#' or '{-# LANGUAGE' etcFghc'(|'Gghc'(|', unicode variantHghc'{'Ighc'[e|' or '[e||'Jghc'[|'Kghc'[|', unicode variantLghc'('Mghc'$('Nghc'$$('Oghc'['Tghc'->'Ughc'->', unicode variantYghc';'Zghc'''\ghcstatic_ghcR`ghcaghc double '''bghc'~'dghc() for typesfghc e.g. INTEGERgghc*String value, will need quotes when outputhghc'|'ighcviakghc-<lghc-<, unicode variantmghc'->'nghc'->', unicode variantoghc-<<pghc-<<, unicode variantqghc>>-rghc>>-, unicode variantvghcRetrieve a list of annotation s based on the E of the annotated AST element, and the known type of the annotation.wghcRetrieve a list of annotation s based on the p of the annotated AST element, and the known type of the annotation. The list is removed from the annotations.xghc/Retrieve the comments allocated to the current Note: A given < may appear in multiple AST elements, beware of duplicatesyghc/Retrieve the comments allocated to the current ', and remove them from the annotationszghc;Convert a normal annotation into its unicode equivalent one}     E4fcb !"#$%&'()*+,-./012356789:;<=>?@ABCDFGHIJKLMNOPQRSTUVWXYZ[\]^_`adeghijklmnopqrstuvwxyz}vwxyut E4fcb !"#$%&'()*+,-./012356789:;<=>?@ABCDFGHIJKLMNOPQRSTUVWXYZ[\]^_`adeghijklmnopqrs    zuNoneF_ n!ghcEncapsulated call to addAnnotation, requiring only the SrcSpan of the AST construct the annotation belongs to; together with the AnnKeywordId, this is the key of the annotation map.'This type is useful for places in the parser where it is not yet known what SrcSpan an annotation should be added to. The most common situation is when we are parsing a list: the annotations need to be associated with the AST element that *contains* the list, not the list itself.  lets us defer adding the annotations until we finish parsing the list and are now parsing the enclosing element; we then apply the ' to associate the annotations. Another common situation is where a common fragment of the AST has been factored out but there is no separate AST node for this fragment (this occurs in class and data declarations). In this case, the annotation belongs to the parent data declaration.The usual way an  is created is using the mjD ("make jump") function, and then it can be discharged using the ams function.ghcVarious boolean flags, mostly language extensions, that impact lexing and parsing. Note that a handful of these can change during lexing/parsing.ghcIf this is enabled, '{- LINE ... - }' and '{- COLUMN ... ^-}' update the internal position. Otherwise, those pragmas are lexed as tokens of their own.TghclFor reasons of efficiency, boolean parsing flags (eg, language extensions or whether we are currently in a RULE2 pragma) are represented by a bitmap stored in a Word64.ghcThe subset of the A used by the parser. See  or  for ways to construct this.Tghc'key of package currently being compiledTghcbitmap of permitted extensionsTghcDo we want to generate ';' layout tokens? In some cases we just want to generate '}', e.g. in MultiWayIf we don't need ';'s because '|'# separates alternatives (unlike a `case`G expression where we need ';' to as a separator between alternatives).pghc (|qghc |)rghc -<sghc >-tghc -<<ughc >>-vghcType application '@'$ (lexed differently than as-pattern '@',, due to checking for preceding whitespace)wghc*Used when the lexer can't make sense of itxghcend of file tokenyghcsomething beginning -- |zghcsomething beginning -- ^{ghcsomething beginning -- $|ghca section heading}ghc(doc options (prune, ignore-exports, etc)~ghccomment starting by "--"ghccomment in {- -}TghcTest whether a   is setghc5Check if a given flag is currently set in the bitmap.ghc1Given exactly the information needed, set up the ghc0Extracts the flag information needed for parsingghcCreates a parse state from a A valueghcCreates a parse state from a  valueghcFGiven a location and a list of AddAnn, apply them all to the location.ghcGiven a  that surrounds a HsPar or HsParTy , generate O values for the opening and closing bordering on the start and end of the spanT ghcGo through the  comment_q in PState; and remove all comments that belong within the given spanghcwarnings flags enabledghc%permitted language extensions enabledghc'key of package currently being compiledghcare safe imports on?ghckeeping Haddock comment tokensghckeep regular comment tokensghcIf this is enabled, '{- LINE ... - }' and '{- COLUMN ... ]-}' update the internal position kept by the parser. Otherwise, those pragmas are lexed as  and  tokens.      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~vNone wwNone2=>?` s&ghcVariable BinderA  is the binder of a ForAllTy It's convenient to define this synonym here rather its natural home in TyCoRep, because it's used in DataCon.hs-bootA  is a binder with only TyVarghc Argument Flag3Is something required to appear in source Haskell (), permitted by request (X) (visible type application), or prohibited entirely from appearing in source Haskell (P)? See Note [VarBndrs, TyCoVarBinders, TyConBinders, and visibility] in TyCoRepT ghc,Not exported: may be discarded as dead code.T ghcExported: kept aliveT ghcIdentifier ScopeghcVariableEssentially a typed ?, that may also contain some additional information about the  and its use sites.T ghcTKey for fast comparison Identical to the Unique in the name, cached here for speedghcThe type or kind of the  in questionghcType or Coercion VariableghcEquality VariableghcImplicit parameter IdentifierghcDictionary IdentifierghcDictionary Function IdentifierghcEvidence VariableghcEvidence Identifierghc Kind Variableghc Type Variableghc*Type variable that might be a metavariableghcType or Kind VariableghcType or kind VariableghcghcCoercion Variableghc IdentifierghcCompare Vars by their Uniques. This is what Ord Var does, provided here to make it explicit at the call-site that it can introduce non-determinism. See Note [Unique Determinism]ghc Does this 1 classify an argument that is written in Haskell?ghc Does this 5 classify an argument that is not written in Haskell?ghc.Do these denote the same level of visibility? C arguments are visible, others are not. So this function equates  and . Used for printing.ghcMake a named binderghcMake a named binder var should be a type variableghcMake many named bindersghc<Make many named binders Input vars should be type variablesghc Exported "s will not be removed as dead codeghcIf it's a local, make it globalghcExports the given local . Can also be called on global Ms, such as data constructors and class operations, which are born as global s and automatically exportedghcWe can only do this to LocalIdsghc returns True% for type variables as well as local ws These are the variables that we need to pay attention to when finding free variables, or doing dependency analysis.ghc returns True of s and es that must have a binding in this module. The converse is not quite right: there are some global vs that must have bindings, such as record selectors. But that doesn't matter, because it's only used for assertionsghcisExportedIdVar means "don't throw this away"WWyNone,12>HV Gghc Follow the id+, but never beyond Name. This is used in a HsMatchContext&, for printing messages related to a MatchGHHG|None,.12=>?@ACHVg I Ughc1Constraint type to bundle up the requirement for x on both the id and the G type for itVghceProvide a summary constraint that gives all am Outputable constraint to extension points needing oneWghcKA constraint capturing all the extension points that can be converted via instance Convertable a aXghcConversion of annotations from one type index to another. This is required where the AST is converted from one pass to another, and the extension values need to be brought along if possible. So for example a  SourceText is converted via S=, but needs a type signature to keep the type checker happy.qghchHelper to apply a constraint to all extension points. It has one entry per extension point type family.ghchHelper to apply a constraint to all extension points. It has one entry per extension point type family.ghcMarks that a field uses the GhcRn variant even when the pass parameter is GhcTc. Useful for storing HsTypes in HsExprs, say, because HsType GhcTc should never occur.ghc*Maps the "normal" id type for a given passghc+Used as a data type index for the hsSyn ASTghc"used as place holder in TTG valuesghc=Used when constructing a term with an unused extension point.mUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~m~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZXYWVU~None12>HV RghcImported or Exported WildcardghcImported or exported entity.ghcImported or Exported Variableghc+Imported or exported Thing with Absent list+The thing is a Class/Type (can't tell) - ts : t, t,tghc8Imported or exported Thing with All imported or exportedThe thing is a Class"Type and the All refers to methods constructorsts : t , t,t#, tghc:Imported or exported Thing With given imported or exportedThe thing is a Class/Type and the imported or exported things are methods/constructors and record fields; see Note [IEThingWith] - ts : t%, t%, t%, tghc$Imported or exported module contents (Export Only)ts : tghcDoc section headingghcSome documentationghcReference to named docghcLocated Import or Exportghc(Located name with possible adornment - ts : t , tghcA name in an import or export specification which may have adornments. Used primarily for accurate pretty printing of ParsedSource, and API Annotation placement.ghcno extraghc pattern Xghc type (:+:)ghcImport DeclarationA single Haskell import declaration.ghctstt, t for ideclSourcet,t, t,t, tt,t, t) attached to location in ideclHidingghc Module name.ghcPackage qualifier.ghcTrue  = {-# SOURCE #-} importghcTrue => safe importghcTrue => qualifiedghc$True => implicit import (of Prelude)ghc as Moduleghc(True => hiding, names)ghcLocated Import DeclarationghcWhen in a list this may havet : tghcWhen in a list this may havet : t**None2 LghcTA Cost Centre Stack is something that can be attached to a closure. This is either:$the current cost centre stack (CCCS)Xa pre-defined cost centre stack (there are several pre-defined CCSs, see below). ghcThe flavour of a cost centre.wIndex fields represent 0-based indices giving source-code ordering of centres with the same module, name, and flavour.!ghcAuto-generated top-level thunk"ghcExplicitly annotated expression#ghc Explicitly annotated declaration$ghcGenerated by HPC for coverage&ghcA Cost Centre is a single {- SCC -} annotation.)ghchTwo cost centres may have the same name and module but different SrcSpans, so we need a way to distinguish them easily and give them different object-code labels. So every CostCentre has an associated flavour that indicates how it was generated, and flavours that allow multiple instances of the same name and module have a deterministic 0-based index.*ghcName of the cost centre itself+ghc Name of module defining this CC.Tghc Extract the index from a flavour/ghc.Is this a cost-centre which records scc counts0ghc)Is this a cost-centre which can be sccd ?=ghcPrint a flavour in CoreTghcPrint a flavour's index in CoreTghc(Print the flavour component of a C labelTghc.Print the flavour index component of a C label# #!"$%&'()*+,-./0123456789:;<=>?@#&'()*+,% #!"$56789;234<:./01=>?@-None &'.12HIX$Rghc,For now, we work only with nominal equality.WghccoaxrProves returns Nothing when it doesn't like the supplied arguments. When this happens in a coercion that means that the coercion is ill-formed, and Core Lint checks for that.Xghc-A more explicit representation for `t1 ~ t2`.gghcA g: is a "coercion constructor", i.e. a named equality axiom.zghcThe  [CoAxBranch]O passed into the mapping function is a list of all previous branches, reversedDMNPQORSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Dtsruopqvwxyzghijklmn]^_`abcdef{|}~YZ[\RSTUVWXMNPQONoneNone rghc+Deterministic Type or Coercion Variable SetghcDeterministic Type Variable SetghcDeterministic Identifier SetghcDeterministic Variable SetghcType or Coercion Variable SetghcCoercion Variable SetghcType Variable SetghcIdentifier Setghc A non-deterministic Variable Set<A non-deterministic set of variables. See Note [Deterministic UniqFM] in UniqDFM for explanation why it's not deterministic and why it matters. Use DVarSet if the set eventually gets converted into a list or folded over in a way where the order changes the generated code, for example when abstracting variables. ghc5map the function over the list, and union the resultsghcDetermines the pluralisation suffix appropriate for the length of a set in the same way that plural from Outputable does for lists.ghcPretty-print a non-deterministic set. The order of variables is non-deterministic and for pretty-printing that shouldn't be a problem. Having this function helps contain the non-determinism created with nonDetEltsUFM. Passing a list to the pretty-printing function allows the caller to decide on the order of Vars (eg. toposort them) without them having to use nonDetEltsUFM at the call site. This prevents from let-binding non-deterministically ordered lists and reusing them where determinism matters.ghc5Map the function over the list, and union the results"ghcTrue if empty intersection#ghcTrue if non-empty intersection.ghc2Partition DVarSet according to the predicate given/ghc'Delete a list of variables from DVarSet1ghc"Add a list of variables to DVarSet2ghcAConvert a DVarSet to a VarSet by forgeting the order of insertion3ghctransCloVarSet for DVarSetghcThe things to be pretty printedghc4The pretty printing function to use on the elementsghc+ where the things have been pretty printedH      !"#$%&'()*+,-./0123H     1 !#"$%/&(,+')*3-0.2NoneQ4ghc'Deterministic Type Variable Environment5ghc$Deterministic Identifier Environment6ghc"Deterministic Variable Environment7ghcCoercion Variable Environment8ghc%Type or Coercion Variable Environment9ghcType Variable Environment:ghcIdentifier Environment;ghcVariable Environment<ghcTidy EnvironmentKWhen tidying up print names, we keep a mapping of in-scope occ-names (the +) and a Var-to-Var of the current renamings=ghcRename Environment 2When we are comparing (or matching) types or terms, we are faced with "going under" corresponding binders. E.g. when comparing: \x. e1 ~ \y. e2Basically we want to rename [x -> y] or [y -> xH], but there are lots of things we must be careful of. In particular, x might be free in e2 , or y in e1[. So the idea is that we come up with a fresh binder that is free in neither, and rename x and y, respectively. That means we must maintain: 'A renaming for the left-hand expression)A renaming for the right-hand expressionsAn in-scope setVFurthermore, when matching, we want to be able to have an 'occurs check', to prevent: \x. f ~ \y. ymatching with [f -> y]. So for each expression we want to know that set of locally-bound variables. That is precisely the domain of the mappings 1. and 2., but we must ensure that we always extend the mappings as we go in.-All of this information is bundled up in the =>ghcA set of variables that are in scope at some point "Secrets of the Glasgow Haskell Compiler inliner" Section 3.2 provides the motivation for this abstraction.GghcLook up a variable the >N. This lets you map from the variable's identity (unique) to its full value.KghcuniqAway in_scope vK finds a unique that is not used in the in-scope set, and gives that to v.PghcRetrieve the left mappingQghcRetrieve the right mappingRghcApplies SE to several variables: the two variable lists must be of equal lengthSghcrnBndr2 env bL bR goes under a binder bL5 in the Left term, and binder bR, in the Right term. It finds a new binder, new_b&, and returns an environment mapping  bL -> new_b and  bR -> new_bTghc Similar to S= but returns the new variable as well as the new environmentUghc Similar to S7 but used when there's a binder on the left side only.Vghc Similar to S8 but used when there's a binder on the right side only.Wghc Similar to U5 but used for eta expansion See Note [Eta expansion]Xghc Similar to S5 but used for eta expansion See Note [Eta expansion]]ghc?Look up the renaming of an occurrence in the left or right term^ghc?Look up the renaming of an occurrence in the left or right term_ghc?Look up the renaming of an occurrence in the left or right term`ghc?Look up the renaming of an occurrence in the left or right termaghc)Tells whether a variable is locally boundbghc)Tells whether a variable is locally bounddghc$Wipe the left or right side renamingeghc$Wipe the left or right side renamingfghc"swap the meaning of left and righto456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~o;:978ikmnopqyrstzluvwx{}~j|654>?AEBCD@GHIFKJ=LSRT]^ab_`UVdefYZ[\MWXNOcPQ<gh.None=? ghcXTyCons represent type constructors. Type constructors are introduced by things such as:1) Data declarations: data Foo = ... creates the Foo type constructor of kind *2) Type synonyms: type Foo = ... creates the Foo type constructor 3) Newtypes: newtype Foo a = MkFoo ... creates the Foo type constructor of kind * -> *4) Class declarations: class Foo where creates the Foo type constructor of kind *zThis data type also encodes a number of primitive, built in type constructors such as those for function and tuple types.ghc Is this the   for an unboxed tuple?ghc Does this   represent a tuple?NB: when compiling  Data.Tuple, the tycons won't reply True to , because they are built as  AlgTyCons`. However they get spat into the interface file as tuple tycons, so I don't think it matters.ghcPaints a picture of what a  U represents, in broad strokes. This is used towards more informative error messages.ghc e.g., the (->)  .ghcA  is an abstraction of a type. It contains information that the code generator needs in order to pass arguments, return results, and store values of this type.ghcUnlifted pointerghcSigned, 8-bit valueghcSigned, 16-bit valueghcSigned, word-sized valueghcUnsigned, word-sized valueghc-Signed, 64 bit value (with 32-bit words only)ghcUnsigned, 8 bit valueghcUnsigned, 16 bit valueghc/Unsigned, 64 bit value (with 32-bit words only)ghcA pointer, but not) to a Haskell value (use '(Un)liftedRep')ghcA vectorghc;Information pertaining to the expansion of a type synonym (type)ghcnRepresents an open type family without a fixed right hand side. Additional instances can appear at any time.7These are introduced by either a top level declaration: data family T a :: *COr an associated data type declaration, within a class declaration: !class C a b where data T b :: *ghc"An open type synonym family e.g. type family F x y :: * -> *ghc$A closed type synonym family e.g. &type family F x where { F Int = Bool }ghcWA closed type synonym family declared in an hs-boot file with type family F a where ..ghc0Built-in type family used by the TypeNats solverghc+An ordinary type constructor has no parent.ghcAn unboxed type constructor. The TyConRepName is a Maybe since we currently don't allow unboxed sums to be Typeable since there are too many of them. See #13276.ghc\Type constructors representing a class dictionary. See Note [ATyCon for classes] in TyCoRepghcMType constructors representing an *instance* of a *data* family. Parameters:1) The type family in question*2) Instance types; free variables are the  of the current  X (not the family one). INVARIANT: the number of types matches the arity of the family  3) A CoTyConD identifying the representation type with the type instance familyghcMSome promoted datacons signify extra info relevant to GHC. For example, the IntRep constructor of  RuntimeRep corresponds to the  constructor of H. This data structure allows us to store this information right in the  6. The other approach would be to look up things like  RuntimeRep's PrimRep by known-key every time.ghcan ordinary promoted data conghcA constructor of  RuntimeRepX. The argument to the function should be the list of arguments to the promoted datacon.ghcA constructor of VecCountghcA constructor of VecElemghcRepresents right-hand-sides of  s for algebraic typesghcSays that we know nothing about this data type, except that it's represented by a pointer. Used when we export a data type abstractly into an .hi file.ghcInformation about those  s derived from a dataE declaration. This includes data types with no constructors at all.ghcAn unboxed sum type.ghcInformation about those  s derived from a newtype declarationghcaThe data type constructors; can be empty if the user declares the type to have no constructors'INVARIANT: Kept in order of increasing / tag (see the tag assignment in mkTyConTagMap)ghcCached value: length data_consghcJCached value: is this an enumeration type? See Note [Enumeration types]ghcThe unique constructor for the newtype. It has no existentialsghc.Is this a boxed, unboxed or constraint tuple?ghccCached value: the argument type of the constructor, which is just the representation type of the   (remember that newtypeEs do not exist at runtime so need a different representation type). The free s of this type are the  from the corresponding  ghc Same as the 0, but this time eta-reduced. Hence the list of ?s in this field may be shorter than the declared arity of the  .TghcThe function type constructor, (->)Tghc"Algebraic data types, from - data declarations - newtype declarations - data instance declarations - type instance declarations - the TyCon generated by a class declaration - boxed tuples - unboxed tuples - constraint tuples All these constructors are lifted and boxed except unboxed tuples which should have an  parent. Datanewtypetype families are handled by T. See  for more information.TghcRepresents type synonymsTghcHRepresents families (both type and data) Argument roles are all NominalTghcZPrimitive types; cannot be defined in Haskell. This includes the usual suspects (such as Int#0) as well as foreign-imported types and kinds (*, #, and ?)Tghc%Represents promoted data constructor.TghcTThese exist only during type-checking. See Note [How TcTyCons work] in TcTyClsDeclsghc[A Unique of this TyCon. Invariant: identical to Unique of Name stored in tyConName field.ghcName of the constructorghc Full bindersghc Result kindghcKind of this TyConghcArityghc TyVar bindersTghciThe role for each type variable This list has length = tyConArity See also Note [TyCon Role signatures]ghcJThe C type that should be used for this type when using the FFI and CAPITghcWas the data type declared with GADT syntax? If so, that doesn't mean it's a true GADT; only that the "where" form was used. This field is used only to guide pretty-printingTghcThe "stupid theta" for the data type (always empty for GADTs). A "stupid theta" is the context to the left of an algebraic type declaration, e.g. Eq a in the declaration data Eq a => T a ....TghcGContains information about the data constructors of the algebraic typeghc,Maps a label to information about the fieldTghc'Gives the class or family declaration   for derived  8s representing class or family instances, respectively.Tghc8Contains information about the expansion of the synonymghcvName of result type variable, used for pretty-printing with --show-iface and for reifying TyCon in Template HaskellTghcVType family flavour: open, closed, abstract, built-in. See comments for FamTyConFlavT ghcFor *associated* type/data families The class tycon in which the family is declared See Note [Associated families and their parent class]T!ghcgis this a type family injective in its type variables? Nothing if no injectivity annotation was givenT"ghcYMost primitive tycons are unlifted (may not contain bottom) but other are lifted, e.g.  RealWorld Only relevant if tyConKind = *T#ghcCorresponding data constructorT$ghcSee comments with ghc4Scoped tyvars over the tycon's body See Note [How TcTyCons work] in TcTyClsDecls Order *does* matter: for TcTyCons with a CUSK, it's the correct dependency order. For TcTyCons without a CUSK, it's the original left-to-right that the user wrote. Nec'y for getting Specified variables in the right order.ghc#Original, user-written tycon tyvarsghc$Is this TcTyCon already generalized?T%ghc What sort of   this represents. ghcMake a Required TyConBinder. It chooses between NamedTCB and AnonTCB based on whether the tv is mentioned in the dependent set ghcBoth type classes as well as family instances imply implicit type constructors. These implicit type constructors refer to their parent structure (ie, the class or family from which they derive) using a type of the following form.Extract those s that we are able to learn about. Note that visibility in this sense does not correspond to visibility in the context of any particular user program!T&ghcChecks the invariants of a / given the appropriate type class name, if any ghcMake a  for the Typeable* representation of the given wired-in type ghc^The name (and defining module) for the Typeable representation (TyCon) of a type constructor.&See Note [Grand plan for Typeable] in  TcTypeable in TcTypeable. ghcThe size of a  in bytes.cThis applies also when used in a constructor, where we allow packing the fields. For instance, in data Foo = Foo Float Float the two fields will take only 8 bytes, which for 64-bit arch will be equal to 1 word. See also mkVirtHeapOffsetsWithPadding for details of how data fields are layed out. ghcJReturn if Rep stands for floating type, returns Nothing for vector types. ghc-The labels for the fields of this particular  T'ghc-The labels for the fields of this particular  ghc(Look up a field label belonging to this  T(ghc^Make a map from strings to FieldLabels from all the data constructors of this algebraic tycon ghcYGiven the name of the function type constructor and it's kind, create the corresponding  . It is recommended to use 6 if you want this functionality ghc#This is the making of an algebraic  . Notably, you have to pass in the generic (in the -XGenerics sense) information about the type constructor - you can get hold of it easily (see Generics module) ghcSimpler specialization of   for classes ghcmMakes a tycon suitable for use during type-checking. It stores a variety of details about the definition of the TyCon, but no right-hand side. It lives only during the type-checking of a mutually-recursive group of tycons; it is then zonked to a proper TyCon in zonkTcTyCon. See also Note [Kind checking recursive type and class declarations] in TcTyClsDecls. !ghcCreate an unlifted primitive   , such as Int#. "ghcKind constructors #ghcCreate a lifted primitive   such as  RealWorld $ghcCreate a type synonym  %ghcCreate a type family  &ghc#Create a promoted data constructor   Somewhat dodgily, we give it the same Name as the data constructor itself; when we pretty-print the TyCon we add a quote; see the Outputable TyCon instance 'ghc Test if the  8 is algebraic but abstract (invisible data constructors) (ghcMake a fake, recovery  8 from an existing one. Used when recovering from errors )ghc Does this  7 represent something that cannot be defined in Haskell? *ghcIs this  i unlifted (i.e. cannot contain bottom)? Note that this can only be true for primitive and unboxed-tuple  s +ghcReturns True if the supplied   resulted from either a data or newtype declaration ,ghcReturns True9 for vanilla AlgTyCons -- that is, those created with a data or newtype declaration. -ghcReturns True for data types that are  definitelyT represented by heap-allocated constructors. These are scrutinised by Core-level case: expressions, and they get info tables allocated for them.-Generally, the function will be true for all data types and false for newtype1s, unboxed tuples, unboxed sums and type family  &s. But it is not guaranteed to return True in all cases that it could.%NB: for a data type family, only the instance  2s get an info table. The family declaration   does not .ghc . is true of   s for which this property holds (where X is the role passed in): If (T a1 b1 c1) ~X (T a2 b2 c2), then (a1 ~X1 a2), (b1 ~X2 b2), and (c1 ~X3 c2) (where X1, X2, and X3, are the roles given by tyConRolesX tc X) See also Note [Decomposing equality] in TcCanonical /ghc / is true of  s for which this property holds (where X is the role passed in): If (T tys ~X t), then (t's head ~X T). See also Note [Decomposing equality] in TcCanonical 0ghc Is this an  of a  M that is generative and injective with respect to representational equality? 1ghcIs this   that for a newtype 2ghcTake a   apart into the s it scopes over, the nR it expands into, and (possibly) a coercion from the representation type to the newtype . Returns Nothing if this is not possible. 7ghc Is this a  * representing a regular H98 type synonym (type)? :ghcTrue iff we can decompose (T a b c) into ((T a b) c) I.e. is it injective and generative w.r.t nominal equality? That is, if (T a b) ~N d e f, is it always the case that (T ~N d), (a ~N e) and (b ~N f)? Specifically NOT true of synonyms (open and otherwise)It'd be unusual to call mightBeUnsaturatedTyCon on a regular H98 type synonym, because you should probably have expanded it first But regardless, it's not decomposable ;ghcIs this an algebraic   declared with the GADT syntax? <ghcIs this an algebraic  ( which is just an enumeration of values? =ghc Is this a  ., synonym or otherwise, that defines a family? >ghc Is this a  >, synonym or otherwise, that defines a family with instances? ?ghcIs this a synonym  1 that can have may have further instances appear? @ghcIs this a synonym  1 that can have may have further instances appear? Aghc"Is this an open type family TyCon? Bghc0Is this a non-empty closed type family? Returns R( for abstract or empty closed families. Cghc C tc returns  is is tc is an injective tycon (where is states for which  tc is injective), or  otherwise. Eghc%Is this TyCon for an associated type? FghcDGet the enclosing class TyCon (if there is one) for the given TyCon. GghcJGet the enclosing class TyCon (if there is one) for the given TyConFlavour Ighc Is this the   for a boxed tuple? Jghc Is this the   for an unboxed sum? Kghc Is this the   for a promoted tuple? LghcIs this a PromotedDataCon? Mghc<Retrieves the promoted DataCon if this is a PromotedDataCon; NghckIs this tycon really meant for use at the kind level? That is, should it be permitted without -XDataKinds?T)ghcLThese TyCons should be allowed at the kind level, even without -XDataKinds. PghcIdentifies implicit tycons that, in particular, do not go into interface files (because they are implicitly reconstructed when the interface is read). Note that:tAssociated families are implicit, as they are re-constructed from the class declaration in which they reside, andFamily instances are not? implicit as they represent the instance body (similar to a dfun! does that for a class instance).Tuples are implicit iff they have a wired-in name (namely: boxed and unboxed tupeles are wired-in and implicit, but constraint tuples are not) RghcAIs this a TcTyCon? (That is, one only used during type-checking?) SghcCould this TyCon ever be levity-polymorphic when fully applied? True is safe. False means we're sure. Does only a quick check based on the TyCon's category. Precondition: The fully-applied TyCon has kind (TYPE blah) Tghc)Expand a type synonym application, if any Ughc/Check if the tycon actually refers to a proper `data` or  `newtype`W with user defined constructors rather than one from a class or other construction. VghcAs  WO, but returns the empty list of constructors if no constructors could be found WghcDetermine the s originating from the given   , if the  d is the sort that can have any constructors (note: this does not include abstract algebraic types) Xghc If the given   has a single data constructor, i.e. it is a data/ type with one alternative, a tuple type or a newtype, then that constructor is returned. If the  ] has more than one constructor, or represents a primitive or function type constructor then Nothing5 is returned. In any other case, the function panics [ghc-Determine the number of value constructors a   has. Panics if the   is not algebraic or a tuple \ghc Extract an F with information about data constructors from an algebraic or tuple  . Panics for any other sort of  ]ghc@Extract type variable naming the result of injective type family ^ghc8Get the list of roles for the type parameters of a TyCon _ghcGExtract the bound type variables and type expansion of a type synonym  . Panics if the   is not a synonym `ghcThe number of type parameters that need to be passed to a newtype to resolve it. May be less than in the definition if it can be eta-contracted. aghcWExtract the bound type variables and type expansion of an eta-contracted type synonym  . Panics if the   is not a synonym bghc Extracts the newtype coercion from such a  5, which can be used to construct something with the newtypeHs type from its representation type (right hand side). If the supplied   is not a newtype , returns Nothing eghcFind the "stupid theta" of the  V. A "stupid theta" is the context to the left of an algebraic type declaration, e.g. Eq a in the declaration data Eq a => T a ... fghc Extract the Ys bound by a vanilla type synonym and the corresponding (unsubstituted) right hand side. gghcNExtract the information pertaining to the right hand side of a type synonym (type) declaration. hghcVExtract the flavour of a type family (with all the extra information that it carries) ighcIs this   that for a class instance? jghcIf this  N is that for a class instance, return the class it is for. Otherwise returns Nothing kghc#Return the associated types of the  , if any lghcIs this  ! that for a data family instance? nghcIf this  m is that of a data family instance, return the family in question and the instance types. Otherwise, return Nothing oghcIf this  - is that of a data family instance, return a  u which represents a coercion identifying the representation type with the type instance family. Otherwise, return Nothing pghc Extract any  from this TyCon sghcCan this flavour of   appear unsaturated? tghcIs this flavour of  & an open type family or a data family? vghc Initialise a  with  w. wghc8The default upper bound (100) for the number of times a  is allowed to encounter each  . xghc1Change the upper bound for the number of times a  is allowed to encounter each  . zghcReturns whether or not this  d is definite, or a hole that may be filled in at some later point. See Note [Skolem abstract data] ghcBinders of the  ghc Result kindghcThe roles for each TyVarghc>The C type this type corresponds to when using the CAPI FFIghcStupid theta: see Tghc#Information about data constructorsghc0What flavour is it? (e.g. vanilla, type family)ghcWas the   declared with GADT syntax? ghcResult kind of the  ghcArity of the tuple  ghc%Whether the tuple is boxed or unboxed ghcKind of the resulting  ghcArity of the sumghcs scoped over: see  ghcuser-written tycon tyvarsghcresult kind onlyghcDScoped type variables; see Note [How TcTyCons work] in TcTyClsDeclsghc$Is this TcTyCon generalised already?ghc What sort of   this represents !ghcresult kind, never levity-polymorphic "ghcresult kind #ghcresult kindT*ghcresultd kind, never levity-polymorphic (If you need a levity-polymorphic PrimTyCon, change isTcLevPoly.) $ghcresult kind %ghcresult kind Tghc Arguments to  ghc Returns a u substitution, the body type of the synonym (not yet substituted) and any arguments remaining from the application  YZ[\                           ! " # $ % & ' ( ) * + , - . / 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   YZ[\               ! " #    $ % & + , i l ) I J K 7 : L M N O 8 9 - 4 5 6 < 1 ' = > ? @ A B C D * ; . / 0 E F G P U R S z  Q V W X Y Z [ e ^ r H j k n m o ] f g h \ _ ` a 2 3 d p  q T ( c b u s t         v w x y{None=?P`Sghc3A kind of universal type, used for types and kinds. Any time a Type0 is pretty-printed, it is first converted to an SM before being printed. See Note [Pretty printing via IfaceSyn] in PprTyThingTghc;Stores the arguments in a type application as a list. See &Note [Suppressing invisible arguments]. ghcShow forall flag1Unconditionally show the forall quantifier with (  ) or when ( Y) the names used are free in the binder or when compiling with -fprint-explicit-foralls. ghc!See Note [Holes in IfaceCoercion] ghc@The various types of TyCons which have special, built-in syntax. ghca regular tycon ghce.g.  (a, b, c) or (a, b, c)p. The arity is the tuple width, not the tycon arity (which is twice the width in the case of unboxed tuples). ghce.g.  (a | b | c) ghcA heterogeneous equality TyCon (i.e. eqPrimTyCon, eqReprPrimTyCon, heqTyCon) that is actually being applied to two types of the same kind. This affects pretty-printing only: see Note [Equality predicates in IfaceType] ghcMake an N from an  . ghc Extract an O from an N. ghc"Extract the variable name from an N. ghc Extract an O from an  . ghc"Extract the variable name from an  .T+ghcDefault  variables to  LiftedPtr. e.g. U($) :: forall (r :: GHC.Types.RuntimeRep) a (b :: TYPE r). (a -> b) -> a -> b  turns in to, - ($) :: forall a (b :: *). (a -> b) -> a -> bWe do this to prevent RuntimeRep variables from incurring a significant syntactic overhead in otherwise simple type signatures (e.g. ($)). See Note [Defaulting RuntimeRep variables] and #11549 for further discussion. ghcLike  , but always uses an explicit forall.!ghc;Render the "forall ... ." or "forall ... ->" bit of a type.T,ghcRender the ... in (forall ... .) or (forall ... ->)]. Returns both the list of not-yet-rendered binders and the doc. No anonymous binders here!T-ghcPrefix a space if the given S is a promoted  1. See Note [Printing promoted type constructors]T.ghcMPretty-print a type-level equality. Returns (Just doc) if the argument is a  saturated| application of eqTyCon (~) eqPrimTyCon (~#) eqReprPrimTyCon (~R#) heqTyCon (~~)[See Note [Equality predicates in IfaceType] and Note [The equality types story] in TysPrimT/ghcPretty-prints an application of a type constructor to some arguments (whose visibilities are known). This is polymorphic (over aC) since we use this function to pretty-print two different things:  Types (from !`)Coercions (from !)! ghciPrints "(C a, D b) =>", including the arrow. Used when we want to print a context in a type, so we use Q to decide whether to parenthesise a singleton predicate; e.g. Num a => a -> a! ghcPrints a context or ()- if empty You give it the context precedenceT0ghcif printing coercionsghc otherwiseT,ghc*visibility of the first binder in the list{NO P Q R S T !!!!!!!!!! ! { S P R Q T O N ! ! !!!!! !!!! None2456=?X$!#ghcScope of a type variable.%This warrants a data type apart from !&6 because of complexities introduced by features like -XScopedTypeVariables and -XInstanceSigs. For example, consider: "foo, bar, baz :: forall a. a -> a Here a' is in scope in all the definitions of foo, bar, and baz, so we need a list of scopes to keep track of this. Furthermore, this list cannot be computed until we resolve the binding sites of foo, bar, and baz.Consequently, a starts with an !% [foo, bar, baz] Nothing# which later gets resolved into a !$.!%ghc4Unresolved scopes should never show up in the final .hie file!+ghctype or data family!,ghc type synonym!-ghcdata declaration!.ghcconstructor declaration!/ghcpattern synonym!0ghcclass declaration!1ghcinstance declaration!:ghcTypes of imports and exports!?ghc0Different contexts under which identifiers exist!@ghcregular variable!Bghc import/export!Dghc Value binding!EghcPattern binding{This case is tricky because the bound identifier can be used in two distinct scopes. Consider the following example (with -XViewPatterns) 'do (b, a, (a -> True)) <- bar foo a The identifier a% has two scopes: in the view pattern  (a -> True) and in the rest of the do -block in foo a.!Gghc Declaration!Hghc Type variable!Ighc Record field!Jghc,Information associated with every identifierWe need to include types with identifiers because sometimes multiple identifiers occur in the same span(Overloaded Record Fields and so on)!Pghc'The information stored in one AST node.The type parameter exists to provide flexibility in representation of types (see Note [Efficient serialization of redundant type info]).!Rghc=(name of the AST node constructor, name of the AST node Type)!Sghc'The Haskell types of this node, if any.!Tghc%All the identifiers and their details!Zghc*Mapping from filepaths (represented using ) to the corresponding AST!]ghcnA list of type arguments along with their respective visibilities (ie. is this an argument that would return R for isVisibleArgFlag?).!_ghc(Roughly isomorphic to the original core Type.!bghcA flattened version of Type.9See Note [Efficient serialization of redundant type info]!hghctype with constraint: t1 => t2 (see  )!mghcNGHC builds up a wealth of information about Haskell source as it compiles it. .hie files are a way of persisting some of this information to disk so that external tools that need to work with haskell source don't need to parse, typecheck, and rename all over again. These files contain:a simplified AST3nodes are annotated with source positions and types0identifiers are annotated with scope information+the raw bytes of the initial Haskell source#Besides saving compilation cycles, .hie; files also offer a more stable interface than the GHC API.!oghc Initial Haskell source file path!pghcThe module this HIE file is for!qghcTypes referenced in the !r.9See Note [Efficient serialization of redundant type info]!rghc$Type-annotated abstract syntax trees!sghc"The names that this module exports!tghc'Raw bytes of the initial Haskell source!vghcCurrent version of .hie files!%ghc3names of the definitions over which the scope spansghc|the location of the instance/class declaration for the case where the type variable is declared in a method type signature!Dghc,whether or not the binding is in an instanceghc#scope over which the value is boundghcspan of entire binding!Eghcscope in the pattern9 (the variable bound can be used further in the pattern)ghc%rest of the scope outside the patternghcspan of entire binding!Gghctype of declarationghcspan of entire bindingT!#!%!$!&!)!(!'!*!1!0!/!.!-!,!+!2!4!3!5!9!8!7!6!:!>!=!<!;!?!I!H!G!F!E!D!C!B!A!@!J!K!M!L!N!O!P!Q!T!S!R!U!V!Y!X!W!Z![!\!]!^!_!`!a!b!k!j!i!h!g!f!e!d!c!l!m!n!t!s!q!p!o!r!u!vT!u!v!m!n!t!s!q!p!o!r!l!b!k!j!i!h!g!f!e!d!c!a!_!`!]!^!Z![!\!U!V!Y!X!W!P!Q!T!S!R!O!N!J!K!M!L!?!I!H!G!F!E!D!C!B!A!@!:!>!=!<!;!5!9!8!7!6!2!4!3!*!1!0!/!.!-!,!+!&!)!(!'!#!%!$None!ghc.Predicate on possible free variables: returns True! iff the variable is interesting!ghcRun a free variable computation, returning a list of distinct free variables in deterministic order and a non-deterministic set containing those variables.!ghceRun a free variable computation, returning a list of distinct free variables in deterministic order.!ghcRun a free variable computation, returning a deterministic set of free variables. Note that this is just a wrapper around the version that returns a deterministic list. If you need a list you should use !.!ghcRun a free variable computation, returning a non-deterministic set of free variables. Don't use if the set will be later converted to a list and the order of that list will impact the generated code.!ghctAdd a variable - when free, to the returned free variables. Ignores duplicates and respects the filtering function.!ghcReturn no free variables.!ghc%Union two free variable computations.!ghc5Mark the variable as not free by putting it in scope.!ghc%Mark many free variables as not free.!ghc#Filter a free variable computation.!ghcBMap a free variable computation over a list and union the results.!ghc&Union many free variable computations.!ghc|Add multiple variables - when free, to the returned free variables. Ignores duplicates and respects the filtering function.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!6None2`_ddghcA collection of fseghc0The key type representing kinds in the compiler.fghcA type of the form p of kind  Constraint9 represents a value whose type is the Haskell predicate p/, where a predicate is what occurs before the => in a Haskell type.We use fK as documentation to mark those types that we guarantee to have this kind.0It can be expanded into its representation, but:(The type checker must treat it as opaque1The rest of the compiler treats it as transparentConsider these examples: ]f :: (Eq a) => a -> Int g :: (?x :: Int -> Int) => a -> Int h :: (r\l) => {r} => {l::Int | r} Here the Eq a and ?x :: Int -> Int and rl are all called "predicates"gghcRA semantically more meaningful type to represent what may or may not be a useful l.hghcA hF represents an argument to a function. TyCoBinders can be dependent (!) or nondependent (!;). They may also be visible or not. See Note [TyCoBinders]jghcType & coercion substitutiontcvsubst_invariant* The following invariants must hold of a j: The in-scope set is needed only* to guide the generation of fresh uniquesIn particular, the kind; of the type variables in the in-scope set is not relevantqThe substitution is only applied ONCE! This is because in general such application will not reach a fixed point.kghcOFor simplicity, we have just one UnivCo that represents a coercion from some type to some other type, with (in general) no restrictions on the type. The UnivCoProvenance specifies more exactly what the coercion really is and why a program should (or shouldn't!) trust the coercion. It is reasonable to consider each constructor of k as a totally independent coercion form; their only commonality is that they don't tell you what types they coercion between. (That info is in the ! constructor of l.lghcA lC is concrete evidence of the equality/convertibility of two types.mghc_A global typecheckable-thing, essentially anything that has a name. Not to be confused with a  TcTyThingH, which is also a typecheckable thing but in the *local* context. See TcEnv for how to retrieve a m given a .oghcIs this the type ?!ghcA substitution of ls for s!ghcA substitution of ns for s and es for s!ghcIA coercion to be filled in by the type-checker. See Note [Coercion holes]!ghcFrom  unsafeCoerce#. These are unsound.!ghc>See Note [Phantom coercions]. Only in Phantom roled coercions!ghcFrom the fact that any two coercions are considered equivalent. See Note [ProofIrrelProv]. Can be used in Nominal or Representational coercions!ghceFrom a plugin, which asserts that this coercion is sound. The string is for the use of the plugin.!ghc;See Note [Coercion holes] Only present during typechecking!ghc! is like h, but there can only be  in the ! field.!ghcA type labeled !t might have knot-tied tycons in it. See Note [Type checking recursive type and class declarations] in TcTyClsDecls!ghc;Vanilla type or kind variable (*never* a coercion variable)!ghc+Type application to something other than a   . Parameters:1) Function: must not be a ! or !, must be another !, or ! See Note  EQ1 Respecting definitional equality about the no ! requirement2) Argument type!ghcApplication of a  , including newtypes and1 synonyms. Invariant: saturated applications of FunTyCon must use !C and saturated synonyms must use their own constructors. However,  unsaturated FunTyCons do appear as !s. Parameters:%1) Type constructor being applied to.2) Type arguments. Might not have enough type arguments here to saturate the constructor. Even type synonyms are not necessarily saturated; for example unsaturated type synonyms can appear as the right hand side of a type synonym.!ghc A  type.!ghc4t1 -> t2 Very common, so an important special case!ghc/Type literals are similar to type constructors.!ghcA kind cast. The coercion is always nominal. INVARIANT: The cast is never refl. INVARIANT: The Type is not a CastTy (use TransCo instead) See Note  EQ2 Respecting definitional equality and (EQ3)!ghcInjection of a Coercion into a type This should only ever be used in the RHS of an AppTy, in the list of a TyConApp, when applying a promoted GADT data constructor"ghc3The key representation of types within the compiler"ghcIRemove the binder's variable from the set, if the binder has a variable." ghc,Does this binder bind an invisible argument?" ghc)Does this binder bind a visible argument?" ghcTIf its a named binder, is the binder a tyvar? Returns True for nondependent binder."ghcMake an arrow type"ghcMake nested arrow types"ghcIf tv is a coercion variable and it is not used in the body, returns a FunTy, otherwise makes a forall type. See Note [Unused coercion variable in ForAllTy]"ghcLike "b, but does not check the occurrence of the binder See Note [Unused coercion variable in ForAllTy]"ghc/Wraps foralls over the type using the provided s from left to rightT1ghcLike "1, but does not check the occurrence of the binder"ghcLike "1, but does not check the occurrence of the binder"ghcZCreate the plain type constructor type which has been applied to no type arguments at all."ghcIExtract the RuntimeRep classifier of a type from its kind. For example, kindRep * = LiftedRepF; Panics if this is not possible. Treats * and Constraint as the same"ghcLGiven a kind (TYPE rr), extract its RuntimeRep classifier rr. For example,  kindRep_maybe * = Just LiftedRep Returns RJ if the kind is not of form (TYPE rr) Treats * and Constraint as the same"ghcThis version considers Constraint to be the same as *. Returns True if the argument is equivalent to Type/Constraint and False otherwise. See Note [Kind Constraint and kind Type]"ghcReturns True if the kind classifies unlifted types and False otherwise. Note that this returns False for levity-polymorphic kinds, which may be specialized to a kind that classifies unlifted types."!ghcIs a tyvar of type ?")ghc]Generates an in-scope set from the free variables in a list of types and a list of coercions"*ghc".] that returns free variables of a type in a deterministic set. For explanation of why using 9 is not deterministic see Note [Deterministic FV] in FV."+ghc".] that returns free variables of a type in deterministic order. For explanation of why using 9 is not deterministic see Note [Deterministic FV] in FV.T2ghcqReturns free variables of types, including kind variables as a non-deterministic set. For type synonyms it does not expand the synonym.",ghcmReturns free variables of types, including kind variables as a deterministic set. For type synonyms it does not expand the synonym."-ghczReturns free variables of types, including kind variables as a deterministically ordered list. For type synonyms it does not expand the synonym.".ghcThe worker for ". and tyCoFVsOfTypeList$. The previous implementation used  which is O(n+m) and can make the function quadratic. It's exported, so that it can be composed with other functions that compute free variables. See Note [FV naming conventions] in FV.nEta-expanded because that makes it run faster (apparently) See Note [FV eta expansion] in FV for explanation."3ghc6Get a deterministic set of the vars free in a coercion";ghcGiven a covar and a coercion, returns True if covar is almost devoid in the coercion. That is, covar can only appear in Refl and GRefl. See last wrinkle in Note [Unused coercion variable in ForAllCo] in Coercion"<ghc Returns the free variables of a n3 that are in injective positions. For example, if F& is a non-injective type family, then: 9injectiveTyVarsOf( Either c (Maybe (a, F b c)) ) = {a,c} If "< ty = itvs, then knowing ty fixes itvs. More formally, if a is in "< ty and S1(ty) ~ S2(ty), then S1(a) ~ S2(a) , where S1 and S2 are arbitrary substitutions.See ENote [When does a tycon application need an explicit kind signature?]."=ghcDoes a   (that is applied to some number of arguments) need to be ascribed with an explicit kind signature to resolve ambiguity if rendered as a source-syntax type? (See ENote [When does a tycon application need an explicit kind signature?]; for a full explanation of what this function checks for.)">ghcReturns True if this type has no free variables. Should be the same as isEmptyVarSet . tyCoVarsOfType, but faster in the non-forall case."?ghcReturns True if this coercion has no free variables. Should be the same as isEmptyVarSet . tyCoVarsOfCo, but faster in the non-forall case.T3ghcReturns True if this UnivCoProv has no free variables. Should be the same as isEmptyVarSet . tyCoVarsOfProv, but faster in the non-forall case."Bghc(compose env1 env2)(x) is  env1(env2(x)) ; i.e. apply env2 then env14. It assumes that both are idempotent. Typically, env1* is the refinement to a base substitution env2"CghcbComposes two substitutions, applying the second one provided first, like in function composition."Hghc@Make a TCvSubst with specified tyvar subst and empty covar subst"Ighc@Make a TCvSubst with specified covar subst and empty tyvar subst"MghccReturns the free variables of the types in the range of a substitution as a non-deterministic set."aghc#Generates the in-scope set for the j@ from the types in the incoming environment. No CoVars, please!"bghc#Generates the in-scope set for the jA from the types in the incoming environment. No TyVars, please!"dghc#Generates the in-scope set for the j@ from the types in the incoming environment. No CoVars, please!"gghcType substitution, see "a"hghcType substitution, see "a . Disables sanity checks. The problems that the sanity checks in substTy catch are described in Note [The substitution invariant]. The goal of #11371 is to migrate all the calls of substTyUnchecked to substTy and remove this function. Please don't use in new code."ighc.Substitute tyvars within a type using a known >. Pre-condition: the in_scopeh set should satisfy Note [The substitution invariant]; specifically it should include the free vars of tys , and of ty minus the domain of the subst."jghcCoercion substitution, see "a"kghcCoercion substitution, see "a . Disables sanity checks. The problems that the sanity checks in substCo catch are described in Note [The substitution invariant]. The goal of #11371 is to migrate all the calls of substCoUnchecked to substCo and remove this function. Please don't use in new code."lghcSubstitute covars within a type"mghcType substitution, see "a"nghcType substitution, see "a"oghcSubstitute within a n after adding the free variables of the type to the in-scope set. This is useful for the case when the free variables aren't already in the in-scope set or easily available. See also Note [The substitution invariant]."pghc When calling "r it should be the case that the in-scope set in the substitution is a superset of the free vars of the range of the substitution. See also Note [The substitution invariant]."qghc`This checks if the substitution satisfies the invariant from Note [The substitution invariant]."rghcSubstitute within a na The substitution has to satisfy the invariants described in Note [The substitution invariant]."sghcSubstitute within a n disabling the sanity checks. The problems that the sanity checks in substTy catch are described in Note [The substitution invariant]. The goal of #11371 is to migrate all the calls of substTyUnchecked to substTy and remove this function. Please don't use in new code."tghcSubstitute within several nbs The substitution has to satisfy the invariants described in Note [The substitution invariant]."ughcSubstitute within several ns disabling the sanity checks. The problems that the sanity checks in substTys catch are described in Note [The substitution invariant]. The goal of #11371 is to migrate all the calls of substTysUnchecked to substTys and remove this function. Please don't use in new code."vghcSubstitute within a da The substitution has to satisfy the invariants described in Note [The substitution invariant]."wghcSubstitute within a d disabling the sanity checks. The problems that the sanity checks in substTys catch are described in Note [The substitution invariant]. The goal of #11371 is to migrate all the calls of substThetaUnchecked to substTheta and remove this function. Please don't use in new code."|ghcSubstitute within a la The substitution has to satisfy the invariants described in Note [The substitution invariant]."}ghcSubstitute within a l disabling sanity checks. The problems that the sanity checks in substCo catch are described in Note [The substitution invariant]. The goal of #11371 is to migrate all the calls of substCoUnchecked to substCo and remove this function. Please don't use in new code."~ghcSubstitute within several lbs The substitution has to satisfy the invariants described in Note [The substitution invariant].T4ghcLike ", but disables sanity checks. The problems that the sanity checks in substCo catch are described in Note [The substitution invariant]. The goal of #11371 is to migrate all the calls of substCoUnchecked to substCo and remove this function. Please don't use in new code.T5ghcLike ", but disables sanity checks. The problems that the sanity checks in substTy catch are described in Note [The substitution invariant]. The goal of #11371 is to migrate all the calls of substTyUnchecked to substTy and remove this function. Please don't use in new code.T6ghcSubstitute a tyvar in a binding position, returning an extended subst and a new tyvar. Use the supplied function to substitute in the kindT7ghcSubstitute a covar in a binding position, returning an extended subst and a new covar. Use the supplied function to substitute in the kind"ghc;Print a user-level forall; see Note [When to print foralls]"ghcdebugPprType is a simple pretty printer that prints a type without going through IfaceType. It does not format as prettily as the normal route, but it's much more direct, and that can be useful for debugging. E.g. with -dppr-debug it prints the kind on type-variable  occurrences1 which the normal route fundamentally cannot do."ghc#Display all kind information (with -fprint-explicit-kinds) when the provided R argument is R. See 'Note [Kind arguments in error messages] in TcErrors."ghcQThis tidies up a type for printing in an error message, or in an interface file.;It doesn't change the uniques at all, just the print names."ghc Add the free Is to the env in tidy form, so that we can tidy the type they are free in"ghc Treat a new t as a binder, and give it a fresh tidy name using the environment if one has not already been allocated. See also ""ghc:Grabs the free type variables, tidies them and then uses " to work over the type itself"ghcCalls "= on a top-level type (i.e. with an empty tidying environment)"=ghcWShould specified binders count towards injective positions in the kind of the TyCon?ghcThe number of args the   is applied to.ghcDoes  T t_1 ... t_n need a kind signature? (Where n is the number of arguments)T6ghc"Use this to substitute in the kind bcdefg!!h!!i!!j!k!!!!l!!!!!!!!!!!!!!!!!!m""""n!!!!!!!!opqst!!!!!!!!!!!!"""""" " " " " """"""""""""""""""" "!"""#"$"%"&"'"(")"*"+","-"."/"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"{"|"}"~"""""""""""""""""""""""""""""""""""""""""""""""""""""""" m"""""""n!!!!!!!!i!!"e!fdl!!!!!!!!!!!!!!!!!!k!!!!!!!!"""#c!!!g!!!b""""""""""""""""""" o"!h!!!"" " " " " p"""""""""""""""q""st""""""$"*"%","/"1"0"."+"2"-"7"8"9":"&"'"3"5"6"4"(";"<"=">"?j!!!"@"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"^"]"_"`"e"f")"a"b"c"d"g"l"m"n"j"r"o"s"u"w"h"}"k"i"t"v"{"|"~"""""""""""x"y"z""""q"p""""""""""""""""""""""3Nonem"ghc Primitive  s that are defined in GHC.Prim but not exposed. It's important to keep these separate as we don't want users to be able to write them (see Trac #15209) or see them in GHCi's :browse output (see Trac #12023)."ghc Primitive  *s that are defined in, and exported from, GHC.Prim."ghcThe (->) type constructor. ^(->) :: forall (rep1 :: RuntimeRep) (rep2 :: RuntimeRep). TYPE rep1 -> TYPE rep2 -> * "ghcGGiven a RuntimeRep, applies TYPE to it. see Note [TYPE and RuntimeRep]"ghc Convert a  to a n> of kind RuntimeRep Defined here to avoid (more) module loops""""""""""""""""""""""""""""""""""""""""""""""""""""""########## # # # # ################### #!#"###$#%#&#'#(#)#*#+#,#-#.#/#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#{#|#}#~######"""""""""""""""""""""""""""""""""""""""#""##"# # "##"##"##"#!# ########"#'#/#*#0#+#1#-#2#(#3#)#4#,#5#.#6#7#8#9#:#;#<#=#>#?#@#A#B#D#C#E#F#H#G##"## "##"##"##"##"# # "##"#$#%#&#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#{#|#}#~######9Nonez#ghc5Tests whether the given kind (which should look like TYPE x) is something other than a constructor tree (that is, constructors at every node). E.g. True of TYPE k, TYPE (F Int) False of TYPE 'LiftedRep#ghcvDoes this classify a type allowed to have values? Responds True to things like *, #, TYPE Lifted, TYPE v, Constraint.$True of any sub-kind of OpenTypeKinde""###e""###8None>(z| ghcxAttempts to tease a type apart into a type constructor and the application of a number of arguments to that constructor ghcDo a topological sort on a list of tyvars, so that binders occur before occurrences E.g. given [ a::k, k::*, b::k ] it'll return a well-scoped list [ k::*, a::k, b::k ]PThis is a deterministic sorting operation (that is, doesn't depend on Uniques).It is also meant to be stable: that is, variables should not be reordered unnecessarily. This is specified in Note [ScopedSort] See also Note [Ordering of implicit variables] in RnTypes ghc+Get the free vars of a type in scoped order ghc*Get the free vars of types in scoped order ghcHGives the typechecker view of a type. This unwraps synonyms but leaves  Constraint alone. c.f. coreView, which turns Constraint into TYPE LiftedRep. Returns Nothing if no unwrapping happens. See also Note [coreView vs tcView] ghcThis function Strips off the top layer only of a type synonym application (if any) its underlying representation type. Returns Nothing if there is nothing to look through. This function considers  Constraint to be a synonym of TYPE LiftedRep.By being non-recursive and inlined, this case analysis gets efficiently joined onto the case analysis that the caller is already doing ghc5Type equality on source types. Does not look through newtypes or fs, but it does look through type synonyms. This first checks that the kinds of the types are equal and then checks whether the types are equal, ignoring casts and coercions. (The kind check is a recursive call, but since all kinds have type Typeo, there is no need to check the types of kinds.) See also Note [Non-trivial definitional equality] in TyCoRep. ghcMake a !. The Coercion must be nominal. Checks the Coercion for reflexivity, dropping it if it's reflexive. See Note [Respecting definitional equality] in TyCoRep ghc&Applies a type to another, as in e.g. k aT8ghc!An ordering relation between two ns (known below as t1 :: k1 and t2 :: k2)T9ghc t1 < t2T:ghct1 ~ t2> and there are no casts in either, therefore we can conclude k1 ~ k2T;ghct1 ~ t2B yet one of the types contains a cast so they may differ in kind.T<ghc t1 > t2#ghc>A choice of equality relation. This is separate from the type Y because \3 does not define a (non-trivial) equality relation.#ghcGThis describes how a "map" operation over a type/coercion should behave#ghc8Should the new type be created with smart constructors?#ghcFWhat to do with coercion holes. See Note [Coercion holes] in TyCoRep.#ghc.The returned env is used in the extended scope#ghcThis is used only to turn TcTyCons into  Ss. See Note [Type checking recursive type and class declarations] in TcTyClsDecls#ghcExpand out all type synonyms. Actually, it'd suffice to expand out just the ones that discard type variables (e.g. type Funny a = Int) But we don't know which those are currently, so we just expand all.#u only expands out type synonyms mentioned in the type, not in the kinds of any TyCon or TyVar mentioned in the type.Keep this synchronized with synonymTyConsOfType#ghc2Attempts to obtain the type variable underlying a nS, and panics with the given message if this is not a type variable type. See also ##ghc2Attempts to obtain the type variable underlying a n#ghczIf the type is a tyvar, possibly under a cast, returns it, along with the coercion. Thus, the co is :: kind tv ~N kind ty#ghc2Attempts to obtain the type variable underlying a n, without any expansion#ghcAttempt to take a type application apart, whether it is a function, type constructor, or plain type application. Note that type family applications are NEVER unsaturated by this!#ghcDoes the AppTy split as in #7, but assumes that any Core view stuff is already done#ghcDoes the AppTy split as in tcSplitAppTy_maybeX, but assumes that any coreView stuff is already done. Refuses to look through (c => t)#ghcLike #( but doesn't look through type synonyms.#ghcLike tcSplitTyConApp( but doesn't look through type synonyms.#ghc1Attempts to take a type application apart, as in #%, and panics if this is not possible#ghcRecursively splits a type as far as is possible, leaving a residual type being applied to and the type arguments applied to it. Never fails, even if that means returning an empty list of type applications.#ghcLike #(, but doesn't look through type synonyms#ghc>Is this a numeric literal. We also look through type synonyms.#ghc=Is this a symbol literal. We also look through type synonyms.#ghc+Is this a type literal (symbol or numeric).#ghcQIs this type a custom user error? If so, give us the kind and the error message.#ghc=Render a type corresponding to a user type error into a SDoc.#ghcmAttempts to extract the argument and result types from a type, and panics if that is not possible. See also ##ghc=Attempts to extract the argument and result types from a type#ghcBExtract the function result type and panic if that is not possible#ghc Just like #/ but for a single argument Try not to iterate  [, because it's inefficient to substitute one variable at a time; instead use 'piResultTys"DExtract the function argument type and panic if that is not possible#ghcW(piResultTys f_ty [ty1, .., tyn]) gives the type of (f ty1 .. tyn) where f :: f_ty #" is interesting because: 1. f_ty4 may have more for-alls than there are args 2. Less obviously, it may have fewer for-alls For case 2. think of: piResultTys (forall a.a) [forall b.b, Int] This really can happen, but only (I think) in situations involving undefined. For example: undefined :: forall a. a Term: undefined (forall b. b->b) hInt This term should have type (Int -> Int), but notice that there are more type args than foralls in Ss type.#ghcA key function: builds a ! or !` as appropriate to its arguments. Applies its arguments to the constructor from left to right.#ghc<Retrieve the tycon heading this type, if there is one. Does not look through synonyms.#ghc The same as fst . splitTyConApp#ghc The same as snd . splitTyConApp#ghcAttempts to tease a type apart into a type constructor and the application of a number of arguments to that constructor. Panics if that is not possible. See also  #ghcLike  ], but doesn't look through synonyms. This assumes the synonyms have already been dealt with.#ghcsAttempts to tease a list type apart and gives the type of the elements if successful (looks through type synonyms)#ghc Unwrap one layerZ of newtype on a type constructor and its arguments, using an eta-reduced version of the newtype2 if possible. This requires tys to have at least newTyConInstArity tycon elements.#ghc2Make a dependent forall over an Inferred variablem#ghc0Like mkTyCoInvForAllTy, but tv should be a tyvar#ghcVLike mkForAllTys, but assumes all variables are dependent and Inferred, a common case#ghcLike ##, but tvs should be a list of tyvar#ghcWLike mkForAllTys, but assumes all variables are dependent and Specified, a common case#ghcELike mkForAllTys, but assumes all variables are dependent and visible#ghcMakes a (->) type or an implicit forall type, depending on whether it is given a type variable or a term variable. This is used, for example, when producing the type of a lambda. Always uses Inferred binders.#ghc#% for multiple type or value arguments#ghcGiven a list of type-level vars and the free vars of a result kind, makes TyCoBinders, preferring anonymous binders if the variable is, in fact, not dependent. e.g. mkTyConBindersPreferAnon  k->k(k:*),(b:k),(c:k)- We want (k:*) Named, (b:k) Anon, (c:k) AnonAll non-coercion binders are visible.#ghcTake a ForAllTy apart, returning the list of tycovars and the result type. This always succeeds, even if it returns only an empty list. Note that the result type returned may have free variables that were bound by a forall.T=ghcLike splitForAllTys, but split only for tyvars. This always succeeds, even if it returns only an empty list. Note that the result type returned may have free variables that were bound by a forall.#ghc<Checks whether this is a proper forall (with a named binder)#ghcLike #/, but returns True only if it is a tyvar binder#ghcLike #/, but returns True only if it is a covar binder#ghcIs this a function or forall?#ghc<Take a forall type apart, or panics if that is not possible.#ghcDrops all ForAllTys#ghc\Attempts to take a forall type apart, but only if it's a proper forall, with a named binder#ghcHLike splitForAllTy_maybe, but only returns Just if it is a tyvar binder.#ghcHLike splitForAllTy_maybe, but only returns Just if it is a covar binder.#ghcNAttempts to take a forall type apart; works with proper foralls and functions#ghc$Takes a forall type apart, or panics#ghcQSplit off all TyCoBinders to a type, splitting both proper foralls and functions#ghcLike # but split off only named> binders and returns TyCoVarBinders rather than TyCoBinders#ghcGiven a  @ and a list of argument types, filter out any invisible (i.e.,  or  ) arguments.#ghcGiven a  . and a list of argument types, filter out any  arguments.#ghcGiven a  = and a list of argument types, partition the arguments into:  or  (i.e., invisible) arguments and (i.e., visible) arguments#ghcuGiven a list of things paired with their visibilities, partition the things into (invisible things, visible things).#ghcGiven a  + and a list of argument types to which the  5 is applied, determine each argument's visibility (, , or ).)Wrinkle: consider the following scenario: FT :: forall k. k -> k tyConArgFlags T [forall m. m -> m -> m, S, R, Q]After substituting, we get MT (forall m. m -> m -> m) :: (forall m. m -> m -> m) -> forall n. n -> n -> n'Thus, the first argument is invisible, S is visible, R is invisible again, and Q is visible.#ghcGiven a n+ and a list of argument types to which the n5 is applied, determine each argument's visibility (, , or ).(Most of the time, the arguments will be , but not always. Consider f :: forall a. a -> Type. In  f Type Bool, the first argument (Type) is  and the second argument (Bool) is ?. It is precisely this sort of higher-rank situation in which # comes in handy, since  f Type Bool$ would be represented in Core using !s. (See also Trac #15792).T>ghcGiven a function kind and a list of argument types (where each argument's kind aligns with the corresponding position in the argument kind), determine each argument's visibility (, , or ).#ghcMake an anonymous binder#ghc)Does this binder bind a variable that is not erased? Returns R for anonymous binders.#ghc)Extract a relevant type, if there is one.#ghcLike R, but for binders.#ghc|Split a type constructor application into its type constructor and applied types. Note that this may fail in the case of a !# with an argument of unknown kind ! (e.g. FunTy (a :: k) Int. since the kind of a isn't of the form TYPE repL). Consequently, you may need to zonk your type before using this function.If you only need the  , consider using tcTyConAppTyCon_maybe.#ghcIs this kind equivalent to *?This considers  Constraint to be distinct from *8. For a version that treats them as the same type, see ".#ghciDoes this type classify a core (unlifted) Coercion? At either role nominal or representational (t1 ~ t2) or (t1 ~R> t2) See Note [Types for coercions, predicates, and evidence]#ghc3Makes a lifted equality predicate at the given role$ghcTCreates a primitive type equality predicate. Invariant: the types are not Coercions$ghc=Creates a primite type equality predicate with explicit kinds$ghcQCreates a primitive representational type equality predicate with explicit kinds$ghc>Try to split up a coercion type into the types that it coerces$ghc3Get the equality relation relevant for a pred type.$ghcuExtract a well-scoped list of variables from a deterministic set of variables. The result is deterministic. NB: There used to exist varSetElemsWellScoped :: VarSet -> [Var] which took a non-deterministic set and produced a non-deterministic well-scoped list. If you care about the list being well-scoped you also most likely care about it being in deterministic order.$ghcoGiven the suffix of a telescope, returns the prefix. Ex: given [(k :: j), (a :: Proxy k)], returns [(j :: *)].$ghcjAdd the kind variables free in the kinds of the tyvars in the given set. Returns a non-deterministic set.$ghcGiven a list of tyvars returns a deterministic FV computation that returns the given tyvars with the kind variables free in the kinds of the given tyvars.$ghcsAdd the kind variables free in the kinds of the tyvars in the given set. Returns a deterministically ordered list.$ghcfAdd the kind variables free in the kinds of the tyvars in the given set. Returns a deterministic set.$ghc]Given a family instance TyCon and its arg types, return the corresponding family type. E.g: 1data family T a data instance T (Maybe b) = MkT b%Where the instance tycon is :RTL, so: +mkFamilyTyConApp :RTL Int = T (Maybe Int)$ghcNGet the type on the LHS of a coercion induced by a type/data family instance.$ghcPretty prints a  M, using the family instance in case of a representation tycon. For example: data T [a] = ...In that case we want to print T [a], where T is the family  $ghcReturns Just True if this type is surely lifted, Just False if it is surely unlifted, Nothing if we can't be sure (i.e., it is levity polymorphic), and panics if the kind does not have the shape TYPE r.$ghcSee Type#type_classificationC for what an unlifted type is. Panics on levity polymorphic types.$ghc3Is this a type of kind RuntimeRep? (e.g. LiftedRep)$ghc+Drops prefix of RuntimeRep constructors in !Vs. Useful for e.g. dropping 'LiftedRep arguments of unboxed tuple TyCon applications:LdropRuntimeRepArgs [ 'LiftedRep, 'IntRep , String, Int ] == [String, Int]$ghc<Extract the RuntimeRep classifier of a type. For instance, #getRuntimeRep_maybe Int = LiftedRep . Returns R if this is not possible.$ ghc<Extract the RuntimeRep classifier of a type. For instance, #getRuntimeRep_maybe Int = LiftedRep!. Panics if this is not possible.$#ghcSee Type#type_classification; for what an algebraic type is. Should only be applied to types;, as opposed to e.g. partially saturated type constructors$$ghc*Check whether a type is a data family type$%ghcComputes whether an argument (or let right hand side) should be computed strictly or lazily, based only on its type. Currently, it's just $%. Panics on levity-polymorphic types.$&ghc1Returns true of types that are opaque to Haskell.$'ghcDetermine whether a type could be the type of a join point of given total arity, according to the polymorphism rule. A join point cannot be polymorphic in its return type, since given join j a b x y z = e1 in e2, the types of e1 and e2 must be the same, and a and b are not in scope for e2. (See Note [The polymorphism rule of join points] in CoreSyn.) Returns False also if the type simply doesn't have enough arguments.Note that we need to know how many arguments (type *and* value) the putative join point takes; for instance, if j :: forall a. a -> Int then j could be a binary join point returning an Int, but it could *not* be a unary join point returning a -> Int.4TODO: See Note [Excess polymorphism and join points]$*ghc7Compare types with respect to a (presumably) non-empty =.$+ghcQType equality on lists of types, looking through type synonyms but not newtypes.$1ghc Compare two  s. NB: This should never see  ConstraintQ (as recognized by Kind.isConstraintKindCon) which is considered a synonym for ne in Core. See Note [Kind Constraint and kind Type] in Kind. See Note [nonDetCmpType nondeterminism]$4ghcReturns True if a type is levity polymorphic. Should be the same as (isKindLevPoly . typeKind) but much faster. Precondition: The type has kind (TYPE blah)$5ghcLooking past all pi-types, is the end result potentially levity polymorphic? Example: True for (forall r (a :: TYPE r). String -> a) Example: False for (forall r1 r2 (a :: TYPE r1) (b :: TYPE r2). a -> b -> Type)$7ghcAll type constructors occurring in the type; looking through type synonyms, but not newtypes. When it finds a Class, it returns the class TyCon.$8ghcFind the result e. of a type synonym, after applying it to its arityj number of type variables Actually this function works fine on data types too, but they'd always return RX, so we never need to ask$9ghcRetrieve the free variables in this type, splitting them based on whether they are used visibly or invisibly. Invisible ones come first.$=ghcmThis variant preserves any use of TYPE in a type, effectively locally setting -fprint-explicit-runtime-reps.#ghcbindersghcfree variables of result#ghcbinder to scrutinizeghc named caseghcanonymous caseddefhj!m""""nopqst= !!"""" " " """""""""""""!"$"%"*"."/"0"1"7"8">"@"B"C"D"E"F"G"J"L"M"N"O"P"R"S"T"U"V"W"X"Y"Z"["]"^"_"`"a"c"d"e"f"g"h"k"m"o"r"s"t"u"v"w"x"y"{"}""""""""""""""""""""""""""""""""""""""########################################################################################################################$$$$$$$$$$ $ $ $ $ $$$$$$$$$$$$$$$$$$$ $!$"$#$$$%$&$'$($)$*$+$,$-$.$/$0$1$2$3$4$5$6$7$8$9$:$;$<$=dm""""n"fdh!""#### #######""######"##### ########""###############""#"## ########$"" ####$#$#########$8$;$<###########$$$$#$$$$################$ $ $ $ $ $$$#######" " " #"##$ ######$##$'$$$!$"$#$$$&$%o"!$$$ e$2$3$4$5###="."/"1"0"$"%"*"7"8$$$$">$9$:#"$6$ $ $*$+$-$.$/$0$1$,$($) $7!j!"@"D"E"G"a"d"c"O"J"P"R"L"M"S"T"U"V"["X"Y"^"]"_"Z"W"N"B"C"e"f"F"`"r"t"g"m"v"o"s"u"w"h"}"k"""x"y"""""{p""""""""""""""q"$st""$="""""""""""""""None7$EghcIs a particular   representable by Typeable.?. These exclude type families and polytypes.$FghcIs a particular n representable by Typeablef? Here we look for polytypes and types containing casts (which may be, for instance, a type family).$E$F$E$FzNoneCIghcPattern SynonymXSee Note [Pattern synonym representation] See Note [Pattern synonym signature contexts]JghcThe  of the I+, giving it a unique, rooted identificationMghcArity of the pattern synonym$GghcBuild a new pattern synonym$Hghc Should the I be presented infix?$Kghc5Extract the type for any given labelled field of the DataCon$SghcGPrint the type of a pattern synonym. The foralls are printed explicitly$Gghc&Is the pattern synonym declared infix?ghc:Universially-quantified type variables and required dictsghc;Existentially-quantified type variables and provided dictsghcOriginal argumentsghcOriginal result typeghcName of matcherghcName of builderghc/Names of fields for a record pattern synonymIJKLM$G$H$I$J$K$L$M$N$O$P$Q$R$SI$GJM$H$I$O$P$LK$M$NL$R$J$K$Q$SNone2X 2$ZghcNumeric literal type$[ghcInteger (see Note [Integer literals])$\ghcNatural (see Note [Natural literals])$]ghcInt# - according to target machine$^ghcInt64# - exactly 64 bits$_ghcWord# - according to target machine$`ghcWord64# - exactly 64 bits$aghc So-called $a s are one of:xAn unboxed numeric literal or floating-point literal which is presumed to be surrounded by appropriate constructors (Int#2, etc.), so that the overall thing makes sense.#We maintain the invariant that the R in the $c constructor is actually in the (possibly target-dependent) range. The mkLit{Int,Word}*Wrap smart constructors ensure this by applying the target machine's wrapping semantics. Use these in situations where you know the wrapping semantics are correct.RThe literal derived from the label mentioned in a "foreign label" declaration ($i)A $f" to be used in place of values of  (i.e.  'MutVar#'#) when the the value is never used. A characterA stringThe NULL pointer$bghcChar#" - at least 31 bits. Create with $z$cghcGAny numeric literal that can be internally represented with an Integer$dghcrA string-literal: stored and emitted UTF-8 encoded, we'll arrange to decode it at runtime. Also emitted with a '\0' terminator. Create with ${$eghcThe NULLU pointer, the only pointer value that can be represented as a Literal. Create with $$fghcIA nonsense value, used when an unlifted binding is absent and has type  forall (a :: TYPE ). aV. May be lowered by code-gen to any possible value. Also see Note [Rubbish literals]$gghcFloat#. Create with $x$hghcDouble#. Create with $y$ighcA label literal. Parameters::1) The name of the symbol mentioned in the declarationX2) The size (in bytes) of the arguments the label expects. Only applicable with stdcall labels. Just x => <x>? will be appended to label name when emitting assembly.I3) Flag indicating whether the symbol references a function or a data$jghc<Indicate if a numeric literal type supports negative numbersT?ghc+Wrap a literal number according to its type$kghcCreate a numeric $a of the given type$lghc>Check that a given number is in the range of a numeric literal$mghcCreate a numeric $a of the given type$nghc Creates a $a of type Int#$oghc Creates a $a of type Int#]. If the argument is out of the (target-dependent) range, it is wrapped. See Note [Word Int underflow overflow]T@ghc Creates a $a of type Int# without checking its range.$pghc Creates a $a of type Int#, as well as a Rean flag indicating overflow. That is, if the argument is out of the (target-dependent) range the argument is wrapped and the overflow flag will be set. See Note [Word Int underflow overflow]$qghc Creates a $a of type Word#$rghc Creates a $a of type Word#]. If the argument is out of the (target-dependent) range, it is wrapped. See Note [Word Int underflow overflow]TAghc Creates a $a of type Word# without checking its range.$sghc Creates a $a of type Word#, as well as a Rean flag indicating carry. That is, if the argument is out of the (target-dependent) range the argument is wrapped and the carry flag will be set. See Note [Word Int underflow overflow]$tghc Creates a $a of type Int64#$ughc Creates a $a of type Int64#8. If the argument is out of the range, it is wrapped.TBghc Creates a $a of type Int64# without checking its range.$vghc Creates a $a of type Word64#$wghc Creates a $a of type Word64#8. If the argument is out of the range, it is wrapped.TCghc Creates a $a of type Word64# without checking its range.$xghc Creates a $a of type Float#$yghc Creates a $a of type Double#$zghc Creates a $a of type Char#${ghc Creates a $a of type Addr#], which is appropriate for passing to e.g. some of the "error" functions in GHC.Err such as GHC.Err.runtimeError$ghcBTests whether the literal represents a zero of whatever type it is$ghc Returns the R contained in the $a', for when that makes sense, i.e. for R, R, R,  LitInteger and  LitNatural.$ghc Returns the R contained in the $a', for when that makes sense, i.e. for R and numbers.$ghcApply a function to the R contained in the $a', for when that makes sense, e.g. for R and numbers. For fixed-size integral literals, the result will be wrapped in accordance with the semantics of the target type. See Note [Word Int underflow overflow]$ghcIndicate if the $a contains an R value, e.g. R, R, R,  LitInteger and  LitNatural.$ghc0Narrow a literal number (unchecked result range)$ghcA nonsense literal of type  forall (a :: TYPE ). a.$ghcaTrue if there is absolutely no penalty to duplicating the literal. False principally of strings."Why?", you say? I'm glad you asked. Well, for one duplicating strings would blow up code sizes. Not only this, it's also unsafe.Consider a program that wants to traverse a string. One way it might do this is to first compute the Addr# pointing to the end of the string, and then, starting from the beginning, bump a pointer using eqAddr# to determine the end. For instance, s-- Given pointers to the start and end of a string, count how many zeros -- the string contains. countZeros :: Addr -> AddrN -> -> Int countZeros start end = go start 0 where go off n | off  `addrEq#`- end = n | otherwise = go (off  `plusAddr#` 1) n' where n' | isTrue (indexInt8OffAddr off 0 ==L 0#) = n + 1 | otherwise = n qConsider what happens if we considered strings to be trivial (and therefore duplicable) and emitted a call like countZeros "hello" ("hello" plusAddr# 5). The beginning and end pointers do not belong to the same string, meaning that an iteration like the above would blow up terribly. This is what happened in #12757.Ultimately the solution here is to make primitive strings a bit more structured, ensuring that the compiler can't inline in ways that will break user code. One approach to this is described in #8472.$ghc?True if code space does not go bad if we duplicate this literal$ghcFind the Haskell n the literal occupies$ghcNeeded for the Ord instance of AltCon, which in turn is needed in .GA$Z$[$\$]$^$_$`$a$d$b$c$e$f$g$h$i$j$k$l$m$n$o$p$q$r$s$t$u$v$w$x$y$z${$|$}$~$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$G$a$d$b$c$e$f$g$h$i$Z$[$\$]$^$_$`$n$o$p$q$r$s$t$u$v$w$x$y$z${$|$}$m$k$$$$j$l$$$$~$A$$$$$$$$$$$$$$$$$$$$$$$$$$None =>?HSVX$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$1$1$1None456HMV8$$$$$$$$$$$$None &'=?HSVX$ghcGraph' is abstracted over the block type, so that we can build graphs of annotated blocks for example (Compiler.Hoopl.Dataflow needs this).$ghc@A control-flow graph, which may take any of four shapes (O/O, OC, CO, C/C). A graph open at the entry has a single, distinguished, anonymous entry point; if a graph is closed at the entry, its entry point(s) are supplied by a context.$ghcUGives access to the anchor points for nonlocal edges as well as the edges themselvesTDghcBody abstracted over block$ghc5A (possibly empty) collection of closed/closed blocks$ghcMaps over all nodes in a graph.$ghc Function $ enables a change of representation of blocks, nodes, or both. It lifts a polymorphic block transform into a polymorphic graph transform. When the block representation stabilizes, a similar function should be provided for blocks.$ghcVReturns a list of blocks reachable from the provided Labels in the reverse postorder.(This is the most important traversal over this data structure. It drops unreachable code and puts blocks in an order that is good for solving forward dataflow problems quickly. The reverse order is good for solving backward dataflow problems quickly. The forward order is also reasonably good for emitting instructions, except that it will not usually exploit Forrest Baskett's trick of eliminating the unconditional branch from a loop. For that you would need a more serious analysis, probably based on dominators, to identify loop headers.FFor forward analyses we want reverse postorder visitation, consider: - A -> [B,C] B -> D C -> D  Postorder: [D, C, B, A] (or [D, B, C, A]) Reverse postorder: [A, B, C, D] (or [A, C, B, D]) This matters for, e.g., forward analysis, because we want to analyze *both* B and C before we analyze D.$ghc"The label of a first node or block$ghcGives control-flow successors$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$None&'TEghcA FlatSwitchPlan is a list of SwitchPlans, with an integer inbetween every two entries, dividing the range. So if we have (abusing list syntax) [plan1,n,plan2], then we use plan1 if the expression is < n, and plan2 otherwise.$ghcnA SwitchPlan abstractly describes how a Switch statement ought to be implemented. See Note [createSwitchPlan]$ghc>A value of type SwitchTargets contains the alternatives for a  CmmSwitch value, and knows whether the value is signed, the possible range, an optional default value and a map from values to jump labels.TFghctNumber of consecutive default values allowed in a jump table. If there are more of them, the jump tables are split.}Currently 7, as it costs 7 words of additional code when a jump table is split (at least on x64, determined experimentally).TGghcMinimum size of a jump table. If the number is smaller, the switch is implemented using conditionals. Currently 5, because an if-then-else tree of 4 values is nice and compact.THghcGMinimum non-zero offset for a jump table. See Note [Jump Table Offset].$ghcThe smart constructor mkSwitchTargets normalises the map a bit: * No entries outside the range * No entries equal to the default * No default if all elements have explicit values$ghc7Changes all labels mentioned in the SwitchTargets value$ghcCReturns the list of non-default branches of the SwitchTargets value$ghc3Return the default label of the SwitchTargets value%ghc+Return the range of the SwitchTargets value%ghc.Return whether this is used for a signed value%ghcLswitchTargetsToTable creates a dense jump table, usable for code generation.`Also returns an offset to add to the value; the list is 0-based on the result of that addition.The conversion from Integer to Int is a bit of a wart, as the actual scrutinee might be an unsigned word, but it just works, due to wrap-around arithmetic (as verified by the CmmSwitchTest test case).%ghc;The list of all labels occuring in the SwitchTargets value.%ghcxGroups cases with equal targets, suitable for pretty-printing to a c-like switch statement with fall-through semantics.%ghc#Custom equality helper, needed for CmmCommonBlockElim%ghcNDoes the target support switch out of the box? Then leave this to the target!%ghcThis function creates a SwitchPlan from a SwitchTargets value, breaking it down into smaller pieces suitable for code generation.$$$$$$$$$$%%%%%%%%$$$$%%$%%%%$$$$$%%None ,12=>HVG% ghcOverloaded Literal Value%ghcInteger-looking literals;%ghcFrac-looking literals%ghcString-looking literals%ghcHaskell Overloaded Literal%ghcHaskell Literal%ghc Character%ghcUnboxed character%ghcString%ghc Packed bytes% ghcGenuinely an Int; arises from  TcGenDeriv, and from TRANSLATION%!ghcliteral Int#%"ghcliteral Word#%#ghcliteral Int64#%$ghcliteral Word64#%%ghcbGenuinely an integer; arises only from TRANSLATION (overloaded literals are done with HsOverLit)%&ghcbGenuinely a rational; arises only from TRANSLATION (overloaded literals are done with HsOverLit)%'ghc Unboxed Float%(ghcUnboxed Double%,ghcfConvert a literal from one index type to another, updating the annotations according to the relevant X instance%.ghcXpmPprHsLit pretty prints literals and is used when pretty printing pattern match warnings. All are printed the same (i.e., without hashes if they are primitive and not wrapped in constructors if they are boxed). This happens mainly for too reasons: * We do not want to expose their internal representation * The warnings become too messy%/ghc%/ p l returns R if a literal l- needs to be parenthesized under precedence p.%0ghc%0 p ol returns R if an overloaded literal ol, needs to be parenthesized under precedence p.$% %%%%%%%%%%%%%%%)%(%'%&%%%$%#%"%!% %%%%%*%+%,%-%.%/%0$%%)%(%'%&%%%$%#%"%!% %%%%%%%%%%%%%%% %%%%*%+%,%-%.%/%07None>SX`"TghcIf it is the case that c :: (t1 ~ t2)i.e. the kind of c relates t1 and t2, then coercionKind c = Pair t1 t2.ghcliftCoSubst role lc ty produces a coercion (at role role) that coerces between  lc_left(ty) and  lc_right(ty) , where lc_left] is a substitution mapping type variables to the left-hand types of the mapped coercions in lc, and similar for lc_right.ghcZMakes a coercion type from two types: the types whose equality is proven by the relevant lghcmSlowly checks if the coercion is reflexive. Don't call this in a loop, as it walks over the entire coercion.ghcTests if this coercion is obviously reflexive. Guaranteed to work very quickly. Sometimes a coercion can be reflexive, but not obviously so. c.f. ghcgTests if this coercion is obviously a generalized reflexive coercion. Guaranteed to work very quickly.ghc$Make a "coercion between coercions".ghcGiven co :: (a :: k) ~ (b :: k') produce  co' :: k ~ k'.ghc!Make a nominal reflexive coercionghc%Make a generalized reflexive coercionghcInstantiates a l.ghc Create a new l by composing the two given ls transitively. (co1 ; co2)ghc(Create a symmetric version of the given l_ that asserts equality between the same types but in the other "direction", so a kind of t1 ~ t2 becomes the kind t2 ~ t1.ghc6Make a universal coercion between two arbitrary types.ghcjManufacture an unsafe coercion from thin air. Currently (May 14) this is used only to implement the  unsafeCoerce#C primitive. Optimise by pushing down through type constructors.ghc~Make a phantom coercion between two types. The coercion passed in must be a nominal coercion between the kinds of the types.ghcBuild a function l from two other ls. That is, given  co1 :: a ~ b and  co2 :: x ~ y produce co :: (a -> x) ~ (b -> y).ghcMake a Coercion from a tycovar, a kind coercion, and a body coercion. The kind of the tycovar should be the left-hand kind of the kind coercion. See Note [Unused coercion variable in ForAllCo]ghcApply a l to another l. The second coercion must be Nominal, unless the first is Phantom. If the first is Phantom, then the second can be either Phantom or Nominal.ghcApply a type constructor to a list of coercions. It is the caller's responsibility to get the roles correct on argument coercions.ghcMake a reflexive coercion%=ghc9The result of stepping in a normalisation function. See %.%>ghcNothing more to do%?ghc2Utter failure. The outer function should fail too.%@ghcVWe stepped, yielding new bits; ^ ev is evidence; Usually a co :: old type ~ new type%AghcDA function to check if we can reduce a type by one step. Used with %.%KghcThis breaks a l with type T A B C ~ T D E F into a list of l s of kinds A ~ D, B ~ E and E ~ F. Hence: CdecomposeCo 3 c [r1, r2, r3] = [nth r1 0 c, nth r2 1 c, nth r3 2 c]%Mghc2Attempts to obtain the type variable underlying a l%NghcAttempts to tease a coercion apart into a type constructor and the application of a number of coercion arguments to that constructor%Oghc-Attempt to take a coercion application apart.%RghcLike %Q(, but only returns Just for tyvar binder%SghcLike %Q(, but only returns Just for covar binderTIghcGiven a coercion &co1 :: (a :: TYPE r1) ~ (b :: TYPE r2), produce a coercion rep_co :: r1 ~ r2.TJghc\Tests if this MCoercion is obviously generalized reflexive Guaranteed to work very quickly.%XghcpReturns the type coerced if this coercion is a generalized reflexive coercion. Guaranteed to work very quickly.%YghcReturns the type coerced if this coercion is reflexive. Guaranteed to work very quickly. Sometimes a coercion can be reflexive, but not obviously so. c.f. %Z%ZghcExtracts the coerced type from a reflexive coercion. This potentially walks over the entire coercion, so avoid doing this in a loop.%[ghc*Make a representational reflexive coercion%\ghcApplies multiple l s to another l , from left to right. See also .TKghcLike g, but the inner coercion shouldn't be an obvious reflexive coercion. For example, it is guaranteed in %]M. The kind of the tycovar should be the left-hand kind of the kind coercion.%]ghcMake nested ForAllCos%^ghcwMake a Coercion quantified over a type/coercion variable; the variable has the same type in both sides of the coercionTLghcLike %^g, but the inner coercion shouldn't be an obvious reflexive coercion. For example, it is guaranteed in %^.%`ghcExtract a covar, if possible. This check is dirty. Be ashamed of yourself. (It's dirty because it cares about the structure of a coercion, which is morally reprehensible.)%eghc[Return the left-hand type of the axiom, when the axiom is instantiated at the types given.%fghc5Instantiate the left-hand side of an unbranched axiom%gghc$Make a coercion from a coercion hole%hghc'Compose two MCoercions via transitivity%ighcIf you're about to call mkNthCo r n co, then r should be whatever nthCoRole n co returns.%jghcGiven ty :: k1,  co :: k1 ~ k2 , produces co' :: ty ~r (ty |> co)%kghcGiven ty :: k1,  co :: k1 ~ k2 , produces co' :: (ty |> co) ~r ty%lghcGiven ty :: k1,  co :: k1 ~ k2, co2:: ty ~r ty', produces @co' :: (ty |> co) ~r ty' It is not only a utility function, but it saves allocation when co is a GRefl coercion.%mghcGiven ty :: k1,  co :: k1 ~ k2, co2:: ty' ~r ty, produces @co' :: ty' ~r (ty |> co) It is not only a utility function, but it saves allocation when co is a GRefl coercion.TMghcIChanges a role, but only a downgrade. See Note [Role twiddling functions]%nghcLike TMR, but panics if the change isn't a downgrade. See Note [Role twiddling functions]%oghcwIf the EqRel is ReprEq, makes a SubCo; otherwise, does nothing. Note that the input coercion should always be nominal.%pghcTConverts a coercion to be nominal, if possible. See Note [Role twiddling functions]%ughcylike mkKindCo, but aggressively & recursively optimizes to avoid using a KindCo constructor. The output role is nominal.TNghcsay g = promoteCoercion h. Then, instCoercion g w yields Just g' , where g' = promoteCoercion (h w)%. fails if this is not possible, if gz coerces between a forall and an -> or if second parameter has a representational role and can't be used with an InstCo.TOghcRepeated use of TN%vghcICreates a new coercion with both of its types casted by different casts  castCoercionKind g r t1 t2 h1 h2, where  g :: t1 ~r t2 , has type (t1 |> h1) ~r (t2 |> h2). h1 and h2 must be nominal.%wghcICreates a new coercion with both of its types casted by different casts castCoercionKind g h1 h2, where  g :: t1 ~r t2 , has type (t1 |> h1) ~r (t2 |> h2). h1 and h2 must be nominal. It calls coercionKindRole#, so it's quite inefficient (which I stands for) Use castCoercionKind instead if t1, t2, and r are known beforehand.%yghcMake a forall lR, where both types related by the coercion are quantified over the same variable.%{ghcIf co :: T ts ~ rep_ty then: +instNewTyCon_maybe T ts = Just (rep_ty, co)-Checks for a newtype, and for being saturated%}ghcTry one stepper and then try the next, if the first doesn't make progress. So if it returns NS_Done, it means that both steppers are satisfied%~ghcA %Ad that unwraps newtypes, careful not to fall into a loop. If it would fall into a loop, it produces %?.%ghc^A general function for normalising the top-level of a type. It continues to use the provided %Ai until that function fails, and then this function returns. The roles of the coercions produced by the %AD must all be the same, which is the role returned from the call to %.Typically ev is Coercion.jIf topNormaliseTypeX step plus ty = Just (ev, ty') then ty ~ev1~ t1 ~ev2~ t2 ... ~evn~ ty' and ev = ev1 plus ev2 plus ... plusC evn If it returns Nothing then no newtype unwrapping could happen%ghc$Sometimes we want to look through a newtype< and get its associated coercion. This function strips off newtype1 layers enough to reveal something that isn't a newtype&. Specifically, here's the invariant: 5topNormaliseNewType_maybe rec_nts ty = Just (co, ty') then (a) co : ty0 ~ ty'". (b) ty' is not a newtype.The function returns Nothing for non-newtypes, or unsaturated applications?This function does *not* look through type families, because it has no access to the type family environment. If you do have that at hand, consider to use topNormaliseType_maybe, which should be a drop-in replacement for topNormaliseNewType_maybe If topNormliseNewType_maybe ty = Just (co, ty'), then co : ty ~R ty'%ghcSyntactic equality of coercions%ghc Compare two ls, with respect to an RnEnv2%ghc,Extend a lifting context with a new mapping.%ghcHExtend a lifting context with a new mapping, and extend the in-scope setTPghc_Extend a lifting context with existential-variable bindings. See Note [extendLiftingContextEx]%ghc+Erase the environments in a lifting context%ghcLike " , but works on a lifting contextTQghcjThe "lifting" operation which substitutes coercions for type variables in a type to produce a coercion.For the inverse operation, see  liftCoMatch%ghc,Is a var in the domain of a lifting context?%ghc"Apply "sym" to all coercions in a %;%ghc;Extract the underlying substitution from the LiftingContext%ghcGet the > from a %ghcApply  to multiple ls%ghcGet a coercion's kind and role.%ghc"Retrieve the role from a coercion.%ghc Assuming that two types are the same, ignoring coercions, find a nominal coercion between the types. This is useful when optimizing transitivity over coercion applications, where splitting two AppCos might yield different kinds. See Note [EtaAppCo] in OptCoercion.ghc!role of the created coercion, "r"ghc:: phi1 ~N phi2ghc g1 :: phi1ghc g2 :: phi2ghc :: g1 ~r g2ghcrole of the built coercion, "r"ghct1 :: k1ghct2 :: k2ghc :: t1 ~r t2ghc :: t1 ~r t2ghc%:: s1 ~N s2, where s1 :: k1, s2 :: k2ghc:: t1 s1 ~r t2 s2TMghc desired roleghc current roleTNghcmust be nominal%ghc original LCghcnew variable to map...ghc...to this lifted version%ghc Original LCghcnew variable to map...ghcto this coercionTPghcoriginal lifting contextghcex. var / value pairscg!!klYZ[\%<!!!!!!!!"""#"&"'"3"5"6"9"A"K"]"j"|"~"""""""""%;%=%>%?%@%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%{%|%}%~%%%%%%%%%%%%%%%%%%%%%%%%%%%%%lc!!g!!!k!!!!"""#YZ[\%t%T%U%%%%[%_%a%b%c%d%e%f%y%x%z%h%i%\%]%^%g%n%o%j%k%l%m%v%w%V%{%A%=%>%?%@%}%|%~%%%K%L%M%N%O%P%Q%R%S%s%q%r%p%Y%X%Z%W%B%D%C%`"&"'"9"5"6"3"!"A""|"~"""j""]"K%%%%%%%%%%%%%%;%<%%%%%%%%%""%F%I%H%G%J%E""%u%%None4X %ghctcMatchTy t1 t2) produces a substitution (over fvs(t1)) s such that s(t1) equals t2r. The returned substitution might bind coercion variables, if the variable is an argument to a GADT constructor.Precondition: typeKind ty1   typeKind ty2We don't pass in a set of "template variables" to be bound by the match, because tcMatchTy (and similar functions) are always used on top-level types, so we can bind any of the free variables of the LHS. See also Note [tcMatchTy vs tcMatchTyKi]%ghcLike %x, but allows the kinds of the types to differ, and thus matches them as well. See also Note [tcMatchTy vs tcMatchTyKi]%ghcThis is similar to %F, but extends a substitution See also Note [tcMatchTy vs tcMatchTyKi]%ghcLike %D but over a list of types. See also Note [tcMatchTy vs tcMatchTyKi]%ghcLike %D but over a list of types. See also Note [tcMatchTy vs tcMatchTyKi]%ghcLike %H, but extending a substitution See also Note [tcMatchTy vs tcMatchTyKi]%ghcLike %H, but extending a substitution See also Note [tcMatchTy vs tcMatchTyKi]TRghc=Same as tc_match_tys_x, but starts with an empty substitutionTSghc Worker for % and %%ghcUThis one is called from the expression matcher, which already has a MatchEnv in hand%ghcGiven a list of pairs of types, are any two members of a pair surely apart, even after arbitrary type function evaluation and substitution?%ghckSimple unification of two types; all type variables are bindable Precondition: the kinds are already equal%ghcLike %, but also unifies the kinds%ghcUnify two types, treating type family applications as possibly unifying with anything and looking through injective type family applications. Precondition: kinds are the same%ghcLike % but also unifies the kinds%ghctcUnifyTysFG bind_tv tys1 tys2 attepts to find a substitution s% (whose domain elements all respond % to bind_tv ) such that s(tys1) and that of s(tys2) are equal, as witnessed by the returned Coercions. This version requires that the kinds of the types are the same, if you unify left-to-right.TTghckThis function is actually the one to call the unifier -- a little too general for outside clients, though.TUghc(Converts any SurelyApart to a MaybeApart%ghc% is sort of inverse to . In particular, if  liftCoMatch vars ty co == Just s, then liftCoSubst s ty == co , where == there means that the result of  has the same type as the original co; but may be different under the hood. That is, it matches a type against a coercion of the same "shape", and returns a lifting substitution which could have been used to produce the given coercion from the given type. Note that this function is incomplete -- it might return Nothing when there does indeed exist a possible lifting context.HThis function is incomplete in that it doesn't respect the equality in  V. That is, it's possible that this will succeed for t1 and fail for t2, even when t1   t2. That's because it depends on there being a very similar structure between the type and the coercion. This incompleteness shouldn't be all that surprising, especially because it depends on the structure of the coercion, which is a silly thing to do.The lifting context produced doesn't have to be exacting in the roles of the mappings. This is because any use of the lifting context will also require a desired role. Thus, this algorithm prefers mapping to nominal coercions where it can do so.TVghcTV does all the actual work for %. %ghcSubstitution to extendghcTemplateghcTarget%ghcTemplateghcTargetghcJOne-shot; in principle the template variables could be free in the target%ghcTemplateghcTargetghcOne-shot substitution%ghcSubstitution to extendghcTemplateghcTargetghcOne-shot substitution%ghcSubstitution to extendghcTemplateghcTargetghcOne-shot substitutionTRghc match kinds?TSghc match kinds?%ghctemplate variablesghctype substitution to extendghcTemplateghcTarget%ghcTrue  =" do two-way unification; False  =: do one-way matching. See end of sec 5.2 from the paper%ghc_A regular one-shot (idempotent) substitution that unifies the erased types. See comments for %TTghcTrue  = unify; False  = matchghcTrue  = doing an injectivity checkghcTrue  = treat the kinds as wellghcsubstitution to extendTVghcambient helpful infoghcincoming substghcty, type to matchghcco, coercion to match againstghc/:: kind of L type of substed ty ~N L kind of coghc/:: kind of R type of substed ty ~N R kind of co%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%None2R? ghcAn  T is a tyvar/type pair representing an equality made in rejigging a GADT constructor ghcQData Constructor Representation See Note [Data constructor workers and wrappers]ghcA data constructort : t, t,tghcThe "full signature" of the  returns, in order:1) The result of %2) The result of ~3) The non-dependent GADT equalities. Dependent GADT equalities are implied by coercion variables in return value (2).Q4) The other constraints of the data constructor type, excluding GADT equalities&5) The original argument types to the ? (i.e. before any change of the representation of the type)#6) The original result type of the ghcThe "stupid theta" of the  , such as  data Eq a in: data Eq a => T a = ...ghcReturns just the instantiated value argument types of a , (excluding dictionary args)ghc-The labels for the fields of this particular ghc*Source-level arity of the data constructorghcNs for the type variables of the constructor, in the order the user wrote themghcGThe type variables of the constructor, in the order the user wrote themghctThe existentially-quantified type/coercion variables of the constructor including dependent (kind-) GADT equalitiesghcCThe type constructor that we are building via this data constructorghcThe  of the +, giving it a unique, rooted identification%ghcSource Unpackedness$What unpackedness the user requested%ghc{- UNPACK  -} specified%ghc{- NOUNPACK  -} specified%ghcno unpack pragma%ghcSource Strictness)What strictness annotation the user wrote%ghc Lazy, ie '~'%ghc Strict, ie !%ghcno strictness annotation%ghcHaskell Implementation BangiBangs of data constructor arguments as generated by the compiler after consulting HsSrcBang, flags, etc.%ghc(Lazy field, or one with an unlifted type%ghcStrict but not unpacked field%ghc;Strict and unpacked field co :: arg-ty ~ product-ty HsBang%ghcHaskell Source BangOBangs on data constructor arguments as the user wrote them in the source code.(HsSrcBang _ SrcUnpack SrcLazy) and #(HsSrcBang _ SrcUnpack NoSrcStrict)c (without StrictData) makes no sense, we emit a warning (in checkValidDataCon) and treat it like !(HsSrcBang _ NoSrcUnpack SrcLazy)TWghcTag, used for ordering s%ghcMake a non-dependent  %ghcSubstitute in an  {. Precondition: if the LHS of the EqSpec is mapped in the substitution, it is mapped to a type variable, not a full type.%ghcFilter out any s mentioned in an  .%ghcCompare strictness annotations%ghcBuild a new data constructor%ghcThe tag used for ordering s%ghcThe original type constructor used in the definition of this data constructor. In case of a data family instance, that will be the family type constructor.%ghcwThe representation type of the data constructor, i.e. the sort type that will represent values of this type at runtime%ghc Should the  be presented infix?%ghc<The universally-quantified type variables of the constructor%ghcMBoth the universal and existential type/coercion variables of the constructor%ghcEqualities derived from the result type of the data constructor, as written by the programmer in any GADT declaration. This includes *all* GADT-like equalities, including those written in by hand by the programmer.TXghcDependent (kind-level) equalities in a constructor. There are extracted from the existential variables. See Note [Existential coercion variables]%ghcUThe *full* constraints on the constructor type, including dependent GADT equalities.%ghcGet the Id of the  worker: a function that is the "actual" constructor and has no top level binding in the program. The type may be different from the obvious one written in the source program. Panics if there is no such  for this %ghcGet the Id of the r wrapper: a function that wraps the "actual" constructor so it has the type visible in the source program: c.f. %. Returns Nothing if there is no wrapper, which occurs for an algebraic data constructor and also for a newtype (whose constructor is inlined compulsorily)%ghcfReturns an Id which looks like the Haskell-source constructor by using the wrapper if it exists (see %') and failing over to the worker (see %)%ghc Find all the Vs implicitly brought into scope by the data constructor. Currently, the union of the % and the %%ghc5Extract the type for any given labelled field of the %ghc@Extract the label and type for any given labelled field of the  , or return R# if the field does not belong to it%ghcStrictness/unpack annotations, from user; or, for imported DataCons, from the interface file The list is in one-to-one correspondence with the arity of the %ghc)Gives the number of actual fields in the representation of the data constructor. This may be more than appear in the source code; the extra ones are the existentially quantified dictionaries%ghc5Return whether there are any argument types for this 2s original source type See Note [DataCon arities]%ghc5Return whether there are any argument types for this 9s runtime representation type See Note [DataCon arities]%ghcRGive the demands on the arguments of a Core constructor application (Con dc args)&ghcThe "signature" of the  returns, in order:1) The result of %, 2) All the ds relating to the  (coercion, dictionary, implicit parameter - whatever), including dependent GADT equalities. Dependent GADT equalities are *also* listed in return value (1), so be careful!(3) The type arguments to the constructor4) The original result type of the &ghcInstantiate the universal tyvars of a data con, returning ( instantiated existentials , instantiated constraints including dependent GADT equalities which are *also* listed in the instantiated existentials , instantiated args)&ghcIThe user-declared type of the data constructor in the nice-to-read form:  T :: forall a b. a -> b -> T [a] rather than: 3T :: forall a c. forall b. (c~[a]) => a -> b -> T cNThe type variables are quantified in the order that the user wrote them. See )Note [DataCon user type variable binders].tNB: If the constructor is part of a data instance, the result type mentions the family tycon, not the internal one.&ghcGFinds the instantiated types of the arguments required to construct a  representation NB: these INCLUDE any dictionary args but EXCLUDE the data-declaration context, which is discarded It's all post-flattening etc; this is a representation type&ghc~Returns the argument types of the wrapper, excluding all dictionary arguments and without substituting for any type variables&ghcReturns the arg types of the worker, including *all* non-dependent evidence, after any flattening has been done and without substituting for any type variables&ghc The string package:module.namet identifying a constructor, which is attached to its info table and used by the GHCi debugger and the heap profiler& ghcVanilla 8s are those that are nice boring Haskell 98 constructors& ghceShould this DataCon be allowed in a type even without -XDataKinds? Currently, only Lifted & Unlifted&ghcWere the type variables of the data con written in a different order than the regular order (universal tyvars followed by existential tyvars)?This is not a cheap test, so we minimize its use in GHC as much as possible. Currently, its only call site in the GHC codebase is in  mkDataConRep in MkId , and so &C is only called at most once during a data constructor's lifetime.&ghcHExtract the type constructor, type argument, data constructor and it's representation4 argument types from a type if it is a product type.Precisely, we return Just for any type that is all of:$Concrete (i.e. constructors visible)Single-constructorNot existentially quantifiedWhether the type is a data type or a newtype%ghc"Is the constructor declared infix?ghc#TyConRepName for the promoted TyConghc(Strictness/unpack annotations, from userghcEField labels for the constructor, if it is a record, otherwise emptyghc Universals.ghc Existentials.ghc User-written /s. These must be Inferred/Specified. See Note [TyVarBinders in DataCons]ghcGADT equalities ghc0Theta-type occurring before the arguments proper ghcOriginal argument types ghcOriginal result type ghcSee comments on  ghcRepresentation type constructorghcConstructor tagghc:The "stupid theta", context of the data declaration e.g. data Eq a => T a ...ghc Worker IdghcRepresentation&ghcA datacon with no existentials or equality constraints However, it can have a dcTheta (notably it can be a class dictionary, with superclasses)ghcInstantiated at these types&ghcA product type, perhaps&ghc!Kind variables and type variablesghc Stupid thetaghcTrue  = was declared in GADT syntax&ghcresult kinde #!"$&  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&& & & & & &&&&&e %%%%%%%%%%%%%%%%%%%%%%%% %%%%%%% #!"$&%&&%&&&%%%&%%%%&&&&%%%%%%%%%%%%&%%&& & & & &%%%%%& &None> &1ghcGets rid of the stuff that prevents us from understanding the runtime representation of a type. Including: 1. Casts 2. Newtypes 3. Foralls 4. Synonyms But not type/data families, because we don't have the envs to hand.&4ghc True if the type has zero width.&5ghc^Given the arguments of a sum type constructor application, return the unboxed sum rep type.E.g.( Int | Maybe Int | ( Int, Float ) #)~We call `ubxSumRepType [ [IntRep], [LiftedRep], [IntRep, FloatRep] ]`, which returns [WordSlot, PtrSlot, WordSlot, FloatSlot]wINVARIANT: Result slots are sorted (via Ord SlotTy), except that at the head of the list we have the slot for the tag.TYghcAReturns the bigger type if one fits into the other. (commutative)&:ghc,Discovers the primitive representation of a n. Returns a list of m: it's a list because of the possibility of no runtime representation (void) or multiple (unboxed tuple/sum)&;ghcLike &:*, but assumes that there is precisely one 5 output; an empty list of PrimReps becomes a VoidRep&<ghc%Find the runtime representation of a  W. Defined here to avoid module loops. Returns a list of the register shapes necessary.&=ghcLike &<3, but assumed that there is precisely zero or one  outputTZghcTake a kind (of shape TYPE rr) and produce the #s of values of types of this kind.&>ghc7Take a type of kind RuntimeRep and extract the list of  that it encodes.&?ghcConvert a PrimRep back to a Type. Used only in the unariser to give types to fresh Ids. Really, only the type's representation matters.)&'&)&(&*&+&,&-&.&/&0&1&2&3&4&5&6&7&8&9&:&;&<&=&>&?)&-&.&/&1&4&:&;&>&0&?&2&3&<&=&5&6&7&'&)&(&*&+&,&9&8None"#=?&RghcAbstract counting of usages&SghcDomain for genuine usage&Tghc?Call demand for absence. Used only for values of function type&Ughc]Product. Used only for values of product type See Note [Don't optimise UProd(Used) to Used]@Invariant: Not all components are Abs (in that case, use UHead)&VghcMay be used but its sub-components are definitely *not* used. For product types, UHead is equivalent to U(AAA); see mkUProd./UHead is needed only to express the demand of R and 'case'? which are polymorphic; i.e. the scrutinised value is of type aD rather than a product type. That's why we can't use UProd [A,A,A]GSince (UCall _ Abs) is ill-typed, UHead doesn't make sense for lambdas&WghcEMay be used and its sub-components may be used. (top of the lattice)T[ghc.How are exceptions handled for strict demands?T\ghcVanilla case, ordinary strictnessT]ghc Str ExnStr d means be strict like d but then degrade the T^ info T_ to T`. e.g. the first argument of catch has this strictness.TaghcStrictness demand.TbghcLazy (top of the lattice)TcghcStrictTdghc"Strictness of a function argument.&XghcVanilla strictness domainTeghcJHyper-strict (bottom of the lattice). See Note [HyperStr and Use demands]Tfghc2Call demand Used only for values of function typeTgghcProduct Used only for values of product type Invariant: not all components are HyperStr (use HyperStr) not all components are Lazy (use HeadStr)ThghcqHead-Strict A polymorphic demand: used for values of all types, including a type variable&ghcBRemove all 1* information (but not C1 information) from the demand&ghcSRemove all 1* information (but not C1 information) from the strictness signaturez&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&{&|&}&~&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&z&X&S&T&U&V&W&R&P&E&Q&Y&Z&c&`&a&_&r&&n&o&p&q&h&i&l&m&j&k&s&t&u&[&z&&^&\&G&H&&&&&&&&&F&&&I&&&&K&J&&&~&&&&&&&&&&&C&D&&&&&&&&&&&&&w&x&&&b&f&g&y&&{&&&&}&&&d&e&&&&&&&|&L&M&N&O&]&v&&&&&&&&&None" ghcA constructor-like thing&ghcNumber of arguments&ghc"Names of fields used for selectors&ghcReturns just the instantiated value argument types of a , (excluding dictionary args)&ghc0Existentially quantified type/coercion variables&ghcThe "stupid theta" of the  , such as  data Eq a in: data Eq a => T a = ...It is empty for $ as they do not allow such contexts.&ghc Returns the  of the wrapper. This is also known as the builder in some contexts. The value is Nothing only in the case of unidirectional pattern synonyms.&ghc7Returns the strictness information for each constructor&ghc%Returns the type of the whole pattern&ghcThe "full signature" of the  returns, in order:,1) The universally quantified type variables72) The existentially quantified type/coercion variables3) The equality specification;4) The provided theta (the constraints provided by a match)<5) The required theta (the constraints required for a match)]6) The original argument types (i.e. before any change of the representation of the type)7) The original result type&ghc5Extract the type for any given labelled field of the &ghc-The ConLikes that have *all* the given fields&&&&&&&&&&&&&&&&&&&&&&&&None$2>$R&ghcA clone of the 'v0 type but allowing annotation at every tree node&ghcA clone of the '}0 type but allowing annotation at every tree node&ghcA clone of the '0 type but allowing annotation at every tree node'ghc;Annotated core: allows annotation at every node in the tree' ghc Binders are tagged with a t'ghc$Case alternatives where binders are 's'ghc!Binding groups where binders are 's'ghc'Argument expressions where binders are 's'ghcExpressions where binders are 's'ghclThe common case for the type of binders and variables when we are manipulating the Core language within GHC'ghc'& says when unfolding should take place'#ghc Records the  unfolding of an identifier, which is approximately the form the identifier would have if we substituted its definition in for the identifier. This type should be treated as abstract everywhere except in  CoreUnfold'$ghc+We have no information about the unfolding.'%ghc:We have no information about the unfolding, because this  came from an hi-bootT file. See Note [Inlining and hs-boot files] in ToIface for what this is used for.'&ghc%It ain't one of these constructors.  OtherCon xsd also indicates that something has been evaluated and hence there's no point in re-evaluating it.  OtherCon []N is used even for non-data-type values to indicated evaluated-ness. Notably: 1data C = C !(Int -> Int) case x of { C f -> ... }Here, f gets an  OtherCon [] unfolding.'(ghc;An unfolding with redundant cached information. Parameters:uf_tmpl: Template used to perform unfolding; NB: Occurrence info is guaranteed correct: see Note [OccInfo in unfoldings and rules]'uf_is_top: Is this a top level binding? uf_is_value:  exprIsHNF* template (cached); it is ok to discard a R on this variableuf_is_work_free: Does this waste only a little work if we expand it inside an inlining? Basically this is a cached version of exprIsWorkFree!uf_guidance: Tells us about the size of the unfolding template'7ghcA '7 is:]"Local" if the function it is a rule for is defined in the same module as the rule itself.R"Orphan" if nothing on the LHS is defined in the same module as the rule itself'9ghcBuilt-in rules are used for constant folding and suchlike. They have no free variables. A built-in rule is always visible (there is no such thing as an orphan built-in rule.)':ghc1Name of the rule, for communication with the user';ghcWhen the rule is active'<ghc Name of the  at the head of this rule'=ghc7Name at the head of each argument to the left hand side'>ghcVariables quantified over'?ghcLeft hand side arguments'@ghcnRight hand side of the rule Occurrence info is guaranteed correct See Note [OccInfo in unfoldings and rules]'AghcTrue  =U this rule is auto-generated (notably by Specialise or SpecConstr) False  =o generated at the user's behest See Note [Trimming auto-rules] in TidyPgm for the sole purpose of this field.'Bghc H the rule was defined in, used to test if we should see an orphan rule.'Cghc%Whether or not the rule is an orphan.'DghcTrueg iff the fn at the head of the rule is defined in the same module as the rule and is not an implicit [ (like a record selector, class operation, or data constructor). This is different from 'Cx, where a rule can avoid being an orphan if *any* Name in LHS of the rule was defined in the same module as the rule.'EghcNumber of arguments that 'F1 consumes, if it fires, including type arguments'FghceThis function does the rewrite. It given too many arguments, it simply discards them; the returned ' is just the rewrite of '< applied to the first 'E args'Gghc?A full rule environment which we can apply rules from. Like a 'K, but it also includes the set of visible orphans we use to filter out orphan rules which are not visible (even though we can see them...)'KghcGathers a collection of '7s. Maps (the name of) an  to its rules'LghcAIs this instance an orphan? If it is not an orphan, contains an ? witnessing the instance's non-orphanhood. See Note [Orphans]'Oghc_Governs the kind of expression that the tick gets placed on when annotating for example using mkTick. If we find that we want to put a tickish on an expression ruled out here, we try to float it inwards until we find a suitable expression.'PghcPPlace ticks exactly on run-time expressions. We can still move the tick through pure compile-time constructs such as other ticks, casts or type lambdas. This is the most restrictive placement rule for ticks, as all tickishs have in common that they want to track runtime processes. The only legal placement rule for counting ticks.'QghcAs  PlaceRuntime, but we float the tick through all lambdas. This makes sense where there is little difference between annotating the lambda and annotating the lambda's code.'RghcIn addition to floating through lambdas, cost-centre style tickishs can also be moved from constructors, non-function variables and literals. For example: let x = scc ... C (scc ... y) (scc ... 3) in ...Neither the constructor application, the variable or the literal are likely to have any cost worth mentioning. And even if y names a thunk, the call would not care about the evaluation context. Therefore removing all annotations in the above example is safe.'SghcSpecifies the scoping behaviour of ticks. This governs the behaviour of ticks that care about the covered code and the cost associated with it. Important for ticks relating to profiling.'TghcNo scoping: The tick does not care about what code it covers. Transformations can freely move code inside as well as outside without any additional annotation obligations'UghcSoft scoping: We want all code that is covered to stay covered. Note that this scope type does not forbid transformations from happening, as long as all results of the transformations are still covered by this tick or a copy of it. For example let x = tick ...6 (let y = foo in bar) in baz ===> let x = tick ... bar; y = tick ... foo in bazrIs a valid transformation as far as "bar" and "foo" is concerned, because both still are scoped over by the tick. Note though that one might object to the "let" not being covered by the tick any more. However, we are generally lax with this - constant costs don't matter too much, and given that the "let" was effectively merged we can view it as having lost its identity anyway.rAlso note that this scoping behaviour allows floating a tick "upwards" in pretty much any situation. For example:case foo of x -> tick ... bar ==> tick ... case foo of x -> barWhile this is always leagl, we want to make a best effort to only make us of this where it exposes transformation opportunities.'Vghc%Cost centre scoping: We don't want any costs to move to other cost-centre stacks. This means we not only want no code or cost to get moved out of their cost centres, but we also object to code getting associated with new cost-centre ticks - or changing the order in which they get applied.}A rule of thumb is that we don't want any code to gain new annotations. However, there are notable exceptions, for example:let f = y -> foo in tick ... ... (f x) ... ==> tick ... ... foo[x/y] ...In-lining lambdas like this is always legal, because inlining a function does not change the cost-centre stack when the function is called.'Wghc;Allows attaching extra information to points in expressions'XghcAn {- SCC -}t profiling annotation, either automatically added by the desugarer as a result of -auto-all, or added by the user.'Yghc_A "tick" used by HPC to track the execution of each subexpression in the original source code.'ZghcA breakpoint for the GHCi debugger. This behaves like an HPC tick, but has a list of free variables which will be available for inspection in GHCi when the program stops at the breakpoint.yNB. we must take account of these Ids when (a) counting free variables, and (b) substituting (don't substitute for them)'[ghcA source note.Source notes are pure annotations: Their presence should neither influence compilation nor execution. The semantics are given by causality: The presence of a source note means that a local change in the referenced source code span will possibly provoke the generated code to change. On the flip-side, the functionality of annotated code *must* be invariant against changes to all source code *except* the spans referenced in the source notes (see "Causality of optimized Haskell" paper for details).$Therefore extending the scope of any given source note is always valid. Note that it is still undesirable though, as this reduces their usefulness for debugging and profiling. Therefore we will generally try only to make use of this property where it is necessary to enable optimizations.'\ghcthe cost centre']ghcbump the entry count?'^ghc;scopes over the enclosed expression (i.e. not just a tick)'bghcxthe order of this list is important: it matches the order of the lists in the appropriate entry in HscTypes.ModBreaks.CCareful about substitution! See Note [substTickish] in CoreSubst.'cghcSource covered'dghc4Name for source location (uses same names as CCs)'vghcIBinding, used for top level bindings in a module and local bindings in a let.'yghc3A case alternative constructor (i.e. pattern match)'{ghc A literal: case e of { 1 -> ... }J Invariant: always an *unlifted* literal See Note [Literal alternatives]'|ghcTrivial alternative: case e of { _ -> ... }'}ghcA case split alternative. Consists of the constructor leading to the alternative, the variables bound from the constructor, and the expression to be executed given that binding. The default alternative is (DEFAULT, [], rhs)'~ghcNType synonym for expressions that occur in function argument positions. Only '~ should contain a ' at top level, general ' should not'ghceThis is the data type that represents GHCs core intermediate language. Currently GHC uses System FC  [https://www.microsoft.com/en-us/research/publication/system-f-with-type-equality-coercions/V for this purpose, which is closely related to the simpler and better known System F  %http://en.wikipedia.org/wiki/System_F.GWe get from Haskell source to this Core language in a number of stages: bThe source code is parsed into an abstract syntax tree, which is represented by the data type  with the names being rThis syntax tree is renamed, which attaches a DD to every rr (yielding a [) to disambiguate identifiers which are lexically identical. For example, this program: 3 f x = let f x = x + 1 in f (x - 2) Would be renamed by having Unique,s attached so it looked something like this: E f_1 x_2 = let f_3 x_4 = x_4 + 1 in f_3 (x_2 - 2) But see Note [Shadowing] below. |The resulting syntax tree undergoes type checking (which also deals with instantiating type class arguments) to yield a  type that has  as it's names.Finally the syntax tree is  desugared from the expressive  type into this 'y type, which has far fewer constructors and hence is easier to perform optimization, analysis and code generation on.The type parameter b3 is for the type of binders in the expression tree.0The language consists of the following elements:5Variables See Note [Variable occurrences in Core]Primitive literals.Applications: note that the argument may be a 'X. See Note [CoreSyn let/app invariant] See Note [Levity polymorphism invariants]@Lambda abstraction See Note [Levity polymorphism invariants]Recursive and non recursive let{s. Operationally this corresponds to allocating a thunk for the things bound and then executing the sub-expression.See Note [CoreSyn letrec invariant] See Note [CoreSyn let/app invariant] See Note [Levity polymorphism invariants] See Note [CoreSyn type and coercion invariant]Case expression. Operationally this corresponds to evaluating the scrutinee (expression examined) to weak head normal form and then examining at most one level of resulting constructor (i.e. you cannot do nested pattern matching directly with this).AThe binder gets bound to the value of the scrutinee, and the '* must be that of all the case alternativescase_invariantst This is one of the more complicated elements of the Core language, and comes with a number of restrictions: PThe list of alternatives may be empty; See Note [Empty case alternatives]The '|H case alternative must be first in the list, if it occurs at all.BThe remaining cases are in order of increasing tag (for DataAlts) or lit (for LitAltsc). This makes finding the relevant constructor easy, and makes comparison easier too.0The list of alternatives must be exhaustive. An  exhaustive; case does not necessarily mention all constructors:  data Foo = Red | Green | Blue ... case x of Red -> True other -> f (case x of Green -> ... Blue -> ... ) ... The inner case does not need a Red alternative, because x can't be Red at that program point. Floating-point values must not be scrutinised against literals. See Trac #9238 and Note [Rules for floating-point comparisons] in PrelRules for rationale.GCast an expression to a particular type. This is used to implement newtypes (a newtype. constructor or destructor just becomes a ' in Core) and GADTs.XNotes. These allow general information to be added to expressions in the syntax tree;A type: this should only show up at the top level of an Arg A coercion'ghcA "counting tick" (where tickishCounts is True) is one that counts evaluations in some way. We cannot discard a counting tick, and the compiler should preserve the number of counting ticks as far as possible.However, we still allow the simplifier to increase or decrease sharing, so in practice the actual number of ticks may vary, except that we never change the value from zero to non-zero or vice versa.'ghc/Returns the intended scoping rule for a Tickish'ghc[Returns whether the tick scoping rule is at least as permissive as the given scoping rule.'ghcReturns Trued for ticks that can be floated upwards easily even where it might change execution counts, such as: Just (tick ... foo) ==> tick ... (Just foo)This is a combination of tickishSoftScope and  tickishCountsF. Note that in principle splittable ticks can become floatable using mkNoTickI -- even though there's currently no tickish for which that is the case.'ghcReturns True" for a tick that is both counting and> scoping and can be split into its (tick, scope) parts using ' and mkNoTick respectively.'ghcReturn True if this source annotation compiles to some backend code. Without this flag, the tickish is seen as a simple annotation that does not have any associated evaluation code.What this means that we are allowed to disregard the tick if doing so means that we can skip generating any code in the first place. A typical example is top-level bindings: foo = tick ...% y -> ... ==> foo = y -> tick ... ...Here there is just no operational difference between the first and the second version. Therefore code generation should simply translate the code as if it found the latter.'ghc)Placement behaviour we want for the ticks'ghc_Returns whether one tick "contains" the other one, therefore making the second tick redundant.'ghcReturns true if 'L is orphan.'ghcReturns true if 'L is not an orphan.'ghcThe number of arguments the '<4 must be applied to before the rule can match on it'ghcThe  of the ' at the head of the rule left hand side'ghcSet the  of the ' at the head of the rule left hand side'ghcThere is no known '#'ghc<This unfolding marks the associated thing as being evaluated'ghcThere is no known '#*, because this came from an hi-boot file.'ghc?Retrieves the template of an unfolding: panics if none is known'ghcRetrieves the template of an unfolding if possible maybeUnfoldingTemplate is used mainly wnen specialising, and we do want to specialise DFuns, so it's important to return a template for DFunUnfoldings'ghc=The constructors that the unfolding could never be: returns [] if no information is available'ghcjDetermines if it is certainly the case that the unfolding will yield a value (something in HNF): returns False if unsure'ghcRDetermines if it possibly the case that the unfolding will yield a value. Unlike ' it returns True for '&'ghcTrueZ if the unfolding is a constructor application, the application of a CONLIKE function or '&'ghc1Is the thing we will unfold into certainly cheap?'ghcHOnly returns False if there is no unfolding information available at all'ghc Compares 'ys within a single list of alternatives DEFAULT comes out smallest, so that sorting by AltCon puts alternatives in the order required by case_invariants'ghcbApply a list of argument expressions to a function expression in a nested fashion. Prefer to use 1 if possible'ghcZApply a list of coercion argument expressions to a function expression in a nested fashion'ghcTApply a list of type or value variables to a function expression in a nested fashion'ghc_Apply a list of argument expressions to a data constructor in a nested fashion. Prefer to use 1 if possible'ghcVApply a list of type argument expressions to a function expression in a nested fashion'ghc4Create a machine integer literal expression of type Int# from an Integer%. If you want an expression of type Int use 1'ghc4Create a machine integer literal expression of type Int# from an Int%. If you want an expression of type Int use 1'ghc2Create a machine word literal expression of type Word# from an Integer%. If you want an expression of type Word use 1'ghc2Create a machine word literal expression of type Word# from a Word%. If you want an expression of type Word use 1'ghc6Create a machine character literal expression of type Char#%. If you want an expression of type Char use 1'ghc3Create a machine string literal expression of type Addr#%. If you want an expression of type String use 1'ghc=Create a machine single precision literal expression of type Float# from a Rational%. If you want an expression of type Float use 1'ghc=Create a machine single precision literal expression of type Float# from a Float%. If you want an expression of type Float use 1'ghc=Create a machine double precision literal expression of type Double# from a Rational%. If you want an expression of type Double use 1'ghc=Create a machine double precision literal expression of type Double# from a Double%. If you want an expression of type Double use 1'ghc[Bind all supplied binders over an expression in a nested lambda expression. Prefer to use 1 if possible'ghcBind all supplied binding groups over an expression in a nested let expression. Assumes that the rhs satisfies the let/app invariant. Prefer to use 11 if possible, which does guarantee the invariant'ghcmkLetNonRec bndr rhs body wraps body in a let binding bndr.'ghcmkLetRec binds body wraps body in a let rec with the given set of binds if binds is non-empty.'ghcECreate a binding group where a type variable is bound to a type. Per CoreSyn#type_let>, this can only be used to bind something in a non-recursive let expression'ghcECreate a binding group where a type variable is bound to a type. Per CoreSyn#type_let>, this can only be used to bind something in a non-recursive let expression'ghcConvert a binder into either a ' or ' ' appropriately'ghciDetermines the type resulting from applying an expression with given type to a given argument expression'ghcIf the expression is a '., converts. Otherwise, panics. NB: This does not convert ' to  CoercionTy.'ghcIf the expression is a ' , converts.'ghc$Extract every variable by this group'ghc'$ applied to a list of binding groups'ghcpCollapse all the bindings in the supplied groups into a single list of lhs/rhs pairs suitable for binding in a 'x binding group'ghcZWe often want to strip off leading lambdas before getting down to business. Variants are ', Ti, and ''ghcTStrip off exactly N leading lambdas (type or value). Good for use with join points.'ghcvTakes a nested application expression and returns the function being applied and the arguments to which it is applied'ghcAttempt to remove the last N arguments of a function call. Strip off any ticks or coercions encountered along the way and any at the end.'ghcLike  collectArgs_, but also collects looks through floatable ticks if it means that we can find more arguments.'ghc$Will this variable exist at runtime?'ghc/Will this argument expression exist at runtime?'ghcReturns True for value arguments, false for type args NB: coercions are value arguments (zero width, to be sure, like State#, but still value args).'ghcReturns True iff the expression is a ' or ' expression at its top level'ghcReturns True iff the expression is a ' expression at its top level'ghcReturns True iff the expression is a '; expression at its top level. Note this does NOT include 's.'ghc8The number of binders that bind values rather than types'ghcWThe number of argument expressions that are values rather than types at their top level'ghcvTakes a nested application expression and returns the function being applied and the arguments to which it is applied'ghcAs ' but for ' rather than ''ghcAs ' but for ' rather than ' &&&&&''''&&'''''' ' ' ' ' ''''''''''''''''''' '!'"'#'$'%'&'''(')'*'+','-'.'/'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'['Z'X'Y'\']'^'_'`'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'{'|'}'~''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''}'v'w'x'y'z'{'|'~'W'['Z'X'Y'\']'^'_'`'a'b'c'd'S'T'U'V'O'P'Q'R''''''' ' ' ' ' '''r'q'p'o't's'u'n'i'h'g'f'l'k'm'j'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''#'$'%'&'''(')'*'+','-'.'/'0'1'2'3'''''''''''' '!'"''''''''''''''''''''''''''&''''&&''''&&&&'''''''''L'M'N''''7'8'9':';'<'='>'?'@'A'B'C'D'E'F'K'6'4'5'G'H'I'J''''''''''''4'4'4'4'4@None>s-ghcIdentifier DetailsThe  of an Id7 give stable, and necessary, information about the Id.ghcIdentifier InformationAn  gives optional information about an Id. If present it never lies, but it may not be present, in which case there is always a conservative assumption which can be made.Two Id:s may have different info even though they have the same Unique (and are hence the same IdE); for example, one might lack the properties attached to the other. Most of the ; gives information about the value, or definition, of the Id4, independent of its usage. Exceptions to this are (, (, ( and (.!Performance note: when we update n, we have to reallocate this entire record, so it is a good idea not to let this data structure get too big.ghc Check if an  says (+.ghcJust a synonym for (+@. Written separately so it can be exported in the hs-boot file.ghcBasic . that carries no useful information whatsoever( ghcTick box for Hpc-style coverage( ghc%Constant applicative form InformationRecords whether an Id+ makes Constant Applicative Form references(ghcIndicates that the Id is for either: HA function or static constructor that refers to one or more CAFs, orA real live CAF(ghc9A function or static constructor that refers to no CAFs.(ghcRule Information$Records the specializations of this Id, that we know about in the form of rewrite '7s that target them(ghcInline Pragma InformationlTells when the inlining is active. When it is active the thing may be inlined, depending on how big it is.If there was an INLINEb pragma, then as a separate matter, the RHS will have been made to look small with a Core inline Note The default ( is KL, so the info serves entirely as a way to inhibit inlining until we want it(ghcArity InformationAn ( of n, tells us that partial application of this Id to up to n-1* value arguments does essentially no work.7That is not necessarily the same as saying that it has n6 leading lambdas, because coerces may get in the way.mThe arity might increase later in the compilation process, if an extra lambda floats up to the binding site.(ghcId arity(ghcSpecialisations of the IdFs function which exist See Note [Specialisations and RULES in IdInfo](ghcThe Id s unfolding(ghcId CAF info(ghc+Info about a lambda-bound variable, if the Id is one(ghc!Any inline pragma atached to the Id(ghcHow the Id occurs in the program(ghcID demand information(ghcHow this is called. n  =$ all calls have at least n arguments(ghc?when applied, will this Id ever have a levity-polymorphic type?(ghcRecursive Selector Parent(#ghcThe Id for a record selector($ghcThe Id is for a data constructor worker(%ghcThe Id is for a data constructor wrapper(&ghcThe Id9 is a superclass selector, or class operation of a class('ghcThe Id is for a primitive operator((ghcThe IdM is for a foreign call. Type will be simple: no type families, newtypes, etc()ghcThe Id4 is for a HPC tick box (both traditional and binary)(*ghc$A dictionary function. Bool = True  = the class has only one method, so may be implemented with a newtype, so it might be bad to be strict on this dictionary(+ghc&A coercion variable This only covers  un-lifted coercions, of type (t1 ~ t2) or (t1 ~R t2), not their lifted variants(,ghcAn IdC for a join point taking n arguments Note [Join points] in CoreSyn(:ghcMore informative  we can use when we know the Id has no CAF references(;ghc$It is always safe to assume that an Id has an arity of 0(>ghc0Assume that no specilizations exist: always safe(@ghcnRetrieve the locally-defined free variables of both the left and right hand sides of the specialization rules(BghcCChange the name of the function the rule is keyed on on all of the '7sTjghcAssumes that the Id$ has CAF references: definitely safe(EghcThis is used to remove information on lambda binders that we have setup as part of a lambda group, assuming they will be applied all at once, but turn out to be part of an unsaturated lambda as in e.g: (\x1. \x2. e) arg1(FghcRemove all demand info on the (Gghc.Remove usage (but not strictness) info on the (HghcCRemove usage environment info from the strictness signature on the (Jghc'Zap info that depends on free variables(NghcMarks an IdInfo describing an Id that is never levity polymorphic (even when applied). The Type is only there for checking that it's really never levity polymorphicl(,(*("(#($(%(&('((()(+(-(.((((((((((([]\^_abcdefghij( ( ( ( ( (((((((( (!(/(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(Pl(,(*("(#($(%(&('((()(+(-(.(/(( (!(:((7(E(J(F(G(H(I(L(M(K((;((4(<((5((9((8(=((3(((1abcdefghij((2_^[]\(((>(?(@(A(B((0( (((D(C((6( ( ( ( ((N(O(P (01(11(21(31(41(61(71(81(91(N1(O1Noneo(_ghcNot only does this set the  n;, it also evaluates the type to try and reduce space usage(gghc'For an explanation of global vs. local s, see Var#globalvslocal(hghcMake a global % without any extra information at all(ighcMake a global - with no global information but some generic (jghc'For an explanation of global vs. local s, see Var#globalvslocal(kghcMake a local CoVar(lghcLike (j6, but checks the type to see if it should make a covar(mghcMMake a local id, with the IdDetails set to CoVarId if the type indicates so.(oghcCreate a local  that is marked as exported. This prevents things attached to it from being removed as dead code. See Note [Exported LocalIds](qghcCreate a system local . These are local s (see Var#globalvslocal3) that are created by the compiler out of thin air(rghcLike (q+, but checks to see if we have a covar type(ughcCreate a user local . These are local s (see Var#globalvslocal8) with a name and location that the user might recognize(vghcLike (u', but checks if we have a coercion type(wghcWorkers get local names. CoreTidy$ will externalise these if necessary(xghc Create a template local: a family of system local s in bijection with Ints, typically used in unfoldings(yghc-Create a template local for a series of types(zghcWCreate a template local for a series of type, but start from a specified template local({ghcIf the , is that for a record selector, extract the (-. Panic otherwise.(ghc*Get from either the worker or the wrapper  to the '. Currently used only in the desugarer. INVARIANT: idDataCon (dataConWrapId d) = d : remember, %, can return either the wrapper or the worker(ghcReturns True of an I which may not have a binding, even though it is defined in this module.(ghc( tells whether an s info is implied by other declarations, so we don't need to put its signature in an interface file, even if it's mentioned in some other interface unfolding.(ghc6Returns true if an application to n args would diverge(ghc This predicate says whether the  has a strict demand placed on it or has a type such that it can always be evaluated strictly (i.e an unlifted type, as of GHC 7.6). We need to check separately whether the D has a so-called "strict type" because if the demand for the given id hasn't been computed yet but id# has a strict type, we still want  isStrictId id to be True.(ghcLike (f, but taking the Horrible State Hack in to account See Note [The state-transformer hack] in CoreArity(ghc/Returns whether the lambda associated with the  is certainly applied at most once This one is the "business end", called externally. It works on type variables as well as Ids, returning True Its main purpose is to encapsulate the Horrible State Hack See Note [The state-transformer hack] in CoreArity(ghc1Should we apply the state hack to values of this n?(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({(|(}(~((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ʀ(g(h(i(j(k(l(m(n(o(p(q(s(r(t(u(v(y(z(x(w(Z(\([({(](^(_(`(a(b(d(c(e(f((((((((((((((|((~(}(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( (1(1(1(1(1(1(1(1(1(1(1(1(1None((((((((((((((((((((((((((((((((((((xNoneghcMake a *promoted* list.ghcSpecialization of Tk for tuplesAghcFBuild the type of a small tuple that holds the specified type of thing)ghcDBuilt-in syntax isn't "in scope" so these OccNames map to wired-in Names with BuiltInSyntax. However, this should only be necessary while resolving names produced by Template Haskell splices since we take care to encode built-in syntax names specially in interface files. See Note [Symbol table representation of names].Moreover, there is no need to include names of things that the user can't write (e.g. type representation bindings like $tc(,,,)).)ghcbIf the given name is that of a constraint tuple, return its arity. Note that this is inefficient.TkghcMGiven the TupleRep/SumRep tycon and list of RuntimeReps of the unboxed tuple;sum arguments, produces the return kind of an unboxed tuplesum type constructor. WunboxedTupleSumKind [IntRep, LiftedRep] --> TYPE (TupleRep/SumRep [IntRep, LiftedRep])Tlghc/OccName for n-ary unboxed sum type constructor.TmghcCOccName for i-th alternative of n-ary unboxed sum data constructor.)ghc'Type constructor for n-ary unboxed sum.)ghc=Data constructor for i-th alternative of a n-ary unboxed sum.TnghcCached type and data constructors for sums. The outer array is indexed by the arity of the sum and the inner array is indexed by the alternative.)ghcSpecialization of Tk for sumsToghcDCreate type constructor and data constructors for n-ary unboxed sum.)Jghc,Make a tuple type. The list of types should not( include any RuntimeRep specifications.TpghcSExtract the elements of a promoted list. Panics if the type is not a promoted listghcof the elements of the listghcelementsTqghcdeclared infix?ghc datacon nameghc univ tyvarsghc ex tycovarsghcuser-written tycovarsghcargsTpghcThe promoted listE !"#$%&'()*+,-./0123456789:;<=>?@ABCDEF O((((((((((((((((((((((((((((((()))))))))) ) ) ) ) ))))))))))))))))))) )!)")#)$)%)&)')()))*)+),)-).)/)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((FE())7)8(():)<()9);()M)L)=)>)A)?)B)@)C)P)Q)R)#)%)&()$)'()5)6)4()2)3)1()))*((()(),)-()+)/)0().D((E)E(()F()T)S)D)G()H()N)I()O)JA) ) ) ) )))>))))))))))) (()K)))B)C O=<))(@()))())(?())9:;8)")!567) ()*+,-./01234"#$%&' !NoneSXo)UghcThe NameCache makes sure that there is just one Unique assigned for each original name; i.e. (module-name, occ-name) pair and provides something of a lookup mechanism for those names.)WghcSupply of uniques)Xghc.Ensures that one original name gets one unique)YghcPer-module cache of original s given s)]ghc6Return a function to atomically update the name cache. )U)V)W)X)Y)Z)[)\)] )Z)[)\)])U)V)W)X)YNone )_ghcA renaming substitution from s to s. Like =4, but not maintaining pairs of substitutions. Like  CoreSubst.6, but with the domain being s instead of entire CoreExpr.)aghc  emptySubst = )b ?)bghcConstructs a new )_% assuming the variables in the given > are in scope.)cghcSubstitutes an " for another one according to the )_+ given in a way that avoids shadowing the >', returning the result and an updated )_1 that should be used by subsequent substitutions.)dghc 4substBndrs = runState . traverse (state . substBndr))eghcPSubstitutes an occurrence of an identifier for its counterpart recorded in the )_.)fghcPSubstitutes an occurrence of an identifier for its counterpart recorded in the )_X. Does not generate a debug warning if the identifier to to substitute wasn't in scope.)gghcAdd the C to the in-scope set and remove any existing substitutions for it.)hghcAdd a substitution for an  to the )_: you must ensure that the in-scope set is such that TyCORep Note [The substitution invariant] holds after extending the substitution like this. )^)_)`)a)b)c)d)e)f)g)h )_)`)^)a)b)c)d)e)f)g)h'None+ghc Returns the * of the wrapper associated with the given . See Note [Primop wrappers].W+u)r)s)t)u)v)w)x)y)z){)|)})~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))********** * * * * ******************* *!*"*#*$*%*&*'*(*)***+*,*-*.*/*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*{*|*}*~*********************************************************************************************************************************++++++++++ + + + + +++++++++++++++++++ +!+"+#+$+%+&+'+(+)+*+++,+-+.+/+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+v+w+x+y+z+{+|+}+~++++++++++++++++++++++++++++++++++++++++++++++++)i)j)k)l)m)n)o)p)q++++++++++++++++W+u)r)s)t)u)v)w)x)y)z){)|)})~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))********** * * * * ******************* *!*"*#*$*%*&*'*(*)***+*,*-*.*/*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*{*|*}*~*********************************************************************************************************************************++++++++++ + + + + +++++++++++++++++++ +!+"+#+$+%+&+'+(+)+*+++,+-+.+/+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+v+w+x+y+z+{+|+}+~++++++++++++++++++++++++++++++++++++++++++++++++)n)o)p)q++++++++++++++++)k)l)m)i)jbNoneghcGet the  associated with a known-key p.None;+ghc stepping mode+ghcfilename (for errors)+ghcline number (for errors)(++++++++++++++++++++++++++++++++++++++++(++++++++++++++++++++++++++++++++++++++++None ,12=>?HV;<+ghcAmbiguous Field OccurrenceRepresents an *occurrence* of a field that is potentially ambiguous after the renamer, with the ambiguity resolved by the typechecker. We always store the x that the user originally wrote, and store the selector function after the renamer (for unambiguous occurrences) or the typechecker (for ambiguous occurrences).See Note [HsRecField and HsRecUpdField] in HsPat and Note [Disambiguating record fields] in TcExpr. See Note [Located RdrNames] in HsExpr+ghcField OccurrenceHRepresents an *occurrence* of an unambiguous field. We store both the xJ the user originally wrote, and after the renamer, the selector function.+ghc%See Note [Located RdrNames] in HsExpr+ghcLocated Field Occurrence+ghcHaskell Constructor Details+ghcConstructor Declaration Field+ghct : t,ghcSee Note [ConDeclField passs],ghc%Located Constructor Declaration Field,ghcHaskell Tuple Sort, ghcHaskell Type Literal,ghc Haskell Type,ghct : t , t,tB For details on above see note [Api annotations] in ApiAnnotation,ghct : None,ghct : None,ghct : t,,ghct : t '[' , t ']',ghct : t  '(' or '(#' , t  ')' or '#)',ghct : t '(#' , t '#)'@,ghct : None,ghct : t '(' , t ')',ghc  (?x :: ty)t : t,ghct : None,ghc  (ty :: kind)t : t '(' , t,t ')',ghct : t '$(' , t ')', ghct : None,!ghct : t '{-# UNPACK' or '{-# NOUNPACK' , t '#-}' t  '!',"ghct : t '{' , t '}',#ghct : t "'[" , t ']',$ghct : t "'(" , t ')',%ghct : None,&ghct : None,-ghcHaskell Type Variable Binder,/ghct : t , t, t,1ghcyThese names are used early on to store the names of implicit parameters. They completely disappear after type-checking.,3ghc'Located Haskell Signature Wildcard Type,4ghcLocated Haskell Wildcard Type,5ghcLocated Haskell Signature Type,6ghcHaskell Wildcard Binders,;ghcHaskell Implicit Binders,Dghc)Located Haskell Quantified Type Variables,Ighc$Located Haskell Type Variable Binder,JghcLocated Haskell Kind,Kghc Haskell Kind,LghcLocated Haskell Type,MghcHaskell Context,NghcLocated Haskell Context,Oghc Bang Type,PghcLocated Bang Type,aghc Does this ,-' come with an explicit kind annotation?,bghcDo all type variables in this ,D come with kind annotations?,kghc0Convert a LHsTyVarBndr to an equivalent LHsType.,lghcYConvert a LHsTyVarBndrs to a list of types. Works on *type* variable only, no kind vars.,ghc3Prints a forall; When passed an empty list, prints forall. only when  -dppr-debug,ghc Version of ,: that can also print an extra-constraints wildcard, e.g. _ => a -> Bool or (Show a, _) => a -> StringJ. This underscore will be printed when the 'Maybe SrcSpan' argument is a R containing the location of the extra-constraints wildcard. A special function for this is needed, as the extra-constraints wildcard is removed from the actual context and type, and stored in a separate field, thus just printing the type will not print the extra-constraints wildcard.,ghc Version of  pprHsForall or pprHsForallExtra that will always print forall. when passed Just []. Prints nothing if passed R,ghc, p t returns R if the type t% needs parentheses under precedence p.,ghc, p ty checks if , p ty is true, and if so, surrounds ty with an , . Otherwise, it simply returns ty.,ghc, p ctxt checks if ctxt is a single constraint c such that , p c is true, and if so, surrounds c with an , to form a parenthesized ctxt . Otherwise, it simply returns ctxt unchanged.,ghct : None,ghc May have t : t when in a list,Jghct : t,Lghc May have t : t when in a list,Nghct : t B For details on above see note [Api annotations] in ApiAnnotation%%%%%%%%%%%%%%+++++++++++++++++++++,,,,,,,,,, , , , , ,,,,%,,,,,,,, ,,,!,,,&,,,,,",#,$,',(,),*,+,,,-,.,/,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,{,|,},~,,,,,,,,,,,,,,,,,,%,,,,,,,, ,,,!,,,&,,,,,",#,$,',(,),*,+,,,,,L,K,J,-,.,/,0,I,D,E,F,G,H,@,A,B,C,;,<,=,>,?,6,7,8,9,:,5,3,4,,,, , ,M,N,S, , , ,1,2,`++++,v+,P,O%%%%%%%%%%%%%%,Q,R++,,,,,,,++++++++++,++++,,,,,,o,,\,],X,^,_,T,U,V,W,a,b,n,d,c,[,e,h,j,f,i,g,|,},~,x,z,{,y,t,w,u,p,q,r,s,m,Y,Z,k,l,,,,,,,,None"#FMK ,ghc6All the information about the breakpoints for a module,ghcRThe array of flags, one per breakpoint, indicating which breakpoints are enabled.,ghc3An array giving the source span of each breakpoint.,ghcCAn array giving the names of the free variables at each breakpoint.,ghcHAn array giving the names of the declarations enclosing each breakpoint.,ghc1Array pointing to cost centre for each breakpoint,ghc6info about each breakpoint from the bytecode generator,ghcC CostCentre type,ghcBreakpoint index,ghcCInformation about a breakpoint that we know at code-generation time,ghcConstruct an empty ModBreaks.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,NoneO,ghcA measure of the size of the expressions, strictly greater than 0 Counts *leaves*, not internal nodes. Types and coercions are not counted. ,,,,,,,,,,, ,,,,,,,,,,,None`TJTrghc?A function to produce an annotation for a given right-hand-sideTsghc-Annotate with the size of the right-hand-sideTtghc No annotationTughc4Pretty print the argument in a function application.Tvghc3generate an annotation to place before the bindingghcbindings to showghcthe pretty result ,,,,,,,,, ,,,,,,,,,None ,.2>HMVe -+ghcLike   , but with an  instance that returns .-,ghc,Used as a data type index for the stgSyn AST-CghcA top-level binding.-FghczDoes this constructor application refer to anything in a different *Windows* DLL? If so, we can't allocate it statically-Gghc Type of an StgArg8Very half baked because we have lost the type arguments.-Hghc2Strip ticks of a given type from an STG expression-IghccGiven an alt type and whether the program is unarised, return whether the case binder is in scope.Case binders of unboxed tuple or unboxed sum type always dead after the unariser has run. See Note [Post-unarisation invariants].-JghcuUsed when constructing a term with an unused extension point that should not appear in pretty-printed output at all.Twghc,Code gen needs to track non-global free vars-1ghc<Extension point for non-global free var list just before -/.ghc*CCS to be attached (default is CurrentCCS)ghc- | - | -ghcJarguments; if empty, then not a function; as above, order is important.ghcbody-Ighc unarised? U,,,---------- - - - - ------------------- -!-$-%-#-"-&-'-(-)-*-+-,-/---.-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-QU-=->-?-C-D-E-@-A-B-3-<-4-5-6-7-8-9-:-;-0-1-2-&-!-$-%-#-"-,-/---.-*-)-(-'-+-J,-----N- ------------------- - - - - ---,,---L-M-K-F-G-H-I-P-O-QNonehs-]-]None>HVXlTTxghchave we run the unariser yet?Tyghc\Top-level bindings can't inherit the cost centre stack from their (static) allocation site.-`ghcmodule being compiledghchave we run Unarise yet?ghcwho produced the STG?-`-`NoneHMV-dghc-The analysis monad consists of the following Tz components:-j: Reader-like context. Contains a substitution, info about how how lifted identifiers are to be expanded into applications and details such as AI and a flag helping with determining if a lifted binding is caffy. -e.: Writer output for the resulting STG program.No pure state componentBut wrapping around 2 for generating fresh lifted binders. (The uniqAwaya approach could give the same name to two different lifted binders, so this is necessary.)-eghc]We need to detect when we are lifting something out of the RHS of a recursive binding (c.f. StgLiftLams.LiftM#floats), in which case that binding needs to be added to the same top-level recursive group. This requires we detect a certain nesting structure, which is encoded by -f and -g. Although -rC will only ever care if the current binding to be lifted (through -iz) will occur inside such a binding group or not, e.g. doesn't care about the nesting level as long as its greater than 0.-jghc)Environment threaded around in a scoped, Reader-like fashion.-lghc Read-only.-mghc(We need to track the renamings of local s to their lifted f, because shadowing might make a closure's free variables unavailable at its call sites. Consider: * let f y = x + y in let x = 4 in f x  Here, f9 can't be lifted to top-level, because its free variable x# isn't available at its call site.-nghcLifted s don't occur as free variables in any closure anymore, because they are bound at the top-level. Every occurrence must supply the formerly free variables of the lifted o, so they in turn become free variables of the call sites. This environment tracks this expansion from lifted s to their free variables.s to s. Invariant: /s not present in this map won't be substituted.-oghc[Are we currently analysing within a caffy context (e.g. the containing top-level binder's ( is (P)? If not, we can safely assume that functions we lift out aren't caffy either.-pghc uncurry -q . -p = id-rghcFlattens an expression in [-e]U into an STG program, see #floats. Important pre-conditions: The nesting of opening StartBindinGroups and closing EndBindinGroups is balanced. Also, it is crucial that every binding group has at least one recursive binding inside. Otherwise there's no point in announcing the binding group in the first place and an ASSERT will trigger.T{ghcNOmitting this makes for strange closure allocation schemes that crash the GC.-tghcXAssumes a given caffyness for the execution of the passed action, which influences the ( of lifted bindings.-ughcWrites a plain -E to the output.-vghc&Starts a recursive binding group. See floats and -r.-wghc$Ends a recursive binding group. See floats and -r.-xghc^Lifts a binding to top-level. Depending on whether it's declared inside a recursive RHS (see floats and -rI), this might be added to an existing recursive top-level binding group.-yghcxTakes a binder and a continuation which is called with the substituted binder. The continuation will be evaluated in a -dD context in which that binder is deemed in scope. Think of it as a T|Z computation: After the continuation finishes, the new binding won't be in scope anymore.-zghcSee -y.-{ghc Similarly to -y, this function takes a set of variables to abstract over, the binder to lift (and generate a fresh, substituted name for) and a continuation in which that fresh, lifted binder is in scope.vIt takes care of all the details involved with copying and adjusting the binder, fresh name generation and caffyness.-|ghcSee -{.-}ghcSubstitutes a binder  occurrence), which was brought in scope earlier by -y/-{.-~ghc:Whether the given binding was decided to be lambda lifted.-ghcReturns an empty list for a binding that was not lifted and the list of all local variables the binding abstracts over (so, exactly the additional arguments at adjusted call sites) otherwise.-ghc Creates an expander functionQ for the current set of lifted binders. This expander function will replace any  by their corresponding c and, in addition, will expand any lifted binders by the former free variables it abstracts over.-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-{-|-}-~---p-q-j-k-l-m-n-o-e-f-g-h-i-r-d-s-t-v-w-u-x-y-z-{-|-}-~--NoneR-ghc@Annotates a top-level STG binding group with its free variables.-ghc1Annotates an STG binding with its free variables.T}ghcKThis makes sure that only local, non-global free vars make it into the set.----Nonew-ghc Header information only, not rhs-ghc,Show only some sub-components. Specifically, @[@] Print all sub-components.(n:ns)Print sub-component n with  ShowSub = ns!; elide other sub-components to ...6 May 14: the list is max 1 element long at the moment-ghcDEverything including GHC-internal information (used in --show-iface)-ghcThis corresponds to HsSrcBang-ghcmThis corresponds to an HsImplBang; that is, the final implementation decision about the data constructor arg. ghcHName of associated axiom and branches for pretty printing purposes, or Rc for an empty closed family without an axiom See Note [Pretty printing via IfaceSyn] in PprTyThing.AghcA binding top-level , in an interface file (e.g. the name of an .)..JghcPretty Print an IfaceExpresThe first argument should be a function that adds parens in context that need an atomic value (e.g. function args)HNO P Q R S T !!!!!!!!!! ! %%%%%%%%-----------------------------------------------------------------------------------------------------------------------.......... . . . . ................... .!.".#.$.%.&.'.(.).*.+.,.-.../.0.1.2.3.4.5.6.7.8.9.:.;.<.=.>.?.@.A.B.C.D.E.F.G.H.I.J.K.L.M....... .!.".#.$.%.&.'.(.).*.+.,.-.../.0.1.2.3.4.5.6.7.8.9.:.;.<.=.>.?.@. . . . .... ..-------------------------------------------------------------------------------------------------.......-------%%%%%%%%---.........--.A.C.B.E.D.F.K.L.M.J.I----------.H.GT~3None2;TghcWhat type of Cmm label we're dealing with. Determines the suffix appended to the name when a CLabel.CmmLabel is pretty printed.Tghc'misc rts info tables, suffix _infoTghc(misc rts entry points, suffix _entryTghc'misc rts ret info tables, suffix _infoTghc&misc rts return points, suffix _retTghc'misc rts data bits, eg CHARLIKE_closureTghc misc rts codeTghcclosures eg CHARLIKE_closureTghc)a prim call to some hand written Cmm codeTghcSelector thunksTghc AP thunksTghc_fast versions of generic applyTghcLabel for closureTghc*Info tables for closures; always read-onlyTghc Entry pointTghcSlow entry pointTghc)Like InfoTable but not externally visibleTghc%Like Entry but not externally visibleTghc4Label of place to keep Ticky-ticky info for this IdTghcConstructor entry pointTghcCorresponding info tableTghc!Table of closures for Enum tyconsTghc5Content of a string literal. See Note [Bytes label].TghcLike LocalInfoTable but for a proc-point block instead of a closure entry-point. See Note [Proc-point local block entry-point]..ghc'Record where a foreign label is stored..ghcLabel is in a named package.ghcLabel is in some external, system package that doesn't also contain compiled Haskell code, and is not associated with any .hi files. We don't have to worry about Haskell code being inlined from external packages. It is safe to treat the RTS package as "external"..ghc$Label is in the package currenly being compiled. This is only used for creating hacky tmp labels during code generation. Don't use it in any code that might be inlined across a package boundary (ie, core code) else the information will be wrong relative to the destination module..ghc.< is an abstract type that supports the following operations:Pretty printingIn a C file, does it need to be declared before use? (i.e. is it guaranteed to be already in scope in the places we need to refer to it?)WIf it needs to be declared, what type (code or data) should it be declared to have?.Is it visible outside this object file or not?#Is it "dynamic" (see details below)Eq and Ord, so that we can make sets of CLabels (currently only used in outputting C as far as I can tell, to avoid generating more than one declaration for any given label).3Converting an info table label into an entry label.XCLabel usage is a bit messy in GHC as they are used in a number of different contexts:!By the C-- AST to identify labels(By the unregisterised C code generator (PprC+) for naming functions (hence the name .)9By the native and LLVM code generators to identify labelsVFor extra fun, each of these uses a slightly different subset of constructors (e.g. T and T/ are used only in the NCG and LLVM backends).In general, we use T to represent Haskell things early in the pipeline. However, later optimization passes will often represent blocks they create with T where there is no obvious  to hang off the label.TghcJA label related to the definition of a particular Id or Con in a .hs file.TghcDA label from a .cmm file that is not associated with a .hs level Id.Tghc A label with a baked-in / algorithmically generated name that definitely comes from the RTS. The code for it must compile into libHSrts.a / libHSrts.so If it doesn't have an algorithmically generated name then use a CmmLabel instead and give it an appropriate UnitId argument.TghcA label associated with a block. These aren't visible outside of the compilation unit in which they are defined. These are generally used to name blocks produced by Cmm-to-Cmm passes and the native code generator, where we don't have a 4 to associate the label to and therefore can't use T.TghcA C (or otherwise foreign) label.TghcLocal temporary label used for native (or LLVM) code generation; must not appear outside of these contexts. Use primarily for debug informationTghcA label "derived" from another .Y by the addition of a suffix. Must not occur outside of the NCG or LLVM code generators.TghcThese labels are generated and used inside the NCG only. They are special variants of a label used for dynamic linking see module PositionIndependentCode for details.Tghc"This label is generated and used inside the NCG only. It is used as a base for PIC calculations on some platforms. It takes the form of a local numeric assembler label '1'; and is pretty-printed as 1b, referring to the previous definition of 1: in the assembler source file.TghcJA label before an info table to prevent excessive dead-stripping on darwinTghc"Per-module table of tick locationsTghcStatic reference tableTghc"A bitmap (function or case return).ghcFor debugging problems with the CLabel representation. We can't make a Show instance for CLabel because lots of its components don't have instances. The regular Outputable instance only shows the label name, and not its other info..ghcMake a foreign label.ghc-Update the label size field in a ForeignLabel.ghc+Whether label is a top-level string literal.ghc8Whether label is a non-haskell label (defined in C code).ghcFWhether label is a static closure label (can come from haskell or cmm).ghc Whether label is a .rodata label.ghc2Whether label is points to some kind of info table.ghc1Whether label is points to constructor info table.ghc,Get the label size field from a ForeignLabel.ghcXConstruct a label for a DWARF Debug Information Entity (DIE) describing another symbol..ghc7If a label is a local block label then return just its %  , otherwise R..ghcCheck whether a label corresponds to a C function that has a prototype in a system header somehere, or is built-in to the C compiler. For these labels we avoid generating our own C prototypes..ghcIs a CLabel visible outside this object file or not? From the point of view of the code generator, a name is externally visible if it has to be declared as exported in the .o file's symbol table; that is, made non-static.TghcqWork out the general type of data at the address of this label whether it be code, data, or static GC object..ghcIs a .. defined in the current module being compiled?Sometimes we can optimise references within a compilation unit in ways that we couldn't for inter-module references. This provides a conservative estimate of whether a . lives in the current module..ghcDoes a . need dynamic linkage?kWhen referring to data in code, we need to know whether that data resides in a DLL or not. [Win32 only.]  labelDynamic returns TrueB if the label is located in a DLL, be it a data reference or not.].~............................................................................................]...................................................................~..........................None5..None=6% % ...% % ...None=>?@A9/ghcSets of registers/ghc'Parameters: 1. Identifier 2. Type/ghcA stack area is either the stack slot where a variable is spilled or the stack space where function arguments and results are passed.Y$%&'()*+,-/01.23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghqrstuvwxyz{|}~      !"#$%&'()*..................////////// / / / / /////////////////// /$/#/!/"/%/&/'/(/)/*/+/,/-/.///0/1/2/3/4/5/6/7/8/9/:/;/</=/>/?/@/A/B/C/D/E/F/GZ/ /$/#/!/"/%/&/'/)/*////+/,//////////(///-..................//////G/F/</=/?/>/@/A/B/C/D/E/;///// / / /:/9// / /./0/1/2/3/5/4/6/7///8///None@/_/`/_/`NoneA,/g/h/i/j/k/l/g/h/i/j/k/lNoneA/m/n/o/p/q/r/m/n/o/p/q/rNoneB/s/t/u/v/w/s/t/u/v/wNoneBn/x/y/z/{/|/x/y/z/{/|NoneB/}/~////}/~///NoneC://////////NoneC//////////NoneJ/ghcReturns RG if this global register is stored in a caller-saves machine register./ghcHHere is where the STG register map is defined for each target arch. The order matters (for the llvm backend anyway)! We must make sure to maintain the order here with the order used in the LLVM calling conventions. Note that also, this isn't all registers, just the ones that are currently possbily mapped to real registers.//////////None&'1=>?@AX0/ghcTick scope identifier, allowing us to reason about what annotations in a Cmm block should scope over. We especially take care to allow optimisations to reorganise blocks without losing tick association in the process./ghcThe global scope is the "root" of the scope graph. Every scope is a sub-scope of the global scope. It doesn't make sense to add ticks to this scope. On the other hand, this means that setting this scope on a block means no ticks apply to it./ghclConstructs a new sub-scope to an existing scope. This allows us to translate Core-style scoping rules (see  tickishScoped2) into the Cmm world. Suppose the following code:tick 1# case ... of A -> tick 2 ... B -> tick 3 ...We want the top-level tick annotation to apply to blocks generated for the A and B alternatives. We can achieve that by generating tick 1~ into a block with scope a, while the code for alternatives A and B gets generated into sub-scopes a/b and a/c respectively./ghcA combined scope scopes over everything that the two given scopes cover. It is therefore a sub-scope of either scope. This is required for optimisations. Consider common block elimination: A -> tick 2, case ... of C -> [common] B -> tick 3 case ... of D -> [common]We will generate code for the C and D alternatives, and figure out afterwards that it's actually common code. Scoping rules dictate that the resulting common block needs to be covered by both tick 2 and tick 3z, therefore we need to construct a scope that is a child to *both* scope. Now we can do that - if we assign the scopes ac and bOd to the common-ed up blocks, the new block could have a combined tick scope ac+bd, which both tick 2 and tick 3 apply to./ghc)Tickish in Cmm context (annotations only)/ghcjA convention maps a list of values (function arguments or return values) to registers or stack locations./ghc top-level Haskell functions use NativeDirectCall, which maps arguments to registers starting with R2, according to how many registers are available on the platform. This convention ignores R1, because for a top-level function call the function closure is implicit, and doesn't need to be passed./ghcnon-top-level Haskell functions, which pass the address of the function closure in R1 (regardless of whether R1 is a real register or not), and the rest of the arguments in registers or on the stack./ghc%a native return. The convention for returns depends on how many values are returned: for just one value returned, the appropriate register is used (R1, F1, etc.). regardless of whether it is a real register or not. For multiple values returned, they are mapped to registers or the stack./ghc/Slow entry points: all args pushed on the stack/ghc\Entry to the garbage collector: uses the node reg! (TODO: I don't think we need this --SDM)TghcOutput all scope paths.TghcRReturns the head uniques of the scopes. This is based on the assumption that the Unique of SubScope` identifies the underlying super-scope. Used for efficient equality and comparison, see below./ghc_Checks whether two tick scopes are sub-scopes of each other. True if the two scopes are equal./ghcCombine two tick scopes. The new scope should be sub-scope of both parameters. We simplfy automatically if one tick scope is a sub-scope of the other already.B//////////////////////////////////////////////////////////////////B//////////////////////////////////////////////////////////////////NoneF9///////////////////////////////0000000000 0 0 0 0 0000000000009///////////////////////////////0000000000 0 0 0 0 000000000000None&'03ghc!Info table as a haskell data type0KghcA top-level chunk, abstracted over the type of the contents of the basic blocks (Cmm or instructions are the likely instantiations).0Sghc4Should a data in this section be considered constant0TghcaThe branch block id is that of the first block in the branch, which is that branch's entry point$%&'()*+,-/01.23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghqrstuvwxyz{|}~      !"#$%&'()*..................////////// / / / / /////////////////// /$/#/!/"/%/&/'/(/)/*/+/,/-/.///0/1/2/3/4/5/6/7/8/9/:/;/</=/>/?/@/A/B/C/D/E/F/G//////////////////////////////////////////////////////////////////000000 0!0"0#0$0%0&0'0)0(0.0*0+0,0-0/000201030405060708090:0;0<0=0>0?0@0A0B0C0D0E0F0G0H0I0J0K0M0L0N0O0P0Q0R0S0T0UC0Q0O0P0J0K0M0L0H0D0E0F0G0C0I0N0%0&0'0)0(0.0*0+0,0-0/00 0!0"0#0$0S000T000U0?0@0A0B0:0;0<0=0>030405060708090R000201None0YghcAn immediate value. Not all of these are directly representable by the machine. Things like ImmLit are slurped out and put in a data segment instead.0eghc'Create a ImmLit containing this string.0fghcConvert a CmmLit to an Imm. Narrow to the width: a CmmInt might be out of range, but we assume that ImmInteger only contains in-range values. A signed value should be fine here.0Y0Z0[0\0]0^0_0`0a0b0c0d0e0f0Y0Z0[0\0]0^0_0`0a0b0c0d0e0fNone0gghcwRepresents a memory address in an instruction. Being a RISC machine, the SPARC addressing modes are very regular.0jghc4Add an integer offset to the address in an AddrMode.0g0h0i0j0g0h0i0jNone0k0l0m0n0o0l0k0m0o0nNoneB0u0v0w0x0y0z0u0v0w0x0y0zNoneMv0{ghcLlvm cast operations.0|ghcInteger truncate0}ghcInteger extend (zero fill)0~ghcInteger extend (sign fill)0ghcFloat truncate0ghc Float extend0ghcFloat to unsigned Integer0ghcFloat to signed Integer0ghcUnsigned Integer to Float0ghcSigned Int to Float0ghcPointer to Integer0ghcInteger to Pointer0ghc6Cast between types where no bit manipulation is needed0ghcLlvm compare operations.0ghcEqual (Signed and Unsigned)0ghcNot equal (Signed and Unsigned)0ghcUnsigned greater than0ghcUnsigned greater than or equal0ghcUnsigned less than0ghcUnsigned less than or equal0ghcSigned greater than0ghcSigned greater than or equal0ghcSigned less than0ghcSigned less than or equal0ghc Float equal0ghcFloat not equal0ghcFloat greater than0ghcFloat greater than or equal0ghcFloat less than0ghcFloat less than or equal0ghc)Llvm binary operators machine operations.0ghc1add two integer, floating point or vector values.0ghcsubtract two ...0ghc multiply ..0ghc$unsigned integer or vector division.0ghcsigned integer ..0ghc*unsigned integer or vector remainder (mod)0ghc signed ...0ghc(add two floating point or vector values.0ghcsubtract two ...0ghc multiply ...0ghc divide ...0ghc remainder ...0ghc Left shift0ghc3Logical shift right Shift right, filling with zero0ghcsArithmetic shift right The most significant bits of the result will be equal to the sign bit of the left operand.0ghcAND bitwise logical operation.0ghcOR bitwise logical operation.0ghcXOR bitwise logical operation.0ghcLinkage type of a symbol.`The description of the constructors is copied from the Llvm Assembly Language Reference Manual  -http://www.llvm.org/docs/LangRef.html#linkage5, because they correspond to the Llvm linkage types.0ghcjGlobal values with internal linkage are only directly accessible by objects in the current module. In particular, linking code into a module with an internal global value may cause the internal to be renamed as necessary to avoid collisions. Because the symbol is internal to the module, all references can be updated. This corresponds to the notion of the static keyword in C.0ghc Globals with linkonce linkage are merged with other globals of the same name when linkage occurs. This is typically used to implement inline functions, templates, or other code which must be generated in each translation unit that uses it. Unreferenced linkonce globals are allowed to be discarded.0ghcweakI linkage is exactly the same as linkonce linkage, except that unreferenced weak globals may not be discarded. This is used for globals that may be emitted in multiple translation units, but that are not guaranteed to be emitted into every translation unit that uses them. One example of this are common globals in C, such as int X; at global scope.0ghc appending linkage may only be applied to global variables of pointer to array type. When two global variables with appending linkage are linked together, the two global arrays are appended together. This is the Llvm, typesafe, equivalent of having the system linker append together sections/ with identical names when .o files are linked.0ghcThe semantics of this linkage follow the ELF model: the symbol is weak until linked, if not linked, the symbol becomes null instead of being an undefined reference.0ghc[The symbol participates in linkage and can be used to resolve external symbol references.0ghc Alias for 03 but with explicit textual form in LLVM assembly.0ghcISymbol is private to the module and should not appear in the symbol table0ghcFFunctions can have a fixed amount of parameters, or a variable amount.0ghc1Different calling conventions a function can use.0ghcHThe C calling convention. This calling convention (the default if no other calling convention is specified) matches the target C calling conventions. This calling convention supports varargs function calls and tolerates some mismatch in the declared prototype and implemented declaration of the function (as does normal C).0ghc/This calling convention attempts to make calls as fast as possible (e.g. by passing things in registers). This calling convention allows the target to use whatever tricks it wants to produce fast code for the target, without having to conform to an externally specified ABI (Application Binary Interface). Implementations of this convention should allow arbitrary tail call optimization to be supported. This calling convention does not support varargs and requires the prototype of al callees to exactly match the prototype of the function definition.0ghcThis calling convention attempts to make code in the caller as efficient as possible under the assumption that the call is not commonly executed. As such, these calls often preserve all registers so that the call does not break any live ranges in the caller side. This calling convention does not support varargs and requires the prototype of all callees to exactly match the prototype of the function definition.0ghcThe GHC-specific  registerised calling convention.0ghcAny calling convention may be specified by number, allowing target-specific calling conventions to be used. Target specific calling conventions start at 64.0ghc X86 Specific 0R convention. LLVM includes a specific alias for it rather than just using CC_Ncc.0ghc#Different types to call a function.0ghc(Normal call, allocate a new stack frame.0ghc7Tail call, perform the call in the current stack frame.0ghcLlvm Function Attributes.)Function attributes are set to communicate additional information about a function. Function attributes are considered to be part of the function, not of the function type, so functions with different parameter attributes can have the same function type. Functions can have multiple attributes.Descriptions taken from )http://llvm.org/docs/LangRef.html#fnattrs0ghcThis attribute indicates that the inliner should attempt to inline this function into callers whenever possible, ignoring any active inlining size threshold for this caller.0ghcThis attribute indicates that the source code contained a hint that inlining this function is desirable (such as the "inline" keyword in C/C++). It is just a hint; it imposes no requirements on the inliner.0ghcThis attribute indicates that the inliner should never inline this function in any situation. This attribute may not be used together with the alwaysinline attribute.0ghcThis attribute suggests that optimization passes and code generator passes make choices that keep the code size of this function low, and otherwise do optimizations specifically to reduce code size.0ghcThis function attribute indicates that the function never returns normally. This produces undefined behavior at runtime if the function ever does dynamically return.0ghcThis function attribute indicates that the function never returns with an unwind or exceptional control flow. If the function does unwind, its runtime behavior is undefined.0ghcThis attribute indicates that the function computes its result (or decides to unwind an exception) based strictly on its arguments, without dereferencing any pointer arguments or otherwise accessing any mutable state (e.g. memory, control registers, etc) visible to caller functions. It does not write through any pointer arguments (including byval arguments) and never changes any state visible to callers. This means that it cannot unwind exceptions by calling the C++ exception throwing methods, but could use the unwind instruction.0ghc4This attribute indicates that the function does not write through any pointer arguments (including byval arguments) or otherwise modify any state (e.g. memory, control registers, etc) visible to caller functions. It may dereference pointer arguments and read state that may be set in the caller. A readonly function always returns the same value (or unwinds an exception identically) when called with the same set of arguments and global state. It cannot unwind an exception by calling the C++ exception throwing methods, but may use the unwind instruction.0ghcRThis attribute indicates that the function should emit a stack smashing protector. It is in the form of a "canary" a random value placed on the stack before the local variables that's checked upon return from the function to see if it has been overwritten. A heuristic is used to determine if a function needs stack protectors or not.If a function that has an ssp attribute is inlined into a function that doesn't have an ssp attribute, then the resulting function will have an ssp attribute.0ghcThis attribute indicates that the function should always emit a stack smashing protector. This overrides the ssp function attribute.If a function that has an sspreq attribute is inlined into a function that doesn't have an sspreq attribute or which has an ssp attribute, then the resulting function will have an sspreq attribute.0ghcThis attribute indicates that the code generator should not use a red zone, even if the target-specific ABI normally permits it.0ghc>This attributes disables implicit floating point instructions.0ghcxThis attribute disables prologue / epilogue emission for the function. This can have very system-specific consequences.0ghcLLVM Parameter Attributes.qParameter attributes are used to communicate additional information about the result or parameters of a function0ghcThis indicates to the code generator that the parameter or return value should be zero-extended to a 32-bit value by the caller (for a parameter) or the callee (for a return value).0ghcThis indicates to the code generator that the parameter or return value should be sign-extended to a 32-bit value by the caller (for a parameter) or the callee (for a return value).0ghcThis indicates that this parameter or return value should be treated in a special target-dependent fashion during while emitting code for a function call or return (usually, by putting it in a register as opposed to memory).0ghc\This indicates that the pointer parameter should really be passed by value to the function.0ghcThis indicates that the pointer parameter specifies the address of a structure that is the return value of the function in the source program.0ghcRThis indicates that the pointer does not alias any global or any other parameter.0ghcfThis indicates that the callee does not make any copies of the pointer that outlive the callee itself0ghcZThis indicates that the pointer parameter can be excised using the trampoline intrinsics.0ghcAn LLVM Function0ghc!Unique identifier of the function0ghcLinkageType of the function0ghc&The calling convention of the function0ghcType of the returned value0ghc'Indicates if this function uses varargs0ghcParameter types and attributes0ghc(Function align value, must be power of 20ghcLlvm Static Data.BThese represent the possible global level variables and constants.0ghcA comment in a static section0ghc#A static variant of a literal value0ghcFor uninitialised data0ghcDefines a static 10ghcA static array0ghcA static structure type0ghcA pointer to other data0ghcTruncate0ghcPointer to Pointer conversion0ghcPointer to Integer conversion0ghcConstant addition operation0ghcConstant subtraction operation0ghcLlvm Literal Data.(These can be used inline in expressions.0ghc'Refers to an integer constant (i64 42).0ghcFloating point literal0ghc.Literal NULL, only applicable to pointer types0ghcVector literal0ghc>Undefined value, random bit pattern. Useful for optimisations.0ghcLLVM Variables0ghcVariables with a global scope.0ghc,Variables local to a function or parameters.0ghcoNamed local variables. Sometimes we need to be able to explicitly name variables (e.g for function arguments).0ghcA constant variable0ghcMutable global variable0ghcConstant global variable0ghcAlias of another variable1ghcGAn LLVM section definition. If Nothing then let LLVM decide the section1ghc Llvm Types1ghc&An integer with a given width in bits.1ghc32 bit floating point1ghc64 bit floating point1ghc 80 bit (x86 only) floating point1ghc128 bit floating point1ghcA pointer to a 11 ghc An array of 11 ghc A vector of 11 ghcA 0 can represent a label (address)1 ghc Void type1 ghcPacked structure type1ghcUnpacked structure type1ghc A type alias1ghc LLVM Metadata1ghc3Function type, used to create pointers to functions1ghc A type alias1ghcA String in LLVM1ghc4A global mutable variable. Maybe defined or external1ghcReturns the variable of the 11ghcReturn the value of the 11ghc)Return the variable name or value of the 0* in Llvm IR textual representation (e.g. @x, %y or 42).1ghc)Return the variable name or value of the 0* in a plain textual representation (e.g. x, y or 42).1ghcPrint a literal value. No type.1ghc Return the 1 of the 01 ghc Return the 1 of a 01!ghc Return the 1 of the 01"ghc Return the 0 for a 01#ghc0Add a pointer indirection to the supplied type. 1  and 1  cannot be lifted.1$ghcLift a variable to 1 type.1%ghc:Remove the pointer indirection of the supplied type. Only 1 constructors can be lowered.1&ghcLower a variable of 1 type.1'ghcTest if the given 1 is an integer1(ghcTest if the given 1 is a floating point type1)ghcTest if the given 1 is an 1 construct1*ghcTest if the given 1 is an 1  construct1+ghc Test if a 0 is global.1,ghcWidth in bits of an 1, returns 0 if not applicable14ghc"The target architectures word size15ghc"The target architectures word size16ghcConvert a Haskell Double to an LLVM hex encoded floating point form. In Llvm float literals can be printed in a big-endian hexadecimal format, regardless of underlying architecture.See Note [LLVM Float Types].1:ghcBReverse or leave byte data alone to fix endianness on this target.0{0000000000~0}0|00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111 1 1 1 1 111111111111111111111 1!1"1#1$1%1&1'1(1)1*1+1,1-1.1/101112131415161718191:1;1<111111111111 1 1 1 1 111111111000000000000000000000000000011111111 1!1"1#1$1%1&1'1(1)1*1+1,1-1.1/101112131415000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000{0000000000~0}0|161718191:1;1<NoneM1YghcEMetadata declarations. Metadata can only be declared in global scope.1ZghcXNamed metadata. Only used for communicating module information to LLVM. ('!name = !{ [! n ] }' form).1[ghc/Metadata node declaration. ('!0 = metadata !{  metadata expression }' form).1\ghcPAssociates some metadata with a specific label for attaching to an instruction.1^ghcLLVM metadata expressions1cghc)A reference to an un-named metadata node. 1Y1[1Z1\1]1^1b1a1`1_1c1d 1c1d1^1b1a1`1_1\1]1Y1[1ZNone;1lghcLlvm Expressions1mghcAllocate amount * sizeof(tp) bytes on the stack * tp: LlvmType to reserve room for * amount: The nr of tp's which must be allocated1nghcPerform the machine operator op on the operands left and right * op: operator * left: left operand * right: right operand1oghcPerform a compare operation on the operands left and right * op: operator * left: left operand * right: right operand1pghcuExtract a scalar element from a vector * val: The vector * idx: The index of the scalar within the vector1qghcExtract a scalar element from a structure * val: The structure * idx: The index of the scalar within the structure Corresponds to "extractvalue" instruction.1rghcInsert a scalar element into a vector * val: The source vector * elt: The scalar to insert * index: The index at which to insert the scalar1sghcAllocate amount * sizeof(tp) bytes on the heap * tp: LlvmType to reserve room for * amount: The nr of tp's which must be allocated1tghcLoad the value at location ptr1ughc(Atomic load of the value at location ptr1vghcNavigate in a structure, selecting elements * inbound: Is the pointer inbounds? (computed pointer doesn't overflow) * ptr: Location of the structure * indexes: A list of indexes to select the correct value.1wghcCast the variable from to the to type. This is an abstraction of three cast operators in Llvm, inttoptr, ptrtoint and bitcast. * cast: Cast type * from: Variable to cast * to: type to cast to1xghcAtomic read-modify-write operation * op: Atomic operation * addr: Address to modify * operand: Operand to operation * ordering: Ordering requirement1yghc Compare-and-exchange operation * addr: Address to modify * old: Expected value * new: New value * suc_ord: Ordering required in success case * fail_ord: Ordering required in failure case, can be no stronger than suc_ord Result is an i1, true if store was successful.1zghcCall a function. The result is the value of the expression. * tailJumps: CallType to signal if the function should be tail called * fnptrval: An LLVM value containing a pointer to a function to be invoked. Can be indirect. Should be LMFunction type. * args: Concrete arguments for the parameters * attrs: A list of function attributes for the call. Only NoReturn, NoUnwind, ReadOnly and ReadNone are valid here.1{ghcCall a function as above but potentially taking metadata as arguments. * tailJumps: CallType to signal if the function should be tail called * fnptrval: An LLVM value containing a pointer to a function to be invoked. Can be indirect. Should be LMFunction type. * args: Arguments that may include metadata. * attrs: A list of function attributes for the call. Only NoReturn, NoUnwind, ReadOnly and ReadNone are valid here.1|ghc^Merge variables from different basic blocks which are predecessors of this basic block in a new variable of type tp. * tp: type of the merged variable, must match the types of the predecessor variables. * predecessors: A list of variables and the basic block that they originate from.1}ghcInline assembly expression. Syntax is very similar to the style used by GCC. * assembly: Actual inline assembly code. * constraints: Operand constraints. * return ty: Return type of function. * vars: Any variables involved in the assembly code. * sideeffect: Does the expression have side effects not visible from the constraints list. * alignstack: Should the stack be conservatively aligned before this expression is executed.1~ghc/A LLVM expression with metadata attached to it.1ghcLlvm Statements1ghckAssign an expression to a variable: * dest: Variable to assign to * source: Source expression1ghcMemory fence operation1ghc!Always branch to the target label1ghcBranch to label targetTrue if cond is true otherwise to label targetFalse * cond: condition that will be tested, must be of type i1 * targetTrue: label to branch to if cond is true * targetFalse: label to branch to if cond is false1ghcComment Plain comment.1ghc\Set a label on this position. * name: Identifier of this label, unique for this module1ghcStore variable value in pointer ptr. If value is of type t then ptr must be of type t*. * value: Variable/Constant to store. * ptr: Location to store the value in1ghcMultiway branch * scrutinee: Variable or constant which must be of integer type that is determines which arm is chosen. * def: The default label if there is no match in target. * target: A list of (value,label) where the value is an integer constant and label the corresponding label to jump to if the scrutinee matches the value.1ghcCReturn a result. * result: The variable or constant to return1ghcIAn instruction for the optimizer that the code following is not reachable1ghc`Raise an expression to a statement (if don't want result or want to use Llvm unnamed values.1ghctA nop LLVM statement. Useful as its often more efficient to use this then to wrap LLvmStatement in a Just or [].1ghc.A LLVM statement with metadata attached to it.1ghc'LLVM atomic operations. Please see the  atomicrmwC instruction in the LLVM documentation for a complete description.1ghcLLVM ordering types for synchronization purposes. (Introduced in LLVM 3.0). Please see the LLVM documentation for a better description.1ghc(Some partial order of operations exists.1ghc?A single total order for operations at a single address exists.1ghc"Acquire synchronization operation.1ghc"Release synchronization operation.1ghc,Acquire + Release synchronization operation.1ghc&Full sequential Consistency operation.1ghcAn LLVM Function1ghc(The signature of this declared function.1ghcThe functions arguments1ghcThe function attributes.1ghc%The section to put the function into,1ghc Prefix data1ghcThe body of the functions.1ghc6An LLVM Module. This is a top level container in LLVM.1ghc/Comments to include at the start of the module.1ghcLLVM Alias type definitions.1ghcLLVM meta data.1ghc*Global variables to include in the module.1ghc@LLVM Functions used in this module but defined in other modules.1ghc&LLVM Functions defined in this module.1ghcA block of LLVM code.1ghcThe code label for this block1ghcrA list of LlvmStatement's representing the code for this block. This list must end with a control flow statement.1ghc Block labelsL1l1~1}1|1{1z1y1x1v1u1t1s1r1q1p1n1m1o1w111111111111111111111111111111111111111111111111111111111L1111111111111111111111111111111111111111111111111111111111l1~1}1|1{1z1y1x1v1u1t1s1r1q1p1n1m1o1wNoneD1ghcPrint out a whole LLVM module.1ghcFPrint out a multi-line comment, can be inside a function or on its own1ghc;Print out a comment, can be inside a function or on its own1ghc7Print out a list of global mutable variable definitions1ghc.Print out a global mutable variable definition1ghc&Print out a list of LLVM type aliases.1ghcPrint out an LLVM type alias.1ghc"Print out a list of LLVM metadata.1ghc&Print out an LLVM metadata definition.1ghc)Print out a list of function definitions.1ghc Print out a function definition.Tghc'Print out a function definition header.1ghc)Print out a list of function declaration.1ghc{Print out a function declaration. Declarations define the function type but don't define the actual body of the function.Tghc Print out a list of LLVM blocks.TghcCPrint out an LLVM block. It must be part of a function definition.TghcPrint out an LLVM block label.TghcPrint out an LLVM statement.TghcPrint out an LLVM expression.TghcShould always be a function pointer. So a global var of function type (since globals are always pointers) or a local var of pointer function type.Tghc Blank line.TghcExclamation point. 1111111111111 1111111111111 None0{0|0}0~0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111 1 1 1 1 111111111111111 1!1"1#1$1%1&1'1(1)1*1+1,1.1/1011121314151Y1Z1[1\1]1^1_1`1a1b1c1d1l1w1o1m1n1p1q1r1s1t1u1v1x1y1z1{1|1}1~111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000010111111111111111l1w1o1m1n1p1q1r1s1t1u1v1x1y1z1{1|1}1~111111000000000011111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000{0|0}0~00000000000000000000000000000000011111111 1 1 1 1 11111111111100001.1/1011121314151^1_1`1a1b1\1]1Y1Z1[1c1d1+1 11"1!1$1&1#1%1'1(1)1*1,1111111111111111None)P 1ghc;Get the LlvmVar function variable storing the real register1ghc;Get the LlvmVar function argument storing the real register1ghc>A list of STG Registers that should always be considered alive1ghc'STG Type Based Alias Analysis hierarchyTghcId values The T node is the root (there can be more than one) of the TBAA hierarchy and as of LLVM 4.0 should *only* be referenced by other nodes. It should never occur in any LLVM instruction statement.1ghcId values The T node is the root (there can be more than one) of the TBAA hierarchy and as of LLVM 4.0 should *only* be referenced by other nodes. It should never occur in any LLVM instruction statement.1ghcId values The T node is the root (there can be more than one) of the TBAA hierarchy and as of LLVM 4.0 should *only* be referenced by other nodes. It should never occur in any LLVM instruction statement.1ghcId values The T node is the root (there can be more than one) of the TBAA hierarchy and as of LLVM 4.0 should *only* be referenced by other nodes. It should never occur in any LLVM instruction statement.1ghcId values The T node is the root (there can be more than one) of the TBAA hierarchy and as of LLVM 4.0 should *only* be referenced by other nodes. It should never occur in any LLVM instruction statement.1ghcId values The T node is the root (there can be more than one) of the TBAA hierarchy and as of LLVM 4.0 should *only* be referenced by other nodes. It should never occur in any LLVM instruction statement.1ghcThe TBAA metadata identifier1ghc@Get the correct TBAA metadata information for this register type 11111111111 11111111111None_f:1ghcThe Llvm monad. Wraps LlvmEnv state as well as the IO monadTghc LLVM versionTghc Dynamic flagsTghc Output bufferTghcSupply of unique valuesTghcSupply of fresh metadata IDsTghcGlobal metadata nodesTghc"Global functions so far, with typeTghc;Globals that we had to alias, see [Llvm Forward References]Tghc'Pointers to be added to llvm.used (see cmmUsedLlvmGens)Tghc!Local variables so far, with typeTghc9Non-constant registers (alloca'd in the function prelude)1ghcAn unresolved Label.Labels are unresolved when we haven't yet determined if they are defined in the module we are currently compiling, or an external one.1ghc.Top level LLVM Data (globals and type aliases)1ghcGUnresolved code. Of the form: (data label, data type, unresolved data)1ghc#Global registers live on proc entry1ghc)Translate a basic CmmType to an LlvmType.1ghc*Translate a Cmm Float Width to a LlvmType.1ghc(Translate a Cmm Bit Width to a LlvmType.TghcGHC Call Convention for LLVM1ghc#Llvm Function type for Cmm function1ghcLlvm Function signature1ghcAlignment to use for functions1ghc Alignment to use for into tables1ghcSection to use for a function1ghcA Function's arguments1ghcLlvm standard fun attributes1ghc]Convert a list of types to a list of function parameters (each with no parameter attributes)1ghc Pointer width1ghc-The LLVM Version that is currently supported.TghcBLifting of IO actions. Not exported, as we want to encapsulate IO.1ghcGet initial Llvm environment.TghcGet environment (internal)TghcModify environment (internal)1ghc"Lift a stream into the LlvmM monad1ghc9Clear variables from the environment for a subcomputation1ghc3Insert variables or functions into the environment.1ghc3Insert variables or functions into the environment.1ghc1Lookup variables or functions in the environment.1ghc1Lookup variables or functions in the environment.1ghc(Set a register as allocated on the stack1ghc2Check whether a register is allocated on the stack1ghc1Allocate a new global unnamed metadata identifier1ghc/Get the LLVM version we are generating code for1ghc+Get the platform we are generating code for1ghc+Get the platform we are generating code for1ghcEDumps the document if the corresponding flag has been set by the user1ghc.Prints the given contents to the output handle1ghcMarks a variable as "used"2ghc,Return all variables marked as "used" so farTghcsSaves that at some point we didn't know the type of the label and generated a reference to a type variable instead2ghc%Sets metadata node for a given unique2ghc#Gets metadata node for given unique2ghc Here we pre-initialise some functions that are used internally by GHC so as to make sure they have the most general type in the case that user code also uses these functions but with a different type than GHC internally. (Main offender is treating return type as void) instead of 'void *'). Fixes trac #5486.2ghcPretty print a ..2ghcCreate/get a pointer to a global value. Might return an alias if the value in question hasn't been defined yet. We especially make no guarantees on the type of the returned pointer.2ghc7Generate definitions for aliases forward-referenced by  getGlobalPtr.fMust be called at a point where we are sure that no new global definitions will be generated anymore!2 ghc=Here we take a global variable definition, rename it with a $def, suffix, and generate the appropriate alias.5 *1111111111111111111111111111111111111111112222222222 5111111111111111111111111 *1111122122111111111111222222 NoneXf62ghc8Run the linker with some arguments and return the output2ghcRun the LLVM Optimiser2ghcRun the LLVM Compiler2ghc~Run the clang compiler (used as an assembler for the LLVM backend on OS X as LLVM doesn't support the OS X system assembler)2ghc<Figure out which version of LLVM we are running this session222222222222222222 2!2"222222222222222222 2!2"Noneh2&ghcReturn the "link info" stringSee Note [LinkInfo section] 2#2$2%2&2'2(2)2*2+ 2#2$2%2*2&2(2)2'2+NoneX`k 21ghc7Some platforms require that we explicitly link against libmV if any math-y things are used (which we assume to include all programs). See #14022.%  222222222222222222 2!2"2,2-2.2/20212223 2-2,202.2/ 212223NonerETghcIThe string appended to a variable name to create its structure type alias24ghc4Pass a CmmStatic section to an equivalent Llvm code.Tghc-Format the section type part of a Cmm SectionTghc-Format a Cmm Section into a LLVM section name25ghcHandle static dataTghc(Generate Llvm code for a static literal.@Will either generate the code or leave it unresolved if it is a . which isn't yet known.24252425Noneu26ghcPretty print LLVM data code27ghcPretty print LLVM code28ghcThe section we are putting info tables and their entry code into, should be unique since we process the assembly pattern matching this.262728272628None29ghcCommon things that we can do with instructions, on all architectures. These are used by the shared parts of the native code generator, specifically the register allocators.2:ghcIGet the registers that are being used by this instruction. regUsage doesn't need to do any trickery for jumps and such. Just state precisely the regs read and written by that insn. The consequences of control flow transfers, as far as register allocation goes, are taken care of by the register allocator.2;ghcOApply a given mapping to all the register references in this instruction.2<ghcChecks whether this instruction is a jump/branch instruction. One that can change the flow of control in a way that the register allocator needs to worry about.2=ghclGive the possible destinations of this jump instruction. Must be defined for all jumpish instructions.2>ghcChange the destination of this jump instruction. Used in the linear allocator when adding fixup blocks for join points.2?ghc5An instruction to spill a register into a spill slot.2@ghc6An instruction to reload a register from a spill slot.2Aghc?See if this instruction is telling us the current C stack delta2BghcpCheck whether this instruction is some meta thing inserted into the instruction stream for other purposes.jNot something that has to be treated as a real machine instruction and have its registers allocated. eg, comments, delta, ldata, etc.2CghcVCopy the value in a register to another one. Must work for all register classes.2DghcfTake the source and destination from this reg -> reg move instruction or Nothing if it's not one2EghcMake an unconditional jump instruction. For architectures with branch delay slots, its ok to put a NOP after the jump. Don't fill the delay slot with an instruction that references regs or you'll confuse the linear allocator.2KghcXHolds a list of source and destination registers used by a particular instruction.Machine registers that are pre-allocated to stgRegs are filtered out, because they are uninteresting from a register allocation standpoint. (We wouldn't want them to end up on the free list!)kAs far as we are concerned, the fixed registers simply don't exist (for allocation purposes, anyway).2MghcNo regs read or written to.2NghcJReturns the info table associated with the CmmDecl's entry point, if any.2OghcReturn the list of BlockIds in a CmmDecl that are entry points for this proc (i.e. they may be jumped to from outside this proc).2?ghcthe reg to spillghcthe current stack deltaghcspill slot to use2@ghcthe reg to reload.ghcthe current stack deltaghcthe spill slot to use2Cghcsource registerghcdestination register00000T292:2;2<2=2>2?2@2A2B2C2D2E2F2G2H2I2J2K2L2M2N2O2K2L2M000T002J2I2H2N2O292:2;2<2=2>2?2@2A2B2C2D2E2F2GNone &'@AHSVX 2Pghc@Function for rewrtiting and analysis combined. To be used with  rewriteCmm.Currently set to work with UniqSM monad, but we could probably abstract that away (if we do that, we might want to specialize the fixpoint algorithms to the particular monads through SPECIALIZE).2Vghc*The result of joining OldFact and NewFact.2Wghc!Result is different than OldFact.2XghcResult is the same as OldFact.TghcSort the blocks into the right order for analysis. This means reverse postorder for a forward analysis. For the backward one, we simply reverse that (see Note [Backward vs forward analysis]).TghcConstruct a mapping from a LabelG to the block indexes that should be re-analyzed if the facts at that Label change.7Note that we're considering here the entry point of the block, so if the facts change at the entry: * for a backward analysis we need to re-analyze all the predecessors, but * for a forward analysis, we only need to re-analyze the current block (and that will in turn propagate facts into its successors).TghcAfter some new facts have been generated by analysing a block, we fold this function over them to generate (a) a list of block indices to (re-)analyse, and (b) the new FactBase.2cghc_Returns the result of joining the facts from all the successors of the provided node or block.2eghc(Returns the joined facts for each label.2fghcPFolds backward over all nodes of an open-open block. Strict in the accumulator.2gghcFolds backward over all the nodes of an open-open block and allows rewriting them. The accumulator is both the block of nodes and f> (usually dataflow facts). Strict in both accumulated parts.$$2P2Q2R2S2T2U2V2W2X2Y2Z2[2\2]2^2_2`2a2b2c2d2e2f2g$2f2g2R2S2T2U2[2\2Y2Z2V2W2X2Q2P2]$2b2e2`2_2a2^2c2dNone2pghc%Get the integer format of this width.2qghc#Get the float format of this width.2rghc4Check if a format represents a floating point value.2sghcConvert a Cmm type to a Format.2tghcGet the Width of a Format.2h2i2j2k2l2m2n2o2p2q2r2s2t2u2h2i2j2k2l2m2n2o2p2q2r2s2t2uNone=2xghc8Get the standard name for the register with this number.2zghcregSqueeze_class reg Calculate the maximum number of register colors that could be denied to a node of this class due to having this reg as a neighbour.2|ghcMAll the allocatable registers in the machine, including register pairs.2}ghc"Get the regno for this sort of reg2~ghc"Get the regno for this sort of reg2ghc"Get the regno for this sort of reg2ghc"Get the regno for this sort of reg2ghc"Get the regno for this sort of reg2ghc.Some specific regs used by the code generator.2ghc.Some specific regs used by the code generator.2ghc.Some specific regs used by the code generator.2ghc.Some specific regs used by the code generator.2ghc.Some specific regs used by the code generator.2ghc.Some specific regs used by the code generator.2ghc.Some specific regs used by the code generator.2ghc.Some specific regs used by the code generator.2ghc.Some specific regs used by the code generator.2ghc.Some specific regs used by the code generator.2ghc.Some specific regs used by the code generator.2ghc.Some specific regs used by the code generator.2ghc.Some specific regs used by the code generator.2ghc.Some specific regs used by the code generator.2ghcBProduce the second-half-of-a-double register given the first half.`All the regs that the register allocator can allocate to, with the fixed use regs removed.2ghcXThe registers to place arguments for function calls, for some number of arguments.2ghc;All all the regs that could possibly be returned by argRegs2ghc$Make a virtual reg with this format.2x2y2z2{2|2}2~222222222222222222222222x2z2{2y2|2}222~222222222222222222222None]2ghcGet an AddrMode relative to the address in sp. This gives us a stack relative addressing mode for volatile temporaries and for excess call arguments.2ghcGet an address relative to the frame pointer. This doesn't work work for offsets greater than 13 bits; we just hope for the best2ghc=Convert a spill slot number to a *byte* offset, with no sign.2ghctThe maximum number of spill slots available on the C stack. If we use up all of the slots, then we're screwed.WWhy do we reserve 64 bytes, instead of using the whole thing?? -- BL 200902152ghc+stack offset in words, positive or negative22222222None2ghc1A reg map where no regs are free to be allocated.2ghcThe initial set of free regs.2ghc)Get all the free registers of this class.2ghcGrab a register.2ghcRelease a register from allocation. The register liveness information says that most regs die after a C call, but we still don't want to allocate to some of them. 222222222 222222222None92ghcregSqueeze_class reg Calculate the maximum number of register colors that could be denied to a node of this class due to having this reg as a neighbour.32222222222222222222222222222222222222222222222222223222222222222222222222222222222222222222222222222222None22222222222222None&'SX K2ghcUseful for creating an index into an array, with a statically known offset. The type is the element type; used for making the multiplier2ghcCUseful for creating an index into an array, with an unknown offset.3ghcReturns True if the two STG registers overlap on the specified platform, in the sense that writing to one will clobber the other. This includes the case that the two registers are the same STG register. See Note [Overlapping global registers] for details.3ghcReturns True if the STG register is used by the expression, in the sense that a store to the register might affect the value of the expression.We must check for overlapping registers and not just equal registers here, otherwise CmmSink may incorrectly reorder assignments that conflict due to overlap. See Trac #10521 and Note [Overlapping global registers].3#ghclike 3"(, but the entry block always comes first3$ghcLike 3#!, but we strive to ensure that we order blocks so that the false case of a conditional jumps to the next block in the output list of blocks. This matches the way OldCmm blocks were output since in OldCmm the false case was a fallthrough, whereas in Cmm conditional branches have both true and false successors. Block ordering can make a big difference in performance in the LLVM backend. Note that we rely crucially on the order of successors returned for CmmCondBranch by the NonLocal instance for CmmNode defined in cmm/CmmNode.hs. -GBM3+ghc1Extract all tick annotations from the given blockU2222222222222222222222222222222223333333333 3 3 3 3 3333333333333333333 3!3"3#3$3%3&3'3(3)3*3+3,3-3.3/30313233U2222222222222222222222222222233222233333 3 3 33333 3 33333333,3-3/3.3031323333333333333!3 3%3"3&3#3$3)3'3*3(3+None &'=>?HV q/_/`0k0l0m0n0oNone&' 3A3B3A3BNone&'f[;TghcGA more convenient way of accumulating LLVM statements and declarations.TghcValues which can be passed to T6 to configure its behaviour in certain circumstances.Currently just used for determining if a comparison should return a boolean (i1) or a word. See Note [Literals and branch conditions].TghcAn expression conversion return data: * LlvmVar: The var holding the result of the expression * LlvmStatements: Any statements needed to evaluate the expression * LlvmCmmDecl: Any global data needed for this expression3Fghc)Top-level of the LLVM proc Code generatorTghcGenerate code for a list of blocks that make up a complete procedure. The first block in the list is expected to be the entry point and will get the prologue.TghcGenerate code for one blockTghc.Convert a list of CmmNode's to LlvmStatement'sTghc.Convert a CmmStmt to a list of LlvmStatement'sTghcBWrapper function to declare an instrinct function by function typeTghc<Declares an instrinct function by return and parameter typesTghc*Memory barrier instruction for LLVM >= 3.0Tghc Insert a Tn, unless the target platform is in the provided list of exceptions (where no code will be emitted instead).Tghc Foreign CallsTghcLGenerate a call to an LLVM intrinsic that performs arithmetic operation with overflow bit (i.e., returns a struct containing the actual result of the operation and an overflow bit). This function will also extract the overflow bit and zero-extend it (all the corresponding Cmm PrimOps represent the overflow "bit" as a usual Int or Word).TghcA helper function for genCallWithOverflow that handles generating the call to the LLVM intrinsic and extracting the result from the struct to LlvmVars.Tghc(Create a function pointer from a target.Tghc(Create a function pointer from a target.TghcConversion of call arguments.TghcConversion of call arguments.Tghc6Cast a collection of LLVM variables to specific types.Tghc6Cast a collection of LLVM variables to specific types.TghcGCast an LLVM variable to a specific type, panicing if it can't be done.Tghc:Decide what C function to use to implement a CallishMachOpTghcTail function callsTghcCmmAssign operationlWe use stack allocated variables for CmmReg. The optimiser will replace these with registers when possible.TghcCmmStore operationTghcnCmmStore operation This is a special case for storing to a global register pointer offset such as I32[Sp+8].TghcNCmmStore operation Generic case. Uses casts and pointer arithmetic if needed.TghcUnconditional branchTghcConditional branchTghcHGenerate call to llvm.expect.x intrinsic. Assigning result to a new var.Tghc Switch branchTghc'i1 type expected (condition scrutinee).TghcWord type expected (usual).TghcvConvert a CmmExpr to a list of LlvmStatements with the result of the expression being stored in the returned LlvmVar.TghcHandle CmmMachOp expressionsTghcHandle CmmMachOp expressions This is a specialised method that handles Global register manipulations like 'Sp - 16', using the getelementptr instruction.TghcfHandle CmmMachOp expressions This handles all the cases not handle by the specialised genMachOp_fast.TghcHandle CmmLoad expression.TghcxHandle CmmLoad expression. This is a special case for loading from a global register pointer offset such as I32[Sp+8].TghcWHandle Cmm load expression. Generic case. Uses casts and pointer arithmetic if needed.TghcHandle CmmReg expression. This will return a pointer to the stack location of the register. Throws an error if it isn't allocated on the stack.Tghc]Return the value of a given register, as well as its type. Might need to be load from stack.Tghc$Allocate a local CmmReg on the stackTghcGenerate code for a literalTghc=Find CmmRegs that get assigned and allocate them on the stackAny register that gets written needs to be allcoated on the stack. This avoids having to map a CmmReg to an equivalent SSA form and avoids having to deal with Phi node insertion. This is also the approach recommended by LLVM developers.On the other hand, this is unnecessarily verbose if the register in question is never written. Therefore we skip it where we can to save a few lines in the output and hopefully speed compilation up a bit.TghchFunction epilogue. Load STG variables to use as argument for call. STG Liveness optimisation done here.Tghc6A series of statements to trash all the STG registers.In LLVM we pass the STG registers around everywhere in function calls. So this means LLVM considers them live across the entire function, when in reality they usually aren't. For Caller save registers across C calls the saving and restoring of them is done by the Cmm code generator, using Cmm local vars. So to stop LLVM saving them as well (and saving all of them since it thinks they're always live, we trash them just before the call by assigning the undefy value to them. The ones we need are restored from the Cmm local var and the ones we don't need are fine to be trashed.Tghc/Get a function pointer to the CLabel specified.aThis is for Haskell functions, function type is assumed, so doesn't work with foreign functions.TghcCreate a new local varTghc0Execute an expression, assigning result to a varTghcExpand CmmRegOffTghc0Convert a block id into a appropriate Llvm labelTghcCreate Llvm int LiteralTghc1Convert int type to a LLvmVar of word or i32 sizeTghcError functionsTghc Returns TBAA meta data by uniqueUghc)Returns TBAA meta data for given registerUghc'Return element of single-element list; T% if list is not a single-element listTghcPrimOpghcWidth of the operands.ghcActual arguments.ghc"LLVM types of the returned struct.3F3FNone&'3Kghc(Expressions, used for unwind information3Lghc literal value3Mghcregister plus offset3Nghcpointer dereferencing3SghczMaps registers to expressions that yield their "old" values further up the stack. Most interesting for the stack pointer Sp_, but might be useful to document saved registers, too. Note that a register's value will be R= when the register's previous value cannot be reconstructed.3TghcA label associated with an 3SUghcVIntermediate data structure holding debug-relevant context information about a block.3VghcIDebug information about a block of code. Ticks scope over nested blocks.3XghcEntry label of containing proc3Yghc Hoopl label3Zghc Output label3[ghcHas an info table?3\ghc9The parent of this proc. See Note [Splitting DebugBlocks]3]ghcTicks defined in this block3^ghcBest source tick covering block3_ghc+Output position relative to other blocks. Nothing# means the block was optimized out3aghc Nested blocks3bghcIs this the entry block?3cghcExtract debug data from a group of procedures. We will prefer source notes that come from the given module (presumably the module that we are currently compiling).Ughc1Build a map of blocks sorted by their tick scopesThis involves a pre-order traversal, as we want blocks in rough control flow order (so ticks have a chance to be sorted in the right order).3eghcbSets position and unwind table fields in the debug block tree according to native generated code.3fghc9Converts debug blocks into a label map for easier lookups3gghcConversion of Cmm expressions to unwind expressions. We check for unsupported operator usages and simplify the expression as far as possible.3K3M3L3N3O3P3Q3R3S3T3U3V3W3X3Y3Z3[3\3]3^3_3`3a3b3c3d3e3f3g3V3W3X3Y3Z3[3\3]3^3_3`3a3b3c3d3e3f3S3T3U3K3M3L3N3O3P3Q3R3gNone3l3m3n3o3l3m3n3oNone&'>XDUghc:A mapping from block labels to the variables live on entryUghc&The variables live on entry to a block3qghcThe dataflow lattice3rghc'Calculated liveness info for a CmmGraphUghcJOn entry to the procedure, there had better not be any LocalReg's live-in.3p3q3r3s3t3p3r3s3q3tNone&'Ughcconflicts (r,e) node is False if and only if the assignment r = e' can be safely commuted past statement node.3u3uNone&'3v3w3v3wNoneUghcBIs the SRT offset field inline in the info table on this platform?bSee the section "Referring to an SRT from the info table" in Note [SRTs] in CmmBuildInfoTables.hs3ghcAValue of the srt field of an info table when using an StgLargeSRTU ghcWrap a /  in an alignment check when -falignment-sanitisation is enabled.U ghcWReturns: 1. The bitmap (literal value or label) 2. Large bitmap CmmData if needed3|3}3~3333333333333333333333333|3}3~333333333333333333333333None"&' 333333333 333333333None&'3ghcTraverses the 0H, making sure that /# are suitable for code generation.33None&'/33333333None&'XU ghc$Ignore these node types for equalityU ghcGiven a block map, ensure that all "target" blocks are covered by the same ticks as the respective "source" blocks. This not only means copying ticks, but also adjusting tick scopes where necessary.33None3ghcvGiven a list of arguments, and a function that tells their types, return a list showing where each argument is passed333333333333None&' 3ghcUnlabeled graph with tick scope3ghc+CmmAGraph is a chunk of code consisting of:.ordinary statements (assignments, stores etc.)jumpslabelsout-of-line labelled blocksThe semantics is that control falls through labels and out-of-line blocks. Everything after a jump up to the next label is by definition unreachable code, and will be discarded.*Two CmmAGraphs can be stuck together with  *D, with the meaning that control flows from the first to the second.A 3 can be turned into a 0HX (closed at both ends) by providing a label for the entry point and a tick scope; see 3.3ghc.creates a sequence "goto id; id:" as an AGraph3ghc(creates an open AGraph from a given node3ghc)creates a closed AGraph from a given node3ghc0A labelled code block; should end in a last node3ghc*allocate a fresh label for the entry point3ghc5use the given BlockId as the label of the entry point3ghcaA jump where the caller says what the live GlobalRegs are. Used for low-level hand-written Cmm.3ghc Construct a /7 node for the given register and unwinding expression.*333333333333333333333333333333333333333333*333333333333333333333333333333333333333333None&'U ghcWe map STG registers onto appropriate CmmExprs. Either they map to real machine registers or stored as offsets from BaseReg. Given a GlobalReg, get_GlobalReg_addr always produces the register table address for it.3ghczFixup global registers so that they assign to locations within the RegTable if they aren't pinned for the current target.33None%HV}3ghc$Top-level of the LLVM Code generatorUghc8Do LLVM code generation on all these Cmms data sections.UghcLLVM can't handle entry blocks which loop back to themselves (could be seen as an LLVM bug) so we rearrange the code to keep the original entry label which branches to a newly generated second label that branches back to itself. See: Trac #11649UghcHComplete LLVM code generation phase for a single top-level chunk of Cmm.UghcGenerate meta data nodesUghc'Marks variables as used where necessary113113None HMPVX3ghcInformation about edges3ghcCan we trace back a edge to a specific Cmm Node or has it been introduced for codegen. We use this to maintain some information which would otherwise be lost during the Cmm  -@ asm transition. See also Note [Inverting Conditional Branches]3ghccA control flow graph where edges have been annotated with a weight. Implemented as IntMap (IntMap  edgeData') We must uphold the invariant that for each edge A -> B we must have: A entry B in the outer map. A entry B in the map we get when looking up A. Maintaining this invariant is useful as any failed lookup now indicates an actual error in code which might go unnoticed for a while otherwise.3ghcUConvenience function, generate edge info based on weight not originating from cmm.3ghctAdjust the weight between the blocks using the given function. If there is no such edge returns the original map.3ghc!Is this block part of this graph?3ghcCheck if the nodes in the cfg and the set of blocks are the same. In a case of a missmatch we panic and show the difference.3ghcPFilter the CFG with a custom function f. Paramaeters are `f from to edgeInfo`3ghcSometimes we insert a block which should unconditionally be executed after a given block. This function updates the CFG for these cases. So we get A -> B => A -> A' -> B -- -> C => -> C3ghc5Adds a new edge, overwrites existing edges if present3ghcAdds a edge with the given weight to the cfg If there already existed an edge it is overwritten. `addWeightEdge from to weight cfg`3ghc4Destinations from bid ordered by weight (descending)3ghc1Get successors of a given node with edge weights.3ghc/Returns a unordered list of all edges with info3ghc=Unordered list of edges with weight as Tuple (from,to,weight)3ghc5Returns a unordered list of all edges without weights3ghc4Get successors of a given node without edge weights.Ughc8Invariant: The edge **must** exist already in the graph.3ghcInsert a block in the control flow between two other blocks. We pass a list of tuples (A,B,C) where * A -> C: Old edge * A -> B -> C : New Arc, where B is the new block. It's possible that a block has two jumps to the same block in the assembly code. However we still only store a single edge for these cases. We assign the old edge info to the edge A -> B and assign B -> C the weight of an unconditional jump.3ghc@Generate weights for a Cmm proc based on some simple heuristics.4ghcDetermine loop membership of blocks based on SCC analysis Ideally we would replace this with a variant giving us loop levels instead but the SCC code will do for now.4ghcFEdges are sorted ascending pointwise by weight, source and destination4ghckCareful! Since we assume there is at most one edge from A to B the Eq instance does not consider weight.(3333333333333333333333333333333333333444(3333333333333333333333333333333333443334None>HVX4ghc(A basic block with liveness information.4ghcNStash regs live on entry to each basic block in the info part of the cmm code.4ghc*Liveness information. The regs which die are ones which are no longer live in the *next* instruction in this sequence. (NB. if the instruction is a jump, these registers might still be live at the jump target(s) - you have to check the liveness at the destination block to find out).4ghc=registers that died because they were clobbered by something.4ghc?registers born in this instruction (written to for first time).4ghc=registers that died because they were read for the last time.4ghc)An instruction with liveness information.4ghceThe register allocator also wants to use SPILL/RELOAD meta instructions, so we'll keep those here.4ghcA real machine instruction4ghcspill this reg to a stack slot4ghc!reload this reg from a stack slot4ghc5A top level thing which carries liveness information.4#ghc7map a function across all the basic blocks in this code4$ghcImap a function across all the basic blocks in this code (monadic version)4'ghcImap a function across all the basic blocks in this code (monadic version)4(ghcSlurp out the list of register conflicts and reg-reg moves from this top level thing. Slurping of conflicts and moves is wrapped up together so we don't have to make two passes over the same code when we want to build the graph.4)ghcFor spill/reloads+SPILL v1, slot1 ... RELOAD slot1, v2If we can arrange that v1 and v2 are allocated to the same hreg it's more likely the spill/reload instrs can be cleaned and replaced by a nop reg-reg move.4*ghc4Strip away liveness information, yielding NatCmmDecl4+ghcStrip away liveness information from a basic block, and make real spill instructions out of SPILL, RELOAD pseudos along the way.4,ghcErase Delta instructions.4-ghcPatch the registers in this code according to this register mapping. also erase reg -> reg moves when the reg is the same. also erase reg -> reg moves when the destination dies in this instr.4.ghcFPatch registers in this LiveInstr, including the liveness information.4/ghcFConvert a NatCmmDecl to a LiveCmmDecl, with empty liveness informationUghcHCheck ordering of Blocks The computeLiveness function requires SCCs to be in reverse dependent order. If they're not the liveness information will be wrong, and we'll get a bad allocation. Better to check for this precondition explicitly or some other poor sucker will waste a day staring at bad assembly code..41ghcIf we've compute liveness info for this code already we have to reverse the SCCs in each top to get them back to the right order so we can do it again.UghcComputing livenessnOn entry, the SCCs must be in "reverse" order: later blocks may transfer control to earlier ones only, else .aThe SCCs returned are in the *opposite* order, which is exactly what we want for the next pass.Ughc:Annotate a basic block with register liveness information.UghcCCalculate liveness going forwards, filling in when regs are bornUghcoCalculate liveness going backwards, filling in when regs die, and what regs are live across each instructionUghcDSCCs of blocks that we're about to run the liveness determinator on.ghc$BlockIds that fail the test (if any)#444444444444444444 4!4"4#4$4%4&4'4(4)4*4+4,4-4.4/4041#4!4 4"444444444444444444#4$4%4&4'4*4+4(4)4,4-4.41404/None=46ghcThe register allocator state48ghcgthe current mapping from basic blocks to the register assignments at the beginning of that block.49ghcfree machine registers4:ghc assignment of temps to locations4;ghccurrent stack delta4<ghcfree stack slots for spilling4=ghc?unique supply for generating names for join point fixup blocks.4>ghcRecord why things were spilled, for -ddrop-asm-stats. Just keep a list here instead of a map of regs -> reasons. We don't want to slow down the allocator if we're not going to emit the stats.4@ghc<(from,fixup,to) : We inserted fixup code between from and to4Aghc>Used to carry interesting stats out of the register allocator.4Dghc<(from,fixup,to) : We inserted fixup code between from and to4EghcqReasons why instructions might be inserted by the spiller. Used when generating stats for -ddrop-asm-stats.4FghcRvreg was spilled to a slot so we could use its current hreg for another vreg4Gghc-vreg was moved because its hreg was clobbered4Hghc!vreg was loaded from a spill slot4Ighc,reg-reg move inserted during join to targets4Jghc,reg-mem move inserted during join to targets4Kghc_Where a vreg is currently stored A temporary can be marked as living in both a register and memory (InBoth), for example if it was recently loaded from a spill location. This makes it cheap to spill (no save instruction required), but we have to be careful to turn this into InReg if the value in the register is changed.4Lghcvreg is in a register4Mghcvreg is held in a stack slot4Nghc0vreg is held in both a register and a stack slot4OghcUsed to store the register assignment on entry to a basic block. We use this to handle join points, where multiple branch instructions target a particular label. We have to insert fixup code to make the register assignments from the different sources match up.4Pghc'Get the reg numbers stored in this Loc.464748494:4;4<4=4>4?4@4A4B4C4D4E4F4G4H4I4J4K4L4M4N4O4P4O4K4L4M4N4P4E4F4G4H4I4J4A4B4C4D464748494:4;4<4=4>4?4@None@4UghcJBuild a map of how many times each reg was alloced, clobbered, loaded etc.4Vghc+Count reg-reg moves remaining in this code.4WghcPretty print some RegAllocStats4U4V4W4U4V4WNonegE"4Xghc"The register allocator monad type.4Yghc7Run a computation in the RegM register allocator monad.Ughc3Make register allocator stats from its final state.4eghc<Record that a spill instruction was inserted, for profiling.4fghcRecord a created fixup block464748494:4;4<4=4>4?4@4X4Y4Z4[4\4]4^4_4`4a4b4c4d4e4f464748494:4;4<4=4>4?4@4X4Y4Z4[4\4]4^4_4`4a4b4c4d4e4fNonevcUghcCleaner state.Ughc0Regs which are valid at the start of each block.UghcCollecting up what regs were valid across each jump. in the next pass we can collate these and write the results to sJumpValid.UghcMap of (slot -> blocks which reload from this slot) used to decide if whether slot spilled to will ever be reloaded from on this path.Ughc6Spills and reloads cleaned each pass (latest at front)Ughc>Spills and reloads that have been cleaned in this pass so far.U ghcCleaner monad.U!ghcThe identification number of a spill slot. A value is stored in a spill slot when we don't have a free register to hold it.4kghc;Clean out unneeded spill/reloads from this top level thing.U"ghcDo one pass of cleaning.U#ghcOClean out unneeded reload instructions, while walking forward over the code.U$ghc'Clean out unneeded reload instructions.Walking forwards across the code On a reload, if we know a reg already has the same value as a slot then we don't need to do the reload.U%ghc?Try and rewrite a reload instruction to something more pleasingU&ghcPClean out unneeded spill instructions, while walking backwards over the code.If there were no reloads from a slot between a spill and the last one then the slot was never read and we don't need the spill.SPILL r0 -> s1 RELOAD s1 -> r2 SPILL r3 -> s1 <--- don't need this spill SPILL r4 -> s1 RELOAD s1 -> r5WMaintain a set of "slots which were spilled to but not reloaded from yet"]Walking backwards across the code: a) On a reload from a slot, remove it from the set.a) On a spill from a slot If the slot is in set then we can erase the spill, because it won't be reloaded from until after the next spill.Cotherwise keep the spill and add the slot to the setnTODO: This is mostly inter-block we should really be updating the noReloads set as we cross jumps also..TODO: generate noReloads from liveSlotsOnEntryU'ghc@Combine the associations from all the inward control flow edges.U(ghcOSee if we have a reg with the same value as this slot in the association table.U)ghc$Construct the initial cleaner state.U*ghc(Remember the associations before a jump.U+ghcCheck if this is a reg store.U,ghcAn empty associationU-ghc,Add an association between these two things.U.ghc"Delete all associations to a node.U/ghc*Delete a single association edge (a -> b).U0ghc)Check if these two things are associated.U1ghcAFind the refl. trans. closure of the association from this point.U2ghcIntersect two associations.U"ghc!Iteration number for the cleaner.ghc!Liveness annotated code to clean.U$ghc!the block that we're currently inghcCtwo store locations are associated if they have the same valueghcaccghc$instrs to clean (in backwards order)ghc$cleaned instrs (in forward order)U3ghc!Slots live on entry to each blockghc3Slots that have been spilled, but not reloaded fromghcaccghc#Instrs to clean (in forwards order)ghc$Cleaned instrs (in backwards order)4k4kNone4nghc<Spiller statistics. Tells us what registers were spilled.U4ghcSpill code generator state.U5ghc)Unique supply for generating fresh vregs.U6ghc:Spilled vreg vs the number of times it was loaded, stored.U7ghc)State monad for the spill code generator.4qghc,Spill all these virtual regs to stack slots.5Bumps the number of required stack slots if required.TODO: See if we can split some of the live ranges instead of just globally spilling the virtual reg. This might make the spill cleaner's job easier.TODO: On CISCy x86 and x86_64 we don't necessarily have to add a mov instruction when making spills. If an instr is using a spilled virtual we may be able to address the spill slot directly.U8ghc9Spill some registers to stack slots in a top-level thing.U9ghc5Spill some registers to stack slots in a basic block.U:ghcSpill some registers to stack slots in a single instruction. If the instruction uses registers that need to be spilled, then it is prefixed (or postfixed) with the appropriate RELOAD or SPILL meta instructions.U;ghcqAdd a RELOAD met a instruction to load a value for an instruction that writes to a vreg that is being spilled.U<ghcpAdd a SPILL meta instruction to store a value for an instruction that writes to a vreg that is being spilled.U=ghc}Add both RELOAD and SPILL meta instructions for an instruction that both reads and writes to a vreg that is being spilled.U>ghcORewrite uses of this virtual reg in an instr to use a different virtual reg.U?ghcCreate a new spiller state.U@ghc+Allocate a new unique in the spiller monad.4rghc:Add a spill/reload count to a stats record for a register.UAghc2Extract spiller statistics from the spiller state.4qghcthe codeghcavailable stack slotsghccurrent number of spill slots.ghcthe regs to spillU8ghc/map of vregs to slots they're being spilled to.ghcthe top level thing.U9ghc/map of vregs to slots they're being spilled to.U:ghc/map of vregs to slots they're being spilled to.4n4o4p4q4r4q4n4o4p4rNone4tghc.Do register coalescing on this top level thingFor Reg -> Reg moves, if the first reg dies at the same time the second reg is born then the mov only serves to join live ranges. The two regs can be renamed to be the same and the move instruction safely erased.UBghc|Add a v1 = v2 register renaming to the map. The register with the lowest lexical name is set as the canonical version.UCghcZDetermine the canonical name for a register by following v1 = v2 renamings in this map.4ughc?Slurp out mov instructions that only serve to join live ranges.During a mov, if the source reg dies and the destination reg is born then we can rename the two regs to the same thing and eliminate the move.4t4u4t4uNoneX UDghcBlock membership in a loop4vghcMap of 4w4wghc0Records the expected cost to spill some regster.4xghcAn empty map of spill costs.4yghcAdd two spill cost infos.4zghcAdd two spill cost records.4{ghc7Slurp out information used for determining spill costs.For each vreg, the number of times it was written to, read from, and the number of instructions it was live on entry to (lifetime)UEghc-Take all the virtual registers from this set.4|ghc&Choose a node to spill from this graphUFghc Chaitins spill cost function is:cost = sum loadCost * freq (u) + sum storeCost * freq (d) u <- uses (v) d <- defs (v)LThere are no loops in our code at the moment, so we can set the freq's to 1.If we don't have live range splitting then Chaitins function performs badly if we have lots of nested live ranges and very few registers.v1 v2 v3 def v1 . use v1 . def v2 . . def v3 . . . use v1 . . . use v3 . . . use v2 . . use v1 .defs uses degree cost v1: 1 3 3 1.5 v2: 1 2 3 1.0 v3: 1 1 3 0.666v3 has the lowest cost, but if we only have 2 hardregs and we insert spill code for v3 then this isn't going to improve the colorability of the graph.When compiling SHA1, which as very long basic blocks and some vregs with very long live ranges the allocator seems to try and spill from the inside out and eventually run out of stack slots.zWithout live range splitting, its's better to spill from the outside in so set the cost of very long live ranges to zero4}ghc+Extract a map of register lifetimes from a 4v.UGghcUDetermine the degree (number of neighbors) of this node which have the same class.4~ghc`Show a spill cost record, including the degree from the graph and final calulated spill cost. 4v4w4x4y4z4{4|4}4~ 4w4z4~4v4x4y4{4|4}Nonex4ghcEvaluate all the fields of the - that are generally demanded by the compiler44444444444444None =>?HSVX UHghcA UH is a UI| which allows us to distinguish between binding forms whose binders have different types. For example, if we are doing a $ lookup on (x :: Int) -> ()), we should not pick up an entry in the $ for (x :: Bool) -> ()i: we can disambiguate this by matching on the type (or kind, if this a binder in a type) of the binder.UJghc DeBruijn a represents aI modulo alpha-renaming. This is achieved by equipping the value with a 4O, which tracks an on-the-fly deBruijn numbering. This allows us to define an R- instance for  DeBruijn a., even if this was not (easily) possible for an. Note: we purposely don't export the constructor. Make a helper function if you find yourself needing it.4ghcA 4 doesn't do a kind-check. Thus, when lookup up (t |> g), you'll find entries inserted under (t), even if (g) is non-reflexive.4ghc TypeMap a is a map from n to ab. If you are a client, this is the type you want. The keys in this map may have different kinds.UKghc TypeMapX a is the base map from  DeBruijn Type to a, but without the $ optimization.UIghc TypeMapG a is a map from  DeBruijn Type to a. The extended key makes it suitable for recursive traversal, since it can track binders, but it is strictly internal to this module. If you are including a 4 inside another $, this is the type you want. Note that this lookup does not do a kind-check. Thus, all keys in this map must have the same kind. Also note that this map respects the distinction between Type and  ConstraintC, despite the fact that they are equivalent type synonyms in Core.ULghc CoreMapX a is the base map from DeBruijn CoreExpr to a, but without the $ optimization.UMghc CoreMapG a is a map from DeBruijn CoreExpr to a. The extended key makes it suitable for recursive traversal, since it can track binders, but it is strictly internal to this module. If you are including a 4 inside another $, this is the type you want.4ghc CoreMap a is a map from ' to a3. If you are a client, this is the type you want.UNghcySqueeze out any synonyms, and change TyConApps to nested AppTys. Why the last one? See Note [Equality on AppTys] in TypeNote, however, that we keep Constraint and Type apart here, despite the fact that they are both synonyms of TYPE 'LiftedRep (see #11715).4ghc Extend a 4$ with a type in the given context. 8extendTypeMapWithScope m (mkDeBruijnContext [a,b,c]) t v is equivalent to #extendTypeMap m (forall a b c. t) v<, but allows reuse of the context over multiple insertions.4ghcJConstruct a deBruijn environment with the given variables in scope. e.g. mkDeBruijnEnv [a,b,c] constructs a context  forall a b c.UOghcSynthesizes a  DeBruijn a from an a9, by assuming that there are no bound binders (an empty 4<). This is usually what you want if there isn't already a 4 in scope.$$$$$$$$$$$$$$$$$44444444444444444444$4444444444444444$$$$$$$$$$$$$4444$$$NoneHVUPghc.The CSE environment. See note [CseEnv Example]UQghciThe main component of the environment is the trie that maps data constructor applications (with their  arguments) to an in-scope name that can be used instead. This name is always either a let-bound variable or a case binder.URghc_This substitution is applied to the code as we traverse it. Entries have one of two reasons:vThe input might have shadowing (see Note [Shadowing]), so we have to rename some binders as we traverse the tree.cIf we remove `let x = Con z` because `let y = Con z` is in scope, we note this here as x ! y.USghcIf we come across a case expression case x as b of & with a trivial binder, we add b ! x to this. This map is *only* used when looking something up in the ce_conAppMap. See Note [Trivial case scrutinee]UTghcOThe third component is an in-scope set, to rename away any shadowing bindersUUghcNote [CseEnv Example] ~~~~~~~~~~~~~~~~~~~~~ The following tables shows how the CseEnvironment changes as code is traversed, as well as the changes to that code.'InExpr OutExpr conAppMap subst in_scope %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -- empty {} {} case & as a of {Con x y -> case & as a of {Con x y -> -- Con x y ! a {} {a,x,y} let b = Con x y (removed) -- Con x y ! a b!a {a,x,y,b} let c = Bar a let c = Bar a -- Con x y ! a, Bar a ! c b!a {a,x,y,b,c} let c = some expression let c' = some expression -- Con x y ! a, Bar a ! c b!a, c!c', {a,x,y,b,c,c'} let d = Bar b (removed) -- Con x y ! a, Bar a ! c b!a, c!c', d!c {a,x,y,b,c,c',d} (a, b, c d) (a, a, c' c)UVghc;This function short-cuts let-bindings that are now obsolete44None&'PX7 UWghc1a monad for the normalisation functions, reading 4, a , and a Y.4ghc;Result of testing two type family equations for injectiviy.4ghcMEither RHSs are distinct or unification of RHSs leads to unification of LHSs4ghcRHSs unify but LHSs don't unify under that substitution. Relevant for closed type families where equation after unification might be overlpapped (in which case it is OK if they don't unify). Constructor stores axioms after unification.4ghcJCheck whether two type family axioms don't violate injectivity annotation.4ghcHCreate a coercion constructor (axiom) suitable for the given newtype  . The % should be that of a new coercion g, the  s the arguments expected by the newtype8 and the type the appropriate right hand side of the newtype/, with the free variables a subset of those s.4ghcCheck whether an open type family equation can be added to already existing instance environment without causing conflicts with supplied injectivity annotations. Returns list of conflicting axioms (type instance declarations).4ghcDo an apartness check, as described in the "Closed Type Families" paper (POPL '14). This should be used when determining if an equation (]Z) of a closed type family can be used to reduce a certain target type family application.4ghcLGet rid of *outermost* (or toplevel) * type function redex * data family redex * newtypes returning an appropriate Representational coercion. Specifically, if topNormaliseType_maybe env ty = Just (co, ty') then (a) co :: ty ~R ty' (b) ty' is not a newtype, and is not a type-family or data-family redexLHowever, ty' can be something like (Maybe (F ty)), where (F ty) is a redex.Always operates homogeneously: the returned type has the same kind as the original type, and the returned coercion is always homogeneous.4ghcNormalise arguments to a tyconUXghc~Get the set of all type/coercion variables mentioned anywhere in the list of types. These variables are not necessarily free.UYghcHGet the set of all type/coercion variables mentioned anywhere in a type.4ghc flattened target arguments. Make sure they're flattened! See Note [Flattening]. (NB: This "flat" is a different "flat" than is used in TcFlatten.)ghcLthe candidate equation we wish to use Precondition: this matches the targetghcTrue  = equation can fire4ghcenv't with family instancesghcdesired role of output coercionghctcghctysghclco :: tc tys ~ tc new_tys NB: co might not be homogeneous last coercion :: kind(tc tys) ~ kind(tc new_tys):4444444444444444444444444444444444444444444444444444444444:4444444444444444444444444444444444444444444444444444444444None{G%4ghckEvery node in an expression annotated with its (non-global) free variables, both Ids and TyVars, and type.4ghcEvery node in an expression annotated with its (non-global) free variables, both Ids and TyVars, and type. NB: see Note [The FVAnn invariant]4ghcmEvery node in a binding group annotated with its (non-global) free variables, both Ids and TyVars, and type.4ghchFind all locally-defined free Ids or type variables in an expression returning a non-deterministic set.UZghcFind all locally-defined free Ids or type variables in an expression returning a composable FV computation. See Note [FV naming conventions] in FV for why export it.4ghcdFind all locally-defined free Ids or type variables in an expression returning a deterministic set.4ghcqFind all locally-defined free Ids or type variables in an expression returning a deterministically ordered list.4ghc2Find all locally-defined free Ids in an expression4ghcRFind all locally-defined free Ids in an expression returning a deterministic set.4ghc_Find all locally-defined free Ids in an expression returning a deterministically ordered list.4ghcXFind all locally-defined free Ids in several expressions returning a deterministic set.4ghceFind all locally-defined free Ids in several expressions returning a deterministically ordered list.4ghcnFind all locally-defined free Ids or type variables in several expressions returning a non-deterministic set.U[ghcFind all locally-defined free Ids or type variables in several expressions returning a composable FV computation. See Note [FV naming conventions] in FV for why export it.4ghcwFind all locally-defined free Ids or type variables in several expressions returning a deterministically ordered list.4ghc4Find all locally defined free Ids in a binding group4ghc=Finds free variables in an expression selected by a predicate5ghcjFinds free variables in an expression selected by a predicate returning a deterministically ordered list.U\ghc]Finds free variables in an expression selected by a predicate returning a deterministic set.5ghcCFinds free variables in several expressions selected by a predicate5ghcpFinds free variables in several expressions selected by a predicate returning a deterministically ordered list.U]ghccFinds free variables in several expressions selected by a predicate returning a deterministic set.U^ghcFinds the free externalo names of an expression, notably including the names of type constructors (which of course do not show up in 4).5ghcFinds the free external# names of several expressions: see U^ for details5 ghcorphNamesOfAxiom collects the names of the concrete types and type constructors that make up the LHS of a type family instance, including the family name itself.mFor instance, given `type family Foo a b`: `type instance Foo (F (G (H a))) b = ...` would yield [Foo,F,G,H].Used in the implementation of ":info" in GHCi.5 ghcZThose variables free in the right hand side of a rule returned as a non-deterministic set5 ghciThose variables free in the both the left right hand sides of a rule returned as a non-deterministic setU_ghc`Those variables free in the both the left right hand sides of a rule returned as FV computationU`ghc_Those variables free in the both the left right hand sides of rules returned as FV computation5 ghcdThose variables free in the both the left right hand sides of rules returned as a deterministic set5ghc<Those variables free in the right hand side of several rules5ghctThis finds all locally-defined free Ids on the left hand side of a rule and returns them as a non-deterministic set5ghc}This finds all locally-defined free Ids on the left hand side of a rule and returns them as a determinisitcally ordered listUaghcfThis finds all locally-defined free Ids on the left hand side of a rule and returns an FV computation5ghcInverse function to 55ghc$Extract the vars reported in a FVAnn5ghc Annotate a 'K with its (non-global) free type and value variables at every tree node.4ghc Says which s are interesting5ghc Says which s are interestingU\ghc Says which s are interestingU]ghc Says which s are interesting1!444444444444444445555555555 5 5 5 5 55555555555555555144444444444!455555555555555 5 55 555555 5555 444445555:None>X`>.5JghcLWhat to expect for an argument to a rebindable-syntax operator. Quite like n, but allows for holes to be filled in by tcSyntaxOp. The callback called from tcSyntaxOp gets a list of types; the meaning of these types is determined by a left-to-right depth-first traversal of the 5J tree. So if you pass in >SynAny `SynFun` (SynList `SynFun` SynType Int) `SynFun` SynAny/you'll get three types back: one for the first 5K, the element) type of the list, and one for the last 5K". You don't get anything for the 5OO, because you've said positively that it should be an Int, and so it shall be.<This is defined here to avoid defining it in TcExpr.hs-boot.5KghcAny type5Lghc<A rho type, deeply skolemised or instantiated as appropriate5Mghc6A list type. You get back the element type of the list5Nghc A function.5Oghc A known type.5Xghc|An expected type to check against during type-checking. See Note [ExpType] in TcMType, where you'll also find manipulators.5jghcMake an 5X suitable for checking.5kghcLike 5O but accepts a regular TcType5lghcLike " but for 5J5yghc8Change the TcLevel in a skolem, extending a substitution5{ghcFFinds outermost type-family applications occurring in a type, after expanding synonyms. In the list (F, tys) that is returned we guarantee that tys matches F's arity. For example, given type family F a :: * -> * (arity 1) calling tcTyFamInsts on (Maybe (F Int Bool) will return (F, [Int]), not (F, [Int,Bool])This is important for its use in deciding termination of type instances (see Trac #11581). E.g. type instance G [Int] = ...(F Int  bigtype)... we don't need to take  bigtypeK into account when asking if the calls on the RHS are smaller than the LHS5|ghcLike 5{X, except that the output records whether the type family and its arguments occur as an  invisiblek argument in some type application. This information is useful because it helps GHC know when to turn on -fprint-explicit-kindsX during error reporting so that users can actually see the type family being mentioned.As an example, consider: Pclass C a data T (a :: k) type family F a :: k instance C (T @(F Int) (F Bool)) -There are two occurrences of the type family F in that C instance, so 5| (C (T @(F Int) (F Bool))) will return: [ (R, F, [Int]) , (R, F, [Bool]) ] F Int is paired with R since it appears as an  invisible argument to C , whereas F Bool is paired with R since it appears an a visible argument to C. See also 'Note [Kind arguments in error messages] in TcErrors.5}ghcIn an application of a   to some arguments, find the outermost occurrences of type family applications within the arguments. This function will not consider the  4 itself when checking for type family applications.See 5|K for more details on how this works (as this function is called inside of 5|).5~ghc@Check that a type does not contain any type family applications.5ghc;True of both given and wanted flatten-skolems (fmv and fsk)5ghc-Make a sigma ty where all type variables are >. That is, they cannot be used with visible type application.5ghcrMake a sigma ty where all type variables are "specified". That is, they can be used with visible type application5ghc$Splits a forall type into a list of !Is and the inner type. Always succeeds, even if it returns an empty list.5ghcGSplits a type into a TyBinder and a body, if possible. Panics otherwise5ghcLike 5B, but splits off only named binders, returning just the tycovars.5ghcLike 5$, but splits off only named binders.5ghc'Is this a ForAllTy with a named binder?5ghc"Split a sigma type into its parts.5ghc<Split a sigma type into its parts, going underneath as many ForAllTy5s as possible. For example, given this type synonym: Ktype Traversal s t a b = forall f. Applicative f => (a -> f b) -> s -> f t if you called tcSplitSigmaTy on this type: 2forall s t a b. Each s t a b => Traversal s t a b then it would return .([s,t,a,b], [Each s t a b], Traversal s t a b). But if you instead called tcSplitNestedSigmaTys on the type, it would return D([s,t,a,b,f], [Each s t a b, Applicative f], (a -> f b) -> s -> f t).5ghcLike #, but only returns the  .5ghcLike #, but returns R if, ?the type is structurally not a type constructor application, or1the type is a function type (e.g. application of "u), but we currently don't even enough information to fully determine its RuntimeRep variables. For instance, FunTy (a :: k) Int. By contrast # panics in the second case.The behavior here is needed during canonicalization; see Note [FunTy and decomposing tycon applications] in TcCanonical for details.5ghcWSplit off exactly the specified number argument types Returns (Left m) if there are m] missing arrows in the type (Right (tys,res)) if the type looks like t1 -> ... -> tn -> res5ghc?Strips off n *visible* arguments and returns the resulting type5ghcReturns the number of arguments in the given type, without looking through synonyms. This is used only for error reporting. We don't look through synonyms because of #11313.5ghc|If the type is a tyvar, possibly under a cast, returns it, along with the coercion. Thus, the co is :: kind tv ~N kind type5ghc Just like 5j, but will return True for types of different kinds as long as their non-coercion structure is identical.5ghcLike 5_, but returns information about whether the difference is visible in the case of a mismatch. Nothing : the types are equal  Just True> : the types differ, and the point of difference is visible  Just False= : the types differ, and the point of difference is invisibleUbghcReal worker for 5. No kind check!5ghcLike pickyEqTypeVis$, but returns a Bool for convenience5ghcHWhen inferring types, should we quantify over a given predicate? Generally true of classes; generally false of equality constraints. Equality constraints that mention quantified type variables and implicit variables complicate the story. See Notes [Inheriting implicit parameters] and [Quantifying over equality constraints]5ghcIs the equality a ~r ...a.... definitely insoluble or not? a ~r Maybe a -- Definitely insoluble a ~N ...(F a)... -- Not definitely insoluble -- Perhaps (F a) reduces to Int a ~R ...(N a)... -- Not definitely insoluble -- Perhaps newtype N a = MkN Int See Note [Occurs check error] in TcCanonical for the motivation for this function.5ghcLike 5, but also says R for 5Z types5ghc.Does a type represent a floating-point number?5ghc Is a type S?5ghc Is a type a  CallStack?5ghcIs a f a  CallStack implicit parameter?(If so, return the name of the parameter.5ghcUDoes the given tyvar appear at the head of a chain of applications (a t1 ... tn)5ghcFor every arg a tycon can take, the returned list says True if the argument is taken visibly, and False otherwise. Ends with an infinite tail of Trues to allow for oversaturation.5ghcCIf the tycon is applied to the types, is the next argument visible?5ghc2Should this type be applied to a visible argument?Ucghc7Is this an invisible argument to some type application?Udghc7Is this an invisible argument to some type application?UbghctcView, if you want unwrappingbdefhj!npqr5D5E5F5G5H5Is5B5Ctu<= 8 !!""" " """"""""""""!"$"%"*"+","-"."2">"D"E"G"H"J"L"N"O"P"S"T"U"V"X"]"`"a"d"e"f"g"h"k"l"o"r"s"t"u"v"w"{"}"""""""""""#####################$$$$$$!$&$*$+$-$.$2$3555555 5!5"5#5$5%5&5'5(5)5*5+5,5-5.5/505152535455565758595:5;5<5=5>5?5@5A5J5K5L5M5N5O5P5Q5R5S5T5U5V5W5X5Y5Z5[5\5]5^5_5`5a5b5c5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5s5t5u5v5w5x5y5z5{5|5}5~55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555b5h5b5a5`5d5c5^5\5]5[5_5i5g5f5e!5X5Y5Z5R5S5T5U5V5W5Q5P5j5J5K5L5M5N5O5k5l5 5!5q5s5r5t5u5w5v5p5x5y5z5"5#5$5%5&5'5(5)5*5+5,5-5.5/505152535455565758595:5;5<5n5or5D5E5F5G5H5Iut5ms5B5C5=5>5?5@5A5555#5555555555555555555555555555#55555555555555###5555555#5555#555 $+$-$.$*5555555555555555555555# 855 555555555555555555555{5|5}5~55555555555555e$2$3=<""#nfdh""#####""# #"""""####$$555"!#" " j!!"D"E"a"d"O"`"J"P"L"S"T"U"]"{"V""X"N"G"H"e"f"r"t"g"l"o"s"u"w"h"}"k"v$$!$& "$"%$"."2"*",$"+"-">q""p""""""""""555 5555N0Ue3None"#6ghcUsed in places where some invariant ensures that all these Ids are non-void; e.g. constructor field binders in case expressions. See Note [Post-unarisation invariants] in UnariseStg.6ghcUsed in places where some invariant ensures that all these arguments are non-void; e.g. constructor arguments. See Note [Post-unarisation invariants] in UnariseStg.6/ghc Convert from 6 to 03.B  666666666 6 6 6 6 6666666666666666666 6!6"6#6$6%6&6'6(6)6*6+6,6-6.6/606162636465666768696:6;6<6=6>6?6@B6 6(6'6  66666666666 6 6!6 6"6#6$6%666&6*6+6,64666666666 6 6-6686)6.6606/6666:6;6<636566676961626=6>6?6@None&'6ghc@The current tick scope. We will assign this to generated blocks.6ghcPlaces blocks generated by the given code into a fresh (sub-)scope. This will make sure that Cmm annotations in our scope will apply to the Cmm blocks generated therein - but not the other way around.6ghcEGenerate code into a fresh tick (sub-)scope and gather generated code_ *6E6F6G6H6I6J6K6P6L6M6N6O6Q6R6S6T6U6V6W6X6Y6Z6[6\6]6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6w6x6y6z6{6|6}6~66666666666666666666666666666666666_6e6f6g6h6u66666666666666666666666666666666T6U6V6Q6R6S6{6|66666}6~6i6F6G6H6I6E6k6n6o6j6p6q6r6z6l6m6w6x6v *6y6W6X6Y6Z6[6s6t6\6]6^6_6`6a6b6c6d6J6K6P6L6M6N6ONone CUfghc0lower bound (inclusive), upper bound (exclusive)UgghcUse signed comparisons4/2222222222233333333 3 3 3 33333366666666666666666666666466626266666666666/66333333 3 33 3 2222322232333366662663None6ghc.The profiling header words in a static closure6ghc+Profiling header words in a dynamic closure6ghc1Initialise the profiling field of an update frame6ghcpRecord the allocation of a closure. The CmmExpr is the cost centre stack to which to attribute the allocation.6ghcRecord the allocation of a closure (size is given by a CmmExpr) The size must be in words, because the allocation counter in a CCS counts in words.6ghcCalled when a closure is entered, marks the closure as having been "used". The closure is not an "inherently used" one. The closure is not IND2 because that is not considered for LDV profiling.6666666666666666666666666666666666666666None96ghcDoes a computation in the FCode monad, with a current environment and a list of local declarations. Returns the resulting list of declarations.Uhghc<Local declarations that are in scope during code generation.6ghcAn environment of named things.6ghc:The environment contains variable definitions or blockids.6ghceHolds CmmLit(CmmLabel ..) which gives the label type, eg, RtsLabel, ForeignLabel, CmmLabel etc.6ghc!A function name from this package6ghcA blockid of some code or data.6ghcOTakes the variable decarations and imports from the monad and makes an environment, which is looped back into the computation. In this way, we can have embedded declarations that scope over the whole procedure, and imports that scope over the entire module. Discards the local declaration contained within decl'6ghc+Get the current environment from the monad.6ghc+Get the current context name from the monad6ghc Set context name for a sub-parseUighcgAdd a new variable to the list of local declarations. The CmmExpr says where the value is stored.Ujghc2Add a new label to the list of local declarations.6ghc.Create a fresh local variable of a given type.6ghcAllocate a fresh label.6ghc,Add add a local function to the environment.6ghcAdd an imported foreign label to the list of local declarations. If this is done at the start of the module the declaration will scope over the whole module.6ghcLookup the BlockId bound to the label with this name. If one hasn't been bound yet, create a fresh one based on the Unique of the name.6ghc]Lookup the location of a named variable. Unknown names are treated as if they had been 'import'ed from the runtime system. This saves us a lot of bother in the RTS sources, at the expense of deferring some errors to link time.6ghc1Lift an FCode computation into the CmmParse monad6ghc data typeghcname of variableghcregister holding the value6ghcname of the functionghcpackage of the current module.66666666666666666666666666666666666666666.666666666666666None:6W66666666667777776W6666666777776766None;77 7 7 77 77 7777777777 7 7 77 77 77777777None>37ghcstaticghc updateable7ghc updateable73ghc!size of the full header, in bytesghcsize of the payload, in bytes!7777777777 7!7"7#7$7%7&7'7(7)7*7+7,7-7.7/7071727374757677!77777717273747576777.7*77777 7%7!7"7&7$7#7)7'7(7+7,7-7/70NoneQf78ghcUsed to tell the various mkVirtHeapOffsetss functions what kind of header the object has. This will be accounted for in the offsets of the fields returned.7?ghc$Return multiple values to the sequelIf the sequel is Return  return (x,y)If the sequel is AssignTo [p,q]  p=x; q=y;7@ghcemitCall conv fun args# makes a call to the entry-code of fun$, using the call/return convention conv , passing args3, and returning the results to the current sequel.Ukghc*emitCallWithExtraStack conv fun args stack$ makes a call to the entry-code of fun#, using the call/return convention conv , passing args0, pushing some extra stack frames described by stack2, and returning the results to the current sequel.UlghcUl takes a list of function arguments and prepares them for pushing on the stack for "extra" arguments to a function which requires fewer arguments than we currently have.7Gghc1Just like mkVirtHeapOffsets, but for constructors7HghcJust like mkVirtConstrOffsets, but used when we don't have the actual arguments. Useful when e.g. generating info tables; we just need to know sizes of pointer and non-pointer fields. 77 7 7 77 77 777778797:7;7<7=7>7?7@7A7B7C7D7E7F7G7H7I7J7K 7I7@7?7A7J7K7C7B7<7=7>78797:7;7F7E7G7H7D77 7 7 77 77 7777None.HV}b 7Lghc%The type used in binder positions in -3s.7Mghc~Let(-no-escape)-bound thing with a flag indicating whether it occurs as an argument or in a nullary application (see StgLiftLams.Analysis#arg_occs).7NghcEvery other kind of binder7Oghc{Captures details of the syntax tree relevant to the cost model, such as closures, multi-shot lambdas and case expressions.7UghcGets the bound  out a 7L.UmghcReturns R for 7Ns and RU the flag indicating occurrences as argument or in a nullary applications otherwise.7VghcTags every binder with its 7L and let bindings with their 7Os.UnghcTags binders of an - with its 7L and let bindings with their 7Os. Additionally, returns its 7OW and the set of binder occurrences in argument and nullary application position (cf. StgLiftLams.Analysis#arg_occs).UoghcHow many times will the lambda body of the RHS bound to the given identifier be evaluated, relative to its defining context? This function computes the answer in form of a &E.7WghcFCombines several heuristics to decide whether to lambda-lift a given let-binding to top-level. See StgLiftLams.Analysis#when for details.Upghc?The size in words of a function closure closing over the given s, including the header.UqghcThe number of words a single  adds to a closure's size. Note that this can't handle unboxed tuples (which may still be present in let-no-escapes, even after Unarise), in which case 6 will crash.7Xghc"closureGrowth expander sizer f fvs> computes the closure growth in words as a result of lifting f_ to top-level. If there was any growing closure under a multi-shot lambda, the result will be  . Also see StgLiftLams.Analysis#clogro.7Pghc free vars 7Qghchow often the RHS was entered UrghcIs the binding a let-no-escape?ghcLet bodyghc Binding groupghc9RHS skeletons, argument occurrences and annotated bindingUsghcIs the binding a let-no-escape?ghcLet body skeletonghc Argument occurrences in the bodyghc Binding groupghcZLet skeleton, argument occurrences, scope skeleton of binding and the annotated binding7WghcAn expander function, turning s into s. See .ghc Just abs_ids  =) This binding is beneficial to lift and abs_ids* are the variables it would abstract over7Xghc:Expands outer free ids that were lifted to their free varsghc/Computes the closure footprint of an identifierghc0Binding group for which lifting is to be decidedghcFree vars of the whole binding group prior to lifting it. These must be available at call sites if we decide to lift the binding group.ghc(Abstraction of the scope of the functionghcClosure growth. ; indicates there was growth under a (multi-shot) lambda.----7L7M7N7O7P7Q7R7S7T7U7V7W7X7O7P7Q7R7S7T7L7M7N7U----7V7W7XNone97\ghc=Lambda lifts bindings to top-level deemed worth lifting (see 7W).UtghcJust former_fvs  =( this RHS was lifted and we have to add  former_fvs. as lambda binders, discarding all free vars.7\7\Nonew7\7\None7_ghc!Low-level heap object allocation.7dghc lower-level version for CmmParseUughc/The generic GC procedure; no params, no resultsUvghc;Create a CLabel for calling a garbage collector entry point7_ghcrepresentation of the objectghc info pointerghc cost centreghcpayloadghc!returns the address of the object6p6q6r7D7]7^7_7`7a7b7c7d7e7f7g7h6q6p6r7D7c7e7g7f7h7d7a7b7]7^7_7`None "#&'MP\UwghcMaps labels from 7lT to the final CLabel that will appear in the SRT. - closures with singleton SRTs resolve to their single entry - closures with larger SRTs map to the label for that SRT - CAFs must not map to anything! - if a labels maps to Nothing, we found that this label's SRT is empty, so we don't need to refer to it from other SRTs.UxghcACurrent module being compiled. Required for calling labelDynamic.Uyghcbprevious SRTs we've emitted, so we can de-duplicate. Used to implement the [Common] optimisation.UzghcThe reverse mapping, so that we can remove redundant entries. e.g. if we have an SRT [a,b,c], and we know that b points to [c,d], we can omit c and emit [a,b]. Used to implement the [Filter] optimisation.7lghcFor each code block: - collect the references reachable from this code block to FUN, THUNK or RET labels for which hasCAF == TrueThis gives us a 7j-: a mapping from code block to sets of labelsU{ghcReturn a (Label,CLabel) pair for each labelled block of a CmmDecl, where the label is - the info label for a continuation or dynamic closure - the closure label for a top-level function (not a CAF)U|ghcPut the labelled blocks that we will be annotating with SRTs into dependency order. This is so that we can process them one at a time, resolving references to earlier blocks to point to their SRTs. CAFs themselves are not included here; see getCAFs below.U}ghcGet (Label, CAFLabel, Set CAFLabel) for each block that represents a CAF. These are treated differently from other labelled blocks: - we never shortcut a reference to a CAF to the contents of its SRT, since the point of SRTs is to keep CAFs alive. - CAFs therefore don't take part in the dependency analysis in depAnalSRTs. instead we generate their SRTs after everything else.U~ghcGet the list of blocks that correspond to the entry points for FUN_STATIC closures. These are the blocks for which if we have an SRT we can merge it with the static closure. [FUN]Ughc3resolve a CAFLabel to its SRTEntry using the SRTMap7nghc_Attach SRTs to all info tables in the CmmDecls, and add SRT declarations to the ModuleSRTInfo.Ughc:Build the SRT for a strongly-connected component of blocksUghc Build an SRT for a set of blocksUghcMbuild a static SRT object (or a chain of objects) from a list of SRTEntries.UghcvUpdate info tables with references to their SRTs. Also generate static closures, splicing in SRT fields as necessary.7i7j7k7l7m7n7k7j7l7n7i7mNone"7vghcCemit code for a foreign call, and return the results to the sequel.7{ghc1Produce code to save the current thread state to  CurrentTSOUghccloseNursery dflags tsoK produces code to close the nursery. A local register holding the value of  CurrentTSO is expected for efficiency.6Closing the nursery corresponds to the following code:  tso = CurrentTSO; cn = CurrentNuresry; // Update the allocation limit for the current thread. We don't // check to see whether it has overflowed at this point, that check is // made when we run out of space in the current heap block (stg_gc_noregs) // and in the scheduler when context switching (schedulePostRunThread). tso->alloc_limit -= Hp + WDS(1) - cn->start; // Set cn->free to the next unoccupied word in the block cn->free = Hp + WDS(1); 7~ghc3Produce code to load the current thread state from  CurrentTSOUghcopenNursery dflags tsoJ produces code to open the nursery. A local register holding the value of  CurrentTSO is expected for efficiency.6Opening the nursery corresponds to the following code:  tso = CurrentTSO; cn = CurrentNursery; bdfree = CurrentNursery->free; bdstart = CurrentNursery->start; // We *add* the currently occupied portion of the nursery block to // the allocation limit, because we will subtract it again in // closeNursery. tso->alloc_limit += bdfree - bdstart; // Set Hp to the last occupied word of the heap block. Why not the // next unocupied word? Doing it this way means that we get to use // an offset of zero more often, which might lead to slightly smaller // code on some architectures. Hp = bdfree - WDS(1); // Set HpLim to the end of the current nursery block (note that this block // might be a block group, consisting of several adjacent blocks. HpLim = bdstart + CurrentNursery->blocks*BLOCK_SIZE_W - 1; 7v7w7x7y7z7{7|7}7~7 7v7x7w7y7z7{7}7~77|None)UghctInterpret the argument as an unsigned value, assuming the value is given in two-complement form in the given width. Example: asUnsigned W64 (-1) is 18446744073709551615.This function is used to work around the fact that many array primops take Int# arguments, but we interpret them as unsigned quantities in the code gen. This means that we have to be careful every time we work on e.g. a CmmInt literal that corresponds to the array size, as it might contain a negative Integer value if the user passed a value larger than 2^(wORD_SIZE_IN_BITS-1) as the Int# literal.7ghcDecide whether an out-of-line primop should be replaced by an inline implementation. This might happen e.g. if there's enough static information, such as statically know arguments, to emit a more efficient implementation inline.Returns RS if this primop should use its out-of-line implementation (defined elsewhere) and R^ together with a code generating function that takes the output regs as arguments otherwise.Ughc1Implements branchless recovery of the carry flag c/ by checking the leftmost bits of both inputs a and b and result  r = a + b:  c = a&b | (a|b)&~r  Ehttps://brodowsky.it-sky.net/2015/04/02/how-to-recover-the-carry-bit/Ughc1Implements branchless recovery of the carry flag c/ by checking the leftmost bits of both inputs a and b and result  r = a - b:  c = ~a&b | (~a|b)&r  Ehttps://brodowsky.it-sky.net/2015/04/02/how-to-recover-the-carry-bit/Ughc?Translate byte array prefetch operations into proper primcalls.UghcGTranslate mutable byte array prefetch operations into proper primcalls.Ughc<Translate address prefetch operations into proper primcalls.Ughc:Translate value prefetch operations into proper primcalls.Ughc%helper to generate prefetch primcallsUghcrTakes a register to return the newly allocated array in and the size of the new array in bytes. Allocates a new 'MutableByteArray#'.UghcTakes a source  'ByteArray#'0, an offset in the source array, a destination 'MutableByteArray#', an offset into the destination array, and the number of bytes to copy. Copies the given number of bytes from the source array to the destination array.UghcTakes a source 'MutableByteArray#'0, an offset in the source array, a destination 'MutableByteArray#', an offset into the destination array, and the number of bytes to copy. Copies the given number of bytes from the source array to the destination array.UghcTakes a source  'ByteArray#'0, an offset in the source array, a destination 'Addr#'}, and the number of bytes to copy. Copies the given number of bytes from the source array to the destination memory region.UghcTakes a source 'MutableByteArray#'0, an offset in the source array, a destination 'Addr#'}, and the number of bytes to copy. Copies the given number of bytes from the source array to the destination memory region.UghcTakes a source 'Addr#', a destination 'MutableByteArray#', an offset into the destination array, and the number of bytes to copy. Copies the given number of bytes from the source memory region to the destination array.UghcTakes a 'MutableByteArray#'v, an offset into the array, a length, and a byte, and sets each of the selected bytes in the array to the character.UghcAllocate a new array.UghcTakes a source 'Array#'0, an offset in the source array, a destination 'MutableArray#', an offset into the destination array, and the number of elements to copy. Copies the given number of elements from the source array to the destination array.UghcTakes a source 'MutableArray#'0, an offset in the source array, a destination 'MutableArray#', an offset into the destination array, and the number of elements to copy. Copies the given number of elements from the source array to the destination array.UghcTakes an info table label, a register to return the newly allocated array in, a source array, an offset in the source array, and the number of elements to copy. Allocates a new array and initializes it from the source array.UghcTakes an info table label, a register to return the newly allocated array in, a source array, an offset in the source array, and the number of elements to copy. Allocates a new array and initializes it from the source array.UghcTakes and offset in the destination array, the base address of the card table, and the number of elements affected (*not* the number of cards). The number of elements may not be zero. Marks the relevant cards as dirty.UghcEmit an atomic modification to a byte array element. The result reg contains that previous value of the element. Implies a full memory barrier.UghcBEmit an atomic read to a byte array that acts as a memory barrier.UghcCEmit an atomic write to a byte array that acts as a memory barrier.UghcEmit a call to memcpy.UghcEmit a call to memmove.UghcEmit a call to memset9. The second argument must fit inside an unsigned char.7ghc The primopghcThe primop argumentsUghcreturn registerghcrepresentation of the arrayghc info pointerghcheader payloadghc array sizeghcinitial elementUghc copy functionghc source arrayghcoffset in source arrayghcdestination arrayghcoffset in destination arrayghcnumber of elements to copyUghc copy functionghc source arrayghcoffset in source arrayghcdestination arrayghcoffset in destination arrayghcnumber of elements to copyUghc Result regghcAtomic op (e.g. add)ghcMutableByteArray#ghcIndexghc(Type of element by which we are indexingghc Op argument (e.g. amount to add)Ughc Result regghcMutableByteArray#ghcIndexghc(Type of element by which we are indexingUghcMutableByteArray#ghcIndexghc(Type of element by which we are indexingghcValue to writeUghc Result regghcMutableByteArray#ghcIndexghc(Type of element by which we are indexingghc Old valueghc New value777777None"#&'B Ughc>the offset of Sp relative to the base on entry to this block.Ughcthe number of bytes of arguments in the area for this block Defn: the offset of young(L) relative to the base is given by (sm_sp - sm_args) of the StackMap for block L.UghcjNumber of words of stack that we do not describe with an info table, because it contains an update frame.Ughcregs on the stackUghcXcreate a sequence of assignments to establish the new StackMap, given the old StackMap.UghcGiven a set of live registers and a StackMap, save all the registers on the stack and return the new StackMap and the assignments to do the saving.Ughc[Manifest Sp: turn all the CmmStackSlots into CmmLoads from Sp. The block looks like this:zmiddle_pre -- the middle nodes Sp = Sp + sp_off -- Sp adjustment goes here last -- the last nodeEAnd we have some extra blocks too (that don't contain Sp adjustments)qThe adjustment for middle_pre will be different from that for middle_post, because the Sp adjustment intervenes.Ughc,Determine whether a stack check cannot fail.UghcEliminate stores of the formSp[area+n] = r when we know that r is already in the same slot as Sp[area+n]. We could do this in a later optimisation pass, but that would involve a separate analysis and we already have the information to hand here. It helps clean up some extra stack stores in common cases.Note that we may have to modify the StackMap as we walk through the code using procMiddle, since an assignment to a variable in the StackMap will invalidate its mapping there.7777None2m7ghcSet of visible orphan modules, according to what modules have been directly imported. This is based off of the dep_orphs field, which records transitively reachable orphan modules (modules that define orphan instances).7ghc7 represents the combination of the global type class instance environment, the local type class instance environment, and the set of transitively reachable orphan modules (according to what modules have been directly imported) used to test orphan instance visibility.7ghcA type-class instance. Note that there is some tricky laziness at work here. See Note [ClsInst laziness and the rough-match fields] for more details.7ghc Class name7ghcTop of type args7ghcis_dfun_name = idName . is_dfun.We use 7 for the visibility check, 7, which needs to know the  A which the dictionary is defined in. However, we cannot use the   attached to 7 since doing so would mean we would potentially pull in an entire interface file unnecessarily. This was the cause of #12367.7ghctA fuzzy comparison function for class instances, intended for sorting instances before displaying them to the user.7ghcCollects the names of concrete types and type constructors that make up the head of a class instance. For instance, given `class Foo a b`:W`instance Foo (Either (Maybe Int) a) Bool` would yield [Either, Maybe, Int, Bool].Used in the implementation of ":info" in GHCi.The 5 is because of instance Foo a => Baz T where ... The decl is an orphan if Baz and T are both not locally defined, even if Foo *is* locally defined7ghcJTest if an instance is visible, by checking that its origin module is in 72. See Note [Instance lookup and orphan instances]7ghczChecks for an exact match of ClsInst in the instance environment. We use this when we do signature checking in TcRnDriver7ghcTrue when when the instance heads are the same e.g. both are Eq [(a,b)] Used for overriding in GHCi Obviously should be insenstive to alpha-renaming7ghcLook up an instance in the given instance environment. The given class application must match exactly one instance and the match may not contain any flexi type variables. If the lookup is unsuccessful, yield 'Left errorMessage'.7ghcSee Note [Rules for instance lookup] ^ See Note [Safe Haskell Overlapping Instances] in TcSimplify ^ See Note [Safe Haskell Overlapping Instances Implementation] in TcSimplifyUghcbAdd a new solution, knocking out strictly less specific ones See Note [Rules for instance lookup]7ghcthe name of the classghc(the types which the class was applied toghcthe  of the dictionary bindingghcthe  of the dictionary.ghcmay this instance overlap?ghcis this instance an orphan??uwxyzv{|}~%%7777777777777777777777777777777777777777777777777?77{|}~uwxyzv77777777777777777777777777777777777777777777%%777NoneT Ughc.Do we force the result to be representational?UghcDo we apply a sym to the result?7ghcZoptCoercion applies a substitution to a coercion, *and* optimises it to reduce its sizeUghc|Optimize a coercion, making no assumptions. All coercions in the lifting context are already optimized (and sym'd if nec'y)UghcGOptimize a coercion, knowing the coercion's role. No other assumptions.Ughc=Optimize a coercion, knowing the coercion's non-Phantom role.Ughc Optimize a non-phantom coercion.Ughc Optimize a non-phantom coercion.UghcoOptimize a phantom coercion. The input coercion may not necessarily be a phantom, but the output sure will be.7ghcCheck to make sure that an AxInstCo is internally consistent. Returns the conflicting branch, if it exists See Note [Conflict checking with AxiomInstCo]Ughc/Conditionally set a role to be representationalUghccIf we require a representational role, return that. Otherwise, return the "default" role provided.UghcThe role of the input coercionUghc current roleUghc"default" role7777None2 7ghc Evidence for  CallStack implicit parameters.7ghcEvCsPushCall name loc stk represents a call to name, occurring at loc, in a calling context stk.7ghcInstructions on how to make a Typeable0 dictionary. See Note [Typeable evidence terms]7ghcDictionary for  Typeable T where TF is a type constructor with all of its kind variables saturated. The [EvTerm] is Typeable" evidence for the applied kinds..7ghcDictionary for Typeable (s t), given a dictionaries for s and t.7ghcDictionary for Typeable (s -> t), given a dictionaries for s and t.7ghc%Dictionary for a type literal, e.g. Typeable "foo" or  Typeable 3 The 7 is evidence of, e.g.,  KnownNat 3 (see Trac #10348)8 ghc\This version does a slow check, calculating the related types and seeing if they are equal.8ghc5mkWpFuns [(ty1, wrap1), (ty2, wrap2)] ty_res wrap_res , where wrap1 :: ty1 "->" ty1' and wrap2 :: ty2 "->" ty2', wrap3 :: ty3 "->" ty3' and ty_res is either ty3 or ty3', gives a wrapper /(ty1' -> ty2' -> ty3) "->" (ty1 -> ty2 -> ty3'). Notice that the result wrapper goes the other way round to all the others. This is a result of sub-typing contravariance. The SDoc is a description of what you were doing when you called mkWpFuns.8%ghc,Any sort of evidence Id, including coercions8'ghcd |> co85ghc Create a ls that unwraps an implicit-parameter or overloaded-label dictionary to expose the underlying value. We expect the nA to have the form `IP sym ty` or `IsLabel sym ty`, and return a l `co :: IP sym ty ~ ty` or `co :: IsLabel sym ty ~ Proxy# sym -> ty`. See also Note [Type-checking overloaded labels] in TcExpr.86ghc Create a l> that wraps a value in an implicit-parameter dictionary. See 85.YZ[\!7777777777777777777777777777777777777777777777777777777777777777778888888888 8 8 8 8 8888888888888888888 8!8"8#8$8%8&8'8(8)8*8+8,8-8.8/8081828384858677777777778 8888888888 8888477777777777788888 8!8777778.8/8$8#8"87777777778%8&8'8(8)8*8,838-8+828180777777777777!YZ[\77777777777777777788888888 88 8 88586None ,12>HV H8Eghc!Haskell Pattern Synonym Direction8IghcRecord Pattern Synonym Field8MghcHaskell Pattern Synonym Details8Nghc!Type checker Specification Pragma8Oghc~The Id to be specialised, a wrapper that specialises the polymorphic function, and inlining spec for the specialised function8Pghc*Located Type checker Specification Pragmas8Qghc#Type checker Specialisation Pragmas8Q conveys  SPECIALISE/ pragmas from the type checker to the desugarer8RghcPSuper-specialised: a default method should be macro-expanded at every call site8TghcFixity Signature8WghcLocated Fixity Signature8XghcSignatures and pragmas8YghcAn ordinary type signature f :: Num a => a -> axAfter renaming, this list of Names contains the named wildcards brought into scope by this signature. For a signature _ -> _a -> Bool., the renamer will leave the unnamed wildcard _$ untouched, and the named wildcard _a is then replaced with fresh meta vars in the type. Their names are stored in the type signature that brought them into scope, in this third field to be more specific.t : t , t8Zghc A pattern synonym type signature ,pattern Single :: () => (Show a) => a -> [a]t : t , t,t t,t8[ghcA signature for a class method False: ordinary class-method signature True: generic-default class method signature e.g. class C a where op :: a -> a -- Ordinary default op :: Eq a => a -> a -- Generic default No wildcards allowed heret : t , t8\ghcA type signature in generated code, notably the code generated for record selectors. We simply record the desired Id itself, replete with its name, type and IdDetails. Otherwise it's just like a type signature: there should be an accompanying binding8]ghcAn ordinary fixity declaration  infixl 8 ***t : t , t8^ghcAn inline pragma {#- INLINE f #-}t : t  '{-# INLINE' and '[' , t,t , t,t , t8_ghcA specialisation pragma "{-# SPECIALISE f :: Int -> Int #-}t : t, t '{-# SPECIALISE' and '[', t, t, t ']' and '#-}', t8`ghc6A specialisation pragma for instance declarations only ${-# SPECIALISE instance Eq [Int] #-}L(Class tys); should be a specialisation of the current instance declarationt : t, t,t8aghc$A minimal complete definition pragma ${-# MINIMAL a | (b, c | (d | e)) #-}t : t, t,t, t8bghc+A "set cost centre" pragma for declarations {-# SCC funName #-}or &{-# SCC funName "cost_centre_name" #-}8cghcA complete match pragma {-# COMPLETE C, D [:: T] #-}Used to inform the pattern match checker about additional complete matchings which, for example, arise from pattern synonym definitions.8eghcLocated Signature8fghcImplicit parameter bindings.These bindings start off as (Left "x") in the parser and stay that way until after type-checking when they are replaced with (Right d), where "d" is the name of the dictionary holding the evidence for the implicit parameter.t : t8ighc"Located Implicit Parameter Binding May have t : t when in a list8jghc#Haskell Implicit Parameter Bindings8mghct : t, t,t t,t '{', t '}',Pattern Synonym binding8pghc.Post renaming, FVs. See Note [Bind free vars]8qghcName of the pattern synonym8rghcFormal parameter names8sghcRight-hand side8tghcDirectionality8ughcAbtraction Bindings Export8yghc(Any INLINE pragma is attached to this Id8{ghcXSee Note [ABExport wrapper] Shape: (forall abs_tvs. abs_ev_vars => abe_mono) ~ abe_poly8|ghcSPECIALISE pragmas8ghcFree variables8ghcType of the GRHSs8ghc1Haskell Binding with separate Left and Right id's8ghcFunction-like Binding'FunBind is used for both functions f x = e) and variables  f = x -> e) and strict variables  !x = x + 1/Reason 1: Special case for type inference: see .Reason 2: Instance decls can only have FunBinds, which is convenient. If you change this, you'll need to change e.g. rnMethodBinds'But note that the form f :: a->a = ...Q parses as a pattern binding, just like (f :: a -> a) = ... 6Strict bindings have their strictness recorded in the % of their  MatchContext`. See Note [FunBind vs PatBind] for details about the relationship between FunBind and PatBind.tst), attached to each element of fun_matchest,t, t,t,8ghcPattern BindingThe pattern is never a simple variable; That case is done by FunBind. See Note [FunBind vs PatBind] for details about the relationship between FunBind and PatBind.8ghcVariable BindingQDictionary binding and suchlike. All VarBinds are introduced by the type checker8ghcAbstraction Bindings8ghct : t , t,t , t t '{',t '}'8ghcmAfter the renamer, this contains the locally-bound free variables of this defn. See Note [Bind free vars]8ghc The payload8ghcJCoercion from the type of the MatchGroup to the type of the Id. Example: 1 f :: Int -> forall a. a -> a f x y = y Then the MatchGroup will have type (Int -> a' -> a') (with a free type variable a'). The coercion will take a CoreExpr of this type and convert it to a CoreExpr of type Int -> forall a'. a' -> a' Notice that the coercion captures the free a'.8ghcTicks to put on the rhs, if any8ghcSee Note [Bind free vars]8ghcJTicks to put on the rhs, if any, and ticks to put on the bound variables.8ghcLocated only for consistency8ghcTrue  =H inline this binding regardless (used for implication constraints only)8ghcIncludes equality constraints8ghcAbsBinds only gets used when idL = idR after renaming, but these need to be idL's for the collect... code in HsUtil to have the right type8ghcaEvidence bindings Why a list? See TcInstDcls Note [Typechecking plan for instance declarations]8ghcTypechecked user bindings8ghcELocated Haskell Binding with separate Left and Right identifier types8ghcFLocated Haskell Bindings with separate Left and Right identifier types8ghcHaskell Binding8ghcLocated Haskell Bindings8ghcLocated Haskell Binding8ghcHaskell Value bindings with separate Left and Right identifier types (not implicit parameters) Used for both top level and nested bindings May contain pattern synonym bindings8ghcValue Bindings InYBefore renaming RHS; idR is always RdrName Not dependency analysed Recursive by default8ghcValue Bindings OutvAfter renaming RHS; idR can be Name or Id Dependency analysed, later bindings in the list may depend on earlier ones.8ghcHaskell Value Bindings8ghcDHaskell Local Bindings with separate Left and Right identifier typesBindings in a 'let' expression or a 'where' clause8ghcHaskell Value Bindings8ghc#Haskell Implicit Parameter Bindings8ghcEmpty Local Bindings8ghcLocated Haskell local bindings8ghcHaskell Local Bindings8ghcOUsing SourceText in case the pragma was spelled differently or used mixed case8E8H8G8F8I8J8L8K8M8N8O8P8Q8S8R8T8V8U8W8X8d8b8a8`8]8\8c8Z8_8[8^8Y8e8f8h8g8i8j8k8l8m8n8o8t8s8r8q8p8u8w8v8|8{8z8y8x8}8~8888888888888888888888888888888888888888888888888888888888888888888888888888888888888ӏ88888888888888888888888888888888888888888888888}8~888u8w8v8|8{8z8y8x8m8n8o8t8s8r8q8p8888888888888888j8k8l888i8f8h8g8e8X8d8b8a8`8]8\8c8Z8_8[8^8Y8W8T8V8U8Q8S8R8P8N8O888888888888888888888M8I8J8L8K8E8H8G8F}None%,12456=>?HV 1#!ghcPatternt : t 8ghcHaskell Record Fieldt : t,@For details on above see note [Api annotations] in ApiAnnotation8ghc!Filled in by renamer when punning8ghcNote [Punning]8ghcHaskell Record Update Field8ghcHaskell Record Field8ghc#Located Haskell Record Update Field8ghcLocated Haskell Record Field8ghcLocated Haskell Record Field8ghcHaskell Record FieldsSHsRecFields is used only for patterns and expressions (not data type declarations)8ghc#Haskell Constructor Pattern Details8ghcdWildcard Pattern The sole reason for a type on a WildPat is to support hsPatType :: Pat Id -> Type8ghcVariable Pattern8ghcLazy Pattern ^ - t : t8ghcAs pattern ^ - t : t8ghcAParenthesised pattern See Note [Parens in HsSyn] in HsExpr ^ - t : t '('&, t ')'8ghcBang pattern ^ - t : t 8ghcSyntactic Listt : t '['&, t ']'8ghcTuple sub-patternst : t '(' or '(#', t ')' or '#)'8ghcAnonymous sum patternt : t '(#', t '#)'9ghcConstructor Pattern In9ghcConstructor Pattern Out9ghc View Pattern9ghc&Splice Pattern (Includes quasi-quotes)9ghcALiteral Pattern Used for *non-overloaded* literal patterns: Int, Char, Int, Char, String, etc.9ghcNatural Patternt : t RW9ghc n+k pattern9ghcPattern with a type signature9ghcCoercion Pattern9 ghc4Trees that Grow extension point for new constructors9#ghc9# p pat returns R if the pattern pat% needs parentheses under precedence p.UghcU p cp returns R if the constructor patterns cp% needs parentheses under precedence p.9$ghc9$ p pat checks if 9# p pat is true, and if so, surrounds pat with a 8. Otherwise, it simply returns pat.C8888998899899988999 9 9 9 9 999888888888888888889999999999999999 9!9"9#9$9%9&C8888998899899988999 9 9 9 9 9999988898888888888888899999999999!9 9#9$9"9&9%99None ,12456>HV 92ghcRole Annotation Declaration93ghct : t , t95ghc#Located Role Annotation Declaration96ghcAnnotation Provenance9:ghcAnnotation Declaration9;ghct : t , t t t9=ghcLocated Annotation Declaration9>ghcWarning pragma Declaration9Aghc"Located Warning pragma Declaration9BghcWarning pragma Declarations9HghcLocated Warning Declarations9Ighc!Documentation comment Declaration9Nghc)Located Documentation comment Declaration9Oghc Rule Binder9Rghct : t, t,t9SghcLocated Rule Binder9VghcRule Declaration9Wghct : t,t , t , t , t,t , t,9Yghc-After renamer, free-vars from the LHS and RHS9Zghc'Note [Pragma source text] in BasicTypes9\ghcForall'd type vars9]ghc_Forall'd term vars, before typechecking; after typechecking this includes all forall'd vars9`ghcLocated Rule Declaration9aghcRule Declarations9gghcLocated Rule Declarations9pghcForeign Declaration9rghct : t , t,t , t9zghcLocated Foreign Declaration9{ghcDefault Declaration9|ghcts : t , t,t9~ghcLocated Default Declaration9ghcHWhich technique the user explicitly requested when deriving an instance.9ghcGHC's "standard" strategy, which is to implement a custom instance for the data type. This only works for certain types that GHC knows about (e.g., R-, R, RS when -XDeriveFunctor is enabled, etc.)9ghc -XDeriveAnyClass9ghc -XGeneralizedNewtypeDeriving9ghc  -XDerivingVia9ghcA  9.9ghc+Stand-alone 'deriving instance' declaration9ghcThe instance type to derive. It uses an ,39 because the context is allowed to be a single wildcard: !deriving instance _ => Eq (Foo a)4Which signifies that the context should be inferred.9ghct : t , t, t , t,  ! , t,t9ghc3Located stand-alone 'deriving instance' declaration9ghcInstance Declaration9ghcLocated Instance Declaration9ghcClass Instance Declaration9ghct : t , t , t,t,9ghct : t&, t,9ghc"Located Class Instance Declaration9ghcFamily EquationOne equation in a type family instance declaration, data family instance declaration, or type family default. See Note [Type family instance declarations in HsSyn] See Note [Family instance declaration binders]9ghct : t9ghcOptional quantified type vars9ghcFixity used in the declaration9ghcFamily Instance Equation9ghc Located Family Instance Equation9ghc Data Family Instance Declaration9ghct : t" , t#,t , t t,t , t9ghc(Located Data Family Instance Declaration9ghc Type Family Instance Declaration9ghct : t , t,9ghc(Located Type Family Instance Declaration9ghcType Family Default Equation9ghcType Family Instance Equation9ghcHaskell Type Patterns9ghc$Located Type Family Default Equation9ghc%Located Type Family Instance Equation9ghc,Haskell data Constructor Declaration Details9ghc data T b = forall a. Eq a => MkT a b MkT :: forall b a. Eq a => MkT a b data T b where MkT1 :: Int -> T Int data T = Int MkT, Int | MkT2 data T a where Int MkT Int :: T Int ts : t, t,t$, t,t, t,t, t,tdata Constructor Declaration9ghcTrue  =2 explicit forall False => hsq_explicit is empty9ghcUser-written context (if any)9ghcArguments; never InfixCon9ghc Result type9ghcA possible Haddock comment.9ghcExistentials only9ghc$Located data Constructor Declaration9ghc newtype Blah ...9ghc  data Blah ...9ghc A single deriving clause of a data declaration.t : t, t , t,  ! , t,t9ghc;The user-specified strategy (if any) to use when deriving 9.9ghcThe types to derive.It uses ,5s because, with -XGeneralizedNewtypeDerivingH, we can mention type variables that aren't bound by the datatype, e.g. data T b = ... deriving (C [a])&should produce a derived instance for  C [a] (T b).9ghcHaskell Deriving clause9ghcHaskell Data type Definition9ghc:Declares a data type or newtype, giving its constructors  data/newtype T a =  constrs! data/newtype instance T [a] =  constrs 9ghcContext9ghcOptional kind signature.(Just k) for a GADT-style data, or  data instance decl, with explicit kind sigAlways Nothing for H98-syntax decls9ghcData constructorsFor data T a = T1 | T2 a the 9 s all have 9. For data T a where { T1 :: T a } the  LConDecls all have 9.9ghc Optional  'deriving' claues9ghcRL if we're in an hs-boot file and the user said "type family Foo x where .."9ghc.If the user supplied an injectivity annotation it is represented using InjectivityAnn. At the moment this is a single injectivity condition - see Note [Injectivity annotation]. `Located name` stores the LHS of injectivity condition. `[Located name]` stores the RHS of injectivity condition. Example:.type family Foo a b c = r | r -> a c where ...,This will be represented as "InjectivityAnn r [a, c]"9ghct : t, t9ghcLocated Injectivity Annotation9ghctype Family Declaration9ghct : t, t", t%, t, t&, t, t', t, t, t9ghcLocated type Family Declaration9ghctype Family Result Signature9ghct :9ghct : t&,t, t'9ghct : t&,t, t', t9ghc$Located type Family Result Signature9ghcType or Class Group:ghcdoes this have a CUSK?:ghcA type or class declaration.:ghc type/data family T :: *->*t : t, t", t%,t, t,t&, t,t', t,t, t:ghctype declarationt : t, t,: ghcdata declarationt : t", t%, t#, t#,t t,: ghct : t( , t,t , tThe tcdFDs will have t, t t:ghcPost renameer, FVs:ghcType constructor:ghcDType variables; for an associated type these include outer binders:ghcFixity used in the declaration:ghcPost renamer, CUSK flag, FVs:ghcPost renamer, FVs:ghc Context...:ghcFunctional deps:ghcMethods' signatures:ghcDefault methods:ghcAssociated types;:ghcAssociated type defaults:ghc Haddock docs:ghc&Located Declaration of a Type or Class:ghcSplice Declaration:!ghcLocated Splice Declaration:"ghc Haskell GroupA :1 is categorised into a :"" before being fed to the renamer.:1ghcA Haskell Declaration:2ghcType or Class Declaration:3ghcInstance declaration:4ghcDeriving declaration:5ghcValue declaration:6ghcSignature declaration:7ghc 'default' declaration:8ghcForeign declaration:9ghcWarning declaration::ghcAnnotation declaration:;ghcRule declaration:<ghc+Splice declaration (Includes quasi-quotes):=ghc!Documentation comment declaration:>ghcRole annotation declaration:EghcTrue  = argument is a data/newtype declaration.:Fghc!type or type instance declaration:Gghc type class:Hghctype/data family declaration:Ighctype family declaration:Jghcopen type family info:Kghcclosed type family info:Lghcdata family declaration:Sghc~Does this declaration have a complete, user-supplied kind signature? See Note [CUSKs: complete user-supplied kind signatures]:ZghcDoes this family declaration have a complete, user-supplied kind signature? See Note [CUSKs: complete user-supplied kind signatures]UghcFDoes this family declaration have user-supplied return kind signature?:[ghc-Maybe return name of the result type variable:\ghc Convert a 9 to a :dghcA short description of a DerivStrategy'.9ghc Here, the pats^ are type patterns (with kind and type bndrs). See Note [Family instance declaration binders]9ghc May have t : t when in a list9ghc May have t : t# when in a GADT constructor list9ghc The optional deriving clauses of a data declaration. ClausesI is plural because one can specify multiple deriving clauses using the -XDerivingStrategies language extension. The list of 9s corresponds to exactly what the user requested to derive, in order. If no deriving clauses were specified, the list is empty.:@ghcWhen in a list this may havet : t:Zghc4if associated, does the enclosing class have a CUSK?<,-.92939495969798999:9;9<9=9>9?9@9A9B9C9D9E9F9G9H9I9J9K9L9M9N9O9P9Q9R9S9T9U9V9W9X9Y9Z9[9\9]9^9_9`9a9b9c9d9e9f9g9h9i9j9k9l9m9n9o9p9q9r9s9t9u9v9w9x9y9z9{9|9}9~999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999:999::::::: : ::: : : ::::::::::::::::::: :!:":#:$:%:&:':(:):*:+:,:-:.:/:0:1:5:6:>:2:3:4: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<:1:5:6:>:2:3:4:7:8:9:::;:<:=:?:@99999999999:9999999999:\:: : ::: : : ::::::::::::::::::::999:999:Y:U:V:W:X:G:E:F:P:H:I:L:J:K:M:N:R:T:O:Q:S:Z9999999999999999999999999999999:c9999:a:b99999999999999999999999999999999999999999:d9g9a9b9c9d9e9f9V9W9X9Y9Z9[9\9]9^9_9`9T9U9O9P9Q9R9S:f:e:g9{9|9}9~,-.::: :!9p9q9r9s9t9u9v9w9x9y9z9n9o9h9i9j9k9l9m99999999999999999:_:`:]:^9I9J9K9L9M9N:h9>9?9@9A9B9C9D9E9F9G9H9:9;9<9=96979899:i92939495:j999999999:[:":#:$:%:&:':(:):*:+:,:-:.:/:0:A:B:D:CNone,124>EHVX!R)ghcLocated Haskell ExpressionghcSyntax ExpressionSyntaxExpr is like ;Y, but it's filled in a little earlier, by the renamer. It's used for rebindable syntax.E.g. (>>=)4 is filled in before the renamer by the appropriate  for (>>=)H, and then instantiated by the type checker with its type args etcThis should desugar to csyn_res_wrap $ syn_expr (syn_arg_wraps[0] arg0) (syn_arg_wraps[1] arg1) ...Xwhere the actual arguments come from elsewhere in the AST. This could be defined using  GhcPass pA and such, but it's harder to get it all to work out that way. (;! is hard to write, for example.)ghcGuarded Right-Hand Sides8GRHSs are used both for pattern bindings and for Matchest : t , t,t , t,t t,tghcHaskell Spliceghc;Haskell Command (e.g. a "statement" in an Arrow proc block)ghcA Haskell expression.:ghcGHaskell Statement Context. It expects to be parameterised with one of RdrName,  or Id:ghc do { ... }:ghc'mdo { ... } ie recursive do-expression:ghc'do-notation in an arrow-command context:ghc&A command-line Stmt in GHCi pat <- rhs:ghc!Pattern guard for specified thing:ghcA branch of a parallel stmt:ghcA branch of a transform stmt:ghcHaskell Match ContextmContext of a pattern match. This is more subtle than it would seem. See Note [Varieties of pattern matches].:ghc8A pattern matching on an argument of a function binding:ghcPatterns of a lambda:ghc)Patterns and guards on a case alternative:ghc$Guards of a multi-way if alternative:ghcPatterns of a proc:ghc"A pattern binding eg [y] <- e = e:ghc`Guards of pattern bindings, e.g., (Just b) | Just _ <- x = e | otherwise = e':ghcoRecord update [used only in DsExpr to tell matchWrapper what sort of runtime error message to generate]:ghc=Pattern of a do-stmt, list comprehension, pattern guard, etc:ghc!A Template Haskell pattern splice:ghc1A Template Haskell pattern quotation [p| (a,b) |]:ghcA pattern synonym declaration:ghcfunction binder of f:ghc fixing of f:ghcwas f' banged? See Note [FunBind vs PatBind]:ghcArithmetic Sequence Information:ghcHaskell Bracket:ghcPending Type-checker Splice:ghcPending Renamer Splice:ghcHaskell Spliced Thing-Values that can result from running a splice.:ghcHaskell Spliced Expression:ghcHaskell Spliced Type:ghcHaskell Spliced Pattern:ghc&Finalizers produced by a splice with )*XSee Note [Delaying modFinalizers in untyped splices] in RnSplice. For how this is used.:ghcA splice can appear with various decorations wrapped around it. This data type captures explicitly how it was originally written, for use in the pretty printer.:ghc$( splice ) or $$( splice ):ghc$splice or $$splice:ghc bare splice:ghcApplicative Argument:ghcParenthesised Statement Block:ghc6API Annotations when in qualifier lists or guards - t : t , t,t+ , t,,t, , t-,t.:ghc:2 represents an applicative expression built with % and . It is generated by the renamer, and is desugared into the appropriate applicative expression by the desugarer, but it is intended to be invisible in error messages.4For full details, see Note [ApplicativeDo] in RnExpr:ghct : t/ t '{',t '}',:ghct : t0;ghcGhci Statement;ghcGhci Located Statement;ghcGuard Statement;ghcGuard Located Statement;ghcExpression Statement;ghcExpression Located Statement;ghcCommand Statement; ghcCommand Located Statement; ghcdo block Statement; ghc3Located Statement with separate Left and Right id's; ghcLocated do block Statement; ghcGuarded Right Hand Side.;ghcLocated Guarded Right-Hand Side;ghc Guarded RHSs;ghcThe where clause;ghc Located Match May have t : t when in a list;'ghcHaskell Record Bindings;*ghcHaskell Top-level Command;-ghcTop-level command, introducing a new arrow. This may occur inside a proc (where the stack is empty) or as an argument of a command-forming operator.!Located Haskell Top-level Command;.ghcHaskell Array Application Type;1ghct : t1 , t2,t3 , t4;2ghct : t5 '(|' , t6 '|)';4ghct : t7 , t,;5ghct : t '(', t ')';6ghct : t8 , t9,t '{' , t '}';7ghct : t: , t , t+,t , t;,;8ghct : t/ , t '{' , t '}',t<;9ghct : t=, t, t, t, t;<ghc*Located Haskell Command (for arrow syntax);=ghct : tHaskell Tuple Argument;>ghc The argument;?ghc-The argument is missing, but this is its type;@ghc&Note [Trees that Grow] extension point;AghcLocated Haskell Tuple Argument;= is used for tuple sections (,a,) is represented by 3ExplicitTuple [Missing ty1, Present a, Missing ty3] Which in turn stands for (x:ty1 y:ty2. (x,a,y));BghcExtra data fields for a ;f, added by the type checker;HghcExtra data fields for a ;e, added by the type checker;LghcVariable;MghcUnbound variable; also used for "holes" (_ or _x). Turned from HsVar to HsUnboundVar by the renamer, when it finds an out-of-scope variable or hole. Turned into HsVar by type checker, to support deferred type errors.;NghcDAfter typechecker only; must be different HsVar for pretty printing;OghcCVariable pointing to record selector Not in use after typechecking;PghcGOverloaded label (Note [Overloaded labels] in GHC.OverloadedLabels) Just id means RebindableSyntax0 is in use, and gives the id of the in-scope  fromLabel&. NB: Not in use after typechecking;Qghc2Implicit parameter (not in use after typechecking);RghcOverloaded literals;Sghc Simple (non-overloaded) literals;Tghc3Lambda abstraction. Currently always a single matcht : t7 , t,;Ughc Lambda-caset : t7 , t8,t , t;Vghc Application;WghcVisible type applicationZExplicit type argument; e.g f @Int x y NB: Has wildcards, but no implicit quantificationt : t,;XghcFOperator applications: NB Bracketed ops such as (+) come out as Vars.;YghcDNegation operator. Contains the negated expression and the name of RZt : t>;Zghc.Parenthesised expr; see Note [Parens in HsSyn];]ghc-Used for explicit tuples and sections thereoft : t , t;^ghcUsed for unboxed sum typest : t '(#' , t, t '#)',There will be multiple tK, (1 - alternative) before the expression, (arity - alternative) after it;_ghct : t8 , t9,t '{' , t '}';`ghct : t: , t , t+,t , t;,;aghc Multi-way ift : t: t,t,;bghclet(rec)t : t/ , t '{' , t '}',t<;cghct : t=, t, t, t, t;dghcSyntactic list: [a,b,c,...]t : t '[', t ']';eghcRecord constructiont : t '{' , t,t '}';fghc Record updatet : t '{' , t,t '}';gghc,Expression with an explicit type signature.  e :: typet : t;hghcArithmetic sequencet : t '[', t,t, t ']';jghct : t  '{-# CORE', t, t '#-}';kghct : t , t?,t@ , t,tA;nghct : t , t;oghcproc notation for Arrowst : tB , t;pghct : tC,;qghct : t1 , t2,t3 , t4;rghct : t5 '(|' , t6 '|)';ughct : t , t '{-# GENERATED' , t,t , tD,t , t> , t,tD , t , t '#-}';wghct : t;xghct : t;yghct : t;ghcRAn unbound variable; used for treating out-of-scope variables as expression holesHEither "x", "y" Plain OutOfScope or "_", "_x" A TrueExprHoleWBoth forms indicate an out-of-scope variable, but the latter indicates that the user expects> it to be out of scope, and just wants GHC to report its type;ghclAn (unqualified) out-of-scope variable, together with the GlobalRdrEnv with respect to which it is unbound;ghc"A "true" expression hole (_ or _x);ghc'Command Syntax Table (for Arrow syntax);ghcPost-Type checking TablerWe use a PostTcTable where there are a bunch of pieces of evidence, more than is convenient to keep individually.;ghcPost-Type checking ExpressionhPostTcExpr is an evidence expression attached to the syntax tree by the type checker (c.f. postTcType).;ghcuThis is used for rebindable-syntax pieces that are too polymorphic for tcSyntaxOp (trS_fmap and the mzip in ParStmt);ghc7Make a 'SyntaxExpr (HsExpr _)', missing its HsWrappers.;ghcdMake a 'SyntaxExpr Name' (the "rn" is because this is used in the renamer), missing its HsWrappers.;ghc; p e returns R if the expression e% needs parentheses under precedence p.;ghc; p e checks if ; p e is true, and if so, surrounds e with an ;Z. Otherwise, it simply returns e.;ghc.Is there only one RHS in this list of matches?;ghc"Should pattern match failure in a : be desugared using R?ghc May have t : t when in a listE;;;;;;;;;;#;";&;$;%::::::;;;:;9;8;7;6;5;4;3;2;1;{;y;x;w;v;u;t;s;r;q;p;o;n;m;l;j;^;W;Q;P;M;i;a;h;e;U;f;[;\;O;d;Y;`;b;c;g;];_;X;R;N;T;Z;L;z;V;k;S;;;;~;};|   ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;::::::::::::::;;;;;;;; ; ; ; ; ;;;;;;;;;;;;;;!; ;';(;);*;+;,;-;.;/;0;<;=;@;?;>;A;B;C;G;F;E;D;H;I;K;J;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;E;;;;;;;;;;;;;;;;{;y;x;w;v;u;t;s;r;q;p;o;n;m;l;j;^;W;Q;P;M;i;a;h;e;U;f;[;\;O;d;Y;`;b;c;g;];_;X;R;N;T;Z;L;z;V;k;S;;;;~;};|;H;I;K;J;B;C;G;F;E;D;A;=;@;?;>;  ;;;;;;;;;;;;;<;;;:;9;8;7;6;5;4;3;2;1;.;/;0;-;*;+;,;(;);;;;;;;';#;";&;$;%;;;!; ;;;;;;;;;;;;;;;;;;;; ;;;;;;;; ; ; ; ;;;;;;;::::::::::;;::::::::::::::::::::::::::::::;;;;;;;;::::::::::;::::::::::::::::::;; ;;:::::::::;;;;:::::;::::::::::::::::;::::::::::;;;;;;;;;;;None %>HVX!v ;ghcWA simple case alternative with a single pattern, no binds, no guards; pre-typechecking<@?HV!zNone ,12=>?HV!=YghcHaskell ModuleEAll we actually declare here is the top-level structure for a module.=Zghctst,tt,t, tW for explicit braces and semi around hsmodImports,hsmodDecls if this style is used.=[ghcNothingP: "module X where" is omitted (in which case the next field is Nothing too)=\ghc Export listNothing+: export list omitted, so export everythingJust [] : export nothing Just [...]: as you would expect...ts : t% ,t=]ghcWe snaffle interesting stuff out of the imported interfaces early on, adding that info to TyDecls/etc; so this list is often empty, downstream.=^ghc1Type, class, value, and interface signature decls=_ghc9reason/explanation for warning/deprecation of this modulets : t% ,t=`ghc-Haddock module info and description, unparsedts : t% ,tf,-.     GHUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~8888998899899988999 9 9 9 9 999;;;;;;;;;;";#;%;$;&::::::;1;2;3;4;5;6;7;8;9;:;;;S;k;V;z;L;Z;T;N;R;X;_;];g;c;b;`;Y;d;O;\;[;f;U;e;h;a;i;M;P;Q;W;^;j;l;m;n;o;p;q;r;s;t;u;v;w;x;y;{;|;};~;;;   % %%%%%%%%%%%%%%%%%%% %!%"%#%$%%%&%'%(%)%*%+%,%-%.%/%0%%%%%%%%%%%%%%+++++++++++++++++++++,,,,,,,,,, , , , , ,,,,%,,,,,,,, ,,,!,,,&,,,,,",#,$,',(,),*,+,,,-,.,/,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,{,|,},~,,,,,,,,,,,,,,,,8E8F8G8H8I8J8K8L8M8N8O8P8Q8R8S8T8U8V8W8X8Y8^8[8_8Z8c8\8]8`8a8b8d8e8f8g8h8i8j8l8k8m8o8n8p8q8r8s8t8u8v8w8x8y8z8{8|8}8~8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888889999999999999999 9!9"9#9$9%9&92939495969798999:9;9<9=9>9?9@9A9B9C9D9E9F9G9H9I9J9K9L9M9N9O9P9Q9R9S9T9U9V9W9X9Y9Z9[9\9]9^9_9`9a9b9c9d9e9f9g9h9i9j9k9l9m9n9o9p9q9r9s9t9u9v9w9x9y9z9{9|9}9~999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999:999::::::: : ::: : : ::::::::::::::::::: :!:":#:$:%:&:':(:):*:+:,:-:.:/:0:1:5:6:>:2:3:4: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::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;; ; ; ; ; ;;;;;;;;;;;;;; ;!;';(;);*;,;+;-;.;0;/;<;=;>;?;@;A;B;C;D;E;F;G;H;I;J;K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<< < < < < <<<<<<<<<<<<<<<<<<< FHV!=qghc!Either an operator or an operand.=yghcEssentially a wrapper for a RuleBndr GhcPs=|ghcSmkClassDecl builds a RdrClassDecl, filling in the names for tycon and datacon by deriving them from the name of the class. We fill in the names for the tycon and datacon corresponding to the class, by deriving them from the name of the class itself. This saves recording the names in the interface file (which would be equally good).=ghcTake a type-family instance declaration and turn it into a type-family default equation for a class declaration. We parse things as the former and use this function to convert to the latter6We use the Either monad because this also called from Convert.The P () we return corresponds represents an action which will add some necessary paren annotations to the parsing context. Naturally, this is not something that the Convert use cares about.=ghcFunction definitions are restructured here. Each is assumed to be recursive initially, and non recursive definitions are discovered by the dependency analyser.UghcReinterpret a type constructor, including type operators, as a data constructor. See Note [Parsing data constructors is hard]UghcoThis function ensures that fields with strictness or packedness annotations put these annotations on an outer ,!.The problem is that in the parser, strictness and packedness annotations bind more tightly that docstrings. However, the expectation downstream of the parser (by functions such as ,Q and ,R0) is that docstrings bind more tightly so that ,!# may end up as the top-level type. See #15206=ghcJThis rather gruesome function is used mainly by the parser. When parsing: data T a = T | T1 Int"we parse the data constructors as types? because of parser ambiguities, so then we need to change the  type constr to a  data constrThe exact-name case can occur when parsing: data [] a = [] | a : [a]3For the exact-name case we return an original name.=ghc>Replaces constraint tuple names with corresponding boxed ones.UghcCheck whether the given list of type parameters are all type variables (possibly with a kind signature). We use the Either monad because it's also called (via =) from Convert.=ghcCheck if the gadt_constrlist is empty. Only raise parse error for `data T where` to avoid affecting existing error message, see #8258.=ghcqYield a parse error if we have a function applied directly to a do block etc. and BlockArguments is not enabled.=ghcSValidate the context constraints and break up a context into a list of predicates.  (Eq a, Ord b) --> [Eq a, Ord b] Eq a --> [Eq a] (Eq a) --> [Eq a] (((Eq a))) --> [Eq a] Ughc#Check recursively if there are any , Gs in the given type. This only works on a subset of types produced by  btype_no_opsUghcKExtract a strictness/unpackedness annotation from the front of a reversed =q list.=ghcMerge a reversed and  non-empty/ soup of operators and operands into a type. User input: F x y + G a b * X Input to =: [X, *, b, a, G, +, y, x, F] Output corresponds to what the user wrote assuming all operators are of the same fixity and right-associative.It's a bit silly that we're doing it at all, as the renamer will have to rearrange this, and it'd be easier to keep things separate.,See Note [Parsing data constructors is hard]=ghcMerge a reversed and  non-empty; soup of operators and operands into a data constructor. User input: C !A B -- ^ doc Input to =<: ["doc", B, !, A, C] Output: (C, PrefixCon [!A, B], "doc")QSee Note [Parsing data constructors is hard] See Note [isFunLhs vs mergeDataCon]=ghcCheck for monad comprehensions1If the flag MonadComprehensions is set, return a :# context, otherwise use the usual : context=ghcdCheck if a fixity is valid. We support bypassing the usual bound checks for some special operators.=ghc#Hint about bang patterns, assuming  BangPatterns is off.=ghc precedenceghc operatorsX;;;;<The ConLikes that form a covering family (e.g. Nothing, Just)=ghc&The TyCon that they cover (e.g. Maybe)=ghc3Objects which have yet to be linked by the compiler=ghcAn object file (.o)=ghcStatic archive file (.a)=ghc3Dynamically linked library file (.so, .dll, .dylib)=ghcA byte-code object, lives only in memory. Also carries some static pointer table entries which should be loaded along with the BCOs. See Note [Grant plan for static forms] in StaticPtrTable.=ghcDInformation we can use to dynamically link modules into the compiler=ghcsTime at which this linkable was built (i.e. when the bytecodes were produced, or the mod date on the files)=ghcThe linkable module itself=ghc3Those files and chunks of code we have yet to link.4INVARIANT: A valid linkable always has at least one = item. If this list is empty, the Linkable represents a fake linkable, which is generated in HscNothing mode to avoid recompiling modules.?ToDo: Do items get removed from this list when they get linked?=ghcMextra source files (e.g. from #includes). The lexer collects these from '#  file  line' pragmas, which the C preprocessor leaves behind. These files and their timestamps are stored in the .hi file, so that we can force recompilation if any of them change (#3589)=ghcSafe Haskell information for >F Simply a wrapper around SafeHaskellMode to sepperate iface and flags=ghcIs an import a safe import?=ghcpThis is used to signal if one of my imports used HPC instrumentation even if there is no module-local HPC usage=ghc;Information about a modules use of Haskell Program Coverage=ghc*Is hpc used anywhere on the module *tree*?=ghcXIndicates whether a given module's source has been modified since it was last compiled.=ghcthe source has been modified=ghcthe source has not been modified. Compilation may or may not be necessary, depending on whether any dependencies have changed since we last compiled.=ghc=the source has not been modified, and furthermore all of its (transitive) dependencies are up to date; it definitely does not need to be recompiled. This is important for two reasons: (a) we can omit the version check in checkOldIface, and (b) if the module used TH splices we don't need to force recompilation.=ghcA single node in a >,. The nodes of the module graph are one of:A regular Haskell source moduleA hi-boot source module=ghcIdentity of the module=ghc1The module source either plain Haskell or hs-boot=ghc5Location of the various files belonging to the module=ghcTimestamp of source file=ghc#Timestamp of object, if we have one=ghc<Timestamp of hi file, if we *only* are typechecking (it is RJ otherwise. See Note [Recompilation checking in -fno-code mode] and #9243=ghc%Timestamp of hie file, if we have one=ghcSource imports of the module=ghc7Non-source imports of the module from the module *text*=ghcvThe parsed, nonrenamed source, if we have it. This is also used to support "inline module syntax" in Backpack files.=ghc$Filename of preprocessed source file>ghcCached flags from OPTIONS, INCLUDE and LANGUAGE$ pragmas in the modules source code>ghc-The actual preprocessed source, if we have it>ghcA ModuleGraph contains all the nodes from the home package (only). There will be a node for each source module, plus a node for each hi-boot module.IThe graph is not necessarily stored in topologically-sorted order. Use E and  F to achieve this.>ghc:Accumulated statistics about what we are putting into the > !. "In" means stuff that is just readG from interface files, "Out" means actually sucked in and type-checked> ghcZInformation about other packages that we have slurped in by reading their interface files>ghc*In OneShot mode (only), home-package modules accumulate in the external package state, and are sucked in lazily. For these home-pkg modules (only) we need to record which are boot modules. We set this field after loading all the explicitly-imported interfaces, but before doing anything elseThe  u part is not necessary, but it's useful for debug prints, and it's convenient because this field comes direct from -G>ghcThe >s for modules in external packages whose interfaces we have opened. The declarations in these interface files are held in the  eps_decls, >, > and  eps_rules$ fields of this record, not in the >, fields of the interface we have sucked in.What is in the PIT is: The ModuleFingerprint info Its exportsFixitiesDeprecations and warnings>ghc Cache for ?)#. Ordinarily, we can rely on the >\ for this information, EXCEPT that when we do dependency analysis, we need to look at the >+A of our imports to determine what their precise free holes are (moduleFreeHolesPrecise). We don't want to repeatedly reread in the interface for every import, so cache it here. When the PIT gets filled in we can drop these entries.>ghcResult of typechecking all the external package interface files we have sucked in. The domain of the mapping is external-package modules>ghc The total 73 accumulated from all the external-package modules>ghc The total 43 accumulated from all the external-package modules>ghc The total RuleEnv3 accumulated from all the external-package modules>ghc The total 23 accumulated from all the external-package modules>ghc The total =3 accumulated from all the external-package modules>ghcaThe family instances accumulated from external packages, keyed off the module that declared them>ghc5Stastics about what was loaded from external packages>ghcTRecords modules for which changes may force recompilation of this module See wiki: Ohttp://ghc.haskell.org/trac/ghc/wiki/Commentary/Compiler/RecompilationAvoidanceThis differs from Dependencies. A module X may be in the dep_mods of this module (via an import chain) but if we don't use anything from X it won't appear in our Usage>ghcModule from another package> ghcmModule from the current package | A file upon which the module depends, e.g. a CPP #include, or using TH's addDependentFile>"ghc-A requirement which was merged into this one.>#ghc#External package module depended on>$ghcCached module fingerprint>%ghc)Was this module imported as a safe import>&ghcName of the module>'ghcEntities we depend on, sorted by occurrence name and fingerprinted. NB: usages are for parent names only, e.g. type constructors but not the associated data constructors.>(ghctFingerprint for the export list of this module, if we directly imported it (and hence we depend on its export list)>)ghcZExternal file dependency. From a CPP #include or TH addDependentFile. Should be absolute.>*ghc# of the file contents.>+ghc^Dependency information about ALL modules and packages below this one in the import hierarchy.(Invariant: the dependencies of a module M never includes M.0Invariant: none of the lists contain duplicates.>-ghcAll home-package modules transitively below this one I.e. modules that this one imports, or that are in the dep_mods of those directly-imported modules>.ghcHAll packages transitively below this module I.e. packages to which this module's direct imports belong, or that are in the dep_pkgs of those modules The bool indicates if the package is required to be trusted when the module is imported as a safe import (Safe Haskell). See Note [RnNames . Tracking Trust Transitively]>/ghcETransitive closure of orphan modules (whether home or external pkg)._(Possible optimization: don't include family instance orphans as they are anyway included in >0z. But then be careful about code which relies on dep_orphs having the complete list!) This does NOT include us, unlike  imp_orphs.>0ghcyTransitive closure of depended upon modules which contain family instances (whether home or external). This is used by checkFamInstConsistency%. This does NOT include us, unlike  imp_finsts9. See Note [The type family instance consistency story].>1ghc1All the plugins used while compiling this module.>2ghc-Did this module originate from a *-boot file?Ughc)Does this module define family instances?>3ghc<Records whether a module has orphans. An "orphan" is one of:An instance declaration in a module other than the definition module for one of the type constructors or classes in the instance headeA transformation rule in a module other than the one defining the function in the head of the rule>4ghcFixity information for an P. We keep the OccName in the range so that we can generate an interface from it>6ghc2Fixity environment mapping names to their fixities>7ghc Warning information for a module>8ghcNothing deprecated>9ghcWhole module deprecated>:ghcSome specific things deprecated>;ghcNClass that abstracts out the common ability of the monads in GHC to lookup a m in the monadic environment by Y. Provides a number of related convenience functions for accessing particular kinds of m>@ghc A map from s to mEs, constructed by typechecking local declarations or interface files>BghcQBring the exports of a particular module (filtered by an import decl) into scope>CghcfBring into scope the entire top-level envt of of this module, including the things imported into it.>Dghc~Interactive context, recording information about the state of the context in which statements are executed in a GHCi session.>FghcThe A9 used to evaluate interative expressions and statements.>GghcEach GHCi stmt or declaration brings some new things into scope. We give them names like interactive:Ghci9.T, where the ic_index is the '9'. The ic_mod_index is incremented whenever we add something to ic_tythings See Note [The interactive package]>HghcHThe GHCi top-level scope (ic_rn_gbl_env) is extended with these importsThis field is only stored here so that the client can retrieve it with GHC.getContext. GHC itself doesn't use it, but does reset it to empty sometimes (such as before a GHC.load). The context is set with GHC.setContext.>IghcsTyThings defined by the user, in reverse order of definition (ie most recent at the front) See Note [ic_tythings]>Jghc The cached v , built by Hq and updated regularly It contains everything in scope at the command line, including everything in ic_tythings>Kghc9All instances and family instances created during this session. These are grabbed en masse after each update to be sure that proper overlapping is retained. That is, rather than re-check the overlapping each time we update the context, we just take the results from the instance code that already does that.>Lghc#Fixities declared in let statements>Mghc$The current default types, set by a  'default' declaration>Nghc The stack of breakpoint contexts>Oghc#The monad that GHCi is executing in>PghcSThe function that is used for printing results of expressions in ghci and -e mode.>RghcxAn entry to be inserted into a module's static pointer table. See Note [Grand plan for static forms] in StaticPtrTable.>TghcForeign export stubs>UghcWe don't have any stubs>Vghc!There are some stubs. Parameters:?1) Header file prototypes for "foreign exported" functions@2) C stubs to use when calling "foreign exported" functions>WghcA restricted form of >b for code generation purposes>YghcModule being compiled>ZghcAlgebraic data types (including ones that started life as classes); generate constructors and info tables. Includes newtypes, just for the benefit of External Core>[ghcThe tidied main bindings, including previously-implicit bindings for record and class selectors, and data constructor wrappers. But *not* data constructor workers; reason: we regard them as part of the code-gen of tycons>\ghcForeign export stubs>^ghc>Dependent packages, used to generate #includes for C code gen>_ghc%Program coverage tick box information>`ghcModule breakpoints>aghcStatic pointer table entries for static forms defined in the module. See Note [Grand plan for static forms] in StaticPtrTable>bghcA ModGuts is carried through the compiler, accumulating stuff as it goes There is only one ModGuts at any time, the one for the module being compiled right now. Once it is compiled, a > and >, are extracted and the ModGuts is discarded.>dghcModule being compiled>eghcWhether it's an hs-boot module>fghc$For error messages from inner passes>gghcWhat it exports>hghc*What it depends on, directly or otherwise>ighc$What was used? Used for interfaces.>jghcDid we run a TH splice?>kghcTop-level lexical environment>lghcEFixities declared in this module. Used for creating interface files.>mghc=TyCons declared in this module (includes TyCons for classes)>nghc'Class instances declared in this module>oghc(Family instances declared in this module>pghc(Pattern synonyms declared in this module>qghc\Before the core pipeline starts, contains See Note [Overall plumbing for rules] in Rules.hs>rghcBindings for this module>sghc'Foreign exports declared in this module>tghc(Files to be compiled with the C compiler>ughcWarnings declared in the module>vghc#Annotations declared in this module>wghcComplete Matches>xghc!Coverage tick boxes in the module>yghcBreakpoints for the module>zghc Class instance environment for  home-package% modules (including this one); c.f.  tcg_inst_env>{ghc&Type-family instance environment for  home-package% modules (including this one); c.f. tcg_fam_inst_env>|ghcSafe Haskell mode>}ghc^Do we need to trust our own package for Safe Haskell? See Note [RnNames . Trust Own Package]>~ghcModule header.>ghcDocs on declarations.>ghcDocs on arguments.>ghc$The name the module is imported with>ghc#the source span of the whole import>ghcwhether this is a safe import>ghc"whether this is an "hiding" import>ghc]all the things the module could provide NB. BangPattern here: otherwise this leaks. (#15111)>ghc"whether this is a qualified import>ghc^If a module was "imported" by the user, we associate it with more detailed usage information >H; a module imported by the system only gets used for usage information.>ghcRecords the modules directly imported by a module for extracting e.g. usage information, and also to give better error message>ghcThe >/ is essentially a cache for information in the >f for home modules only. Information relating to packages will be loaded into global environments in > .>ghcPLocal type environment for this particular module Includes Ids, TyCons, PatSyns>ghc"s for the instances in this module>ghcDomain may include s from other modules>ghceAnnotations present in this module: currently they only annotate things also declared in this module>ghc&Complete match pragmas for this module>ghcAThe original names declared of a certain module that are exported>ghcA > plus a >> summarises everything we know about a compiled module. The > is the stuff *before* linking, and can be written out to an interface file. The 'ModDetails is after linking and can be completely recovered from just the >.4When we read an interface file, we also construct a >. from it, except that we explicitly make the > and a few other fields empty; as when reading we consolidate the declarations etc. into a number of indexed maps and environments in the > .>ghcName of the module we are for>ghcAre we a sig of another mod?>ghcHash of the whole interface>ghcHash of the ABI only>ghcZHash of the important flags used when compiling the module, excluding optimisation flags>ghcHash of optimisation flags>ghcHash of hpc flags>ghcHash of plugins>ghcWhether this module has orphans>ghcaWhether this module has family instances. See Note [The type family instance consistency story].>ghcBoot? Signature?>ghczThe dependencies of the module. This is consulted for directly-imported modules, but not for anything else (hence lazy)>ghcUsages; kept sorted so that it's easy to decide whether to write a new iface file (changing usages doesn't affect the hash of this module) NOT STRICT! we read this field lazily from the interface file It is *only* consulted by the recompilation checker>ghcExports Kept sorted by (mod,occ), to make version comparisons easier Records the modules that are the declaration points for things exported by this module, and the s of those things>ghcHash of export list>ghccModule required TH splices when it was compiled. This disables recompilation avoidance (see #481).>ghcHFixities NOT STRICT! we read this field lazily from the interface file>ghcHWarnings NOT STRICT! we read this field lazily from the interface file>ghcKAnnotations NOT STRICT! we read this field lazily from the interface file>ghcType, class and variable declarations The hash of an Id changes if its fixity or deprecations change (as well as its type of course) Ditto data constructors, class operations, except that the hash of the parent class/tycon changes>ghc6Binds all the things defined at the top level in the original source code for this module. which is NOT the same as mi_exports, nor mi_decls (which may contains declarations for things not actually defined by the user). Used for GHCi and for inspecting the contents of modules via the GHC API only.(We need the source file to figure out the top-level environment, if we didn't compile this module from source then this field contains Nothing).1Strictly speaking this field should live in the >", but that leads to more plumbing.>ghcSorted class instance>ghcSorted family instances>ghc Sorted rules>ghc;Hash for orphan rules, class and family instances combined>ghcCached lookup for >>ghcCached lookup for >>ghcCached lookup for >. The Nothing in > means that the thing isn't in decls. It's useful to know that when seeing if we are up to date wrt. the old interface. The * is the parent of the name, if it has one.>ghc:True if this program uses Hpc at any point in the program.>ghc/Safe Haskell Trust information for this module.>ghcQDo we require the package this module resides in be trusted to trust this module? This is used for the situation where a module is Safe (so doesn't require the package be trusted itself) but imports some trustworthy modules from its own package (which does require its own package be trusted). See Note [RnNames . Trust Own Package]>ghcModule header.>ghcDocs on declarations.>ghcDocs on arguments.>ghc/The result of searching for an imported module.MNB: FindResult manages both user source-import lookups (which can result in  D) as well as direct imports for interfaces (which always result in  ).>ghcThe module was found>ghc#The requested package was not found>ghc"_Error_: both in multiple packages>ghc Not found>ghcThe > maps modules to the result of searching for that module. It records the results of searching for modules along the search path. On :load., we flush the entire contents of this cache.>ghc<data constructors not exported to ensure correct result type>ghc*The supported metaprogramming result types>ghc7Information about modules in the package being compiled>ghcsThe basic loaded interface file: every loaded module has one of these, even if it is imported from another package>ghc1Extra information that has been created from the >/ for the module, typically during typechecking>ghcKThe actual artifact we would like to link to access things in this module.> might be Nothing: If this is an .hs-boot modulecTemporarily during compilation if we pruned away the old linkable because it was out of date.After a complete compilation (I), all > fields in the > will be Just.When re-linking a module (J), we construct the > by building a new > from the old > (only).>ghc@Helps us find information about modules in the imported packages>ghc;Helps us find information about modules in the home package>ghc"A module name: search for the file>ghcA filename: preprocess & parse it to find the module name. If specified, the Phase indicates how to compile this file (which phase to start from). Nothing indicates the starting phase should be determined from the suffix of the filename.>ghcA compilation target.A target may be supplied with the actual text of the module. If so, use this instead of the file contents (this is for use in an IDE where the file hasn't been saved by the user yet).>ghcmodule or filename>ghcobject code allowed?>ghcuOptional in-memory buffer containing the source code GHC should use for this target instead of reading it from disk.vSince GHC version 8.10 modules which require preprocessors such as Literate Haskell or CPP to run are also supported.MIf a corresponding source file does not exist on disk this will result in a > exception if targetId = TargetModule _! is used. However together with targetId = TargetFile _/ GHC will not complain about the file missing.>ghcHscEnv is like Session, except that some of the fields are immutable. An HscEnv is used to compile a single module from plain Haskell source code (after preprocessing) to either C, assembly or C--. Things like the module graph don't change during a single compilation.(Historical note: "hsc" used to be the name of the compiler binary, when there was a separate driver and compiler. To compile a single module, the driver would invoke hsc on the source code... so nowadays we think of hsc as the layer of the compiler that deals with compiling a single module.>ghcThe dynamic flag settings>ghc-The targets (or roots) of the current session>ghc'The module graph of the current session>ghc1The context for evaluating interactive statements>ghcIThe home package table describes already-compiled home-package modules,  excluding# the module we are compiling right now. (In one-shot mode the current module is the only home-package module, so hsc_HPT is empty. All other modules count as "external-package" modules. However, even in GHCi mode, hi-boot interfaces are demand-loaded into the external-package table.)> is not mutable because we only demand-load external packages; the home package is eagerly loaded, module by module, by the compilation manager.0The HPT may contain modules compiled earlier by --makeE but not actually below the current module in the dependency graph.4(This changes a previous invariant: changed Jan 05.)>ghcInformation about the currently loaded external packages. This is mutable because packages will be demand-loaded during a compilation run as required.>ghcAs with >, this is side-effected by compiling to reflect sucking in interface files. They cache the state of external interface files, in effect.>ghc:The cached result of performing finding in the file system>ghc7Used for one-shot compilation only, to initialise the IfGblEnv. See -K for -L(. See also Note [hsc_type_env_var hack]>ghcBinteractive server process. Created the first time it is needed.>ghc?An error thrown if the GHC API is used in an incorrect fashion.>ghcXA source error is an error that is caused by one or more errors in the source code. A >l is thrown by many functions in the compilation pipeline. Inside GHC these errors are merely printed via  , but API clients may treat them differently, for example, insert them into a list box. If you want the default behaviour, use the idiom: RhandleSourceError printExceptionAndWarnings $ do ... api calls that may fail ...The >%s error messages can be accessed via ?8. This list may be empty if the compiler failed due to -Werror ( 5).See printExceptionAndWarningsS for more information on what to take care of when writing a custom error handler.>ghc$Status of a compilation to hard-code?ghcThrow some errors.?ghcPPerform the given action and call the exception handler if the action throws a >. See > for more information.? ghciGiven a bag of warnings, turn them into an exception if -Werror is enabled, or print them out otherwise.? ghc(Retrieve the ExternalPackageState cache.?ghc$Constructs an empty HomePackageTable?ghc%Constructs an empty PackageIfaceTable?ghc Find the > for a  L, searching in both the loaded home and external package module information?ghcFind all the instance declarations (of classes and families) from the Home Package Table filtered by the provided predicate function. Used in  tcRnImportsl, to select the instances that are in the transitive closure of imports from the currently compiled module.?ghcAGet rules from modules "below" this one (in the dependency sense)UghcGGet annotations from modules "below" this one (in the dependency sense)UghcYGet things from modules "below" this one (in the dependency sense) C.f Inst.hptInstances?%ghc`Deal with gathering annotations in from all possible places and combining them into a single 2?&ghcNOld-style accessor for whether or not the ModIface came from an hs-boot file.?'ghc-Lookups up a (possibly cached) fixity from a >. If one cannot be found,  is returned instead.?(ghcWThe semantic module for this interface; e.g., if it's a interface for a signature, if > is p[A= A]:A, ?( will be  A.?)ghc:The "precise" free holes, e.g., the signatures that this > depends on.?*ghcGiven a set of free holes, and a unit identifier, rename the free holes according to the instantiation of the unit identifier. For example, if we have A and B free, and our unit identity is p[A= C ,B=impl:B]%, the renamed free holes are just C.?+ghcConstructs an empty ModIface?,ghcConstructs cache for the > field of a >?-ghcConstructs an empty ModDetails?0ghc'Constructs an empty InteractiveContext.?2ghcRThis function returns the list of visible TyThings (useful for e.g. showBindings)?3ghcPGet the PrintUnqualified function based on the flags and this InteractiveContext?4ghcextendInteractiveContext is called with new TyThings recently defined to update the InteractiveContext to include them. Ids are easily removed when shadowed, but Classes and TyCons are not. Some work could be done to determine whether they are entirely shadowed, but as you could still have references to them (e.g. instances for classes or values of the type for TyCons), it's not clear whether removing them is even the appropriate behavior.?8ghcAdd TyThings to the GlobalRdrEnv, earlier ones in the list shadowing later ones, and shadowing existing entries in the GlobalRdrEnv.?:ghcrCreates some functions that work out the best ways to format names for the user according to a set of heuristics.?;ghcCreates a function for formatting modules based on two heuristics: (1) if the module is the current module, don't qualify, and (2) if there is only one exposed package which exports this module, don't qualify.?<ghcCreates a function for formatting packages based on two heuristics: (1) don't qualify if the package in question is "main", and (2) only qualify with a unit id if the package ID would be ambiguous.?=ghcaA function which only qualifies package names if necessary; but qualifies all other identifiers.?>ghcDetermine the m s brought into scope by another m other than itself. For example, Id's don't have any implicit TyThings as they just bring themselves into scope, but classes bring their dictionary datatype, type constructor and some selector functions into scope, just for a start!?AghcReturns True if there should be no interface-file declaration for this thing on its own: either it is built-in, or it is part of some other declaration, or it is generated implicitly by some other declaration.?Bghc6tyThingParent_maybe x returns (Just p) when pprTyThingInContext should print a declaration for p (albeit with some "..." in it) when asked to show x It returns the *immediate* parent. So a datacon returns its tycon but the tycon could be the associated type of a class, so it in turn might have a parent.?DghcnThe Names that a TyThing should bring into scope. Used to build the GlobalRdrEnv for the InteractiveContext.?Ughc Find the m for the given J by using all the resources at our disposal: the compiled modules in the >: and the compiled modules in other packages that live in >'. Note that this does NOT look up the mH in the module being compiled: you have to do that yourself, if desired?VghcAs ?U?, but with a marginally easier-to-use interface if you have a >?WghcGet the   from a m4 if it is a type constructor thing. Panics otherwise?XghcGet the g from a m2 if it is a coercion axiom thing. Panics otherwise?YghcGet the  from a m4 if it is a data constructor thing. Panics otherwise?ZghcGet the  from a m5 if it is a data constructor thing. Panics otherwise?[ghcGet the  from a m< if it is a id *or* data constructor thing. Panics otherwise?\ghcConstructs the cache for the > field of a >?_ghcCreates cached lookup for the > field of >?cghc&Add stats for one newly-read interface?hghcNDetermines whether a set of modules requires Template Haskell or Quasi QuotesNote that if the session's A enabled Template Haskell when depanal was called, then each module in the returned module graph will have Template Haskell enabled whether it is actually needed or not.?ighcMap a function f over all the  ModSummaries. To preserve invariants f can't change the isBoot status.?mghc'Look up a ModSummary in the ModuleGraph?pghcgAdd a ModSummary to ModuleGraph. Assumes that the new ModSummary is not an element of the ModuleGraph.?xghc Did this = originate from a hs-boot file??{ghcMFind out if HPC is used by this module or any of the modules it depends upon?ghc6Is this an actual file on disk we can link in somehow??ghc1Is this a bytecode linkable with no file on disk??ghcTRetrieve the filename of the linkable if possible. Panic if it is a byte-code object?ghcQRetrieve the compiled byte-code if possible. Panic if it is a file-based linkable?ghcexception handlerghcaction to perform43210/.m"""" ,,,,,,,,,,===================================>===========>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>> >!>">#>$>%>&>'>(>)>*>+>,>->.>/>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>V>U>W>X>Y>Z>[>\>]>^>_>`>a>b>c>v>h>d>e>f>g>i>j>k>l>m>n>o>p>q>r>s>t>u>w>x>y>z>{>|>}>~>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>?????????? ? ? ? ? ??????????????????? ?!?"?#?$?%?&?'?(?)?*?+?,?-?.?/?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?{?|?}?~??????????>>>>>>>>>>>>? >>>>>>>>>>>>>>>>>>>>>>>>>? ? >>>>>>>>>>>>>?n?q?p?i?k?l?m?h?j>>???>>>>>>>>>?->b>c>v>h>d>e>f>g>i>j>k>l>m>n>o>p>q>r>s>t>u>w>x>y>z>{>|>}>~>>>W>X>Y>Z>[>\>]>^>_>`>a>T>V>U?/>>>>?.>>>>>>>>>R>S43210/.==>===========>?t?r?s?y?x?u?v?w====?o >>>>>>???????????????> > >>>>>>>>>>>>>>>>>> > > ?c>>???+?>>>>?e?f?g>>>>>>>? ?!?"?#?$>?%>D>E>F>G>H>I>J>K>L>M>N>O>P>Q?0?3?2?8?4?5?9?7?1>A>B>C?6?:?<?;?=>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>?\?,?_?]?&?'?(?)?*>6>4>5?a?`m""""?D?W?Y?Z?[?X?B?C?>?@???A>@?U?V?M?E?O?N?Q?R?S?T?P?F?G?I?J?K?H?L>;>=><>>>?>3>2>>> >!>">#>$>%>&>'>(>)>*>+>,>->.>/>0>1?b?d>>7>8>9>:?^=====??=====,????======?z?{=,,,,,,,,,=?|?}?~??======>>??????? ? =====??-None%EMX$Ri?ghcwThe plugin found a contradiction. The returned constraints are removed from the inert set, and recorded as insoluble.?ghcThe first field is for constraints that were solved. These are removed from the inert set, and the evidence for them is recorded. The second field contains new work, that should be processed by the constraint solver.?ghc.Initialize plugin, when entering type-checker.?ghcDSolve some constraints. TODO: WRITE MORE DETAILS ON HOW THIS WORKS.?ghc9Clean up after the plugin, when exiting the type-checker.?ghcDFlag to see whether we're type-checking terms or kind-checking types?ghc The thing that has type "actual"?ghcIs at least one of the three elements above visible? (Errors from the polymorphic subsumption check are considered visible.) Only used for prioritizing error messages.?ghcSee Note [SubGoalDepth]?ghcWhether or not one @3~ can rewrite another is determined by its flavour and its equality relation. See also Note [Flavours with roles] in TcSMonad@ghcA place for type-checking evidence to go after it is generated. Wanted equalities are always HoleDest; other wanteds are always EvVarDest.@ghcgbind this var to the evidence EvVarDest is always used for non-type-equalities e.g. class constraints@ghcvfill in this hole with the evidence HoleDest is always used for type-equalities See Note [Coercion holes] in TyCoRep@*ghcAn expression or type hole@+ghcOEither an out-of-scope variable or a "true" hole in an expression (TypedHoles)@,ghc(A hole in a type (PartialTypeSignatures)@ighc@i} summarises what was imported from where, irrespective of whether the imported things are actually used or not. It is used: when processing the export list,4when constructing usage info for the interface file,to identify the list of directly imported modules for initialisation purposes and for optimised overlap checking of family instances,/when figuring out what things are really unused@kghc'Domain is all directly-imported modulesTSee the documentation on ImportedModsVal in HscTypes for the meaning of the fields.We need a full ModuleEnv rather than a ModuleNameEnv here, because we might be importing modules of the same name from different packages. (currently not the case, but might be in the future).@lghc8Home-package modules needed by the module being compiledBIt doesn't matter whether any of these dependencies are actually used when compiling the module; they are listed if they are below it at all. For example, suppose M imports A which imports X. Then compiling M might not need to consult X.hi, but X is still listed in M's dependencies.@mghcPackages needed by the module being compiled, whether directly, or via other modules in this package, or via modules imported from other packages.@nghc This is strictly a subset of imp_dep_pkgs and records the packages the current module needs to trust for Safe Haskell compilation to succeed. A package is required to be trusted if we are dependent on a trustworthy module in that package. While perhaps making imp_dep_pkgs a tuple of (UnitId, Bool) where True for the bool indicates the package is required to be trusted is the more logical design, doing so complicates a lot of code not concerned with Safe Haskell. See Note [RnNames . Tracking Trust Transitively]@oghcDo we require that our own package is trusted? This is to handle efficiently the case where a Safe module imports a Trustworthy module that resides in the same package as it. See Note [RnNames . Trust Own Package]@pghcYOrphan modules below us in the import tree (and maybe including us for imported modules)@qghcbFamily instance modules below us in the import tree (and maybe including us for imported modules)@tghc>IsGroupClosed describes a group of mutually-recursive bindings@vghc+IdBindingInfo describes how an Id is bound.It is used for the following purposes: a) for static forms in TcExpr.checkClosedInStaticForm and b) to figure out when a nested binding can be generalised, in TcBinds.decideGeneralisationPlan.@ghc?A typecheckable thing available in a local context. Could be @ m1, but also lexically scoped variables, etc. See TcEnv for how to retrieve a m given a .@ghcType alias for @; the convention is we'll use this for mutable bits of data in @@ which are updated during typechecking and returned at the end.@ghc@ describes the top-level of the module at the point at which the typechecker is finished work. It is this structure that is handed on to the desugarer For state that needs to be updated during the typechecking phase and returned at end, use a @ (= ).@ghcModule being compiled@ghcSIf a signature, the backing module See also Note [Identity versus semantic module]@ghc4What kind of module (regular Haskell, hs-boot, hsig)@ghc$Top level envt; used during renaming@ghcTypes used for defaulting. Nothing => no default decl@ghcJust for things in this module@ghcNJust for things in this module See Note [The interactive package] in HscTypes@ghcGlobal type env for the module we are compiling now. All TyCons and Classes (for this module) end up in here right away, along with their derived constructors, selectors.j(Ids defined in this module start in the local envt, though they move to the global envt during zonking)[NB: for what "things in this module" means, see Note [The interactive package] in HscTypes@ghcInstance envt for all  home-packageX modules; Includes the dfuns in tcg_insts NB. BangPattern is to fix a leak, see #15111@ghcHDitto for family instances NB. BangPattern is to fix a leak, see #15111@ghcAnd for annotations@ghcWhat is exported@ghcInformation about what was imported from where, including things bound in this module. Also store Safe Haskell info here about transitive trusted package requirements.EThere are not many uses of this field, so you can grep for all them.AThe ImportAvails records information about the following things: 6All of the modules you directly imported (tcRnImports)WThe orphans (only!) of all imported modules in a GHCi session (runTcInteractive)(The module that instantiated a signature%Each of the signatures that merged inDIt is used in the following ways: - imp_orphs is used to determine what orphan modules should be visible in the context (tcVisibleOrphanMods) - imp_finsts is used to determine what family instances should be visible (tcExtendLocalFamInstEnv) - To resolve the meaning of the export list of a module (tcRnExports) - imp_mods is used to compute usage info (mkIfaceTc, deSugar) - imp_trust_own_pkg is used for Safe Haskell in interfaces (mkIfaceTc, as well as in HscMain) - To create the Dependencies field in interface (mkDependencies)@ghc0What is defined in this module and what is used.@ghcRecords occurrences of imported entities One entry for each occurrence; but may have different GREs for the same Name See Note [Tracking unused binding and imports]@ghc.Locally-defined top-level names to keep alive."Keep alive" means give them an Exported flag, so that the simplifier does not discard them as dead code, and so that they are exposed in the interface file (but not to export to the user).Some things, like dict-fun Ids and default-method Ids are "born" with the Exported flag on, for exactly the above reason, but some we only discover as we go. Specifically:,The to/from functions for generic data typesDTop-level variables appearing free in the RHS of an orphan rule2Top-level variables appearing free in a TH bracket@ghcTrue  = Template Haskell syntax used.We need this so that we can generate a dependency on the Template Haskell package, because the desugarer is going to emit loads of references to TH symbols. The reference is implicit rather than explicit, so we have to zap a mutable variable.@ghcTrue  =$ A Template Haskell splice was used.2Splices disable recompilation avoidance (see #481)@ghcuLocations of the top-level splices; used for providing details on scope in error messages for out-of-scope variables@ghc&Allows us to choose unique DFun names.@ghcVThe requirements we merged with; we always have to recompile if any of these changed.@ghcRenamed decls, maybe. Nothing  = Don't retain renamed decls.@ghc"dependencies from addDependentFile@ghc'Top-level declarations from addTopDecls@ghcForeign files emitted from TH.@ghc>Exact names bound in top-level declarations in tcg_th_topdecls@ghc#Template Haskell module finalizers.+They can use particular local environments.@ghc,Core plugins added by Template Haskell code.@ghcTemplate Haskell state@ghcMaybe Haddock header docs@ghcTrueb if any part of the prog uses hpc instrumentation. NB. BangPattern is to fix a leak, see #15111@ghc5Whether this module has a corresponding hi-boot file@ghcCThe Name of the main function, if this module is the main module.@ghcHas the typechecker inferred this module as -XSafe (Safe Haskell) See Note [Safe Haskell Overlapping Instances Implementation], although this is used for more than just that failure case.@ghc9A list of user-defined plugins for the constraint solver.@ghc%The RealSrcSpan this module came from@ghcLWanted constraints of static forms. See Note [Constraints in static forms].@ghc,Tracking indices for cost centre annotations@ghc@\ describes the result of running the frontend of a Haskell module. Usually, you'll get a @, since running the frontend involves typechecking a program, but for an hs-boot merge you'll just get a ModIface, since no actual typechecking occurred.iThis data type really should be in HscTypes, but it needs to have a TcGblEnv which is only defined here.Aghc0Historical "type-checking monad" (now it's just A").Aghc+Historical "renaming monad" (now it's just A").A$ghcA A$ is a substitution on ^s that can be used to refine the identities of a hole while we are renaming interfaces (see  RnModIface). Specifically, a A$ for ns_module_name A, defines a mapping from {A.T} (for some  T) to some arbitrary other ."The most intruiging thing about a A$(, however, is how it's constructed. A A$ is *implied* by the exported CFs of the implementor of an interface: if an implementor of signature  H exports M.T-, you implicitly define a substitution from {H.T} to M.T. So a A$ is computed from the list of Cs that are exported by the implementation of a module, or successively merged together by the export lists of signatures which are joining together.PIt's not the most obvious way to go about doing this, but it does seem to work!gNB: Can't boot this and put it in NameShape because then we start pulling in too many DynFlags things.A6ghcUnion two ImportAvailsThis function is a key part of Import handling, basically for each import we create a separate ImportAvails structure and then union them all together with this function.A8ghc#No signature or a partial signatureAEghcIMakes a new equality predicate with the same role as the given evidence.AFghcGet the flavour of the given @3AGghc(Get the equality relation for the given @3AHghc@Returns free variables of constraints as a non-deterministic setAIghcoReturns free variables of constraints as a deterministically ordered. list. See Note [Deterministic FV] in FV.UghciReturns free variables of constraints as a composable FV computation. See Note [Deterministic FV] in FV.AJghcnReturns free variables of a bag of constraints as a non-deterministic set. See Note [Deterministic FV] in FV.AKghcvReturns free variables of a bag of constraints as a deterministically odered list. See Note [Deterministic FV] in FV.UghcrReturns free variables of a bag of constraints as a composable FV computation. See Note [Deterministic FV] in FV.ALghckReturns free variables of WantedConstraints as a non-deterministic set. See Note [Deterministic FV] in FV.AMghctReturns free variables of WantedConstraints as a deterministically ordered list. See Note [Deterministic FV] in FV.UghcoReturns free variables of WantedConstraints as a composable FV computation. See Note [Deterministic FV] in FV.UghciReturns free variables of Implication as a composable FV computation. See Note [Deterministic FV] in FV.A_ghcA constraint is considered to be a custom type error, if it contains custom type errors anywhere in it. See Note [Custom type errors in constraints]AcghcTrue if taking superclasses of givens, or of wanteds (to perhaps expose more equalities or functional dependencies) might help to solve this constraint. See Note [When superclasses help]AtghcChecks whether a the given wanted constraints are solved, i.e. that there are no simple constraints left and all the implications are solved.Aghc Create a new @K with as many sensible defaults for its fields as possible. Note that the @, @", and @ fields do notM have sensible defaults, so they are initialized with lazy thunks that will O if forced, so one should take care to initialize these fields after creation.&This is monadic purely to look up the A, which is used to initialize @ .AghcRetrieve the enclosed   from an @.AghcRetrieve the enclosed A from an @.AghcWraps the given type with the constraints (via ic_given) in the given implication, according to the variables mentioned (via ic_skols) in the implication, but taking care to only wrap those variables that are mentioned in the type or the implication.Aghc)Get the equality relation relevant for a @AghcGet the role relevant for a @Aghc-Extract the flavour, role, and boxity from a @Aghc$Extract the flavour and role from a @3Aghc+Take a CtLoc and moves it to the kind levelAghc)Extract a suitable CtOrigin from a HsExprAghc-Extract a suitable CtOrigin from a MatchGroupAghc-Extract a suitable CtOrigin from guarded RHSsUghc7Extract a suitable CtOrigin from a list of guarded RHSsUghcShort one-linersAghc;This function provides an escape for direct access to the A: monad. It should not be used lightly, and the provided ? API should be favoured instead.Aghc Access the 7 carried by the ?& during constraint solving. Returns R if invoked during ? or ?.143210/. @@@@@@@@@@@@@=====?????????????????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@ @ @ @ @@ @@@@@@@@@@@@@@!@%@@@@@ @"@#@$@&@'@(@)@*@+@,@-@.@/@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@p@q@l@k@m@n@o@r@s@t@u@v@w@x@y@z@{@|@}@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAA A A A A AAAAAAAAAAAAAAAAAAA A!A"A#A$A%A&A'A(A)A*A+A,A-A.A/A0A1A2A3A4A5A6A7A8A9A:A;A<A=A>A?A@AAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA[A\A]A^A_A`AaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzA{A|A}A~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1A#A"AAA!AA @AAAAAA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@AAAAA A A A A AAAAA)@@@@@i@j@p@q@l@k@m@n@oA5A6@e@f@g@hA3A4@@@@@@@@@@@@@@@z@{@|@}@~@@@@@@v@w@x@y@r@s@t@u@@@@@A1A2====A@@@@@@@AAAAAAAAA@@@@=??@@@@@@@@@@@@A+A,A-@A.A/A043210/.@@@@d@a@b@c@Y@Z@[@\@]@^@_@`@Q@R@S@T@U@V@W@X@H@I@J@K@L@M@N@O@PA7A8@-@.@/@0@1@2Ab@G@3@4@5@6@7@8@9@:@;@<@=@>@?@@@A@B@C@D@E@FAmAfAlAoAeAgAhAiAjAkAnAVAYAaAcAdAWAXAZASAUATA[A\A]A^A`A_A?A@AAACAFAGABADAEA:A;A>A<A=AAAAAAAAAHAJAIAK@&@'@(@)A~ApAsAtAuAvAqArAyAzAwAxALANAOAMAAAPA}AQ@@@@@!@%@@@@@ @"@#@$AAAA@@@@@@A|A{?AAAA??????AAAAAAAARAAAA????????????????????????????????????????????????AAAAAA???AAAAAA????????????????????AA@@@@ @ @ @ @@ @@@AAAAAAAAAAA*??????????AAA@@@@?@@A?AAAAAAAAAAA@@@*@+@,A9A$A%A&A'A(?AAAA None_$ِUghcSubtract two natural numbers.Ughc\Compute the exact logarithm of a natural number. The logarithm base is the second argument.UghcDivide two natural numbers.UghcgCompute the exact root of a natural number. The second argument specifies which root we are computing.UghcCompute the n-th root of a natural number, rounded down to the closest natural number. The boolean indicates if the result is exact (i.e., True means no rounding was done, False means rounded down). The second argument specifies which root we are computing. UghcCompute the logarithm of a number in the given base, rounded down to the closest integer. The boolean indicates if we the result is exact (i.e., True means no rounding happened, False means we rounded down). The logarithm base is the second argument. MNPQOAAAAAAAAAAAAAAAMNPQOAAAAAAAAAAANone%$^BBBBBBNone"#%=?X%W)BghcEnvironments which track  B ghc*Setup the initial typechecking environmentB!ghcRun a A& action in the context of an existing GblEnv.B7ghcDo it flag is trueB@ghcXUpdate the external package state. Returns the second result of the modifier function.eThis is an atomic operation and forces evaluation of the modified EPS in order to avoid space leaks.BAghc"Update the external package state.eThis is an atomic operation and forces evaluation of the modified EPS in order to avoid space leaks.BDghc"A convenient wrapper for taking a MaybeErr MsgDoc a. and throwing an exception if it is an error.Ughc3Trace when a certain flag is enabled. This is like BUJ but accepts a string as a label and formats the trace message uniformly.BUghcOutput a doc if the given @ is set.sBy default this logs to stdout However, if the `-ddump-to-file` flag is set, then this will dump output to a fileJust a wrapper for 'BVghcA wrapper around BX which uses PprDump style.BWghcA wrapper around BX which uses PprUser style.BXghc&Unconditionally dump some trace outputThe DumpFlag is used only to set the output filename for --dump-to-file, not to decide whether or not to output That part is done by the callerBZghc*Like logInfoTcRn, but for user consumptionBghcRAdd a fixed message to the error context. This message should not do any tidying.Bghc@Add a message to the error context. This message may do tidying.BghcAdd a fixed landmark message to the error context. A landmark message is always sure to be reported, even if there is a lot of context. It also doesn't count toward the maximum number of contexts reported.Bghc Variant of B1 that allows for monadic operations and tidying.Bghc_Drop elements of the input that fail, so the result list can be shorter than the argument listBghcApply the function to all elements on the input list If all succeed, return the list of results Othewise fail, propagating all errorsBghc2The accumulator is not updated if the action failsBghcFDisplay a warning if a condition is met, and the warning is enabledBghc(Display a warning if a condition is met.Bghc(Display a warning if a condition is met.Bghc(Display a warning if a condition is met.Bghc)Display a warning in the current context.Bghc%Display a warning in a given context.Bghc2Display a warning for the current source location.Bghc.Display a warning for a given source location.BghcKDisplay a warning, with an optional flag, for the current source location.Ughc?Display a warning, with an optional flag, for a given location.BghcCreates an EvBindsVar incapable of holding any bindings. It still tracks covar usages (see comments on ebv_tcvs in TcEvidence), thus must be made monadicallyBghc5Throw out any constraints emitted by the thing_insideBghcBThe name says it all. The returned TcLevel is the *inner* TcLevel.BghcWhen generating an out-of-scope error message for a variable matching a binding in a later inter-splice group, the typechecker uses the splice locations to provide details in the message about the scope of that binding.BghcjAdds the given modFinalizers to the global environment and set them to use the current local environment.BghcMark that safe inference has failed See Note [Safe Haskell Overlapping Instances Implementation] although this is used for more than just that failure case.Bghc.Figure out the final correct safe haskell modeBghc9Switch instances to safe instances if we're in Safe mode.BghcRun an A = (top-level interface monad) computation inside an existing A"; (typecheck-renaming monad) computation by initializing an A based on @.Bghc.Initialize interface typechecking, but with a A$' to apply when typechecking top-level s (see lookupIfaceTop)Bghc<Get the next cost centre index associated with a given name.<'&%43210/.~ @@@@@@@@@@@@@IJKLMNOPQRSTUVWXYZ[\]=====?????????????????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@ @ @ @ @@ @@@@@@@@@@@@@@!@%@@@@@ @"@#@$@&@'@(@)@*@+@,@-@.@/@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@p@q@l@k@m@n@o@r@s@t@u@v@w@x@y@z@{@|@}@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAA A A A A AAAAAAAAAAAAAAAAAAA A!A"A#A$A%A&A'A(A)A*A+A,A-A.A/A0A1A2A3A4A5A6A7A8A9A:A;A<A=A>A?A@AAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA[A\A]A^A_A`AaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzA{A|A}A~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBB B!B"B#B$B%B&B'B(B)B*B+B,B-B.B/B0B1B2B3B4B5B6B7B8B9B:B;B<B=B>B?B@BABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB[B\B]B^B_B`BaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzB{B|B}B~BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB B!B"B#B$B%B&B'B(B)B*B+B,B-B.B/B0B1B2B3B4B5B6B7B8B9B:B;B<B=B>B?B@BABBBCBEBFBGBHBJBKBIBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB[B\B]BB^B_B`BaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzB{B|B}B~BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBDBBBNoneP`%eBghc Create a new @9 @3.CghcBEmits a new Wanted. Deals with both equalities and non-equalities.CghcEmits a new equality constraintCghcWCreates a new EvVar and immediately emits it as a Wanted. No equality predicates here.CghcPut a value in a coercion holeCghcIs a coercion hole filled in?C ghcIRetrieve the contents of a coercion hole. Panics if the hole is unfilledC ghc9Retrieve the contents of a coercion hole, if it is filledC ghcCheck that a coercion is appropriate for filling a hole. (The hole itself is needed only for printing. Always returns the checked coercion, but this return value is necessary so that the input coercion is forced only when the output is forced.C ghcMake an 5X. suitable for inferring a type of kind * or #.CghcExtract a type out of an ExpType, if one exists. But one should always exist. Unless you're quite sure you know what you're doing.Cghc4Extract a type out of an ExpType. Otherwise, panics.Cghc0Returns the expected type when in checking mode.CghcNReturns the expected type when in checking mode. Panics if in inference mode.Cghc[Turn a (Infer hole) type into a (Check alpha), where alpha is a fresh unification variableCghcUExtracts the expected type if there is one, or generates a new TauTv if there isn't.CghcGiven a list of [], skolemize the type variables, returning a substitution mapping the original tyvars to the skolems, and the list of newly bound skolems.CghcGive fresh uniques to a bunch of TyVars, but they stay as TyVars, rather than becoming TcTyVars Used in FamInst.newFamInst, and Inst.newClsInstCghcCGive fresh uniques to a bunch of CoVars Used in FamInst.newFamInstC0ghcxCreate a tyvar that can be a lifted or unlifted type. Returns alpha :: TYPE kappa, where both alpha and kappa are freshC9ghc@Gathers free variables to use as quantification candidates (in C>A). This might output the same var in both sets, if it's used in both a type and a kind. The variables to quantify must have a TcLevel strictly greater than the ambient level. (See Wrinkle in Note [Naughty quantification candidates]) See Note [CandidatesQTvs determinism and order] See Note [Dependent type variables]C:ghcLike C9, but over a list of types The variables to quantify must have a TcLevel strictly greater than the ambient level. (See Wrinkle in Note [Naughty quantification candidates])C;ghcLike C9, but consider every free variable to be dependent. This is appropriate when generalizing a *kind*, instead of a type. (That way, -XNoPolyKinds will default the variables to Type.)CAghctcGetGlobalTyCoVars returns a fully-zonked set of *scoped* tyvars free in the environment. To improve subsequent calls to the same function it writes the zonked set back into the environment. Note that this returns all variables free in anything (term-level or type-level) in scope. We thus don't have to worry about clashes with things that are not in scope, because if they are reachable, then they'll be returned here. NB: This is closed over kinds, so it can return unification variables mentioned in the kinds of in-scope tyvars.UghcbA suitable TyCoMapper for zonking a type during type-checking, before all metavars are filled in.CPghcZonk: a coercion -- really, just zonk any types in the coercionC\ghc@According to the rules around representation polymorphism (see  1https://ghc.haskell.org/trac/ghc/wiki/NoSubKinds), no binder can have a representation-polymorphic type. This check ensures that we respect this rule. It is a bit regrettable that this error occurs in zonking, after which we should have reported all errors. But it's hard to see where else to do it, because this can be discovered only after all solving is done. And, perhaps most importantly, this isn't really a compositional property of a type system, so it's not a terrible surprise that the check has to go in an awkward spot.Cghc%How to instantiate the type variablesghcType to instantiateghc1Result (type vars, preds (incl equalities), rho)}5P5Q5X5Y5Z5^5_5`5c5h5jBBBBBBBBBBBBBBBBBCCCCCCCCCC C C C C CCCCCCCCCCCCCCCCCCC C!C"C#C$C%C&C'C(C)C*C+C,C-C.C/C0C1C2C3C4C5C6C7C8C9C:C;C<C=C>C?C@CACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC[C\C]C^C_}5_5h5`5c5^C,C-C.C0C/BBC7C$C"C!C%C)C*C#C&C'C(5X5Y5Z5Q5P5jCC C CCCCCCCBBCBBBBBCCCCCBBBCCCC C C C1C3C2C4C5CC+C C6CCCCCCCCCCVCWCXCZCYC[CSCECTCUCCCBCDC9C;C:C<BBBBBC=C8C?C@C>CQCRCOCGCPCFCHCICJCMCNCKCLCAC\C]C^C_None>HV%iCcCdCcCdNone%j-CoCpCpCoNone%lC{ghcGCalled from the typechecker (TcErrors) when we find an unbound variableUghcIGenerate helpful suggestions if a qualified name Mod.foo is not in scope. CqCrCsCtCuCvCwCxCyCzC{ CvCwC{CqCrCsCtCuCxCyCzNone$%~ C}ghcfOutput should be to a temporary file: we're going to run more compilation steps on this output later.C~ghcWe want a persistent file, i.e. a file in the current directory derived from the input filename, but with the appropriate extension. eg. in "ghc -c Foo.hs" the output goes into ./Foo.o.CghcThe output must go into the specific outputFile in DynFlags. We don't store the filename in the constructor as it changes when doing -dynamic-too.Cghconly the DynFlags change in the HscEnv. The DynFlags change at various points, for example when we read the OPTIONS_GHC pragmas in the Cpp phase.Cghckthe ModLocation. This is discovered during compilation, in the Hsc phase where we read the module header.Cghcadditional object files resulting from compiling foreign code. They come from two sources: foreign stubs, and add{C,Cxx,Objc,Objcxx}File from template haskellCghcStop just before this phaseCghc!basename of original input sourceCghc!basename of original input sourceCghc its extensionCghc%says where to put the pipeline outputC|C}C~CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC|C}C~CCCCCCNoneSX%CghcA function that atomically updates the name cache given a modifier function. The second result of the modifier function will be the result of the IO action.Cghc Look up the  for a given   and  . Consider alternatively using C if you're in the A monad and   is simply that of the > you are typechecking.CghcSet the   of a .Cghc6Look up a top-level name from the current Iface module)Z)\CCCCCCCCCCCCCCCCCCCCCCCCCCCCC)Z)\CCCCCCCCCCCCCCCCCNone%UghcSubstitution on {A.T}&. We enforce the invariant that the  of keys of this map have   hole (meaning that if we have a hole substitution, the keys of the map are never affected.) Alternatively, this is isomorphic to Map ( , ) .CghcCreate an empty A$i (i.e., the renaming that would occur with an implementing module with no exports) for a specific hole mod_name.Cghc Create a A$7 corresponding to an implementing module for the hole mod_name that exports a list of Cs.CghcGiven an existing A$, merge it with a list of Cs with Backpack style mix-in linking. This is used solely when merging signatures together: we successively merge the exports of each signature until we have the final, full exports of the merged signature.What makes this operation nontrivial is what we are supposed to do when we want to merge in an export for M.T when we already have an existing export {H.T}. What should happen in this case is that {H.T} should be unified with M.T@: we've determined a more *precise* identity for the export at  T.FNote that we don't do unrestricted unification: only name holes from ns_mod_name ns are flexible. This is because we have a much more restricted notion of shaping than in Backpack'14: we do shaping *as* we do type-checking. Thus, once we shape a signature, its exports are *final* and we're not allowed to refine them further,Cghc%The export list associated with this A$G (i.e., what the exports of an implementing module which induces this A$ would be.)CghcGiven a !, substitute it according to the A$! implied substitution, i.e. map {A.T} to M.T&, if the implementing module exports M.T.CghcLike C, but returns Nothing if no substitution works.UghcThe   of any s a A$ has action over.UghcSubstitute names in a .UghcSubstitute names in an C^. This has special behavior for type constructors, where it is sufficient to substitute the K to induce a substitution on L.UghcSet the   of a  FieldSelectorUghc Merges to C lists together, assuming the Cs have already been unified (U).UghcUnify two lists of C"s, given an existing substitution subst, with only name holes from flexi( unifiable (all other name holes rigid.)Ughc Unify two C"s, given an existing substitution subst, with only name holes from flexi( unifiable (all other name holes rigid.)Ughc Unify two "s, given an existing substitution subst, with only name holes from flexi( unifiable (all other name holes rigid.)Ughc Unify a name h which 4 with another name, given an existing substitution subst, with only name holes from flexi) unifiable (all other name holes rigid.) A$A%A&A'A(CCCCCC A$A%A&A'A(CCCCCCNone_%UghcEnvironment for U monads.Cghc[What we have is a generalized ModIface, which corresponds to a module that looks like p[A= AK]:B. We need a *specific* ModIface, e.g. p[A=q():A]:B (or maybe even p[A= BP]:B) which we load up (either to merge it, or to just use during typechecking).Suppose we have:p[A= A]:M ==> p[A=q():A]:MSubstitute all occurrences of  A with q():A (renameHoleModule). Then, for any Name of form {A.T}, replace the Name with the Name according to the exports of the implementing module. This works even for p[A= BR]:M, since we just read in the exports of B.hi, which is assumed to be ready now. This function takes an optional A$, which can be used to further refine the identities in this interface: suppose we read a declaration for {H.T} but we actually know that this should be Foo.T; then we'll also rename this (this is used when loading an interface to merge it into a requirement.)CghcRename just the exports of a >?. Useful when we're doing shaping prior to signature merging.UghcRun a computation in the U monad.UghcThe key function. This gets called on every Name embedded inside a ModIface. Our job is to take a Name from some generalized unit ID p[A= A, B= Ba], and change it to the correct name for a (partially) instantiated unit ID, e.g. p[A=q[]:A, B= B].%There are two important things to do:If a hole is substituted with a real module implementation, we need to look at that actual implementation to determine what the true identity of this name should be. We'll do this by loading that module's interface and looking at the mi_exports.However, there is one special exception: when we are loading the interface of a requirement. In this case, we may not have the "implementing" interface, because we are reading this interface precisely to "merge it in".External case: p[A= B]:A (and thisUnitId is something else) We are loading this in order to determine B.hi! So don't load B.hi to find the exports.Local case: p[A= A]:A (and thisUnitId is p[A= A}]) This should not happen, because the rename is not necessary in this case, but if it does we shouldn't load A.hi!Compare me with  tcIfaceGlobal!UghcRename an implicit name, e.g., a DFun or coercion axiom. Here is where we ensure that DFuns have the correct module as described in Note [rnIfaceNeverExported].Ughc Rename an -?, with special handling for an associated dictionary function.CCCCCCCCNoneSX% Cghc-A function called to log warnings and errors.CghcBA monad transformer to add GHC specific features to another monad.GNote that the wrapped monad must support IO and handling of exceptions.CghcThe Session is a handle to the complete state of a compilation session. A compilation session consists of a set of modules constituting the current program or library, the context for interactive evaluation, and various caches.CghcA minimal implementation of a Cj. If you need a custom monad, e.g., to maintain additional state consider wrapping this monad or using C.Cghc:A monad that has all the features needed by GHC API calls.In short, a GHC monadallows embedding of IO actions,can log warnings,/allows handling of (extensible) exceptions, andmaintains a current session.If you do not use C or C, make sure to call 5 before any call to the GHC API functions can occur.Cghc+Call the argument with the current session.Cghc#Grabs the DynFlags from the SessionCghcWSet the current session to the result of applying the current session to the argument.Cghc3Call an action with a temporarily modified Session.Cghc(A monad that allows logging of warnings.CghcReflect a computation in the C monad into the R monad.>You can use this to call functions returning an action in the C monad inside an Rb action. This is needed for some (too restrictive) callback arguments of some library functions: libFunc :: String -> (Int -> IO a) -> IO a ghcFunc :: Int -> Ghc a ghcFuncUsingLibFunc :: String -> Ghc a -> Ghc a ghcFuncUsingLibFunc str = reifyGhc $ \s -> libFunc $ \i -> do reflectGhc (ghcFunc i) sCghcpPrint the error message and all warnings. Useful inside exception handlers. Clears warnings after printing.CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNoneSX&ghcu is the compiler plugin data type. Try to avoid constructing one of these directly, and just modify some fields of D\ instead: this is to try and preserve source-code compatibility when we add fields to this.PNonetheless, this API is preliminary and highly likely to change in the future.ghc]A static plugin with its arguments. For registering compiled-in plugins through the GHC API.ghc>A plugin with its arguments. The result of loading the plugin.Cghc9the actual plugin together with its commandline argumentsCghc9the actual plugin together with its commandline argumentsCghc the module containing the pluginCghcthe actual callable pluginCghc%command line arguments for the pluginCghcModify the Core pipeline that will be used for compilation. This is called as the Core pipeline is built for every module being compiled, and plugins get the opportunity to modify the pipeline in a nondeterministic order.CghcYAn optional typechecker plugin, which may modify the behaviour of the constraint solver.Cghc3Specify how the plugin should affect recompilation.Cghc_Modify the module when it is parsed. This is called by HscMain when the parsing is successful.CghcBModify each group after it is renamed. This is called after each :" has been renamed.Cghc\Modify the module when it is type checked. This is called add the very end of typechecking.Cghc4Modify the TH splice or quasiqoute before it is run.DghcModify an interface that have been loaded. This is called by LoadIface when an interface is successfully loaded. Not applied to the loading of the plugin interface. Tools that rely on information from modules other than the currently compiled one should implement this function.Dghc`Command line options gathered from the -PModule.Name:stuff syntax are given to you as this typeDghcDefault plugin: does nothing at all! For compatibility reasons you should base all your plugin definitions on this default value.DghcSA renamer plugin which mades the renamed source available in a typechecker plugin.D ghc9Perform an operation by using all of the plugins in turn.D ghcAPerform a constant operation by using all of the plugins in turn.,CCCCCCCCDCCCCCCCCCCCCCCCCCCDDDDDDDDD D D D D ,CCCCCCCCDDDDDDCCCCCCD CCCDCCCCD DCCCDCCD D D  None&Em Dghc+Locate a module that was imported by the user. We have the module's name, and possibly a package name. Without a package name, this function will use the search path and the known exposed packages to find the module, if a package is specified then only that package is searched for the module.DghczLocate a plugin module requested by the user, for a compiler plugin. This consults the same set of exposed packages as D , unless -hide-all-plugin-packages or -plugin-package are specified.DghcLocate a specific  0. The purpose of this function is to create a   for a given  , that is to find out where the files associated with this module live. It is used when reading the interface for a module mentioned by another interface, for example (a "system import").UghcGiven a monadic actions this and or_this, first execute this. If the returned >/ is successful, return it; otherwise, execute or_this[. If both failed, this function also combines their failure messages in a reasonable way.UghcHelper function for D8: this function wraps an IO action which would look up mod_name@ in the file system (the home package), and first consults the > cache to see if the lookup has already been done. Otherwise, do the lookup (with the IO action) and save the result in the finder cache and the module location cache (if it was successful.)UghcImplements the search for a module name in the home package only. Calling this function directly is usually *not* what you want; currently, it's used as a building block for the following operations: When you do a normal package lookup, we first check if the module is available in the home module, before looking it up in the package database.dWhen you have a package qualified import with package name "this", we shortcut to the home module.When we look up an exact  i, if the unit id associated with the module is the current home module do a look up in the home module.PSome special-case code in GHCi (ToDo: Figure out why that needs to call this.)Ughc.Search for a module in external packages only.Ughc2Look up the interface file associated with module modB. This function requires a few invariants to be upheld: (1) the   in question must be the module identifier of the *original* implementation of a module, not a reexport (this invariant is upheld by  Packages.hs) and (2) the  S, must be consistent with the unit id in the  _. The redundancy is to avoid an extra lookup in the package state for the appropriate config.DghcDConstructs the filename of a .o file for a given source file. Does not! check whether the .o file existsDghcEConstructs the filename of a .hi file for a given source file. Does not" check whether the .hi file existsUghcFConstructs the filename of a .hie file for a given source file. Does not# check whether the .hie file exists>>>>>>>>>>>DDDDDDDDDDDDDDDD D!D"D>>>>>>>>>>>DDDDDDDDDDDDDDD D!D"!NoneF&JD#ghc Loads the plugins specified in the pluginModNames field of the dynamic flags. Should be called after command line arguments are parsed, but before actual compilation starts. Idempotent operation. Should be re-called if pluginModNames or pluginModNameOpts changes.D#D$D#D$"None%P&N5D%ghc~Extract information from the rename and typecheck phases to produce a dependencies information for the module being compiled.:The first argument is additional dependencies from pluginsD%D&D'D'D&D%gNone&lgkghckThe monad used by Core-to-Core passes to access common state, register simplification statistics and so onD9ghc'A description of the plugin pass itselfD<ghcJust n  =b float lambdas to top level, if doing so will abstract over n or fewer value variables Nothing  = float all lambdas to top level, regardless of how many free variables Just 0 is the vanilla case: float a lambda iff it has no free varsD=ghcTrue  =N float constants to top level, even if they do not escape a lambdaD>ghcTrue  = float out over-saturated applications based on arity information. See Note [Floating over-saturated applications] in SetLevelsD?ghc%Allow floating to the top level only.UghcLift an K operation into kDlghcLift an R operation into k while consuming its lDsghc4The original name cache is the current mapping from   and OccName to a compiler-wide unique NameDvghcGet all annotations of a given type. This happens lazily, that is no deserialization will take place until the [a] is actually demanded and the [a] can also be empty (the UniqFM is not filtered).TThis should be done once at the start of a Core-to-Core pass that uses annotations.See Note [Annotations]Dwghc6Get at most one annotation of a given type per Unique.Dxghc%Output a String message to the screenDyghcOutput a message to the screenDzghcBOutput an error to the screen. Does not cause the compiler to die.D{ghcBOutput an error to the screen. Does not cause the compiler to die.D}ghcGOutput a fatal error to the screen. Does not cause the compiler to die.D~ghcGOutput a fatal error to the screen. Does not cause the compiler to die.Dghc8Output a string debugging message at verbosity level of -v or higherDghc2Outputs a debugging message at verbosity level of -v or higherDghcShow some labelled 8 if a particular flag is set or at a verbosity level of -v -ddump-most or higherd~ *jD]D\DIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD[D^klD(D)D*D+D,D-D.D/D0D1D2D3D4D5D6D7D8D9D:D;D<D=D>D?D@DADBDCDDDEDFDGDHD_D`DaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzD{D|D}D~DDDdjD]D\DIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD[D^D`DaD@DADBDCDDDEDFDGDHD:D;D<D=D>D?D_D9DblDhDgDcDjDiDdDeDfD(D)D*D+D,D-D.D/D0D1D2D3D4D5D6D7D8kDkDmDn *DsDtDoDpDqDrDl~DuDvDwDyDxD{DzD|D~D}DDD#None&olDdDeDiDjDDDDDDDDDDDDDDDDDDlDDDDDdDjDiDe$None&q5Dghc!Top level driver for C-- pipelineDD%None%>HV&qDghcSource StatisticsDD&NoneSX&yiUghc The type constructor for queriesDghcShow a GHC syntax tree. This parameterised because it is also used for comparing ASTs in ppr roundtripping tests, where the SrcSpan's are blanked out, to avoid comparing locations, only structureUghc.Extend a generic query by a type-specific caseUghc/Type extension of queries for type constructorsUghc/Type extension of queries for type constructorsUghcFlexible type extensionUghcFlexible type extensionDDDDDDDD'None&yDDDDDDDDDD(None&qDghcuRename a module from one name to another. The identity renaming means that the module should be brought into scope.DghcAn include of another unitDghc Is this a dependency signature include? If so, we don't compile this include when we instantiate this unit (as there should not be any modules brought into scope.)DghcRA declaration in a package, e.g. a module or signature definition, or an include.Dghc Top level unit declaration in a Backpack file.#DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD#DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD)None %=?FHVh&<Ughc#Warn about missing space after bangUghcWConstruct an AddAnn from the annotation keyword and the location of the keyword itselfUghcConstruct an AddAnn from the annotation keyword and the Located Token. If the token has a unicode equivalent and this has been used, provide the unicode variant of the annotation.UghcIf the M is using its unicode variant return the unicode variant of the annotationUghc[Add an annotation to the located element, and return the located element as a pass throughUghcFAdd an annotation to a located element resulting from a monadic actionUghcTAdd a list of AddAnns to the given AST element. For example, the parsing rule for let looks like:  | 'let' binds 'in' exp {% ams (sLL $1 $> $ HsLet (snd $ unLoc $2) $4) (mj AnnLet $1:mj AnnIn $3 :(fst $ unLoc $2)) } #This adds an AnnLet annotation for let, an AnnIn for in, as well as any annotations that may arise in the binds. This will include open and closing braces if they are used to delimit the let expressions.Ughc4Add all [AddAnn] to an AST element wrapped in a JustUghciAdd a list of AddAnns to the given AST element, where the AST element is the result of a monadic actionUghcOAdd a list of AddAnns to the AST element, and return the element as a OrdListUghc4Synonyms for AddAnn versions of AnnOpen and AnnCloseVghc4Synonyms for AddAnn versions of AnnOpen and AnnCloseVghceGiven a list of the locations of commas, provide a [AddAnn] with an AnnComma entry for each SrcSpanVghc!Given a list of the locations of '|'>s, provide a [AddAnn] with an AnnVbar entry for each SrcSpanVghc?Get the location of the last element of a OrdList, or noSrcSpanVghcjAdd a semicolon annotation in the right place in a list. If the leading list is empty, add it to the tail DDDDDDDDDDDDD DDDDDDDDDDDDDV9 V9 *None%HV&mDghc#Parse the imports of a source file. Throws a > if parsing fails.Dghc6Parse OPTIONS and LANGUAGE pragmas of the source file. Throws a >5 if flag parsing fails (including unsupported flags.)Dghc6Parse OPTIONS and LANGUAGE pragmas of the source file. Throws a >5 if flag parsing fails (including unsupported flags.)Dghc4Complain about non-dynamic flags in OPTIONS pragmas. Throws a >K if the input list is non-empty claiming that the input flags are unknown.Dghc Parse this.ghcLFilename the buffer came from. Used for reporting parse error locations.ghcKThe original source filename (used for locations in the function result)ghc8The source imports, normal imports, and the module name.Dghc Input fileghcParsed options, if any.Dghc Input Bufferghc)Source filename. Used for location info.ghcParsed options.DDDDDDDDDDDDNone&UghcHooks can be used by GHC API clients to replace parts of the compiler pipeline. If a hook is not installed, GHC uses the default built-in behaviourDDDDDDDDDDDDDDDDDDDDDDDDDDDDNone"#X&Dghc3Run a command in the interpreter's context. With -fexternal-interpreterq, the command is serialized and sent to an external iserv process, and the response is deserialized (hence the Binary constraint). With -fno-external-interpreter' we execute the command directly here.DghcGrab a lock on the >S and do something with it. Overloaded because this is used from TcM as well as IO.DghcExecute an action of type IO [a] , returning s for each of the results.DghcExecute an action of type IO ()DghcExecute an action of type  IO StringDghcExecute an action of type String -> IO StringDghcgAllocate and store the given bytes in memory, returning a pointer to the memory in the remote process.Dghc4Create a set of BCOs that may be mutually recursive.E ghc8loadDLL loads a dynamic library using the OS's native linker (i.e. dlopen() on Unix, LoadLibrary() on Windows). It takes either an absolute pathname to the file, or a relative filename (e.g. "libfoo.so" or "foo.dll"). In the latter case, loadDLL searches the standard locations for the appropriate library.Returns:0Nothing => success Just err_msg => failureEghcSend a 0 and receive the response from the iserv processEghc#Read a value from the iserv processEghc!Send a value to the iserv processEghc Creates a V& that will automatically release the V! when it is no longer referenced.Eghc Convert a V to the value it references directly. This only works when the interpreter is running in the same process as the compiler, so it fails when -fexternal-interpreter is on.Eghc Convert an V to the value it references directly. This only works when the interpreter is running in the same process as the compiler, so it fails when -fexternal-interpreter is on.Y[~}|{zyxwvutsrqponmlkjihgfedcba`_^]\DDDDDDDDDDDDEEEEEEEEEE E E E E EEEEEEEEEEEEEEEYDDDDDDDDDDEEEEEEEEEE E E E EEEEED[~}|{zyxwvutsrqponmlkjihgfedcba`_^]\DEEEEE EEEEEE+None"#%HV\&ڗV ghc1Decide whether to add a tick to a binding or not.V ghc A let body is treated differently from addTickLHsExprEvalInner above with TickForBreakPoints, because for breakpoints we always want to tick the body, even if it is not a redex. See test break012. This gives the user the opportunity to inspect the values of the let-bound variables.V ghcTickishs that only make sense when their source code location refers to the current file. This might not always be true due to LINE pragmas in the code - which would confuse at least HPC.V ghc:Get the next HPC cost centre index for a given centre nameEEEE,None=?@AF&E%E&E'E(E)E*E+E,E%E&E'E(E)E*E,E+-NoneFX&۫E-E-.None%>HV_&E.ghc!Extract docs from renamer output.V ghcCreate decl and arg doc-maps by looping through the declarations. For each declaration, find its names, its subordinates, and its doc strings.VghcGet all subordinate declarations inside a declaration, and their docs. A subordinate declaration is something like the associate type or data family of a type class.Vghc@Extract constructor argument docs from inside constructor decls.Vghc|All the sub declarations of a class (that we handle), ordered by source location, with documentation attached if it exists.Vghc;Extract function argument docs from inside top-level decls.Vghc1Extract function argument docs from inside types.VghcThe top-level declarations of a module that we care about, ordered by source location, with documentation attached if it exists.VghcATake all declarations except pragmas, infix decls, rules from an :".VghcSort by source locationVghc7Collect docs and attach them to the right declarations.;A declaration may have multiple doc strings attached to it.This is an example.Vghc7Filter out declarations that we don't handle in HaddockVghcCGo through all class declarations and filter their sub-declarationsVghc%Was this signature given by the user?VghcbTake a field of declarations from a data structure and create HsDecls using the given constructorE.ghc  Module headerDocs on top level declarationsDocs on argumentsE.E./None'(E0ghcTRecover the type of a well-typed Core expression. Fails when applied to the actual '7 expression as it cannot really be said to have a typeE1ghc4Returns the type of the alternatives right hand sideE2ghc[Returns the type of the first alternative, which should be the same as for all alternativesE3ghcIs this expression levity polymorphic? This should be the same as saying (isKindLevPoly . typeKind . exprType) but much faster.E4ghcA more efficient version of 'b when we have several arguments. The first argument is just for debugging, and gives some contextE5ghcnWrap the given expression in the coercion safely, dropping identity coercions and coalescing nested coercionsE6ghcZWraps the given expression in the source annotation, dropping the annotation if possible.E:ghc<Strip ticks satisfying a predicate from top of an expressionE;ghcaStrip ticks satisfying a predicate from top of an expression, returning the remaining expressionE<ghcRStrip ticks satisfying a predicate from top of an expression, returning the ticksE=ghcsCompletely strip ticks satisfying a predicate from an expression. Note this is O(n) in the size of the expression!E?ghcbindNonRec x r b produces either: let x = r in bor: case r of x { _DEFAULT_ -> b }&depending on whether we have to use a case or let" binding for the expression (see E@). It's used by the desugarer to avoid building bindings that give Core Lint a heart attack, although actually the simplifier deals with them perfectly well. See also 1ME@ghcTests whether we have to use a case rather than let7 binding for this expression as per the invariants of ': see CoreSyn#let_app_invariantEAghcqThis guy constructs the value that the scrutinee must have given that you are in one particular branch of a caseEBghc$Extract the default case alternativeEEghcjFind the case alternative corresponding to a particular constructor: panics if no such constructor existsEFghcbMerge alternatives preserving order; alternatives in the first argument shadow ones in the secondEGghcGiven: )case (C a b x y) of C b x y -> ...nWe want to drop the leading type argument of the scrutinee leaving the arguments to match against the patternEIghc$Refine the default alternative to a 'zD, if there is a unique way to do so. See Note [Refine Default Alts]EVghcEV' returns True of an expression that is:[Safe to evaluate even if normal order eval might not evaluate the expression at all, orSafe not- to evaluate even if normal order would do soIt is usually called on arguments of unlifted type, but not always In particular, Simplify.rebuildCase calls it on lifted types when a 'case' is a plain RI. See the example in Note [exprOkForSpeculation: case expressions] belowPrecisely, it returns True iff: a) The expression guarantees to terminate, b) soon, c) without causing a write side effect (e.g. writing a mutable variable) d) without throwing a Haskell exception e) without risking an unchecked runtime exception (array out of bounds, divide by zero)For exprOkForSideEffects( the list is the same, but omitting (e).uNote that exprIsHNF implies exprOkForSpeculation exprOkForSpeculation implies exprOkForSideEffectsSee Note [PrimOp can_fail and has_side_effects] in PrimOp and Note [Transformations affected by can_fail and has_side_effects];As an example of the considerations in this test, consider: -let x = case y# +# 1# of { r# -> I# r# } in Ebeing translated to: 3case y# +# 1# of { r# -> let x = I# r# in E }We can only do this if the y + 1Y is ok for speculation: it has no side effects, and can't diverge or raise an exception.EWghcEV' returns True of an expression that is:[Safe to evaluate even if normal order eval might not evaluate the expression at all, orSafe not- to evaluate even if normal order would do soIt is usually called on arguments of unlifted type, but not always In particular, Simplify.rebuildCase calls it on lifted types when a 'case' is a plain RI. See the example in Note [exprOkForSpeculation: case expressions] belowPrecisely, it returns True iff: a) The expression guarantees to terminate, b) soon, c) without causing a write side effect (e.g. writing a mutable variable) d) without throwing a Haskell exception e) without risking an unchecked runtime exception (array out of bounds, divide by zero)For exprOkForSideEffects( the list is the same, but omitting (e).uNote that exprIsHNF implies exprOkForSpeculation exprOkForSpeculation implies exprOkForSideEffectsSee Note [PrimOp can_fail and has_side_effects] in PrimOp and Note [Transformations affected by can_fail and has_side_effects];As an example of the considerations in this test, consider: -let x = case y# +# 1# of { r# -> I# r# } in Ebeing translated to: 3case y# +# 1# of { r# -> let x = I# r# in E }We can only do this if the y + 1Y is ok for speculation: it has no side effects, and can't diverge or raise an exception.VghcFTrue of dyadic operators that can fail only if the second arg is zero!EYghc:exprIsHNF returns true for expressions that are certainly already evaluated to headA normal form. This is used to decide whether it's ok to change: case x of _ -> einto: e-and to decide whether it's safe to discard a R. So, it does notF treat variables as evaluated, unless they say they are. However, it does treat partial applications and constructor applications as values, even if their arguments are non-trivial, provided the argument type is lifted. For example, both of these are values: &(:) (f x) (map f xs) map (...redex...)because R& on such things completes immediately.3For unlifted argument types, we have to be careful: C (f x :: Int#)Suppose f x diverges; then C (f x)1 is not a value. However this can't happen: see CoreSyn#let_app_invariant`. This invariant states that arguments of unboxed type must be ok-for-speculation (or trivial).EZghc Similar to EY| but includes CONLIKE functions as well as data constructors. Conlike arguments are considered interesting by the inliner.VghcReturns true for values or value-like expressions. These are lambdas, constructors / CONLIKE functions (as determined by the function argument) or PAPs.E[ghcCan we bind this ' at the top level?E\ghcOCheck if the expression is zero or more Ticks wrapped around a literal string.E]ghcExtract a literal string from an expression that is zero or more Ticks wrapped around a literal string. Returns Nothing if the expression has a different shape. Used to "look through" Ticks in places that need to handle literal strings.E`ghc@A cheap equality test which bales out fast! If it returns TrueS the arguments are definitely equal, otherwise, they may or may not be equal. See also EbEaghc9Cheap expression equality test, can ignore ticks by type.EbghcReturns True3 of expressions that are too big to be compared by E`EdghcPFinds differences between core expressions, modulo alpha and renaming. Setting top means that the IdInfo6 of bindings will be checked for differences as well.Eeghc-Finds differences between core bindings, see diffExpr.The main problem here is that while we expect the binds to have the same order in both lists, this is not guaranteed. To do this properly we'd either have to do some sort of unification or check all possible mappings, which would be seriously expensive. So instead we simply match single bindings as far as we can. This leaves us just with mutually recursive and/or mismatching bindings, which we then speculatively match by ordering them. It's by no means perfect, but gets the job done well enough.VghcFind differences in IdInfoJ. We will especially check whether the unfoldings match, if present (see  diffUnfold).VghcPFind differences in unfoldings. Note that we will not check for differences of IdInfof in unfoldings, as this is generally redundant, and can lead to an exponential blow-up in complexity.Vghc)Add location information to diff messagesEgghcGThis function is called only on *top-level* right-hand sides. Returns TrueW if the RHS can be allocated statically in the output, with no thunks involved at all.EhghcTrue if the type has no non-bottom elements, e.g. when it is an empty datatype, or a GADT with non-satisfiable type parameters, e.g. Int :~: Bool. See Note [Bottoming expressions]GSee Note [No alternatives lint check] for another use of this function.Eighc-collectMakeStaticArgs (makeStatic t srcLoc e) yields Just (makeStatic, t, srcLoc, e).Returns Nothing for every other expression.EjghcJDoes this binding bind a join point (or a recursive group of join points)?EAghcCase alternative constructorghc!Things bound by the pattern matchghc*The type arguments to the case alternativeEHghcBType constructor of scrutinee's type (used to prune possibilities)ghcAnd its type argumentsghc imposs_consF: constructors known to be impossible due to the form of the scrutineeghc AlternativesEIghc$Uniques for constructing new bindersghc$Type constructor of scrutinee's typeghc"Type arguments of scrutinee's typeghc3Constructors that cannot match the DEFAULT (if any)ghcR', if a default alt was replaced with a 'z?'''E/E0E1E2E3E4E5E6E7E8E9E:E;E<E=E>E?E@EAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE[E\E]E^E_E`EaEbEcEdEeEfEgEhEiEj?E5E6E7E8E9E?E@EAEBECEEEDEFEGEHEJEIE0E1E2E3EOEKELENEMEQESERE/EYEVEWEPEbEZEgETEUE\E]E[EXE`EaEcEdEeEf''E4'E^E_EhE:E;E<E=E>EiEj0None'EkEk1None'*Epghc1Bind a binding group over an expression, using a let or case as appropriate (see CoreSyn#let_app_invariant)EqghcBind a list of binding groups over an expression. The leftmost binding group becomes the outermost group in the resulting expressionV ghcConstruct an expression which represents the application of one expression paired with its type to an argument. The result is paired with its type. This function is not exported and used in the definition of Er and Es. Respects the let/app invariant by building a case expression where necessary See CoreSyn Note [CoreSyn let/app invariant]ErghcConstruct an expression which represents the application of one expression to the other Respects the let/app invariant by building a case expression where necessary See CoreSyn Note [CoreSyn let/app invariant]EsghcConstruct an expression which represents the application of a number of expressions to another. The leftmost expression in the list is applied first Respects the let/app invariant by building a case expression where necessary See CoreSyn Note [CoreSyn let/app invariant]EtghcConstruct an expression which represents the application of a number of expressions to that of a data constructor expression. The leftmost expression in the list is applied firstEvghcMake a wildcard binder4. This is typically used when you need a binder that you expect to use only at a *binding* site. Do not use it at occurrence sites because it has a single, fixed unique, and it's very easy to get into difficulties with shadowing. That's why it is used so little. See Note [WildCard binders] in SimplEnvEzghcCreate a lambda where the given expression has a number of variables bound over it. The leftmost binder is that bound by the outermost lambda in the resultE{ghc Create a '" which will evaluate to the given IntE|ghc Create a '" which will evaluate to the given IntE}ghc Create a ' which will evaluate to the a Word with the given valueE~ghc Create a '" which will evaluate to the given WordEghc Create a '" which will evaluate to the given IntegerEghc Create a '" which will evaluate to the given NaturalEghc Create a '" which will evaluate to the given FloatEghc Create a '" which will evaluate to the given DoubleEghc Create a '" which will evaluate to the given CharEghc Create a '" which will evaluate to the given StringEghc Create a 'A which will evaluate to a string morally equivalent to the given  FastStringEghcoBuild a small tuple holding the specified variables One-tuples are flattened; see Note [Flattening one-tuples]Eghc~Build the type of a small tuple that holds the specified variables One-tuples are flattened; see Note [Flattening one-tuples]EghcqBuild a small tuple holding the specified expressions One-tuples are flattened; see Note [Flattening one-tuples]EghcBuild a small unboxed tuple holding the specified expressions, with the given types. The types must be the types of the expressions. Do not include the RuntimeRep specifiers; this function calculates them for you. Does not5 flatten one-tuples; see Note [Flattening one-tuples]Eghc%Make a core tuple of the given boxityEghcmBuild a big tuple holding the specified variables One-tuples are flattened; see Note [Flattening one-tuples]Eghc|Build the type of a big tuple that holds the specified variables One-tuples are flattened; see Note [Flattening one-tuples]EghcoBuild a big tuple holding the specified expressions One-tuples are flattened; see Note [Flattening one-tuples]EghcBuild the type of a big tuple that holds the specified type of thing One-tuples are flattened; see Note [Flattening one-tuples]EghcThe unit expressionEghcE is like EE but one-tuples are NOT flattened (see Note [Flattening one-tuples])Builds a selector which scrutises the given expression and extracts the one name from the list given. If you want the no-shadowing rule to apply, the caller is responsible for making sure that none of these names are in scope.If there is just one 7 in the tuple, then the selector is just the identity.0If necessary, we pattern match on a "big" tuple.EghcBuilds a selector which scrutises the given expression and extracts the one name from the list given. If you want the no-shadowing rule to apply, the caller is responsible for making sure that none of these names are in scope.If there is just one 7 in the tuple, then the selector is just the identity.0If necessary, we pattern match on a "big" tuple.EghcV! is like EE but one-tuples are NOT flattened (see Note [Flattening one-tuples])Like E7 but for tuples that are guaranteed never to be "big". pmkSmallTupleSelector [x] x v e = [| e |] mkSmallTupleSelector [x,y,z] x v e = [| case e of v { (x,y,z) -> x } |]V!ghcLike E7 but for tuples that are guaranteed never to be "big". pmkSmallTupleSelector [x] x v e = [| e |] mkSmallTupleSelector [x,y,z] x v e = [| case e of v { (x,y,z) -> x } |]EghcA generalization of E?, allowing the body of the case to be an arbitrary expression.;To avoid shadowing, we use uniques to invent new variables./If necessary we pattern match on a "big" tuple.EghcAs EM, but for a tuple that is small enough to be guaranteed not to need nesting.Eghc Makes a list [] for lists of the specified typeEghc Makes a list (:) for lists of the specified typeEghcOMake a list containing the given expressions, where the list has the given typeEghcMake a fully applied R expressionEghcMake a build6 expression applied to a locally-bound worker functionEghc&Makes a Nothing for the specified typeEghc/Makes a Just from a value of the specified typeEghcThe $s to pattern match the tuple againstghcThe  to selectghc,A variable of the same type as the scrutineeghc ScrutineeghcSelector expressionEghcThe $s to pattern match the tuple againstghcThe  to selectghc,A variable of the same type as the scrutineeghc ScrutineeghcSelector expressionEghc-For inventing names of intermediate variablesghc)The tuple identifiers to pattern match onghcBody of the caseghc,A variable of the same type as the scrutineeghc ScrutineeEghcThe tuple argsghcBody of the caseghc,A variable of the same type as the scrutineeghc ScrutineeEghcElement type of the listghcFold result typeghcCons! function expression for the foldghcNil expression for the foldghc#List expression being folded acressEghc!Type of list elements to be builtghc+Function that, given information about the Qs of the binders for the build worker function, returns the body of that worker@ElEmEnEoEpEqErEsEtEuEvEwExEyEzE{E|E}E~EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE@EpEqErEsEtEzEwExEvEuEoEyE}E~E{E|EEEEEEEEElEmEnEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEr4Es42None'EEEE3None'EghcA substitution result.HDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEHEEEEEEEEEEEEEEEEEEEEEEEEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE4None'=V"ghc7True if it's a bad idea to float bindings into this RHSEE5None'V#ghcState Monad used inside exitifyEghc8Traverses the AST, simply to find all joinrecs and call exitify8 on them. The really interesting function is exitifyRecV$ghcsGiven a recursive group of a joinrec, identifies exit paths  and binds them as join-points outside the joinrec.EE6None(8"Eghc$An environment for substituting for sEghc'A substitution environment, containing , , and  substitutions.6Some invariants apply to how you use the substitution: ,Note [The substitution invariant] in TyCoRep/Note [Substitutions apply only once] in TyCoRepFghcDFind the in-scope set: see TyCoRep Note [The substitution invariant]FghcRemove all substitutions for s and Bs that might have been built up while preserving the in-scope setFghcAdd a substitution for an  to the E: you must ensure that the in-scope set is such that TyCoRep Note [The substitution invariant] holds after extending the substitution like thisFghcAdds multiple  substitutions to the E : see also FFghcAdd a substitution for a  to the E The  *must* be a real TyVar, and not a CoVar You must ensure that the in-scope set is such that TyCoRep Note [The substitution invariant] holds after extending the substitution like this.FghcAdds multiple  substitutions to the E : see also FF ghcAdd a substitution from a  to a l to the E: you must ensure that the in-scope set satisfies TyCoRep Note [The substitution invariant] after extending the substitution like thisF ghcyAdd a substitution appropriate to the thing being substituted (whether an expression, type, or coercion). See also F, F, F F ghcAdd a substitution as appropriate to each of the terms being substituted (whether expressions, types, or coercions). See also F .F ghcFind the substitution for an  in the EFghcFind the substitution for a  in the EFghcSimultaneously substitute for a bunch of variables No left-right shadowing ie the substitution for (x y. e) a1 a2 so neither x nor y scope over a1 a2FghcAdd the J to the in-scope set, but do not remove any existing substitutions for itFghcAdd the U to the in-scope set: as a side effect, and remove any existing substitutions for itFghcAdd the  s to the in-scope set: see also FFghcOptimized version of FE that can be used if you are certain all the things being added are s and hence none are s or sFghc"Apply a substitution to an entire '1. Remember, you may only apply the substitution once6: see Note [Substitutions apply only once] in TyCoRepcDo *not* attempt to short-cut in the case of an empty substitution! See Note [Extending the Subst]Fghc"Apply a substitution to an entire '$, additionally returning an updated E2 that should be used by subsequent substitutions.Fghc"Apply a substitution to an entire '$, additionally returning an updated E2 that should be used by subsequent substitutions.FghcDe-shadowing the program is sometimes a useful pre-pass. It can be done simply by running over the bindings with an empty substitution, because substitution returns a result that has no-shadowing guaranteed.(Actually, within a single type* there might still be shadowing, because F'@ is a no-op for the empty substitution, but that's probably OK.) Aug 09wThis function is not used in GHC at the moment, but seems so short and simple that I'm going to leave it hereFghcSubstitutes a " for another one according to the E- given, returning the result and an updated E3 that should be used by subsequent substitutions. M is preserved by this process, although it is substituted into appropriately.FghcApplies F to a number of s, accumulating a new E left-to-rightFghc,Substitute in a mutually recursive group of sF ghcVery similar to F , but it always allocates a new pE for each variable in its output. It substitutes the IdInfo though.F!ghcApplies F  to a number of 8s, accumulating a final substitution from left to rightF$ghc$Clone a mutually recursive group of sF'ghcSee "rF)ghcSee "|F*ghcSubstitute into some ! with regard to the supplied new .F+ghcSubstitutes for the s within an unfoldingF,ghcSubstitutes for the s within an unfoldingF.ghcSubstitutes for the  s within the  WorkerInfo given the new function V%ghc"Substitution to use for the IdInfoghc Substitution and Id to transformghc-Transformed pair NB: unfolding may be zapped9>!"VEEEEFFFFFFFFFF F F F F FFFFFFFFFFFFFFFFFFF F!F"F#F$F%F&F'F(F)F*F+F,F-F.F/F0F19EE!E>FF.F/F'F)FFFFF,F+F FF-F1F0F*FFFFFEFF"VFF F F FFFFFFFF(FF FFFFFF%F&F#F"F F!F$7None(EV&ghcGiven a binding of in_id to in_rhs , and a fresh name to refer to in_id (out_id>, created from addBinder or addRecBinders), first try to CSE in_rhs>, and then add the resulting (possibly CSE'd) binding to the V'@, so that we attempt to CSE any expressions which are equal to out_rhs.V(ghcbGiven a binder `let x = e`, this function determines whether we should add `e -> x` to the cs_mapF4ghc Runs CSE on a single expression.{This entry point is not used in the compiler itself, but is provided as a convenient entry point for users of the GHC API.V)ghcAdd clones to the substitution to deal with shadowing. See Note [Shadowing] for more details. You should call this whenever you go under a binder.F3F4F3F48None(OF5ghc[manifestArity sees how many leading value lambdas there are, after looking through castsF7ghc!An approximate, fast, version of F:V*ghchThe Arity returned is the number of value args the expression can be applied to without doing much workF<ghc etaExpand n e1 returns an expression with the same meaning as e, but with arity n.Given: e' = etaExpand n eWe should have that: ty = exprType e = exprType e'F=ghc~Split an expression into the given number of binders and a body, eta-expanding if necessary. Counts value *and* type binders.F<ghc,Result should have this number of value argsghcExpression to expand F5F6F7F8F9F:F;F<F=F> F5F6F7F8F:F;F<F=F>F99None`(PFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFTFGFHFDFEFFFMFSFOFJFKFIFAFBFCFLFNFQFPFR:None%`(YiV+ghcNDecide whether some bindings should be made into join points or not. Returns R if they can't be join points. Note that it's an all-or-nothing decision, as if multiple binders are given, they're assumed to be mutually recursive.1It must, however, be a final decision. If we say True for f , and then subsequently decide not make f= into a join point, then the decision about another binding g might be invalidated if (say) f tail-calls g.0See Note [Invariants on join points] in CoreSyn.FYFZF[FYFZF[;None(YF_F_<None(ZFaFbFcFdFaFcFbFd=None(cFhghc+Returns Just (bndr,rhs) if the binding is a join point: If it's a JoinId, just return it If it's not yet a JoinId but is always tail-called, make it into a JoinId and return it. In the latter case, eta-expand the RHS if necessary, to make the lambdas explicit, as is required for join points]Precondition: the InBndr has been occurrence-analysed, so its OccInfo is validFjghcReturns Just (dc, [t1..tk], [x1..xn])R if the argument expression is a *saturated* constructor application of the form dc t1..tk x1 .. xn>, where t1..tk are the *universally-quantified* type args of dc FeFfFgFhFiFjFkFlFmFnFoFp FgFeFfFhFiFjFkFlFmFoFnFp>None(|Frghc Used to make '7 for an 1 defined in the module being compiled. See also '7FsghcIFind the "top" free names of several expressions. Such names are either: cThe function finally being applied to in an application chain (if that name is a GlobalId: see Var#globalvslocal), orThe TyCon if the expression is a ncThis is used for the fast-match-check for rules; if the top names don't match, the rest can'tV,ghcruleCantMatch tpl actual returns True only if actual definitely can't match tpl by instantiating tplV. It's only a one-way match; unlike instance matching we don't consider unification.Notice that [_$_] )ruleCantMatch [Nothing] [Just n2] = FalseR Reason: a template variable can be instantiated by a constant Also: )ruleCantMatch [Just n1] [Nothing] = False Reason: a local variable v in the actuals might [_$_]FughcMake a ( containing a number of '7!s, suitable for putting into an IdInfoFyghcMGather all the rules for locally bound identifiers from the supplied bindingsFghcThe main rule matching function. Attempts to apply all (active) supplied rules to this instance of an application in a given context, returning the rule applied and the resulting expression if successful.FghciReport partial matches for rules beginning with the specified string for the purposes of error reportingV-ghc0Target; can have more elements than the templateFghcRule activation testghc Rule patternghcRules for an IdghcBindings to check inghcResulting check messageFrFsFtFuFvFwFxFyFzF{F|F}F~FFFF{F|F}F~FFFuFvFwFxFyFzFtFFrFs?None(+ V.ghc0The size of a candidate expression for unfoldingV/ghc Size foundV0ghc2Arguments cased herein, and discount for each suchV1ghc?Size to subtract if result is scrutinised by a case expressionFghcMake an unfolding that may be used unsaturated (ug_unsat_ok = unSaturatedOk) and that is reported as having its manifest arity (the number of outer lambdas applications will resolve before doing any work).FghcXMake an unfolding that will be used once the RHS has been saturated to the given arity.V2ghc)Finds a nominal size of a string literal.V3ghcThe size of a function callV4ghc"The size of a jump to a join pointV3ghcnumber of value argsghc"number of value args that are voidV4ghcnumber of value argsghc"number of value args that are void"''#'FjFkFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"'#''FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFjFk@None"#%SXg(AV5ghc9Explicit "type-class"-like dictionary for numeric primopsHDepends on DynFlags because creating a literal value depends on DynFlagsV6ghcAdd two numbersV7ghcSub two numbersV8ghcMultiply two numbersV9ghcCreate a literal valueV:ghcMatch a subtractionV;ghc<Match a multiplication with a literal (handle commutativity)V<ghcMatch a multiplicationV=ghc7Match an addition with a literal (handle commutativity)V>ghcMatch an additionV?ghcMatch a literalV@ghcMatch a primopVAghc(Match the application of a binary primopVBghcCheck if there is comparison with minBound or maxBound, that is always true or false. For instance, an Int cannot be smaller than its minBound, so we can replace such comparison with False.VCghc]Create an Int literal expression while ensuring the given Integer is in the target Int rangeVDghcCreate an unboxed pair of an Int literal expression, ensuring the given Integer is in the target Int range and the corresponding overflow flag (0#/1#) if it wasn't.VEghc^Create a Word literal expression while ensuring the given Integer is in the target Word rangeVFghcCreate an unboxed pair of a Word literal expression, ensuring the given Integer is in the target Word range and the corresponding carry flag (0#/1#) if it wasn't.VGghc$Left identity rule for PrimOps like IntAddC and WordAddCX, where, in addition to the result, we have to indicate that no carry/overflow occured.VHghc%Right identity rule for PrimOps like IntSubC and WordSubCX, where, in addition to the result, we have to indicate that no carry/overflow occured.VIghcIdentity rule for PrimOps like IntAddC and WordAddCX, where, in addition to the result, we have to indicate that no carry/overflow occured.VJghc9Rules to perform constant folding into nested expressions6See Note [Constant folding through nested expressions]FghczMatch the scrutinee of a case and potentially return a new scrutinee and a function to apply to each literal alternative.FFFFFFANone(KFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFKFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFNone(-ghcData Constructor BoxerVKghc/Unpack/Strictness decisions from source module.~This function should only ever be invoked for data constructor fields, and never on the field of a newtype constructor. See Note [HsImplBangs for newtypes].VLghcWrappers+Workers and representation following UnpackStrictness decisions }FFFFFFFFFGGGGGGGGGG G G G G GGGGGFGFGFFFFGGG GGGG G }GG GG GBNoneP(VMghc@A mapping from binders to the Ids they were expanded/renamed to.x :-> MultiVal [a,b,c] in rhoiiff x's typePrimRep is not a singleton, or equivalently x's type is an unboxed tuple, sum or void.x :-> UnaryVal x'\iff x's RepType is UnaryRep or equivalently x's type is not unboxed tuple, sum or void.MSo x :-> MultiVal [a] in rho means x is represented by singleton tuple.*x :-> MultiVal [] in rho means x is void.mINVARIANT: OutStgArgs in the range only have NvUnaryTypes (i.e. no unboxed tuples, sums or voids)VNghc:Extend the environment, checking the UnariseEnv invariant.VOghcUMake alternatives that match on the tag of a sum (i.e. generate LitAlts for the tag)VPghc:Build a unboxed sum term from arguments of an alternative.Example, for ( x | ) :: ( ( ) | Int  ) we call mkUbxSum ( _ | ) [ ( ), Int ] [ voidPrimId ] which returns  1#, rubbish VQghc:MultiVal a function argument. Never returns an empty list.VRghcIMultiVal a DataCon argument. Returns an empty list when argument is void.GGCNone>HMV($VSghcOptional Stg-to-Stg passes.VTghc Common subexpression eliminationVUghcXLambda lifting closure variables, trading stack/register allocation for heap allocationVVghc@Mandatory unarise pass, desugaring unboxed tuple and sum bindersVWghcUseful for building up VXVXghc;Which Stg-to-Stg passes to run. Depends on flags, ways etc.GGNone(j"!!!!!!!GGGGGGG G!G"G#G$G%G&G'G(G)G*G+G,G-G.G/G0G1G2G3G4"GGGG!GG!G !G!!G"!G$G%!G#!G&G-G'G(G)G*G+G,G.G/G0G1G2G3G4DNone=?PX(.GSghc>One must contain the other. Leaf nodes cannot contain anythingGTghc/Insert an AST in a sorted list of disjoint AstsGUghcMerge two nodes together.,Precondition and postcondition: elements in !S are ordered.GVghcCMerge two sorted, disjoint lists of ASTs, combining when necessary.1In the absence of position-altering pragmas (ex: # line "file.hs" 3), different nodes in an AST tree should either have disjoint spans (in which case you can say for sure which one comes first) or one span should be completely contained in the other (in which case the contained span corresponds to some child node).>However, since Haskell does have position-altering pragmas it isT possible for spans to be overlapping. Here is an example of a source file in which foozball and quuuuuux have overlapping spans: ~module Baz where # line 3 "Baz.hs" foozball :: Int foozball = 0 # line 3 "Baz.hs" bar, quuuuuux :: Int bar = 1 quuuuuux = 2 8In these cases, we just do our best to produce sensible !U~'s. The blame should be laid at the feet of whoever wrote the line pragmas in the first place (usually the C preprocessor...).GZghc*combines and sorts ASTs using a merge sortG`ghchelps fill in !R (with VY)ghc)return an empty list if this is unhelpfulGaghchelps fill in !R (with VY)ghc)return an empty list if this is unhelpfulghctype to associate with the node-G5G6G9G8G7G:G;G<G=G>G?G@GAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG[G\G]G^G_G`Ga-G:G;G<G=G>G5G6G9G8G7G?G@GAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG[G\G]G^G_G`GaENone(\VZghcA VZk is a binding along with a cached set containing its free variables (both type variables and dictionaries)GbghcJSpecialise calls to type-class overloaded functions occuring in a program.V[ghc.Specialise a set of calls to imported bindingsV\ghc Construct a VZ from a 'V]ghc!Identify the free variables of a 'V^ghcFlatten a set of "dumped" VZBs, and some other binding pairs, into a single recursive binding.FGbGbFFNone(nV_ghcPush a TickIt context outwards past applications and cases, as long as this is a non-scoping tick, to let case and application optimisations apply.V`ghc.A "friendly name" to build the new binder fromghc/This expression satisfies the let/app invariantVaghc.a "friendly name" to build the new binder fromghc/This expression satisfies the let/app invariantGnGoGpGnGoGpGNone(GqghcThis list is used to ensure that when you say "Prelude.map" in your source code, or in an interface file, you get a Name with the correct known key (See Note [Known-key names] in PrelNames)Vbghc.Check the known-key names list of consistency.GrghcGiven a p lookup its associated ) if it corresponds to a known-key thing.GsghcIs a  known-key?GtghcGiven a pS lookup any associated arbitrary SDoc's to be displayed by GHCi's ':info' command.FFFFGqGrGsGtGuGvGwGxGyGzGsGrGtGqFFFFGvGuGwGxGyGzHNone(G{G|G}G{G|G}INone(VcghcGenerate Cmm code for a tick. Depending on the type of Tickish, this will either generate actual Cmm instrumentation code, or simply pass on the annotation as a  CmmTickish.G~G~None(6GGGGG6GGGJNone=?Fh(VdghcGiven an info table, decide what the entry convention for the proc is. That is, for an INFO_TABLE_RET we want the return convention, otherwise it is a NativeNodeCall.VeghcGenerate a source note spanning from "a" to "b" (inclusive), then proceed with parsing. This allows debugging tools to reason about locations in Cmm code.GGVf9 Vg9 KNone.(;GGLNoneXa)[GghcRead an interface fileGghcThis performs a get action after reading the dictionary and symbol table. It is necessary to run this before trying to deserialise any Names or FastStrings.GghcWrite an interface fileGghc(Put a piece of data with an initialised  + field. This is necessary if you want to serialise Names or FastStrings. It also writes a symbol table and the dictionary. This segment should be read using G.Vhghc:Initial ram buffer to allocate for writing interface files GGGGGGGGGGGG GGGGGGGGGGGGMNoneX)Gghc's get converted into G's before being written into .hie files. See G and Vi6 for logic on how to convert between these two types.Gghc1The header for HIE files - Capital ASCII letters HIE.GghcWrite a !m to the given R., with a proper header and symbol tables for s and sGghcRead a !m from a R. Can use an existing )UH. Allows you to specify which versions of hieFile to attempt to read. R* case returns the failing header versions.GghcRead a !m from a R. Can use an existing )U.GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGNNone1>)GghciLook for any identifiers which occur outside of their supposed scopes. Returns a list of error messages. GGGGGGGGGGGGG GGGGGGGGGGGGGONone"#)GghcProduce a fingerprint of a DynFlags> value. We only base the finger print on important fields in DynFlags= so that the recompilation checker can use this fingerprint.NB: The   parameter is the  3 recorded by the *interface* file, not the actual   according to our A.GGGGGGNone"#\)ACghc<Loads a system interface and throws an exception if it failsGghc'Load the interface corresponding to an importS directive in source code. On a failure, fail in the monad with an error message.GghcLike G, but returns a .Gghc.Load interface directly for a fully qualified  . (This is a fairly rare operation, but in particular it is used to load orphan modules in order to pull their instances into the global package table and to handle some operations in GHCi).Gghc,Load interfaces for a collection of modules.GghcLoads the interface for a given Name. Should only be called for an imported name; otherwise loadSysInterface may not find the interfaceGghc6Only loads the interface for external non-local names.Gghc'Loads the interface for a given Module.GghcAn A! function to load the home interface for a wired-in thing, so that we're sure that we see its instance declarations and rules See Note [Loading instances for wired-in things]GghcLoads a user interface and throws an exception if it fails. The first parameter indicates whether we should import the boot variant of the moduleVjghcA wrapper for G% that throws an exception if it failsVkghcReturns True if a > comes from an external package. In this case, we should NOT load it into the EPS; the entities should instead come from the local merged signature interface.VlghcThis is an improved version of G6 which can also handle the case when a user requests p[A= B]:M$ but we only have an interface for p[A= A]:M (the indefinite interface. If we are not trying to build code, we load the interface we have, *instantiating it* according to how the holes are specified. (Of course, if we're actually building code, this is a hard error.)In the presence of holes, Vl has an important invariant: to load module M, its set of transitively reachable requirements must have an up-to-date local hi file for that requirement. Note that if we are loading the interface of a requirement, this does not apply to the requirement itself; e.g., p[A= A]:A does not require A.hi to be up-to-date (and indeed, we MUST NOT attempt to read A.hi, unless we are actually typechecking p.)GghcTCompute the signatures which must be compiled in order to load the interface for a  6. The output of this function is always a subset of  +; it is more precise because in signature p[A= A,B= B]:BG, although the free holes are A and B, B might not depend on A at all!sIf this is invoked on a signature, this does NOT include the signature itself; e.g. precise free module holes of p[A= A,B= B]:B never includes B.Gghc'Read binary interface, and print it outCGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGCGGGGGGGGGGGGGNone =>?HV)H#HghcGet a <] that includes mappings for all vars free in the given type. Useful when tidying open types.HghcMake a name for the dict fun for an instance decl. It's an *external* name, like other top-level names, and hence must be made with newGlobalBinder.HghcSpecial case of H. to generate dict fun name for a single TyCon._m""""@@@@@@@@@A0BCAGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHH H H H H HHHHHHHHHHHHHHH_m""""@@@@@@@@@GGGGHHHHHGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHGGGGGGGGGHHHHHGBHGGH HCAH H A0H H HHHHHHHPNone%P)SpHghc!Replaces all bindings of the form 'b = /\ ... -> makeStatic location valuewith Ob = /\ ... -> StaticPtr key (StaticPtrInfo "pkg key" "module" location) value3where a distinct key is generated for each binding.UIt also yields the C stub that inserts these bindings into the static pointer table.H ghcsptModuleInitCode module fps. is a C stub to insert the static entries of module into the static pointer table.fpsZ is a list associating each binding corresponding to a static entry with its fingerprint.HH HH QNone%>HV)WHFghcwMake a map from selector names to field labels and parent tycon names, to be used when reporting unused record fields.Vmghc$Should we report the fact that this  is unused? The  may differ from | due to DuplicateRecordFields./H!H"H#H$H%H&H'H(H)H*H+H,H-H.H/H0H1H2H3H4H5H6H7H8H9H:H;H<H=H>H?H@HAHBHCHDHEHFHGHHHIHJHKHLHMHNHO/H;H=H<H>HIHLH?H@HAHDHEHBHCHFHHHJHKH!H"H#H$H%H&H'H(H)H*H+H,H-H.H/H0H1H2H3H4H5HOHNHMH6H7H8H9HGH:RNone%)b$HSghcHS returns (True, fixity) if it finds a K in a local environment or from an interface file. Otherwise, it returns (False, fixity) (e.g., for unbound s or .s without user-supplied fixity declarations).HUghc]Look up the fixity of a (possibly ambiguous) occurrence of a record field selector. We use Vn so that we can specifiy the 6 as the field label, which might be different to the  of the selector  if DuplicateRecordFieldsn is in use (Trac #1173). If there are multiple possible selectors with different fixities, generate an error.HPHQHRHSHTHUHPHQHRHSHUHTSNone$`)uHeghc Lookup an Exact RdrNameX. See Note [Looking up Exact RdrNames]. This adds an error if the name cannot be found.Voghc Lookup an Exact RdrNameY. See Note [Looking up Exact RdrNames]. This never adds an error, but it may return one.HighcLook up an occurrence of a field in record construction or pattern matching (but not update). When the -XDisambiguateRecordFields flag is on, take account of the data constructor name to disambiguate which field to use.$See Note [DisambiguateRecordFields].Hjghc,Used in export lists to lookup the children.Hkghc5Specialised version of msum for RnM ChildLookupResultHwghcLike Hr-, but with a more informative result if the x! happens to be a record selector:8Nothing -> name not in scope (no error reported)iJust (Left x) -> name uniquely refers to x, or there is a name clash (reported)Just (Right xs) -> name refers to one or more record selectors; if overload_ok was False, this list will be a singleton.H}ghc,Lookup a name in relation to the names in a HVH}ghc:description of thing we're looking up, like "type family"HghcThe standard nameghcPossibly a non-standard name.HVHZHWHXHYH[H\H]H`HaH^H_HbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzH{H|H}H~HHHHH.HbHdHcHlHoHrHmHvHnHpHqHuHtHsHwHeH]H`HaH^H_HjHkHVHZHWHXHYH[H\H~H|H}HfHiHgHhHxHHHHHzH{HyHTNone%HVX)VpghcA Vq+ list that contains no duplicate variables.VrghcA Vq2 list that is allowed to have duplicate variables.Vsghc9Name of an operator in an operator application or sectionVtghcA normal identifierVughcPrefix negationVvghcAn unbound indentifierVwghc.A (possibly ambiguous) record field occurrenceHghccAlways bind any free tyvars of the given type, regardless of whether we have a forall at the topHghc:Unless there's forall at the top, do the same thing as HHghcNever bind any free tyvarsHghcFinds free type and kind variables in a type, without duplicates, and without variables that are already in scope in LocalRdrEnv NB: this includes named wildcards, which look like perfectly ordinary type variables at this pointHghcFinds free type and kind variables in a type, with duplicates, but without variables that are already in scope in LocalRdrEnv NB: this includes named wildcards, which look like perfectly ordinary type variables at this pointVxghc8When the NamedWildCards extension is enabled, partition_nwcs removes type variables that start with an underscore from the FreeKiTyVars in the argument and returns them in a separate list. When the extension is disabled, the function returns the argument and empty list. See Note [Renaming named wild cards]Vyghc(In what contexts are wildcards permittedVzghc>Ensures either that we're in a type or that -XPolyKinds is setHghcSimply bring a bunch of RdrNames into scope. No checking for validity, at all. The binding location is taken from the location on each name.V{ghc=Look up the fixity for an operator name. Be careful to use HU; for (possibly ambiguous) record fields (see Trac #13132).V|ghcH5 finds the free (kind, type) variables of an ,+ or the free (sort, kind) variables of an ,K. It's used when making the foralls explicit. Does not return any wildcards. When the same name occurs multiple times in the types, only the first occurrence is returned. See Note [Kind and type-variable binders]HghcH4 find the free (kind, type) variables of an ,+ or the free (sort, kind) variables of an ,K. It's used when making the foralls explicit. Does not return any wildcards. When the same name occurs multiple times in the types, all occurrences are returned.HghcEExtracts the free kind variables (but not the type variables) of an ,. Does not return any wildcards. When the same name occurs multiple times in the type, only the first occurrence is returned, and the left-to-right order of variables is preserved. See Note [Kind and type-variable binders] and Note [Ordering of implicit variables].HghcExtracts free type and kind variables from types in a list. When the same name occurs multiple times in the types, only the first occurrence is returned and the rest is filtered out. See Note [Kind and type-variable binders]HghcExtracts free type and kind variables from types in a list. When the same name occurs multiple times in the types, all occurrences are returned.HghcRemoves multiple occurrences of the same name from FreeKiTyVars. If a variable occurs as both a kind and a type variable, only keep the occurrence as a kind variable. See also Note [Kind and type-variable binders]Vzghctype.HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH.HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHUNone $>HSVX\`)>HghcProcess Import Decls. See V} for a description of what the return types represent. Note: Do the non SOURCE ones first, so that we get a helpful warning for SOURCE ones that are unnecessaryV}ghc#Given a located import declaration decl from this_mod1, calculate the following pieces of information:  An updated , where all unresolved x2 in the entity lists have been resolved into s,A v representing the new identifiers that were brought into scope (taking into account module qualification and hiding),@iM summarizing the identifiers that were imported by this declaration, and A boolean =4 which is true if the imported module used HPC.HghcCalculate the @i> induced by an import of a particular interface, but without @k.V~ghc7Given an import/export spec, construct the appropriate ps.VghcIWarn the user about top level binders that lack type signatures. Called afterI type inference, so that we can report the inferred type of the functionHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHVNone $%>HSVX)YVghcGiven a resolved name in the children export list and a parent. Decide whether we are allowed to export the child with the parent. Invariant: gre_par == NoParent See note [Typing Pattern Synonym Exports]HghcR means no explicit export listghc-Imported modules; this is used to test if a  module Foo6 export is valid (it's not valid if we didn't import Foo!)Vghc5Alleged parent type constructor User wrote T( P, Q )ghcKEither a a) Pattern Synonym Constructor b) A pattern synonym selectorHHHHWNone\`)Hghc7everything is up to date, recompilation is not requiredHghc@The .hs file has been touched, or the .o/.hi file does not existHghcThe .o/.hi files are up to date, but something else has changed to force recompilation; the String says what (one-line summary)Hghcmake an interface from the results of typechecking only. Useful for non-optimising compilation, or where we aren't generating any object code at all ( ).Vghc1Add fingerprints for top-level declarations to a >.$See Note [Fingerprinting IfaceDecls]VghcRetrieve the orphan hashes >s for a list of modules (in particular, the orphan modules which are transitively imported by the current module).eQ: Why do we need the hash at all, doesn't the list of transitively imported orphan modules suffice?A: If one of our transitive imports adds a new orphan instance, our export hash must change so that modules which import us rebuild. If we just hashed the [Module], the hash would not change even when a new instance was added to a module that already had an orphan instance.iQ: Why don't we just hash the orphan hashes of our direct dependencies? Why the full transitive closure?!A: Suppose we have these modules:module A where instance Show (a -> b) where module B where import A -- ** module C where import A import B)Whether or not we add or remove the import to A in B affects the orphan hash of B. But it shouldn't really affect the orphan hash of C. If we hashed only direct dependencies, there would be no way to tell that the net effect was a wash, and we'd be forced to recompile C and everything else.VghcCreates cached lookup for the >\ field of ModIface Hackily, we use "module" as the OccName for any module-level annotationsHghcTop level function to check if the version of an old interface file is equivalent to the current source file the user asked us to compile. If the same, we can avoid recompilation. We return a tuple where the first element is a bool saying if we should recompile the object file and the second is maybe the interface file, where Nothng means to rebuild the interface file not use the exisitng one.Vghc$Check if a module is still the same version..This function is called in the recompilation checker after we have determined that the module M being checked hasn't had any changes to its source file since we last compiled M. So at this point in general two things may have changed that mean we should recompile M: * The interface export by a dependency of M has changed. * The compiler flags specified this time for M have changed in a manner that is significant for recompilation. We return not just if we should recompile the object file but also if we should rebuild the interface file.Vghc1Check if any plugins are requesting recompilationVghcWCheck if an hsig file needs recompilation because its implementing module has changed.Vghc Check if .hie file is out of date or missing.VghcCheck the flags haven't changedVghc,Check the optimisation flags haven't changedVghc#Check the HPC flags haven't changedVghcGiven the usage information extracted from the old M.hi file for the module being compiled, figure out whether M needs to be recompiled. HHHHHHHHHHHH HHHHHHHHHHHHXNone*HghcPretty-prints a 48 (type/data family instance) with its defining location.HghcPretty-prints a m with its defining location.HghcPretty-prints the mL header. For functions and data constructors the function is equivalent to HZ but for type constructors and classes it prints only the header part of the declaration.HghcPretty-prints a m in context: that is, if the entity is a data constructor, record selector, or class method, then the entity's parent declaration is pretty-printed with irrelevant parts omitted.HghcLike H!, but adds the defining location.HghcPretty-prints a m.HHHHHHHHHHHHHHYNone*FVghcCAF consistency issues will generally result in segfaults and are quite difficult to debug (see #16846). We enable checking of the V invariant with  -dstg-lint4 to increase the chance that we catch these issues.Vghc(Precondition: argument expression is an ', and there is a  at the head of the ' chain.HHZNone*HH[None*aVghcAllow  makeStatic to occur anywhere.VghcAllow  makeStatic calls at the top-level only.Vghc Reject any  makeStatic occurrence.VghcSee Note [Checking StaticPtrs]Vghc,See Note [Linting type synonym applications]Vghc1Checks the RHS of bindings. It only differs from V8 in that it doesn't reject occurrences of the function  makeStatic( when they appear at the top level and 'lf_check_static_ptrs == AllowAtTopLevelZ, and for join points, it skips the outer lambdas that take arguments to the join point.See Note [Checking StaticPtrs].HghcGThis checks whether a pass correctly looks through debug annotations ( SourceNote). This works a bit different from other consistency checks: We check this by running the given task twice, noting all differences between the results.VghcRun the given pass without annotations. This means that we both set the debugLevel setting to 0 in the environment as well as all annotations from incoming modules.Vghc>What sort of casted thing this is ("expression" or "type").ghc:What sort of coercion is being used ("type" or "kind").ghcThe thing being casted. HHHHHHHHHHH HHHHHHHHHHH\None&'*DyVghcType of functions that use error message and a list of axioms to build full error message (with a source location) for injective type families.HghcIf co :: T ts ~ rep_ty then: +instNewTyCon_maybe T ts = Just (rep_ty, co)nChecks for a newtype, and for being saturated Just like Coercion.instNewTyCon_maybe, but returns a TcCoercionIghcLike Il, but returns the arguments back if there is no data family to unwrap. Returns a Representational coercionIghcConverts a data family type (eg F [a]) to its representation type (eg FList a) and returns a coercion between the two: co :: F [a] ~R FList a.IghcIF gets rid of top-level newtypes, potentially looking through newtype  instances.It is only used by the type inference engine (specifically, when solving representational equality), and hence it is careful to unwrap only if the relevant data constructor is in scope. That's why it get a GlobalRdrEnv argument.It is careful not to unwrap data/newtype instances if it can't continue unwrapping. Such care is necessary for proper error messages.TIt does not look through type families. It does not normalise arguments to a tycon.If the result is Just (rep_ty, (co, gres), rep_ty), then co : ty ~R rep_ty gres are the GREs for the data constructors that had to be in scopeVghcCheck whether a new open type family equation can be added without violating injectivity annotation supplied by the user. Returns True when this is possible and False if adding this equation would violate injectivity annotation.IghcHBuild a list of injectivity errors together with their source locations.VghcReturn a list of type variables that the function is injective in and that do not appear on injective positions in the RHS of a family instance declaration. The returned Pair includes invisible vars followed by visible onesVghc,Is type headed by a type family application?Vghc`If a RHS is a bare type variable return a set of LHS patterns that are not bare type variables.Vghc?Build injecivity error herald common to all injectivity errors.VghcQBuild error message for a pair of equations violating an injectivity annotation.VghcRBuild error message for equation with injective type variables unused in the RHS.VghcUBuild error message for equation that has a type family call at the top level of RHSVghcwBuild error message for equation that has a bare type variable in the RHS but LHS pattern is not a bare type variable.Ighc(Type family for which we generate errorsghc1Currently checked equation (represented by axiom)ghcInjectivity annotationghcList of injectivity conflicts 4HHHIIIIIIII 4IHIIIHIHIII]None*E II I I I I IIIIII II I I I I IIIIII^None`*\ Vghc.This environment is used for three operations: fTo support cloning of local Ids so that they are all unique (see item (6) of CorePrep overview).VTo support beta-reduction of runRW, see Note [runRW magic] and Note [runRW arg].To let us inline trivial RHSs of non top-level let-bindings, see Note [lazyId magic], Note [Inlining in CorePrep] and Note #12076(CorePrep inlines trivial CoreExpr not IdVghc%See Note [Floating Ticks in CorePrep]Vghc Convert a ' so it satisfies VW, without producing any floats (any generated floats are immediately let-bound using V). Generally you want this, esp. when you've reached a binding form (e.g., a lambda) and floating any further would be incorrect.Vghc Convert a ' so it satisfies V; also produce a list of Vg which are being propagated upwards. In fact, this function is used in only two cases: to implement V~ (which is what you usually want), and in the case when a let-binding is in a case scrutinee--here, we can always float out:Acase (let x = y in z) of ... ==> let x = y in case z of ...VghcIs an argument okay to CPE?Vghc Helper for I, IVghc Helper for I, IZJust like we can't use Integer literals in `integer-*`, we can't use Natural literals in base;. If we do, we get interface loading error for GHC.Natural.Vghc+Like wrapFloats, but only wraps tick floatsVghcSCollect cost centres defined in the current module, including those in unfoldings.IIIIIIIIIIIIIIII_None%*]&I I!I I!`None%>HVX* VghccvtOpApp x op y converts op and y' and produces the operator application x op yG. The produced tree of infix expressions will be left-biased, provided x is.We can see that cvtOpApp9 is correct as follows. The inductive hypothesis is that cvtOpApp x op y is left-biased, provided x7 is. It is clear that this holds for both branches (of cvtOpApp:), provided we assume it holds for the recursive calls to cvtOpApp. When we call cvtOpApp from cvtlJ, the first argument will always be left-biased since we have already run cvtl on it.VghccvtOpAppP x op y converts op and y' and produces the operator application x op yD. The produced tree of infix patterns will be left-biased, provided x is.See the cvtOpApp+ documentation for how this function works.VghcBConstructs an application of a type to arguments passed in a list.Vghc5Constructs an arrow type with a specified return typeVghccvtOpAppT x op y converts op and y' and produces the operator application x op yB. The produced tree of infix types will be right-biased, provided y is.See the cvtOpApp+ documentation for how this function works.VghcConvert Maybe Kind to a type family result signature. Used with data families where naming of the result is not possible (thus only kind or no signature is possible).VghcTConvert type family result signature. Used with both open and closed type families.Vghc0Convert injectivity annotation of a type family.VghcIf passed an empty list of V/s, this simply returns the third argument (an ,L). Otherwise, return an , using the provided ,D and ,L.VghcIf passed an empty V., this simply returns the third argument (an ,L). Otherwise, return an , using the provided ,N and ,L.Vghc3The original Template Haskell type variable bindersghcThe location of the returned ,L" if it needs an explicit forallghc#The converted type variable bindersghcThe converted rho typeghc8The complete type, quantified with a forall if necessaryVghc%The original Template Haskell contextghcThe location of the returned ,L# if it needs an explicit contextghcThe converted contextghcThe converted tau typeghc8The complete type, qualified with a context if necessaryI%I&I'I(I)I&I'I%I(I)aNone*I-ghcAttempt to convert a Template Haskell name to one that GHC can understand. Original TH names such as those you get when you use the 'foo syntax will be translated to their equivalent GHC name exactly. Qualified or unqualified TH names will be dynamically bound to names in the module being compiled, if possible. Exact TH names will be bound to the name they represent, exactly.7CCCCCCCCDCC $(43210/.VVVVVVSRMQPONLKJIHGFEDCBA@?>=<;:98765~? : S @ ; + , - . / 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 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 { | } ~  @       !"#$%&'()*+,-./A 5 ]KJH 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 { | } ~  BCDEFGILMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~CCCCC   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~       xzy{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABcdefg!!hj!klm""""nopq(,(*("(#($(%(&('((()(+(-(.(((((((((((,-./0142356978:=;<>?@ABCDEFGHIMJKLNOPQRSTUWVXYZ[]\^_`abcdefghijklmnopqrstuwxyzv{|}~     nop                       O P Q R S T U V W X Y Z [                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4                           ! " # $ % & ' ) ( *0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOP      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefuwvxyz{|}~ #!"$&23456789:;<=>?@ABCjD]D\DIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD[D^kl[\]^_`acdebfghijklmnopqrstuvwxzy{|}~E !"#$%&'()*+,-./0123456789:;<=>?@ABCDEF  %%%%%%%YZ[\%<      !"#$%&'()*+,-./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 !!!!!!!!!!!"""" " " """""""""""""!"""#"$"%"&"'"*"."/"0"1"3"5"6"7"8"9">"@"A"B"C"D"E"F"G"J"K"L"M"O"P"R"S"T"U"V"W"Y"Z"["]"_"`"a"c"d"e"f"g"h"j"k"m"o"s"t"u"v"w"x"y"{"}"~"""""""""""""""""""""""""""""""""""""""""""""""########################################################################################################################$$$$$$$$$$ $ $ $ $ $$$$$$$$$$$$$$$$$$$ $!$"$#$$$%$&$'$($)$*$+$,$-$.$/$0$1$2$3$4$5$6$7$8$9$:$;$<$=$Z$[$\$]$^$_$`$a$d$b$c$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%[%\%]%^%_%`%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%{%|%}%~%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&& & & & & &&&&&&&&&&''''&&'''''' ' ' ' ' ''''''''''''''''''' '!'"'#'$'%'&'''(')'*'+','-'.'/'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'['Z'X'Y'\']'^'_'`'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'{'|'}'~'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''( ( ( ( ( (((((((( (!(/(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(Z([(\(](^(_(b(d(e(f(g(h(i(j(k(l(m(n(o(p(q(r(s(t(u(v(w(x(y(z({(|(}(~((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()))))))))) ) ) ) ) ))))))))))))))))))) )!)")#)$)%)&)')()))*)+),)-).)/)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,,,,,,,,,,444444444444444445555555555 5 5 5 5 55555555555555555===================================>===========>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>> >!>">#>$>%>&>'>(>)>*>+>,>->.>/>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>V>U>W>X>Y>Z>[>\>]>^>_>`>a>b>c>v>h>d>e>f>g>i>j>k>l>m>n>o>p>q>r>s>t>u>w>x>y>z>{>|>}>~>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>?????????? ? ? ? ? ??????????????????? ?!?"?#?$?%?&?'?(?)?*?+?,?-?.?/?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?{?|?}?~??????????CCCCCCCCCCCDDDDDDDDD D D D D D(D)D*D+D,D-D.D/D0D1D2D3D4D5D6D7D8D9D:D;D<D=D>D?D@DADBDCDDDEDFDGDHD_D`DaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzD{D|D}D~DDDE/E0E1E2E3E4E5E6E7E8E9E:E;E<E=E>E?E@EAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE[E\E]E^E_E`EaEbEcEdEeEfEgEhEiEjElEmEnEoEpEqErEsEtEuEvEwExEyEzE{E|E}E~EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFF F F F FFFFFFFFFFFFFFFFFFF F!F"F#F$F'F(F)F*F+F,F-F.F/F0F1FrFsFtFuFvFwFxFyFzF{F|F}F~FFFI-      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefuwvxyz{|}~(Z([(\(](^(_(b(d(e(f(g(h(i(j(k(l(m(n(o(p(q(r(s(t(u(v(w(x(y(z({(|(}(~((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((>!"VEEEEFFFFFFFFFF F F F FFFFFFFFFFFFFFFFFFF F!F"F#F$F'F(F)F*F+F,F-F.F/F0F1defhj!m""""nopqst= !!"""" " " """""""""""""!"$"%"*"."/"0"1"7"8">"@"B"C"D"E"F"G"J"L"M"O"P"R"S"T"U"V"W"Y"Z"["]"_"`"a"c"d"e"f"g"h"k"m"o"s"t"u"v"w"x"y"{"}""""""""""""""""""""""""""""""""""""""########################################################################################################################$$$$$$$$$$ $ $ $ $ $$$$$$$$$$$$$$$$$$$ $!$"$#$$$%$&$'$($)$*$+$,$-$.$/$0$1$2$3$4$5$6$7$8$9$:$;$<$=cg!!klYZ[\%<!!!!!!!!"""#"&"'"3"5"6"9"A"K"]"j"~"""""""""%;%=%>%?%@%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%{%|%}%~%%%%%%%%%%%%%%%%%%%%%%%%%%%%%,-./0142356978:=;<>?@ABCDEFGHIMJKLNOPQRSTUWVXYZ[]\^_`abcdefghijklmnopqrstuwxyzv{|}~     nopI-bNone*I/I0I/I0cNoneF*GI1I2I3I4I5I6I7I8I9I:I;I<I=I>I?I@IAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQIRISITIUIVIWIXIYIZI[I\I]I^I_I`IaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsItIuIvIwGI1I2I3I4I5I6I7I8I9I:I;I<I=I>I?I@IAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQIRISITIUIVIWIXIYIZI[I\I]I^I_I`IaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsItIuIvIw None"#F*<IzghcbFinds external references. Remember to remove the names defined by this group of BCOs themselvesXYZIzI{I|I}I{I|IzZXYI}dNone"#P\+ IghcGet the  associated with the given name.4May cause loading the module that contains the name. Throws a . if loading fails or the name cannot be found.Ighc$Temporarily extend the linker state.Ighc$Display the persistent linker state.Ighc,Initialise the dynamic linker. This entails*a) Calling the C initialisation procedure,6b) Loading any packages specified on the command line,Lc) Loading any packages specified on the command line, now held in the -l options in v_Opt_l,d) Loading any .o/.dll7 files specified on the command line, now held in ldInputs, e) Loading any MacOS frameworks.NOTE: This function is idempotent; if called more than once, it does nothing. This is useful in Template Haskell, where we call it before trying to link.VghcMerge runs of consecutive of V. This allows for resolution of cyclic symbol references when dynamically linking. Specifically, we link together all of the static objects into a single shared object, avoiding the issue we saw in #13786.IghcLink a single expression,  includingE first linking packages and modules that this expression depends on.Raises an IO exception (A) if it can't find a compiled version of the dependents to link.Vghc!Useful to apply to the result of VIghc8Unloading old objects ready for a new compilation sweep.The compilation manager provides us with a list of linkables that it considers "stable", i.e. won't be recompiled this time around. For each of the modules current linked in memory,zif the linkable is stable (and it's the same one -- the user may have recompiled the module on the side), we keep it,otherwise, we unload it.?we also implicitly unload all temporary bindings at this point.IghcLink exactly the specified packages, and their dependents (unless of course they are already linked). The dependents are linked automatically, and it doesn't matter what order you specify the input packages.VghcRetrieve the list of search directory GCC and the System use to find libraries and components. See Note [Fork/Exec Windows].VghcCache for the GCC search directories as this can't easily change during an invocation of GHC. (Maybe with some env. variable but we'll) deal with that highly unlikely scenario then.Vghc`Get a list of system search directories, this to alleviate pressure on the findSysDll function.VghcMerge the given list of paths with those in the environment variable given. If the variable does not exist then just return the identity.IghcThe linkables to *keep*. IIIIIIIIIIIII IIIIIIIIIIIIIeNone"#FM+"VghccMaps Ids to their stack depth. This allows us to avoid having to mess with it after each push/pop.VghcePush an atom for constructor (i.e., PACK instruction) onto the stack. This is slightly different to pushAtomE due to the fact that we allow packing constructor fields. See also  mkConAppCode and  pushPadding.Vghc/Indicate if the calling convention is supportedVghc]Let szsw be the sizes in bytes of some items pushed onto the stack, which has initial depth original_depthL. Return the values which the stack environment should map these items to.Vghc'original expression; for debugging only,II,IIfNone+(IghcMonadic because it makes a Name for the coercion TyCon We pass the Name of the parent TyCon, as well as the TyCon itself, because the latter is part of a knot, whereas the former is not.Ighc Make the  for this  Ighc Univ and reqghc Ex and provghcArgument typesghc Result typeghc,Field labels for a record pattern synonymIIIIIIIIIIIIIIIINone\+`VghcReturns true if an . is for data T (an abstract data type)Vghc Merge two .s together, preferring a non-abstract one. If both are non-abstract we pick one arbitrarily (and check for consistency later.)Vghc Merge two s of .s by .IghcOThis is a very interesting function. Like typecheckIface, we want to type check an interface file into a ModDetails. However, the use-case for these ModDetails is different: we want to compare all of the ModDetails to ensure they define compatible declarations, and then merge them together. So in particular, we have to take a different strategy for knot-tying: we first speculatively merge the declarations to get the "base" truth for what we believe the types will be (this is "type computation.") Then we read everything in relative to this truth and check for compatibility.During the merge process, we may need to nondeterministically pick a particular declaration to use, if multiple signatures define the declaration (V). If, for all choices, there are no type synonym cycles in the resulting merged graph, then we can show that our choice cannot matter. Consider the set of entities which the declarations depend on: by assumption of acyclicity, we can assume that these have already been shown to be equal to each other (otherwise merging will fail). Then it must be the case that all candidate declarations here are type-equal (the choice doesn't matter) or there is an inequality (in which case merging will fail.)YUnfortunately, the choice can matter if there is a cycle. Consider the following merge:{signature H where { type A = C; type B = A; data C } signature H where { type A = (); data B; type C = B } If we pick  type A = CU as our representative, there will be a cycle and merging will fail. But if we pick  type A = () as our representative, no cycle occurs, and we instead conclude that all of the types are unit. So it seems that we either (a) need a stronger acyclicity check which considers *all* possible choices from a merge, or (b) we must find a selection of declarations which is acyclic, and show that this is always the "best" choice we could have made (ezyang conjectures this is the case but does not have a proof). For now this is not implemented.mIt's worth noting that at the moment, a data constructor and a type synonym are never compatible. Consider:signature H where { type Int=C; type B = Int; data C = Int} signature H where { export Prelude.Int; data B; type C = B; }:This will be rejected, because the reexported Int in the second signature (a proper data type) is never considered equal to a type synonym. Perhaps this should be relaxed, where a type synonym in a signature is considered implemented by a data type declaration which matches the reference of the type synonym.IghcTypecheck a signature >[ under the assumption that we have instantiated it under some implementation (recorded in ?(?) and want to check if the implementation fills the signature.0This needs to operate slightly differently than I because (1) we have a A$r, from the exports of the implementing module, which we will use to give our top-level declarations the correct s even when the implementor provided them with a reexport, and (2) we have to deal with DFun silliness (see Note [rnIfaceNeverExported])CnghcTrue  =# discard IdInfo on IfaceId bindingsVghc,For associated type/data family declarationsghcTrue  =# discard IdInfo on IfaceId bindingsCiCjCkClCmCnGGGIIIIIIGGGIIIICnClCkCmCjCiIINone%=>?+IghcThe patterns for an equation NB: We have already applied decideBangHood3 to these patterns. See Note [decideBangHood] in DsUtilsIghc-Was this equation present in the user source?=This helps us avoid warnings on patterns that GHC elaborated.For instance, the pattern  -1 :: Word gets desugared into W -1 # :: Word9, but we shouldn't warn about an overflowed literal for both of these cases.IghcWhat to do after matchIghcRun a A action inside the A monad.IghcRun a A action inside the R monad.Vghc5Build a set of desugarer environments derived from a @.IghcRun a A& action in the context of an existing >bIghc(Get in-scope type constraints (pm check)Ighc(Add in-scope type constraints (pm check)Ighc(Get in-scope term constraints (pm check)Ighc(Add in-scope term constraints (pm check)IghcxIncrease the counter for elapsed pattern match check iterations. If the current counter is already over the limit, failIghc<Reset the counter for pattern match check iterations to zeroIghcUEmit a warning for the current source location NB: Warns whether or not -Wxyz is setIghcDEmit a warning only if the correct WarnReason is set in the DynFlagsIghc\Issue an error, but return the expression for (), so that we can continue reporting errors.IghcThe COMPLETE* pragmas provided by the user for a given  .Ighc=Fail with an error message if the type is levity polymorphic.IghcRCheck an expression for levity polymorphism, failing if it is levity polymorphic.IghcRuns the thing_inside. If there are no errors, then returns the expr given. Otherwise, returns unitExpr. This is useful for doing a bunch of levity polymorphism checks and then avoiding making a core App. (If we make a core App on a levity polymorphic argument, detecting how to handle the let/app invariant might call isUnliftedType, which panics on a levity polymorphic type.) See #12709 for an example of why this machinery is necessary.IghcInject a trace message into the compiled program. Whereas pprTrace prints out information *while compiling*, pprRuntimeTrace captures that information and causes it to be printed *at runtime* using Debug.Trace.trace.pprRuntimeTrace hdr doc expr*will produce an expression that looks liketrace (hdr + doc) expr\When using this to debug a module that Debug.Trace depends on, it is necessary to import {- SOURCE -} Debug.Trace () in that module. We could avoid this inconvenience by wiring in Debug.Trace.trace, but that doesn't seem worth the effort and maintenance cost.Ighcheaderghcinformation to outputghc expressionT'&%@@@@AB/B5B6B8BGBHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIITAIIIIIB8B5B6B/'&%IIIIIIIIIIIBGBHIIIIIII@@@@IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIiNone%>HPV+IghcTSee Note [The ZonkEnv] Confused by zonking? See Note [What is zonking?] in TcMType.Vghc!Extend the knot-tied environment.'&,q;; definitely unsatisfiable Just tms => I have added the complex equality and added it to the tmstate; the result may or may not be satisfiableVghcEExtend the substitution and solve the (possibly updated) constraints.J!ghcWhen we know that a variable is fresh, we do not actually have to check whether anything changes, we know that nothing does. Hence, J!/ simply extends the substitution, unlike what V does.VghcSimplify a complex equality.VghctSimplify an expression. The boolean indicates if there has been any simplification or if the operation was a no-op.Vghc@Simplify an equality expression. The equality is given in parts.Vghc:Apply an (un-flattened) substitution to a simple equality.Vghc3Apply an (un-flattened) substitution to a variable.J"ghc6Apply an (un-flattened) substitution to an expression.J#ghc&External interface to the term oracle.J$ghcType of a PmLit====================JJJJJJ J!J"J#J$===========J========J#JJJ J!J=J"J$JkNone %>HSVX+HLJ%J'J&J(J)J*J+J,J-J.J/J0J1J2J3J4J5J6J7J8J0J/J2J3J)J1J.J,J-J4J%J'J&J(J5J*J+J6J7HLJ8lNoneHVX+HPHVHZHWHXHYH[H\J<J=J>J?J@JAJBJCJDJEJFJGJHJ<J=J@J>J?JAJCJDJEJFJGJHJBHPHVHZHWHXHYH[H\mNone %>HVX+` Vghc0'InstDeclFreeVarsMap is an association of an InstDecl with FreeVars. The FreeVarsr are the tycon names that are both a) free in the instance declaration b) bound by this group of typeclassinstance declsVghcNTracks whether we are renaming an equation in a closed type family equation (V ) or not (V).JIghc rnSourceDecl "renames" declarations. It simultaneously performs dependency analysis and precedence parsing. It also does the following error checks:Checks that tyvars are used properly. This includes checking for undefined tyvars, and tyvars in contexts that are ambiguous. (Some of this checking has now been moved to module  TcMonoTypeI, since we don't have functional dependency information at this point.)1Checks that all variable occurrences are defined. Checks the (..)$ etc constraints in the export list.wBrings the binders of the group into scope in the appropriate places; does NOT assume that anything is in scope alreadyVghcFor Windows DLLs we need to know what packages imported symbols are from to generate correct calls. Imported symbols are tagged with the current package, so if they get inlined across a package boundary we'll still know where they're from.Vghc8Warn about non-canonical typeclass instance declarationsA "non-canonical" instance definition can occur for instances of a class which redundantly defines an operation its superclass provides as well (c.f. RR/). In such cases, a canonical instance is one where the subclass inherits its method implementation from its superclass instance (usually the subclass has a default method implementation to that effect). Consequently, a non-canonical instance occurs when this is not the case.See also descriptions of checkCanonicalMonadInstances and checkCanonicalMonoidInstancesVghcRenames role annotations, returning them as the values in a NameEnv and checks for duplicate role annotations. It is quite convenient to do both of these in the same place. See also Note [Role annotations in the renamer]Vghc Construct an InstDeclFreeVarsMap by eliminating any Names from the FreeVars" which are *not* the binders of a TyClDecl.VghcGet the  LInstDecls which have empty FreeVars sets, and the InstDeclFreeVarsMapj with these entries removed. We call (getInsts tcs instd_map) when we've completed the declarations for tcs. The call returns (inst_decls, instd_map'), where inst_decls are the instance declarations all of whose free vars are now defined instd_map' is the inst-decl map with tcs- removed from the free-var setVghc Errors if a via. type binds any floating type variables. See Note [Floating via type variables]VghcRename injectivity annotation. Note that injectivity annotation is just the part after the "|". Everything that appears before it is renamed in rnFamDecl.VghciBrings pattern synonym names and also pattern synonym selectors from record pattern synonyms into scope.Vghc The bound type variables from a via type.ghc+The source span (for error reporting only).ghcThe pretty-printed via! type (for error reporting only).ghcA description of what the via0 type scopes over (for error reporting only).ghcThe thing the via type scopes over.Vghc.Type variables declared in type family headghcResult signatureghcInjectivity annotationJIJJJKJIJJJKNone%HV+rCgghc/Rename a splice pattern. See Note [rnSplicePat]JLghcThe splice data to be loggedVghc]Returns the result of running a splice and the modFinalizers collected during the execution.5See Note [Delaying modFinalizers in untyped splices].JTghcqoutputs splice information for 2 flags which have different output formats: `-ddump-splices` and `-dth-dec-file`CeCfCgChJLJMJNJPJOJQJRJSJTJUCeChJSCgCfJRJUJTJLJMJNJPJOJQNone %HVX`,BghcRename some StmtsVghcHA tree of statements using a mixture of applicative and bind constructs.VghcThe s of return and pure. These may not be  returnName and pureName due to RebindableSyntax.Vghclike B8 but applies a post-processing step to the renamed StmtsVghcHmaybe rearrange statements according to the ApplicativeDo transformationVghc.strip the FreeVars annotations from statementsVghcIs this a context where we respect RebindableSyntax? but ListComp are never rebindable Neither is ArrowExpr, which has its own desugarer in DsArrowsVghcSrearrange a list of statements using ApplicativeDoStmt. See Note [ApplicativeDo].VghcRTurn a sequence of statements into an ExprStmtTree using a heuristic algorithm. O(n^2)Vghc[Turn a sequence of statements into an ExprStmtTree optimally, using dynamic programming. O(n^3)VghcaTurn the ExprStmtTree back into a sequence of statements, using ApplicativeStmt where necessary.VghcDivide a sequence of statements into segments, where no segment depends on any variables defined by a statement in another segment.VghcFind a "good" place to insert a bind in an indivisible segment. This is the only place where we use heuristics. The current heuristic is to peel off the first group of independent statements and put the bind after those.VghcMBuild an ApplicativeStmt, and strip the "return" from the tail if necessary.nFor example, if we start with do x <- E1; y <- E2; return (f x y) then we get do (E1[x] | E2[y]); f x yKthe LastStmt in this case has the return removed, but we set the flag on the LastStmt to indicate this, so that we can print out the original statement correctly in error messages. It is easier to do it this way rather than try to ignore the return later in both the typechecker and the desugarer (I tried it that way first!).VghcPGiven the statements following an ApplicativeStmt, determine whether we need a join or not, and remove the return if necessary.VghcJust e, if the expression is return e or  return $ e , otherwise NothingBghc7How to rename the body of each statement (e.g. rnLExpr)ghc StatementsghcRif these statements scope over something, this renames it and returns the result.Vghc7How to rename the body of each statement (e.g. rnLExpr)ghcpostprocess the statementsghc StatementsghcRif these statements scope over something, this renames it and returns the result.Vghc'How to rename the body of the statementghc The statementghc0Rename the stuff that this statement scopes overVghc the "tail"ghcfree variables of the tailVghcThe argsghcTrue  = need a joinghcThe body statementsBBJVBJVBnNone>P`, JZghcRInstantiate all outer type variables and any context. Never looks through arrows.J[ghcInstantiate all outer v binders and any context. Never looks through arrows or specified type variables. Used for visible type application.JbghcXInstantantiate the TyConBinders of a forall type, given its decomposed form (tvs, ty)JcghcUsed only in *types*Vghc This takes a ~# b and returns a ~~ b.Vghc This takes a ~# b and returns a ~ b.JbghcThe type (forall bs. ty)ghcInstantiated bs, substituted ty Takes a pair because that is what splitPiTysInvisible returns See also Note [Bidirectional type checking]JfghcType to instantiate it atghc(Standard name, user name)ghcj(Standard name, suitable expression) USED ONLY FOR CmdTop (sigh) *** See Note [CmdSyntaxTable] in HsExprAHAJALBBGJXJYJZJ[J\J]J^J_J`JaJbJcJdJeJfJgJhJiJjJYJZJ[J\J^J`JaJ]BBJbJcJdJeJiJhGJgJjJ_JXJfALAHAJNonePX`,1Jqghc Variant of Jpe that works when supplied only part (that is, to the right of some arrows) of the full function typeJughcqCall this variant when you are in a higher-rank situation and you know the right-hand type is deeply skolemised.J|ghcSometimes we don't have a  HsExpr Name' to hand, and this is more convenient.J}ghcyInfer a type using a fresh ExpType See also Note [ExpType] in TcMType Does not attempt to instantiate the inferred typeJghcrTake an "expected type" and strip off quantifiers to expose the type underneath, binding the new skolems for the  thing_inside. The returned 7 has type specific_ty -> expected_ty.Jghc Variant of J that takes an ExpTypeJghc-Breaks apart a function kind into its pieces.AghcIf present, has type ty1Jughcof the actual typeghc!If present, it has type ty_actualJwghcof the actual typeghcof the expected typeJghc3These are only ever used for scoped type variables.ghc/The expression has type: spec_ty -> expected_tyJghctype, only for errorsghc function kindghcco :: old_kind ~ arg -> res#AAJkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJzJ{J|J}J~JJJJJJJJJJJJJ#J{J|JJJuJwJxJyJzJvJJJJAAJJJJJ~J}JrJsJtJoJpJqJJJJkJlJmJnoNoneFX,MJghcTakes a list of custom printers with a explicit recursion knot and a term, and returns the output of the first successful printer, or the default printerVghcTerm Reconstruction traceVghcuReturns the instantiated type scheme ty', and the mapping from new (instantiated) -to- old (skolem) type variablesJghcTerm reconstruction"Given a pointer to a heap object () and its type, build a Jb representation of the object. Subterms (objects in the payload) are also built up to the given  max_depth. After  max_depth any subterms will appear as JIs. Any thunks found while traversing the object will be forced based on force parameter.^Types of terms will be refined based on constructors we find during term reconstruction. See J3 for an overview of how type reconstruction works.Jghc'Fast, breadth-first Type reconstructionGiven a heap object () and its (possibly polymorphic) type (usually obtained in GHCi), try to reconstruct a more monomorphic type of the object. This is used for improving type information in debugger. For example, if we have a polymorphic function:`sumNumList :: Num a => [a] -> a sumNumList [] = 0 sumNumList (x : xs) = x + sumList xsand add a breakpoint to it:@ghci> break sumNumList ghci> sumNumList ([0 .. 9] :: [Int])+ghci shows us more precise types than just as:nStopped in Main.sumNumList, debugger.hs:3:23-39 _result :: Int = _ x :: Int = 0 xs :: [Int] = _Jghc&How many times to recurse for subtermsghc Force thunksghc!Type of the object to reconstructghcObject to reconstructJghc&How many times to recurse for subtermsghcType to refineghc Refine the type using this value JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJpNone%X,o VghchAn error Report collects messages categorised by their importance. See Note [Error report] for details.JghcReport unsolved goals as errors or warnings. We may also turn some into deferred run-time errors if `-fdefer-type-errors` is on.JghcReport *all* unsolved goals as errors, even if -fdefer-type-errors is on However, do not make any evidence bindings, because we don't have any convenient place to put them. NB: Type-level holes are OK, because there are no bindings. See Note [Deferring coercion errors to runtime] Used by solveEqualities for kind equalities (see Note [Fail fast on kind errors] in TcSimplify) and for simplifyDefault.JghcReport all unsolved goals as warnings (but without deferring any errors to run-time). See Note [Safe Haskell Overlapping Instances Implementation] in TcSimplifyVghc,Report unsolved goals as errors or warnings.Vghc(Put a doc into the important msgs block.Wghc+Put a doc into the relevant bindings block.Wghc)Put a doc into the valid hole fits block.Wghc Returns True  =7 the ReportErrCtxt indicates that something is deferredWghc Transforms a W3 into one that does not defer any bindings at all.WghcVThis function tries to reconstruct why a "Coercible ty1 ty2" constraint is left over.WghcPrints explicit kinds (with -fprint-explicit-kinds) in an > when a type mismatch occurs to due invisible kind arguments.)This function first checks to see if the ? argument is a ?, and if so, uses the expected/actual types from that to check for a kind mismatch (as these types typically have more surrounding types and are likelier to be able to glean information about whether a mismatch occurred in an invisible argument position or not). If the ? is not a ?7, fall back on the actual mismatched types themselves.WghcExpand type synonyms in given types only enough to make them as similar as possible. Returned types are the same in terms of used type synonyms.To expand all synonyms, see #.See ExpandSynsFail tests in tests testsuitetestsAtypecheck/should_fail for some examples of how this should work.JJJJJJJJJJqNone,WghcOIndicates if Instance met the Safe Haskell overlapping instances safety check.See Note [Safe Haskell Overlapping Instances] in TcSimplify See Note [Safe Haskell Overlapping Instances Implementation] in TcSimplifyJghcjExtra information about the parent instance declaration, needed when type-checking associated types. The . is the enclosing class, the [TyVar] are the scoped* type variable of the instance decl. The  VarEnv Type. maps class variables to their instance types.JghcThe scopedW tyvars of the instance Why scoped? See bind_me in TcValidity.checkConsistentFamInstJghcMaps classY tyvars to their instance types See Note [Matching in the consistent-instantation check]W ghc,Assumes that we've checked that this is the Typeable4 class, and it was applied to the correct argument.W ghcRepresentation for a type ty of the form  arg -> ret.W ghc<Representation for type constructor applied to some kinds. W { has ensured that this application results in a type of monomorphic kind (e.g. all kind variables have been instantiated).W ghcRepresentation for TyCon applications of a concrete kind. We just use the kind itself, but first we must make sure that we've instantiated all kind- polymorphism, but no more.JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJrNoneHV,JghcKSee Note [Safe Haskell Overlapping Instances Implementation] in TcSimplifyKghcReturns Given constraints that might, potentially, match the given pred. This is used when checking to see if a Given might overlap with an instance. See Note [Instance and Given overlap] in TcInteract.Kghc"Remove inert constraints from the J?, for use when a typechecker plugin wishes to discard a given.Kghc-Look up a dictionary inert. NB: the returned @I might not match the input exactly. Note [Use loose types in inert set].Kghc)Look up a solved inert. NB: the returned @M might not match the input exactly. See Note [Use loose types in inert set].K8ghcThis variant of K7} will keep solving, even when only Deriveds are left around. It also doesn't return any evidence, as callers won't need it.K9ghc-This can deal only with equality constraints.W ghc.Mark variables as used filling a coercion holeKxghcEqualities onlyKyghc+Good for both equalities and non-equalitiesKghc Make a new E of the given type, bound (in the monad's EvBinds) to the given termKghc-Emit a new Wanted equality into the work-listKghcMake a new equality CtEvidenceKghcqChecks if the depth of the given location is too much. Fails if it's too big, with an appropriate error message.Kghctype being reduced *5 @-@.@/@0@1@2JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKK 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~KKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJJKBJK7K8K:K-K.K/K9K=K<K;K?K>K2KYKXKrJJJJJJJ@-@.@/@0@1@2K0K1K6K4K5K+K,JJJKuKtKvK{K|KKKKKKKKKNKiKOKwKxKyKzK}K~KKKKKKKQKRKSKTKUKIKJKKKLKMKVKWJJJJJJJJJJJJJJJK K K KKK KK KKK@KAKKKKKKKK*KKCKDJKKKKKJK KK"K$K%K#K'K&K!JJJKJJKKKKKhKgKkKlKK(K)KmKnKpKqKoKjKs5 K\K]K^KaKbKcK`K_KdKeKfKEKFKGKHKP *K3KKKZK[sNone%,E Wghc,The result of flattening a tyvar "one step".Wghc;The inert set doesn't make the tyvar equal to anything elseWghcThe tyvar flattens to a not-necessarily flat other type. co :: new type ~r old type, where the role is determined by the FlattenEnvWghcThe W monad is a wrapper around JC with the following extra capabilities: (1) it offers access to a WV; and (2) it maintains the flattening worklist. See Note [The flattening work list].Wghc Change the # in a W.Wghc Change the K in a W.WghcMake sure that flattening actually produces a coercion (in other words, make sure our flavour is not Derived) Note [No derived kind equalities]Wghc%fast path flatten_args, in which none of the binders are named and therefore we can avoid tracking a lifting context. There are many bang patterns in here. It's been observed that they greatly improve performance of an optimized build. The T9872 test cases are good witnesses of this fact.WghcYSlow path, compared to flatten_args_fast, because this one must track a lifting context.WghcFlattenM a coercion. Really, just zonk it so we can uphold (F1) of Note [Flattening]WghcLike  splitPiTys' but comes with a R which is R) iff there is at least one named binder.WghcLike # but you also get a R7 which is true iff there is at least one named binder.KKKKKKKKKKKKKKtNone,WghcCompare types for equality, while zonking as necessary. Gives up as soon as it finds that two types are not equal. This is quite handy when some unification has made two types in an inert wanted to be equal. We can discover the equality without flattening, which is sometimes very expensive (in the case of type functions). In particular, this function makes a ~20% improvement in test case perfcompilerT5030.Returns either the (partially zonked) types in the case of inequality, or the one type in the case of equality. canEqReflexive is a good next step in the R case. Returning R is always safe.NB: This does *not* look through type synonyms. In fact, it treats type synonyms as rigid constructors. In the future, it might be convenient to look at only those arguments of type synonyms that actually appear in the synonym RHS. But we're not there yet.WghcDecompose a type application. All input types must be flat. See Note [Canonicalising type applications] Nominal equality only!<We're able to unwrap a newtype. Update the bits accordingly.WghcdBreak apart an equality over a casted type looking like (ty1 |> co1) ~ ty2 (modulo a swap-flag)WghcCall when canonicalizing an equality fails, but if the equality is representational, there is some hope for the future. Examples in Note [Use canEqFailure in canDecomposableTyConApp]Wghc@Call when canonicalizing an equality fails with utterly no hope.W ghcCanonicalise a CFunEqCan. We know that the arg types are already flat, and the RHS is a fsk, which we must *not* substitute. So just substitute in the LHSW!ghc%Solve a reflexive equality constraintWghc :: ty1 ~ ty2ghcty1ghc :: ty1 ~ ty1'ghcty2ghcty2, with type synonyms KKKKKKKKKK KKKKKKKKKKW"0uNone,Y W#ghcGRepresents collections of constraints generated by typechecker pluginsW$ghc]Original inputs to the plugins with solved/bad constraints removed, but otherwise unmodifiedW%ghcConstraints solved by pluginsW&ghc,Constraints reported as insoluble by pluginsW'ghc"New constraints emitted by pluginsW(ghc9A solved triple of constraints, with evidence for wantedsW)ghcCA triple of (given, derived, wanted) constraints to pass to pluginsW*ghcExtract the (inert) givens and invoke the plugins on them. Remove solved givens from the inert set and emit insolubles, but return new work produced so that K( can feed it back into the main solver.W+ghcGiven a bag of (flattened, zonked) wanteds, invoke the plugins on them and produce an updated bag of wanteds (possibly with some new work) and a bag of insolubles. The boolean indicates whether K< should feed the updated wanteds back into the main solver.W,ghczStarting from a triple of (given, derived, wanted) constraints, invoke each of the typechecker plugins in turn and return%the remaining unmodified constraints,"constraints that have been solved,#constraints that are insoluble, and new work.FNote that new work generated by one plugin will not be seen by other plugins on this pass (but the main constraint solver will be re-invoked and they will see it later). There is no check that new work differs from the original constraints supplied to the plugin: the plugin itself should perform this check if necessary.W-ghcIf a class is "naturally coherent", then we needn't worry at all, in any way, about overlapping/incoherent instances. Just solve the thing! See Note [Naturally coherent classes] See also Note [The equality class story] in TysPrim.KKKKvNone, Kghc8How should we choose which constraints to quantify over?KghcKApply the monomorphism restriction, never quantifying over any constraintsKghcySee Note [TcRnExprMode] in TcRnDriver, the :type +d case; this mode refuses to quantify over any defaultable constraintKghcIQuantify over any constraint that satisfies TcType.pickQuantifiablePredsKghcType-check a thing that emits only equality constraints, solving any constraints we can and re-emitting constraints that we can't. The thing_inside should generally bump the TcLevel to make sure that this run of the solver doesn't affect anything lying around.KghcType-check a thing that emits only equality constraints, then solve those constraints. Fails outright if there is trouble. Use this if you're not going to get another crack at solving (because, e.g., you're checking a datatype declaration)KghcgSimplify top-level constraints, but without reporting any unsolved constraints nor unsafe overlapping.W.ghcDefault any remaining  CallStack constraints to empty  CallStacks.KghcGNormalise a type as much as possible using the given constraints. See Note [tcNormalise].W/ghcLike C@, but in the TcS monad.K8KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK8wNone%P- W0ghc0Information about a type being validity-checked.W1ghcWhen validity-checking an application of a type synonym, should we check the arguments, check the expanded type, or both? See Note [Correctness and performance of type synonym validity checking]W2ghcOnly check the expanded type.W3ghcOnly check the arguments.W4ghc/Check both the arguments and the expanded type.W5ghcIf LiberalTypeSynonyms is enabled, we start in W2$ mode for the reasons explained in Note [Liberal type synonyms]. Otherwise, we start in W4 mode.W6ghc2See Note [Validity checking of HasField instances]KghcDo validity checks on a type family equation, including consistency with any enclosing class instance head, termination, and lack of polytypes.W7ghc[Checks for occurrences of type families in class instances and type/data family instances.KghcCheck a list of binders to see if they make a valid telescope. The key property we're checking for is scoping. For example: > data SameKind :: k -> k -> * > data X a k (b :: k) (c :: SameKind a b) Kind inference says that a's kind should be k. But that's impossible, because k isn't in scope when a is bound. This check has to come before general validity checking, because once we kind-generalise, this sort of problem is harder to spot (as we'll generalise over the unbound k in a's type.)See Note [Generalisation for type constructors] in TcTyClsDecls for data type declarations and Note [Keeping scoped variables in order: Explicit] in TcHsType for forallsW8ghcWhen this says True:, ignore this class constraint during a termination checkW9ghcTidy before printing a typeW:ghc'Is this the argument to a type synonym?Kghcof the type familyghcBound variables in the equationghc Type patternsghcRhsW;ghcpatternsghcRHSKghc Family tycon+5"5#5$5%5&5'5(5)5*5+5,5-5.5/505152535455565758595:5;5<KKKKKKKKKKKKKKKK+K5"5#5$5%5&5'5(5)5*5+5,5-5.5/505152535455565758595:5;5<KKKKKKKKKKKKKKKxNone>HVX-. W<ghcshowString :: String -> ShowSW=ghc(showsPrec :: Show a => Int -> a -> ShowSW>ghcshows :: Show a => a -> ShowSW?ghcyMake a function binding. If no equations are given, produce a function with the given arity that produces a stock error.W@ghcMake a function binding. If no equations are given, produce a function with the given arity that uses an empty case expression for the last argument that is passes to the given function to produce the right-hand side.KghcProduces a function binding. When no equations are given, it generates a binding of the given arity and an empty case expression for the last argument that it passes to the given function to produce the right-hand side.KghcProduces a function binding. When there are no equations, it generates a binding with the given arity that produces an error based on the name of the type of the last argument.WAghc0A table of postfix modifiers for unboxed values.WBghcLookup n in an association list.WCghcLookup n in an association list.WDghceMake a top-level binder name for an auxiliary binding for a parent name See Note [Auxiliary binders]KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKyNone>HVX_-4KghcDoes not contain variableKghcThe variable itselfKghc$The variable itself, contravariantlyKghc Function typeKghc Tuple typeKghc(Type app, variable only in last argumentKghc.Type app, variable other than in last argumentLghc Forall typeLghcVariable to look forghc How to foldghcType to processKKKKKKKLKKLLLLLLKKKKKKKLKKLLLLLLzNone >HPVX-LGWEghcSee documentation of WF; that function uses the fields of this type to interpret the structure of a type when that type is considered as an argument to a constructor that is being represented with Rep1.WFghc argTyFold3 implements a generalised and safer variant of the arg function from Figure 3 in  (http://dreixel.net/research/pdf/gdmh.pdf. arg is conceptually equivalent to: arg t = case t of _ | isTyVar t -> if (t == argVar) then Par1 else Par0 t App f [t'] | representable1 f && t' == argVar -> Rec1 f App f [t'] | representable1 f && t' has tyvars -> f :.: (arg t') _ -> Rec0 twhere argVar_ is the last type variable in the data type declaration we are finding the representation for. argTyFold is more general than arg because it uses WE. to abstract out the concrete invocations of Par0, Rec0, Par1, Rec1, and :.:. argTyFold is safer than arg because argN would lead to a GHC panic for some data types. The problematic case is when t0 is an application of a non-representable type f to argVar: App f [argVar] is caught by the _% pattern, and ends up represented as Rec0 t. This type occurs free in the RHS of the eventual Rep1s instance, which is therefore ill-formed. Some representable1 checks have been relaxed, and others were moved to canDoGenerics1.WGghc.Variant of foldr1 for producing balanced listsLLL L L L L L L LLL L L {NoneHV-LghcA list of wanted L constraints (L) to simplify when inferring a derived instance's context. These are used in all deriving strategies, but in the particular case of DeriveAnyClass5, we need extra information. In particular, we need:Lh, the list of type variables bound by a class method's regular type signature, which should be rigid.Lt, the list of type variables bound by a class method's default type signature. These can be unified as necessary.L, the list of constraints from a class method's regular type signature, which can be used to help solve constraints in the L. (Note that Lp will likely contain type variables from the derived type class or data type, neither of which will appear in L or L.)?For all other deriving strategies, it is always the case that L, L, and L are empty.&Here is an example to illustrate this: 8class Foo a where bar :: forall b. Ix b => a -> b -> String default bar :: forall y. (Show a, Ix y) => a -> y -> String bar x y = show x ++ show (range (y, y)) baz :: Eq a => a -> a -> Bool default baz :: Ord a => a -> a -> Bool baz x y = compare x y == EQ data Quux q = Quux deriving anyclass Foo Then it would generate two Ls, one for each method: [ ThetaOrigin { to_anyclass_skols = [b] , to_anyclass_metas = [y] , to_anyclass_givens = [Ix b] , to_wanted_origins = [ Show (Quux q), Ix y , (Quux q -> b -> String) ~ (Quux q -> y -> String) ] } , ThetaOrigin { to_anyclass_skols = [] , to_anyclass_metas = [] , to_anyclass_givens = [Eq (Quux q)] , to_wanted_origins = [ Ord (Quux q) , (Quux q -> Quux q -> Bool) ~ (Quux q -> Quux q -> Bool) ] } ] (Note that the type variable q is bound by the data type Quux", and thus it appears in neither L nor L.)See ?Note [Gathering and simplifying constraints for DeriveAnyClass] in  TcDerivInfer for an explanation of how L are determined in DeriveAnyClass, as well as how L, L, and L are used.LghcA f- annotated with the origin of the constraint ?9, and whether or the constraint deals in types or kinds.Lghc@Records whether a particular class can be derived by way of an  originative deriving strategy (i.e., stock or anyclass).See Note [Deriving strategies] in TcDeriv.LghcWhether GHC is processing a deriving. clause or a standalone deriving declaration.Lghc'InferContext mb_wildcard is either:A deriving clause (in which case  mb_wildcard is R).iA standalone deriving declaration with an extra-constraints wildcard as the context (in which case  mb_wildcard is R loc, where loc$ is the location of the wildcard.GHC should infer the context.LghcL theta. is a standalone deriving declaration, where theta& is the context supplied by the user.L/ghcZContains all of the information known about a derived instance when determining what its EarlyDerivSpec should be.L1ghc Is this an overlapping instance?L2ghc5Universally quantified type variables in the instanceL3ghc-Class for which we need to derive an instanceL4ghc,Other arguments to the class except the lastL5ghcZType constructor for which the instance is requested (last arguments to the type class)L6ghc!Arguments to the type constructorL7ghcThe representation tycon for L5 (for data family instances)L8ghcThe representation types for L6 (for data family instances)L9ghcL theta for standalone deriving (where theta( is the context of the instance). L for derivingP clauses, or for standalone deriving that uses a wildcard constraint. See %Note [Inferring the instance context].L:ghcR@ if user requests a particular deriving strategy. Otherwise, R.L;ghc0To avoid having to manually plumb everything in L/" throughout various functions in TcDeriv and  TcDerivInfer , we use L;#, which is a simple reader around A".L<ghc4Is GHC processing a standalone deriving declaration?L=ghcpIs GHC processing a standalone deriving declaration with an extra-constraints wildcard as the context? (e.g., !deriving instance _ => Eq (Foo a))L>ghcL> wc returns ? if wc is R, and ? if wc is R. Useful for error-reporting.L@ghc Convert a L to its corresponding 9.WHghc~Some common validity checks shared among stock derivable classes. One check that absolutely must hold is that if an instance C (T a) is being derived, then Tc must be a tycon for a data type or a newtype. The remaining checks are only performed if using a deriving) clause (i.e., they're ignored if using StandaloneDeriving): UThe data type must have at least one constructor (this check is ignored if using EmptyDataDeriving).0The data type cannot have any GADT constructors.\The data type cannot have any constructors with existentially quantified type variables.+The data type cannot have a context (e.g., data Foo a = Eq a => MkFoo).8The data type cannot have fields with higher-rank types.WIghcThe data type's  ). For data families, this is the family  .ghc.For data families, this is the representation  ,. Otherwise, this is the same as the other   argument.ghc|" if deriving an instance for this   is possible. Otherwise, it's } err, where err explains what went wrong.WHghcL? if this is standalone deriving with a user-supplied context, Ly if not. If it is the former, we relax some of the validity checks we would otherwise perform (i.e., "just go for it").ghcR  = allow higher rank arguments and empty data types (with no data constructors) even in the absence of the -XEmptyDataDeriving extension.BLLLLLLLLLLLLLLLLLLL L!L"L#L$L%L&L'L(L)L*L+L,L-L.L/L0L9L1L2L3L4L5L6L7L8L:L;L<L=L>L?L@LALBLCLDLELFLGLHLILJLKLLLMLNLOBL;L/L0L9L1L2L3L4L5L6L7L8L:L#L$L%L&L'L(L)L*L+L,L-L.L?LLL L!L"L@LALBLCLDLLLLLLLLL<L=L>LLLLLLLLLELFLGLHLJLILKLLLMLNLO|None HPSVX`-LVghc1Describes the kind expected in a certain context.LWghca specific kindLXghcany kind will doLYghcsomething of the form TYPE _WJghcInfo about the context in which we're checking a type. Currently, differentiates only between types and kinds, but this will likely grow, at least to include the distinction between patterns and not-patterns.LZghc,Do we require type families to be saturated?LeghcTypecheck something within the context of a deriving strategy. This is of particular importance when the deriving strategy is via. For instance: $deriving via (S a) instance C (T a) We need to typecheck S a>, and moreover, we need to extend the tyvar environment with a before typechecking C (T a), since S a quantified the type variable a.Lgghc%Type-check a visible type applicationWKghc`Check and desugar a type, returning the core type and its possibly-polymorphic kind. Much like  tcInferRho at the expression level.WLghcxInfer the kind of a type and desugar. This is the "up" type-checker, as described in Note [Bidirectional type checking]WMghcCall WL/ and check its result against an expected kind.LqghcApply a type of a given kind to a list of arguments. This instantiates invisible parameters as necessary. Always consumes all the arguments, using matchExpectedFunKind as necessary. This takes an optional  VarEnv Kind which maps kind variables to kinds.- These kinds should be used to instantiate invisible kind variables; they come from an enclosing class for an associated type/data family.WNghcQApplies a type to a list of arguments. Always consumes all the arguments, using J} as necessary. If you wish to apply a type to a list of HsTypes, this is your function. Used for type-checking types only.LrghcThis instantiates invisible arguments for the type being checked if it must be saturated and is not yet saturated. It then calls and uses the result from checkExpectedKindX to build the final type Obeys Note [The tcType invariant]WOghc'New unification variable for a wildcardLwghc Kind-check a ,Dx. If the decl under consideration has a complete, user-supplied kind signature (CUSK), generalise the result. Used in getInitialKind (for tycon kinds and other kinds) and in kind-checking (but not for tycon kinds, which are checked with tcTyClDecls). See Note [CUSKs: complete user-supplied kind signatures] in HsDecls.-This function does not do telescope checking.WPghciUsed during the "kind-checking" pass in TcTyClsDecls only, and even then only for data-con declarations.LghcUsed for the type variables of a type or class decl in the "kind checking" and "type checking" pass, but not in the initial-kind run.WQghcThis variant of L refuses to generalize over any variables free in the given WantedConstraints. Instead, it promotes these variables into an outer TcLevel. All variables to be quantified must have a TcLevel higher than the ambient TcLevel. See also Note [Promoting unification variables] in TcSimplifyLghckWhenever a type is about to be added to the environment, it's necessary to make sure that any free meta-tyvars in the type are promoted to the current TcLevel. (They might be at a higher level due to the level-bumping in tcExplicitTKBndrs, for example.) This function both zonks *and* promotes. Why at the same time? See Note [Recipe for checking a signature]LghcIf the inner action emits constraints, report them as errors and fail; otherwise, propagates the return value. Useful as a wrapper around tcImplicitTKBndrs[, which uses solveLocalEqualities, when there won't be another chance to solve constraintsLghcfMake an appropriate message for an error in a function argument. Used for both expressions and types.Lghc3Add a "In the data declaration for T" or some such.LeghcThe deriving strategyghczThe thing to typecheck within the context of the deriving strategy, which might quantify some type variables of its own.ghcdThe typechecked deriving strategy, all quantified tyvars, and the payload of the typechecked thing.WRghcargument typesghcof these kindsghc expected kind of the whole tupleLqghcFunction (for printing only)ghcFunctionghcFunction kind (zonked)ghcArgsghc(f args, args, result kind) Precondition: tcTypeKind fun_ty = fun_ki Reason: we will return a type application like (fun_ty arg1 ... argn), and that type must be well-kinded See Note [The tcType invariant] Postcondition: Result kind is zonked.WNghcFunction (for printing only)ghcFunctionghcFunction kind (zonked)ghcArgsghc](f args, result kind) result kind is zonked Precondition: see precondition for tcInferAppsLrghc0Do we require all type families to be saturated?ghc"type we're checking (for printing)ghctype we're checkingghcthe known kind of that typeghcthe expected kindLwghcof the thing being checkedghc What sort of   is being checkedghcTrue  =" the decl being checked has a CUSKghcThe result kindghcA suitably-kinded TcTyConWSghcof the thing being checkedghc What sort of   is being checkedghcThe result kindghcA suitably-kinded TcTyConWTghcof the thing being checkedghc What sort of   is being checkedghcThe result kindghcA suitably-kinded TcTyConV5"5#5$5%5&5'5(5)5*5+5,5-5.5/505152535455565758595:5;5<KLVLWLXLYLZL[L\L]L^L_L`LaLbLcLdLeLfLgLhLiLjLkLlLmLnLoLpLqLrLsLtLuLvLwLxLyLzL{L|L}L~LLLLLLLLLLLLLLLLLVLaLbLcL`LL]L^L_LfLdLeLg5"5#5$5%5&5'5(5)5*5+5,5-5.5/505152535455565758595:5;5<LyLxL{LzL}L|LL~LVLWLXLYLLLLLLwLvLiLhLkLjLmLnLlLsLtLuLqLKLoLpLLrLZL[L\LLLLLLLL}NoneHV.WUghc.If there are no wildcards, return a LHsSigType(@H@I@J@K@L@M@N@O@P@Q@Y@Z@[@\@]@^@_@`@a@b@c@dA7A8LLLLLLLLLLLLLLLL(@a@b@c@Y@Z@[@\@]@^@_@`@Q@H@I@J@K@L@M@N@O@P@dA7A8LLLLLLLLLLLLLLLL~None %>HPSVX.6Lghc A variant of L that takes a custom originWVghc:Convenient wrapper for calling a matchExpectedXXX functionLghc(origin to use if the type needs inst'ing LLLLLLLLLLL LLLLLLLLLLL None.'Lghc~HoleFit is the type we use for valid hole fits. It contains the element that was checked, the Id of that element as found by G, and the refinement level of the fit, which is the number of extra argument holes that this fit uses (e.g. if hfRefLvl is 2, the fit is for `Id _ _`).LghcXHoleFitCandidates are passed to the filter and checked whether they can be made to fit.LghctcFilterHoleFits filters the candidates by whether, given the implications and the relevant constraints, they can be made to match the type by running the type checker. Stops after finding limit matches.WWghc.Checks whether a MetaTyVar is flexible or not.LghckTakes a list of free variables and restores any Flexi type variables in free_vars after the action is run.LghcReports whether first type (ty_a) subsumes the second type (ty_b), discarding any errors. Subsumption here means that the ty_b can fit into the ty_a, i.e. `tcSubsumes a b == True` if b is a subtype of a.LghcvA tcSubsumes which takes into account relevant constraints, to fix trac #14273. This makes sure that when checking whether a type fits the hole, the type has to be subsumed by type of the hole as well as fulfill all constraints on the type of the hole. Note: The simplifier may perform unification, so make sure to restore any free type variables to avoid side-effects.BghcThe tidy_env for zonkingghc!Enclosing implications for givensghcBThe unsolved simple constraints in the implication for the hole.ghcThe hole constraint itselfLghc%How many we should output, if limitedghc!Enclosing implications for givensghc(Any relevant unsolved simple constraintsghcThe type to check for fits and a list of refinement variables (free type variables in the type) for emulating additional holes.ghc$The candidates to check whether fit.ghcTWe return whether or not we stopped due to hitting the limit and the fits we found.LghcAny relevant Cts to the hole.ghcJThe nested implications of the hole with the innermost implication first.ghcThe type of the hole.ghcThe type to check whether fits.ghc;Whether it was a match, and the wrapper from hole_ty to ty.BLLLLLLLLLLLLLLLLLBLLLLLLLLLLLLLLLLLNone`.6/WXghcLike L, but used only in the case of deriving strategies where the constraints are inferred by inspecting the fields of each data constructor (i.e., stock- and newtype-deriving).WYghcLike L, but used only in the case of DeriveAnyClass, which gathers its constraints based on the type signatures of the class's methods instead of the types of the data constructor's field.See Note [Gathering and simplifying constraints for DeriveAnyClass] for an explanation of how these constraints are used to determine the derived instance context.WZghcGiven instance (wanted) => C inst_ty , simplify wanted, as much as possible. Fail if not possible.WZghc C inst_tyC, head of the instance we are deriving. Only used for SkolemInfo.ghcThe tyvars bound by inst_ty.ghcGiven and wanted constraintsghc1Needed constraints (after simplification), i.e. [f].LLLLNoneHV.6LLNone %>HSVX.8YW[ghcHWarn the user about polymorphic local binders that lack type signatures.LLLLLLLLLLLLLLLLNone"#HMV.fYW\ghc&A monad within which we will generate KindRep+s. Here we keep an environment containing KindRepIs which we've already generated so we can re-use them opportunistically.W]ghcMaps kinds to KindRepW bindings. This binding may either be defined in some other module (in which case the Maybe (LHsExpr Id will be RT) or a binding which we generated in the current module (in which case it will be R the RHS of the binding).W^ghcof TyConW_ghc To construct TrName,s The various TyCon and DataCons of KindRepW`ghc A group of  s in need of type-rep bindings.WaghcBuild exported KindRep% bindings for the given set of kinds.WbghcModule's typerep bindingWcghcPackage name fingerprintWdghcModule name fingerprintWeghcThe  s in need of bindings kindsWfghcInformation we need about a  / to generate its representation. We carry the 4 in order to share it between the generation of the TyCon and KindRep bindings.LghcGenerate the Typeable bindings for a module. This is the only entry-point of this module and is invoked by the typechecker driver in  tcRnSrcDecls.1See Note [Grand plan for Typeable] in TcTypeable.Wgghc6Generate TyCon bindings for a set of type constructorsWhghc<Generate bindings for the type representation of a wired-in  s defined by the virtual GHC.Prim] module. This is where we inject the representation bindings for these primitive types into  GHC.Types2See Note [Grand plan for Typeable] in this module.WighcThis is the list of primitive  *s for which we must generate bindings in  GHC.Types+. This should include all types defined in GHC.Prim.8The majority of the types we need here are contained in ". However, not all of them: in particular unboxed tuples are absent since we don't want to include them in the original name cache. See Note [Built-in syntax and the OrigNameCache] in IfaceEnv for more.WjghcKCollect various tidbits which we'll need to generate TyCon representations.Wkghc-Lookup the necessary pieces to construct the  trNameLiti. We do this so we can save the work of repeating lookups when constructing many TyCon representations.Wlghc%Make Typeable bindings for the given  .Wmghc We generate KindReps for a few common kinds in  GHC.Types, so that they can be reused across modules.WnghcPerformed while compiling  GHC.Types to generate the built-in KindReps.WoghcRun a W\ and add the produced KindRep#s to the typechecking environment.WpghcProduce or find a KindRep for the given kind.Wqghc%Construct the right-hand-side of the KindRep for the given e! and in-scope kind variable set.Wrghc!Produce the right-hand-side of a TyCon representation.Wnghc"the kinds to generate bindings forWpghcin-scope kind variablesghcthe kind we want a KindRep forWqghcin-scope kind variablesghcthe kind we want a KindRep forghcRHS expressionWrghcthe   we are producing a binding forghcits KindRepLLNone%HV.nWsghcA monad for type synonym cycle checking, which keeps track of the TyCons which are known to be acyclic, or a failure message reporting that a cycle was found.Wtghc Test if a 8 is acyclic, short-circuiting if we've seen it already.LghcChecks if any of the passed in  s have cycles. Takes the  of the home package (as we can avoid checking those TyCons: cycles never go through foreign packages) and the corresponding LTyClDecl Name for each  (, so we can give better error messages. LLLLLLLLL LLLLLLLLLNone%>HV.sWWughc PatSyn NameghcPatSyn type (UniBidirExplicitBidir)ghc Whether infixghcPattern of the PatSynghcPattern arguments and typesghc Pattern typeghc<Selector names ^ Whether fields, empty if not record PatSynWvghcVisible field labelsBBBLBBLB None >HPSVX`.vWwghcWhen the MatchGroup has multiple RHSs, convert an Infer ExpType in the expected type into TauTvs. See Note [Case branches must never infer a non-tau type]WxghcType-check a MatchGroup.B B LLLLLLLLLLLLLLLLB LB LLLLLLLLLLLLLLLNoneHPSVX.wLLNone >HPVX. Bghc!Slightly more general version of BR that allows the caller to specify the shape of the result of the syntax operatorBghchTypecheck a syntax operator The operator is a variable or a lambda at this stage (i.e. renamer output)Wyghc5A data type to describe why a variable is not closed.WzghcUType-check the arguments to a function, possibly including visible type applicationsW{ghc=Checks if the given name is closed and emits an error if not.%See Note [Not-closed error messages].Bghc"shape of syntax operator argumentsghcoverall result typeghcType check any argumentsWzghc'The function itself (for err msgs only)ghc)the (uninstantiated) type of the functionghc"the origin for the function's typeghcthe argsghc the herald for matchActualFunTysghc8(a wrapper for the function, the tc'd args, result type)W|ghcshape it is expected to haveghccheck the argumentsghc@returns a wrapper :: (type of right shape) "->" (type passed in)W}ghcargument shapesghc result shapeghccheck the argumentsghcreturns a wrapper to be applied to the original function, wrappers to be applied to arguments and a wrapper to be applied to the overall expression5J5K5L5M5N5O5kBBBBBBBBBLLLBBBBBBLBB5J5K5L5M5N5O5kBLLNone%HV.LLNoneHV.?M ghcCheck that the type has the form (IO t) or (t) , and that t satisfies the given predicate. When calling this function, any newtype wrappers (should) have been already dealt with by normaliseFfiType.cWe also check that the Safe Haskell condition of FFI imports having results in the IO monad holds.LLLLMMMMMMMMMM M M M M LMLLMMMMMMM LM M M M MMNone HMVX\_.é W~ghcGiven a >. of an instantiated signature (note that the >G must be knot-tied consistently with the actual implementation) and a v constructed from the implementor of this interface, verify that the actual implementation actually matches the original interface.Note that it is already assumed that the implementation *exports* a sufficient set of entities, since otherwise the renaming and then typechecking of the signature > would have failed.Wghc Checks if a 7 is "defined". In general, for hsig files we can't assume that the implementing file actually implemented the instances (they may be reexported from elsewhere). Where should we look for the instances? We do the same as we would otherwise: consult the EPS. This isn't perfect (we might conclude the module exports an instance when it doesn't, see #9422), but we will never refuse to compile something.WghcKReturn this list of requirement interfaces that need to be merged to form mod_name, or [] if this is not a requirement.Mghc For a module modname of type   , determine the list of extra "imports" of other requirements which should be considered part of the import of the requirement, because it transitively depends on those requirements by imports of modules from other packages. The situation is something like this:Ounit p where signature A signature B import A&unit q where dependency p[A= A,B= B-] signature A signature BAlthough q's B does not directly import A, we still have to make sure we process A first, because the merging process will cause B to indirectly import A. This function finds the TRANSITIVE closure of all such imports we need to make.MghcM, but in a convenient form for GhcMake and  TcRnDriver.MghcGiven a , make sure it is well typed. This is because unit IDs come from Cabal, which does not know if things are well-typed or not; a component may have been filled with implementations for the holes that don't actually fulfill the requirements..INVARIANT: the UnitId is NOT a InstalledUnitIdMghcETop-level driver for signature instantiation (run when compiling an hsig file.)MghcCTop-level driver for signature merging (run after typechecking an hsig file).Wghc The list of s of *non-exported* .s which this . may refer to. A non-exported .1 should be kept after thinning if an *exported* . (or >, perhaps) refers to it; we can't decide to keep it by looking at the exports of a module after thinning. Keep this synchronized with  rnIfaceDecl.MghcGiven a local >), merge all inherited requirements from W) into this signature, producing a final @? that matches the local signature and all required signatures.MghcETop-level driver for signature instantiation (run when compiling an hsig file.)WghcCheck if module implements a signature. (The signature is always un-hashed, which is why its components are specified explicitly.)MghcGiven @, instantiate a > from the indefinite library to use the actual implementations of the relevant entities, checking that the implementation matches the signature. MMMMMMMMMM MMMMMMMMMMNone%>HV.ʲMBghc@Use -XStrict to add a ! or remove a ~ See Note [decideBangHood]MCghcUnconditionally make a  strict.M8ghcticks to add, possiblyghc The patternghc(Expression to which the pattern is boundghc~Id the rhs is bound to, for desugaring strict binds (see Note [Desugar Strict binds] in DsBinds) and all the desugared bindsMBghcOriginal patternMCghcOriginal patternghcBanged pattern7IIIIIIIIIIMMMMMMMMM M!M"M#M$M%M&M'M(M)M*M+M,M-M.M/M0M1M2M3M4M5M6M7M8M9M:M;M<M=M>M?M@MAMBMCMD7IIIIIM!M"IIIIIMMMMMMM%M$M&M'M(M)M-M.M0M#M/M1M2M3M+M*M4M5M6M7M,M:M9M;M<M=M>M?M8MMM M@MAMBMCMDNone%X.HMFghcPost-typechecker, the  field of an %8 contains (an expression for) the literal value itself.MHghc_Emit warnings on overloaded integral literals which overflow the bounds implied by their type.MIghcTEmit warnings on integral literals which overflow the boudns implied by their type.WghcTEmit warnings on integral literals which overflow the bounds implied by their type.MJghc Warns about  [2,3 .. 1]R which returns the empty list. Only works for integral types, not floating point.WghcSee if the expression is an RGP literal. Remember to look through automatically-added tick-boxes! (Trac #8384)WghcIf RG<, extract the value and type name of the overloaded literal.WghcIf RGA, extract the value and type name of the non-overloaded literal.Wghc'the literal value and name of its tycon MEMFMGMHMIMJMKMLMMMNMOMP MEMFMNMKMLMMMPMOMGMHMIMJNone%>HV. Wghc+Represent result signature of a type familyWghcRepresent result signature using a Maybe Kind. Used with data families, where the result signature can be either missing or a kind but never a named result variable.Wghc1Represent injectivity annotation of a type familyWghc Represent a type variable binderWghc#Represent a type wrapped in a MaybeWghc:Construct Core expression for Nothing of a given type nameWghc5Construct Core expression for Nothing of a given typeWghc:Store given Core expression in a Just of a given type nameWghc5Store given Core expression in a Just of a given typeWghc%Name of the TyCon of the element typeWghcThe element typeWghc%Name of the TyCon of the element typeWghcThe element typeMQMQNone.MRMSMTMUMVMRMSMTMUMVNone%>HV.lMWMWNone%&'.HP/RWghc^The arity of a pattern/pattern vector is the number of top-level patterns that are not guardsWghcInformation about a conlike that is relevant to coverage checking. It is called an "inhabitation candidate" since it is a value which may possibly inhabit some type, but only if its term constraint (W) and type constraints (W<) are permitting, and if all of its strict argument types (W) are inhabitable. See +Note [Extensions to GADTs Meet Their Match].WghcEither a list of patterns that are not covered, or their type, in case we have no patterns at hand. Not having patterns at hand can arise when handling EmptyCase expressions, in two cases:JThe type of the scrutinee is a trivially inhabited type (like Int or Char)4The type of the scrutinee cannot be reduced to WHNF.-In both these cases we have no inhabitation candidates for the type at hand, but we don't want to issue just a wildcard as missing. Instead, we print a type annotated wildcard, so that the user knows what kind of patterns is expected (e.g. (_ :: Int), or (_ :: F Int), where F Int does not reduce).WghcPattern check resultRedundant clauses?Not-covered clauses (or their type, if no pattern is available)Clauses with inaccessible RHSMore details about the classification of clauses into useful, redundant and with inaccessible right hand side can be found here: 7https://ghc.haskell.org/trac/ghc/wiki/PatternMatchCheckWghc4When we learned that a given match group is completeWghc9From the original definition of the type constructor.WghcFrom a user-provided COMPLETE pragmaWghcTerm and type constraints to accompany each value vector abstraction. For efficiency, we store the term oracle state instead of the term constraints. TODO: Do the same for the type constraints?WghcValue Vector AbstractionsWghcThe empty pattern check resultWghc:Non-exhaustive empty case with unknown/trivial inhabitantsMXghc$Check a single pattern binding (let)Wghc$Check a single pattern binding (let)MYghcMExhaustive for guard matches, is used for guards in pattern bindings and in MultiIf expressions.MZghc*Check a matchgroup (case, functions, etc.)WghcCheck a matchgroup (case, functions, etc.). To be called on a non-empty list of matches. For empty case expressions, use checkEmptyCase' instead.WghcCheck an empty case expression. Since there are no clauses to process, we only compute the uncovered set. See Note [Checking EmptyCase Expressions] for details.WghcReturns R if the argument n@ is a fully saturated application of a closed type constructor.Closed type constructors are those with a fixed right hand side, as opposed to e.g. associated types. These are of particular interest for pattern-match coverage checking, because GHC can exhaustively consider all possible forms that values of a closed type can take on.qNote that this function is intended to be used to check types of value-level patterns, so as a consequence, the n= supplied as an argument to this function should be of kind Type.WghckGet rid of *outermost* (or toplevel) * type function redex * data family redex * newtypesBehaves exactly like 4, but instead of returning a coercion, it returns useful information for issuing pattern matching warnings. See Note [Type normalisation for EmptyCase] for details.NB: Normalisation can potentially change kinds, if the head of the type is a type family with a variable result kind. I (Richard E) can't think of a way to cause trouble here, though.WghcDetermine suitable constraints to use at the beginning of pattern-match coverage checking by consulting the sets of term and type constraints currently in scope. If one of these sets of constraints is unsatisfiable, use an empty set in its place. (See ANote [Recovering from unsatisfiable pattern-matching constraints] for why this is done.)WghcGiven a conlike's term constraints, type constraints, and strict argument types, check if they are satisfiable. (In other words, this is the "_Sat oracle judgment from the GADTs Meet Their Match paper.)For the purposes of efficiency, this takes as separate arguments the ambient term and type constraints (which are known beforehand to be satisfiable), as well as the new term and type constraints (which may not be satisfiable). This lets us implement two mini-optimizations:wIf there are no new type constraints, then don't bother initializing the type oracle, since it's redundant to do so.Since the new term constraint is a separate argument, we only need to execute one iteration of the term oracle (instead of traversing the entire set of term constraints).Taking strict argument types into account is something which was not discussed in GADTs Meet Their Match. For an explanation of what role they serve, see +Note [Extensions to GADTs Meet Their Match].WghcLike W, but only checks if term and type constraints are satisfiable, and doesn't bother checking anything related to strict argument types.WghcnImplements two performance optimizations, as described in the "Strict argument type constraints" section of +Note [Extensions to GADTs Meet Their Match].Wghc^Checks if a strict argument type of a conlike is inhabitable by a terminating value (i.e, an W). See +Note [Extensions to GADTs Meet Their Match].WghcW ty returns R if ty has at least one constructor C such that: C has no equality constraints.C has no strict argument types.7See the "Strict argument type constraints" section of +Note [Extensions to GADTs Meet Their Match].Wghc Generate all W*s for a given type. The result is either R tyf, if the type cannot be reduced to a closed algebraic type (or if it's one trivially inhabited, like R), or R candidates, if it can. In this case, the candidates are the signature of the tycon, each one accompanied by the term- and type- constraints it gives rise to. See also Note [Checking EmptyCase Expressions]WghcIA fake guard pattern (True <- _) used to represent cases we cannot handleWghcECheck whether a guard pattern is generated by the checker (unhandled)Wghc Generate a canFail" pattern vector of a specific typeWghc,Create an empty list pattern of a given typeWghc)Create a (non-overloaded) literal patternWghc{Translate a list of patterns (Note: each pattern is translated to a pattern vector but we do not concatenate the results).WghcTranslate a constructor patternWghc8Translate a list of guard statements to a pattern vectorWghc)Check whether a pattern can fail to matchWghc&Translate a guard statement to PatternWghcTranslate let-bindingsWghcTranslate a pattern guardWghcTranslate a boolean guardWghcGet the type out of a PmPat. For guard patterns (ps <- e) we use the type of the first (or the single -WHEREVER IT IS- valid to use?) patternWghc Generate an WV for a given conlike (generate fresh variables of the appropriate type for arguments)WghcCreate a guard patternWghc9Create a term equality of the form: `(False ~ (x ~ lit))`Wghc/Create a term equality of the form: `(x ~ lit)`WghcUCreate a term equality of the form: `(x ~ x)` (always discharged by the term oracle)Wghc+Generate a variable pattern of a given typeWghc6Generate many variable patterns, given a list of typesWghcGenerate a fresh  of a given typeWghctGenerate a fresh term variable of a given and return it in two forms: * A variable pattern * A variable expressionWghc)Convert a value abstraction an expressionWghcuConvert a pattern vector to a list of value abstractions by dropping the guards (See Note [Translating As Patterns])WghcConvert a pattern to a list of value abstractions (will be either an empty list if the pattern is a guard pattern, or a singleton list in all other cases) by dropping the guards (See Note [Translating As Patterns])WghcKCheck whether a data constructor is the only way to construct a data type.Wghc{For a given conlike, finds all the sets of patterns which could be relevant to that conlike by consulting the result type.lThese come from two places. 1. From data constructors defined with the result type constructor. 2. From COMPLETE] pragmas which have the same type as the result type constructor. Note that we only use COMPLETE< pragmas *all* of whose pattern types match. See #14135Wghc7Check whether a set of type constraints is satisfiable.Wghc%Compute the arity of a pattern vectorWghcCompute the arity of a patternWghcLift a pattern matching action from a single value vector abstration to a value set abstraction, but calling it on every vector and the combining the results.WghcjGenerate the initial uncovered set. It initializes the delta with all term and type constraints in scope.WghcfIncrease the counter for elapsed algorithm iterations, check that the limit is not exceeded and call WWghcfIncrease the counter for elapsed algorithm iterations, check that the limit is not exceeded and call WWghcfIncrease the counter for elapsed algorithm iterations, check that the limit is not exceeded and call WWghcMatching function: Check simultaneously a clause (takes separately the patterns and the list of guards) for exhaustiveness, redundancy and inaccessibility.WghcCheck the list of guardsWghcWWorker function: Implements all cases described in the paper for all three functions (covered,  uncovered and  divergent) apart from the Guard cases which are handled by WWghcFInitialise with default values for covering and divergent information.WghcCTake the tail of all value vector abstractions in the uncovered setWghcRPrepend a value abstraction to all value vector abstractions in the uncovered setWghc"Given a data constructor of arity a^ and an uncovered set containing value vector abstractions of length `(a+n)`, pass the first np value abstractions to the constructor (Hence, the resulting value vector abstractions will have length `n+1`)WghcGet the union of two covered, uncovered and divergent value set abstractions. Since the covered and divergent sets are represented by a boolean, union means computing the logical or (at least one of the two is non-empty).WghcFAdd a value vector abstraction to a value set abstraction (uncovered).Wghc"Set the divergent set to not emptyWghc2Set the divergent set to non-empty if the flag is RM[ghcGenerate equalities when checking a case expression: case x of { p1 -> e1; ... pn -> en } When we go deeper to check e.g. e1 we record two equalities: (x ~ y), where y is the initial uncovered when checking (p1; .. ; pn) and (x ~ p1).M\ghcGenerate a simple equality when checking a case expression: case x of { matches } When checking matches we record that (x ~ y) where y is the initial uncovered. All matches will have to satisfy this equality.M]ghcCheck whether any part of pattern match checking is enabled (does not matter whether it is the redundancy check or the exhaustiveness check).WghcApply a term substitution to a value vector abstraction. All VAs are transformed to PmExpr (used only before pretty printing).WghcWrap up the term oracle's state once solving is complete. Drop any information about unhandled constraints (involving HsExprs) and flatten (height 1) the substitution.WghcBIssue all the warnings (coverage, exhaustiveness, inaccessibility)WghccIssue a warning when the predefined number of iterations is exceeded for the pattern match checkerWghcICheck whether the exhaustiveness checker should run (exhaustiveness only)WghcLDenotes whether an exhaustiveness check is supported, and if so, via which   it's controlled. Returns R if check is not supported.WghcValue Set AbstractionsWghcPattern VectorsWghcValue AbstractionsWghcPatternsWghcCThe ambient term and type constraints (known to be satisfiable).ghcThe new term constraint.ghcThe new type constraints.ghcThe strict argument types.ghcR delta if the constraints (deltaC) are satisfiable, and each strict argument type is inhabitable. R otherwise.WghcCThe ambient term and type constraints (known to be satisfiable).ghcThe new term constraint.ghcThe new type constraints.ghcR delta if the constraints (delta) are satisfiable. R otherwise.WghcThe per-  recursion depth limit.ghc?The ambient term/type constraints (known to be satisfiable).ghcThe strict argument type.ghcRT if the strict argument type might be inhabited by a terminating value (i.e., an W). RB if it is definitely uninhabitable by anything (except bottom).MXMYMZM[M\M]MXMZMYM]M\M[None%/pMDMrMsMtMrMsMtMDNone%>HV/Mughc}Desugar top level binds, strict binds are treated like normal binds since there is no good time to force before first usage.MvghcDesugar all other kind of bindings, Ids of strict binds are returned to later be forced in the binding group body, see Note [Desugar Strict binds]Wghc7Desugar a single binding (or group of recursive binds).WghcyThis is where we apply INLINE and INLINABLE pragmas. All we need to do is to attach the unfolding information to the Id.5Other decisions about whether to inline are made in calcUnfoldingGuidance_ but the decision about whether to then expose the unfolding in the interface file is made in _N using this information.Wghc Returns a CoreExpr :: TypeRep tyWghcThe Ids of strict binds, to be forced in the body of the binding group see Note [Desugar Strict binds] and all bindings and their desugared right hand sides.Wghc EvTerm for  Typeable tyghc The type tyghcReturn CoreExpr :: TypeRep ty namely  typeRep# dictI Remember that typeRep# :: forall k (a::k). Typeable k a -> TypeRep a MuMvMwMxMyMzM{M|M} MuMvMyMwMzM|M{M}MxNone%HV/8M~MM~MgNone%HV/Ighc Scrutineeghc Match kindghcPattern it should matchghcReturn this if it matchesghcReturn this if it doesn'tIghcFor shadowing warning messagesghc"Scrutinee, if we check a case exprghcMatches being desugaredghcResults (usually passed to I)IghcGVariables rep'ing the exprs we're matching with ^ See Note [Match Ids]ghcType of the case expressionghc.Info about patterns, etc. (type synonym below)ghcDesugared result!IIIIMMIMIIMINone$%HV/Wghc'the desugared rhs of the bind statementghc S in (>>=) :: Q -> (R -> S) -> TMMMMNone%HV/BMMhNone%HV`/Ighc Variant of I that ensures that the result is not levity polymorphic. This should be used when the resulting expression will be an argument to some other function. See Note [Levity polymorphism checking] in DsMonad See Note [Levity polymorphism invariants] in CoreSynWghc4The longest list length which we will desugar using build.This is essentially a magic number and its setting is unfortunate rather arbitrary. The idea here, as mentioned in Note [Desugaring explicit lists], is to avoid deforesting large static data into large(r) code. Ideally we'd want a smaller threshold with larger consumers and vice-versa, but we have no way of knowing what will be consuming our list in the desugaring impossible to set generally correctly.0The effect of reducing this number will be that buildP fusion is applied less often. From a runtime performance perspective, applying build more liberally on "moderately" sized lists should rarely hurt and will often it can only expose further optimization opportunities; if no fusion is possible it will eventually get rule-rewritten back to a list). We do, however, pay in compile time.WghcTakes an expression and its instantiated type. If the expression is an HsVar with a hasNoBinding primop and the type has levity-polymorphic arguments, issue an error. See Note [Detecting forced eta expansion]WghcIs this a hasNoBinding Id with a levity-polymorphic type? Returns the arguments that are levity polymorphic if they are bad; or an empty list otherwise See Note [Detecting forced eta expansion]IIIIIMEMIIIIMMEINoneHV/MghcrConstruct default instances for any associated types that aren't given a user definition Returns [] or singletonMMMMMMMMMMMMMMMMMMMMMMMMMMMMNoneHV/Mghc%Stuff needed to process a datatype's  `deriving` clausesMghcUThe data tycon for normal datatypes, or the *representation* tycon for data familiesMghc error contextMghcExtract  `deriving`2 clauses of proper data type (skips data families)WghcProcess a single class in a  `deriving` clause.Wghc7Derive an instance for a data type (i.e., non-newtype).Wghc!Derive an instance for a newtype.MMMMMMMMMMMMMMNone%HPV`/[WghcCMaybe return a list of Bools that say whether a type family was declared injective in the corresponding type arguments. Length of the list is equal to the number of arguments (including implicit kind/coercion arguments). True on position N means that a function is injective in its Nth argument. False means it is not.WghcFrom information about a source datacon definition, extract out what the universal variables and the GADT equalities should be. See Note [mkGADTVars].WghcProduce an error for oversaturated type family equations with too many required arguments. See Note [Oversaturated type family equations] in TcValidity.WghcEnclosing class TcTyCon, if anyWghcEnclosing class TcTyCon, if anyWghcFamily TyCon (not knot-tied)ghcDefaultsghcType checked RHSWghcThe tycon varsghcThe datacon varsghcIThe matching between the template result type and the actual result typeghciThe univ. variables, the GADT equalities, and a subst to apply to the GADT equalities and existentials. MMMMMMMMMMMMM MMMMMMMMMMMMMNone>HV/wMghcUse DerivInfo for data family instances (produced by tcInstDecls1), datatype declarations (TyClDecl), and standalone deriving declarations (DerivDecl) to check and process all derived class instances.MMMMMM None %>HMVX\_02KB ghcrCompares two things for equivalence between boot-file and normal code, reporting an error if they don't match up.Mghc3How should we infer a type? See Note [TcRnExprMode]Mghc"Instantiate the type fully (:type)Mghc&Do not instantiate the type (:type +v)Mghc#Default the type eagerly (:type +d)Wghc9A plan is an attempt to lift some code into the IO monad.Mghc1Top level entry point for typechecker and renamerWghc:Remove accumulated bindings, rules and so on from TcGblEnvWghcdRuns TH finalizers and renames and typechecks the top-level declarations that they could introduce.MghcTCompares the two things for equivalence between boot-file and normal code. Returns Nothing on success or !Just "some helpful info for user"; failure. If the difference will be apparent to the user,  Just empty is perfectly suitable.Wghc%Combines two potential error messagesWghc9If the test in the first parameter is True, succeed with Nothing'; otherwise, return the provided checkWghcRun the check provided for every pair of elements in the lists. The provided SDoc should name the element type, in the plural.Wghc9If the test in the first parameter is True, succeed with Nothing'; otherwise, fail with the given SDoc.WghcA more perspicuous name for Nothing, for  checkBootDecl and friends.WghcRWarn on local definitions of names that would clash with future Prelude elements.A name clashes if the following criteria are met: 1. It would is imported (unqualified) from Prelude 2. It is locally defined in the current module 3. It has the same literal name as the reference function 4. It is not identical to the reference functionWghcGet the unqualified name of the function to use as the "main" for the main module. Either returns the default name or the one configured on the command line with -main-isMghcThe returned [Id] is the list of new Ids bound by this statement. It can be used to extend the InteractiveContext via extendInteractiveContext.`The returned TypecheckedHsExpr is of type IO [ () ], a list of the bound values, coerced to ().WghcbTry the plans in order. If one fails (by raising an exn), try the next. If one succeeds, take it.XghcTypecheck (and lift4) a stmt entered by the user in GHCi into the GHCi  environment.By lift and 'environment we mean that the code is changed to execute properly in an IO monad. See Note [Interactively-bound Ids in GHCi] in HscTypes for more details. We do this lifting by trying different ways (plansX) of lifting the code into the IO monad and type checking each plan until one succeeds.XghccTypecheck the statements given and then return the results of the statement in the form 'IO [()]'.XghcAGenerate a typed ghciStepIO expression (ghciStep :: Ty a -> IO a)Mghc-tcRnExpr just finds the type of an expressionMghc)ASSUMES that the module is either in the > or is a package module with an interface on disk. If neither of these is true, then the result will be an error indicating the interface could not be found.Mghc8Find all the Names that this RdrName could mean, in GHCiMghc.Extract the renamed information from TcGblEnv.B ghcTrue  =& an hs-boot file (could also be a sig)XghcInstances of this ...ghc should also be instances of this"B B B MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMB B B MMW0None%HV04rMghc"Main entry point to the desugarer.MMMMNone%2=>?HVXk0OXghcUsed to collect type infoXghcThe main worker classXghckdefined so that HsImplicitBndrs and HsWildCardBndrs can know what their implicit bindings are scoping overXghczFirst scope remains constant Second scope is used to build up the scope of a tyvar over things to its right, ala RScopedXghc Pattern scopeX ghcScope spans over everything to the right of a, (mostly) not including a itself (Includes a in a few special cases like recursive do bindings) or let/where bindingsX ghccontext for type signaturesX ghc#context for pattern synonym fields.X ghccontext for imports/exportsX ghccontext for imports/exportsXghccontext for record fieldsMghc Construct an !m% from the outputs of the typechecker.Xghc2Each element scopes over the elements to the rightXghcX specialised to X thingsXghcX specialised to X thingsN+ghcDummy instances - never calledN8ghc!This instance tries to construct !U nodes which include the type of the expression. It is not yet possible to do this efficiently for all expression forms, so we skip filling in the type for those inputs.;V, for example, doesn't have any type information available directly on the node. Our next recourse would be to desugar it into a CoreExpr then query the type of that. Yet both the desugaring call and the type query both involve recursive calls to the function and argument! This is particularly problematic when you realize that the HIE traversal will eventually visit those nodes too and ask for their types again.tSince the above is quite costly, we just skip cases where computing the expression's type is going to be expensive. See #16233Xghcuse site of the patternghc*pattern to the right of a, not including aMMNone0TXghcJTries to find a suitable dummy RHS to bind the given absent identifier to.If mk_absent_let _ id == Just wrap, then wrap e will wrap a let binding for id with that RHS around e[. Otherwise, there could no suitable RHS be found (currently only happens for bindings of  representation).N?N@NANBNCNDN?NBNANCNDN@None0U_NENENone0U NFNF None0\Xghc(If given the RHS of a let-binding, this Xc determines whether we should process the binding up (body before rhs) or down (rhs before body).We use LetDown if there is a chance to get a useful strictness signature. This is the case when there are manifest value lambdas or the binding is a join point (hence always acts like a function, not a value).Xghc@Extend an environment with the strictness IDs attached to the idNLNLNone0\NNNONNNOSafe0eANeghcmaybeFlipCond c returns Just c'= if it is possible to flip the arguments to the conditional c", and the new condition should be c'.Nfghc If we apply maybeInvertCondU to the condition of a jump we turn jumps taken into jumps not taken and vice versa.Careful! If the used comparison and the conditional jump don't match the above behaviour will NOT hold. When used for FP comparisons this does not consider unordered numbers. Also inverting twice might return a synonym for the original condition.NPN[NQNRNSNTNUNVNWNXNYNZN\N]N^N_N`NaNbNcNdNeNfNPN[NQNRNSNTNUNVNWNXNYNZN\N]N^N_N`NaNbNcNdNeNfNone0mN|ghcregSqueeze_class reg Calculate the maximum number of register colors that could be denied to a node of this class due to having this reg as a neighbour.Nghc&The complete set of machine registers.NghcTake the class of a register.Nghc.Get the name of the register with this number.NghcCthese are the regs which we cannot assume stay alive over a C call.Nghc3desired stack offset in bytes, positive or negativeVNhNjNiNkNlNmNnNoNpNqNrNsNtNuNvNwNxNyNzN{N|N}N~NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNVN|N}NrNsNtNuNvNwNxNyNzN{N~NNoNpNqNNNNNNNNNNNkNlNmNnNhNjNiNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNone0oNNNNNone0pDNNNNNNNNNNNNNoneHV0g OghcX86 call instructionXghcHReturns which registers are read and written as a (read, written) pair.Xghc8Is this register interesting for the register allocator?Xghc~Applies the supplied function to all registers in instructions. Typically used to change virtual registers to real registers.XghcMake a spill instruction.Xghc Make a spill reload instruction.Xghc?See if this instruction is telling us the current C stack deltaXghcMake a reg-reg move instruction. On SPARC v8 there are no instructions to move directly between floating point and integer regs. If we need to do that then we have to go via memory.XghcCheck whether an instruction represents a reg-reg move. The register allocator attempts to eliminate reg->reg moves whenever it can, by assigning the src and dest temporaries to the same real register.Xghc)Make an unconditional branch instruction.XghcUOn most OSes the kernel will place a guard page after the current stack page. If you allocate larger than a page worth you may jump over this guard page. Not only is this a security issue, but on certain OSes such as Windows a new page won't be allocated if you don't hit the guard. This will cause a segfault or access fault.This function defines if the current allocation amount requires a probe. On Windows (for now) we emit a call to _chkstk for this. For other OSes this is not yet implemented. See  Ghttps://docs.microsoft.com/en-us/windows/desktop/DevNotes/-win32-chkstk& The Windows stack looks like this: SP ; GUARD PAGE c UNMAPPED In essense each allocation larger than a page size needs to be chunked and a probe emitted after each page allocation. You have to hit the guard page so the kernel can map in the next page, otherwise you'll segfault.O3ghc-Instruction instance for x86 instruction set.Oghc Jump targetghc,Arguments (required for register allocation)lNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOO O O O O OOOOOOOOOOOOOOOOOO O!O"O#O$O%O&O'O(O)O*O+O,O-O.O/O0O1lNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOO O O O O OOOOOOOOOOOOOOOOOO O!O"O#O$O%O&O'O(O)NNNNNNNNNNNNO.O/O1O0O,O-O+O*None0X ghcOutput the ELF .size directive.X!ghc@Print section header and appropriate alignment for that section.X"ghc7Print appropriate alignment for the given section type.O4O5O6O7O8O9O4O5O9O6O7O8None0O;ghcISPARC instruction set. Not complete. This is only the ones we need.OdghcRegister or immediateOgghciCheck if a RI represents a zero value. - a literal zero - register %g0, which is always zero.Ohghc^Calculate the effective address which would be used by the corresponding fpRel sequence.Oighc+Code to shift the stack pointer by n words.OjghcEAn instruction that will cause the one after it never to be exectutedX#ghcregUsage returns the sets of src and destination registers used by a particular instruction. Machine registers that are pre-allocated to stgRegs are filtered out, because they are uninteresting from a register allocation standpoint. (We wouldn't want them to end up on the free list!) As far as we are concerned, the fixed registers simply don't exist (for allocation purposes, anyway).X$ghc\Interesting regs are virtuals, or ones that are allocatable by the register allocator.X%ghcJApply a given mapping to tall the register references in this instruction.X&ghc[Make a spill instruction. On SPARC we spill below frame pointer leaving 2 words/spillX'ghc Make a spill reload instruction.X(ghc?See if this instruction is telling us the current C stack deltaX)ghcMake a reg-reg move instruction. On SPARC v8 there are no instructions to move directly between floating point and integer regs. If we need to do that then we have to go via memory.X*ghcCheck whether an instruction represents a reg-reg move. The register allocator attempts to eliminate reg->reg moves whenever it can, by assigning the src and dest temporaries to the same real register.X+ghc)Make an unconditional branch instruction.Okghc"instance for sparc instruction setX&ghcregister to spillghccurrent stack deltaghcspill slot to useX'ghcregister to load intoghccurrent stack deltaghcspill slot to use12O;OAO`OCOaO<O=O>O?OBOJOLONOTOXObOcO_O@ODOEOFOGOHOIOKOMOOOPOQOROSOUOVOWOYOZO[O\O]O^OdOeOfOgOhOiOj1OdOeOfOgOhOiOjO;OAO`OCOaO<O=O>O?OBOJOLONOTOXObOcO_O@ODOEOFOGOHOIOKOMOOOPOQOROSOUOVOWOYOZO[O\O]O^2None0OlOmOnOoOpOqOrOsOlOmOnOoOpOqOrOsNone0X,ghcPretty print a register.X-ghcPretty print a register name, based on this register number. The definition has been unfolded so we get a jump-table in the object code. This function is called quite a lot when emitting the asm file..Oxghc0Pretty print a format for an instruction suffix.X.ghcbPretty print a format for an instruction suffix. eg LD is 32bit on sparc, but LDD is 64 bit.X/ghcPretty print a condition code.X0ghcPretty print an address mode.Oyghc Pretty print an immediate value.X1ghcPretty print a section / segment header. On SPARC all the data sections must be at least 8 byte aligned incase we store doubles in them.X2ghc7Print appropriate alignment for the given section type.OzghcPretty print a data item.O{ghcPretty print an instruction.X3ghcPretty print a RIX4ghc#Pretty print a two reg instruction.X5ghc%Pretty print a three reg instruction.X6ghc1Pretty print an instruction of two regs and a ri.OuOvOwOxOyOzO{OuOvOwO{OxOyOzNone0O}ghcEnforce intra-block invariants.O}O}None0ϵO~ghc9Expand out synthetic instructions in this top level thingX7ghc/Expand out synthetic instructions in this blockX8ghcExpand out some instructionsX9ghcIn the SPARC instruction set the FP register pairs that are used to hold 64 bit floats are refered to by just the first reg of the pair. Remap our internal reg pairs to the appropriate reg.-For example: ldd [%l1], (%f0 | %f1)'gets mapped to ldd [$l1], %f0X:ghc$The high partner for this float reg.O~O~None0ܞOghcCode to produce a result into a register. If the result must go in a specific register, it comes out as Fixed. Otherwise, the parent can decide which register to put it in.Oghc,Holds code that references a memory address.Oghca.k.a  Register64{ Reg is the lower 32-bit temporary which contains the result. Use getHiVRegFromLo to find the other VRegUnique.fRules of this simplified insn selection game are therefore that the returned Reg may be modifiedOghc#Condition codes passed up the tree.OghcOs are the insn sequences generated by the insn selectors. They are really trees of insns to facilitate fast appending, where a left-to-right traversal yields the insns in the correct order.Oghc&Change the format field in a Register.OghcGrab the Reg for a CmmReg OOOOOOOOOOOOO OOOOOOOOOOOOONone0bOghc9Holds interesting statistics from the register allocator.OghcInitial code, with liveness.OghcThe initial, uncolored graph.Oghc/Information to help choose which regs to spill.Oghc(Code we tried to allocate registers for.OghcThe regs that were coalesced.OghcSpiller stats.Oghc#Code with spill instructions added.OghcCoalesced and colored graph.OghcCode with coalescings applied.Oghc"Code with vregs replaced by hregs.Oghc-Code with unneeded spill/reloads cleaned out.Oghc Final code.Oghc0Spill/reload/reg-reg moves present in this code.Oghc;Do all the different analysis on this list of RegAllocStatsOghcJDump a table of how many spill loads / stores were inserted for each vreg.OghcDDump a table of how long vregs tend to live for in the initial code.OghcJDump a table of how many conflicts vregs tend to have in the initial code.OghcgFor every vreg, dump how many conflicts it has, and its lifetime. Good for making a scatter plot.Oghc Count spillreloadJreg-reg moves. Lets us see how well the register allocator has done.Oghcglobal register conflict graphOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOONoneX1 `X;ghc5The maximum number of build/spill cycles we'll allow.It should only take 3 or 4 cycles for the allocator to converge. If it takes any longer than this it's probably in an infinite loop, so it's better just to bail out and report a bug.Oghc7The top level of the graph coloring register allocator.X<ghc;Perform solver iterations for the graph coloring allocator.We extract a register confict graph from the provided cmm code, and try to colour it. If that works then we use the solution rewrite the code with real hregs. If coloring doesn't work we add spill code and try to colour it again. After X; iterations we give up.X=ghcFBuild a graph from the liveness and coalesce information in this code.X>ghclAdd some conflict edges to the graph. Conflicts between virtual and real regs are recorded as exclusions.X?ghcpAdd some coalesence edges to the graph Coalesences between virtual and real regs are recorded as preferences.X@ghcCPatch registers in code using the reg -> reg mapping in this graph.Oghc#registers we can use for allocationghcset of available spill slots.ghccurrent number of spill slotsghc)code annotated with liveness information.ghc CFG of basic blocks if availableghcacode with registers allocated, additional stacks required and stats for each stage of allocationX<ghc4Number of solver iterations we've already performed.ghcGFunction for calculating whether a register is trivially colourable.ghc$Free registers that we can allocate.ghc!Free stack slots that we can use.ghcNumber of spill slots in useghc!Current regalloc stats to add to.ghc$Liveness annotated code to allocate.OONone1'XAghc5Get the registers that are being used by this instruction. regUsage doesn't need to do any trickery for jumps and such. Just state precisely the regs read and written by that insn. The consequences of control flow transfers, as far as register allocation goes, are taken care of by the register allocator.XBghcJApply a given mapping to all the register references in this instruction.XCghcChecks whether this instruction is a jump/branch instruction. One that can change the flow of control in a way that the register allocator needs to worry about.XDghcChecks whether this instruction is a jump/branch instruction. One that can change the flow of control in a way that the register allocator needs to worry about.XEghcyChange the destination of this jump instruction. Used in the linear allocator when adding fixup blocks for join points.XFghc5An instruction to spill a register into a spill slot.OghcOThe size of a minimal stackframe header including minimal parameter save area.XGghc&The maximum number of bytes required to spill a register. PPC32 has 32-bit GPRs and 64-bit FPRs, while PPC64 has 64-bit GPRs and 64-bit FPRs. So the maximum is 8 regardless of platforms unlike x86. Note that AltiVec's vector registers are 128-bit wide so we must not use this to spill them.Oghc<The number of spill slots available without allocating more.XHghcThe number of bytes that the stack pointer should be aligned to. This is 16 both on PPC32 and PPC64 ELF (see ELF processor specific supplements).XIghc=Convert a spill slot number to a *byte* offset, with no sign.XJghc?See if this instruction is telling us the current C stack deltaXKghcQCopy the value in a register to another one. Must work for all register classes.XLghc'Make an unconditional jump instruction.XMghcaTake the source and destination from this reg -> reg move instruction or Nothing if it's not oneOghc Instruction instance for powerpcTOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOTOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOONone1*OOOOOPOOOOOPNone1+XNghc7Print appropriate alignment for the given section type.PPNone4178PghcHaving a CFG with additional information is essential for some operations. However we can't reconstruct all information once we generated instructions. So instead we update the CFG as we go.PghcRThe list of block ids records the redirected jumps to allow us to update the CFG.P!ghcJgiven the instruction sequence of a block, produce a list of the block's 3Tts See Note [What is this unwinding business?] in Debug and Note [Unwinding information in the NCG] in this module.P"ghc5Turn the sequence of `jcc l1; jmp l2` into `jncc l2;  block_l1` when possible.P-ghc%Record that we added a block between from and old.P.ghcPlace R+ after block' and change any edges block -> X to R+ -> X5 *PPPPPP P P P P PPPPPPPPPPPPPPPP!P"PPPP P#P$P%P&P'P(P)P*P+P,P-P.P/P0P1P2P3P4P5P6P75PPPPPPPPPPPP!P"PPPP PPPP P P P P PPPPP#PP$P*P-P.P+P&P,P%P(P'P)P/P0P1P2P3P4 *P5P6P7PNone19P?P@PAP?P@PANone1:PBghc,Generate code to reference a memory address.PBghcexpr producing an addressPBPBNone1?PCghc(Code to assign a 64 bit value to memory.PDghc,Code to assign a 64 bit value to a register.PEghc6Get the value of an expression into a 64 bit register.PCghc&expr producing the destination addressghc expr producing the source value.PDghcthe destination registerghcexpr producing the source valuePCPDPEPCPDPENone1U P=ghc*Make code to evaluate a 32 bit expression.P>ghcfThe dual to getAnyReg: compute an expression into a register, but we don't mind which one it is.XOghcsign extend and widenXPghcFor nop word format conversions we set the resulting value to have the required size, but don't need to generate any actual code.XQghc)Generate an integer division instruction.XRghcDo an integer remainder.NOTE: The SPARC v8 architecture manual says that integer division instructions _may_ generate a remainder, depending on the implementation. If so it is _recommended_ that the remainder is placed in the Y register.@The UltraSparc 2007 manual says Y is _undefined_ after division.The SPARC T2 doesn't store the remainder, not sure about the others. It's probably best not to worry about it, and just generate our own remainders.XSghc(Coerce a integer value to floating pointXTghc(Coerce a floating point value to integerNOTE: On sparc v9 there are no instructions to move a value from an FP register directly to an int register, so we have to use a load/store.XUghcCCoerce a double precision floating point value to single precision.XVghcBCoerce a single precision floating point value to double precisionXOghcwidth of source expressionghcwidth of resultghcsource expressionP=P>P>P=None1VXWghcaSays what we have to add to our 'PIC base register' in order to get the address of a label. PFPGPHPIPJPKPLPMPNPOPPPQPR PMPFPGPHPIPJPKPLPNPPPOPQPRNone&'P\1XXghc+Memory addressing modes passed up the tree.XYghcRegister's passed up the tree. If the stix code forces the register to live in a pre-decided machine register, it comes out as Fixed#; otherwise, it comes out as Any>, and the parent can decide which register to put it in.XZghca.k.a  Register64{ Reg is the lower 32-bit temporary which contains the result. Use getHiVRegFromLo to find the other VRegUnique.fRules of this simplified insn selection game are therefore that the returned Reg may be modifiedX[ghc#Condition codes passed up the tree.PUghcPUs are the insn sequences generated by the insn selectors. They are really trees of insns to facilitate fast appending, where a left-to-right traversal yields the insns in the correct order.X\ghcConvert N instructions into N) instructions to capture changes in the spM register. See Note [What is this unwinding business?] in Debug for details.X]ghcbid refers to the current block and is used to update the CFG if new blocks are inserted in the control flow. See Note [Keeping track of the current block] for more details.X^ghcGrab the Reg for a CmmRegX_ghc Check whether an integer will fit in 32 bits. A CmmInt is intended to be truncated to the appropriate number of bits, so here we truncate it to Int64. This is important because e.g. -1 as a CmmInt might be either -1 or 18446744073709551615.X`ghc(Convert a BlockId to some CmmStatic dataXaghcfThe dual to getAnyReg: compute an expression into a register, but we don't mind which one it is.XbghcLike Xc, but on 32-bit use simple register addressing (i.e. no index register). This stops us from running out of registers on x86 when using instructions such as cmpxchg, which can use up to three virtual registers and one fixed register.XdghcGiven a XY, produce a new XYO with an instruction block which will check the value for alignment. Used for -falignment-sanitisation.Xeghc%We return the instructions generated.PYghcThis works on the invariant that all jumps in the given blocks are required. Starting from there we try to make a few more jumps redundant by reordering them. We depend on the information in the CFG to do so. Without a given CFG we do nothing.Xfghc7Basic block these statement will start to be placed in.ghc Cmm StatementghcResulting instructionX]ghc6Basic block this statement will start to be placed in.ghccInstructions, and bid of new block if successive statements are placed in a different basic block.PYghcCFG if presentghcBlocks with info tablesghcList of basic blocksPUPVPWPXPYPVPWPXPYPUNone&'1 PZghcTop level code generationXgghcDo code generation on a single block of CMM code. code generation may introduce new basic block boundaries, which are indicated by the NEWBLOCK instruction. We must split up the instruction stream into basic blocks again. Also, we extract LDATAs here too.Xhghc2Convert some Cmm statements to SPARC instructions.Xighc(Convert a BlockId to some CmmStatic dataXjghcXGenerate code to calculate an argument, and move it into one or two integer vregs.XkghczMove args from the integer vregs into which they have been marshalled, into %o0 .. %o5, and the rest onto the stack.XlghcHAssign results returned from the call into their destination regs.XmghcDGenerate a call to implement an out-of-line floating point operationXnghc:Decide what C function to use to implement a CallishMachOpOPZP[PZP[ONone&'18XoghcRegister's passed up the tree. If the stix code forces the register to live in a pre-decided machine register, it comes out as Fixed#; otherwise, it comes out as Any>, and the parent can decide which register to put it in.P\ghcP\s are the insn sequences generated by the insn selectors. They are really trees of insns to facilitate fast appending, where a left-to-right traversal yields the insns in the correct order.P]ghcP\s are the insn sequences generated by the insn selectors. They are really trees of insns to facilitate fast appending, where a left-to-right traversal (pre-order?) yields the insns in the correct order.XpghcGrab the Reg for a CmmRegXqghc(Convert a BlockId to some CmmStatic dataXrghcOCompute an expression into a register, but we don't mind which one it is.P\P]P^P]P^P\NoneHVX1 XsghcA "reverse zipper" of sorts. We store a list of blocks in two parts, the initial part from left to right and the remaining part stored in reverse order. This makes it easy to look the last/first element and append on both sides.XtghcDFor a non empty pair there is at least one element in the left part.Xughc`A non empty ordered sequence of basic blocks. It is suitable for serialization in this order.XvghcRLook at X number of blocks in two chains to determine if they are "neighbours".XwghcYOnly edges heavier than this are considered for fusing two chains into a single chain.XxghcgGiven the Chain A -> B -> C -> D and we break at C we get the two Chains (A -> B, C -> D) as result.XyghcFor a given list of chains try to fuse chains with strong edges between them into a single chain. Returns the list of fused chains together with a set of used edges. The set of edges is indirectly encoded in the chains so doesn't need to be considered for later passes.Xzghc]For a given list of chains and edges try to combine chains with strong edges between them.Paghc=Non deterministic! (Uniques) Sorts edges by weight and nodes.P_ghcCFG if we have one.ghcFunction to serializeP_P_None1PgPhPiPjPkPlPmPgPhPiPjPkPlPmNone1MPoPpPqPrPsPtPuPoPpPqPrPsPtPuNone1PwPxPyPzP{P|PwPxPyPzP{P|None1ǁPghcFor a jump instruction at the end of a block, generate fixup code so its vregs are in the correct regs for its destination.X{ghc.Construct a graph of register/spill movements.1Cyclic components seem to occur only very rarely.We cut some corners by not handling memory-to-memory moves. This shouldn't happen because every temporary gets its own stack slot.X|ghcdExpand out the destination, so InBoth destinations turn into a combination of InReg and InMem.X}ghcGenerate fixup code for a particular component in the move graph This component tells us what values need to be moved to what destinations. We have eliminated any possibility of single-node cycles in expandNode above.X~ghc(Move a vreg between these two locations.Pghcnmaps the unique of the blockid to the set of vregs that are known to be live on the entry to each block.ghcid of the current blockghc,branch instr on the end of the source block.Xghcnmaps the unique of the blockid to the set of vregs that are known to be live on the entry to each block.ghcacc blocks of fixup code.ghcid of the current blockghc,branch instr on the end of the source block.ghc&branch destinations still to consider.X|ghcsource of moveghcdestination of moveX~ghccurrent C stack delta.ghc%unique of the vreg that we're moving.ghcsource location.ghcdestination location.ghcmove instruction.PPNoneX1ޔXghcDo register allocation on some basic blocks. But be careful to allocate a block in an SCC only if it has an entry in the block map or it is the first block.Xghc*Do register allocation on this basic blockXghcmLoad the freeregs and current reg assignment into the RegM state for the basic block with this BlockId.Xghc-Do allocation for a sequence of instructions.Xghc'Do allocation for a single instruction.XghcQMark all these real regs as allocated, and kick out their vreg assignments.Xghc:Calculate a new location after a register has been loaded.Xghc=Load up a spilled temporary if we need to (read from memory).Xghc entry pointsghc&live regs on entry to each basic blockghc$instructions annotated with "deaths"Xghc entry pointsghc&live regs on entry to each basic blockghc$instructions annotated with "deaths"Xghc&live regs on entry to each basic blockghc"block to do register allocation onghcblock with registers allocatedXghc2map of what vregs are live on entry to each block.ghc/accumulator for instructions already processed.ghc%accumulator for blocks of fixup code.ghc'id of the current block, for debugging.ghc.liveness annotated instructions in this block.Xghc2map of what vregs are love on entry to each block.ghc/accumulator for instructions already processed.ghc*the id of the current block, for debuggingghc9the instr to have its regs allocated, with liveness info.464748494:4;4<4=4>4?4@4A4B4C4D4E4F4G4H4I4J4K4L4M4N4O4P4U4V4WPPNone1PghcLanguage ID used for Haskell.Pghc.Mapping of registers to DWARF register numbersPghc2Virtual register number to use for return address.VPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPVPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPNone2$_&PghcIUnwind instructions for a block. Will become part of the containing FDE.PghcLthese unwind points must occur in the same order as they occur in the blockPghclUnwind instructions for an individual procedure. Corresponds to a "Frame Description Entry" (FDE) in DWARF.Pghc%List of blocks. Order must match asm!PghcxInformation about unwind instructions for a procedure. This corresponds to a "Common Information Entry" (CIE) in DWARF.PghcA DWARF address range. This is used by the debugger to quickly locate which compilation unit a given address belongs to. This type assumes a non-segmented address-space.Xghc;Abbreviation codes used for encoding above records in the  .debug_info section.Xghc)Pseudo, used for marking the end of listsPghcGIndividual dwarf records. Each one will be encoded as an entry in the  .debug_info section.Pghc)label of DIE belonging to the parent tickXghc1Generate assembly for the given abbreviation codePghcUAbbreviation declaration. This explains the binary encoding we use for representing P1. Be aware that this must be updated along with P.Pghc Generate assembly for DWARF dataXghctPrints assembler data corresponding to DWARF info records. Note that the binary format of this is parameterized in  abbrevDecls and has to be kept in synch.Xghc'Close a DWARF info record with childrenPghc4Print assembler directives corresponding to a DWARF .debug_aranges address table entry.PghcHeader for the  .debug_frame section. Here we emit the "Common Information Entry" record that etablishes general call frame parameters and the default stack layout.XghcWrites a "Frame Description Entry" for a procedure. This consists mainly of referencing the CIE and writing state machine instructions to describe how the frame base (CFA) changes.XghcGenerates unwind information for a block. We only generate instructions where unwind information actually changes. This small optimisations saves a lot of space, as subsequent blocks often have the same unwind information.Xghc+Get DWARF register ID for a given GlobalRegXghc~Generate code for setting the unwind information for a register, optimized using its known old value in the table. Note that Sp/ is special: We see it as synonym for the CFA.Xghc'Print the register number of the given .' as an unsigned LEB128 encoded number.XghcBGenerates a DWARF expression for the given unwind expression. If spIsCFA is true, we see Sp0 as the frame base CFA where it gets mentioned.XghcGGenerate code for re-setting the unwind information for a register to  undefinedPghc)Align assembly at (machine) word boundaryQghc1Assembly for a single byte of constant DWARF dataQghc(Assembly for a two-byte constant integerXghc"Assembly for a constant DWARF flagQghc*Assembly for 4 bytes of dynamic DWARF dataXghc+Assembly for 4 bytes of constant DWARF dataQghcaAssembly for a DWARF word of dynamic data. This means 32 bit, as we are generating 32 bit DWARF.QghcoAssembly for a machine word of dynamic data. Depends on the architecture we are currently generating code for.QghcPrints a number in "little endian base 128" format. The idea is to optimize for small numbers by stopping once all further bytes would be 0. The highest bit in every byte signals whether there are further bytes to read.QghcSame as  pprLEBWord, but for a signed numberXghc{Generates a dynamic null-terminated string. If required the caller needs to make sure that the string is escaped properly.Xghc>Generate a string constant. We take care to escape the string.Xghc%Escape a single non-unicode characterQghcGenerate an offset into another section. This is tricky because this is handled differently depending on platform: Mac Os expects us to calculate the offset using assembler arithmetic. Linux expects us to just reference the target directly, and will figure out on their own that we actually need an offset. Finally, Windows has a special directive to refer to relative offsets. Fun.Xghc4the register to produce an unwinding table entry forghc&the old and new values of the register/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQ/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQPQNone23 Q ghc Generate DWARF/debug informationXghcBuild an address range entry for one proc. With split sections, each proc needs its own entry, since they may get scattered in the final binary. Without split sections, we could make a single arange based on the first/last proc.XghcEHeader for a compilation unit, establishing global format parametersXghcCCompilation unit footer, mainly establishing size of debug sectionsXghcSplits the blocks by procedures. In the result all nested blocks will come from the same procedure as the top-level block. See Note [Splitting DebugBlocks] for details.Xghc/Generate DWARF info for a procedure debug blockXghcGenerate DWARF info for a blockXghcrGenerates the data for the debug frame section, which encodes the desired stack unwind behaviour for the debuggerXghc8Generates unwind information for a procedure debug blockQ Q None &'Xg2CXghcuData accumulated during code generation. Mostly about statistics, but also collects debug data for DWARF generation.XghcNative code generated, for statistics. This might hold a lot of data, so it is important to clear this field as early as possible if it isn't actually required.Xghcbsee Note [Unwinding information in the NCG] and Note [What is this unwinding business?] in Debug.Xghc,Do native code generation on all these cmms.QghcComplete native code generation phase for a single top-level chunk of Cmm. Dumping the output of each stage along the way. Global conflict graph and NGC statsXghcLMake sure all blocks we want the layout algorithm to place have been placed.Xghc6Compute unwinding tables for the blocks of a procedureXghc Build a doc for all the imports.Qghcthe cmm to generate code forghc!sequence number of this top thingXghc+the native code generated for the procedureghc?unwinding tables for all points of all blocks of the procedurePPPPPPPPPPPP!P"PPPP Q Q QQ QPPPPPPPPPPPP!P"PPPP Q None2EQghc8additional files to be compiled with with the C compilerQQQQNoneF\2hXghcVlog warning in the monad, and if there are errors then throw a SourceError exception.Qghc<Deal with errors and warnings returned by a compilation stepIn order to reduce dependencies to other parts of the compiler, functions outside the "main" parts of GHC return warnings and errors as a parameter and signal success via by wrapping the result in a R_ type. This function logs the returned warnings and propagates errors as exceptions (of type >)./This function assumes the following invariants: {If the second result indicates success (is of the form 'Just x'), there must be no error messages in the first result.If there are no error messages, but the second result indicates failure there should be warnings in the first result. That is, if the action failed, it must have been due to the warnings (i.e., -Werror).XghcBlike ioMsgMaybe, except that we ignore error messages and return R instead.Qghc+Lookup things in the compiler's environmentQghcRename some import declarationsQ ghc+parse a file, returning the abstract syntaxXghcFIf the renamed source has been kept, extract it. Dump it if requested.Q"ghcHRename and typecheck a module, additionally returning the renamed syntaxXghcBRename and typecheck a module, but don't return the renamed syntaxQ$ghc$Convert a typechecked module to CoreQ&ghcMake a >` from the results of typechecking. Used when typechecking only, as opposed to full compilation.XghcThis function runs GHC's frontend with recompilation avoidance. Specifically, it checks if recompilation is needed, and if it is, it parses and typechecks the input module. It does not write out the results of typechecking (See compileOne and hscIncrementalCompile).Q+ghcGiven a =+, parses and typechecks it, returning the @ resulting from type-checking.XghcCheck that the safe imports of the module being compiled are valid. If not we either issue a compilation error if the module is explicitly using Safe Haskell, or mark the module as unsafe if we're in safe inference mode.XghcValidate that safe imported modules are actually safe. For modules in the HomePackage (the package the module we are compiling in resides) this just involves checking its trust type is Safe or  Trustworthy. For modules that reside in another package we also must check that the external package is trusted. See the Note [Safe Haskell Trust Check] above for more information.WThe code for this is quite tricky as the whole algorithm is done in a few distinct phases in different parts of the code base. See RnNames.rnImportDecl for where package trust dependencies for a module are collected and unioned. Specifically see the Note [RnNames . Tracking Trust Transitively] and the Note [RnNames . Trust Own Package].Q,ghc&Check that a module is safe to import.We return True to indicate the import is safe and False otherwise although in the False case an exception may be thrown first.Q-ghcGReturn if a module is trusted and the pkgs it depends on to be trusted.Xghc.Is a module trusted? If not, throw or log errors depending on the type. Return (regardless of trusted or not) if the trust type requires the modules own package be trusted and a list of other packages required to be trusted (these later ones haven't been checked) but the own package trust has been.Xghc'Check the list of packages are trusted.Xghc>Set module to unsafe and (potentially) wipe trust information.Make sure to call this method to set a module to inferred unsafe, it should be a central and single failure method. We only wipe the trust information when we aren't in a specific Safe Haskell mode.While we only use this for recording that a module was inferred unsafe, we may call it on modules using Trustworthy or Unsafe flags so as to allow warning flags for safety to function correctly. See Note [Safe Haskell Inference].Xghc.Figure out the final correct safe haskell modeQ2ghcCompile to hard-code.Q5ghc9Compile a stmt all the way to an HValue, but don't run itWWe return Nothing to indicate an empty statement (or comment only), not a parse error.Q6ghc9Compile a stmt all the way to an HValue, but don't run itWWe return Nothing to indicate an empty statement (or comment only), not a parse error.Q8ghcCompile a declsQ:ghcCompile a declsQ<ghc|Load the given static-pointer table entries into the interpreter. See Note [Grand plan for static forms] in StaticPtrTable.Q>ghc*Typecheck an expression (but don't run it)Q?ghc-Find the kind of a type, after generalisation XghcKeep renamed source?XghcKeep renamed source?Q2ghcJust f  = _stub.c is fQ6ghc The statementghc The sourceghc Starting lineQ7ghcThe parsed statementQ8ghc The statementQ:ghc The statementghc The sourceghc Starting lineQ>ghcThe expressionQ?ghcNormalise the typeghcThe type as a stringghc-Resulting type (possibly normalised) and kind;>>>>>>MMMMQQQQQQQQQQQ Q!Q"Q#Q$Q%Q&Q'Q(Q)Q*Q+Q,Q-Q.Q/Q0Q1Q2Q3Q4Q5Q6Q7Q8Q9Q:Q;Q<Q=Q>Q?Q@QAQBQCQDQEQF;QQQ*>>>>>>Q(Q4Q2Q3Q Q"Q$Q&Q.Q,Q-QBQQQQQQQ5QAQ6Q7Q8Q9Q:Q;Q>MMMMQ=Q?Q@QCQDQ!Q/Q%Q#QQ0Q1Q)Q+Q'QEQQFQ< None"#&'/=?FHVX`2Aghc(Releases the external interpreter state.XghcSForce the contents of the Serialized value so weknow it doesn't contain any bottomsXghc8Adds a mod finalizer reference to the local environment.Xghcvcommunicate with a remotely-running TH computation until it finishes. See Note [Remote Template Haskell] in librariesghci GHCi/TH.hs.Xghc+Read a value of type QResult from the iservXghcRetrieve (or create, if it hasn't been created already), the remote TH state. The TH state is a remote reference to an IORef QState living on the server, and we have to pass this to each RunTH call we make.>The TH state is stored in tcg_th_remote_state in the TcGblEnv.XghcAnnotate (with TH.SigT) a type if the first parameter is True and if the type contains a free variable. This is used to annotate type patterns for poly-kinded tyvars in reifying class and type instances. See 5Note [Reified instances and explicit kind signatures].XghcFor every argument type that a type constructor accepts, report whether or not the argument is poly-kinded. This is used to eventually feed into X. See 5Note [Reified instances and explicit kind signatures].AAAAABBBBBBBBBQGQHBBBBBBBAABAQGQHAABNone"#F\2ԛQJghcFailure modes for Qj.QKghc returned R.QLghcR: The module was compiled. R: The module was :loaded.QMghcThe  was defined interactively.Xghc,Finds the enclosing top level function name Xghc=Update fixity environment in the current interactive context.QRghcdefault ExecOptionsQSghc3Run a statement in the current interactive context.QTghcLike QS, but takes a parsed statement as argument. Useful when doing preprocessing on the AST before execution, e.g. in GHCi (see GHCi.UI.runStmt).QVghcVRun some declarations and return any user-visible names that were brought into scope.QWghcLike QV, but takes parsed declarations as argument. Useful when doing preprocessing on the AST before execution, e.g. in GHCi (see GHCi.UI.runStmt).Q^ghc'Set the interactive evaluation context.m(setContext imports) sets the ic_imports field (which in turn determines what is in scope at the prompt) to imports>, and constructs the ic_rn_glb_env environment to reflect it.We retain in scope all the things defined at the prompt, and kept in ic_tythings. (Indeed, they shadow stuff from ic_imports.)Q`ghcGet the interactive evaluation context, consisting of a pair of the set of modules from which we take the full top-level scope, and the set of modules from which we take just the exports respectively.QaghcReturns True[ if the specified module is interpreted, and hence has its full top-level scope available.Qbghc>Looks up an identifier in the current interactive context (for :info) Filter the instances by the ones whose tycons (or clases resp) are in scope (qualified or otherwise). Otherwise we list a whole lot too many! The exact choice of which ones to show, and which to hide, is a judgement call. (see Trac #1581)Qcghc=Returns all names in scope in the current interactive contextQdghc Returns all x\s in scope in the current interactive context, excluding any that are internally-generated.Qeghc:Parses a string as an identifier, and returns the list of Gs that the identifier can refer to in the current interactive context.QfghcReturns True! if passed string is a statement.QgghcReturns True, if passed string has an import declaration.QhghcReturns True+ if passed string is an import declaration.QighcReturns True' if passed string is a declaration but  not a splice.Qkghc@Get the type of an expression Returns the type as described by MQlghcGet the kind of a typeQmghceParse an expression, the parsed expression can be further processed and passed to compileParsedExpr.Qnghc@Compile an expression, run it, and deliver the resulting HValue.Qoghc@Compile an expression, run it, and deliver the resulting HValue.QpghcYCompile a parsed expression (before renaming), run it, and deliver the resulting HValue.QrghcACompile an expression, run it and return the result as a Dynamic.QSghc a statement (bind or expression)_+++++++++++++++++++++++++++++++++++JJJJJJJJJJJJJJQJQKQMQLQNQOQPQQQRQSQTQUQVQWQXQYQZQ[Q\Q]Q^Q_Q`QaQbQcQdQeQfQgQhQiQjQkQlQmQnQoQpQqQrQsQtQuQvQw_++++++++++++++++++QSQT++++++QR+++++++QYQUQVQWQfQgQhQiQX++++Q\Q]QNQPQQQOQZQ[Q^Q`Q_QcQdQaQbQkQlQeQjQJQKQMQLQsQtQmQqQnQrQoQpJJJJJJJJJJJJJJQvQuQwNone$\3S QyghcsJust preprocess a file, put the result in a temp. file (used by the compilation manager during the summary phase).eWe return the augmented DynFlags, because they contain the result of slurping in the OPTIONS pragmasQzghcCompileFCompile a single module, under the control of the compilation manager.This is the interface between the compilation manager and the compiler proper (hsc), where we deal with tedious details like reading the OPTIONS pragma from the source file, converting the C or assembly that GHC produces into an object file, and compiling FFI stub files.@NB. No old interface can also mean that the source has changed.Xghc:Run a compilation pipeline, consisting of multiple phases.This is the interface to the compilation pipeline, which runs a series of compilation steps on a single source file, specifying at which stage to stop.The DynFlags can be modified by phases in the pipeline (eg. by OPTIONS_GHC pragmas), and the changes affect later phases in the pipeline.Xghc2pipeLoop runs phases until we reach the stop phaseQghc/Computes the next output filename after we run  next_phase. Like Q, but it operates in the C9 monad (which specifies all of the ambient information.)QghcwComputes the next output filename for something in the compilation pipeline. This is controlled by several variables:  !: the last phase to be run (e.g.  stopPhasen). This is used to tell if we're in the last phase or not, because in that case flags like -o may be important.C|: is this intended to be a C} or C~K build output? Temporary files just go in a fresh temporary name.S3: what was the basename of the original input file?A: the obvious thing 8: the phase we want to determine the output filename of.Maybe ModLocation: the   of the module we're compiling; this can be used to override the default output of an object file. (TODO: do we actually need this?)Xghc`The fast LLVM Pipeline skips the mangler and assembler, emitting object code directly from llc.Eslow: opt -> llc -> .s -> mangler -> as -> .o fast: opt -> llc -> .ohidden flag: -ffast-llvmhif keep-s-files is specified, we need to go through the slow pipeline (Kavon Farvardin requested this).XghcLLVM Options. These are flags to be passed to opt and llc, to ensure consistency we list them in pairs, so that they form groups.QghcwEach phase in the pipeline returns the next phase to execute, and the name of the file in which the output was placed.We must do things dynamically this way, because we often don't know what the rest of the phases will be until part-way through the compilation: for example, an {- OPTIONS -fasm -} at the beginning of a source file can change the latter stages of the pipeline from taking the LLVM route to using the native code generator.XghcLinking a static lib will not really link anything. It will merely produce a static archive of all dependent static libraries. The resulting library will still need to be linked with any remaining link flags.XghcFigure out if a source file was modified after an output file (or if we anyways need to consider the source file modified since the output is gone).QghcBWhat phase to run after one of the backend code generators has runXghcFind out path to  ghcversion.h fileQyghcinput filenameghc8optional buffer to use instead of reading the input fileghcstarting phaseQzghc!summary for module being compiledghc module N ...ghc... of Mghcold interface, if we have oneghcold linkable, if we have oneghc'the complete HomeModInfo, if successfulQ{ghc!summary for module being compiledghc module N ...ghc... of Mghcold interface, if we have oneghcold linkable, if we have one ghc'the complete HomeModInfo, if successfulXghc When to stopghcCompilation environmentghc>Pipeline input file name, optional buffer and maybe -x suffixghc)original basename (if different from ^^^)ghcOutput filenameghc*A ModLocation, if this is a Haskell moduleghcforeign objectsghc(final flags, output filename)Xghc When to startghcCompilation environmentghcInput filenameghc*A ModLocation, if this is a Haskell moduleghcforeign objects, if we have oneghc(final flags, output filename)Xghcpairs of (opt, llc) argumentsQghcRun this phaseghcname of the input fileghc.for convenience, we pass the current dflags inXghc#destination file we are looking forghc(last time of modification of source fileghc$do we need to regenerate the output?'2*CCCCCCCCCCCCCCCCCCCCCCQyQzQ{Q|Q}Q~QQQQQQQQQQ'Q~QQQyQzQ{Q|CCCCCCCCCCCCCCCCCCQQCCQQCCQQQQ}2*QNone"#$X\3#Xghc Convenience named arguments for X5 only used to make code more readable, not exported.QghcR indicating if a module is a boot module or not. We need to treat boot modules specially when building compilation graphs, since they break cycles. Regular source files and signature files are treated equivalently.Xghc?The graph of modules to compile and their corresponding result X and X.XghcEach module is given a unique X) to redirect compilation messages to. A RU value contains the result of compilation, and denotes the end of the message queue.Xghc|Stability tells us which modules definitely do not need to be recompiled. There are two main reasons for having stability:zavoid doing a complete upsweep of the module graph in GHCi when modules near the bottom of the tree have not changed.to tell GHCi when it can load object code: we can only load object code for a module when we also load object code fo all of the imports of the module. So we need to know that we will definitely not be recompiling any of these modules, and we can use the object code.nThe stability check is as follows. Both stableObject and stableBCO are used during the upsweep phase later.  stable m = stableObject m || stableBCO m stableObject m = all stableObject (imports m) && old linkable does not exist, or is == on-disk .o && date(on-disk .o) > date(.hs) stableBCO m = all stable (imports m) && date(BCO) > date(.hs) ,These properties embody the following ideas:if a module is stable, then:pif it has been compiled in a previous pass (present in HPT) then it does not need to be compiled or re-linked.~if it has not been compiled in a previous pass, then we only need to read its .hi file from disk and link it to produce a >.uif a modules is not stable, we will definitely be at least re-linking, and possibly re-compiling it during the XW. All non-stable modules can (and should) therefore be unlinked before the X.Note that objects are only considered stable if they only depend on other objects. We can't link object code against byte code.Note that even if an object is stable, we may end up recompiling if the interface is out of date because an *external* interface has changed. The current code in GhcMake handles this case fairly poorly, so be careful.Qghc>Describes which modules of the module graph need to be loaded.Qghc&Load all targets and its dependencies.Qghc0Load only the given module and its dependencies.QghcKLoad only the dependencies of the given module, but not the module itself.QghcrPerform a dependency analysis starting from the current targets and update the session with the new module graph.(Dependency analysis entails parsing the importE directives and may therefore require running certain preprocessors.Note that each = in the module graph caches its A . These A are determined by the current session A and the OPTIONS and LANGUAGEA pragmas of the parsed module. Thus if you want changes to the A6 to take effect you need to call this function again.Qghc!Perform dependency analysis like QS but return a partial module graph even in the face of problems with some modules.Modules which have parse errors in the module header, failing preprocessors or other issues preventing them from being summarised will simply be absent from the returned module graph.Unlike Q this function will not update > with the new module graph.QghcTry to load the program. See Q for the different modes.+This function implements the core of GHC's --make mode. It preprocesses, compiles and loads the specified modules, avoiding re-compilation wherever possible. Depending on the target (see  8C) compiling and loading may result in files being created on disk. Calls the C> after each compiling each module, whether successful or not.Throw a > if errors are encountered before the actual compilation starts (e.g., during dependency analysis). All other errors are reported using the C.QghcGeneralized version of Q which also supports a custom Q (for reporting progress) and >! (generally produced by calling Q.XghcFinish up after a load.XghcDForget the current program, but retain the persistent info in HscEnvXghcDiscard the contents of the InteractiveContext, but keep the DynFlags. It will also keep ic_int_print and ic_monad if their names are from external packages.XghcmIf there is no -o option, guess the name of target executable by using top-level source file name as a base.XghcPrune the HomePackageTable+Before doing an upsweep, we can throw away:For non-stable modules:all ModDetails, all linked codeJall unlinked code that is out of date with respect to the source fileThis is VERY IMPORTANT otherwise we'll end up requiring 2x the space at the end of the upsweep, because the topmost ModDetails of the old HPT holds on to the entire type environment from the previous compilation.XghcXReturn (names of) all those in modsDone who are part of a cycle as defined by theGraph.Xghc UnloadingXghcBuild a Xj out of a list of strongly-connected modules, also returning the first, if any, encountered module cycle.Qghc Tests if an  9 is a boot file, primarily for constructing elements of X.Xghc(The entry point to the parallel upsweep.!See also the simpler, sequential X.Xghc The upsweepmThis is where we compile each module in the module graph, in a pass from the bottom to the top of the graph.DThere better had not be any cyclic groups here -- we check for them.XghcCompile a single module. Always produce a Linkable for it if successful. If no compilation happened, return the old Linkable.XghcGiven a non-boot ModSummary msC of a module, for which there exists a corresponding boot file in graph, return the set of modules which transitively depend on this boot file. This function is slightly misnamed, but its name "getModLoop" alludes to the fact that, when getModLoop is called with a graph that does not contain ms (non-parallel case) or is an SCC with hs-boot nodes dropped (parallel-case), the modules which depend on the hs-boot file are typically (but not always) the modules participating in the recursive module loop. The returned list includes the hs-boot file.Example: let g represent the module graph: C.hs A.hs-boot imports C.hs B.hs imports A.hs-boot A.hs imports B.hs genModLoop A.hs g == Just [A.hs-boot, B.hs, A.hs]mIt would also be permissible to omit A.hs from the graph, in which case the result is [A.hs-boot, B.hs]Example: A counter-example to the claim that modules returned by this function participate in the loop occurs here:let g represent the module graph: C.hs A.hs-boot imports C.hs B.hs imports A.hs-boot A.hs imports B.hs D.hs imports A.hs-boot genModLoop A.hs g == Just [A.hs-boot, B.hs, A.hs, D.hs]iArguably, D.hs should import A.hs, not A.hs-boot, but a dependency on the boot file is not illegal.Qghc$Topological sort of the module graph Calculate SCCs of the module graph, possibly dropping the hi-boot nodes The resulting list of strongly-connected-components is in topologically sorted order, starting with the module(s) at the bottom of the dependency graph (ie compile them first) and ending with the ones at the top.'Drop hi-boot nodes (first boolean arg)?Falsea: treat the hi-boot summaries as nodes of the graph, so the graph must be acyclicTrue: eliminate the hi-boot nodes, and instead pretend the a source-import of Foo is an import of Foo The resulting graph has no hi-boot nodes, but can be cyclicXghcIf there are {- SOURCE -} imports between strongly connected components in the topological sort, then those imports can definitely be replaced by ordinary non-SOURCE imports: if SOURCE were necessary, then the edge would be part of a cycle.QghcDownsweep (dependency analysis)Chase downwards from the specified root set, returning summaries for all home modules encountered. Only follow source-import links.We pass in the previous collection of summaries, which is used as a cache to avoid recalculating a module summary if the source is unchanged.The returned list of [ModSummary] nodes has one node for each home-package module, plus one for any hs-boot files. The imports of these nodes are all there, including the imports of non-home-package modules.XghcUpdate the every ModSummary that is depended on by a module that needs template haskell. We enable codegen to the specified target, disable optimization and change the .hi and .o file locations to be temporary files. See Note [-fno-code mode]XghcUpdate the every ModSummary that is depended on by a module that needs unboxed tuples. We enable codegen to the specified target, disable optimization and change the .hi and .o file locations to be temporary files.}This is used used in order to load code that uses unboxed tuples into GHCi while still allowing some code to be interpreted.XghcHelper used to implement X and X. In particular, this enables unoptimized code generation for all modules that meet some condition (first parameter), or are dependencies of those modules. The second parameter is a condition to check before marking modules for code generation.XghcIReturns the dependencies of the ModSummary s. A wrinkle is that for a {- SOURCE 8-} import we return *both* the hs-boot file *and* the source file as "dependencies". That ensures that the list of all relevant modules always contains B.hs if it contains B.hs-boot. Remember, this pass isn't doing the topological sort. It's just gathering the list of all relevant ModSummariesQghcLike Q, but for SOURCE imports.Qghc2All of the (possibly) home module imports from a =; that is to say, each of these module names could be a home import if an appropriately named file existed. (This is in contrast to package qualified imports, which are guaranteed not to be home imports.)Qghcexcluded modulesghcallow duplicate rootsQghcexcluded modulesghcallow duplicate rootsghcpossibly empty Bag of errors and a module graph.Xghc0The number of workers we wish to run in parallelX ghcThe module we wish to compileghc-The map of home modules and their result MVarghc:The list of all module loops within the compilation graph.ghcThe thread-local DynFlagsghc The messagerghc/The callback for cleaning up intermediate filesghc>The semaphore for limiting the number of simultaneous compilesghc7The MVar that synchronizes updates to the global HscEnvghc The old HPT ghcSets of stable objects and BCOs ghcThe index of this module ghcThe total number of modules ghcThe result of this compileXghc!HPT from last time round (pruned)ghc#stable modules (see checkStability)ghc"How to clean up unwanted tmp filesghcMods to do (the worklist)ghcReturns: 3A flag whether the complete upsweep was successful.The > in the monad has an updated HPT*A list of modules which succeeded loading.QghcDrop hi-boot nodes? (see below)ghcRoot module name. If Nothing, use the full graph.Xghc1optional source code buffer and modification timeMMQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQMMQQQQNone $%HPVX\4`;Qghc"Container for information about a  .Qghc.A CoreModule consists of just the fields of a >b that are needed for the Q interface.Qghc Module nameQghc2Type environment for types declared in this moduleQghc DeclarationsQghcSafe Haskell modeQghc~The result of successful desugaring (i.e., translation to core). Also contains all the information of a typechecked module.QghcNThe result of successful typechecking. It also contains the parser result.Qghc!The result of successful parsing.QghcInstall some default exception handlers and run the inner computation. Unless you want to handle exceptions yourself, you should wrap this around the top level of your program. The default handlers output the error message(s) to stderr and exit cleanly.QghcMThis function is no longer necessary, cleanup is now done by runGhc/runGhcT.QghcRun function for the C monad.0It initialises the GHC session and warnings via Qk. Each call to this function will create a new session which should not be shared among several threads."Any errors not handled inside the C) action are propagated as IO exceptions.QghcRun function for C monad transformer.0It initialises the GHC session and warnings via Qk. Each call to this function will create a new session which should not be shared among several threads.QghcInitialise a GHC session.If you implement a custom Cz you must call this function in the monad run function. It will initialise the session variable and clear all warnings.The first argument should point to the directory where GHC's library files reside. More precisely, this should be the output of ghc --print-libdirj of the version of GHC the module using this API is compiled with. For portability, you should use the  ghc-paths package, available at  ,http://hackage.haskell.org/package/ghc-paths.XghcThe binutils linker on ARM emits unnecessary R_ARM_COPY relocations which breaks tables-next-to-code in dynamically linked modules. This check should be more selective but there is currently no released version where this bug is fixed. See  5https://sourceware.org/bugzilla/show_bug.cgi?id=16177 and 7https://ghc.haskell.org/trac/ghc/ticket/4210#comment:29Qghc#Updates both the interactive and program DynFlags in a Session. This also reads the package database (unless it has already been read), and prepares the compilers knowledge about packages. It can be called again to load new packages: just add new package flags to (packageFlags dflags).\Returns a list of new packages that may need to be linked in using the dynamic linker (see  linkPackages) as a result of new package flags. If you are not doing linking or doing static linking, you can ignore the list of packages returned.QghcSets the program Ai. Note: this invalidates the internal cached module graph, causing more work to be done the next time Q is called.QghcaSet the action taken when the compiler produces a message. This can also be accomplished using Q , but using Q- avoids invalidating the cached module graph.QghcReturns the program A.QghcSet the Ae used to evaluate interactive expressions. Note: this cannot be used for changes to packages. Use Q, or Q and then copy the   into the interactive DynFlags.QghcGet the A* used to evaluate interactive expressions.XghcYChecks the set of new DynFlags for possibly erroneous option combinations when invoking Q@ and friends, and if found, returns a fixed copy (if possible).Qghc Sets the targets for this session. Each target may be a module name or a filename. The targets correspond to the set of root modules for the program/library. Unloading the current program is achieved by setting the current set of targets to be empty, followed by Q.Qghc"Returns the current set of targetsQghcAdd another target.QghcRemove a targetQghcQAttempts to guess what Target a string refers to. This function implements the --make(/GHCi command-line syntax for filenames:Rif the string looks like a Haskell source filename, then interpret it as suchVif adding a .hs or .lhs suffix yields the name of an existing file, then use that/otherwise interpret the string as a module nameQghcInform GHC that the working directory has changed. GHC will flush its cache of module locations, since it may no longer be valid.Note: Before changing the working directory make sure all threads running in the same session have stopped. If you change the working directory, you should also unload the current program (set targets to empty, followed by load).Qghc Return the =! of a module with the given name.1The module must be part of the module graph (see > and >9). If this is not the case, this function will throw a >.lThis function ignores boot modules and requires that there is only one non-boot module with the given name.QghcParse a module. Throws a > on parse error.Qghc%Typecheck and rename a parsed module. Throws a > if either fails.QghcDesugar a typechecked module.Qghc3Load a module. Input doesn't need to be desugared.iA module must be loaded before dependent modules can be typechecked. This always includes generating a > and, depending on the  8#, may also include code generation.This function will always cause recompilation and will always overwrite previous compilation results (potentially files on disk).QghcOThis is the way to get access to the Core bindings corresponding to a module.  compileToCore parses, typechecks, and desugars the module, then returns the resulting Core module (consisting of the module name, type declarations, and function declarations) if successful.QghcbLike compileToCoreModule, but invokes the simplifier, so as to return simplified and tidied Core.Qghc Get the module dependency graph.QghcReturn True  == module is loaded.Qghc8Return the bindings for the current interactive session.Qghc9Return the instances for the current interactive session.Qghc#Request information about a loaded  Qghc2The list of top-level entities defined in a moduleQghcmReturns the instances defined by the specified module. Warning: currently unimplemented for package modules.Qghc!Retrieve module safe haskell modeQghcTLooks up a global name: that is, any top-level name in any visible module. Unlike Rf, lookupGlobalName does not use the interactive context, and therefore does not require a preceding Q^.Qghc"get the GlobalRdrEnv for a sessionQghcGRetrieve all type and family instances in the environment, indexed by f. Each name's lists will contain every instance in which that name is mentioned in the instance head.Qghcprint a u0, adding parentheses if the name is an operator.Qghc9Return module source as token stream, including comments.SThe module must be in the module graph and its source must be available. Throws a > on parse error.Qghc.Give even more information on the source than QB This function allows reconstructing the source completely with Q.QghcGiven a source location and a StringBuffer corresponding to this location, return a rich token stream with the source associated to the tokens.Qghc/Take a rich token stream such as produced from Qf and return source code almost identical to the original code (except for insignificant whitespace.)QghcTakes a   and possibly a N, and consults the filesystem and package database to find the corresponding  +, using the algorithm that is used for an import declaration.QghcLike Qf, but differs slightly when the module refers to a source file, and the file has not been loaded via Q. In this case, Q/ will throw an error (module not loaded), but Q_ will check to see whether the module can also be found in a package, and if so, that package  M will be returned. If not, the usual module-not-found error will be thrown.QghcBCheck that a module is safe to import (according to Safe Haskell).{We return True to indicate the import is safe and False otherwise although in the False case an error may be thrown first.QghcGReturn if a module is trusted and the pkgs it depends on to be trusted.Qghc.Set the monad GHCi lifts user statements into.;Checks that a type (in string form) is an instance of the GHC.GHCi.GHCiSandboxIOO type class. Sets it to be the GHCi monad if it is, throws an error otherwise.Rghc.Get the monad GHCi lifts user statements into.Rghc Returns the m for a . The 2 may refer to any entity known to GHC, including s defined using runStmt.Rghc&A pure interface to the module parser.QghcSee argument to Q.ghcThe action to perform.QghcSee argument to Q.ghcThe action to perform.Qghclvisible modules. An orphan instance will be returned if it is visible from at least one module in the list.ghchmodules to load. If this is not specified, we load modules for everything that is in scope unqualified.Rghc6Haskell module source text (full Unicode is supported)ghc the flagsghc#the filename (for source locations) ? : S @ ; + , - . / 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 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 { | } ~  A 5 ]KJH 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 { | } ~        defm""""n !"#$%&,-.UWV auwv~     xzy     E4fcb !"#$%&'()*+,-./012356789:;<=>?@ABCDFGHIJKLMNOPQRSTUVWXYZ[\]^_`adeghijklmnopqrsuvwxyzGHUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~8888998899899988999 9 9 9 9 999;;;;;;;;;;";#;%;$;&::::::;1;2;3;4;5;6;7;8;9;:;;;S;k;V;z;L;Z;T;N;R;X;_;];g;c;b;`;Y;d;O;\;[;f;U;e;h;a;i;M;P;Q;W;^;j;l;m;n;o;p;q;r;s;t;u;v;w;x;y;{;|;};~;;;    ) 1 7 = > ? A V f g i j"""""##% %%%%%%%%%%%%%%%%%%% %!%"%#%$%%%&%'%(%)%*%+%,%-%.%/%0%%%%%%%%%%%%%%%%%%%%&&& (\({(|((((((((+++++++++++++++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,,, , , , , ,,,,%,,,,,,,, ,,,!,,,&,,,,,",#,$,',(,),*,+,,,-,.,/,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,{,|,},~,,,,,,,,,,,,,,,,,,,,,,,,,477778E8F8G8H8I8J8K8L8M8N8O8P8Q8R8S8T8U8V8W8X8Y8^8[8_8Z8c8\8]8`8a8b8d8e8f8g8h8i8j8l8k8m8o8n8p8q8r8s8t8u8v8w8x8y8z8{8|8}8~8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888889999999999999999 9!9"9#9$9%9&92939495969798999:9;9<9=9>9?9@9A9B9C9D9E9F9G9H9I9J9K9L9M9N9O9P9Q9R9S9T9U9V9W9X9Y9Z9[9\9]9^9_9`9a9b9c9d9e9f9g9h9i9j9k9l9m9n9o9p9q9r9s9t9u9v9w9x9y9z9{9|9}9~999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999:999::::::: : ::: : : ::::::::::::::::::: :!:":#:$:%:&:':(:):*:+:,:-:.:/:0:1:5:6:>:2:3:4: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::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;; ; ; ; ; ;;;;;;;;;;;;;; ;!;';(;);*;,;+;-;.;0;/;<;=;>;?;@;A;B;C;D;E;F;G;H;I;J;K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<< < < < < <<<<<<<<<<<<<<<<<<< ===========>>>A>B>C>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>??h?i?k?m?n?q?sCCCCCCCCCHMMMMMQJQKQMQLQNQOQRQSQTQUQVQWQXQYQZQ[Q\Q]Q^Q`QaQbQcQdQeQfQgQhQiQjQkQlQmQnQoQpQqQrQsQtQwQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRQQQCCCCC>QQQC??hA 5 ]KJH 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 { | } ~  ? : S @ ; + , - . / 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 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 { | } ~   !"#$%&  aQCQQQQQQ>>>>>>>> QQQQQQQQQQQ>A>B>CUWVCCQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ>?n?i?q?k?m==>===========>?s QQQQQQQQQQQQQQQQQQQ>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> QSQT++++++QR+++++++QYQUQVQWQXQ^Q`QRQQQQQQQQcQdQQaQbQsQtQQkMMMMQlQeRQmQqQnQrQoQpQjQJQKQMQLMQfQgQhQi++++++++++++++++++++RQOQ\Q]QNRRQwQ,,,,,,,,,+++QZQ[    Q~uwvxzy(\(((|((((((Q({  V i 7 ? 1 ) = > A j g f"&Q%& &%%%%%7777H4n##""efd""m""""QQQQRu E4fcb !"#$%&'()*+,-./012356789:;<=>?@ABCDFGHIJKLMNOPQRSTUVWXYZ[\]^_`adeghijklmnopqrs    vwxyzQNone4GR R NoneF4RghcThe :print & friends commandsXghcoGive names, and bind in the interactive environment, to all the suspensions included (inductively) in a termRRRRRRNone=?\4+Xghc&Backpack environment. NB: this has a C and not an >&, because we are going to update the > as we go.Xghc The sessionXghc,The filename of the bkp file we're compilingXghc2Table of source units which we know how to compileXghc{When a package we are compiling includes another package which has not been compiled, we bump the level and compile that.XghcBackpack monad is a C7 which also maintains a little extra state beyond the C, c.f. X.Xghc9Tiny enum for all types of Backpack operations we may do.XghcSA compilation operation which will result in a runnable executable being produced.XghcPA type-checking operation which produces only interface files, no object files.XghcNA compilation operation which produces both interface files and object files.Rghc'Entry point to compile a Backpack file.XghcLCreate a temporary Session to do some sort of type checking or compilation.Xghc\Compute the dependencies with instantiations of a syntactic HsUnit; e.g., wherever you see dependency p[A= A] in a unit file, return the  corresponding to p[A= A]. The  include_sigs4 parameter controls whether or not we also include dependency signature" declarations in this calculation..Invariant: this NEVER returns InstalledUnitId.XghcGet the current X.Xghc:Get the nesting level, when recursively compiling modules.XghcApply a function on A on an >XghcRun a X0 computation, with the nesting level bumped one.XghcUpdate the EPS from a C(. TODO move to appropriate library spot.XghcGet the EPS from a C.XghcRun X in C.XghcIPrint a compilation progress message, but with indentation according to level (for nested compilation).Xghc Creates a Q? for Backpack compilation; this is basically a carbon copy of Q* but calling X, which handles indentation.Xghc for Backpack messages; here we usually want the module to be qualified (so we can tell how it was instantiated.) But we try not to qualify packages so we can use simple names for them.Xghc2Message when we initially process a Backpack unit.Xghc,Message when we instantiate a Backpack unit.Xghc(Message when we include a Backpack unit.XghcGThis is our version of GhcMake.downsweep, but with a few modifications: Every module is required to be mentioned, so we don't do any funny business with targets or recursively grabbing dependencies. (We could support this in principle).GWe support inline modules, whose summary we have to synthesize ourself.iWe don't bother trying to support GhcMake for now, it's more trouble than it's worth for inline modules.Xghc\Up until now, GHC has assumed a single compilation target per source file. Backpack files with inline modules break this model, since a single file may generate multiple output files. How do we decide to name these files? Should there only be one output file? This function our current heuristic, which is we make a "fake" module and use that.Xghc>Create a new, externally provided hashed unit id from a hash.RRXOPQORSOTUOTVOTWORXOTYZ[O\O]^O]_O]`O]aObcOdeOdfOghOijOikOilOilOmnOopOoqOorOstOuvOwxOyzOy{Oy|OyOo}Oo~O\OOOTOTOF      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMMNNOPQRSTUVWXYZ[\]^_`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${$|$}$~$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& & & & & &&&&&&&&&&&&&&&&&&& &!&"&#&$&%&&&'()''(#($(%(&('((()(*(+(,(-(.(*(+(,(-(.(0(1(2(3)))))/)0)1)2)3)4)5)6)7)8)9*****:*;*e*<**=*n*>*?*@*A+B+C+D+E,F-G...H.I.JKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~/////////////////////////////0000000000000000000000000000 0 0 0 0 0000000000000000000 0!0"11111#1$1%1&1'1(1)1*1+1,1-1.1/10111213141516172828292:2;222<2=2>3?3@3A3B3C3D3E F G H I J K L M N O P Q R S T4U4U4V4W4X4Y4Z4[4\4]5^5_5`5a5b5c5c5d5e5f5g5h5i5j5k5l5m5n5o55p5q5r5s5t55u5v5w5x5y5z5{5|5}5~55555555555555555555555555555555555555                                                                                            u   o p q r                         v w x z y    { | } ~                                   ! " # $ % & ' ( ) * + , - . / 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 b6c6d6e696f6g6h6i6j6k676l686m6n6o:p:q:r:s;;;;;t;u;v;w;x;y;z;{;|;};~;;;<<<<<<<<<<<<<<<<<<<<<<==============>>>>>>>>>>>??????????????????????????????????????????????????????????????????????????????????????????????? ? ? ? ? ??@@@@@@@AAAAAAAAAAAA A!B"C#C$C%C&C'C(C)C*C+C,C-C.C/C0C1C2C3C4C5C6C6C7C8C9C:C;C<CC=C>C?C@CACBCCCDCECFCGCGCHCICCCJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC[C\C]C]C^C_C`CaCbCcCdCdCeCfCgChCiCjCkCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzC{C|C}C~CCCCCCCCCCCCClCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 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 <C =C >C ?C @C AC BC CC DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC WC XD YD ZDDD [D \D ]D ^D _D `D aD bD cD dD eD fD gD hD iD jD kD lD mD nD oD pD qD rD sD tD uD vD wD xD yD zD {D |D }D ~D D D D D D D D D E E E E E EEE E E E E E E E E E E E E E E E E E E E E FFF F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F GGG 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 HHH 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 0I 1I 2I 3I 4I 5I 6I 6I 7I 8I 9I :I ;JJJ <J =J >J ?J @J AJ BJ CJ DJ EJ FJ GJ HJ IJ JJ KJ LJ MJ NJ OJ PJ QJ RJ SJ TJ UJ VJ WJ XJ YJ ZJ [J \J ]J ^J _J `J aJ bJ cJ dJ eJ fJ gJ hJ iJ jKKK kK lK mK nK oK pK qK rK sK tK uK vK wK xK yK zK {K |K }K ~K K K K K K K K K L LLL L L L L L L L L L L L L L L L L L L L L L MMM M M M M M M N N N N NPNPN NMN N N N N N N N N N N N N N N N N O O O O O O PPP 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 P P P P P Q 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 T U U U U U U U U U UUU U2U0U 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 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 ZU [U \U ]U ^2 _2 `2 a2 b2 c2 d2 e2 e2 f2 g2 g2 h2 i292 j2 k2 k2 l2 m2 n2 n2 o2 p2 q2 r2 s2 t2 u2 v2 w2 x2 y222 z2 z2 {2 |2 }2 ~2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 V V           ! " # $ % & ' ( ) * + , -W .W .W /W /W 0W 1W 1W 2W 3W 4W 5W 6W 7W 8W 9W 9W :W ;W <W =W >W ?WWW @W AW BW CW DW EW FW GW HW IW JW KW LW MW NW OW PW QW RW SW TW UW VW WW XW YW ZW [W \W ]W ^W _W `W aW bW cW dW eW fX gX hXXX iX jX kX lX mX nYYYwY oY pY qY rY sY tY uY vY wY xY yY zY {Y |Y }Y ~Y Y Y Y Y Y Y Y Y ZDZ Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z ZZ Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z       .   6 [[[ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{\ \ \ \ \ !\ "\ #\ $\ %\ &\ '\ (\ (\ )\ *\ +\ ,\ -\ .\ /\ 0\ 1\ 2\ 3\ 4\ 5\ 6\ 7\ 8\ 9\ :\ ;\ <\ =\ >\ ?\ @\ A\ B\ C\ D\ E% F% F% G% H% I% J% K% L% M% N% O% P% Q% R% S% T% U% V% W% X% Y% Z% [% [% \% ]% ^% _% `% a% `% b% b% c% c% d% e% f% g% h% i% j% k% l% m% n% o% p% q% r% s% t% u% v% w% x% y% z% {% |% }% ~% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %%% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %%%%%%%%%% % % % % %%%%%%%%%%%%%%%%%%% %!%"%#%$%%%&%'%(%)%*%+%,%-%.%/%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%{%|%}%~%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % % %%%%%%%%%%%%%%%%%%% %!%"%#%$%%%&%'%(%)%*%+%,%-%.%/%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%{%|%}%~%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % % %%%%%%%%%%%%%%%%%%% %!%"%#%$%%%&%'%(%)%*%+%,%-%.%/%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%{%|%}%~%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% <% =%%%%%%%%%%%%%%%% % % % % %%% E%%%%%%%%%%%%%%%%% %!%"%#%$%%%&%'%(%)%*%+%,%-%.%/%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^{^|^}^~^^^^^^^^^^^^^________      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[`\`]`^`_`````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`{`|`}`~``````aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbccccccccccccccccccccccccddddddddddddddddddeeefffffffffffffffffffffff                                 gggAAA A A A A AAAAAAAAAAAAAAAAAAA A!A"A#A$A%A&A'A(A)A*A+A,A-A.A/A0A1A2A3A4A5A6A7A8A9A:A;A<A=A>A?A@AAABACADAEAFAGAHAIAJ3K3L3M3N3O3P3Q3R3S3T3U3V3W3X3Y3Z3[3\3]3^3_3`3a3b3c3d3e3f3g3h3i3j3k3l3m3n3o3p3q3r3s3t3u3v3w3x3y3z3{3|3}3~33333333333333333333hiiiiiiiiiiiiiijjjjjjjjjjjjjjjjjjjjkkkkklllmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmn n n n n nnnnnnnnnnnnnnnnnnn n!n"n#n$n%n&n'n(n)n*n+n,n-n.n/n0n1n2n3n4n5n6n7n8n9n:n;n<n=n>n?n@nAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn[n\n]n^n_n`nanbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynzn{n|n}n~nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnooooooooooopppppppqqqqqqqqqqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrrrrrrrrr r r r rrr rrrrrrrrrrrrrrrrrrr r!r"r#r$r%r&r'r(r)r*r+r,r-r.r/r0r1r2r3r4r5r6r7r8r9r:r;r<r=r>r?r@rArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr[r\r]r^r_r`rarbrcrdrerfrgrhrirjrkrlVmVnVoVpVqVrVsVtVuVvVwVxVyVzV{V|V}V~VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV V V V V VVVVVVVVVVVVVVVVVVV V!V"V#V$V%V&V'V(V)V*V+V,V-V.V/V0V1V2V3V4V5V6V7V8V9V:V;V<V=V>V?V@VAVBVCVDVEVFVGVHVIVJVKVLVMVNVOVPVQVRVSVTVUVVVWVXVYVZV[V\V]V^V_V`VaVbVcVdVeVfVgVhViVjVkVlVmVnVoVpVqVrVsVtVuVvVwVxVyVzV{V|V}V~VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV V V V V VVVVVVVVVVVVVVVVVVV V!V"V#V$V%V&V'V(V)V*V+V,V-V.V/V0V1V2V3V4V5V6V7V8V9V:V;V<V=V>V?V@VAVBVCVDVEVFVGVHVIVJVKVLVMVNVOVPVQVRVSVTVUVVVWVXVYVZV[V\V]V^V_V`VaVbVcVdVeVfVgVhViVjVkVlVmVnVoVpVqVrVsVtVuVvVwVxVyVzV{V|V}V~VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV V V V V VVVVVVVVVVVVVVVVVVV V!V"V#V$V%V&V'V(V)V*V+V,V-V.V/V0V1V2V3V4V5V6V7V8V9V:V;V<V=V>V?V@VAVBVCVDVEVFVGVHVIVJVKVLVMVNVOVPVQVRVSVTVUVVVWVXVYVZV[V\V]V^V_V`VaVbVcVdVeVfVgVhViVjVkVlVmVnVoVpVqVrVsVtVuVvVwVxVyVzV{V|V}V~VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV V V V V VVVVVVVVVVVVVVVVVVV V!V"V#V$V%V&V'V(V)V*V+V,V-V.V/V0V1V2V3V4V5V6V7V8V9V:V;V<V=V>V?V@VAVBVCVDVEVFVGVHVIVJVKVLVMVNVOVPVQVRVSVTVUVVVWVXVYVZV[V\V]V^V_V`VaVbVcVdVeVfVgVhViVjVkVlVmVnVoVpVqVrVsVtVuVvVwVxVyVzV{V|s}s~sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss s s s s sssssssssssssssssss s!s"s#s$s%s&s's(s)s*s+s,s-s.s/s0s1s2s3s4s5s6s7s8s9s:s;s<s=s>s?s@sAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs[s\s]s^s_s`sasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszs{s|s}s~sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss s s s s sssssssssssssssssss s!s"s#s$s%s&s's(s)s*s+s,s-s.s/s0s1s2s3s4s5s6s7s8s9s:s;s<s=s>s?s@sAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs\s]s^s_s`sasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszs{s|s}s~ssssssssssssssssssstttttttttttttttttttt tt,t8t(tt6tttAtt'ttDttttt"ttttt=ttt;ttt%ttttt-ttt:tt<ttt7ttt/tt>tt!tt9tt5ttt?t@tt&ttttttBtttt0ttttttCtt+tttttt t.tttttt1tt2tt3tt4tttttttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu u u u u u uuuuuuuuuuuuuuuuuuu u!u"u#u$u%u&u'u(u)u*u+u,u-u.u/u0u1u2u3u4u5u6u7u8u9u:u;u<u=u>u?u@uAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu[u\u]u^u_u`uaubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzu{u|u}u~uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwww w w w w wwwwwwwwwwwwwwwwwwww w!w"w#w$w%w&w'w(w)w*w+w,w-w.w/w0w1w2w3w4w5w6w7w8w9w:w;w<w=w>w?w@wAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYxZx[x\x]x^x_x`xaxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzx{x|x}x~xxxxxxxxxxxxxyyzzzzzz{{{{{{{{|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| | | | | ||||||||||||||||||| |!|"|#|$|%|&|'|(|)|*|+|,|-|.|/|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|{|||}|~|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| | |||||||| | } } ~ ~~ ~~~~~~~~~~~~~~~~~~~ ~!~"~#~$~%~&~'~(~)~*~+~,~-~.~/~0~1~2~3~4~5~6~7~8~9~:~;~<~=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~777777777777777777777777777777777                            ! " # $ % & ' ( ) * + , - . / 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 { | } ~  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .!.!.!.!.!.!.!.!.!.! .! .! .! .! .!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.! .!!.!".!#.!$.!%.!&.!'.!(.!).!*.!+.!,.!-.!..!/.!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.!{.!|.!}.!~.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.U.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!8!8!8!8!8!8!8!8!8!8!8!8!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{!{{!{!{!{!{!{!{!{!{!{!{!{!{!{!{"{"{"{"{"{"{"{"{"{"{" {" {" {" {" {" {" {"{"{"{"{"{"{"{"{"{"{"{"{"{"{"{"{"{"{" {"!{""{"#{"${"%{"&{"'{"({"){"*{"+{",{"-{".{"/{"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"u"v"w"x"y"z"z"{"|"}"~ .""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""y""z{"""w6"6"6j6"6"6"6"6"6"6"6"6"6"6"6"6"6"6"6"6#6#6#6#6#6#6#6#6#6# 6# 6# 6# 6# 6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6# 6#!6#"6##6#$6#%6#&6#'6#(6#)6#*6#+6#,6#-6#.6#/6#06#16#26#36#46#56#66#76#86#96#:6#;6#<6#=6#>6#?6#@6#A6#B6#C6#D6#E6#F6#G6#H6#I6#J6#K6#L6#M6#N6#O6#P6#Q6#R6#S6#T6#U6#V6#W6#X6#Y6#Z6#[6#\6#]6#^6#_6#`6#a6#b6#c6#d6#e6#f6#g6#h6#i6#j6#k6#l6#m6#n6#o6#p6#q6#r6#s6#t6#u6#v6#w6#x6#y6#z6#{6#|6#}6#~6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#########################$$$$$$$$$$ $ $ $ $ $$$$$$$$$$$$$$$$$$$ $!$"$#$$$%$&$'$($)$*$+$,$-$.$/$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${$|$}$~$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$9$9$9$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8$8%8%8%8%8%8%8%8%8%8% 8% 8% 8% 8% 8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8% 8%!8%"8%#8%$8%%8%&8%'8%(8%)8%*8%+8%,8%-8%.8%/8%08%18%28%38%48%58%68%78%88%98%:8%;8%<8%=8%>8%?8%@8%A8%B8%C8%D8%E8%F8%G8%H8%I8%J8%K8%L8%M8%N8%O8%P8%Q8%R8%S8%T8%U8%V8%W8%X8%Y8%Z8%[8%\8%]8%^8%_8%`%a%bz%cz%dz%ez%fz%gz%hz%iz%jz%kz%lz%mz%nz%oz%pz%qz%rz%sz%tz%u%v%w%x%y%z%{%|%}%~%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&& 6&&&&&&& & & & & &&&&&&&&&&&&&&&&&&& &!&"&#&$&%&&&'&(&)&)&*&+&,&-&.&/&0&1&2&3&4&5&6&7&8&9&:&;&<&=&>&?&@&A&B&C&D&E&F&G&H&I&J&K&L&M&N&O7&P7&Q7&R7&S7&T7&U7&V7&W7&X7&Y7&Z7&[7&\7&]7&^7&_7&`7&a7&b7&c7&d7&e7&f7&g7&h7&i7&j7&k7&l7&m7&n7&o7&p7&q7&r7&s7&t7&u7&v7&w7&x7&y7&z7&{7&|7&}7&~7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''' ' ' ' ' ''''''''''''''''''' '!'"'#'$'%'&'''(')'*'+','-'.'/'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'W'X'Y'Z'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'{'|'}'~'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(((((((((( ( ( 0( ( ((7(8/(((((((((((((((( (!("(#($(%(&('((()(*(+(,(-(.(/(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(S(T(U(V(W(W(X(Y(Z([(\(]"S(^(_(`(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({(|(}(~((((((((((w(((((((87(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()))))))))) ) ) ) ) )@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@) @)!@)"@)#@)$@)%@)&@)'@)(@))@)*@)+@),@)-@).@ @)/@@)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){)|)})~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) ))))x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x*x*x*x*x*x*x*x*x*x* x* x* x* x* x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x* x*!x*"x*#x*$x*%x*&x*'x*(x*)x**x*+x*,x*-x*.x*/x*0x*1x*2x*3x*4x*5x*6x*7x*8x*9x*:x*;x*<x*=x*>x*?x*@x*Ax*Bx*Cx*Dx*Ex*Fx*Gx*Hx*Ix*Jx*Kx*Lx*Mx*Nx*Ox*Px*Qx*R*S*T*U*V*W*X*Y*Z*[*\*]*^*_*`*a*b'*c'*c'*d'*e'*f'*g'*h'*i'*j'*k'*l'*m'*n'*o'*p'*q'*r'*s'*t'*u'*v'*w'*x'*y'*z'*{'*|'*}'*~'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'+'+'+'+'+'+'+'+'+'+ '+ '+ '+ '+ '+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+ '+!'+"'+#'+$'+%'+&'+''+('+)'+*'++'+,'+-'+.'+/'+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'+{'+|'+}'+~'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+',',',',',',',',',', ', ', ', ', ',',',',',',',',',',',',',',',',',',', ',!',"',#',$',%',&','',(',)',*',+',,',-',.',/',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',{',|',}',~',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---------- - - - - --------,----------- -!-!-"-#-$-%-&-'-(-)-*-+-,---.-/-/-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-{-|-}-~---------------------------------------------------------------------------------------------------------------------------------------.......... . . . . .W.................. .!.".#.$.%.&.'.(.).*.+.,.-.../.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.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.q.r.r.s.t.u.v.w.x.y.z.{.|.}.~..........{...............................................................................................................................////////// / / / / /////////////////// /!/"/#/$/%/&/'/(/)/*/+/,/-/.///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/{/|/}/~//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////n///////////0000000000 0 0 0 0 0000000000000000000 0!0"0#0$0%0&0'0(0)0*0+0,0-0.H0/000102030405060708090:0;060708090:0;060708090:060708090:060708090:060708090:060708090:060708090:0<0=0>0?0@0A0A0B0C0D0E0F0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0W0X0Y0Z0[0\0]0^0_0`0a0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p0q0r0s0t0u0v0w0x0y0z0{0|0}0~00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/0000000000000000000000000001111111111 1 1 1 1 1111111111111111111 1!1"1#1$1%1&1'1(1)1*1+1,1-1.1/101112131415161718191:1;1<1=1>1?1@1A1B1C1D1E1F1G1H1I1J1K1L1M1N1O1P1Q1R1S1T1U1V1W1X1Y1Z1[1\1]1^1_1`1a1b1c1d1e41f1g1h1i1j1k1l1m1n1o1p1q1r1s1t1u1v1w1x1y1z1{1{1|1}1~1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111122222222222 2 2 2 2 22222(22222222222222 2!2"2#2$(2%2&2'2(2)2*2+2,2-2.2/202122232425262728292:2;2<2<2=2>2?2@2A2B2C2C2D2E2F2G2H2I2J2K2K2L2M2N2O2P2Q2R2S2T2U2V2W2X2Y2Z2[2\2]2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2q2r2s2t2u2v2w2x2y2z2{2|2}2~22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222022222222222222222222222222222223333333333 3 3 3 3 3333333333333333333 3!3"3#3$3%3&3'3(3)3*3+3+3,3-3.3/3031323311 1 0000001111113435363 3 3%3&111 3'3"3#3$373 3 38393:33;33<3=3>3?3@3A3B3C3 3D3E3!3F3+3+3,303-3.3/333G3H3I3J3K3L3M3N3O3P3Q3R3S3T3U3V3W3X3Y3Z3[3\3]3^3_3`3a3b3c3d3e3f3g3h3i3j3k3l3m3n3o3p3q3r3s3t3u3v3w3x3y3z3{3|3}3~333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333334444444444 4 4 4 4 44444424444444444U4444 4!4"4#4$4%4&4'4(4)4*4+4,4-4.4/404142434445464748494:4;4<4=4=4>4?4@4A4B4B4C4D4E4F4F4G4H4I4J4K4L4M4N4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4\4]4^4_4`4a4b4c4d4e4f4g4h4i4j4k4l4m4n4n>>4o4p4q4r4r4s4t4u4v4w4x4y/4z4{4|4}4~44444444444444444444444444444444444441s44444444444444444444444444444444444444444444444444444444444444444444444444444444444%44444444444455555555555 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`5a5b5c5d5e5f5g5h5i5j5k5l:5m:5n:5n:5o:5p:5q:5r:5s:5t:5u:5v:5w:5x:5y:5z:5{:5|:5}:5~:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5::5:5:5:5:5:5:5:5:5:5:5:5:5:5:::5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:6:6:6:6:6:6:6:6:6:6 :6 :6 :6 :6 :6:6:6:6:6:6:6:6:6:6:6:6:6:6:6:6:6:6:6 :6!:6":6#:6$:6%:6&:6':6(:6):6*:6+:6,:6-:6.:6/:60:61:62:63:64:65:66:67:68:69:6::6;:6<:6=:6>:6?:6@:6A:6B:6C:6D:6E:6F:6G:6H:6I:6J:6K6L6M6N6O6P6Q6R6S6T6U6V6W6X6Y6Y6Z6[6\6]6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6w6x6y6z6{6|6}6~666666666666666666666666666666662#6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666667777777777 7 7 7 7 7777777777777J7.P#77777 7!7"7#7$7%7&7'66666666667(7)7*7+7,7-7.7/707172737475767778797:7;7<7=7>7?7@7A7B7C7D7E7F7G7H7I7J7K7L7M7N7O7P7Q7R7S7T7U7V7W7X7Y7Z7[7\7]7^7_7`7a7b7c7d7e7f7g7h7i7j7k7l7m7n7o7p7q7r7s7t7u7v7w7x7y7z7{7|7}7~77777777777777777777777777777777777777777777777777777777777777777777777qq77777777777777777777777777777777777777777777777777777777777777888888888888 8 8 8 8 8 8888888888888888888 8!8"8#8$8%8&8'8(8)8*8+8,8-8.8/808182838485868788898:8;8<8=8>8?8@8A8B8C8D8E8F8G8H8I8J8K8L8M8N8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8\8]8^8_8`8a8b8c8d8e8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8u8v8w8x8y8z8{8|8}8~88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888899999999}9}9 }9 }9 }9 }9 }9 }9}9}9}9}9}9}9}9}9}9}9}9}9}9}9}9}9}9}9}9}9 }9!}9"}9#}9$}9%}9&}9'}9(}9)}9*}9+}9,}9-}9.}9/}90}91}92}93}94}95}96}97}98}99}9:}9;}9<}9=}9>}9?}9@}9A}9B}9C}9D}9E}9F}9G}9H}9I}9J}9K}9L}9M}9N}9O}9P9Q9Q9R9S9T9U9V9W9X9Y9Z9[9\9]9^9_9`9a9b9c9d9e9f9g9h9i9j9k9l9l9m9n9o9p9p9q9r9s9t9u9v9w9x9y9z9{9|9}9~999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999::::::::::: : : : : :::::::::::::::::::: :!:":#:$:%:&:':(:):*:*:+:,:,:-:.:/: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:{:|:}:~::::::::::::::::::::::::::::::::::::::::::::::::::::z::::::::::::::::N:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;; ; ; ; ; ; ;;@;;;;gg;;;;;;;;;;;;;; ;!;";#;#;$;$%;%;&;';(;);*;+;,;-;.;/;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;{;|;};~;;;;;;;;;;;;;-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<< < < < < <<<<<<<<<<<<<<<<<<< =?=@=A=B=C=D=E=F=G=H=I=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=i=i=j=k=l=m=n=o=p=q=r=s=t=u=v=w=x=y=z={=|=}=~================================================================= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > 9` > > > >! >" ># >$ >% >& >' >( >) >* >* >+ >, >- >. >/ >0 >1 >2 >3 >4 >5 >6 >7 >7 >8 >9 >8 >: >: >; >< >= >> >? >@ >A >B >C >D >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 >b >c >d >e >f >g >h >i >j >k >l >m >m >n >o >p >q >r >s >t >u >v >v >w >x >y >z >{ >| >} >~ > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >   > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?! ?" ?# ?$ ?% ?& ?' ?( ?) ?* ?+ ?, ?- ?. ?/ ?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 ?{ ?|-?}-?~-?-?-?-?-?-?-?--?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-@-@-@-@-@-@-@-@-@-@ -@ -@ -@ -@ -@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@ -@!-@"-@#-@$-@%-@&-@'-@(-@)-@*-@+-@,-@--@.-@/-@0-@1-@2-@3-@4-@5-@6-@7-@8-@9-@:-@;-@<-@=-@>-@>-@?-G-@@-@A-@B-@C-@D-@E-@F-@G-@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-G-@w-@x-@y-@z-@{-@|-@}-@~-@-@-@-@-@-@-@-@-@-@-L-L-@-@-@-@-@-@-@-@-K-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-.P-.P-@-@-@-@-@-@-@-@-@-@-@-@---@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-A-A-A-A-A-A-A-A-A-A -A -A -A -A -A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A -A!-A"-A#-A$-A%-A&-A'-A(-A)-A*-A+-A,-A--A.-A/-A0-A1-A2-A3-A4-A5-A6-A7-A8-A9-A:-A;-A<-A=-A>-A?-A@-AA-AB-AC-AD-AE-AF-AG-AH-AI-AJ-AK-AL-AM-AN-AO-AP-AQ-AR-AS-AT-AU-AV-AW-AX-AY-AZ-A[-A\-A]-A^-A_-A`-Aa-Ab-Ac-Ad-Ae-Af-Ag-Ah-Ai-Aj-Ak-Al-Am-An-Ao-Ap-Aq-Ar-As-At-Au-Av-Aw-Ax-Ay-Az-A{-A|-A}-A~-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-AAA A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBB B B 6B B BBBBBBBBBBBBBBBBBBB B!B"B#B$B%B&B'B(B)B*B+B,B-B.B/B0B1B2B3B4B5B6B7B8 1B9B:B;B<B=B>B?B@BABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB[B\B]B^B_B`BaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBq 2BrBsBtBuBvBwBxByBzB{B|B}B~BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCC C C C C CCCCCCCCCCCCCCCCCCC C!C"C#C$C%C&C'C(C)C*C+C,C-C.C/C0C1C2C3C4C5C6C7C8C9C:C;C<C=C>C?C@CACBCBCCCDCECFCFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC[C\C]C^C_C`CaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzC{C|C}C~CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC[CC?CCCCC(C)CCCCCCZCCCCCCCCCCCCCCCCCCCCCCCC C C C C C C C C C C C C C C C C C C!!C"C"C"Cg(gCgCgCgCgCgCgCgCgCgCgCgCgCgCgCgCgCgCgCgCgCgCgCgCgCgCgCgCgCgCgCgCgCgCgCgCgCgCgCgDgDgDgDgDgDgDgDgDgD gD gD g<g^gD gD gDgDgDgDgDgDgDgDgDgDgDgDgDgDgDgDgBgB0gDgDgD gD!gD"gD#gD$g@gD%g8g gD&g:gD'g?g3gD(gD)gD*gD+gD,gD-gD.gD/gD0gD1gD2gD3gD4gD5gD6#D7#D8#D9#D:#D;#D<#D=#D>#D?#D@#DA#DB#DC#DD#DE#DF#DG$DH%DI&DJ&DJ&DK&DL&DM&DN'DO'DP'DQ'DR'DS(DT(DU(DU(DV(DW(DX(DX(DY(DZ(D[(D\(D](D^(D_(D`(Da(Db(Dc(Dd(Dd(De(Df(Dg(Dh(Di(Dh(Dj(Dk(Dl(Dm(Dm(Dn(Dn(Do(Dp(Dq)Dr)Ds)Dt)Du)Dv)Dw)Dx)Dy)Dz)D{)D|)D})D~*B**D*D*D*D*DDDDDDDDDDDDDDDDDD,DDDDDDDDDDDDDDDDDDDDD]DDDDDDDDDDDDDDD+D+D+D+D+D+D+D+D,D,D,D,D,D,D,D,D-D.D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/E/E/E/E/E/E/E0E1E1E 1E 1E 1M11E 111E 1E1E1E1E111E11E1E1E11111E1E1E1E1E1E1E1E1E1E1E 1E!1E"1E#1E$1E%1E&1E'1E(1E)1E*1E+1E,1E-1E.1E/1E01E11E21E31E41E51E61E71E81E91E:1E;1E<1E=2E>2E?3E@3EA3EB3EC3ED3EE3EF3EG3EG3EH3EI3EJ33333EK3EL3EM3EN3EO3EP3EQ3ER3ES3ET3EU3EV3EW3#v3#y3EX3EY3EZ3E[3E\3E]3E^3E_3E`3Ea3Eb3Ec3Ed3Ee3Ef3Eg3Eh3Ei3Ej3Ek3El3Em3En3Eo3Ep3Eq3Er3Es3Et3Eu3Ev3Ew3Ex3Ey3Ez3E{3E|3E}3#3#3#3#3E~3E3E3E4E5E6*Z666E6*[6*\6E6E6E^6EW6E6#v6#|6#y6*b6E6E6*_6E6E6E6E6#l6E6*a6E6E6E6E6E6E6E6E6*]6*^6E6E6E6E6E6E6#6#6#6E}6#6E6E6E6E6E6E6E6E6E7E7E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E: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>E>E>E>E>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 ?F ?F?F?F?F?F?F@F@F@F@F@F@F@F@F@F@FA<AFAFAF AF!AF"AF#AF#AF$AF%AF&AF'AF(AF)AF*AF+AF,AF-AF.AF/AF0AF1AF2AF3AF4AF5AF6AF7AF8AF9AF:AF;AF<AF=AF>AF?AF@AFAAFBAFCAFDAFEAFFAFGAFHAFIAFJAFKAFLAFMAFNAFOAFPAFQAFRAFSAFTAFUAFVAFWAFXAFYAFZAF[AF\AF]AF^AF_AF`AFaAFbAFcAFdAFeAFfAFgAFhAFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzF{F|F}F~FFBFBFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEEEFEFEFEFEFEFEFFFFFFFGFGFGFGFGFGFGFGFGFGFHFHFHFIFFFFFJFKFLFLFLFLFLFLFLFLFLFLFLFLFLFLFMGMGMGMGMGMGMGMGMGMGMG MG MG MG MG MGMGMGNGNGNGNGNGNGNGNGNGNGNGNGNGOGOGOG G!G"G#G$G%G&G'G(G)G*G+G,G-G.G/G0G1G2G3G4G5G6G7G8G9G:G;G;G<G=G>G?G@GAGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG[G\G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}G~GGGGGGGGGGPGPGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGRGRGRGRGRGRGSGSGSGSGS5}SGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTHTHTHTHTHTHTHTHTHTH TH TH TH TH THTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTH TH!TH"TH#UH$UH%UH&UH'UH(UH)UH*UH+UH,UH-UH.UH/UH0UH1UH2VH3VH4WH5WH6WH7WH8WH9WH:WH;WH<WH=WH>WH?WH@WHAWHBWHCWHDWHEWHFX5XHGXHHXHIXHJXHKXHLYHMYHNYHOYHPYHQYHRZHS[HT[HU[2[HV[HW[HX[HY[HZ[H[[H\[H][H^[H_[.G[.H[.I[H`\Ha\Hb\Hc\Hd\He\Hf\Hg\Hh\Hi\Hj\Hk]Hl]Hm]Hn]Ho]Hp]Hq]Hr]Hs]Ht]Hu]Hv]Hw]Hx^Hy^Hz^H{^H|^H}^H~^H^H^H^H^H_H_H_H_H_H`H`H`H`H`H`H`H`HaHaHbHbHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcHcH H H H H H H HdHdHdHdHdHdHdHdHdHdHdHdHdHeHeHeHeHeHeHeHeHeHeHeHeHeHeHeHeIeIeIeIeIeIfIfIfIfI fI fI fI fI IIIIIIIIIIIIIIIIIIIII I!I"I#I$I%I&I'I(I)I*I+I,I-I.I/I0I1I2I3I4I5I6I7I8I9I:I;I<I=I>I?I@IAIBICIDIEIFIGIHIIIJIKILIMINGIOIPgIQgIRgISgIThIUhIVhIWhIXhIYiIZiI[iI\iI]iI^iI_iI`iIaiIbiIciIdiIeiIfiIgiIhiIiiIjiIkiIliImiIniIoiIpiIqiIriIsiItiIuiIviIwiIxiIyiIzjI{jI|jI}jI~jIjIj*bjIjIjIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIlIlIlIlIlIlIlIlIlIlIlIlIlImImImIIIIIIIIIIIIInInInInInInInInInInInInInInInInInInInIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIoIoIoIoIoIoIoIoIoIoIoIoIoIoIoIoIoIoIoIoIoIoJoJoJoJoJoJoJoJoJoJ oJ oJ pJ pJ pJpJpJpJpJpJpJpJpJqJqJqJqJqJqJqJqJqJqJ qJ!qJ"qJ#qJ$qJ%qJ&qJ'qJ(qJ)qJ*qJ+qJ,qJ-qJ.rJ/rJ0rJ1rJ2rJ3rJ4rJ5rJ6rJ7rJ8rJ9rJ:rJ;rJ<rJ=rJ>rJ?rJ@rJArJBrJCrJDrJErJFrJGrJHrJIrJJrJKrJLrJMrJNrJOrJPrJQrJRrJSrJTrJUrJVrJWrJXrJYrJZrJ[rJ\rJ]rJ^rJ_rJ`rJarJbrJcrJdrJerJfrJgrJhrJirJjrJkrJlrJmrJnrJorJprJqrJrrJsrJtrJurJvrJwrJxrJyrJzrJ{rJ|rJ}rJ~rJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrBrBrBrBrJrBrBzrB{rB|rJrJrJrJrJrArArArGLrG^rGrGrJrJrBrBrCrCrCrCrC rCrC rC rCrJrJrJrJrJrJrIrJrBrJrJrJ,rBrJrJrJrJrJrJrJrBwrBxrBrJrJrJrJrJrJrJrBrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJsJsJsJsJsJsJsJsJsJsJsJtJtJtF1tJtJtJtJtJtJtJtJtJuJuJuJvJvJvJvJvJvJvJvJvJvJvJvJvJvJvJvJvJvJvJvJvJvKvKvKvKwKwKwKwKwKwK wK wK wK wK wKwKwKwKwKwKwKwKwKxKxKxKxKxKxKxKxKxKxK xK!xK"xK#xK$xK%xK&xK'xK(xK)xK*xK+xK,xK-xK.xK/yK0yK1yK2yK3yK4yK5yK6yK7yK8yK9yK:yK;yK<yK=yK>yK?zK@zKAzKBzKCzKDzKEzKF{KG{KG{KH{KI{KJ{KK{KL{KL{KM{KN{KO{KP{KQ{KR{KS{KT{KU{KV{KW{KX{KY{KZ{K[{K\{K]{K^{K_{K`{Ka{Kb{Kc{Kd{Ke{Kf{Kf{Kg{Kh{Ki{Kj{Kk{Kl{Km{Kn{Ko{Kp{Kq{Kr{Ks{Kt{Ku{Kv{Kw{Kx{Ky{Kz{K{{K|{K}{K~{K{K{K{K{K{K{K{K{K{K{K{K{K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K|K}K}K}K}K}K}K}K}K}K}K}K}K}K}K}K}K~K~K~K~K~K~K~K~K~K~K~K~K K K K K K K K K K K K K K K K K K K K K K K K K KKKKKLLLLLLLLLL L L L L LLLLLLLLLLLLLL L L L L L  L! L" L# L$ L% L& L' L( L) L* L+L,L-L.L/L0L1L2L3L4L5L6L7L8L9L:L;L<L=L>L?L@LALBLCLDLELFLGLHLILJLKLL:LMLNLOLPLQLRLSLTLULVLWLXLYLZL[L\L]L^L_L`LaLbLcLdLeLfLgLhLiLjLkLlLmLnLoLpLqLrLsLtLuLvLwLxLyLzL{L|L}L~LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLgLgLLLLhLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL L L L L L L L L L L L L L L L L L L L L L L L LLLLLLLLLLMMMMMMMMMM M M M M MMMMMMMMMMMMMMMMMMM M!M"M#M$M%M&M'M(M)M*M+M,M-M.M/M0M1M2M3M4M5M6M7M8M9M:M;M<M=M>M?M@MAMBMCMDMEMFMGMHMIMJMKMLMMMNMOMPMQMRMSMTMUMVMWMXMYMZM[M\M]M^M_M`MaMbMcMdMeMfMgMhMiMjMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzM{M|M}M~MMMM#$%&'()*+,-.*,MMMM012MM3MMMMMMM1MM00000011113 3 111 M3'M3"373 3 MMMMMMMMMMMMMMMMMMMMMMMMM3?3@MMMMMMMMMMMMMMMMMMMMM3$3#M38M3!3%3&MMMMMMMMMMMMMMMMMM4tMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNN N N N N NNNNNNNNNNNNHNNNNNNN N!N"N#N$N%N&N'N(N)N*N+3*N,N-N.N/N0N1N2N3N4N5N6N7N8N9N:4tMMMMN;N<MMN=N>N?N@NANBMNCMNDMNENFNGNHNIMNJNKNLNNMNNNONPNQNRNSNTHNNNUNVNWNXNYNZN[N3MMMN.N/N0N1N\N2N4N]N5N6N7N8N9N:N^N_N`NaNbNcNcNdNdNeNeNfNgNhNi4NjNkNlNmNnNoNpNqNrNsNtNuNvNwNxNy4NzN{N|N}N~NNN4tMMMMN;NNNN<NNNNNNNNNNHNNNNMNNNNNNNNNNNNNMMNNMNMNNN*MNNNHNNNNKNQNNNNJNONLNNNNNNNN NNNMNUNVNWN+N-N3*NN3MMN.N/N0N1N2N4N:NNNNNNNNNNNNNNNNNNN.N/N1N0N43*3!NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNfNNNNNNNfNNNNOOOOOO3+3+3,303-3.3/333+3+3,303-3.3/33OOOO O 3*O O O OONOOOOOOOOOOOOOOOOO O!O"O#O$O%O&O'O(O)O*O+O,O-O.O/O0O1O2O3O4O5O6O7O8O9O:O;O<O=O>O?O@OAOBOCODOEOFOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOYOZO[O\O]O^O_O`OaObOcOdOeOfOfOgOhOiOiOjOkOlOmOmOnOoOpOqOqOrOsOtOuOvOwOxOyOzO{O|O}O~OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOODOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO O O OOOOOOOOOOOOOOOOOOOOOHOOOOOOOOOOOOD%NOOOOOOOOOOOOOOPPPPPPPPPP P P P P PPPPPPPPPPIPPEPPPPPPPP P!P"P#P$P%P%P&P'P(P)P*P+P,P-P-P.P/P0P0P1P2P3P4P5P6P7P8P9P:P;P<P=P>P?P@PAPBPCPDPEPFPGPHPIPJPKPLPMPNPOPPPQPRDrPSPTPUPVPWPXPYPZP[P\P]P^P_P`PaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyB#OOO7&PzP{P|P}P~PPPPPPPPPPOTPPPPOPOPOPPOPPOPPOTPOT=OTPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOP0hOPPPPPPPPPPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOTPOTPOTPOTPOTPOTPOTPOPPOPPOPPOPPOPPOPPOPPOPPPPPPPPPPPPPPPPPPPPPPPPPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPPOPQOQQOQQOQQOQQOQQOQQOQQ OQOQQ OQQ OQQ OQQ OQQOQQOQQOQQOmQOmQOmQOmQOTQOTQOTQOTQOTQPQQPQQPQQPQQPQQ PQQ!PQQ"Q#Q$Q%OQ&Q'OQ&Q(OQ&Q)PQQ*PQQ+PQQ,PQQ-OPQ.PQQ/PQQ0OQ1Q2OQ1Q3OQ1Q4OPQ5OPQ6OPQ7OPQ8OPQ9OPQ:OPQ;OPQ<OPQ=OPQ>OPQ?OPQ@OQAQBOQCQDOQAQEOQAQFOQQGOQQHOQQIOQQJOQQKOQQLOQQMOQQNOQQOOQPQQOQPQROQPQSOQPQTOQUQVOQUQWOQ1QXOPQYOPQZOQ[Q\OPQ]OPQ^OPQ_OPQ`OPQaOPQbOPQcOPQdOPQeOPQfOPQgOQhOQiOQjOQkOQlOQmOQnOQoOQpOQqOQrOQsOQtOQuOQvOQwOQxOQyOQzOQ{OQ|OQ}OQ~OQOQOOOQQOPQOPQOPQOTQOTQOTQOTQOTQOTQOTQOTQOTQOQQOQQOQQPPQPPQPPQOQCQOQCQOQCQOsQOsQOsQOTQOQQOQQOQQOQQOsQOsQOsQOsQOsQOsQOsQOsQOsQOsQOsQOsQOsQOsQOsQOsQOsQOsQOsQOsQOsQOsQOsQOQAQOQAQOQAQOQAQOQAQOQAQOQAQOQAQOQAQOQAQOQAQOQAQOQAQOQAQOQAQOQAQOQAQOQAQOQAQOQAQOQAQOQAQOQAQOQAQOQCQOQCQOQCQOQCQOQCQOQCQOQCQOQCQOQCQOQCQOQAQOQQOQQOQQOQQOyQOyQOyQOyQOyQOyQOyQOyQOyQQQQQQQQOgQ!QQ#Q#Q+QQQOQQOQQOQQOQQOQQOQQOQQOQQOQQ0QOQQ1Q Q Q Q Q Q5Q5Q5Q Q Q?Q?R?RCRCRDRJRJRNRNRRRSR TR TR TR R RR2R2R\R\R%RRR%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/%R0%R1%R2%R3%R4%R5%R6%R7^R8R9OR:R;AR<AR=AR>AR?3R@3RA3RB3RC3RD3RE3RF3RG3RH3RI3RJ3RK3RL3RM3RN3RO3RP3RQ3RR3RS3RT3RU3RV3RW3RX3RY3RZ3R[3R\3R]3R^3R_3R`3Ra3Rb3Rc3Rd3Re3RfhRghRhhRihRjhRkhRlRmRnRol0lRplRqlRrlRslRtlRulRvlRwlRxlRylRzlR{lR|lR}lR~lRlRlRuRuRuRuRuRuRwRwRwRwRRRRR.R.R.R.R.R.R.5.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R{R{R{R{R{R{R6R6R6R6R6R6R6R8R8R8R8R8R8R8RRRRRRRRRRR7R7R7R7R7R7R7R7R7RRRRRRRRRRRRRRRRiRiRRRRRR@RxRxRxRxRxRxRxRRRRRRRRRRRRRRRR0PRR0RRRRSSSSS0KSSSSS S S S S SSS/SSSSSSSSSSSSSSSS S!S"S#S$S%S&S'S(S)S*S+S,S-S.S/S0S1eS2S3S4S5S6S7S8S9S:S;S<S=S>S?S@SASBSCSDSESFSGSHSISJSKSLSMSNSOSPSQSRSSSTSUSVSWSXSYSZS[S\S]S^S_S`SaSbScSdSeSfSgShSiSj7SkSlSm(SnSoSpSqSrSsStSuSvSwSxSySzS{6S|S}S~SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS6SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS:S:S:S:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTT T T T T TTTTTTTTTTTTTTTTTTT T!T"T#T$}T%T&T'T(T)T*T+T,T-T.T/T0T1 T2 T3 T4-T5-T6-T7-T8-T9-T: T; T< T= T> T? T@TATBTCTDTETFTGTHTITJTKTLTMTNTOTPTQTRTSTT TU TV TW TX TY TZgT[&T\&T]&T^&T_&T`&Ta)Tb)Tc)Td)Te)Tf)Tg)Th)Ti)Tj)Tk)Tl)Tm)Tn)To)Tp)Tq)Tr)TrTsTt+Tu+Tv+Tw+B.Tx.Ty.Tz.T{.T|.T}.T~.T.T.T.T.T.T.T/T/T/T/T/T1T1T4T5T5T6T7T7T7T7T8T: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@TTTBTBTBTBTBTBTCTCTCCTCTCTOb0ETETETETETFTFTFTGTITJTJTJTrJTrLTMTTTTQTRTSTTTTTTTTTTTTTTTTTTTTTTTTTTTUTUTUTVTWTWTWTWTWTWTWTWTWTWTWTYTYTYT[T[T[T[T[T[T[T[T[T\T\T\U\U\U\U\U\U\U\U^U^U ^U ^U ^L^^U ^U ^U^U^U^U^U`U`U`U`U`U`U`U`U`UU)U`UU)UU U!U U"U U#U U$U U%U U%dU&dU'dU(dU)dU*dU+dU,dU-eU.eU/eU0eU1eU2U3U4U5U6U7iU8jU9jU:jU;jU<jU=jU>jU?jU@jUAmUBmUCmUDmUEmUFmUGmUHmUImP[mUJmUKmULUMUNUOUPUQURUSUTUUUVUWUXUYUZU[U\U]nU^nU_oU`oUapUbpUcpUdpUepUfpUgpUhpUipUjpUkpUlqUmqUnqUoqUpqUqrUrsUssUtsUusUvsUwsUxsEUsUysUzsU{sU|sU}sU~tUtUtUtUtUtUtUtUuUuUuUuUuUuUuUuUuUuUuUvUvUwUwUwUwUwUwUwUwUwUwUwUwUxUxUxUxUxUxUxUxUxUzUzUzU{U{U|U|U|U|U|U|U|U|U|U|U|U}U~U UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU U UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVV V V V V VVVVVVVVVVVVVVVVVVV V!V"V#V$V%V&V'V(V)V*V+V,V-V.V/V0V1V2V3V4V5V6V7V8V9V:V;V<V=V>V?V@VAVBVCVDVEVFVGVHVIVJVKhVLhVMhVNVOVPVQVRVSVTVUVVVWVX VY VZ V[ V\ V] V^ V_ V` Va Vb Vc Vd Ve Vf VgVhViVjVkVlVmVnVoVpVqVrVsVtVuVvVwVxVyVzV{V|V}V~VVVVVVVVVzVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV6V3)VVVVVVVVVVVVVVNcN`NdNeVSBNh9VNVNVVSAS@SAVVVVVVN`NhVNV;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVtVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV V W W W W W WWWWW W W W W WWWWOWWWWWWWWWWWHWWWW W!W"W#W$W%W&W'W(W)W*W+W,W-W.W/W0W1W2W3W4W5W6W7W8W9W:W;W<W=W>W?W@WAWBWCWDWEWFWGWHghcPanic MonadUtilsPlugins FingerprintUtil SpecConstr PackageConfigDsMonadIOEnvDigraphHscTypesLexeme ByteCodeAsmGHCiGHCMaybes FiniteMap FastMutInt FastFunctions ExceptionEnumSetEncodingConfig ConstantsArHooks Hoopl.BlockHoopl.CollectionsListTNameOccName Outputable PlainPanicPPC.CondCtypePlatformDynFlagsPlatformConstantsPrimOp SPARC.CondStateStreamSysTools.BaseDirSysTools.Terminal TcRnTypesTyCon PprColour FastString StringBufferModulePackagesBufWritePrettyTyCoRepCoercionTypeKindTcTypePairOrdList ListSetOpsJsonSrcLocIdInfoErrUtilsAsmUtils BasicTypesUnique UniqSupplyUniqFMUniqSetUniqMap GraphBaseUniqDFMUniqDSet FastStringEnvRegClassRegAlloc.Graph.ArchBaseRegAlloc.Graph.ArchX86RegRegAlloc.Graph.TrivColorableGraphPprGraphOps GraphColorBinary PrelNames ForeignCallCostCentreStateBooleanFormula DriverPhasesBag CmdLineParser SPARC.BaseSMRepRegAlloc.Linear.StackMapNameSetNameEnv KnownUniquesHsDoc FieldLabelBinFingerprint Annotations CoreMonad LlvmMangler FileCleanupSysTools.Process SysTools.InfoElfCmmType CmmMachOpCPrimBitmapAvailRdrNameTHNames ApiAnnotationLexerCmmMonadVar TysWiredIn PlaceHolderPatSyn IfaceType HsExtensionHsPatHsImpExpHsExprDataConConLike CostCentreCoAxiomClassMkIdVarSetVarEnvHieTypesToIfaceFVTysPrimTcTypeableValidityLiteralTrieMap Hoopl.Label Hoopl.Graph CmmSwitchBlockIdHsLitUnifyRepTypeDemandCoreSynId UnVarGraph NameCacheStgSubstInteractiveEvalTypesHsTypes ByteCodeTypes CoreStatsPprCoreStgSynStgStatsStgLintStgLiftLams.LiftMStgFVsIfaceSynCLabelProfInitCmmExpr PprCmmExprCodeGen.Platform.X86_64CodeGen.Platform.X86CodeGen.Platform.SPARCCodeGen.Platform.PPCCodeGen.Platform.NoRegsCodeGen.Platform.ARM64CodeGen.Platform.ARMCodeGen.PlatformCmmNodeCmmLexCmm SPARC.ImmSPARC.AddrMode PprCmmDeclPprBase Llvm.Types Llvm.MetaData Llvm.AbsSyn Llvm.PpLlvmLlvmCodeGen.RegsLlvmCodeGen.BaseSysTools.TasksSysTools.ExtraObjSysToolsLlvmCodeGen.DataLlvmCodeGen.Ppr InstructionHoopl.DataflowFormat SPARC.Regs SPARC.StackRegAlloc.Linear.SPARC.FreeRegsPPC.RegsRegAlloc.Linear.PPC.FreeRegsCmmUtilsPprCmmPprCLlvmCodeGen.CodeGenDebugCmmOptCmmLiveCmmSinkCmmLintCmmInfo CmmProcPointCmmImplementSwitchPlansCmmContFlowOptCmmCommonBlockElim CmmCallConvMkGraphCgUtils LlvmCodeGenCFGRegAlloc.LivenessRegAlloc.Linear.BaseRegAlloc.Linear.StatsRegAlloc.Linear.StateRegAlloc.Graph.SpillCleanRegAlloc.Graph.SpillRegAlloc.Graph.CoalesceRegAlloc.Graph.SpillCostCoreSeqCoreMapStgCse FamInstEnvCoreFVs StgCmmClosure StgCmmMonad StgCmmUtils StgCmmProf StgCmmExtCode StgCmmBind StgCmmEnv StgCmmArgRep StgCmmTicky StgCmmLayoutStgLiftLams.AnalysisStgLiftLams.Transformation StgCmmHeapCmmBuildInfoTables StgCmmForeign StgCmmPrimCmmLayoutStackInstEnv OptCoercion TcEvidenceHsBindsHsDeclsHsUtils HsInstancesHsSynRdrHsSynPmExprTcUnify TcTypeNatsTcSplice TcRnDriver TcMatches TcHoleErrorsTcExprTcEnvRnHsDocRnExpr TcRnMonadTcPatSynTcMType TcAnnotationsRnSpliceTcIface StgCmmHpc RnUnbound PipelineMonad LoadIfaceIfaceEnv NameShape RnModIfaceGhcMonadFinderDynamicLoadingDsUsage SimplMonad CmmPipelineHscStats HsDumpAst HaddockUtilsBkpSynParser HeaderInfoCoverage ByteCodeLink ByteCodeItbls ExtractDocs CoreUtilsSATMkCoreTcEvTermSimplEnvFloatInExitify CoreSubstCSE CoreArity SetLevels OccurAnalFloatOutCoreTidyCoreOptRules CoreUnfold PrelRules SimplUtils UnariseStgSimplStgHieUtils SpecialiseSimplifyPrelInfo StgCmmCon StgCmmExprCmmParseStgCmmBinIfaceHieBinHieDebug FlagCheckerStaticPtrTableRnUtilsRnFixityRnEnvRnTypesRnNames TcRnExportsMkIface PprTyThing CoreToStg LiberateCaseCoreLintFamInstFunDepsCorePrepTidyPgmConvert GhcPlugins CallArity ByteCodeInstrLinker ByteCodeGen BuildTyClMatchDsExprTcHsSynTmOracleRnPatRnBindsRnSourceInstRtClosureInspectTcErrorsClsInstTcSMonad TcFlatten TcCanonical TcInteract TcSimplify TcValidity TcGenDeriv TcGenFunctor TcGenGenerics TcDerivUtilsTcHsTypeTcSigsTcPat TcDerivInfer TcDefaultsTcBinds TcTypeable TcTyDeclsTcArrowsTcRules TcForeign TcBackpackDsUtilsMatchLitDsMetaDsCCall DsForeignCheckDsGRHSsDsBindsMatchCon DsListCompDsArrows TcClassDclTcDeriv TcInstDcls TcTyClsDeclsDesugarHieAstWwLibWorkWrapDmdAnal SimplCoreX86.CondX86.Regs X86.RegInfo TargetReg X86.InstrX86.Ppr SPARC.InstrSPARC.ShortcutJump SPARC.PprSPARC.CodeGen.SanitySPARC.CodeGen.ExpandSPARC.CodeGen.BaseRegAlloc.Graph.StatsRegAlloc.Graph.Main PPC.Instr PPC.RegInfoPPC.PprNCGMonadSPARC.CodeGen.Gen32SPARC.CodeGen.CondCodeSPARC.CodeGen.AmodeSPARC.CodeGen.Gen64PIC X86.CodeGen SPARC.CodeGen PPC.CodeGen BlockLayoutRegAlloc.Linear.X86_64.FreeRegsRegAlloc.Linear.X86.FreeRegsRegAlloc.Linear.FreeRegsRegAlloc.Linear.JoinToTargetsRegAlloc.Linear.MainDwarf.Constants Dwarf.TypesDwarf AsmCodeGen CodeOutputHscMainInteractiveEvalDriverPipelineGhcMakeDriverMkDependDebugger DriverBkp GhcPrelude GhcExceptionSDocunsafeGlobalDynFlags initGhcMonad TcPluginM Data.Listunconsheadtailnullhs AnnKeywordIdAnnOpenAnnClose AnnHeaderAnnVal cc_flavourcleanCurrentModuleTempFiles runPipelineinitializePluginsrunGhcputIfaceTopBndrgetIfaceTopBndrAnnDecl parseDynFlagsData.MapStrictAnnType AnnBackquoteAnnTildeMx Data.Kind ParsedModule AnnPattern AnnDotdotAnnComma AnnModule AnnImportAnnSafe AnnQualifiedAnnPackageNameAnnAs AnnHidingAnnSemifunTyConRdrNames mkCoreApps mkCoreConApps mkIntExpr mkWordExpr mkCharExpr mkStringExpr mkFloatExpr mkDoubleExpr mkCoreLams mkCoreLetsSubst AnnDcolon AnnForallAnnDot AnnDarrow AnnRarrowAnnBangAnnUnit HsExpressionNoExtLlvmliftedIdsExpander StgLiftLams AnnDefaultAnnInfix AnnInstanceAnnVbarAnnEqual AnnLarrowAnnWhere tcMonoBindsAnnFunIdAnnAtAnnRole AnnForeign AnnExport AnnDerivingAnnStock AnnAnyClassApi AnnNewtypeAnnData AnnNewTypeAnnCLose AnnFamilyAnnOpenP AnnClosePAnnClassLanguage.Haskell.TH.SyntaxaddModFinalizerAnnThenAnnByAnnGroupAnnUsingAnnLetAnnRec Annlarrowtail Annrarrowtail AnnLarrowtail AnnRarrowtailAnnOpenB AnnCloseBAnnLamAnnCaseAnnOfAnnIfAnnElseAnnInAnnDoAnnMinusAnnOpenE AnnOpenEQ AnnCloseQAnnProc AnnStaticAnnColontopSortModuleGraph flattenSCC imp_dep_mods setContextload HscNoRecomptcg_type_env_varTcGblEnv mkCoreLet addExternalbase Debug.TracetraceControl.Monad.FixmfixGHC.Base<*>pure*>MonadFix ApplicativePluginFrontendPluginGHC.Fingerprint.TypeGHC.ExtssortWithForceSpecConstr NoSpecConstrSpecConstrAnnotation Data.Data mkNoRepTypeControl.Monad.IO.ClassliftIOMonadIO Control.Monad mapAndUnzipM Data.Version versionTags versionBranchVersionData.TraversablemapMGHC.Fingerprint getFileHashfingerprintData fingerprint0Control.Exception.Basetry GHC.Conc.SyncthrowTo GHC.IORefIORefGHC.Exception.TypedisplayException fromException toExceptionfingerprintFingerprintsfingerprintStringGHC.Listfoldl1' Data.Functor<$><*liftA2GHC.Stack.Types HasCallStackcontainers-0.6.2.1 Data.Graph flattenSCCs CyclicSCC AcyclicSCCSCCghc-boot-th-8.8.3GHC.ForeignSrcLang.Type RawObjectLangAsm LangObjcxxLangObjcLangCxxLangCForeignSrcLangghc-boot-8.8.3 GHC.PackageDbtrustedexposed indefinite hiddenModulesexposedModules haddockHTMLshaddockInterfaces includeDirsincludes ccOptions ldOptions frameworkDirs frameworkslibraryDynDirs libraryDirsextraGHCiLibrariesextraLibraries hsLibraries importDirs abiDependsdependsabiHash sourceLibNamepackageVersion packageNamesourcePackageIdinstantiatedWith componentIdunitIdInstalledPackageInfo GHC.Lexeme startsConId startsVarId startsConSym startsVarSym ghci-8.8.3SizedSeqsizeSSssElts GHCi.MessageSeq GetClosureRunModFinalizersRunTHStartTHGetBreakpointVarBreakpointStatusEnableBreakpoint NewBreakArrayCostCentreStackInfo MkCostCentresEvalIOEvalStringToString EvalString AbandonStmt ResumeStmtEvalStmtMkConInfoTableFreeFFIPrepFFI MallocStrings MallocData AddSptEntryFreeHValueRefs CreateBCOsFindSystemLibrary ResolveObjsRemoveLibrarySearchPathAddLibrarySearchPath UnloadObjLoadObj LoadArchiveLoadDLL LookupClosure LookupSymbol InitLinkerShutdownMessageEvalAppEvalThisEvalExpr EvalStatus EvalBreak EvalComplete EvalStatus_ EvalSuccess EvalException EvalResultGHCi.RemoteTypesHValue ForeignHValuetransformers-0.5.6.2Control.Monad.Trans.Maybe runMaybeTMaybeT insertListinsertListWith deleteList foldRightfoldRightWithKeyreadHexFingerprintfingerprintByteString FastMutPtr newFastMutIntreadFastMutIntwriteFastMutInt newFastMutPtrreadFastMutPtrwriteFastMutPtrinlinePerformIOExceptionMonadgcatchgmaskgbracketgfinallycatchIOhandleIOtryIOgtryghandle gonException$fExceptionMonadIOmemberinsertdeletetoListfromListemptyutf8DecodeChar#utf8DecodeChar utf8PrevChar utf8CharStartutf8DecodeByteStringutf8DecodeStringLazycountUTF8Charsutf8EncodeCharutf8EncodeStringutf8EncodedLength zEncodeString zDecodeStringtoBase62PaddedtoBase62IntegerLibrary IntegerGMP IntegerSimplecBuildPlatformStringcHostPlatformStringcTargetPlatformString cProjectNamecProjectGitCommitIdcProjectVersioncProjectVersionIntcProjectPatchLevelcProjectPatchLevel1cProjectPatchLevel2cBooterVersioncStagecIntegerLibraryTypecSupportsSplitObjscGhcWithInterpretercGhcWithNativeCodeGen cGhcWithSMP cGhcRTSWayscGhcRtsWithLibdwcGhcEnableTablesNextToCodecLeadingUnderscorecGHC_UNLIT_PGMcGHC_SPLIT_PGMcLibFFI cGhcThreaded cGhcDebugged$fEqIntegerLibrary hiVersionmAX_TUPLE_SIZEmAX_CTUPLE_SIZE mAX_SUM_SIZEmAX_REDUCTION_DEPTHmAX_SOLVER_ITERATIONS wORD64_SIZE fLOAT_SIZEtARGET_MAX_CHARArchive ArchiveEntryfilenamefiletimefileownfilegrpfilemodefilesizefiledataafilter isBSDSymdef isGNUSymdefparseAr writeBSDAr writeGNUArloadArloadObj$fEqArchiveEntry$fShowArchiveEntry $fEqArchive $fShowArchive$fSemigroupArchive$fMonoidArchive emptyHooksBlockBlockCOBlockCCBlockOCBNilBMiddleBCatBSnocBConsMaybeOJustONothingO IndexedCOCO isEmptyBlock emptyBlock blockCons blockSnoc blockJoinHead blockJoinTail blockJoin blockAppend firstNodelastNodeblockSplitHeadblockSplitTail blockSplit blockToList blockFromListreplaceFirstNodereplaceLastNodemapBlock mapBlock' mapBlock3'foldBlockNodesFfoldBlockNodesB3foldBlockNodesB$fFunctorMaybeO$fFunctorMaybeC UniqueMap UniqueSetIsMapKeyOfmapNullmapSize mapMember mapLookupmapFindWithDefaultmapEmpty mapSingleton mapInsert mapInsertWith mapDeletemapAlter mapAdjustmapUnionmapUnionWithKey mapDifferencemapIntersection mapIsSubmapOfmapMap mapMapWithKeymapFoldlmapFoldrmapFoldlWithKeymapFoldMapWithKey mapFiltermapFilterWithKeymapElemsmapKeys mapToList mapFromListmapFromListWithIsSetElemOfsetNullsetSize setMembersetEmpty setSingleton setInsert setDeletesetUnion setDifferencesetIntersection setIsSubsetOf setFiltersetFoldlsetFoldrsetElems setFromList setInsertList setDeleteList setUnions mapInsertList mapDeleteList mapUnions$fIsSetUniqueSet$fIsMapUniqueMap $fEqUniqueSet$fOrdUniqueSet$fShowUniqueSet$fSemigroupUniqueSet$fMonoidUniqueSet $fEqUniqueMap$fOrdUniqueMap$fShowUniqueMap$fFunctorUniqueMap$fFoldableUniqueMap$fTraversableUniqueMapunListTselectfoldrunListT$fMonadPlusListT$fMonadFailListT $fMonadListT$fAlternativeListT$fApplicativeListT$fFunctorListTliftIO1liftIO2liftIO3liftIO4 zipWith3M zipWith3M_ zipWith4MzipWithAndUnzipM mapAndUnzip3M mapAndUnzip4M mapAndUnzip5M mapAccumLMmapSndM concatMapM mapMaybeM fmapMaybeM fmapEitherManyMallMorMfoldlMfoldlM_foldrM maybeMapMwhenMunlessM filterOutMtext warnPprTraceshowSDocUnsafePlainGhcException PlainSignalPlainUsageErrorPlainCmdLineError PlainSorryPlainInstallationErrorPlainProgramErrorprogNameshowPlainGhcExceptionpanicsorrypgmError cmdLineErrorcmdLineErrorIO assertPanic$fShowPlainGhcException$fExceptionPlainGhcExceptionSignal UsageError CmdLineErrorPprPanicSorryPprSorryInstallationError ProgramErrorPprProgramError showExceptionsafeShowExceptionshowGhcExceptionthrowGhcExceptionthrowGhcExceptionIOhandleGhcExceptionpanicDocsorryDoc pgmErrorDoctryMostwithSignalHandlers$fShowGhcException$fExceptionGhcExceptionCondALWAYSEQQGEGEUGTTGULELEULTTLUNE condNegate condUnsigned condToSignedcondToUnsigned$fEqCondis_ident is_symbolis_anyis_spaceis_loweris_upperis_digit is_alphanumhexDigit octDecDigit is_decdigit is_hexdigit is_octdigit is_bindigit PPC_64ABIELF_V1ELF_V2ArmABISOFTSOFTFPHARD ArmISAExtVFPv2VFPv3VFPv3D16NEONIWMMX2ArmISAARMv5ARMv6ARMv7OS OSUnknownOSLinuxOSDarwin OSSolaris2 OSMinGW32 OSFreeBSD OSDragonFly OSOpenBSDOSNetBSD OSKFreeBSDOSHaikuOSQNXNTOOSAIXOSHurdArch ArchUnknownArchX86 ArchX86_64ArchPPC ArchPPC_64 ArchSPARC ArchSPARC64ArchARM ArchARM64 ArchAlpha ArchMipseb ArchMipselArchJavaScript ppc_64ABIarmISA armISAExtarmABI platformArch platformOSplatformWordSizeplatformUnregisterisedplatformHasGnuNonexecStackplatformHasIdentDirective platformHasSubsectionsViaSymbolsplatformIsCrossCompilingisARM target32Bit osElfTarget osMachOTargetplatformUsesFrameworksosSubsectionsViaSymbols$fReadOS$fShowOS$fEqOS $fReadArmISA $fShowArmISA $fEqArmISA$fReadArmISAExt$fShowArmISAExt $fEqArmISAExt $fReadArmABI $fShowArmABI $fEqArmABI$fReadPPC_64ABI$fShowPPC_64ABI $fEqPPC_64ABI $fReadArch $fShowArch$fEqArch$fReadPlatform$fShowPlatform $fEqPlatform GeneralFlagDumpFlaghasNoDebugOutput hasPprDebugshouldUseHexWordLiteralsshouldUseColor useStarIsTypeuseUnicodeSyntax useUnicodepprCols pprUserLengthtargetPlatformpc_platformConstantspc_CONTROL_GROUP_CONST_291pc_STD_HDR_SIZEpc_PROF_HDR_SIZE pc_BLOCK_SIZEpc_BLOCKS_PER_MBLOCKpc_TICKY_BIN_COUNTpc_OFFSET_StgRegTable_rR1pc_OFFSET_StgRegTable_rR2pc_OFFSET_StgRegTable_rR3pc_OFFSET_StgRegTable_rR4pc_OFFSET_StgRegTable_rR5pc_OFFSET_StgRegTable_rR6pc_OFFSET_StgRegTable_rR7pc_OFFSET_StgRegTable_rR8pc_OFFSET_StgRegTable_rR9pc_OFFSET_StgRegTable_rR10pc_OFFSET_StgRegTable_rF1pc_OFFSET_StgRegTable_rF2pc_OFFSET_StgRegTable_rF3pc_OFFSET_StgRegTable_rF4pc_OFFSET_StgRegTable_rF5pc_OFFSET_StgRegTable_rF6pc_OFFSET_StgRegTable_rD1pc_OFFSET_StgRegTable_rD2pc_OFFSET_StgRegTable_rD3pc_OFFSET_StgRegTable_rD4pc_OFFSET_StgRegTable_rD5pc_OFFSET_StgRegTable_rD6pc_OFFSET_StgRegTable_rXMM1pc_OFFSET_StgRegTable_rXMM2pc_OFFSET_StgRegTable_rXMM3pc_OFFSET_StgRegTable_rXMM4pc_OFFSET_StgRegTable_rXMM5pc_OFFSET_StgRegTable_rXMM6pc_OFFSET_StgRegTable_rYMM1pc_OFFSET_StgRegTable_rYMM2pc_OFFSET_StgRegTable_rYMM3pc_OFFSET_StgRegTable_rYMM4pc_OFFSET_StgRegTable_rYMM5pc_OFFSET_StgRegTable_rYMM6pc_OFFSET_StgRegTable_rZMM1pc_OFFSET_StgRegTable_rZMM2pc_OFFSET_StgRegTable_rZMM3pc_OFFSET_StgRegTable_rZMM4pc_OFFSET_StgRegTable_rZMM5pc_OFFSET_StgRegTable_rZMM6pc_OFFSET_StgRegTable_rL1pc_OFFSET_StgRegTable_rSppc_OFFSET_StgRegTable_rSpLimpc_OFFSET_StgRegTable_rHppc_OFFSET_StgRegTable_rHpLimpc_OFFSET_StgRegTable_rCCCS!pc_OFFSET_StgRegTable_rCurrentTSO%pc_OFFSET_StgRegTable_rCurrentNurserypc_OFFSET_StgRegTable_rHpAllocpc_OFFSET_stgEagerBlackholeInfopc_OFFSET_stgGCEnter1pc_OFFSET_stgGCFunpc_OFFSET_Capability_rpc_OFFSET_bdescr_startpc_OFFSET_bdescr_freepc_OFFSET_bdescr_blockspc_OFFSET_bdescr_flagspc_SIZEOF_CostCentreStack#pc_OFFSET_CostCentreStack_mem_alloc pc_REP_CostCentreStack_mem_alloc#pc_OFFSET_CostCentreStack_scc_count pc_REP_CostCentreStack_scc_countpc_OFFSET_StgHeader_ccspc_OFFSET_StgHeader_ldvwpc_SIZEOF_StgSMPThunkHeaderpc_OFFSET_StgEntCounter_allocspc_REP_StgEntCounter_allocspc_OFFSET_StgEntCounter_allocdpc_REP_StgEntCounter_allocd#pc_OFFSET_StgEntCounter_registeredppc_OFFSET_StgEntCounter_link#pc_OFFSET_StgEntCounter_entry_countpc_SIZEOF_StgUpdateFrame_NoHdrpc_SIZEOF_StgMutArrPtrs_NoHdrpc_OFFSET_StgMutArrPtrs_ptrspc_OFFSET_StgMutArrPtrs_size"pc_SIZEOF_StgSmallMutArrPtrs_NoHdr!pc_OFFSET_StgSmallMutArrPtrs_ptrspc_SIZEOF_StgArrBytes_NoHdrpc_OFFSET_StgArrBytes_bytespc_OFFSET_StgTSO_alloc_limitpc_OFFSET_StgTSO_cccspc_OFFSET_StgTSO_stackobjpc_OFFSET_StgStack_sppc_OFFSET_StgStack_stack pc_OFFSET_StgUpdateFrame_updatee"pc_OFFSET_StgFunInfoExtraFwd_aritypc_REP_StgFunInfoExtraFwd_aritypc_SIZEOF_StgFunInfoExtraRev"pc_OFFSET_StgFunInfoExtraRev_aritypc_REP_StgFunInfoExtraRev_aritypc_MAX_SPEC_SELECTEE_SIZEpc_MAX_SPEC_AP_SIZEpc_MIN_PAYLOAD_SIZEpc_MIN_INTLIKEpc_MAX_INTLIKEpc_MIN_CHARLIKEpc_MAX_CHARLIKEpc_MUT_ARR_PTRS_CARD_BITSpc_MAX_Vanilla_REGpc_MAX_Float_REGpc_MAX_Double_REGpc_MAX_Long_REGpc_MAX_XMM_REGpc_MAX_Real_Vanilla_REGpc_MAX_Real_Float_REGpc_MAX_Real_Double_REGpc_MAX_Real_XMM_REGpc_MAX_Real_Long_REGpc_RESERVED_C_STACK_BYTESpc_RESERVED_STACK_WORDSpc_AP_STACK_SPLIM pc_WORD_SIZEpc_DOUBLE_SIZE pc_CINT_SIZE pc_CLONG_SIZEpc_CLONG_LONG_SIZEpc_BITMAP_BITS_SHIFT pc_TAG_BITSpc_WORDS_BIGENDIANpc_DYNAMIC_BY_DEFAULT pc_LDV_SHIFTpc_ILDV_CREATE_MASKpc_ILDV_STATE_CREATEpc_ILDV_STATE_USE$fReadPlatformConstants StaticPlugin LoadedPluginNEGNEVERPOSVCVS runState'getgetsputmodify evalState execStaterunState $fMonadState$fApplicativeState$fFunctorState runStreamyieldcollectmap mapAccumL $fMonadStream$fApplicativeStream$fFunctorStream expandTopDir expandToolDir findTopDir findToolDirstderrSupportsAnsiColorsTcLclEnv isFunTyConisUnboxedTupleTyCon isTupleTyConOverridingBoolAutoAlwaysNeverHasDebugCallStack DirectionForwards BackwardsSuffix ghciSupported debugIsOn ncgDebugIsOnghciTablesNextToCode isWindowsHost isDarwinHostnTimesfstOf3sndOf3thdOf3fst3snd3third3uncurry3liftFstliftSndfirstMfirst3MsecondM filterOut partitionWith chkAppendzipEqual zipWithEqual zipWith3Equal zipWith4EqualzipLazy zipWithLazy zipWith3Lazy filterByList filterByListspartitionByListstretchZipWithmapFstmapSnd mapAndUnzip mapAndUnzip3zipWithAndUnzip zipAndUnzip mapAccumL2nOfThematLength lengthExceeds lengthAtLeastlengthIs lengthIsNot lengthAtMostlengthLessThan listLengthCmp equalLength compareLengthleLengthltLength singleton isSingletonnotNullonlyisInisn'tIn chunkList changeLastminWithnubSortordNubtransitiveClosurefoldl2all2count countWhiletakeListdropList splitAtListdropTaildropWhileEndLEspanEndlast2snocViewsplit capitaliseisEqualthenCmpeqListBy eqMaybeBycmpList removeSpaces<&&><||> fuzzyMatch fuzzyLookup unzipWithseqListglobal consIORefglobalM sharedGlobal sharedGlobalMlooksLikeModuleNamelooksLikePackageNamegetCmd toCmdArgstoArgs exactLog2 readRationalreadHexRational maybeReadmaybeReadFuzzydoesDirNameExistgetModificationUTCTimemodificationTimeIfExistssplitLongestPrefix escapeSpacesreslashmakeRelativeToabstractConstrabstractDataTypecharToC hashString overrideWith$fShowOverridingBoolSchemesHeadersMessagesWarningsErrorsFatalsMargin renderColourrenderColourAfresh colCustomcolResetcolBold colBlackFgcolRedFg colGreenFg colYellowFg colBlueFg colMagentaFg colCyanFg colWhiteFg defaultScheme parseScheme$fMonoidPprColour$fSemigroupPprColourMaybeErr SucceededFailed firstJust firstJusts expectJust whenIsJustorElse rightToMaybe liftMaybeT tryMaybeT isSuccessfailME$fMonadMaybeErr$fApplicativeMaybeErr$fFunctorMaybeErr PtrStringuniqn_charsfs_bsfs_ref FastZStringfastStringToByteStringfastZStringToByteStringunsafeMkByteStringhPutFZSzString lengthFZS mkFastString#mkFastStringBytesmkFastStringForeignPtrmkFastStringByteString mkFastStringmkFastStringByteListlengthFS hasZEncodingnullFSunpackFSbytesFS zEncodeFSappendFSconcatFSheadFStailFSconsFS uniqueOfFSnilFSisUnderscoreFSgetFastStringTablehPutFS mkPtrString# mkPtrStringunpackPtrStringlengthPSsLitfsLit$fDataFastString$fShowFastString$fMonoidFastString$fSemigroupFastString$fIsStringFastString$fOrdFastString$fEqFastString$fNFDataFastZStringbuflencurhGetStringBufferhGetStringBufferBlockhPutStringBufferappendStringBuffersstringToStringBuffernextChar currentCharprevCharstepOn offsetBytesbyteDiffatEndatLinelexemeToStringlexemeToFastStringdecodePrevNCharsparseUnsignedInteger$fShowStringBuffer ComponentIdInstalledUnitIdUnitId ModuleName unitIdString moduleUnitId moduleNamePackageConfigMap PackageStategetPackageConfigMap improveUnitIddisplayInstalledUnitIdcomponentIdStringemptyPackageStateisLexConisLexVarisLexIdisLexSym isLexConId isLexVarId isLexConSym isLexVarSymokVarOccokConOccokTcOcc okVarIdOcc okVarSymOcc okConIdOcc okConSymOcc BufHandle newBufHandlebPutCharbPutStrbPutFSbPutFZS bPutPtrString bPutReplicatebFlushModePageMode ZigZagModeLeftMode OneLineModeStylemode lineLengthribbonsPerLine TextDetailsChrStrPStrZStrLStrRStrDoccharftextptextztext sizedText zeroWidthTextisEmptysemicommacolonspaceequalslparenrparenlbrackrbracklbracerbraceintintegerfloatdoublerationalhexquotesquote doubleQuotesparensbracketsbraces maybeParenshcathsepvcatnesthang hangNotEmpty punctuate$$$+$<><+>sepcatfcatfsepstyle renderStyle txtPrinter fullRenderprintDoc printDoc_ bufLeftRender $fShowDocOutputableBndrpprBndr pprPrefixOcc pprInfixOccbndrIsJoin_maybe BindingSite LambdaBindCaseBind CasePatBindLetBindpprpprPrecrunSDoc QualifyName NameUnqualNameQualNameNotInScope1NameNotInScope2QueryQualifyPackageQueryQualifyModuleQueryQualifyNamePrintUnqualified QueryQualifyqueryQualifyNamequeryQualifyModulequeryQualifyPackageDepth AllTheWayPartWay CodeStyleCStyleAsmStylePprStylereallyAlwaysQualifyNamesalwaysQualifyNamesneverQualifyNamesalwaysQualifyModulesneverQualifyModulesalwaysQualifyPackagesneverQualifyPackagesreallyAlwaysQualify alwaysQualify neverQualifydefaultUserStyledefaultDumpStyle mkDumpStyledefaultErrStyle mkErrStylecmdlineParserStyle mkUserStylesetStyleColouredinitSDocContext withPprStylewithPprStyleDoc pprDeeper pprDeeperList pprSetDepth getPprStylesdocWithDynFlagssdocWithPlatformupdSDocDynFlagsqualName qualModule qualPackage queryQual codeStyleasmStyle dumpStyle debugStyle userStyle getPprDebug ifPprDebug whenPprDebug printSDoc printSDocLn printForUserprintForUserPartWay printForCbufLeftRenderSDocpprCode mkCodeStyleshowSDocshowPprshowSDocUnqualshowSDocForUser showSDocDump showSDocDebugrenderWithStyleshowSDocOneLineshowSDocDumpOneLine docToSDocword doublePrec angleBracketscparen blankLinedcolonarrowlarrowdarrowarrowtlarrowtarrowttlarrowtt underscoredotvbar forAllLitkindTypebullet unicodeSyntaxppWhenppUnlesscolouredkeyword pprHsChar pprHsString pprHsBytesprimCharSuffixprimFloatSuffix primIntSuffixprimDoubleSuffixprimWordSuffixprimInt64SuffixprimWord64Suffix pprPrimChar pprPrimInt pprPrimWord pprPrimInt64 pprPrimWord64 pprPrefixVar pprInfixVarpprFastFilePath pprWithCommas pprWithBars interppSP interpp'SP pprQuotedListquotedListWithOrquotedListWithNor intWithCommasspeakNthspeakNspeakNOfpluralisOrAredoOrDoes callStackDocpprPanicpprSorry pprPgmError pprTraceDebugpprTrace pprTraceM pprTraceItpprTraceException pprSTraceassertPprPanicpprDebugAndThen$fIsStringSDoc$fOutputableExtension$fOutputableSerialized$fOutputableSCC$fOutputableFingerprint$fOutputableIntMap$fOutputableMap$fOutputableFastString$fOutputable(,,,,,,)$fOutputable(,,,,,)$fOutputable(,,,,)$fOutputable(,,,)$fOutputable(,,)$fOutputableEither$fOutputableMaybe$fOutputable(,)$fOutputableSet$fOutputable[]$fOutputable()$fOutputableWord$fOutputableWord32$fOutputableWord16$fOutputableInteger$fOutputableInt$fOutputableInt64$fOutputableInt32$fOutputableOrdering$fOutputableBool$fOutputableChar$fOutputablePprStyle$fOutputableQualifyName MCoercionN CoercionN ThetaTypePredType MCoercion TyCoBinderTyLitTCvSubstUnivCoProvenanceTyThingisRuntimeRepTypprTypepprKindTcTyVarDetails MetaDetailsvanillaSkolemTvpprTcTyVarDetailspFstpSndunPairtoPairswappLiftFstpLiftSnd$fOutputablePair $fMonoidPair$fSemigroupPair$fTraversablePair$fFoldablePair$fApplicativePair $fFunctorPairnilOLunitOLsnocOLconsOLconcatOLlastOLisNilOLappOLfromOLmapOLfoldrOLfoldlOLtoOL reverseOL$fTraversableOrdList$fFoldableOrdList$fFunctorOrdList$fMonoidOrdList$fSemigroupOrdList$fOutputableOrdListAssocgetNth deleteBys unionLists minusListassocDefaultUsingassoc assocDefault assocUsing assocMaybe hasNoDups equivClasses removeDups findDupsEqToJsonjsonJsonDocJSNullJSBoolJSIntJSStringJSArrayJSObject renderJSONescapeJsonString HasSrcSpancomposeSrcSpandecomposeSrcSpan SrcSpanLess RealLocatedLocated GenLocatedLSrcSpan RealSrcSpan UnhelpfulSpan srcSpanFile RealSrcLoc UnhelpfulLocLLmkSrcLoc mkRealSrcLocnoSrcLocgeneratedSrcLocinteractiveSrcLocmkGeneralSrcLoc srcLocFile srcLocLine srcLocCol advanceSrcLoc sortLocated noSrcSpanwiredInSrcSpaninteractiveSrcSpanmkGeneralSrcSpan srcLocSpanrealSrcLocSpan mkRealSrcSpan mkSrcSpancombineSrcSpanssrcSpanFirstCharacter isGoodSrcSpan isOneLineSpan containsSpansrcSpanStartLinesrcSpanEndLinesrcSpanStartCol srcSpanEndCol srcSpanStart srcSpanEndrealSrcSpanStartrealSrcSpanEndsrcSpanFileName_maybepprUserRealSpanunLocgetLocnoLocmkGeneralLocated combineLocsaddCLoc eqLocated cmpLocated rightmostleftmost_smallestleftmost_largestspans isSubspanOfdLcL onHasSrcSpanliftLgetRealSrcSpan unRealSrcSpan$fShowRealSrcLoc$fOutputableRealSrcLoc$fOutputableSrcLoc$fOutputableRealSrcSpan$fShowRealSrcSpan$fOrdRealSrcSpan$fToJsonRealSrcSpan$fDataRealSrcSpan$fOutputableSrcSpan$fNFDataSrcSpan$fToJsonSrcSpan $fDataSrcSpan$fOutputableGenLocated$fHasSrcSpanGenLocated$fEqRealSrcLoc$fOrdRealSrcLoc $fEqSrcLoc $fOrdSrcLoc $fShowSrcLoc$fEqRealSrcSpan $fEqSrcSpan $fOrdSrcSpan $fShowSrcSpan$fEqGenLocated$fOrdGenLocated$fDataGenLocated$fFunctorGenLocated$fFoldableGenLocated$fTraversableGenLocated IdDetails pprIdDetailsisCoVarDetails coVarDetails vanillaIdInfoMsgDocSeverity SevOutputSevFatalSevInteractiveSevDumpSevInfo SevWarningSevErrordumpSDocgetCaretDiagnosticmkLocMessageAnn mkLocMessage sectionTypeSpliceExplicitFlagExplicitSpliceImplicitSplice IntWithInf FractionalLitFLfl_textfl_negfl_value IntegralLitILil_textil_negil_value InlineSpecInline InlinableNoInline NoUserInline InlinePragmainl_src inl_inlineinl_satinl_actinl_rule RuleMatchInfoFunLike Activation NeverActive AlwaysActive ActiveBefore ActiveAfter CompilerPhasePhase InitialPhasePhaseNum SourceText NoSourceText SuccessFlag DefMethSpec VanillaDM GenericDM TailCallInfoAlwaysTailCalledNoTailCallInfo OneBranch InsideLamInterestingCxtOccInfoManyOccsIAmDeadOneOccIAmALoopBreakerocc_tail occ_in_lam occ_one_br occ_int_cxtocc_rules_onlyEPfromEPtoEP TupleSort BoxedTuple UnboxedTupleConstraintTuplePprPrec OverlapMode NoOverlap Overlappable OverlappingOverlaps Incoherent OverlapFlag overlapMode isSafeOverlapOrigin FromSource GeneratedRecFlag Recursive NonRecursiveBoxityBoxedUnboxed TopLevelFlagTopLevel NotTopLevel LexicalFixityPrefixInfixFixityDirectionInfixLInfixRInfixNFixityRuleName WarningTxt DeprecatedTxt StringLiteralsl_stsl_fsFunctionOrData IsFunctionIsData PromotionFlag NotPromoted IsPromotedSwapFlag NotSwapped IsSwapped OneShotInfo NoOneShotInfo OneShotLam AlignmentConTagZConTag JoinArityRepArityArity LeftOrRightCLeftCRightpickLR fIRST_TAG noOneShotInfo isOneShotInfohasNoOneShotInfo worstOneShot bestOneShotflipSwap isSwappedunSwap isPromoted bumpVersioninitialVersionpprWarningTxtForMsg pprRuleName maxPrecedence minPrecedence defaultFixity negateFixity funTyFixity compareFixity isNotTopLevel isTopLevelisBoxedisRecisNonRec boolToRecFlag isGeneratedsetOverlapModeMaybehasIncoherentFlaghasOverlappableFlaghasOverlappingFlagtopPrecsigPrecfunPrecopPrecappPrec maybeParentupleSortBoxityboxityTupleSort tupleParens sumParenspprAlternative noOccInfo isManyOccs seqOccInfo insideLam notInsideLam oneBranch notOneBranch tailCallInfozapOccTailCallInfoisAlwaysTailCalledstrongLoopBreakerweakLoopBreakerisWeakLoopBreakerisStrongLoopBreaker isDeadOccisOneOcc zapFragileOcc successIf succeededfailedpprWithSourceTextactiveAfterInitialactiveDuringFinal isConLike isFunLikenoUserInlineSpecdefaultInlinePragmaalwaysInlinePragmaneverInlinePragmainlinePragmaSpecdfunInlinePragmaisDefaultInlinePragmaisInlinePragmaisInlinablePragmaisAnyInlinePragmainlinePragmaSatinlinePragmaActivationinlinePragmaRuleMatchInfosetInlinePragmaActivationsetInlinePragmaRuleMatchInfo pprInlinepprInlineDebugisActive isActiveIn competesWith isNeverActiveisAlwaysActive isEarlyActive mkIntegralLitnegateIntegralLitmkFractionalLitnegateFractionalLitintegralFractionalLitinfinity intGtLimittreatZeroAsInf mkIntWithInf$fOutputableLeftOrRight$fOutputableOneShotInfo$fOutputableSwapFlag$fOutputableFunctionOrData$fOutputableFixityDirection$fOutputableLexicalFixity$fOutputableTopLevelFlag$fOutputableBoxity$fOutputableRecFlag$fOutputableOrigin$fOutputableTailCallInfo$fOutputableOccInfo$fOutputableDefMethSpec$fOutputableSuccessFlag$fOutputableSourceText$fOutputableOverlapMode$fOutputableOverlapFlag $fEqFixity$fOutputableFixity$fOutputableStringLiteral$fEqStringLiteral$fOutputableWarningTxt$fOutputableCompilerPhase$fOutputableActivation$fOutputableRuleMatchInfo$fOutputableInlineSpec$fOutputableInlinePragma$fOutputableIntegralLit$fOrdIntegralLit$fEqIntegralLit$fOutputableFractionalLit$fOrdFractionalLit$fEqFractionalLit$fNumIntWithInf$fOutputableIntWithInf$fOrdIntWithInf$fEqLeftOrRight$fDataLeftOrRight$fEqOneShotInfo$fEqPromotionFlag$fDataPromotionFlag$fEqFunctionOrData$fOrdFunctionOrData$fDataFunctionOrData$fEqFixityDirection$fDataFixityDirection$fDataLexicalFixity$fEqLexicalFixity $fEqBoxity $fDataBoxity $fEqRecFlag $fDataRecFlag $fEqOrigin $fDataOrigin $fEqPprPrec $fOrdPprPrec $fShowPprPrec $fEqTupleSort$fDataTupleSort$fEqTailCallInfo $fEqOccInfo$fDataSourceText$fShowSourceText$fEqSourceText$fEqOverlapMode$fDataOverlapMode$fEqOverlapFlag$fDataOverlapFlag $fDataFixity$fDataStringLiteral$fEqWarningTxt$fDataWarningTxt$fEqActivation$fDataActivation$fEqRuleMatchInfo$fDataRuleMatchInfo$fShowRuleMatchInfo$fEqInlineSpec$fDataInlineSpec$fShowInlineSpec$fEqInlinePragma$fDataInlinePragma$fDataIntegralLit$fShowIntegralLit$fDataFractionalLit$fShowFractionalLit$fEqIntWithInf$fDataSpliceExplicitFlag Uniquable getUnique uNIQUE_BITSmkUniqueGrimilygetKey deriveUnique newTagUniquemkUnique unpkUniqueisValidKnownKeyUniquehasKeyeqUniqueltUniquenonDetCmpUniquepprUniqueAlwaysmkAlphaTyVarUnique mkCoVarUniquemkPreludeClassUniquemkPreludeTyConUniquetyConRepNameUniquemkPreludeDataConUniquedataConWorkerUniquedataConTyRepNameUniquemkPrimOpIdUniquemkPrimOpWrapperUniquemkPreludeMiscIdUniqueinitTyVarUniquemkBuiltinUniquemkPseudoUniqueDmkPseudoUniqueEmkPseudoUniqueHmkRegSingleUniquemkRegSubUniquemkRegPairUniquemkRegClassUniquemkCostCentreUniquemkVarOccUniquemkDataOccUnique mkTvOccUnique mkTcOccUniqueinitExitJoinUnique $fShowUnique$fOutputableUnique $fEqUnique$fUniquableUnique$fUniquableInt$fUniquableFastString MonadUniquegetUniqueSupplyM getUniqueM getUniquesMUniqSMinitUniqSupplymkSplitUniqSupplysplitUniqSupplylistSplitUniqSupplyuniqFromSupplyuniqsFromSupplytakeUniqFromSupplysplitUniqSupply3splitUniqSupply4initUsinitUs_ lazyThenUsgetUniqueSupplyM3liftUs lazyMapUs$fMonadFixUniqSM$fMonadFailUniqSM$fApplicativeUniqSM$fFunctorUniqSM $fMonadUniqSM$fMonadUniqueUniqSMemptyUFM isNullUFMunitUFMunitDirectlyUFM listToUFMlistToUFM_Directly listToUFM_CaddToUFM addListToUFMaddListToUFM_DirectlyaddToUFM_Directly addToUFM_C addToUFM_AccalterUFMaddListToUFM_C adjustUFMadjustUFM_Directly delFromUFMdelListFromUFMdelListFromUFM_DirectlydelFromUFM_DirectlyplusUFM plusUFM_C plusUFM_CDplusMaybeUFM_C plusUFMListminusUFM intersectUFMintersectUFM_C disjointUFMfoldUFMmapUFMmapUFM_Directly filterUFMfilterUFM_Directly partitionUFMsizeUFMelemUFMelemUFM_Directly lookupUFMlookupUFM_DirectlylookupWithDefaultUFMlookupWithDefaultUFM_DirectlyeltsUFMufmToSet_DirectlyanyUFMallUFM seqEltsUFM nonDetEltsUFM nonDetKeysUFM nonDetFoldUFMnonDetFoldUFM_DirectlynonDetUFMToList ufmToIntMap equalKeysUFM pprUniqFMpprUFMpprUFMWithKeys pluralUFM$fOutputableUniqFM$fMonoidUniqFM$fSemigroupUniqFM $fDataUniqFM $fEqUniqFM$fFunctorUniqFM emptyUniqSet unitUniqSet mkUniqSetaddOneToUniqSetaddListToUniqSetdelOneFromUniqSetdelOneFromUniqSet_DirectlydelListFromUniqSetdelListFromUniqSet_Directly unionUniqSetsunionManyUniqSets minusUniqSetintersectUniqSetsrestrictUniqSetToUFMuniqSetMinusUFMelementOfUniqSetelemUniqSet_Directly filterUniqSetfilterUniqSet_DirectlypartitionUniqSet uniqSetAny uniqSetAll sizeUniqSetisEmptyUniqSet lookupUniqSetlookupUniqSet_DirectlynonDetEltsUniqSetnonDetKeysUniqSetnonDetFoldUniqSetnonDetFoldUniqSet_Directly mapUniqSet getUniqSetunsafeUFMToUniqSet pprUniqSet$fOutputableUniqSet $fEqUniqSet $fDataUniqSet$fSemigroupUniqSet$fMonoidUniqSet emptyUniqMap isNullUniqMap unitUniqMap listToUniqMaplistToUniqMap_C addToUniqMapaddListToUniqMapaddToUniqMap_CaddToUniqMap_Acc alterUniqMapaddListToUniqMap_C adjustUniqMapdelFromUniqMapdelListFromUniqMap plusUniqMap plusUniqMap_CplusMaybeUniqMap_CplusUniqMapList minusUniqMapintersectUniqMapdisjointUniqMap mapUniqMap filterUniqMappartitionUniqMap sizeUniqMap elemUniqMap lookupUniqMaplookupWithDefaultUniqMap anyUniqMap allUniqMap$fOutputableUniqMap$fMonoidUniqMap$fSemigroupUniqMap $fDataUniqMap $fEqUniqMap$fFunctorUniqMapNodenodeId nodeClass nodeColor nodeConflictsnodeExclusionsnodePreference nodeCoalesceGraphgraphMapTriv initGraphgraphMapModifynewNode emptyUDFMunitUDFM addToUDFM addToUDFM_C addListToUDFM delFromUDFM plusUDFM_CplusUDFM lookupUDFMlookupUDFM_DirectlyelemUDFMfoldUDFMnonDetFoldUDFMeltsUDFM filterUDFMfilterUDFM_Directly udfmToList equalKeysUDFM isNullUDFMsizeUDFM intersectUDFMudfmIntersectUFMintersectsUDFM disjointUDFMdisjointUdfmUfm minusUDFM udfmMinusUFM partitionUDFMdelListFromUDFM udfmToUfm listToUDFM adjustUDFM alterUDFMmapUDFManyUDFMallUDFMalwaysUnsafeUfmToUdfm pprUniqDFMpprUDFM$fFunctorTaggedVal $fEqTaggedVal$fOutputableUniqDFM$fMonoidUniqDFM$fSemigroupUniqDFM$fDataTaggedVal $fDataUniqDFM$fFunctorUniqDFM emptyUniqDSet unitUniqDSet mkUniqDSetaddOneToUniqDSetaddListToUniqDSetdelOneFromUniqDSetdelListFromUniqDSetunionUniqDSetsunionManyUniqDSets minusUniqDSetuniqDSetMinusUniqSetintersectUniqDSetsuniqDSetIntersectUniqSet foldUniqDSetelementOfUniqDSetfilterUniqDSet sizeUniqDSetisEmptyUniqDSetlookupUniqDSetuniqDSetToListpartitionUniqDSet mapUniqDSet getUniqDSet pprUniqDSet$fOutputableUniqDSet $fEqUniqDSet$fDataUniqDSet$fSemigroupUniqDSet$fMonoidUniqDSetDFastStringEnv emptyFsEnv unitFsEnv extendFsEnvextendFsEnvList lookupFsEnv alterFsEnvmkFsEnv elemFsEnv plusFsEnv plusFsEnv_C extendFsEnv_CmapFsEnvextendFsEnv_AccextendFsEnvList_C delFromFsEnvdelListFromFsEnv filterFsEnvlookupFsEnv_NF emptyDFsEnv dFsEnvEltsmkDFsEnv lookupDFsEnv RcIntegerRcFloatRcDouble RcDoubleSSE$fOutputableRegClass$fUniquableRegClass $fEqRegClassRegSubSubL16SubL8SubL8HClassG32ClassG16ClassG8ClassF64worstboundsqueese$fUniquableReg$fShowRegClass$fEnumRegClass $fShowRegSub $fEnumRegSub $fOrdRegSub $fEqRegSub $fShowReg$fEqReg classOfReg regsOfClassregNameregAlias RegVirtualRegRealRealReg RealRegSingle RealRegPair VirtualReg VirtualRegI VirtualRegHi VirtualRegF VirtualRegD VirtualRegSSERegNorenameVirtualRegclassOfVirtualReggetHiVirtualRegFromLogetHiVRegFromLoregNosOfRealReg realRegsAlias regSingleregPair isRealReg takeRealReg isVirtualRegtakeVirtualRegliftPatchFnToRegReg$fOutputableVirtualReg$fUniquableVirtualReg$fOrdVirtualReg$fOutputableRealReg$fUniquableRealReg$fOutputableReg$fEqVirtualReg$fShowVirtualReg $fEqRealReg $fShowRealReg $fOrdRealReg$fOrdReg trivColorable dumpGraphdotGraph lookupNodegetNodeaddNodedelNodemodNodesizeunion addConflict delConflict addConflicts addExclusion addExclusions addCoalesce delCoalesce addPreference coalesceGraph coalesceNodes freezeNodefreezeOneInGraphfreezeAllInGraph scanGraph validateGraphslurpNodeConflictCountsetColor colorGraph SymbolTable DictionaryUserData ud_get_name ud_get_fsud_put_nonbinding_nameud_put_binding_name ud_put_fsput_Bin BinHandle getUserData setUserData withBinBuffercastBinputAtgetAt openBinMemtellBinseekBinseekByisEOFBin writeBinMem readBinMemputBytegetBytelazyPutlazyGet newReadState newWriteState putDictionary getDictionaryputFS$fBinarySourceText$fBinarySerialized$fBinarySrcSpan$fBinaryRealSrcSpan$fBinaryGenLocated$fBinaryStringLiteral$fBinaryWarningTxt$fBinaryFixity$fBinaryFixityDirection$fBinaryOverlapFlag$fBinaryOverlapMode$fBinaryRecFlag$fBinaryInlineSpec$fBinaryRuleMatchInfo$fBinaryInlinePragma$fBinaryActivation$fBinaryTupleSort$fBinaryFunctionOrData$fBinaryFingerprint$fBinaryPromotionFlag$fBinaryLeftOrRight$fBinaryFastString$fBinaryByteString$fBinarySomeTypeRep$fBinaryTypeRep$fBinaryTypeLitSort$fBinaryKindRep$fBinaryRuntimeRep$fBinaryVecElem$fBinaryVecCount $fBinaryTyCon $fBinaryBin $fBinaryRatio$fBinaryInteger$fBinaryDiffTime $fBinaryDay$fBinaryUTCTime$fBinaryEither $fBinaryMaybe$fBinary(,,,,,,)$fBinary(,,,,,)$fBinary(,,,,) $fBinary(,,,) $fBinary(,,) $fBinary(,) $fBinaryArray $fBinary[] $fBinaryInt $fBinaryChar $fBinaryBool $fBinary() $fBinaryInt64 $fBinaryInt32 $fBinaryInt16 $fBinaryInt8$fBinaryWord64$fBinaryWord32$fBinaryWord16 $fBinaryWord8$fEqBin$fOrdBin $fShowBin $fBoundedBinDModuleNameEnv ModuleNameEnv ModuleSet ModuleEnv ShHoleSubstInstalledModuleEnv DefUnitId unDefUnitIdInstalledModuleinstalledModuleUnitIdinstalledModuleNameinstalledUnitIdFS IndefModuleindefModuleUnitIdindefModuleName IndefUnitId indefUnitIdFSindefUnitIdKeyindefUnitIdComponentIdindefUnitIdInstsindefUnitIdFreeHolesIndefiniteUnitIdDefiniteUnitId HasModule getModuleContainsModule extractModule ModLocation ml_hs_file ml_hi_file ml_obj_file ml_hie_file addBootSuffixaddBootSuffix_maybeaddBootSuffixLocnaddBootSuffixLocnOutstableModuleNameCmp pprModuleName moduleNameFSmoduleNameStringmoduleStableString mkModuleNamemkModuleNameFSmoduleNameSlashesmoduleNameColonsmoduleFreeHolesmoduleIsDefinite mkHoleModulestableModuleCmpmkModule pprModuleunitIdFS unitIdKeynewIndefUnitIdindefUnitIdToUnitIdindefModuleToModuletoInstalledUnitIdinstalledUnitIdStringfsToInstalledUnitIdcomponentIdToInstalledUnitIdstringToInstalledUnitIdinstalledModuleEqinstalledUnitIdEqemptyInstalledModuleEnvlookupInstalledModuleEnvextendInstalledModuleEnvfilterInstalledModuleEnvdelInstalledModuleEnvunitIdFreeHolesunitIdIsDefinite hashUnitId newUnitIdstableUnitIdCmpnewSimpleUnitId fsToUnitIdstringToUnitIdrenameHoleModulerenameHoleUnitIdrenameHoleModule'renameHoleUnitId'splitModuleInstssplitUnitIdInstsgeneralizeIndefUnitIdgeneralizeIndefModuleparseModuleName parseUnitIdparseComponentId parseModuleId parseModSubst primUnitId integerUnitId baseUnitId rtsUnitIdthUnitId thisGhcUnitIdinteractiveUnitId mainUnitIdisInteractiveModule isHoleModulewiredInUnitIdsfilterModuleEnv elemModuleEnvextendModuleEnvextendModuleEnvWithextendModuleEnvListextendModuleEnvList_CplusModuleEnv_CdelModuleEnvList delModuleEnv plusModuleEnvlookupModuleEnvlookupWithDefaultModuleEnv mapModuleEnv mkModuleEnvemptyModuleEnv moduleEnvKeys moduleEnvEltsmoduleEnvToList unitModuleEnvisEmptyModuleEnv mkModuleSetextendModuleSetextendModuleSetListemptyModuleSet moduleSetElts elemModuleSetintersectModuleSetminusModuleSet delModuleSetunionModuleSet unitModuleSet$fOutputableModLocation$fNFDataModuleName$fDataModuleName$fBinaryStringRepModuleName$fBinaryModuleName$fOutputableModuleName$fOrdModuleName$fEqModuleName$fUniquableModuleName$fBinaryComponentId$fOutputableComponentId$fUniquableComponentId$fBinaryStringRepComponentId$fOutputableInstalledUnitId$fUniquableInstalledUnitId$fOrdInstalledUnitId$fEqInstalledUnitId $fBinaryStringRepInstalledUnitId$fBinaryInstalledUnitId$fOutputableInstalledModule$fBinaryDefUnitId$fOutputableDefUnitId$fBinaryUnitId$fOutputableUnitId$fNFDataUnitId $fDataUnitId $fOrdUnitId$fUniquableUnitId $fEqUnitId $fShowUnitId$fOutputableIndefUnitId$fBinaryIndefUnitId$fOrdIndefUnitId$fEqIndefUnitIdC$fDbUnitIdModuleRepInstalledUnitIdComponentIdUnitIdModuleNameModule$fNFDataModule $fDataModule$fBinaryModule$fOutputableModule$fUniquableModule$fOutputableIndefModule $fOrdNDModule$fShowModLocation$fEqComponentId$fOrdComponentId$fEqInstalledModule$fOrdInstalledModule $fEqDefUnitId$fOrdDefUnitId $fEqModule $fOrdModule$fEqIndefModule$fOrdIndefModule $fEqNDModuleliftedTypeKindTyConKeymAIN PackageNameSourcePackageIddefaultPackageConfigsourcePackageIdStringpackageNameStringpprPackageConfiginstalledPackageConfigIdpackageConfigIdexpandedPackageConfigIddefinitePackageConfigId$fOutputableSourcePackageId$fUniquableSourcePackageId $fBinaryStringRepSourcePackageId$fOutputablePackageName$fUniquablePackageName$fBinaryStringRepPackageName$fEqSourcePackageId$fOrdSourcePackageId$fEqPackageName$fOrdPackageNameCTypeHeader CLabelString CCallConvCApiConv StdCallConv PrimCallConvJavaScriptCallConv CCallTarget StaticTarget DynamicTarget CCallSpec CExportSpec CExportStaticSafetyPlaySafePlayInterruptible PlayRiskyCCallisSafeForeignCallplaySafeplayInterruptibleisDynamicTargetdefaultCCallConvccallConvToIntccallConvAttributepprCLabelStringisCLabelString$fBinarySafety$fOutputableSafety$fBinaryCCallConv$fOutputableCCallConv$fBinaryCCallTarget$fBinaryCCallSpec$fOutputableCCallSpec$fBinaryForeignCall$fOutputableForeignCall$fBinaryCExportSpec$fOutputableCExportSpec$fBinaryHeader$fOutputableHeader $fBinaryCType$fOutputableCType $fEqSafety $fShowSafety $fDataSafety $fEqCCallConv$fDataCCallConv$fEqCCallTarget$fDataCCallTarget $fEqCCallSpec$fEqForeignCall$fDataCExportSpec $fEqHeader $fDataHeader $fEqCType $fDataCTypeCostCentreIndexunCostCentreIndexnewCostCentreState getCCIndex$fEqCostCentreIndex$fOrdCostCentreIndex$fDataCostCentreIndex$fBinaryCostCentreIndexAndOrParensLBooleanFormulamkVarmkFalsemkTruemkAndmkOrisFalseisTrueevalsimplify isUnsatisfied impliesAtomimpliespprBooleanFormulapprBooleanFormulaNice$fBinaryBooleanFormula$fOutputableBooleanFormula$fEqBooleanFormula$fDataBooleanFormula$fFunctorBooleanFormula$fFoldableBooleanFormula$fTraversableBooleanFormulaUnlitCppHsPpHscCcxxCcCobjcCobjcxxHCcSplitterSplitAsAsLlvmOptLlvmLlc LlvmMangleCmmCpp MergeForeignStopLn HscSource HsSrcFile HsBootFileHsigFilehscSourceString isHsBootOrSig isHsigFileanyHscisStopLneqPhase happensBefore startPhase phaseInputExtisHaskellishSuffixisBackpackishSuffixisHaskellSigSuffixisHaskellSrcSuffix isCishSuffixisHaskellUserSrcSuffixisObjectSuffixisDynLibSuffixisSourceSuffixisHaskellishTargetisHaskellishFilenameisHaskellSrcFilenameisCishFilenameisHaskellUserSrcFilenameisSourceFilenameisHaskellSigFilenameisObjectFilenameisDynLibFilename$fBinaryHscSource$fOutputablePhase $fEqHscSource$fOrdHscSource$fShowHscSource $fEqPhase $fShowPhaseEdgeTypeForwardCrossBackwardSelfLoop DigraphNode node_payloadnode_keynode_dependenciesgraphFromEdgedVerticesOrdgraphFromEdgedVerticesUniq findCyclestronglyConnCompG$stronglyConnCompFromEdgedVerticesOrd%stronglyConnCompFromEdgedVerticesUniq%stronglyConnCompFromEdgedVerticesOrdR&stronglyConnCompFromEdgedVerticesUniqRtopologicalSortG reachableG reachablesG hasVertexG verticesGedgesG transposeGemptyG classifyEdges$fOutputableEdge$fOutputableNode$fOutputableGraph$fOutputableEdgeType $fEqEdgeType $fOrdEdgeType$fEqTime $fOrdTime $fNumTime$fOutputableTimeemptyBagunitBag lengthBagelemBag unionManyBags unionBagsconsBagsnocBag isEmptyBagisSingletonBag filterBag filterBagMallBaganyBaganyBagM concatBag catBagMaybes partitionBagpartitionBagWithfoldBagfoldrBagfoldlBag foldrBagM foldlBagMmapBag concatMapBagconcatMapBagPair mapMaybeBagmapBagMmapBagM_ flatMapBagMflatMapBagPairMmapAndUnzipBagM mapAccumBagL mapAccumBagLM listToBag bagToList $fFoldableBag $fFunctorBag $fDataBag$fOutputableBagCmdLineP runCmdLineEwMWarn warnReasonwarnMsgErrerrMsg WarnReasonNoReasonReasonDeprecatedFlagReasonUnrecognisedFlagOptKindNoArgHasArgSepArg OptPrefix OptIntSuffix IntSuffix FloatSuffixPassFlag AnySuffix GhcFlagModeOnlyGhcOnlyGhciAllModes HiddenFlagFlagflagName flagOptKind flagGhcModedefFlag defGhcFlag defGhciFlag defHiddenFlagrunEwMaddErraddWarn addFlagWarn deprecategetArg getCurLocliftEwMgetCmdLineStateputCmdLineState processArgserrorsToGhcException$fToJsonWarnReason$fOutputableWarnReason $fMonadEwM$fApplicativeEwM $fFunctorEwM$fMonadCmdLineP$fApplicativeCmdLineP$fFunctorCmdLineP$fEqWarnReason$fShowWarnReason FilesToClean ftcGhcSessionftcCurrentModule CompilerInfoGCCClang AppleClang AppleClang51 UnknownCC LinkerInfoGnuLDGnuGoldLlvmLLDDarwinLD SolarisLDAixLD UnknownLD PkgConfRef GlobalPkgConf UserPkgConf PkgConfFileFlagSpec flagSpecName flagSpecFlagflagSpecActionflagSpecGhcModeOption FileOptionFlushErrFlushOut LogAction FatalMessagerWay WayCustom WayThreadedWayDebugWayProf WayEventLogWayDynRtsOptsEnabled RtsOptsNone RtsOptsIgnoreRtsOptsIgnoreAllRtsOptsSafeOnly RtsOptsAll DynLibLoader DeployableSystemDependent PackageDBFlag PackageDBNoUserPackageDBNoGlobalPackageDBClearPackageDBs PackageFlag ExposePackage HidePackage TrustFlag TrustPackageDistrustPackageIgnorePackageFlag IgnorePackage ModRenamingmodRenamingWithImplicit modRenamings PackageArg UnitIdArgGhcLinkNoLink LinkBinary LinkInMemory LinkDynLib LinkStaticLibGhcMode CompManagerOneShotMkDepend HscTargetHscCHscAsmHscLlvmHscInterpreted HscNothingSettingssTargetPlatform sGhcUsagePathsGhciUsagePathsToolDirsTopDirsTmpDir sProgramNamesProjectVersion sRawSettingssExtraGccViaCFlagssSystemPackageConfigsLdSupportsCompactUnwindsLdSupportsBuildIdsLdSupportsFilelist sLdIsGnuLdsGccSupportsNoPiesPgm_LsPgm_PsPgm_FsPgm_csPgm_ssPgm_asPgm_lsPgm_dllsPgm_T sPgm_windres sPgm_libtoolsPgm_ar sPgm_ranlibsPgm_losPgm_lcsPgm_lccsPgm_isOpt_LsOpt_PsOpt_P_fingerprintsOpt_FsOpt_csOpt_asOpt_l sOpt_windressOpt_losOpt_lcsOpt_lccsOpt_isPlatformConstants LlvmConfig LlvmPasses LlvmTargets LlvmTarget lDataLayoutlCPU lAttributesProfAuto NoProfAuto ProfAutoAll ProfAutoTopProfAutoExports ProfAutoCallsContainsDynFlagsextractDynFlags HasDynFlags getDynFlags CfgWeights CFGWeights uncondWeightcondBranchWeight switchWeight callWeightlikelyCondWeightunlikelyCondWeightinfoTablePenalty backEdgeBonusghcModeghcLink hscTargetsettingsintegerLibrary llvmTargets llvmPasses verbosityoptLevel debugLevel simplPhasesmaxSimplIterationsmaxPmCheckIterations ruleCheck inlineCheckstrictnessBefore parMakeCountenableTimeStats ghcHeapSizemaxRelevantBindsmaxValidHoleFitsmaxRefHoleFitsrefLevelHoleFitsmaxUncoveredPatternssimplTickFactorspecConstrThresholdspecConstrCountspecConstrRecursiveliberateCaseThreshold floatLamArgsliftLamsRecArgsliftLamsNonRecArgs liftLamsKnowncmmProcAlignment historySize importPaths mainModIs mainFunIsreductionDepthsolverIterationsthisInstalledUnitIdthisComponentId_thisUnitIdInsts_waysbuildTag splitInfo objectDirdylibInstallNamehiDirhieDirstubDirdumpDir objectSufhcSufhiSufhieSufcanGenerateDynamicToo dynObjectSufdynHiSuf outputFile dynOutputFileoutputHi dynLibLoader dumpPrefixdumpPrefixForceldInputs includePaths libraryPathsframeworkPathscmdlineFrameworksrtsOptsrtsOptsEnabledrtsOptsSuggestionshpcDirpluginModNamespluginModNameOptsfrontendPluginOpts cachedPlugins staticPluginshooks depMakefiledepIncludePkgDepsdepExcludeMods depSuffixespackageDBFlagsignorePackageFlags packageFlagspluginPackageFlags trustFlags packageEnv pkgDatabasepkgState filesToClean dirsToCleannextTempSuffixgeneratedDumps dumpFlags generalFlags warningFlagsfatalWarningFlagslanguage safeHaskell safeInfer safeInferredthOnLoc newDerivOnLocoverlapInstLocincoherentOnLoc pkgTrustOnLoc warnSafeOnLocwarnUnsafeOnLoctrustworthyOnLoc extensionsextensionFlagsufCreationThresholdufUseThresholdufFunAppDiscountufDictDiscountufKeenessFactorufDearOpufVeryAggressive maxWorkerArgs ghciHistSize log_actionflushOutflushErrghcVersionFilehaddockOptions ghciScriptsuseColor canUseColor colSchemeprofAutointeractivePrintnextWrapperNum sseVersion bmiVersionavxavx2avx512cdavx512eravx512favx512pfrtldInfortccInfomaxInlineAllocSizemaxInlineMemcpyInsnsmaxInlineMemsetInsns reverseErrors maxErrors initialUniqueuniqueIncrement cfgWeightInfoSafeHaskellModeSf_None Sf_UnsafeSf_TrustworthySf_Safe Sf_IgnoreLanguage Haskell98 Haskell2010 WarningFlagOpt_WarnDuplicateExportsOpt_WarnDuplicateConstraintsOpt_WarnRedundantConstraintsOpt_WarnHiShadowsOpt_WarnImplicitPreludeOpt_WarnIncompletePatternsOpt_WarnIncompleteUniPatterns Opt_WarnIncompletePatternsRecUpdOpt_WarnOverflowedLiteralsOpt_WarnEmptyEnumerationsOpt_WarnMissingFieldsOpt_WarnMissingImportListOpt_WarnMissingMethodsOpt_WarnMissingSignaturesOpt_WarnMissingLocalSignaturesOpt_WarnNameShadowingOpt_WarnOverlappingPatternsOpt_WarnTypeDefaultsOpt_WarnMonomorphismOpt_WarnUnusedTopBindsOpt_WarnUnusedLocalBindsOpt_WarnUnusedPatternBindsOpt_WarnUnusedImportsOpt_WarnUnusedMatchesOpt_WarnUnusedTypePatternsOpt_WarnUnusedForallsOpt_WarnWarningsDeprecationsOpt_WarnDeprecatedFlags!Opt_WarnMissingMonadFailInstancesOpt_WarnSemigroupOpt_WarnDodgyExportsOpt_WarnDodgyImportsOpt_WarnOrphansOpt_WarnAutoOrphansOpt_WarnIdentities Opt_WarnTabsOpt_WarnUnrecognisedPragmasOpt_WarnDodgyForeignImportsOpt_WarnUnusedDoBindOpt_WarnWrongDoBind)Opt_WarnAlternativeLayoutRuleTransitionalOpt_WarnUnsafe Opt_WarnSafeOpt_WarnTrustworthySafeOpt_WarnMissedSpecsOpt_WarnAllMissedSpecs%Opt_WarnUnsupportedCallingConventionsOpt_WarnUnsupportedLlvmVersionOpt_WarnMissedExtraSharedLibOpt_WarnInlineRuleShadowingOpt_WarnTypedHolesOpt_WarnPartialTypeSignatures!Opt_WarnMissingExportedSignatures$Opt_WarnUntickedPromotedConstructorsOpt_WarnDerivingTypeableOpt_WarnDeferredTypeErrors#Opt_WarnDeferredOutOfScopeVariables"Opt_WarnNonCanonicalMonadInstances&Opt_WarnNonCanonicalMonadFailInstances#Opt_WarnNonCanonicalMonoidInstances'Opt_WarnMissingPatternSynonymSignatures Opt_WarnUnrecognisedWarningFlags$Opt_WarnSimplifiableClassConstraintsOpt_WarnCPPUndefOpt_WarnUnbangedStrictPatternsOpt_WarnMissingHomeModulesOpt_WarnPartialFieldsOpt_WarnMissingExportListOpt_WarnInaccessibleCodeOpt_WarnStarIsTypeOpt_WarnStarBinderOpt_WarnImplicitKindVarsOpt_WarnSpaceAfterBang!Opt_WarnMissingDerivingStrategies IncludeSpecsincludePathsQuoteincludePathsGlobalReason ErrReasonOpt_DumpToFileOpt_D_faststring_statsOpt_D_dump_minimal_importsOpt_DoCoreLintingOpt_DoStgLintingOpt_DoCmmLintingOpt_DoAsmLintingOpt_DoAnnotationLintingOpt_NoLlvmMangler Opt_FastLlvmOpt_WarnIsErrorOpt_ShowWarnGroupsOpt_HideSourcePathsOpt_PrintExplicitForallsOpt_PrintExplicitKindsOpt_PrintExplicitCoercionsOpt_PrintExplicitRuntimeRepsOpt_PrintEqualityRelationsOpt_PrintUnicodeSyntaxOpt_PrintExpandedSynonymsOpt_PrintPotentialInstancesOpt_PrintTypecheckerElaboration Opt_CallArityOpt_ExitificationOpt_StrictnessOpt_LateDmdAnalOpt_KillAbsenceOpt_KillOneShotOpt_FullLaziness Opt_FloatInOpt_LateSpecialiseOpt_SpecialiseOpt_SpecialiseAggressivelyOpt_CrossModuleSpecialise Opt_StaticArgumentTransformationOpt_CSE Opt_StgCSEOpt_StgLiftLamsOpt_LiberateCaseOpt_SpecConstrOpt_SpecConstrKeenOpt_DoLambdaEtaExpansionOpt_IgnoreAssertsOpt_DoEtaReduction Opt_CaseMergeOpt_CaseFoldingOpt_UnboxStrictFieldsOpt_UnboxSmallStrictFieldsOpt_DictsCheapOpt_EnableRewriteRules Opt_RegsGraphOpt_RegsIterativeOpt_PedanticBottoms Opt_LlvmTBAAOpt_LlvmFillUndefWithGarbageOpt_IrrefutableTuples Opt_CmmSinkOpt_CmmElimCommonBlocksOpt_AsmShortcuttingOpt_OmitYieldsOpt_FunToThunkOpt_DictsStrictOpt_DmdTxDictSelOpt_LoopificationOpt_CfgBlocklayoutOpt_WeightlessBlocklayout Opt_CprAnalOpt_WorkerWrapperOpt_SolveConstantDictsOpt_AlignmentSanitisationOpt_CatchBottomsOpt_NumConstantFoldingOpt_SimplPreInliningOpt_IgnoreInterfacePragmasOpt_OmitInterfacePragmasOpt_ExposeAllUnfoldingsOpt_WriteInterface Opt_WriteHieOpt_AutoSccsOnIndividualCafsOpt_ProfCountEntriesOpt_PpOpt_ForceRecompOpt_IgnoreOptimChangesOpt_IgnoreHpcChangesOpt_ExcessPrecisionOpt_EagerBlackHoling Opt_NoHsMain Opt_SplitObjsOpt_SplitSections Opt_StgStatsOpt_HideAllPackagesOpt_HideAllPluginPackagesOpt_PrintBindResult Opt_HaddockOpt_HaddockOptionsOpt_BreakOnExceptionOpt_BreakOnErrorOpt_PrintEvldWithShowOpt_PrintBindContentsOpt_GenManifestOpt_EmbedManifestOpt_SharedImplibOpt_BuildingCabalPackageOpt_IgnoreDotGhciOpt_GhciSandboxOpt_GhciHistoryOpt_GhciLeakCheckOpt_ValidateHieOpt_LocalGhciHistoryOpt_NoItOpt_HelpfulErrorsOpt_DeferTypeErrorsOpt_DeferTypedHolesOpt_DeferOutOfScopeVariablesOpt_PICOpt_PIEOpt_PICExecutableOpt_ExternalDynamicRefsOpt_SccProfilingOn Opt_TickyOpt_Ticky_Allocd Opt_Ticky_LNEOpt_Ticky_Dyn_Thunk Opt_RPathOpt_RelativeDynlibPathsOpt_Hpc Opt_FlatCacheOpt_ExternalInterpreterOpt_OptimalApplicativeDoOpt_VersionMacrosOpt_WholeArchiveHsLibsOpt_SingleLibFolder Opt_KeepCAFsOpt_ErrorSpansOpt_DiagnosticsShowCaretOpt_PprCaseAsLetOpt_PprShowTicksOpt_ShowHoleConstraintsOpt_ShowValidHoleFitsOpt_SortValidHoleFitsOpt_SortBySizeHoleFitsOpt_SortBySubsumHoleFitsOpt_AbstractRefHoleFitsOpt_UnclutterValidHoleFitsOpt_ShowTypeAppOfHoleFitsOpt_ShowTypeAppVarsOfHoleFitsOpt_ShowDocsOfHoleFitsOpt_ShowTypeOfHoleFitsOpt_ShowProvOfHoleFitsOpt_ShowMatchesOfHoleFitsOpt_ShowLoadedModulesOpt_HexWordLiteralsOpt_SuppressCoercionsOpt_SuppressVarKindsOpt_SuppressModulePrefixesOpt_SuppressTypeApplicationsOpt_SuppressIdInfoOpt_SuppressUnfoldingsOpt_SuppressTypeSignaturesOpt_SuppressUniquesOpt_SuppressStgExtsOpt_SuppressTicksOpt_SuppressTimestampsOpt_AutoLinkPackagesOpt_ImplicitImportQualifiedOpt_KeepHscppFilesOpt_KeepHiDiffsOpt_KeepHcFilesOpt_KeepSFilesOpt_KeepTmpFilesOpt_KeepRawTokenStreamOpt_KeepLlvmFilesOpt_KeepHiFilesOpt_KeepOFilesOpt_BuildDynamicTooOpt_DistrustAllPackagesOpt_PackageTrustOpt_G_NoStateHackOpt_G_NoOptCoercionOpt_D_dump_cmmOpt_D_dump_cmm_from_stgOpt_D_dump_cmm_rawOpt_D_dump_cmm_verboseOpt_D_dump_cmm_cfgOpt_D_dump_cmm_cbeOpt_D_dump_cmm_switchOpt_D_dump_cmm_procOpt_D_dump_cmm_spOpt_D_dump_cmm_sinkOpt_D_dump_cmm_cafOpt_D_dump_cmm_procmapOpt_D_dump_cmm_splitOpt_D_dump_cmm_infoOpt_D_dump_cmm_cpsOpt_D_dump_cfg_weightsOpt_D_dump_asmOpt_D_dump_asm_nativeOpt_D_dump_asm_livenessOpt_D_dump_asm_regallocOpt_D_dump_asm_regalloc_stagesOpt_D_dump_asm_conflictsOpt_D_dump_asm_statsOpt_D_dump_asm_expandedOpt_D_dump_llvmOpt_D_dump_core_statsOpt_D_dump_deriv Opt_D_dump_dsOpt_D_dump_ds_preoptOpt_D_dump_foreignOpt_D_dump_inliningsOpt_D_dump_rule_firingsOpt_D_dump_rule_rewritesOpt_D_dump_simpl_traceOpt_D_dump_occur_analOpt_D_dump_parsedOpt_D_dump_parsed_ast Opt_D_dump_rnOpt_D_dump_rn_astOpt_D_dump_shapeOpt_D_dump_simplOpt_D_dump_simpl_iterationsOpt_D_dump_specOpt_D_dump_prepOpt_D_dump_stgOpt_D_dump_call_arityOpt_D_dump_exitifyOpt_D_dump_stranalOpt_D_dump_str_signatures Opt_D_dump_tcOpt_D_dump_tc_astOpt_D_dump_typesOpt_D_dump_rulesOpt_D_dump_cseOpt_D_dump_worker_wrapperOpt_D_dump_rn_traceOpt_D_dump_rn_statsOpt_D_dump_opt_cmmOpt_D_dump_simpl_statsOpt_D_dump_cs_traceOpt_D_dump_tc_traceOpt_D_dump_ec_traceOpt_D_dump_if_traceOpt_D_dump_vt_traceOpt_D_dump_splicesOpt_D_th_dec_fileOpt_D_dump_BCOsOpt_D_dump_tickedOpt_D_dump_rttiOpt_D_source_statsOpt_D_verbose_stg2stg Opt_D_dump_hiOpt_D_dump_hi_diffsOpt_D_dump_mod_cyclesOpt_D_dump_mod_mapOpt_D_dump_timings!Opt_D_dump_view_pattern_commoningOpt_D_verbose_core2coreOpt_D_dump_debugOpt_D_dump_jsonOpt_D_ppr_debugOpt_D_no_debug_outputoptimisationFlagsaddGlobalIncludeaddQuoteIncludeflattenIncludesbackendMaintainsCfg programNameprojectVersion ghcUsagePath ghciUsagePathtopDirtmpDir rawSettingsextraGccViaCFlagssystemPackageConfigpgm_Lpgm_Ppgm_Fpgm_cpgm_spgm_apgm_lpgm_dllpgm_T pgm_windres pgm_libtoolpgm_lccpgm_ar pgm_ranlibpgm_lopgm_lcpgm_iopt_Lopt_Popt_P_signatureopt_Fopt_copt_aopt_l opt_windresopt_lccopt_loopt_lcopt_iversionedAppDirisObjectTargettargetRetainsAllBindings isOneShotisNoLinkpackageFlagsChangeddefaultObjectTargettablesNextToCodemkTablesNextToCodepositionIndependent mkBuildTag wayRTSOnlywayGeneralFlagswayUnsetGeneralFlagswhenGeneratingDynamicTooifGeneratingDynamicToowhenCannotGenerateDynamicToodynamicTooMkDynamicDynFlags initDynFlagsdefaultDynFlags defaultWays interpWaysinterpreterProfiledinterpreterDynamicdefaultFatalMessagerdefaultLogActiondefaultLogActionHPrintDocdefaultLogActionHPutStrDocdefaultFlushOutdefaultFlushErrlanguageExtensionshasNoStateHackhasNoOptCoerciondoptdopt_set dopt_unsetgoptgopt_set gopt_unsetwoptwopt_set wopt_unset wopt_fatalwopt_set_fatalwopt_unset_fatalxoptxopt_set xopt_unsetxopt_set_unlessExplSpeclang_setdynFlagDependenciespackageTrustOn safeHaskellOnsafeHaskellModeEnabledsafeLanguageOn safeInferOn safeImportsOnsafeDirectImpsReqsafeImplicitImpsReq unsafeFlagsunsafeFlagsForInfergetOpts getVerbFlagsthisComponentIdthisUnitIdInsts thisPackageaddPluginModuleNameshowOpt updOptLevelparseDynamicFlagsCmdLineparseDynamicFilePragmaparseDynamicFlagsFull putLogMsg updateWaysallNonDeprecatedFlagsflagsAll flagsDynamic flagsPackageflagsForCompletion wWarningFlagsfFlags fLangFlagssupportedLanguagesAndExtensionsxFlags warningGroupswarningHierarchiesglasgowExtsFlags rtsIsProfiled dynamicGhcaddWay'setGeneralFlag'unSetGeneralFlag' setUnitIdcanonicalizeHomeModulecanonicalizeModuleIfHomeinterpretPackageEnv setTmpDir picCCOptspicPOpts compilerInfocONTROL_GROUP_CONST_291 sTD_HDR_SIZE pROF_HDR_SIZE bLOCK_SIZEbLOCKS_PER_MBLOCKtICKY_BIN_COUNToFFSET_StgRegTable_rR1oFFSET_StgRegTable_rR2oFFSET_StgRegTable_rR3oFFSET_StgRegTable_rR4oFFSET_StgRegTable_rR5oFFSET_StgRegTable_rR6oFFSET_StgRegTable_rR7oFFSET_StgRegTable_rR8oFFSET_StgRegTable_rR9oFFSET_StgRegTable_rR10oFFSET_StgRegTable_rF1oFFSET_StgRegTable_rF2oFFSET_StgRegTable_rF3oFFSET_StgRegTable_rF4oFFSET_StgRegTable_rF5oFFSET_StgRegTable_rF6oFFSET_StgRegTable_rD1oFFSET_StgRegTable_rD2oFFSET_StgRegTable_rD3oFFSET_StgRegTable_rD4oFFSET_StgRegTable_rD5oFFSET_StgRegTable_rD6oFFSET_StgRegTable_rXMM1oFFSET_StgRegTable_rXMM2oFFSET_StgRegTable_rXMM3oFFSET_StgRegTable_rXMM4oFFSET_StgRegTable_rXMM5oFFSET_StgRegTable_rXMM6oFFSET_StgRegTable_rYMM1oFFSET_StgRegTable_rYMM2oFFSET_StgRegTable_rYMM3oFFSET_StgRegTable_rYMM4oFFSET_StgRegTable_rYMM5oFFSET_StgRegTable_rYMM6oFFSET_StgRegTable_rZMM1oFFSET_StgRegTable_rZMM2oFFSET_StgRegTable_rZMM3oFFSET_StgRegTable_rZMM4oFFSET_StgRegTable_rZMM5oFFSET_StgRegTable_rZMM6oFFSET_StgRegTable_rL1oFFSET_StgRegTable_rSpoFFSET_StgRegTable_rSpLimoFFSET_StgRegTable_rHpoFFSET_StgRegTable_rHpLimoFFSET_StgRegTable_rCCCSoFFSET_StgRegTable_rCurrentTSO"oFFSET_StgRegTable_rCurrentNurseryoFFSET_StgRegTable_rHpAllocoFFSET_stgEagerBlackholeInfooFFSET_stgGCEnter1oFFSET_stgGCFunoFFSET_Capability_roFFSET_bdescr_startoFFSET_bdescr_freeoFFSET_bdescr_blocksoFFSET_bdescr_flagssIZEOF_CostCentreStack oFFSET_CostCentreStack_mem_alloc oFFSET_CostCentreStack_scc_countoFFSET_StgHeader_ccsoFFSET_StgHeader_ldvwsIZEOF_StgSMPThunkHeaderoFFSET_StgEntCounter_allocsoFFSET_StgEntCounter_allocd oFFSET_StgEntCounter_registeredpoFFSET_StgEntCounter_link oFFSET_StgEntCounter_entry_countsIZEOF_StgUpdateFrame_NoHdrsIZEOF_StgMutArrPtrs_NoHdroFFSET_StgMutArrPtrs_ptrsoFFSET_StgMutArrPtrs_sizesIZEOF_StgSmallMutArrPtrs_NoHdroFFSET_StgSmallMutArrPtrs_ptrssIZEOF_StgArrBytes_NoHdroFFSET_StgArrBytes_bytesoFFSET_StgTSO_alloc_limitoFFSET_StgTSO_cccsoFFSET_StgTSO_stackobjoFFSET_StgStack_spoFFSET_StgStack_stackoFFSET_StgUpdateFrame_updateeoFFSET_StgFunInfoExtraFwd_aritysIZEOF_StgFunInfoExtraRevoFFSET_StgFunInfoExtraRev_aritymAX_SPEC_SELECTEE_SIZEmAX_SPEC_AP_SIZEmIN_PAYLOAD_SIZE mIN_INTLIKE mAX_INTLIKE mIN_CHARLIKE mAX_CHARLIKEmUT_ARR_PTRS_CARD_BITSmAX_Vanilla_REG mAX_Float_REGmAX_Double_REG mAX_Long_REG mAX_XMM_REGmAX_Real_Vanilla_REGmAX_Real_Float_REGmAX_Real_Double_REGmAX_Real_XMM_REGmAX_Real_Long_REGrESERVED_C_STACK_BYTESrESERVED_STACK_WORDSaP_STACK_SPLIM wORD_SIZE dOUBLE_SIZE cINT_SIZE cLONG_SIZEcLONG_LONG_SIZEbITMAP_BITS_SHIFTtAG_BITSwORDS_BIGENDIANdYNAMIC_BY_DEFAULT lDV_SHIFTiLDV_CREATE_MASKiLDV_STATE_CREATEiLDV_STATE_USE bLOCK_SIZE_WwORD_SIZE_IN_BITStAG_MASK mAX_PTR_TAGtARGET_MIN_INTtARGET_MAX_INTtARGET_MAX_WORDmakeDynFlagsConsistentsetUnsafeGlobalDynFlags isSseEnabled isSse2EnabledisSse4_2Enabled isAvxEnabled isAvx2EnabledisAvx512cdEnabledisAvx512erEnabledisAvx512fEnabledisAvx512pfEnabled isBmiEnabled isBmi2EnabledemptyFilesToClean$fOutputableLanguage$fOutputableSafeHaskellMode$fShowSafeHaskellMode$fOutputableGhcMode$fOutputablePackageArg$fOutputableModRenaming$fOutputablePackageFlag$fOutputableOnOff$fHasDynFlagsExceptT$fHasDynFlagsMaybeT$fHasDynFlagsReaderT$fHasDynFlagsWriterT $fEqDumpFlag$fShowDumpFlag$fEnumDumpFlag$fEqGeneralFlag$fShowGeneralFlag$fEnumGeneralFlag$fShowIncludeSpecs$fEqWarningFlag$fShowWarningFlag$fEnumWarningFlag $fEqLanguage$fEnumLanguage$fShowLanguage$fEqSafeHaskellMode $fEqProfAuto$fEnumProfAuto $fEqHscTarget$fShowHscTarget $fEqGhcMode $fEqGhcLink $fShowGhcLink$fEqPackageArg$fShowPackageArg$fEqModRenaming$fEqIgnorePackageFlag $fEqTrustFlag$fEqPackageFlag$fEqDynLibLoader$fShowRtsOptsEnabled$fEqWay$fOrdWay $fShowWay $fEqOnOff $fShowOnOff $fEqOption$fEqDeprecation$fOrdDeprecation$fEqPkgConfRef$fEqPackageDBFlag$fEqSseVersion$fOrdSseVersion$fEqBmiVersion$fOrdBmiVersion$fEqLinkerInfo$fEqCompilerInfo wordLengthwordLengthInBitsspillAreaLength spillSlotSizeextraStackArgsHere fits13Bitsis32BitIntegerlargeOffsetErrorArgDescrArgSpecArgGenLivenessConstrDescriptionClosureTypeInfoConstrFunThunk ThunkSelector BlackHole IndStaticIsStaticHeapRep ArrayPtrsRepSmallArrayPtrsRep ArrayWordsRepStackRepRTSRep StgHalfWordStgWordByteOffWordOffroundUpToWords roundUpTo wordsToBytesbytesToWordsRoundUp fromStgWord toStgWordfromStgHalfWord toStgHalfWordhALF_WORD_SIZEhALF_WORD_SIZE_IN_BITS mkHeapRepmkRTSRep mkStackRep blackHoleRep indStaticRep arrPtrsRepsmallArrPtrsRep arrWordsRep isStaticRep isStackRepisConRep isThunkRepisFunRepisStaticNoCafCon fixedHdrSize fixedHdrSizeW profHdrSizearrWordsHdrSizearrWordsHdrSizeWarrPtrsHdrSizearrPtrsHdrSizeWsmallArrPtrsHdrSizesmallArrPtrsHdrSizeW thunkHdrSizehdrSizehdrSizeW nonHdrSize nonHdrSizeWheapClosureSizeWcard cardRoundUpcardTableSizeBcardTableSizeWrtsClosureType rET_SMALLrET_BIGaRG_GEN aRG_GEN_BIGstringToWord8spprWord8String$fOutputableStgWord$fOutputableStgHalfWord$fOutputableArgDescr$fOutputableClosureTypeInfo$fOutputableSMRep $fEqStgWord $fBitsStgWord$fEqStgHalfWordStackMapstackMapNextFreeSlotstackMapAssignment StackSlot emptyStackMapgetStackSlotFor getStackUse TidyOccEnvOccSetOccEnv HasOccNameoccName occNameSpace occNameFS NameSpacetcNameclsName tcClsNamedataName srcDataNametvNamevarNameisDataConNameSpaceisTcClsNameSpace isTvNameSpaceisVarNameSpaceisValNameSpace pprNameSpacepprNonVarNameSpacepprNameSpaceBrief pprOccName mkOccName mkOccNameFSmkVarOcc mkVarOccFS mkDataOcc mkDataOccFS mkTyVarOcc mkTyVarOccFSmkTcOcc mkTcOccFSmkClsOcc mkClsOccFS demoteOccNamenameSpacesRelated emptyOccEnv unitOccEnv extendOccEnvextendOccEnvList lookupOccEnvmkOccEnv elemOccEnv foldOccEnv occEnvElts plusOccEnv plusOccEnv_CextendOccEnv_CextendOccEnv_Acc mapOccEnv mkOccEnv_C delFromOccEnvdelListFromOccEnv filterOccEnv alterOccEnv pprOccEnv emptyOccSet unitOccSetmkOccSet extendOccSetextendOccSetList unionOccSetsunionManyOccSets minusOccSet elemOccSet isEmptyOccSetintersectOccSetintersectsOccSet filterOccSet occNameStringsetOccNameSpaceisVarOccisTvOccisTcOccisValOcc isDataOcc isDataSymOccisSymOcc parenSymOccstartsWithUnderscoreisDerivedOccNameisDefaultMethodOccisTypeableBindOccmkDataConWrapperOcc mkWorkerOcc mkMatcherOcc mkBuilderOccmkDefaultMethodOccmkClassOpAuxOcc mkDictOccmkIPOcc mkSpecOccmkForeignExportOcc mkRepEqOccmkClassDataConOcc mkNewTyCoOcc mkInstTyCoOcc mkEqPredCoOcc mkCon2TagOcc mkTag2ConOcc mkMaxTagOcc mkTyConRepOccmkGenRmkGen1RmkRecFldSelOccmkDataConWorkerOccmkSuperDictAuxOccmkSuperDictSelOcc mkLocalOcc mkInstTyTcOcc mkDFunOcc mkDataTOcc mkDataCOcc mkMethodOccemptyTidyOccEnvinitTidyOccEnvavoidClashesOccEnv tidyOccName$fBinaryNameSpace$fBinaryOccName$fUniquableOccName$fOutputableBndrOccName$fOutputableOccName$fNFDataOccName $fDataOccName $fOrdOccName $fEqOccName$fHasOccNameOccName$fOutputableOccEnv $fEqNameSpace$fOrdNameSpace $fDataOccEnv NamedThing getOccNamegetName BuiltInSyntax UserSyntax nameUnique nameOccName nameSrcLoc nameSrcSpan isWiredInNamewiredInNameTyThing_maybeisBuiltInSyntaxisExternalNameisInternalName isHoleName nameModulenameModule_maybenameIsLocalOrFromnameIsHomePackagenameIsHomePackageImportnameIsFromExternalPackage isTyVarName isTyConName isDataConName isValName isVarName isSystemNamemkInternalNamemkClonedInternalNamemkDerivedInternalNamemkExternalName mkWiredInName mkSystemNamemkSystemNameAtmkSystemVarName mkSysTvName mkFCallName setNameUnique setNameLoc tidyNameOcc localiseName stableNameCmppprNameUnqualifiedpprModulePrefix pprDefinedAtpprNameDefnLocnameStableString getSrcLoc getSrcSpan getOccStringgetOccFS pprInfixName pprPrefixName$fNFDataNameSort$fOutputableNameSort$fOutputableBndrName$fOutputableName $fBinaryName $fDataName$fUniquableName $fOrdName$fEqName$fHasSrcSpanName$fHasOccNameName $fNFDataName$fNamedThingGenLocated$fNamedThingNameDefUsesDefUseUsesDefsFreeVarsisEmptyNameSet emptyNameSet unitNameSet mkNameSetextendNameSetList extendNameSet unionNameSet unionNameSets minusNameSet elemNameSetdelFromNameSet filterNameSetintersectNameSetdelListFromNameSetintersectsNameSet nameSetAny nameSetAllnameSetElemsStable isEmptyFVsemptyFVsplusFVsplusFVmkFVsaddOneFVunitFVdelFVdelFVs intersectFVsemptyDUsusesOnlymkDUsplusDUduDefsallUsesduUsesfindUsesDNameEnvdepAnal nameEnvElts emptyNameEnvisEmptyNameEnv unitNameEnv extendNameEnvextendNameEnvList lookupNameEnv alterNameEnv mkNameEnv elemNameEnv plusNameEnv plusNameEnv_CextendNameEnv_C mapNameEnvextendNameEnv_AccextendNameEnvList_CdelFromNameEnvdelListFromNameEnv filterNameEnv anyNameEnvdisjointNameEnvlookupNameEnv_NF emptyDNameEnvlookupDNameEnv mapDNameEnv alterDNameEnvmkTupleDataConUniquemkTupleTyConUniquemkCTupleDataConUniquemkCTupleTyConUniquemkSumDataConUniquemkSumTyConUniqueknownUniqueName ArgDocMap DeclDocMap LHsDocString HsDocString mkHsDocStringmkHsDocStringUtf8ByteString unpackHDShsDocStringToByteString ppr_mbDoc appendDocs concatDocsemptyDeclDocMapemptyArgDocMap$fOutputableHsDocString$fBinaryHsDocString$fOutputableDeclDocMap$fBinaryDeclDocMap$fOutputableArgDocMap$fBinaryArgDocMap$fEqHsDocString$fShowHsDocString$fDataHsDocStringFieldLblflLabelflIsOverloaded flSelector FieldLabelEnvFieldLabelStringmkFieldLabelOccs$fBinaryFieldLbl$fOutputableFieldLbl $fEqFieldLbl$fFunctorFieldLbl$fFoldableFieldLbl$fTraversableFieldLbl$fDataFieldLblfingerprintBinMemcomputeFingerprintputNameLiterallyAnnEnv CoreAnnTarget AnnTarget NamedTarget ModuleTarget AnnPayload Annotation ann_target ann_valuegetAnnTargetName_maybe emptyAnnEnvmkAnnEnvextendAnnEnvList plusAnnEnvfindAnnsfindAnnsByTypeRepdeserializeAnns$fBinaryAnnTarget$fOutputableAnnTarget$fUniquableAnnTarget$fFunctorAnnTarget$fOutputableAnnotation IOEnvFailurefailM failWithMrunIOEnvfixMtryMtryAllMtryMostMunsafeInterleaveMuninterruptibleMaskM_ newMutVar writeMutVar readMutVar updMutVaratomicUpdMutVaratomicUpdMutVar'getEnvsetEnvupdEnv$fMonadIOIOEnv$fMonadPlusIOEnv$fAlternativeIOEnv$fHasModuleIOEnv$fHasDynFlagsIOEnv$fExceptionMonadIOEnv$fFunctorIOEnv$fApplicativeIOEnv$fMonadFailIOEnv $fMonadIOEnv$fExceptionIOEnvFailure$fShowIOEnvFailureCoreToDoCoreM SimplCountWarnMsgErrDocerrDocImportant errDocContexterrDocSupplementaryErrMsg errMsgSpan errMsgContext errMsgDocerrMsgSeverity errMsgReason ErrorMessagesWarningMessagesMessagesValidityIsValidNotValidisValidandValidallValid getInvalidsorValid unionMessageserrDoc pprMessageBagmakeIntoWarningmkErrDoc mkLongErrMsgmkErrMsg mkPlainErrMsg mkLongWarnMsg mkWarnMsgmkPlainWarnMsg emptyMessagesisEmptyMessages errorsFoundprintBagOfErrors formatErrDocpprErrMsgBagWithLoc pprLocErrMsgghcExitdoIfSet doIfSet_dyn dumpIfSet dumpIfSet_dyndumpIfSet_dyn_printer mkDumpDocdumpSDocForUserdumpSDocWithStyleerrorMsg warningMsg fatalErrorMsgfatalErrorMsg''compilationProgressMsgshowPass withTiming debugTraceMsgputMsgprintInfoForUserprintOutputForUserlogInfo logOutputprettyPrintGhcErrorsisWarnMsgFataltraceCmd$fToJsonSeverity $fShowErrMsg$fShowSeverityModuleSuggestionSuggestVisible SuggestHidden LookupResult LookupFoundLookupMultiple LookupHiddenLookupUnusableLookupNotFoundUnusablePackageReasonIgnoredWithFlagBrokenDependenciesCyclicDependenciesIgnoredDependenciesShadowedDependenciespreloadPackagesexplicitPackagesmoduleToPkgConfAllrequirementContext ModuleOrigin ModHidden ModUnusable ModOriginfromOrigPackagefromExposedReexportfromHiddenReexportfromPackageFlag lookupPackagelookupPackage'lookupPackageNamesearchPackageIdgetPackageDetailslookupInstalledPackagegetInstalledPackageDetailslistPackageConfigMap initPackagesreadPackageConfigsgetPackageConfRefsresolvePackageConfigreadPackageConfig isIndefinitepprFlag pprReason unwireUnitIdgetPackageIncludePathcollectIncludeDirsgetPackageLibraryPathcollectLibraryPathsgetPackageLinkOptscollectLinkOptscollectArchivesgetLibs packageHsLibsgetPackageExtraCcOptsgetPackageFrameworkPathgetPackageFrameworkslookupModuleInAllPackageslookupModuleWithSuggestions!lookupPluginModuleWithSuggestionslistVisibleModuleNamesgetPreloadPackagesAnd isDllName pprPackagespprPackagesSimple pprModuleMap$fMonoidUnitVisibility$fSemigroupUnitVisibility$fOutputableUnitVisibility!$fOutputableUnusablePackageReason$fMonoidModuleOrigin$fSemigroupModuleOrigin$fOutputableModuleOrigin llvmFixupAsmTempFileLifetimeTFL_CurrentModuleTFL_GhcSession cleanTempDirscleanTempFilesaddFilesToCleanchangeTempFilesLifetime newTempName newTempDirnewTempLibNamewithSystemTempDirectorywithTempDirectory$fShowTempFileLifetime BuildMessageBuildMsg BuildErrorEOFreadCreateProcessWithExitCode' replaceVarreadProcessEnvWithExitCode c_locale_env getGccEnv runSomethingrunSomethingResponseFilerunSomethingFilteredrunSomethingWith handleProcbuilderMainLoop readerProc parseError breakColon breakIntColon linesPlatformneededLinkArgs getLinkerInfogetLinkerInfo'getCompilerInfogetCompilerInfo'readElfSectionByNamereadElfNoteAsString makeElfNote ForeignHintNoHintAddrHint SignedHintLengthWidthW8W16W32W64W80W128W256W512 cmmEqTypecmmEqType_ignoring_ptrhood typeWidthcmmBitscmmFloatb8b16b32b64b128b256b512f32f64bWord bHalfWordgcWordcInt isFloatType isGcPtrType isBitsTypeisWord64isWord32 isFloat32 isFloat64 wordWidth halfWordWidth halfWordMask cIntWidth widthInBits widthInByteswidthFromBytes widthInLognarrowUnarrowSvecvec2vec4vec8vec16vec2f64vec2b64vec4f32vec4b32vec8b16vec16b8cmmVec vecLength vecElemType isVecTyperEP_CostCentreStack_mem_allocrEP_CostCentreStack_scc_countrEP_StgEntCounter_allocsrEP_StgEntCounter_allocd$fOutputableWidth$fOutputableCmmCat$fOutputableCmmType $fEqWidth $fOrdWidth $fShowWidth $fEqCmmCat$fEqForeignHint AtomicMachOpAMO_AddAMO_SubAMO_AndAMO_NandAMO_OrAMO_Xor CallishMachOp MO_F64_Pwr MO_F64_Sin MO_F64_Cos MO_F64_Tan MO_F64_Sinh MO_F64_Cosh MO_F64_Tanh MO_F64_Asin MO_F64_Acos MO_F64_Atan MO_F64_Asinh MO_F64_Acosh MO_F64_Atanh MO_F64_Log MO_F64_Exp MO_F64_Fabs MO_F64_Sqrt MO_F32_Pwr MO_F32_Sin MO_F32_Cos MO_F32_Tan MO_F32_Sinh MO_F32_Cosh MO_F32_Tanh MO_F32_Asin MO_F32_Acos MO_F32_Atan MO_F32_Asinh MO_F32_Acosh MO_F32_Atanh MO_F32_Log MO_F32_Exp MO_F32_Fabs MO_F32_Sqrt MO_UF_Conv MO_S_QuotRem MO_U_QuotRem MO_U_QuotRem2MO_Add2 MO_AddWordC MO_SubWordC MO_AddIntC MO_SubIntC MO_U_Mul2MO_ReadBarrierMO_WriteBarrierMO_TouchMO_Prefetch_Data MO_Memcpy MO_Memset MO_Memmove MO_Memcmp MO_PopCntMO_PdepMO_PextMO_ClzMO_CtzMO_BSwap MO_AtomicRMW MO_AtomicReadMO_AtomicWrite MO_CmpxchgMachOpMO_AddMO_SubMO_EqMO_NeMO_MulMO_S_MulMayOflo MO_S_QuotMO_S_RemMO_S_NegMO_U_MulMayOflo MO_U_QuotMO_U_RemMO_S_GeMO_S_LeMO_S_GtMO_S_LtMO_U_GeMO_U_LeMO_U_GtMO_U_LtMO_F_AddMO_F_SubMO_F_NegMO_F_Mul MO_F_QuotMO_F_EqMO_F_NeMO_F_GeMO_F_LeMO_F_GtMO_F_LtMO_AndMO_OrMO_XorMO_NotMO_ShlMO_U_ShrMO_S_Shr MO_SF_Conv MO_FS_Conv MO_SS_Conv MO_UU_Conv MO_XX_Conv MO_FF_Conv MO_V_Insert MO_V_ExtractMO_V_AddMO_V_SubMO_V_Mul MO_VS_Quot MO_VS_Rem MO_VS_Neg MO_VU_Quot MO_VU_Rem MO_VF_Insert MO_VF_Extract MO_VF_Add MO_VF_Sub MO_VF_Neg MO_VF_Mul MO_VF_QuotMO_AlignmentCheck pprMachOp mo_wordAdd mo_wordSub mo_wordEq mo_wordNe mo_wordMul mo_wordSQuot mo_wordSRem mo_wordSNeg mo_wordUQuot mo_wordURem mo_wordSGe mo_wordSLe mo_wordSGt mo_wordSLt mo_wordUGe mo_wordULe mo_wordUGt mo_wordULt mo_wordAnd mo_wordOr mo_wordXor mo_wordNot mo_wordShl mo_wordSShr mo_wordUShr mo_u_8To32 mo_s_8To32 mo_u_16To32 mo_s_16To32 mo_u_8ToWord mo_s_8ToWord mo_u_16ToWord mo_s_16ToWord mo_s_32ToWord mo_u_32ToWord mo_WordTo8 mo_WordTo16 mo_WordTo32 mo_WordTo64mo_32To8 mo_32To16isCommutableMachOpisAssociativeMachOpisComparisonMachOpmaybeIntComparisonisFloatComparisonmaybeInvertComparisonmachOpResultType machOpArgRepspprCallishMachOpcallishMachOpHintsmachOpMemcpyishAlign $fEqMachOp $fShowMachOp$fEqAtomicMachOp$fShowAtomicMachOp$fEqCallishMachOp$fShowCallishMachOp popCntLabel pdepLabel pextLabel bSwapLabelclzLabelctzLabelword2FloatLabelatomicRMWLabel cmpxchgLabelatomicReadLabelatomicWriteLabelmkBitmap intsToBitmapintsToReverseBitmapmAX_SMALL_BITMAP_SIZE seqBitmapAvails AvailInfoAvailTCstableAvailCmpavailavailsToNameSetavailsToNameSetWithSelectorsavailsToNameEnv availName availNamesavailNamesWithSelectorsavailNonFldNames availFldsavailsNamesWithOccsavailNamesWithOccs plusAvail trimAvail filterAvails filterAvail nubAvails$fBinaryAvailInfo$fOutputableAvailInfo $fEqAvailInfo$fDataAvailInfo ImpItemSpecImpAllImpSome is_explicitis_iloc ImpDeclSpecis_modis_asis_qualis_dloc ImportSpecImpSpecis_declis_itemParentNoParentParentIs FldParentpar_ispar_lbl GlobalRdrEltGREgre_namegre_pargre_lclgre_imp GlobalRdrEnv LocalRdrEnvUnqualQualOrigExact rdrNameOcc rdrNameSpace demoteRdrName mkRdrUnqual mkRdrQualmkOrigmkUnqual mkVarUnqualmkQual getRdrName nameRdrName isRdrDataCon isRdrTyVarisRdrTc isSrcRdrNameisUnqualisQual isQual_maybeisOrig isOrig_maybeisExact isExact_maybeemptyLocalRdrEnvextendLocalRdrEnvextendLocalRdrEnvListlookupLocalRdrEnvlookupLocalRdrOccelemLocalRdrEnvlocalRdrEnvEltsinLocalRdrEnvScopedelLocalRdrEnvListgresFromAvailslocalGREsFromAvail gresFromAvailgreQualModName greRdrNames greSrcSpangreParent_maybegresToAvailInfo availFromGREemptyGlobalRdrEnvglobalRdrEnvEltspprGlobalRdrEnvlookupGlobalRdrEnv greOccNamelookupGRE_RdrNamelookupGRE_NamelookupGRE_FieldLabellookupGRE_Name_OccNamegetGRE_NameQualifier_maybes isLocalGRE isRecFldGREgreLabelunQualOKpickGREspickGREsModExpplusGlobalRdrEnvmkGlobalRdrEnv transformGREsextendGlobalRdrEnv shadowNames bestImport unQualSpecOK qualSpecOK importSpecLocimportSpecModuleisExplicitItempprNameProvenancestarInfo $fOrdRdrName $fEqRdrName$fOutputableBndrRdrName$fOutputableRdrName$fHasOccNameRdrName$fOutputableLocalRdrEnv$fOutputableParent$fOrdImpDeclSpec$fEqImpDeclSpec$fOrdImpItemSpec$fEqImpItemSpec$fOutputableImportSpec$fOutputableGlobalRdrElt $fDataRdrName $fEqParent $fDataParent$fDataImpDeclSpec$fDataImpItemSpec$fEqImportSpec$fOrdImportSpec$fDataImportSpec$fDataGlobalRdrElt$fEqGlobalRdrEltallNameStringsitName mkUnboundName isUnboundNamebasicKnownKeyNamesgenericTyConNamespRELUDEgHC_PRIM gHC_TYPES gHC_MAGIC gHC_CSTRING gHC_CLASSESgHC_PRIMOPWRAPPERSgHC_BASEgHC_ENUMgHC_GHCIgHC_GHCI_HELPERSgHC_SHOWgHC_READgHC_NUM gHC_MAYBEgHC_INTEGER_TYPE gHC_NATURALgHC_LIST gHC_TUPLE dATA_TUPLE dATA_EITHER dATA_STRING dATA_FOLDABLEdATA_TRAVERSABLEgHC_CONCgHC_IOgHC_IO_ExceptiongHC_STgHC_ARR gHC_STABLEgHC_PTRgHC_ERRgHC_REAL gHC_FLOATgHC_TOP_HANDLER sYSTEM_IOdYNAMICtYPEABLEtYPEABLE_INTERNALgENERICS rEAD_PREClEXgHC_INTgHC_WORDmONAD mONAD_FIX mONAD_ZIP mONAD_FAILaRROWcONTROL_APPLICATIVE gHC_DESUGARrANDOMgHC_EXTScONTROL_EXCEPTION_BASE gHC_GENERICS gHC_TYPELITS gHC_TYPENATSdATA_TYPE_EQUALITY dATA_COERCE dEBUG_TRACE gHC_SRCLOC gHC_STACKgHC_STACK_TYPES gHC_STATICPTRgHC_STATICPTR_INTERNALgHC_FINGERPRINT_TYPEgHC_OVER_LABELS gHC_RECORDS rOOT_MAINmkInteractiveModule pRELUDE_NAME mAIN_NAMEdATA_ARRAY_PARALLEL_NAMEdATA_ARRAY_PARALLEL_PRIM_NAME mkPrimModulemkIntegerModule mkBaseModule mkBaseModule_mkThisGhcModulemkThisGhcModule_ mkMainModule mkMainModule_main_RDR_Unqualeq_RDRge_RDRle_RDRlt_RDRgt_RDR compare_RDR ltTag_RDR eqTag_RDR gtTag_RDR eqClass_RDR numClass_RDR ordClass_RDR enumClass_RDRmonadClass_RDRmap_RDR append_RDR foldr_RDR build_RDR returnM_RDR bindM_RDR failM_RDRleft_RDR right_RDR fromEnum_RDR toEnum_RDR enumFrom_RDRenumFromTo_RDRenumFromThen_RDRenumFromThenTo_RDRratioDataCon_RDRplusInteger_RDRtimesInteger_RDR ioDataCon_RDR eqString_RDRunpackCString_RDRunpackCStringFoldr_RDRunpackCStringUtf8_RDRnewStablePtr_RDR bindIO_RDR returnIO_RDRfromInteger_RDRfromRational_RDR minus_RDR times_RDRplus_RDR toInteger_RDRtoRational_RDRfromIntegral_RDR stringTy_RDRfromString_RDR fromList_RDR fromListN_RDR toList_RDR compose_RDRand_RDRnot_RDR getTag_RDRsucc_RDRpred_RDR minBound_RDR maxBound_RDR range_RDR inRange_RDR index_RDRunsafeIndex_RDRunsafeRangeSize_RDR readList_RDRreadListDefault_RDRreadListPrec_RDRreadListPrecDefault_RDR readPrec_RDR parens_RDR choose_RDRlexP_RDR expectP_RDR readField_RDRreadFieldHash_RDRreadSymField_RDRpunc_RDR ident_RDR symbol_RDRstep_RDRalt_RDR reset_RDRprec_RDR pfail_RDR showsPrec_RDR shows_RDRshowString_RDR showSpace_RDRshowCommaSpace_RDR showParen_RDR undefined_RDR error_RDR u1DataCon_RDRpar1DataCon_RDRrec1DataCon_RDR k1DataCon_RDR m1DataCon_RDR l1DataCon_RDR r1DataCon_RDRprodDataCon_RDRcomp1DataCon_RDR unPar1_RDR unRec1_RDRunK1_RDR unComp1_RDRfrom_RDR from1_RDRto_RDRto1_RDRdatatypeName_RDRmoduleName_RDRpackageName_RDRisNewtypeName_RDR selName_RDR conName_RDR conFixity_RDRconIsRecord_RDRprefixDataCon_RDRinfixDataCon_RDRleftAssocDataCon_RDRrightAssocDataCon_RDRnotAssocDataCon_RDRuAddrDataCon_RDRuCharDataCon_RDRuDoubleDataCon_RDRuFloatDataCon_RDRuIntDataCon_RDRuWordDataCon_RDR uAddrHash_RDR uCharHash_RDRuDoubleHash_RDRuFloatHash_RDR uIntHash_RDR uWordHash_RDRfmap_RDR replace_RDRpure_RDRap_RDR liftA2_RDRfoldable_foldr_RDR foldMap_RDRnull_RDRall_RDR traverse_RDR mempty_RDR mappend_RDR varQual_RDR tcQual_RDR clsQual_RDR dataQual_RDR wildCardName runMainIOName runRWNameorderingTyConNameordLTDataConNameordEQDataConNameordGTDataConName specTyConNameeitherTyConNameleftDataConNamerightDataConName v1TyConName u1TyConName par1TyConName rec1TyConName k1TyConName m1TyConName sumTyConName prodTyConName compTyConName rTyConName dTyConName cTyConName sTyConName rec0TyConName d1TyConName c1TyConName s1TyConNamenoSelTyConName repTyConName rep1TyConName uRecTyConNameuAddrTyConNameuCharTyConNameuDoubleTyConNameuFloatTyConName uIntTyConNameuWordTyConNameprefixIDataConNameinfixIDataConNameleftAssociativeDataConNamerightAssociativeDataConNamenotAssociativeDataConNamesourceUnpackDataConNamesourceNoUnpackDataConNamenoSourceUnpackednessDataConNamesourceLazyDataConNamesourceStrictDataConNamenoSourceStrictnessDataConNamedecidedLazyDataConNamedecidedStrictDataConNamedecidedUnpackDataConNamemetaDataDataConNamemetaConsDataConNamemetaSelDataConName divIntName modIntNameunpackCStringNameunpackCStringFoldrNameunpackCStringUtf8Name eqStringName inlineIdName eqClassNameeqName ordClassNamegeNamefunctorClassNamefmapNamemonadClassName thenMName bindMName returnMNamemonadFailClassName failMNameapplicativeClassNameapAName pureAName thenANamefoldableClassNametraversableClassNamesemigroupClassName sappendNamemonoidClassName memptyName mappendName mconcatName joinMNamealternativeClassName joinMIdKey apAClassOpKeypureAClassOpKeythenAClassOpKeyalternativeClassKey groupWithName dollarNameotherwiseIdName foldrName buildName augmentNamemapName appendName assertNamebreakpointNamebreakpointCondNamebreakpointAutoNameopaqueTyConNamefromStringNamebreakpointJumpNamebreakpointCondJumpNamebreakpointAutoJumpNamefstNamesndName numClassNamefromIntegerName minusName negateNameintegerTyConNameintegerSDataConName mkIntegerNameintegerToWord64NameintegerToInt64Nameword64ToIntegerNameint64ToIntegerNameplusIntegerNametimesIntegerNamesmallIntegerNamewordToIntegerNameintegerToWordNameintegerToIntNameminusIntegerNamenegateIntegerNameeqIntegerPrimNameneqIntegerPrimNameabsIntegerNamesignumIntegerNameleIntegerPrimNamegtIntegerPrimNameltIntegerPrimNamegeIntegerPrimNamecompareIntegerNamequotRemIntegerNamedivModIntegerNamequotIntegerNameremIntegerNamedivIntegerNamemodIntegerNamefloatFromIntegerNamedoubleFromIntegerNameencodeFloatIntegerNameencodeDoubleIntegerNamedecodeDoubleIntegerNamegcdIntegerNamelcmIntegerNameandIntegerName orIntegerNamexorIntegerNamecomplementIntegerNameshiftLIntegerNameshiftRIntegerNamebitIntegerNamenaturalTyConNamenaturalSDataConNamenaturalFromIntegerNamenaturalToIntegerNameplusNaturalNameminusNaturalNametimesNaturalName mkNaturalNamewordToNaturalNamerationalTyConNameratioTyConNameratioDataConName realClassNameintegralClassNamerealFracClassNamefractionalClassNamefromRationalName toIntegerNametoRationalNamefromIntegralNamerealToFracNamefloatingClassNamerealFloatClassNamerationalToFloatNamerationalToDoubleName ixClassNametrModuleTyConNametrModuleDataConNametrNameTyConNametrNameSDataConNametrNameDDataConNametrTyConTyConNametrTyConDataConNamekindRepTyConNamekindRepTyConAppDataConNamekindRepVarDataConNamekindRepAppDataConNamekindRepFunDataConNamekindRepTYPEDataConNamekindRepTypeLitSDataConNamekindRepTypeLitDDataConNametypeLitSortTyConNametypeLitSymbolDataConNametypeLitNatDataConNametypeableClassNametypeRepTyConNamesomeTypeRepTyConNamesomeTypeRepDataConName typeRepIdName mkTrTypeName mkTrConName mkTrAppName mkTrFunNametypeNatTypeRepNametypeSymbolTypeRepNametrGhcPrimModuleNamestarKindRepNamestarArrStarKindRepNamestarArrStarArrStarKindRepNameerrorMessageTypeErrorFamNametypeErrorTextDataConNametypeErrorAppendDataConNametypeErrorVAppendDataConNametypeErrorShowTypeDataConName toDynName dataClassNameassertErrorName traceName enumClassName enumFromNameenumFromToNameenumFromThenNameenumFromThenToNameboundedClassName concatName filterNamezipNameisListClassName fromListName fromListNName toListName showClassName readClassName genClassName gen1ClassNamedatatypeClassNameconstructorClassNameselectorClassNamegenericClassNamesghciIoClassNameghciStepIoMName ioTyConName ioDataConName thenIOName bindIOName returnIOName failIOName printName int8TyConNameint16TyConNameint32TyConNameint64TyConNameword16TyConNameword32TyConNameword64TyConName ptrTyConNamefunPtrTyConNamestablePtrTyConNamenewStablePtrNamemonadFixClassNamemfixNamearrAName composeAName firstANameappAName choiceAName loopAName guardMName liftMNamemzipNametoAnnotationWrapperNamemonadPlusClassNamerandomClassNamerandomGenClassNameisStringClassNameknownNatClassNameknownSymbolClassNameisLabelClassName ipClassNamehasFieldClassNamecallStackTyConNameemptyCallStackNamepushCallStackNamesrcLocDataConNamepLUGINSpluginTyConNamefrontendPluginTyConNamemakeStaticNamestaticPtrInfoTyConNamestaticPtrInfoDataConNamestaticPtrTyConNamestaticPtrDataConNamefromStaticPtrNamefingerprintDataConNamevarQualtcQualclsQualdcQualmk_known_key_nameboundedClassKey enumClassKey eqClassKeyfloatingClassKeyfractionalClassKeyintegralClassKey monadClassKey dataClassKeyfunctorClassKey numClassKey ordClassKey readClassKey realClassKeyrealFloatClassKeyrealFracClassKey showClassKey ixClassKeytypeableClassKeytypeable1ClassKeytypeable2ClassKeytypeable3ClassKeytypeable4ClassKeytypeable5ClassKeytypeable6ClassKeytypeable7ClassKeymonadFixClassKeymonadFailClassKeymonadPlusClassKeyrandomClassKeyrandomGenClassKeyisStringClassKeyapplicativeClassKeyfoldableClassKeytraversableClassKey genClassKey gen1ClassKeydatatypeClassKeyconstructorClassKeyselectorClassKeyknownNatClassNameKeyknownSymbolClassNameKeyghciIoClassKeyisLabelClassNameKeysemigroupClassKeymonoidClassKey ipClassKeyhasFieldClassNameKeyaddrPrimTyConKeyarrayPrimTyConKey boolTyConKeybyteArrayPrimTyConKeycharPrimTyConKey charTyConKeydoublePrimTyConKeydoubleTyConKeyfloatPrimTyConKey floatTyConKey funTyConKeyintPrimTyConKey intTyConKeyint8PrimTyConKey int8TyConKeyint16PrimTyConKey int16TyConKeyint32PrimTyConKey int32TyConKeyint64PrimTyConKey int64TyConKeyintegerTyConKeynaturalTyConKey listTyConKeyforeignObjPrimTyConKey maybeTyConKeyweakPrimTyConKeymutableArrayPrimTyConKeymutableByteArrayPrimTyConKeyorderingTyConKeymVarPrimTyConKey ratioTyConKeyrationalTyConKeyrealWorldTyConKeystablePtrPrimTyConKeystablePtrTyConKey eqTyConKey heqTyConKeyarrayArrayPrimTyConKeymutableArrayArrayPrimTyConKeystatePrimTyConKeystableNamePrimTyConKeystableNameTyConKeyeqPrimTyConKeyeqReprPrimTyConKeyeqPhantPrimTyConKeymutVarPrimTyConKey ioTyConKeyvoidPrimTyConKeywordPrimTyConKey wordTyConKeyword8PrimTyConKey word8TyConKeyword16PrimTyConKeyword16TyConKeyword32PrimTyConKeyword32TyConKeyword64PrimTyConKeyword64TyConKey liftedConKeyunliftedConKey anyBoxConKey kindConKey boxityConKey typeConKeythreadIdPrimTyConKeybcoPrimTyConKey ptrTyConKeyfunPtrTyConKeytVarPrimTyConKeycompactPrimTyConKeyobjectTyConKeyeitherTyConKey tYPETyConKeyconstraintKindTyConKeyruntimeRepTyConKeyvecCountTyConKeyvecElemTyConKeypluginTyConKeyfrontendPluginTyConKeyunknownTyConKeyunknown1TyConKeyunknown2TyConKeyunknown3TyConKeyopaqueTyConKey v1TyConKey u1TyConKey par1TyConKey rec1TyConKey k1TyConKey m1TyConKey sumTyConKey prodTyConKey compTyConKey rTyConKey dTyConKey cTyConKey sTyConKey rec0TyConKey d1TyConKey c1TyConKey s1TyConKey noSelTyConKey repTyConKey rep1TyConKey uRecTyConKey uAddrTyConKey uCharTyConKeyuDoubleTyConKeyuFloatTyConKey uIntTyConKey uWordTyConKeytypeNatKindConNameKeytypeSymbolKindConNameKeytypeNatAddTyFamNameKeytypeNatMulTyFamNameKeytypeNatExpTyFamNameKeytypeNatLeqTyFamNameKeytypeNatSubTyFamNameKeytypeSymbolCmpTyFamNameKeytypeNatCmpTyFamNameKeytypeNatDivTyFamNameKeytypeNatModTyFamNameKeytypeNatLogTyFamNameKeyerrorMessageTypeErrorFamKey ntTyConKeycoercibleTyConKeyproxyPrimTyConKey specTyConKey anyTyConKeysmallArrayPrimTyConKeysmallMutableArrayPrimTyConKeystaticPtrTyConKeystaticPtrInfoTyConKeycallStackTyConKeytypeRepTyConKeysomeTypeRepTyConKeysomeTypeRepDataConKeytypeSymbolAppendFamNameKeyint8X16PrimTyConKeyint16X8PrimTyConKeyint32X4PrimTyConKeyint64X2PrimTyConKeyint8X32PrimTyConKeyint16X16PrimTyConKeyint32X8PrimTyConKeyint64X4PrimTyConKeyint8X64PrimTyConKeyint16X32PrimTyConKeyint32X16PrimTyConKeyint64X8PrimTyConKeyword8X16PrimTyConKeyword16X8PrimTyConKeyword32X4PrimTyConKeyword64X2PrimTyConKeyword8X32PrimTyConKeyword16X16PrimTyConKeyword32X8PrimTyConKeyword64X4PrimTyConKeyword8X64PrimTyConKeyword16X32PrimTyConKeyword32X16PrimTyConKeyword64X8PrimTyConKeyfloatX4PrimTyConKeydoubleX2PrimTyConKeyfloatX8PrimTyConKeydoubleX4PrimTyConKeyfloatX16PrimTyConKeydoubleX8PrimTyConKeycharDataConKeyconsDataConKeydoubleDataConKeyfalseDataConKeyfloatDataConKey intDataConKeyintegerSDataConKeynothingDataConKeyjustDataConKey eqDataConKey nilDataConKeyratioDataConKeyword8DataConKeystableNameDataConKeytrueDataConKeywordDataConKey ioDataConKeyintegerDataConKey heqDataConKeycrossDataConKey inlDataConKey inrDataConKeygenUnitDataConKeyleftDataConKeyrightDataConKeyordLTDataConKeyordEQDataConKeyordGTDataConKeycoercibleDataConKeystaticPtrDataConKeystaticPtrInfoDataConKeyfingerprintDataConKeysrcLocDataConKeytrTyConTyConKeytrTyConDataConKeytrModuleTyConKeytrModuleDataConKeytrNameTyConKeytrNameSDataConKeytrNameDDataConKeytrGhcPrimModuleKeykindRepTyConKeytypeLitSortTyConKeytypeErrorTextDataConKeytypeErrorAppendDataConKeytypeErrorVAppendDataConKeytypeErrorShowTypeDataConKeyprefixIDataConKeyinfixIDataConKeyleftAssociativeDataConKeyrightAssociativeDataConKeynotAssociativeDataConKeysourceUnpackDataConKeysourceNoUnpackDataConKeynoSourceUnpackednessDataConKeysourceLazyDataConKeysourceStrictDataConKeynoSourceStrictnessDataConKeydecidedLazyDataConKeydecidedStrictDataConKeydecidedUnpackDataConKeymetaDataDataConKeymetaConsDataConKeymetaSelDataConKeyvecRepDataConKeytupleRepDataConKeysumRepDataConKeyruntimeRepSimpleDataConKeysliftedRepDataConKeyunliftedSimpleRepDataConKeysunliftedRepDataConKeysvecCountDataConKeysvecElemDataConKeyskindRepTyConAppDataConKeykindRepVarDataConKeykindRepAppDataConKeykindRepFunDataConKeykindRepTYPEDataConKeykindRepTypeLitSDataConKeykindRepTypeLitDDataConKeytypeLitSymbolDataConKeytypeLitNatDataConKey wildCardKeyabsentErrorIdKey augmentIdKey appendIdKey buildIdKey errorIdKey foldrIdKeyrecSelErrorIdKeyseqIdKey eqStringIdKeynoMethodBindingErrorIdKeynonExhaustiveGuardsErrorIdKeyruntimeErrorIdKey patErrorIdKeyrealWorldPrimIdKeyrecConErrorIdKeyunpackCStringUtf8IdKeyunpackCStringAppendIdKeyunpackCStringFoldrIdKeyunpackCStringIdKey voidPrimIdKeytypeErrorIdKey divIntIdKey modIntIdKeyabsentSumFieldErrorIdKeyunsafeCoerceIdKey concatIdKey filterIdKeyzipIdKey bindIOIdKey returnIOIdKeynewStablePtrIdKey printIdKey failIOIdKey nullAddrIdKey voidArgIdKeyfstIdKeysndIdKeyotherwiseIdKey assertIdKeymkIntegerIdKeysmallIntegerIdKeyintegerToWordIdKeyintegerToIntIdKeyintegerToWord64IdKeyintegerToInt64IdKeyplusIntegerIdKeytimesIntegerIdKeyminusIntegerIdKeynegateIntegerIdKeyeqIntegerPrimIdKeyneqIntegerPrimIdKeyabsIntegerIdKeysignumIntegerIdKeyleIntegerPrimIdKeygtIntegerPrimIdKeyltIntegerPrimIdKeygeIntegerPrimIdKeycompareIntegerIdKeyquotIntegerIdKeyremIntegerIdKeydivIntegerIdKeymodIntegerIdKeydivModIntegerIdKeyquotRemIntegerIdKeyfloatFromIntegerIdKeydoubleFromIntegerIdKeyencodeFloatIntegerIdKeyencodeDoubleIntegerIdKeygcdIntegerIdKeylcmIntegerIdKeyandIntegerIdKeyorIntegerIdKeyxorIntegerIdKeycomplementIntegerIdKeyshiftLIntegerIdKeyshiftRIntegerIdKeywordToIntegerIdKeyword64ToIntegerIdKeyint64ToIntegerIdKeydecodeDoubleIntegerIdKey rootMainKey runMainKey thenIOIdKey lazyIdKeyassertErrorIdKey oneShotKeyrunRWKeytraceKeybreakpointIdKeybreakpointCondIdKeybreakpointAutoIdKeybreakpointJumpIdKeybreakpointCondJumpIdKeybreakpointAutoJumpIdKey inlineIdKeymapIdKeygroupWithIdKey dollarIdKeycoercionTokenIdKey noinlineIdKeyrationalToFloatIdKeyrationalToDoubleIdKeyunmarshalObjectIdKeymarshalObjectIdKeymarshalStringIdKeyunmarshalStringIdKeycheckDotnetResNameIdKey undefinedKey magicDictKey coerceKey unboundKeyfromIntegerClassOpKeyminusClassOpKeyfromRationalClassOpKeyenumFromClassOpKeyenumFromThenClassOpKeyenumFromToClassOpKeyenumFromThenToClassOpKey eqClassOpKey geClassOpKeynegateClassOpKeybindMClassOpKeythenMClassOpKeyfmapClassOpKeyreturnMClassOpKey mfixIdKeyfailMClassOpKey arrAIdKey composeAIdKey firstAIdKey appAIdKey choiceAIdKey loopAIdKeyfromStringClassOpKeytoAnnotationWrapperIdKeyfromIntegralIdKeyrealToFracIdKeytoIntegerClassOpKeytoRationalClassOpKey guardMIdKey liftMIdKey mzipIdKeyghciStepIoMClassOpKeyisListClassKeyfromListClassOpKeyfromListNClassOpKeytoListClassOpKey proxyHashKey mkTyConKey mkTrTypeKey mkTrConKey mkTrAppKeytypeNatTypeRepKeytypeSymbolTypeRepKey typeRepIdKey mkTrFunKey trTYPEKeytrTYPE'PtrRepLiftedKeytrRuntimeRepKeytr'PtrRepLiftedKeystarKindRepKeystarArrStarKindRepKeystarArrStarArrStarKindRepKey toDynIdKeybitIntegerIdKey eqSCSelIdKey heqSCSelIdKeycoercibleSCSelIdKeysappendClassOpKeymemptyClassOpKeymappendClassOpKeymconcatClassOpKeyemptyCallStackKeypushCallStackKeyfromStaticPtrClassOpKey makeStaticKeynaturalFromIntegerIdKeynaturalToIntegerIdKeyplusNaturalIdKeyminusNaturalIdKeytimesNaturalIdKeymkNaturalIdKeynaturalSDataConKeywordToNaturalIdKeynumericClassKeysfractionalClassKeysstandardClassKeysderivableClassKeysinteractiveClassNamesinteractiveClassKeyspretendNameIsInScopetemplateHaskellNamesthSynthLibqqLib mkTHModulelibFunlibTcthFunthTcthClsthConqqFun liftClassName qTyConName nameTyConNamefieldExpTyConName patTyConNamefieldPatTyConName expTyConName decTyConName typeTyConNamematchTyConNameclauseTyConNamefunDepTyConName predTyConName tExpTyConNameinjAnnTyConNameoverlapTyConName returnQName bindQName sequenceQName newNameNameliftNameliftStringName mkNameName mkNameG_vName mkNameG_dNamemkNameG_tcName mkNameLName mkNameSName unTypeName unTypeQNameunsafeTExpCoerceName charLName stringLName integerLName intPrimLName wordPrimLNamefloatPrimLNamedoublePrimLName rationalLNamestringPrimLName charPrimLNamelitPNamevarPNametupPNameunboxedTupPNameunboxedSumPNameconPName infixPName tildePName bangPNameasPName wildPNamerecPName listPNamesigPName viewPName fieldPatName matchName clauseNamevarENameconENamelitENameappEName appTypeEName infixEName infixAppName sectionLName sectionRNamelamEName lamCaseENametupENameunboxedTupENameunboxedSumEName condEName multiIfENameletEName caseENamedoENamemdoEName compEName fromEName fromThenEName fromToENamefromThenToEName listENamesigEName recConEName recUpdEName staticENameunboundVarEName labelENameimplicitParamVarEName fieldExpName guardedBName normalBName normalGEName patGEName bindSNameletSName noBindSNameparSNamerecSNamefunDNamevalDName dataDName newtypeDName tySynDName classDNameinstanceWithOverlapDName standaloneDerivWithStrategyDNamesigDNamedefaultSigDName forImpDName pragInlDName pragSpecDNamepragSpecInlDNamepragSpecInstDName pragRuleDNamepragCompleteDName pragAnnDName dataInstDNamenewtypeInstDNametySynInstDNameopenTypeFamilyDNameclosedTypeFamilyDNamedataFamilyDName infixLDName infixRDName infixNDNameroleAnnotDName patSynDNamepatSynSigDNameimplicitParamBindDNamecxtNamenoSourceUnpackednessNamesourceNoUnpackNamesourceUnpackNamenoSourceStrictnessNamesourceLazyNamesourceStrictName normalCNamerecCName infixCName forallCName gadtCName recGadtCNamebangName bangTypeNamevarBangTypeNameunidirPatSynNameimplBidirPatSynNameexplBidirPatSynNameprefixPatSynNameinfixPatSynNamerecordPatSynName forallTNamevarTNameconTName tupleTNameunboxedTupleTNameunboxedSumTName arrowTName listTNameappTName appKindTNamesigTName equalityTNamelitTName promotedTNamepromotedTupleTNamepromotedNilTNamepromotedConsTName wildCardTName infixTNameimplicitParamTName numTyLitName strTyLitName plainTVName kindedTVName nominalRNamerepresentationalRName phantomRName inferRNamevarKNameconKName tupleKName arrowKName listKNameappKName starKNameconstraintKName noSigName kindSigName tyVarSigNameinjectivityAnnName cCallName stdCallName cApiCallName primCallNamejavaScriptCallName unsafeNamesafeNameinterruptibleNametExpDataConName ruleVarNametypedRuleVarName funDepName tySynEqnNamevalueAnnotationNametypeAnnotationNamemoduleAnnotationNamederivClauseNamestockStrategyNameanyclassStrategyNamenewtypeStrategyNameviaStrategyNamematchQTyConNameclauseQTyConName expQTyConNamestmtQTyConName decQTyConNamedecsQTyConName conQTyConNamebangTypeQTyConNamevarBangTypeQTyConNametypeQTyConNamefieldExpQTyConName patQTyConNamefieldPatQTyConNamepredQTyConNameruleBndrQTyConNametySynEqnQTyConName roleTyConNamederivClauseQTyConNamekindQTyConNametyVarBndrQTyConNamederivStrategyQTyConName quoteExpName quotePatName quoteDecName quoteTypeNamenoInlineDataConNameinlineDataConNameinlinableDataConNameconLikeDataConNamefunLikeDataConNameallPhasesDataConNamefromPhaseDataConNamebeforePhaseDataConNameoverlappableDataConNameoverlappingDataConNameoverlapsDataConNameincoherentDataConName liftClassKey expTyConKey matchTyConKeyclauseTyConKey qTyConKey expQTyConKey decQTyConKey patTyConKeymatchQTyConKeyclauseQTyConKey stmtQTyConKey conQTyConKey typeQTyConKey typeTyConKey decTyConKeybangTypeQTyConKeyvarBangTypeQTyConKeyfieldExpTyConKeyfieldPatTyConKey nameTyConKey patQTyConKeyfieldPatQTyConKeyfieldExpQTyConKeyfunDepTyConKey predTyConKey predQTyConKeytyVarBndrQTyConKey decsQTyConKeyruleBndrQTyConKeytySynEqnQTyConKey roleTyConKey tExpTyConKeyinjAnnTyConKey kindQTyConKeyoverlapTyConKeyderivClauseQTyConKeyderivStrategyQTyConKeynoInlineDataConKeyinlineDataConKeyinlinableDataConKeyconLikeDataConKeyfunLikeDataConKeyallPhasesDataConKeyfromPhaseDataConKeybeforePhaseDataConKeytExpDataConKeyoverlappableDataConKeyoverlappingDataConKeyoverlapsDataConKeyincoherentDataConKey returnQIdKey bindQIdKeysequenceQIdKey liftIdKey newNameIdKey mkNameIdKeymkNameG_vIdKeymkNameG_dIdKeymkNameG_tcIdKey mkNameLIdKey mkNameSIdKey unTypeIdKey unTypeQIdKeyunsafeTExpCoerceIdKey charLIdKey stringLIdKey integerLIdKey intPrimLIdKeywordPrimLIdKeyfloatPrimLIdKeydoublePrimLIdKeyrationalLIdKeystringPrimLIdKeycharPrimLIdKeyliftStringIdKey litPIdKey varPIdKey tupPIdKeyunboxedTupPIdKeyunboxedSumPIdKey conPIdKey infixPIdKey tildePIdKey bangPIdKeyasPIdKey wildPIdKey recPIdKey listPIdKey sigPIdKey viewPIdKey fieldPatIdKey matchIdKey clauseIdKey varEIdKey conEIdKey litEIdKey appEIdKey appTypeEIdKey infixEIdKey infixAppIdKey sectionLIdKey sectionRIdKey lamEIdKey lamCaseEIdKey tupEIdKeyunboxedTupEIdKeyunboxedSumEIdKey condEIdKey multiIfEIdKey letEIdKey caseEIdKeydoEIdKey compEIdKey fromEIdKeyfromThenEIdKey fromToEIdKeyfromThenToEIdKey listEIdKey sigEIdKey recConEIdKey recUpdEIdKey staticEIdKeyunboundVarEIdKey labelEIdKeyimplicitParamVarEIdKey mdoEIdKey fieldExpIdKey guardedBIdKey normalBIdKey normalGEIdKey patGEIdKey bindSIdKey letSIdKey noBindSIdKey parSIdKey recSIdKey funDIdKey valDIdKey dataDIdKey newtypeDIdKey tySynDIdKey classDIdKeyinstanceWithOverlapDIdKeyinstanceDIdKey sigDIdKey forImpDIdKey pragInlDIdKeypragSpecDIdKeypragSpecInlDIdKeypragSpecInstDIdKeypragRuleDIdKey pragAnnDIdKeydataFamilyDIdKeyopenTypeFamilyDIdKeydataInstDIdKeynewtypeInstDIdKeytySynInstDIdKeyclosedTypeFamilyDIdKey infixLDIdKey infixRDIdKey infixNDIdKeyroleAnnotDIdKey!standaloneDerivWithStrategyDIdKeydefaultSigDIdKey patSynDIdKeypatSynSigDIdKeypragCompleteDIdKeyimplicitParamBindDIdKeycxtIdKeynoSourceUnpackednessKeysourceNoUnpackKeysourceUnpackKeynoSourceStrictnessKey sourceLazyKeysourceStrictKey normalCIdKey recCIdKey infixCIdKey forallCIdKey gadtCIdKey recGadtCIdKey bangIdKeybangTKey varBangTKeyunidirPatSynIdKeyimplBidirPatSynIdKeyexplBidirPatSynIdKeyprefixPatSynIdKeyinfixPatSynIdKeyrecordPatSynIdKey forallTIdKey varTIdKey conTIdKey tupleTIdKeyunboxedTupleTIdKeyunboxedSumTIdKey arrowTIdKey listTIdKey appTIdKey appKindTIdKey sigTIdKeyequalityTIdKey litTIdKeypromotedTIdKeypromotedTupleTIdKeypromotedNilTIdKeypromotedConsTIdKeywildCardTIdKeyimplicitParamTIdKey infixTIdKey numTyLitIdKey strTyLitIdKey plainTVIdKey kindedTVIdKey nominalRIdKeyrepresentationalRIdKey phantomRIdKey inferRIdKey varKIdKey conKIdKey tupleKIdKey arrowKIdKey listKIdKey appKIdKey starKIdKeyconstraintKIdKey noSigIdKey kindSigIdKey tyVarSigIdKeyinjectivityAnnIdKey cCallIdKey stdCallIdKey cApiCallIdKey primCallIdKeyjavaScriptCallIdKey unsafeIdKey safeIdKeyinterruptibleIdKey funDepIdKey tySynEqnIdKey quoteExpKey quotePatKey quoteDecKey quoteTypeKey ruleVarIdKeytypedRuleVarIdKeyvalueAnnotationIdKeytypeAnnotationIdKeymoduleAnnotationIdKeyderivClauseIdKeystockStrategyIdKeyanyclassStrategyIdKeynewtypeStrategyIdKeyviaStrategyIdKeylift_RDR mkNameG_dRDR mkNameG_vRDRconE_RDRlitE_RDRappE_RDR infixApp_RDR stringL_RDR intPrimL_RDR wordPrimL_RDRfloatPrimL_RDRdoublePrimL_RDRstringPrimL_RDR charPrimL_RDRHasENoEIsUnicodeSyntax UnicodeSyntax NormalSyntaxLRdrNameAnnotationCommentAnnDocCommentNextAnnDocCommentPrevAnnDocCommentNamed AnnDocSection AnnDocOptionsAnnLineCommentAnnBlockComment AnnAnyclass AnnCloseBU AnnCloseC AnnCloseQU AnnCloseS AnnCommaTuple AnnDarrowU AnnDcolonU AnnForallU AnnLarrowUAnnMdoAnnName AnnOpenBUAnnOpenC AnnOpenEQU AnnOpenPE AnnOpenPTEAnnOpenS AnnRarrowUAnnSimpleQuote AnnSignature AnnThIdSpliceAnnThIdTySplice AnnThTyQuote AnnValStrAnnViaAnnlarrowtailUAnnrarrowtailUAnnLarrowtailUAnnRarrowtailU AnnEofPos ApiAnnKeyApiAnns getAnnotationgetAndRemoveAnnotationgetAnnotationCommentsgetAndRemoveAnnotationComments unicodeAnn$fOutputableAnnKeywordId$fOutputableAnnotationComment$fEqAnnKeywordId$fOrdAnnKeywordId$fDataAnnKeywordId$fShowAnnKeywordId$fEqAnnotationComment$fOrdAnnotationComment$fDataAnnotationComment$fShowAnnotationComment$fEqIsUnicodeSyntax$fOrdIsUnicodeSyntax$fDataIsUnicodeSyntax$fShowIsUnicodeSyntax$fEqHasE $fOrdHasE $fDataHasE $fShowHasEAddAnnExtBitsFfiBitInterruptibleFfiBit CApiFfiBit ArrowsBitThBit ThQuotesBitIpBitOverloadedLabelsBitExplicitForallBit BangPatBitPatternSynonymsBit HaddockBit MagicHashBitRecursiveDoBitUnicodeSyntaxBitUnboxedTuplesBitUnboxedSumsBitDatatypeContextsBitMonadComprehensionsBitTransformComprehensionsBitQqBitRawTokenStreamBitAlternativeLayoutRuleBitALRTransitionalBitRelaxedLayoutBitNondecreasingIndentationBitSafeHaskellBitTraditionalRecordSyntaxBitExplicitNamespacesBit LambdaCaseBitBinaryLiteralsBitNegativeLiteralsBitHexFloatLiteralsBitTypeApplicationsBitStaticPointersBitNumericUnderscoresBit StarIsTypeBitBlockArgumentsBitNPlusKPatternsBitDoAndIfThenElseBit MultiWayIfBit GadtSyntaxBit InRulePragBitInNestedCommentBitUsePosPragsBitPunPPStatebufferoptionsmessages tab_first tab_countlast_tklast_loclast_lenloccontext lex_statesrcfilesalr_pending_implicit_tokensalr_next_token alr_last_loc alr_contextalr_expecting_ocurlyalr_justClosedExplicitLetBlock annotations comment_qannotations_comments ParserFlags ParseResultPOkPFailedTokenITasITcaseITclassITdata ITdefault ITderivingITdoITelseIThiding ITforeignITifITimportITinITinfixITinfixlITinfixr ITinstanceITletITmodule ITnewtypeITof ITqualifiedITthenITtypeITwhereITforallITexportITlabel ITdynamicITsafeITinterruptibleITunsafe ITstdcallconv ITccallconv ITcapiconvITprimcallconvITjavascriptcallconvITmdoITfamilyITroleITgroupITbyITusing ITpatternITstaticITstock ITanyclassITviaITunit ITsignature ITdependency ITrequires ITinline_prag ITspec_pragITspec_inline_prag ITsource_prag ITrules_pragITwarning_pragITdeprecated_prag ITline_prag ITcolumn_prag ITscc_pragITgenerated_prag ITcore_prag ITunpack_pragITnounpack_prag ITann_pragITcomplete_prag ITclose_pragIToptions_pragITinclude_pragITlanguage_pragITminimal_pragIToverlappable_pragIToverlapping_pragIToverlaps_pragITincoherent_pragITctypeITcomment_line_pragITdotdotITcolonITdcolonITequalITlamITlcaseITvbarITlarrowITrarrowITatITtildeITdarrowITminusITbangITstarITdotITbiglamITocurlyITccurly ITvocurly ITvccurlyITobrack ITopabrack ITcpabrackITcbrackIToparenITcparen IToubxparen ITcubxparenITsemiITcomma ITunderscore ITbackquote ITsimpleQuoteITvaridITconidITvarsymITconsymITqvaridITqconid ITqvarsym ITqconsym ITdupipvarid ITlabelvaridITcharITstring ITinteger ITrational ITprimchar ITprimstring ITprimint ITprimword ITprimfloat ITprimdoubleITopenExpQuoteITopenPatQuoteITopenDecQuoteITopenTypQuote ITcloseQuoteITopenTExpQuoteITcloseTExpQuote ITidEscape ITparenEscape ITidTyEscapeITparenTyEscape ITtyQuote ITquasiQuote ITqQuasiQuoteITprocITrec IToparenbar ITcparenbar ITlarrowtail ITrarrowtail ITLarrowtail ITRarrowtail ITtypeApp ITunknownITeofITdocCommentNextITdocCommentPrevITdocCommentNamed ITdocSection ITdocOptions ITlineCommentITblockComment failLocMsgP failSpanMsgP getPStatewithThisPackage setSrcLoc getRealSrcLoc setLastToken nextIsEOF pushLexState popLexState getLexState activeContextgetBit pragStatemkParserFlags' mkParserFlagsmkPState mkPStatePure addWarning getMessages popContextpushModuleContext srcParseFaillexerlexTokenStream addAnnotation addAnnsAtmkParensApiAnncommentToAnnotation$fOutputableToken $fMonadFailP$fMonadP$fApplicativeP $fFunctorP $fShowToken$fShowLayoutContext $fEnumExtBitsPDunPDliftP$fHasDynFlagsPD $fMonadFailPD $fMonadPD$fApplicativePD $fFunctorPD TyVarBinder TyCoVarBinderVarBndrBndrArgFlagInferred SpecifiedRequiredvarTypeOutIdOutCoVarOutTyVarOutVarInIdInCoVarInTyVarInVarTyCoVarJoinIdEqVarIpIdDictIdDFunIdEvVarEvIdKindVarTypeVarTcTyVarTKVarTyVarNcIdCoVar nonDetCmpVar varUnique setVarUnique setVarName setVarType updateVarTypeupdateVarTypeMisVisibleArgFlagisInvisibleArgFlagsameVis binderVar binderVars binderArgFlag binderTypemkTyCoVarBinder mkTyVarBindermkTyCoVarBindersmkTyVarBinders isTyVarBinder tyVarName tyVarKindsetTyVarUnique setTyVarName setTyVarKindupdateTyVarKindupdateTyVarKindMmkTyVar mkTcTyVartcTyVarDetailssetTcTyVarDetailsidInfo idDetails mkGlobalVar mkLocalVarmkCoVarmkExportedLocalVar lazySetIdInfo setIdDetails globaliseId setIdExportedsetIdNotExportedisTyVar isTcTyVar isTyCoVarisIdisCoVar isNonCoVarId isLocalId isLocalVar isGlobalIdmustHaveLocalBinding isExportedId$fHasOccNameVar $fDataVar$fOrdVar$fEqVar$fUniquableVar$fNamedThingVar$fOutputableVar$fBinaryArgFlag$fOutputableArgFlag$fNamedThingVarBndr$fBinaryVarBndr$fOutputableVarBndr $fEqArgFlag $fOrdArgFlag $fDataArgFlag $fDataVarBndrmkPromotedListTyunboxedTupleKind anyTypeOfKindint8ElemRepDataConTyint16ElemRepDataConTyint32ElemRepDataConTyint64ElemRepDataConTyword8ElemRepDataConTyword16ElemRepDataConTyword32ElemRepDataConTyword64ElemRepDataConTyfloatElemRepDataConTydoubleElemRepDataConTy vec2DataConTy vec4DataConTy vec8DataConTyvec16DataConTyvec32DataConTyvec64DataConTyliftedRepDataConTyunliftedRepDataConTyintRepDataConTyint8RepDataConTyint16RepDataConTyword16RepDataConTywordRepDataConTyint64RepDataConTyword8RepDataConTyword64RepDataConTyaddrRepDataConTyfloatRepDataConTydoubleRepDataConTyliftedRepDataConTyConvecRepDataConTyContupleRepDataConTyCon runtimeRepTyruntimeRepTyCon vecCountTyCon vecElemTyConconstraintKindliftedTypeKindunitTycoercibleTyConheqTyConmkBoxedTupleTy typeNatKindtypeSymbolKind listTyCon mkForAllKind mkFunKind NameOrRdrNameplaceHolderNamesTc patSynNamepatSynExTyVarspatSynInstArgTys patSynArityIfaceForAllBndr IfaceBndr IfaceCoercion IfaceTyLit IfaceTyCon IfaceAppArgsOutputableBndrId OutputableX ConvertIdX Convertableconvert ForallXIEXXIE XIEDocNamedXIEDocXIEGroupXIEModuleContents XIEThingWith XIEThingAll XIEThingAbsXIEVarForallXImportDecl XXImportDecl XCImportDeclForallXFieldOcc XXFieldOcc XCFieldOccForallXConDeclFieldXXConDeclField XConDeclFieldForallXTyVarBndr XXTyVarBndr XKindedTyVar XUserTyVar ForallXTypeXXType XWildCardTyXTyLitXExplicitTupleTyXExplicitListTyXRecTyXBangTyXDocTy XSpliceTyXKindSigXStarTy XIParamTyXParTyXOpTyXSumTyXTupleTyXListTyXFunTy XAppKindTyXAppTyXTyVarXQualTy XForAllTyForallXHsWildCardBndrsXXHsWildCardBndrsXHsWCForallXHsImplicitBndrsXXHsImplicitBndrsXHsIBForallXLHsQTyVars XXLHsQTyVarsXHsQTvs ForallXPatXXPatXCoPatXSigPat XNPlusKPatXNPatXLitPat XSplicePatXViewPatXConPatXSumPat XTuplePatXListPatXBangPatXParPatXAsPatXLazyPatXVarPatXWildPatForallXOverLit XXOverLitXOverLit ForallXHsLitXXLit XHsDoublePrim XHsFloatPrimXHsRat XHsInteger XHsWord64Prim XHsInt64Prim XHsWordPrim XHsIntPrimXHsInt XHsStringPrim XHsString XHsCharPrimXHsCharForallXApplicativeArgXXApplicativeArgXApplicativeArgManyXApplicativeArgOneForallXParStmtBlockXXParStmtBlock XParStmtBlock ForallXCmdXXCmdXCmdWrapXCmdDoXCmdLetXCmdIfXCmdCaseXCmdParXCmdLamXCmdApp XCmdArrForm XCmdArrApp ForallXStmtLRXXStmtLRXRecStmt XTransStmtXParStmtXLetStmt XBodyStmtXApplicativeStmt XBindStmt XLastStmt ForallXGRHSXXGRHSXCGRHS ForallXGRHSsXXGRHSsXCGRHSs ForallXMatchXXMatchXCMatchForallXMatchGroup XXMatchGroupXMG ForallXCmdTopXXCmdTopXCmdTopForallXBracket XXBracketXTExpBrXVarBrXTypBrXDecBrGXDecBrLXPatBrXExpBr ForallXSpliceXXSpliceXSpliced XQuasiQuoteXUntypedSplice XTypedSplice ForallXTupArgXXTupArgXMissingXPresentForallXAmbiguousFieldOccXXAmbiguousFieldOcc XAmbiguous XUnambiguous ForallXExprXXExprXWrap XELazyPat XEViewPatXEAsPat XEWildPat XTickPragmaXBinTickXTickXArrFormXArrAppXStaticXProcXSpliceE XTcBracketOut XRnBracketOutXBracketXCoreAnnXSCC XArithSeqXExprWithTySig XRecordUpd XRecordCon XExplicitListXDoXLetXMultiIfXIfXCase XExplicitSumXExplicitTuple XSectionR XSectionLXParXNegAppXOpApp XAppTypeEXAppXLamCaseXLamXLitE XOverLitEXIPVar XOverLabelXRecFld XConLikeOut XUnboundVarXVarForallXRoleAnnotDeclXXRoleAnnotDeclXCRoleAnnotDeclForallXAnnDecl XXAnnDecl XHsAnnotationForallXWarnDecl XXWarnDeclXWarningForallXWarnDecls XXWarnDecls XWarningsForallXRuleBndr XXRuleBndr XRuleBndrSig XCRuleBndrForallXRuleDecl XXRuleDeclXHsRuleForallXRuleDecls XXRuleDecls XCRuleDeclsForallXForeignDecl XXForeignDeclXForeignExportXForeignImportForallXDefaultDecl XXDefaultDecl XCDefaultDecl XViaStrategyForallXDerivDecl XXDerivDecl XCDerivDeclForallXInstDecl XXInstDecl XTyFamInstD XDataFamInstD XClsInstDForallXClsInstDecl XXClsInstDecl XCClsInstDecl ForallXFamEqnXXFamEqnXCFamEqnForallXConDecl XXConDecl XConDeclH98 XConDeclGADTForallXHsDerivingClauseXXHsDerivingClauseXCHsDerivingClauseForallXHsDataDefn XXHsDataDefn XCHsDataDefnForallXFamilyDecl XXFamilyDecl XCFamilyDeclForallXFamilyResultSigXXFamilyResultSig XTyVarSig XCKindSigXNoSigForallXTyClGroup XXTyClGroup XCTyClGroupForallXTyClDecl XXTyClDecl XClassDecl XDataDeclXSynDeclXFamDeclForallXSpliceDecl XXSpliceDecl XSpliceDeclForallXHsGroup XXHsGroup XCHsGroup ForallXHsDeclXXHsDecl XRoleAnnotDXDocDXSpliceDXRuleDXAnnD XWarningDXForDXDefDXSigDXValDXDerivDXInstDXTyClDForallXFixitySig XXFixitySig XFixitySig ForallXSigXXSigXCompleteMatchSig XSCCFunSig XMinimalSig XSpecInstSigXSpecSig XInlineSigXFixSigXIdSig XClassOpSig XPatSynSigXTypeSig ForallXIPBindXXIPBindXCIPBindForallXHsIPBinds XXHsIPBindsXIPBindsForallXPatSynBind XXPatSynBindXPSBForallXABExport XXABExportXABEForallXHsBindsLR XXHsBindsLR XPatSynBind XAbsBindsXVarBindXPatBindXFunBindForallXValBindsLR XXValBindsLR XValBindsForallXHsLocalBindsLRXXHsLocalBindsLRXEmptyLocalBinds XHsIPBinds XHsValBinds NoGhcTcPassNoGhcTcLIdPIdPGhcTcIdGhcTcGhcRnGhcPsPassParsedRenamed TypecheckedGhcPassnoExt$fOutputableNoExt$fConvertableaa $fDataNoExt $fEqNoExt $fOrdNoExt $fDataPass $fDataGhcPass $fEqGhcPassLPatPat IEWildcard NoIEWildcardIEIEVar IEThingAbs IEThingAll IEThingWithIEModuleContentsIEGroupIEDoc IEDocNamedXIELIELIEWrappedName IEWrappedNameIEName IEPatternIEType ImportDecl XImportDeclideclExtideclSourceSrc ideclName ideclPkgQual ideclSource ideclSafeideclQualified ideclImplicitideclAs ideclHiding LImportDeclsimpleImportDeclieNameieNames ieWrappedNamelieWrappedNameieLWrappedNamereplaceWrappedNamereplaceLWrappedName pprImpExp$fOutputableIEWrappedName$fOutputableBndrIEWrappedName$fHasOccNameIEWrappedName$fOutputableIE$fOutputableImportDecl$fEqIEWrappedName$fDataIEWrappedName$fEqIEWildcard$fDataIEWildcardLHsExpr SyntaxExprGRHSs MatchGroupHsSpliceHsCmd pprFunBind pprPatBind pprSpliceDecl pprSplicepprExprpprLExprEqSpec DataConRepisUnboxedSumCondataConFullSigdataConStupidThetadataConInstOrigArgTysdataConFieldLabelsdataConSourceAritydataConUserTyVarBindersdataConUserTyVarsdataConExTyCoVars dataConTyCon dataConName RealDataCon PatSynCon conLikeName CollectedCCsCostCentreStack CCFlavourCafCCExprCCDeclCCHpcCCCcNameNormalCC AllCafsCCcc_namecc_modcc_loc cmpCostCentreisCafCC isSccCountCC sccAbleCCccFromThisModulemkUserCCmkAutoCC mkAllCafsCCemptyCollectedCCs collectCC currentCCS dontCareCCS isCurrentCCSisCafCCSmaybeSingletonCCSmkSingletonCCSpprCostCentreCorecostCentreUserNamecostCentreUserNameFScostCentreSrcSpan$fBinaryCCFlavour$fBinaryCostCentre$fOutputableCostCentre$fOrdCostCentre$fEqCostCentre$fOutputableCostCentreStack $fEqCCFlavour$fOrdCCFlavour$fDataCCFlavour$fDataCostCentre$fEqCostCentreStack$fOrdCostCentreStackBuiltInSynFamily sfMatchFam sfInteractTopsfInteractInert CoAxiomRule coaxrNamecoaxrAsmpRoles coaxrRole coaxrProvesTypeEqnRoleNominalRepresentationalPhantom CoAxBranchcab_loccab_tvs cab_eta_tvscab_cvs cab_rolescab_lhscab_rhs cab_incomps co_ax_unique co_ax_name co_ax_roleco_ax_tcco_ax_branchesco_ax_implicitBranches MkBranches unMkBranches UnbranchedBranched BranchFlag BranchIndex manyBranches unbranched fromBranches numBranchesmapAccumBranchestoBranchedAxiomtoUnbranchedAxiomcoAxiomNumPatscoAxiomNthBranch coAxiomArity coAxiomName coAxiomRolecoAxiomBranchescoAxiomSingleBranch_maybecoAxiomSingleBranch coAxiomTyConcoAxBranchTyVarscoAxBranchCoVars coAxBranchLHS coAxBranchRHScoAxBranchRolescoAxBranchSpanisImplicitCoAxiomcoAxBranchIncompsplaceHolderIncomps fsFromRoletrivialBuiltInFamily $fBinaryRole$fOutputableRole$fOutputableCoAxBranch $fDataCoAxiom$fNamedThingCoAxiom$fOutputableCoAxiom$fUniquableCoAxiom $fEqCoAxiom$fOutputableCoAxiomRule$fOrdCoAxiomRule$fEqCoAxiomRule$fUniquableCoAxiomRule$fDataCoAxiomRule$fEqRole $fOrdRole $fDataRole$fDataCoAxBranchLiftingContext coercionType coercionKindseqCo liftCoSubstmkCoercionType coVarRolecoVarKindsTypesRoledecomposePiCos isReflexiveCoisReflCo isGReflCo mkAxiomRuleComkProofIrrelComkSubComkKindCo mkNomReflCo mkGReflComkInstComkLRComkNthCo mkTransComkSymComkUnivCo mkUnsafeCo mkPhantomCo mkAxiomInstCo mkCoVarComkFunCo mkForAllComkAppCo mkTyConAppComkReflCoClassMinimalDef ClassATItemATI DefMethInfo ClassOpItemFunDep classTyCon classNameclassKey classTyVarsclassMinimalDefmkClassmkAbstractClass classArityclassAllSelIds classSCSelIds classSCSelId classMethods classOpItemsclassATs classATItems classSCTheta classTvsFds classHasFds classBigSigclassExtraBigSigisAbstractClasspprDefMethInfo pprFundeps pprFunDep $fDataClass$fOutputableClass$fNamedThingClass$fUniquableClass $fEqClass DataConBoxer magicDictId mkPrimOpId mkDictSelIdmkDataConWorkId DTyCoVarSet DTyVarSetDIdSetDVarSet TyCoVarSetCoVarSetTyVarSetIdSet emptyVarSet unitVarSet extendVarSetextendVarSetListintersectVarSet unionVarSet unionVarSets elemVarSet minusVarSet delVarSet delVarSetList isEmptyVarSetmkVarSetlookupVarSet_Directly lookupVarSetlookupVarSetByName sizeVarSet filterVarSetdelVarSetByKeyelemVarSetByKeypartitionVarSetmapUnionVarSetintersectsVarSetdisjointVarSet subVarSet anyVarSet allVarSet mapVarSet fixVarSettransCloVarSet seqVarSet pluralVarSet pprVarSet emptyDVarSet unitDVarSet mkDVarSet extendDVarSet elemDVarSet dVarSetElems subDVarSet unionDVarSet unionDVarSetsmapUnionDVarSetintersectDVarSetdVarSetIntersectVarSetdisjointDVarSetintersectsDVarSetisEmptyDVarSet delDVarSet minusDVarSetdVarSetMinusVarSet foldDVarSet anyDVarSet allDVarSet mapDVarSet filterDVarSet sizeDVarSetpartitionDVarSetdelDVarSetList seqDVarSetextendDVarSetListdVarSetToVarSettransCloDVarSet DTyVarEnvDIdEnvDVarEnvCoVarEnv TyCoVarEnvTyVarEnvIdEnvTidyEnvRnEnv2 InScopeSetemptyInScopeSetgetInScopeVars mkInScopeSetextendInScopeSetextendInScopeSetListextendInScopeSetSet delInScopeSetelemInScopeSet lookupInScopelookupInScope_Directly unionInScope varSetInScopeuniqAwaymkRnEnv2addRnInScopeSet rnInScope rnInScopeSetrnEnvLrnEnvRrnBndrs2rnBndr2 rnBndr2_varrnBndrLrnBndrRrnEtaLrnEtaRdelBndrLdelBndrR delBndrsL delBndrsRrnOccLrnOccR rnOccL_maybe rnOccR_maybeinRnEnvLinRnEnvRlookupRnInScope nukeRnEnvL nukeRnEnvRrnSwap emptyTidyEnvmkEmptyTidyEnv elemVarEnvelemVarEnvByKeydisjointVarEnv alterVarEnv extendVarEnvextendVarEnv_CextendVarEnv_AccextendVarEnv_DirectlyextendVarEnvList plusVarEnv_C plusVarEnv_CDplusMaybeVarEnv_C delVarEnvList delVarEnv minusVarEnvintersectsVarEnv plusVarEnvplusVarEnvList lookupVarEnv filterVarEnvlookupWithDefaultVarEnv mapVarEnvmkVarEnvmkVarEnv_Directly emptyVarEnv unitVarEnv isEmptyVarEnvlookupVarEnv_DirectlyfilterVarEnv_DirectlydelVarEnv_DirectlypartitionVarEnvrestrictVarEnv zipVarEnvlookupVarEnv_NF modifyVarEnvmodifyVarEnv_Directly emptyDVarEnv dVarEnvElts mkDVarEnv extendDVarEnv minusDVarEnv lookupDVarEnv foldDVarEnv mapDVarEnv filterDVarEnv alterDVarEnv plusDVarEnv plusDVarEnv_C unitDVarEnv delDVarEnvdelDVarEnvListisEmptyDVarEnv elemDVarEnvextendDVarEnv_C modifyDVarEnvpartitionDVarEnvextendDVarEnvList anyDVarEnv$fOutputableInScopeSet RecTcChecker TyConFlavour ClassFlavour TupleFlavour SumFlavourDataTypeFlavourNewtypeFlavourAbstractTypeFlavourDataFamilyFlavourOpenTypeFamilyFlavourClosedTypeFamilyFlavourTypeSynonymFlavourBuiltInTypeFlavourPromotedDataConFlavour PrimElemRep Int8ElemRep Int16ElemRep Int32ElemRep Int64ElemRep Word8ElemRep Word16ElemRep Word32ElemRep Word64ElemRep FloatElemRep DoubleElemRepPrimRepVoidRep LiftedRep UnliftedRepInt8RepInt16RepIntRepWordRepInt64RepWord8Rep Word16Rep Word64RepAddrRepFloatRep DoubleRepVecRep TyConRepName FamTyConFlavDataFamilyTyConOpenSynFamilyTyConClosedSynFamilyTyConAbstractClosedSynFamilyTyConBuiltInSynFamTyCon Injectivity NotInjective Injective AlgTyConFlavVanillaAlgTyConUnboxedAlgTyCon ClassTyConDataFamInstTyConRuntimeRepInfoNoRRI RuntimeRepVecCountVecElem AlgTyConRhs AbstractTyCon DataTyCon TupleTyConSumTyConNewTyCon data_consdata_cons_sizeis_enumdata_contup_sortnt_rhs nt_etad_rhsnt_co tyConUnique tyConName tyConBinders tyConResKind tyConKind tyConArity tyConTyVars tyConCType algTcFields famTcResVartcTyConScopedTyVarstcTyConUserTyVars tcTyConIsPoly TyConBndrVisNamedTCBAnonTCBTyConTyCoBinder TyConBindermkAnonTyConBindermkAnonTyConBindersmkNamedTyConBindermkNamedTyConBindersmkRequiredTyConBindertyConBinderArgFlagtyConBndrVisArgFlagisNamedTyConBinderisVisibleTyConBinderisInvisibleTyConBinder mkTyConKindtyConTyVarBinderstyConVisibleTyVarsmkDataTyConRhsvisibleDataCons isNoParenttyConRepName_maybemkPrelTyConRepNametyConRepModOcc isVoidRep isGcPtrRep primRepSizeBprimElemRepSizeBprimRepIsFloattyConFieldLabelslookupTyConFieldLabel mkFunTyCon mkAlgTyCon mkClassTyCon mkTupleTyCon mkSumTyCon mkTcTyCon mkPrimTyCon mkKindTyConmkLiftedPrimTyConmkSynonymTyCon mkFamilyTyConmkPromotedDataConisAbstractTyConmakeRecoveryTyCon isPrimTyConisUnliftedTyCon isAlgTyConisVanillaAlgTyCon isDataTyConisInjectiveTyConisGenerativeTyConisGenInjAlgRhs isNewTyConunwrapNewTyCon_maybeunwrapNewTyConEtad_maybeisProductTyConisDataProductTyCon_maybeisDataSumTyCon_maybeisTypeSynonymTyCon isTauTyConisFamFreeTyConmightBeUnsaturatedTyConisGadtSyntaxTyConisEnumerationTyCon isFamilyTyConisOpenFamilyTyConisTypeFamilyTyConisDataFamilyTyConisOpenTypeFamilyTyCon%isClosedSynFamilyTyConWithAxiom_maybetyConInjectivityInfoisBuiltInSynFamTyCon_maybe isTyConAssoctyConAssoc_maybetyConFlavourAssoc_maybetyConTuple_maybeisBoxedTupleTyConisUnboxedSumTyConisPromotedTupleTyConisPromotedDataConisPromotedDataCon_maybe isKindTyConisLiftedTypeKindTyConNameisImplicitTyContyConCType_maybe isTcTyCon isTcLevPolyexpandSynTyCon_maybeisTyConWithSrcDataCons tyConDataConstyConDataCons_maybetyConSingleDataCon_maybetyConSingleDataContyConSingleAlgDataCon_maybetyConFamilySize algTyConRhstyConFamilyResVar_maybe tyConRoles newTyConRhsnewTyConEtadAritynewTyConEtadRhsnewTyConCo_maybe newTyConConewTyConDataCon_maybetyConStupidThetasynTyConDefn_maybesynTyConRhs_maybefamTyConFlav_maybe isClassTyContyConClass_maybetyConATsisFamInstTyContyConFamInstSig_maybetyConFamInst_maybetyConFamilyCoercion_maybetyConRuntimeRepInfo mkTyConTagMap tyConFlavourtcFlavourCanBeUnsaturatedtcFlavourIsOpenpprPromotionQuote initRecTcdefaultRecTcMaxBoundsetRecTcMaxBound checkRecTc tyConSkolem$fBinaryTyConBndrVis$fOutputableTyConBndrVis$fBinaryInjectivity$fOutputableFamTyConFlav$fOutputablePrimElemRep$fOutputablePrimRep $fDataTyCon$fNamedThingTyCon$fOutputableTyConFlavour$fOutputableTyCon$fUniquableTyCon $fEqTyCon$fOutputableAlgTyConFlav$fEqInjectivity$fEqPrimElemRep$fShowPrimElemRep $fEqPrimRep $fShowPrimRep$fEqTyConFlavoursplitTyConApp_maybe scopedSorttyCoVarsOfTypeWellScopedtyCoVarsOfTypesWellScopedtcViewcoreVieweqType piResultTymkCastTymkAppTy isCoercionTyisPredTyShowForAllFlagShowForAllMustShowForAllWhenIfaceUnivCoProvIfaceUnsafeCoerceProvIfacePhantomProvIfaceProofIrrelProvIfacePluginProv IfaceReflCo IfaceGReflCo IfaceFunCoIfaceTyConAppCo IfaceAppCo IfaceForAllCo IfaceCoVarCoIfaceAxiomInstCoIfaceAxiomRuleCo IfaceUnivCo IfaceSymCo IfaceTransCo IfaceNthCo IfaceLRCo IfaceInstCo IfaceKindCo IfaceSubCoIfaceFreeCoVar IfaceHoleCoIfaceMCoercion IfaceMReflIfaceMCoIfaceTyConInfoifaceTyConIsPromotedifaceTyConSortIfaceTyConSortIfaceNormalTyConIfaceTupleTyCon IfaceSumTyConIfaceEqualityTyConifaceTyConNameifaceTyConInfoIA_NilIA_ArgIfaceTyConBinder IfaceNumTyLit IfaceStrTyLit IfaceContext IfacePredTypeIfaceFreeTyVar IfaceTyVar IfaceLitTy IfaceAppTy IfaceFunTy IfaceDFunTy IfaceForAllTy IfaceTyConApp IfaceCastTyIfaceCoercionTy IfaceTupleTy IfaceKind IfaceOneShotIfaceNoOneShot IfaceLamBndr IfaceTvBndr IfaceIdBndr IfExtName IfLclName ifaceBndrNamemkIfaceForAllTvBndrisIfaceLiftedTypeKindsplitIfaceSigmaTysuppressIfaceInvisiblesstripIfaceInvisVarsifForAllBndrVarifForAllBndrNameifTyConBinderVarifTyConBinderNamemkIfaceTySubstinDomIfaceTySubstsubstIfaceAppArgssubstIfaceTyVarstripInvisArgsappArgsIfaceTypesappArgsIfaceTypesArgFlagspprIfacePrefixApp pprIfaceBndrspprIfaceLamBndrpprIfaceIdBndrpprIfaceTvBndrpprIfaceTyConBinders pprIfaceTypepprParendIfaceTypepprPrecIfaceTypepprIfaceAppArgspprParendIfaceAppArgspprIfaceForAllPartpprIfaceForAllPartMustpprIfaceForAllpprIfaceSigmaTypepprUserIfaceForAllpprIfaceTypeApp pprTyTcApppprIfaceCoTcApp pprIfaceTyLitpprIfaceCoercionpprParendIfaceCoercionpprIfaceContextArrpprIfaceContext$fBinaryIfaceOneShot$fBinaryIfaceTyLit$fOutputableIfaceTyLit$fBinaryIfaceTyConSort$fBinaryIfaceTyConInfo$fBinaryIfaceTyCon$fOutputableIfaceTyCon$fBinaryDefMethSpec$fBinaryIfaceUnivCoProv$fBinaryIfaceCoercion$fBinaryIfaceMCoercion$fBinaryIfaceType$fBinaryIfaceAppArgs$fOutputableIfaceCoercion$fOutputableIfaceAppArgs$fOutputableIfaceType$fBinaryIfaceBndr$fOutputableIfaceBndr$fMonoidIfaceAppArgs$fSemigroupIfaceAppArgs$fEqIfaceTyLit$fEqIfaceTyConSort$fEqIfaceTyConInfo$fEqIfaceTyCon TyVarScopeResolvedScopesUnresolvedScopeScopeNoScope LocalScope ModuleScopeDeclTypeFamDecSynDecDataDecConDec PatSynDecClassDecInstDecBindType RegularBind InstanceBindRecFieldContext RecFieldDeclRecFieldAssign RecFieldMatch RecFieldOccImportImportAs ImportHidingExport ContextInfoUse MatchBindIEThingTyDeclValBind PatternBind ClassTyDeclDecl TyVarBindRecFieldIdentifierDetails identType identInfoNodeIdentifiers IdentifierNodeInfonodeAnnotationsnodeTypenodeIdentifiersHieASTnodeInfonodeSpan nodeChildrenHieASTsgetAstsHieArgs HieTypeFixRoll HieTypeFlatHieTypeHTyVarTyHAppTy HTyConApp HForAllTyHFunTyHQualTyHLitTyHCastTy HCoercionTy TypeIndexHieFile hie_hs_file hie_module hie_typeshie_asts hie_exports hie_hs_srcSpan hieVersion$fBinaryHieArgs$fBinaryHieType$fBinaryIEType$fBinaryRecFieldContext$fBinaryBindType$fBinaryDeclType $fBinaryScope$fOutputableScope$fBinaryTyVarScope$fShowTyVarScope$fBinaryContextInfo$fOutputableContextInfo$fBinaryIdentifierDetails$fMonoidIdentifierDetails$fSemigroupIdentifierDetails$fOutputableIdentifierDetails$fBinaryNodeInfo$fBinaryHieAST$fBinaryHieASTs$fBinaryHieFile$fFunctorHieArgs$fFoldableHieArgs$fTraversableHieArgs $fEqHieArgs$fFunctorHieType$fFoldableHieType$fTraversableHieType $fEqHieType $fEqIEType $fEnumIEType $fOrdIEType $fShowIEType$fEqRecFieldContext$fEnumRecFieldContext$fOrdRecFieldContext$fShowRecFieldContext $fEqBindType $fOrdBindType$fShowBindType$fEnumBindType $fEqDeclType $fOrdDeclType$fShowDeclType$fEnumDeclType $fEqScope $fOrdScope $fShowScope $fDataScope$fEqTyVarScope$fOrdTyVarScope$fEqContextInfo$fOrdContextInfo$fShowContextInfo$fEqIdentifierDetails$fFunctorIdentifierDetails$fFoldableIdentifierDetails$fTraversableIdentifierDetails$fFunctorNodeInfo$fFoldableNodeInfo$fTraversableNodeInfo$fFunctorHieAST$fFoldableHieAST$fTraversableHieAST$fFunctorHieASTs$fFoldableHieASTs$fTraversableHieASTstidyToIfaceTcArgstoIfaceCoercionX toIfaceTcArgs toIfaceTyContoIfaceForAllBndr toIfaceTyLit toIfaceTypeXInterestingVarFunfvVarListVarSet fvVarList fvDVarSetfvVarSetemptyFVunionFVfilterFV mapUnionFVunionsFV CvSubstEnv TvSubstEnv CoercionHole ch_co_varch_refUnsafeCoerceProv PhantomProvProofIrrelProv PluginProv MCoercionRMReflMCo KindCoercion CoercionP CoercionRReflGRefl TyConAppCoAppCoForAllCoFunCoCoVarCo AxiomInstCo AxiomRuleCoUnivCoSymCoTransCoNthCoLRCoInstCoKindCoSubCoHoleCoTyBinderNamedAnonKnotTiedNumTyLitStrTyLitTyVarTyAppTyTyConAppForAllTyFunTyLitTyCastTy CoercionTy KindOrTypeAnIdAConLikeATyConACoAxiompprShortTyThingpprTyThingCategorytyThingCategory delBinderVarisInvisibleBinderisVisibleBinder isNamedBinder isTyBindertyCoBinderArgFlag mkTyVarTy mkTyVarTys mkTyCoVarTy mkTyCoVarTysmkFunTymkFunTysmkTyCoForAllTy mkForAllTy mkForAllTys mkTyCoPiTy mkTyCoPiTysmkPiTys mkTyConTykindRep kindRep_maybeisLiftedTypeKindisUnliftedTypeKindisLiftedRuntimeRepisUnliftedRuntimeRepisRuntimeRepVar coHoleCoVarsetCoHoleCoVartyCoVarsOfTypetyCoVarsOfTypes tyCoVarsOfCo tyCoVarsOfCostyCoVarsOfProvmkTyCoInScopeSettyCoVarsOfTypeDSettyCoVarsOfTypeListtyCoVarsOfTypesDSettyCoVarsOfTypesList tyCoFVsOfType tyCoFVsBndrtyCoFVsVarBndrstyCoFVsVarBndrtyCoFVsOfTypestyCoVarsOfCoDSettyCoVarsOfCoList tyCoFVsOfCo tyCoFVsOfCos coVarsOfType coVarsOfTypes coVarsOfCo coVarsOfCosalmostDevoidCoVarOfCoinjectiveVarsOfTypetyConAppNeedsKindSignoFreeVarsOfTypenoFreeVarsOfCoemptyTvSubstEnvemptyCvSubstEnvcomposeTCvSubstEnvcomposeTCvSubst emptyTCvSubstmkEmptyTCvSubstisEmptyTCvSubst mkTCvSubst mkTvSubst mkCvSubst getTvSubstEnv getCvSubstEnv getTCvInScopegetTCvSubstRangeFVs isInScopenotElemTCvSubst setTvSubstEnv setCvSubstEnv zapTCvSubstextendTCvInScopeextendTCvInScopeListextendTCvInScopeSetextendTCvSubstextendTCvSubstWithClone extendTvSubstextendTvSubstBinderAndInScopeextendTvSubstWithClone extendCvSubstextendCvSubstWithCloneextendTvSubstAndInScopeextendTvSubstListextendTCvSubstList unionTCvSubst zipTvSubst zipCvSubst zipTCvSubst mkTvSubstPrszipTyEnvzipCoEnv substTyWithsubstTyWithUncheckedsubstTyWithInScope substCoWithsubstCoWithUncheckedsubstTyWithCoVars substTysWithsubstTysWithCoVarssubstTyAddInScopeisValidTCvSubstcheckValidSubstsubstTysubstTyUncheckedsubstTyssubstTysUnchecked substThetasubstThetaUnchecked substTyVar substTyVars substTyCoVars lookupTyVarsubstCosubstCoUncheckedsubstCossubstForAllCoBndrsubstForAllCoBndrUsing substCoVar substCoVars lookupCoVarsubstTyVarBndrsubstTyVarBndrs substVarBndr substVarBndrssubstCoVarBndrsubstVarBndrUsingcloneTyVarBndrcloneTyVarBndrs pprParendType pprPrecType pprPrecTypeXpprTyLit pprParendKindpprCo pprParendCo pprClassPredpprThetapprParendThetapprThetaArrowTy pprSigmaType pprForAll pprUserForAll pprTCvBndrs pprTCvBndr pprTyVarspprTyVar debugPprType pprDataCons pprTypeApppprWithExplicitKindsWhen tidyVarBndrs tidyVarBndravoidNameClashestidyTyCoVarBindertidyTyCoVarBinderstidyFreeTyCoVarstidyOpenTyCoVarstidyOpenTyCoVartidyTyCoVarOcc tidyTypestidyType tidyOpenTypes tidyOpenType tidyTopType tidyOpenKindtidyKindtidyCotidyCostypeSize coercionSizeprovSize$fNamedThingTyThing$fOutputableTyThing$fOutputableTyLit$fOutputableCoercion$fOutputableType$fOutputableCoercionHole$fDataCoercionHole$fOutputableUnivCoProvenance$fOutputableMCoercion$fOutputableTyCoBinder$fOutputableTCvSubst $fEqTyLit $fOrdTyLit $fDataTyLit$fDataCoercion$fDataUnivCoProvenance$fDataMCoercion $fDataType$fDataTyCoBinder primTyConsunexposedPrimTyConsexposedPrimTyConscharPrimTyConNameintPrimTyConNameint8PrimTyConNameint16PrimTyConNameint32PrimTyConNameint64PrimTyConNamewordPrimTyConNameword8PrimTyConNameword16PrimTyConNameword32PrimTyConNameword64PrimTyConNameaddrPrimTyConNamefloatPrimTyConNamedoublePrimTyConNamemkTemplateKindVarsmkTemplateTyVarsFrommkTemplateTyVarsmkTemplateTyConBindersmkTemplateKiTyVarsmkTemplateKindTyConBindersmkTemplateAnonTyConBinders alphaTyVars alphaTyVar betaTyVar gammaTyVar deltaTyVaralphaTysalphaTybetaTygammaTydeltaTyalphaTyVarsUnliftedRepalphaTyVarUnliftedRepalphaTysUnliftedRepalphaTyUnliftedRepruntimeRep1TyVarruntimeRep2TyVar runtimeRep1Ty runtimeRep2TyopenAlphaTyVar openBetaTyVar openAlphaTy openBetaTy funTyConName tYPETyCon tYPETyConNamemkPrimTyConNametYPEprimRepToRuntimeRep charPrimTy charPrimTyCon intPrimTy intPrimTyCon int8PrimTy int8PrimTyCon int16PrimTyint16PrimTyCon int32PrimTyint32PrimTyCon int64PrimTyint64PrimTyCon wordPrimTy wordPrimTyCon word8PrimTyword8PrimTyCon word16PrimTyword16PrimTyCon word32PrimTyword32PrimTyCon word64PrimTyword64PrimTyCon addrPrimTy addrPrimTyCon floatPrimTyfloatPrimTyCon doublePrimTydoublePrimTyCon mkStatePrimTystatePrimTyConrealWorldTyCon realWorldTyrealWorldStatePrimTy voidPrimTy voidPrimTyCon mkProxyPrimTyproxyPrimTyCon eqPrimTyConeqReprPrimTyConeqPhantPrimTyConarrayPrimTyConmutableArrayPrimTyConmutableByteArrayPrimTyConbyteArrayPrimTyConarrayArrayPrimTyConmutableArrayArrayPrimTyConsmallArrayPrimTyConsmallMutableArrayPrimTyCon mkArrayPrimTybyteArrayPrimTymkArrayArrayPrimTymkSmallArrayPrimTymkMutableArrayPrimTymkMutableByteArrayPrimTymkMutableArrayArrayPrimTymkSmallMutableArrayPrimTymutVarPrimTyConmkMutVarPrimTy mVarPrimTyCon mkMVarPrimTy tVarPrimTyCon mkTVarPrimTystablePtrPrimTyConmkStablePtrPrimTystableNamePrimTyConmkStableNamePrimTycompactPrimTyCon compactPrimTy bcoPrimTy bcoPrimTyCon weakPrimTyCon mkWeakPrimTythreadIdPrimTythreadIdPrimTyCon int8X16PrimTyint8X16PrimTyCon int16X8PrimTyint16X8PrimTyCon int32X4PrimTyint32X4PrimTyCon int64X2PrimTyint64X2PrimTyCon int8X32PrimTyint8X32PrimTyConint16X16PrimTyint16X16PrimTyCon int32X8PrimTyint32X8PrimTyCon int64X4PrimTyint64X4PrimTyCon int8X64PrimTyint8X64PrimTyConint16X32PrimTyint16X32PrimTyConint32X16PrimTyint32X16PrimTyCon int64X8PrimTyint64X8PrimTyConword8X16PrimTyword8X16PrimTyConword16X8PrimTyword16X8PrimTyConword32X4PrimTyword32X4PrimTyConword64X2PrimTyword64X2PrimTyConword8X32PrimTyword8X32PrimTyConword16X16PrimTyword16X16PrimTyConword32X8PrimTyword32X8PrimTyConword64X4PrimTyword64X4PrimTyConword8X64PrimTyword8X64PrimTyConword16X32PrimTyword16X32PrimTyConword32X16PrimTyword32X16PrimTyConword64X8PrimTyword64X8PrimTyCon floatX4PrimTyfloatX4PrimTyCondoubleX2PrimTydoubleX2PrimTyCon floatX8PrimTyfloatX8PrimTyCondoubleX4PrimTydoubleX4PrimTyConfloatX16PrimTyfloatX16PrimTyCondoubleX8PrimTydoubleX8PrimTyConisConstraintKindCon isKindLevPolyclassifiesTypeWithValuesPredTree ClassPredEqPred IrredPred ForAllPredEqRelNomEqReprEq TyCoMapper tcm_smart tcm_tyvar tcm_covartcm_holetcm_tycobinder tcm_tyconexpandTypeSynonymsmapType mapCoerciongetTyVar isTyVarTygetTyVar_maybegetCastedTyVar_mayberepGetTyVar_maybemkAppTyssplitAppTy_mayberepSplitAppTy_maybetcRepSplitAppTy_maybetcRepSplitTyConApp_maybetcRepSplitTyConApp splitAppTy splitAppTysrepSplitAppTys mkNumLitTy isNumLitTy mkStrLitTy isStrLitTyisLitTyuserTypeError_maybepprUserTypeErrorTyisFunTy splitFunTysplitFunTy_maybe splitFunTys funResultTyfunArgTy piResultTys applyTysX mkTyConApptyConAppTyConPicky_maybetyConAppTyCon_maybe tyConAppTyContyConAppArgs_maybe tyConAppArgs tyConAppArgN splitTyConApprepSplitTyConApp_maybesplitListTyConApp_maybenextRolenewTyConInstRhssplitCastTy_maybetyConBindersTyCoBinders mkCoercionTyisCoercionTy_maybestripCoercionTymkTyCoInvForAllTy mkInvForAllTymkTyCoInvForAllTysmkInvForAllTysmkSpecForAllTysmkVisForAllTys mkLamType mkLamTypesmkTyConBindersPreferAnonsplitForAllTys isForAllTy isForAllTy_ty isForAllTy_coisPiTy splitForAllTy dropForAllssplitForAllTy_maybesplitForAllTy_ty_maybesplitForAllTy_co_maybesplitPiTy_maybe splitPiTy splitPiTyssplitForAllVarBndrsinvisibleTyBndrCountsplitPiTysInvisiblesplitPiTysInvisibleNfilterOutInvisibleTypesfilterOutInferredTypespartitionInvisibleTypespartitionInvisibles tyConArgFlags appTyArgFlagsisTauTy mkAnonBinderisAnonTyCoBindertyCoBinderVar_maybetyCoBinderType tyBinderTypebinderRelevantType_maybe caseBindertcSplitTyConApp_maybetcIsConstraintKindtcIsLiftedTypeKindtcReturnsConstraintKind isEvVarType isCoVarType isClassPredisEqPred isNomEqPredisIPPred isIPTyCon isIPClass isCTupleClassisIPPred_maybemkPrimEqPredRole mkPrimEqPredmkHeteroPrimEqPredmkHeteroReprPrimEqPredsplitCoercionType_maybemkReprPrimEqPred equalityTyCon mkClassPredisDictTy isDictLikeTy eqRelRoleclassifyPredTypegetClassPredTysgetClassPredTys_maybe getEqPredTysgetEqPredTys_maybe getEqPredRole predTypeEqReldVarSetElemsWellScopedtyCoVarsOfBindersWellScopedcloseOverKindscloseOverKindsFVcloseOverKindsListcloseOverKindsDSetmkFamilyTyConApp coAxNthLHSpprSourceTyCon isFamFreeTyisLiftedType_maybeisUnliftedTypeisRuntimeRepKindedTydropRuntimeRepArgsgetRuntimeRep_maybe getRuntimeRepisUnboxedTupleTypeisUnboxedSumType isAlgTypeisDataFamilyAppType isStrictTypeisPrimitiveTypeisValidJoinPointTypeseqTypeseqTypeseqTypeXeqTypes eqVarBndrs nonDetCmpTypenonDetCmpTypesnonDetCmpTypeXnonDetCmpTypesX nonDetCmpTctypeKind tcTypeKind isTypeLevPolyresultIsLevPolyoccCheckExpand tyConsOfTypesynTyConResKindsplitVisVarsOfTypesplitVisVarsOfTypesmodifyJoinResTy setJoinResTy pprWithTYPE$fOutputableEqRel $fEqEqRel $fOrdEqRel$fEqTypeOrdering$fOrdTypeOrdering$fEnumTypeOrdering$fBoundedTypeOrderingtyConIsTypeabletypeIsTypeablemkPatSyn patSynIsInfix patSynArgspatSynFieldLabelspatSynFieldTypepatSynUnivTyVarBinderspatSynExTyVarBinders patSynSig patSynMatcher patSynBuilderupdatePatSynIdspatSynInstResTy pprPatSynType $fDataPatSyn$fOutputableBndrPatSyn$fOutputablePatSyn$fNamedThingPatSyn$fUniquablePatSyn $fEqPatSyn LitNumType LitNumInteger LitNumNatural LitNumInt LitNumInt64 LitNumWord LitNumWord64LitChar LitNumber LitString LitNullAddr LitRubbishLitFloat LitDoubleLitLabellitNumIsSignedmkLitNumberWraplitNumCheckRange mkLitNumbermkLitInt mkLitIntWrap mkLitIntWrapC mkLitWord mkLitWordWrapmkLitWordWrapC mkLitInt64mkLitInt64Wrap mkLitWord64mkLitWord64Wrap mkLitFloat mkLitDouble mkLitChar mkLitString mkLitInteger mkLitNatural inIntRange inWordRange inCharRange isZeroLitlitValueisLitValue_maybe mapLitValue isLitValue word2IntLit int2WordLit narrowLit narrow8IntLitnarrow16IntLitnarrow32IntLitnarrow8WordLitnarrow16WordLitnarrow32WordLit char2IntLit int2CharLit float2IntLit int2FloatLit double2IntLit int2DoubleLitfloat2DoubleLitdouble2FloatLit nullAddrLit rubbishLit litIsTrivial litIsDupable litFitsInChar litIsLifted literalTypeabsentLiteralOf pprLiteral$fBinaryLitNumType $fOrdLiteral $fEqLiteral$fOutputableLiteral$fBinaryLiteral$fDataLitNumType$fEnumLitNumType$fEqLitNumType$fOrdLitNumType $fDataLiteralGenMap LiteralMapListMapMaybeMapKeyemptyTMlookupTMalterTMmapTMfoldTMXTinsertTMdeleteTM>.>|>|>>lkListxtList foldMaybelkGxtGmapGfdG$fTrieMapUniqDFM $fTrieMapMap$fTrieMapIntMap$fTrieMapMaybeMap$fOutputableListMap$fTrieMapListMap$fTrieMapGenMap$fOutputableGenMapFactBaseLabelMapLabelSetLabel mkHooplLabel lookupFact$fOutputableLabel$fUniquableLabel $fShowLabel$fOutputableLabelSet$fIsSetLabelSet$fTrieMapLabelMap$fOutputableLabelMap$fIsMapLabelMap $fEqLabel $fOrdLabel $fEqLabelSet $fOrdLabelSet$fShowLabelSet$fMonoidLabelSet$fSemigroupLabelSet $fEqLabelMap $fOrdLabelMap$fShowLabelMap$fFunctorLabelMap$fFoldableLabelMap$fTraversableLabelMapGraph'GNilGUnitGManyNonLocal entryLabel successorsBody emptyBodybodyListaddBlockmapGraphmapGraphBlocks labelsDefinedrevPostorderFrom$fNonLocalBlock SwitchPlanUnconditionallyIfEqualIfLT JumpTable SwitchTargetsmkSwitchTargetsmapSwitchTargetsswitchTargetsCasesswitchTargetsDefaultswitchTargetsRangeswitchTargetsSignedswitchTargetsToTableswitchTargetsToListswitchTargetsFallThrougheqSwitchTargetWithtargetSupportsSwitchcreateSwitchPlan$fShowSwitchTargets$fEqSwitchTargets$fShowSwitchPlan mkBlockId OverLitVal HsIntegral HsFractional HsIsString OverLitTc ol_rebindableol_type HsOverLitOverLitol_extol_val ol_witnessHsChar HsCharPrimHsString HsStringPrimHsInt HsIntPrim HsWordPrim HsInt64Prim HsWord64Prim HsIntegerHsRat HsFloatPrim HsDoublePrimXLitnegateOverLitVal overLitType convertLit pp_st_suffix pmPprHsLithsLitNeedsParenshsOverLitNeedsParens$fOutputableHsLit $fEqHsLit$fOutputableOverLitVal$fOrdOverLitVal$fEqOverLitVal$fOutputableHsOverLit$fOrdHsOverLit $fEqHsOverLit$fDataOverLitTc$fDataOverLitVal LiftCoEnvLCNormaliseStepResultNS_DoneNS_AbortNS_StepNormaliseStepper coVarNamesetCoVarUnique setCoVarNameetaExpandCoAxBranch pprCoAxiompprCoAxBranchUserpprCoAxBranchLHS pprCoAxBranchtidyCoAxBndrsForUser decomposeCodecomposeFunCogetCoVar_maybesplitTyConAppCo_maybesplitAppCo_maybesplitFunCo_maybesplitForAllCo_maybesplitForAllCo_ty_maybesplitForAllCo_co_maybe coVarTypes coVarKindmkHeteroCoercionTypeisReflCoVar_maybeisGReflCo_maybeisReflCo_maybeisReflexiveCo_maybe mkRepReflComkAppCos mkForAllCosmkHomoForAllCos mkCoVarCos isCoVar_maybe mkAxInstComkUnbranchedAxInstCo mkAxInstRHSmkUnbranchedAxInstRHS mkAxInstLHSmkUnbranchedAxInstLHSmkHoleCo mkTransMCo nthCoRolemkGReflRightCo mkGReflLeftComkCoherenceLeftComkCoherenceRightCo downgradeRole maybeSubCosetNominalRole_maybe tyConRolesXtyConRolesRepresentationalnthRoleltRolepromoteCoercioncastCoercionKindcastCoercionKindImkPiCosmkPiComkCoCastinstNewTyCon_maybe mapStepResultcomposeSteppersunwrapNewTypeSteppertopNormaliseTypeXtopNormaliseNewType_maybe eqCoercion eqCoercionXliftCoSubstWithExliftCoSubstWithemptyLiftingContextmkSubstLiftingContextextendLiftingContextextendLiftingContextAndInScopezapLiftingContextsubstForAllCoBndrUsingLCliftCoSubstTyVarliftCoSubstVarBndrUsing isMappedByLC substLeftCo substRightCo swapLiftCoEnv lcSubstLeft lcSubstRightliftEnvSubstLeftliftEnvSubstRight lcTCvSubst lcInScopeSet coercionKindscoercionKindRole coercionRole buildCoercionsimplifyArgsWorker$fOutputableLiftingContextBindFlagBindMeSkolem UnifyResultM Unifiable MaybeApart SurelyApart UnifyResult tcMatchTy tcMatchTyX_BM tcMatchTyKi tcMatchTyX tcMatchTys tcMatchTyKis tcMatchTysX tcMatchTyKisXruleMatchTyKiX roughMatchTcsinstanceCantMatchtypesCantMatch tcUnifyTy tcUnifyTyKitcUnifyTyWithTFs tcUnifyTys tcUnifyTyKis tcUnifyTysFG liftCoMatch$fOutputableUnifyResultM$fMonadPlusUnifyResultM$fAlternativeUnifyResultM$fMonadUnifyResultM$fApplicativeUnifyResultM $fMonadFailUM $fMonadPlusUM$fAlternativeUM $fMonadUM$fApplicativeUM $fFunctorUM$fFunctorUnifyResultM $fEqBindFlagStrictnessMark MarkedStrictNotMarkedStrictSrcUnpackedness SrcUnpack SrcNoUnpack NoSrcUnpack SrcStrictnessSrcLazy SrcStrict NoSrcStrict HsImplBangHsLazyHsStrictHsUnpack HsSrcBang NoDataConRepDCR dcr_wrap_id dcr_boxer dcr_arg_tys dcr_stricts dcr_bangsmkEqSpec eqSpecTyVar eqSpecType eqSpecPair eqSpecPreds substEqSpec filterEqSpeceqHsBangisBanged isSrcStrict isSrcUnpackedisMarkedStrict mkDataCon dataConTag dataConTagZdataConOrigTyCondataConRepTypedataConIsInfixdataConUnivTyVarsdataConUnivAndExTyCoVars dataConEqSpec dataConTheta dataConWorkIddataConWrapId_maybe dataConWrapIddataConImplicitTyThingsdataConFieldTypedataConFieldType_maybedataConSrcBangsdataConRepArityisNullarySrcDataConisNullaryRepDataCondataConRepStrictnessdataConImplBangs dataConBoxer dataConSigdataConInstSigdataConOrigResTydataConUserTypedataConInstArgTysdataConOrigArgTysdataConRepArgTysdataConIdentityisTupleDataConisUnboxedTupleConisVanillaDataConspecialPromotedDc classDataCondataConCannotMatchdataConUserTyVarsArePermutedpromoteDataConsplitDataProductType_maybe buildAlgTyCon buildSynTyCon$fOutputableHsImplBang$fBinarySrcStrictness$fOutputableSrcStrictness$fBinarySrcUnpackedness$fOutputableSrcUnpackedness$fOutputableHsSrcBang$fOutputableStrictnessMark$fOutputableEqSpec $fDataDataCon$fOutputableBndrDataCon$fOutputableDataCon$fNamedThingDataCon$fUniquableDataCon $fEqDataCon$fDataHsImplBang$fEqSrcStrictness$fDataSrcStrictness$fEqSrcUnpackedness$fDataSrcUnpackedness$fDataHsSrcBangSlotTyPtrSlotWordSlot Word64Slot FloatSlot DoubleSlot UnaryType NvUnaryType isNvUnaryTypetypePrimRepArgs unwrapTypecountFunRepArgscountConRepArgsisVoidTy ubxSumRepType layoutUbxSum typeSlotTy primRepSlot slotPrimRep typePrimRep typePrimRep1 tyConPrimRep tyConPrimRep1runtimeRepPrimRep primRepToType$fOutputableSlotTy $fEqSlotTy $fOrdSlotTy StrictSigDmdShell BothDmdArgDmdTypeDmdEnv CPRResult DmdResult TypeShapeTsFunTsProdTsUnk CleanDemandCountUseDmdUCallUProdUHeadUsedStrDmd getStrDmd getUseDmd peelUseCalladdCaseBndrDmduseCount bothCleanDmd mkHeadStrict mkOnceUsedDmd mkManyUsedDmdevalDmd mkProdDmd mkCallDmdmkWorkerDemand cleanEvalDmdcleanEvalProdDmdlubDmdbothDmdstrictApply1Dmd catchArgDmd lazyApply1Dmd lazyApply2DmdabsDmdtopDmdbotDmdseqDmd oneifyDmdisTopDmdisAbsDmdisSeqDmd isUsedOnce seqDemand seqDemandList isStrictDmdcleanUseDmd_maybesplitFVs trimToTypesplitProdDmd_maybetopResexnResbotRes cprSumRes cprProdResvanillaCprProdResisTopResisBotRes trimCPRInforeturnsCPR_maybe lubDmdType mkBothDmdArg toBothDmdArg bothDmdType emptyDmdEnv nopDmdType botDmdType mkDmdType dmdTypeDepthremoveDmdTyArgs seqDmdType splitDmdTy deferAfterIO strictenDmd toCleanDmdpostProcessDmdTypereuseEnvpostProcessUnsat peelCallDmd peelManyCallspeelFV addDemand findIdDemandpprIfaceStrictSig mkStrictSigmkClosedStrictSigsplitStrictSigincreaseStrictSigArityetaExpandStrictSigisTopSighasDemandEnvSigstrictSigDmdEnvisBottomingSignopSigbotSigexnSig cprProdSig seqStrictSigdmdTransformSigdmdTransformDataConSigdmdTransformDictSelSig argsOneShotssaturatedByOneShots argOneShots appIsBottomzapUsageEnvSigzapUsageDemandzapUsedOnceDemandzapUsedOnceSigkillUsageDemand killUsageSigstrictifyDictDmd strictifyDmd$fBinaryJointDmd$fOutputableJointDmd$fBinaryExnStr $fBinaryStr$fBinaryStrDmd$fOutputableStr$fOutputableStrDmd $fBinaryCount$fOutputableCount$fBinaryUseDmd $fBinaryUse$fOutputableUseDmd$fOutputableUse$fOutputableTypeShape$fOutputableTermination$fBinaryCPRResult$fOutputableCPRResult$fBinaryTermination$fBinaryDmdType$fOutputableDmdType $fEqDmdType$fBinaryStrictSig$fOutputableStrictSig $fEqJointDmd$fShowJointDmd $fEqExnStr $fShowExnStr$fEqStr $fShowStr $fEqStrDmd $fShowStrDmd $fEqCount $fShowCount$fEqUse $fShowUse $fEqUseDmd $fShowUseDmd$fEqTermination$fShowTermination $fEqCPRResult$fShowCPRResult $fEqStrictSig conLikeArityconLikeFieldLabelsconLikeInstOrigArgTysconLikeExTyCoVarsconLikeStupidThetaconLikeWrapId_maybeconLikeImplBangs conLikeResTyconLikeFullSigconLikeFieldTypeconLikesWithFieldsconLikeIsInfix $fDataConLike$fOutputableBndrConLike$fOutputableConLike$fNamedThingConLike$fUniquableConLike $fEqConLikeAnnBind AnnNonRecAnnAltAnnExpr'AnnVarAnnLitAnnAppAnnCastAnnTick AnnCoercionAnnExpr TaggedAlt TaggedArg TaggedExpr TaggedBind TaggedBndrTBCoreAltCoreBindCoreArgCoreExprCoreBndr CoreProgramUnfoldingGuidanceUnfWhen UnfIfGoodArgsUnfNeverug_arity ug_unsat_ok ug_boring_okug_argsug_sizeug_resUnfoldingSource InlineRhs InlineStableInlineCompulsory Unfolding NoUnfolding BootUnfoldingOtherCon DFunUnfolding CoreUnfoldingdf_bndrsdf_condf_argsuf_tmpluf_src uf_is_top uf_is_value uf_is_conlikeuf_is_work_free uf_expandable uf_guidanceIdUnfoldingFun InScopeEnvRuleFunCoreRuleRule BuiltinRuleru_nameru_actru_fnru_roughru_bndrsru_argsru_rhsru_auto ru_origin ru_orphanru_localru_nargsru_tryRuleEnvre_basere_visible_orphsRuleBaseIsOrphan NotOrphanTickishPlacement PlaceRuntime PlaceNonLamPlaceCostCentreTickishScoping SoftScopeCostCentreScopeTickishProfNoteHpcTick Breakpoint SourceNote profNoteCC profNoteCount profNoteScope tickModuletickId breakpointId breakpointFVs sourceSpan sourceName MOutCoercionOutArgOutAltOutExprOutBind OutCoercionOutKindOutTypeOutBndr InCoercionInArgInAltInExprInBindInKindInTypeInBndrBindNonRecRecAltConDataAltLitAltDEFAULTAltArgExprLitAppLamLetCaseCastTick tickishCounts tickishScopedtickishScopesLiketickishFloatabletickishCanSplit mkNoCount mkNoScope tickishIsCode tickishPlacetickishContainsisOrphan notOrphanchooseOrphanAnchor mkRuleEnv emptyRuleEnv isBuiltinRule isAutoRule ruleArityruleName ruleModuleruleActivation ruleIdName isLocalRule setRuleIdName needSaturated unSaturatedOk boringCxtOkboringCxtNotOk noUnfoldingevaldUnfolding bootUnfolding mkOtherConisStableSourceunfoldingTemplatemaybeUnfoldingTemplate otherConsisValueUnfoldingisEvaldUnfoldingisConLikeUnfoldingisCheapUnfoldingisExpandableUnfoldingexpandUnfolding_maybeisCompulsoryUnfoldingisStableUnfoldinghasSomeUnfoldingisBootUnfoldingneverUnfoldGuidanceisFragileUnfolding canUnfoldcmpAltltAlt cmpAltCon deTagExprmkAppsmkCoApps mkVarAppsmkConAppmkTyApps mkConApp2mkTyArgmkIntLit mkIntLitInt mkWordLit mkWordLitWordmkWord64LitWord64mkInt64LitInt64 mkCharLit mkStringLit mkFloatLitmkFloatLitFloat mkDoubleLitmkDoubleLitDoublemkLamsmkLetsmkLet mkLetNonRecmkLetRecmkTyBindmkCoBind varToCoreExprvarsToCoreExprsapplyTypeToArg exprToTypeexprToCoercion_maybe bindersOfbindersOfBinds rhssOfBind rhssOfAlts flattenBindscollectBinderscollectTyBinderscollectTyAndValBinderscollectNBinders collectArgs stripNArgscollectArgsTicks isRuntimeVar isRuntimeArgisValArg isTyCoArgisCoArg isTypeArg valBndrCount valArgCountcollectAnnArgscollectAnnArgsTicks deAnnotate deAnnotate'deAnnAlt deAnnBindcollectAnnBndrscollectNAnnBndrs$fOutputableAltCon $fOrdAltCon$fBinaryIsOrphan$fOutputableTaggedBndr $fEqAltCon $fDataAltCon $fEqTickish $fOrdTickish $fDataTickish $fDataExpr $fDataBind$fEqTickishScoping$fEqTickishPlacement$fDataIsOrphan$fEqUnfoldingGuidance LevityInfo TickBoxOpTickBox TickBoxIdCafInfoMayHaveCafRefs NoCafRefsRuleInfoInlinePragInfo ArityInfo arityInforuleInfo unfoldingInfocafInfo oneShotInfoinlinePragInfooccInfostrictnessInfo demandInfo callArityInfo levityInfo RecSelParent RecSelData RecSelPatSyn VanillaIdRecSelId DataConWorkId DataConWrapId ClassOpIdPrimOpIdFCallId TickBoxOpIdCoVarId sel_tycon sel_naughtyisJoinIdDetails_maybe setRuleInfosetInlinePragInfo setOccInfosetUnfoldingInfo setArityInfosetCallArityInfo setCafInfosetOneShotInfo setDemandInfosetStrictnessInfo noCafIdInfo unknownArity ppArityInfo pprStrictness emptyRuleInfoisEmptyRuleInforuleInfoFreeVars ruleInfoRulessetRuleInfoHeadmayHaveCafRefs ppCafInfo zapLamInfo zapDemandInfo zapUsageInfozapUsageEnvInfozapUsedOnceInfozapFragileInfo zapUnfoldingzapTailCallInfozapCallArityInfosetNeverLevPolysetLevityInfoWithTypeisNeverLevPolyIdInfo$fOutputableRecSelParent$fOutputableCafInfo$fOutputableTickBoxOp$fOutputableIdDetails$fOutputableLevityInfo$fEqRecSelParent $fEqCafInfo $fOrdCafInfo$fEqLevityInfoidNameidUniqueidType setIdName setIdUnique setIdType localiseId setIdInfo modifyIdInfomaybeModifyIdInfo mkGlobalIdmkVanillaGlobalmkVanillaGlobalWithInfo mkLocalId mkLocalCoVarmkLocalIdOrCoVarmkLocalIdOrCoVarWithInfomkLocalIdWithInfomkExportedLocalIdmkExportedVanillaId mkSysLocalmkSysLocalOrCoVar mkSysLocalMmkSysLocalOrCoVarM mkUserLocalmkUserLocalOrCoVar mkWorkerIdmkTemplateLocalmkTemplateLocalsmkTemplateLocalsNumrecordSelectorTyConisRecordSelectorisDataConRecordSelectorisPatSynRecordSelectorisNaughtyRecordSelectorisClassOpId_maybe isPrimOpIdisDFunIdisPrimOpId_maybe isFCallIdisFCallId_maybeisDataConWorkIdisDataConWorkId_maybeisDataConId_maybeisJoinIdisJoinId_maybe idDataCon hasNoBinding isImplicitIdidIsFrom isDeadBinderisEvVarisDictId idJoinArityasJoinId zapJoinIdasJoinId_maybeidArity setIdArity idCallAritysetIdCallArity idFunRepArity isBottomingId idStrictnesssetIdStrictnesszapIdStrictness isStrictId idUnfoldingrealIdUnfoldingsetIdUnfolding idDemandInfosetIdDemandInfosetCaseBndrEvaldidSpecialisation idCoreRules idHasRulessetIdSpecialisation idCafInfo setIdCafInfo idOccInfo setIdOccInfo zapIdOccInfoidInlinePragmasetInlinePragmamodifyInlinePragmaidInlineActivationsetInlineActivationidRuleMatchInfo isConLikeId idOneShotInfoidStateHackOneShotInfo isOneShotBndrstateHackOneShot typeOneShotisStateHackTypeisProbablyOneShotLambdasetOneShotLambdaclearOneShotLambdasetIdOneShotInfoupdOneShotInfo zapLamIdInfozapFragileIdInfozapIdDemandInfozapIdUsageInfozapIdUsageEnvInfozapIdUsedOnceInfozapIdTailCallInfozapStableUnfoldingtransferPolyIdInfoisNeverLevPolyIdUnVarSet emptyUnVarSet elemUnVarSetisEmptyUnVarSet delUnVarSet mkUnVarSet varEnvDom unionUnVarSetunionUnVarSetsemptyUnVarGraphunionUnVarGraphunionUnVarGraphscompleteBipartiteGraph completeGraph neighbors hasLoopAt$fOutputableUnVarSet$fOutputableGen$fOutputableUnVarGraph $fEqUnVarSet wiredInTyConsmkWiredInTyConNamemkWiredInIdName eqTyConName eqTyCon_RDR heqTyConNamecoercibleTyConName charTyConName intTyConName boolTyConName listTyConNamenilDataConNameconsDataConNamemaybeTyConNamenothingDataConNamejustDataConName wordTyConNameword8TyConNamefloatTyConNamedoubleTyConNameanyTyConanyTyliftedTypeKindTyConName boolTyCon_RDR false_RDRtrue_RDR intTyCon_RDR charTyCon_RDRintDataCon_RDR listTyCon_RDRconsDataCon_RDRtypeNatKindContypeSymbolKindConconstraintKindTyConisBuiltInOcc_maybecTupleTyConNamecTupleTyConNamesisCTupleTyConNamecTupleTyConNameArity_maybecTupleDataConNamecTupleDataConNames tupleTyContupleTyConNamepromotedTupleDataCon tupleDataCon unitTyCon unitTyConKey unitDataCon unitDataConId pairTyConunboxedUnitTyConunboxedUnitDataConsumTyCon sumDataConunboxedSumKindeqTyConeqClass eqDataConheqClass heqDataConcoercibleClasscoercibleDataConliftedTypeKindTyConsumRepDataConTyConliftedRepDataCon liftedRepTyboxingDataCon_maybecharTy charTyCon charDataConstringTyintTyintTyCon intDataConwordTy wordTyCon wordDataConword8Ty word8TyCon word8DataConfloatTy floatTyCon floatDataCondoubleTy doubleTyCon doubleDataConboolTy boolTyCon falseDataCon trueDataConfalseDataConId trueDataConId orderingTyCon ordLTDataCon ordEQDataCon ordGTDataConordLTDataConIdordEQDataConIdordGTDataConIdmkListTy nilDataCon consDataCon maybeTyConnothingDataCon justDataCon mkTupleTymkSumTypromotedTrueDataConpromotedFalseDataConpromotedNothingDataConpromotedJustDataConpromotedLTDataConpromotedEQDataConpromotedGTDataConpromotedConsDataConpromotedNilDataConnsUniqsnsNames OrigNameCachelookupOrigNameCacheextendOrigNameCacheextendNameCache initNameCache IdSubstEnv emptySubst mkEmptySubst substBndr substBndrs lookupIdSubstnoWarnLookupIdSubst extendInScope extendSubstPrimCallPrimOpResultInfo ReturnsPrim ReturnsAlg PrimOpVecCatIntVecWordVecFloatVecCharGtOpCharGeOpCharEqOpCharNeOpCharLtOpCharLeOpOrdOpIntAddOpIntSubOpIntMulOpIntMulMayOfloOp IntQuotOpIntRemOp IntQuotRemOpAndIOpOrIOpXorIOpNotIOpIntNegOp IntAddCOp IntSubCOpIntGtOpIntGeOpIntEqOpIntNeOpIntLtOpIntLeOpChrOp Int2WordOp Int2FloatOp Int2DoubleOp Word2FloatOp Word2DoubleOpISllOpISraOpISrlOp Int8Extend Int8Narrow Int8NegOp Int8AddOp Int8SubOp Int8MulOp Int8QuotOp Int8RemOp Int8QuotRemOpInt8EqOpInt8GeOpInt8GtOpInt8LeOpInt8LtOpInt8NeOp Word8Extend Word8Narrow Word8NotOp Word8AddOp Word8SubOp Word8MulOp Word8QuotOp Word8RemOpWord8QuotRemOp Word8EqOp Word8GeOp Word8GtOp Word8LeOp Word8LtOp Word8NeOp Int16Extend Int16Narrow Int16NegOp Int16AddOp Int16SubOp Int16MulOp Int16QuotOp Int16RemOpInt16QuotRemOp Int16EqOp Int16GeOp Int16GtOp Int16LeOp Int16LtOp Int16NeOp Word16Extend Word16Narrow Word16NotOp Word16AddOp Word16SubOp Word16MulOp Word16QuotOp Word16RemOpWord16QuotRemOp Word16EqOp Word16GeOp Word16GtOp Word16LeOp Word16LtOp Word16NeOp WordAddOp WordAddCOp WordSubCOp WordAdd2Op WordSubOp WordMulOp WordMul2Op WordQuotOp WordRemOp WordQuotRemOpWordQuotRem2OpAndOpOrOpXorOpNotOpSllOpSrlOp Word2IntOpWordGtOpWordGeOpWordEqOpWordNeOpWordLtOpWordLeOp PopCnt8Op PopCnt16Op PopCnt32Op PopCnt64OpPopCntOpPdep8OpPdep16OpPdep32OpPdep64OpPdepOpPext8OpPext16OpPext32OpPext64OpPextOpClz8OpClz16OpClz32OpClz64OpClzOpCtz8OpCtz16OpCtz32OpCtz64OpCtzOp BSwap16Op BSwap32Op BSwap64OpBSwapOp Narrow8IntOp Narrow16IntOp Narrow32IntOp Narrow8WordOpNarrow16WordOpNarrow32WordOp DoubleGtOp DoubleGeOp DoubleEqOp DoubleNeOp DoubleLtOp DoubleLeOp DoubleAddOp DoubleSubOp DoubleMulOp DoubleDivOp DoubleNegOp DoubleFabsOp Double2IntOpDouble2FloatOp DoubleExpOp DoubleLogOp DoubleSqrtOp DoubleSinOp DoubleCosOp DoubleTanOp DoubleAsinOp DoubleAcosOp DoubleAtanOp DoubleSinhOp DoubleCoshOp DoubleTanhOp DoubleAsinhOp DoubleAcoshOp DoubleAtanhOp DoublePowerOpDoubleDecode_2IntOpDoubleDecode_Int64Op FloatGtOp FloatGeOp FloatEqOp FloatNeOp FloatLtOp FloatLeOp FloatAddOp FloatSubOp FloatMulOp FloatDivOp FloatNegOp FloatFabsOp Float2IntOp FloatExpOp FloatLogOp FloatSqrtOp FloatSinOp FloatCosOp FloatTanOp FloatAsinOp FloatAcosOp FloatAtanOp FloatSinhOp FloatCoshOp FloatTanhOp FloatAsinhOp FloatAcoshOp FloatAtanhOp FloatPowerOpFloat2DoubleOpFloatDecode_IntOp NewArrayOpSameMutableArrayOp ReadArrayOp WriteArrayOp SizeofArrayOpSizeofMutableArrayOp IndexArrayOpUnsafeFreezeArrayOpUnsafeThawArrayOp CopyArrayOpCopyMutableArrayOp CloneArrayOpCloneMutableArrayOp FreezeArrayOp ThawArrayOp CasArrayOpNewSmallArrayOpSameSmallMutableArrayOpReadSmallArrayOpWriteSmallArrayOpSizeofSmallArrayOpSizeofSmallMutableArrayOpIndexSmallArrayOpUnsafeFreezeSmallArrayOpUnsafeThawSmallArrayOpCopySmallArrayOpCopySmallMutableArrayOpCloneSmallArrayOpCloneSmallMutableArrayOpFreezeSmallArrayOpThawSmallArrayOpCasSmallArrayOpNewByteArrayOp_CharNewPinnedByteArrayOp_Char NewAlignedPinnedByteArrayOp_CharMutableByteArrayIsPinnedOpByteArrayIsPinnedOpByteArrayContents_CharSameMutableByteArrayOpShrinkMutableByteArrayOp_CharResizeMutableByteArrayOp_CharUnsafeFreezeByteArrayOpSizeofByteArrayOpSizeofMutableByteArrayOpGetSizeofMutableByteArrayOpIndexByteArrayOp_CharIndexByteArrayOp_WideCharIndexByteArrayOp_IntIndexByteArrayOp_WordIndexByteArrayOp_AddrIndexByteArrayOp_FloatIndexByteArrayOp_DoubleIndexByteArrayOp_StablePtrIndexByteArrayOp_Int8IndexByteArrayOp_Int16IndexByteArrayOp_Int32IndexByteArrayOp_Int64IndexByteArrayOp_Word8IndexByteArrayOp_Word16IndexByteArrayOp_Word32IndexByteArrayOp_Word64IndexByteArrayOp_Word8AsChar IndexByteArrayOp_Word8AsWideCharIndexByteArrayOp_Word8AsAddrIndexByteArrayOp_Word8AsFloatIndexByteArrayOp_Word8AsDouble!IndexByteArrayOp_Word8AsStablePtrIndexByteArrayOp_Word8AsInt16IndexByteArrayOp_Word8AsInt32IndexByteArrayOp_Word8AsInt64IndexByteArrayOp_Word8AsIntIndexByteArrayOp_Word8AsWord16IndexByteArrayOp_Word8AsWord32IndexByteArrayOp_Word8AsWord64IndexByteArrayOp_Word8AsWordReadByteArrayOp_CharReadByteArrayOp_WideCharReadByteArrayOp_IntReadByteArrayOp_WordReadByteArrayOp_AddrReadByteArrayOp_FloatReadByteArrayOp_DoubleReadByteArrayOp_StablePtrReadByteArrayOp_Int8ReadByteArrayOp_Int16ReadByteArrayOp_Int32ReadByteArrayOp_Int64ReadByteArrayOp_Word8ReadByteArrayOp_Word16ReadByteArrayOp_Word32ReadByteArrayOp_Word64ReadByteArrayOp_Word8AsCharReadByteArrayOp_Word8AsWideCharReadByteArrayOp_Word8AsAddrReadByteArrayOp_Word8AsFloatReadByteArrayOp_Word8AsDouble ReadByteArrayOp_Word8AsStablePtrReadByteArrayOp_Word8AsInt16ReadByteArrayOp_Word8AsInt32ReadByteArrayOp_Word8AsInt64ReadByteArrayOp_Word8AsIntReadByteArrayOp_Word8AsWord16ReadByteArrayOp_Word8AsWord32ReadByteArrayOp_Word8AsWord64ReadByteArrayOp_Word8AsWordWriteByteArrayOp_CharWriteByteArrayOp_WideCharWriteByteArrayOp_IntWriteByteArrayOp_WordWriteByteArrayOp_AddrWriteByteArrayOp_FloatWriteByteArrayOp_DoubleWriteByteArrayOp_StablePtrWriteByteArrayOp_Int8WriteByteArrayOp_Int16WriteByteArrayOp_Int32WriteByteArrayOp_Int64WriteByteArrayOp_Word8WriteByteArrayOp_Word16WriteByteArrayOp_Word32WriteByteArrayOp_Word64WriteByteArrayOp_Word8AsChar WriteByteArrayOp_Word8AsWideCharWriteByteArrayOp_Word8AsAddrWriteByteArrayOp_Word8AsFloatWriteByteArrayOp_Word8AsDouble!WriteByteArrayOp_Word8AsStablePtrWriteByteArrayOp_Word8AsInt16WriteByteArrayOp_Word8AsInt32WriteByteArrayOp_Word8AsInt64WriteByteArrayOp_Word8AsIntWriteByteArrayOp_Word8AsWord16WriteByteArrayOp_Word8AsWord32WriteByteArrayOp_Word8AsWord64WriteByteArrayOp_Word8AsWordCompareByteArraysOpCopyByteArrayOpCopyMutableByteArrayOpCopyByteArrayToAddrOpCopyMutableByteArrayToAddrOpCopyAddrToByteArrayOpSetByteArrayOpAtomicReadByteArrayOp_IntAtomicWriteByteArrayOp_IntCasByteArrayOp_IntFetchAddByteArrayOp_IntFetchSubByteArrayOp_IntFetchAndByteArrayOp_IntFetchNandByteArrayOp_IntFetchOrByteArrayOp_IntFetchXorByteArrayOp_IntNewArrayArrayOpSameMutableArrayArrayOpUnsafeFreezeArrayArrayOpSizeofArrayArrayOpSizeofMutableArrayArrayOpIndexArrayArrayOp_ByteArrayIndexArrayArrayOp_ArrayArrayReadArrayArrayOp_ByteArray!ReadArrayArrayOp_MutableByteArrayReadArrayArrayOp_ArrayArray"ReadArrayArrayOp_MutableArrayArrayWriteArrayArrayOp_ByteArray"WriteArrayArrayOp_MutableByteArrayWriteArrayArrayOp_ArrayArray#WriteArrayArrayOp_MutableArrayArrayCopyArrayArrayOpCopyMutableArrayArrayOp AddrAddOp AddrSubOp AddrRemOp Addr2IntOp Int2AddrOpAddrGtOpAddrGeOpAddrEqOpAddrNeOpAddrLtOpAddrLeOpIndexOffAddrOp_CharIndexOffAddrOp_WideCharIndexOffAddrOp_IntIndexOffAddrOp_WordIndexOffAddrOp_AddrIndexOffAddrOp_FloatIndexOffAddrOp_DoubleIndexOffAddrOp_StablePtrIndexOffAddrOp_Int8IndexOffAddrOp_Int16IndexOffAddrOp_Int32IndexOffAddrOp_Int64IndexOffAddrOp_Word8IndexOffAddrOp_Word16IndexOffAddrOp_Word32IndexOffAddrOp_Word64ReadOffAddrOp_CharReadOffAddrOp_WideCharReadOffAddrOp_IntReadOffAddrOp_WordReadOffAddrOp_AddrReadOffAddrOp_FloatReadOffAddrOp_DoubleReadOffAddrOp_StablePtrReadOffAddrOp_Int8ReadOffAddrOp_Int16ReadOffAddrOp_Int32ReadOffAddrOp_Int64ReadOffAddrOp_Word8ReadOffAddrOp_Word16ReadOffAddrOp_Word32ReadOffAddrOp_Word64WriteOffAddrOp_CharWriteOffAddrOp_WideCharWriteOffAddrOp_IntWriteOffAddrOp_WordWriteOffAddrOp_AddrWriteOffAddrOp_FloatWriteOffAddrOp_DoubleWriteOffAddrOp_StablePtrWriteOffAddrOp_Int8WriteOffAddrOp_Int16WriteOffAddrOp_Int32WriteOffAddrOp_Int64WriteOffAddrOp_Word8WriteOffAddrOp_Word16WriteOffAddrOp_Word32WriteOffAddrOp_Word64 NewMutVarOp ReadMutVarOp WriteMutVarOp SameMutVarOpAtomicModifyMutVar2OpAtomicModifyMutVar_Op CasMutVarOpCatchOpRaiseOp RaiseIOOpMaskAsyncExceptionsOpMaskUninterruptibleOpUnmaskAsyncExceptionsOp MaskStatus AtomicallyOpRetryOp CatchRetryOp CatchSTMOp NewTVarOp ReadTVarOp ReadTVarIOOp WriteTVarOp SameTVarOp NewMVarOp TakeMVarOp TryTakeMVarOp PutMVarOp TryPutMVarOp ReadMVarOp TryReadMVarOp SameMVarOp IsEmptyMVarOpDelayOp WaitReadOp WaitWriteOpForkOpForkOnOp KillThreadOpYieldOp MyThreadIdOp LabelThreadOpIsCurrentThreadBoundOp NoDuplicateOpThreadStatusOpMkWeakOpMkWeakNoFinalizerOpAddCFinalizerToWeakOp DeRefWeakOpFinalizeWeakOpTouchOpMakeStablePtrOpDeRefStablePtrOp EqStablePtrOpMakeStableNameOpEqStableNameOpStableNameToIntOp CompactNewOpCompactResizeOpCompactContainsOpCompactContainsAnyOpCompactGetFirstBlockOpCompactGetNextBlockOpCompactAllocateBlockOpCompactFixupPointersOp CompactAddCompactAddWithSharing CompactSizeReallyUnsafePtrEqualityOpParOpSparkOpSeqOp GetSparkOp NumSparks DataToTagOp TagToEnumOp AddrToAnyOp AnyToAddrOp MkApUpd0_OpNewBCOOpUnpackClosureOpGetApStackValOp GetCCSOfOpGetCurrentCCSOp ClearCCSOp TraceEventOpTraceEventBinaryOp TraceMarkerOpGetThreadAllocationCounterSetThreadAllocationCounterVecBroadcastOp VecPackOp VecUnpackOp VecInsertOpVecAddOpVecSubOpVecMulOpVecDivOp VecQuotOpVecRemOpVecNegOpVecIndexByteArrayOpVecReadByteArrayOpVecWriteByteArrayOpVecIndexOffAddrOpVecReadOffAddrOpVecWriteOffAddrOpVecIndexScalarByteArrayOpVecReadScalarByteArrayOpVecWriteScalarByteArrayOpVecIndexScalarOffAddrOpVecReadScalarOffAddrOpVecWriteScalarOffAddrOpPrefetchByteArrayOp3PrefetchMutableByteArrayOp3PrefetchAddrOp3PrefetchValueOp3PrefetchByteArrayOp2PrefetchMutableByteArrayOp2PrefetchAddrOp2PrefetchValueOp2PrefetchByteArrayOp1PrefetchMutableByteArrayOp1PrefetchAddrOp1PrefetchValueOp1PrefetchByteArrayOp0PrefetchMutableByteArrayOp0PrefetchAddrOp0PrefetchValueOp0 maxPrimOpTag primOpTag allThePrimOps tagToEnumKey primOpFixityprimOpOutOfLineprimOpOkForSpeculationprimOpOkForSideEffects primOpIsCheapprimOpCodeSize primOpType primOpOccprimOpWrapperIdisComparisonPrimOp primOpSiggetPrimOpResultInfo$fOutputablePrimOp $fOrdPrimOp $fEqPrimOp$fOutputablePrimCallHistoryhistoryApStackhistoryBreakInfohistoryEnclosingDeclsResume resumeStmt resumeContextresumeBindingsresumeFinalIds resumeApStackresumeBreakInfo resumeSpan resumeDecl resumeCCS resumeHistoryresumeHistoryIx BreakInfobreakInfo_modulebreakInfo_number ExecResult ExecComplete ExecBreak execResultexecAllocation breakNames breakInfo SingleStepRunToCompletionRunAndLogSteps ExecOptionsexecSingleStepexecSourceFileexecLineNumberexecWrapisStepAmbiguousFieldOcc Unambiguous AmbiguousXAmbiguousFieldOccFieldOcc XFieldOcc extFieldOccrdrNameFieldOcc LFieldOcc LHsTypeArgHsArgHsValArg HsTypeArgHsArgPar HsConDetails PrefixConRecConInfixCon ConDeclField cd_fld_ext cd_fld_names cd_fld_type cd_fld_doc LConDeclField HsTupleSortHsUnboxedTuple HsBoxedTupleHsConstraintTupleHsBoxedOrConstraintTupleHsTyLitHsNumTyHsStrTy NewHsTypeX NHsCoreTyHsType HsForAllTyHsQualTyHsTyVarHsAppTy HsAppKindTyHsFunTyHsListTy HsTupleTyHsSumTyHsOpTyHsParTy HsIParamTyHsStarTy HsKindSig HsSpliceTyHsDocTyHsBangTyHsRecTyHsExplicitListTyHsExplicitTupleTy HsWildCardTyXHsType hst_xforall hst_bndrshst_body hst_xqualhst_ctxt HsTyVarBndr UserTyVar KindedTyVar XTyVarBndrHsIPName LHsSigWcType LHsWcType LHsSigTypeHsWildCardBndrsHsWCXHsWildCardBndrshswc_ext hswc_bodyHsImplicitBndrsHsIBXHsImplicitBndrshsib_ext hsib_bodyHsQTvsRn hsq_implicit hsq_dependent LHsQTyVarsHsQTvs XLHsQTyVarshsq_ext hsq_explicit LHsTyVarBndrLHsKindHsKindLHsType HsContext LHsContextBangType LBangType getBangTypegetBangStrictness noLHsContextmkHsQTvs hsQTvExplicit emptyLHsQTvsisEmptyLHsQTvshsImplicitBody hsSigType hsSigWcType dropWildCardsmkHsImplicitBndrsmkHsWildCardBndrsmkEmptyImplicitBndrsmkEmptyWildCardBndrs hsIPNameFSisHsKindedTyVarhsTvbAllKinded hsWcScopedTvs hsScopedTvs hsTyVarName hsLTyVarNamehsExplicitLTyVarNameshsAllLTyVarNameshsLTyVarLocNamehsLTyVarLocNameshsLTyVarBndrToTypehsLTyVarBndrsToTypes ignoreParens isLHsForAllTymkAnonWildCardTymkHsOpTy mkHsAppTy mkHsAppTys mkHsAppKindTysplitHsFunTypehsTyGetAppHead_maybenumVisibleArgs splitHsAppTyssplitLHsPatSynTysplitLHsSigmaTysplitLHsForAllTysplitLHsQualTysplitLHsInstDeclTygetLHsInstDeclHeadgetLHsInstDeclClass_maybe mkFieldOccmkAmbiguousFieldOccrdrNameAmbiguousFieldOccselectorAmbiguousFieldOccunambiguousFieldOccambiguousFieldOccpprAnonWildCard pprHsForAllpprHsForAllExtrapprHsExplicitForAll pprLHsContextpprConDeclFields pprHsTypehsTypeNeedsParensparenthesizeHsTypeparenthesizeHsContext$fOutputableHsImplicitBndrs$fOutputableHsWildCardBndrs$fOutputableBndrHsIPName$fOutputableHsIPName$fOutputableNewHsTypeX$fOutputableHsTyLit$fOutputableHsConDetails$fOutputableHsArg$fOutputableFieldOcc$fOutputableHsTyVarBndr$fOutputableHsType$fOutputableConDeclField$fOutputableLHsQTyVars!$fOutputableBndrAmbiguousFieldOcc$fOutputableAmbiguousFieldOcc$fDataHsQTvsRn $fEqHsIPName$fDataHsIPName$fDataNewHsTypeX $fDataHsTyLit$fDataHsTupleSort$fDataHsConDetails $fOrdFieldOcc $fEqFieldOcc ModBreaksmodBreaks_flagsmodBreaks_locsmodBreaks_varsmodBreaks_decls modBreaks_ccsmodBreaks_breakInfo CCostCentre BreakIndex CgBreakInfocgb_vars cgb_restyBCONPtr BCONPtrWord BCONPtrLbl BCONPtrItbl BCONPtrStrBCOPtr BCOPtrName BCOPtrPrimOp BCOPtrBCOBCOPtrBreakArray UnlinkedBCOunlinkedBCONameunlinkedBCOArityunlinkedBCOInstrsunlinkedBCOBitmapunlinkedBCOLitsunlinkedBCOPtrsItblPtrItblEnvFFIInfoCompiledByteCodebc_bcosbc_itblsbc_ffisbc_strs bc_breaksseqCompiledByteCodeemptyModBreaks$fNFDataBCONPtr$fOutputableUnlinkedBCO$fNFDataBCOPtr$fNFDataUnlinkedBCO$fOutputableCgBreakInfo$fOutputableCompiledByteCode $fShowFFIInfo$fNFDataFFIInfo $fShowItblPtr$fNFDataItblPtrCScs_tmcs_tycs_cocs_vbcs_jbcoreBindsStats exprStats coreBindsSizeexprSize$fOutputableCoreStatspprCoreBindingspprCoreBindingpprCoreBindingsWithSizepprCoreBindingWithSize pprParendExpr pprCoreExprpprOptCo pprCoreAltpprRules$fOutputableTickish$fOutputableCoreRule$fOutputableUnfolding$fOutputableUnfoldingSource$fOutputableUnfoldingGuidance$fOutputableBndrTaggedBndr$fOutputableBndrVar$fOutputableExpr$fOutputableBindOutputablePassStgOp StgPrimOp StgPrimCallOp StgFCallOp UpdateFlag ReEntrant Updatable SingleEntry OutStgAlt OutStgRhs OutStgExpr OutStgArg OutStgBindingOutStgTopBindingInStgAltInStgRhs InStgExprInStgArg InStgBindingInStgTopBindingCgStgAltCgStgRhs CgStgExpr CgStgBindingCgStgTopBindingLlStgAltLlStgRhs LlStgExpr LlStgBindingLlStgTopBindingStgAltStgRhsStgExpr StgBinding StgTopBindingAltTypePolyAlt MultiValAltAlgAltPrimAlt GenStgAlt XLetNoEscape XRhsClosureBinderP NoExtSilentStgPassVanillaLiftLamsCodeGen GenStgRhs StgRhsClosure StgRhsCon GenStgExprStgAppStgLit StgConAppStgOpAppStgLamStgCaseStgLetStgLetNoEscapeStgTickStgArg StgVarArg StgLitArg GenStgBinding StgNonRecStgRecGenStgTopBinding StgTopLiftedStgTopStringLit isDllConApp stgArgTypestripStgTicksTopstgCaseBndrInScope noExtSilent stgRhsAritytopStgBindHasCafRefsstgArgHasCafRefs isUpdatablepprGenStgTopBindings pprStgBindingpprStgTopBindings$fOutputableStgArg$fOutputableNoExtSilent$fOutputableAltType$fOutputableUpdateFlag$fOutputableGenStgRhs$fOutputableGenStgExpr$fOutputableGenStgBinding$fOutputableGenStgTopBinding$fDataNoExtSilent$fEqNoExtSilent$fOrdNoExtSilent showStgStats$fEqCounterType$fOrdCounterTypelintStgTopBindings $fMonadLintM$fApplicativeLintM$fFunctorLintMLiftM FloatLangStartBindingGroupEndBindingGroupPlainTopBinding LiftedBindingEnve_dflagse_subst e_expansionse_in_caffy_contextdecomposeStgBinding mkStgBinding collectFloatsrunLiftM withCaffynessaddTopStringLitstartBindingGroupendBindingGroupaddLiftedBinding withSubstBndrwithSubstBndrswithLiftedBndrwithLiftedBndrssubstOccisLiftedformerFreeVars$fOutputableFloatLang$fMonadUniqueLiftM$fHasDynFlagsLiftM$fFunctorLiftM$fApplicativeLiftM $fMonadLiftMannTopBindingsFreeVarsannBindingFreeVars ShowHowMuch ShowHeaderShowSome ShowIfaceAltPprShowSub ss_how_much ss_forall IfaceJoinInfoIfaceNotJoinPointIfaceJoinPoint IfaceLetBndr IfLetBndr IfaceBinding IfaceNonRecIfaceRec IfaceConAlt IfaceDefault IfaceDataAlt IfaceLitAltIfaceAlt IfaceTickish IfaceHpcTickIfaceSCC IfaceSource IfaceExprIfaceLclIfaceExtIfaceCo IfaceTupleIfaceLamIfaceApp IfaceCase IfaceECaseIfaceLet IfaceCastIfaceLit IfaceFCall IfaceTickIfaceIdDetails IfVanillaId IfRecSelIdIfDFunIdIfaceUnfolding IfCoreUnfold IfCompulsory IfInlineRule IfDFunUnfold IfaceInfoItemHsArity HsStrictnessHsInlineHsUnfold HsNoCafRefsHsLevity IfaceIdInfoNoInfoHasInfoIfaceCompleteMatchIfaceAnnTargetIfaceAnnotationifAnnotatedTargetifAnnotatedValue IfaceRule ifRuleName ifActivation ifRuleBndrs ifRuleHead ifRuleArgs ifRuleRhs ifRuleAuto ifRuleOrph IfaceFamInst ifFamInstFam ifFamInstTysifFamInstAxiom ifFamInstOrph IfaceClsInst ifInstCls ifInstTysifDFunifOFlag ifInstOrph IfaceSrcBang IfSrcBang IfaceBangIfNoBangIfStrictIfUnpack IfUnpackCo IfaceEqSpec IfaceConDeclIfCon ifConName ifConWrapper ifConInfix ifConExTCvsifConUserTvBinders ifConEqSpec ifConCtxt ifConArgTys ifConFields ifConStrictsifConSrcStricts IfaceConDeclsIfAbstractTyCon IfDataTyCon IfNewTyCon IfaceAxBranch ifaxbTyVarsifaxbEtaTyVars ifaxbCoVarsifaxbLHS ifaxbRolesifaxbRHS ifaxbIncompsIfaceAT IfaceClassOpIfaceFamTyConFlavIfaceDataFamilyTyConIfaceOpenSynFamilyTyConIfaceClosedSynFamilyTyCon!IfaceAbstractClosedSynFamilyTyConIfaceBuiltInSynFamTyConIfaceTyConParent IfNoParentIfDataInstanceIfaceClassBodyIfAbstractClassIfConcreteClass ifClassCtxtifATsifSigsifMinDef IfaceDeclIfaceId IfaceData IfaceSynonym IfaceFamily IfaceClass IfaceAxiom IfacePatSynifNameifType ifIdDetailsifIdInfo ifBinders ifResKindifCTypeifRolesifCtxtifCons ifGadtSyntaxifParentifSynRhsifResVar ifFamFlavifFamInjifFDsifBodyifTyConifRole ifAxBranches ifPatIsInfix ifPatMatcher ifPatBuilderifPatUnivBndrs ifPatExBndrs ifPatProvCtxt ifPatReqCtxt ifPatArgsifPatTy ifFieldLabels IfaceTopBndrvisibleIfConDeclsifaceDeclImplicitBndrsifaceDeclFingerprints showToHeader showToIface pprIfaceDecl pprIfaceExprfreeNamesIfDeclfreeNamesIfRulefreeNamesIfFamInst$fBinaryIfaceTyConParent$fOutputableIfaceTyConParent$fBinaryIfaceClassOp$fOutputableIfaceClassOp$fHasOccNameIfaceClassOp$fNamedThingIfaceClassOp$fBinaryIfaceAxBranch$fBinaryIfaceFamTyConFlav$fBinaryIfaceBang$fBinaryIfaceSrcBang$fBinaryIfaceConDecl$fHasOccNameIfaceConDecl$fNamedThingIfaceConDecl$fBinaryIfaceConDecls$fBinaryIfaceClsInst$fOutputableIfaceClsInst$fBinaryIfaceFamInst$fOutputableIfaceFamInst$fBinaryIfaceAnnotation$fOutputableIfaceAnnotation$fBinaryIfaceCompleteMatch$fOutputableIfaceCompleteMatch$fBinaryIfaceTickish$fBinaryIfaceConAlt$fOutputableIfaceConAlt$fBinaryIfaceJoinInfo$fOutputableIfaceJoinInfo$fBinaryIfaceLetBndr$fBinaryIfaceBinding$fBinaryIfaceExpr$fBinaryIfaceUnfolding$fBinaryIfaceInfoItem$fBinaryIfaceIdInfo$fOutputableIfaceUnfolding$fOutputableIfaceInfoItem$fOutputableIfaceIdInfo$fOutputableIfaceExpr$fBinaryIfaceIdDetails$fBinaryIfaceAT$fBinaryIfaceDecl$fOutputableIfaceIdDetails$fOutputableIfaceAT$fOutputableIfaceDecl$fHasOccNameIfaceDecl$fNamedThingIfaceDecl$fBinaryIfaceRule$fOutputableIfaceRule$fOutputableShowHowMuchDynamicLinkerLabelInfoCodeStub SymbolPtr GotSymbolPtrGotSymbolOffsetForeignLabelSourceForeignLabelInPackageForeignLabelInExternalPackageForeignLabelInThisPackagepprDebugCLabel mkSRTLabelmkRednCountsLabelmkLocalClosureLabelmkLocalInfoTableLabelmkLocalClosureTableLabelmkClosureLabelmkInfoTableLabel mkEntryLabelmkClosureTableLabelmkConInfoTableLabel mkBytesLabelmkBlockInfoTableLabelmkDirty_MUT_VAR_LabelmkSplitMarkerLabelmkUpdInfoLabelmkBHUpdInfoLabelmkIndStaticInfoLabelmkMainCapabilityLabelmkMAP_FROZEN_CLEAN_infoLabelmkMAP_FROZEN_DIRTY_infoLabelmkMAP_DIRTY_infoLabelmkTopTickyCtrLabelmkCAFBlackHoleInfoTableLabelmkArrWords_infoLabelmkSMAP_FROZEN_CLEAN_infoLabelmkSMAP_FROZEN_DIRTY_infoLabelmkSMAP_DIRTY_infoLabelmkBadAlignmentLabelmkSRTInfoLabelmkCmmInfoLabelmkCmmEntryLabelmkCmmRetInfoLabel mkCmmRetLabelmkCmmCodeLabelmkCmmDataLabelmkCmmClosureLabelmkLocalBlockLabelmkRtsPrimOpLabelmkSelectorInfoLabelmkSelectorEntryLabelmkApInfoTableLabelmkApEntryLabelmkPrimCallLabelmkForeignLabel addLabelSize isBytesLabelisForeignLabelisStaticClosureLabelisSomeRODataLabelisInfoTableLabelisConInfoTableLabelforeignLabelStdcallInfo mkBitmapLabel mkCCLabel mkCCSLabelmkRtsApFastLabelmkRtsSlowFastTickyCtrLabelmkHpcTicksLabelmkDynamicLinkerLabeldynamicLinkerLabelInfomkPicBaseLabelmkDeadStripPreventermkStringLitLabelmkAsmTempLabelmkAsmTempDerivedLabelmkAsmTempEndLabelmkAsmTempDieLabel toClosureLbltoSlowEntryLbl toEntryLbl toInfoLblhasHaskellNamehasCAF needsCDeclmaybeLocalBlockLabel isMathFunexternallyVisibleCLabelisCFunctionLabel isGcPtrLabel isLocalCLabel labelDynamic pprCLabel$fOutputableForeignLabelSource$fOutputableCLabel $fOrdCLabel$fEqForeignLabelSource$fOrdForeignLabelSource$fEqIdLabelInfo$fOrdIdLabelInfo$fShowIdLabelInfo$fEqRtsLabelInfo$fOrdRtsLabelInfo$fEqCmmLabelInfo$fOrdCmmLabelInfo$fEqDynamicLinkerLabelInfo$fOrdDynamicLinkerLabelInfo $fEqCLabelprofilingInitCode newBlockIdblockLbl infoTblLbl GlobalReg VanillaRegFloatReg DoubleRegLongRegXmmRegYmmRegZmmRegSpSpLimHpHpLimCCCS CurrentTSOCurrentNurseryHpAllocEagerBlackholeInfoGCEnter1GCFunBaseRegMachSpUnwindReturnReg PicBaseRegVGcPtr VNonGcPtr DefinerOfRegs foldRegsDefd UserOfRegs foldRegsUsed GlobalRegSet LocalRegSetRegSetLocalRegCmmLitCmmIntCmmFloatCmmVecCmmLabel CmmLabelOffCmmLabelDiffOffCmmBlockCmmHighStackMarkAreaOldYoungCmmRegCmmLocal CmmGlobalCmmLoad CmmStackSlot CmmRegOff cmmExprType cmmLitType cmmExprWidthmaybeInvertCmmExpr cmmRegType cmmRegWidth localRegType emptyRegSet nullRegSet elemRegSet extendRegSetdeleteFromRegSetmkRegSet minusRegSet plusRegSet timesRegSet sizeRegSet regSetToListfoldLocalRegsUsedfoldLocalRegsDefdbaseRegspReghpReghpLimRegspLimRegnodeReg currentTSORegcurrentNurseryReg hpAllocRegcccsRegnode globalRegTypeisArgReg$fUniquableLocalReg $fOrdLocalReg $fEqLocalReg$fUserOfRegsr[]$fUserOfRegsrr$fDefinerOfRegsr[]$fDefinerOfRegsrr$fOrdGlobalReg $fEqGlobalReg$fDefinerOfRegsGlobalRegCmmReg$fUserOfRegsGlobalRegCmmReg$fDefinerOfRegsLocalRegCmmReg$fUserOfRegsLocalRegCmmReg$fUserOfRegsrCmmExpr $fEqCmmExpr$fEqArea $fOrdArea $fEqCmmLit $fEqVGcPtr $fShowVGcPtr$fShowGlobalReg $fEqCmmReg $fOrdCmmRegpprLit$fOutputableGlobalReg$fOutputableArea$fOutputableLocalReg$fOutputableCmmLit$fOutputableCmmReg$fOutputableCmmExpr callerSaves activeStgRegs haveRegBaseglobalRegMaybefreeReg freeRegBase CmmTickScope GlobalScopeSubScope CombinedScope CmmTickish ForeignTarget PrimTarget CmmReturnInfo CmmMayReturnCmmNeverReturnsForeignConvention ConventionNativeDirectCallNativeNodeCall NativeReturnSlowGCUpdFrameOffset CmmFormal CmmActualCmmEntry CmmCommentCmmTick CmmUnwind CmmAssignCmmStoreCmmUnsafeForeignCall CmmBranch CmmCondBranchCmmCallCmmForeignCallcml_predcml_true cml_false cml_likely cml_targetcml_cont cml_args_regscml_args cml_ret_args cml_ret_offtgtresargssuccret_argsret_offintrblforeignTargetHints wrapRecExpmapExp mapExpDeep wrapRecExpMmapExpM mapExpDeepM wrapRecExpffoldExp foldExpDeep mapSuccessorsmapCollectSuccessorsisTickSubScopecombineTickScopes$fUserOfRegsrForeignTarget$fOutputableCmmTickScope$fOrdCmmTickScope$fEqCmmTickScope$fDefinerOfRegsGlobalRegCmmNode$fDefinerOfRegsLocalRegCmmNode$fUserOfRegsGlobalRegCmmNode$fUserOfRegsLocalRegCmmNode$fNonLocalCmmNode$fEqConvention$fEqCmmReturnInfo$fEqForeignConvention$fEqForeignTarget $fEqCmmNodeCmmToken CmmT_SpecChar CmmT_DotDotCmmT_DoubleColonCmmT_ShrCmmT_ShlCmmT_GeCmmT_LeCmmT_EqCmmT_Ne CmmT_BoolAnd CmmT_BoolOr CmmT_CLOSURECmmT_INFO_TABLECmmT_INFO_TABLE_RETCmmT_INFO_TABLE_FUNCmmT_INFO_TABLE_CONSTRCmmT_INFO_TABLE_SELECTOR CmmT_else CmmT_export CmmT_section CmmT_gotoCmmT_if CmmT_call CmmT_jump CmmT_foreign CmmT_never CmmT_prim CmmT_reserve CmmT_return CmmT_returns CmmT_import CmmT_switch CmmT_case CmmT_default CmmT_push CmmT_unwind CmmT_bits8 CmmT_bits16 CmmT_bits32 CmmT_bits64 CmmT_bits128 CmmT_bits256 CmmT_bits512 CmmT_float32 CmmT_float64 CmmT_gcptrCmmT_GlobalReg CmmT_Name CmmT_StringCmmT_Int CmmT_FloatCmmT_EOF CmmT_False CmmT_True CmmT_likelycmmlex$fShowCmmToken ListGraph GenBasicBlock BasicBlock CmmStaticsStatics CmmStatic CmmStaticLitCmmUninitialised CmmStringSection SectionTypeTextData ReadOnlyDataRelocatableReadOnlyDataUninitialisedDataReadOnlyData16CString OtherSection ProfilingInfoNoProfilingInfo CmmInfoTablecit_lblcit_repcit_profcit_srtcit_clo CmmStackInfo StackInfo arg_space updfr_space do_layout CmmTopInfoTopInfo info_tbls stack_info GenCmmGraphCmmGraphg_entryg_graph RawCmmDeclCmmDecl GenCmmDeclCmmProcCmmData RawCmmGroupCmmGroup GenCmmGroup CmmProgram topInfoTable isSecConstantblockId pprBBlock$fOutputableGenBasicBlock$fOutputableListGraph$fShowSectionTypeImmImmInt ImmIntegerImmCLblImmLitImmIndexImmFloat ImmDoubleImmConstantSumImmConstantDiffLOHI strImmLitlitToImmAddrMode AddrRegReg AddrRegImm addrOffsetpprCmms writeCmms pprCmmGroup pprStatic pprSection$fOutputableForeignHint$fOutputableCmmInfoTable$fOutputableCmmStatic$fOutputableCmmStatics$fOutputableGenCmmDeclcastFloatToWord8ArraycastDoubleToWord8Array floatToBytes doubleToBytespprASCIIpprSectionHeader LlvmCastOpLM_TruncLM_ZextLM_Sext LM_FptruncLM_Fpext LM_Fptoui LM_Fptosi LM_Uitofp LM_Sitofp LM_Ptrtoint LM_Inttoptr LM_Bitcast LlvmCmpOp LM_CMP_Eq LM_CMP_Ne LM_CMP_Ugt LM_CMP_Uge LM_CMP_Ult LM_CMP_Ule LM_CMP_Sgt LM_CMP_Sge LM_CMP_Slt LM_CMP_Sle LM_CMP_Feq LM_CMP_Fne LM_CMP_Fgt LM_CMP_Fge LM_CMP_Flt LM_CMP_Fle LlvmMachOp LM_MO_Add LM_MO_Sub LM_MO_Mul LM_MO_UDiv LM_MO_SDiv LM_MO_URem LM_MO_SRem LM_MO_FAdd LM_MO_FSub LM_MO_FMul LM_MO_FDiv LM_MO_FRem LM_MO_Shl LM_MO_LShr LM_MO_AShr LM_MO_AndLM_MO_Or LM_MO_XorLlvmLinkageTypeInternalLinkOnceWeak Appending ExternWeakExternallyVisibleExternalPrivateLlvmParameterListType FixedArgsVarArgsLlvmCallConventionCC_Ccc CC_Fastcc CC_ColdccCC_GhcCC_Ncc CC_X86_Stdcc LlvmCallTypeStdCallTailCall LlvmFuncAttr AlwaysInline InlineHintOptSizeNoReturnNoUnwindReadNoneReadOnlySspSspReq NoRedZoneNoImplicitFloatNaked LlvmParamAttrZeroExtSignExtInRegByValSRetNoAlias NoCaptureNest LlvmParameterLlvmFunctionDeclsLlvmFunctionDecldecName funcLinkagefuncCc decReturnType decVarargs decParams funcAlign LlvmStatic LMComment LMStaticLit LMUninitType LMStaticStr LMStaticArray LMStaticStrucLMStaticPointerLMTruncLMBitcLMPtoILMAddLMSubLlvmLitLMIntLit LMFloatLit LMNullLit LMVectorLit LMUndefLitLlvmVar LMGlobalVar LMLocalVar LMNLocalVarLMLitVarLMConstGlobalConstantAliasLMAlign LMSectionLlvmTypeLMIntLMFloatLMDouble LMFloat80 LMFloat128 LMPointerLMArrayLMVectorLMLabelLMVoidLMStruct LMStructULMAlias LMMetadata LMFunction LlvmAliasLMStringLMGlobal getGlobalVargetGlobalValueppParamspprSpecialStaticpprStaticArithppName ppPlainNameppLit garbageLit getVarType getLitType getStatTypegetLinkpLiftpVarLiftpLower pVarLowerisIntisFloat isPointerisVectorisGloballlvmWidthInBitsi128i64i32i16i8i1i8PtrllvmWord llvmWordPtrppDoublenarrowFpwidenFpppFloat fixEndian ppCommaJoin ppSpaceJoin$fOutputableLlvmParamAttr$fOutputableLlvmFuncAttr$fOutputableLlvmCallConvention$fOutputableLlvmLinkageType$fOutputableLlvmFunctionDecl$fOutputableLlvmType$fOutputableLlvmLit$fOutputableLlvmVar$fOutputableLlvmStatic$fOutputableLlvmMachOp$fOutputableLlvmCmpOp$fOutputableLlvmCastOp $fEqLMConst$fEqLlvmParamAttr$fEqLlvmFuncAttr$fEqLlvmCallType$fShowLlvmCallType$fEqLlvmCallConvention$fEqLlvmParameterListType$fShowLlvmParameterListType$fEqLlvmLinkageType$fEqLlvmFunctionDecl $fEqLlvmType $fEqLlvmLit $fEqLlvmVar$fEqLlvmMachOp $fEqLlvmCmpOp$fEqLlvmCastOpMetaDecl MetaNamed MetaUnnamed MetaAnnotMetaExprMetaStrMetaNodeMetaVar MetaStructMetaId$fOutputableMetaId$fOutputableMetaExpr $fEqMetaId $fOrdMetaId $fEnumMetaId $fEqMetaExpr $fEqMetaAnnotLlvmExpressionAllocaLlvmOpCompareExtractExtractVInsertMallocLoadALoad GetElemPtr AtomicRMWCmpXChgCallCallMPhiAsmMExpr LlvmStatement AssignmentFenceBranchBranchIfCommentMkLabelStoreSwitchReturn UnreachableNopMetaStmt LlvmAtomicOpLAO_XchgLAO_AddLAO_SubLAO_AndLAO_NandLAO_OrLAO_XorLAO_MaxLAO_MinLAO_UmaxLAO_UminLlvmSyncOrdering SyncUnord SyncMonotonic SyncAcquire SyncRelease SyncAcqRel SyncSeqCstSingleThreaded LlvmFunctions LlvmFunctionfuncDeclfuncArgs funcAttrsfuncSect funcPrefixfuncBody LlvmModule modComments modAliasesmodMeta modGlobals modFwdDeclsmodFuncs LlvmBlocks LlvmBlock blockLabel blockStmts LlvmBlockId$fShowLlvmSyncOrdering$fEqLlvmSyncOrdering$fShowLlvmAtomicOp$fEqLlvmAtomicOp$fEqLlvmExpression$fEqLlvmStatement ppLlvmModuleppLlvmComments ppLlvmComment ppLlvmGlobals ppLlvmGlobal ppLlvmAliases ppLlvmAlias ppLlvmMetas ppLlvmMetappLlvmFunctionsppLlvmFunctionppLlvmFunctionDeclsppLlvmFunctionDecllmGlobalRegVarlmGlobalRegArg alwaysLivestgTBAAtopNstackNheapNrxNbaseNtbaagetTBAALlvmM LlvmVersion UnresStatic UnresLabelLlvmData LlvmUnresDataLiveGlobalRegsLlvmBasicBlock LlvmCmmDecl cmmToLlvmTypewidthToLlvmFloatwidthToLlvmInt llvmFunTy llvmFunSig llvmFunAlign llvmInfAlignllvmFunSection llvmFunArgsllvmStdFunAttrs tysToParams llvmPtrBitsparseLlvmVersionsupportedLlvmVersionllvmVersionSupportedllvmVersionStrllvmVersionListrunLlvm liftStream withClearVars varInsert funInsert varLookup funLookup markStackReg checkStackReggetMetaUniqueId getLlvmVer getDynFlaggetLlvmPlatform dumpIfSetLlvm renderLlvm markUsedVar getUsedVars setUniqMeta getUniqMetaghcInternalFunctionsstrCLabel_llvmstrDisplayName_llvmstrProcedureName_llvm getGlobalPtrgenerateExternDeclsaliasify$fMonadUniqueLlvmM$fHasDynFlagsLlvmM $fMonadLlvmM$fApplicativeLlvmM$fFunctorLlvmMrunUnlitrunCpprunPprunCc isContainedInaskLdrunSplitrunAs runLlvmOpt runLlvmLlcrunClangfigureLlvmVersionrunLink runLibtoolrunAraskAr runRanlibrunMkDLL runWindrestouch mkExtraObjmkExtraObjToLinkIntoBinarymkNoteObjsToLinkIntoBinary getLinkInfoplatformSupportsSavingLinkOptsghcLinkInfoSectionNameghcLinkInfoNoteName checkLinkInfohaveRtsOptsFlagsinitLlvmConfig initSysToolscopycopyWithHeader linkDynLib libmLinkOptsgetPkgFrameworkOptsgetFrameworkOpts genLlvmDatagenData pprLlvmDatapprLlvmCmmDecl infoSectionregUsageOfInstrpatchRegsOfInstrisJumpishInstrjumpDestsOfInstrpatchJumpInstr mkSpillInstr mkLoadInstrtakeDeltaInstr isMetaInstrmkRegRegMoveInstrtakeRegRegMoveInstr mkJumpInstrmkStackAllocInstrmkStackDeallocInstr NatBasicBlock NatCmmDeclNatCmmRegUsageRUnoUsage entryBlocks RewriteFun TransferFunDataflowLatticefact_bot fact_join JoinedFactChanged NotChangedNewFactOldFactFact changedIf analyzeCmmBwd analyzeCmmFwd rewriteCmmBwdgetFact joinOutFacts joinFacts mkFactBasefoldNodesBwdOOfoldRewriteNodesBwdOOII8II16II32II64FF32FF64FF80 intFormat floatFormat isFloatFormat cmmTypeFormat formatToWidth formatInBytes $fShowFormat $fEqFormatshowRegclassOfRealRegvirtualRegSqueezerealRegSqueeze allRealRegsgRegoReglRegiRegfRegf6f8f22f26f27g0g1g2fpspo0o1f0f1allocatableRegsargRegs allArgRegscallClobberedRegs mkVirtualReg regDotColorspRelfpRelspillSlotToOffset maxSpillSlotsFreeRegs noFreeRegs initFreeRegs getFreeRegs allocateReg releaseRegbitMask showFreeRegs$fShowFreeRegsHAHIGHERAHIGHESTA allMachRegNos allFPArgRegs fits16Bits makeImmediater0tocr3r4r11r12r27r28r30f20f21tmpRegprimRepCmmType slotCmmType typeCmmTypeprimRepForeignHintslotForeignHinttypeForeignHint mkIntCLitzeroCLitzeroExpr mkWordCLitmkByteStringCLit mkDataLits mkRODataLits mkStgWordCLitpackHalfWordsCLit mkLblExpr cmmOffsetExpr cmmOffset cmmRegOff cmmOffsetLit cmmLabelOffcmmIndex cmmIndexExpr cmmLoadIndex cmmRegOffB cmmOffsetBcmmOffsetExprB cmmLabelOffB cmmOffsetLitBcmmOffsetExprW cmmOffsetW cmmRegOffW cmmOffsetLitW cmmLabelOffW cmmLoadIndexW cmmOrWord cmmAndWord cmmNeWord cmmEqWord cmmULtWord cmmUGeWord cmmUGtWord cmmSLtWord cmmUShrWord cmmAddWord cmmSubWord cmmMulWord cmmQuotWord cmmNegate blankWord cmmToWordisTrivialCmmExprhasNoGlobalRegsisLitisComparisonExpr cmmTagMaskcmmPointerMaskcmmUntag cmmIsTagged cmmConstrTag1 regsOverlap regUsedIn mkLiveness modifyGraph toBlockMap ofBlockMap toBlockListtoBlockListEntryFirst%toBlockListEntryFirstFalseFallthrough ofBlockListbodyToBlockList mapGraphNodesmapGraphNodes1foldlGraphBlocks revPostorder blockTicksbaseExprspExpr spLimExprhpExpr hpLimExprcurrentTSOExprcurrentNurseryExprcccsExpr$fOutputableGenCmmGraph$fOutputableGraph'$fOutputableBlock$fOutputableBlock0$fOutputableBlock1$fOutputableBlock2$fOutputableCmmReturnInfo$fOutputableForeignTarget$fOutputableForeignConvention$fOutputableConvention$fOutputableCmmNode$fOutputableCmmTopInfo$fOutputableCmmStackInfowriteCspprStringInCStyle $fMonadTE$fApplicativeTE $fFunctorTE genLlvmProc$fMonoidLlvmAccum$fSemigroupLlvmAccum $fEqSignage $fShowSignage UnwindExprUwConstUwRegUwDerefUwLabelUwPlusUwMinusUwTimes UnwindTable UnwindPoint DebugBlock dblProceduredblLabel dblCLabel dblHasInfoTbl dblParentdblTicks dblSourceTick dblPosition dblUnwind dblBlocks dblIsEntry cmmDebugGencmmDebugLabels cmmDebugLink debugToMap toUnwindExpr$fOutputableUnwindExpr$fOutputableUnwindPoint$fOutputableDebugBlock$fEqUnwindExprconstantFoldNodeconstantFoldExpr cmmMachOpFoldcmmMachOpFoldM CmmLocalLive liveLatticecmmLocalLivenesscmmGlobalLivenessgen_killcmmSinkcmmLint cmmLintGraph$fHasDynFlagsCmmLint$fMonadCmmLint$fApplicativeCmmLint$fFunctorCmmLintmkEmptyContInfoTable cmmToRawCmm mkInfoTable srtEscapeclosureInfoPtr entryCode getConstrTagcmmGetClosureType infoTableinfoTableConstrTaginfoTableSrtBitmapinfoTableClosureType infoTablePtrsinfoTableNonPtrs funInfoTable funInfoAritystdInfoTableSizeWfixedInfoTableSizeWprofInfoTableSizeWmaxStdInfoTableSizeWmaxRetInfoTableSizeWstdInfoTableSizeBstdSrtBitmapOffsetstdClosureTypeOffset stdPtrsOffsetstdNonPtrsOffsetconInfoTableSizeBStatus ReachedBy ProcPoint ProcPointSetprocPointAnalysiscallProcPointsminimalProcPointSetsplitAtProcPointsattachContInfoTables$fOutputableStatuscmmImplementSwitchPlans cmmCfgOptscmmCfgOptsProc replaceLabelsremoveUnreachableBlocksProcelimCommonBlocks ParamLocation RegisterParam StackParamassignArgumentsPos assignStackrealArgRegsCover$fOutputableParamLocationTransferJumpRetJumpRetCgStmtCgLabelCgLastCgForkCmmAGraphScoped CmmAGraph catAGraphsmkLabelmkMiddlemkLast outOfLinelgraphOfAGraph labelAGraphmkNop mkCommentmkAssignmkStoremkJump mkRawJump mkJumpExtra mkCbranchmkSwitchmkReturnmkBranch mkFinalCallmkCallReturnsTomkJumpReturnsTo mkUnsafeCallmkUnwind stackStubExpr copyInOflow copyOutOflow mkCallEntry noExtraStacktoCall $fEqTransferfixStgRegisters llvmCodeGenEdgeInfotransitionSource edgeWeightTransitionSource CmmSourceCfgEdgeedgeFromedgeToedgeInfo EdgeWeight mkWeightInfoadjustEdgeWeight getCfgNodeshasNodesanityCheckCfg filterEdgesshortcutWeightMapaddImmediateSuccessoraddEdge addWeightEdgedelEdgegetSuccEdgesSortedgetSuccessorEdges getEdgeInfo reverseEdges infoEdgeListweightedEdgeListedgeList getSuccessorspprEdgeWeightsaddNodesBetween getCfgProcgetCfg optimizeCFG loopMembers$fOutputableEdgeWeight$fOutputableEdgeInfo$fOutputableCfgEdge $fOrdCfgEdge $fEqCfgEdge$fEqEdgeWeight$fOrdEdgeWeight$fEnumEdgeWeight$fNumEdgeWeight$fRealEdgeWeight$fIntegralEdgeWeight$fEqTransitionSource $fEqEdgeInfoLiveBasicBlockLiveInfoliveBorn liveDieRead liveDieWrite LiveInstrInstrSRInstrSPILLRELOAD LiveCmmDeclBlockMapRegMap emptyRegMap mapBlockTop mapBlockTopMmapSCCMmapGenBlockTopmapGenBlockTopMslurpConflictsslurpReloadCoalesce stripLivestripLiveBlockeraseDeltasLivepatchEraseLivepatchRegsLiveInstrnatCmmTopToLive regLivenessreverseBlocksInTops$fOutputableInstrSR$fInstructionInstrSR$fOutputableLiveInstr$fOutputableLiveInfoRA_State ra_blockassig ra_freeregsra_assigra_deltara_stackra_us ra_spills ra_DynFlags ra_fixups RegAllocStatsra_spillInstrs ra_fixupList SpillReason SpillAlloc SpillClobber SpillLoad SpillJoinRR SpillJoinRMLocInMemInBothBlockAssignment regsOfLoc$fOutputableLoc$fEqLoc $fShowLoc$fOrdLocbinSpillReasonscountRegRegMovesNatpprStatsRegMrunRspillRloadR getFreeRegsR setFreeRegsR getAssigR setAssigRgetBlockAssigRsetBlockAssigR setDeltaR getDeltaR getUniqueR recordSpillrecordFixupBlock$fHasDynFlagsRegM $fMonadRegM$fApplicativeRegM $fFunctorRegM cleanSpills$fOutputableStore$fUniquableStore SpillStatsspillStoreLoadregSpill accSpillSL$fOutputableSpillStats regCoalesce slurpJoinMovs SpillCostInfoSpillCostRecordzeroSpillCostInfoplusSpillCostInfoplusSpillCostRecordslurpSpillCostInfo chooseSpilllifeMapFromSpillCostInfopprSpillCostRecord megaSeqIdInfo seqRuleInfoseqRulesseqExprseqExprsseqBinds seqUnfoldingCmEnv LooseTypeMapTypeMaplkDNamedxtDNamed lookupCoreMap extendCoreMap foldCoreMap emptyCoreMap foldTypeMap emptyTypeMap lookupTypeMap extendTypeMaplookupTypeMapWithScopeextendTypeMapWithScopemkDeBruijnContext lookupCME lkDFreeVar xtDFreeVar$fTrieMapTyLitMap $fEqDeBruijn $fEqDeBruijn0 $fEqDeBruijn1 $fEqDeBruijn2 $fEqDeBruijn3$fTrieMapVarMap$fTrieMapTypeMapX$fTrieMapLooseTypeMap$fTrieMapTypeMap$fTrieMapCoercionMapX$fTrieMapCoercionMap$fTrieMapAltMap$fTrieMapCoreMapX$fOutputableCoreMap$fTrieMapCoreMapstgCse$fTrieMapStgArgMap$fTrieMapConAppMap FamInstMatch fim_instancefim_tysfim_cosInjectivityCheckResultInjectivityAcceptedInjectivityUnified FamInstEnvs FamFlavor SynFamilyInstDataFamilyInstfi_axiom fi_flavorfi_famfi_tcsfi_tvsfi_cvsfi_tysfi_rhs famInstAxiom famInstRHS famInstTyConfamInstsRepTyConsfamInstRepTyCon_maybedataFamInstRepTyCon pprFamInst pprFamInstsmkImportedFamInstemptyFamInstEnvsemptyFamInstEnvfamInstEnvEltsfamInstEnvSizefamilyInstancesextendFamInstEnvListextendFamInstEnvinjectiveBranches mkCoAxBranchmkBranchedCoAxiommkUnbranchedCoAxiommkSingleCoAxiommkNewTypeCoAxiomlookupFamInstEnvByTyConlookupFamInstEnvlookupFamInstEnvConflicts$lookupFamInstEnvInjectivityConflicts isDominatedByreduceTyFamApp_maybeapartnessChecktopNormaliseTypetopNormaliseType_maybenormaliseTcAppnormaliseTcArgs normaliseType flattenTys$fOutputableFamInst$fNamedThingFamInst$fOutputableFamilyInstEnv$fOutputableFamInstMatch$fApplicativeNormM$fFunctorNormM $fMonadNormMCoreAltWithFVsCoreExprWithFVs'CoreExprWithFVsCoreBindWithFVsFVAnn exprFreeVarsexprFreeVarsDSetexprFreeVarsList exprFreeIdsexprFreeIdsDSetexprFreeIdsListexprsFreeIdsDSetexprsFreeIdsList exprsFreeVarsexprsFreeVarsList bindFreeVarsexprSomeFreeVarsexprSomeFreeVarsListexprsSomeFreeVarsexprsSomeFreeVarsListexpr_fvsexprsOrphNamesorphNamesOfTypeorphNamesOfTypes orphNamesOfCoorphNamesOfCoConorphNamesOfAxiomorphNamesOfFamInstruleRhsFreeVars ruleFreeVarsrulesFreeVarsDSet idRuleRhsVars rulesFreeVarsruleLhsFreeIdsruleLhsFreeIdsList freeVarsOf freeVarsOfAnnvarTypeTyCoVarsvarTypeTyCoFVs idFreeVars dIdFreeVarsidFVsbndrRuleAndUnfoldingVarsDSet idRuleVarsidUnfoldingVarsstableUnfoldingVars freeVarsBindfreeVarsTypeSizeTcLevel UserTypeCtxt FunSigCtxt InfSigCtxt ExprSigCtxt KindSigCtxt TypeAppCtxt ConArgCtxt TySynCtxt PatSynCtxt PatSigCtxt RuleSigCtxt ResSigCtxt ForSigCtxtDefaultDeclCtxt InstDeclCtxt SpecInstCtxt ThBrackCtxt GenSigCtxtGhciCtxt ClassSCCtxt SigmaCtxt DataTyCtxtDerivClauseCtxtTyVarBndrKindCtxt DataKindCtxt TySynKindCtxtTyFamResKindCtxtMetaInfoTauTvTyVarTv FlatMetaTv FlatSkolTvFlexiIndirectSkolemTv RuntimeUnkMetaTvmtv_infomtv_ref mtv_tclvl SyntaxOpTypeSynAnySynRhoSynListSynFunSynType ExpRhoType ExpSigmaType InferResultIRir_uniqir_lvlir_instir_refExpTypeInfer TcDTyCoVarSet TcDTyVarSet TcTyCoVarSet TcTyVarSetTcKind TcTauType TcRhoType TcSigmaType TcThetaType TcPredTypeTcTyCon TcTyVarBinder TcTyCoVarTcCoVarmkCheckExpType synKnownType mkSynFunTys superSkolemTvpprUserTypeCtxt isSigMaybe maxTcLevel topTcLevel isTopTcLevel pushTcLevelstrictlyDeeperThan sameDepthAs tcTyVarLevel tcTypeLevel promoteSkolempromoteSkolemXpromoteSkolemsX tcTyFamInststcTyFamInstsAndVistcTyConAppTyFamInstsAndVis isTyFamFreeexactTyCoVarsOfTypeexactTyCoVarsOfTypesanyRewritableTyVar tcIsTcTyVarisTouchableMetaTyVarisFloatedTouchableMetaTyVarisImmutableTyVarisTyConableTyVar isFmvTyVar isFskTyVarisFlattenTyVar isSkolemTyVarisOverlappableTyVar isMetaTyVarisAmbiguousTyVar isMetaTyVarTy metaTyVarInfometaTyVarTcLevelmetaTyVarTcLevel_maybe metaTyVarRefsetMetaTyVarTcLevel isTyVarTyVarisFlexi isIndirectisRuntimeUnkSkolmkTyVarNamePairsfindDupTyVarTvs mkSigmaTy mkInfSigmaTy mkSpecSigmaTymkPhiTy getDFunTyKey mkNakedAppTys mkNakedAppTy mkNakedCastTy nakedSubstTy tcSplitPiTystcSplitPiTy_maybetcSplitForAllTy_maybetcSplitForAllTystcSplitForAllVarBndrs tcIsForAllTytcSplitPredFunTy_maybe tcSplitPhiTytcSplitSigmaTytcSplitNestedSigmaTystcDeepSplitSigmaTy_maybetcTyConAppTyContcTyConAppTyCon_maybetcTyConAppArgstcSplitTyConApptcRepSplitTyConApp_maybe' tcSplitFunTystcSplitFunTy_maybetcSplitFunTysN tcFunArgTy tcFunResultTytcFunResultTyNtcSplitAppTy_maybe tcSplitAppTy tcSplitAppTystcRepGetNumAppTystcGetCastedTyVar_maybetcGetTyVar_maybe tcGetTyVar tcIsTyVarTy tcSplitDFunTytcSplitDFunHeadtcSplitMethodTytcEqKindtcEqTypetcEqTypeNoKindCheck tcEqTypeVis pickyEqTypeisTyVarClassPredcheckValidClsArgs hasTyVarHead evVarPredpickQuantifiablePreds boxEqPredpickCapturedPredsmkMinimalBySCstransSuperClassesimmSuperClassesisImprovementPredisInsolubleOccursCheck isSigmaTyisRhoTy isRhoExpTyisOverloadedTy isFloatTy isDoubleTy isIntegerTyisIntTyisWordTyisBoolTyisUnitTyisCharTy isFloatingTy isStringTy isCallStackTyisCallStackPred hasIPPred isTyVarHead isRigidTy deNoteTypetcSplitIOType_maybeisFFITyisFFIArgumentTyisFFIExternalTyisFFIImportResultTyisFFIExportResultTy isFFIDynTy isFFILabelTyisFFIPrimArgumentTyisFFIPrimResultTy isFunPtrTysizeType sizeTypestcTyConVisibilitiesisNextTyConArgVisibleisNextArgVisible$fOutputableMetaDetails$fOutputableMetaInfo$fOutputableTcLevel$fOutputableTcTyVarDetails$fOutputableInferResult$fOutputableExpType $fEqTcLevel $fOrdTcLevel ClosureInfo closureName closureLFInfoclosureInfoLabel CallMethodEnterItJumpToItReturnItSlowCall DirectEntryDynTagStandardFormInfoLambdaFormInfoNonVoid SelfLoopInfoCgLocCmmLocLneLoc isKnownFun fromNonVoid nonVoidIdsassertNonVoidIdsnonVoidStgArgsassertNonVoidStgArgs idPrimRep addIdReps addArgReps argPrimRep mkLFArgumentmkLFLetNoEscape mkLFReEntrant mkLFThunk mkConLFInfomkSelectorLFInfo mkApLFInfo mkLFImported mkLFStringLit isSmallFamily tagForCon tagForAritylfDynTag isLFThunk isLFReEntrantnodeMustPointToIt getCallMethod mkCmmInfo mkClosureInfoblackHoleOnEntryisStaticClosureclosureUpdReqd lfUpdatableclosureSingleEntryclosureReEntrantclosureFunInfofunTagisToplevClosurestaticClosureLabelclosureSlowEntryLabelclosureLocalEntryLabelmkDataConInfoTablecafBlackHoleInfoTableindStaticInfoTablestaticClosureNeedsLink$fOutputableCgLoc$fOutputableNonVoid $fEqNonVoid $fShowNonVoidVirtualHpOffset HeapUsagevirtHprealHpCgState MkCgState cgs_stmtscgs_tops cgs_binds cgs_hp_usg cgs_uniqs ReturnKindAssignedDirectly ReturnedToSequelAssignToCgIdInfocg_idcg_lfcg_locCgInfoDownwards MkCgInfoDown cgd_dflagscgd_mod cgd_updfr_off cgd_ticky cgd_sequel cgd_self_loopcgd_tick_scopeFCodeinitCrunCfixCinitUpdFrameOffheapHWM initHpUsagegetStatesetState getHpUsage setHpUsage setVirtHp getVirtHp setRealHpgetBindssetBinds newUnique getInfoDown getSelfLoop withSelfLoopgetThisPackage getModuleName withSequel getSequelwithUpdFrameOffgetUpdFrameOffgetTickyCtrLabelsetTickyCtrLabel getTickScope tickScopeforkClosureBody forkLneBodycodeOnlyforkAlts forkAltPairgetCodeRgetCode getCodeScoped getHeapUsage emitLabel emitCommentemitTick emitUnwind emitAssign emitStoreemitemitDecl emitOutOfLineemitProcWithStackFrameemitProcWithConventionemitProcgetCmmmkCmmIfThenElsemkCmmIfThenElse' mkCmmIfGoto mkCmmIfGoto' mkCmmIfThen mkCmmIfThen'mkCall mkCmmCall aGraphToGraph$fOutputableCgIdInfo$fOutputableSequel$fHasDynFlagsFCode$fMonadUniqueFCode $fMonadFCode$fApplicativeFCode$fFunctorFCodecgLit mkSimpleLit addToMemLbl addToMemLblEaddToMem addToMemEmkTaggedObjectLoad tagToClosure emitRtsCallemitRtsCallWithResultemitRtsCallGencallerSaveVolatileRegsget_GlobalReg_addr emitDataLitsemitRODataLits newStringCLitnewByteStringCLit assignTempnewTempnewUnboxedTupleRegsemitMultiAssign emitSwitchemitCmmLitSwitchccsTypeccType storeCurCCS mkCCostCentremkCCostCentreStackcostCentreFrom staticProfHdr dynProfHdrinitUpdFrameProfsaveCurrentCostCentrerestoreCurrentCostCentre profDynAlloc profAllocenterCostCentreThunkenterCostCentreFuninitCostCentres emitSetCCCldvRecordCreateldvEnterClosureldvEnterunECVarNFunNLabelN loopDeclswithNamenewLocalnewLabelnewFunctionName newImport lookupLabel lookupNamecode$fHasDynFlagsCmmParse$fMonadUniqueCmmParse$fMonadCmmParse$fApplicativeCmmParse$fFunctorCmmParsecgBind litIdInfo lneIdInfo rhsIdInfo mkRhsInit idInfoToAmodemaybeLetNoEscapeaddBindC addBindsC getCgIdInfo getArgAmodegetNonVoidArgAmodes bindToReg rebindToReg bindArgToRegbindArgsToRegsidToRegArgRepNVFDV16V32V64 argRepStringtoArgRepisNonV argRepSizeWidArgRepslowCallPattern$fOutputableArgRepwithNewTickyCounterFunwithNewTickyCounterLNEwithNewTickyCounterThunkwithNewTickyCounterStdThunkwithNewTickyCounterContickyPushUpdateFrametickyUpdateFrameOmittedtickyEnterDynContickyEnterStaticContickyEnterViaNodetickyEnterThunktickyEnterStdThunktickyBlackHoletickyUpdateBhCaf tickyEnterFun tickyEnterLNEtickyReturnOldContickyReturnNewContickyUnboxedTupleReturntickyDirectCalltickyKnownCallTooFewArgstickyKnownCallExacttickyKnownCallExtraArgstickyUnknownCall tickySlowCalltickySlowCallPat tickyDynAlloctickyAllocHeaptickyAllocPrimtickyAllocThunk tickyAllocPAPtickyHeapChecktickyStackCheck ClosureHeaderNoHeader StdHeader ThunkHeaderFieldOffOrPaddingFieldOffPadding emitReturnemitCalladjustHpBackwards directCallslowCallgetHpRelOffsetmkVirtHeapOffsetsWithPaddingmkVirtHeapOffsetsmkVirtConstrOffsetsmkVirtConstrSizes mkArgDescremitClosureProcAndInfoTableemitClosureAndInfoTable BinderInfo BindsClosure BoringBinderSkeleton ClosureSkRhsSkAltSkBothSkNilSkbinderInfoBndrtagSkeletonTopBind goodToLift closureGrowth$fOutputableSkeleton$fOutputableBndrBinderInfo$fOutputableBinderInfo stgLiftLamsallocDynClosureallocDynClosureCmmallocHeapClosure emitSetDynHdrmkStaticClosureFieldsmkStaticClosureentryHeapCheckentryHeapCheck' altHeapCheckaltHeapCheckReturnsTonoEscapeHeapCheckheapStackCheckGen ModuleSRTInfoCAFEnvCAFSetcafAnalemptySRTdoSRTs$fOutputableModuleSRTInfo $fEqCAFLabel $fOrdCAFLabel$fOutputableCAFLabel $fEqSRTEntry $fOrdSRTEntry$fOutputableSRTEntry cgForeignCall emitCCall emitPrimCallemitForeignCallemitSaveThreadStatesaveThreadStateemitCloseNurseryemitLoadThreadStateloadThreadStateemitOpenNurserycgOpAppshouldInlinePrimOpcgPrimOpcmmLayoutStacksetInfoTableStackMap$fOutputableStackMap$fOutputableStackSlotClsInstLookupResult InstMatch DFunInstTypeVisibleOrphanModulesInstEnvs ie_globalie_local ie_visible is_cls_nmis_tcs is_dfun_nameis_tvsis_clsis_tysis_dfunis_flag is_orphanfuzzyClsInstCmpisOverlappable isOverlapping isIncoherentinstanceDFunIdupdateClsInstDFuninstanceRoughTcs pprInstancepprInstanceHdr pprInstances instanceHeadorphNamesOfClsInst instanceSigmkLocalInstancemkImportedInstance emptyInstEnv instEnvElts instIsVisibleclassInstances memberInstEnvextendInstEnvList extendInstEnvdeleteFromInstEnvdeleteDFunFromInstEnvidenticalClsInstHeadlookupUniqueInstEnv lookupInstEnvinstanceBindFun$fOutputableClsInst$fNamedThingClsInst$fOutputableClsInstEnv $fDataClsInst optCoercion checkAxInstCo EvCallStack EvCsEmpty EvCsPushCall EvTypeableEvTypeableTyConEvTypeableTyAppEvTypeableTrFunEvTypeableTyLitEvExprEvTermEvFunet_tvset_givenet_bindset_bodyEvBindeb_lhseb_rhs eb_is_given EvBindMapev_bind_varenv EvBindsVar CoEvBindsVarebv_uniq ebv_bindsebv_tcvs TcEvBindsEvBinds HsWrapperWpHole WpComposeWpFunWpCastWpEvLamWpEvAppWpTyLamWpTyAppWpLet TcCoercionP TcCoercionR TcCoercionN TcCoercion mkTcReflCo mkTcSymCo mkTcTransCo mkTcNomReflCo mkTcRepReflComkTcTyConAppCo mkTcAppCo mkTcFunCo mkTcAxInstComkTcUnbranchedAxInstCo mkTcForAllCo mkTcForAllCos mkTcNthComkTcLRCo mkTcSubCo maybeTcSubCotcDowngradeRolemkTcAxiomRuleComkTcGReflRightComkTcGReflLeftComkTcCoherenceLeftComkTcCoherenceRightCo mkTcPhantomCo mkTcKindCo mkTcCoVarCotcCoercionKindtcCoercionRole coVarsOfTcCo isTcReflCoisTcReflexiveCo<.>mkWpFunmkWpFuns mkWpCastR mkWpCastN mkWpTyApps mkWpEvApps mkWpEvVarApps mkWpTyLamsmkWpLamsmkWpLet idHsWrapper isIdHsWrappercollectHsWrapBindersisCoEvBindsVaremptyEvBindMap extendEvBindsisEmptyEvBindMap lookupEvBindevBindMapBinds foldEvBindMapfilterEvBindMap evBindVarmkWantedEvBind mkGivenEvBindevId evCoercionevCast evDFunApp evDataConApp evSelector evTypeablemkEvCastmkEvScSelectorsemptyTcEvBindsisEmptyTcEvBindsevTermCoercion_maybeevTermCoercionfindNeededEvVars evVarsOfTerm pprHsWrapperunwrapIPwrapIP$fOutputableEvTypeable$fOutputableEvTerm$fOutputableEvBind$fUniquableEvBindsVar$fOutputableEvBindsVar$fOutputableTcEvBinds$fOutputableEvBindMap$fDataTcEvBinds$fOutputableHsWrapper$fDataHsWrapper$fOutputableEvCallStack$fDataEvTypeable $fDataEvTerm$fDataEvCallStack HsPatSynDirUnidirectionalImplicitBidirectionalExplicitBidirectionalRecordPatSynFieldrecordPatSynSelectorIdrecordPatSynPatVarHsPatSynDetails TcSpecPragSpecPrag LTcSpecPrag TcSpecPragsIsDefaultMethod SpecPrags FixitySig LFixitySigSigTypeSig PatSynSig ClassOpSigIdSigFixSig InlineSigSpecSig SpecInstSig MinimalSig SCCFunSigCompleteMatchSigXSigLSigIPBindXIPBindLIPBind HsIPBindsIPBinds PatSynBindPSBpsb_extpsb_idpsb_argspsb_defpsb_dirABExportABE XABExportabe_extabe_polyabe_monoabe_wrap abe_prags NPatBindTcpat_fvs pat_rhs_tyHsBindLRFunBindPatBindVarBindAbsBinds XHsBindsLRfun_extfun_id fun_matches fun_co_fnfun_tickpat_extpat_lhspat_rhs pat_ticksvar_extvar_idvar_rhs var_inlineabs_extabs_tvs abs_ev_vars abs_exports abs_ev_binds abs_bindsabs_sig LHsBindLR LHsBindsLRHsBindLHsBindsLHsBind NHsValBindsLR NValBinds HsValBindsLRValBinds XValBindsLR HsValBindsLHsLocalBindsLRHsLocalBindsLREmptyLocalBindsXHsLocalBindsLR LHsLocalBinds HsLocalBinds pprLHsBindspprLHsBindsForUser pprDeclListemptyLocalBindsisEmptyLocalBindsTcisEmptyLocalBindsPReqEmptyLocalBindsisEmptyValBindsemptyValBindsInemptyValBindsOut emptyLHsBindsisEmptyLHsBindsplusHsValBinds ppr_monobindpprTicksisEmptyIPBindsPRisEmptyIPBindsTc noSpecPrags hasSpecPragsisDefaultMethod isFixityLSig isTypeLSig isSpecLSigisSpecInstLSig isPragLSig isInlineLSig isMinimalLSig isSCCFunSigisCompleteMatchSighsSigDocppr_sig pragBracketspragSrcBrackets pprVarSigpprSpecpprTcSpecPrags pprMinimalSig$fOutputableIPBind$fOutputableHsIPBinds$fOutputableFixitySig$fOutputableSig$fOutputableTcSpecPrag$fOutputableABExport$fTraversableRecordPatSynField$fFoldableRecordPatSynField$fOutputableRecordPatSynField$fFunctorRecordPatSynField$fOutputablePatSynBind$fOutputableHsBindLR$fOutputableHsValBindsLR$fOutputableHsLocalBindsLR$fDataNPatBindTc$fDataTcSpecPrag$fDataTcSpecPrags$fDataRecordPatSynField HsRecField' HsRecField hsRecFieldLbl hsRecFieldArghsRecPun HsRecUpdFieldLHsRecUpdField LHsRecField LHsRecField' HsRecFieldsrec_flds rec_dotdotHsConPatDetails ListPatTcWildPatVarPatLazyPatAsPatParPatBangPatListPatTuplePatSumPatConPatIn ConPatOutViewPat SplicePatLitPatNPat NPlusKPatSigPatCoPatXPatpat_con pat_arg_tyspat_tvs pat_dicts pat_bindspat_argspat_wrapOutPatInPat hsConPatArgs hsRecFieldshsRecFieldsArgs hsRecFieldSel hsRecFieldIdhsRecUpdFieldRdrhsRecUpdFieldIdhsRecUpdFieldOcc pprParendLPat pprConArgsmkPrefixConPatmkNilPat mkCharLitPat isBangedLPatlooksLazyPatBindisIrrefutableHsPatpatNeedsParensparenthesizePatcollectEvVarsPatscollectEvVarsPat$fOutputableHsRecField'$fOutputableHsRecFields$fOutputablePat$fHasSrcSpanPat$fDataHsRecField'$fFunctorHsRecField'$fFoldableHsRecField'$fTraversableHsRecField'$fFunctorHsRecFields$fFoldableHsRecFields$fTraversableHsRecFields RoleAnnotDeclXRoleAnnotDeclLRoleAnnotDecl AnnProvenanceValueAnnProvenanceTypeAnnProvenanceModuleAnnProvenance HsAnnotationXAnnDeclLAnnDeclWarnDeclWarning XWarnDecl LWarnDecl WarnDeclsWarnings XWarnDeclswd_extwd_src wd_warnings LWarnDeclsDocDeclDocCommentNextDocCommentPrevDocCommentNamedDocGroupLDocDeclRuleBndr RuleBndrSig XRuleBndr LRuleBndrHsRuleRnRuleDeclHsRule XRuleDeclrd_extrd_namerd_actrd_tyvsrd_tmvsrd_lhsrd_rhs LRuleDecl RuleDeclsHsRules XRuleDeclsrds_extrds_src rds_rules LRuleDecls ForeignExportCExport CImportSpec CFunctionCWrapper ForeignImportCImport ForeignDecl XForeignDeclfd_i_extfd_name fd_sig_tyfd_fifd_e_extfd_fe LForeignDecl DefaultDecl XDefaultDecl LDefaultDecl DerivStrategy StockStrategyAnyclassStrategyNewtypeStrategy ViaStrategyLDerivStrategy DerivDecl XDerivDecl deriv_ext deriv_typederiv_strategyderiv_overlap_mode LDerivDeclInstDeclClsInstD DataFamInstD TyFamInstD XInstDecl cid_d_extcid_instdfid_ext dfid_insttfid_ext tfid_inst LInstDecl ClsInstDecl XClsInstDeclcid_ext cid_poly_ty cid_bindscid_sigscid_tyfam_instscid_datafam_instscid_overlap_mode LClsInstDeclFamEqnXFamEqnfeqn_ext feqn_tycon feqn_bndrs feqn_pats feqn_fixityfeqn_rhs FamInstEqn LFamInstEqnDataFamInstDecldfid_eqnLDataFamInstDecl TyFamInstDecltfid_eqnLTyFamInstDecl TyFamDefltEqn TyFamInstEqnHsTyPatsLTyFamDefltEqn LTyFamInstEqnHsConDeclDetailsConDecl ConDeclGADT ConDeclH98XConDecl con_g_ext con_names con_forall con_qvars con_mb_cxtcon_args con_res_tycon_doccon_extcon_name con_ex_tvsLConDecl NewOrDataNewTypeDataTypeHsDerivingClauseXHsDerivingClausederiv_clause_extderiv_clause_strategyderiv_clause_tysLHsDerivingClause HsDeriving HsDataDefn XHsDataDefndd_extdd_NDdd_ctxtdd_cType dd_kindSigdd_cons dd_derivs FamilyInfo DataFamilyOpenTypeFamilyClosedTypeFamilyInjectivityAnnLInjectivityAnn FamilyDecl XFamilyDeclfdExtfdInfofdLNamefdTyVarsfdFixity fdResultSigfdInjectivityAnn LFamilyDeclFamilyResultSigNoSigKindSigTyVarSigXFamilyResultSigLFamilyResultSig TyClGroup XTyClGroup group_ext group_tyclds group_roles group_instds DataDeclRn tcdDataCusktcdFVs LHsFunDepTyClDeclFamDeclSynDeclDataDecl ClassDecl XTyClDecltcdFExttcdFamtcdSExttcdLName tcdTyVars tcdFixitytcdRhstcdDExt tcdDataDefntcdCExttcdCtxttcdFDstcdSigstcdMethstcdATs tcdATDefstcdDocs LTyClDecl SpliceDecl LSpliceDeclHsGroupXHsGrouphs_exths_valds hs_splcds hs_tyclds hs_derivdshs_fixdshs_defdshs_fords hs_warndshs_annds hs_ruledshs_docsHsDeclTyClDInstDDerivDValDSigDDefDForDWarningDAnnDRuleDSpliceDDocD RoleAnnotDXHsDeclLHsDecl emptyRdrGroup emptyRnGrouphsGroupInstDecls appendGroups isDataDecl isSynDecl isClassDecl isFamilyDeclisTypeFamilyDeclisOpenTypeFamilyInfoisClosedTypeFamilyInfoisDataFamilyDecltyFamInstDeclNametyFamInstDeclLName tyClDeclLNametcdNametyClDeclTyVarscountTyClDecls hsDeclHasCuskpprTyClDeclFlavouremptyTyClGrouptyClGroupTyClDeclstyClGroupInstDeclstyClGroupRoleDecls mkTyClGroupfamDeclHasCuskresultVariableNamenewOrDataToFlavour getConNames getConArgshsConDeclArgTyshsConDeclThetapprDataFamInstFlavourpprHsFamInstLHSinstDeclDataFamInstsderivStrategyNameflattenRuleDeclscollectRuleBndrSigTyspprFullRuleName docDeclDocannProvenanceName_mayberoleAnnotDeclName$fOutputableSpliceDecl$fOutputableNewOrData$fOutputableConDecl$fOutputableTyFamInstDecl$fOutputableFamilyInfo$fOutputableFamilyDecl$fOutputableDerivStrategy$fOutputableDerivDecl$fOutputableHsDerivingClause$fOutputableHsDataDefn$fOutputableDataFamInstDecl$fOutputableClsInstDecl$fOutputableInstDecl$fOutputableDefaultDecl$fOutputableForeignImport$fOutputableForeignExport$fOutputableForeignDecl$fOutputableRuleBndr$fOutputableRuleDecl$fOutputableRuleDecls$fOutputableDocDecl$fOutputableTyClDecl$fOutputableWarnDecl$fOutputableWarnDecls$fOutputableAnnDecl$fOutputableRoleAnnotDecl$fOutputableTyClGroup$fOutputableHsGroup$fOutputableHsDecl$fDataDataDeclRn $fEqNewOrData$fDataNewOrData$fDataCImportSpec$fDataForeignImport$fDataForeignExport$fDataHsRuleRn $fDataDocDecl$fDataAnnProvenance$fTraversableAnnProvenance$fFoldableAnnProvenance$fFunctorAnnProvenance HsStmtContextListComp MonadCompDoExprMDoExpr ArrowExpr GhciStmtCtxtPatGuard ParStmtCtxt TransStmtCtxtHsMatchContextFunRhs LambdaExprCaseAltIfAltProcExpr PatBindRhs PatBindGuardsRecUpdStmtCtxt ThPatSplice ThPatQuotemc_fun mc_fixity mc_strictness ArithSeqInfoFromFromThenFromTo FromThenTo HsBracketExpBrPatBrDecBrLDecBrGTypBrVarBrTExpBrPendingTcSpliceUntypedSpliceFlavourUntypedExpSpliceUntypedPatSpliceUntypedTypeSpliceUntypedDeclSplicePendingRnSpliceSplicePointNameHsSplicedThing HsSplicedExpr HsSplicedTy HsSplicedPat DelayedSpliceThModFinalizersSpliceDecoration HasParens HasDollarNoParens HsTypedSpliceHsUntypedSplice HsQuasiQuote HsSpliced HsSplicedTXSpliceApplicativeArgApplicativeArgOneApplicativeArgManyXApplicativeArg ParStmtBlock TransFormThenForm GroupForm RecStmtTc recS_bind_tyrecS_later_rets recS_rec_rets recS_ret_tyStmtLRLastStmtBindStmtApplicativeStmtBodyStmtLetStmtParStmt TransStmtRecStmtXStmtLRtrS_exttrS_form trS_stmts trS_bndrs trS_usingtrS_bytrS_rettrS_bindtrS_fmaprecS_ext recS_stmtsrecS_later_ids recS_rec_ids recS_bind_fn recS_ret_fn recS_mfix_fnGhciStmt GhciLStmt GuardStmt GuardLStmtExprStmt ExprLStmtCmdStmtCmdLStmtStmtLStmtLRLStmtGRHSXGRHSLGRHSXGRHSsgrhssExt grhssGRHSsgrhssLocalBindsXMatchm_extm_ctxtm_patsm_grhssLMatch MatchGroupTc mg_arg_tys mg_res_tyMG XMatchGroupmg_extmg_alts mg_origin HsRecordBindsCmdTopTcHsCmdTop LHsCmdTop HsArrAppTypeHsHigherOrderAppHsFirstOrderApp HsCmdArrApp HsCmdArrFormHsCmdAppHsCmdLamHsCmdPar HsCmdCaseHsCmdIfHsCmdLetHsCmdDo HsCmdWrapXCmdLHsCmdHsTupArgPresentMissingXTupArg LHsTupArg RecordUpdTc rupd_cons rupd_in_tys rupd_out_tys rupd_wrap RecordConTc rcon_con_like rcon_con_exprHsVar HsUnboundVar HsConLikeOutHsRecFld HsOverLabelHsIPVarHsLam HsLamCaseHsApp HsAppTypeOpAppNegAppHsParSectionLSectionR ExplicitTuple ExplicitSumHsCaseHsIf HsMultiIfHsLetHsDo ExplicitList RecordCon RecordUpd ExprWithTySigArithSeqHsSCC HsCoreAnnHsRnBracketOutHsTcBracketOut HsSpliceEHsProcHsStaticHsArrApp HsArrFormHsTick HsBinTick HsTickPragmaEWildPatEAsPatEViewPatELazyPatHsWrapXExprrcon_ext rcon_con_name rcon_fldsrupd_ext rupd_expr rupd_flds UnboundVar OutOfScope TrueExprHoleCmdSyntaxTablesyn_expr syn_arg_wraps syn_res_wrap PostTcTable PostTcExprnoExpr noSyntaxExpr mkSyntaxExprmkRnSyntaxExpr unboundVarOcc tupArgPresent isQuietHsExprpprBinds ppr_lexprppr_exprppr_appspprExternalSrcLocpprDebugParendExprpprParendLExprhsExprNeedsParensparenthesizeHsExprisAtomicHsExprpprLCmdpprCmd isQuietHsCmdppr_lcmdppr_cmd pprCmdArg isInfixMatchisEmptyMatchGroupisSingletonMatchGroupmatchGroupArity hsLMatchPats pprMatchespprMatchpprGRHSspprGRHSpp_rhspprStmtpprTransformStmt pprTransStmtpprBypprDo ppr_do_stmtspprComppprQuals isTypedSplicepprPendingSpliceppr_splice_decl ppr_quasi ppr_spliceisTypedBracket pprHsBracket thBrackets thTyBrackets pp_dotdot isPatSynCtxtisComprehensionContextisMonadFailStmtContextisMonadCompContextmatchSeparatorpprMatchContextpprMatchContextNounpprAStmtContextpprStmtContextmatchContextErrStringpprMatchInCtxt pprStmtInCtxt$fOutputableUnboundVar$fOutputableSpliceDecoration$fDataThModFinalizers$fOutputableHsStmtContext$fOutputableHsMatchContext$fOutputableArithSeqInfo$fOutputablePendingTcSplice$fOutputablePendingRnSplice$fOutputableHsBracket$fOutputableHsSplice$fOutputableHsSplicedThing$fDataDelayedSplice$fOutputableStmtLR$fOutputableParStmtBlock$fOutputableMatch$fOutputableHsCmdTop$fOutputableHsCmd$fOutputableHsExpr$fOutputableSyntaxExpr$fDataUnboundVar$fDataRecordUpdTc$fDataHsArrAppType$fDataMatchGroupTc$fDataTransForm$fDataSpliceDecoration$fEqSpliceDecoration$fShowSpliceDecoration$fDataUntypedSpliceFlavour$fFunctorHsStmtContext$fFunctorHsMatchContext$fDataHsStmtContext$fDataHsMatchContextmkHsPar mkSimpleMatchunguardedGRHSs unguardedRHS mkMatchGroupmkHsApp mkHsAppType mkHsAppTypesmkHsLammkHsLams mkHsCaseAlt nlHsTyApp nlHsTyAppsmkLHsParmkParPatnlParPat mkHsIntegralmkHsFractional mkHsIsStringmkHsDomkHsCompmkHsIfmkNPat mkNPlusKPatemptyTransStmtmkTransformStmtmkTransformByStmtmkGroupUsingStmtmkGroupByUsingStmt mkLastStmt mkBodyStmt mkBindStmt mkTcBindStmt unitRecStmtTc emptyRecStmtemptyRecStmtNameemptyRecStmtId mkRecStmt mkHsOpAppmkUntypedSplice mkHsSpliceE mkHsSpliceTE mkHsSpliceTymkHsQuasiQuoteunqualQuasiQuote mkHsStringmkHsStringPrimLituserHsLTyVarBndrsuserHsTyVarBndrsnlHsVar nlHsDataConnlHsLit nlHsIntLitnlVarPatnlLitPatnlHsAppnlHsSyntaxAppsnlHsApps nlHsVarApps nlConVarPatnlConVarPatName nlInfixConPatnlConPat nlConPatNamenlNullaryConPat nlWildConPat nlWildPat nlWildPatNamenlHsDo nlHsOpAppnlHsLamnlHsParnlHsIfnlHsCasenlList nlHsAppTy nlHsTyVar nlHsFunTy nlHsParTy nlHsTyConApp nlHsAppKindTymkLHsTupleExpr mkLHsVarTuple nlTuplePat missingTupArgmkBigLHsVarTup mkBigLHsTupmkBigLHsVarPatTupmkBigLHsPatTup mkChunkifiedchunkify mkLHsSigTypemkLHsSigWcType mkHsSigEnv mkClassOpSigs typeToLHsType mkLHsWrapmkHsWrap mkHsWrapCo mkHsWrapCoR mkLHsWrapCo mkHsCmdWrap mkLHsCmdWrap mkHsWrapPat mkHsWrapPatCo mkHsDictLet mkFunBind mkTopFunBind mkHsVarBind mkVarBind mkPatSynBindisInfixFunBindmk_easy_FunBindmkPrefixFunRhsmkMatchisUnliftedHsBindisBangedHsBindcollectLocalBinderscollectHsIdBinderscollectHsValBinderscollectHsBindBinderscollectHsBindsBinderscollectHsBindListBinderscollectMethodBinderscollectLStmtsBinderscollectStmtsBinderscollectLStmtBinderscollectStmtBinderscollectPatBinderscollectPatsBindershsGroupBindershsTyClForeignBindershsLTyClDeclBindershsForeignDeclsBindershsPatSynSelectorsgetPatSynBindshsDataFamInstBinderslStmtsImplicitshsValBindsImplicits lPatImplicits$fEqIE$fEqIE0$fEqIE1$fDataIE $fDataIE0 $fDataIE1$fDataImportDecl$fDataImportDecl0$fDataImportDecl1$fDataAmbiguousFieldOcc$fDataAmbiguousFieldOcc0$fDataAmbiguousFieldOcc1$fDataFieldOcc$fDataFieldOcc0$fDataFieldOcc1$fDataConDeclField$fDataConDeclField0$fDataConDeclField1 $fDataHsArg $fDataHsArg0 $fDataHsArg1 $fDataHsType $fDataHsType0 $fDataHsType1$fDataHsTyVarBndr$fDataHsTyVarBndr0$fDataHsTyVarBndr1$fDataHsWildCardBndrs$fDataHsWildCardBndrs0$fDataHsWildCardBndrs1$fDataHsImplicitBndrs$fDataHsImplicitBndrs0$fDataHsImplicitBndrs1$fDataLHsQTyVars$fDataLHsQTyVars0$fDataLHsQTyVars1$fDataHsRecFields$fDataHsRecFields0$fDataHsRecFields1$fDataListPatTc $fDataPat $fDataPat0 $fDataPat1$fDataHsOverLit$fDataHsOverLit0$fDataHsOverLit1 $fDataHsLit $fDataHsLit0 $fDataHsLit1$fDataPendingTcSplice$fDataPendingRnSplice$fDataCmdTopTc$fDataRecordConTc$fDataArithSeqInfo$fDataArithSeqInfo0$fDataArithSeqInfo1$fDataHsBracket$fDataHsBracket0$fDataHsBracket1$fDataHsSplicedThing$fDataHsSplicedThing0$fDataHsSplicedThing1$fDataHsSplice$fDataHsSplice0$fDataHsSplice1$fDataApplicativeArg$fDataApplicativeArg0$fDataApplicativeArg1$fDataParStmtBlock$fDataParStmtBlock0$fDataParStmtBlock1$fDataParStmtBlock2$fDataRecStmtTc $fDataStmtLR $fDataStmtLR0 $fDataStmtLR1 $fDataStmtLR2 $fDataGRHS $fDataGRHS0 $fDataGRHS1 $fDataGRHSs $fDataGRHSs0 $fDataGRHSs1 $fDataMatch $fDataMatch0 $fDataMatch1$fDataMatchGroup$fDataMatchGroup0$fDataMatchGroup1$fDataHsCmdTop$fDataHsCmdTop0$fDataHsCmdTop1 $fDataHsCmd $fDataHsCmd0 $fDataHsCmd1$fDataHsTupArg$fDataHsTupArg0$fDataHsTupArg1 $fDataHsExpr $fDataHsExpr0 $fDataHsExpr1$fDataSyntaxExpr$fDataSyntaxExpr0$fDataSyntaxExpr1$fDataRoleAnnotDecl$fDataRoleAnnotDecl0$fDataRoleAnnotDecl1 $fDataAnnDecl$fDataAnnDecl0$fDataAnnDecl1$fDataWarnDecl$fDataWarnDecl0$fDataWarnDecl1$fDataWarnDecls$fDataWarnDecls0$fDataWarnDecls1$fDataRuleBndr$fDataRuleBndr0$fDataRuleBndr1$fDataRuleDecl$fDataRuleDecl0$fDataRuleDecl1$fDataRuleDecls$fDataRuleDecls0$fDataRuleDecls1$fDataForeignDecl$fDataForeignDecl0$fDataForeignDecl1$fDataDefaultDecl$fDataDefaultDecl0$fDataDefaultDecl1$fDataDerivStrategy$fDataDerivStrategy0$fDataDerivStrategy1$fDataDerivDecl$fDataDerivDecl0$fDataDerivDecl1$fDataInstDecl$fDataInstDecl0$fDataInstDecl1$fDataClsInstDecl$fDataClsInstDecl0$fDataClsInstDecl1 $fDataFamEqn $fDataFamEqn0 $fDataFamEqn1$fDataDataFamInstDecl$fDataDataFamInstDecl0$fDataDataFamInstDecl1$fDataTyFamInstDecl$fDataTyFamInstDecl0$fDataTyFamInstDecl1 $fDataConDecl$fDataConDecl0$fDataConDecl1$fDataHsDerivingClause$fDataHsDerivingClause0$fDataHsDerivingClause1$fDataHsDataDefn$fDataHsDataDefn0$fDataHsDataDefn1$fDataFamilyInfo$fDataFamilyInfo0$fDataFamilyInfo1$fDataInjectivityAnn$fDataInjectivityAnn0$fDataInjectivityAnn1$fDataFamilyDecl$fDataFamilyDecl0$fDataFamilyDecl1$fDataFamilyResultSig$fDataFamilyResultSig0$fDataFamilyResultSig1$fDataTyClGroup$fDataTyClGroup0$fDataTyClGroup1$fDataTyClDecl$fDataTyClDecl0$fDataTyClDecl1$fDataSpliceDecl$fDataSpliceDecl0$fDataSpliceDecl1 $fDataHsGroup$fDataHsGroup0$fDataHsGroup1 $fDataHsDecl $fDataHsDecl0 $fDataHsDecl1$fDataHsPatSynDir$fDataHsPatSynDir0$fDataHsPatSynDir1$fDataFixitySig$fDataFixitySig0$fDataFixitySig1 $fDataSig $fDataSig0 $fDataSig1 $fDataIPBind $fDataIPBind0 $fDataIPBind1$fDataHsIPBinds$fDataHsIPBinds0$fDataHsIPBinds1$fDataPatSynBind$fDataPatSynBind0$fDataPatSynBind1$fDataPatSynBind2$fDataABExport$fDataABExport0$fDataABExport1$fDataHsBindLR$fDataHsBindLR0$fDataHsBindLR1$fDataHsBindLR2$fDataNHsValBindsLR$fDataNHsValBindsLR0$fDataNHsValBindsLR1$fDataHsValBindsLR$fDataHsValBindsLR0$fDataHsValBindsLR1$fDataHsValBindsLR2$fDataHsLocalBindsLR$fDataHsLocalBindsLR0$fDataHsLocalBindsLR1$fDataHsLocalBindsLR2HsModule hsmodName hsmodExports hsmodImports hsmodDeclshsmodDeprecMessagehsmodHaddockModHeader$fOutputableHsModule$fDataHsModule$fDataHsModule0$fDataHsModule1 SumOrTupleSumTuple ImpExpQcSpec ImpExpQcName ImpExpQcTypeImpExpQcWildcard ImpExpSubSpec ImpExpAbs ImpExpAll ImpExpList ImpExpAllWithTyElTyElOprTyElOpd TyElKindApp TyElTildeTyElBangTyElUnpackedness TyElDocPrev RuleTyTmVar LRuleTyTmVarmkTyClDmkInstD mkClassDecl mkATDefaultmkTyData mkTySynonymmkTyFamInstEqn mkDataFamInst mkTyFamInst mkFamDecl mkSpliceDeclmkRoleAnnotDecl cvTopDecls cvBindGroupcvBindsAndSigsmkPatSynMatchGroup mkConDeclH98 mkGadtDeclsetRdrNameSpace filterCTuple mkRuleBndrsmkRuleTyVarBndrscheckRuleTyVarBndrNamescheckRecordSyntaxcheckEmptyGADTscheckBlockArguments checkContext checkPattern checkPatternsplaceHolderPunRhsbang_RDR isBangRdr checkValDefcheckValSigLhscheckDoAndIfThenElsemergeOps mergeDataConcheckMonadComp checkCommand checkPrecPmkRecConstrOrUpdatemkRdrRecordUpdmkRdrRecordConmkInlinePragmamkImport parseCImportmkExport mkExtNamemkModuleImpExp mkTypeImpExpcheckImportSpecmkImpExpSubSpecwarnStarIsType failOpFewArgsparseErrorSDoc hintBangPat mkSumOrTuplestarSym forallSym$fOutputableTyEl ComplexEqSimpleEqPmLitPmSLitPmOLit PmExprVar PmExprCon PmExprLitPmExprEq PmExprOthereqPmLit toComplex truePmExpr falsePmExprisNotPmExprOther isTruePmExpr isFalsePmExprsubstComplexEqlhsExprToPmExprhsExprToPmExpr filterComplex runPmPprMpprPmExprWithParens$fOutputablePmLit$fOutputablePmExprCompleteMatchMap CompleteMatchcompleteMatchConLikescompleteMatchTyConUnlinkedDotODotADotDLLBCOsLinkableLM linkableTimelinkableModulelinkableUnlinkedHsParsedModule hpm_module hpm_src_fileshpm_annotationsIfaceTrustInfo IsSafeImport AnyHpcUsageHpcInfo NoHpcInfohpcInfoTickCount hpcInfoHashhpcUsedSourceModifiedSourceUnmodifiedSourceUnmodifiedAndStable ModSummaryms_mod ms_hsc_src ms_location ms_hs_date ms_obj_date ms_iface_date ms_hie_date ms_srcimpsms_textual_imps ms_parsed_mod ms_hspp_file ms_hspp_opts ms_hspp_buf ModuleGraphEpsStats n_ifaces_in n_decls_in n_decls_out n_rules_in n_rules_out n_insts_in n_insts_outExternalPackageStateEPS eps_is_booteps_PITeps_free_holeseps_PTE eps_inst_enveps_fam_inst_env eps_rule_base eps_ann_enveps_complete_matcheseps_mod_fam_inst_env eps_statsPackageCompleteMatchMapPackageFamInstEnvPackageInstEnvPackageRuleBasePackageTypeEnvUsageUsagePackageModuleUsageHomeModule UsageFileUsageMergedRequirementusg_mod usg_mod_hashusg_safe usg_mod_name usg_entities usg_exports usg_file_path usg_file_hash DependenciesDepsdep_modsdep_pkgs dep_orphs dep_finsts dep_plginsIsBootInterfaceWhetherHasOrphansFixItem FixityEnv NoWarningsWarnAllWarnSome MonadThings lookupThinglookupId lookupDataCon lookupTyConTypeEnvInteractiveImportIIDeclIIModuleInteractiveContext ic_dflags ic_mod_index ic_imports ic_tythings ic_rn_gbl_env ic_instances ic_fix_env ic_default ic_resumeic_monad ic_int_printic_cwdSptEntry ForeignStubsNoStubsCgGuts cg_module cg_tyconscg_binds cg_foreigncg_foreign_files cg_dep_pkgs cg_hpc_info cg_modBreakscg_spt_entriesModGuts mg_module mg_hsc_srcmg_loc mg_exportsmg_deps mg_usages mg_used_th mg_rdr_env mg_fix_envmg_tcsmg_insts mg_fam_insts mg_patsynsmg_rulesmg_binds mg_foreignmg_foreign_filesmg_warnsmg_annsmg_complete_sigs mg_hpc_info mg_modBreaks mg_inst_envmg_fam_inst_envmg_safe_haskell mg_trust_pkg mg_doc_hdr mg_decl_docs mg_arg_docsImportedModsValimv_nameimv_span imv_is_safe imv_is_hidingimv_all_exports imv_qualified ImportedByImportedByUserImportedBySystem ImportedMods ModDetails md_exportsmd_typesmd_insts md_fam_instsmd_rulesmd_annsmd_complete_sigs IfaceExportModIface mi_module mi_sig_of mi_iface_hash mi_mod_hash mi_flag_hash mi_opt_hash mi_hpc_hashmi_plugin_hash mi_orphan mi_finsts mi_hsc_srcmi_deps mi_usages mi_exports mi_exp_hash mi_used_th mi_fixitiesmi_warnsmi_annsmi_decls mi_globalsmi_insts mi_fam_instsmi_rulesmi_orphan_hash mi_warn_fn mi_fix_fn mi_hash_fnmi_hpcmi_trust mi_trust_pkgmi_complete_sigs mi_doc_hdr mi_decl_docs mi_arg_docs FindResultFound NoPackage FoundMultipleNotFoundfr_pathsfr_pkgfr_mods_hiddenfr_pkgs_hidden fr_unusablesfr_suggestionsInstalledFindResultInstalledFoundInstalledNoPackageInstalledNotFound FinderCacheMetaHook MetaResult MetaRequestMetaEMetaPMetaTMetaDMetaAW HomeModInfohm_iface hm_details hm_linkablePackageIfaceTableHomePackageTableInputFileBufferTargetId TargetModule TargetFileTargettargetIdtargetAllowObjCodetargetContentsIServ iservPipe iservProcessiservLookupSymbolCacheiservPendingFreesHscEnv hsc_dflags hsc_targets hsc_mod_graphhsc_IChsc_HPThsc_EPShsc_NChsc_FChsc_type_env_var hsc_iserv GhcApiError SourceError HscStatusHscNotGeneratingCode HscUpToDate HscUpdateBoot HscUpdateSig HscRecomprunHscmkInteractiveHscEnvrunInteractiveHscmkSrcErrsrcErrorMessagesmkApiErr throwErrors throwOneErrorhandleSourceErrorprintOrThrowWarningshandleFlagWarningshscEPS pprTarget pprTargetIdemptyHomePackageTableemptyPackageIfaceTablepprHPT lookupHptlookupHptDirectlyeltsHpt filterHptallHptmapHpt delFromHptaddToHpt addListToHpt listToHptlookupHptByModulelookupIfaceByModulehptCompleteSigs hptInstanceshptRules metaRequestE metaRequestP metaRequestT metaRequestD metaRequestAWprepareAnnotationsmi_bootmi_fixmi_semantic_module mi_free_holesrenameFreeHoles emptyModIfacemkIfaceHashCacheemptyModDetailsimportedByUser appendStubCemptyInteractiveContexticInteractiveModule icInScopeTTs icPrintUnqualextendInteractiveContextextendInteractiveContextWithIdssetInteractivePackagesetInteractivePrintNameicExtendGblRdrEnvsubstInteractiveContextmkPrintUnqualified mkQualModule mkQualPackagepkgQualimplicitTyThingsimplicitClassThingsimplicitTyConThingsisImplicitTyThingtyThingParent_maybetyThingsTyCoVarstyThingAvailInfo emptyTypeEnv typeEnvElts typeEnvTyConstypeEnvCoAxioms typeEnvIdstypeEnvPatSynstypeEnvDataConstypeEnvClasses mkTypeEnvmkTypeEnvWithImplicitstypeEnvFromEntities lookupTypeEnv extendTypeEnvextendTypeEnvListextendTypeEnvWithIds plusTypeEnv lookupTypelookupTypeHscEnv tyThingTyContyThingCoAxiomtyThingDataContyThingConLike tyThingIdmkIfaceWarnCacheemptyIfaceWarnCache plusWarnsmkIfaceFixCacheemptyFixityEnv lookupFixitynoDependencies addEpsInStats updNameCachemkSOName mkHsSONamesoExtneedsTemplateHaskellOrQQmapMG mgBootModulesmgModSummaries mgElemModulemgLookupModuleemptyMGisTemplateHaskellOrQQNonBootextendMG mkModuleGraphms_installed_mod ms_mod_namems_imps msHsFilePath msHiFilePath msObjFilePath isBootSummary showModMsg emptyHpcInfo isHpcUsed getSafeMode setSafeModenoIfaceTrustInfotrustInfoToNumnumToTrustInfoisObjectLinkable linkableObjsisObjectisInterpretable nameOfObjectbyteCodeOfObjectmkCompleteMatchMapextendCompleteMatchMap$fExceptionSourceError$fShowSourceError$fExceptionGhcApiError$fShowGhcApiError$fOutputableTargetId$fOutputableTarget$fOutputableSptEntry$fOutputableInteractiveImport$fBinaryWarnings$fOutputableFixItem$fBinaryDependencies $fBinaryUsage$fBinaryIfaceTrustInfo$fOutputableIfaceTrustInfo$fBinaryModIface$fOutputableModSummary$fOutputableUnlinked$fOutputableLinkable$fOutputableCompleteMatch$fHasDynFlagsHsc $fMonadIOHsc $fMonadHsc$fApplicativeHsc $fFunctorHsc $fEqTargetId $fEqWarnings$fEqDependencies $fEqUsage RoleAnnotEnvTcPluginResultTcPluginContradiction TcPluginOkTcPlugin tcPluginInit tcPluginSolve tcPluginStopTcPluginSolver TypeOrKind TypeLevel KindLevelCtOrigin GivenOrigin OccurrenceOfOccurrenceOfRecSel AppOriginSpecPragOrigin TypeEqOrigin KindEqOrigin IPOccOriginOverLabelOrigin LiteralOrigin NegateOriginArithSeqOriginAssocFamPatOrigin SectionOrigin TupleOrigin ExprSigOrigin PatSigOrigin PatOriginProvCtxtOriginRecordUpdOrigin ViewPatOriginScOriginDerivClauseOrigin DerivOriginDCDerivOriginCoerceStandAloneDerivOrigin DefaultOriginDoOrigin DoPatOrigin MCompOriginMCompPatOriginIfOrigin ProcOrigin AnnOrigin FunDepOrigin1 FunDepOrigin2 HoleOriginUnboundOccurrenceOf ListOrigin StaticOriginFailablePatternShouldn'tHappenOriginInstProvidedOrigin uo_actual uo_expecteduo_thing uo_visible SkolemInfoSigSkol SigTypeSkol ForAllSkol DerivSkolInstSkolInstSC FamInstSkolPatSkol ArrowSkolIPSkolRuleSkol InferSkol BracketSkolUnifyForAllSkol TyConSkol DataConSkol ReifySkol QuantCtxtSkolUnkSkolCtLoc ctl_originctl_env ctl_t_or_k ctl_depth SubGoalDepth CtFlavourRole ShadowInfoWDerivWOnly CtFlavourGivenWantedDerived CtEvidenceCtGivenCtWanted CtDerived ctev_pred ctev_evarctev_loc ctev_dest ctev_noshTcEvDest EvVarDestHoleDest ImplicStatus IC_Solved IC_InsolubleIC_BadTelescope IC_Unsolvedics_dead ImplicationImplicic_tclvlic_skolsic_info ic_telescopeic_given ic_no_eqsic_env ic_wantedic_binds ic_need_inner ic_need_outer ic_statusWantedConstraintsWC wc_simplewc_implHoleExprHoleTypeHoleQCInstQCIqci_evqci_tvsqci_pred qci_pend_scCtCDictCan CIrredCanCTyEqCan CFunEqCan CNonCanonicalCHoleCan CQuantCancc_evcc_class cc_tyargs cc_pend_sccc_insolcc_tyvarcc_rhs cc_eq_relcc_funcc_fskcc_holeCtsXi TcPatSynInfoTPSI patsig_namepatsig_implicit_bndrspatsig_univ_bndrs patsig_reqpatsig_ex_bndrs patsig_provpatsig_body_ty TcIdSigInstTISI sig_inst_sigsig_inst_skolssig_inst_theta sig_inst_tau sig_inst_wcs sig_inst_wcx TcIdSigInfo CompleteSig PartialSigsig_bndrsig_ctxtsig_loc psig_name psig_hs_ty TcSigInfoTcIdSig TcPatSynSigTcSigFun WhereFrom ImportByUserImportBySystemImportByPlugin ImportAvailsimp_mods imp_dep_pkgsimp_trust_pkgsimp_trust_own_pkg imp_orphs imp_finsts ClosedTypeIdRhsNames IsGroupClosed IdBindingInfo NotLetBound ClosedLet NonClosedLet PromotionErrTyConPEClassPE FamDataConPEConstrainedDataConPEPatSynPE PatSynExPE RecDataConPE NoDataKindsTC NoDataKindsDC TcTyThingAGlobalATcIdATyVarATcTyCon APromotionErrtct_idtct_info ArrowCtxt NoArrowCtxtThLevel PendingStuffRnPendingUntypedRnPendingTyped TcPendingThStageSplice RunSpliceCompBrack SpliceTypeTypedUntypedTcBinderTcIdBndrTcIdBndr_ExpTypeTcTvBndr TcBinderStackTcIdSetTcIdTcRef TcTypeEnvErrCtxttcl_loctcl_ctxt tcl_tclvl tcl_th_ctxt tcl_th_bndrstcl_arrow_ctxttcl_rdrtcl_env tcl_bndrs tcl_tyvarstcl_lietcl_errs SelfBootInfo NoSelfBootSelfBootsb_mdssb_tcs RecFieldEnvtcg_modtcg_semantic_modtcg_src tcg_rdr_env tcg_default tcg_fix_env tcg_field_env tcg_type_env tcg_inst_envtcg_fam_inst_env tcg_ann_env tcg_exports tcg_importstcg_dus tcg_used_grestcg_keep tcg_th_usedtcg_th_splice_usedtcg_th_top_level_locs tcg_dfun_n tcg_mergedtcg_rn_exportstcg_rn_imports tcg_rn_declstcg_dependent_filestcg_th_topdeclstcg_th_foreign_filestcg_th_topnamestcg_th_modfinalizerstcg_th_coreplugins tcg_th_statetcg_th_remote_state tcg_ev_binds tcg_tr_module tcg_bindstcg_sigs tcg_imp_specs tcg_warnstcg_annstcg_tcs tcg_insts tcg_fam_insts tcg_rules tcg_fords tcg_patsyns tcg_doc_hdrtcg_hpc tcg_self_boottcg_main tcg_safeInfertcg_tc_plugins tcg_top_loc tcg_static_wctcg_complete_matches tcg_cc_stFrontendResultFrontendTypecheck DsMetaValDsBoundDsSplice DsMetaEnvDsLclEnvdsl_metadsl_loc dsl_dicts dsl_tm_cs dsl_pm_iterDsGblEnvds_modds_fam_inst_env ds_unqualds_msgs ds_if_envds_complete_matchesds_cc_stIfLclEnvif_modif_bootif_loc if_nsubstif_implicits_env if_tv_env if_id_envIfGblEnvif_doc if_rec_typesenv_topenv_usenv_gblenv_lclTcMRnMDsMIfLIfGIfMTcRnTcRnIf ns_mod_name ns_exportsns_maptcVisibleOrphanModsremoveBindingShadowingtopStage topAnnStagetopSpliceStageimpLevel outerLevelthLevelpprTcTyThingCategory pprPECategory mkModDeps modDepsEltsemptyImportAvailsplusImportAvails isPartialSighasCompleteSigholeOccmkNonCanonicalmkNonCanonicalCt mkIrredCt mkInsolubleCtmkGivens ctEvidencectLocsetCtLocctOriginctPredctEvIdmkTcEqPredLikeEv ctFlavourctEqRel tyCoVarsOfCttyCoVarsOfCtList tyCoVarsOfCtstyCoVarsOfCtsList tyCoVarsOfWCtyCoVarsOfWCList dropDerivedWCdropDerivedSimples isDroppableCtarisesFromGivens isGivenLoc isWantedCt isGivenCt isDerivedCt isCTyEqCanisCDictCan_MaybeisCFunEqCan_maybe isCFunEqCanisCNonCanonicalisHoleCtisOutOfScopeCt isExprHoleCt isTypeHoleCtgetUserTypeErrorMsgisUserTypeErrorCtisPendingScDictisPendingScInstsuperClassesMightHelpgetPendingWantedScssingleCtandCts listToCtsctsEltsconsCtssnocCts extendCtsList andManyCtsemptyCts isEmptyCtspprCtsemptyWC mkSimpleWC mkImplicWC isEmptyWC isSolvedWCandWCunionsWC addSimples addImplics addInsolsinsolublesOnlyisSolvedStatusisInsolubleStatusinsolubleImplic insolubleWC insolubleCt insolubleEqCtnewImplicationimplicationPrototype implicLclEnvimplicDynFlags pprEvVars pprEvVarThetapprEvVarWithTypewrapTypeWithImplicationwrapTypectEvPredctEvLoc ctEvOrigin ctEvEqRelctEvRolectEvTermctEvExpr ctEvCoercionctEvEvIdisWantedisGiven isDerivedisGivenOrWDeriv ctEvFlavourctEvFlavourRole ctFlavourRole eqCanRewriteeqCanRewriteFReqMayRewriteFRfunEqCanDischargefunEqCanDischargeFeqCanDischargeFRinitialSubGoalDepthbumpSubGoalDepthmaxSubGoalDepthsubGoalDepthExceeded mkKindLoc toKindLoc mkGivenLocctLocEnv ctLocLevel ctLocDepth ctLocOrigin ctLocSpanctLocTypeOrKind_maybe setCtLocSpanbumpCtLocDepthsetCtLocOriginupdateCtLocOrigin setCtLocEnv pushErrCtxtpushErrCtxtSameOrigin pprSkolInfopprSigSkolInfo isTypeLevel isKindLevelisVisibleOrigintoInvisibleOrigin lexprCtOrigin exprCtOriginmatchesCtOrigin grhssCtOriginpprCtLoc pprCtOrigin runTcPluginMunsafeTcPluginTcMgetEvBindsTcPluginMmkRoleAnnotEnvemptyRoleAnnotEnvlookupRoleAnnot getRoleAnnots$fContainsModuleEnv$fContainsDynFlagsEnv$fContainsModuleDsGblEnv$fHasOccNameTcBinder$fOutputableTcBinder$fOutputablePromotionErr$fOutputableIdBindingInfo$fOutputableTcTyThing$fOutputableWhereFrom$fOutputableTcIdSigInfo$fOutputableTcIdSigInst$fOutputableTcPatSynInfo$fOutputableTcSigInfo$fOutputableHole$fOutputableImplicStatus$fOutputableTcEvDest$fOutputableCtFlavour$fOutputableSkolemInfo$fOutputableTypeOrKind$fMonadFailTcPluginM$fMonadTcPluginM$fApplicativeTcPluginM$fFunctorTcPluginM$fOutputableCtOrigin$fOutputableCtEvidence$fOutputableImplication$fOutputableWantedConstraints$fOutputableCt$fOutputableQCInst$fOutputableThStage$fContainsModuleTcGblEnv$fEqShadowInfo $fEqCtFlavour$fEqSubGoalDepth$fOrdSubGoalDepth$fOutputableSubGoalDepth$fEqTypeOrKind unifyKind unifyType typeNatTyConstypeNatAddTyContypeNatSubTyContypeNatMulTyContypeNatDivTyContypeNatModTyContypeNatExpTyContypeNatLogTyContypeNatLeqTyContypeNatCmpTyContypeSymbolCmpTyContypeSymbolAppendTyContypeNatCoAxiomRulesfinishTHrunRemoteModFinalizersrunQuasilookupThName_mayberunMetaDrunMetaTrunMetaPrunMetaEtcTopSpliceExpr runAnnotation runTopSplicetcTypedBrackettcUntypedBracket tcSpliceExprbadReexportedBootThingmissingBootThingcheckBootDeclM tcMatchesFun tcGRHSsPatfindValidHoleFits tcCheckId tcSyntaxOpGen tcSyntaxOp tcInferRho tcInferSigmatcInferSigmaNC tcMonoExpr tcMonoExprNC tcPolyExpr tcInitTidyEnv rnMbLHsDocrnLHsDocrnHsDocrnStmtsrnLExprContainsCostCentreStateextractCostCentreStateinitTc initTcWithGblinitTcInteractive initTcRnIf discardResult getTopEnv updTopEnv getGblEnv updGblEnv setGblEnv getLclEnv updLclEnv setLclEnvgetEnvssetEnvsxoptMdoptMgoptMwoptMsetXOptM unsetXOptM unsetGOptM unsetWOptM whenDOptM whenGOptM whenWOptM whenXOptM unlessXOptM getGhcModewithDoDynamicToo getEpsVargetEps updateEps updateEps_getHpt getEpsAndHpt withException newArrowScopeescapeArrowScopenewUniqueSupplycloneLocalNamenewName newNameAt newSysName newSysLocalIdnewSysLocalIdsnewTcRef readTcRef writeTcRefupdTcReftraceTctraceRn traceOptTcRn traceTcRntraceTcRnForUsertraceTcRnWithStylegetPrintUnqualifiedprintForUserTcRntraceIf traceHiDiffs traceOptIf getIsGHCi getGHCiMonadgetInteractivePrintNametcIsHsBootOrSigtcIsHsigtcSelfBootInfogetGlobalRdrEnv getRdrEnvs getImports getFixityEnvextendFixityEnvgetRecFieldEnvgetDeclaredDefaultTysaddDependentFiles getSrcSpanM setSrcSpanaddLocMwrapLocM wrapLocFstM wrapLocSndM wrapLocM_ getErrsVar setErrsVarfailWithfailAtaddErrAtaddErrscheckErr addMessagesdiscardWarnings mkLongErrAt mkErrDocAt addLongErrAt reportErrors reportError reportWarning checkNoErrs whenNoErrsifErrsM failIfErrsMcheckTHfailTH getErrCtxt setErrCtxt addErrCtxt addErrCtxtMaddLandmarkErrCtxtaddLandmarkErrCtxtMupdCtxt popErrCtxt getCtLocM setCtLocM askNoErrstryCaptureConstraintscaptureConstraintsattemptMrecoverMmapAndRecoverM mapAndReportMfoldAndRecoverMtryTc discardErrstryTcDiscardingErrsaddErrTc addErrsTc addErrTcMmkErrTcMmkErrTc failWithTc failWithTcMcheckTccheckTcMfailIfTc failIfTcM warnIfFlagwarnIfwarnTcwarnTcM addWarnTc addWarnTcM addWarnAtadd_warn mkErrInfodebugTc addTopEvBinds newTcEvBindsnewNoTcEvBindscloneEvBindsVargetTcEvTyCoVarsgetTcEvBindsMapsetTcEvBindsMap addTcEvBindchooseUniqueOccTcgetConstraintVarsetConstraintVaremitStaticConstraintsemitConstraints emitSimple emitSimplesemitImplicationemitImplications emitInsolublediscardConstraintspushLevelAndCaptureConstraints pushTcLevelM_ pushTcLevelM pushTcLevelsM getTcLevel setTcLevelisTouchableTcM getLclTypeEnv setLclTypeEnvtraceTcConstraintsemitWildCardHoleConstraints recordThUserecordThSpliceUserecordTopLevelSpliceLocgetTopLevelSpliceLocs keepAlivegetStagegetStageAndBindLevelsetStageaddModFinalizersWithLclEnvrecordUnsafeInfer finalSafeModefixSafeInstancesgetLocalRdrEnvsetLocalRdrEnv mkIfLclEnv initIfaceTcRn initIfaceLoadinitIfaceCheck initIfaceLclinitIfaceLclWithSubst getIfModulefailIfM forkM_maybeforkMsetImplicitEnvM getCCIndexM$fMonadUniqueIOEnv!$fContainsCostCentreStateDsGblEnv!$fContainsCostCentreStateTcGblEnvnonBidirectionalErrtcPatSynBuilderBind tcPatSynDeclCandidatesQTvsDVdv_kvsdv_tvsdv_cvsnewMetaKindVarnewMetaKindVars newEvVarsnewEvVar newWanted newWanteds newHoleCt cloneWantedcloneWC emitWantedemitDerivedEqs emitWantedEqemitWantedEvVaremitWantedEvVarsnewDictnewCoercionHolefillCoercionHoleisFilledCoercionHoleunpackCoercionHoleunpackCoercionHole_maybecheckCoercionHolenewInferExpTypeNoInstnewInferExpTypeInstnewInferExpTypereadExpType_maybe readExpTypecheckingExpType_maybecheckingExpType tauifyExpType expTypeToTypeinferResultToType tcInstTypetcSkolDFunTypetcSuperSkolTyVarstcInstSkolTyVarstcInstSkolTyVarsXtcInstSuperSkolTyVarsXtcInstSkolTyVarsAtfreshenTyVarBndrsfreshenCoVarBndrsX newTyVarTyVarnewSkolemTyVar newFskTyVar newFmvTyVarnewMetaDetailscloneMetaTyVar readMetaTyVarisFilledMetaTyVar_maybeisFilledMetaTyVarisUnfilledMetaTyVarwriteMetaTyVarwriteMetaTyVarRef newTauTyVar newFlexiTyVarnewFlexiTyVarTynewFlexiTyVarTysnewOpenTypeKindnewOpenFlexiTyVarTy newMetaTyVarsnewMetaTyVarsX newMetaTyVarXnewMetaTyVarTyVarsnewMetaTyVarTyVarX newWildCardXnewMetaTyVarTyAtLevelcandidateKindVarscandidateQTyVarsOfTypecandidateQTyVarsOfTypescandidateQTyVarsOfKindcandidateQTyVarsOfKinds delCandidatesquantifyTyVarsskolemiseQuantifiedTyVar defaultTyVartcGetGlobalTyCoVarszonkTcTypeAndFVzonkTyCoVarsAndFVzonkTyCoVarsAndFVList zonkTcTyVarszonkTyCoVarKind zonkTcTypes zonkEvVarzonkWC zonkSimpleszonkCtzonkSkolemInfozonkId zonkCoVar zonkTcTypezonkCozonkTcTyCoVarBndrzonkTyConBinders zonkTcTyVarzonkTcTyVarToTyVarzonkTyVarTyVarPairszonkTidyTcTypezonkTidyTcTypeszonkTidyOrigintidyCt tidyEvVartidySkolemInfoensureNotLevPolycheckForLevPolycheckForLevPolyXformatLevPolyErr$fOutputableCandidatesQTvs$fMonoidCandidatesQTvs$fSemigroupCandidatesQTvs tcAnnotationsannCtxtrnTopSpliceDecls rnSpliceDecl rnSplicePat rnSpliceTypetcIfaceCompleteSigstcIfaceAnnotationstcIfaceFamInst tcIfaceInst tcIfaceRules tcIfaceDecl mkTickBoxinitHpc WhereLookingWL_Any WL_Global WL_LocalTop WL_LocalOnlymkUnboundNameRdrreportUnboundName unboundName unboundNameX notInScopeErrunknownNameSuggestionsPipelineOutput Temporary Persistent SpecificFile PipeStatehsc_env maybe_loc foreign_osPipeEnv stop_phase src_filename src_basename src_suffix output_spec PhasePlus RealPhaseHscOut CompPipelineevalP getPipeEnv getPipeState setDynFlagssetModLocation setForeignOs$fOutputablePhasePlus$fHasDynFlagsCompPipeline$fMonadIOCompPipeline$fMonadCompPipeline$fApplicativeCompPipeline$fFunctorCompPipeline$fShowPipelineOutputloadSysInterfaceNameCacheUpdaterNCUupdateNameCachenewGlobalBindernewInteractiveBinderallocateGlobalBinderifaceExportNamesmkNameCacheUpdaterupdNameCacheTc lookupOrig lookupOrigIOexternaliseName setNameModule tcIfaceLclIdextendIfaceIdEnv tcIfaceTyVarlookupIfaceTyVarlookupIfaceVarextendIfaceTyVarEnvextendIfaceEnvslookupIfaceTop newIfaceName newIfaceNamesemptyNameShape mkNameShapeextendNameShapenameShapeExportssubstNameShapemaybeSubstNameShape tcRnModIfacetcRnModExports rnModIface rnModExports WarnErrLoggerGhcTunGhcTSessionGhcunGhc getSession setSession withSessiongetSessionDynFlags modifySessionwithTempSession logWarnings reflectGhcreifyGhcliftGhcTprintExceptiondefaultWarnErrLogger $fGhcMonadGhc$fHasDynFlagsGhc$fExceptionMonadGhc $fMonadFixGhc $fMonadIOGhc $fMonadGhc$fApplicativeGhc $fFunctorGhc$fGhcMonadGhcT$fHasDynFlagsGhcT$fExceptionMonadGhcT $fMonadIOGhcT $fMonadGhcT$fApplicativeGhcT $fFunctorGhcTfrontendFrontendPluginAction CorePluginPluginRecompileForceRecompileNoForceRecompileMaybeRecompilespPluginlpPluginlpModulePluginWithArgspaPlugin paArgumentsinstallCoreToDostcPluginpluginRecompileparsedResultActionrenamedResultActiontypeCheckResultActionspliceRunActioninterfaceLoadActionCommandLineOption lpModuleNamepluginRecompile' purePlugin impurePlugin flagRecompile defaultPluginkeepRenamedSourceplugins withPlugins mapPlugins withPlugins_defaultFrontendPlugin$fMonoidPluginRecompile$fSemigroupPluginRecompile$fOutputablePluginRecompileflushFinderCachesfindImportedModulefindPluginModulefindExactModulefindExposedPackageModuleaddHomeModuleToFinder uncacheModulefindHomeModulemkHomeModLocationmkHomeModLocation2mkHiOnlyModLocation mkObjPathmkHiPath mkStubPathsfindObjectLinkableMaybefindObjectLinkablecannotFindModulecannotFindInterface pluginErrormkDependencies mkUsedNames mkUsageInfoPreInlineUnconditionallyPostInlineUnconditionally UnfoldingDone RuleFiredLetFloatFromLet EtaExpansion EtaReduction BetaReduction CaseOfCase KnownBranch CaseMergeAltMergeCaseElim CaseIdentityFillInCaseDefaultSimplifierDoneCorePluginPassFloatOutSwitchesfloatOutLambdasfloatOutConstantsfloatOutOverSatAppsfloatToTopLevelOnly SimplModesm_namessm_phase sm_dflagssm_rules sm_inline sm_case_case sm_eta_expandCoreDoSimplifyCoreDoPluginPassCoreDoFloatInwardsCoreDoFloatOutwardsCoreLiberateCaseCoreDoPrintCoreCoreDoStaticArgsCoreDoCallArity CoreDoExitifyCoreDoStrictnessCoreDoWorkerWrapperCoreDoSpecialisingCoreDoSpecConstrCoreCSECoreDoRuleCheck CoreDoNothing CoreDoPasses CoreDesugarCoreDesugarOpt CoreOccurAnalpprPassDetailsrunWhenrunMaybe bindsOnlyPass simplCountNzeroSimplCountisZeroSimplCounthasDetailedCountsdoFreeSimplTick doSimplTickplusSimplCount pprSimplCountrunCoreMliftIOWithCount getHscEnv getRuleBasegetVisibleOrphanMods addSimplCountgetOrigNameCachegetPackageFamInstEnvreinitializeGlobalsgetAnnotationsgetFirstAnnotationsputMsgS errorMsgSfatalErrorMsgSdebugTraceMsgS$fOutputableSimplMode$fOutputableFloatOutSwitches $fOrdTick$fEqTick$fOutputableTick$fHasModuleCoreM$fHasDynFlagsCoreM$fMonadIOCoreM$fMonadUniqueCoreM$fMonadPlusCoreM$fAlternativeCoreM$fApplicativeCoreM $fMonadCoreM$fFunctorCoreM$fOutputableCoreToDoSimplMinitSmpl traceSmpl getSimplRules getFamEnvsnewId newJoinId getSimplCounttick checkedTickfreeTick$fMonadIOSimplM$fHasDynFlagsSimplM$fMonadUniqueSimplM $fMonadSimplM$fApplicativeSimplM$fFunctorSimplM cmmPipeline ppSourceStats BlankSrcSpanNoBlankSrcSpan showAstData$fEqBlankSrcSpan$fShowBlankSrcSpan addFieldDoc addFieldDocs addConDoc addConDocsaddConDocFirst LRenamingRenaming renameFromrenameTo IncludeDeclidUnitId idModRenamingidSignatureInclude LHsUnitDecl HsUnitDeclDeclDIncludeD HsDeclTypeModuleD SignatureDLHsUnitHsUnit hsunitName hsunitBody LHsModuleId HsModuleId HsModuleVarLHsModuleSubst HsModuleSubst LHsUnitIdHsUnitId HsComponentId hsPackageName hsComponentId$fOutputableHsComponentId parseModuleparseSignature parseImportparseStatementparseDeclarationparseExpression parsePatternparseTypeSignature parseStmtparseIdentifier parseType parseBackpack parseHeader mkPrelImportsgetOptionsFromFile getOptionscheckProcessArgsResultoptionsErrorMsgsdsForeignsHooktcForeignImportsHooktcForeignExportsHookhscFrontendHookhscCompileCoreExprHookghcPrimIfaceHook runPhaseHook runMetaHooklinkHookrunRnSpliceHookgetValueSafelyHookcreateIservProcessHook getHooked lookupHookiservCmd withIServevalStmt abandonStmtevalIO evalStringevalStringToIOString mallocData mkCostCentres createBCOs addSptEntrycostCentreStackInfo newBreakArrayenableBreakpointbreakpointStatusgetBreakpointVar getClosure seqHValue initObjLinker lookupSymbol lookupClosurepurgeLookupSymbolCacheloadDLL loadArchive unloadObjaddLibrarySearchPathremoveLibrarySearchPath resolveObjsfindSystemLibrary iservCall readIServ writeIServ stopIServmkFinalizedHValuefreeHValueRefswormhole wormholeRef mkEvalOptsfromEvalResultaddTicksToBinds hpcInitCode$fHasDynFlagsTM $fMonadTM$fApplicativeTM $fFunctorTM$fEqTickDensity$fEqTickishType ClosureEnvemptyClosureEnvextendClosureEnvlinkBCOlookupStaticPtrlookupIElinkFail nameToCLabelmkITbls extractDocs CheapAppFunexprType coreAltType coreAltsType isExprLevPolyapplyTypeToArgsmkCastmkTickmkTicks mkTickNoHNF tickHNFArgs stripTicksTopstripTicksTopEstripTicksTopT stripTicksE stripTicksT bindNonRecneedsCaseBinding mkAltExpr findDefault addDefault isDefaultAltfindAlt mergeAlts trimConArgs filterAltsrefineDefaultAltcombineIdenticalAlts exprIsTrivialgetIdFromTrivialExprgetIdFromTrivialExpr_maybe exprIsBottom exprIsDupableexprIsWorkFree exprIsCheap exprIsCheapXexprIsExpandable isCheapAppisExpandableAppexprOkForSpeculationexprOkForSideEffectsaltsAreExhaustive exprIsHNF exprIsConLikeexprIsTopLevelBindableexprIsTickedStringexprIsTickedString_maybedataConRepInstPatdataConRepFSInstPat cheapEqExpr cheapEqExpr' exprIsBigeqExprdiffExpr diffBinds tryEtaReduce rhsIsStatic isEmptyTycollectMakeStaticArgs isJoinBind doStaticArgs FloatBindFloatLet FloatCase sortQuantVars mkCoreAppmkWildEvBindermkWildValBinder mkWildCase mkIfThenElsecastBottomExpr mkIntExprIntmkWordExprWord mkIntegerExpr mkNaturalExprmkStringExprFSmkStringExprFSWith mkCoreVarTupmkCoreVarTupTy mkCoreTup mkCoreUbxTupmkCoreTupBoxitymkBigCoreVarTupmkBigCoreVarTup1mkBigCoreVarTupTy mkBigCoreTupmkBigCoreTupTyunitExprmkTupleSelectormkTupleSelector1mkSmallTupleSelector mkTupleCasemkSmallTupleCase wrapFloat mkNilExpr mkConsExpr mkListExpr mkFoldrExpr mkBuildExpr mkNothingExpr mkJustExprmkRuntimeErrorAppmkImpossibleExprerrorIdsrEC_SEL_ERROR_IDrUNTIME_ERROR_IDrEC_CON_ERROR_ID pAT_ERROR_IDnO_METHOD_BINDING_ERROR_IDnON_EXHAUSTIVE_GUARDS_ERROR_ID tYPE_ERROR_IDaBSENT_SUM_FIELD_ERROR_IDaBSENT_ERROR_IDmkAbsentErrorApp$fOutputableFloatBindevDelayedError evCallStack JoinFloats JoinFloat LetFloatsSimplSRDoneExDoneIdContEx SimplFloats sfLetFloats sfJoinFloats sfInScopeseMode seTvSubst seCvSubst seIdSubst seInScope emptyFloats pprSimplEnv mkSimplEnvgetMode seDynFlagssetModeupdMode extendIdSubst getInScope setInScopeSetsetInScopeFromEsetInScopeFromFaddNewInScopeIds modifyInScope zapSubstEnv setSubstEnvmkContExdoFloatFromRhsemptyLetFloatsemptyJoinFloats unitLetFloat unitJoinFloat mkFloatBind extendFloats addLetFloats addJoinFloats addFloats addLetFlts letFloatBinds addJoinFlts mkRecFloats wrapFloatswrapJoinFloatsXwrapJoinFloatsgetTopFloatBinds mapLetFloatssubstIdrefineFromInScope lookupRecBndr simplBinders simplBindersimplNonRecBndrsimplNonRecJoinBndr simplRecBndrssimplRecJoinBndrs getTCvSubst$fOutputableSimplSR$fOutputableFloatFlag$fOutputableLetFloats$fOutputableSimplFloats floatInwardsexitifyProgram isEmptySubstmkSubst substInScopeextendIdSubstListextendSubstWithVarextendSubstListlookupTCvSubstdelBndrdelBndrs mkOpenSubst addInScopeSetextendInScopeListextendInScopeIds setInScope substExprSC substExpr substBindSC substBind deShadowBinds substRecBndrs cloneIdBndr cloneIdBndrs cloneBndrs cloneBndrcloneRecIdBndrs substIdInfosubstUnfoldingSCsubstUnfolding substIdOcc substSpecsubstRulesForImportedIds substDVarSet substTickish$fOutputableSubst cseProgram cseOneExpr manifestArity joinRhsArity exprArity typeArityexprBotStrictness_maybeexprEtaExpandArity findRhsArity etaExpandetaExpandToJoinPointetaExpandToJoinPointRule$fOutputableArityType$fOutputableEtaInfo FloatSpecFloatMeStayPut LevelTypeBndrLvl JoinCeilLvlLevel LevelledBndr LevelledBind LevelledExprfloatSpecLevel tOP_LEVEL incMinorLvl asJoinCeilLvlltLvlltMajLvlisTopLvl isJoinCeilLvl setLevels $fEqLevel$fOutputableLevel$fOutputableFloatSpec $fEqLevelTypeoccurAnalysePgmoccurAnalyseExproccurAnalyseExpr_NoBinderSwap$fOutputableOccEncl$fOutputableUsageDetails$fOutputableDetails floatOutwards$fOutputableFloatBindstidyExpr tidyRulestidyRule tidyUnfolding simpleOptExprsimpleOptExprWith simpleOptPgmjoinPointBinding_maybejoinPointBindings_maybeexprIsConApp_maybeexprIsLiteral_maybeexprIsLambda_maybe pushCoArg pushCoTyArg pushCoValArgcollectBindersPushingCo$fOutputableSimpleOptEnvmkRule roughTopNamespprRulesForUser mkRuleInfoextendRuleInfo addRuleInfoaddIdSpecialisations rulesOfBindsgetRules emptyRuleBase mkRuleBaseextendRuleBaseList unionRuleBase pprRuleBase lookupRuleruleCheckProgramCallCtxt BoringCtxtRhsCtxt DiscArgCtxt RuleArgCtxt ValAppCtxtCaseCtxt ArgSummaryTrivArg NonTrivArgValueArgmkTopUnfoldingmkImplicitUnfoldingmkSimpleUnfoldingmkDFunUnfoldingmkWwInlineRulemkCompulsoryUnfoldingmkWorkerUnfoldingmkInlineUnfoldingmkInlineUnfoldingWithAritymkInlinableUnfolding specUnfoldingmkCoreUnfolding mkUnfoldinginlineBoringOkcouldBeSmallEnoughToInlinesmallEnoughToInlinecertainlyWillInlinecallSiteInline$fOutputableExprSize$fOutputableArgSummary$fOutputableCallCtxt primOpRules builtinRules caseRules$fHasDynFlagsRuleM$fMonadPlusRuleM$fAlternativeRuleM$fMonadFailRuleM $fMonadRuleM$fApplicativeRuleM$fFunctorRuleMValArgTyArgCastBy as_arg_ty as_hole_tyArgInfoai_funai_argsai_typeai_rulesai_enclai_strsai_discsDupFlagNoDup SimplifiedOkToDup StaticEnv SimplContStopCastIt ApplyToVal ApplyToTySelect StrictBind StrictArgTickItsc_dupsc_argsc_envsc_cont sc_arg_ty sc_hole_tysc_bndrsc_altssc_bndrssc_bodysc_funsc_cci isSimplified addValArgTo addTyArgTo addCastToargInfoAppArgspushSimplifiedArgs argInfoExpr mkBoringStop mkRhsStop mkLazyArgStopcontIsRhsOrArg contIsStop contIsDupable contIsTrivialcontResultType contHoleType countArgscontArgs mkArgInfointerestingCallContextsimplEnvForGHCiupdModeForStableUnfoldingsupdModeForRulesactiveUnfoldinggetUnfoldingInRuleMatch activeRulepreInlineUnconditionallypostInlineUnconditionallymkLamtryEtaExpandRhsabstractFloats prepareAltsmkCase isExitJoinId$fOutputableDupFlag$fOutputableArgSpec$fOutputableSimplContDCB wiredInIds ghcPrimIds mkDictSelRhs mkDataConRepunwrapNewTypeBodywrapFamInstBody mkFCallId mkDictFunId mkDictFunTyunsafeCoerceNamenoinlineIdName proxyHashIdunsafeCoerceId nullAddrIdseqIdlazyId noinlineIdcoerceIdrealWorldPrimId voidPrimId voidArgIdcoercionTokenIdunarise$fOutputableUnariseValstg2stg$fMonadUniqueStgM $fFunctorStgM$fApplicativeStgM $fMonadStgM $fMonadIOStgM $fEqStgToDo toIfaceTvBndrtoIfaceTvBndrs toIfaceIdBndr toIfaceBndrtoIfaceTyCoVarBinders toIfaceKind toIfaceType toIfaceTyVartoIfaceTyCon_nametoIfaceCoerciontidyToIfaceTypetidyToIfaceContextpatSynToIfaceDecl toIfaceBangtoIfaceSrcBangtoIfaceLetBndrtoIfaceIdDetails toIfaceIdInfo toIfUnfolding toIfaceExprtoIfaceOneShottoIfaceTickish toIfaceBind toIfaceAlt toIfaceCon toIfaceApp toIfaceVar HieTypeStateHTStyMaphtyTable freshIndexgenerateReferencesMap renderHieTyperesolveVisibilityfoldTypehieTypeToIface initialHTSfreshTypeIndex compressTypesrecoverFullType getTypeIndexresolveTyVarScopesresolveTyVarScopeLocalgetNameBinding getNameScopegetNameBindingInClassgetNameScopeAndBindinggetScopeFromContextgetBindSiteFromContext flattenAstsmallestContainingSatisfyingselectLargestContainedByselectSmallestContaining definedInAsts isOccurrencescopeContainsSpan combineAst insertAstcombineNodeInfo mergeAstsrightOfleftOf startsRightOf mergeSortAstssimpleNodeInfolocOnlymkScopemkLScope combineScopesmakeNode makeTypeNode specProgram$fOutputableCallKey$fOutputableCallInfo$fOutputableCallInfoSet$fHasModuleSpecM$fHasDynFlagsSpecM$fMonadUniqueSpecM$fMonadFailSpecM $fMonadSpecM$fApplicativeSpecM$fFunctorSpecM simplTopBinds simplExpr simplRules knownKeyNameslookupKnownKeyNameisKnownKeyNamelookupKnownNameInfoprimOpIdghcPrimExportsmaybeCharLikeConmaybeIntLikeConisNumericClassisStandardClass cgTopRhsCon buildDynCon bindConArgscgExprcgTopRhsClosureemitBlackHoleCodepushUpdateFrameemitUpdateFrame parseCmmFilecodeGenTraceBinIFaceReadingQuietBinIFaceReading CheckHiWay IgnoreHiWay readBinIfacegetWithUserData writeBinIfaceputWithUserData getSymtabNamegetDictFastString$fEqCheckHiWay$fEqTraceBinIFaceReading HieHeader HieFileResulthie_file_result_versionhie_file_result_ghc_versionhie_file_resultHieName ExternalName LocalName KnownKeyNamehieMagic writeHieFilereadHieFileWithVersion readHieFile toHieName$fOutputableHieName $fOrdHieName $fEqHieName DiffIdentDiffppHiesppHieppInfodiffFilediffAstsdiffAstnormalizeIdentsdiffListeqDiffvalidAstvalidateScopesfingerprintDynFlagsfingerprintOptFlagsfingerprintHpcFlagstcLookupImported_maybe importDeclcheckWiredInTyConifCheckWiredInThingneedWiredInHomeIfaceloadSrcInterfaceloadSrcInterface_maybeloadModuleInterfaceloadModuleInterfacesloadInterfaceForNameloadInterfaceForNameMaybeloadInterfaceForModuleloadWiredInHomeIfaceloadUserInterfaceloadPluginInterface loadInterfacemoduleFreeHolesPrecise loadDeclsfindAndReadIface readIfaceinitExternalPackageState ifaceStats showIfacepprModIfaceSimple pprModIface$fOutputableWarnings InstBindings ib_tyvarsib_binds ib_pragmas ib_extensions ib_derivedInstInfoiSpeciBinds lookupGlobalioLookupDataContcLookupLocatedGlobaltcLookupGlobaltcLookupGlobalOnlytcLookupDataContcLookupPatSyntcLookupConLike tcLookupClass tcLookupTyCon tcLookupAxiomtcLookupLocatedGlobalIdtcLookupLocatedClasstcLookupLocatedTyContcLookupInstance tcGetInstEnvssetGlobalTypeEnvtcExtendGlobalEnvImplicittcExtendGlobalEnvtcExtendTyConEnvtcExtendGlobalValEnvtcExtendRecEnvtcLookupLocatedtcLookupLcl_maybetcLookup tcLookupTyVar tcLookupIdtcLookupIdMaybetcLookupLocalIdsgetInLocalScopetcExtendKindEnvListtcExtendKindEnvtcExtendTyVarEnvtcExtendNameTyVarEnvisTypeClosedLetBndrtcExtendRecIdstcExtendSigIdstcExtendLetEnv tcExtendIdEnvtcExtendIdEnv1tcExtendIdEnv2tcExtendLocalTypeEnvtcExtendBinderStacktcInitOpenTidyEnvtcAddDataFamConPlaceholderstcAddPatSynPlaceholdersgetTypeSigNames tcExtendRulescheckWellStagedtopIdLvltcMetaTy isBrackStagetcGetDefaultTysiDFunIdpprInstInfoDetailssimpleInstInfoClsTysimpleInstInfoTysimpleInstInfoTyCon newDFunName newDFunName'newFamInstTyConNamenewFamInstAxiomNamemkStableIdFromStringmkStableIdFromName mkWrapperName pprBinders wrongThingErr$fMonadThingsIOEnv$fOutputableInstInfosptCreateStaticBindssptModuleInitCode HsDocContext TypeSigCtxPatCtxSpecInstSigCtxDefaultDeclCtxForeignDeclCtx DerivDeclCtxRuleCtx TyDataCtxTySynCtx TyFamilyCtx FamPatCtx ConDeclCtx ClassDeclCtxExprWithTySigCtxTypBrCtx HsTypeCtxGHCiCtx SpliceTypeCtxClassInstanceCtx GenericCtxnewLocalBndrRnnewLocalBndrsRnbindLocalNamesbindLocalNamesFVextendTyVarEnvFVRncheckDupRdrNames checkDupNamescheckShadowedRdrNamescheckDupAndShadowedNamesaddFvRnmapFvRn mapMaybeFvRnwarnUnusedTopBindswarnUnusedLocalBindswarnUnusedMatcheswarnUnusedTypePatterns mkFieldEnvaddNameClashErrRnunknownSubordinateErr dupNamesErrbadQualBndrErr typeAppErr checkTupSizewithHsDocContextinHsDocContextpprHsDocContext MiniFixityEnvaddLocalFixitieslookupFixityRnlookupFixityRn_helplookupTyFixityRnlookupFieldFixityRn HsSigCtxt TopSigCtxt LocalBindCtxt ClsDeclCtxt HsBootCtxt RoleAnnotCtxtChildLookupResult NameNotFoundIncorrectParent FoundNameFoundFLnewTopSrcBinderlookupTopBndrRnlookupLocatedTopBndrRnlookupExactOcclookupInstDeclBndrlookupFamInstNamelookupConstructorFieldslookupRecFieldOcclookupSubBndrOcc_helpercombineChildLookupResultlookupLocatedOccRnlookupLocalOccRn_maybelookupLocalOccThLvl_maybe lookupOccRnlookupLocalOccRnlookupTypeOccRnlookupOccRn_maybelookupOccRn_overloadedlookupGlobalOccRn_maybelookupGlobalOccRnlookupInfoOccRnlookupGlobalOccRn_overloadedlookupGreAvailRnaddUsedDataCons addUsedGRE addUsedGREslookupSigOccRnlookupSigCtxtOccRnlookupLocalTcNames dataTcOccslookupIfThenElselookupSyntaxName'lookupSyntaxNamelookupSyntaxNames$fMonoidDisambigInfo$fSemigroupDisambigInfo$fOutputableDisambigInfo$fOutputableChildLookupResult$fOutputableHsSigCtxtHsSigWcTypeScoping AlwaysBindBindUnlessForall NeverBind rnHsSigWcTypernHsSigWcTypeScoped rnHsWcTypeextractFilteredRdrTyVarsextractFilteredRdrTyVarsDups rnHsSigTypernImplicitBndrs rnLHsType rnLHsTypesrnHsType rnLHsKindrnHsKind rnLHsTypeArgs rnContextrnLTyVarbindSigTyVarsFV bindLRdrNames bindHsQTyVarsbindLHsTyVarBndrsbindLHsTyVarBndrnewTyVarNameRnrnConDeclFields mkOpAppRn mkNegAppRn mkOpFormRn mkConOpPatRncheckPrecMatchcheckSectionPrecfreeKiTyVarsAllVarsfreeKiTyVarsKindVarsfreeKiTyVarsTypeVarsextractHsTyArgRdrKiTyVarsDupextractHsTyRdrTyVarsextractHsTyRdrTyVarsDupsextractHsTyRdrTyVarsKindVarsextractHsTysRdrTyVarsextractHsTysRdrTyVarsDupsrmDupsInRdrTyVarsextractRdrKindSigVarsextractDataDefnKindVarsextractHsTvBndrselemRdr$fOutputableRnTyKiWhat$fOutputableRnTyKiEnv$fOutputableOpName$fOutputableFreeKiTyVarsImportDeclUsage rnImportscalculateAvailsextendGlobalRdrEnvRngetLocalNonValBindersnewRecordSelector mkChildEnv findChildrenreportUnusedNamesfindImportUsagegetMinimalImportsprintMinimalImportsdodgyMsgdodgyMsgInsert checkConName tcRnExportsexports_from_availRecompileRequiredUpToDate MustCompile RecompBecausemkIface mkIfaceTcwriteIfaceFilemkIfaceExportsrecompileRequired checkOldIfacetyThingToIfaceDeclcoAxiomToIfaceDecl$fBinaryIfaceIdExtras$fBinaryIfaceDeclExtras$fOutputableIfaceDeclExtras$fMonoidRecompileRequired$fSemigroupRecompileRequired$fEqRecompileRequired pprTyThingLoc pprTyThingHdrpprTyThingInContextpprTyThingInContextLoc pprTyThingpprTypeForUser coreToStg $fMonadCtsM$fApplicativeCtsM $fFunctorCtsM $fEqLetInfo $fEqHowBound liberateCaseendPass endPassIOdumpPassResultlintPassResultlintInteractiveExprlintCoreBindings lintUnfoldinglintExpr lintTypes lintAnnots$fHasDynFlagsLintM$fMonadFailLintM$fEqStaticPtrCheck newFamInstcheckFamInstConsistencytcInstNewTyCon_maybetcLookupDataFamInsttcLookupDataFamInst_maybetcTopNormaliseNewTypeTF_maybetcExtendLocalFamInstEnvmakeInjectivityErrorsinjTyVarsOfTypeinjTyVarsOfTypestcGetFamInstEnvs FunDepEqnFDEqnfd_qtvsfd_eqsfd_pred1fd_pred2fd_locimproveFromAnother pprEquationimproveFromInstEnvcheckInstCoverage checkFunDeps$fOutputableFunDepEqn corePrepPgm corePrepExpr cvtLitInteger cvtLitNaturallookupMkIntegerNamelookupMkNaturalNamelookupIntegerSDataConNamelookupNaturalSDataConName$fOutputableFloatingBind$fOutputableOkToSpec$fOutputableFloatsmkBootModDetailsTc tidyProgram $fMonadDFFV$fApplicativeDFFV $fFunctorDFFVconvertToHsDeclsconvertToHsExpr convertToPatconvertToHsTypethRdrNameGuesses $fMonadCvtM$fApplicativeCvtM $fFunctorCvtMthNameToGhcName$fMonadThingsCoreMcallArityAnalProgram callArityRHSBCInstrSTKCHECKPUSH_LPUSH_LLPUSH_LLLPUSH8PUSH16PUSH32PUSH8_WPUSH16_WPUSH32_WPUSH_G PUSH_PRIMOPPUSH_BCO PUSH_ALTSPUSH_ALTS_UNLIFTED PUSH_PAD8 PUSH_PAD16 PUSH_PAD32 PUSH_UBX8 PUSH_UBX16 PUSH_UBX32PUSH_UBX PUSH_APPLY_N PUSH_APPLY_V PUSH_APPLY_F PUSH_APPLY_D PUSH_APPLY_L PUSH_APPLY_P PUSH_APPLY_PPPUSH_APPLY_PPPPUSH_APPLY_PPPPPUSH_APPLY_PPPPPPUSH_APPLY_PPPPPPSLIDEALLOC_APALLOC_AP_NOUPD ALLOC_PAPMKAPMKPAPUNPACKPACKLABELTESTLT_ITESTEQ_ITESTLT_WTESTEQ_WTESTLT_FTESTEQ_FTESTLT_DTESTEQ_DTESTLT_PTESTEQ_PCASEFAILJMPCCALLSWIZZLEENTERRETURN RETURN_UBXBRK_FUNProtoBCO protoBCONameprotoBCOInstrsprotoBCOBitmapprotoBCOBitmapSize protoBCOArity protoBCOExpr protoBCOFFIs bciStackUse$fOutputableBCInstr$fOutputableProtoBCO bcoFreeNames assembleBCOsassembleOneBCOiNTERP_STACK_CHECK_THRESH$fMonadAssembler$fApplicativeAssembler$fFunctorAssemblerextendLoadedPkgs extendLinkEnvdeleteFromLinkEnv getHValuewithExtendedLinkEnvshowLinkerState initDynLinkerlinkCmdLineLibslinkExpr linkDecls linkModuleunload linkPackages byteCodeGencoreExprToBCOs$fOutputableDiscr$fHasDynFlagsBcM $fMonadBcM$fApplicativeBcM $fFunctorBcM $fEnumByteOff $fEqByteOff$fIntegralByteOff $fNumByteOff $fOrdByteOff $fRealByteOff $fEnumWordOff $fEqWordOff$fIntegralWordOff $fNumWordOff $fOrdWordOff $fRealWordOff $fEqDiscr $fOrdDiscrMethInfo TcMethInfo mkNewTyConRhs buildDataCon buildPatSyn buildClassnewImplicitBindernewTyConRepNametypecheckIfacetypecheckIfacesForMergingtypecheckIfaceForInstantiate tcHiBootIface tcIfaceExpr tcIfaceGlobal DsWarning CanItFailCanFailCantFail MatchResult DsWrapper EquationInfoEqnInfoeqn_patseqn_origeqn_rhsDsMatchContext idDsWrapperorFailfixDsinitDsTcinitDsinitDsWithModGutsinitTcDsForSolver newUniqueIdduplicateLocalDs newPredVarDsnewSysLocalDsNoLP newSysLocalDsnewFailLocalDsnewSysLocalsDsNoLPnewSysLocalsDs getGhcModeDs getDictsDs addDictsDs getTmCsDs addTmCsDsincrCheckPmIterDs resetPmIterDs getSrcSpanDs putSrcSpanDswarnDs warnIfSetDserrDs errDsCoreExpr failWithDsfailDs askNoErrsDsmkPrintUnqualifiedDsdsLookupGlobaldsLookupGlobalId dsLookupTyCondsLookupDataCondsLookupConLikedsGetFamInstEnvs dsGetMetaEnvdsGetCompleteMatchesdsLookupMetaEnvdsExtendMetaEnvdiscardWarningsDs dsNoLevPolydsNoLevPolyExpr dsWhenNoErrspprRuntimeTrace$fOutputableDsMatchContext$fOutputableEquationInfomatchSinglePatVar matchSimply matchWrappermatch dsLocalBinds dsSyntaxExprdsLExpr dsLExprNoLPdsExpr ZonkFlexi DefaultFlexiSkolemiseFlexiRuntimeUnkFlexiZonkEnv hsLPatType hsPatType hsLitType shortCutLit hsOverLitName emptyZonkEnvmkEmptyZonkEnv initZonkEnv zonkTopBndrs zonkTyBndrs zonkTyBndrsXzonkTyVarBinderszonkTyVarBindersXzonkTyVarBinderX zonkTopExpr zonkTopLExpr zonkTopDecls zonkTcEvBinds zonkEvBinds zonkTyVarOcclookupTyVarOcczonkTcTypeToTypezonkTcTypeToTypeXzonkTcTypesToTypeszonkTcTypesToTypesX zonkCoToCozonkTcMethInfoToMethInfoX$fOutputableZonkEnvTmStatePmVarEnv canDivergeflattenPmVarEnvinitialTmState solveOneEqexprDeepLookuptmOracle pmLitTypeHsRecFieldContext HsRecFieldCon HsRecFieldPat HsRecFieldUpd NameMakerCpsRnliftCpstopRecNameMakerisTopRecNameMakerlocalRecNameMakerrnPatsrnPatapplyNameMaker rnBindPat rnPatAndThen rnHsRecFieldsrnHsRecUpdFieldsrnLit rnOverLit patSigErr $fMonadCpsRn$fApplicativeCpsRn$fFunctorCpsRn rnTopBindsLHSrnTopBindsBootrnLocalBindsAndThenrnLocalValBindsLHS rnValBindsRHSrnLocalValBindsRHSmakeMiniFixityEnv rnMethodBinds renameSigs rnMatchGrouprnGRHSsrnGRHSrnSrcFixityDecl rnSrcDecls addTcgDUs findSplice SpliceInfospliceDescription spliceSource spliceIsDeclspliceGenerated rnBracket rnSpliceExpr traceSplicecheckThLocalNamernExpr$fOutputableStmtTreenewMethodFromNamedeeplySkolemisetopInstantiatetopInstantiateInferreddeeplyInstantiateinstTyVarsWithinstCallinstCallConstraints instDFunTypeinstStupidThetatcInstTyBinderstcInstTyBindernewOverloadedLit mkOverLit tcSyntaxNamegetOverlapFlag tcGetInsts newClsInsttcExtendLocalInstEnvOccCheckResultOC_OKOC_Bad OC_OccursmatchExpectedFunTysmatchActualFunTysmatchActualFunTysPartmatchExpectedListTymatchExpectedTyConAppmatchExpectedAppTy tcSubTypeHR tcSubTypeET tcSubTypeO tcSubType_NC tcSubTypeDStcSubTypeDS_NC_O tcWrapResult tcWrapResultO tcInferNoInst tcInferInst promoteTcType tcSkolemise tcSkolemiseETcheckConstraintscheckTvConstraintsemitResidualTvConstraintbuildImplicationForuTypeswapOverTyVarscanSolveByUnificationmatchExpectedFunKindoccCheckForErrorsmetaTyVarUpdateOK$fMonadOccCheckResult$fApplicativeOccCheckResult$fFunctorOccCheckResultTermFoldfTermfPrim fSuspension fNewtypeWrapfRefWrapTermPrim Suspension NewtypeWrapRefWraptydcvalsubTermsvalRawctypebound_to wrapped_termtermTypeisFullyEvaluatedTermconstrClosToNamefoldTerm mapTermType termTyCoVarscPprTerm cPprTermBase cvObtainTermcvReconstructTypeimproveRTTIType$fOutputableTermreportUnsolvedreportAllUnsolvedwarnAllUnsolvedwarnDefaultingsolverDepthErrorTcS$fMonoidReport$fSemigroupReport$fOutputableReport$fOutputableTypeErrorChoice$fOutputableHoleChoice$fOutputableReportErrCtxt InstanceWhatBuiltinInstance LocalInstanceTopLevInstance iw_dfun_id iw_safe_over ClsInstResult NoInstanceOneInstNotSure cir_new_theta cir_mk_evcir_what AssocInstInfo NotAssociated InClsInstai_class ai_tyvars ai_inst_envisNotAssociated safeOverlapmatchGlobalInst$fOutputableInstanceWhat$fOutputableClsInstResultMaybeNewFreshCachedTcSDictMap EqualCtList InertCansIC inert_eqs inert_funeqs inert_dicts inert_instsinert_safehask inert_irreds inert_countInertSetIS inert_cans inert_fsksinert_flat_cacheinert_solved_dictsWorkListWLwl_eqs wl_funeqswl_rest wl_implicsappendWorkList workListSizeworkListWantedCountextendWorkListEqextendWorkListFunEqextendWorkListNonEqextendWorkListImplicextendWorkListCtextendWorkListCtsisEmptyWorkList emptyWorkList getWorkListselectNextWorkItem isImprovable foldTyEqs findTyEqslookupInertTyVarlookupFlattenTyVaraddInertForAll addInertCankickOutAfterUnificationaddInertSafehaskinsertSafeOverlapFailureTcSgetSafeOverlapFailures addSolvedDictgetSolvedDictssetSolvedDicts updInertTcS getInertCans setInertCans updInertCans updInertDictsupdInertSafehaskupdInertFunEqsupdInertIrreds getInertEqsgetInertInsolsgetInertGivensgetPendingGivenScsgetUnsolvedInerts isInInertEqs getNoGivenEqsmatchableGivensmightMatchLaterprohibitedSuperClassSolveremoveInertCtslookupFlatCachelookupInertDictlookupSolvedDict foldIrreds emptyDictMapfindDictfindDictsByClassdelDictaddDictaddDictsByClass filterDicts foldDicts findFunEqfindFunEqsByTyCon insertFunEq wrapErrTcS wrapWarnTcSfailTcSwarnTcS addErrTcSpanicTcStraceTcSrunTcPluginTcSgetGlobalRdrEnvTcSbumpStepCountTcS csTraceTcS traceFireTcSrunTcSrunTcSDerivedsrunTcSEqualitiesrunTcSWithEvBinds setEvBindsTcS nestImplicTcSnestTcScheckTvConstraintsTcScheckConstraintsTcS getTcSInerts setTcSInertsupdWorkListTcS emitWorkNCemitWorkgetTcEvBindsVar unifyTyVarreportUnificationsgetDefaultInfo getInstEnvsgetFamInstEnvscheckWellStagedDFunpprEqnewFlattenSkolemextendFlatCache unflattenFmvdemoteUnfilledFmvdischargeFunEq pprKicked newFlexiTcSTy instFlexi instFlexiXisFresh freshGoals getEvExpr setEvBind setWantedEqsetWantedEvTermsetEvBindIfWanted newGivenEvVarnewBoundEvVarIdnewGivenEvVarsemitNewWantedEq newWantedEqnewWantedEvVarNCnewWantedEvVar newWantedNCemitNewDerivedsemitNewDerivedEq newDerivedNCcheckReductionDepthmatchFam matchFamTcM$fOutputableWorkList$fOutputableInertCans$fOutputableInertSet$fHasDynFlagsTcS$fMonadThingsTcS$fHasModuleTcS$fMonadUniqueTcS$fMonadFailTcS $fMonadTcS$fApplicativeTcS $fFunctorTcS FlattenMode FM_FlattenAll FM_SubstOnlyflatten flattenKindflattenArgsNomunflattenWanteds$fOutputableFlattenMode$fApplicativeFlatM$fFunctorFlatM $fMonadFlatMStopOrContinue ContinueWith canonicalizesolveCallStackmakeSuperClasses continueWithstopWith unifyDerivedmaybeSym$fOutputableStopOrContinue$fFunctorStopOrContinuesolveSimpleGivenssolveSimpleWanteds$fOutputableInteractResult InferModeApplyMREagerDefaultingNoRestrictionscaptureTopConstraintssimplifyTopImplic simplifyTopsolveLocalEqualitiessolveLocalEqualitiesXsolveEqualities simpl_topsimplifyAmbiguityChecksimplifyInteractivesimplifyDefaulttcCheckSatisfiability tcNormalise simplifyInfergrowThetaTyVarssimplifyWantedsTcMsolveWantedsAndDrop solveWanteds promoteTyVarpromoteTyVarSet approximateWC$fOutputableInferModeRankcheckValidTypecheckValidMonoType checkTySynRhscheckValidThetaarityErrcheckValidInstHeadvalidDerivPredcheckValidInstancecheckValidCoAxiomcheckValidCoAxBranchcheckValidTyFamEqnbadATErrcheckConsistentFamInstcheckValidTelescopeallDistinctTyVars$fOutputableRank$fOutputableExpandMode$fOutputableValidityEnv DerivStuff DerivAuxBind DerivFamInst DerivHsBind BagDerivStuff gen_Eq_binds gen_Ord_bindsgen_Enum_bindsgen_Bounded_binds gen_Ix_bindsgen_Read_bindsgen_Show_bindsgen_Data_bindsgen_Lift_bindsgen_Newtype_bindsmkCoerceClassMethEqn genAuxBinds mkRdrFunBindmkRdrFunBindECmkRdrFunBindSEordOpTbl boxConTbl litConTbl error_Expr$fEqAuxBindSpec FFoldTypeFTft_trivft_var ft_co_varft_funft_tup ft_ty_app ft_bad_app ft_forallgen_Functor_bindsfunctorLikeTraversedeepSubtypesContainingfoldDataConArgsgen_Foldable_bindsgen_Traversable_binds GenericKindGen0Gen1gen_Generic_bindsget_gen1_constrained_tys canDoGenericscanDoGenerics1 ThetaOriginto_anyclass_skolsto_anyclass_metasto_anyclass_givensto_wanted_origins PredOriginOriginativeDerivStatusCanDeriveStockStockClassErrorCanDeriveAnyClassNonDerivableClass DerivContext InferContext SupplyContextDerivSpecMechanismDerivSpecStockDerivSpecNewtypeDerivSpecAnyClass DerivSpecVia DerivSpecDSds_locds_nameds_tvsds_thetads_clsds_tysds_tc ds_overlapds_standalone_wildcard ds_mechanismDerivEnvdenv_overlap_modedenv_tvsdenv_cls denv_cls_tysdenv_tc denv_tc_args denv_rep_tcdenv_rep_tc_args denv_ctxt denv_stratDerivMisStandaloneDerivisStandaloneWildcardDeriv mkDerivOrigin pprDerivSpecderivSpecMechanismToStrategyisDerivSpecStockisDerivSpecNewtypeisDerivSpecAnyClassisDerivSpecVia mkPredOrigin mkThetaOriginmkThetaOriginFromPredssubstPredOriginhasStockDerivingcheckOriginativeSideConditionscanDeriveAnyClassstd_class_via_coerciblenon_coercible_classnewDerivClsInstextendLocalInstEnv$fOutputableDerivSpecMechanism$fOutputableDerivSpec$fOutputableDerivContext$fOutputableDerivEnv$fOutputablePredOrigin$fOutputableThetaOrigin ContextKindTheKindAnyKindOpenKindRequireSaturation YesSaturation NoSaturation funsSigCtxt addSigCtxt pprSigCtxt tcHsSigWcTypekcClassSigTypetcClassSigType tcHsSigType tcHsDerivtcDerivStrategytcHsClsInstType tcHsTypeApp tcHsOpenTypetcHsLiftedTypetcHsOpenTypeNCtcHsLiftedTypeNCtcCheckLHsType tcLHsTypetcLHsTypeUnsaturated typeLevelMode kindLevelMode tcInferAppscheckExpectedKind tcHsMbContext tcHsContext tcLHsPredTypetcWildCardBinders kcLHsQTyVarsbindImplicitTKBndrs_SkolbindImplicitTKBndrs_TvbindImplicitTKBndrs_Q_SkolbindImplicitTKBndrs_Q_TvbindExplicitTKBndrs_SkolbindExplicitTKBndrs_TvbindExplicitTKBndrs_Q_SkolbindExplicitTKBndrs_Q_TvbindTyClTyVarskcLookupTcTyConzonkAndScopedSortkindGeneralizeetaExpandAlgTyCon badKindSigtcbVisibilitiestcHsPartialSigTypetcHsPatSigTypetcPatSigzonkPromoteType tcLHsKindSigreportFloatingKvsfailIfEmitsConstraints funAppCtxtaddTyConFlavCtxt$fOutputableRequireSaturation$fOutputableTcTyMode TcPragEnv tcIdSigName tcSigInfoNamecompleteSigPolyId_maybetcTySigs tcUserTypeSigcompleteSigFromId tcInstSig emptyPragEnv lookupPragEnv extendPragEnv mkPragEnvaddInlinePrags tcSpecPrags tcSpecWrapper tcImpPrags LetBndrSpec LetLclBndr LetGblBndrtcLetPattcPatstcPattcPat_O newLetBndraddDataConStupidTheta badFieldCon polyPatSig$fOutputableLetBndrSpecHoleFithfIdhfCandhfTypehfRefLvlhfWrap hfMatcheshfDocHoleFitCandidateIdHFCand NameHFCand GreHFCandtcFilterHoleFitswithoutUnification tcSubsumestcCheckHoleFit$fHasOccNameHoleFitCandidate$fOutputableHoleFitCandidate$fOutputableHoleFit $fOrdHoleFit $fEqHoleFit$fEqSortingAlg$fOrdSortingAlg$fEqHoleFitCandidateinferConstraintssimplifyInstanceContexts tcDefaultsaddTypecheckedBinds tcTopBinds tcHsBootSigsbadBootDeclErr tcLocalBinds tcValBinds tcPolyCheckchooseInferredQuantifiers$fOutputableGeneralisationPlanmkTypeableBinds$fFunctorKindRepM$fApplicativeKindRepM$fMonadKindRepM RolesInfocheckSynCyclescheckClassCycles inferRolesaddTyConsToGblEnvmkDefaultMethodType tcRecSelBinds mkRecSelBindsmkOneRecordSelector$fMonadSynCycleM$fApplicativeSynCycleM$fFunctorSynCycleM $fMonadRoleM$fApplicativeRoleM$fFunctorRoleMtcPatSynBuilderOcc TcStmtCheckerTcCmdStmtCheckerTcExprStmtChecker TcMatchCtxtMCmc_whatmc_body tcMatchesCase tcMatchLambdatcGRHS tcDoStmtstcBodytcStmtstcStmtsAndThen tcGuardStmttcDoStmttcProc tcInferRhoNCgetFixedTyVarsaddExprErrCtxttcRulesisForeignImportisForeignExportnormaliseFfiTypetcForeignImportstcForeignImports' tcFImport tcCheckFIType checkCTargettcForeignExportstcForeignExports' tcFExport tcCheckFETypecheckForeignArgscheckForeignResnonIOokmustBeIO checkSafe noCheckSafefindExtraSigImports'findExtraSigImportsimplicitRequirementsimplicitRequirements' checkUnitIdtcRnCheckUnitIdtcRnMergeSignaturesmergeSignaturestcRnInstantiateSignatureinstantiateSignature MkCaseAltalt_pat alt_bndrs alt_wrapper alt_resultselectSimpleMatchVarLselectMatchVarsselectMatchVarfirstPat shiftEqns matchCanFailalwaysFailMatchResultcantFailMatchResultextractMatchResultcombineMatchResultsadjustMatchResultadjustMatchResultDs wrapBindswrapBindseqVarmkCoLetMatchResultmkViewMatchResultmkEvalMatchResultmkGuardedMatchResultmkCoPrimCaseMatchResultmkCoAlgCaseMatchResultmkCoSynCaseMatchResult mkErrorAppDs mkCoreAppDs mkCoreAppsDsmkCastDsmkSelectorBinds mkLHsPatTupmkLHsVarPatTupmkVanillaTuplePatmkBigLHsVarTupId mkBigLHsTupIdmkBigLHsVarPatTupIdmkBigLHsPatTupId mkOptTickBoxmkBinaryTickBoxdecideBangHoodaddBang isTrueLHsExprdsLit dsOverLitwarnAboutIdentitieswarnAboutOverflowedOverLitwarnAboutOverflowedLitwarnAboutEmptyEnumerations tidyLitPattidyNPat matchLiteralshsLitKey matchNPatsmatchNPlusKPats dsBracketdsCCallmkFCallunboxArg boxResult resultWrapper dsForeigns checkSinglecheckGuardMatches checkMatches genCaseTmCs2 genCaseTmCs1isAnyPmCheckEnabled$fOutputablePmPat$fOutputableValVec$fMonoidCovered$fSemigroupCovered$fOutputableCovered$fMonoidDiverged$fSemigroupDiverged$fOutputableDiverged$fMonoidProvenance$fSemigroupProvenance$fOutputableProvenance$fMonoidPartialResult$fSemigroupPartialResult$fOutputablePartialResult!$fOutputableInhabitationCandidate $fShowCovered$fShowDiverged$fShowProvenance$fEqProvenance$fOrdProvenance dsGuardeddsGRHSsdsGRHS dsTopLHsBinds dsLHsBindsdsSpec dsMkUserRuledecomposeRuleLhs dsHsWrapper dsTcEvBinds_s dsTcEvBinds dsEvBindsmatchConFamily matchPatSynmatchEquationsmatchSinglePat dsListComp dsMonadComp dsProcExpr dsValBindsHsSigFun tcClassSigs tcClassDecl2tcClassMinimalDefinstantiateMethod mkHsSigFunfindMethodBind tcMkDeclCtxt tcAddDeclCtxt badMethodErr instDeclCtxt1 instDeclCtxt2 instDeclCtxt3 tcATDefault DerivInfo di_rep_tc di_clausesdi_ctxt mkDerivInfos tcDeriving$fOutputableEarlyDerivSpec tcInstDecls1tcTyAndClassDecls kcConDecltcTyFamInstEqn tcFamTyPatsunravelFamInstPatsaddConsistencyConstraintsdataDeclChecks tcConDeclscheckValidTyContcAddTyFamInstCtxttcMkDataFamInstCtxttcAddDataFamInstCtxtwrongKindOfFamilytcInstDeclsDeriv tcInstDecls2 RenamedStuff TcRnExprModeTM_Inst TM_NoInst TM_Default tcRnModuletcRnModuleTcRnMcheckHiBootIface' checkBootDecl rnTopSrcDecls tcTopSrcDeclsrunTcInteractivetcRnStmt isGHCiMonadtcRnExprtcRnImportDeclstcRnType tcRnDeclsigetModuleInterfacetcRnLookupRdrNametcRnLookupName tcRnGetInfoloadUnqualIfacesgetRenamedStuffdeSugar deSugarExpr mkHieFile$fModifyStateVar$fModifyStateName$fProtectSigGhcPass$fProtectSigGhcPass0 $fHasLocPat$fHasLocHsDataDefn $fHasLocHsArg$fHasLocFamEqn $fHasLoc[]$fHasLocGenLocated$fHasLocHsWildCardBndrs$fHasLocHsImplicitBndrs$fHasLocLHsQTyVars$fHasLocPScoped$fHasLocTScoped$fHasLocShielded$fToHieIEContext$fToHieIEContext0$fToHieIEContext1$fToHieGenLocated$fToHieRScoped$fToHieGenLocated0$fToHieGenLocated1$fToHieAnnProvenance$fToHieGenLocated2$fToHieGenLocated3$fToHieGenLocated4$fToHieForeignExport$fToHieForeignImport$fToHieGenLocated5$fToHieGenLocated6$fToHieGenLocated7$fToHieGenLocated8$fToHiePatSynFieldContext$fToHieGenLocated9$fToHieGenLocated10$fToHieGenLocated11$fToHieGenLocated12$fToHieGenLocated13$fToHieGenLocated14$fToHieGenLocated15$fToHieGenLocated16$fToHiePendingTcSplice$fToHiePendingRnSplice$fToHieHsBracket$fToHieGenLocated17$fToHieArithSeqInfo$fToHieGenLocated18$fToHieGenLocated19$fToHieTScoped$fToHieTVScoped $fToHieHsArg$fToHieTScoped0$fToHieGenLocated20$fToHieSigContext$fToHieTScoped1$fToHieTScoped2$fToHieGenLocated21$fToHieGenLocated22$fToHieGenLocated23$fToHieGenLocated24$fToHieGenLocated25$fToHieGenLocated26$fToHieHsDataDefn$fToHieGenLocated27 $fToHieFamEqn$fToHieTScoped3$fToHieGenLocated28$fToHieRScoped0$fToHieFamilyInfo$fToHieGenLocated29$fToHieGenLocated30$fToHieTyClGroup$fToHieGenLocated31$fToHieGenLocated32$fToHieHsConDetails$fToHieRScoped1$fToHieRFContext$fToHieRFContext0$fToHieRFContext1$fToHieRFContext2$fToHieRContext$fToHieRContext0$fToHieRScoped2$fToHieRScoped3$fToHieRScoped4$fToHieRScoped5$fToHieRScoped6$fToHieGenLocated33$fToHieGenLocated34 $fToHieGRHSs$fToHieHsStmtContext$fToHieHsMatchContext$fToHieGenLocated35$fToHieHsPatSynDir$fToHieGenLocated36$fToHieMatchGroup$fToHieTScoped4$fToHieSigContext0$fToHieTScoped5$fToHieTScoped6$fToHieContext$fToHieContext0$fToHieIEContext2$fToHieTScoped7$fToHieContext1 $fToHieMaybe $fToHieBag $fToHie[]$fToHieTScoped8$fToHieGenLocated37$fToHiePScoped$fToHieBindContext$fHasTypeGenLocated$fHasTypeGenLocated0 $fHasTypePat $fHasTypePat0$fHasTypeGenLocated1$fHasTypeGenLocated2 $fDataPScoped mkWwBodiesisWorkerSmallEnough mkWorkerArgsmkWWstrdeepSplitProductType_maybe findTypeShape wwTopBindsspecConstrProgram$fOutputableValue$fOutputableHowBound$fOutputableCall$fOutputableArgOcc$fOutputableScUsagedmdAnalProgram$fOutputableAnalEnv core2core simplifyExprCARRYOFLOPARITY NOTPARITY maybeFlipCondmaybeInvertCondEAIndex EAIndexNoneEABase EABaseNone EABaseReg EABaseRip AddrBaseIndexImmAddr addrModeRegs firstfakeeaxebxecxedxesiediebpespfake0fake1fake2fake3fake4fake5raxrbxrcxrdxrsirdirbprspr8r9r10r13r14r15xmm0xmm1xmm2xmm3xmm4xmm5xmm6xmm7xmm8xmm9xmm10xmm11xmm12xmm13xmm14xmm15ripRelxmm allIntArgRegsinstrClobberedRegstargetVirtualRegSqueezetargetRealRegSqueezetargetClassOfRealRegtargetMkVirtualRegtargetRegDotColortargetClassOfRegJumpDest DestBlockIdDestImmOperandOpRegOpImmOpAddrPrefetchVariantNTALvl0Lvl1Lvl2COMMENTLOCATIONLDATANEWBLOCKUNWINDDELTAMOVCMOVMOVZxLMOVSxLLEAADDADCSUBSBBMULMUL2IMULIMUL2DIVIDIVADD_CCSUB_CCANDORXORNOTNEGIBSWAPSHLSARSHRBTNOPGMOVGLDGSTGLDZGLD1GFTOIGDTOIGITOFGITODGDTOFGADDGDIVGSUBGMULGCMPGABSGNEGGSQRTGSINGCOSGTANGFREECVTSS2SDCVTSD2SS CVTTSS2SIQ CVTTSD2SIQCVTSI2SSCVTSI2SDFDIVSQRTTESTCMPSETCCPUSHPOPJXXJXX_GBLJMP_TBLCALLCLTDFETCHGOTFETCHPCPOPCNTBSFBSRPDEPPEXTPREFETCHLOCKXADDCMPXCHGMFENCEarchWordFormati386_insert_ffreesallocMoreStackgetJumpDestBlockId canShortcut shortcutJumpshortcutStatics$fOutputableJumpDest$fInstructionInstr pprNatCmmDeclpprData pprFormatpprImm pprDataItempprInstr$fOutputableInstrLDSTUMULSMULUDIVSDIVRDYWRYANDNORNXNORSLLSRLSRASETHIFABSFADDFCMPFMOVFMULFNEGFSQRTFSUBFxTOyBIBFRIRIRegRIImmriZerofpRelEAmoveSpisUnconditionalJump shortBlockId pprBasicBlock checkBlock expandTopRegisterFixedAnyAmode ChildCode64CondCode InstrBlocksetFormatOfRegistergetRegisterRegmangleIndexTreeRegAllocStatsStartRegAllocStatsSpillRegAllocStatsColored raLiveCmmraGraph raSpillCostsraCode raCoalesced raSpillStats raSpilledraGraphColoredraCodeCoalesced raPatched raSpillCleanraFinalraSRMspprStatsSpillspprStatsLifetimespprStatsConflictpprStatsLifeConflict countSRMsaddSRM$fOutputableRegAllocStatsregAllocLDFARLDRLASTFARSTUSTCLISLIMRCMPLBCCBCCFARMTCTRBCTRBLBCTRLADDOADDCADDEADDZEADDISSUBFSUBFOSUBFCSUBFEMULLMULLOMFOVMULHUANDCNANDORISXORISEXTSCNTLZSLSRRLWINMCLRLICLRRIFCTIWZFCTIDZFCFIDFRSPCRNORMFCRMFLRHWSYNCISYNCLWSYNCstackFrameHeaderSizemakeFarBranchesNatM DwarfFiles NatM_Statenatm_us natm_delta natm_importsnatm_pic natm_dflagsnatm_this_module natm_modloc natm_fileidnatm_debug_mapnatm_cfgNcgImpl cmmTopCodeGengenerateJumpTableForInstrncg_x86fp_kludge ncgExpandTopncgAllocMoreStackncgMakeFarBranchesextractUnwindPointsinvertCondBranches mkNatM_StateinitNat mapAccumLNat getUniqueNat getDeltaNat setDeltaNatgetThisModuleNat addImportNat updateCfgNat getCfgNataddNodeBetweenNataddImmediateSuccessorNat getBlockIdNatgetNewLabelNat getNewRegNatgetNewRegPairNatgetPicBaseMaybeNat getPicBaseNat getModLoc getFileId getDebugBlock$fHasDynFlagsNatM$fMonadUniqueNatM $fMonadNatM$fApplicativeNatM $fFunctorNatM getRegister getSomeReg getCondCode condIntCode condFltCodegetAmodeassignMem_I64CodeassignReg_I64Code iselExpr64CmmMakeDynamicReferenceM addImport getThisModule ReferenceKind DataReference CallReference JumpReferencecmmMakeDynamicReferenceneedImportedSymbolspprGotDeclarationpprImportedSymbolinitializePicBase_ppcinitializePicBase_x86$fCmmMakeDynamicReferenceMNatM$fEqReferenceKind sequenceTop$fOutputableWeightedEdge$fOrdWeightedEdge$fNonLocalBlockNode$fOrdBlockChain$fOutputableBlockChain$fEqBlockChain$fEqWeightedEdgeFR frAllocateReg frGetFreeRegsfrInitFreeRegs frReleaseReg $fFRFreeRegs $fFRFreeRegs0 $fFRFreeRegs1 $fFRFreeRegs2 joinToTargetsdW_LANG_HaskelldW_TAG_array_typedW_TAG_lexical_blockdW_TAG_pointer_typedW_TAG_compile_unitdW_TAG_structure_typedW_TAG_typedefdW_TAG_subroutine_typedW_TAG_subrange_typedW_TAG_base_typedW_TAG_file_typedW_TAG_subprogramdW_TAG_variabledW_TAG_auto_variabledW_TAG_arg_variabledW_TAG_ghc_src_note dW_AT_namedW_AT_stmt_list dW_AT_low_pc dW_AT_high_pcdW_AT_languagedW_AT_comp_dirdW_AT_producerdW_AT_externaldW_AT_frame_basedW_AT_use_UTF8dW_AT_MIPS_linkage_namedW_AT_ghc_tick_parentdW_AT_ghc_span_filedW_AT_ghc_span_start_linedW_AT_ghc_span_start_coldW_AT_ghc_span_end_linedW_AT_ghc_span_end_coldW_CHILDREN_nodW_CHILDREN_yes dW_FORM_addr dW_FORM_data2 dW_FORM_data4dW_FORM_string dW_FORM_flagdW_FORM_block1dW_FORM_ref_addr dW_FORM_ref4dW_FORM_flag_presentdW_ATE_addressdW_ATE_boolean dW_ATE_float dW_ATE_signeddW_ATE_signed_chardW_ATE_unsigneddW_ATE_unsigned_chardW_CFA_set_locdW_CFA_undefineddW_CFA_same_valuedW_CFA_def_cfadW_CFA_def_cfa_offsetdW_CFA_def_cfa_expressiondW_CFA_expressiondW_CFA_offset_extended_sfdW_CFA_def_cfa_sfdW_CFA_def_cfa_offset_sfdW_CFA_val_offsetdW_CFA_val_expression dW_CFA_offset dW_OP_addr dW_OP_deref dW_OP_consts dW_OP_minus dW_OP_mul dW_OP_plus dW_OP_lit0 dW_OP_breg0dW_OP_call_frame_cfadwarfInfoSectiondwarfAbbrevSectiondwarfLineSectiondwarfFrameSectiondwarfGhcSectiondwarfARangesSection dwarfSectiondwarfInfoLabeldwarfAbbrevLabeldwarfLineLabeldwarfFrameLabel dwarfRegNodwarfReturnRegNoDwarfFrameBlockdwFdeBlkHasInfo dwFdeUnwindDwarfFrameProc dwFdeProc dwFdeHasInfo dwFdeBlocks DwarfFrame dwCieLabel dwCieInit dwCieProcs DwarfARangedwArngStartLabeldwArngEndLabel DwarfInfoDwarfCompileUnitDwarfSubprogram DwarfBlock DwarfSrcNote dwChildrendwName dwProducer dwCompDir dwLowLabel dwHighLabel dwLineLabeldwLabeldwParentdwMarker dwSrcSpanpprAbbrevDecls pprDwarfInfopprDwarfARanges pprDwarfFrame wordAlignpprBytepprHalf pprData4' pprDwWordpprWord pprLEBWord pprLEBInt sectionOffset$fOutputableDwarfFrameBlock$fEqDwarfAbbrev$fEnumDwarfAbbrevdwarfGen nativeCodeGen x86NcgImpl cmmNativeGen$fHasDynFlagsCmmOptM!$fCmmMakeDynamicReferenceMCmmOptM$fMonadCmmOptM$fApplicativeCmmOptM$fFunctorCmmOptM codeOutputoutputForeignStubsMessager newHscEnv ioMsgMaybehscTcRnLookupRdrNamehscTcRcLookupNamehscTcRnGetInfohscIsGHCiMonadhscGetModuleInterfacehscRnImportDeclshscParse hscParse'hscTypecheckRename tcRnModule' hscDesugar hscDesugar'makeSimpleDetailsgenericHscFrontendhscIncrementalCompile oneShotMsgbatchMsghscFileFrontEnd hscCheckSafe hscGetSafe hscSimplify hscSimplify'hscSimpleIface'hscNormalIface'hscGenHardCodehscInteractivehscCompileCmmFilehscStmthscStmtWithLocation hscParsedStmthscDeclshscParseDeclsWithLocationhscDeclsWithLocationhscParsedDeclshscAddSptEntries hscImport hscTcExpr hscKcType hscParseExprhscParseStmtWithLocationhscParseIdentifierhscCompileCoreExprhscCompileCoreExpr'dumpIfaceStatsshowModuleIndexdefaultRunMetarunMeta' $fQuasiIOEnvGetDocsFailureNameHasNoModule NoDocsInIfaceInteractiveNamegetResumeContextgetHistoryModulegetHistorySpan getModBreaks execOptionsexecStmt execStmt'runDeclsrunDeclsWithLocationrunParsedDeclsparseImportDecl resumeExecbackforwardabandon abandonAllavailsToGlobalRdrEnv getContextmoduleIsInterpretedgetInfogetNamesInScopegetRdrNamesInScope parseNameisStmt hasImportisImportisDeclgetDocs parseExpr compileExprcompileExprRemotecompileParsedExprRemotecompileParsedExprdynCompileExpr showModulemoduleIsBootOrNotObjectLinkableobtainTermFromValobtainTermFromIdreconstructType$fOutputableGetDocsFailure preprocess compileOne compileOne'link linkingNeededoneShot compileFilephaseOutputFilenamegetOutputFilenamerunPhase getLocation linkBinary exeFileNamemaybeCreateManifestwriteInterfaceOnlyModehscPostBackendPhase SummaryNodeIsBootNotBoot LoadHowMuchLoadAllTargetsLoadUpToLoadDependenciesOfdepanaldepanalPartialload'hscSourceToIsBootmoduleGraphNodes downsweepms_home_srcimps ms_home_impssummariseModule noModErrorcyclicModuleErr $fOrdIsBoot $fEqIsBoot $fShowIsBoot $fReadIsBoot ModuleInfo CoreModule cm_modulecm_typescm_bindscm_safeTypecheckedSource RenamedSource ParsedSourceDesugaredModuledm_typechecked_moduledm_core_moduleTypecheckedModuletm_parsed_moduletm_renamed_sourcetm_typechecked_sourcetm_checked_module_info tm_internals_pm_mod_summarypm_parsed_sourcepm_extra_src_filespm_annotations coreModuleTypecheckedMod renamedSourcetypecheckedSource moduleInfo ParsedMod parsedSourcedefaultErrorHandlerdefaultCleanupHandlerrunGhcTwithCleanupSessionsetSessionDynFlagssetProgramDynFlags setLogActiongetProgramDynFlagssetInteractiveDynFlagsgetInteractiveDynFlagsparseDynamicFlags setTargets getTargets addTarget removeTarget guessTargetworkingDirectoryChanged getModSummarytypecheckModule desugarModule loadModulecompileToCoreModulecompileToCoreSimplifiedgetModuleGraphisLoaded getBindingsgetInstsgetPrintUnqual getModuleInfomodInfoTyThingsmodInfoTopLevelScopemodInfoExportsmodInfoExportsWithSelectorsmodInfoInstancesmodInfoIsExportedNamemkPrintUnqualifiedForModulemodInfoLookupName modInfoIface modInfoRdrEnv modInfoSafemodInfoModBreaks isDictonaryIdlookupGlobalNamefindGlobalAnnsgetGREgetNameToInstancesIndex dataConTypepprParenSymNamegetTokenStreamgetRichTokenStreamaddSourceToTokensshowRichTokenStream findModule lookupModuleisModuleTrustedmoduleTrustReqs setGHCiMonadparser$fParsedModParsedModule$fOutputableCoreModule$fParsedModTypecheckedModule$fParsedModDesugaredModule$fTypecheckedModDesugaredModule!$fTypecheckedModTypecheckedModule$fDesugaredModDesugaredModule doMkDependHSpprintClosureCommandshowTermpprTypeAndContents doBackpack$fGhcMonadIOEnv$fEqSessionType++ghc-primGHC.Primseqfilterzip System.IOprint Data.Tuplefstsnd otherwise$GHC.Real fromIntegral realToFracGHC.EnumBoundedminBoundmaxBoundEnumenumFrom enumFromThenenumFromThenTo enumFromTofromEnumtoEnumpred GHC.ClassesEq==/= GHC.FloatFloatingpiexplogsqrt**logBasesincostanasinacosatansinhcoshtanhasinhacoshatanh Fractional fromRational/recipIntegral toIntegerquotremdivmodquotRemdivModMonad>>=>>returnFunctorfmap<$GHC.NumNum+*-negate fromIntegerabssignumOrd>=compareminmax><=<GHC.ReadRead readsPrecreadListReal toRational RealFloat floatRadix floatDigits floatRange decodeFloat encodeFloatexponent significand scaleFloatisNaN isInfiniteisDenormalizedisNegativeZeroisIEEEatan2RealFracproperFractiontruncateroundceilingfloorGHC.ShowShowshow showsPrecshowListControl.Monad.Fail MonadFailfail Data.FoldableFoldablefoldrlengthfoldMapfoldlfoldl'foldl1sumproductfoldr1maximumminimumelem Traversabletraverse sequenceAsequence SemigroupMonoidmemptymappendmconcat GHC.TypesBoolFalseTrueCharDoubleFloatIntinteger-wired-inGHC.Integer.TypeInteger GHC.MaybeMaybeNothingJustOrderingLTEQGTRationalIOWord Data.EitherEitherLeftRightreadIOreadLn appendFile writeFilereadFileinteract getContentsgetLinegetCharputStrLnputStrputCharGHC.IO.ExceptionioErrorGHC.IOFilePath userErrorIOErrornotElemallanyorand concatMapconcat sequence_mapM_ Data.OldListunwordswordsunlineslines Text.Readreadreadseitherlex readParenText.ParserCombinators.ReadPReadSlcmgcd^^^oddeven showParen showStringshowCharshowsShowSunzip3unzipzipWith3zipWithzip3!!lookupreversebreakspansplitAtdroptake dropWhile takeWhilecycle replicaterepeatiteratescanr1scanrscanl1scanlinitlast Data.MaybemaybeuncurrycurrysubtractasTypeOfuntil$!flip.constid=<<StringGHC.Err undefinederrorWithoutStackTraceerror&&||notmaskcatchmask_bracketfinallyhandleassertControl.ExceptionallowInterruptcatchesHandlerbracketOnErrorbracket_ onExceptiontryJust mapException handleJust catchJustPatternMatchFail RecSelError RecConError RecUpdError NoMethodError TypeErrorNonTerminationNestedAtomicallyasyncExceptionFromExceptionasyncExceptionToExceptionBlockedIndefinitelyOnMVarBlockedIndefinitelyOnSTMDeadlockAllocationLimitExceededCompactionFailedAssertionFailedSomeAsyncExceptionAsyncException StackOverflow HeapOverflow ThreadKilled UserInterruptArrayExceptionIndexOutOfBoundsUndefinedElementevaluateuninterruptibleMaskuninterruptibleMask_getMaskingState interruptiblethrowIO MaskingStateUnmaskedMaskedInterruptibleMaskedUninterruptible IOException GHC.Exceptionthrow ErrorCallErrorCallWithLocationArithException UnderflowOverflowLossOfPrecision DivideByZeroDenormalRatioZeroDenominator SomeExceptionword64Base62Len getPaddedIntgetGNUArchEntries putArchEntryfileInfoMaybeCfoldBlockNodesF3filterM short_usagesignalHandlersRefCountis_ctypecharType expandPathVar$restrictedDamerauLevenshteinDistance hashInt32mapMaybe catMaybes listToMaybe maybeToList fromMaybefromJust isNothingisJustGHC.ForeignPtr ForeignPtr mkZFastStringGHC.IO.Handle.TypesHandleskipBOMokIdOccokIdChar reservedIds reservedOpsisDashesRDoc reduceDocfirstsdocLastColourPprCodeisOneLineRealSpanisPointRealSpancombineRealSrcSpans plusWithInf mulWithInf uniqueMask TaggedVal powersetL powersetLS dotNodeEdges checkNode colorScan assignColors selectColorbytestring-0.10.10.0Data.ByteString.Internal ByteString holeUnitId rawHashUnitIdparseIntdropEqversionedFilePathGHC.LanguageExtensions.Type Extension setLanguagesetSafeHaskellcombineSafeFlags safeFlagCheck allFlagsDepsunrecognisedWarningflagSpec flagSpec' depFlagSpecOp depFlagSpecdepFlagSpecOp' depFlagSpec'depFlagSpecCond flagGhciSpec flagGhciSpec'flagHiddenSpecflagHiddenSpec'hideFlag flagSpecOfnegatableFlagsDeps dFlagsDeps fHoleFlagslanguageFlagsDepssafeHaskellFlagsDepsvalidHoleFitDefaultssmallestGroupsstandardWarnings minusWOpts minusWallOptsminusWeverythingOptsminusWcompatOptsdefaultGlobalDynFlagsmkFlagminClosureSizemk_derivData.Typeable.InternalTypeableerrMsgShortStringwithDumpFileHandlechooseDumpFilebeautifyDumpNamePackagePrecedenceIndexRevIndexpkgIdMappackageNameMap unwireMappluginModuleToPkgConfAllModuleToPkgConfAllUnitVisibility uv_renamingsuv_package_nameuv_requirements uv_explicit VisibilityMappreloadClosureInstalledUnitIdMapfromExposedModulesfromReexportedModulesfromFlag originVisible originEmptyemptyPackageConfigMapextendPackageConfigMap findPackagesselectPackages renamePackagesortByPreferencecompareByPreference reverseDepsremovePackagesdepsNotAvailableInstalledPackageIndexdepsAbiMismatchmergeDatabasesvalidateDatabasemkModuleToPkgConfAllmkUnusableModuleToPkgConfAll addListTomkModMaplibraryDirsForWayrewrites rewriteLinerewriteSymType rewriteAVX replaceOnce splitLinedirectory-1.3.6.0System.DirectorygetTemporaryDirectory entryNameentryBS SectionTablesectionTableOffsetsectionEntrySizesectionEntryCountsectionNameIndex ElfHeadergw16gw32gwNwordSize readElfHeaderreadElfSectionTablereadElfSectionByIndexfindSectionFromName readElfNoteBS runGetOrThrow ExtsBitmap pThisPackage pExtsBitmapGenSemicwarnoptallocateComments NotExportedExportedIdScope realUnique flavourIndexpprFlavourCoreppCostCentreLblppFlavourLblComponentFunTyConAlgTyCon FamilyTyCon SynonymTyCon PrimTyConPromotedDataContcRolesalgTcGadtSyntaxalgTcStupidThetaalgTcRhs algTcParentsynTcRhs famTcFlav famTcParentfamTcInj isUnlifteddataCon promDcRepInfotcTyConFlavourokParenttyConFieldLabelEnvfieldsOfAlgTcRhs kindTyConKeys mkPrimTyCon'defaultRuntimeRepVars ppr_itv_bndrspprSpaceIfPromotedTyCon ppr_equalityppr_iface_tc_appif_print_coercionsmkPiTytyCoVarsOfTypesSetnoFreeVarsOfProvsubstForAllCoBndrUncheckedsubstVarBndrUncheckedsubstTyVarBndrUsingsubstCoVarBndrUsing TypeOrderingTLTTEQTEQXTGTsplitTyVarForAllTysfun_kind_arg_flags wrapLitNumbermkLitIntUncheckedmkLitWordUncheckedmkLitInt64UncheckedmkLitWord64UncheckedBody'FlatSwitchPlanmaxJumpTableHoleminJumpTableSizeminJumpTableOffsetmkRuntimeRepCo isGReflMComkForAllCo_NoReflmkHomoForAllCos_NoRefldowngradeRole_maybe instCoercion instCoercionsextendLiftingContextEx ty_co_subst tc_match_tystc_match_tys_x tc_unify_tys don'tBeSoSure ty_co_matchdcTagdataConKindEqSpecfitsIn kindPrimRepExnStrVanStr Termination ThrowsExnDunnoLazyArgStrHyperStrSCallSProdHeadStrcollectValBindersvanillaCafInfounboxedTupleSumKind mkSumTyConOccmkSumDataConOcc unboxedSumArrmk_sumextractPromotedListpcDataConWithFixitysizeAnnnoAnnpprArg pprTopBindsD:R:XRhsClosureCodeGen lf_unarisedcheckNoCurrentCCSControl.Monad.Trans.RWS.StrictRWST removeRhsCCCSlocal mkFreeVarSet&&& CmmLabelInfo CmmRetInfoCmmRetCmmCode CmmClosure CmmPrimCallRtsSelectorInfoTableRtsApInfoTable RtsApFastClosure InfoTableEntryLocalInfoTable LocalEntry RednCountsConEntry ConInfoTable ClosureTableBytesBlockInfoTable AsmTempLabelAsmTempDerivedLabelIdLabelLocalBlockLabelRtsLabel ForeignLabelDynamicLinkerLabel PicBaseLabelDeadStripPreventer HpcTicksLabelSRTLabelLargeBitmapLabel labelType scopeToPaths scopeUniquesppLlvmFunctionHeader ppLlvmBlocks ppLlvmBlockppLlvmBlockLabelppLlvmStatementppLlvmExpressionppCallnewLine exclamationrootN envVersion envDynFlags envOutputenvUniq envFreshMeta envUniqMeta envFunMap envAliases envUsedVars envVarMap envStackRegs llvmGhcCC modifyEnv saveAlias structStrllvmSectionType llvmSection genStaticLit sortBlocks mkDepBlocks updateFact LlvmAccumEOption exprToVarExprDatabasicBlocksCodeGenbasicBlockCodeGen stmtsToInstrs stmtToInstrs getInstrinct2 getInstrinctbarrier barrierUnlessgenCallgenCallWithOverflowgenCallExtract getFunPtrW getFunPtr arg_varsWarg_vars castVarsWcastVarscastVarcmmPrimOpFunctionsgenJump genAssigngenStore genStore_fast genStore_slow genBranch genCondBranch genExpectLit genSwitchi1Option wordOption genMachOpgenMachOp_fastgenMachOp_slowgenLoad genLoad_fast genLoad_slow getCmmReg getCmmRegValallocReggenLit funPrologue funEpilogue getTrashStmts getHsFuncdoExpr expandCmmReg blockIdToLlvmtoI32 getTBAAMetagetTBAARegMetasingletonPanic BlockContext blockContextsBlockEntryLiveness noLiveOnEntry conflicts inlineSRT wordAlignedmkLivenessBits dont_care copyTickscmmDataLlvmGens fixBottom cmmLlvmGencmmMetaLlvmPreludecmmUsedLlvmGensupdateEdgeWeightcheckIsReverseDependentcomputeLiveness livenessBlocklivenessForward livenessBack makeRAStatsCleanS sJumpValid sJumpValidAcc sReloadedBy sCleanedCountsCleanedSpillsAccCleanMSlot cleanSpincleanBlockForward cleanForward cleanReloadcleanTopBackwardcollateJoinPoints findRegOfSlot initCleanS accJumpValid isStoreReg emptyAssocaddAssocdelAssoc delAssoc1 elemAssoc closeAssocintersectAssoc cleanBackwardSpillSstateUS stateSpillSLSpillM regSpill_topregSpill_blockregSpill_instr spillRead spillWrite spillModify patchInstr initSpillSmakeSpillStats buildAllocsinkReg LoopMember takeVirtualsspillCost_length nodeDegreeBndrMapTypeMapGDeBruijnTypeMapXCoreMapXCoreMapG trieMapView deBruijnizeCseEnv ce_conAppMapce_subst ce_bndrMap ce_in_scopeinitEnvmkStgLetNormMallTyCoVarsInTysallTyCoVarsInTyexprFVsexprsFVsexprSomeFreeVarsDSetexprsSomeFreeVarsDSet exprOrphNamesruleFVsrulesFVs ruleLhsFVIds tc_eq_typetcTyFamInstsAndVisXtcTyConAppTyFamInstsAndVisXLitBoundmk_discrete_switchDecls addVarDecladdLabelemitCallWithExtraStackslowArgsbinderInfoOccursAsArgtagSkeletonExpr rhsDmdShell closureSizeidClosureFootprinttagSkeletonLettagSkeletonBindingliftRhs generic_gc mkGcLabelSRTMap thisModule dedupSRTsflatSRTsgetLabelledBlocks depAnalSRTsgetCAFs getStaticFuns resolveCAFdoSCConeSRT buildSRTChain updInfoSRTs closeNursery openNursery asUnsignedgenericWordAddCOpgenericWordSubCOpdoPrefetchByteArrayOpdoPrefetchMutableByteArrayOpdoPrefetchAddrOpdoPrefetchValueOpmkBasicPrefetchdoNewByteArrayOpdoCopyByteArrayOpdoCopyMutableByteArrayOpdoCopyByteArrayToAddrOpdoCopyMutableByteArrayToAddrOpdoCopyAddrToByteArrayOpdoSetByteArrayOp doNewArrayOp doCopyArrayOpdoCopyMutableArrayOpemitCloneArrayemitCloneSmallArray emitSetCards doAtomicRMWdoAtomicReadByteArraydoAtomicWriteByteArrayemitMemcpyCallemitMemmoveCallemitMemsetCall emitCopyArrayemitCopySmallArraydoCasByteArraysm_spsm_args sm_ret_offsm_regs fixupStackallocate manifestSpfalseStackCheckelimStackStoresinsert_overlappingReprFlagSymFlagopt_co1opt_co2opt_co3 opt_co4_wrapopt_co4 opt_phantomwrapRole chooseRoleconPatNeedsParenshasReturnKindSignaturetyConToDataConnudgeHsSrcBangs checkTyVars checkNoDocs pStrictMarkisNegatedPmLit isNilPmExpr isPmExprEq isConsDataCon substPmExpr pprPmExprWhetherHasFamInsthptAnnshptSomeThingsBelowUs tyCoFVsOfCt tyCoFVsOfCts tyCoFVsOfWCtyCoFVsOfImplic lGRHSCtOriginpprCtOminuslogExactdivide rootExactgenRootgenLoglabelledTraceOptTcRn add_warn_atzonkTcTypeMapperimportSuggestions ShNameSubst ns_module substNamesubstNameAvailInfosetNameFieldSelector mergeAvails uAvailInfos uAvailInfouName uHoleNameShIfEnvShIfM initRnIface rnIfaceGlobalrnIfaceNeverExportedrnIfaceClsInst orIfNotFoundhomeSearchCachefindInstalledHomeModulefindPackageModulefindPackageModule_ mkHiePath liftIOEnvQextQext1Qext2Qext1ext2warnSpaceAfterBangmjmu toUnicodeAnnaaamamsajsammsamsumomcmcommasmvbarsollaslHappyStk ForeignRef RemoteRefshouldTickBindaddTickLHsExprLetBodytickSameFileOnlymkMaps subordinates conArgDocs classDecls declTypeDocstypeDocstopDeclsungroup sortByLoc collectDocs filterDecls filterClasses isUserSigmkDeclsisDivOp exprIsHNFlike diffIdInfo diffUnfoldlocBindmkCoreAppTypedmkSmallTupleSelector1noFloatIntoRhsExitifyM exitifyRec substIdBndrcse_bindCSEnvnoCSE addBindervanillaArityTypedecideJoinPointHood ruleCantMatchmatchNExprSize _es_size_is_es_args _es_discountlitSizecallSizejumpSizePrimOpsaddsubmulmkL:-::**::*::++::+:OpValBinOpApp boundsCmp intResult intCResult wordResult wordCResultleftIdentityCDynFlagsrightIdentityCDynFlagsidentityCDynFlagsnumFoldingRulesdataConSrcToImplBang dataConArgRep UnariseEnv extendRhounariseSumAltsmkUbxSum unariseFunArg unariseConArgStgToDoStgCSE StgUnarise StgDoNothing getStgToDoDictBind specImportsmkDBbind_fvsrecWithDumpedDicts simplTick makeTrivialmakeTrivialWithInfoknownKeyNamesOkaycgTickinfoConvwithSourceNoteinitBinMemSize fromHieNameloadInterfaceWithExceptionis_external_sigcomputeInterface reportablelookupFixityRn'lookupExactOcc_eitherFreeKiTyVarsNoDups FreeKiTyVarsFreeKiTyVarsWithDupsOpNameNormalOpNegateOp UnboundOpRecFldOppartition_nwcswildCardsAllowedcheckPolyKindslookupFixityOp extract_tyarg rnImportDecl gresFromIEwarnMissingSignaturescheckPatSynParentaddFingerprintsgetOrphanHashesmkIfaceAnnCache checkVersions checkPlugins checkHsigcheckHie checkFlagHashcheckOptimHash checkHpcHash checkModUsageassertConsistentCaInfoconsistentCafInfo myCollectArgs AllowAnywhereAllowAtTopLevelRejectEverywherelf_check_static_ptrslf_report_unsat_synslintRhs lintCoreExpr withoutAnnots mk_cast_errInjErrorBuildercheckForInjectivityConflictsunusedInjTvsInRHS isTFHeadedbareTvInRHSViolatedinjectivityErrorHeraldconflictInjInstErrunusedInjectiveVarsErr tfHeadedErrbareVariableInRHSErrcpe_env FloatTick cpeBodyNFCpeBodycpeBodyFloatsokCpeArgguardIntegerUseguardNaturalUse wrapTickscollectCostCentrescvtOpApp cvtOpAppPmk_apps mk_arr_apps cvtOpAppTcvtMaybeKindToFamilyResultSigcvtFamilyResultSigcvtInjectivityAnnotation mkHsForAllTytemplate-haskell TyVarBndr mkHsQualTyCxtGHC.SerializeddeserializeWithDataserializeWithDatafromSerialized toSerialized SerializedmergeStaticObjectsObjectsmakeForeignNamedHValueRefs linkSomeBCOs getGCCPathsgccSearchDirCachegetSystemDirectories addEnvPathsBCEnvpushConstrAtomisSupportedCConvmkStackOffsets mkProtoBCOisAbstractIfaceDeclmergeIfaceDeclmergeIfaceDecls tc_iface_declmkDsEnvsFromTcGblextendIdZonkEnvRec TmOracleEnvvarInsolveComplexEqextendSubstAndSolvesimplifyComplexEqsimplifyPmExprsimplifyEqExprapplySubstComplexEq varDeepLookupInstDeclFreeVarsMapClosedTyFamInfo ClosedTyFamNotClosedTyFampatchForeignImportcheckCanonicalInstances rnRoleAnnotsmkInstDeclFreeVarsMaprnAndReportFloatingViaTvsrnInjectivityAnnextendPatSynEnv runRnSpliceStmtTree MonadNamesrnStmtsWithPostProcessing postProcessStmtsForApplicativeDonoPostProcessStmtsrebindableContextrearrangeForApplicativeDomkStmtTreeHeuristicmkStmtTreeOptimalstmtTreeToStmtssegments splitSegmentmkApplicativeStmtneedJoin isReturnApprnStmt mkHEqBoxTy mkEqBoxTytraceTR instSchemeReportreport_unsolved importantrelevant_bindingsvalid_hole_fitsdeferringAnyBindingsnoDeferredBindings ReportErrCtxtmkCoercibleExplanation pprWithExplicitKindsWhenMismatchexpandSynonymsToMatchSafeOverlapping matchTypeabledoFunTy doTyConApponlyNamedBndrsApplieduseVarsFlattenTvResultFTRNotFollowed FTRFollowedFlatM FlattenEnvsetEqRelnoBogusCoercionsflatten_args_fastflatten_args_slow flatten_co split_pi_tys'ty_con_binders_ty_binders' zonk_eq_typescan_eq_newtype_nc canEqCast canEqFailurecanEqHardFailure canCFunEqCancanEqReflexiveandWhenContinueTcPluginProgresspluginInputCtspluginSolvedCts pluginBadCts pluginNewCts SolvedCtsSplitCtsrunTcPluginsGivenrunTcPluginsWanted runTcPluginsnaturallyCoherentClassdefaultCallStacksdefaultTyVarTcS ValidityEnv ExpandModeExpandNoExpandBothinitialExpandModecheckHasFieldInstcheckValidTypePatsisTerminatingClassppr_tidycheck_arg_typecheckValidFamPatsmk_showString_appmk_showsPrec_app mk_shows_app mkFunBindSE mkFunBindEC postfixModTbl assoc_ty_idassoc_ty_id_maybemkAuxBinderNameArgTyAlg argTyFoldfoldBal cond_stdOK ConditionTcTyModetc_infer_lhs_typetc_infer_hs_typetc_infer_hs_type_ektcTyApps newWildTyVarbindExplicitTKBndrsXkindGeneralizeLocal finish_tuplekcLHsQTyVars_CuskkcLHsQTyVars_NonCuskisCompleteHsSigmatchExpectedPatTy isFlexiTyVarinferConstraintsDataConArgsinferConstraintsDAC simplifyDeriv localSigWarnKindRepM KindRepEnvtrTyConDataCon trNameLit TypeRepTodoExportedKindRepsTodo mod_rep_exprpkg_fingerprintmod_fingerprint todo_tycons TypeableTyConmkTypeRepTodoBindsmkPrimTypeableTodosghcPrimTypeableTyCons collect_stuff mkTrNameLitmkTyConRepBindsbuiltInKindRepsmkExportedKindReps runKindRepM getKindRep mkKindRepRhsmkTyConRepTyConRHS SynCycleMcheckNameIsAcyclictc_patsyn_finishmkPatSynRecSelBindstauifyMultipleMatches tcMatchesNotClosedReasontcArgscheckClosedInStaticForm tcSynArgE tcSynArgAcheckHsigIface check_instrequirementMergesifaceDeclNeverExportedRefscheckImplementswarnAboutOverflowedLiteralsgetLHsIntegralLitgetIntegralLitgetSimpleIntegralLitrepFamilyResultSigrepFamilyResultSigToMaybeKindrepInjectivityAnn repTyVarBndr repMaybeLTy coreNothing coreNothing'coreJust coreJust'PmArityInhabitationCandidateic_tm_ctic_ty_csic_strict_arg_tysUncoveredCandidatesPmResult Provenance FromBuiltin FromCompleteDeltaValVec emptyPmResultuncoveredWithTy checkSingle' checkMatches'checkEmptyCase'pmIsClosedTypepmTopNormaliseType_maybepmInitialTmTyCspmIsSatisfiabletmTyCsAreSatisfiablecheckAllNonVoidnonVoiddefinitelyInhabitedTypeinhabitationCandidatesfake_pat isFakeGuardmkCanFailPmPat nilPattern mkLitPatterntranslatePatVectranslateConPatVectranslateGuardscantFailPatterntranslateGuard translateLet translateBindtranslateBoolGuard pmPatType mkOneConFullmkGuardmkNegEqmkPosEqmkIdEqmkPmVarmkPmVarsmkPmId mkPmId2Forms vaToPmExpr coercePatVec coercePmPatsingleConstructorallCompleteMatchestyOracle patVecArity patternArityrunManymkInitialUncoveredpmcheckIpmcheckpmcheckGuardsI pmcheckGuards pmcheckHdI pmcheckHdusimpleutailuconkconmkUnionmkConsforcesforce_if substInValAbs wrapUpTmStatedsPmWarn warnPmIters exhaustiveexhaustiveWarningFlag ValSetAbsPatVecValAbsPatterndsHsBind makeCorePairds_ev_typeablegetRep dsMcBindStmtmaxBuildLengthcheckForcedEtaExpansionbadUseOfLevPolyPrimop deriveClause mkDataTypeEqn mkNewTypeEqn tcInjectivity rejigConReswrongNumberOfParmsErrgetFamDeclInitialKindsgetFamDeclInitialKindtcDefaultAssocDecl mkGADTVars PlanResult clearTcGblEnvrun_th_modfinalizers andThenCheck checkUnless checkListBycheck checkSuccesstcPreludeClashWarn getMainFunrunPlans tcUserStmt tcGhciStmts getGhciStepIOtcMissingParentClassWarnHasTypeToHieTVScopedPScopedRScoped SigContextPatSynFieldContext BindContext IEContext RFContext listScopes patScopestvScopesPS mk_absent_letuseLetUpextendAnalEnvsx86_regUsageOfInstr interestingx86_patchRegsOfInstrx86_mkSpillInstrx86_mkLoadInstrx86_takeDeltaInstrx86_mkRegRegMoveInstrx86_takeRegRegMoveInstrx86_mkJumpInstrneeds_probe_call pprSizeDeclpprSectionAlignpprAlignForSectionsparc_regUsageOfInstrsparc_patchRegsOfInstrsparc_mkSpillInstrsparc_mkLoadInstrsparc_takeDeltaInstrsparc_mkRegRegMoveInstrsparc_takeRegRegMoveInstrsparc_mkJumpInstrpprRegpprReg_ofRegNo pprStFormatpprCondpprAddrpprRIpprFormatRegRegpprFormatRegRegReg pprRegRIReg expandBlockexpandBlockInstrs remapRegPairfRegHi maxSpinCount regAlloc_spin buildGraphgraphAddConflictSetgraphAddCoalescepatchRegsFromGraphppc_regUsageOfInstrppc_patchRegsOfInstrppc_isJumpishInstrppc_jumpDestsOfInstrppc_patchJumpInstrppc_mkSpillInstr stackAlignppc_takeDeltaInstrppc_mkRegRegMoveInstrppc_mkJumpInstrppc_takeRegRegMoveInstr integerExtend conversionNopidivirem coerceInt2FP coerceFP2Int coerceDbl2Flt coerceFlt2Dbl picRelativeaddSpUnwindingsjumpTableEntrygetSimpleAmodeaddAlignmentCheckgenCondBranch'arg_to_int_vregs move_final assign_codeoutOfLineMachOpoutOfLineMachOp_table BlockSequence BlockChainneighbourOverlappfuseEdgeThreshold breakChainAt fuseChainscombineNeighbourhoodmakeRegMovementGraph expandNodehandleComponentmakeMovejoinToTargets'linearRegAlloc processBlock initBlocklinearRAraInsn clobberRegs newLocationloadTemplinearRegAlloc' DwarfAbbrev DwAbbrNull pprAbbrevpprDwarfInfoOpenpprDwarfInfoClose pprFrameProc pprFrameBlockdwarfGlobalRegNo pprSetUnwind pprLEBRegNo pprUnwindExprpprUndefUnwindpprData4 pprString' pprString escapeChar mkDwarfARangecompileUnitHeadercompileUnitFooterdebugSplitProcs procToDwarf blockToDwarf debugFrame procToFrame NativeGenAcc ngs_natives ngs_unwinds cmmNativeGens checkLayoutcomputeUnwindingmakeImportsDoclogWarningsReportErrors ioMsgMaybe'extract_renamed_stuff hscTypecheckhscIncrementalFrontendhscCheckSafeImportscheckSafeImports hscCheckSafe' checkPkgTrustmarkUnsafeInferhscGetSafeMode hsc_typecheck seqSerializedaddModFinalizerRef runRemoteTH readQResult getTHState annotThTypetyConArgsPolyKindedfindEnclosingDeclsupdateFixityEnvpipeLoopfastLlvmPipeline llvmOptions linkStaticLibsourceModifiedgetGhcVersionPathName runPipeline'MakeNewModSummarymakeNewModSummaryCompilationGraphGHC.MVarMVarLogQueue StableModulesupsweep loadFinish discardProg discardICguessOutputFilepruneHomePackageTablefindPartiallyCompletedCyclesbuildCompGraph BuildModule parUpsweep upsweep_mod getModLoopwarnUnnecessarySourceImportsenableCodeGenForTHenableCodeGenForUnboxedTuplesenableCodeGenWhenmsDepsparUpsweep_onegetPreprocessedImportscheckBrokenTablesNextToCodecheckNewDynFlagsbindSuspensionsBkpEnv bkp_session bkp_filename bkp_table bkp_levelBkpM SessionType ExeSession TcSession CompSessionwithBkpSession hsunitDeps getBkpEnv getBkpLeveloverHscDynFlags innerBkpM updateEpsGhc_ getEpsGhcinitBkpMbackpackProgressMsg mkBackpackMsg backpackStyle msgTopPackage msgUnitId msgIncludehsunitModuleGraphhsModuleToModSummarynewInstalledUnitId