h"(Y      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                     !!!!!!!!!!"""""""""""""""""""""""""#$%&'''()***)*())***(+,,,,,--------------....                                                                                                                                                                                                                                                     /00000000000001111112222222222333333333333333333444444444444445555555666666666666666                                                                            7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 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 : : : : : : : : :  1       ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < = = = = = = = = = = = = = = = = = = = = = = = = = = = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 > > > > > > > > > > > ? @ @ @ @ @ @ A A A A A A A A A AAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII++++++++++++++++JJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222OOOOPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQRRRRRSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTT&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%UUUUUUUUUUUUUUUUVVVWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]*]]]]]]]^^^^____```````aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabccccccccccccccccccccccccddddddddddddddddddddddddddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeefffffffffffffffffffffffgggggggggggggggghhhhhhhhhhhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijjjjjjjjjjjjjjkkllllllllllllllllllllllll                                      mmmmmmmmmmm m m m m m m m m m m m m m m m m m m m m m m m n n n n n n n n n n n n n n n n n n n n n n n n n o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!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!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"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"p"p"p"p"p"p"p"p"p"p"p"p"p"p"p"p"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q"q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q$q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q%q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q&q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q'q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q(q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*q*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*s*t*t*t*t*t*t*t*t*t*t*t*t*t*t*t*t*t*t*t*t*t*t*t*t*t*t*t*u*u*u*u*u*u*u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+v+v+v+v+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+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+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',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-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-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-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{-{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}/}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}0}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1~1~111111111111111111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)222333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333334444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444455555555555555555555555555555*5*5*5*5*5*5*5*5*5*5*5*5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555666666666666666666666666666666666666666666666666666666666666666666666666*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(7(7(7*7*7*7*7*7x7x7^7(7*7*7*7(7*7*7^7^7*7*7*7*7*7*7*7*7*7)7)7*7*7)7(7(7(7(7(7(7(7(7(7(7(7(7(7(7(7(7(7(7(7(7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7777777777777777777x7x7x7x7x7x7x7x7x7x7x7x7x7x8x8x8x8x8x8x8x8x8x8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888899999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999::::::::::::::::::::::::*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<==============)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=========>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC:C:C:C:C:C:C:C:C:C:C:C:C:C:C:C:C:C:C:C:C:C:C:C:C:C:C:C:C:C:C:C:C:C:C:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHDHDHDHDHDHDHDHDHDHDHDHDHDHDHDHDHDHDHDHDHDHDHDHDHDHDHDHDHDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP]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]P]P]P]P]P]P]P]P]P]P]P]P]P]P]P]P]P]P]P]P]P]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]Q]QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUU^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^U^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^V^VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYY~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~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~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~YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^________________________________________________________________________________________________________________________________````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggghhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrsssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssvsvsvsvsvsvsvsvsvsvsvsvsvsvsvsvsvsvsvsvsvsvsvsvsvsvsvsvsvsvsvsvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v w w w w w w w w w w w w w w w 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 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 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 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 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 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 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 y yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~€ÀĀŀƀǀȀɀʀˀ̀̀΀πЀрҀӀԀՀր׀؀ـڀۀ܀݀ހ߀ÁāŁƁǁȁɁʁˁ́́΁ρЁсҁӁԁՁցׁ؁فځہ܁݁ށ߁‚ÂĂłƂǂȂɂʂ˂̂͂΂ςЂт҂ӂԂՂւׂ؂قڂۂ܂݂ނ߂ƒÃăŃƃǃȃɃʃ˃̃̓΃σЃу҃ӃԃՃփ׃؃كڃۃ܃݃ރ߃„ÄĄńƄDŽȄɄʄ˄̄̈́΄τЄф҄ӄԄՄքׄ؄لڄۄ܄݄ބ߄…ÅąŅƅDžȅɅʅ˅̅ͅ΅υЅх҅ӅԅՅօׅ؅مڅۅ܅݅ޅ߅†ÆĆņƆdžȆɆʆˆ̆͆ΆφІц҆ӆԆՆֆ׆؆نچۆ܆݆ކ߆‡ÇćŇƇLJȇɇʇˇ͇̇·χЇч҇ӇԇՇևׇ؇هڇۇ܇݇އ߇ˆÈĈňƈLjȈɈʈˈ͈̈ΈψЈш҈ӈԈՈֈ׈؈وڈۈ܈݈ވ߈‰ÉĉʼnƉljȉɉʉˉ͉̉ΉωЉщ҉ӉԉՉ։׉؉ىډۉ܉݉މ߉ŠÊĊŊƊNJȊɊʊˊ̊͊ΊϊЊъҊӊԊՊ֊׊؊يڊۊ܊݊ފߊ‹ËċŋƋNjȋɋʋˋ̋͋΋ϋЋыҋӋԋՋ֋׋؋ًڋۋ܋݋ދߋŒÌČŌƌnjȌɌʌˌ̌͌ΌόЌьҌӌԌՌ֌׌،ٌڌی܌݌ތߌÍčōƍǍȍɍʍˍ͍̍΍ύЍэҍӍԍՍ֍׍؍ٍڍۍ܍ݍލߍŽÎĎŎƎǎȎɎʎˎ͎̎ΎώЎюҎӎԎՎ֎׎؎َڎێ܎ݎގߎÏďŏƏǏȏɏʏˏ̏͏ΏϏЏяҏӏԏՏ֏׏؏ُڏۏ܏ݏޏߏÐĐŐƐǐȐɐʐː̐͐ΐϐАѐҐӐԐՐ֐אِؐڐېܐݐސߐ‘ÑđőƑǑȑɑʑˑ̑͑ΑϑБёґӑԑՑ֑בّؑڑۑܑݑޑߑ’ÒĒŒƒǒȒɒʒ˒̒͒ΒϒВђҒӒԒՒ֒גْؒڒےܒݒޒߒ“ÓēœƓǓȓɓʓ˓͓̓ΓϓГѓғӓԓՓ֓דؓٓړۓܓݓޓߓ”ÔĔŔƔǔȔɔʔ˔͔̔ΔϔДєҔӔԔՔ֔הؔٔڔ۔ܔݔޔߔ•ÕĕŕƕǕȕɕʕ˕͕̕ΕϕЕѕҕӕԕՕ֕וٕؕڕەܕݕޕߕ–ÖĖŖƖǖȖɖʖ˖̖͖ΖϖЖіҖӖԖՖ֖זٖؖږۖܖݖޖߖ—×ėŗƗǗȗɗʗ˗̗͗ΗϗЗїҗӗԗ՗֗חؗٗڗۗܗݗޗߗ˜ØĘŘƘǘȘɘʘ˘̘͘ΘϘИјҘӘԘ՘֘טؘ٘ژۘܘݘޘߘ™ÙęřƙǙșəʙ˙̙͙ΙϙЙљҙәԙՙ֙יؙٙڙۙܙݙޙߙšÚĚŚƚǚȚɚʚ˚͚̚ΚϚКњҚӚԚ՚֚ךؚٚښۚܚݚޚߚ›ÛěśƛǛțɛʛ˛̛͛ΛϛЛћқӛԛ՛֛כ؛ٛڛۛܛݛޛߛœÜĜŜƜǜȜɜʜ˜̜͜ΜϜМќҜӜԜ՜֜ל؜ٜڜۜܜݜޜߜÝĝŝƝǝȝɝʝ˝̝͝ΝϝНѝҝӝԝ՝֝ם؝ٝڝ۝ܝݝޝߝžÞĞŞƞǞȞɞʞ˞̞͞ΞϞОўҞӞԞ՞֞מ؞ٞڞ۞ܞݞޞߞŸßğşƟǟȟɟʟ˟̟͟ΟϟПџҟӟԟ՟֟ן؟ٟڟ۟ܟݟޟߟ àĠŠƠǠȠɠʠˠ̠͠ΠϠРѠҠӠԠՠ֠נؠ٠ڠ۠ܠݠޠߠ¡áġšơǡȡɡʡˡ̡͡ΡϡСѡҡӡԡա֡סء١ڡۡܡݡޡߡ¢âĢŢƢǢȢɢʢˢ̢͢΢ϢТѢҢӢԢբ֢עآ٢ڢۢܢݢޢߢ£ãģţƣǣȣɣʣˣ̣ͣΣϣУѣңӣԣգ֣ףأ٣ڣۣܣݣޣߣ¤äĤŤƤǤȤɤʤˤ̤ͤΤϤФѤҤӤԤդ֤פؤ٤ڤۤܤݤޤߤ¥åĥťƥǥȥɥʥ˥̥ͥΥϥХѥҥӥԥե֥ץإ٥ڥۥܥݥޥߥ¦æĦŦƦǦȦɦʦ˦̦ͦΦϦЦѦҦӦԦզ֦צئ٦ڦۦܦݦަߦ§çħŧƧǧȧɧʧ˧̧ͧΧϧЧѧҧӧԧէ֧קا٧ڧۧܧݧާߧ¨èĨŨƨǨȨɨʨ˨̨ͨΨϨШѨҨӨԨը֨רب٨ڨۨܨݨިߨ©éĩũƩǩȩɩʩ˩̩ͩΩϩЩѩҩөԩթ֩שة٩ک۩ܩݩީߩªêĪŪƪǪȪɪʪ˪̪ͪΪϪЪѪҪӪԪժ֪תت٪ڪ۪ܪݪުߪ«ëīūƫǫȫɫʫ˫̫ͫΫϫЫѫҫӫԫի֫׫ث٫ګ۫ܫݫޫ߫ Safe-Inferred %&'() *+,-  ./012356$#"78[]^\9:! ;IL<=>?@AJKBQOPCDEFMNbcdefghijklmprstyz{|}~ %&'() *+,-  ./012356$#"78[]^\9:! ;IL<=>?@AJKBQOPCDEFMNbcdefghijklmprstyz{|}~ Safe-InferredLghc 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.ghcTurn a Stream into an ordinary list, by demanding all the elements.ghcTurn 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  on Streams. This is a simple way to map over a Stream while carrying some state around.   Safe-InferredNone Safe-Inferred! Safe-InferredghcmaybeFlipCond c returns Just c'= if it is possible to flip the arguments to the conditional c", and the new condition should be c'.ghc If we apply maybeInvertCond 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. Safe-Inferred'ghcBranch condition codes.None567:: Safe-Inferred '(./25 ghc2A sequence of nodes. May be any of four shapes (OO, OC, CO, CC). 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.ghc!Maybe type indexed by open/closedghc6Either type indexed by closed/open using type familiesghcUsed at the type level to indicate "open" vs "closed" structure.ghcAn "open" structure with a unique, unnamed control-flow edge flowing in or out.  Fallthrough2 and concatenation are permitted at an open point.ghcA "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.ghcSplit 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.ghcFold a function over every node in a block, forward or backward. The fold function must be polymorphic in the shape of the nodes.))  Safe-Inferred ! Safe-InferredghcDefault maximum depth for both class instance search and type family reduction. See also #5395.ghcDefault maximum constraint-solver iterations Typically there should be very few  "None  K ghc File name.ghcFile modification time.ghc File owner.ghc File group.ghc File mode.ghc File size.ghc File bytes.ghc)Archives have numeric values padded with '\x20' to the right.ghcGNU Archives feature a special // 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  in the archive.ghcput 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.ghcTake a filePath and return (mod time, own, grp, mode in decimal)ghc%mod time, own, grp, mode (in decimal)#None ghcDoes the controlling terminal support ANSI color sequences? This memoized to avoid thread-safety issues in ncurses (see #17922).ghcCheck if ANSI escape sequences can be used to control color in stderr., Safe-InferredsghcWhen 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.-Noneghc6Size of a 64-bit word when written as a base-62 stringghc,Converts a 64-bit word into a base-62 string. Safe-Inferred-|nop¬ìĬŬƬǬȬɬʬˬ̬ͬάϬЬѬҬӬԬլ֬xuwv׬ج٬ڬ۬ܬݬެ߬None _`aR Ra`_ None9 ghcSettings for what GHC this is.ghcPaths to various files and directories used by GHC, including those that provide more settings.ghc)Settings for other executables GHC calls.Probably should further split down by phase, or split between platform-specific and platform-agnostic.ghcLLVM: opt llvm optimiserghcLLVM: llc static compilerghcLLVM: c compilerghc?cached Fingerprint of sOpt_P See Note [Repeated -optP hashing]ghcLLVM: llvm optimiserghcLLVM: llc static compilerghcLLVM: c compilerghc iserv options/None Safe-InferredYghcmapAndUnzipM for triplesghcMonadic version of mapAccumLghcMonadic version of mapSndghcMonadic version of concatMapghcApplicative version of mapMaybeghcMonadic version of fmapghcMonadic version of fmapghcMonadic version of {&, aborts the computation at the first True valueghcMonad version of z&, aborts the computation at the first False valueghcMonadic version of orghc1Monadic version of foldl that discards its resultghc-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 ), only it reverses the sense of the test.ghccombining functionghc initial stateghcinputsghcfinal state, outputs#46#"$UTV#6#"$4UTV0 Safe-Inferred5  3None!ghcThis type is very similar to , but it omits the constructors that involve pretty-printing via  . Due to the implementation of v for  , this type can be caught as a .Note 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 errorghcA problem with the command line arguments, but don't print usage.ghcThe  impossible happened.ghcThe 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.ghcShort 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.ghcThrow a failed assertion exception for a given filename and line number.None(ghc=GHC's own exception type error messages all take the form:   location:  error If the location is on the command line, or in GHC itself, then  location9="ghc". All of the error types below correspond to a  location 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 errorghcA problem with the command line arguments, but don't print usage.ghcThe  impossible happened.ghcThe 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.ghcShow 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 catchghc-We use reference counting for signal handlersghcTemporarily install standard signal handlers for catching ^C, which just throw an exception in the current thread.$noxwvu$xwvunoNone*ghcExpand occurrences of the $tooldir interpolation in a string on Windows, leave the string untouched otherwise.ghc.Returns a Unix-format path pointing to TopDir.ghcMaybe TopDir path (without the '-B' prefix).ghcTopDir (in Unix format  separated)ghctopdir4None+ZghcThe predicates below look costly, but aren't, GHC+GCC do a great job at the big case below.5None-ghc9We need 8 bytes because our largest registers are 64 bit.ghcWe (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.ghcCheck 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.6None.None-E#ghc'A call stack constraint, but only when  isDebugOn.ghc+Apply a function iff some condition is met.ghcA for loop: Compose a function with itself n times. (nth rather than twice)ghc3Like filter, only it reverses the sense of the testghcUses a function to determine which of two output lists an input element should joinghc is a kind of 0 that is lazy in the second list (observe the ~)ghc is like  but is lazy in the second list. The length of the output is always the same as the length of the first list.ghc is like  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.ghc 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.ghc 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 L;, then it takes an element from the former list. If it is I, 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" This function does not check whether the lists have equal length.ghc takes a list of Bools and a list of some elements and partitions the list according to the list of Bools. Elements corresponding to L+ go to the left; elements corresponding to I go to the right. For example, ;partitionByList [True, False, True] [1,2,3] == ([1,3], [2]) This function does not check whether the lists have equal length; when one list runs out, the function stops.ghcstretchZipWith p z f xs ys stretches ys by inserting z in the places where p returns TrueghcThis has the effect of making the two lists have equal length by dropping the tail of the longer one.ghcatLength 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) ghc &(lengthExceeds xs n) = (length xs > n)ghc '(lengthAtLeast xs n) = (length xs >= n)ghc "(lengthIs xs n) = (length xs == n)ghc %(lengthIsNot xs n) = (length xs /= n) ghc &(lengthAtMost xs n) = (length xs <= n) ghc ((lengthLessThan xs n) == (length xs < n) ghcTrue if length xs == length ys ghcTrue if length xs <= length ys ghcTrue if length xs < length ys ghcSplit a list into chunks of n elements ghc8Replace the last element of a list with another element. ghc=Remove duplicates but keep elements in order. O(n * log n) ghc+spanEnd p l == reverse (span p (reverse l)). The first list returns actually comes after the second list (when you look at the input list). ghc-Get the last two elements in a list. Partial! ghcSplit a list into its last element and the initial part of the list. %snocView xs = Just (init xs, last xs) for non-empty lists. snocView xs = Nothing otherwise. Unless both parts of the result are guaranteed to be used prefer separate calls to last + init. If you are guaranteed to use both, this will be more efficient. ghc=Convert a word to title case by capitalising the first letterghcFind 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 explanation ghcSearch for possible matches to the users input in the given list, returning a small number of ranked results ghc*Determine the $log_2$ of exact powers of 2 ghcA sample hash function for Strings. We keep multiplying by the golden ratio and adding. The implementation is: hashString = 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.ghcA 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 + 32768SW       W   S   9  3 2 None-5?HP 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 D action, failing on error.AJK    47(c) Matt Morrow 2009 BSD3   experimental  portable None?L  ghc Dominators. Complexity as for idom ghcPost-dominators. Complexity as for idom. ghcDominator tree. Complexity as for idom. ghcPost-dominator tree. Complexity as for idom. ghcImmediate dominators. O(|E|*alpha(|E|,|V|)), where  alpha(m,n)4 is "a functional inverse of Ackermann's function".This Complexity bound assumes O(1) indexing. Since we're using IntMap, it has an additional lg |V|0 factor somewhere in there. I'm not sure where. ghcImmediate post-dominators. Complexity as for idom. ghc!Post-dominated depth-first search. ghc)Reverse post-dominated depth-first search.  29 8NoneT ghcA  5 is a pointer to some array of Latin-1 encoded chars. ghcA  : is a UTF-8 encoded string together with a unique ID. All  s are stored in a global hashtable to support fast O(1) comparison.It is also associated with a lazy reference to the Z-encoding of this string which is used by the compiler internally. ghc*Lazily computed z-encoding of this string.Since  s are globally memoized this is computed at most once for any given string. ghc1Gives the UTF-8 encoded bytes corresponding to a  ghc Create a   from an existing #; the difference between this and   is that we don't have to copy the bytes if the string is new to the table. ghc Create a   from an existing #; the difference between this and   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  ghc Creates a   from a UTF-8 encoded [Word8]ghcCreates a (lazy) Z-encoded   from a = and account the number of forced z-strings into the passed q. ghcReturns the length of the   in characters ghcReturns True if the   is empty ghc"Unpacks and decodes the FastString ghc!Returns a Z-encoded version of a  . 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 . ghcWrap an unboxed address into a  . ghc Encode a  into a newly allocated   using Latin-1 encoding. The original string must not contain non-Latin-1 characters (above codepoint 0xff). ghc Decode a   back into a  using Latin-1 encoding. This does not free the memory associated with  . ghcReturn the length of a  + + NoneY ghc$Is this an acceptable variable name? ghc'Is this an acceptable constructor name? ghc Is this an acceptable type name? ghcIs this an acceptable alphanumeric variable name, assuming it starts with an acceptable letter? ghcIs this an acceptable symbolic variable name, assuming it starts with an acceptable character? ghcIs this an acceptable alphanumeric constructor name, assuming it starts with an acceptable letter? ghcIs this an acceptable symbolic constructor name, assuming it starts with an acceptable character?ghcIs this string an acceptable id, possibly with a suffix of hashes, but not worrying about case or clashing with reserved words?ghcIs this character acceptable in an identifier (after the first letter)? See alexGetByte in GHC.Parser.LexerghcAll reserved identifiers. Taken from section 2.4 of the 2010 Report.ghcAll reserved operators. Taken from section 2.4 of the 2010 Report.ghcDoes this string contain only dashes and has at least 2 of them?   9NoneZ ghcReplicate an 8-bit character ;Noned 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.A StringBuffer may have a finalizer, depending on how it was obtained. ghcRead a file into a  . The resulting buffer is automatically managed by the garbage collector.ghc.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  into a   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   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   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   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 . Similar to , 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 bytes ghcn, the number of bytes ghcn, the number of bytes  <"(c) The University of Glasgow 2001 BSD-style (see the file LICENSE)!David Terei stableportableNonew* ghcRendering mode. ghcNormal ghcWith zig-zag cuts ghc%No indentation, infinitely long lines ghcAll on one line ghcA rendering style. ghcThe rendering mode ghcLength of line, in chars ghc%Ratio of line length to ribbon length ghcThe TextDetails data typeA TextDetails represents a fragment of text that will be output at some point. ghcA single Char fragment ghcA whole String fragmentghcRDoc 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. ghcA document of height and width 1, containing a literal character. ghc5A document of height 1 containing a literal string.   satisfies the following laws:   s     t =   (st)  ""   x = x, if x non-empty8The side condition on the last law is necessary because   "" has height 1, while   has no height. ghcSome text with any width. (text s = sizedText (length s) s) ghcSome text, but without any width. Use for non-printing text such as a HTML or Latex tags ghc2The empty document, with no height and no width.   is the identity for  ,  ,   and  ), and anywhere in the argument list for  ,  ,  ,  ,   etc. ghcReturns L if the document is empty ghcApply   to   if boolean is true.ghc*Perform some simplification of a built up GDoc. ghcList version of  . ghcList version of  . ghcList version of  . ghcNest (or indent) a document by a given number of positions (which may also be negative).   satisfies the laws:   0 x = x   k (  k' x) =   (k+k') x   k (x   y) =   k z     k y   k (x   y) =   k x     k y   k   =  x     k y = x   y, if x non-empty6The side condition on the last law is needed because   is a left identity for  . ghc "hang d1 n d2 = sep [d1, nest n d2] ghcApply   to the arguments if the first   is not empty. ghc punctuate p [d1, ... dn] = [d1 <> p, d2 <> p, ... dn-1 <> p, dn] ghcAbove, 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 there  is associative, with identity  , and also satisfies(x   y)   z = x   (y   z), if y non-empty. ghcAbove, with no overlapping.   is associative, with identity  . ghc Beside.   is associative, with identity  . ghc;Beside, separated by space, unless one of the arguments is  .   is associative, with identity  . ghcEither   or  . ghcEither   or  . ghc"Paragraph fill" version of  . ghc"Paragraph fill" version of  .ghcfirst returns its first argument if it is non-empty, otherwise its second. ghcThe default style (1mode=PageMode, lineLength=100, ribbonsPerLine=1.5). ghc Render the Doc to a String using the given Style. ghcDefault TextDetails printer ghc The general rendering interface. ghcA ';' character ghcA ',' character ghcA : character ghcA space character ghcA '=' character ghcA '(' character ghcA ')' character ghcA '[' character ghcA ']' character ghcA '{' character ghcA '}' character ghc int n = text (show n) ghc integer n = text (show n) ghc float n = text (show n) ghc double n = text (show n) ghc rational n = text (show n) ghc%See Note [Print Hexadecimal Literals] ghcWrap document in '...' ghcWrap document in "..." ghcWrap document in (...) ghcWrap document in [...] ghcWrap document in {...} ghcRendering modeghc Line lengthghcRibbons per lineghcWhat to do with textghcWhat to do at the endghc The documentghcResult  5 5 6 6=NonezU ghcA colour/style for use with coloured. ghc;Parse the colour scheme from a string (presumably from the  GHC_COLORS environment variable). ghcAllow colours to be combined (e.g. bold + red); In case of conflict, right side takes precedence.  1Noneghc'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 macros ghcWhen 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 GHC.Core.Ppr 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  representation ghc `x', `y', `z' ghc&Converts an integer to a verbal index: speakNth 1 = text "first" speakNth 5 = text "fifth" speakNth 21 = text "21st" ghc-Converts an integer to a verbal multiplicity: speakN 0 = text "none" speakN 5 = text "five" speakN 10 = text "10" ghcConverts 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" ghcDetermines the pluralisation suffix appropriate for the length of a list: plural [] = char 's' plural ["Hello"] = empty plural ["Hello", "World"] = char 's' ghcDetermines the form of to be appropriate for the length of a list: isOrAre [] = text "are" isOrAre ["Hello"] = text "is" isOrAre ["Hello", "World"] = text "are" ghcDetermines the form of to do appropriate for the length of a list: doOrDoes [] = text "do" doOrDoes ["Hello"] = text "does" doOrDoes ["Hello", "World"] = text "do" ghcDetermines the form of possessive appropriate for the length of a list: itsOrTheir [x] = text "its" itsOrTheir [x,y] = text "their" itsOrTheir [] = text "their" -- probably avoid this ghc&Throw an exception saying "bug in GHC" ghc3Throw an exception saying "this isn't finished yet" ghcThrow an exception saying "bug in pgm being compiled" (used for unusual program errors) ghc!If debug output is on, show some  on the screen ghc!If debug output is on, show some  on the screen ghcpprTraceWith desc f x is equivalent to pprTrace desc (f x) x. This allows you to print details from the returned value as well as from ambient variables. 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. ghcPanic with an assertion failure, recording the given file and line number. Should typically be accessed with the ASSERT family of macros ghc The headerghcAmount to indent the hung bodyghc3The hung body, indented and placed below the header ghcThe punctuationghcThe list that will have punctuation added between every adjacent pair of elementsghcPunctuated list ghc#The pretty printing function to useghcThe things to be pretty printedghc 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.            >None'( ghc-Simple data type to represent JSON documents. ?None ghcGenerate a section type (e.g.  @progbits). See #13937. ghcTarget platformghc section typeghcpretty assembler fragment  @None( ghc9Subset of UnitInfo: just enough to pretty-print a unit-idInstead of printing the unit-id which may contain a hash, we print: package-version:componentname ghcSource package name ghcSource package version ghcComponent name  ANone ghcModule LocationWhere a module lives on the file system: the actual locations of the .hs, .hi and .o files, if we have them.For a module in another package, the ml_hs_file and ml_obj_file components of ModLocation are undefined.The locations specified by a ModLocation may or may not correspond to actual files yet: for example, even if the object file doesn't exist, the ModLocation still contains the path to where the object file will reside if/when it is created. ghcThe source file, if we have one. Package modules probably don't have source files. ghcWhere the .hi file is, whether or not it exists yet. Always of form foo.hi, even if there is an hi-boot file (we add the -boot suffix later) ghcWhere the .o file is, whether or not it exists yet. (might not exist either because the module hasn't been compiled yet, or because it is part of a package with a .a file) ghc6Where the .hie file is, whether or not it exists yet. 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 -boot suffix to all output file paths associated with the module, not including the input file itself BNone#$&23567>?+ghcA location as produced by the parser. Consists of two components:'The location in the file, adjusted for  line and {-" LINE ... #-} pragmas (RealSrcLoc)The location in the string buffer (BufPos) with monotonicity guarantees (see #17632)ghcWe attach SrcSpans to lots of things, so let's have a datatype for it.ghc Source SpanA  identifies either a specific portion of a text file or a human-readable description of a location.ghcStringBuffer Source SpanghcA  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 Locationghc?0-based index identifying the raw location in the StringBuffer.Unlike , it is not affected by  line and {-2 LINE ... #-} pragmas. In particular, notice how  setSrcLoc and resetAlrLastLoc in GHC.Parser.Lexer update  preserving .The parser guarantees that  are monotonic. See #17632.ghcReal Source Location'Represents a single point within a fileghcBuilt-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 fileghcL0 if the span is known to straddle only one line.ghcL if the span is a single pointghc Create a  between two points in a fileghc Combines two  into one that spans at least all the characters within both spans. Returns UnhelpfulSpan if the files differ.ghc Combines two  into one that spans at least all the characters within both spans. Assumes the "file" part is the same in both inputsghcConvert a SrcSpan into one that represents only its first characterghc Test if a 1 is "good", i.e. has precise location informationghcTrue 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 thingsghcStrategies for ordering sghcStrategies for ordering sghcStrategies for ordering sghcDetermines whether a span encloses a given line and column indexghc4Determines whether a span is enclosed by another oneghc4Determines whether a span is enclosed by another oneghc*The span that may be enclosed by the otherghcThe span it may be enclosed byghc*The span that may be enclosed by the otherghcThe span it may be enclosed byENone3!6ghcFlag to see whether we're type-checking terms or kind-checking typesghc = $(f x y)ghc =* f x y, i.e. a naked top level expressionghcAn integer or infinityghcFractional LiteralUsed (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.ghcIntegral 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 SpecificationghcRule Match Informationghc Phase NumberghcFor when code is generated, e.g. TH, deriving. The pretty printer will then make its own representation of the item.ghcDefault Method SpecificationghcOne syntactic occurrence: Occurs in only one case branch so no code-duplication issue to worry aboutghc Inside LambdaghcOccurs inside a non-linear lambda Substituting a redex for this occurrence is dangerous because it might duplicate work.ghcInteresting ContextghcFunction: is applied Data value: scrutinised by a case with at least one non-DEFAULT branchghc!identifier Occurrence Informationghc2There are many occurrences, or unknown occurrencesghcMarks unused variables. Sometimes useful for lambda and case-bound variables.ghc3Occurs exactly once (per branch), not inside a ruleghcThis identifier breaks a loop of mutually recursive functions. The field marks whether it is only a loop breaker due to a reference in a ruleghcEmbedding Projection pairghc2A general-purpose pretty-printing precedence type.ghc'This instance must not overlap another - instance. However, it may be overlapped by  instances, and it may overlap  instances.ghcSilently ignore this instance if you find a more specific one that matches the constraint you are trying to resolveExample: 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)ghcSilently 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)ghcEquivalent to having both  and  flags.ghcBehave 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 b would change which instance was chosen. See also note [Incoherent instances] in GHC.Core.InstEnvghcThe semantics allowed for overlapping instances for a particular instance. See Note [Safe Haskell isSafeOverlap] (in ) for a explanation of the  field. :  '{-# OVERLAPPABLE'" or '{-# OVERLAPPING'" or '{-# OVERLAPS'" or '{-# INCOHERENT',  `#-}`,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 pragmaghcA String Literal in the source, including its original raw format for use by source to source manipulation tools.ghcIs 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.+See also Note [OneShotInfo overview] above.ghcNo informationghc#The lambda is applied at most once.ghcA power-of-two alignmentghc A *zero-indexed* constructor tagghcConstructor TagType 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 GHC.Core.Opt.ArityghcTags 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 infinityghcAdd two sghc Multiply two sghcTurn a positive number into an , where 0 represents infinityghcInject any integer into an ghcIf there is any  interesting identifier occurrence, then the aggregated occurrence info of that identifier is considered interesting.ghcIf any occurrence of an identifier is inside a lambda, then the occurrence info of that identifier marks it as occurring inside a lambdaghc#The pretty printing function to useghcThe things to be pretty printedghcAlternative (one-based)ghcArityghc where the alternative havs been pretty printed and finally packed into a paragraph.FNoneהghc%Class of things that we can obtain a  fromghcUnique 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 moduleThese are sometimes also referred to as "keys" in comments in GHC.ghcHow many bits are devoted to the unique index (as opposed to the class character).ghcThe interface file symbol-table encoding assumes that known-key uniques fit in 30-bits; verify this.See Note [Symbol table representation of names] in GHC.Iface.Binary for details.--GNone54ghc)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 sghc Unique SupplyA value of type  is unique, and it can supply one distinct . Also, from the supply, one can also manufacture an arbitrary number of further  UniqueSupply 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 .ghcCreate an infinite list of  from a single oneghc Obtain the  from this particular ghcObtain an infinite list of : that can be generated by constant splitting of the supplyghc Obtain the  from this particular , and a new supplyghcRun the  action, returning the final ghcRun the  action, discarding the final HNone3ghcA wrapper around  with the sole purpose of informing call sites that the provided 7 and 8 instances are nondeterministic. If you use this please provide a justification why it doesn't introduce nondeterminism. See Note [Deterministic UniqFM] in GHC.Types.Unique.DFM to learn about determinism.ghc1`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: plusUFM_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.ghcInherently nondeterministic. If you use this please provide a justification why it doesn't introduce nondeterminism. See Note [Deterministic UniqFM] in GHC.Types.Unique.DFM to learn about determinism.ghcInherently nondeterministic. If you use this please provide a justification why it doesn't introduce nondeterminism. See Note [Deterministic UniqFM] in GHC.Types.Unique.DFM to learn about determinism.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 printedINone '(.>ghcInformation we keep around during interface file serialization/deserialization. Namely we keep the functions for serializing and deserializing s and  s. We do this because we actually use serialization in two distinct settings,+When serializing interface files themselvesWhen 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 GHC.Iface.Binary).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).ghcserialize a binding  (e.g. the name of an IfaceDecl)ghcEncode the argument in it's full length. This is different from many default binary instances which make no guarantee about the actual encoding and might do things use variable length encoding.ghcDo not rely on instance sizes for general types, we use variable length encoding for many of them.ghc$Get access to the underlying buffer.0It is quite important that no references to the ; leak out of the continuation lest terrible things happen.ghc&Takes a size and action writing up to size bytes. After the action has run advance the index to the buffer by size bytes.ghchow to deserialize sghchow to serialize non-binding sghchow to serialize binding s..+Noneghc2A ModuleName is essentially a simple string, e.g.  Data.List.ghc6Compares module names lexically, rather than by their sghcReturns the string version of the module name, with dots replaced by slashes.ghcReturns the string version of the module name, with dots replaced by colons.  JNone}ghcExternal interpreter instanceghcValues that need to be freed before the next command is sent. Threads can append values to this list asynchronously (by modifying the IServ state MVar).ghc5Configuration needed to spawn an external interpreterghcExternal program to runghcCommand-line optionsghcUse Profiling wayghcUse Dynamic wayghcHookghc!Trace action executed after spawnghc State of an external interpreterghcNot spawned yetghcRunningghcExternal interpreterThe external interpreter is spawned lazily (on first use) to avoid slowing down sessions that don't require it. The contents of the MVar reflects the state of the interpreter (running or not).ghcRuntime interpreterghcExternal interpreterghcInternal interpreterKNone35?vghc(Type of unique deterministic finite mapsghc+A type of values tagged with insertion timeghcinsertion timeghcPerforms a deterministic fold over the UniqDFM. It's O(n log n) while the corresponding function on  is O(n).ghcPerforms a nondeterministic strict 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.ghc Converts  to a list, with elements in deterministic order. It's O(n log n) while the corresponding function on  is O(n).ghc>Partition UniqDFM into two UniqDFMs according to the predicateghc(Delete a list of elements from a UniqDFMghc7This allows for lossy conversion from UniqDFM to UniqFMghc(Apply a function to a particular elementghcThe 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.ghc,Map a function over every value in a UniqDFMghcDeterministic, in O(n log n).ghcDeterministic, in O(n log n).ghcThe things to be pretty printedghc3The pretty printing function to use on the elementsghc+ where the things have been pretty printed((LNone3ghc converts a  a into a  a0 assuming, without checking, that it maps each  to a value that has that . See Note [UniqSet invariant].$$MNone ghcGraph nodes. Represents a thing that can conflict with another thing. For the register allocater the nodes represent registers.ghc"A unique identifier for this node.ghcThe class of this node, determines the set of colors that can be used.ghcThe color of this node, if any.ghc9Neighbors which must be colored differently to this node.ghc(Colors that cannot be used by this node.ghc>Colors that this node would prefer to be, in descending order.ghc>Neighbors that this node would like to be colored the same as.ghcThe Interference graph. There used to be more fields, but they were turfed out in a previous revision. maybe we'll want more later..ghcAll active nodes in the graph.ghcA 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.For 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.ghcAn empty graph.ghc5Modify the finite map holding the nodes in the graph.ghcAn empty node.NNone3l2None35>&ghcAn  is an  with the invariant that it only refers to an indefinite library; i.e., one that can be instantiated.ghcA Module is a pair of a  and a .ghcA 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 :1) It can be a , in which case we just have a  that uniquely identifies some fully compiled, installed library we have on disk.2) It can be an . 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 , which explicitly records the instantiation, so that we can substitute over it.ghc6A generic module is a pair of a unit identifier and a .ghcA UnitId identifies a built library in a database and is used to generate unique symbols, etc. It's usually of the form:pkgname-1.2:libname+hash(These UnitId 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 as we can cheaply instantiate them on-the-fly, cf VirtUnit). Put another way, an installed unit id is either fully instantiated, or not instantiated at all.ghcUnit the module belongs toghcModule name (e.g. A.B.C)ghcUnit identifierghc.Cache for some unit info retrieved from the DBghc3A definite unit (i.e. without any free module hole)ghcA  is an  with the invariant that it only refers to a definite library; i.e., one we have generated code for.ghcThe full hashed unit identifier, including the component id and the hash.ghcAn instantiated unit.It identifies an indefinite library (with holes) that has been instantiated.This unit may be indefinite or not (i.e. with remaining holes or not). If it is definite, we don't know if it has already been compiled and installed in a database. Nevertheless, we have a mechanism called "improvement" to try to match a fully instantiated unit with existing compiled and installed units: see Note [VirtUnit to RealUnit improvement].?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 an InstantiatedUnit. This string is completely private to GHC and is just used to get a unique.ghcCached unique of .ghc'The indefinite unit being instantiated.ghcThe sorted (by ) instantiations of this unit.ghc$A cache of the free module holes of &. This lets us efficiently tell if a  has been fully instantiated (empty set of free module holes) and whether or not a substitution can have any effect.ghcInstalled definite unit (either a fully instantiated unit or a closed unit)ghcVirtual unit instantiated on-the-fly. It may be definite if all the holes are instantiated but we don't have code objects for it.ghcFake hole unitghcAn  is a " whose unit is identified with an .ghcA  is a # whose unit is identified with an .ghc2Compares unit ids lexically, rather than by their sghc+Retrieve the set of free module holes of a .ghcCalculate the free holes of a . 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.ghc Create a new ' given an explicit module substitution.ghc Create a new ' given an explicit module substitution.ghc*Smart constructor for instantiated GenUnitghcSmart constructor for VirtUnitghcGenerate a uniquely identifying hash (internal unit-id) for an instantiated unit.This is a one-way function. If the indefinite unit has not been instantiated at all, we return its unit-id.This hash is completely internal to GHC and is not used for symbol names or file paths. It is different from the hash Cabal would produce for the same instantiated unit.ghc2Generate a hash for a sorted module instantiation.ghc+Create a new simple unit identifier from a  . Internally, this is primarily used to specify wired-in unit identifiers.ghcMap over the unit type of a ghcCheck the database to see if we already have an installed unit that corresponds to the given . Return a  which either wraps the 4 unchanged or references a matching installed unit.+See Note [VirtUnit to RealUnit improvement]ghcReturn the UnitId of the Unit. For instantiated units, return the UnitId of the indefinite unit this unit is an instance of.ghcA % is definite if it has no free holes.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.ONonePNone<ghcA map keyed off of ghcA map keyed off of  ModuleNames (actually, their s) Has deterministic folds and can be deterministically converted to a listghcA map keyed off of  ModuleNames (actually, their s)ghc A set of sghcA map keyed off of s))QNone #$35> ghcA % is definite if it has no free holes.ghc!Get a string representation of a  that's unique and stable across recompilations. eg. "$aeson_70dylHtv1FFGeai1IoxcQr$Data.Aeson.Types.Internal"ghcThis gives a stable ordering, as opposed to the Ord instance which gives an ordering based on the Uniques of the components, which may not be stable from run to run of the compiler.ghc Injects an  to  (see also .ghc Test if a  corresponds to a given , modulo instantiation.ghc Test if a  corresponds to a given , modulo instantiation.ghcGiven 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.ghcReturn the unit-id this unit is an instance of and the module instantiations (if any).ghc4Remove instantiations of the given instantiated unitghc;Remove instantiations of the given module instantiated unitghc$Test if a Module is not instantiatedghcCreate a hole Module RNone%(ghcSubstitution on module variables, mapping module names to module 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 , 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 'renameHoleUnit, but requires only   so it can be used by Packages.None#$>(ghcInformation about an installed unit (units are identified by their internal UnitId)ghcInformation about an installed unit (units are identified by their database UnitKey)ghcA unit key in the databaseghc#Information about an installed unitWe parameterize on the unit identifier: * UnitKey: identifier used in the database (cf 5) * UnitId: identifier used to generate code (cf )These two identifiers are different for wired-in packages. See Note [About Units] in GHC.Unitghc9Convert a DbUnitInfo (read from a package database) into ghcMap over the unit parameterghc$Create a UnitPprInfo from a UnitInfo6ZYX6ZYXSNone*@ghcA non-deterministic set of FastStrings. See Note [Deterministic UniqFM] in GHC.Types.Unique.DFM 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.TNone3+ghc9An index into a given cost centre module,name,flavour setghc2Per-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.&None 36 ghcOccurrence NameIn 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 OccNamess are those that are either in the variable or data constructor namespacesghc Test if the 8 is a data constructor that starts with a symbol (e.g. :, or [])ghc Test if the  is that for any operator (whether it is a data constructor or variable or whatever)ghcWrap parens around an operatorghcHaskell 98 encourages compilers to suppress warnings about unused names in a pattern if they start with _: this implements that testghc 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.ghcTest for definitions internally generated by GHC. This predicate is used to suppress printing of internal definitions in some debug printsghcIs an  one of a Typeable TyCon or Module binding? This is needed as these bindings are renamed differently. See Note [Grand plan for Typeable] in GHC.Tc.Instance.Typeable.ghcDDghcA unique, unambiguous name for something, containing information about where that thing originated.ghc*A class allowing convenient access to the  of various datatypesghc!BuiltInSyntax is for things like (:), [] and tuples, which have special syntactic forms. They aren't in scope as such.ghc Will the ( come from a dynamically linked package?ghcReturns 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 GHC.Driver.TypesghcReturns True if the Name comes from some other package: neither this package nor the interactive package.ghcCreate 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 withghcCompare 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 , 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 . instance apply.:UNone23567Hghc"Fields in an algebraic record typeghcUser-visible label of the fieldghcWas DuplicateRecordFields on in the defining module for this datatype?ghcRecord selector functionghc2A map from labels to all the auxiliary informationghcField 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].  VNoneIxghcUsed when we want to fingerprint a structure without depending on the fingerprints of external Names that it refers to.WNoneK?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 allocatedXNoneOrghc"A subcomponent of another registerghcA register of some classghcWorst case displacementa 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.This 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.ghcThe 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.ghcpowerset (for lists)ghcpowersetLS (list of sets)ghcso we can put regs in UniqSetsYNoneQghc!Determine the class of a registerghc4Determine all the regs that make up a certain class.ghcDetermine the common name of a reg returns Nothing if this reg is not part of the machine.ghc!Which regs alias what other regs.ghcOptimised versions of RegColorBase.{worst, squeese} specific to x86ZNone3Tghc A C type, used in CAPI FFI calls :   '{-# CTYPE' , , ,  '#-}',ghc,How to call a particular function in C-land.ghcMight invoke Haskell GC, or do a call back, or switch threads, etc. So make sure things are tidy before the call. Additionally, in the threaded RTS we arrange for the external call to be executed by a separate OS thread, i.e., _concurrently_ to the execution of other Haskell threads.ghcLike PlaySafe, but additionally the worker thread running this foreign call may be unceremoniously killed, so it must be scheduled on an unbound thread.ghcNone of the above can happen; the call will return without interacting with the runtime system at all. Specifically:No GC No call backs No blockingNo precise exceptions!![NoneX ghcThe arity of the wrapped  is the arity at which it is safe to unleash. See Note [Understanding DmdType and StrictSig] in GHC.Types.DemandghcThe abstract domain A_t+ from the original 'CPR for Haskell' paper.ghcNumber of value arguments the denoted expression eats before returning the ghc) eventually unleashed when applied to  argumentsghc'The constructed product result lattice.  NoCPR | ConCPR ConTag | BotCPR ghcTop of the latticeghc&Returns a constructor from a data typeghcBottom of the latticeghcTurns a  computed for the particular  into a  unleashable at that arity. See Note [Understanding DmdType and StrictSig] in DemandghcOnly print the CPR result_NoneYghc TopDir path`NoneZLghcThe class of a register. Used in the register allocator. We treat all registers in a class as being interchangeable.aNone]^ghc"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.bNone]cNone3`ghc>Docs for arguments. E.g. function arguments, method arguments.ghcDocs for declarations: functions, data types, instances, methods etc.ghc$Located Haskell Documentation StringghcHaskell Documentation String"Internally this is a UTF8-Encoded .ghc Create a  from a UTF8-encoded .ghcReturn the contents of a  as a UTF8-encoded .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, J is returned.dNonebghcWhen 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.11eNonef= 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 flagghcWarning was made an error because of -Werror or -Werror=WarningFlagghc-Enumerates the simple on-or-off dynamic flagsghc.Append dump output to files instead of stdout.ghc)Use the cfg based block layout algorithm.ghc+Layout based on last instruction per block.ghc -fPICghc -fPIEghc -pieghcSuppress timestamps in dumpsghcDebugging flagsghc#Dump the cfg used for block layout.fNonerghcA way4Don't change the constructor order as it us used by  to create a unique tag (e.g. thr_debug_p) which is expected by other tools (e.g. Cabal).ghc,for GHC API clients building custom variantsghc'(RTS only) Multithreaded runtime systemghc1Debugging, enable trace messages and extra checksghc:Profiling, enable cost-centre stacks and profiling reportsghc(RTS only) enable event loggingghcDynamic linkingghc)Check if a combination of ways is allowedghc-Unique build-tag associated to a list of waysghc$Unique build-tag associated to a wayghcReturn true for ways that only impact the RTS, not the generated codeghc*Turn these flags on when enabling this wayghc+Turn these flags off when enabling this wayghc;Pass these options to the C compiler when enabling this wayghc3Pass these options to linker when enabling this wayghc=Pass these options to the preprocessor when enabling this wayghcConsult the RTS to find whether it has been built with profiling enabled.ghcConsult the RTS to find whether GHC itself has been built with dynamic linking. This can't be statically known at compile-time, because we build both the static and dynamic versions together with -dynamic-too.ghcReturn host "full" ways (i.e. ways that have an impact on the compilation, not RTS only ways). These ways must be used when compiling codes targeting the internal interpreter.gNone5rq  hNone5sdghcStrict left fold.ghc?Compare not only the values but also the structure of two listsghc?Compare not only the values but also the structure of two lists555iNoney ghcIds which have no CAF references. This is a result of analysis of C--. It is always safe to use an empty . TODO Refer to Note.ghc A number of s in dependency order: earlier  scope over later  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 , 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)--jNone|'ghc0Assumes that the arguments contain no duplicatesghc4Calculate 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.kNone~ghc9Pretty print a graph in a somewhat human readable format.ghcPretty print a graph in graphviz .dot format. Conflicts get solid edges. Coalescences get dashed edges.ghcNodes 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 etclNoneJghcLookup a node from the graph.ghc>Get a node from the graph, throwing an error if it's not thereghc-Add a node to the graph, linking up its edgesghc/Delete a node and all its edges from the graph.ghcModify 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.ghcDelete a conflict edge. k1 -> k2 returns Nothing if the node isn't in the graphghcAdd some conflicts to the graph, creating nodes if required. All the nodes in the set are taken to conflict with each other.ghcAdd 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 required. 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 preferred. The algorithm tries to assign a node it's preferred 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.ghcCoalesce 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 graphghcFreeze 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.We 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.ghcFreeze all the nodes in the graph for debugging the iterative allocator.ghc7Find all the nodes in the graph that meet some criteriaghcvalidate the internal structure of a graph all its edges should point to valid nodes If they don't then throw an errorghcIf this node is colored, check that all the nodes which conflict with it have different colors.ghcSlurp out a map of how many nodes had a certain number of conflict neighboursghcSet the color of a certain nodeghcIf True, coalesce nodes even if this might make the graph less colorable (aggressive coalescing)ghcIf True, coalesce nodes even if this might make the graph less colorable (aggressive coalescing)ghc!keys of the nodes to be coalescedghckey of the node to freezeghc the graphghcgraph with that node frozenghc(extra debugging info to display on errorghc-whether this graph is supposed to be colored.ghcgraph to validateghcvalidated graphghcTrue if this node is okghc9(conflict neighbours, num nodes with that many conflicts) None& ghc*Edge direction based on DFS Classificationghc7Loop back towards the root node. Eg backjumps in loopsghcv -> vghc&Representation for nodes of the Graph.The payload1 is user data, just carried around in this moduleThe key 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 graphghc User dataghcUser defined node idghc#Dependencies/successors of the nodeghcFind 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.ghcGiven a start vertex, a way to get successors from a node and a list of (directed) edges classify the types of edges.!!mNoneghcDeterministic Name EnvironmentSee Note [Deterministic UniqFM] in GHC.Types.Unique.DFM for explanation why we need DNameEnv.ghcName Environment" "     nNone3 ghcA collection of  & - several things that are "available" ghc2Records what things are "available", i.e. in scope ghcAn ordinary identifier in scope ghcA 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, ==, \/=] [] ghcCompare lexicographically ghcJust the main name made available, i.e. not the available pieces of type or class brought into scope by the  GenAvailInfo ghcAll names made available by the availability information (excluding overloaded selectors) ghcAll names made available by the availability information (including overloaded selectors) ghcNames for non-fields made available by the availability information ghc5Fields made available by the availability information ghcs 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]. ghc trims an   to keep only a single name ghcfilters  s by the given predicate ghc filters an   by the given predicate ghc Combines  s 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 that ghc/Used when deciding if the interface has changed ghcThe name of the type or classghcThe available pieces of type or class, excluding field selectors.ghcThe record fields of the type (see Note [Representing fields in AvailInfo]).  oNone3<$ 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  explicitly 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 SpecificationDescribes a particular import declaration and is shared among all the  Provenances for that decl ghcModule imported, e.g.  import Muggle Note the Muggle5 may well not be the defining module for this thing! ghcImport alias, e.g. from as M (or Muggle if there is no as clause) ghcWas this import qualified? ghc-The location of the entire import declaration ghcImport SpecificationThe   of something says how it came to be imported It's quite elaborate so that we can give accurate unused-name warnings. ghcThe children of a Name are the things that are abbreviated by the ".." notation in export lists. See Note [Parents] ghc$See Note [Parents for record fields] ghcGlobal Reader ElementAn element of the  ghcTrue  = the thing was defined locally ghcIn scope through these imports ghcGlobal 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 constructionINVARIANT 1: All the members of the list have distinct  $ fields; that is, no duplicate NamesINVARIANT 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 GHC.Rename.Names 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 selectors; see greOccName ghcLocal 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 GHC.Rename.Env ghc Reader NameDo 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` ( ~ ) :  ,  '(' or '[' or '[:' ,  ')' or ']' or ':]',,  '`' ,  , ghcUnqualified name1Used for ordinary, unqualified occurrences, e.g. x, y or Foo. Create such a   with  ghcQualified 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   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   from it8By Template Haskell, when TH has generated a unique nameSuch a   can be created by using   on a  ghcMake a qualified  & in the given namespace and where the  and the  are taken from the first and second elements of the tuple respectively ghcmake a   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  & but needs the uniqueness assumption.!ghcLook for precisely this  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].!ghcIs this a record field defined with DuplicateRecordFields? (See Note [Parents for record fields])!ghc>Test if an unqualified version of this thing would be in scope!ghc2Takes 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 respectivelyUsed only for the 'module M' item in export list; see GHC.Rename.Names.exports_from_avail!ghc>Apply a transformation function to the GREs for these OccNames!ghcIs in scope unqualified?!ghc,Is in scope qualified with the given module?!ghcPrint out one place where the name was define/imported (With -dppr-debug, print them all)!ghc$Display info about the treatment of  under NoStarIsType.%With StarIsType, three properties of  hold:(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 ! 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).The user might unknowingly be working on a module with NoStarIsType or use  as  out of habit. So it is important to give a hint whenever an assumption about  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  or its Unicode variant, the resulting SDoc will contain a helpful suggestion. Otherwise it is empty. !!!!!!!!!!!!!!!!!!!!!!!! !! ! ! !!!!!!! !!!!!!!! !!!!!pNone3t!ghc'!ghc'=>', unicode variant!ghc'::'!ghc'::', unicode variant!ghc!ghc'..'!ghcUnicode variant!ghcfor function name in matches where there are multiple equations for the function.!ghc for CType!ghc'infix' or 'infixl' or 'infixr'!ghc'<-'!ghc'<-', unicode variant!ghc !ghc;where a name loses its location in the AST, this carries it!ghc'(#' or '{-# LANGUAGE' etc!ghc'(|'!ghc'(|', unicode variant!ghc'{'!ghc'[e|' or '[e||'!ghc'[|'!ghc'[|', unicode variant!ghc'('!ghc'['!ghcprefix   -- TemplateHaskell!ghcprefix   -- TemplateHaskell"ghc'->'"ghc'->', unicode variant"ghc';'"ghc'''"ghcstatic"ghc "ghc "ghc double '''"ghc~"ghc'()' for types"ghc e.g. INTEGER"ghc*String value, will need quotes when output"ghc'|'"ghcvia"ghc-<"ghc-<, unicode variant"ghc'->'"ghc'->', unicode variant"ghc-<<"ghc-<<, unicode variant"ghc>>-"ghc>>-, unicode variant"ghcRetrieve a list of annotation s based on the  of the annotated AST element, and the known type of the annotation."ghcRetrieve a list of annotation s based on the  of the annotated AST element, and the known type of the annotation. The list is removed from the annotations."ghc/Retrieve the comments allocated to the current Note: A given < may appear in multiple AST elements, beware of duplicates"ghc/Retrieve the comments allocated to the current ', and remove them from the annotations"ghc;Convert a normal annotation into its unicode equivalent one!!!!!!!!!!!!!!!!!!!""!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"""""""""""""""""""""""""""""""""""""""""""""""""""""!!!!""!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""""!!!!!!!!!!!"!!!!qNoneИ"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""################################################################################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))************************************************************************"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""################################################################################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))************************************************************************rNone5*ghcA collection of annotations*ghcThe kind of annotation target found in the middle end of the compiler*ghcAn annotation target*ghcWe are annotating something with a name: a type or identifier*ghc%We are annotating a particular module*ghcRepresents an annotation after it has been sufficiently desugared from it's initial form of *ghcThe target of the annotation*ghc An empty annotation environment.*ghcConstruct a new annotation environment that contains the list of annotations provided.*ghc,Add the given annotation to the environment.*ghc"Union two annotation environments.*ghc5Find the annotations attached to the given target as  values of your choice. If no deserializer is specified, only transient annotations will be returned.*ghc5Find the annotations attached to the given target as  values of your choice. If no deserializer is specified, only transient annotations will be returned.ghcFind payloads for the given * in an *.*ghcDeserialize 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).*ghcThe "payload" of an annotation allows recovery of its value at a given type, and can be persisted to an interface file**********************************sNone*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.ghcScan 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 start 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.ghc)Try to assign a color to all these nodes.ghcSelect 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.ghcfn to choose a node to potentially leave uncolored if nothing is trivially colorable.ghcthe graph to color.ghc"whether to do iterative coalescingghc2fn to decide whether a node is trivially colorableghcfn to choose a node to potentially leave uncolored if nothing is trivially colorable.ghcthe graph to scanghc>map of (node class -> set of colors available for this class).ghc the graphghcnodes to assign a color to.ghc>map of (node class -> set of colors available for this class).ghc the graphghc&key of the node to select a color for.+**tNone3567J****************************************uNone5+ghccombining functionghc initial stateghcinputsghcfinal state, outputs+ghccombining functionghc initial stateghcinputsghcfinal state, outputs"*******+++++++++++++++++++++++++++"*****+**+++++++++++++++++++++++++++3+3wNone5 +ghc6A command-line warning message and the reason it arose+ghcA command-line error message+ghcUsed when filtering warnings: if a reason is given it can be filtered out when displaying.+ghc4GHC flag modes describing when a flag has an effect.+ghc-The flag only affects the non-interactive GHC+ghc)The flag only affects the interactive GHC+ghc#The flag affects multiple ghc modes+ghc.This flag should not be seen in cli completionghc Parse an IntLooks for "433" or "=342", with no trailing gubbins * n or =n => Just n * gibberish => NothingghcDiscards a leading equals sign4++++++++++++++++++++++++++++++++++++++++++++++++++++4++++++++++++++++++++++++++++++++++++++++++++++++++++'None3>?4ghcVariableEssentially a typed ?, that may also contain some additional information about the  and its use sites.ghcThe non-dependent version of .ghc Argument Flag3Is something required to appear in source Haskell (+), permitted by request (,) (visible type application), or prohibited entirely from appearing in source Haskell (,)? See Note [VarBndrs, TyCoVarBinders, TyConBinders, and visibility] in GHC.Core.TyCo.Rep+ghcVariable BinderA + is the binder of a ForAllTy It's convenient to define this synonym here rather its natural home in GHC.Core.TyCo.Rep, because it's used in GHC.Core.DataCon.hs-bootA + is a binder with only TyVar+ghcIs a forall invisible (e.g., forall a b. {...}!, with a dot) or visible (e.g., forall a b -> {...}, with an arrow)?+ghc A visible forall (with an arrow)+ghc An invisible forall (with a dot)+ghc Used for (->): an ordinary non-dependent arrow. The argument is visible in source code.+ghc Used for (=>): a non-dependent predicate arrow. The argument is invisible in source code.+ghc Whether an + argument may appear in source Haskell. see Note [Specificity in HsForAllTy] in GHC.Hs.Type+ghcthe argument may not appear in source Haskell, it is only inferred.+ghc?the argument may appear in source Haskell, but isn't required.ghc,Not exported: may be discarded as dead code.ghcExported: kept aliveghcIdentifier ScopeghcKey for fast comparison Identical to the Unique in the name, cached here for speed+ghcThe type or kind of the  in question+ghcType or Coercion Variable,ghcEquality Variable,ghcImplicit parameter Identifier,ghcDictionary Identifier,ghcDictionary Function Identifier,ghcEvidence Variable,ghcEvidence Identifier,ghc Kind Variable,ghc Type Variable,ghc*Type variable that might be a metavariable,ghcType or Kind Variable,ghcType or kind Variable,ghc,ghcCoercion Variable,ghc Identifier,ghcCompare 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? + arguments are visible, others are not. So this function equates , and ,. Used for printing.,ghc Convert an  to its corresponding +.,ghcMake a named binder,ghcMake a named binder var should be a type variable,ghcMake many named binders,ghc , v == not (, v).,ghcIs this a term variable (, ) that is not! a coercion variable? Satisfies , v ==> , v == not (, v).,ghc, returns True% for type variables as well as local ,s 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 ,s that must have a binding in this module. The converse is not quite right: there are some global ,s that must have bindings, such as record selectors. But that doesn't matter, because it's only used for assertions,ghcisExportedIdVar means "don't throw this away"++++++,,++++++++++++++++++++,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,++++++++++,+,,,,,,,,,,,,,,,,,,,,,,,,,,,++,,,,,,,+++++,++++++++,,,,,,,,,,,,,,,,,,,,,,,,,,yNoneX,ghc+Deterministic Type or Coercion Variable Set,ghcDeterministic Type Variable Set,ghcDeterministic Identifier Set,ghcDeterministic Variable Set,ghcType or Coercion Variable Set,ghcCoercion Variable Set,ghcType Variable Set,ghcIdentifier Set,ghc A non-deterministic Variable SetA non-deterministic set of variables. See Note [Deterministic UniqFM] in GHC.Types.Unique.DFM 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 results-ghcDetermines 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 DVarSet-ghc"Add a list of variables to DVarSet-ghcConvert a DVarSet to a VarSet by forgetting the order of insertion-ghctransCloVarSet for DVarSet-ghcThe things to be pretty printedghc4The pretty printing function to use on the elementsghc+ where the things have been pretty printed,,,,,,,,,,,,,,,,,,,,,,,--------------------------------------------------,,,,,,,,,,,-,,-,--,,,-,------,---------,,,,------------------------------zNoneL-ghc.Predicate on possible free variables: returns True! iff the variable is interestingghcRun a free variable computation, returning a list of distinct free variables in deterministic order and a non-deterministic set containing those variables.-ghcRun 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.-ghcAdd 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.-ghcMap a free variable computation over a list and union the results.-ghc&Union many free variable computations.-ghcAdd multiple variables - when free, to the returned free variables. Ignores duplicates and respects the filtering function.----------------------------{None& -ghc'Deterministic Type Variable Environment-ghc$Deterministic Identifier Environment-ghc"Deterministic Variable Environment-ghcCoercion Variable Environment-ghc%Type or Coercion Variable Environment-ghcType Variable Environment-ghcIdentifier Environment-ghcVariable Environment-ghcTidy EnvironmentWhen 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 -> x], 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 setFurthermore, 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.-ghcLook up a variable the -. This lets you map from the variable's identity (unique) to its full value.-ghcuniqAway in_scope v finds a unique that is not used in the in-scope set, and gives that to v. See Note [Local uniques].-ghcunsafeGetFreshUnique in_scope3 finds a unique that is not in-scope in the given -. This must be used very carefully since one can very easily introduce non-unique %s this way. See Note [Local uniques].-ghcRetrieve the left mapping-ghcRetrieve the right mapping-ghcApplies - to several variables: the two variable lists must be of equal length-ghcrnBndr2 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_b-ghc Similar to -= but returns the new variable as well as the new environment-ghc Similar to -7 but used when there's a binder on the left side only.-ghc Similar to -8 but used when there's a binder on the right side only.-ghc Similar to -5 but used for eta expansion See Note [Eta expansion]-ghc Similar to -5 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 term-ghc)Tells whether a variable is locally bound-ghc)Tells whether a variable is locally bound-ghc$Wipe the left or right side renaming-ghc$Wipe the left or right side renaming-ghc"swap the meaning of left and right----------------------------------------------------------------.............................................-----....------.-...-...........-...---.......................-----------------------------------------------|None3..ghcA Cost Centre Stack is something that can be attached to a closure. This is either:$the current cost centre stack (CCCS)a pre-defined cost centre stack (there are several pre-defined CCSs, see below)..ghcThe flavour of a cost centre.Index 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..ghcTwo 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.ghc Extract the index from a flavour.ghc.Is this a cost-centre which records scc counts.ghc)Is this a cost-centre which can be sccd ?.ghcPrint a flavour in CoreghcPrint a flavour's index in Coreghc(Print the flavour component of a C labelghc.Print the flavour index component of a C label#...................................#...................................}None'(-/23>?7 .ghc1Constraint type to bundle up the requirement for   on both the id and the 0 of it. See Note [NoGhcTc].0ghcMarks that a field uses the GhcRn variant even when the pass parameter is GhcTc. Useful for storing HsTypes in GHC.Hs.Exprs, say, because HsType GhcTc should never occur. See Note [NoGhcTc]1ghc.Maps the "normal" id type for a given GHC pass1ghc*Maps the "normal" id type for a given pass1ghcAllows us to check what phase we're in at GHC's runtime. For example, this class allows us to write > f :: forall p. IsPass p => HsExpr (GhcPass p) -> blah > f e = case ghcPass @p of > GhcPs -> ... in this RHS we have HsExpr GhcPs... > GhcRn -> ... in this RHS we have HsExpr GhcRn... > GhcTc -> ... in this RHS we have HsExpr GhcTc... which is very useful, for example, when pretty-printing. See Note [IsPass].1ghcUsed as a data type index for the hsSyn AST; also serves as a singleton type for Pass1ghcGHC's L prefixed variants wrap their vanilla variant in this type family, to add SrcLoc info via . Other passes than 1 not interested in location information can define this instance as f p.1ghcUsed in TTG extension constructors that have yet to be extended with anything. If an extension constructor has 1 as its field, it is not intended to ever be constructed anywhere, and any function that consumes the extension constructor can eliminate it by way of 1.!This should not be confused with 1', which are found in unused extension points (not  constructors!) and therefore can be inhabited.1ghcA placeholder type for TTG extension points that are not currently unused to represent any particular value.!This should not be confused with 1', which are found in unused extension  constructors8 and therefore should never be inhabited. In contrast, 1 is used in extension points (e.g., as the field of some constructor), so it must have an inhabitant to construct AST passes that manipulate fields with that extension point as their type.1ghc=Used when constructing a term with an unused extension point.1ghc Eliminate a 1 . Much like ....................................////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////...................................111None 23>?G8!1ghcImported or Exported Wildcard1ghcImported or exported entity.1ghcImported or Exported Variable1ghc+Imported or exported Thing with Absent list+The thing is a Class/Type (can't tell) - s : , ,1ghc8Imported or exported Thing with All imported or exportedThe thing is a Class"Type and the All refers to methods constructorss :  , ,#, 1ghc: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] - s : %, %, %, 1ghc$Imported or exported module contents (Export Only)s : 1ghcDoc section heading1ghcSome documentation1ghcReference to named doc1ghcLocated Import or Export1ghc(Located name with possible adornment - s :  , 1ghcA name in an import or export specification which may have adornments. Used primarily for accurate pretty printing of ParsedSource, and API Annotation placement.1ghcno extra1ghc pattern X1ghc type (:+:)1ghcImport DeclarationA single Haskell import declaration.1ghcs,  for ideclSource,, ,, ,, ) attached to location in ideclHiding1ghc Module name.1ghcPackage qualifier.1ghcTrue  = {-# SOURCE #-} import1ghcTrue => safe import1ghcIf/how the import is qualified.1ghc$True => implicit import (of Prelude)1ghc as Module1ghc(True => hiding, names)1ghcIf/how an import is  qualified.1ghc qualified! appears in prepositive position.1ghc qualified" appears in postpositive position.1ghcNot qualified.1ghcLocated Import Declaration1ghcGiven two possible located  qualified tokens, compute a style (in a conforming Haskell program only one of the two can be not J). This is called from .1ghcConvenience function to answer the question if an import decl. is qualified.1ghcWhen in a list this may have : 1ghcWhen in a list this may have : 01111111111111111111111111111111111111111111111110111111111111111111111111111111111111111111111111None '(/23J2ghc,For now, we work only with nominal equality.2ghccoaxrProves 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.2ghc-A more explicit representation for `t1 ~ t2`.2ghcA 2: is a "coercion constructor", i.e. a named equality axiom.2ghcThe  [CoAxBranch] passed into the mapping function is a list of all previous branches, reversed22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222NoneKJ22233333333333333333333333333333322233333333333333333333333333None>fghcTyCons 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 *This 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.3ghcPaints a picture of what a  represents, in broad strokes. This is used towards more informative error messages.3ghc e.g., the (->) .3ghcA 3 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. See also Note [RuntimeRep and PrimRep] in GHC.Types.RepType and Note [VoidRep] in GHC.Types.RepType.3ghcUnlifted pointer3ghcSigned, 8-bit value3ghcSigned, 16-bit value3ghcSigned, 32-bit value3ghc-Signed, 64 bit value (with 32-bit words only)3ghcSigned, word-sized value3ghcUnsigned, 8 bit value3ghcUnsigned, 16 bit value3ghcUnsigned, 32 bit value3ghc/Unsigned, 64 bit value (with 32-bit words only)3ghcUnsigned, word-sized value3ghcA pointer, but not) to a Haskell value (use '(Un)liftedRep')3ghcA vector3ghc;Information pertaining to the expansion of a type synonym (type)3ghcRepresents 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 :: *Or an associated data type declaration, within a class declaration: !class C a b where data T b :: *3ghc"An open type synonym family e.g. type family F x y :: * -> *3ghc$A closed type synonym family e.g. &type family F x where { F Int = Bool }3ghcA closed type synonym family declared in an hs-boot file with type family F a where ..3ghc0Built-in type family used by the TypeNats solver3ghc+An ordinary type constructor has no parent.3ghcAn 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.3ghcType constructors representing a class dictionary. See Note [ATyCon for classes] in GHC.Core.TyCo.Rep3ghcType constructors representing an *instance* of a *data* family. Parameters:1) The type family in question*2) Instance types; free variables are the 3 of the current  (not the family one). INVARIANT: the number of types matches the arity of the family 3) A CoTyCon identifying the representation type with the type instance family3ghcSome promoted datacons signify extra info relevant to GHC. For example, the IntRep constructor of  RuntimeRep corresponds to the 3 constructor of 3. 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. See also Note [Getting from RuntimeRep to PrimRep] in GHC.Types.RepType3ghcan ordinary promoted data con3ghcA constructor of  RuntimeRep. The argument to the function should be the list of arguments to the promoted datacon.3ghcA constructor of VecCount3ghcA constructor of VecElem3ghcRepresents right-hand-sides of s for algebraic types3ghcSays 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.3ghcInformation about those s derived from a data declaration. This includes data types with no constructors at all.3ghcAn unboxed sum type.3ghcInformation about those s derived from a newtype declaration3ghcThe data type constructors; can be empty if the user declares the type to have no constructors'INVARIANT: Kept in order of increasing 1/ tag (see the tag assignment in mkTyConTagMap)3ghcCached value: length data_cons3ghcCached value: is this an enumeration type? See Note [Enumeration types]3ghcThe unique constructor for the newtype. It has no existentials3ghc.Is this a boxed, unboxed or constraint tuple?3ghcCached value: the argument type of the constructor, which is just the representation type of the  (remember that newtypes do not exist at runtime so need a different representation type). The free ,s of this type are the 3 from the corresponding 3ghc Same as the 30, but this time eta-reduced. Hence the list of ,?s in this field may be shorter than the declared arity of the .ghcThe function type constructor, (->)ghc"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 3 parent. Datanewtypetype families are handled by . See 3 for more information.ghcRepresents type synonymsghcRepresents families (both type and data) Argument roles are all NominalghcPrimitive types; cannot be defined in Haskell. This includes the usual suspects (such as Int#0) as well as foreign-imported types and kinds (*, #, and ?)ghc%Represents promoted data constructor.ghcThese exist only during type-checking. See Note [How TcTyCons work] in GHC.Tc.TyCl3ghcA Unique of this TyCon. Invariant: identical to Unique of Name stored in tyConName field.3ghcName of the constructor3ghc Full binders3ghc Result kind3ghcKind of this TyCon3ghcArity3ghc TyVar bindersghcThe role for each type variable This list has length = tyConArity See also Note [TyCon Role signatures]3ghcThe C type that should be used for this type when using the FFI and CAPIghcWas 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-printingghcThe "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 ....ghcContains information about the data constructors of the algebraic type3ghc,Maps a label to information about the fieldghc'Gives the class or family declaration  for derived 8s representing class or family instances, respectively.ghc8Contains information about the expansion of the synonym3ghcName of result type variable, used for pretty-printing with --show-iface and for reifying TyCon in Template HaskellghcType family flavour: open, closed, abstract, built-in. See comments for FamTyConFlavghcFor *associated* type/data families The class tycon in which the family is declared See Note [Associated families and their parent class]ghcis this a type family injective in its type variables? Nothing if no injectivity annotation was givenghcMost primitive tycons are unlifted (may not contain bottom) but other are lifted, e.g.  RealWorld Only relevant if tyConKind = *ghcCorresponding data constructorghcSee comments with 33ghcScoped tyvars over the tycon's body See Note [Scoped tyvars in a TcTyCon]3ghc$Is this TcTyCon already generalized?ghc What sort of  this represents.4ghcMake a Required TyConBinder. It chooses between NamedTCB and AnonTCB based on whether the tv is mentioned in the dependent set4ghcBoth 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 1s 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!ghcChecks the invariants of a 3/ given the appropriate type class name, if any4ghcMake a  for the Typeable* representation of the given wired-in type4ghcThe name (and defining module) for the Typeable representation (TyCon) of a type constructor.&See Note [Grand plan for Typeable] in .4ghcThe size of a 3 in bytes.This 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 laid out.4ghcReturn if Rep stands for floating type, returns Nothing for vector types.4ghc-The labels for the fields of this particular ghc-The labels for the fields of this particular 4ghc(Look up a field label belonging to this ghcMake a map from strings to FieldLabels from all the data constructors of this algebraic tycon4ghcGiven the name of the function type constructor and it's kind, create the corresponding . It is recommended to use ( if you want this functionality4ghc#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)4ghcSimpler specialization of 4 for classes4ghcMakes 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 GHC.Tc.TyCl.4ghc5No scoped type variables (to be used with mkTcTyCon).4ghcCreate an unlifted primitive  , such as Int#.4ghcKind constructors4ghcCreate a lifted primitive  such as  RealWorld4ghcCreate a type synonym 4ghcCreate a type family 4ghc#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 instance4ghc Test if the 8 is algebraic but abstract (invisible data constructors)4ghc Does this 7 represent something that cannot be defined in Haskell?4ghcIs this  unlifted (i.e. cannot contain bottom)? Note that this can only be true for primitive and unboxed-tuple s4ghcReturns True if the supplied  resulted from either a data or newtype declaration4ghcReturns True9 for vanilla AlgTyCons -- that is, those created with a data or newtype declaration.4ghcReturns True for the  of the  Constraint kind.4ghcReturns True for data types that are  definitely 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 not4ghc4 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 GHC.Tc.Solver.Canonical4ghc4 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 GHC.Tc.Solver.Canonical4ghc Is this an 3 of a  that is generative and injective with respect to representational equality?4ghcIs this  that for a newtype4ghcTake a  apart into the ,s it scopes over, the  it expands into, and (possibly) a coercion from the representation type to the newtype . Returns Nothing if this is not possible.4ghc Is this a * representing a regular H98 type synonym (type)?4ghcTrue 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 mustBeSaturated on a regular H98 type synonym, because you should probably have expanded it first But regardless, it's not decomposable4ghcIs this an algebraic  declared with the GADT syntax?4ghcIs this an algebraic ( which is just an enumeration of values?4ghc Is this a ., synonym or otherwise, that defines a family?4ghc Is this a >, synonym or otherwise, that defines a family with instances?4ghcIs this a synonym 1 that can have may have further instances appear?4ghcIs this a synonym 1 that can have may have further instances appear?4ghc"Is this an open type family TyCon?4ghc0Is this a non-empty closed type family? Returns J( for abstract or empty closed families.4ghc4 tc returns 3 is is tc is an injective tycon (where is states for which 3 tc is injective), or 3 otherwise.4ghc%Is this TyCon for an associated type?4ghcGet the enclosing class TyCon (if there is one) for the given TyCon.4ghcGet the enclosing class TyCon (if there is one) for the given TyConFlavour4ghc Is this the  for a boxed tuple?4ghc Is this the  for an unboxed sum?4ghc Is this the  for a promoted tuple?4ghcIs this a PromotedDataCon?4ghc T a ...4ghc Extract the ,s bound by a vanilla type synonym and the corresponding (unsubstituted) right hand side.4ghcExtract the information pertaining to the right hand side of a type synonym (type) declaration.4ghcExtract the flavour of a type family (with all the extra information that it carries)4ghcIs this  that for a class instance?4ghcIf this  is that for a class instance, return the class it is for. Otherwise returns Nothing4ghc#Return the associated types of the , if any4ghcIs this ! that for a data family instance?4ghcIf this  is that of a data family instance, return the family in question and the instance types. Otherwise, return Nothing4ghcIf this - is that of a data family instance, return a  which represents a coercion identifying the representation type with the type instance family. Otherwise, return Nothing4ghc Extract any 3 from this TyConghcCan this flavour of  appear unsaturated?4ghcIs this flavour of & an open type family or a data family?4ghc Initialise a 3 with 4.4ghc8The default upper bound (100) for the number of times a 3 is allowed to encounter each .4ghc1Change the upper bound for the number of times a 3 is allowed to encounter each .5ghcReturns whether or not this  is definite, or a hole that may be filled in at some later point. See Note [Skolem abstract data] 4ghcBinders of the ghc Result kindghcThe roles for each TyVarghc>The C type this type corresponds to when using the CAPI FFIghcStupid theta: see ghc#Information about data constructorsghc0What flavour is it? (e.g. vanilla, type family)ghcWas the  declared with GADT syntax?4ghcResult kind of the ghcArity of the tuple ghc%Whether the tuple is boxed or unboxed4ghcKind of the resulting ghcArity of the sumghc,s scoped over: see 34ghcresult kind onlyghcScoped type variables; see Note [How TcTyCons work] in GHC.Tc.TyClghc$Is this TcTyCon generalised already?ghc What sort of  this represents4ghcresult kind, never levity-polymorphic4ghcresult kind4ghcresult kindghcresult kind, never levity-polymorphic (If you need a levity-polymorphic PrimTyCon, change isTcLevPoly.)4ghcresult kind4ghcresult kind4ghc Arguments to ghc Returns a , substitution, the body type of the synonym (not yet substituted) and any arguments remaining from the application3333333333332222333333333333333333333333333333333333333333333333333333333333333333333333333333444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444445533333333333333343333343333332222333333333333333333333444444444444444444444444444444444444444444444444444444444444444444444444444435333434444444434444444444443444444434334334444444344433333333333333333333333333333444444434445None>ghc3A kind of universal type, used for types and kinds. Any time a Type0 is pretty-printed, it is first converted to an  before being printed. See Note [Pretty printing via Iface syntax] in GHC.Core.Ppr.TyThingghc;Stores the arguments in a type application as a list. See &Note [Suppressing invisible arguments].5ghcShow forall flag1Unconditionally show the forall quantifier with (5 ) or when (5) the names used are free in the binder or when compiling with -fprint-explicit-foralls.5ghcDo we want to suppress kind annotations on binders? See Note [Suppressing binder signatures]5ghc!See Note [Holes in IfaceCoercion]5ghcThe various types of TyCons which have special, built-in syntax.5ghca regular tycon5ghce.g.  (a, b, c) or (a, b, c). The arity is the tuple width, not the tycon arity (which is twice the width in the case of unboxed tuples).5ghce.g.  (a | b | c)5ghcA 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]5ghcMake an 5 from an 5.5ghc Build the 3: from the binders and the result kind. Keep in sync with 4 in types/TyCon.5ghc Extract an  from an 5.5ghc"Extract the variable name from an 5.6ghc Extract an  from an 5.6ghc"Extract the variable name from an 5.ghcDefault 3 variables to 3. e.g. ($) :: 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.6ghcLike 6, but always uses an explicit forall.6ghc;Render the "forall ... ." or "forall ... ->" bit of a type.ghcRender the ... in (forall ... .) or (forall ... ->). Returns both the list of not-yet-rendered binders and the doc. No anonymous binders here!ghcPrefix a space if the given  is a promoted 1. See Note [Printing promoted type constructors]ghcPretty-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 GHC.Builtin.Types.PrimghcPretty-prints an application of a type constructor to some arguments (whose visibilities are known). This is polymorphic (over a) since we use this function to pretty-print two different things:  Types (from )Coercions (from 6)6ghcPrints "(C a, D b) =>", including the arrow. Used when we want to print a context in a type, so we use  to decide whether to parenthesise a singleton predicate; e.g. Num a => a -> a6ghcPrints a context or ()- if empty You give it the context precedenceghcif printing coercionsghc otherwiseghc*visibility of the first binder in the list55555555555555555555555555555555555555++++,,+++55555555555555555555555555555555555555555555555555666666666666666666666666666666666655555555555555555555555555555555555555555555555555555555555555555555++,,,,+++++555555555566566555555666666666666666666656666665566666(None3ɘ$ghcA collection of sghc0The key type representing kinds in the compiler.ghcA type of the form p of constraint kind represents a value whose type is the Haskell predicate p/, where a predicate is what occurs before the => in a Haskell type.We use  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"ghcA semantically more meaningful type to represent what may or may not be a useful .ghcA  represents an argument to a function. TyCoBinders can be dependent (6) or nondependent (6;). They may also be visible or not. See Note [TyCoBinders]ghcFor 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  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 6 constructor of .ghcA  is concrete evidence of the equality/convertibility of two types.ghcA global typecheckable-thing, essentially anything that has a name. Not to be confused with a  TcTyThing, which is also a typecheckable thing but in the *local* context. See  for how to retrieve a  given a .ghcLike mkTyCoForAllTy, but does not check the occurrence of the binder See Note [Unused coercion variable in ForAllTy]6ghcWhat to do with coercion holes. See Note [Coercion holes] in GHC.Core.TyCo.Rep.6ghc.The returned env is used in the extended scope6ghcA coercion to be filled in by the type-checker. See Note [Coercion holes]6ghc>See Note [Phantom coercions]. Only in Phantom roled coercions6ghcFrom the fact that any two coercions are considered equivalent. See Note [ProofIrrelProv]. Can be used in Nominal or Representational coercions6ghcFrom a plugin, which asserts that this coercion is sound. The string is for the use of the plugin.6ghc;See Note [Coercion holes] Only present during typechecking6ghc6 is like , but there can only be + in the 6 field.6ghcA type labeled 6 might have knot-tied tycons in it. See Note [Type checking recursive type and class declarations] in GHC.Tc.TyCl6ghc;Vanilla type or kind variable (*never* a coercion variable)6ghc+Type application to something other than a  . Parameters:1) Function: must not be a 6 or 6, must be another 6, or 6 See Note  EQ1 Respecting definitional equality about the no 6 requirement2) Argument type6ghcApplication of a , including newtypes and1 synonyms. Invariant: saturated applications of FunTyCon must use 6 and saturated synonyms must use their own constructors. However,  unsaturated FunTyCons do appear as 6s. 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.6ghcA  type. INVARIANT: If the binder is a coercion variable, it must be mentioned in the Type. See Note [Unused coercion variable in ForAllTy]6ghct1 -> t2 Very common, so an important special case See Note [Function types]6ghc/Type literals are similar to type constructors.6ghcA kind cast. The coercion is always nominal. INVARIANT: The cast is never reflexive INVARIANT: The Type is not a CastTy (use TransCo instead) INVARIANT: The Type is not a ForAllTy over a type variable See Note  EQ2 Respecting definitional equality, (EQ3), (EQ4)6ghcInjection 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 constructor7ghc3The key representation of types within the compiler7ghcRemove the binder's variable from the set, if the binder has a variable.7ghc,Does this binder bind an invisible argument?7ghc)Does this binder bind a visible argument?7ghcIf its a named binder, is the binder a tyvar? Returns True for nondependent binder. This check that we're really returning a *Ty*Binder (as opposed to a coercion binder). That way, if/when we allow coercion quantification in more places, we'll know we missed updating some function.7ghcMake nested arrow types7ghcMake nested arrow types7ghc/Wraps foralls over the type using the provided +s from left to right7ghc/Wraps foralls over the type using the provided +s from left to right7ghcCreate the plain type constructor type which has been applied to no type arguments at all.++++,,666666666666666666666666666777766666666776++++,,,,,,66666666666666666666677777777777777777777777777777777777666666667766676++,,,,+++++6666666666666666666666666666677666666777777777777766+6,,,,7,,77776666666777737373 None7ghcReturns free variables of types, including kind variables as a non-deterministic set. For type synonyms it does not expand the synonym.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.7ghcAdd the kind variables free in the kinds of the tyvars in the given set. Returns a deterministically ordered list.7ghcAdd the kind variables free in the kinds of the tyvars in the given set. Returns a deterministic set.7ghc7 that returns free variables of a type in a deterministic set. For explanation of why using , is not deterministic see Note [Deterministic FV] in GHC.Utils.FV.7ghc7 that returns free variables of a type in deterministic order. For explanation of why using , is not deterministic see Note [Deterministic FV] in GHC.Utils.FV.7ghcReturns free variables of types, including kind variables as a deterministic set. For type synonyms it does not expand the synonym.7ghcReturns free variables of types, including kind variables as a deterministically ordered list. For type synonyms it does not expand the synonym.7ghcThe worker for 7 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 GHC.Utils.FV.Eta-expanded because that makes it run faster (apparently) See Note [FV eta expansion] in GHC.Utils.FV for explanation.7ghc6Get a deterministic set of the vars free in a coercion7ghcGiven 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 GHC.Core.Coercion7ghc Returns the free variables of a  that are in injective positions. Specifically, it finds the free variables while:Expanding type synonymsIgnoring the coercion in  (ty |> co)'Ignoring the non-injective fields of a 6For example, if F& is a non-injective type family, then: 9injectiveTyVarsOf( Either c (Maybe (a, F b c)) ) = {a,c} If 7 ty = itvs, then knowing ty fixes itvs. More formally, if a is in 7 ty and S1(ty) ~ S2(ty), then S1(a) ~ S2(a) , where S1 and S2 are arbitrary substitutions.See Note [When does a tycon application need an explicit kind signature?].7ghc Returns the free variables of a  that are in injective positions. Specifically, it finds the free variables while:Expanding type synonymsIgnoring the coercion in  (ty |> co)'Ignoring the non-injective fields of a 6See Note [When does a tycon application need an explicit kind signature?].7ghcReturns the set of variables that are used invisibly anywhere within the given type. A variable will be included even if it is used both visibly and invisibly. An invisible use site includes: * In the kind of a variable * In the kind of a bound variable in a forall * In a coercion * In a Specified or Inferred argument to a function See Note [VarBndrs, TyCoVarBinders, TyConBinders, and visibility] in GHC.Core.TyCo.Rep7ghcLike 7, but for many types.7ghcDo 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 ]This 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 GHC.Rename.HsType7ghc+Get the free vars of a type in scoped order7ghc*Get the free vars of types in scoped order7ghcShould we look under injective type families? See Note [Coverage condition for injective type families] in GHC.Tc.Instance.Family.7ghclook under injective type families? See Note [Coverage condition for injective type families] in GHC.Tc.Instance.Family..7777777777777777777777777777777777777777777.7777777777777777777777777777777777777777777None 7ghcThis 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.7ghc Add the free ,s to the env in tidy form, so that we can tidy the type they are free in7ghc Treat a new + as a binder, and give it a fresh tidy name using the environment if one has not already been allocated. See also 77ghc:Grabs the free type variables, tidies them and then uses 7 to work over the type itself7ghcCalls 7= on a top-level type (i.e. with an empty tidying environment)777777777777777777777777777777777777xNoneC7ghcPrint a user-level forall; see Note [When to print foralls] in GHC.Iface.Type.8ghcdebugPprType 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.8ghc#Display all kind information (with -fprint-explicit-kinds) when the provided ; argument is L. See 'Note [Kind arguments in error messages] in GHC.Tc.Errors.8ghcThis variant preserves any use of TYPE in a type, effectively locally setting -fprint-explicit-runtime-reps.8ghcPretty prints a , 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 %++++7777777777777777888888888%+7777887777778877+7+8888+7877None#8ghcA substitution of s for ,s8ghcA substitution of s for ,s and s for ,s8ghcType & coercion substitutiontcvsubst_invariant* The following invariants must hold of a 8: 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 relevantThe substitution is only applied ONCE! This is because in general such application will not reach a fixed point.8ghc(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 env28ghcComposes two substitutions, applying the second one provided first, like in function composition.8ghcMake a TCvSubst with specified tyvar subst and empty covar subst8ghcMake a TCvSubst with specified covar subst and empty tyvar subst8ghcReturns the free variables of the types in the range of a substitution as a non-deterministic set.8ghc#Generates the in-scope set for the 8 from the types in the incoming environment. No CoVars, please!8ghc#Generates the in-scope set for the 8 from the types in the incoming environment. No TyVars, please!8ghc#Generates the in-scope set for the 8 from the types in the incoming environment. No CoVars, please!8ghcType substitution, see 88ghcType substitution, see 8. 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.8ghc.Substitute tyvars within a type using a known -. Pre-condition: the in_scope 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.8ghcCoercion substitution, see 88ghcCoercion substitution, see 8. 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.8ghcSubstitute covars within a type8ghcType substitution, see 88ghcType substitution, see 88ghcSubstitute within a  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].8ghc When calling 8 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].8ghcThis checks if the substitution satisfies the invariant from Note [The substitution invariant].8ghcSubstitute within a  The substitution has to satisfy the invariants described in Note [The substitution invariant].8ghcSubstitute within a  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.8ghcSubstitute within several s The substitution has to satisfy the invariants described in Note [The substitution invariant].8ghcSubstitute within several s 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.8ghcSubstitute within a  The substitution has to satisfy the invariants described in Note [The substitution invariant].8ghcSubstitute within a  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.8ghcSubstitute within a  The substitution has to satisfy the invariants described in Note [The substitution invariant].8ghcSubstitute within a  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.8ghcSubstitute within several s The substitution has to satisfy the invariants described in Note [The substitution invariant].­ghcLike 8, 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.íghcLike 8, 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.ĭghcSubstitute a tyvar in a binding position, returning an extended subst and a new tyvar. Use the supplied function to substitute in the kindŭghcSubstitute a covar in a binding position, returning an extended subst and a new covar. Use the supplied function to substitute in the kindĭghc"Use this to substitute in the kind8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888None}8ghc 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 #15209) or see them in GHCi's :browse output (see #12023).8ghc Primitive *s that are defined in, and exported from, GHC.Prim.9ghcThe (->) type constructor. (->) :: forall {rep1 :: RuntimeRep} {rep2 :: RuntimeRep}. TYPE rep1 -> TYPE rep2 -> Type The runtime representations quantification is left inferred. This means they cannot be specified with -XTypeApplications.This is a deliberate choice to allow future extensions to the function arrow. To allow visible application a type synonym can be defined: type Arr :: forall (rep1 :: RuntimeRep) (rep2 :: RuntimeRep). TYPE rep1 -> TYPE rep2 -> Type type Arr = (->) 9ghcGiven a RuntimeRep, applies TYPE to it. see Note [TYPE and RuntimeRep]9ghc Convert a 3 to a > of kind RuntimeRep Defined here to avoid (more) module loops9ghcGiven a Role, what TyCon is the type of equality predicates at that role?8888888888888888888888888888888888888899999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999:::::::::::::::::::::::9888888888888888888888999999999999999888998998998998998998999999999999999999999999999999999999999999999899899899899899899899899999999999999999999999999999999999999999:::::::::::::::::::::::*None?P5ghcGiven a = and a list of argument types, partition the arguments into: , or , (i.e., invisible) arguments and+ (i.e., visible) arguments5ghcAttempts to tease a type apart into a type constructor and the application of a number of arguments to that constructor5ghcThis 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]5ghcIs this the type 3?5ghcGives 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]5ghcThis 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 doing5ghc5Type equality on source types. Does not look through newtypes or s, 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 Type, there is no need to check the types of kinds.) See also Note [Non-trivial definitional equality] in GHC.Core.TyCo.Rep.5ghcMake a 6. The Coercion must be nominal. Checks the Coercion for reflexivity, dropping it if it's reflexive. See Note [Respecting definitional equality] in GHC.Core.TyCo.Rep5ghc&Applies a type to another, as in e.g. k aƭghc!An ordering relation between two s (known below as t1 :: k1 and t2 :: k2)ǭghc t1 < t2ȭghct1 ~ t2> and there are no casts in either, therefore we can conclude k1 ~ k2ɭghct1 ~ t2 yet one of the types contains a cast so they may differ in kind.ʭghc t1 > t2:ghcThis describes how a "map" operation over a type/coercion should behave:ghcWhat to do with coercion holes. See Note [Coercion holes] in GHC.Core.TyCo.Rep.:ghc.The returned env is used in the extended scope:ghcThis is used only for TcTyCons a) To zonk TcTyCons b) To turn TcTyCons into TyCons. See Note [Type checking recursive type and class declarations] in GHC.Tc.TyCl: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.: 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:ghcExtract the RuntimeRep classifier of a type from its kind. For example, kindRep * = LiftedRep; Panics if this is not possible. Treats * and Constraint as the same:ghcGiven a kind (TYPE rr), extract its RuntimeRep classifier rr. For example,  kindRep_maybe * = Just LiftedRep Returns J if the kind is not of form (TYPE rr) Treats * and Constraint as the same: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 3?:ghc2Attempts to obtain the type variable underlying a , and panics with the given message if this is not a type variable type. See also ::ghc2Attempts to obtain the type variable underlying a :ghcIf 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 , 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_maybe, but assumes that any coreView stuff is already done. Refuses to look through (c => t):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).:ghcIs 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.:ghcAttempts 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:ghcExtract the function result type and panic if that is not possible:ghc Just like :/ but for a single argument Try not to iterate 5, because it's inefficient to substitute one variable at a time; instead use 'piResultTys"Extract the function argument type and panic if that is not possible:ghc(piResultTys f_ty [ty1, .., tyn]) gives the type of (f ty1 .. tyn) where f :: f_ty :" is interesting because: 1. f_ty 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) Int This term should have type (Int -> Int), but notice that there are more type args than foralls in s type.:ghcA key function: builds a 6 or 6 as appropriate to its arguments. Applies its arguments to the constructor from left to right.:ghc) 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.:ghcLike :, but only splits a 6 if , argf supplied_argf is L, where argf is the visibility of the ForAllTy's binder and  supplied_argf is the visibility provided as an argument to this function. Furthermore, each returned tyvar is annotated with its argf.˭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 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 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: T :: forall k. k -> k tyConArgFlags T [forall m. m -> m -> m, S, R, Q]After substituting, we get T (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 + and a list of argument types to which the 5 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 6s. (See also #15792).̭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 L for anonymous binders.:ghc)Extract a relevant type, if there is one.:ghcGiven 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):ghcGet the type on the LHS of a coercion induced by a type/data family instance.:ghcDoes 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] in GHC.Core.TyCo.Rep;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_classification for what an unlifted type is. Panics on levity polymorphic types; See ; for a more approximate predicate that behaves better in the presence of levity polymorphism.;ghcReturns:I if the type is  guaranteed lifted orL if it is unlifted, OR we aren't sure (e.g. in a levity-polymorphic case);ghc3Is this a type of kind RuntimeRep? (e.g. LiftedRep);ghc+Drops prefix of RuntimeRep constructors in 6s. Useful for e.g. dropping 'LiftedRep arguments of unboxed tuple TyCon applications:dropRuntimeRepArgs [ 'LiftedRep, 'IntRep , String, Int ] == [String, Int];ghc 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 -.;ghcType equality on lists of types, looking through type synonyms but not newtypes.;ghc Compare two s. NB: This should never see  Constraint (as recognized by Kind.isConstraintKindCon) which is considered a synonym for  in Core. See Note [Kind Constraint and kind Type] in Kind. See Note [nonDetCmpType nondeterminism];ghcIs this kind equivalent to *?This considers  Constraint to be distinct from *8. For a version that treats them as the same type, see 5.;ghcIs this kind equivalent to TYPE r (for some unknown r)?This considers  Constraint to be distinct from *.;ghcReturns True if a type is levity polymorphic. Should be the same as (isKindLevPoly . typeKind) but much faster. Precondition: The type has kind (TYPE blah);ghcLooking 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);ghcAll type constructors occurring in the type; looking through type synonyms, but not newtypes. When it finds a Class, it returns the class TyCon.;ghcFind the result . of a type synonym, after applying it to its arity number of type variables Actually this function works fine on data types too, but they'd always return , so we never need to ask;ghcRetrieve the free variables in this type, splitting them based on whether they are used visibly or invisibly. Invisible ones come first.;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;ghcDoes this classify a type allowed to have values? Responds True to things like *, #, TYPE Lifted, TYPE v, Constraint.$True of any sub-kind of OpenTypeKind;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 Note [When does a tycon application need an explicit kind signature?]; for a full explanation of what this function checks for.):ghcbindersghcfree variables of result;ghcresult kind;ghcShould specified binders count towards injective positions in the kind of the TyCon? (If you're using visible kind applications, then you want True here.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)+++++,,7777+++++++++,,,,,,,,,,,,,,455555555555566666666777777777777777777777777777777777777777777777777888888888888888888888888888888888888888888888888888888889:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7777++,,,,++++++++7,,+++677::::,+5:::::::7777::::::7:::::5:::::77::::::::::::::::::77::5::::;:::::5;::5::::::::::::5:::;;;:::::::::66666667:,,,,,::,,,,::::,,777:9::5::::::::;;;5:::;;;;;;;;5:;;;;;;;;;;;7777777777;;:7;7777775;;;;;;;;;;55;888888888888888888888888888888888888888888888888888888887777777777777774;;None3q2;ghcNumeric 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;ghc So-called ; s are one of:An 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 @ in the ; 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.The literal derived from the label mentioned in a "foreign label" declaration (;)A ;" to be used in place of values of 3 (i.e.  'MutVar#'#) when the the value is never used. A characterA stringThe NULL pointer;ghcChar#" - at least 31 bits. Create with ;;ghcAny numeric literal that can be internally represented with an Integer. See Note [Types of LitNumbers] below for the Type field.;ghcA string-literal: stored and emitted UTF-8 encoded, we'll arrange to decode it at runtime. Also emitted with a '\0' terminator. Create with ;;ghcThe NULL pointer, the only pointer value that can be represented as a Literal. Create with ;;ghcA nonsense value, used when an unlifted binding is absent and has type  forall (a :: TYPE 3). a. May be lowered by code-gen to any possible value. Also see Note [Rubbish literals];ghcFloat#. Create with ;;ghcDouble#. Create with ;;ghcA label literal. Parameters::1) The name of the symbol mentioned in the declaration2) The size (in bytes) of the arguments the label expects. Only applicable with stdcall labels. Just x => ? will be appended to label name when emitting assembly.3) Flag indicating whether the symbol references a function or a data;ghcCheck that a given number is in the range of a numeric literal;ghcCreate a numeric ; of the given type;ghc Creates a ; of type Int#;ghc Creates a ; of type Int#. If the argument is out of the (target-dependent) range, it is wrapped. See Note [Word Int underflow overflow]έghc Creates a ; of type Int# without checking its range.;ghc Creates a ; of type Int#, as well as a ;ean 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];ghc Creates a ; of type Word#;ghc Creates a ; of type Word#. If the argument is out of the (target-dependent) range, it is wrapped. See Note [Word Int underflow overflow]ϭghc Creates a ; of type Word# without checking its range.;ghc Creates a ; of type Word#, as well as a ;ean 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];ghc Creates a ; of type Int64#;ghc Creates a ; of type Int64#8. If the argument is out of the range, it is wrapped.Эghc Creates a ; of type Int64# without checking its range.;ghc Creates a ; of type Word64#;ghc Creates a ; of type Word64#8. If the argument is out of the range, it is wrapped.ѭghc Creates a ; of type Word64# without checking its range.;ghc Creates a ; of type Float#;ghc Creates a ; of type Double#;ghc Creates a ; of type Char#;ghc Creates 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;ghcTests whether the literal represents a zero of whatever type it is;ghc Returns the @ contained in the ;', for when that makes sense, i.e. for <, ?, E,  LitInteger and  LitNatural.;ghc Returns the @ contained in the ;', for when that makes sense, i.e. for < and numbers.;ghcApply a function to the @ contained in the ;', for when that makes sense, e.g. for < 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 ; contains an @ value, e.g. <, ?, E,  LitInteger and  LitNatural.;ghc0Narrow a literal number (unchecked result range);ghcA nonsense literal of type  forall (a :: TYPE 3). a.;ghcTrue 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, -- Given pointers to the start and end of a string, count how many zeros -- the string contains. countZeros :: Addr -> Addr -> -> 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 == 0#) = n + 1 | otherwise = n Consider 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  the literal occupies;ghcNeeded for the Ord instance of AltCon, which in turn is needed in .;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;None >?r;;;<<<<<<<<<<<<<<<<<<<<<<;;<<<<<<<<<<<<<<;<<<<<<<1<1<1None567s_<<<<<<<<<<<<None '(/>{v<ghcGraph' is abstracted over the block type, so that we can build graphs of annotated blocks for example (Compiler.Hoopl.Dataflow needs this).<ghcA 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.<ghcGives access to the anchor points for nonlocal edges as well as the edges themselvesҭghcBody 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.<ghcReturns 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.For 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 -23>?o<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 GHC.Tc.Deriv.Generate, and from TRANSLATION<ghcliteral Int#<ghcliteral Word#<ghcliteral Int64#<ghcliteral Word64#<ghcGenuinely an integer; arises only from TRANSLATION (overloaded literals are done with HsOverLit)<ghcGenuinely a rational; arises only from TRANSLATION (overloaded literals are done with HsOverLit)<ghc Unboxed Float<ghcUnboxed Double<ghc0Convert a literal from one index type to another<ghcpmPprHsLit 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 L if a literal l- needs to be parenthesized under precedence p.<ghc< p ol returns L if an overloaded literal ol, needs to be parenthesized under precedence p.$<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<$<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Noneb1ghcPattern SynonymSee Note [Pattern synonym representation] See Note [Pattern synonym signature contexts]1ghcThe  of the 1+, giving it a unique, rooted identification1ghcArity of the pattern synonym<ghcBuild a new pattern synonym<ghc Should the 1 be presented infix?<ghc5Extract the type for any given labelled field of the DataCon=ghcPrint the type of a pattern synonym. The foralls are printed explicitly<ghc&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 synonym11111<<<<<<<=======1<11<<==<1<==1=<<==)None?z2ghcIf it is the case that c :: (t1 ~ t2)i.e. the kind of c relates t1 and t2, then coercionKind c = Pair t1 t2.2ghcliftCoSubst 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.2ghcMakes a coercion type from two types: the types whose equality is proven by the relevant 2ghcSlowly checks if the coercion is reflexive. Don't call this in a loop, as it walks over the entire coercion.2ghcTests if this coercion is obviously reflexive. Guaranteed to work very quickly. Sometimes a coercion can be reflexive, but not obviously so. c.f. 22ghcTests if this coercion is obviously a generalized reflexive coercion. Guaranteed to work very quickly.2ghc$Make a "coercion between coercions".2ghcGiven co :: (a :: k) ~ (b :: k') produce  co' :: k ~ k'.2ghc!Make a nominal reflexive coercion2ghc%Make a generalized reflexive coercion2ghcInstantiates a .2ghc Create a new  by composing the two given s transitively. (co1 ; co2)2ghc(Create a symmetric version of the given  that asserts equality between the same types but in the other "direction", so a kind of t1 ~ t2 becomes the kind t2 ~ t1.2ghc6Make a universal coercion between two arbitrary types.2ghcMake a phantom coercion between two types. The coercion passed in must be a nominal coercion between the kinds of the types.2ghcBuild a function  from two other s. That is, given  co1 :: a ~ b and  co2 :: x ~ y produce co :: (a -> x) ~ (b -> y).2ghcMake 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]2ghcApply a  to another . 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.2ghcApply a type constructor to a list of coercions. It is the caller's responsibility to get the roles correct on argument coercions.2ghcMake a reflexive coercion=ghc9The result of stepping in a normalisation function. See =.=ghcNothing more to do=ghc2Utter failure. The outer function should fail too.=ghcWe stepped, yielding new bits; ^ ev is evidence; Usually a co :: old type ~ new type=ghcA function to check if we can reduce a type by one step. Used with =.=ghcThis breaks a  with type T A B C ~ T D E F into a list of  s of kinds A ~ D, B ~ E and E ~ F. Hence: decomposeCo 3 c [r1, r2, r3] = [nth r1 0 c, nth r2 1 c, nth r3 2 c]=ghc2Attempts to obtain the type variable underlying a =ghcAttempts to tease a coercion apart into a type constructor and the application of a number of coercion arguments to that constructor=ghc-Attempt to take a coercion application apart.=ghcLike =(, but only returns Just for tyvar binder=ghcLike =(, but only returns Just for covar binderӭghcGiven a coercion &co1 :: (a :: TYPE r1) ~ (b :: TYPE r2), produce a coercion rep_co :: r1 ~ r2.=ghcTests if this MCoercion is obviously generalized reflexive Guaranteed to work very quickly.=ghcReturns the type coerced if this coercion is a generalized reflexive coercion. Guaranteed to work very quickly.=ghcReturns 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. ==ghcExtracts 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  s to another  , from left to right. See also 2.ԭghcLike 2, but the inner coercion shouldn't be an obvious reflexive coercion. For example, it is guaranteed in =. The kind of the tycovar should be the left-hand kind of the kind coercion.=ghcMake nested ForAllCos=ghcMake a Coercion quantified over a type/coercion variable; the variable has the same type in both sides of the coercionխghcLike =, 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.)=ghcReturn the left-hand type of the axiom, when the axiom is instantiated at the types given.=ghc5Instantiate the left-hand side of an unbranched axiom=ghc$Make a coercion from a coercion hole=ghc'Compose two MCoercions via transitivity=ghcIf you're about to call mkNthCo r n co, then r should be whatever nthCoRole n co returns.=ghcGiven ty :: k1,  co :: k1 ~ k2 , produces co' :: ty ~r (ty |> co)=ghcGiven ty :: k1,  co :: k1 ~ k2 , produces co' :: (ty |> co) ~r ty=ghcGiven 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.=ghcGiven 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.֭ghcChanges a role, but only a downgrade. See Note [Role twiddling functions]=ghcLike ֭, but panics if the change isn't a downgrade. See Note [Role twiddling functions]=ghcConverts a coercion to be nominal, if possible. See Note [Role twiddling functions]=ghclike mkKindCo, but aggressively & recursively optimizes to avoid using a KindCo constructor. The output role is nominal.׭ghcsay g = promoteCoercion h. Then, instCoercion g w yields Just g' , where g' = promoteCoercion (h w)%. fails if this is not possible, if g coerces between a forall and an -> or if second parameter has a representational role and can't be used with an InstCo.حghcRepeated use of ׭=ghcCreates 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.=ghcCreates 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.=ghcMake a forall , 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 = that unwraps newtypes, careful not to fall into a loop. If it would fall into a loop, it produces =.=ghcA general function for normalising the top-level of a type. It continues to use the provided = until that function fails, and then this function returns. The roles of the coercions produced by the = must all be the same, which is the role returned from the call to =.Typically ev is Coercion.If topNormaliseTypeX step plus ty = Just (ev, ty') then ty ~ev1~ t1 ~ev2~ t2 ... ~evn~ ty' and ev = ev1 plus ev2 plus ... plus 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 applicationsThis 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 s, with respect to an RnEnv2=ghc,Extend a lifting context with a new mapping.=ghcExtend a lifting context with a new mapping, and extend the in-scope set٭ghcExtend a lifting context with existential-variable bindings. See Note [extendLiftingContextEx]=ghc+Erase the environments in a lifting context=ghcLike 8 , but works on a lifting contextڭghcThe "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 2=ghcApply 2 to multiple s=ghcGet a coercion's kind and role.=ghc"Retrieve the role from a coercion.=ghcCreates a primitive type equality predicate. Invariant: the types are not Coercions=ghc3Makes a lifted equality predicate at the given role=ghc?Creates a primitive type equality predicate with explicit kinds=ghcCreates a primitive representational type equality predicate with explicit kinds=ghcAssuming 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 GHC.Core.Coercion.Opt.=ghcIs there a blocking coercion hole in this type? See TcCanonical Note [Equalities with incompatible kinds]=ghcIs there a blocking coercion hole in this coercion? See TcCanonical Note [Equalities with incompatible kinds]2ghc!role of the created coercion, "r"ghc:: phi1 ~N phi2ghc g1 :: phi1ghc g2 :: phi2ghc :: g1 ~r g22ghcrole of the built coercion, "r"ghct1 :: k1ghct2 :: k2ghc :: t1 ~r t22ghc :: t1 ~r t2ghc%:: s1 ~N s2, where s1 :: k1, s2 :: k2ghc:: t1 s1 ~r t2 s2֭ghc desired roleghc current role׭ghcmust be nominal=ghc original LCghcnew variable to map...ghc...to this lifted version=ghc Original LCghcnew variable to map...ghcto this coercion٭ghcoriginal lifting contextghcex. var / value pairs66++,,,22222=2222222222222222222222222222222226666666666677777777777788888888888========================================================================================================666666666666677,+2222===2222222===22=22==========22=2=222=222==2=2222=2====2=====================2===========22==2====,,====7777777888888888882==============2==========2+7======77=====None5q=ghctcMatchTy t1 t2) produces a substitution (over fvs(t1)) s such that s(t1) equals t2. The returned substitution might bind coercion variables, if the variable is an argument to a GADT constructor.Precondition: typeKind ty1 5 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 =, 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 =, but extends a substitution See also Note [tcMatchTy vs tcMatchTyKi]>ghcLike = but over a list of types. See also Note [tcMatchTy vs tcMatchTyKi]>ghcLike > but over a list of types. See also Note [tcMatchTy vs tcMatchTyKi]>ghcLike >, but extending a substitution See also Note [tcMatchTy vs tcMatchTyKi]>ghcLike >, but extending a substitution See also Note [tcMatchTy vs tcMatchTyKi]ۭghc=Same as tc_match_tys_x, but starts with an empty substitutionܭghc Worker for > and >>ghcThis 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?>ghcSimple 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.ݭghcThis function is actually the one to call the unifier -- a little too general for outside clients, though.ޭghc(Converts any SurelyApart to a MaybeApart>ghc> is sort of inverse to 2. In particular, if  liftCoMatch vars ty co == Just s, then liftCoSubst s ty == co , where == there means that the result of 2 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.This function is incomplete in that it doesn't respect the equality in 5. That is, it's possible that this will succeed for t1 and fail for t2, even when t1 5 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.߭ghc߭ does all the actual work for >. >ghcSubstitution to extendghcTemplateghcTarget>ghcTemplateghcTargetghcOne-shot; in principle the template variables could be free in the target>ghcTemplateghcTargetghcOne-shot substitution>ghcSubstitution to extendghcTemplateghcTargetghcOne-shot substitution>ghcSubstitution to extendghcTemplateghcTargetghcOne-shot substitutionۭghc match kinds?ܭghc 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>ghcA regular one-shot (idempotent) substitution that unifies the erased types. See comments for >ݭghcTrue  = unify; False  = matchghcTrue  = doing an injectivity checkghcTrue  = treat the kinds as wellghcsubstitution to extend߭ghcambient 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=========>>>>>>>>>>>>>>>>>>=>>>>>>>>>>>>>>>>>========>None1>ghc>A choice of equality relation. This is separate from the type 2 because 23 does not define a (non-trivial) equality relation.>ghcA predicate in the solver. The solver tries to prove Wanted predicates from Given ones.>ghc3Get the equality relation relevant for a pred type.&,5=====>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&>>>>>>5>>>>>>>>>>>=====>>>>>>>>>>>>,>>None>z ghc"Contains not only a collection of s but also a plethora of information relating to the compilation of a single file or GHC session ghc&Initialize the pretty-printing options ghc$Consolidated unit database built by  initPackages from the package databases in @ and flags ('-ignore-package', etc.).=It also contains mapping from module names to actual Modules.>ghcA 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 4 is called, or otherwise at the end of the session.>ghcFlag in string form>ghcFlag in internal form>ghcExtra action to run when the flag is found Typically, emit a warning or error>ghc%In which ghc mode the flag has effect>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>ghcRepresents 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  PackageName>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?ghcUse the in-memory dynamic linker (works for both bytecode and object code).?ghcLink objects into a dynamic lib (DLL on Windows, DSO on ELF platforms)?ghcLink objects into a static lib?ghcThe ? 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 ? to something sensible.? 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.?ghc.See Note [LLVM Configuration] in GHC.SysTools.?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 overridden by GHC-API users. See Note [The integer library] in GHC.Builtin.Names?ghcN.B. It's important that this field is lazy since we load the LLVM configuration lazily. See Note [LLVM Configuration] in GHC.SysTools.?ghc,Verbosity level: see Note [Verbosity levels]?ghcOptimisation level?ghc%How much debug information to produce?ghcNumber of simplifier phases?ghcMax simplifier iterations?ghc+A prefix to report inlining decisions about?ghcAdditional demand analysis?ghcThe number of modules to compile in parallel in --make mode, where Nothing ==> compile as many in parallel as there are CPUs.?ghcEnable RTS timing statistics??ghcThe heap size to set.?ghcMaximum number of bindings from the type envt to show in type error messages?ghcMaximum number of hole fits to show in typed hole error messages?ghcMaximum number of refinement hole fits to show in typed hole error messages?ghcMaximum level of refinement for refinement hole fits in typed hole error messages?ghcMaximum number of unmatched patterns to show in non-exhaustiveness warnings?ghcSoft limit on the number of models the pattern match checker checks a pattern against. A safe guard against exponential blow-up.?ghcMultiplier for simplifier ticks?ghcThreshold for SpecConstr?ghc2Max number of specialisations for any one function?ghcMax number of specialisations for recursive types Not optional; otherwise SPEC can diverge.?ghcBinary literals (e.g. strings) whose size is above this threshold will be dumped in a binary file by the assembler code generator (0 to disable)?ghcThreshold for LiberateCase?ghcArg count for lambda floating See GHC.Core.Opt.Monad.FloatOutSwitches?ghcMaximum number of arguments after lambda lifting a recursive function.?ghcMaximum number of arguments after lambda lifting a non-recursive function.?ghcLambda lift even when this turns a known call into an unknown call.?ghc4Align Cmm functions at this boundary or use default.?ghcSimplification history size?ghcTypechecker maximum stack depth?ghcNumber of iterations in the constraints solver Typically only 1 is needed?ghcTarget unit-id?ghcUnit-id to instantiate?ghc$How to instantiate the unit-id above?ghcWay flags from the command line?ghc$The global "way" (e.g. "p" for prof)?ghcThis is set by ( based on where its output is going.?ghc Override the ? set by  . Set by -ddump-file-prefix?ghcPath to store the .mix files?ghcthe -ffrontend-opt 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 .@ghcstatic 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 A 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-id flags from command line. In *reverse* order that they're specified on the command line.@ghcThe -trust and  -distrust flags. In *reverse* order that they're specified on the command line.@ghcFilepath to the package environment file (if overriding default)@ghc3Stack of package databases for the target platform.A "package database" is a misleading name as it is really a Unit database (cf Note [About Units]).This field is populated by  initPackages.J9 means the databases have never been read from disk. If  initPackages= is called again, it doesn't reload the databases from disk.@ghcSafe Haskell mode@ghcMsgDoc output action: use GHC.Utils.Error 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.@ghcOnly inline memcpy if it generates no more than this many pseudo (roughly: Cmm) instructions.@ghcOnly 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@ghcinferred unsafe@ghcdeclared and checked@ghcdeclared and checked@ghcdeclared and checked@ghcinferred as safe@ghc-fno-safe-haskell state@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 #14312.@ghcAppend 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.@ghcAppend 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"@ghcConcatenate and flatten the list of global and quoted includes returning just a flat list of paths.@ghc "unbuild" a  from a  . This shouldn't be needed in the vast majority of code. But GHCi questionably uses this to produce a default  1 from which to compute a flags diff for printing.AghcThe directory for this version of ghc in the user's app directory (typically something like ~.ghcx86_64-linux-7.6.3)Aghc6Will this target result in an object file on the disk?AghcDoes 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.ghcThe ? value corresponding to the default way to create object files on the current platform.AghcAre we building with -fPIE or -fPIC enabled?AghcCompute the path of the dynamic object corresponding to an object file.AghcUsed by  to partially initialize a new   valueAghc The normal  . Note that they are not suitable for use in this form and must be fully initialized by  first.AghcLike A but appends an extra newline.AghcThe language extensions implied by the various language variants. When updating this be sure to update the flag documentation in docs users-guideglasgow_exts.rst.AghcTest whether a  is setAghcSet a AghcUnset a AghcTest whether a  is setAghcSet a AghcUnset a AghcTest whether a  is setAghcSet a AghcUnset a AghcTest whether a  is set as fatalAghcMark a  as fatal (do not set the flag)AghcMark a  as not fatalAghcTest whether a  is setAghcSet a AghcUnset a AghcSet or unset a 7, unless it has been explicitly set or unset before.ghc(Set the Haskell language standard to useAghcSome modules have dependencies on others through the DynFlags rather than textual importsAghcIs the -fpackage-trust mode onAghc9Is Safe Haskell on in some way (including inference mode)Aghc(Is the Safe Haskell safe language in useAghc.Is the Safe Haskell safe inference mode activeAghc(Test if Safe Imports are on in some formghcSet a 'Safe Haskell' flagAghcAre all direct imports required to be safe for this Safe Haskell mode? Direct imports are when the code explicitly imports a moduleAghcAre 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.ghcCombine 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.AghcA 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 offAghcA 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 offAghc3Retrieve the options corresponding to a particular opt_* field in the correct orderAghcGets the verbosity flag for the current verbosity level. This is fed to other tools, so GHC-specific verbosity flags like  -ddump-most are not includedAghc Sets the  , to be appropriate to the optimisation levelAghcParse dynamic flags from a list of command line arguments. Returns the parsed  =, the left-over arguments, and a list of warnings. Throws a  if errors occurred during parsing (such as unknown flags or missing arguments).AghcLike A 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.AghcParses 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.Aghc!Write an error or warning to the  LogOutput.ghcCheck (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.AghcAll dynamic flags option strings without the deprecated ones. These are the user facing strings for enabling and disabling options.ghc4All flags with possibility to filter deprecated onesghcThis is where we handle unrecognised warning flags. We only issue a warning if -Wunrecognised-warning-flags is set. See #11429 for context.AghcMake a list of flags for shell completion. Filter all available flags into two groups, for interactive GHC vs all other.ghcDefine a new flag.ghc!Define a new flag with an effect.ghc,Define a new deprecated flag with an effect.ghcDefine a new deprecated flag.ghcDefine a new deprecated flag with an effect where the deprecation message depends on the flag valueghcDefine a new deprecated flag where the deprecation message depends on the flag valueghcDefine a new deprecated flag where the deprecation message is shown depending on the flag valueghcDefine a new flag for GHCi.ghc*Define a new flag for GHCi with an effect.ghc.Define a new flag invisible to CLI completion.ghc=Define a new flag invisible to CLI completion with an effect.ghcHide a > from being displayed in --show-options.This is for example useful for flags that are obsolete, but should not (yet) be deprecated for compatibility reasons.ghc Find the > for a .AghcThese -W flags can all be reversed with  -Wno-ghcThese - flags can all be reversed with  -no-ghcThese -d flags can all be reversed with  -dno-AghcThese -f flags can all be reversed with  -fno-ghcThese -f 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 GHC.Tc.Errors.Hole module. These flags can all be reversed with  -fno-AghcThese -f flags can all be reversed with  -fno-ghcThese -X blah# flags cannot be reversed with -XNo blahghcThese -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.AghcThese -X blah$ flags can all be reversed with -XNo blahghcThese 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 GHC.Tc.Errors.Hole module.AghcWarning groups.As all warnings are in the Weverything set, it is ignored when displaying to the user which group a warning is in.AghcWarning 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 A allows for multiple hierarchies with no inherent relation to be defined.3The special-case Weverything group is not included.ghcFind the smallest group in every hierarchy which a warning belongs to, excluding Weverything.ghc+Warnings enabled unless specified otherwiseghcThings you get with -WghcThings you get with -WallghcThings you get with -Weverything, i.e. *all* known warnings flagsghcThings 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.AghcGiven a  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.Bghc1Resolve any internal inconsistencies in a set of  . Returns the consistent  6 as well as a list of warnings to report to the user.ghcThis is the value that  ! takes before it is initialized.BghcAn empty FilesToCleanBghcInitialize the pretty-printing options using the default user styleAghc  to retrieve the options fromghc%Relevant record accessor: one of the opt_* accessorsghc#Correctly ordered extracted optionsAghcUpdated  -, left-over arguments, and list of warnings.AghcUpdated  -, left-over arguments, and list of warnings.Aghcvalid flags to match againstghc(are the arguments from the command line?ghccurrent dynamic flagsghcarguments to parseghcTrue  = it should be turned onghcThe flag prefixghc!What to do when the flag is foundghc&Specification of this particular flag  ? @??????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>?????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB >>>>>>??????AAA AAAAAAAAAAAAAAAAAAAAAAAAAA ? @??????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@>>>>>>????>>>>>>??????AAA????A??????A>>>>>>>>>>A>>>>>>>>>>>>>>>>>AAAAABAAAAAAAA@@@@@@@AAAAAAAAAA?????????@@@@@@@AA@@@@@@@@@@@@@@@@@@@@@@@@@A@@AA@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBB>>>>>>>>>>>>>>>>>>B@@@@@@@ B??????????CNone#$E2ghc5Log message intended for compiler developers No fileline column stuffghc-Log messages intended for end users. No fileline column stuff.ghcSevWarning and SevError are used for warnings and errors o The message has a filelinecolumn heading, plus "warning:" or "error:", added by mkLocMessags o Output is intended for end usersghcFormat of a dumpDump formats are loosely defined: dumps may contain various additional headers and annotations and they may be partial. 2 is mainly a hint (e.g. for syntax highlighters).ghcHaskellghcCoreghcSTGghcByteCodeghcCmmghc Assembly codeghc C code/headerghc LLVM bytecodeghcUnstructured dumpghc Dump options7Dumps are printed on stdout by default except when the  field is set to True.When  is True or when `-ddump-to-file` is set, dumps are written into a file whose suffix is given in the  field.ghc?Must be dumped into a file, even if -ddump-to-file isn't setghc/Filename suffix used when dumped into a fileghcDefault action for C hookghcDefault action for C hookghc;Make a possibly annotated error message with location info.ghc5Make an unannotated error message with location info.CghcCategorise error msgs by their importance. This is so each section can be rendered visually distinct. See Note [Error report] for where these come from.CghcPrimary error msg.Cghc-Context e.g. "In the second argument of ...".CghcSupplementary information, e.g. "Relevant bindings include ...".ghc6This has the same text as errDocImportant . errMsgDoc.CghcEverything is fineCghc%A problem, and some indication of whyCghc*If they aren't all valid, return the firstCghc!A long (multi-line) error messageCghc A short (one-line) error messageCghc;Variant that doesn't care about qualified/unqualified namesCghc!A long (multi-line) error messageCghc A short (one-line) error messageCghc;Variant that doesn't care about qualified/unqualified namesCghca wrapper around C. First check whether the dump flag is set Do nothing if it is unsetCghca wrapper around C. First check whether the dump flag is set Do nothing if it is unsetUnlike C, has a printer argumentCghc9Ensure that a dump file is created even if it stays emptyghc#Run an action with the handle of a , if we are outputting to a file, otherwise J.ghcWrite out a dump. If --dump-to-file is set then this goes to a file. otherwise emit to stdout.When hdr is empty, we print in a more compact format (no separators and blank lines)ghc1Choose where to put a dump file based on DynFlagsCghcCreate dump options from a CghcTime a compilation phase.(When timings are enabled (e.g. with the -v2 flag), the allocations and CPU time used by the phase will be reported to stderr. Consider a typical usage: withTiming getDynFlags (text "simplify") force PrintTimings pass. 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 C. 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.See Note [withTiming] for more.Cghc0Like withTiming but get DynFlags from the Monad.CghcSame as C:, but doesn't print timings in the console (when given -vN, N >= 2 or -ddump-timings).See Note [withTiming] for more.CghcSame as C:, but doesn't print timings in the console (when given -vN, N >= 2 or -ddump-timings0) and gets the DynFlags from the given Monad.See Note [withTiming] for more.ghc Worker for C and C.CghcLike C but with  rather then CghcChecks if given C is a fatal warning.Cghc Helper for @Cghc Helper for @ghcoptional annotationghcseverityghclocationghcmessageCghcDynFlagsghcThe name of the phaseghc.A function to force the result (often either const () or rnf)ghc!The body of the phase to be timedCghcThe name of the phaseghc.A function to force the result (often either const () or rnf)ghc!The body of the phase to be timedCghcDynFlagsghcThe name of the phaseghc.A function to force the result (often either const () or rnf)ghc!The body of the phase to be timedCghcThe name of the phaseghc.A function to force the result (often either const () or rnf)ghc!The body of the phase to be timedghcA means of getting a   (often ? will work here)ghcThe name of the phaseghc.A function to force the result (often either const () or rnf)ghcWhether to print the timingsghc!The body of the phase to be timedCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC:None?~ ghcPackage database ghc Map from  to 0, plus the transitive closure of preload units. ghc-Update component ID details from the database ghc A mapping of  to . This list is adjusted so that only valid packages are here. 5 reflects what was stored *on disk*, except for the trusted flag, which is adjusted at runtime. (In particular, some packages in this map may have the exposed flag be I.) ghcGiven a fully instantiated , improve it into a + if we can find it in the package database.Cghc!The result of performing a lookupCghc-Found the module uniquely, nothing else to doCghc,Multiple modules with the same name in scopeCghcNo 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 hiddenCghcNo modules found, but there were some unusable ones with an exact name matchCghc6Nothing found, here are some suggested different namesghcFor 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.ghc'A reverse dependency index, mapping an  to the  s which have a dependency on it.Cghc%The reason why a package is unusable.CghcWe ignored it explicitly using -ignore-package.CghcThis package transitively depends on a package that was never present in any of the provided databases.CghcThis 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.)CghcThis package transitively depends on a package which was ignored.CghcThis package transitively depends on a package which was shadowed by an ABI-incompatible package.Cghc A mapping of  to . This is used when users refer to packages in Backpack includes.CghcA mapping from wired in names to the original names from the package database.CghcThe 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.CghcPackages which we explicitly depend on (from a command line flag). We'll use this to generate version macros.CghcThis 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.Cghc A map, like C$, but controlling plugin visibility.CghcA 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.ghc Map from ) to a set of of module providers (i.e. a  and its C).NB: the set is in fact a 'Map Module ModuleOrigin', probably to keep only one origin for a given ghc< records the various aspects of visibility of a particular .ghc-Any custom renamings that should bring extra s into scope.ghc%The package name associated with the 4. This is used to implement legacy behavior where -package foo-0.1& implicitly hides any packages named fooghcThe signatures which are contributed to the requirements context from this unit ID.ghcWhether or not this unit was explicitly brought into scope, as opposed to implicitly via the exposed' fields in the package database (when -hide-all-packages is not passed.)ghc map from  to a .ghc Map from  to ghcThe set of transitively reachable units according to the explicitly provided command line arguments. A fully instantiated VirtUnit may only be replaced by a RealUnit from this set. See Note [VirtUnit to RealUnit improvement]CghcPackage state is all stored in  , including the details of all packages, which packages are exposed, and which modules they provide.!The package state is computed by D, 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-packages 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.When 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!CghcModule 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.)Cghc6Module is unavailable because the package is unusable.Cghc7Module is public, and could have come from some places.Cghc 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.CghcIs the module available from a reexport of an exposed package? There could be multiple.Cghc