h,!BvU      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz {|}~                                                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""###############################################################################$$$$$$$$$$$$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ( ) ) ) ) ) ) ) * * * * * * * * * + + + + , , , , , , , , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ------------------------------------------------------------------------------------------------------------------------------------------------------.................................//////01111111112222222222222222222222222223333333333444444444455555556667888888999::;;;;;;:<::::;<<;=>>>>>> ???????????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@AAAAABBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHIIIIIJJJJJJJJKLLLLLLLMMMMMMMMMNNNNNNNNNNNNOOOOOOOOOPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSTTTTTTTTTTUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^__________________`````````````````````````````````````````````````aaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeefffffffffggggggghhhhhhhhh,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,iiiiiiiiiiiiiiiijjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkllllllllllllllllllllllllllllllllllllll l l l l l l l l l l l l l l l l l l l l l l l l l l m m m m m m m 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 o o o o o o o o o o o o o o o o o o o o p p p p q q r r r r r r                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""########################################################################################s#s#s#s#s#s#s#s#s#s#s#s#s#s#s#s#s#s#s#s#s#s#s#s#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t$t$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$u$;$;$u$u$u$u$u$u$u$u$u$u$s$s$s$s$s$s$s$s$s$s$s$+$+$+$+$+$+$+$+$+$+$+$+$+$+$+$+$+$+$+$+$+$+$+$+$+$+$+$+$+$+$+$+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&v&v&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3&3'3'3'3'3'3'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4'4(4(4(4(4(4(4(4(4(4(4(4(4(4(4(4(4(4(4(4(4(4(4(4(4(4(4(4(4(4(4(4(4(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(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)y)y)y)y)y)y)y)y)y)y)y)y)y)y)y)y)y)y)y)y)y)y)y)y)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z)z*z*z*z*z*z*z*z*z*z*z*z*z*z*z*z*z*z*z*z*z*z*z*z*z*z*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*{*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*}*}*}*}*}*}*}+}+}+}+}+}+}+}+}+}+}+}+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,--------------------------------------------------------------------------------------------------------------------------------................................................................................................................................////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222233333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444445555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555566666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777778888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888899999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<================================================================================================================================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA:A:A:A:A:A:A:A:A:A:A:A:A:A:A:A:A:A:A:A:A:A:A:A:A:A:A:A:A:A:A:A:A:A:A:A:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBB8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8CCCCCCCC=C;C;C;C;C;C;C;D:D:D:D:D:DM>M>M>M>M>M>M>M>M>M>M>M>M>M>M>M>M>N>N>N>N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:O:O:OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPtPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQqQqQqQqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRqRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrUrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWrWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6Z6[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]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7]7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^7^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^9^9^9^9^9^9^9^9^9^9^9^9_9_9_9_9_9_9_9_9_9_9_9_9_9_9_9_9_9_9_9_9_9_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_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`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5`5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5b5b5b5bbbbb0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0gvgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhviviviviviviiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj1j1j1j1j1j1j1j1j1j1j1j1j1j1j1j1j1j1j1j1j1j1j1j1j1j1j1j1j1j1j1j1j1j1jjjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~€ÀĀŀƀǀȀɀʀˀ̀̀΀πЀрҀӀԀՀր׀؀ـڀۀ܀݀ހ߀ÁāŁƁǁȁɁʁˁ́́΁ρЁсҁӁԁՁցׁ؁فځہ܁݁ށ߁*******************‚*Â*Ă*ł*Ƃ*ǂ*Ȃ*ɂ*ʂ*˂*̂*͂*΂*ς*Ђ*т*҂*ӂ*Ԃ*Ղ*ւ*ׂ*؂*ق*ڂ*ۂ*܂*݂*ނ*߂***************************************************************************************************ƒ*Ã*ă*Ń*ƃ*ǃ*ȃ*Ƀ*ʃ*˃*̃*̓*΃*σ*Ѓ*у*҃*Ӄ*ԃ*Ճ*փ*׃*؃*ك*ڃ*ۃ*܃*݃*ރ*߃**********************************„ÄĄńƄDŽȄɄʄ˄̄̈́΄τЄф҄ӄԄՄքׄ؄لڄۄ܄݄ބ߄…ÅąŅƅDžȅɅʅ˅̅ͅ΅υЅх҅ӅԅՅօׅ؅مڅۅ܅݅ޅ߅†ÆĆņƆdžȆɆʆˆ̆͆ΆφІц҆ӆԆՆֆ׆؆نچۆ܆݆ކ߆‡ÇćŇƇLJȇɇʇˇ͇̇·χЇч҇ӇԇՇևׇ؇هڇۇ܇݇އ߇ˆÈĈňƈLjȈɈʈˈ͈̈ΈψЈш҈ӈԈՈֈ׈؈وڈۈ܈݈ވ߈‰ÉĉʼnƉljȉɉʉˉ͉̉ΉωЉщ҉ӉԉՉ։׉؉ىډۉ܉݉މ߉ŠÊĊŊƊNJȊɊʊˊ̊͊ΊϊЊъҊӊԊՊ֊׊؊يڊۊ܊݊ފߊ‹ËċŋƋNjȋɋʋˋ̋͋΋ϋЋыҋӋԋՋ֋׋؋ًڋۋ܋݋ދߋŒÌČŌƌnjȌɌʌˌ̌͌ΌόЌьҌӌԌՌ֌׌،ٌڌی܌݌ތߌÍčōƍǍȍɍʍˍ͍̍΍ύЍэҍӍԍՍ֍׍؍ٍڍۍ܍ݍލߍŽÎĎŎƎǎȎɎʎˎ͎̎ΎώЎюҎӎԎՎ֎׎؎َڎێ܎ݎގߎÏďŏƏǏȏɏʏˏ̏͏ΏϏЏяҏӏԏՏ֏׏؏ُڏۏ܏ݏޏߏÐĐŐƐǐȐɐʐː̐͐ΐϐАѐҐ(Ӑ(Ԑ(Ր(֐(א(ؐ(ِ(ڐ(ې(ܐ(ݐ(ސ(ߐ(((((((((((((((((((((((((((((‘ÑđőƑǑȑɑʑˑ̑͑ΑϑБёґӑԑՑ֑בّؑڑۑܑݑޑߑ’ÒĒŒƒǒȒɒʒ˒̒͒ΒϒВђҒӒԒՒ֒גْؒڒےܒݒޒߒ“ÓēœƓǓȓɓʓ˓͓̓ΓϓГѓғӓԓՓ֓דؓٓړۓܓݓޓߓ”ÔĔŔƔǔȔɔʔ˔͔̔ΔϔДєҔӔԔՔ֔הؔٔڔ۔ܔݔޔߔ•ÕĕŕƕǕȕɕʕ˕͕̕ΕϕЕѕҕӕԕՕ֕וٕؕڕەܕݕޕߕ–ÖĖŖƖǖȖɖʖ˖̖͖ΖϖЖіҖӖԖՖ֖זٖؖږۖܖݖޖߖ—×ėŗƗǗȗɗʗ˗̗͗ΗϗЗїҗӗԗ՗֗חؗٗڗۗܗݗޗߗ˜ØĘŘƘǘȘɘʘ˘̘͘ΘϘИјҘӘԘ՘֘טؘ٘ژۘܘݘޘߘ™ÙęřƙǙșəʙ˙̙͙ΙϙЙљҙәԙՙ֙יؙٙڙۙܙݙޙߙšÚĚŚƚǚȚɚʚ˚͚̚ΚϚКњҚӚԚ՚֚ךؚٚښۚܚݚޚߚ›ÛěśƛǛțɛʛ˛̛͛ΛϛЛћқӛԛ՛֛כ؛ٛڛۛܛݛޛߛœÜĜŜƜǜȜɜʜ˜̜͜ΜϜМќҜӜԜ՜֜ל؜ٜڜۜܜݜޜߜÝĝŝƝǝȝɝʝ˝̝͝ΝϝНѝҝӝԝ՝֝ם؝ٝڝ۝ܝݝޝߝžÞĞŞƞǞȞɞʞ˞̞͞ΞϞОўҞӞԞ՞֞מ؞ٞڞ۞ܞݞޞߞŸßğşƟǟȟɟʟ˟̟͟ΟϟПџҟӟԟ՟֟ן؟ٟڟ۟ܟݟޟߟ àĠŠƠǠȠɠʠˠ̠͠ΠϠРѠҠӠԠՠ֠נؠ٠ڠ۠ܠݠޠߠ¡áġšơǡȡɡʡˡ̡͡ΡϡСѡҡӡԡա֡סء١ڡۡܡݡޡߡ¢âĢŢƢǢȢɢʢˢ̢͢΢ϢТѢҢӢԢբ֢עآ٢ڢۢܢݢޢߢ£ãģţƣǣȣɣʣˣ̣ͣΣϣУѣңӣԣգ֣ףأ٣ڣۣܣݣޣߣ¤äĤŤƤǤȤɤʤˤ̤ͤΤϤФѤҤӤԤդ֤פؤ٤ڤۤܤݤޤߤ¥åĥťƥǥȥɥʥ˥̥ͥΥϥХѥҥӥԥե֥ץإ٥ڥۥܥݥޥߥ¦æĦŦƦǦȦɦʦ˦̦ͦΦϦЦѦҦӦԦզ֦צئ٦ڦۦܦݦަߦ§çħŧƧǧȧɧʧ˧̧ͧΧϧЧѧҧӧԧէ֧קا٧ڧۧܧݧާߧ¨èĨŨƨǨȨɨʨ˨̨ͨΨϨШѨҨӨԨը֨רب٨ڨۨܨݨިߨ©éĩũƩǩȩɩʩ˩̩ͩΩϩЩѩҩөԩթ֩שة٩ک۩ܩݩީߩªêĪŪƪǪȪɪʪ˪̪ͪΪϪЪѪҪӪԪժ֪תت٪ڪ۪ܪݪުߪ«ëīūƫǫȫɫʫ˫̫ͫΫϫЫѫҫӫԫի֫׫ث٫ګ۫ܫݫޫ߫¬ìĬŬƬǬȬɬʬˬ̬ͬάϬЬѬҬӬԬլ֬׬ج٬ڬ۬ܬݬެ߬­íĭŭƭǭȭɭʭ˭̭ͭέϭЭѭҭӭԭխ֭׭ح٭ڭۭܭݭޭ߭®îĮŮƮǮȮɮʮˮ̮ͮήϮЮѮҮӮԮծ֮׮خٮڮۮܮݮޮ߮¯ïįůƯǯȯɯʯ˯̯ͯίϯЯѯүӯԯկ֯ׯدٯگۯܯݯޯ߯°ðİŰưǰȰɰʰ˰̰ͰΰϰаѰҰӰ԰հְװذٰڰ۰ܰݰް߰±ñıűƱDZȱɱʱ˱̱ͱαϱбѱұӱԱձֱױرٱڱ۱ܱݱޱ߱²òIJŲƲDzȲɲʲ˲̲ͲβϲвѲҲӲԲղֲײزٲڲ۲ܲݲ޲߲³óijųƳdzȳɳʳ˳̳ͳγϳгѳҳӳԳճֳ׳سٳڳ۳ܳݳ޳߳´ôĴŴƴǴȴɴʴ˴̴ʹδϴдѴҴӴԴմִ״شٴڴ۴ܴݴ޴ߴµõĵŵƵǵȵɵʵ˵̵͵εϵеѵҵӵԵյֵ׵صٵڵ۵ܵݵ޵ߵ¶öĶŶƶǶȶɶʶ˶̶Ͷζ϶жѶҶӶԶնֶ׶ضٶڶ۶ܶݶ޶߶·÷ķŷƷǷȷɷʷ˷̷ͷηϷзѷҷӷԷշַ׷طٷڷ۷ܷݷ޷߷¸øĸŸƸǸȸɸʸ˸̸͸θϸиѸҸӸԸոָ׸ظٸڸ۸ܸݸ޸߸¹ùĹŹƹǹȹɹʹ˹̹͹ιϹйѹҹӹԹչֹ׹عٹڹ۹ܹݹ޹߹ºúĺźƺǺȺɺʺ˺̺ͺκϺкѺҺӺԺպֺ׺غٺںۺܺݺ޺ߺ»ûĻŻƻǻȻɻʻ˻̻ͻλϻлѻһӻԻջֻ׻ػٻڻۻܻݻ޻߻¼üļżƼǼȼɼʼ˼̼ͼμϼмѼҼӼԼռּ׼ؼټڼۼܼݼ޼߼½ýĽŽƽǽȽɽʽ˽̽ͽνϽнѽҽӽԽսֽ׽ؽٽڽ۽ܽݽ޽߽¾þľžƾǾȾɾʾ˾̾;ξϾоѾҾӾԾվ־׾ؾپھ۾ܾݾ޾߾¿ÿĿſƿǿȿɿʿ˿̿ͿοϿпѿҿӿԿտֿ׿ؿٿڿۿܿݿ޿߿                                                                                                     None -9:;ghc7Compute all lists of the given alphabet. For example:  "ab" = ["a", "b", "aa", "ba", "ab", "bb", "aaa", "baa", "aba", ...] Safe-Inferred` Safe-InferredmkhojlinbcdZ\[3FMN564"f e!*g)87#$ &/+|{ } ~-' (B.01%Y,TUVSWXDAPQO:@KJ?9IL;<=>EC>=;@KJD9IL 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 ysghcTrue if length xs <= length ysghcTrue if length xs < length ysghc=Utility function to go from a singleton list to it's element.Wether or not the argument is a singleton list is only checked in debug builds.ghcExtract the single element of a list and panic with the given message if there are more elements or the list was empty. Like  expectJust, but for lists.ghcSplit a list into chunks of n elementsghc>Compute all the ways of removing a single element from a list. 4holes [1,2,3] = [(1, [2,3]), (2, [1,3]), (3, [1,2])]ghc8Replace the last element of a list with another element.ghcLike expectJust msg . nonEmpty; a better alternative to .ghc5Apply an effectful function to the last list element.ghc4Merge an unsorted list of sorted lists, for example: mergeListsBy compare [ [2,5,15], [1,10,100] ] = [1,2,5,10,15,100] O(n \log{} k) ghc=Remove duplicates but keep elements in order. O(n * log n)ghc=Remove duplicates but keep elements in order. O(n * log n)ghc;Given two lists xs and ys, return `splitAt (length xs) ys`.ghcdrop from the end of a listghc+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.ghc onJust x m f? applies f to the value inside the Just or returns the default.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 explanationghcSearch for possible matches to the users input in the given list, returning a small number of ranked resultsghc*Determine the $log_2$ of exact powers of 2ghcParse a string into a significand and exponent. A trivial example might be: ghci> readSignificandExponentPair "1E2" (1,2) In a more complex case we might return a exponent different than that which the user wrote. This is needed in order to use a Integer significand. ghci> readSignificandExponentPair "-1.11E5" (-111,3)ghcParse a string into a significand and exponent according to the "Hexadecimal Floats in Haskell" proposal. A trivial example might be: ghci> readHexSignificandExponentPair "0x1p+1" (1,1) Behaves similar to readSignificandExponentPair but the base is 16 and numbers are given in hexadecimal: ghci> readHexSignificandExponentPair "0xAp-4" (10,-4) ghci> readHexSignificandExponentPair "0x1.2p3" (18,-1)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 + 32768]]!None 7 ghcA 5 is a pointer to some array of Latin-1 encoded chars.ghcLexical FastStringThis is a simple FastString wrapper with an Ord instance using  (i.e. which compares FastStrings on their String representation). Hence it is deterministic from one run to the other.ghcNon-deterministic FastStringThis is a simple FastString wrapper with an Ord instance using  (i.e. which compares FastStrings on their Uniques). Hence it is not deterministic from one run to the other.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.ghcLazily computed Z-encoding of this string. See Note [Z-Encoding] in GHC.Utils.Encoding.Since s are globally memoized this is computed at most once for any given string.ghc:Gives the Modified UTF-8 encoded bytes corresponding to a ghc:Gives the Modified UTF-8 encoded bytes corresponding to a ghczStringTakeN n =  n .  but is performed in  O(\min(n,l)) rather than O(l) , where l is the length of the .ghcCompare FastString lexically2If you don't care about the lexical ordering, use  instead.ghc3Compare FastString by their Unique (not lexically).Much cheaper than  but non-deterministic!ghc Create a  by copying an existing ghc Create a  from an existing  without copying.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 .ghcReturns the length of the  in charactersghcReturns True if the  is emptyghc)Lazily unpacks and decodes the FastStringghc!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 Decode a  back into a : using Latin-1 encoding. This does not free the memory associated with .ghcunpackPtrStringTakeN n =  n .  but is performed in  O(\min(n,l)) rather than O(l) , where l is the length of the .ghcReturn the length of a 11"None!ghcReplicate an 8-bit character  #"(c) The University of Glasgow 2001 BSD-style (see the file LICENSE)!David Terei stableportableNone6-ghcRendering mode.ghcNormalghcWith zig-zag cutsghc%No indentation, infinitely long linesghcAll on one lineghcA rendering style.ghc%Ratio of line length to ribbon lengthghcLength of line, in charsghcThe rendering modeghcThe TextDetails data typeA TextDetails represents a fragment of text that will be output at some point.ghcA single Char fragmentghcA 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 tagsghc*Empty text (one line high but no width). (emptyText = text "")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 emptyghcGet the first character of a document. We also return a new document, equivalent to the original one but faster to render. Use it to avoid work duplication.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 (7mode=PageMode False, lineLength=100, ribbonsPerLine=1.5).ghcCan we output an ascii space character for spaces? Mostly true, but not for e.g. UTF16 See Note [putSpaces optimizations] for why we bother to track this.ghc Render the Doc to a String using the given Style.ghcDefault TextDetails printerghc The general rendering interface.ghcA ';' characterghcA ',' characterghcA : characterghcA space characterghcA '=' characterghcA '(' characterghcA ')' characterghcA '[' characterghcA ']' characterghcA '{' characterghcA '}' characterghc 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 [...]ghcWrap document in {...}ghcRendering modeghc Line lengthghcRibbons per lineghcWhat to do with textghcWhat to do at the endghc The documentghcResult$ Safe-Inferred9ghcA 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.   %None7= ghcSource Unpackedness$What unpackedness the user requested ghc{-# UNPACK #-} specified ghc{-# NOUNPACK #-} specified ghcno unpack pragma ghcSource Strictness)What strictness annotation the user wrote ghc Lazy, ie ~ ghc Strict, ie ! ghcno strictness annotation ghc%See Note [Roles] in GHC.Core.CoercionOrder of constructors matters: the Ord instance coincides with the *super*typing relation on roles. ghcField labels are just represented as strings; they are not necessarily unique (even within a module) ghcA *one-index* constructor tagType of the tags associated with each constructor possibility or superclass selector ghcThe width of an unboxed sum  & Safe-Inferred )*/17C ghcSee Note [NoGhcTc] in GHC.Hs.Extension. It has to be in this module because it is used like an extension point (in the data definitions of types that should be parameter-agnostic. ghc*Maps the "normal" id type for a given pass ghcThe trivial wrapper that carries no additional information See Note [XRec and SrcSpans in the AST] ghc4We can map over the underlying type contained in an XRec( while preserving the annotation as is. ghcWe can strip off the XRec to access the underlying data. See Note [XRec and SrcSpans in the AST] ghcGHC's L prefixed variants wrap their vanilla variant in this type family, to add SrcLoc info via Located. Other passes than GhcPass= not interested in location information can define this as "type instance XRec NoLocated a = a*. See Note [XRec and SrcSpans in the AST] ghcA placeholder type for TTG extension points that are not currently unused to represent any particular value.!This should not be confused with  ', which are found in unused extension  constructors8 and therefore should never be inhabited. In contrast,   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. ghc=Used when constructing a term with an unused extension point. ghc Eliminate a  &. See Note [Constructor cannot occur].  'NoneJd ghc2A ModuleName is essentially a simple string, e.g.  Data.List. ghc6Compares module names lexically, rather than by their Uniques ghcReturns 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. -None 6p ghcA class of types that represent a multiline document, with support for vertical composition.See Note [HLine versus HDoc] and Note [The outputable class hierarchy] for more details. ghc Join two docs together vertically. If there is no vertical overlap it "dovetails" the two onto one line. ghc Concatenate docs vertically with dovetailing. ghcPrints as either the given   or the given  , depending on which type the result is instantiated to. This should generally be avoided; see Note [dualLine and dualDoc] for details. ghcA class of types that represent a single logical line of text, with support for horizontal composition.See Note [HLine versus HDoc] and Note [The outputable class hierarchy] for more details. ghc Join two doc&s together horizontally without a gap. ghc Join two doc0s together horizontally with a gap between them. ghcSeparate: is either like   or like  , depending on what fits. ghc,A paragraph-fill combinator. It's much like  , only it keeps fitting things on one line until it can't fit any more. ghc Concatenate docs horizontally without gaps. ghc Concatenate doc-s horizontally with a space between each one. ghcPrints as either the given   or the given  , depending on which type the result is instantiated to. This should generally be avoided; see Note [dualLine and dualDoc] for details. ghcA superclass for   and   that provides an identity,  #, as well as access to the shared  .;See Note [The outputable class hierarchy] for more details. ghcRepresents a (possibly empty) sequence of lines that can be efficiently printed directly to a  (actually a ). See Note [SDoc versus HDoc] and Note [HLine versus HDoc] for more details. ghcRepresents a single line of output that can be efficiently printed directly to a  (actually a ). See Note [SDoc versus HDoc] and Note [HLine versus HDoc] for more details. 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) ghcWrapper for types having a Outputable instance when an OutputableP instance is required. ghc5Outputable class with an additional environment value See Note [The OutputableP class] ghc(Class designating that some type has an   representation ghcUsed to map UnitIds to more friendly "package-version:component" strings while pretty-printing.Use  to set it. Users should never have to set it to pretty-print SDocs emitted by GHC, otherwise it's a bug. It's an internal field used to thread the UnitState so that the Outputable instance of UnitId can use it.%See Note [Pretty-printing UnitId] in GHC.Unit for more details.Note that we use  instead of UnitId1 to avoid boring module inter-dependency issues. ghcTrue if Unicode encoding is supported and not disabled by GHC_NO_UNICODE environment variable ghc stop ghcUse   field as depth ghc!Print code; either C or assembler ghc$NB: This won't ever show package IDs ghcDefault style for error messages, when we don't know NamePprCtx It's a bit of a hack because it doesn't take into account what's in scope Only used for desugarer warnings, and typechecker errors in interface sigs ghc!Style for printing error messages ghcDefault pretty-printing options ghc6Truncate a list that is longer than the current depth. ghc'Indicate if -dppr-debug mode is enabled ghc,Says what to do with and without -dppr-debug ghc7Says what to do with -dppr-debug; without, return empty ghcThe analog of  for  , which tries to make sure the terminal doesn't get screwed up by the ANSI color codes if an exception is thrown during pretty-printing. ghcLike   but appends an extra newline. ghcAn efficient variant of   specialized for  that outputs to a . ghcdoublePrec p n shows a floating point number n with p. digits of precision after the decimal point.ghcIndent   some specified amountghc Join two   together verticallyghcA paragraph-fill combinator. It's much like sep, only it keeps fitting things on one line until it can't fit any more.ghcThis behaves like  , but it uses  ( for horizontal composition rather than  ghcThis behaves like , but does not indent the second document when the header is empty.ghc,Punctuate a list, e.g. with commas and dots. sep $ punctuateFinal comma dot [text "ab", text "cd", text "ef"] ab, cd, ef.ghc.Apply the given colour/style for the argument.)Only takes effect if colours are enabled.ghc2Special combinator for showing character literals.ghc/Special combinator for showing string literals.ghc3Special combinator for showing bytestring literals.ghc0Special combinator for showing unboxed literals.ghc9Normalise, escape and render a string representing a pathe.g. "c:\whatever"ghcReturns the separated concatenation of the pretty printed things.ghcReturns the comma-separated concatenation of the pretty printed things.ghcReturns the comma-separated concatenation of the quoted pretty printed things. ,y,z] ==> `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 singular verb suffix appropriate for the length of a list: singular [] = empty singular["Hello"] = char 's' singular ["Hello", "World"] = emptyghcDetermines 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 thisghcit or they', depeneding on the length of the list. itOrThey [x] = text "it" itOrThey [x,y] = text "they" itOrThey [] = text "they" -- probably avoid thisghcDetermines the form of subject appropriate for the length of a list: thisOrThese [x] = text "This" thisOrThese [x,y] = text "These" thisOrThese [] = text "These" -- probably avoid thisghc"has" or "have"# depending on the length of a list.ghc The headerghcAmount to indent the hung bodyghc3The hung body, indented and placed below the headerghcThe punctuationghcThe list that will have punctuation added between every adjacent pair of elementsghcPunctuated listghcThe interstitial punctuationghcThe final punctuationghcThe list that will have punctuation added between every adjacent pair of elementsghcPunctuated listghc#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=GHC's own exception type error messages all take the form:  : If the location is on the command line, or in GHC itself, then ="ghc". All of the error types below correspond to a 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 doesn't use the options set by the user via DynFlags.ghc;Append a description of the given exception to this string.ghc7Throw an exception saying "bug in GHC" with a callstackghc&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)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.ghcPanic with an assertion failure, recording the given file and line number. Should typically be accessed with the ASSERT family of macros+.NoneUghc!If debug output is on, show some   on the screenghcpprTraceWith 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) xghcpprTraceException 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.ghcJust warn about an assertion failure, recording the given file and line number.ghcFor when we want to show the user a non-fatal WARNING so that they can report a GHC bug, but don't want to panic.  NonemkhojlinbcdZ\[3FMN564"f e!*g)87#$ &/+|{ } ~-' (B.01%Y,TUVSWXDAPQO:@KJ?9IL;<=>EC DNone 167ghc$Layout information for declarations.ghc$Explicit braces written by the user. 'class C a where { foo :: a; bar :: a } ghc0Virtual braces inserted by the layout algorithm. &class C a where foo :: a bar :: a ghcEmpty or compiler-generated blocks do not have layout information associated with them.ghcWith  UnicodeSyntax, there might be multiple ways to write the same token. For example an arrow could be either -> or C. This choice must be recorded in order to exactprint such tokens, so instead of  HsToken "->" we introduce HsUniToken "->" "C". See also IsUnicodeSyntax in GHC.Parser.Annotation,; we do not use here to avoid a dependency.ghcA token stored in the syntax tree. For example, when parsing a let-expression, we store  HsToken "let" and  HsToken "in". The locations of those tokens can be used to faithfully reproduce (exactprint) the original program text.ghc.Layout column (indentation level, begins at 1)  None ghc+A state monad which is strict in the state s, but lazy in the value a.See Note [Strict State monad] for the particular notion of strictness and implementation details.ghcForces the state component of the unboxed representation pair of . See Note [Strict State monad]. This is The Place doing the forcing!  NoneNoneghc for  lists.ghcmapAndUnzipM for triplesghcMonadic version of mapAccumLghcMonadic version of mapSndghcMonadic version of concatMapghcApplicative version of mapMaybeghcMonadic version of &, aborts the computation at the first True valueghcMonad version of &, aborts the computation at the first False valueghcMonadic version of orghcMonadic version of andghc1Monadic version of foldl that discards its resultghcMonadic 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.ghcMonadic version of  partitionghccombining functionghc initial stateghcinputsghcfinal state, outputs"24"f e!&4 !"efqsrt2BNone 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?INoneghcWhen 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.JNone"ghc-What kind of {-# SCC #-} to add automaticallyghcno SCC annotations addedghc,top-level and nested functions are annotatedghc"top-level functions annotated onlyghc!exported functions annotated onlyghcannotate call-sitesONoneghcThis is used to signal if one of my imports used HPC instrumentation even if there is no module-local HPC usageghc;Information about a modules use of Haskell Program Coverageghc*Is hpc used anywhere on the module *tree*?ghcFind out if HPC is used by this module or any of the modules it depends upon  HNoneghcType alias for ; the convention is we'll use this for mutable bits of data in the typechecker which are updated during typechecking and returned at the end.KNoneghcDoes 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.None "Z ghc File bytes.ghc File size.ghc File mode.ghc File group.ghc File owner.ghcFile modification time.ghc File name.ghc>= operation for ב. was a hot-spot in the ticky profile for the ManyConstructors test which called the cg function many times in  StgToCmm.hsܑ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 ב, lazilyghcNote this is not very efficient because it traverses the whole stream before rebuilding it, avoid using it if you can. mapAccumL used to implemented but it wasn't used anywhere in the compiler and has similar efficiency problems.ܑݑޑߑڑۑבّؑӑՑ֑ԑבّؑӑՑԑ֑ڑۑܑݑޑߑNone -Ġghc+Copy and freeze a slice of a mutable array.ghc!Freeze a mutable array (no copy!)ghc)Index a small-array (no bounds checking!)ghcConvert a list into an array.ghcsizeghcinitial contentsghcarrayghcindexghc new elementghcsourceghcoffsetghclengthghcarrayghcindex  None /9ghcTakes a list of Maybes and returns the first Just if there is one, or Nothing otherwise.ghcTakes computations returnings Maybes6; tries each one in order. The first one to return a Just wins. Returns Nothing if all computations return Nothing.ghcFlipped version of  fromMaybe, useful for chaining.ghcTry performing an D action, failing on error.@KJANoneSNoneɹghcmaybeFlipCond 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.(c) Matt Morrow 2009BSD3stableportableNone 9Y ghc Dominators. Complexity as for idomghcPost-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.ghc arr .= x idx => write x to indexghcrenum n g: Rename all nodesGives nodes sequential names starting at n. Returns the new graph and a mapping. (renamed, old -> new)NoneFNone 9:;ϲ::None)*0169 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/closedĒghc6Either type indexed by closed/open using type familiesǒghcUsed at the type level to indicate "open" vs "closed" structure.ȒghcAn "open" structure with a unique, unnamed control-flow edge flowing in or out. "Fallthrough" 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.*ђҒْ̒ВΒϒ͒גՒ֒ؒ˒ӒߒʒԒܒݒޒڒےŒǒɒȒĒ’Òƒ*ǒȒɒƒŒ’ÒĒђҒْ̒ВΒϒ͒גՒ֒ؒ˒ӒߒʒԒܒݒޒڒےNoneghcExpand occurrences of the $tooldir interpolation in a string on Windows, leave the string untouched otherwise.ghc.Returns a Unix-format path pointing to TopDir.ghc*whether we use the ambient mingw toolchainghctooldirghc,Maybe TopDir path (without the '-B' prefix).ghcTopDir (in Unix format  separated)ghc*whether we use the ambient mingw toolchainghctopdirNonezghcThe predicates below look costly, but aren't, GHC+GCC do a great job at the big case below.NoneghcOrdGr comes equipped with an Ord instance, so that graphs can be used as e.g. Map keys.ghc Merge the  into the .Context adjacencies should only refer to either a Node already in a graph or the node in the Context itself (for loops).(Behaviour is undefined if the specified  already exists in the graph.ghcMinimum implementation: , , , , ghc An empty .ghcTrue if the given  is empty.ghc Decompose a  into the - found for the given node and the remaining .ghc Create a  from the list of s and s.&For graphs that are also instances of , mkGraph ns es should be equivalent to ( es .  ns) .ghcA list of all  s in the .ghcDecompose a graph into the  for an arbitrarily-chosen  and the remaining .ghcThe number of s in a .ghcThe minimum and maximum  in a .ghcA list of all  s in the .ghcUnlabeled decomposition.ghcUnlabeled context.ghc The same as , only more sure of itself.ghc, decomposition - the context removed from a , and the rest of the .ghc Links to the , the ! itself, a label, links from the .In other words, this captures all information regarding the specified  within a graph.ghcLabeled links to or from a .ghcQuasi-unlabeled pathghc Labeled pathghcUnlabeled pathghcQuasi-unlabeled edgeghc Labeled edgeghcUnlabeled edgeghcQuasi-unlabeled nodeghc Labeled nodeghcUnlabeled nodeghc0The number of nodes in the graph. An alias for .ghc!The number of edges in the graph.Note that this counts every edge found, so if you are representing an unordered graph by having each edge mirrored this will be incorrect.If you created an unordered graph by either mirroring every edge (including loops!) or using the undir function in Data.Graph.Inductive.Basic9 then you can safely halve the value returned by this.ghc6Fold a function over the graph by recursively calling .ghc5Map a function over the graph by recursively calling .ghcMap a function over the  labels in a graph.ghcMap a function over the  labels in a graph.ghcMap functions over both the  and  labels in a graph.ghc List all  s in the .ghc List all  s in the .ghc$Drop the label component of an edge.ghcAdd a label to an edge.ghcThe label in an edge.ghcList N available s, i.e. s that are not used in the .ghcL if the  is present in the .ghc Insert a  into the .ghc Insert a  into the .ghc Remove a  from the .ghc Remove an  from the .6NOTE: in the case of multiple edges, this will delete all such edges from the graph as there is no way to distinguish between them. If you need to delete only a single such edge, please use .ghc Remove an  from the .NOTE: in the case of multiple edges with the same label, this will only delete the first5 such edge. To delete all such edges, please use  delAllLedge.ghc,Remove all edges equal to the one specified.ghcInsert multiple  s into the .ghcInsert multiple  s into the .ghcRemove multiple  s from the .ghcRemove multiple  s from the .ghcBuild a  from a list of s.2The list should be in the order such that earlier 1s depend upon later ones (i.e. as produced by  (:) []).ghcBuild a quasi-unlabeled .ghcBuild a graph out of the contexts for which the predicate is satisfied by recursively calling .ghcReturns the subgraph only containing the labelled nodes which satisfy the given predicate.ghcReturns the subgraph only containing the nodes which satisfy the given predicate.ghcReturns the subgraph only containing the nodes whose labels satisfy the given predicate.ghc3Returns the subgraph induced by the supplied nodes.ghcFind the context for the given . Causes an error if the  is not present in the .ghcFind the label for a .ghcFind the neighbors for a .ghc4Find the labelled links coming into or going from a .ghc Find all "s that have a link from the given .ghc Find all s that link to to the given .ghc Find all !s that are linked from the given  and the label of each link.ghc Find all s that link to the given  and the label of each link.ghcFind all outward-bound s for the given .ghcFind all inward-bound s for the given .ghc The outward-bound degree of the .ghcThe inward-bound degree of the .ghcThe degree of the .“ghcThe  in a .ÓghcThe label in a .ēghcThe  from a .œghcAll s linked to or from in a .Ɠghc/All labelled links coming into or going from a .ǓghcAll s linked to in a .ȓghcAll s linked from in a .ɓghcAll s linked from in a , and the label of the links.ʓghcAll s linked from in a , and the label of the links.˓ghcAll outward-directed s in a .̓ghcAll inward-directed s in a .͓ghcThe outward degree of a .ΓghcThe inward degree of a .ϓghcThe degree of a .Гghc5Checks if there is a directed edge between two nodes.ѓghc8Checks if there is an undirected edge between two nodes.ғghc5Checks if there is a labelled edge between two nodes.ӓghcChecks if there is an undirected labelled edge between two nodes.ՓghcPretty-print the graph. Note that this loses a lot of information, such as edge inverses, etc.֓ghc!Pretty-print the graph to stdout.ݓړۓܓϓԓГғѓӓΓ̓ÓēƓʓɓœ“˓͓ȓՓ֓ǓړۓܓݓГѓғӓԓ“ÓēœƓǓȓʓɓ˓͓̓ΓϓՓ֓None<~NoneNNoneghc2Edge weights to use when generating a CFG from CMMghcDefault edge weights  PNone )*Cghc-Simple data type to represent JSON documents.ghcThe : is unescaped  gNoneghc9Subset of UnitInfo: just enough to pretty-print a unit-idInstead of printing the unit-id which may contain a hash, we print: package-version:componentnameghcComponent nameghcSource package versionghcSource package nameghc IdentifierQNone%&79:;0ghcA 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 Locationghc30-based offset identifying the raw location in the  StringBuffer.The lexer increments the  every time a character (UTF-8 code point) is read from the input buffer. As UTF-8 is a variable-length encoding and  StringBuffer% needs a byte offset for indexing, a  cannot be used for indexing.The parser guarantees that  are monotonic. See #17632. This means that syntactic constructs that appear later in the  StringBuffer" are guaranteed to have a higher . Contrast that with , which does *not* make the analogous guarantee about higher line/column numbers.This is due to #line and {-# LINE ... #-} pragmas that can arbitrarily modify  . Notice how  setSrcLoc and resetAlrLastLoc in GHC.Parser.Lexer update  , modifying  but preserving .Monotonicity makes  useful to determine the order in which syntactic elements appear in the source. Consider this example (haddockA041 in the test suite):haddockA041.hs {-# LANGUAGE CPP #-} -- | Module header documentation module Comments_and_CPP_include where #include "IncludeMe.hs"IncludeMe.hs: -- | Comment on T data T = MkT -- ^ Comment on MkT#After the C preprocessor runs, the  StringBuffer will contain a program that looks like this (unimportant lines at the beginning removed):# 1 "haddockA041.hs" {-# LANGUAGE CPP #-} -- | Module header documentation module Comments_and_CPP_include where # 1 "IncludeMe.hs" 1 -- | Comment on T data T = MkT -- ^ Comment on MkT # 7 "haddockA041.hs" 2The line pragmas inserted by CPP make the error messages more informative. The downside is that we can't use RealSrcLoc to determine the ordering of syntactic elements.With RealSrcLoc, we have the following location information recorded in the AST: * The module name is located at haddockA041.hs:3:8-31 * The Haddock comment "Comment on T" is located at IncludeMe:1:1-17 * The data declaration is located at IncludeMe.hs:2:1-32Is the Haddock comment located between the module name and the data declaration? This is impossible to tell because the locations are not comparable; they even refer to different files.On the other hand, with , we have the following location information: * The module name is located at 846-870 * The Haddock comment "Comment on T" is located at 898-915 * The data declaration is located at 916-928Aside: if you're wondering why the numbers are so high, try running ghc -E haddockA041.hs and see the extra fluff that CPP inserts at the start of the file.For error messages,  is not useful at all. On the other hand, this is exactly what we need to determine the order of syntactic elements: 870 < 898, therefore the Haddock comment appears *after* the module name. 915 < 916, therefore the Haddock comment appears *before* the data declaration.We use  in in GHC.Parser.PostProcess.Haddock to associate Haddock comments with parts of the AST using location information (#17544).ghcReal Source Location'Represents a single point within a fileghcghccombining functionghc initial stateghcinputsghcfinal state, outputsghccombining functionghc initial stateghcinputsghcfinal state, outputs((2None6ghc%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.3See Note [Symbol table representation of names] in GHC.Iface.Binary for details.CNone =kghc)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 "mask" (Char) supplied is purely cosmetic, making it easier to figure out where a Unique was born. See Note [Uniques and masks].The payload part of the Uniques allocated from this UniqSupply are guaranteed distinct wrt all other supplies, regardless of their "mask". This is achieved by allocating the payload part from a single source of Uniques, namely ", shared across all UniqSupply's.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 supplyghcSmart constructor for 9, as described in Note [The one-shot state monad trick].ghcRun the  action, returning the final ghcRun the  action, discarding the final ?None7OghcA wrapper around  with the sole purpose of informing call sites that the provided 5 and 6 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.ghcA finite map from uniques* of one type to elements in another type.The key is just here to keep us honest. It's always safe to use a single type as key. If two types don't overlap in their uniques it's also safe to index the same map at multiple key types. But this is very much discouraged.ghcAdd an element, returns previous lookup result and new map. If old element doesn't exist, add the passed element directly, otherwise compute the element to add using the passed function.ghcAdd elements to the map, combining existing values with inserted ones using the given function.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.IMPORTANT NOTE: This function strictly applies the modification function and forces the result unlike most the other functions in this module.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 } ghc,`plusUFM_CD2 f m1 m2` merges the maps using f$ as the combining function. Unlike =, a missing value is not defaulted: it is instead passed as J to f. f' can never have both its arguments be J.IMPORTANT NOTE: This function strictly applies the modification function and forces the result.`plusUFM_CD2 f m1 m2` is the same as `plusUFM_CD f (mapUFM Just m1) Nothing (mapUFM Just m2) Nothing`.ghcminusUFC_C f map1 map2 returns map1, except that every mapping key |-> value1 in map1" that shares a key with a mapping key |-> value2 in map2 is altered by f: value1 is replaced by f value1 value2 , where K& means that the new value is used and J$ means that the mapping is deleted.ghc Fold over a .Non-deterministic, unless the folding function is commutative (i.e. a1 f ( a2 f b ) == a2 f ( a1 f b ) for all a1, a2, b).ghcLike , but with the  key as well.ghcIn essence foldM See Note [Deterministic UniqFM] to learn about nondeterminism. If you use this please provide a justification why it doesn't introduce nondeterminism.ghc Cast the key domain of a UniqFM.As long as the domains don't overlap in their uniques this is safe.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.ghcold -> new -> resultghcoldghcnewghcresult Arguments of combining function of M.insertWith and addToUFM_C are flipped.ghc key,old,newghc old, resultghc How to adjustghcoldghcnewghcresultghc How to adjustghcoldghcnewghcresultghcThe 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 printedNoneQB]None 79RghcMaps indexed by  keysghcAdd an element, returns previous lookup result and new map. If old element doesn't exist, add the passed element directly, otherwise compute the element to add using the passed function.ghc'Intersection with a combining function.**VNone 79:;Zghc(Type of unique deterministic finite mapsThe key is just here to keep us honest. It's always safe to use a single type as key. If two types don't overlap in their uniques it's also safe to index the same map at multiple key types. But this is very much discouraged.ghc+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 elementghc(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 UniqDFMghc Cast the key domain of a UniqFM.As long as the domains don't overlap in their uniques this is safe.ghcDeterministic, 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 printed00YNone7\ghcWhat's the point you might ask? We might have changed an object without it's key changing. In which case this lookup makes sense.ghc converts a  a into a  a0 assuming, without checking, that it maps each  to a value that has that . See Note [UniqSet invariant].$$NonecghcGraph nodes. Represents a thing that can conflict with another thing. For the register allocater the nodes represent registers.ghc>Neighbors that this node would like to be colored the same as.ghc>Colors that this node would prefer to be, in descending order.ghc(Colors that cannot be used by this node.ghc9Neighbors which must be colored differently to this node.ghcThe color of this node, if any.ghcThe class of this node, determines the set of colors that can be used.ghc"A unique identifier for this node.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.None4nghcA  whose domain is sets of /s, each of which share a common value of type ele. Every such set ("equivalence class") has a distinct representative . Supports merging the entries of multiple such sets in a union-find like fashion.An accurate model is that of [(Set key, Maybe ele)]!: A finite mapping from sets of keys to possibly absent entries ele+, where the sets don't overlap. Example:  m = [({u1,u3}, Just ele1), ({u2}, Just ele2), ({u4,u7}, Nothing)] 9 On this model we support the following main operations: m u3 == Just ele1,  m u4 == Nothing,  m u5 == Nothing. m u1 u3 is a no-op, but  m u1 u2 merges {u1,u3} and {u2} to point to  Just ele2 and returns the old entry of {u1,u3},  Just ele1. m u3 ele4 sets the entry of {u1,u3} to  Just ele4.8As well as a few means for traversal/conversion to list.ghcEither  Indirect x., meaning the value is represented by that of x , or an Entry6 containing containing the actual value it represents.ghclookupSUDFM env x looks up an entry for x, looking through all s until it finds a shared .$Examples in terms of the model (see ): >>> lookupUSDFM [({u1,u3}, Just ele1), ({u2}, Just ele2)] u3 == Just ele1 >>> lookupUSDFM [({u1,u3}, Just ele1), ({u2}, Just ele2)] u4 == Nothing >>> lookupUSDFM [({u1,u3}, Just ele1), ({u2}, Nothing)] u2 == NothingghcequateUSDFM env x y makes x and y+ point to the same entry, thereby merging x's class with y 's. If both x and y$ are in the domain of the map, then y.'s entry will be chosen as the new entry and x's old entry will be returned.$Examples in terms of the model (see ): >>> equateUSDFM [] u1 u2 == (Nothing, [({u1,u2}, Nothing)]) >>> equateUSDFM [({u1,u3}, Just ele1)] u3 u4 == (Nothing, [({u1,u3,u4}, Just ele1)]) >>> equateUSDFM [({u1,u3}, Just ele1)] u4 u3 == (Nothing, [({u1,u3,u4}, Just ele1)]) >>> equateUSDFM [({u1,u3}, Just ele1), ({u2}, Just ele2)] u3 u2 == (Just ele1, [({u2,u1,u3}, Just ele2)])ghcaddToUSDFM env x a sets the entry x is associated with to a1, thereby modifying its whole equivalence class.$Examples in terms of the model (see ): >>> addToUSDFM [] u1 ele1 == [({u1}, Just ele1)] >>> addToUSDFM [({u1,u3}, Just ele1)] u3 ele2 == [({u1,u3}, Just ele2)]ZNone7nWNoneqghcA 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.ghc Fold over a .Non-deterministic, unless the folding function is commutative (i.e. a1 f ( a2 f b ) == a2 f ( a1 f b ) for all a1, a2, b).RNone)*06{ 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 binding  (e.g. the name of an IfaceDecl)ghcserialize a non-binding ( (e.g. a reference to another binding).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.ghc%SeekBin but without calling expandBinghc&Takes a size and action writing up to size bytes. After the action has run advance the index to the buffer by size bytes.ghc"forwardPut put_A put_B" outputs A after B but allows A to be read before B by using a forward referenceghc-Read a value stored using a forward referenceghcSerialize the constructor strictly but lazily serialize a value inside a K.This way we can check for the presence of a value without deserializing the value itself.ghc"Deserialize a value serialized by .ghc;This instance doesn't rely on the determinism of the keys' ,! instance, so it works e.g. for s too.ghchow to deserialize sghchow to serialize non-binding sghchow to serialize binding sTNone )*0|T,None'79:;& 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.ghc"This data type just pairs a value - with an IsBootInterface flag. In practice,  is usually a Module or  ModuleName'.ghc3A 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).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.ghcThe sorted (by  ) instantiations of this unit.ghc)The (indefinite) unit being instantiated.ghcCached unique of .ghcA private, uniquely identifying representation of an InstantiatedUnit. This string is completely private to GHC and is just used to get a unique.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 unitghcA unit key in the databaseghcClass for types that are used as unit identifiers (UnitKey, UnitId, Unit)We need this class because we create new unit ids for virtual units (see VirtUnit) and they have to to be made from units with different kinds of identifiers.ghcAn  is a  " whose unit is identified with an .ghcA  is like an  but we expect to find it in one of the home units rather than the package database.ghcA  is a  # whose unit is identified with an  .ghcModule name (e.g. A.B.C)ghcUnit the module belongs toghc2Compares 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*Smart constructor for instantiated GenUnitghcGenerate 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  ghc4Map over the unit identifier of unit instantiations.ghcReturn the UnitId of the Unit. For on-the-fly instantiated units, return the UnitId of the indefinite unit this unit is an instance of.ghc=Return the virtual UnitId of an on-the-fly instantiated unit.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.         pNoneL  iNone ghcModule LocationWhere a module lives on the file system: the actual locations of the .hs, .hi, .dyn_hi, .o, .dyn_o and .hie files, if we have them.For a module in another unit, 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.The paths of anything which can affect recompilation should be placed inside ModLocation.When a ModLocation is created none of the filepaths will have -boot suffixes. This is because in --make mode the ModLocation is put in the finder cache which is indexed by ModuleName, when a ModLocation is retrieved from the FinderCache the boot suffixes are appended. The other case is in -c mode, there the ModLocation immediately gets given the boot suffixes in mkOneShotModLocation.ghc6Where the .hie file is, whether or not it exists yet.ghc5Where the .dy file is, whether or not it exists yet.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 unit with a .a file)ghc9Where the .dyn_hi file is, whether or not it exists yet.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)ghcThe source file, if we have one. Package modules probably don't have source files.ghcAdd the -boot suffix to .hs, .hi and .o filesghc Remove the -boot suffix to .hs, .hi and .o filesghcAdd the -boot suffix if the Bool argument is TrueghcAdd the -boot4 suffix to all file paths associated with the moduleghcAdd the -boot suffix to all output file paths associated with the module, not including the input file itselfjNone$ghcA map keyed off of ghcA map keyed off of  s (actually, their s) Has deterministic folds and can be deterministically converted to a listghcA map keyed off of  s (actually, their s)ghc A set of  sghcA map keyed off of  s11kNone %&Z 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 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      NoneNone ghc$Hexadecimal representation of an intUsed for uniques. We could use base-62 as GHC usually does but this is likely faster.ghcReturn z-encoded unit:moduleghcthe global linkable unit of a module exports this symbol, depend on it to include that unit (used for cost centres)ghcMake JS symbol corresponding to the given Haskell symbol in the given moduleghcMake JS symbol corresponding to the given Haskell symbol in the given moduleghc+Make JS symbol for given module and unique.ghcMake symbol "h$XYZ" or "h$$XYZ"ghc"h$$" constant stringghc"h$" constant stringmNonew ghcInformation about the home unit (i.e., the until that will contain the modules we are compiling)The unit identifier of the instantiating units is left open to allow switching from UnitKey (what is provided by the user) to UnitId (internal unit identifier) with  .TODO: this isn't implemented yet. UnitKeys are still converted too early into UnitIds in GHC.Unit.State.readUnitDataBase ghc.Definite home unit (i.e. that we can compile).Nothing: not an instantiated unit Just (i,insts): made definite by instantiating "i" with "insts" ghc6Indefinite home unit (i.e. that we can only typecheck)All the holes are instantiated with fake modules from the Hole unit. See Note [Representation of module/name variables] in GHC.Unit ghcReturn home unit id ghcReturn home unit instantiations ghcReturn the unit id of the unit that is instantiated by the home unit.-E.g. if home unit = q[A=p:B,...] we return q.If the home unit is not an instance of another unit, we return its own unit id (it is an instance of itself if you will). ghcReturn the unit id of the unit that is instantiated by the home unit.4E.g. if home unit = q[A=p:B,...] we return (Just q).If the home unit is not an instance of another unit, we return Nothing. ghc&Return the home unit as a normal unit.We infer from the home unit itself the kind of unit we create: 1. If the home unit is definite, we must be compiling so we return a real unit. The definite home unit may be the result of a unit instantiation, say `p = q[A=r:X]`. In this case we could have returned a virtual unit `q[A=r:X]` but it's not what the clients of this function expect, especially because p is lost when we do this. The unit id of a virtual unit is made up internally so `unitId(q[A=r:X])` is not equal to p. If the home unit is indefinite we can only create a virtual unit from it. It's ok because we must be only typechecking the home unit so we won't produce any code object that rely on the unit id of this virtual unit. ghc4Map over the unit identifier for instantiating units ghc/Test if we are type-checking an indefinite unit7(if it is not, we should never use on-the-fly renaming) ghc(Test if we are compiling a definite unit3(if it is, we should never use on-the-fly renaming) ghc9Test if we are compiling by instantiating a definite unit ghc!Test if the unit is the home unit ghc'Test if the unit-id is the home unit-id ghc+Test if the unit-id is not the home unit-id ghc9Test if the home unit is an instance of the given unit-id ghc+Test if the module comes from the home unit ghc+Test if the module comes from the home unit ghc6Test if a module doesn't come from the given home unit ghc6Test if a module doesn't come from the given home unit ghc6Test if a module doesn't come from the given home unit ghc6Test if a module doesn't come from the given home unit ghcMake a module in home unit ghcMake a module in home unit ghcReturn the module that is used to instantiate the given home module name. If the ModuleName doesn't refer to a signature, return the actual home module."E.g., the instantiating module of A in  p[A=q[]:B] is q[]:B%. the instantiating module of A in p is p:A. ghcReturn the module that is used to instantiate the given home module.If the given module isn't a module hole, return the actual home module."E.g., the instantiating module of p:A in  p[A=q[]:B] is q[]:B%. the instantiating module of r:A in  p[A=q[]:B] is r:A%. the instantiating module of p:A in p is p:A%. the instantiating module of r:A in p is r:A.  None9  [None %&(7 ghcA String Literal in the source, including its original raw format for use by source to source manipulation tools.ghcFractional 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. Note [FractionalLit representation] in GHC.HsToCore.Match.Literal The actual value then is: sign * fl_signi * (fl_exp_base^fl_exp) where sign = if fl_neg then (-1) else 1For example FL { fl_neg = True, fl_signi = 5.3, fl_exp = 4, fl_exp_base = Base10 } denotes -5300ghc'How the value was written in the sourceghcIntegral 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.ghcFor when code is generated, e.g. TH, deriving. The pretty printer will then make its own representation of the item.ghc/Special combinator for showing string literals.ghc7The integer should already be negated if it's negative.ghc=The arguments should already be negated if they are negative.ghcCompare fractional lits with small exponents for value equality but large values for syntactic equality.ghcBe wary of using this instance to compare for equal *values* when exponents are large. The same value expressed in different syntactic form won't compare as equal when any of the exponents is >= 100.ghcBe wary of using this instance to compare for equal *values* when exponents are large. The same value expressed in different syntactic form won't compare as equal when any of the exponents is >= 100.!!nNone7 ghc Package-qualifier after renamingRenaming detects if "this" or the unit-id of the home-unit was used as a package qualifier. ghcNo package qualifier ghcImport from home-unit ghcImport from another unit ghc"Package-qualifier as it was parsed ghcNo package qualifier ghcRaw package qualifier string.  oNoneý ghc.hs file ghc.hs-boot or .hsig file ghc .hs-boot file ghc .hsig file ghc Tests if an  9 is a boot file, primarily for constructing elements of  BuildModule. We conflate signatures and modules because they are bound in the same namespace; only boot interfaces can be disambiguated with `import {-# SOURCE #-}`.  NoneĴghcA newtype wrapper around < to ensure we never generate a < that becomes a NaN&, see instances for details on sanity.”Ô”ÔeNoneq ghcSafe Haskell information for ModIface Simply a wrapper around SafeHaskellMode to separate iface and flagsghcThe various Safe Haskell modesghcinferred unsafeghcdeclared and checkedghcdeclared and checkedghcdeclared and checkedghcinferred as safeghc-fno-safe-haskell stateghcIs an import a safe import?  lNone7Jghc 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!!aNone7˹ghcCaptures 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.XNone76ghc9An 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.UNone͕ghcReadingghcWriting  bNone 7ghc#A contiguous chunk of documentationghc'|' is the decoratorghc is the decoratorghc'$ string' is the decoratorghc%The decorator is the given number of |sghcHaskell Documentation StringRich structure to support exact printing The location around each chunk doesn't include the decoratorsghc#The first chunk is preceded by "--  decorator" and each following chunk is preceded by "--" Example: -- | This is a docstring for foo$. It is the line with the decorator '|' and is always included -- This continues that docstring and is the second element in the NonEmpty list foo :: a -> aghc The docstring is preceded by "{- decorator" and followed by "-}" The chunk contains balanced pairs of '{-' and '-}'ghcA docstring generated either internally or via TH Pretty printed with the '-- |' decorator This is because it may contain unbalanced pairs of '{-' and '-}' and not form a valid ghcAnnotate a pretty printed thing with its doc The docstring comes after if is  Otherwise it comes before. Note - we convert MultiLineDocString HsDocStringPrevious to HsDocStringNext because we can't control if something else will be pretty printed on the same lineghc Create a  from a UTF8-encoded .ghc:Pretty print with decorators, exactly as the user wrote itghc:Pretty print with decorators, exactly as the user wrote itghc.Just get the docstring, without any decoratorsghc&Don't add a newline to a single stringghcJust get the docstring, without any decorators Separates docstrings using "nn", which is how haddock likes to render themSNoneghcRepresents the  as a bit set.+Assumes that all elements are non-negative.This is only efficient for values that are sufficiently small, for example in the lower hundreds.dNone*ghcA group of warning flags that can be enabled or disabled collectively, e.g. using -Wcompat to enable all warnings in the  group.ghc-Enumerates the simple on-or-off dynamic flagsghc.Append dump output to files instead of stdout.ghc Use foo.ways. dumpFlag instead of foo. dumpFlagghc8Enable floating out of let-bindings in the simplifierghcEnable floating out of let-bindings at the top level in the simplifier N.B. See Note [RHS Floating]ghcdeprecated, no effect and behaviour is now default. Allowed switching of a special demand transformer for dictionary selectorsghc)Use the cfg based block layout algorithm.ghc+Layout based on last instruction per block.ghc;Do W/W split for unlifting even if we won't unbox anything.ghcrender JavaScript pretty-printed instead of minified (compacted)ghcIgnore manual SCC annotationsghc -fPICghc -fPIEghc -pieghcUse regular thunks even when we could use std ap thunks in order to get entry countsghc -fcompact-unwindghcSuppress timestamps in dumpsghc-Suppress per binding Core size stats in dumpsghcDebugging flagsghc#Dump the cfg used for block layout.ghcInitial STG (CoreToStg output)ghcSTG after unariseghcSTG (after stg2stg)ghc!Result of tag inference analysis.ghcFinal STG (before cmm gen)ghc)Helper function to query whether a given  is enabled or not.ghcIs the flag implicitly enabled when the verbosity is high enough?ghcThe set of flags which affect optimisation for the purposes of recompilation avoidance. Specifically, these include flags which affect code generation but not the semantics of the program.See Note [Ignoring some flag changes] in GHC.Iface.Recomp.Flags)ghcThe set of flags which affect code generation and can change a program's runtime behavior (other than performance). These include flags which affect:?user visible debugging information (e.g. info table provenance);the ability to catch runtime errors (e.g. -fignore-asserts)6the runtime result of the program (e.g. -fomit-yields)5which code or interface file declarations are emittedWe also considered placing flags which affect asympototic space behavior (e.g. -ffull-laziness) however this would mean that changing optimisation levels would trigger recompilation even with -fignore-optim-changes, regressing #13604.Also, arguably Opt_IgnoreAsserts should be here as well; however, we place it instead in  since it is implied by -O[12]( and therefore would also break #13604. See #23369.ghc!Return the names of a WarningFlagOne flag may have several names because of US/UK spelling. The first one is the "preferred one" that will be displayed in warning messages.ghcDoes this warning group contain (all) extended warning categories? See Note [Warning categories] in GHC.Unit.Module.Warnings.The * group contains extended warnings but no 5s, but extended warnings are also treated as part of + and every warning group that includes it.ghcWarning groups.As all warnings are in the Weverything set, it is ignored when displaying to the user which group a warning is in.ghcWarning 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  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.ghcThe smallest group in every hierarchy to which a custom warning category belongs is currently always -Wextended-warnings$. See Note [Warning categories] in GHC.Unit.Module.Warnings.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.ghc"Things you get with -Wunused-bindsghcGetter for verbosity settingghc(Getter for the set of enabled dump flags^None 7 ghcFlag to indicate whether the FieldSelectors extension is enabled.ghc.Selector functions are available (the default)ghc$Selector functions are not availableghcFlag to indicate whether the DuplicateRecordFields extension is enabled.ghc+Fields may be duplicated in a single moduleghc3Fields must be unique within a module (the default)ghc:Fields in an algebraic record type; see Note [FieldLabel].ghcThe  of the selector function, which uniquely identifies the field label.ghcWas FieldSelectors enabled in the defining module for this datatype? See Note [NoFieldSelectors] in GHC.Rename.EnvghcWas DuplicateRecordFields- on in the defining module for this datatype?ghc2A map from labels to all the auxiliary informationghcUser-visible label of a field.ghc We need the  Binary Name> constraint here even though there is an instance defined in GHC.Types.Name, because the we have a SOURCE import, so the instance is not in scope. And the instance cannot be added to Name.hs-boot because GHC.Utils.Binary itself depends on GHC.Types.Name."(c) The University of Glasgow 2001 BSD-style (see the file LICENSE)Jeffrey Young Luite Stegeman Sylvain Henry Josh Meredith  experimentalNone")*-7<ʔghcA newtype wrapper around  for JS identifiers.͔ghcJS Unary OperatorsΔghc Logical Not: !ϔghc Bitwise Not: ~Дghc Negation: -єghc Unary Plus: +xҔghcnew xӔghctypeof xԔghcdelete xՔghcyield x֔ghcvoid xהghcPrefix Increment: ++xؔghcPostfix Increment: x++ٔghcPrefix Decrement: --xڔghcPostfix Decrement: x--۔ghcJS Binary Operators. We do not deeply embed the comma operator and the assignment operatorsܔghcEquality: ݔghcStrict Equality: ===ޔghcInEquality: !=ߔghcStrict InEquality !==ghcGreater Than: VghcGreater Than or Equal: ghcLess Than:  <ghcLess Than or Equal: <=ghcAddition: +ghcSubtraction: -ghcMultiplication *ghcDivision: /ghcRemainder: %ghcLeft Shift: <<ghcRight Shift: >>ghcUnsigned RightShift: >>>ghcBitwise And: &ghcBitwise Or: |ghcBitwise XOr: ^ghcLogical And: &&ghcLogical Or: ||ghc  instanceofghc inghcJavaScript valuesghcA variable referenceghc/A JavaScript list, or what JS calls an ArrayghcA DoubleghcA BigIntghcA StringghcA RegexghcA JS HashMap:  {"foo": 0}ghc A functionghcAn  Saturated value, see ghcJavaScript Expressionsghc$All values are trivially expressionsghcSelection: Obj.foo, see ghcIndexing: Obj[foo], see ghcInfix Expressions, see  pattern synonymsghcUnary Expressionsghc If-expressionghc ApplicationghcAn  Saturated expression. See ghcA Label used for , specifically ,  and of course ghcJavaScript statements, see the  https://tc39.es/ecma262/#sec-ecmascript-language-statements-and-declarationsECMA262 Reference for detailsghc$Variable declarations: var foo [= e]ghcReturnghcIfghcWhile, bool is "do" when TrueghcForghc For-in, bool is "each' when TrueghcSwitchghcTryghcBlocksghc ApplicationghcUnary operatorsghcBinding form:  foo = barghc Unsaturated blocks see ghc/Statement Labels, makes me nostalgic for qbasicghcBreakghcContinueghcan explicit function definitionghc'A supply of identifiers, possibly emptyghc'pattern synonym to create string valuesghc(pattern synonym to create integer valuesghc pattern synonym for logical And &&ghcpattern synonym for logical Or ||ghc pattern synonym for Bitwise Not ~ghc pattern synonym for Bitwise XOr ^ghc pattern synonym for Bitwise And &ghcpattern synonym for Bitwise Or |ghcpattern synonym for remainder %ghcpattern synonym for division *ghc#pattern synonym for multiplication *ghc pattern synonym for subtraction -ghcpattern synonym for addition +ghc#pattern synonym for unary negation -ghc pattern synonym for logical not !ghc&pattern synonym for postfix decrement --xghc%pattern synonym for prefix decrement --xghc&pattern synonym for postfix increment x++ghc%pattern synonym for prefix increment ++xghc(pattern synonym for a unary operator newghc-Given a Pseudo-saturate a value with garbage  unsatId identifiers.ghc)Append a statement to another statement.  only returns a  that is not a  when either mx or @my is an empty . That is: > (BlockStat [] , y ) = y > (x , BlockStat []) = xʔ˔̔۔ܔޔݔߔ͔ϔԔДҔΔєڔؔٔהӔ֔Ք”Ô۔ܔݔޔߔ͔ՔҔהؔٔڔΔДϔєӔԔ֔ʔ˔̔”Ô"(c) The University of Glasgow 2001 BSD-style (see the file LICENSE)Jeffrey Young Luite Stegeman Sylvain Henry Josh Meredith  experimentalNone")*-7<ghcJS Unary OperatorsghcVanilla Assignment: =ghcAddition Assignment: +=ghcSubtraction Assignment: -=ghcJS Unary Operatorsghc Logical Not: !ghc Bitwise Not: ~ghc Negation: -ghc Unary Plus: +xghcnew xghctypeof xghcdelete xghcyield xghcvoid xghcPrefix Increment: ++xghcPostfix Increment: x++ghcPrefix Decrement: --xghcPostfix Decrement: x--ghcJS Binary Operators. We do not deeply embed the comma operator and the assignment operatorsghcEquality: ghcStrict Equality: ===ghcInEquality: !=ghcStrict InEquality !==ghcGreater Than: VghcGreater Than or Equal: ghcLess Than: <ghcLess Than or Equal: <=ghcAddition: +ghcSubtraction: -ghcMultiplication *ghcDivision: /ghcRemainder: %ghcLeft Shift: <<ghcRight Shift: >>ghcUnsigned RightShift: >>>ghcBitwise And: &ghcBitwise Or: |ghcBitwise XOr: ^ghcLogical And: &&ghcLogical Or: ||ghc  instanceofghc inghcJavaScript valuesghcA variable referenceghc,A JavaScript list, or what JS calls an ArrayghcA DoubleghcA BigIntghcA StringghcA RegexghcA JS HashMap:  {"foo": 0}ghc A functionghcJavaScript Expressionsghc$All values are trivially expressionsghcSelection: Obj.foo, see ghcIndexing: Obj[foo], see ghcInfix Expressions, see  pattern synonymsghcUnary Expressionsghc If-expressionghc ApplicationghcA Label used for , specifically ʘ, ˘ and of course ɘghcJavaScript statements, see the  https://tc39.es/ecma262/#sec-ecmascript-language-statements-and-declarationsECMA262 Reference for detailsghc$Variable declarations: var foo [= e]ghcReturnghcIfghcWhile, bool is "do" when TrueghcFor˜ghc For-in, bool is "each' when TrueØghcSwitchĘghcTryŘghcBlocksƘghc ApplicationǘghcUnary operatorsȘghcBinding form:  foo  op barɘghc/Statement Labels, makes me nostalgic for qbasicʘghcBreak˘ghcContinue̘ghcan explicit function definition͘ghc'pattern synonym to create string valuesΘghc(pattern synonym to create integer valuesϘghc pattern synonym for logical And &&Иghcpattern synonym for logical Or ||јghc pattern synonym for Bitwise Not ~Ҙghc pattern synonym for Bitwise XOr ^Әghc pattern synonym for Bitwise And &Ԙghcpattern synonym for Bitwise Or |՘ghcpattern synonym for remainder %֘ghcpattern synonym for division *טghc#pattern synonym for multiplication *ؘghc pattern synonym for subtraction -٘ghcpattern synonym for addition +ژghc#pattern synonym for unary negation -ۘghc pattern synonym for logical not !ܘghc&pattern synonym for postfix decrement --xݘghc%pattern synonym for prefix decrement --xޘghc&pattern synonym for postfix increment x++ߘghc%pattern synonym for prefix increment ++xghc(pattern synonym for a unary operator newghc)Append a statement to another statement.  only returns a  that is not a Ř when either mx or @my is an empty Ř. That is: > (BlockStat [] , y ) = y > (x , BlockStat []) = x٘ӘјԘҘ֘ϘИ՘טژۘܘޘݘߘؘ͘ΘƘȘŘʘ˘˜̘ɘØĘǘʔ˔̔”Ô˜ØĘŘƘǘȘɘʘ˘̘ʔ˔̔ۘژؘ٘ט֘՘ԘӘҘјИϘΘ͘ߘޘݘܘ”ÔNone")*-ghc0Union type to allow regular traversal by compos.ghcCompos and ops for generic traversal as defined over the JMacro ADT.9Utility class to coerce the ADT into a regular structure.ghcGiven an optional prefix, fills in all free variable names with a supply of names generated by the prefix."(c) The University of Glasgow 2001 BSD-style (see the file LICENSE)Jeffrey Young Luite Stegeman Sylvain Henry Josh Meredith  experimentalNone")*-% ԙghcJsRender controls the differences in whitespace between HLine and SDoc. Generally, this involves the indentation and newlines in the human-readable SDoc implementation being replaced in the HLine version by the minimal whitespace required for valid JavaScript syntax.ՙghc)Concatenate with an optional single space֙ghc$Concatenate with an optional newlineיghcConcatenate these doc3s, either vertically (SDoc) or horizontally (HLine)ؙghcOptionally indent the followingٙghc0Append semi-colon (and line-break in HLine mode)ghcRender a syntax tree as a pretty-printable document (simply showing the resultant doc produces a nice, well formatted String).ghcRender a syntax tree as a pretty-printable document, using a given prefix to all generated names. Use this with distinct prefixes to ensure distinct generated names between independent calls to render(Prefix)Js.ghcRemove one Block layering if we know we already have braces around the statementghc?The structure `{body}`, optionally indented over multiple linesghcThe structure `hdr {body}`, optionally indented over multiple linesԙ֙ՙٙיؙڙۙܙݙޙߙڙۙܙݙߙޙԙיٙՙؙ֙"(c) The University of Glasgow 2001 BSD-style (see the file LICENSE)Jeffrey Young Luite Stegeman Sylvain Henry  experimentalNone "'mghc-Render JS with code size minimization enabledghcRender as an hexadecimal number in reversed order (because it's faster and we don't care about the actual value)."(c) The University of Glasgow 2001 BSD-style (see the file LICENSE)Jeffrey Young Luite Stegeman Sylvain Henry Josh Meredith  experimentalNone- ghcA BlockOpt is a function that alters the stream, and a continuation that represents the rest of the stream. The first  BlockTrans represents restarting the optimizer after a change has happened. The second  BlockTrans1 represents the rest of the continuation stream.ghcA block transformation is a function from a stream of syntax to another streamghc recur over a JExpr and optimize the JValsghc?drive optimizations to anonymous functions and over expressionsghc loop until a fixpoint is reachedghc5Perform all the optimizations on the tail of a block.ghcCatch modify and assign operators: case 1: i = i + 1; ==> ++i; case 2: i = i - 1; ==> --i; case 3: i = i + n; ==> i += n; case 4: i = i - n; ==> i -= n;ghc&Catch 'var i; i = q;' ==> 'var i = q;'ghcEliminate all code after a return statement. This is a special case optimization that doesn't need to loop. See Note [Unsafe JavaScript optimizations]ghcremove nested blocksghcTo merge two BlockOpt we first run the left-hand side optimization and capture the right-hand side in the continuation"(c) The University of Glasgow 2001 BSD-style (see the file LICENSE)Jeffrey Young Luite Stegeman Sylvain Henry Josh Meredith  experimentalNone ")*AghcThe  class is heavily used in the Introduction function. It ensures that all identifiers in the EDSL are tracked and named with an .ѕghcThe ѕ class handles injection of of things into the EDSL as a JS statement. This ends up being polymorphic sugar for JS blocks, see helper function 1. Instantiate for any necessary data structures.ӕghcThings that can be marshalled into javascript values. Instantiate for any necessary data structures.֕ghc1Create a new anonymous function. The result is a  expression. Usage: jLam $ \x -> jVar x + one_ jLam $ \f -> (jLam $ \x -> (f `app` (x `app` x))) `app` (jLam $ \x -> (f `app` (x `app` x)))וghc'Create a new function. The result is a  . Usage: jFun fun_name $ \x -> ...ؕghcIntroduce a new variable into scope for the duration of the enclosed expression. The result is a block statement. Usage: 5jVar $ x y -> mconcat [x ||= one_, y ||= two_, x + y]ڕghc$Create a 'for in' statement. Usage: .jForIn {expression} $ x -> {block involving x}ەghc8As with "jForIn" but creating a "for each in" statement.ܕghc Create a for statement given a function for initialization, a predicate to step to, a step and a body Usage:  jFor (|= zero_) (.<. Int 65536) preIncrS (j -> ...something with the counter j...)ޕghc8As with "jForIn" but creating a "for each in" statement.ߕghc!construct a JS variable referenceghc*Convert a ShortText to a Javascript Stringghc4construct a js declaration with the given identifierghcThe empty JS HashMapghcA singleton JS HashMapghc)insert a key-value pair into a JS HashMapghc5Construct a JS HashMap from a list of key-value pairsghcThe empty JS statementghcJS infix Equality operatorsghcJS infix Equality operatorsghcJS infix Equality operatorsghcJS infix Equality operatorsghcJS infix Ord operatorsghcJS infix Ord operatorsghcJS infix Ord operatorsghcJS infix Ord operatorsghcJS infix bit operatorsghcJS infix bit operatorsghcJS infix bit operatorsghcJS infix bit shift operatorsghcJS infix bit shift operatorsghcJS infix bit shift operatorsghcGiven a , return the its type.ghcJS if-expression if_ e1 e2 e3 ==> e1 ? e2 : e3ghc4If-expression which returns statements, see related  'if e s1 s2 ==> if(e) { s1 } else { s2 }ghc(A when-statement as syntactic sugar via  2jwhenS cond block ==> if(cond) { block } else { }ghc"If-expression which returns blocks -ifBlockS e s1 s2 ==> if(e) { s1 } else { s2 }ghc*if-expression that returns 1 if condition  = true, 0 otherwise if10 e ==> e ? 1 : 0ghc*if-expression that returns 0 if condition  = true, 1 otherwise if01 e ==> e ? 0 : 1ghc'an expression application, see related  app f xs ==> f(xs)ghc1A statement application, see the expression form ghc Return a ghc("for" loop with increment at end of bodyghc("for" loop with increment at end of bodyghcPrefix-increment a ghcPostfix-increment a ghcPrefix-decrement a ghcPostfix-decrement a ghc'Byte indexing of o with a 64-bit offsetghc'Byte indexing of o with a 32-bit offsetghc'Byte indexing of o with a 16-bit offsetghc&Byte indexing of o with a 8-bit offsetghc'a bit mask to retrieve the lower 8-bitsghc(a bit mask to retrieve the lower 16-bitsghc Sign-extend/narrow a 8-bit valueghc!Sign-extend/narrow a 16-bit valueghcSelect a property prop, from and object obj obj .^ prop ==> obj.propghc"Assign a variable to an expression foo |= expr ==> var foo = expr;ghcDeclare a variable and then Assign the variable to an expression $foo |= expr ==> var foo; foo = expr;ghc#return the expression at idx of obj obj .! idx ==> obj[idx]ghcThe JS literal ghcThe JS literal 0ghcThe JS literal 1ghcThe JS literal 2ghcThe JS literal 3ghcThe JS literal dghcThe JS literal trueghcThe JS literal falseghcConvert A JS expression to a JS statement where applicable. This only affects applications; , If-expressions; , and Unary expression; .ܕەڕݕוٕ֕ޕؕߕӕԕՕѕҕӕԕՕѕҕߕ֕וٕؕܕݕڕەޕ   None"EіghcReturn registersExtra results from foreign calls can be stored here (while first result is directly returned)ܖghcStack registersߖghcGeneral purpose "registers"1The JS backend arbitrarily supports 128 registersghc#List of registers, starting from R1ghc#List of registers, starting from R2ghc,List of registers, starting from R1 as JExprghc,List of registers, starting from R2 as JExprܖޖݖߖ×ėŗƗǗȗɗʗ˗̗͗ΗϗЗїҗӗԗ՗֗חؗٗڗۗܗݗޗߗ—іҖۖӖԖՖ֖זٖؖږߖ—×ėŗƗǗȗɗʗ˗̗͗ΗϗЗїҗӗԗ՗֗חؗٗڗۗܗݗޗߗܖݖޖіҖӖԖՖ֖זٖؖږۖNoneKghc9Pretty 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 etcNone[ghcLookup 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 advantageous to assign the same color to nodes in a coalescence.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 (9a# 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#Dependencies/successors of the nodeghcUser defined node idghc User dataghcFind a reasonably short cycle a->b->c->a, in a graph The graph might not necessarily be strongly connected.ghc1Given a list of roots return all reachable nodes.ghcEfficiently construct a map which maps each key to it's set of transitive dependencies. Only works on acyclic input.ghcEfficiently construct a map which maps each key to it's set of transitive dependencies. Less efficient than  allReachable$, but works on cyclic input as well.ghcGiven a start vertex, a way to get successors from a node and a list of (directed) edges classify the types of edges.%%Nonek+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.+Nonem{ghc#Assignment of vregs to stack slots.ghc3The slots that are still available to be allocated.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 allocatedNone79? ghcSpecify whether to default kind variables, and type variables of kind  RuntimeRep  Multiplicity. ghcDefault kind variables:default kind variables of kind Type to Type,default  RuntimeRep  Multiplicity kind variables to  LiftedRep Many, respectively.When this strategy is used, it means that we have determined that the variables we are considering defaulting are all kind variables.;Usually, we pass this option when -XNoPolyKinds is enabled. ghc=Default (or don't default) non-standard variables, of kinds  RuntimeRep,   and  Multiplicity. ghc2Specify whether to default type variables of kind  RuntimeRep  Multiplicity. ghc*Default type variables of the given kinds:default  RuntimeRep variables to  LiftedRepdefault   variables to  default  Multiplicity variables to Many ghc/Try not to default type variables of the kinds  RuntimeRep  Multiplicity.Note that these might get defaulted anyway, if they are kind variables and `-XNoPolyKinds` is enabled. ghcWhether something is a type or a data declaration, e.g. a type family or a data family. ghcPaints a picture of what a  represents, in broad strokes. This is used towards more informative error messages. ghc e.g., the (->) .!ghcFlag to see whether we're type-checking terms or kind-checking types!ghcAn integer or infinity!ghcInline Specification!ghcRule Match Information!ghc Phase Number!ghcDefault Method Specification!ghc Inside Lambda!ghcOccurs inside a non-linear lambda Substituting a redex for this occurrence is dangerous because it might duplicate work.!ghcInteresting Context!ghcFunction: is applied Data value: scrutinised by a case with at least one non-DEFAULT branch!ghc!identifier Occurrence Information!ghc2There are many occurrences, or unknown occurrences!ghcMarks unused variables. Sometimes useful for lambda and case-bound variables.!ghc3Occurs exactly once (per branch), not inside a rule!ghcThis identifier breaks a loop of mutually recursive functions. The field marks whether it is only a loop breaker due to a reference in a rule!ghcEmbedding Projection pair!ghc7Are we dealing with an unboxed tuple or an unboxed sum?!Used when validity checking, see check_ubx_tuple_or_sum.!ghc2A 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 #-} 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 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.InstEnv!ghcBehave like Incoherent, but the instance choice is observable by the program behaviour. See Note [Coherence and specialisation: overview].We don't have surface syntax for the distinction between Incoherent and NonCanonical instances; instead, the flag `-f{no-}specialise-incoherents` (on by default) controls whether  INCOHERENT7 instances are regarded as Incoherent or NonCanonical.!ghcThe semantics allowed for overlapping instances for a particular instance. See Note [Safe Haskell isSafeOverlap] in GHC.Core.InstEnv for a explanation of the ! field. :  '{-# OVERLAPPABLE'" or '{-# OVERLAPPING'" or '{-# OVERLAPS'" or '{-# INCOHERENT',  `#-}`,!ghc6Whether to run pattern-match checks in generated code.5See Note [Generated code and pattern-match checking].!ghcWas this piece of code user-written or generated by the compiler?5See Note [Generated code and pattern-match checking].!ghcRecursivity Flag!ghc4Should an argument be passed evaluated *and* tagged.!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 information!ghc#The lambda is applied at most once.!ghcA power-of-two alignment!ghc A *zero-indexed* constructor tag!ghcFullArgCount is the number of type or value arguments in an application, or the number of type or value binders in a lambda. Note: it includes both type and value arguments!!ghcThe 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 2!ghcThe 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.Arity!ghcTags are allocated from here for real constructors or for superclass selectors!ghc$It is always safe to assume that an Id) has no lambda-bound variable information"ghc Does this ! require us to run pattern-match checking, or should we skip these checks?5See Note [Generated code and pattern-match checking]."ghc=Pretty print an alternative in an unboxed sum e.g. "| a | |"."ghc0Outputs string for pragma name for any of INLINE INLINABLENOINLINE. This differs from the Outputable instance for the InlineSpec type where the pragma name string as well as the accompanying SourceText (if any) is printed."ghc3Pretty-print without displaying the user-specified !."ghc*Pretty-print including the user-specified !."ghcA representation of infinityghcAdd two !sghc Multiply two !s"ghc Subtract an  from an !"ghcTurn a positive number into an !, where 0 represents infinity"ghcInject any integer into an !"ghcGet the enclosing class TyCon (if there is one) for the given TyConFlavour#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 lambda"ghc#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.""""!"""""""""""!""""""""""""""""""""""""""""""""""""""!"""""""""""""""!""""!"""!"""""""""""""""""""""""""""" !!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!! !!!! !!!!!!!!!! !!!!!!"""!!!"!!!"!"!!!""!!!!!!!!!!!""""" !!!"!!""""""""!!!!"""!!!"""!!!!"!""!!!!!!!!!!"""""""""""!!!!"!!!!!!"""!!!!!!!!!!"""!!!!!"""!!!!!!""""""""!!!""!!!!!!"!!!!!!!""""""""""""""""""""""!!!!!""""!!!"""!"""""!!!"" !"" " "None%ghcTest if the given Integer is representable with a platform Int&ghc?Test if the given Integer is representable with a platform Word&ghcFor some architectures the C calling convention is that any integer shorter than 64 bits is replaced by its 64 bits representation using sign or zero extension.&ghc&Does this platform have an RTS linker?&ghcTry to locate "DerivedConstants.h" file in the given dirs and to parse the PlatformConstants from it.See Note [Platform constants]&&&&&&&&&&&&&&&&&&&&&&&&&&^_`%%%&&&&&&&&&&&&&&%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&^_`&&&&&&&&&&&&&&&%%%%%%&&&&&&%%%&&&&&&&&&None!ghcGenerate a section type (e.g.  @progbits). See #13937.ghcTarget platformghc section typeghcpretty assembler fragmentNonez ?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.?ghc iserv options?ghcLLVM: c compiler?ghcLLVM: llc static compiler?ghcLLVM: llvm optimiser?ghc?cached Fingerprint of sOpt_P See Note [Repeated -optP hashing]?ghcLLVM: c compiler?ghcLLVM: llc static compiler?ghcLLVM: opt llvm optimiser?ghcN.B. On Windows we don't have a linker which supports object merging, hence the @ . See Note [Object merging] in GHC.Driver.Pipeline.Execute for details.?ghcDynamic library suffix??@??@??????@@@@@@@@@@@@@@@?????????@@?@@?@?@???@???&&&&&&&&&&&&&&%%%%%%??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????&&&&&&&&&&&&&&%%%%%%????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@None3ghc TopDir pathghc&Settings filepath (for error messages)ghcRaw settings file contentsNoneu<ghcA way4Don't change the constructor order as it is 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 variants<ghc'(RTS only) Multithreaded runtime system<ghc1Debugging, enable trace messages and extra checks<ghc:Profiling, enable cost-centre stacks and profiling reports<ghcDynamic linking<ghcTest if a way is enabled<ghcTest if a way is not enabled<ghc Add a way<ghc Remove a way<ghc)Check if a combination of ways is allowed<ghc'Unique tag associated to a list of ways<ghc-Unique build-tag associated to a list of waysRTS only ways are filtered out because they have no impact on the build.<ghc$Unique build-tag associated to a way<ghcReturn true for ways that only impact the RTS, not the generated code<ghc.Filter ways that have an impact on compilation<ghcFilter RTS-only ways (ways that don't have an impact on compilation)<ghc*Turn these flags on when enabling this way<ghc+Turn these flags off when enabling this way<ghc;Pass these options to the C compiler when enabling this way<ghc3Pass these options to linker when enabling this way<ghc=Pass these options to the preprocessor when enabling this way<ghcConsult 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.<ghc/Consult the RTS to find whether it is threaded.<ghc/Consult the RTS to find whether it is debugged.<ghc.Consult the RTS to find whether it is tracing.<ghc Host ways.<ghcHost "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.<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 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)@ghc#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.Unit@ghc9Convert a DbUnitInfo (read from a package database) into @@ghcMap over the unit parameter@ghcMake a   from a @ If the unit is definite, make a  from  field."If the unit is indefinite, make a  from  and 8 fields. Note that in this case we don't keep track of . It can be retrieved later with "improvement", i.e. matching on `unitInstanceOf/unitInstantiations` fields (see Note [About units] in GHC.Unit).@ghc$Create a UnitPprInfo from a UnitInfo@ghc3Find all the include directories in the given units@ghc2Find all the C-compiler options in the given units@ghcFind all the library directories in the given units for the given ways@ghc*Find all the frameworks in the given units@ghcFind all the package framework paths in these and the preload packagesghc Either the  or  as appropriate for the way.:@@@@@@@@@@@@@z@@@@@@@@:@@@@@@@@@@@@z@@@@@@@@@Noner<ghcA platform profile fully describes the kind of objects that are generated for a platform.& doesn't fully describe the ABI of an object. Compiler ways (profiling, debug, dynamic) also modify the ABI.<ghcWays<ghcPlatform<ghcGet platform constants<ghcIs profiling enabled<ghcWord size in bytes<ghc Unique build tag for the profile<<<<<<<<<<<<<<<<NoneghcLambda lift even when this turns a known call into an unknown call.ghcMaximum number of arguments after lambda lifting non-recursive function.ghcMaximum number of arguments after lambda lifting a recursive function.None[ghc8An ArgDescr describes the argument pattern of a function[ghcWe represent liveness bitmaps as a Bitmap (whose internal representation really is a bitmap). These are pinned onto case return vectors to indicate the state of the stack for the garbage collector.In the compiled program, liveness bitmaps that fit inside a single word (StgWord) are stored as a single word, while larger bitmaps are stored as a pointer to an array of words.[ghcTrue <=> This is a static closure. Affects how we garbage-collect it. Static closure have an extra static link field at the end. Constructors do not have a static variant; see Note [static constructors][ghcA description of the layout of a closure. Corresponds directly to the closure types in includes/rts/storage/ClosureTypes.h.[ghcWord offset, or word count[ghcByte offset, or byte count[ghcRound up the given byte count to the next byte count that's a multiple of the machine's word size.[ghc Round up base to a multiple of size.[ghc7Convert the given number of words to a number of bytes.This function morally has type WordOff -> ByteOff , but uses Num a to allow for overloading.[ghcFirst round the given byte count up to a multiple of the machine's word size and then convert the result to words.[ghcHalf word size in bytes[ghcSize of a closure header (StgHeader in includes/rts/storage/Closures.h)[ghcSize of the profiling part of a closure header (StgProfHeader in includes/rts/storage/Closures.h)ghcThe garbage collector requires that every closure is at least as big as this.\ghc(The total size of the closure, in words.\ghcThe byte offset into the card table of the card for a given element\ghc>Convert a number of elements to a number of cards, rounding up\ghc"The size of a card table, in bytes\ghc"The size of a card table, in words\ghc%Derives the RTS closure type from an [\\\\[\\[[[\\\\[[[[[[\\\[[[[[[[[[[\\[\\[[\\\[\[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\[\\\\[\\\\\\\[\\\\\\\\\NoneØghc*Compute the output file name of a program.StaticLink boolean is used to indicate if the program is actually a static library (e.g., on iOS).Use the provided filename (if any), otherwise use "main.exe" (Windows), "a.out (otherwise without StaticLink set), "liba.a". In every case, add the extension if it is missing.None$@ghcUntyped Phase description@ghc -E@ghc -C@ghc -S@ghc -c@ghcWhen we are given files (modified by -x arguments) we need to determine if they are Haskellish or not to figure out how we should try to compile it. The rules are: If no -x flag was specified, we check to see if the file looks like a module name, has no extension, or has a Haskell source extension.If an -x flag was specified, we just make sure the specified suffix is a Haskell one.@ghcForeign language of the phase if the phase deals with a foreign code1@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Noneʽghc&A bitmap represented by a sequence of [ s on the target architecture. These are used for bitmaps in info tables and other generated code which need to be emitted as sequences of StgWords.ghc%Make a bitmap from a sequence of bitsghc0Make a bitmap where the slots specified are the zeros in the bitmap. eg. [0,1,3], size 4 ==> 0x4 (we leave any bits outside the size as zero, just to make the bitmap easier to read). The list of Ints must& be already sorted and duplicate-free.ghcMagic number, must agree with BITMAP_BITS_SHIFT in InfoTables.h. Some kinds of bitmap pack a size/bitmap into a single word if possible, or fall back to an external pointer when the bitmap is too large. This value represents the largest size of bitmap that can be packed into a single word.ghc size in bitsghc*sorted indices of zeros free of duplicatesNone;ghc Rule options;ghcEnable rules for bignums;ghcCut down precision of Rational values to that of Float/Double if disabled;ghc-Enable more advanced numeric constant folding;ghcTarget platform;;;;;;;;;;;;None> ghc!Read in assembly file and processghc4These are the rewrites that the mangler will performghcRewrite a line of assembly source with the given rewrites, taking the first rewrite that applies.ghcThis rewrites .type$ annotations of function symbols to %object+. This is done as the linker can relocate  %functions through the Procedure Linking Table (PLT). This is bad since we expect that the info table will appear directly before the symbol's location. In the case that the PLT is used, this will be not an info table but instead some random PLT garbage.ghcThis rewrites aligned AVX instructions to their unaligned counterparts on x86-64. This is necessary because the stack is not adequately aligned for aligned AVX spills, so LLVM would emit code that adjusts the stack pointer and disable tail call optimization. Both would be catastrophic here so GHC tells LLVM that the stack is 32-byte aligned (even though it isn't) and then rewrites the instructions in the mangler.ghcThis rewrites (tail) calls to avoid creating PLT entries for functions on riscv64. The replacement will load the address from the GOT, which is resolved to point to the real address of the function.ghcThis rewrites bl and b jump inst to avoid creating PLT entries for functions on loongarch64, because there is no separate call instruction for function calls in loongarch64. Also, this replacement will load the function address from the GOT, which is resolved to point to the real address of the function.ghcreplaceOnce match replace bs1 replaces the first occurrence of the substring match in bs with replace.ghcThis function splits a line of assembly code into the label and the rest of the code.Noneծ ghc=Supported LLVM configurations. see Note [LLVM configuration]ghctarget triple passed to LLVMghc&True ==> warn unsupported Llvm versionghcversion of Llvm we're usingghc(x86) BMI instructionsšghcSplit sectionsÚghc+Fill undefined literals with garbage valuesĚghc Context for LLVM code generationŚghcTarget platformȚghcThe (inclusive) lower bound on the LLVM Version that is currently supported.ɚghcThe (not-inclusive) upper bound bound on the LLVM Version that is currently supported.ƚ̚˚ʚǚȚɚĚÚŚšŚĚÚšƚȚɚǚʚ˚̚NoneϚghc3Cache LLVM configuration read from files in top_dir5See Note [LLVM configuration] in GHC.CmmToLlvm.ConfigCurrently implemented with unsafe lazy IO. But it could be implemented with an IORef as the exposed interface is in IO.КњϚϚКњNonem ;ghcis -falignment-sanitisation enabled?<ghc.The width of the current platform's word size.<ghc3The width of the current platform's half-word size.<ghc7A bit-mask for the lower half-word of current platform.<ghcA width in bits.<ghcA width in bytes. %widthFromBytes (widthInBytes w) === w<ghc*Partial* A width from the number of bytes.<ghc:log_2 of the width in bytes, useful for generating shifts.<ghcNarrow a signed or unsigned value to the given width. The result will reside in  [0, +2^width). narrowU W8 256 == 256narrowU W8 255 == 255narrowU W8 128 == 128narrowU W8 127 == 127narrowU W8 0 == 0narrowU W8 (-127) == 129narrowU W8 (-128) == 128narrowU W8 (-129) == 127narrowU W8 (-255) == 1narrowU W8 (-256) == 0<ghcNarrow a signed value to the given width. The result will reside in [-2^(width-1), +2^(width-1)). narrowS W8 256 == 0narrowS W8 255 == -1narrowS W8 128 == -128narrowS W8 127 == 127narrowS W8 0 == 0narrowS W8 (-127) == -127narrowS W8 (-128) == -128narrowS W8 (-129) == 127narrowS W8 (-255) == 1narrowS W8 (-256) == 0<<<<<<;<<<<;;;;<<<<<<<<<<<<<<<<<<<<<;;<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;<<<<<<<<<<<<;;;;;;<<<<<<<<;;;;;;;;<<<<<<<<<<<<<<;;;;;<<<<<<<<<<<<<<<;Noneghc#Native code generator configurationghc+Whether to enable the dead-code eliminationghcCompute block unwinding tablesghcEnable shortcutting (don't jump to blocks only containing a jump)ghc%Enable static control-flow predictionghc$Enable GHC-specific source note DIEsghc0Expose symbol table entries for internal symbolsghc0Strip out block information from generated DwarfghcEnable unwindingsghcEnable Dwarf generationghc+Layout based on last instruction per block.ghc$Use CFG based block layout algorithmghcCFG edge weightsghc(x86) BMI instructionsghc(x86) SSE instructionsghcPerform CMM constant foldingghcPerform ASM linting passghcSplit sectionsghc Ditto for memsetghc If inlining memcpy produces less than this threshold (in pseudo-instruction unit), do itghc Enable Position-Independent Codeghc/Generate code to link against dynamic librariesghcMandatory proc alignmentghc1The name of the module we are currently compilingghcContext for ASM code generationghcTarget platformghcReturn Word sizeghc=Size in bytes of the pre-allocated spill space on the C stackghcReturn Word size##None <ghc0An abstract global register for the STG machine. See also =, which denotes a usage of a register at a particular type (e.g. using a 32-bit wide register to store an 8-bit wide value), as per Note [GlobalReg vs GlobalRegUse].=ghc'Parameters: 1. Identifier 2. Type=ghc0A use of a global register at a particular type.While a <5 identifies a global register in the STG machine, a = also contains information about the type we are storing in the register.:See Note [GlobalReg vs GlobalRegUse] for more information.=ghcThe ; at which we are using the <.-Its width must be less than the width of the <: 2typeWidth ty <= typeWidth (globalRegSpillType reg)=ghcThe underlying <2=====================<<<<<<<<<<<<<<<=<<=<<<<======2========<<<<<<<<<<<<<<<<<<<<<=====================None=ghc$The operation to perform atomically.=ghcC11 memory ordering semantics.=ghcrelaxed ordering=ghcacquire ordering=ghcrelease ordering=ghcsequentially consistent>ghc(Atomic read-modify-write. Arguments are  [dest, n].>ghcAtomic read. Arguments are [addr].>ghcAtomic write. Arguments are  [addr, value].>ghc'Atomic compare-and-swap. Arguments are [dest, expected, new]. Sequentially consistent. Possible future refactoring: should this be an> variant?>ghcAtomic swap. Arguments are  [dest, new]>ghc8Where are the signs in a fused multiply-add instruction?x*y + z vs x*y - z vs -x*y+z vs -x*y-z.Warning: the signs aren't consistent across architectures (X86, PowerPC, AArch64). The user-facing implementation uses the X86 convention, while the relevant backends use their corresponding conventions.>ghcFused multiply-add x*y + z.>ghc!Fused multiply-subtract. On X86: x*y - z.>ghcFused multiply-add. On X86: -x*y + z.>ghc!Fused multiply-subtract. On X86: -x*y - z.>ghcMachine-level primops; ones which we can reasonably delegate to the native code generators to handle.)Most operations are parameterised by the ; that they operate on. Some operations have separate signed and unsigned versions, and float and integer versions.Note that there are variety of places in the native code generator where we assume that the code produced for a MachOp does not introduce new blocks.>ghcFused multiply-add, see >.?ghcReturns L if the MachOp has commutable arguments. This is used in the platform-independent Cmm optimisations.If in doubt, return I. This generates worse code on the native routes, but is otherwise harmless.?ghcReturns L$ if the MachOp is associative (i.e. (x+y)+z == x+(y+z)=) This is used in the platform-independent Cmm optimisations.If in doubt, return I. This generates worse code on the native routes, but is otherwise harmless.?ghcReturns L if the MachOp is a comparison.If in doubt, return False. This generates worse code on the native routes, but is otherwise harmless.?ghcReturns Just w6 if the operation is an integer comparison with width w, or Nothing otherwise.?ghc.Returns the MachRep of the result of a MachOp.?ghcThis function is used for debugging only: we can check whether an application of a MachOp is "type-correct" by checking that the MachReps of its arguments are the same as the MachOp expects. This is used when linting a CmmExpr.?ghc!Return (results_hints,args_hints)?ghcThe alignment of a memcpy-ish operation.????????????????????????>?>>>>>>>>>>>>>>>>>>>>>>>>>?>>========>>>>>>>>>>>===============================================>>>>>>>>>>>>>>>>=>>>=========>>===========>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>=====>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>????????>>>>>>>>>>>>>>>>>>>>>>>>>>???????????????=====================================================================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>???============>>>>>>None ښݚޚ֚՚ךܚؚӚԚҚٚۚ ݚޚښܚۚҚӚԚ՚֚ךؚٚNoneq ghc#Should Cmm split proc points or notghc1Should the Cmm pass replace Stg switch statementsghc/Generate code to link against dynamic librariesghc5Generate stack unwinding instructions (for debugging)ghc.Instrument memory accesses for ThreadSanitizerghc&Perform sink after stack layout or notghcEliminate common blocks or notghc"Do Cmm Linting Optimization or notghc Optimize Cmm Control Flow or notghcTarget Profileghc retrieve the target Cmm platform  None >;ghcForeign export stubs;ghcWe don't have any stubs;ghc!There are some stubs. Parameters:?1) Header file prototypes for "foreign exported" functions2) C stubs to use when calling "foreign exported" functions;ghc Finalizers to be run at shutdown;ghcInitializers to be run at startup See Note [Initializers and finalizers in Cmm] in GHC.Cmm.InitFini.;ghc!initializerCStub fn_nm decls body is a ;: containing C initializer function (e.g. an entry of the  .init_array section) named fn_nm7 with the given body and the given set of declarations.;ghcfinalizerCStub fn_nm decls body is a ;8 containing C finalizer function (e.g. an entry of the  .fini_array section) named fn_nm7 with the given body and the given set of declarations.;;;;;;;;;;;;;;;;;;;;;;;;;;;;sNone #ghcGet the  associated with a known-key .$ghcThis function is an inverse of ##$##$#$$##$##$#$$###############$$#$######$##$###########$$$$$$$######$$+None "9. ghcOther names in the compiler add additional information to an OccName. This class provides a consistent way to access the underlying OccName. ghcOccurrence NameIn this context that means: "classified (i.e. as a type name, value name, etc) but not qualified and not yet resolved"$ghcA map keyed on  . See Note [OccEnv].ghc9Variable name space (including "real" data constructors).ghc,Record field namespace for the given record.ghcSource data constructor namespace.ghcType variable namespace.ghc%Type constructor and class namespace.ghc,The textual name of the parent of the field.For a field of a datatype, this is the name of the first constructor of the datatype (regardless of whether this constructor has this field).For a field of a pattern synonym, this is the name of the pattern synonym.$ghc0Is this a term variable or field name namespace?$ghc.Mangle field names to avoid duplicate symbols.See Note [Mangling OccNames].%ghc The empty $.%ghc A singleton $.%ghcAdd a single element to an $.%ghc Extend an $ by a list. (s later on in the list override earlier  s.%ghcLook an element up in an $.%ghcLookup an element in an $ , ignoring $ s entirely.%ghcLookup an element in an $8, looking in the record field namespace for a variable.%ghc8Look up all the record fields that match with the given  in an $.%ghc Create an $ from a list. (s later on in the list override earlier  s.%ghc Create an $8 from a list, combining different values with the same   using the combining function.%ghc4Compute whether there is a value keyed by the given  .%ghc Fold over an $. Non-deterministic, unless the folding function is commutative (i.e. a1 f ( a2 f b ) == a2 f ( a1 f b ) for all a1, a2, b).%ghcObtain the elements of an $.)The resulting order is non-deterministic.%ghc Union of two $s, right-biased.%ghc Union of two $s with a combining function.%ghc Map over an $ (* instance).%ghcmapMaybe for b $.%ghcAdd a single element to an $*, using a different function whether the   already exists or not.%ghcDelete one element from an $.%ghc!Delete multiple elements from an $.%ghcFilter out all elements in an $ using a predicate.%ghc Alter an $1, adding or removing an element at the given key.%ghcRemove elements of the first $ that appear in the second $.%ghc9Alters (replaces or removes) those elements of the first $# that are mentioned in the second $. Same idea as .%ghc Map over an $ strictly.%ghc Force an $ with the provided function.%ghcValue OccNamess are those that are either in the variable, field name or data constructor namespaces%ghc Test if the  8 is a data constructor that starts with a symbol (e.g. :, or [])%ghc Test if the   is that for any operator (whether it is a data constructor or variable or whatever)%ghcWrap parens around an operator%ghcHaskell 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 prints%ghcIs 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.%ghc new -> result%ghcadd to existingghc new elementghcoldghcnewghcA prefix which distinguishes one sort of derived name from anotherghcThe name we are deriving from in pieces which will be concatenated.%ghcIndex of superclass, e.g. 3ghc Class, e.g. OrdghcDerived Occname, e.g. $p3Ord%ghcUnique to combine with the  ghcLocal name, e.g. satghcNice unique version, e.g. $L23sat%ghcFamily name, e.g. Mapghcavoid these Occsghc R:Map%ghc3Typically the class and type glommed together e.g. OrdMaybe-. Only used in debug mode, for extra clarityghc Is this a hs-boot instance DFun?ghcavoid these OccsghcE.g.  $f3OrdMaybe%%$$%%%%%%%%%%%%%%%$%%%%%$%%%%%$%%$%$$%%$%$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$%$$%%%%%%%%%%$ %%%$%%%%%$$$%$%%%$%%$$%$%%%%$$ $$ $$$$$$$$$$$$$$$$ $$$$$ $$%%%%%%%%%%%%%$% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$%$%%%%%%%%%%%$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$%%%%%%%%%%%$%%%%%3None %&$ghc*A class allowing convenient access to the  of various datatypesghcA unique, unambiguous name for something, containing information about where that thing originated.&ghc!BuiltInSyntax is for things like (:), [] and tuples, which have special syntactic forms. They aren't in scope as such.ghcDefinition siteNOTE: we make the n_loc field strict to eliminate some potential (and real!) space leaks, due to the fact that we don't look at the SrcLoc in a Name all that often.ghc Its unique.ghcIts occurrence name.NOTE: kept lazy to allow known names to be known constructor applications and to inline better. See Note [Fast comparison for built-in Names]ghcWhat sort of name it is&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.Runtime.Context&ghc1Returns True if the name is external or from the  interactive package See documentation of & function&ghcReturns 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 s&ghc=Create a name which definitely originates in the given module&ghc>Create a name which is actually defined by the compiler itself&ghc0Create a name brought into being by the compiler&ghcMake a name for a foreign call&ghc Make the ? into an internal name, regardless of what it was to begin with&ghcCompare Names lexicographically This only works for Names that originate in the source code or have been tidied.&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"''''''''''''''''('(''''''(''''''''''''''''''''''''(''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(''''(((''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''wNoneD(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((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((xNoneK(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.))))))))))))(((())))))))))))yNoneM ghccomplete bipartite graphghccomplete graphghc Resolves all 0, by pushing them in, and simplifies `D D @ = @`ghcShallow empty check.))))))))))))))))))))))))))))))))))))))))))zNone]")ghc'Deterministic Type Variable Environment)ghcDeterministic Identifier Environment Sadly not always indexed by Id, but it is in the common case.)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 ))ghc3A set of variables that are in scope at some point.Note that this is a superset of the variables that are currently in scope. See Note [The InScopeSet invariant]."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] and Note [The InScopeSet invariant].)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. Postcondition: the type of the returned Var is that of bR)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`anyInRnEnvR env set` == `any (inRnEnvR rn_env) (toList set)` but lazy in the second argument if the right side of the env is empty.)ghc$Wipe the left or right side renaming)ghc$Wipe the left or right side renaming)ghc"swap the meaning of left and right)ghc+Only keep variables contained in the VarSet*)*))*))))**)))))*)))*)))***))))))))*)*)))*)*)))))))*)*)*))))))*)**)))*)**))))))))))))))))))))))))*)))))))))))))))))))))))))))))))))))))))))))))))))*))))))))))***********************)))))))))))))))))))))))))))))))))))))))))))))))))){Nonee *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 uses*ghc(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 example*ghc&A set of names that are used somewhere*ghc)A set of names that are defined somewhere*ghc,True if there is a non-empty intersection. s1 * s2 doesn't compute s2 if s1 is empty*ghcGet 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 nondeterminism*ghc Just like *, but * are not eliminated from the * returned*ghc Collect all *>, regardless of whether the group is itself used, but remove * on the way*ghc 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).**********************************************.**********************************************|Noneg*ghcDeterministic Name Environment#See Note [Deterministic UniqFM] in GHC.Types.Unique.DFM' for explanation why we need DNameEnv.*ghcName Environment0************************************************0************************************************}None)*/1hg+ghcInformation to be exposed in interface files which is produced by the stg2stg passes. ++++******* +*******+++~None7k+ghcThe constructors which have this field label. Always non-empty.NB: these constructors will always share a single parent, as the field label disambiguates between parents in the presence of duplicate record fields.+ghcThe  of a !. 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 = occ+ghc0Local Reader Environment See Note [LocalRdrEnv]+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 ,ghcLook up relevant GREs, taking into account the interaction between the variable and field $s as determined by the FieldsOrSelector argument.,ghc"Look up as many possibly relevant +s as possible.,ghcMake a qualified +& in the given namespace and where the   and the   are taken from the first and second elements of the tuple respectively,ghcCreate a local + for a .,ghc.The SrcSpan of the name pointed to by the GRE.,ghc>The module in which the name pointed to by the GRE is defined.,ghcTakes a list of distinct GREs and folds them into AvailInfos. This is more efficient than mapping each individual GRE to an AvailInfo and then folding using +', but needs the uniqueness assumption.,ghc Drop all + fields in a + in order to avoid space leaks. See Note [Forcing GREInfo] in GHC.Types.GREInfo.,ghc Hydrate a previously dehydrated +, by (lazily!) looking up the + using the provided function.0See Note [Forcing GREInfo] in GHC.Types.GREInfo.,ghc*After looking up something with the given $, is the resulting +- we have obtained relevant, according to the + specification of which $s are relevant?ghc2Scoring priority function for looking up children +. We score by + and $, with higher priorities having lower numbers. Which lexicographic order we use (+ or $ first) is determined by the first argument; see Note [childGREPriority].,ghc3Look something up in the Global Reader Environment.The + argument specifies what to look up, and in particular whether there should there be any lee-way if the $s don't exactly match.ghc Collect the +s with the highest priority according to the given function (lower value  = higher priority)..This allows us to first look in e.g. the data $(, and then fall back to the type/class $.,ghcLook for precisely this  in the environment, in the same $ as the .This tests whether it is in scope, ignoring anything else that might be in scope which doesn't have the same .,ghc?Look for a particular record field selector in the environment.,ghcIs this + defined locally?,ghcIs this + imported?Not just the negation of ,, because it might be an Exact or Orig name reference. See Note [GlobalRdrElt provenance].,ghcIs this a record field GRE?Important: does not consult the GreInfo field.,ghc:Is this a record field defined with DuplicateRecordFields?,ghcIs this a record field defined with NoFieldSelectors? (See Note [NoFieldSelectors] in GHC.Rename.Env),ghcIs this a record field defined with FieldSelectors? (See Note [NoFieldSelectors] in GHC.Rename.Env),ghc2Returns the field label of this GRE, if it has one,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 respectively9Used only for the 'module M' item in export list; see ghcisBuiltInSyntax filter out names for built-in syntax They just clutter up the environment (esp tuples), and the parser will generate Exact RdrNames for them, so the cluttered envt is no use. Really, it's only useful for GHC.Base and GHC.Tuple.,ghc>Apply a transformation function to the GREs for these OccNames,ghcgreClashesWith new_gre old_gre computes whether new_gre clashes with old_gre. (assuming they both have the same underlying $).ghc Is the given + shadowed, as specified by the ShadowedNameSpaces?ghcInternal function: is a + with the $ with given  shadowed by the specified ?ghcWhat are all the + s that are shadowed by this new +?,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.Indicate if the given name is the "@" operator+ghcthe   to look upghc!information about other relevant $s+ghcthe + to look upghc!information about other relevant $s+ghcthe   to look upghcinformation to decide which +&s are valid children after looking up,ghcspecification of which +s to consider relevantghcthe $ of the thing we are looking upghcthe +0 we have looked up, in a potentially different $ than we wantedghc?what kind of child do we want, e.g. what should its parent be?ghcwhat $ are we originally looking in?ghc6the result of looking up; it might be in a different $, which is used to determine the score (in the first component)ghcpriority function lower value  = higher priority,ghc0discard names that are only available qualified?+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,+,+++++++++,,,,,,,,,,,,,,,,,,,,,,,,+,,,,,,,,,,+++,,,,,,,++++,,+++++++,+,,+++++,,,+++++,,,,,,,,,,,,,,++++++++++,,,,,,,,,,,,,,,,,,,,,,,,,,,,,+++++++++++++++,,,,++++,,,+++++++++++++++,,,,,None-ghc"whether this is a qualified import-ghc(all the things the module could provide.4NB. BangPattern here: otherwise this leaks. (#15111)-ghc"whether this is an "hiding" import-ghcwhether this is a safe import-ghc#the source span of the whole import-ghc$The name the module is imported with-ghcIf a module was "imported" by the user, we associate it with more detailed usage information -; a module imported by the system only gets used for usage information.-ghcRecords the modules directly imported by a module for extracting e.g. usage information, and also to give better error message ------------- -------------None99ghcA collection of annotations9ghcThe kind of annotation target found in the middle end of the compiler9ghcAn annotation target9ghcWe are annotating something with a name: a type or identifier9ghc%We are annotating a particular module9ghcRepresents an annotation after it has been sufficiently desugared from it's initial form of 9ghcThe target of the annotation9ghc An empty annotation environment.9ghcConstruct a new annotation environment that contains the list of annotations provided.9ghc,Add the given annotation to the environment.9ghc"Union two annotation environments.9ghc5Find the annotations attached to the given target as  values of your choice. If no deserializer is specified, only transient annotations will be returned.9ghc5Find 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 9 in an 9.9ghcDeserialize 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).9ghcThe "payload" of an annotation allows recovery of its value at a given type, and can be persisted to an interface file9999999999999999999999999999999999None 79b-ghcCaptures the sort order of sub elements. This is needed when the sub-elements have been split (as in a HsLocalBind which holds separate binds and sigs) or for infix patterns where the order has been re-arranged. It is captured explicitly so that after the Delta phase a SrcSpan is used purely as an index into the annotations, allowing transformations of the AST including the introduction of new Located items or re-arranging existing ones.-ghcexact print annotation used for capturing the locations of annotations in pragmas.-ghcA - can capture the locations of surrounding adornments, such as parens or backquotes. This data type identifies what particular pair are being used.-ghc'(' ')'-ghc '(#' '#)'-ghc'`'-ghc'[' ']'-ghcexact print annotations for a RdrName. There are many kinds of adornment that can be attached to a given RdrName. This type captures them, as detailed on the individual constructors.-ghc&Used for a name with an adornment, so `foo`, (bar)-ghc Used for (,,,), or @(,,,)#-ghc Used for  (# | | #)-ghc Used for (), (##), []-ghc Used for ->, as an identifier-ghc Used for an item with a leading '1. The annotation for unquoted item is stored in -.-ghcUsed when adding a - to an existing -' which has no Api Annotation (via the - constructor.-ghcExact print annotation for the Context data type.-ghc!zero or more closing parentheses.-ghc!zero or more opening parentheses.-ghclocation and encoding of the '=>' , if present.-ghc$Detail of the "brackets" used in an - exact print annotation.-ghc'(', ')'-ghc '(#', '#)'-ghc'[', ']'-ghcexact print annotation for an item having surrounding "brackets", such as tuples or lists-ghcAnnotation for the "container" of a list. This captures surrounding items such as braces if present, and introductory keywords such as 'where'.-ghc)items appearing after the list, such as '=>' for a context-ghccontext, such as 'where' keyword-ghc#start point of a list having layout-ghcAnnotation for items appearing in a list. They can have one or more trailing punctuations items, such as commas or semicolons.-ghcCaptures the location of punctuation occurring between items, normally in a list. It is captured as a trailing annotation.-ghc Trailing ';'-ghc Trailing ','-ghc Trailing '|'-ghcGeneral representation of a 0 type carrying a parameterised annotation type.-ghc,We mostly use 'SrcSpanAnn'' with an 'EpAnn''-ghc&The 'SrcSpanAnn'' type wraps a normal , together with an extra annotation type. This is mapped to a specific  usage in the AST through the XRec and Anno type families.-ghcWhen we are parsing we add comments that belong a particular AST element, and print them together with the element, interleaving them into the output stream. But when editing the AST to move fragments around it is useful to be able to first separate the comments into those occurring before the AST element and those following it. The - constructor is used to do this. The GHC parser will only insert the - form.-ghc'If tools modify the parsed source, the - variant can directly provide the spacing for this item relative to the previous one when printing. This allows AST fragments with a particular anchor to be freely moved, without worrying about recalculating the appropriate anchor span.-ghcAn - records the base location for the start of the syntactic element holding the annotations, and is used as the point of reference for calculating delta positions for contained annotations. It is also normally used as the reference point for the spacing of the element relative to its container. If it is moved, that relationship is tracked in the - instead.-ghcBase location for the start of the syntactic element holding the annotations.-ghcThe exact print annotations (EPAs) are kept in the HsSyn AST for the GhcPs phase. We do not always have EPAs though, only for code that has been parsed as they do not exist for generated code. This type captures that they may be missing.A goal of the annotations is that an AST can be edited, including moving subtrees from one place to another, duplicating them, and so on. This means that each fragment must be self-contained. To this end, each annotated fragment keeps track of the anchor position it was originally captured at, being simply the start span of the topmost element of the ast fragment. This gives us a way to later re-calculate all Located items in this layer of the AST, as well as any annotations captured. The comments associated with the AST fragment are also captured here.The - type parameter allows this general structure to be specialised to the specific set of locations of original exact print annotation elements. So for HsLet we havetype instance XLet GhcPs = EpAnn AnnsLet data AnnsLet = AnnsLet { alLet :: EpaLocation, alIn :: EpaLocation } deriving DataThe spacing between the items under the scope of a given EpAnn is normally derived from the original -. But if a sub-element is not in its original position, the required spacing can be directly captured in the - field of the - Anchor. This allows us to freely move elements around, and stitch together new AST fragments out of old ones, and have them still printed out in a precise way.-ghc?No Annotation for generated code, e.g. from TH, deriving, etc.-ghc6Comments enclosed in the SrcSpan of the element this - is attached to-ghcAnnotations added by the Parser-ghcBase location for the start of the syntactic element holding the annotations.-ghcSpacing between output items when exact printing. It captures the spacing from the current print position on the page to the position required for the thing about to be printed. This is either on the same line in which case is is simply the number of spaces to emit, or it is some number of lines down, with a given column offset. The exact printing algorithm keeps track of the column offset pertaining to the current anchor position, so the -5 is the additional spaces to add in this case. See  8https://gitlab.haskell.org/ghc/ghc/wikis/api-annotations for details.-ghcdeltaLine should always be > 0-ghcTokens embedded in the AST have an EpaLocation, unless they come from generated code (e.g. by TH).-ghcThe anchor for an .. The Parser inserts the - variant, giving the exact location of the original item in the parsed source. This can be replaced by the - version, to provide a position for the item relative to the end of the previous item in the source. This is useful when editing an AST prior to exact printing the changed one. The list of comments in the - variant captures any comments between the prior output and the thing being marked here, since we cannot otherwise sort the relative order..ghc$Captures an annotation, storing the .2 and its location. The parser only ever inserts - fields with a RealSrcSpan being the original location of the annotation in the source file. The - can also store a delta position if the AST has been modified and needs to be pretty printed again. The usual way an . is created is using the mj ("make jump") function, and then it can be inserted into the appropriate annotation..ghc;a docstring that can be pretty printed using pprHsDocString.ghc(doc options (prune, ignore-exports, etc).ghccomment starting by "--".ghccomment in {- -}.ghc)empty comment, capturing location of EOF.ghc?The location of the prior token, used in exact printing. The . appears as an - containing its location. The difference between the end of the prior token and the start of this location is used for the spacing when exact printing the comment..ghc'.ghc'=>', unicode variant.ghc'::'.ghc'::', unicode variant.ghck.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.ghcThe E unicode arrow.ghc .ghc;where a name loses its location in the AST, this carries it.ghc'{-# DEPRECATED' etc. Opening of pragmas where the capitalisation of the string can be changed by the user. The actual text used is stored in a  SourceText on the relevant pragma item..ghc'(|'.ghc'(|', unicode variant.ghc'{'.ghc'[e|' or '[e||'.ghc'[|'.ghc'[|', unicode variant.ghc'('.ghc'['.ghc'(#'.ghcprefix  -- TemplateHaskell.ghcprefix   -- TemplateHaskell.ghc% -- for HsExplicitMult.ghc'%1' -- for HsLinearArrow.ghc->.ghc->, unicode variant.ghc';'.ghc'''.ghcstatic.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.ghc;Convert a normal annotation into its unicode equivalent one.ghcSmart constructor for a -+. It preserves the invariant that for the - constructor - is always > 0..ghc%Used in the parser only, extract the  from an -!. The parser will never insert a -#, so the partial function is safe./ghc Maps the - to the related opening and closing AnnKeywordId. Used when actually printing the item./ghc Convert a - to an ./ghc,Helper function used in the parser to add a -" items to an existing annotation./ghc,Helper function used in the parser to add a -" items to an existing annotation./ghcHelper function used in the parser to add a comma location to an existing annotation./ghcHelper function (temporary) during transition of names Discards any annotations/ghcHelper function (temporary) during transition of names Discards any annotations/ghcHelper function (temporary) during transition of names Discards any annotations/ghcHelper function (temporary) during transition of names Discards any annotations/ghcShort form for -/ghcThe annotations need to all come after the anchor. Make sure this is the case.ghcThe annotations need to all come after the anchor. Make sure this is the case./ghcCombine locations from two % things and add them to a third thing/ghcAdd additional comments to a -, used for manipulating the AST prior to exact printing the changed one./ghc#Replace any existing comments on a -, used for manipulating the AST prior to exact printing the changed one./ghcAdd additional comments, used for manipulating the AST prior to exact printing the changed one./ghcReplace any existing comments, used for manipulating the AST prior to exact printing the changed one./ghcTransfer comments and trailing items from the annotations in the first -! argument to those in the second./ghcRemove the exact print annotations payload, leaving only the anchor and comments./ghcRemove the comments, leaving the exact print annotations payload-ghc!Api Annotations for comments only//////////////./////././//.///////////////////////////////////.////..------------.........................................................................................................----------------------------------------..........---......-------------------------------------------------------............................................................................................................................---./---.-----..-------------///------////------------------------------------/--------------------------------------------/////////////////////////////////////////////////////None 79:;@0000000000000000000000000000000000000000None<9ghcUsed when we want to fingerprint a structure without depending on the fingerprints of external Names that it refers to.999999None )*/167Q9ghc1Constraint type to bundle up the requirement for   on both the id and the   of it. See Note [NoGhcTc].9ghc.Maps the "normal" id type for a given GHC pass9ghcAllows 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].9ghcUsed as a data type index for the hsSyn AST; also serves as a singleton type for PassghcMarks 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]99999999999999999999999999999999999999999999None 67:ghc4Maps of docs that were added via Template Haskell's putDoc.:ghc6The documentation added to class and family instances.:ghc.The documentation added to function arguments.:ghc(The documentation added to declarations.:ghc4The added module header documentation, if it exists.:ghc7The full set of language extensions used in the module.:ghcThe ! used in the module, for example .:ghcHaddock options from OPTIONS_HADDOCK or from  -haddock-opts.:ghcMap from chunk name to content.This map will be empty unless we have an explicit export list from which we can reference the chunks.:ghc>Docs for arguments. E.g. function arguments, method arguments.:ghcDocs for declarations: functions, data types, instances, methods etc. A list because sometimes subsequent haddock comments can be combined into one:ghcModule header.:ghcA simplified version of .:ghcAnnotate a value with the probable identifiers found in it These will be used by haddock to generate links.The identifiers are bundled along with their location in the source file. This is useful for tooling to know exactly where they originate.This type is currently used in two places - for regular documentation comments, with a set to <, and for adding identifier information to warnings, where a is  StringLiteral:ghc8A docstring with the (probable) identifiers found in it.:ghcExtract a mapping from the lexed identifiers to the names they may correspond to.:ghcPretty print a thing with its doc The docstring will include the comment decorators '-- |', '{-|' etc and will come either before or after depending on how it was written i.e it will come after the thing if it is a '-- ^' or '{-^' and before otherwise.:ghcSee  pprWithHsDoc:ghc6Print a doc with its identifiers, useful for debugging:ghcFor compatibility with the existing @-ddump-parsed' output, we only show the docstring.Use pprHsDoc to show : 's internals.:ghcWe might re-export avails from multiple modules with a single export declaration. E.g. when we have 7module M (module X) where import R0 as X import R1 as X;::::::::::::::::::::::::::::::::::"::::::::::::::::::::::::::::::::::None 7" ghcIndicates whether a module name is referring to a boot interface (hs-boot file) or regular module (hs file). We need to treat boot modules specially when building compilation graphs, since they break cycles. Regular source files and signature files are treated equivalently.:ghc(Located name with possible adornment - s :  , :ghcA name in an import or export specification which may have adornments. Used primarily for accurate pretty printing of ParsedSource, and API Annotation placement. The : is the location of the adornment in the original source.:ghcno extra:ghc pattern X:ghc type (:+:):ghc2Wildcard in an import or export sublist, like the .. in import Mod ( T(Mk1, Mk2, ..) ).:ghcno wildcard in this list:ghc6wildcard after the given # of items in this list The Int< is in the range [0..n], where n is the length of the list.:ghcImported or exported entity.:ghcImported or Exported Variable:ghc+Imported or exported Thing with Absent list+The thing is a Class/Type (can't tell) - s : , ,:ghc8Imported or exported Thing with All imported or exportedThe thing is a Class"Type and the All refers to methods constructorss :  , ,#, :ghc:Imported or exported Thing With given imported or exportedThe thing is a Class/Type and the imported or exported things are its children. - s : %, %, %, :ghc$Imported or exported module contents (Export Only)s : :ghcDoc section heading:ghcSome documentation:ghcReference to named doc:ghcLocated Import or Export:ghc>Whether the import list is exactly what to import, or whether hiding was used, and therefore everything but what was listed should be imported:ghcImport DeclarationA single Haskell import declaration.:ghcs,  for ideclSource,, ,, ,, - attached to location in ideclImportList:ghc5Explicit import list (EverythingBut => hiding, names):ghc as Module:ghcIf/how the import is qualified.:ghcTrue => safe import:ghcIsBoot  = {-# SOURCE #-} import:ghcPackage qualifier.:ghc Module name.:ghcIf/how an import is  qualified.:ghc qualified! appears in prepositive position.:ghc qualified" appears in postpositive position.:ghcNot qualified.:ghcLocated Import Declaration:ghcWhen in a list this may have : :ghcWhen in a list this may have : *:::::::::::::::::::::::::::::::::::: :::*::::: ::::::::::::::::::::::::::::::::::None167<:ghc$Names that are deprecated as exports:ghcDeprecated declarations:ghc!Warning information from a module:ghcWhole module deprecated:ghc Warning Text6reason/explanation from a WARNING or DEPRECATED pragma:ghc/A finite or infinite set of warning categories.Unlike  WarningFlag, there are (in principle) infinitely many warning categories, so we cannot necessarily enumerate all of them. However the set is constructed by adding or removing categories one at a time, so we can represent it as either a finite set of categories, or a cofinite set (where we store the complement).ghc6The set of warning categories is the given finite set.ghcThe set of warning categories is infinite, so the constructor stores its (finite) complement.:ghcThe  deprecations category is used for all DEPRECATED pragmas and for WARNING pragmas that do not specify a category.:ghcIs this warning category allowed to appear in user-defined WARNING pragmas? It must either be the known category  deprecations,, or be a custom category that begins with x- and contains only valid characters (letters, numbers, apostrophes and dashes).:ghc$The empty set of warning categories.:ghc6The set consisting of all possible warning categories.:ghcIs this set empty?:ghc-Does this warning category belong to the set?:ghc.Insert an element into a warning category set.:ghc.Delete an element from a warning category set.:ghcTo which warning category does this WARNING or DEPRECATED pragma belong? See Note [Warning categories].:ghc7The message that the WarningTxt was specified to output:ghc=True if the 2 WarningTxts have the same category and messages;ghcConstructs the cache for the mi_decl_warn_fn field of a ModIface;ghcConstructs the cache for the mi_export_warn_fn field of a ModIface:ghcNames deprecated (may be empty)ghc!Exports deprecated (may be empty):ghcWarning category attached to this WARNING pragma, if any; see Note [Warning categories];ghcExisting warningsghcNew declaration deprecationsghcUpdated warnings;ghcExisting warningsghcNew export deprecationsghcUpdated warnings$::::;:::;;:;;:::::::::::::::::::::::$:::::::::::::::::::::::::::::::;;;;;None167 ;ghcGHC generates an : to represent the invisible `import Prelude` that appears in any file that omits `import Prelude`, setting this field to indicate that the import doesn't appear in the original source. True => implicit import (of Prelude);ghcGiven 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  GHC.Parser.;ghcConvenience function to answer the question if an import decl. is qualified.;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::::::::::::::::::::::::::::::: :::;;;;;;;;;;;;;;;;;;;;;;;;;;None! ;;;;;;;;;;; ;;;;;;;;;;;None )*17&@ghc,For now, we work only with nominal equality.@ghccoaxrProves 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.@ghc-A more explicit representation for `t1 ~ t2`.@ghcA branch of a coercion axiom, which provides the evidence for unwrapping a newtype or a type-family reduction step using a single equation.@ghcThe previous incompatible branches See Note [Storing compatibility]@ghcRight-hand side of the equality See Note [CoAxioms are homogeneous]@ghcType patterns to match against@ghcSee Note [CoAxBranch roles]@ghcBound coercion variables Always empty, for now. See Note [Constraints in patterns] in GHC.Tc.TyCl@ghcEta-reduced tyvars cab_tvs and cab_lhs may be eta-reduced; see Note [Eta reduction for data families]@ghcBound type variables; not necessarily fresh See Note [CoAxBranch type variables]@ghc?Location of the defining equation See Note [CoAxiom locations]@ghcA @: is a "coercion constructor", i.e. a named equality axiom.AghcThe  [CoAxBranch] passed into the mapping function is a list of all previous branches, reversedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@@@A@AAAA@@@@@@@A AAAAAAAAAAAA@@AAAAA@@@@@@@@@@@AAAAAAAAAAAAAAAAAAAA A@@@@@@@@@@@@ANone-SAghcInformation about a type family equation, used for validity checking of closed type family equations and associated type family default equations.This type exists to delay validity-checking after typechecking type declaration groups, to avoid cyclic evaluation inside the typechecking knot.See (Note [Type-checking default assoc decls] in  GHC.Tc.TyCl.AghcUsed for equations which don't need any validity checking, for example equations imported from another module.AghcInformation necessary for validity checking of a type family equation.AghcRHS of the equationNB: for associated type family default declarations, this is the RHS *before* applying the substitution from Note [Type-checking default assoc decls] in GHC.Tc.TyCl.Aghc LHS patternsAghc=non-user-written type variables (for error message reporting)(Example: with -XPolyKinds, typechecking type instance forall a. F = () introduces the kind variable k for the kind of a . See #23734.AghcLHS quantified type variablesAghc4Default associated type (if any) from this template.As per Note [Associated type defaults], the Type has been renamed to use the class tyvars, while the A0 uses the original user-written type variables.(AAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAA(AAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAANone.ghcThe class of a register. Used in the register allocator. We treat all registers in a class as being interchangeable.None1Hghc"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.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.None2љҙљҙNone24әәNone6_ghc"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 aliased registers don't get counted twice, as per the paper.ghcpowerset (for lists)ghcpowersetLS (list of sets)ghcso we can put regs in UniqSetsNone88ghc!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 x86None9d9ghcShould this name be considered in-scope, even though it technically isn't?This ensures that we don't filter out information because, e.g., Data.Kind.Type isn't imported. See Note [pretendNameIsInScope].17785002233263328573153855848373069393939385183133355477673156361636567558525287868262618522228478357846547836631111111631542254257373739683837557776285541848484118411538173666883161642215858317284758575577754832253273155942183184285884242841858322656553111111111111111111111111111101111111111111111111111118315454740845485118555786288222737837555666555666555666555666755949419494949944949494939494947779494941949494949494949494948484949393939393935945499751665558425500543372626747474746474747455555521812737281622857665851126211111618578318322583832737373852831111711119494118484848480583253153555553666668593939393939393939393779393939393939393939393939384849359383851787373886488273278253197853172727262835012262282651222739852626866523328521116255274164848464542222222254545484866326288636322851831273728182882766363183254538845422222266646473737373627576666569848484675756565252762261166523385836128584184284284227474647474647464845327777778467748747474774746474777777777848464677847542622263226322632263226316322632222876683838383838368484642274464862527676788626725466577666577766577776656777666684051571111777777777677777686665810387466651003333333333051495533115264808003343434444444533333522444444444444444444444444444444444444433344444344443334444335555333355555555444533333344444444434333355555555555533334433333333444444444444444444444444444433333333333333333333333333344444455555555555222224444455545555554444444444222222222233333333333333333333333333333333301111111111111111111111111111111111111111111111111111111111111111111111111111111111111122221111111111111111111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222275825657776776666666666666666666666666667777777777777777788888888888558585858885853335558588833887778788588833333999999999999999999999999999999999999999999999999999999999999999966755558888899558888885676776767777777677756668888888878888566777786788588588885888888888555555545867888885555666666685888888888885555585568875668567678775555555555555555555555566666666666566666666666666666666666666666666666666666666666666666777777777777777777777777777777777777777777777777777777777788888888888888888888888888889999998None 7^ghcTyCons represent type constructors. Type constructors are introduced by things such as:1) Data declarations: data Foo = ... creates the Foo type constructor of kind Type2) Type synonyms: type Foo = ... creates the Foo type constructor 3) Newtypes: newtype Foo a = MkFoo ... creates the Foo type constructor of kind  Type -> Type4) Class declarations: class Foo where creates the Foo type constructor of kind  ConstraintThis data type also encodes a number of primitive, built in type constructors such as those for function and tuple types.If you edit this type, you may need to update the GHC formalism See Note [GHC Formalism] in GHC.Core.LintghcMake a  for the Typeable* representation of the given wired-in typeghc 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.BghcA B 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.BghcBoxed, heap valueBghcSigned, 8-bit valueBghcSigned, 16-bit valueBghcSigned, 32-bit valueBghcSigned, 64 bit valueBghcSigned, word-sized valueBghcUnsigned, 8 bit valueBghcUnsigned, 16 bit valueBghcUnsigned, 32 bit valueBghcUnsigned, 64 bit valueBghcUnsigned, word-sized valueBghcA pointer, but not to a Haskell value (use B)BghcA vectorBghc;Information pertaining to the expansion of a type synonym (type)BghcRepresents 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 :: TypeOr an associated data type declaration, within a class declaration: $class C a b where data T b :: TypeBghc"An open type synonym family e.g. !type family F x y :: Type -> TypeBghc$A closed type synonym family e.g. &type family F x where { F Int = Bool }BghcA closed type synonym family declared in an hs-boot file with type family F a where ..Bghc0Built-in type family used by the TypeNats solverBghcDescribes the flavour of an algebraic type constructor. For classes and data families, this flavour includes a reference to the parent .BghcAn ordinary algebraic type constructor. This includes unlifted and representation-polymorphic datatypes and newtypes and unboxed tuples, but NOT unboxed sums; see UnboxedSumTyCon.BghcAn unboxed sum type constructor. This is distinct from VanillaAlgTyCon because we currently don't allow unboxed sums to be Typeable since there are too many of them. See #13276.BghcType constructors representing a class dictionary. See Note [ATyCon for classes] in GHC.Core.TyCo.RepBghcType constructors representing an *instance* of a *data* family. Parameters:1) The type family in question*2) Instance types; free variables are the B 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 familyBghcSome promoted datacons signify extra info relevant to GHC. For example, the B constructor of B corresponds to the B constructor of B. This data structure allows us to store this information right in the 6. The other approach would be to look up things like B's B by known-key every time. See also Note [Getting from RuntimeRep to PrimRep] in GHC.Types.RepTypeBghcan ordinary promoted data conBghcA constructor of B. The argument to the function should be the list of arguments to the promoted datacon.BghcA constructor of BBghcA constructor of BBghcA constructor of  BghcRepresents right-hand-sides of s for algebraic typesBghcSays 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.BghcInformation about those s derived from a data declaration. This includes data types with no constructors at all.BghcAn unboxed sum type.BghcInformation about those s derived from a newtype declarationBghcL if the data type constructor has a known, fixed levity when fully applied to its arguments, False otherwise.This can only be I with UnliftedDatatypes, e.g. 5data A :: TYPE (BoxedRep l) where { MkA :: Int -> A }This boolean is cached to make it cheaper to check for levity and representation-polymorphism in tcHasFixedRuntimeRep.BghcCached value: is this an enumeration type? See Note [Enumeration types]BghcCached value: length data_consBghcThe data type constructors; can be empty if the user declares the type to have no constructors'INVARIANT: Kept in order of increasing #/ tag (see the tag assignment in mkTyConTagMap)Bghc.Is this a boxed, unboxed or constraint tuple?BghcThe unique constructor for the newtype. It has no existentialsBghcL if the newtype has a known, fixed representation when fully applied to its arguments, I# otherwise. This can only ever be I with UnliftedNewtypes.Example: newtype N (a :: TYPE r) = MkN a=Invariant: nt_fixed_rep nt = tcHasFixedRuntimeRep (nt_rhs nt)This boolean is cached to make it cheaper to check if a variable binding is representation-polymorphic in tcHasFixedRuntimeRep.Bghc Same as the B0, but this time eta-reduced. Hence the list of ?s in this field may be shorter than the declared arity of the .BghcCached 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 B from the corresponding 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 - unboxed sums Datanewtypetype families are handled by . See B 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 ?)ghcRepresents promoted data constructor. The kind of a promoted data constructor is the *wrapper* type of the original data constructor. This type must not have constraints (as checked in GHC.Tc.Gen.HsType.tcTyVar).ghcThese exist only during type-checking. See Note [TcTyCon, MonoTcTyCon, and PolyTcTyCon] in  GHC.Tc.TyClghcThe flavour of this algebraic tycon. Gives the class or family declaration  for derived 8s representing class or family instances, respectively.Bghc,Maps a label to information about the fieldghcContains information about the data constructors of the algebraic typeghcThe "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 .... See Note [The stupid context] in GHC.Core.DataCon.ghcWas 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 C type that should be used for this type when using the FFI and CAPIghc8Contains information about the expansion of the synonymghcis this a type family injective in its type variables? Nothing if no injectivity annotation was givenghcFor *associated* type/data families The class tycon in which the family is declared See Note [Associated families and their parent class]ghcType family flavour: open, closed, abstract, built-in. See comments for FamTyConFlavghcName of result type variable, used for pretty-printing with --show-iface and for reifying TyCon in Template HaskellghcThe Typeable' representation. A cached version of  (B tc).ghcSee comments with BghcCorresponding data constructorghc What sort of  this represents.ghcIs this TcTyCon already generalized? Used only to make zonking more efficientghcScoped tyvars over the tycon's body The range is always a skolem or TcTyVar, be MonoTcTyCon only: see Note [Scoped tyvars in a TcTyCon]BghcThe role for each type variable This list has length = tyConArity See also Note [TyCon Role signatures]BghcA pre-allocated TyConApp tycon []BghcArityBghcKind of this TyConBghc TyVar bindersBghc Result kindBghc Full bindersBghcName of the constructorBghcA Unique of this TyCon. Invariant: identical to Unique of Name stored in tyConName field.Bghc1A named, forall-bound variable (invisible or not)Bghc"an ordinary, visible type argumentBghcMake a Required TyConBinder. It chooses between NamedTCB and AnonTCB based on whether the tv is mentioned in the dependent setBghc(mkTyConTy tc) returns (TyConApp tc []) but arranges to share that TyConApp among all calls See Note [Sharing nullary TyConApps] So it's just an alias for tyConNullaryTy!Bghc Create an B from the data constructors, for a potentially levity-polymorphic datatype (with UnliftedDatatypes).Bghc Create an B from the data constructors.Use mkLevPolyDataConRhs if the datatype can be levity-polymorphic or if it comes from a "data type" declarationBghcExtract those #s that we are able to learn about. Note that visibility in this sense does not correspond to visibility in the context of any particular user program!ghcChecks the invariants of a B/ given the appropriate type class name, if anyBghcThe name (and defining module) for the Typeable representation (TyCon) of a type constructor.&See Note [Grand plan for Typeable] in GHC.Tc.Instance.Typeable.BghcThe size of a B 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.BghcReturn if Rep stands for floating type, returns Nothing for vector types.Bghc-The labels for the fields of this particular ghc-The labels for the fields of this particular Bghc(Look up a field label belonging to this ghcMake a map from strings to FieldLabels from all the data constructors of this algebraic tyconBghc#This is the making of an algebraic .BghcSimpler specialization of B for classesCghcMakes 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 Note [TcTyCon, MonoTcTyCon, and PolyTcTyCon] in  GHC.Tc.TyClCghc5No scoped type variables (to be used with mkTcTyCon).CghcCreate an primitive  , such as Int#, Type or  RealWorld# Primitive TyCons are marshalable iff not lifted. If you'd like to change this, modify marshalablePrimTyCon.CghcCreate a type synonym CghcCreate a type family Cghc#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 instanceCghc Test if the 8 is algebraic but abstract (invisible data constructors)Cghc Does this 7 represent something that cannot be defined in Haskell?CghcReturns True if the supplied  resulted from either a data or newtype declarationCghcReturns True9 for vanilla AlgTyCons -- that is, those created with a data or newtype declaration.CghcReturns 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 notCghc Was this  declared as "type data"? See Note [Type data declarations] in GHC.Rename.Module.CghcC is true of s for which this property holds (where r is the role passed in): If (T a1 b1 c1) ~r (T a2 b2 c2), then (a1 ~r1 a2), (b1 ~r2 b2), and (c1 ~r3 c2) (where r1, r2, and r3, are the roles given by tyConRolesX tc r) See also Note [Decomposing TyConApp equalities] in GHC.Tc.Solver.EqualityCghcC is true of s for which this property holds (where r is the role passed in): If (T tys ~r t), then (t's head ~r T). See also Note [Decomposing TyConApp equalities] in GHC.Tc.Solver.EqualityNB: at Nominal role, isGenerativeTyCon is simple: isGenerativeTyCon tc Nominal = not (isTypeFamilyTyCon tc || isSynonymTyCon tc)Cghc Is this an B of a  that is generative and injective with respect to representational equality?CghcIs this  that for a newtypeCghcTake 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.Cghc Is this a * representing a regular H98 type synonym (type)?CghcIs this tycon neither a type family nor a synonym that expands to a type family?CghcIs this a forgetful type synonym? If this is a type synonym whose RHS does not mention one (or more) of its bound variables, returns True. Thus, False means that all bound variables appear on the RHS; True may not mean anything, as the test to set this flag is conservative.CghcTrue 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 tyConMustBeSaturated on a regular H98 type synonym, because you should probably have expanded it first But regardless, it's not decomposableCghcIs this an algebraic  declared with the GADT syntax?CghcIs this an algebraic ( which is just an enumeration of values?Cghc Is this a ., synonym or otherwise, that defines a family?Cghc Is this a >, synonym or otherwise, that defines a family with instances?CghcIs this a type family  (whether open or closed)?CghcIs this a data family ?Cghc"Is this an open type family TyCon?Cghc0Is this a non-empty closed type family? Returns J( for abstract or empty closed families.CghcExtract type variable naming the result of injective type familyCghcC tc returns B is if tc is an injective tycon (where is states for which B tc is injective), or B otherwise.Cghc%Is this TyCon for an associated type?CghcGet the enclosing class TyCon (if there is one) for the given TyCon.Cghc Is this the  for a boxed tuple?Cghc Is this the  for an unboxed sum?Cghc T a .... See Note [The stupid context] in GHC.Core.DataCon.Cghc Extract the s bound by a vanilla type synonym and the corresponding (unsubstituted) right hand side.CghcExtract the information pertaining to the right hand side of a type synonym (type) declaration.CghcExtract the flavour of a type family (with all the extra information that it carries)CghcIs this  that for a class instance?CghcIf this  is that for a class instance, return the class it is for. Otherwise returns NothingCghc#Return the associated types of the , if anyCghcIs this ! that for a data family instance?CghcIf this  is that of a data family instance, return the family in question and the instance types. Otherwise, return NothingCghcIf 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 NothingCghc Extract any RuntimeRepInfo from this TyConghcCan this flavour of  appear unsaturated?CghcIs this flavour of & an open type family or a data family?CghcReturns whether or not this  is definite, or a hole that may be filled in at some later point. See Note [Skolem abstract data] Bghc whether the # has a fixed levityghcTrue if this is a "type data" declaration See Note [Type data declarations] in GHC.Rename.ModuleBghcBinders 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?BghcResult kind of the ghc%Whether the tuple is boxed or unboxedCghcKind of the resulting Cghcresult kind onlyghcScoped type variables;ghc$Is this TcTyCon generalised already?ghc What sort of  this representsCghcresult kind Must answer L to isFixedRuntimeRepKind (i.e., no representation polymorphism). (If you need a representation-polymorphic PrimTyCon, change tcHasFixedRuntimeRep, marshalablePrimTyCon, reifyTyCon for PrimTyCons.)Cghcresult kindCghcresult kindCghc Arguments to ghc Returns a  substitution, the body type of the synonym (not yet substituted) and any arguments remaining from the application ^ Expand a type synonym application Return Nothing if the TyCon is not a synonym, or if not enough arguments are suppliedCCCCCCCCCCCCCCCCCCCBCCCCBBCCCCBCBCCCCCCCCCCCCCCCBBBBBBBBBCBBBCCBCCCBBCBCCCCCCCCBBBBBBBBCCCCCCCCCBBCCCCCCCCCBCCBCCBCCCCCCBCCB"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB ! BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBB BBBBBBBBBBBBBBBBBBBBCBCBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"CCCCCCBCBBBBCCCCCCCCCBBBBCCCCCCCCCCCCCCCCCCBCBBBCCBCBBBCCCCBCBBBBBBBBBBBBBBBBBBBBBBBBBBBBB !BBBBBBBBBBNoneghc,True if there is a non-empty intersection. s1  s2 doesn't compute s2 if s1 is emptyNoneMghcDeterministic TyCon Environment#See Note [Deterministic UniqFM] in GHC.Types.Unique.DFM( for explanation why we need DTyConEnv.MghcTyCon Environment&MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM&MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNoneMghc Initialise a M with M.Mghc8The default upper bound (100) for the number of times a M is allowed to encounter each .Mghc1Change the upper bound for the number of times a M is allowed to encounter each .MMMMMMMMMM<None7"ghcA collection of sghc0The key type representing kinds in the compiler.ghc/Type synonym used for types of kind RuntimeRep.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"ghcMult is a type alias for Type.Mult must contain Type because multiplicity variables are mere type variables (of kind Multiplicity) in Haskell. So the simplest implementation is to make Mult be Type.Multiplicities can be formed with: - One: GHC.Types.One (= oneDataCon) - Many: GHC.Types.Many (= manyDataCon) - Multiplication: GHC.Types.MultMul (= multMulTyCon)So that Mult feels a bit more structured, we provide pattern synonyms and smart constructors for these.ghc&A shorthand for data with an attached  element (the multiplicity).ghcA semantically more meaningful type to represent what may or may not be a useful .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 D constructor of .ghcA  is concrete evidence of the equality/convertibility of two types.ghc creates a nullary D$. In general you should rather use ;, which picks the shared nullary TyConApp from inside the TyCon (via tyConNullaryTy. But we have to build the TyConApp tc [] in that TyCon field; that's what  is for.ghcLike mkTyCoForAllTy, but does not check the occurrence of the binder See Note [Unused coercion variable in ForAllTy]Cghc.The returned env is used in the extended scopeCghc>What to do with coercion holes. See Note [Coercion holes] in GHC.Core.TyCo.Rep.DghcA coercion to be filled in by the type-checker. See Note [Coercion holes]Dghc>See Note [Phantom coercions]. Only in Phantom roled coercionsDghcFrom the fact that any two coercions are considered equivalent. See Note [ProofIrrelProv]. Can be used in Nominal or Representational coercionsDghcFrom a plugin, which asserts that this coercion is sound. The string is for the use of the plugin.Dghc;See Note [Coercion holes] Only present during typecheckingDghcA type labeled D might have knot-tied tycons in it. See Note [Type checking recursive type and class declarations] in  GHC.Tc.TyClDghc;Vanilla type or kind variable (*never* a coercion variable)Dghc+Type application to something other than a  . Parameters:1) Function: must not be a D or D, must be another D, or D See Note [Respecting definitional equality] (EQ1) about the no D requirement2) Argument typeDghcApplication of a , including newtypes and1 synonyms. Invariant: saturated applications of FunTyCon must use D and saturated synonyms must use their own constructors. However,  unsaturated FunTyCons do appear as Ds. 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.DghcA  type. Note [When we quantify over a coercion variable] INVARIANT: If the binder is a coercion variable, it must be mentioned in the Type. See Note [Unused coercion variable in ForAllTy]DghcFUN m t1 t2 Very common, so an important special case See Note [Function types]Dghc/Type literals are similar to type constructors.DghcA kind cast. The coercion is always nominal. INVARIANT: The cast is never reflexive (EQ2) INVARIANT: The Type is not a CastTy (use TransCo instead) (EQ3) INVARIANT: The Type is not a ForAllTy over a tyvar (EQ4) See Note [Respecting definitional equality]DghcInjection 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 constructorDghc+Type synonym used for types of kind Levity.Dghc3The key representation of types within the compilerDghcMake nested arrow types | Special, common, case: Arrow type with mult ManyDghc/Wraps foralls over the type using the provided s from left to rightDghc/Wraps foralls over the type using the provided s from left to rightDghc+A view function that looks through nothing.DghcApply a function to both the Mult and the Type in a 'Scaled Type'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD!DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCCCDDDDDDDDDDDDDDDDDDD''''''''DDDDDDDDDDDDDDDDDDD''''''''''DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD!CCCCCCCDDDDDDCDDDDDNone  ghcZonk binders, bringing them into scope in the inner computation./Can be thought of as a state monad transformer StateT ZonkEnv m a-, but written in continuation-passing style.2See Note [Continuation-passing style for zonking].ghcA reader monad over 3, for zonking computations which don't modify the ! (e.g. don't bind any variables).Use  when you need to modify the  (e.g. to bind a variable).ghcHow should we handle unfilled unification variables in the zonker?+See Note [Un-unified unification variables]ghc,Default unbound unification variables to AnyghcSkolemise unbound unification variables See Note [Zonking the LHS of a RULE]ghcUsed in the GHCi debuggerghcPanic on unfilled meta-variables See Note [Error on unconstrained meta-variables] in GHC.Tc.Utils.TcMTypeghcSee Note [The ZonkEnv]ghc+Zonk some binders and run the continuation.Example: zonk (ForAllTy (Bndr tv vis) body_ty) = runZonkBndrT (zonkTyBndrX tv) $ \ tv' -> do { body_ty' <- zonkTcTypeToTypeX body_ty ; return (ForAllTy (Bndr tv' vis) body_ty') }2See Note [Continuation-passing style for zonking].›ghc,Embed a computation that doesn't modify the  into .Ûghc+Run a nested computation that modifies the +, without affecting the outer environment.ƛghc!Extend the knot-tied environment.ÛțƛɛǛśě›ʛśě›ÛʛǛțƛɛNoneɣ֥ݣˣ١٤ܥۥ¥¤ԣѡϢԡĤǣ٣آТˢܣ͡Ρԥä֣ң̡Ԥߣɡˡ¢ŤʣƤȤǤޤȥҡȣҤդעФϣڥѢӢҢաƣţǥĥϤڤУšܡݡޥݥɤӣСѤߡޡסӥɥȡ̢ۡץۤģܢ٢֤ߢפ΢̣֡ͣΣܤؤբ֢ףʡʢɢâĢȢŢƢǢӡåӤգǡġѣơͥ£˥̥Υãˤݤ̤ءԢϥƥڡʤݢڢޢۢ٥ͤأե¡áʥ͢ҥڣۣϡХΤߥťߤѥޣإ¡áġšơǡȡɡʡˡ̡͡ΡϡСѡҡӡԡա֡סء١ڡۡܡݡޡߡ¢âĢŢƢǢȢɢʢˢ̢͢΢ϢТѢҢӢԢբ֢עآ٢ڢۢܢݢޢߢ£ãģţƣǣȣɣʣˣ̣ͣΣϣУѣңӣԣգ֣ףأ٣ڣۣܣݣޣߣ¤äĤŤƤǤȤɤʤˤ̤ͤΤϤФѤҤӤԤդ֤פؤ٤ڤۤܤݤޤߤ¥åĥťƥǥȥɥʥ˥̥ͥΥϥХѥҥӥԥե֥ץإ٥ڥۥܥݥޥߥNoneghcCreate a primitive  with the given , arguments of kind Type with the given  -s, and the given result kind representation.Only use this in GHC.Builtin.Types.Prim.ghcCreate a primitive nullary  with the given ! and result kind representation.Only use this in GHC.Builtin.Types.Prim.ghcCreate a primitive  like , except the last argument is levity-polymorphic, where the levity argument is implicit and comes before other argumentsOnly use this in GHC.Builtin.Types.Prim.Dghc Primitive s that are defined in GHC.Prim but not "exposed". See Note [Unexposed TyCons]Dghc Primitive 3s that are defined in, and exported from, GHC.Prim.EghcThe FUN type constructor. FUN :: forall (m :: Multiplicity) -> 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.EghcGiven a Role, what TyCon is the type of equality predicates at that role?ghcroles of the arguments (must be non-empty), not including the implicit argument of kind  , which always has   roleghc(representation of the fully-applied typeEEEEEEEEEEEEEEEFFEEEFEEEEEEEEDFFEEEEEEEEFFFFFFEEEEDEEEEEFFFFFFEEEEEEDFFFFFFEEDFFFFFFEEDFFFFFFEEDFFFFFFEEDFEEEEEEEEEEEEEFFFFFFFFEFFFFEFEEEEEEEEEFEEFEEEEEEEEEEEDFEEEEEEEEEEEEEFFFFFEFEEEEEFFDFEEEFFFFFFEEEFFFFFFEEEFFFFFFEEEFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEDDDEEDEEDEEEEEEEEEEEEEEEEEEEEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFEEDEEEEEDEEEEEDEEEEEDEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF None2FghcReturns 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.FghcAdd the kind variables free in the kinds of the tyvars in the given set. Returns a deterministically ordered list.FghcAdd the kind variables free in the kinds of the tyvars in the given set. Returns a deterministic set.FghcF that returns free variables of a type in a deterministic set. For explanation of why using (6 is not deterministic see Note [Deterministic FV] in  GHC.Utils.FV.FghcF that returns free variables of a type in deterministic order. For explanation of why using (6 is not deterministic see Note [Deterministic FV] in  GHC.Utils.FV.FghcReturns free variables of types, including kind variables as a deterministic set. For type synonyms it does not expand the synonym.FghcReturns free variables of types, including kind variables as a deterministically ordered list. For type synonyms it does not expand the synonym.FghcThe worker for F 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.Fghc6Get a deterministic set of the vars free in a coercionFghcGiven 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.CoercionFghcRetrieve the free variables in this type, splitting them based on whether they are used visibly or invisibly. Invisible ones come first.Gghc 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 DFor example, if F& is a non-injective type family, then: 9injectiveTyVarsOf( Either c (Maybe (a, F b c)) ) = {a,c} If G ty = itvs, then knowing ty fixes itvs. More formally, if a is in G 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?].Gghc 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 DSee Note [When does a tycon application need an explicit kind signature?].GghcReturns 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, ForAllTyBinders, TyConBinders, and visibility] in GHC.Core.TyCo.RepGghcLike G, but for many types.GghcDo 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.HsTypeGghc+Get the free vars of a type in scoped orderGghc*Get the free vars of types in scoped orderGghcAll type constructors occurring in the type; looking through type synonyms, but not newtypes. When it finds a Class, it returns the class TyCon.GghcShould we look under injective type families? See Note [Coverage condition for injective type families] in GHC.Tc.Instance.Family.Gghclook under injective type families? See Note [Coverage condition for injective type families] in GHC.Tc.Instance.Family.8FGGGFFFFFFFFGGGGFGGGFGFFFFFFFFFFFFFFFFFFFFFGFFFGGGFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGFGGGGGGGGGFFGGGGFFFFNone{GghcThis 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.Gghc Add the free s to the env in tidy form, so that we can tidy the type they are free inGghc 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 GGghcTidy a list of Types-See Note [Strictness in tidyType and friends]Gghc Tidy a Type-See Note [Strictness in tidyType and friends]Gghc:Grabs the free type variables, tidies them and then uses G to work over the type itselfGghcCalls G= on a top-level type (i.e. with an empty tidying environment)GghcTidy a Coercion-See Note [Strictness in tidyType and friends]GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGNonei-GghcA substitution of s for 'sGghcA substitution of s for s and s for 'sGghcA substitution of Exprs for non-coercion sGghc!Type & coercion & id substitutionThe Subst data type defined in this module contains substitution for tyvar, covar and id. However, operations on IdSubstEnv (mapping from Id to CoreExpr%) that require the definition of the Expr data type are defined in GHC.Core.Subst to avoid circular module dependency.GghcComposes two substitutions, applying the second one provided first, like in function composition. This function leaves IdSubstEnv untouched because IdSubstEnv is not used during substitution for types.GghcChecks whether the tyvar and covar environments are empty. This function should be used over G when substituting for types, because types currently do not contain expressions; we can safely disregard the expression environment when deciding whether to skip a substitution. Using G gives us a non-trivial performance boost (up to 70% less allocation for T18223)GghcMake a TCvSubst with specified tyvar subst and empty covar substGghcMake a TCvSubst with specified covar subst and empty tyvar substGghcWhat to do with coercion holes. See Note [Coercion holes] in GHC.Core.TyCo.Rep.Hghc Iterates ( until there is no more to synonym to expand. NB: coreFullView is non-recursive and can be inlined; core_full_view is the recursive one See Note [Inlining coreView].ghc Iterates ( until there is no more to synonym to expand. NB: coreFullView is non-recursive and can be inlined; core_full_view is the recursive one See Note [Inlining coreView].ghcexpandSynTyConApp_maybe tc tys! expands the RHS of type synonym tc instantiated at arguments tys , or returns J if tc is not a synonym.ghc A helper for 3 to avoid inlining this cold path into call-sites.Precondition: the call is saturated or over-saturated; i.e. length tvs <= length arg_tysHghcExpand 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.H 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 synonymTyConsOfTypeghc&An INLINE helper for function such as H below.isTyConKeyApp_maybe key ty returns Just tys iff the type  ty = T tys*, where T's unique = key key must not be 5; to test for functions, use H:. Thanks to this fact, we don't have to pattern match on D here.HghcExtract the RuntimeRep classifier of a type from its kind. For example, kindRep * = LiftedRep; Panics if this is not possible. Treats * and Constraint as the sameHghcGiven a kind (TYPE rr) or (CONSTRAINT rr), extract its RuntimeRep classifier rr. For example,  kindRep_maybe * = Just LiftedRep Returns J% if the kind is not of form (TYPE rr)Hghc9Returns True if the kind classifies unlifted types (like 'Int#') and False otherwise. Note that this returns False for representation-polymorphic kinds, which may be specialized to a kind that classifies unlifted types.HghcCheck whether a kind is of the form `TYPE (BoxedRep Lifted)` or `TYPE (BoxedRep Unlifted)`.Returns:/`Just Lifted` for `TYPE (BoxedRep Lifted)` and ,3`Just Unlifted` for `TYPE (BoxedRep Unlifted)` and  UnliftedType,J for anything else, e.g. `TYPE IntRep`, `TYPE (BoxedRep l)`, etc.HghcCheck whether a type of kind B is lifted.H is:True of LiftedRep :: RuntimeRepFalse of type variables, type family applications, and of other reps such as IntRep :: RuntimeRep.HghcCheck whether a type of kind B is unlifted.True of definitely unlifted Bs such as  UnliftedRep, B, B, ... False of  LiftedRep,6False for type variables and type family applications.ghc'An INLINE helper for functions such as H and H.%Checks whether the type is a nullary  application, for a  with the given .HghcIs a tyvar of type B?HghcIs a tyvar of type  ?HghcIs a tyvar of type  Multiplicity?Hghc(splitRuntimeRep_maybe rr) takes a Type rr :: RuntimeRep, and returns the (TyCon,[Type]) for the RuntimeRep, if possible, where the TyCon is one of the promoted DataCons of RuntimeRep. Remember: the unique on TyCon that is a a promoted DataCon is the same as the unique on the DataCon See Note [Promoted data constructors] in GHC.Core.TyCon May not be possible if rr1 is a type variable or type family applicationHghcSee .ghc`isBoxedRuntimeRep_maybe (rep :: RuntimeRep)` returns `Just lev` if rep% expands to `Boxed lev` and returns J otherwise.Types with this runtime rep are represented by pointers on the GC'd heap.Hghc&Check whether a type (usually of kind B) is lifted, unlifted, or unknown. Returns Nothing if the type isn't of kind B.$`runtimeRepLevity_maybe rr` returns:`Just Lifted` if rr is `LiftedRep :: RuntimeRep``Just Unlifted` if rr is definitely unlifted, e.g. BJ if not known (e.g. it's a type variable or a type family application).Hghc levity_maybe takes a Type of kind Levity, and returns its levity May not be possible for a type variable or type family applicationHghc2Attempts to obtain the type variable underlying a , and panics with the given message if this is not a type variable type. See also (Hghc2Attempts to obtain the type variable underlying a , without any expansionHghcIf the type is a tyvar, possibly under a cast, returns it, along with the coercion. Thus, the co is :: kind tv ~N kind tyHghcAttempt 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!Hghc1Attempts to take a type application apart, as in H%, and panics if this is not possibleHghcDoes the AppTy split as in H6, but assumes that any coreView stuff is already doneHghcJust like splitAppTyNoView_maybe, but does not split (c => t) See Note [Decomposing fat arrow c=>t]HghcRecursively 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.HghcLike H(, but doesn't look through type synonymsHghc>Is this a numeric literal. We also look through type synonyms.Hghc=Is this a symbol literal. We also look through type synonyms.Hghc;Is this a char literal? We also look through type synonyms.Hghc2Is this a type literal (symbol, numeric, or char)?HghcIs this type a custom user error? If so, give us the error message.Hghc=Render a type corresponding to a user type error into a SDoc.HghcGiven the components of a FunTy figure out the corresponding TyConApp.Hghc=Return Just if this TyConApp should be represented as a FunTyHghc?Return Just if this TyConAppCo should be represented as a FunCoHghcThis one works out the FunTyFlag from the argument type See GHC.Types.Var Note [FunTyFlag]Hghc=Like mkFunctionType, compute the FunTyFlag from the argumentsHghcAttempts to extract the multiplicity, argument and result types from a type, and panics if that is not possible. See also HHghcAttempts to extract the multiplicity, argument and result types from a typeHghcExtract the function result type and panic if that is not possibleHghcExtract the function argument type and panic if that is not possible Just like H/ but for a single argument Try not to iterate (, because it's inefficient to substitute one variable at a time; instead use 'piResultTys"Hghc(piResultTys f_ty [ty1, .., tyn]) gives the type of (f ty1 .. tyn) where f :: f_ty H" 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 ds type.Hghc), as that's not a TyCon in the type-checker.Note that this may fail (in funTyConAppTy_maybe) in the case of a D" with an argument of unknown kind D0 (e.g. `FunTy (a :: k) Int`, since the kind of a isn't of the form `TYPE rep`. This isn't usually a problem but may be temporarily the cas during canonicalization: see Note [Decomposing FunTy] in GHC.Tc.Solver.Equality and Note [The Purely Kinded Type Invariant (PKTI)] in GHC.Tc.Gen.HsType, Wrinkle around FunTyConsequently, you may need to zonk your type before using this function.Hghc Unwrap one layer of newtype on a type constructor and its arguments, using an eta-reduced version of the newtype2 if possible. This requires tys to have at least newTyConInstArity tycon elements.ghcLike (, but avoids checking the coercion for reflexivity, as that can be expensive.Hghc Make a dependent forall over an ' variableHghcLike H, but tv should be a tyvarHghcLike D/, but assumes all variables are dependent and ', a common caseHghcLike H#, but tvs should be a list of tyvarHghcLike ,, but assumes the variable is dependent and ', a common caseHghcLike D/, but assumes all variables are dependent and ', a common caseHghcLike mkForAllTys, but assumes all variables are dependent and visibleHghcGiven a list of type-level vars and the free vars of a result kind, makes PiTyBinders, 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.Hghc Bool -> Double) == [(Int, FTF_T_T), (Bool, FTF_T_T)] getRuntimeArgTys (Identity Int -> Bool -> Double) == [(Identity Int, FTF_T_T), (Bool, FTF_T_T)] getRuntimeArgTys (Int -> Identity (Bool -> Identity Double)) == [(Int, FTF_T_T), (Bool, FTF_T_T)] getRuntimeArgTys (forall a. Show a => Identity a -> a -> Int -> Bool) == [(Show a, FTF_C_T), (Identity a, FTF_T_T),(a, FTF_T_T),(Int, FTF_T_T)] Note that, in the last case, the returned types might mention an out-of-scope type variable. This function is used only when we really care about the kinds' of the returned types, so this is OK.*Warning**: this function can return an infinite list. For example:  newtype N a = MkN (a -> N a) getRuntimeArgTys (N a) == repeat (a, FTF_T_T) HghcLike H, but returns only *invisible* binders, including constraints. Stops at the first visible binder.HghcSame as H$, but stop when - you have found n '+s, - or you run out of invisible bindersHghcGiven a  and a list of argument types, filter out any invisible (i.e., ' or ' ) arguments.HghcGiven a . and a list of argument types, filter out any ' arguments.HghcGiven a list of things paired with their visibilities, partition the things into (invisible things, visible things).HghcGiven 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 tyConForAllTyFlags 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.HghcGiven 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 H comes in handy, since  f Type Bool$ would be represented in Core using Ds. (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 ').HghcGiven 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)HghcGet the type on the LHS of a coercion induced by a type/data family instance.HghcTries to compute the  / of the given type. Returns either a definite  , or J if we aren't sure (e.g. the type is representation-polymorphic).+Panics if the kind does not have the shape TYPE r.Hghc,Is the given type definitely unlifted? See Type#type_classification for what an unlifted type is.0Panics on representation-polymorphic types; See H for a more approximate predicate that behaves better in the presence of representation polymorphism.HghcReturns:I if the type is  guaranteed unlifted orL if it lifted, OR we aren't sure (e.g. in a representation-polymorphic case)HghcReturns:I if the type is  guaranteed lifted orL if it is unlifted, OR we aren't sure (e.g. in a representation-polymorphic case)HghcSee Type#type_classification for what a boxed type is. Panics on representation-polymorphic types; See H for a more approximate predicate that behaves better in the presence of representation polymorphism.Hghc3Is this a type of kind RuntimeRep? (e.g. LiftedRep)Hghc+Drops prefix of RuntimeRep constructors in Ds. 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]IghcDoes this classify a type allowed to have values? Responds True to things like *, TYPE Lifted, TYPE IntRep, TYPE v, Constraint.)True of a kind `TYPE _` or `CONSTRAINT _`IghcIs this kind equivalent to  i.e. TYPE LiftedRep?IghcIs this kind equivalent to TYPE (BoxedRep l) for some  l :: Levity?IghcIs this kind equivalent to TYPE r (for some unknown r)?This considers  Constraint to be distinct from *.IghcReturns True if a type has a syntactically fixed runtime rep, as per Note [Fixed RuntimeRep] in GHC.Tc.Utils.Concrete.This function is equivalent to `isFixedRuntimeRepKind . typeKind` but much faster. Precondition: The type has kind (TYPE blah)IghcTrue if the argument types of this function type all have a fixed-runtime-repIghcChecks that a kind of the form ,  Constraint or 'TYPE r is concrete. See I. Precondition:3 The type has kind `TYPE blah` or `CONSTRAINT blah`IghcTests whether the given type is concrete, i.e. it whether it consists only of concrete type constructors, concrete type variables, and applications.3See Note [Concrete types] in GHC.Tc.Utils.Concrete.IghcDoes 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.)IghcScale a payload by ManyIghcScale a payload by OneIghc8Scale a payload by Many; used for type arguments in coreIghc isLinear t returns True of a if t is a type of (curried) function where at least one argument is linear (or otherwise non-unrestricted). We use this function to check whether it is safe to eta reduce an Id in CorePrep. It is always safe to return L , because L deactivates the optimisation.IghcGiven a  RuntimeRep , applies TYPE to it. On the fly it rewrites TYPE LiftedRep --> liftedTypeKind (a synonym) TYPE UnliftedRep --> unliftedTypeKind (ditto) TYPE ZeroBitRep --> zeroBitTypeKind (ditto) NB: no need to check for TYPE (BoxedRep Lifted), TYPE (BoxedRep Unlifted) because those inner types should already have been rewritten to LiftedRep and UnliftedRep respectively, by mkTyConAppsee Note [TYPE and CONSTRAINT] in GHC.Builtin.Types.Prim. See Note [Using synonyms to compress types] in GHC.Core.TypeIghcJust like mkTYPEappIghcJust like mkTYPEapp_maybeIghcGiven a  , apply B to it On the fly, rewrite BoxedRep Lifted --> liftedRepTy (a synonym) BoxedRep Unlifted --> unliftedRepTy (ditto) See Note [TYPE and CONSTRAINT] in GHC.Builtin.Types.Prim. See Note [Using synonyms to compress types] in GHC.Core.TypeIghcGiven a `[RuntimeRep]`, apply TupleRep to it On the fly, rewrite TupleRep [] -> zeroBitRepTy (a synonym) See Note [TYPE and CONSTRAINT] in GHC.Builtin.Types.Prim. See Note [Using synonyms to compress types] in GHC.Core.Typeghc"the variables bound by the synonymghcthe RHS of the synonymghc2the type arguments the synonym is instantiated at.Hghcbindersghcfree variables of resultHghcresult kindIghcShould 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)$$EGGFFFFFGGFFFFFFGFGGDDDDDDDDDDDDDDDDDDDGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGBHHHHIH(HH(HHHHHHHHHHH(HHH(HIHHHHHH(HIIIHHIHHHHH(HHH(IHI(HHIH(IH(HHHIHHHIHHHHHHIHHHHIHHHH(HIII(H(HHHHHIHHHHIIIHH(HHH(H(HHHHI(HIIIIHHHHHHHHHHHHHHHHHHHHHHHHHH(HIIHHHHHHHIHH(HHIII(HI(IH'''''''''''''''''''''DDDCCCCCCCGGGGGGGHGGGH''''''''''''''''''''''''''DD''''DDDH(HH''(HHHHHHHDDDDDDDDDDHHHHHHEHHHH((B(HHHH(HHHHDDHHHHHHHHHHHHHHHHHHHHHDD(HHHHHHHHHHHH(HHHH(H((HGHHHHHHHHH(HHHGGHHGGGHHCCCCCCCDDH'''''''''''''''''''HHH(HHHHHHHHHHIIIIIIIIII(HI(HHHHHHHHHHHHHHHHHHHIHH(H(HHH(HIIIIIIHHIII(IIIIIIII$$FFFFFFFFFGGHDGFFFGGGII(H(GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGIIINone/7hIghcOverloaded Literal ValueIghcInteger-looking literals;IghcFrac-looking literalsIghcString-looking literalsIghcHaskell Overloaded LiteralIghcHaskell LiteralIghc CharacterIghcUnboxed characterIghcStringIghc Packed bytesIghcGenuinely an Int; arises from GHC.Tc.Deriv.Generate, and from TRANSLATIONIghcliteral Int#Ighcliteral Word#Ighcliteral Int8#Ighcliteral Int16#Ighcliteral Int32#Ighcliteral Int64#Ighcliteral Word8#Ighcliteral Word16#Ighcliteral Word32#Ighcliteral Word64#IghcGenuinely an integer; arises only from TRANSLATION (overloaded literals are done with HsOverLit)IghcGenuinely a rational; arises only from TRANSLATION (overloaded literals are done with HsOverLit)Ighc Unboxed FloatIghcUnboxed DoubleIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIINone167KghcGoverns the kind of expression that the tick gets placed on when annotating for example using mkTick. If we find that we want to put a tickish on an expression ruled out here, we try to float it inwards until we find a suitable expression.KghcPlace ticks exactly on run-time expressions. We can still move the tick through pure compile-time constructs such as other ticks, casts or type lambdas. This is the most restrictive placement rule for ticks, as all tickishs have in common that they want to track runtime processes. The only legal placement rule for counting ticks. NB: We generally try to move these as close to the relevant runtime expression as possible. This means they get pushed through tyoe arguments. E.g. we create `(tick f) Bool` instead of `tick (f Bool)`.KghcAs  PlaceRuntime, but we float the tick through all lambdas. This makes sense where there is little difference between annotating the lambda and annotating the lambda's code.KghcIn addition to floating through lambdas, cost-centre style tickishs can also be moved from constructors, non-function variables and literals. For example: let x = scc ... C (scc ... y) (scc ... 3) in ...Neither the constructor application, the variable or the literal are likely to have any cost worth mentioning. And even if y names a thunk, the call would not care about the evaluation context. Therefore removing all annotations in the above example is safe.KghcSpecifies the scoping behaviour of ticks. This governs the behaviour of ticks that care about the covered code and the cost associated with it. Important for ticks relating to profiling.KghcNo scoping: The tick does not care about what code it covers. Transformations can freely move code inside as well as outside without any additional annotation obligationsKghcSoft scoping: We want all code that is covered to stay covered. Note that this scope type does not forbid transformations from happening, as long as all results of the transformations are still covered by this tick or a copy of it. For example let x = tick ...6 (let y = foo in bar) in baz ===> let x = tick ... bar; y = tick ... foo in bazIs a valid transformation as far as "bar" and "foo" is concerned, because both still are scoped over by the tick.Note though that one might object to the "let" not being covered by the tick any more. However, we are generally lax with this - constant costs don't matter too much, and given that the "let" was effectively merged we can view it as having lost its identity anyway.Also note that this scoping behaviour allows floating a tick "upwards" in pretty much any situation. For example:case foo of x -> tick ... bar ==> tick ... case foo of x -> barWhile this is always legal, we want to make a best effort to only make us of this where it exposes transformation opportunities.KghcCost centre scoping: We don't want any costs to move to other cost-centre stacks. This means we not only want no code or cost to get moved out of their cost centres, but we also object to code getting associated with new cost-centre ticks - or changing the order in which they get applied.A rule of thumb is that we don't want any code to gain new annotations. However, there are notable exceptions, for example:let f = y -> foo in tick ... ... (f x) ... ==> tick ... ... foo[x/y] ...In-lining lambdas like this is always legal, because inlining a function does not change the cost-centre stack when the function is called.KghcAn  {-# SCC #-} profiling annotation, either automatically added by the desugarer as a result of -auto-all, or added by the user.KghcA "tick" used by HPC to track the execution of each subexpression in the original source code.KghcA breakpoint for the GHCi debugger. This behaves like an HPC tick, but has a list of free variables which will be available for inspection in GHCi when the program stops at the breakpoint.NB. we must take account of these Ids when (a) counting free variables, and (b) substituting (don't substitute for them)KghcA source note.Source notes are pure annotations: Their presence should neither influence compilation nor execution. The semantics are given by causality: The presence of a source note means that a local change in the referenced source code span will possibly provoke the generated code to change. On the flip-side, the functionality of annotated code *must* be invariant against changes to all source code *except* the spans referenced in the source notes (see "Causality of optimized Haskell" paper for details).Therefore extending the scope of any given source note is always valid. Note that it is still undesirable though, as this reduces their usefulness for debugging and profiling. Therefore we will generally try only to make use of this property where it is necessary to enable optimizations.Kghc;scopes over the enclosed expression (i.e. not just a tick)Kghcbump the entry count?Kghcthe cost centreKghcthe order of this list is important: it matches the order of the lists in the appropriate entry in .9Careful about substitution! See Note [substTickish] in GHC.Core.Subst.Kghc4Name for source location (uses same names as CCs)KghcSource coveredKghc)Tickish in Cmm context (annotations only)ghc;Allows attaching extra information to points in expressionsUsed as a data type index for the GenTickish annotations. See Note [Tickish passes]KghcA "counting tick" (where tickishCounts is True) is one that counts evaluations in some way. We cannot discard a counting tick, and the compiler should preserve the number of counting ticks as far as possible.However, we still allow the simplifier to increase or decrease sharing, so in practice the actual number of ticks may vary, except that we never change the value from zero to non-zero or vice versa.Kghc/Returns the intended scoping rule for a TickishKghcReturns whether the tick scoping rule is at least as permissive as the given scoping rule.KghcReturns True for ticks that can be floated upwards easily even where it might change execution counts, such as: Just (tick ... foo) ==> tick ... (Just foo)This is a combination of tickishSoftScope and  tickishCounts. Note that in principle splittable ticks can become floatable using mkNoTick -- even though there's currently no tickish for which that is the case.KghcReturns True" for a tick that is both counting and> scoping and can be split into its (tick, scope) parts using K and mkNoTick respectively.KghcReturn True if this source annotation compiles to some backend code. Without this flag, the tickish is seen as a simple annotation that does not have any associated evaluation code.What this means that we are allowed to disregard the tick if doing so means that we can skip generating any code in the first place. A typical example is top-level bindings: foo = tick ...% y -> ... ==> foo = y -> tick ... ...Here there is just no operational difference between the first and the second version. Therefore code generation should simply translate the code as if it found the latter.Kghc)Placement behaviour we want for the ticksKghcReturns whether one tick "contains" the other one, therefore making the second tick redundant.ghc6Keep track of the type of breakpoints in STG, for GHCi&KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK&KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKNone<j KKKKKKKKKKKK KKKKKKKKKKKK=NoneKghcmkMultSup w1 w2" returns a multiplicity such that mkMultSup w1 w2 >= w1 and mkMultSup w1 w2 >= w2.. See Note [Overapproximating multiplicities].Kghc submult w1 w2' check whether a value of multiplicity w1+ is allowed where a value of multiplicity w2& is expected. This is a partial order.KKKKKKKDDHHIIIIIIKKKCHHKKKKCDIIIIIIKKKKKDKNoneKghcRecord a single usage of an Id, i.e. {n: 1} Exception: We do not record external names (both GlobalIds and top-level LocalIds) because they're not relevant to linearity checking.Kghc|lookupUE x env| returns the multiplicity assigned to |x| in |env|, if |x| is not bound in |env|, then returns |Zero| or |Bottom|.KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKNoneVghc!An ordering relation between two s (known below as t1 :: k1 and t2 :: k2)ghc t1 < t2ghct1 ~ t2> and there are no casts in either, therefore we can conclude k1 ~ k2ghct1 ~ t2 yet one of the types contains a cast so they may differ in kind.ghc t1 > t2IghctcEqType implements typechecker equality It behaves just like eqType, but is implemented differently (for now)Ighc Just like I, but will return True for types of different kinds as long as their non-coercion structure is identical.IghcCheck whether two TyConApps are the same; if the number of arguments are different, just checks the common prefix of arguments.ghcType equality comparing both visible and invisible arguments and expanding type synonyms.IghcLike I, but returns True if the visible part of the types are equal, even if they are really unequal (in the invisible bits)IghcLike pickyEqTypeVis$, but returns a Bool for convenienceghcReal worker for I. No kind check!Ighc.Do these denote the same level of visibility? ' arguments are visible, others are not. So this function equates ' and '. Used for printing.Ighc.Do these denote the same level of visibility? ' arguments are visible, others are not. So this function equates ' and '. Used for printing.Ighc5Type equality on source types. Does not look through newtypes, s or type families, 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.Ighc7Compare types with respect to a (presumably) non-empty ).IghcType equality on lists of types, looking through type synonyms but not newtypes.Ighc Compare two +s. See Note [nonDetCmpType nondeterminism]ghcTrue  = do not expand type synonymsghcTrue  = compare visible args onlyIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIINone 7ـKghcNumeric literal typeKghcBignat (see Note [BigNum literals])KghcInt# - according to target machineKghcInt8# - exactly 8 bitsKghcInt16# - exactly 16 bitsKghcInt32# - exactly 32 bitsKghcInt64# - exactly 64 bitsKghcWord# - according to target machineKghcWord8# - exactly 8 bitsKghcWord16# - exactly 16 bitsKghcWord32# - exactly 32 bitsKghcWord64# - exactly 64 bitsKghc So-called K 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 K 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 (K)A K3 to be used in place of values that are never used. A characterA stringThe NULL pointerKghcChar#" - at least 31 bits. Create with LKghcAny numeric literal that can be internally represented with an Integer.KghcA string-literal: stored and emitted UTF-8 encoded, we'll arrange to decode it at runtime. Also emitted with a '\0' terminator. Create with LKghcThe NULL pointer, the only pointer value that can be represented as a Literal. Create with LKghc.A nonsense value; See Note [Rubbish literals].KghcFloat#. Create with LKghcDouble#. Create with LKghcA 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 dataLghcCoerce a literal number into another using wrapping semantics.LghcNarrow a literal number by converting it into another number type and then converting it back to its original type.Lghc>Check that a given number is in the range of a numeric literalLghcGet the literal rangeLghcCreate a numeric K of the given typeLghcCreate a numeric K$ of the given type if it is in rangeLghc Creates a K of type Int#Lghc Creates a K of type Int#. If the argument is out of the (target-dependent) range, it is wrapped. See Note [Word Int underflow overflow]Lghc Creates a K of type Int# without checking its range.Lghc Creates a K of type Int#, as well as a 9ean 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]Lghc Creates a K of type Word#Lghc Creates a K of type Word#. If the argument is out of the (target-dependent) range, it is wrapped. See Note [Word Int underflow overflow]Lghc Creates a K of type Word# without checking its range.Lghc Creates a K of type Word#, as well as a 9ean 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]Lghc Creates a K of type Int8#Lghc Creates a K of type Int8#8. If the argument is out of the range, it is wrapped.Lghc Creates a K of type Int8# without checking its range.Lghc Creates a K of type Word8#Lghc Creates a K of type Word8#8. If the argument is out of the range, it is wrapped.Lghc Creates a K of type Word8# without checking its range.Lghc Creates a K of type Int16#Lghc Creates a K of type Int16#8. If the argument is out of the range, it is wrapped.Lghc Creates a K of type Int16# without checking its range.Lghc Creates a K of type Word16#Lghc Creates a K of type Word16#8. If the argument is out of the range, it is wrapped.Lghc Creates a K of type Word16# without checking its range.Lghc Creates a K of type Int32#Lghc Creates a K of type Int32#8. If the argument is out of the range, it is wrapped.Lghc Creates a K of type Int32# without checking its range.Lghc Creates a K of type Word32#Lghc Creates a K of type Word32#8. If the argument is out of the range, it is wrapped.Lghc Creates a K of type Word32# without checking its range.Lghc Creates a K of type Int64#Lghc Creates a K of type Int64#8. If the argument is out of the range, it is wrapped.Lghc Creates a K of type Int64# without checking its range.Lghc Creates a K of type Word64#Lghc Creates a K of type Word64#8. If the argument is out of the range, it is wrapped.Lghc Creates a K of type Word64# without checking its range.Lghc Creates a K of type Float#Lghc Creates a K of type Double#Lghc Creates a K of type Char#Lghc Creates a K of type Addr#, which is appropriate for passing to e.g. some of the "error" functions in GHC.Err such as GHC.Err.runtimeErrorLghcTests whether the literal represents a zero of whatever type it isLghcTests whether the literal represents a one of whatever type it isLghc Returns the ? contained in the K', for when that makes sense, i.e. for ; and numbers.Lghc Returns the ? contained in the K', for when that makes sense, i.e. for ; and numbers.LghcApply a function to the ? contained in the K', 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]ghc0Narrow a literal number (unchecked result range)Lghc-Extend or narrow a fixed-width literal (e.g. Int16##) to a target word-sized literal (Int# or Word#). Narrowing can only happen on 32-bit architectures when we convert a 64-bit literal into a 32-bit one.Lghc-Extend or narrow a fixed-width literal (e.g. Int16##) to a target word-sized literal (Int# or Word#). Narrowing can only happen on 32-bit architectures when we convert a 64-bit literal into a 32-bit one.LghcTrue 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.Lghc?True if code space does not go bad if we duplicate this literalLghcFind the Haskell  the literal occupiesLghcNeeded for the Ord instance of AltCon, which in turn is needed in .LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNone NLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNone9:;MMMMMMMMMMMMNone  ٛghcA "supernode" stands for a collection of one or more nodes (basic blocks) that have been coalesced by the Hecht-Ullman algorithm. A collection in a supernode constitutes a  reducible subgraph of a control-flow graph. (When an entire control-flow graph is collapsed to a single supernode, the flow graph is reducible.)The idea of node splitting is to collapse a control-flow graph down to a single supernode, then materialize (`inflate'<) the reducible equivalent graph from that supernode. The כ class defines only the methods needed to collapse; rematerialization is the responsiblity of the client.During the Hecht-Ullman algorithm, every supernode has a unique entry point, which is given by ڛ. But this invariant is not guaranteed by the class methods and is not a law of the class. The ۛ function rewrites all labels that appear in a supernode (both definitions and uses). The ؛* function replaces every appearance of a defined label with a fresh label. (Appearances include both definitions and uses.)Laws:  superLabel (n <> n') == superLabel n blocks (n <> n') == blocks n  blocks n' mapLabels f (n <> n') = mapLabels f n <> mapLabels f n' mapLabels id == id mapLabels (f . g) == mapLabels f . mapLabels g  (We expect ؛ to distribute over , but because of the fresh names involved, formulating a precise law is a bit challenging.)ܛghcThe identity monad as a ߛ>. Use this monad when you want efficiency in graph collapse.ghcModule : GHC.Data.Graph.Collapse Description : Implement the "collapsing" algorithm Hecht and UllmanA control-flow graph is reducible if and only if it is collapsible according to the definition of Hecht and Ullman (1972). This module implements the collapsing algorithm of Hecht and Ullman, and if it encounters a graph that is not collapsible, it splits nodes until the graph is fully collapsed. It then reports what nodes (if any) had to be split in order to collapse the graph. The information is used upstream to node-split Cmm graphs.The module uses the inductive graph representation cloned from the Functional Graph Library (Hackage package fgl , modules .)If you want to visualize the graph-collapsing algorithm, create an instance of monad ߛ. Each step in the algorithm is announced to the monad as a side effect. If you don't care about visualization, you would use the ܛ. monad, in which these operations are no-ops.ghc Tell if a  has a single predecessor.ghc1Use this function to extract information about a  that you know is in a  . It's like  from , but it must succeed.ghc"Rewrite the label of a given node.ghc&Test if a graph has but a single node.ghcMerge two nodes, return new graph plus list of nodes that newly have a single predecessor. This function implements transformation $T_2$ from the Hecht and Ullman paper (merge the node into its unique predecessor). It then also removes self-edges (transformation $T_1$ from the Hecht and Ullman paper). There is no need for a separate implementation of $T_1$.`consumeBy v u g` returns the graph that results when node v is consumed by node u in graph g. Both v and u are replaced with a new node u' with these properties:LABELS(u') = LABELS(u) " LABELS(v) SUCC(u') = SUCC(u)  SUCC(v) - { u } every node that previously points to u now points to u'It also returns a list of nodes in the result graph that are *newly* single-predecessor nodes.ghcSplit a given node. The node is replaced with a collection of replicas, one for each predecessor. After the split, every predecessor points to a unique replica.ghc;Does a list have more than one element? (in constant time).ghcFind a candidate for splitting by finding a node that has multiple predecessors.ghcUsing the algorithm of Hecht and Ullman (1972), collapse a graph into a single node, splitting nodes as needed. Record visualization events in monad m.ܛݛޛٛۛڛכ؛ߛٛڛۛכ؛ߛܛݛޛNone)*1VghcGraph' 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 themselvesghcBody abstracted over blockghc5A (possibly empty) collection of closed/closed blocksghcMaps 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 blockghcGives control-flow successors)None  E" 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.Types.TyThing.Ppr ghc;Stores the arguments in a type application as a list. See &Note [Suppressing invisible arguments].Ighc Header information only, not rhsIghc,Show only some sub-components. Specifically, []Print all sub-components.(n:ns)Print sub-component n with  ShowSub = ns!; elide other sub-components to ...6 May 14: the list is max 1 element long at the momentIghcEverything including GHC-internal information (used in --show-iface)IghcShow forall flag1Unconditionally show the forall quantifier with (I ) or when (I) the names used are free in the binder or when compiling with -fprint-explicit-foralls.IghcDo we want to suppress kind annotations on binders? See Note [Suppressing binder signatures]Jghc!See Note [Holes in IfaceCoercion]JghcThe various types of TyCons which have special, built-in syntax.Jghca regular tyconJghca tuple, e.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).Jghcan unboxed sum, e.g. (# a | b | c #)JghcA 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]JghcMake an J from an J.Jghc Build the B: from the binders and the result kind. Keep in sync with B in GHC.Core.TyCon.Jghc)Returns true for Type or (TYPE LiftedRep)ghc5Returns true for Constraint or (CONSTRAINT LiftedRep)Jghc Extract an   from an J.Jghc"Extract the variable name from an J.Jghc Extract an   from an J.Jghc"Extract the variable name from an J.ghcDefault B variables to  LiftedRep,   variables to  , and  Multiplicity variables to Many. For example: ($) :: forall (r :: GHC.Types.RuntimeRep) a (b :: TYPE r). (a -> b) -> a -> b Just :: forall (k :: Multiplicity) a. a % k -> Maybe a  turns in to,. ($) :: forall a (b :: *). (a -> b) -> a -> b  ! Just :: forall a . a -> Maybe a We do this to prevent RuntimeRep, Levity and Multiplicity variables from incurring a significant syntactic overhead in otherwise simple type signatures (e.g. ($)). See Note [Defaulting RuntimeRep variables] and #11549 for further discussion.ghc6The type ('BoxedRep 'Lifted), also known as LiftedRep.ghcThe type 'Lifted :: Levity'.Jghc The type 'Many :: Multiplicity'.JghcLike J, but always uses an explicit forall.Jghc;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!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  pprTyTcApp')Coercions (from J)ghcPretty-print an unboxed sum type. The sum should be saturated: as many visible arguments as the arity of the sum.)NB: this always strips off the invisible B arguments, even with `-fprint-explicit-runtime-reps` and `-fprint-explicit-kinds`.ghcPretty-print a tuple type (boxed tuple, constraint tuple, unboxed tuple). The tuple should be saturated: as many visible arguments as the arity of the tuple.)NB: this always strips off the invisible B arguments, even with `-fprint-explicit-runtime-reps` and `-fprint-explicit-kinds`.JghcPrints "(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 -> aJghcPrints a context or ()- if empty You give it the context precedenceghcif printing coercionsghc otherwiseghcdefault B/  variables?ghcdefault  Multiplicity variables?ghc*visibility of the first binder in the listJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJIIJJ JJ JJ IIIIIJIIJJJJIIJIIIIJJJJJJJJJJJJJJJ JJJJJJJJJJJJJ JJJ JJJJJJJJJJIIIIIIIIIIIIII IIIIIII''''''''JJ JJJJJJJJJJJJ IIIIIIIIIIIIIJJJJJJJJJIIIIIJ JJJJJJJJJJJJJ JJJ JJJ JJJJJJJJJJJ''''''''''III IIIIIIIIIJJJJJJJJJJJJIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ>None ghcdebugPprType is a simple pretty printer that prints a type without going through IfaceType. It does not format as prettily as the normal route, but it's much more direct, and that can be useful for debugging. E.g. with -dppr-debug it prints the kind on type-variable  occurrences1 which the normal route fundamentally cannot do.MghcPrint a user-level forall; see Note [When to print foralls] in GHC.Iface.Type.Nghc#Display all kind information (with -fprint-explicit-kinds) when the provided 9 argument is L. See 'Note [Kind arguments in error messages] in  GHC.Tc.Errors.NghcThis variant preserves any use of TYPE in a type, effectively locally setting -fprint-explicit-runtime-reps.NghcPretty 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 #MMMMMMMMMMNMMMMMMMMNN""""""!!#!!""""""MMMMMMMMMMMMMMMMMNNNMNone  \ghcPattern SynonymSee Note [Pattern synonym representation] See Note [Pattern synonym signature contexts]ghcArgument types\ghcBuild a new pattern synonym\ghcThe  of the \+, giving it a unique, rooted identification\ghc Should the \ be presented infix?\ghcArity of the pattern synonym\ghcIs this a 'vanilla' pattern synonym (no existentials, no provided constraints)?\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?ghc9Universally-quantified type variables and required dictsghc;Existentially-quantified type variables and provided dictsghcOriginal argumentsghcOriginal result typeghcMatcherghcBuilderghc/Names of fields for a record pattern synonym\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\None79 MghcTrie of [RoughMatchTc] Examples*  insert [OtherTc] 1 insert [OtherTc] 2 lookup [OtherTc] == [1,2] Mghc/The position only matches the specified KnownTcMghc1The position definitely doesn't match any KnownTcMghcThe position can match anythingMghc!Order of result is deterministic.MghcN.B. Returns a  for matches, which allows us to avoid rebuilding all of the lists we find in ,, which would otherwise be necessary due to  if we returned a list. We use a list for unifiers because the tail is computed lazily and we often only care about the first couple of potential unifiers. Constructing a bag forces the tail which performs much too much work.>See Note [Matching a RoughMap] See Note [Matches vs Unifiers]ghcPlace a M# in normal form, turning all empty s into "s. Necessary after removing items.MghcFilter all elements that might match a particular key with the given predicate.MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM:None 9 JAghc$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 : ty ~R 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'AghcIf it is the case that c :: (t1 ~ t2)i.e. the kind of c relates t1 and t2, then coercionKind c = Pair t1 t2.AghcMakes a coercion type from two types: the types whose equality is proven by the relevant AghcSlowly checks if the coercion is reflexive. Don't call this in a loop, as it walks over the entire coercion.AghcTests if this coercion is obviously reflexive. Guaranteed to work very quickly. Sometimes a coercion can be reflexive, but not obviously so. c.f. AAghcTests if this coercion is obviously a generalized reflexive coercion. Guaranteed to work very quickly.Aghc$Make a "coercion between coercions".AghcGiven co :: (a :: k) ~ (b :: k') produce  co' :: k ~ k'.Aghc!Make a nominal reflexive coercionAghc%Make a generalized reflexive coercionAghcInstantiates a .Aghc Create a new  by composing the two given s transitively. (co1 ; co2)Aghc(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.Aghc6Make a universal coercion between two arbitrary types.AghcMake a phantom coercion between two types. The coercion passed in must be a nominal coercion between the kinds of the types.AghcBuild a function  from two other s. That is, given  co1 :: a ~ b and  co2 :: x ~ y produce co :: (a -> x) ~ (b -> y) or (a => x) ~ (b => y), depending on the kind of a/b. This (most common) version takes a single FunTyFlag, which is used for both fco_afl and ftf_afr of the FunCoAghcMake 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]AghcApply 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.AghcApply a type constructor to a list of coercions. It is the caller's responsibility to get the roles correct on argument coercions.AghcMake a reflexive coercionNghc9The result of stepping in a normalisation function. See N.NghcNothing more to doNghc2Utter failure. The outer function should fail too.NghcWe stepped, yielding new bits; ^ ev is evidence; Usually a co :: old type ~ new typeNghcA function to check if we can reduce a type by one step. Used with N.NghcTests if this MCoercion is obviously generalized reflexive Guaranteed to work very quickly.Nghc'Compose two MCoercions via transitivityNghcGet the reverse of an NghcCast a type by an NghcLike N, but with an NghcThis 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]NghcExtract 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.)Nghc-Attempt to take a coercion application apart.NghcLike N(, but only returns Just for tyvar binderNghcLike N(, but only returns Just for covar binderNghcGiven a coercion `co :: (t1 :: TYPE r1) ~ (t2 :: TYPE r2)` produce a coercion `rep_co :: r1 ~ r2` But actually it is possible that co :: (t1 :: CONSTRAINT r1) ~ (t2 :: CONSTRAINT r2) or co :: (t1 :: TYPE r1) ~ (t2 :: CONSTRAINT r2) or co :: (t1 :: CONSTRAINT r1) ~ (t2 :: TYPE r2) See Note [mkRuntimeRepCo]NghcReturns the type coerced if this coercion is a generalized reflexive coercion. Guaranteed to work very quickly.NghcReturns 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. NNghcExtracts the coerced type from a reflexive coercion. This potentially walks over the entire coercion, so avoid doing this in a loop.Nghc*Make a representational reflexive coercionNghcApplies multiple  s to another  , from left to right. See also A.ghcLike A, but the inner coercion shouldn't be an obvious reflexive coercion. For example, it is guaranteed in N. The kind of the tycovar should be the left-hand kind of the kind coercion.NghcMake nested ForAllCosNghcMake a Coercion quantified over a type/coercion variable; the variable has the same type in both sides of the coercionghcLike N, but the inner coercion shouldn't be an obvious reflexive coercion. For example, it is guaranteed in N.NghcReturn the left-hand type of the axiom, when the axiom is instantiated at the types given.Nghc5Instantiate the left-hand side of an unbranched axiomNghc$Make a coercion from a coercion holeNghc Extract the nth field of a FunCoNghcGiven ty :: k1,  co :: k1 ~ k2 , produces co' :: ty ~r (ty |> co)NghcGiven r, ty :: k1, and co :: k1 ~N k2 , produces co' :: (ty |> co) ~r tyNghcGiven 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.NghcGiven 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]NghcLike , but panics if the change isn't a downgrade. See Note [Role twiddling functions]NghcConverts a coercion to be nominal, if possible. See Note [Role twiddling functions]Nghclike 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 NghcCreates a new coercion with both of its types casted by different casts !castCoercionKind2 g r t1 t2 h1 h2, where  g :: t1 ~r t2 , has type (t1 |> h1) ~r (t2 |> h2). h1 and h2 must be nominal.NghccastCoercionKind1 g r t1 t2 h = coercionKind g r t1 t2 h h That is, it's a specialised form of castCoercionKind, where the two kind coercions are identical castCoercionKind1 g r t1 t2 h, where  g :: t1 ~r t2 , has type (t1 |> h) ~r (t2 |> h). h/ must be nominal. See Note [castCoercionKind1]NghcCreates 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 castCoercionKind2 instead if t1, t2, and r are known beforehand.NghcMake a forall , where both types related by the coercion are quantified over the same variable.NghcIf `instNewTyCon_maybe T ts = Just (rep_ty, co)` then `co :: T ts ~R# rep_ty`-Checks for a newtype, and for being saturatedNghcTry 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 satisfiedNghcA N that unwraps newtypes, careful not to fall into a loop. If it would fall into a loop, it produces N.NghcA general function for normalising the top-level of a type. It continues to use the provided N until that function fails, and then this function returns. The roles of the coercions produced by the N must all be the same, which is the role returned from the call to N.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 happenNghcSyntactic equality of coercionsNghc Compare two s, with respect to an RnEnv2NghcliftCoSubst 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.Nghc,Extend a lifting context with a new mapping.NghcExtend a lifting context with a new mapping, and extend the in-scope setghcExtend a lifting context with existential-variable bindings. See Note [extendLiftingContextEx]Nghc+Erase the environments in a lifting contextNghcLike G , but works on a lifting contextghcThe "lifting" operation which substitutes coercions for type variables in a type to produce a coercion.For the inverse operation, see  liftCoMatchNghc,Is a var in the domain of a lifting context?Nghc"Apply "sym" to all coercions in a NNghc;Extract the underlying substitution from the LiftingContextNghcGet the ) from a NNghcApply A to multiple sNghcGet a coercion's kind and role.Nghc"Retrieve the role from a coercion.NghcCreates a primitive nominal type equality predicate. t1 ~# t2 Invariant: the types are not CoercionsNghcCreates a primitive representational type equality predicate. t1 ~R# t2 Invariant: the types are not CoercionsNghc3Makes a lifted equality predicate at the given roleNghcCreates a primitive nominal type equality predicate with an explicit (but homogeneous) kind: (~#) k k ty1 ty2NghcAssuming 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.NghcIs there a hetero-kind coercion hole in this type? (That is, a coercion hole with ch_hetero_kind=True.) See wrinkle (EIK2) of Note [Equalities with incompatible kinds] in GHC.Tc.Solver.EqualityNghc6Is there a hetero-kind coercion hole in this coercion?NghcSet the type of a D Aghc!role of the created coercion, "r"ghc:: phi1 ~N phi2ghc g1 :: phi1ghc g2 :: phi2ghc :: g1 ~r g2Aghcrole of the built coercion, "r"ghct1 :: k1ghct2 :: k2ghc :: t1 ~r t2Aghc :: t1 ~r t2ghc%:: s1 ~N s2, where s1 :: k1, s2 :: k2ghc:: t1 s1 ~r t2 s2Nghc multiplicityghcargumentghcresultghcOne of the above threeghc desired roleghc current roleghcmust be nominalNghc original LCghcnew variable to map...ghc...to this lifted versionNghc Original LCghcnew variable to map...ghcto this coercionghcoriginal lifting contextghcex. var / value pairsNghccoercion getterghccallbackghccoercion getterghccallbackghccoercion getterghccallbackNNNNNNNANNNANANNAANANNNANNNNNNNANNNNNNNANNNANNNANNNNNNNNNNNNNANNNNAANNANANNNANAANNNANNNNNNNAAAANAANNNNNAANNNAANANANNNANNNANNNNNNANNNNNNNNNNNNNNANNNNNNNNGFFFFFFMDDDGGGGGGGGGGGG!''NNNNNNNNDDDDDDDDDDDDDDDDG!!!' DDDDDDDDDDDDDDDDDD!!!' NNNNNAAAAAAANNNAANAANNNNNNNNNNAAANNAAANAAANNAANNANAAAANANNNNANNNNNNNNNNNNNNNANNNANNNNNNNNNNNNA!AANNANNNNNNNNNNNNNNNNN''NNNFFFFFFDGGGGGGGGGGGGNNNNNNNNNNNNNNNNNNNNNNNNNNAMNNNNNNGGNNNNNNNNNone Q Oghc>A choice of equality relation. This is separate from the type   because  3 does not define a (non-trivial) equality relation.OghcA predicate in the solver. The solver tries to prove Wanted predicates from Given ones.OghcA typeclass predicate.OghcA type equality predicate.OghcAn irreducible predicate.OghcA quantified predicate.8See Note [Quantified constraints] in GHC.Tc.Solver.SolveOghc3Get the equality relation relevant for a pred type.PghcDecomposes a predicate if it is an implicit parameter. Does not look in superclasses. See also [Local implicit parameters].PghcIs a  a  CallStack implicit parameter?(If so, return the name of the parameter.Pghc Is a type a  CallStack?+NNNNOOOOOOOOOOPPPOPOOOOPOPPPPPOOO(OOOOOOOO'+OOOOOO(OOOOOOOOOOONNNNOOOOOOOOOOPPPPPPPP'PPNone n"[ghcStores [ as well as a kind coercion.1Used when rewriting arguments to a type function f.Invariant: when the stored reductions are of the form co_i :: ty_i ~ xi_i, the kind coercion is of the form kco :: typeKind (f ty_1 ... ty_n) ~ typeKind (f xi_1 ... xi_n)The type function f depends on context.[ghcA collection of [:s where the coercions and the types are stored separately.Use [ to obtain [ from a list of [s.This datatype is used in [, mkClassPredRedns and [-, which expect separate types and coercions.Invariant: the two stored lists are of the same length, and the RHS type of each coercion is the corresponding type.[ghcA [ in which the  has   role.[ghcA [ in which the  has   role.[ghc!Stores a heterogeneous reduction.The stored kind coercion must relate the kinds of the stored reduction. That is, in "HetReduction (Reduction co xi) kco, we must have: / co :: ty ~ xi kco :: typeKind ty ~ typeKind xi[ghcA [4 is the result of an operation that rewrites a type ty_in. The [ includes the rewritten type ty_out and a  co such that co :: ty_in ~ ty_out, where the role of the coercion is determined by the context. That is, the LHS type of the coercion is the original type ty_in+, while its RHS type is the rewritten type ty_out.A Reduction is always homogeneous, unless it is wrapped inside a [-, which separately stores the kind coercion.See Note [The Reduction type].[ghc!Create a heterogeneous reduction.Pre-condition: the provided kind coercion (second argument) relates the kinds of the stored reduction. That is, if the coercion stored in the [ is of the form  co :: ty ~ xi4Then the kind coercion supplied must be of the form:  kco :: typeKind ty ~ typeKind xi[ghc%Homogenise a heterogeneous reduction.Given "HetReduction (Reduction co xi) kco, with 1 co :: ty ~ xi kco :: typeKind(ty) ~ typeKind(xi)'this returns the homogeneous reduction: hco :: ty ~ ( xi |> sym kco )[ghc Create a [ from a pair of a  and a 'Type.Pre-condition: the RHS type of the coercion matches the provided type (perhaps up to zonking).Use [! when you only have the coercion.[ghc4Get the original, unreduced type corresponding to a [.This is obtained by computing the LHS kind of the stored coercion, which may be slow.[ghcTurn a  into a [- by inspecting the RHS type of the coercion. Prefer using [ when you already know the RHS type of the coercion, to avoid computing it anew.[ghc1Downgrade the role of the coercion stored in the [.[ghc1Downgrade the role of the coercion stored in the [, from   to  .[ghc0Compose a reduction with a coercion on the left.Pre-condition: the provided coercion's RHS type must match the LHS type of the coercion that is stored in the reduction.[ghcThe reflexive reduction.[ghc Create a [ from a kind cast, in which the casted type is the rewritten type.Given ty :: k1, mco :: k1 ~ k2, produces the [ ty ~res_co~> (ty |> mco) at the given  .[ghc Create a [ from a kind cast, in which the casted type is the rewritten type.Given ty :: k1, mco :: k1 ~ k2, produces the [ ty ~res_co~> (ty |> mco) at the given  .[ghc Create a [ from a kind cast, in which the casted type is the original (non-rewritten) type.Given ty :: k1, mco :: k1 ~ k2, produces the [ (ty |> mco) ~res_co~> ty at the given  .[ghc Create a [ from a kind cast, in which the casted type is the original (non-rewritten) type.Given ty :: k1, mco :: k1 ~ k2, produces the [ (ty |> mco) ~res_co~> ty at the given  .[ghc Apply a cast to the result of a [.Given a [ ty1 ~co1~> (ty2 :: k2) and a kind coercion kco with LHS kind k2, produce a new [ ty1 ~co2~> ( ty2 |> kco ) of the given  ; (which must match the role of the coercion stored in the [ argument).[ghc Apply a cast to the result of a [ , using an .Given a [ ty1 ~co1~> (ty2 :: k2) and a kind coercion mco with LHS kind k2, produce a new [ ty1 ~co2~> ( ty2 |> mco ) of the given  ; (which must match the role of the coercion stored in the [ argument).[ghcApply a cast to a [1, casting both the original and the reduced type.Given cast_co and [  ty ~co~> xi, this function returns the [ ,(ty |> cast_co) ~return_co~> (xi |> cast_co) of the given  ; (which must match the role of the coercion stored in the [ argument).Pre-condition: the  passed in is the same as the LHS type of the coercion stored in the [.[ghcApply casts on both sides of a [ (of the given  ).Use [ when you want to cast both the original and reduced types in a [ using the same coercion.Pre-condition: the  passed in is the same as the LHS type of the coercion stored in the [.[ghc Apply one [ to another. Combines A and mkAppTy.[ghcCreate a function [. Combines A and D.[ghc Create a [& associated to a  type, from a kind [ and a body [. Combines A and .[ghc Create a [ of a quantified type from a [ of the body. Combines N and D.[ghc Create a [# from a coercion between coercions. Combines A and (.[ghcCreate a reflexive [ whose RHS is the given , with the specified  .[ghcCreate [. from individual lists of coercions and types.The lists should be of the same length, and the RHS type of each coercion should match the specified type in the other list.[ghc Combines N and H.[ghc TyConAppCo for [ s: combines A and (.[ghcReduce the arguments of a A .[ghcObtain [ from a list of [s by unzipping.[ghcheterogeneous reductionghc kind coercion[ghc desired roleghc current role[ghc original typeghccoercion to cast withghc'rewritten type, with rewriting coercion[ghc original typeghc!coercion to cast with on the leftghc'rewritten type, with rewriting coercionghc"coercion to cast with on the right[ghcmultiplicity reductionghcargument reductionghcresult reduction[ghckind reductionghcbody reduction[ghc!role of the created coercion, "r"ghcco :: phi1 ~N phi2ghc g1 :: phi1ghc g2 :: phi2ghcres_co :: g1 ~r g2)[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[)[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[None  {OghcA O is a O which allows us to distinguish between binding forms whose binders have different types. For example, if we are doing a L lookup on (x :: Int) -> ()), we should not pick up an entry in the L for (x :: Bool) -> (): we can disambiguate this by matching on the type (or kind, if this a binder in a type) of the binder.We also need to do the same for multiplicity! Which, since multiplicities are encoded simply as a , amounts to have a Trie for a pair of types. Tries of pairs are composition.Oghc DeBruijn a represents a modulo alpha-renaming. This is achieved by equipping the value with a O, which tracks an on-the-fly deBruijn numbering. This allows us to define an % instance for  DeBruijn a., even if this was not (easily) possible for a. Note: we purposely don't export the constructor. Make a helper function if you find yourself needing it.OghcA O doesn't do a kind-check. Thus, when lookup up (t |> g), you'll find entries inserted under (t), even if (g) is non-reflexive.Oghc TypeMap a is a map from  to a. If you are a client, this is the type you want. The keys in this map may have different kinds.ghc!An equality relation between two s (known below as t1 :: k2 and t2 :: k2)ghc t1 /= t2ghct1 ~ t2? and there are not casts in either, therefore we can conclude k1 ~ k2ghct1 ~ t2 yet one of the types contains a cast so they may differ in kindghc TypeMapX a is the base map from  DeBruijn Type to a, but without the L optimization. See Note [Computing equality on types] in GHC.Core.Type.Oghc TypeMapG a is a map from  DeBruijn Type to a. The extended key makes it suitable for recursive traversal, since it can track binders, but it is strictly internal to this module. If you are including a O inside another L, this is the type you want. Note that this lookup does not do a kind-check. Thus, all keys in this map must have the same kind. Also note that this map respects the distinction between Type and  Constraint, despite the fact that they are equivalent type synonyms in Core.ghcSqueeze out any synonyms, and change TyConApps to nested AppTys. Why the last one? See Note [Equality on AppTys] in GHC.Core.TypeWe also keep (Eq a => a) as a FunTy, distinct from ((->) (Eq a) a).Oghc Extend a O$ with a type in the given context. 8extendTypeMapWithScope m (mkDeBruijnContext [a,b,c]) t v is equivalent to #extendTypeMap m (forall a b c. t) v<, but allows reuse of the context over multiple insertions.OghcConstruct a deBruijn environment with the given variables in scope. e.g. mkDeBruijnEnv [a,b,c] constructs a context  forall a b c.OghcSynthesizes a  DeBruijn a from an a9, by assuming that there are no bound binders (an empty O<). This is usually what you want if there isn't already a O in scope.'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOLLLLLLLL'LLLLLLLLOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOONone 9 :OghcA regular type variableOghc#Declare that this type variable is apart from the type provided. That is, the type variable will never be instantiated to that type. See also Note [Binding when looking up instances] in GHC.Core.InstEnv.OghcWhy are two types O? O takes precedence: This is used (only) in Note [Infinitary substitution in lookup] in GHC.Core.InstEnv As of Feb 2022, we never differentiate between MARTypeFamily and MARTypeVsConstraint; it's really only MARInfinite that's interesting here.Oghcmatching e.g. F Int ~? BoolOghcmatching e.g. a ~? Maybe aOghcmatching Type ~? Constraint or the arrow types See Note [Type and Constraint are not apart] in GHC.Builtin.Types.PrimOghcSee Note [Unification result]Oghc2Some unification functions are parameterised by a O, which says whether or not to allow a certain unification to take place. A O takes the  involved along with the " it will potentially be bound to.It is possible for the variable to actually be a coercion variable (Note [Matching coercion variables]), but only when one-way matching. In this case, the  will be a D.OghctcMatchTy 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 I 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]OghcLike O, but allows the kinds of the types to differ, and thus matches them as well. See also Note [tcMatchTy vs tcMatchTyKi]OghcThis is similar to O, but extends a substitution See also Note [tcMatchTy vs tcMatchTyKi]OghcLike O but over a list of types. See also Note [tcMatchTy vs tcMatchTyKi]OghcLike O but over a list of types. See also Note [tcMatchTy vs tcMatchTyKi]OghcLike O, but extending a substitution See also Note [tcMatchTy vs tcMatchTyKi]OghcLike O, but extending a substitution See also Note [tcMatchTy vs tcMatchTyKi]ghc=Same as tc_match_tys_x, but starts with an empty substitutionghc Worker for O and OOghcThis one is called from the expression matcher, which already has a MatchEnv in handOghcAllow binding only for any variable in the set. Variables may be bound to any type. Used when doing simple matching; e.g. can we find a substitution S = [a :-> t1, b :-> t2] such that S( Maybe (a, b->Int ) = Maybe (Bool, Char -> Int) Oghc-Allow the binding of any variable to any typeOghcGiven a list of pairs of types, are any two members of a pair surely apart, even after arbitrary type function evaluation and substitution?OghcSimple unification of two types; all type variables are bindable Precondition: the kinds are already equalOghcLike O, but also unifies the kindsOghcUnify two types, treating type family applications as possibly unifying with anything and looking through injective type family applications. Precondition: kinds are the sameOghcLike O but also unifies the kindsOghctcUnifyTysFG bind_tv tys1 tys2! attempts to find a substitution s% (whose domain elements all respond O 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 MaybeApartOghcO is sort of inverse to N. In particular, if  liftCoMatch vars ty co == Just s, then liftCoSubst s ty == co , where == there means that the result of N 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 I. That is, it's possible that this will succeed for t1 and fail for t2, even when t1 I 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 O. OghcSubstitution to extendghcTemplateghcTargetOghcTemplateghcTargetghcOne-shot; in principle the template variables could be free in the targetOghcTemplateghcTargetghcOne-shot substitutionOghcSubstitution to extendghcTemplateghcTargetghcOne-shot substitutionOghcSubstitution to extendghcTemplateghcTargetghcOne-shot substitutionghc match kinds?ghc match kinds?Oghctemplate variablesghctype substitution to extendghcTemplateghcTargetOghcTrue  =" do two-way unification; False  =: do one-way matching. See end of sec 5.2 from the paperOghcA regular one-shot (idempotent) substitution that unifies the erased types. See comments for OghcTrue  = unify; False  = matchghcTrue  = doing an injectivity checkghcTrue  = treat the kinds as wellghcsubstitution to extendghcambient helpful infoghcincoming substghcty, type to matchghc+co :: lty ~r rty, coercion to match againstghc :: kind(lsubst(ty)) ~N kind(lty)ghc :: kind(rsubst(ty)) ~N kind(rty)ghcJust env ==> liftCoSubst Nominal env ty == co, modulo roles. Also: Just env ==> lsubst(ty) == lty and rsubst(ty) == rty, where lsubst = lcSubstLeft(env) and rsubst = lcSubstRight(env)#OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO#OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOtNone7 7#ghcAn # is a tyvar/type pair representing an equality made in rejigging a GADT constructor#ghcData Constructor Representation See Note [Data constructor workers and wrappers]#ghcA data constructor : , ,#ghcReturns an Id which looks like the Haskell-source constructor by using the wrapper if it exists (see P') and failing over to the worker (see #)#ghcIs this data constructor in a "type data" declaration? See Note [Type data declarations] in GHC.Rename.Module.#ghcThe "full signature" of the # returns, in order:1) The result of P2) The result of #3) The non-dependent GADT equalities. Dependent GADT equalities are implied by coercion variables in return value (2).4) The other constraints of the data constructor type, excluding GADT equalities&5) The original argument types to the # (i.e. before any change of the representation of the type) with linearity annotations#6) The original result type of the ##ghcThe "stupid theta" of the # , such as  data Eq a in: data Eq a => T a = ...See Note [The stupid context].#ghcReturns just the instantiated value argument types of a #, (excluding dictionary args)#ghc-The labels for the fields of this particular ##ghc*Source-level arity of the data constructor#ghcs for the type variables of the constructor, in the order the user wrote them#ghcThe type variables of the constructor, in the order the user wrote them#ghcThe existentially-quantified type/coercion variables of the constructor including dependent (kind-) GADT equalities#ghcThe type constructor that we are building via this data constructor#ghcGet the Id of the # worker: a function that is the "actual" constructor and has no top level binding in the program. The type may be different from the obvious one written in the source program. Panics if there is no such  for this #$ghcThe  of the #+, giving it a unique, rooted identificationPghcHaskell Implementation BangBangs of data constructor arguments as generated by the compiler after consulting HsSrcBang, flags, etc.Pghc(Lazy field, or one with an unlifted typePghc$Strict but not unpacked field True  = we could have unpacked, but opted not to because of -O0. See Note [Detecting useless UNPACK pragmas]Pghc;Strict and unpacked field co :: arg-ty ~ product-ty HsBangPghcHaskell Source BangBangs on data constructor arguments as the user wrote them in the source code.(HsSrcBang _ SrcUnpack SrcLazy) and #(HsSrcBang _ SrcUnpack NoSrcStrict) (without StrictData) makes no sense, we emit a warning (in checkValidDataCon) and treat it like !(HsSrcBang _ NoSrcUnpack SrcLazy)ghcTag, used for ordering #sPghcMake a non-dependent #PghcCompare strictness annotationsPghcBuild a new data constructorPghcThe tag used for ordering #sPghcThe original type constructor used in the definition of this data constructor. In case of a data family instance, that will be the family type constructor.PghcThe representation type of the data constructor, i.e. the sort type that will represent values of this type at runtimePghc Should the # be presented infix?Pghc b -> T [a] rather than: 3T :: forall a c. forall b. (c~[a]) => a -> b -> T cThe type variables are quantified in the order that the user wrote them. See )Note [DataCon user type variable binders].NB: If the constructor is part of a data instance, the result type mentions the family tycon, not the internal one.PghcFinds the instantiated types of the arguments required to construct a # representation NB: these INCLUDE any dictionary args but EXCLUDE the data-declaration context, which is discarded It's all post-flattening etc; this is a representation typePghcGiven a data constructor dc with n( universally quantified type variables a_{1}, a_{2}, ..., a_{n}&, and given a list of argument types dc_args of length m where m <= n, then: dataConInstUnivs dc dc_args  Will return: ?[dc_arg_{1}, dc_arg_{2}, ..., dc_arg_{m}, a_{m+1}, ..., a_{n}] ;That is, return the list of universal type variables with a_{1}, a_{2}, ..., a_{m} instantiated with  dc_arg_{1},  dc_arg_{2}, ...,  dc_arg_{m}. It is possible for m to be less than n, in which case the remaining n - m elements will simply be universal type variables (with their kinds possibly instantiated). Examples:Given the data constructor D :: forall a b. Foo a b and dc_args  [Int, Bool], then dataConInstUnivs D dc_args will return  [Int, Bool].Given the data constructor D :: forall a b. Foo a b and dc_args [Int], then @dataConInstUnivs D dc_args will return [Int, b].Given the data constructor E :: forall k (a :: k). Bar k a and dc_args [Type], then @dataConInstUnivs D dc_args will return [Type, (a :: Type)].This is primarily used in GHC.Tc.Deriv.* in service of instantiating data constructors' field types. See 2Note [Instantiating field types in stock deriving] for a notable example of this.PghcReturns the argument types of the wrapper, excluding all dictionary arguments and without substituting for any type variablesPghcReturns constraints in the wrapper type, other than those in the dataConEqSpecPghcReturns the arg types of the worker, including *all* non-dependent evidence, after any flattening has been done and without substituting for any type variablesPghc The string package:module.name identifying a constructor, which is attached to its info table and used by the GHCi debugger and the heap profilerPghcVanilla #8s are those that are nice boring Haskell 98 constructorsPghc Is this the # of a newtype?PghcShould this DataCon be allowed in a type even without -XDataKinds? Currently, only Lifted & UnliftedPghcWere the type variables of the data con written in a different order than the regular order (universal tyvars followed by existential tyvars)?This is not a cheap test, so we minimize its use in GHC as much as possible. Currently, its only call site in the GHC codebase is in  mkDataConRep in MkId , and so P is only called at most once during a data constructor's lifetime.PghcExtract the type constructor, type argument, data constructor and it's representation4 argument types from a type if it is a product type.Precisely, we return Just" for any data type that is all of:$Concrete (i.e. constructors visible)Single-constructor... which has no existentialsWhether the type is a data type or a newtype.Pghc"Is the constructor declared infix?ghc#TyConRepName for the promoted TyConghc(Strictness/unpack annotations, from userghcField labels for the constructor, if it is a record, otherwise emptyghc Universals.ghc Existentials.ghc User-written '/s. These must be Inferred/Specified. See Note [TyVarBinders in DataCons]ghcGADT equalities ghc0Theta-type occurring before the arguments proper ghcOriginal argument types ghcOriginal result type ghcSee comments on 8 ghcRepresentation type constructorghcConstructor tagghc:The "stupid theta", context of the data declaration e.g. data Eq a => T a ...ghc Worker IdghcRepresentationPghcA datacon with no existentials or equality constraints However, it can have a dcTheta (notably it can be a class dictionary, with superclasses)ghcInstantiated at these typesPghcA product type, perhapsPPPPPP##PP#PPPP#PPP$PPPPPPPPPP#P#PPP#PP##P##PPPPPPPPPPPPPPPPP##PPPP#PP!#P#PPPPPPP#PPPPPPPPP ##PPPPPPP PPPPPPPPP P#PPPPP P!PP#$PPP#PPPPP#P##P#PPPP#PPP#PPP#PP##PPPPPPPPPPP#PPP#PPPPPPPPPPP#None/167 D ghcIs a TyCon a promoted data constructor or just a normal type constructor?PghcAmbiguous Field OccurrenceRepresents an *occurrence* of a field that is potentially ambiguous after the renamer, with the ambiguity resolved by the typechecker. We always store the + that the user originally wrote, and store the selector function after the renamer (for unambiguous occurrences) or the typechecker (for ambiguous occurrences).+See Note [HsRecField and HsRecUpdField] in  GHC.Hs.Pat". See Note [Located RdrNames] in  GHC.Hs.Expr.Pghc!Located Ambiguous Field OccurencePghcField OccurrenceRepresents an *occurrence* of a field. This may or may not be a binding occurrence (e.g. this type is used in P and RecordPatSynField' which bind their fields, but also in  HsRecField5 for record construction and patterns, which do not).We store both the + the user originally wrote, and after the renamer we use the extension field to store the selector function.PghcLocated Field OccurrencePghc/Arguments in an expression/type after splittingPghcDescribes the arguments to a data constructor. This is a common representation for several constructor-related concepts, including:The arguments in a Haskell98-style constructor declaration (see HsConDeclH98Details in  GHC.Hs.Decls).)The arguments in constructor patterns in case/function definitions (see HsConPatDetails in  GHC.Hs.Pat).The left-hand side arguments in a pattern synonym binding (see HsPatSynDetails in  GHC.Hs.Binds).One notable exception is the arguments in a GADT constructor, which uses a separate data type entirely (see HsConDeclGADTDetails in  GHC.Hs.Decls). This is because GADT constructors cannot be declared with infix syntax, unlike the concepts above (#18844).PghcConstructor Declaration FieldPghc : QghcSee Note [ConDeclField pass]Qghc%Located Constructor Declaration FieldQghcHaskell Tuple SortQghcThis is used in the syntax. In constructor declaration. It must keep the arrow representation.Qghc2Denotes the type of arrows in the surface languageQghca -> b or a C bQghca %1 -> b or a %1 C b, or a E bQghca %m -> b or a %m C b (very much including `a %Many -> b`! This is how the programmer wrote it). It is stored as an Q9 so as to preserve the syntax as written in the program.QghcHaskell Type LiteralQghc Haskell TypeQghc :  , ,= For details on above see Note [exact print annotations] in GHC.Parser.AnnotationQghc : NoneQghc : NoneQghc : ,Qghc :  '[' ,  ']'Qghc :   '(' or '(#' ,   ')' or '#)'Qghc :  '(#' ,  '#)'@Qghc : NoneQghc :  '(' ,  ')'Qghc  (?x :: ty) : Qghc : NoneQghc  (ty :: kind) :  '(' , , ')'Qghc :  '$(' ,  ')'Qghc : NoneQghc :  '{-# UNPACK' or '{-# NOUNPACK' ,  '#-}'  '!'Qghc :  '{' ,  '}'Qghc :  "'[" ,  ']'Qghc :  "'(" ,  ')'Qghc : NoneQghc : NoneQghcHaskell Type Variable Binder The flag annotates the binder. It is  in places where explicit specificity is allowed (e.g. x :: forall {a} b. ...) or () in other places.Qghc :  , , QghcThese names are used early on to store the names of implicit parameters. They completely disappear after type-checking.Qghc A type signature that obeys the forall&-or-nothing rule. In other words, an Q that uses an Q to represent its outermost type variable quantification. See #Note [Representing type signatures].Qghc'Located Haskell Signature Wildcard TypeQghcLocated Haskell Wildcard TypeQghcLocated Haskell Signature TypeQghcTypes that can appear in pattern signatures, as well as the signatures for term-level binders in RULES. See ,Note [Pattern signature binders and scoping].This is very similar to  HsSigWcType., but with slightly different semantics: see Note [HsType binders] . See also #Note [The wildcard story for types].QghcMain payload (the type itself)QghcAfter renamer: HsPSRnQghcHaskell Wildcard BindersQghc.Used for type-family instance equations, e.g., 'type instance forall a. F [a] = Tree a The notion of specificity is irrelevant in type family equations, so we use () for the Q flag.QghcUsed for signatures, e.g., f :: forall a {b}. blah We use  for the Q flag to allow distinguishing between specified and inferred type variables.Qghc6The outermost type variables in a type that obeys the forall-or-nothing rule. See Note [forall-or-nothing rule].QghcImplicit forall, e.g., f :: a -> b -> bQghcExplicit forall, e.g., f :: forall a b. a -> b -> bQghc)Located Haskell Quantified Type VariablesQghc$Located Haskell Type Variable BinderQghc The type variable binders in an Q . See also 1Note [Variable Specificity and Forall Visibility] in GHC.Tc.Gen.HsType.Qghc A visible forall (e.g., forall a -> {...}). These do not have any notion of specificity, so we use () as a placeholder value.Qghc An invisible forall (e.g., forall a {b} c. {...}), where each binder has a .QghcLocated Haskell KindQghc Haskell KindQghcLocated Haskell TypeQghcHaskell ContextQghcLocated Haskell ContextQghc Bang TypeIn the parser, strictness and packedness annotations bind more tightly than docstrings. This means that when consuming a Q (and looking for Q8) we must be ready to peer behind a potential layer of Q . See #15206 for motivation and  getBangType for an example.QghcLocated Bang TypeQghc Does this Q' come with an explicit kind annotation?QghcAn empty list that can be used to indicate that there are no type arguments allowed in cases where HsConDetails is applied to Void.Qghc May have  :  when in a listQghc : Qghc May have  :  when in a listQghc :  For details on above see Note [exact print annotations] in GHC.Parser.AnnotationQQQQQQQQ QQPPPPPPQPPPPQQPPPPPPPPPPQQQQQQQPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQPQQPQQQQQQQQQQQPQ QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQPPPPPQQPP PPPQQPPQPPPPQQPPPPPPPPPPPQQQQqNone/179:;  ghcPattern : QghcHaskell Field Binding : ,For details on above see Note [exact print annotations] in GHC.Parser.AnnotationQghcNote [Punning]Qghc!Filled in by renamer when punningRghcHaskell Record Update FieldRghcHaskell Record FieldRghc#Located Haskell Record Update FieldRghcLocated Haskell Record FieldRghcLocated Haskell Record FieldRghcNewtype to be able to have a specific XRec instance for the Int in RRghcHaskell Record FieldsHsRecFields is used only for patterns and expressions (not data type declarations)Rghc#Haskell Constructor Pattern DetailsRghc9Type argument in a data constructor pattern, e.g. the @a in f (Just @a x) = ....RghcWildcard Pattern The sole reason for a type on a WildPat is to support hsPatType :: Pat Id -> TypeRghcVariable PatternRghcLazy Pattern ^ -  : RghcAs pattern ^ -  : RghcBang pattern ^ -  : RghcSyntactic List :  '['&,  ']'RghcTuple sub-patterns :  '(' or '(#',  ')' or '#)'RghcAnonymous sum pattern :  '(#',  '#)'RghcConstructor PatternRghc : Rghc :  '$('  ')'RghcLiteral Pattern Used for *non-overloaded* literal patterns: Int#, Char#, Int, Char, String, etc.RghcNatural Pattern :  +Rghc n+k patternRghc : RghcParenthesised patternghc :  '('&,  ')'Rghc View PatternRghc&Splice Pattern (Includes quasi-quotes)RghcPattern with a type signature0RRRRRRRRQQRRQQRRRRRRRRR RRRRRRRRRRRRRRRRRRRRRRR0 RRRRRRRRRRRRRRRRRRRR RRRRRRRRRQQQRRQRRRRRRRRRRRNone(/ 1Rghc!Haskell Pattern Synonym DirectionRghcRecord Pattern Synonym FieldRghc=Filled in by renamer, the name used internally by the patternRghc'Field label visible in rest of the fileRghcHaskell Pattern Synonym DetailsRghcFixity SignatureRghcLocated Fixity SignatureRghcSignatures and pragmasRghcAn ordinary type signature f :: Num a => a -> aAfter renaming, this list of Names contains the named wildcards brought into scope by this signature. For a signature _ -> _a -> Bool., the renamer will leave the unnamed wildcard _$ untouched, and the named wildcard _a is then replaced with fresh meta vars in the type. Their names are stored in the type signature that brought them into scope, in this third field to be more specific. :  , Rghc A pattern synonym type signature ,pattern Single :: () => (Show a) => a -> [a] :  , , ,RghcA signature for a class method False: ordinary class-method signature True: generic-default class method signature e.g. class C a where op :: a -> a -- Ordinary default op :: Eq a => a -> a -- Generic default No wildcards allowed here :  , RghcAn ordinary fixity declaration  infixl 8 *** :  , RghcAn inline pragma {#- INLINE f #-} :   '{-# INLINE' and '[' , , , , , RghcA specialisation pragma "{-# SPECIALISE f :: Int -> Int #-} : ,  '{-# SPECIALISE' and '[', , ,  ']' and '#-}', Rghc6A specialisation pragma for instance declarations only ${-# SPECIALISE instance Eq [Int] #-}(Class tys); should be a specialisation of the current instance declaration : , ,Rghc$A minimal complete definition pragma ${-# MINIMAL a | (b, c | (d | e)) #-} : , ,, Rghc+A "set cost centre" pragma for declarations {-# SCC funName #-}or &{-# SCC funName "cost_centre_name" #-}RghcA complete match pragma {-# COMPLETE C, D [:: T] #-}Used to inform the pattern match checker about additional complete matchings which, for example, arise from pattern synonym definitions.RghcLocated SignatureRghcImplicit parameter bindings. : Rghc"Located Implicit Parameter Binding May have  :  when in a listRghc#Haskell Implicit Parameter BindingsRghc : , ,, , '{',  '}',Pattern Synonym bindingRghcDirectionalityRghcRight-hand sideRghcFormal parameter namesRghcName of the pattern synonymRghc1Haskell Binding with separate Left and Right id'sRghcFunction-like Binding'FunBind is used for both functions f x = e) and variables  f = x -> e) and strict variables  !x = x + 1/Reason 1: Special case for type inference: see .Reason 2: Instance decls can only have FunBinds, which is convenient. If you change this, you'll need to change e.g. rnMethodBinds'But note that the form f :: a->a = ... parses as a pattern binding, just like (f :: a -> a) = ... 6Strict bindings have their strictness recorded in the  SrcStrictness of their  MatchContext. See Note [FunBind vs PatBind] for details about the relationship between FunBind and PatBind.s), attached to each element of fun_matches,, ,,RghcPattern BindingThe pattern is never a simple variable; That case is done by FunBind. See Note [FunBind vs PatBind] for details about the relationship between FunBind and PatBind.RghcVariable BindingDictionary binding and suchlike. All VarBinds are introduced by the type checkerRghcPatterns Synonym BindingRghc The payloadRghcLocated only for consistencyRghcLocated Haskell Binding with separate Left and Right identifier typesRghcLocated Haskell Bindings with separate Left and Right identifier typesRghcHaskell BindingRghcLocated Haskell BindingsRghcLocated Haskell BindingRghcHaskell Value bindings with separate Left and Right identifier types (not implicit parameters) Used for both top level and nested bindings May contain pattern synonym bindingsRghcValue Bindings InBefore renaming RHS; idR is always RdrName Not dependency analysed Recursive by defaultRghcValue Bindings OutAfter renaming RHS; idR can be Name or Id Dependency analysed, later bindings in the list may depend on earlier ones.RghcHaskell Value BindingsRghcHaskell Local Bindings with separate Left and Right identifier typesBindings in a 'let' expression or a 'where' clauseRghcHaskell Value BindingsRghc#Haskell Implicit Parameter BindingsRghcEmpty Local BindingsRghcLocated Haskell local bindingsRghcHaskell Local BindingsRghc :  , , ,   '{', '}'SRRSRSRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSRRRRRRRRRNone(/1679:; 4SghcRole Annotation DeclarationSghc :  , Sghc#Located Role Annotation DeclarationSghcAnnotation ProvenanceSghcAnnotation DeclarationSghc :  ,   SghcLocated Annotation DeclarationSghcWarning pragma DeclarationSghc"Located Warning pragma DeclarationSghcWarning pragma DeclarationsSghcLocated Warning DeclarationsSghc!Documentation comment DeclarationSghc)Located Documentation comment DeclarationSghc Rule BinderSghc : , ,SghcLocated Rule BinderSghcRule DeclarationSghc : , ,  ,  , , , ,SghcForall'd term vars, before typechecking; after typechecking this includes all forall'd varsSghcForall'd type varsSghcNote [Pragma source text] in GHC.Types.SourceTextSghc-After renamer, free-vars from the LHS and RHSSghcLocated Rule DeclarationSghcRule DeclarationsSghcLocated Rule DeclarationsSghcForeign DeclarationSghc :  , , , SghcLocated Foreign DeclarationSghcDefault DeclarationSghcs :  , ,SghcLocated Default DeclarationSghcWhich technique the user explicitly requested when deriving an instance.SghcGHC's "standard" strategy, which is to implement a custom instance for the data type. This only works for certain types that GHC knows about (e.g., %, 1, * when -XDeriveFunctor is enabled, etc.)Sghc -XDeriveAnyClassSghc -XGeneralizedNewtypeDerivingSghc  -XDerivingViaSghcA Located S.Sghc+Stand-alone 'deriving instance' declarationSghc :  , ,  , ,  , ,SghcThe instance type to derive. It uses an Q9 because the context is allowed to be a single wildcard: !deriving instance _ => Eq (Foo a)4Which signifies that the context should be inferred.Sghc3Located stand-alone 'deriving instance' declarationSghcInstance DeclarationSghcLocated Instance DeclarationSghcClass Instance Declaration -  :  ,  , ,, For details on above see Note [exact print annotations] in GHC.Parser.AnnotationSghc : &, ,Sghc"Located Class Instance DeclarationSghcFamily EquationOne equation in a type family instance declaration, data family instance declaration, or type family default. See Note [Type family instance declarations in HsSyn] See Note [Family instance declaration binders]Sghc : SghcFixity used in the declarationSghcOptional quantified type varsSghc Data Family Instance DeclarationSghc :  , , ,  , , Sghc(Located Data Family Instance DeclarationTghc Type Family Instance DeclarationTghc :  , ,Tghc(Located Type Family Instance DeclarationTghc)Located type family default declarations.Tghc MkT a b MkT :: forall b a. Eq a => MkT a b data T b where MkT1 :: Int -> T Int data T = Int MkT, Int | MkT2 data T a where Int MkT Int :: T Int s : , ,, ,, ,, ,data Constructor DeclarationTghcA possible Haddock comment.Tghc Result typeTghcArguments; never infixTghcUser-written context (if any)TghcThe outermost type variable binders, be they explicit or implicit. The   is used to anchor exact print annotations, AnnForall and AnnDot.TghcArguments; can be infixTghcExistentials onlyTghcTrue  = explicit user-written forall e.g. data T a = forall b. MkT b (b->a) con_ex_tvs = {b} False => con_ex_tvs is emptyTghc$Located data Constructor DeclarationTghc#Whether a data-type declaration is data or newtype, and its constructors.Tghc5When we only care whether a data-type declaration is `data` or  `newtype`", but not what constructors it hasTghc newtype Blah ...Tghc  data Blah ...Tghc!Located Standalone Kind SignatureTghc The types mentioned in a single deriving& clause. This can come in two forms, T or T, depending on whether the types are surrounded by enclosing parentheses or not. These parentheses are semantically different than Q. For example,  deriving () means "derive zero classes" rather than "derive an instance of the 0-tuple".T use Q because deriving clauses can mention type variables that aren't bound by the datatype, e.g. data T b = ... deriving (C [a])&should produce a derived instance for  C [a] (T b).TghcA deriving clause with a single type. Moreover, that type can only be a type constructor without any arguments. Example:  deriving EqTghcA deriving clause with a comma-separated list of types, surrounded by enclosing parentheses. Example: deriving (Eq, C a)Tghc A single deriving clause of a data declaration. : ,  , ,  , ,TghcThe types to derive.Tghc;The user-specified strategy (if any) to use when deriving T.TghcHaskell Deriving clauseTghcHaskell Data type DefinitionTghc:Declares a data type or newtype, giving its constructors  data/newtype T a =  constrs! data/newtype instance T [a] =  constrs Tghc Optional  'deriving' clauseTghcData constructorsFor data T a = T1 | T2 a the T s all have T. For data T a where { T1 :: T a } the  LConDecls all have T.TghcOptional kind signature.(Just k) for a GADT-style data, or  data instance decl, with explicit kind sigAlways Nothing for H98-syntax declsTghcContextTghcJ if we're in an hs-boot file and the user said "type family Foo x where .."TghcIf the user supplied an injectivity annotation it is represented using InjectivityAnn. At the moment this is a single injectivity condition - see Note [Injectivity annotation]. `Located name` stores the LHS of injectivity condition. `[Located name]` stores the RHS of injectivity condition. Example:.type family Foo a b c = r | r -> a c where ...,This will be represented as "InjectivityAnn r [a, c]"Tghc : , TghcLocated Injectivity AnnotationTghctype Family DeclarationTghc : , , , , , , , , , TghcLocated type Family DeclarationTghctype Family Result SignatureTghc :Tghc : ,, Tghc : ,, , Tghc$Located type Family Result SignatureTghcType or Class GroupTghcA type or class declaration.Tghc type/data family T :: *->* : , , ,, ,, ,, ,, Tghctype declaration : , ,Tghcdata declaration : , , , , ,Tghc :  , , , The tcdFDs will have ,   For details on above see Note [exact print annotations] in GHC.Parser.AnnotationTghcRHS of type declarationTghcFixity used in the declarationTghcType variables; for an associated type these include outer bindersTghcType constructorTghcPost renamer, FVsTghcPost renamer, CUSK flag, FVsTghc Haddock docsTghcAssociated type defaultsTghcAssociated types;TghcDefault methodsTghcMethods' signaturesTghcFunctional depsTghc Context...Tghc7Explicit or virtual braces See Note [Class LayoutInfo]TghcPost renamer, FVsTghc&Located Declaration of a Type or ClassUghcA splice can appear with various decorations wrapped around it. This data type captures explicitly how it was originally written, for use in the pretty printer.Ughc$spliceUghc bare spliceUghcSplice DeclarationUghcLocated Splice DeclarationUghc Haskell GroupA U is categorised into a U" before being fed to the renamer.UghcA Haskell DeclarationUghcType or Class DeclarationUghcInstance declarationUghcDeriving declarationUghcValue declarationUghcSignature declarationUghcStandalone kind signatureUghc 'default' declarationUghcForeign declarationUghcWarning declarationUghcAnnotation declarationUghcRule declarationUghc+Splice declaration (Includes quasi-quotes)Ughc"Documentation comment declarationUghcRole annotation declarationUghcTrue  = argument is a data/newtype declaration.Ughc!type or type instance declarationUghc type classUghctype/data family declarationUghctype family declarationUghcopen type family infoUghcclosed type family infoUghcdata family declarationUghcAre the constructors within a  type data declaration? See Note [Type data declarations] in GHC.Rename.Module.Ughc)Retrieve the first data constructor in a T (if one exists).Tghc May have  :  when in a listTghc May have  : # when in a GADT constructor listTghc The optional deriving clauses of a data declaration. Clauses is plural because one can specify multiple deriving clauses using the -XDerivingStrategies language extension. The list of Ts corresponds to exactly what the user requested to derive, in order. If no deriving clauses were specified, the list is empty.UghcWhen in a list this may have : Ughc Just cls  =* this is an associated family of class clsUUUUUUUUUUUUUUUUUUUUUSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTSSSSSSTTTTSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUTTTTTTTUUUUUUUUUUUUUUUTTTTSSSSSSSSSSSSSTSSTSSSTTSUTTTSSSSSUTTTTTSSTTTSSSSSSSSSSSSSSSSSSSSSSUUUUUUTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTSSSSSSSSUUUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUTTTTTTTTTTTTSSSSSSSSSSSSTTTTUTTTTTTTTSSSSSSSSSSSSSTTTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSUSSSSUUUUUUUSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTSSSSSSUSSSSSSSSSSSSSSSSSSUSSSSTTTTTTTTTTUUUUUUUUUUUUUUUUrNone )*/17 hu ghcLocated Haskell Expression ghcSyntax ExpressionSyntaxExpr is represents the function used in interpreting rebindable syntax. In the parser, we have no information to supply; in the renamer, we have the name of the function (but see Note [Monad fail : Rebindable syntax, overloaded strings] for a wrinkle) and in the type-checker we have a more elaborate structure  SyntaxExprTc.In some contexts, rebindable syntax is not implemented, and so we have constructors to represent that possibility in both the renamer and typechecker instantiations.E.g. (>>=)4 is filled in before the renamer by the appropriate Name for (>>=), and then instantiated by the type checker with its type args etc ghcGuarded Right-Hand Sides8GRHSs are used both for pattern bindings and for Matches :  , , , , , ghcHaskell Splice ghcA Haskell expression.Ughc  ModuleName. do { ... }Ughc  ModuleName.'mdo { ... } ie recursive do-expressionUghc&A command-line Stmt in GHCi pat <- rhsUghcHaskell arrow match context.UghcA proc expressionUghc(A case alternative inside arrow notationUghc1A case or cases alternative inside arrow notationUghcAn arrow kappa abstractionUghcHaskell Statement Context.Ughc1Context for HsDo (do-notation and comprehensions)Ughc!Pattern guard for specified thingUghcA branch of a parallel stmtUghcA branch of a transform stmtUghc'do-notation in an arrow-command contextUghcHaskell Match ContextContext of a pattern match. This is more subtle than it would seem. See Note [FunBind vs PatBind].Ughc8A pattern matching on an argument of a function bindingUghcPatterns of a lambdaUghc)Patterns and guards in a case alternativeUghcPatterns and guards in case and casesUghc$Guards of a multi-way if alternativeUghc%A pattern match inside arrow notationUghc"A pattern binding eg [y] <- e = eUghcGuards of pattern bindings, e.g., (Just b) | Just _ <- x = e | otherwise = e'UghcRecord update [used only in GHC.HsToCore.Expr to tell matchWrapper what sort of runtime error message to generate]Ughc=Pattern of a do-stmt, list comprehension, pattern guard, etcUghc!A Template Haskell pattern spliceUghc1A Template Haskell pattern quotation [p| (a,b) |]UghcA pattern synonym declarationUghcwas f' banged? See Note [FunBind vs PatBind]Ughc fixing of fUghcfunction binder of f See Note [mc_fun field of FunRhs] See #20415 for a long discussion about this field and why it uses NoGhcTc.UghcArithmetic Sequence InformationUghc1Haskell (Untyped) Quote = Expr + Pat + Type + VarUghcApplicative ArgumentUghcTrue  = was a BodyStmt, False  =1 was a BindStmt. See Note [Applicative BodyStmt]Vghc!The fail operator, after renamingThe fail operator is needed if this is a BindStmt where the pattern can fail. E.g.: (Just a) <- stmt The fail operator will be invoked if the pattern match fails. It is also used for guards in MonadComprehensions. The fail operator is Nothing if the pattern match can't failVghc,context of the do expression, used in pprArgVghcThe fail operatorThis is used for `.. <-` "bind statements" in do notation, including non-monadic "binds" in applicative.The fail operator is 'Just expr' if it potentially fail monadically. if the pattern match cannot fail, or shouldn't fail monadically (regular incomplete pattern exception), it is J.See Note [Monad fail : Rebindable syntax, overloaded strings] for the type of expression in the K case, and why it is so.See Note [Failing pattern matches in Stmts] for which contexts for 'BindStmt3's should use the monadic fail and which shouldn't.VghcParenthesised Statement BlockVghc>Exact print annotations when in qualifier lists or guards -  :  , , , , , ,VghcV2 represents an applicative expression built with <$> and <*>. It is generated by the renamer, and is desugared into the appropriate applicative expression by the desugarer, but it is intended to be invisible in error messages..For full details, see Note [ApplicativeDo] in GHC.Rename.ExprVghc :   '{', '}',Vghc : VghcGhci StatementVghcGhci Located StatementVghcGuard StatementVghcGuard Located StatementVghcExpression StatementVghcExpression Located StatementVghcCommand StatementVghcCommand Located StatementVghcdo block StatementVghc3Located Statement with separate Left and Right id'sVghcLocated do block StatementVghcGuarded Right Hand Side.VghcLocated Guarded Right-Hand SideVghcThe where clauseVghc Guarded RHSsVghc Located Match May have  :  when in a listVghcHaskell Record BindingsVghcHaskell Top-level CommandVghcTop-level command, introducing a new arrow. This may occur inside a proc (where the stack is empty) or as an argument of a command-forming operator.!Located Haskell Top-level CommandVghcHaskell arrow application type.VghcFirst order arrow application ->=) operator. Post typechecking, also has multiplicity of the argument and the result type of the function passed to bind; that is, (P, S) in (>>=) :: Q -> (R % P -> S) -> T See Note [The type of bind in Stmts]Vghc.Parenthesised expr; see Note [Parens in HsSyn]WWWWWWWWWUUUUVVUVVUVVVUUUUUVVVVVVVVVVWWVVV VVVVVVVVVVVVUUUUUVVVVVVVVVVVVVVVUUUUUU WWVVWVVVWWVWVVWVWVVVWWWVWWWVWWVVVWWVVWWWWWWWWWWWWUUUUUUUUUUUUUUUUUVVVUUUUUUUUVUUUUUUVVVV UUUWVVV WWWWWWWWWVVVVVVVVVVVVVV VVVVVVVWWVVVVVVVVVVVVVVVVVVVVVVVVVVV VVVWWWWWWWWWWWWWW WWWWWWWWWWWWWWWWWWVVVVVVWWVWWVVVWWWWWVVVWVVVVWVVWVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV VVVVVVVVVVVVW VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUUVVVVVUUUVVU UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUWUUUUUUUUUUUUUUUUUWWWWWWWNone / o.WghcHaskell ModuleAll we actually declare here is the top-level structure for a module.Wghcs,,,  for explicit braces and semi around hsmodImports,hsmodDecls if this style is used.Wghc1Type, class, value, and interface signature declsWghc Export listNothing+: export list omitted, so export everythingJust [] : export nothing Just [...]: as you would expect...s : % ,WghcNothing: "module X where" is omitted (in which case the next field is Nothing too)WghcHsModule extension point SRRSRSRRRUUUUUUUUUUUUUUUUUUUUUWWWWWWWWW I RRRRQQQQQQQQ QQPPWWWWWWWWRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTSSSSSSTTTTSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUTTTTTTTUUUUUUUUUUUUUUUTTTTSSSSSSSSSSSSSTSSTSSSTTSUTTTSSSSSUTTTTTSSTTTSSSSSSSSSSSSSSSSSSSSSSUUUUUUTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTSSSSSSSSUUUUVVUVVUVVVUUUUUVVVVVVVVVVWWVVV VVVVVVVVVVVVUUUUUVVVVVVVVVVVVVVVUUUUUU WWVVWVVVWWVWVVWVWVVVWWWVWWWVWWVVVWWVVWWWWWWWWWWWWUUUUUUUUUUUUUUUUUVVVUUUUUUUUVUUUUUUVVVV UUUWVVV WWWWWWWWWVVVVVVVVVVVVVV VVVVVVVWWVVVVVVVVVVVVVVVVVVVVVVVVVVV VVV :::::::::::::::::::::::::::::::::::: :::IIIIIIIIIIIIIIIIIIIIIIIIIIIIII RRRRQQRRQQRRRRRRRRR RRRRRRRRRRRRRRRRRRRRRRRPPPPQPPPPQQPPPPPPPPPPQQQQQQQPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQPQQPQQQQQQQQQQQPQ WWWWWWWWNone XghcGets rid of the stuff that prevents us from understanding the runtime representation of a type. Including: 1. Casts 2. Newtypes 3. Foralls 4. Synonyms But not type/data families, because we don't have the envs to hand.XghcCount the arity of a function post-unarisation, including zero-width arguments.The post-unarisation arity may be larger than the arity of the original function type. See Note [Unarisation].XghcGive the demands on the arguments of a Core constructor application (Con dc args) at runtime. Assumes the constructor is not levity polymorphic. For example unboxed tuples won't work.Xghc True if the type has zero width.XghcGiven the arguments of a sum type constructor application, return the unboxed sum rep type.E.g.+(# Int# | Maybe Int | (# Int#, Float# #) #)We call `ubxSumRepType [ [IntRep], [LiftedRep], [IntRep, FloatRep] ]`, which returns [WordSlot, PtrSlot, WordSlot, FloatSlot]INVARIANT: Result slots are sorted (via Ord SlotTy), except that at the head of the list we have the slot for the tag.ghcReturns the bigger type if one fits into the other. (commutative)Note that lifted and unlifted pointers are *not* in a fits-in relation for the reasons described in Note [Don't merge lifted and unlifted slots] in GHC.Stg.Unarise.Yghc,Discovers the primitive representation of a . Returns a list of B: it's a list because of the possibility of no runtime representation (void) or multiple (unboxed tuple/sum) See also Note [Getting from RuntimeRep to PrimRep]Yghc,Discovers the primitive representation of a . Returns a list of B: it's a list because of the possibility of no runtime representation (void) or multiple (unboxed tuple/sum) See also Note [Getting from RuntimeRep to PrimRep] Returns Nothing if rep can't be determined. Eg. levity polymorphic types.YghcLike Y*, but assumes that there is precisely one B output; an empty list of PrimReps becomes a VoidRep. This assumption holds after unarise, see Note [Post-unarisation invariants]. Before unarise it may or may not hold. See also Note [RuntimeRep and PrimRep] and Note [VoidRep]Yghc%Find the runtime representation of a . Defined here to avoid module loops. Returns a list of the register shapes necessary. See also Note [Getting from RuntimeRep to PrimRep]YghcLike Y3, but assumed that there is precisely zero or one B output See also Note [Getting from RuntimeRep to PrimRep] and Note [VoidRep]ghcTake a kind (of shape TYPE rr) and produce the Bs of values of types of this kind. See also Note [Getting from RuntimeRep to PrimRep]YghcTake a kind (of shape `TYPE rr` or `CONSTRAINT rr`) and produce the Bs of values of types of this kind. See also Note [Getting from RuntimeRep to PrimRep] Returns Nothing if rep can't be determined. Eg. levity polymorphic types.Yghc7Take a type of kind RuntimeRep and extract the list of B that it encodes. See also Note [Getting from RuntimeRep to PrimRep]. The  [PrimRep]% is the final runtime representation after unarisation.(The result does not contain any VoidRep.Yghc7Take a type of kind RuntimeRep and extract the list of B that it encodes. See also Note [Getting from RuntimeRep to PrimRep]. The  [PrimRep]% is the final runtime representation after+ unarisation and does not contain VoidRep.Returns Nothing: if rep can't be determined. Eg. levity polymorphic types.Yghc Convert a B to a  of kind RuntimeRepYghcConvert a PrimRep back to a Type. Used only in the unariser to give types to fresh Ids. Really, only the type's representation matters. See also Note [RuntimeRep and PrimRep]2XXXXXYXYXYYYYXYYYYXYXXXBBBBBBBBBBBBBBBBBXXXXXXXXXX2XXXXXYYYXBBBBBBBBBBBBBBBBBYYXXXYYYYYXXXXXXXXXXXXXYNone ( WghcA demand transformer> is a monotone function from an incoming evaluation context (W) to a W, describing how the denoted thing (i.e. expression, function) uses its arguments and free variables, and whether it diverges.See Note [Understanding DmdType and DmdSig] and Note [What are demand signatures?].WghcThe depth of the wrapped W encodes the arity at which it is safe to unleash. Better construct this through X.. See Note [Understanding DmdType and DmdSig]WghcCharacterises how an expressionEvaluates its free variables (W) including divergence infoEvaluates its arguments (W)WghcDemand on argumentsWghc=Demands on free variables. See Note [Demand type Divergence]Wghc9Captures the result of an evaluation of an expression, byListing how the free variables of that expression have been evaluted (W)7Saying whether or not evaluation would surely diverge (W)See Note [Demand env Equality].WghcW characterises whether something surely diverges. Models a subset lattice of the following exhaustive set of divergence results: nnontermination (e.g. loops)ithrows imprecise exceptionpthrows precise exceTtioncconverges (reduces to WHNF).The different lattice elements correspond to different subsets, indicated by juxtaposition of indicators (e.g. nc definitely doesn't throw an exception, and may or may not reduce to WHNF).  Dunno (nipc) | ExnOrDiv (nip) | Diverges (ni) %As you can see, we don't distinguish n and i. See Note [Precise exceptions and strictness analysis] for why p is so special compared to i.Wghc5Definitely throws an imprecise exception or diverges.WghcDefinitely throws a *precise* exception, an imprecise exception or diverges. Never converges, hence X! See scenario 1 in Note [Precise exceptions and strictness analysis].Wghc7Might diverge, throw any kind of exception or converge.WghcA sub-demand describes an evaluation context (in the sense of an operational semantics), e.g. how deep the denoted thing is going to be evaluated. See W for examples.See Note [SubDemand denotes at least one evaluation] for a more detailed description of what a sub-demand means.See Note [Demand notation] for the extensively used short-hand notation. See also Note [Why Boxity in SubDemand and not in Demand?].WghcPolymorphic demand, the denoted thing is evaluated arbitrarily deep, with the specified cardinality at every level. The   applies only to the outer evaluation context as well as all inner evaluation context. See Note [Boxity in Poly] for why we want it to carry  . Expands to  via  and to W via W.Poly b n is semantically equivalent to  Prod b [n :* Poly b n, ...] or Call n (Poly Boxed n)@.  and W do these rewrites.In Note [Demand notation]: L === P(L,L,...) and  L === C(L), B === P(B,B,...) and  B === C(B), !A === !P(A,A,...) and  !A === C(A)(, and so on.We'll only see W with W (B), W (A), W (L) and sometimes W (S) through X, never W (M) or W$ (1) (grep the source code). Hence W, which is closed under lub and plus.,Why doesn't this constructor simply carry a W instead of its fields? See Note [Call SubDemand vs. evaluation Demand].ghc Call n sd% describes the evaluation context of n function applications (with one argument), where the result of each call is evaluated according to sd. sd describes program traces in which the denoted thing was called at all, see Note [SubDemand denotes at least one evaluation]. That Note also explains why it doesn't make sense for n( to be absent, hence we forbid it with W3. Absent call demands can still be expressed with W. Used only for values of function type. Use the smart constructor  whenever possible!Wghc Prod b ds describes the evaluation context of a case scrutinisation on an expression of product type, where the product components are evaluated according to ds. The   b6 says whether or not the box of the product was used.WghcA demand describes.How many times a variable is evaluated, via a W inality, and0How deep its value was evaluated in turn, via a W.(Examples (using Note [Demand notation]): puts demand 1A on its first argument: It evaluates the argument strictly (1), but not any deeper (A). puts demand 1P(1L,A) on its argument: It evaluates the argument pair strictly and the first component strictly, but no nested info beyond that (L*). Its second argument is not used at all. puts demand 1C(1,L)" on its first argument: It calls (C>) the argument function with one argument, exactly once (1=). No info on how the result of that call is evaluated (L). puts demand MC(M,L) on its second argument: It evaluates the argument function at most once ((M)aybe) and calls it once when it is evaluated. fst p + fst p puts demand SP(SL,A) on p: It's 1P(1L,A)# multiplied by two, so we get S4 (used at least once, possibly multiple times).#This data type is quite similar to Scaled W, but it's scaled by W, which is an interval on  Multiplicity, the upper bound of which could be used to infer uniqueness types. Also we treat W and W specially, as the concept of a W doesn't apply when there isn't any evaluation at all. If you don't care, simply use W.Wghc6A bottoming demand, produced by a diverging function (W), hence there is no W% that describes how it was evaluated.Wghc-An absent demand: Evaluated exactly 0 times (W), hence there is no W% that describes how it was evaluated.ghc.Don't use this internal data constructor; use W# instead. Since BotDmd deals with W and AbsDmd deals with W*, the cardinality component is CardNonAbsWghc A subtype of W* for which the upper bound is never 1 (no W or W!). The only four inhabitants are W, W, W, W!. Membership can be tested with . See W for use sites and explanation.Wghc A subtype of W* for which the upper bound is never 0 (no W or W!). The only four inhabitants are W, W, W, W!. Membership can be tested with . See  and  for use sites and explanation.WghcDescribes an interval of evaluation cardinalities. See Note [Evaluation cardinalities] See Note [Bit vector representation for Card]Wghcc :* sd" is a demand that says "evaluated c times, and any trace in which it is evaluated will evaluate at least as deep as sd".Matching on this pattern synonym is a complete match. If the matched demand was W, it will match as C_00 :* seqSubDmd. If the matched demand was W, it will match as C_10 :* botSubDmd.. The builder of this pattern synonym simply discards the W if the W was absent and returns W or W< instead. It will assert that the discarded sub-demand was  and , respectively.Call sites should consider whether they really want to look at the W" of an absent demand and match on W and/or W otherwise. Really, any other W? would be allowed and might work better, depending on context.WghcEvery possible cardinality; the top element, {0,1,n}. Pretty-printed as L.WghcStrict and used (possibly) many times, {1,n}. Pretty-printed as S.Wghc.Used at most once, {0,1}. Pretty-printed as M.Wghc/Strict and used once, {1}. Pretty-printed as 1.Wghc Bottom, {}. Pretty-printed as A.Wghc!Absent, {0}. Pretty-printed as A.WghcTrue  = lower bound is 1.WghcTrue  = upper bound is 0.WghcTrue  = upper bound is 1.ghc Is this a W?ghc Is this a W?WghcIntersect with [0,1].ghc"Intersect with [1,n]. The same as W W.WghcDenotes D on W.ghcDenotes D on W.WghcDenotes { on lower and upper bounds of W.WghcDenotes | on lower and upper bounds of W.ghc3Only meant to be used in the pattern synonym below!ghc(The uniform field demand when viewing a W as a W , as in W.WghcA smart constructor for W6, applying rewrite rules along the semantic equality ,Prod b [n :* Poly Boxed n, ...] === Poly b n, simplifying to W Ws when possible. Examples: Rewrites P(L,L) (e.g., arguments Boxed, [L,L]) to L Rewrites  !P(L!L,L!L) (e.g., arguments Unboxed,  [L!L,L!L]) to !LDoes not rewrite P(1L), P(L!L), !P(L) or P(L,A)Wghc viewProd n sd interprets sd as a W of arity n , expanding W demands as necessary.ghcA smart constructor for 6, applying rewrite rules along the semantic equality #Call C_0N (Poly C_0N) === Poly C_0N, simplifying to W Ws when possible.ghc viewCall sd interprets sd as a  , expanding W subdemands as necessary.ghcSets   to   for non- sub-demands and recurses into W.WghcSets   to   for the W, recursing into Ws. Don't recurse into lazy arguments; see GHC.Core.Opt.DmdAnal Note [No lazy, Unboxed demands in demand signature]XghcDenotes D on W.XghcDenotes { on W.Xghc;Used to suppress pretty-printing of an uninformative demandXghc8Contrast with isStrictUsedDmd. See Note [Strict demands]Xghc7Not absent and used strictly. See Note [Strict demands]XghcIs the value used at most once?XghcWe try to avoid tracking weak free variable demands in strictness signatures for analysis performance reasons. See Note [Lazy and unleashable free variables] in GHC.Core.Opt.DmdAnal.XghcFirst argument of 'GHC.Exts.maskAsyncExceptions#': 1C(1,L). Called exactly once.XghcFirst argument of 'GHC.Exts.atomically#': SC(S,L)-. Called at least once, possibly many times.XghcFirst argument of catch#: MC(1,L). Evaluates its arg lazily, but then applies it exactly once to one argument.XghcSecond argument of catch#:  MC(1,C(1,L)). Evaluates its arg lazily, but then applies it exactly once to two arguments.XghcMake a W evaluated at-most-once.XghcMake a W' evaluated at-least-once (e.g. strict).XghcIf the argument is a guaranteed-terminating type (i.e. a non-newtype dictionary) give it strict demand. This is sound because terminating types can't be bottom: See GHC.Core Note [NON-BOTTOM-DICTS invariant] Also split the product type & demand and recur in order to similarly strictify the argument's contained used non-newtype superclass dictionaries. We use the demand as our recursive measure to guarantee termination.XghcMake a W lazy.Xghc Wraps the W with a one-shot call demand: d -> C(1,d).XghcmkCalledOnceDmds n d returns C(1,C1...C(1,d)) where there are n C1's.XghcPeels one call level from the sub-demand, and also returns how many times we entered the lambda body.Xghc Extract the W of a W. PRECONDITION: The SubDemand must be used in a context where the expression denoted by the Demand is under evaluation.Xghc"See Note [Computing one-shot info]Xghc"See Note [Computing one-shot info]Xghc*saturatedByOneShots n C(M,C(M,...)) = True  = There are at least n nested C(M,..) calls. See Note [Demand on the worker] in GHC.Core.Opt.WorkWrapghc:See Note [Asymmetry of plusDmdType], which concludes that < needs to be symmetric. Strictly speaking, we should have (plusDivergence Dunno Diverges = ExnOrDiv. But that regresses in too many places (every infinite loop, basically) to be worth it and is only relevant in higher-order scenarios (e.g. Divergence of f (throwIO blah)). So  currently is  glbDivergence , really.ghcIn a non-strict scenario, we might not force the Divergence, in which case we might converge, hence Dunno.Xghc True if the W indicates that evaluation will not return. See Note [Dead ends].Xghc Build a potentially terminating W< from a finite map that says what has been evaluated so farXghcW is a monoid via X and X; this is its msumXghc%Compute the least upper bound of two W*s elicited /by the same incoming demand/!XghcThe demand type of doing nothing (lazy, absent, no Divergence information). Note that it is 'not' the top of the lattice (which would be "may use everything"), so it is (no longer) called topDmdType.ghcThe demand type of an unspecified expression that is guaranteed to throw a (precise or imprecise) exception or diverge.ghcThis makes sure we can use the demand type with n arguments after eta expansion, where n must not be lower than the demand types depth. It appends the argument list with the correct .ghc)A conservative approximation for a given W in case of an arity decrease. Currently, it's just nopDmdType.XghcWhen e is evaluated after executing an IO action that may throw a precise exception, we act as if there is an additional control flow path that is taken if e throws a precise exception. The demand type of this control flow path * is lazy and absent (W9) and boxed in all free variables and arguments * has X W> result See Note [Precise exceptions and strictness analysis]#So we can simply take a variant of X,  . Why not X? Because then the result of e can never be X4! That means failure to drop dead-ends, see #18086.XghcTurns a W computed for the particular ! into a W unleashable at that arity. See Note [Understanding DmdType and DmdSig].XghcTrue if the signature diverges or throws an exception in a saturated call. See Note [Dead ends].XghcTrue if the signature diverges or throws an imprecise exception in a saturated call. NB: In constrast to X this returns False for X. See Note [Dead ends] and Note [Precise vs imprecise exceptions].Xghc9True when the signature indicates all arguments are boxedXghcReturns true if an application to n value args would diverge or throw an exception.If a function having X is applied to a less number of arguments than its syntactic arity, we cannot say for sure that it is going to diverge. Hence this function conservatively returns False in that case. See Note [Dead ends].ghcTransfers the boxity of the left arg to the demand structure of the right arg. This only makes sense if applied to new and old demands of the same value.Xghc Add extra (W7) arguments to a strictness signature. In contrast to X, this prepends8 additional argument demands. This is used by FloatOut.XghcWe are expanding (x y. e) to (x y z. e z) or reducing from the latter to the former (when the Simplifier identifies a new join points, for example). In contrast to X, this appends extra arg demands if necessary. This works by looking at the W (which was produced under a call demand for the old arity) and trying to transfer as many facts as we can to the call demand of new arity. An arity increase (resulting in a stronger incoming demand) can retain much of the info, while an arity decrease (a weakening of the incoming demand) must fall back to a conservative default.Xghc Extrapolate a demand signature (W ) into a W.Given a function's W and a W for the evaluation context, return how the function evaluates its free variables and arguments.Xghc A special W for data constructors that feeds product demands into the constructor arguments.Xghc A special W for dictionary selectors that feeds the demand on the result into the indicated dictionary component (if saturated). See Note [Demand transformer for a dictionary selector].Xghc1Remove the demand environment from the signature.Xghc#Remove all `C_01 :*` info (but not CM sub-demands) from the demandXghc#Remove all `C_01 :*` info (but not CM. sub-demands) from the strictness signatureXghcDrop all boxityXghcSee Note [Demand notation] Current syntax was discussed in #19016.XghcSee Note [Demand notation]XghcSee Note [Demand notation]Xghc)We have to respect Poly rewrites through  and W.XghcSee Note [Demand env Equality].Xghcdepending on saturationWXXXXXWXXXXXXXXXXXXXXWXXXXXXXWXXWXXXXXWXXXXXXXXWXXXWXXXXXXWXXXXXWXXXXXXXXXXWXXXXXXXXXXWWXXXXWWXXXXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW  WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXWXXWXXWWWXXXXXXXXXXXXWXXXXXXXXXXXXXWWWWWXXXXXWWWWXXXXXXWWWWXXXXXXXXXXXXWWXXXXXXXXXXXXXXXXWXXXWWWWXXXXXXXXXXNone ( ؾ YghcThe arity of the wrapped Y is the arity at which it is safe to unleash. See Note [Understanding DmdType and DmdSig] in GHC.Types.DemandYghcThe result of Y.YghcThe abstract domain A_t+ from the original 'CPR for Haskell' paper.YghcY) eventually unleashed when applied to Y argumentsYghcNumber of value arguments the denoted expression eats before returning the Yghc The number of field Cprs equals P&. If all of them are top, better use %, as ensured by the pattern synonym Y.ghcFlatConCpr tag is an efficient encoding for  tag [TopCpr..]5. Purely for compiler perf. Can be constructed with Y.Yghc Unpacks a Y-shaped Y and returns the field Ys wrapped in a Y. Otherwise, it returns Y with the appropriate Y to assume for each field. The use of Y( allows O(1) space for the common, non-Y case.YghcTurns a Y computed for the particular ! into a Y unleashable at that arity. See Note [Understanding DmdType and DmdSig] in GHC.Types.DemandYghcAdd extra value args to CprSigYghcBNF: cpr ::= '' -- TopCpr | n -- FlatConCpr n | n '(' cpr1 ',' cpr2 ',' ... ')' -- ConCpr n [cpr1,cpr2,...] | 'b' -- BotCpr*Examples: * `f x = f x` has result CPR b" * `1(1,)` is a valid (nested) Y! denotation for `(I# 42#, f 42)`.YghcBNF: cpr_ty ::= cpr -- short form if arty == 0 | '\' arty '.' cpr -- if arty > 0Examples: * `f x y z = f x y z` has denotation `3.b` * `g !x = (x+1, x+2)` has denotation `1.1(1,1)`.YghcOnly print the CPR resultYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYNone \ghcStandardFormInfo tells whether this thunk has one of a small number of standard forms\ghcInformation about an identifier, from the code generator's point of view. Every identifier is bound to a LambdaFormInfo in the environment, which gives the code generator enough info to be able to tail call or return that identifier.\ghc9Maps names in the current module to their LambdaFormInfos\ghcCodegen-generated Id infos, to be passed to downstream via interfaces.This stuff is for optimization purposes only, they're not compulsory.When CafInfo of an imported Id is not known it's safe to treat it as CAFFY.When LambdaFormInfo of an imported Id is not known it's safe to treat it as `LFUnknown True` (which just says "it could be anything" and we do slow entry).See also Note [Conveying CAF-info and LFInfo between modules] above.\ghc,The C stub which is used for IPE information\ghc;LambdaFormInfos of exported closures in the current module.\ghcExported Non-CAFFY closures in the current module. Everything else is either not exported of CAFFY.\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\None i^ghcA constructor-like thing^ghcIs this a 'vanilla' constructor-like thing (no existentials, no provided constraints)?^ghcNumber of arguments^ghc"Names of fields used for selectors^ghcThe +* (arity and field labels) associated to a ^.^ghcReturns just the instantiated value argument types of a ^, (excluding dictionary args)^ghc' s for the type variables of the ^. For pattern synonyms, this will always consist of the universally quantified variables followed by the existentially quantified type variables. For data constructors, the situation is slightly more complicated@see )Note [DataCon user type variable binders] in GHC.Core.DataCon.^ghc0Existentially quantified type/coercion variables^ghcThe "stupid theta" of the ^ , such as  data Eq a in: data Eq a => T a = ...It is empty for ^* as they do not allow such contexts. See Note [The stupid context] in GHC.Core.DataCon.^ghc^ returns True except for uni-directional pattern synonyms, which have no builder^ghc7Returns the strictness information for each constructor^ghc%Returns the type of the whole pattern^ghcThe "full signature" of the ^ returns, in order:,1) The universally quantified type variables72) The existentially quantified type/coercion variables3) The equality specification;4) The provided theta (the constraints provided by a match)<5) The required theta (the constraints required for a match)6) The original argument types (i.e. before any change of the representation of the type)7) The original result type^ghc5Extract the type for any given labelled field of the ^^ghc-The ConLikes that have *all* the given fields^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^None ghcA list of conlikes which represents a complete pattern match. These arise from COMPLETE signatures. See also Note [Implementation of COMPLETE pragmas].ghc6The optional, concrete result TyCon the set applies toghc The set of ^ values6None '7 % ghcExpressions where binders are sghcThe common case for the type of binders and variables when we are manipulating the Core language within GHCghcThis is the data type that represents GHCs core intermediate language. Currently GHC uses System FC  https://www.microsoft.com/en-us/research/publication/system-f-with-type-equality-coercions/ for this purpose, which is closely related to the simpler and better known System F  %http://en.wikipedia.org/wiki/System_F.We get from Haskell source to this Core language in a number of stages: The source code is parsed into an abstract syntax tree, which is represented by the data type  with the names being This syntax tree is renamed, which attaches a 2 to every  (yielding a 3) to disambiguate identifiers which are lexically identical. For example, this program: 3 f x = let f x = x + 1 in f (x - 2) Would be renamed by having Unique,s attached so it looked something like this:  f_1 x_2 = let f_3 x_4 = x_4 + 1 in f_3 (x_2 - 2) 'But see Note [Shadowing in Core] below. The resulting syntax tree undergoes type checking (which also deals with instantiating type class arguments) to yield a  type that has 7 as it's names.Finally the syntax tree is  desugared from the expressive  type into this  type, which has far fewer constructors and hence is easier to perform optimization, analysis and code generation on.The type parameter b3 is for the type of binders in the expression tree.0The language consists of the following elements:5Variables See Note [Variable occurrences in Core]Primitive literals.Applications: note that the argument may be a 7. See Note [Representation polymorphism invariants]Lambda abstraction See Note [Representation polymorphism invariants]Recursive and non recursive lets. Operationally this corresponds to allocating a thunk for the things bound and then executing the sub-expression.See Note [Core letrec invariant] See Note [Core let-can-float invariant] See Note [Representation polymorphism invariants] See Note [Core type and coercion invariant]Case expression. Operationally this corresponds to evaluating the scrutinee (expression examined) to weak head normal form and then examining at most one level of resulting constructor (i.e. you cannot do nested pattern matching directly with this).The binder gets bound to the value of the scrutinee, and the * must be that of all the case alternatives0IMPORTANT: see Note [Case expression invariants]Cast an expression to a particular type. This is used to implement newtypes (a newtype. constructor or destructor just becomes a Z in Core) and GADTs.Ticks. These are used to represent all the source annotation we support: profiling SCCs, HPC ticks, and GHCi breakpoints.;A type: this should only show up at the top level of an Arg A coercionYghcA clone of the Z0 type but allowing annotation at every tree nodeYghcA clone of the Z0 type but allowing annotation at every tree nodeYghcA clone of the 0 type but allowing annotation at every tree nodeYghc;Annotated core: allows annotation at every node in the treeYghc Binders are tagged with a tYghc$Case alternatives where binders are sYghc!Binding groups where binders are sYghc'Argument expressions where binders are sYghcY& says when unfolding should take placeYghcProperties of a Y that could be computed on-demand from its template. See Note [UnfoldingCache]Yghc Records the  unfolding of an identifier, which is approximately the form the identifier would have if we substituted its definition in for the identifier. This type should be treated as abstract everywhere except in GHC.Core.UnfoldYghc+We have no information about the unfolding.Yghc:We have no information about the unfolding, because this  came from an hi-boot1 file. See Note [Inlining and hs-boot files] in GHC.CoreToIface for what this is used for.Yghc%It ain't one of these constructors.  OtherCon xs also indicates that something has been evaluated and hence there's no point in re-evaluating it.  OtherCon [] is used even for non-data-type values to indicated evaluated-ness. Notably: 1data C = C !(Int -> Int) case x of { C f -> ... }Here, f gets an  OtherCon [] unfolding.Yghc;An unfolding with redundant cached information. Parameters:uf_tmpl: Template used to perform unfolding; NB: Occurrence info is guaranteed correct: see Note [OccInfo in unfoldings and rules]'uf_is_top: Is this a top level binding? uf_is_value:  exprIsHNF* template (cached); it is ok to discard a  on this variableuf_is_work_free: Does this waste only a little work if we expand it inside an inlining? Basically this is a cached version of exprIsWorkFree!uf_guidance: Tells us about the size of the unfolding templateYghcThe ) in the Y is a superset of variables that are currently in scope. See Note [The InScopeSet invariant].YghcA Y is:"Local" if the function it is a rule for is defined in the same module as the rule itself."Orphan" if nothing on the LHS is defined in the same module as the rule itselfYghcBuilt-in rules are used for constant folding and suchlike. They have no free variables. A built-in rule is always visible (there is no such thing as an orphan built-in rule.)YghcTrue iff the fn at the head of the rule is defined in the same module as the rule and is not an implicit  (like a record selector, class operation, or data constructor). This is different from Y, where a rule can avoid being an orphan if *any* Name in LHS of the rule was defined in the same module as the rule.Yghc%Whether or not the rule is an orphan.Yghc  the rule was defined in, used to test if we should see an orphan rule.YghcTrue  = this rule is auto-generated (notably by Specialise or SpecConstr) False  = generated at the user's behest See Note [Trimming auto-rules] in GHC.Iface.Tidy% for the sole purpose of this field.YghcRight hand side of the rule Occurrence info is guaranteed correct See Note [OccInfo in unfoldings and rules]YghcLeft hand side argumentsYghcVariables quantified overYghc7Name at the head of each argument to the left hand sideYghc Name of the 7 at the head of this ruleYghcWhen the rule is activeYghc1Name of the rule, for communication with the userZghcThis function does the rewrite. It given too many arguments, it simply discards them; the returned  is just the rewrite of Y applied to the first Z argsZghcNumber of arguments that Z1 consumes, if it fires, including type argumentsZghcIs this instance an orphan? If it is not an orphan, contains an  ? witnessing the instance's non-orphanhood. See Note [Orphans]ZghcBinding, used for top level bindings in a module and local bindings in a let.Zghc3A case alternative constructor (i.e. pattern match)Zghc A literal: case e of { 1 -> ... } Invariant: always an *unlifted* literal See Note [Literal alternatives]ZghcTrivial alternative: case e of { _ -> ... }ZghcA case split alternative. Consists of the constructor leading to the alternative, the variables bound from the constructor, and the expression to be executed given that binding. The default alternative is (DEFAULT, [], rhs)ZghcType synonym for expressions that occur in function argument positions. Only Z should contain a  at top level, general  should notZghcReturns true if Z is orphan.ZghcReturns true if Z is not an orphan.ZghcThe number of arguments the Y4 must be applied to before the rule can match on itZghcThe  of the 7' at the head of the rule left hand sideZghcSet the  of the 7' at the head of the rule left hand sideZghcThere is no known YZghc body) == (x -> f body)[ghcAttempt to remove the last N arguments of a function call. Strip off any ticks or coercions encountered along the way and any at the end.[ghcLike  collectArgs, but also looks through floatable ticks if it means that we can find more arguments.[ghc$Will this variable exist at runtime?[ghc/Will this argument expression exist at runtime?[ghcReturns True for value arguments, false for type args NB: coercions are value arguments (zero width, to be sure, like State#, but still value args).[ghcReturns True iff the expression is a  or  expression at its top level[ghcReturns True iff the expression is a  expression at its top level[ghcReturns True iff the expression is a ; expression at its top level. Note this does NOT include s.[ghc8The number of binders that bind values rather than types[ghcThe number of argument expressions that are values rather than types at their top level[ghcTakes a nested application expression and returns the function being applied and the arguments to which it is applied[ghcAs Z but for Y rather than [ghcAs Z but for Y rather than ZZZZZZZZZ[[[Z[Z[[ZZZZ[[[[ZZZZZZZZZZZZZ[ZZZZZZZ[[ZZZ[[[ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[ZZ[[ZZ["'ZZZZZZYYYYYYYYYYYYYYYYYZZZZYYYYYYYYYYYYYYZYYYYZZZZZZZZZZZYZZZZZZZYYZZZZZZZZZZZZZYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY;!!!!!!''''''''ZZZZZZZZZZZZZZZZZZZZYYYYYYYYYYZ'ZZZZZZZ'Z'''ZZZZZZZ'Z''ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ'ZZZZZZZZZZZZZZZ[[Z[Z[[[[[[[[[YYYYYYYYYYYYYYYYYYYYYYYYYYYYYY!!!!!ZZZZZZZZZZZZZZZZZZZZZZZZZZZ"YYYYYYYYYYYYYYYYY[[[[[[[[ZZZZZZYYYYYYYYYYYYYYZZ!YYYY;ZZZZZZZZZZZZZZ/None 17 I6ghcIdentifier DetailsThe  of an Id7 give stable, and necessary, information about the Id.ghcIdentifier InformationAn  gives optional information about an Id. If present it never lies, but it may not be present, in which case there is always a conservative assumption which can be made.Two Id:s may have different info even though they have the same Unique (and are hence the same Id); for example, one might lack the properties attached to the other. Most of the ; gives information about the value, or definition, of the Id4, independent of its usage. Exceptions to this are \, \, \ and ].!Performance note: when we update , we have to reallocate this entire record, so it is a good idea not to let this data structure get too big.ghc Check if an  says \.ghcJust a synonym for \. Written separately so it can be exported in the hs-boot file.ghcBasic . that carries no useful information whatsoever\ghcTick box for Hpc-style coverage\ghc%Constant applicative form InformationRecords whether an Id+ makes Constant Applicative Form references\ghcIndicates that the Id is for either: A function or static constructor that refers to one or more CAFs, orA real live CAF\ghc9A function or static constructor that refers to no CAFs.\ghcRule Information$Records the specializations of this Id, that we know about in the form of rewrite Ys that target them\ghcInline Pragma InformationTells when the inlining is active. When it is active the thing may be inlined, depending on how big it is.If there was an INLINE pragma, then as a separate matter, the RHS will have been made to look small with a Core inline Note The default \ is !, so the info serves entirely as a way to inhibit inlining until we want it\ghcArity InformationAn \ of n, tells us that partial application of this Id to up to n-1* value arguments does essentially no work.7That is not necessarily the same as saying that it has n6 leading lambdas, because coerces may get in the way.The arity might increase later in the compilation process, if an extra lambda floats up to the binding site. Invariant: the ! of an Id must never exceed the number of value arguments that appear in the type of the Id'. See Note [Arity and function types].ghcEncodes arities, OneShotInfo, CafInfo. From least-significant to most-significant bits:Bit 0 (1): OneShotInfoBit 1 (1): CafInfoBit 2 (1): unusedBits 3-32(30): Call Arity infoBits 33-62(30): Arity info\ghc If lfInfo = Just info, then the info is guaranteed correct0. If lfInfo = Nothing, then we do not have a \ for this Id, so (for imported Ids) we make a conservative version. See Note [The LFInfo of Imported Ids] in GHC.StgToCmm.Closure For locally-defined Ids other than DataCons, the \ field is always Nothing. See also Note [LFInfo of DataCon workers and wrappers]ghcBitfield packs CafInfo, OneShotInfo, arity info, and call arity info in one 64-bit word. Packing these fields reduces size of  from 12 words to 7 words and reduces residency by almost 4% in some programs. See #17497 and associated MR.See documentation of the getters for what these packed fields mean.\ghcID demand information\ghcInformation on whether the function will ultimately return a freshly allocated constructor.\ghcA strictness signature. Describes how a function uses its arguments See Note [idArity varies independently of dmdTypeDepth] in GHC.Core.Opt.DmdAnal\ghcHow the Id occurs in the program\ghc"Any inline pragma attached to the Id\ghcThe Id s unfolding\ghcSpecialisations of the Ids function which exist. See Note [Specialisations and RULES in IdInfo]\ghc%Parent of a record selector function.Either the parent  or \1 depending on the origin of the record selector.For a data family, this is the instance , **not** the family .\ghc*Parent of a data constructor record field.For a data family, this is the instance .\ghc/Parent of a pattern synonym record field: the \ itself.\ghcThe Id for a record selector\ghcThe Id is for a data constructor worker\ghcThe Id is for a data constructor wrapper\ghcThe Id, is a superclass selector or class operation\ghcThe Id# is for a primitive operator True  = is representation-polymorphic, and hence has no binding This lev-poly flag is used only in GHC.Types.Id.hasNoBinding\ghcThe Id is for a foreign call. Type will be simple: no type families, newtypes, etc\ghcThe Id4 is for a HPC tick box (both traditional and binary)\ghc$A dictionary function. Bool = True  = the class has only one method, so may be implemented with a newtype, so it might be bad to be strict on this dictionary\ghc&A coercion variable This only covers  un-lifted coercions, of type (t1 ~# t2) or (t1 ~R# t2), not their lifted variants\ghcAn Id< for a join point taking n arguments Note [Join points] in GHC.Core+ Can also work as a WorkerLikeId if given !s. See Note [CBV Function Ids] The [CbvMark] is always empty (and ignored) until after Tidy.\ghcAn Id for a worker like function, which might expect some arguments to be passed both evaluated and tagged. Worker like functions are create by W/W and SpecConstr and we can expect that they aren't used unapplied. See Note [CBV Function Ids] See Note [Tag Inference] The [CbvMark] is always empty (and ignored) until after Tidy for ids from the current module.\ghc+Info about a lambda-bound variable, if the Id is one\ghcId arity, as computed by GHC.Core.Opt.Arity%. Specifies how many arguments this Id9 has to be applied to before it does any meaningful work.\ghcId CAF info]ghcHow this is called. This is the number of arguments to which a binding can be eta-expanded without losing any sharing. n  =% all calls have at least n arguments]ghcEssentially returns the \ field, but does not expose the unfolding of a strong loop breaker.This is the right thing to call if you plan to decide whether an unfolding will inline.]ghc True of a non-loop-breaker Id that has a stable; unfolding that is (a) always inlined; that is, with an Y guidance, or (b) a DFunUnfolding which never needs to be inlined]ghcMore informative  we can use when we know the Id has no CAF references]ghc$It is always safe to assume that an Id has an arity of 0]ghc1Assume that no specializations exist: always safe]ghcRetrieve the locally-defined free variables of both the left and right hand sides of the specialization rules]ghcChange the name of the function the rule is keyed on all of the YsghcAssumes that the Id$ has CAF references: definitely safe]ghcThis is used to remove information on lambda binders that we have setup as part of a lambda group, assuming they will be applied all at once, but turn out to be part of an unsaturated lambda as in e.g: (\x1. \x2. e) arg1]ghcRemove all demand info on the ]ghc.Remove usage (but not strictness) info on the ]ghcRemove usage environment info from the strictness signature on the ]ghc'Zap info that depends on free variablesghcZaps any core unfolding, but  preserves/ evaluated-ness, i.e. an unfolding of OtherCon"""""!"\\]]]]\]]\]]]\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]\!!!!!!!!!!!!!!!!!!!!!\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\!\\\\\\]!!!\!"]]]]]]]]]]\]\]]]]\]\]\]]\]]]\\]!!!!!!!!!!"""\]!!!!!!!""\\]]]]]\]]\\\]]\]\\]]\\\\ ]]]]]]]]]]]7None [#]ghcLike ], but skips non-Ids. Useful for scaling a mixed list of ids and tyvars.]ghcNot only does this set the  ;, it also evaluates the type to try and reduce space usage]ghc'For an explanation of global vs. local s, see GHC.Types.Var.Var#globalvslocal]ghcMake a global % without any extra information at all]ghcMake a global - with no global information but some generic ]ghc'For an explanation of global vs. local s, see GHC.Types.Var#globalvslocal]ghcMake a local CoVar]ghcLike ]6, but checks the type to see if it should make a covar]ghcCreate a local  that is marked as exported. This prevents things attached to it from being removed as dead code. See Note [Exported LocalIds]]ghcCreate a system local . These are local s (see Var#globalvslocal3) that are created by the compiler out of thin air]ghcLike ]+, but checks to see if we have a covar type]ghcCreate a user local . These are local s (see GHC.Types.Var#globalvslocal8) with a name and location that the user might recognize]ghcLike ]', but checks if we have a coercion type]ghcWorkers get local names. CoreTidy$ will externalise these if necessary]ghc Create a template local: a family of system local s in bijection with Ints, typically used in unfoldings]ghc-Create a template local for a series of types]ghcCreate a template local for a series of type, but start from a specified template local]ghcIf the , is that for a record selector, extract the \. Panic otherwise.]ghcAn Id for which we might require all callers to pass strict arguments properly tagged + evaluated.See Note [CBV Function Ids]]ghcDoesn't return strictness marks]ghc*Get from either the worker or the wrapper  to the #'. Currently used only in the desugarer. INVARIANT: idDataCon (dataConWrapId d) = d : remember, #, can return either the wrapper or the worker]ghcReturns True of an  which may not have a binding, even though it is defined in this module.]ghc] tells whether an s info is implied by other declarations, so we don't need to put its signature in an interface file, even if it's mentioned in some other interface unfolding.]ghcThis function counts all arguments post-unarisation, which includes arguments with no runtime representation -- see Note [Unarisation and arity]]ghcReturns true if an application to n args diverges or throws an exception See Note [Dead ends] in GHC.Types.Demand.]ghc Accesses the Id's \.]ghc] says whether either (a) the  has a strict demand placed on it or (b) definitely has a "strict type", such that it can always be evaluated strictly (i.e an unlifted type) We need to check (b) as well as (a), because when the demand for the given i hasn't been computed yet but i9 has a strict type, we still want `isStrictId id` to be L. Returns False if the type is levity polymorphic; False is always safe.]ghc Returns the s unfolding, but does not expose the unfolding of a strong loop breaker. See ].?If you really want the unfolding of a strong loopbreaker, call ^.]ghcReturns an unfolding only if (a) not a strong loop breaker and (b) always active]ghcReturns an unfolding only if (a) not a strong loop breaker and (b) active in according to is_active^ghcExpose the unfolding if there is one, including for loop breakers^ghc5If all marks are NotMarkedStrict we just set nothing.^ghc2Remove any cbv marks on arguments from a given Id.^ghc-Turn this id into a WorkerLikeId if possible.^ghc:Similar to trimUnfolding, but also removes evaldness info.]]]^^^]]^]^^^]]^]]^^^]]^]^^^]^]]]]]]^]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^]^]]]]^]^]^]^]]]^]]^^^^]^]^^^^^]^^]^^^^^^]^^'''((''''''Y'''''''''']]]]]]]]]]]]]]]]]]]]]]]]'']]]]]'''']]']]]]]^^^^^^^]^^]]]]]('(]]]]]]]]]]]]]]]]]^]]]]']]]]]]^^^^^^^^^^]]]^^^^^^^Y]^]]]^^^]]^^^^^^]]^^^^^^]]]^]]]]]]^^^^^^^^^9None f3 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 GHC.Tc.Utils.Env for how to retrieve a  given a .^ghcClass that abstracts out the common ability of the monads in GHC to lookup a  in the monadic environment by . Provides a number of related convenience functions for accessing particular kinds of _ghcDetermine the  s brought into scope by another  other than itself. For example, Id's don't have any implicit TyThings as they just bring themselves into scope, but classes bring their dictionary datatype, type constructor and some selector functions into scope, just for a start!_ghcReturns True if there should be no interface-file declaration for this thing on its own: either it is built-in, or it is part of some other declaration, or it is generated implicitly by some other declaration._ghctyThingParent_maybe x returns (Just p) when pprTyThingInContext should print a declaration for p (albeit with some "..." in it) when asked to show x It returns the *immediate* parent. So a datacon returns its tycon but the tycon could be the associated type of a class, so it in turn might have a parent._ghcThe + s that a - should bring into scope. Used to build the + for the InteractiveContext._ghc?Obtain information pertinent to the renamer about a particular .This extracts out renamer information from typechecker information._ghcGet the  from a 4 if it is a type constructor thing. Panics otherwise_ghcGet the @ from a 2 if it is a coercion axiom thing. Panics otherwise_ghcGet the # from a 4 if it is a data constructor thing. Panics otherwise_ghcGet the ^ from a 5 if it is a data constructor thing. Panics otherwise_ghcGet the  from a < if it is a id *or* data constructor thing. Panics otherwise_________^^^_________^^^^^^^^^!^^^^^^^^^___^^^_______________None k ghcA renaming substitution from s to s. Like )4, but not maintaining pairs of substitutions. Like , but with the domain being s instead of entire CoreExpr.ghc  emptySubst =  )ghcConstructs a new % assuming the variables in the given ) are in scope.ghcSubstitutes an " for another one according to the + given in a way that avoids shadowing the )', returning the result and an updated 1 that should be used by subsequent substitutions.ghc 4substBndrs = runState . traverse (state . substBndr)ghcSubstitutes an occurrence of an identifier for its counterpart recorded in the .ghcSubstitutes an occurrence of an identifier for its counterpart recorded in the . Does not generate a debug warning if the identifier to to substitute wasn't in scope.ghcAdd the  to the in-scope set and remove any existing substitutions for it.ghcAdd a substitution for an  to the : you must ensure that the in-scope set is such that TyCoSubst Note [The substitution invariant] holds after extending the substitution like this.  None)*/1 nghc%The type used in binder positions in  GenStgExprs.ghcLet(-no-escape)-bound thing with a flag indicating whether it occurs as an argument or in a nullary application (see GHC.Stg.Lift.Analysis#arg_occs).ghcEvery other kind of binderghcCaptures details of the syntax tree relevant to the cost model, such as closures, multi-shot lambdas and case expressions.ghcGets the bound  out a .ghcReturns J for s and K the flag indicating occurrences as argument or in a nullary applications otherwise.ghc free vars ghchow often the RHS was entered None q/ghcEssentially a GlobalRdrEnv, but with additional cached values to allow efficient re-calculation when the imports change. Fields are strict to avoid space leaks (see T4029) All operations are in GHC.Runtime.Context. See Note [icReaderEnv recalculation]ghc:Just the things defined at the prompt (excluding imports!)ghcThe final environmentghcline number (for errors)ghcfilename (for errors)ghc stepping mode))None r^ghcA measure of the size of the expressions, strictly greater than 0 Counts *leaves*, not internal nodes. Types and coercions are not counted. ^^^^^^^^^^^ ^^^^^^^^^^^None s^ghcEvaluate all the fields of the - that are generally demanded by the compiler^^^^^^^^^^^^^^None  u4ghc?A function to produce an annotation for a given right-hand-sideghc-Annotate with the size of the right-hand-sideghc No annotationghc4Pretty print the argument in a function application.ghc3generate an annotation to place before the bindingghcbindings to showghcthe pretty result^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^None%/ x{ghc{ p ol returns L if an overloaded literal ol, needs to be parenthesized under precedence p.{ghc{ p l returns L if a literal l- needs to be parenthesized under precedence p.See Note [Printing of literals in Core] in GHC.Types.Literal for the reasoning.{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.{{{{{{I{{{{zz{{{IIIIIIIIIIIIIIIIIIIIIIIIIIIIII{{{{z{z{{{{{{{{None  {]ghc CoreMapX a is the base map from DeBruijn CoreExpr to a, but without the L optimization.ghc CoreMapG a is a map from DeBruijn CoreExpr to a. The extended key makes it suitable for recursive traversal, since it can track binders, but it is strictly internal to this module. If you are including a  inside another L, this is the type you want.ghc CoreMap a is a map from  to a3. If you are a client, this is the type you want.OOOOLLLLLLLLLLLLLLLLLLLLLOOOOLLLuNone" $ghc'Type constructor for n-ary unboxed sum.$ghc=Data constructor for i-th alternative of a n-ary unboxed sum.$ghcSpecialization of  for tuples$ghc "type LiftedRep = 'BoxedRep 'Lifted$ghc &type UnliftedRep = 'BoxedRep 'Unlifted$ghcBuild the type of a small tuple that holds the specified type of thing Flattens 1-tuples. See Note [One-tuples]._ghcMake a fake, recovery  from an existing one. Used when recovering from errors in type declarations_ghcBuilt-in syntax isn't "in scope" so these OccNames map to wired-in Names with BuiltInSyntax. However, this should only be necessary while resolving names produced by Template Haskell splices since we take care to encode built-in syntax names specially in interface files. See Note [Symbol table representation of names].Moreover, there is no need to include names of things that the user can't write (e.g. type representation bindings like $tc(,,,)).ghcThis is only for Tuple n, not for Unit or SologhcSee Note [Small Ints parsing]_ghcIf the given name is that of a constraint tuple, return its arity.ghcCached type constructors, data constructors, and superclass selectors for constraint tuples. The outer array is indexed by the arity of the constraint tuple and the inner array is indexed by the superclass position.ghcGiven the TupleRep/SumRep tycon and list of RuntimeReps of the unboxed tuple;sum arguments, produces the return kind of an unboxed tuplesum type constructor. unboxedTupleSumKind [IntRep, LiftedRep] --> TYPE (TupleRep/SumRep [IntRep, LiftedRep])ghc/OccName for n-ary unboxed sum type constructor.ghcOccName for i-th alternative of n-ary unboxed sum data constructor.ghcCached type and data constructors for sums. The outer array is indexed by the arity of the sum and the inner array is indexed by the alternative._ghcSpecialization of  for sumsghcCreate type constructor and data constructors for n-ary unboxed sum.ghc@type ZeroBitRep = 'Tuple '[]_ghc Given a type ty, if ty is not of kind Type, return a data constructor that will box it, and the type of the boxed thing, which does4 now have kind Type. See Note [Boxing constructors]ghc+See Note [Boxing constructors] wrinkle (W1)`ghc,Make a tuple type. The list of types should not include any RuntimeRep specifications. Boxed 1-tuples are flattened. See Note [One-tuples]`ghc,Make a tuple type. The list of types should not include any RuntimeRep specifications. Boxed 1-tuples are *not* flattened. See Note [One-tuples] and Note [Don't flatten tuples from HsSyn] in  GHC.Core.Make`ghcMake a *promoted* list.ghcExtract the elements of a promoted list. Panics if the type is not a promoted list`ghc>Replaces constraint tuple names with corresponding boxed ones.ghcdeclared infix?ghc datacon nameghc univ tyvarsghc ex tycovarsghcuser-written tycovarsghcargs`ghcof the elements of the listghcelementsghcThe promoted list57$__$____$_$$__$_$___$_____$_`__$_$_$$___________`_$$_____$_$$$$$$$$__$____``````$``__`___`_$$$$$$_$$$$_____$$`_$`````_`_``__$$$_````$```_`___$$``````__`````````$$$___$_$___$$$$$$___$_____$__$_$$_$$_$_$$$$$$$$$_$$$$$$_$$___$___$$EEEEEEC_______________________``_`````````___________$________________________$__5`_7_`_`````_`_``_``````$_$$$$$___$________$_``_$___$$__$__$_`$$_$C_$$EEEEEE$$$$_$$$$___$________$___$$$$$$$$$$_$$$_$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$___$$__$$$$$$_$````````$``````None %ߚghcPer-module cache of original  s given sghcThe NameCache makes sure that there is just one Unique assigned for each original name; i.e. (module-name, occ-name) pair and provides something of a lookup mechanism for those names.ghc-Update the name cache with the given functionghc-Update the name cache with the given functionAdditionally, it ensures that the given Module and OccName are evaluated. If not, chaos can ensue: we read the name-cache then pull on mod (say) which does some stuff that modifies the name cache This did happen, with tycon_mod in GHC.IfaceToCore.tcIfaceAlt (DataAlt..) ߚ ߚ5None < PghcIs this type variable a concrete type variable, i.e. it is a metavariable with ` `?`ghcThe Paterson size of a given type, in the sense of Note [Paterson conditions] in GHC.Tc.Validityafter expanding synonyms,2ignoring coercions (as they are not user written).`ghc?The type mentions a type family, so the size could be anything.`ghc(The type does not mention a type family.`ghc)number of type constructors and variables`ghc#free tyvars, including repetitions;`ghcIndicates whether a Paterson condition failure occurred in an instance declaration or a type family equation. Useful for differentiating context in error messages.`ghcWhy did the Paterson conditions fail; that is, why was the context P not Paterson-smaller than the head H?2See Note [Paterson conditions] in GHC.Tc.Validity.`ghcSome type variables occur more often in P than in H. See (PC1) in Note [Paterson conditions] in GHC.Tc.Validity.`ghcP contains a type family. See (PC3) in Note [Paterson conditions] in GHC.Tc.Validity.`ghcWhat caused us to create a `? metavariable? See Note [ConcreteTv] in GHC.Tc.Utils.Concrete.`ghcA `< used to enforce the representation-polymorphism invariants.See   for more information.`ghcWhat restrictions are on this metavariable around unification? These are checked in GHC.Tc.Utils.Unify.checkTopShape`ghcThis MetaTv is an ordinary unification variable A TauTv is always filled in with a tau-type, which never contains any ForAlls.`ghcA variant of TauTv, except that it should not be unified with a type, only with a type variable See Note [TyVarTv] in GHC.Tc.Utils.TcMType`ghc6A unification variable used in the GHCi debugger. It is/ allowed to unify with a polytype, unlike TauTv`ghcA unification variable that can only be unified with a concrete type, in the sense of Note [Concrete types] in GHC.Tc.Utils.Concrete. See Note [ConcreteTv] in GHC.Tc.Utils.Concrete. See also Note [The Concrete mechanism] in GHC.Tc.Utils.Concrete for an overview of how this works in context.`ghcWhat to expect for an argument to a rebindable-syntax operator. Quite like , but allows for holes to be filled in by tcSyntaxOp. The callback called from tcSyntaxOp gets a list of types; the meaning of these types is determined by a left-to-right depth-first traversal of the ` tree. So if you pass in >SynAny `SynFun` (SynList `SynFun` SynType Int) `SynFun` SynAny/you'll get three types back: one for the first `, the element) type of the list, and one for the last `". You don't get anything for the `, because you've said positively that it should be an Int, and so it shall be.You'll also get three multiplicities back: one for each function arrow. See also Note [Linear types] in Multiplicity.-This is defined here to avoid defining it in GHC.Tc.Gen.Expr boot file.`ghcAny type`ghc5A rho type, skolemised or instantiated as appropriate`ghc6A list type. You get back the element type of the list`ghc A function.`ghc A known type.`ghcLike `, but for an expected type.See `.`ghcAn ` which has a fixed RuntimeRep.For a ` ` , the stored `' must have a fixed RuntimeRep. For an ` `, the ` field must be of the form  Just frr_orig.`ghc-The type that fills in this hole should be a Type, that is, its kind should be TYPE rr for some rr :: RuntimeRep.Additionally, if the ` field is  Just frr_orig then rr must be concrete, in the sense of Note [Concrete types] in GHC.Tc.Utils.Concrete.`ghcSee Note [FixedRuntimeRep context in ExpType] in GHC.Tc.Utils.TcMType`ghc5See Note [TcLevel of ExpType] in GHC.Tc.Utils.TcMType`ghcThis  is for debugging only`ghcAn expected type to check against during type-checking. See Note [ExpType] in GHC.Tc.Utils.TcMType&, where you'll also find manipulators.`ghcA ` is a `# which has a syntactically fixed B in the sense of Note [Fixed RuntimeRep] in GHC.Tc.Utils.Concrete.In particular, this means that: does not panic,6 does not return J.0This property is important in functions such as matchExpectedFunTys, where we want to provide argument types which have a known runtime representation. See Note [Return arguments with a fixed RuntimeRep.`ghcA type which has a syntactically fixed RuntimeRep as per Note [Fixed RuntimeRep] in GHC.Tc.Utils.Concrete.`ghcMake an ` suitable for checking.`ghc0Returns the expected type when in checking mode.`ghcReturns the expected type when in checking mode. Panics if in inference mode.`ghcLike ` but accepts a regular TcType`ghcLike mkFunTys but for `aghcFinds outermost type-family applications occurring in a type, after expanding synonyms. In the list (F, tys) that is returned we guarantee that tys matches F's arity. For example, given type family F a :: * -> * (arity 1) calling tcTyFamInsts on (Maybe (F Int Bool) will return (F, [Int]), not (F, [Int,Bool])This is important for its use in deciding termination of type instances (see #11581). E.g. type instance G [Int] = ...(F Int )... we don't need to take into account when asking if the calls on the RHS are smaller than the LHSaghcLike a, except that the output records whether the type family and its arguments occur as an  invisible argument in some type application. This information is useful because it helps GHC know when to turn on -fprint-explicit-kinds during error reporting so that users can actually see the type family being mentioned.As an example, consider: class C a data T (a :: k) type family F a :: k instance C (T @(F Int) (F Bool)) -There are two occurrences of the type family F in that C instance, so a (C (T @(F Int) (F Bool))) will return: [ (L, F, [Int]) , (I, F, [Bool]) ] F Int is paired with L since it appears as an  invisible argument to C , whereas F Bool is paired with I since it appears an a visible argument to C. See also 'Note [Kind arguments in error messages] in  GHC.Tc.Errors.aghcIn an application of a  to some arguments, find the outermost occurrences of type family applications within the arguments. This function will not consider the 4 itself when checking for type family applications.See a for more details on how this works (as this function is called inside of a).aghcCheck that a type does not contain any type family applications.aghcIs this type variable a concrete type variable, i.e. it is a metavariable with ` `? Returns the `( stored in the type variable if so, or J otherwise.aghc?Is this type concrete type variable, i.e. a metavariable with ` `?aghcIs this type a concrete type variable? If so, return the associated  and `.aghcReturns the (kind, type) variables in a type that are as-yet-unknown: metavariables and RuntimeUnksaghc-Make a sigma ty where all type variables are '>. That is, they cannot be used with visible type application.aghcMake a sigma ty where all type variables are "specified". That is, they can be used with visible type applicationaghc$Splits a forall type into a list of 's and the inner type. Always succeeds, even if it returns an empty list.aghc;Splits a type into a PiTyVarBinder and a body, if possible.aghcLike a, but splits off only named binders, returning just the tyvars.aghcLike a, but only splits Ds with ' type variable binders.aghcLike a, but only splits a D if argf_pred argf is L, where argf is the visibility of the ForAllTy's binder and  argf_pred is a predicate over visibilities provided as an argument to this function.aghcLike a, but only splits Ds with '= type variable binders. All split tyvars are annotated with ().aghcLike a, but only splits Ds with ' type variable binders. All split tyvars are annotated with their .aghcLike a$, but splits off only named binders.aghc4Split a sigma type into its parts. This only splits  invisible type variable binders, as these are the only forms of binder that the typechecker will implicitly instantiate.aghcSplit a sigma type into its parts, going underneath as many arrows and foralls as possible. See Note [tcSplitNestedSigmaTys]aghcLike tcRepSplitTyConApp_maybe, but only returns the .aghcSplit off exactly the specified number argument types Returns (Left m) if there are m missing arrows in the type (Right (tys,res)) if the type looks like t1 -> ... -> tn -> resaghc?Strips off n *visible* arguments and returns the resulting typeaghcLike a, but also says L for ` typesaghc&Check whether the type is of the form Any :: k, returning the kind k.aghc8Is the type inhabited by machine floating-point numbers?Used to check that we don't use floating-point literal patterns in Core.See #9238 and Note [Rules for floating-point comparisons] in GHC.Core.Opt.ConstantFold.aghc Is a type :?aghcFor every arg a tycon can take, the returned list says True if the argument is taken visibly, and False otherwise. Ends with an infinite tail of Trues to allow for oversaturation.aghcIf the tycon is applied to the types, is the next argument visible?aghcShould this type be applied to a visible argument? E.g. (s t): is t a visible argument of s?aghcltPatersonSize ps1 ps2 returns:Nothing iff ps1% is definitely strictly smaller than ps2, Just ps_fail otherwise; ps_fail says what went wrong.aghcWhen this says True, ignore this class constraint during a termination check See (PS1) in Note [The PatersonSize of a type]`ghcthe type variables which appear more often in the context | P is not smaller in size than H. See (PC2) in Note [Paterson conditions] in GHC.Tc.Validity.`ghc'the type constructor of the type familyghc7Is this an invisible argument to some type application?ghc7Is this an invisible argument to some type application?$$OOOOPOIIIIIIIIIIIIIFFGFFFFFFFFMMMMMMMMMMDDDDDDDDDDDDGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGCB(HH(I((IHIHHHHH(HHHHHH(HHHaaaaaaa``a`aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa`aaaaaaa`aaaa``aaaaa`aaaaaaaaaaa`aaaaa``aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa`aa''DGGG````````````````````````````````````````````````````````````````````````'''''''''``````````````````````D```````````````````````````````aaa````````````````aaaaHaaa``aaaaaaaaaaaaaaaaaaaaaaaaaH(HaaaaaaaaaaaaaaaaaHHaaaaaaHaaaaaaaaaaaaaaaaaaHCa(aaaaaIIIIIIIIIIIIIaaaaaaaaaaaaaaaaaa````````````aaaaaaaaaaa`aaGaa$$(HI'''''''''''DDHHHHHDDDDDD((HBDDDDOOPOOOaaaaHI''GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHI(FFFFFFFFFFMMMMMMMMMMaaa`None Q ghc.Do we force the result to be representational?ghcDo we apply a sym to the result?bghcCoercion optimisation optionsbghc.Enable coercion optimisation (reduce its size)bghcoptCoercion applies a substitution to a coercion, *and* optimises it to reduce its sizeghcOptimize a coercion, making no assumptions. All coercions in the lifting context are already optimized (and sym'd if nec'y)ghcOptimize a coercion, knowing the coercion's role. No other assumptions.ghc=Optimize a coercion, knowing the coercion's non-Phantom role.ghc Optimize a non-phantom coercion.ghc Optimize a non-phantom coercion.ghcOptimize a phantom coercion. The input coercion may not necessarily be a phantom, but the output sure will be.ghc/Conditionally set a role to be representationalghcIf we require a representational role, return that. Otherwise, return the "default" role provided.ghcThe role of the input coercionghc current roleghc"default" rolebbbbbbbbNone 9:; dlghcIface type for LambdaFormInfo. Fields not relevant for imported Ids are omitted in this type.mghcThis corresponds to HsSrcBangmghcThis corresponds to an HsImplBang; that is, the final implementation decision about the data constructor argmghcName of associated axiom and branches for pretty printing purposes, or J for an empty closed family without an axiom See Note [Pretty printing via Iface syntax] in GHC.Types.TyThing.PprnghcA binding top-level , in an interface file (e.g. the name of an m).nghcPretty Print an IfaceExprThe first argument should be a function that adds parens in context that need an atomic value (e.g. function args)nnnnnnnnnnnnnnnJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJlllmmllmmmmmmmmmmmmmmmmmmmllllmmmmmmmmmmmmmmmmmmmmmmmllllmmmmmmmmmmmmmmmmmmmmmmmmmnnnmmmnnnnmmmmmnnnnnnnnnnnnmnnmmllllllllllllllllmmmmmmmmmmmmlllllllllmmmmmmmmmmllllllllllllllmmmmmmmmmmmmmmllllnlllmmmmmmmmmmmmIIJJ JJ JJ IIIIIJIIJJJJIIJIIIIJJJJJJJJJJJJJJJ JJJJJJJJJJJJJ JJJ JJJJJJJJJJIIIIIIIIIIIIII IIIIIII'''''''' mmmmmmmnnmmmmmmmnmnnnmnnmnnnmnnnnnnnnnnmmmmmmmmmmmmmmmmmmmmmmmmmmmmllllllllllllllllllllllllllllllllllmlllllllllmmmlllmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmllllmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmlllllllllnnnnnnnnnnnnnnII IIIIIIInnNone ghc&The location where the sources reside.ghc%The module which the bindings are forghc serialised tidied core bindings.None ͏ghc6Printed C Type to be used with CAPI calling conventionNone(/17 $rghc9Name of an operator in an operator application or sectionrghcA normal identifierrghcPrefix negationrghcAn unbound identifierrghcA record field occurrencerghcThe extension field for Q2, which is only used in the renamer onwards. See ,Note [Pattern signature binders and scoping].rghcImplicitly bound variable namesrghcWildcard namesrghcReturn the attached flagrghcSet the attached flagrghcUpdate the attached flagrghcDo all type variables in this Q come with kind annotations?rghcConvert an arrow into its corresponding multiplicity. In essence this erases the information of whether the programmer wrote an explicit multiplicity or a shorthand.rghc7Get the kind signature of a type, ignoring parentheses:hsTyKindSig `Maybe ` = Nothing hsTyKindSig `Maybe :: Type -> Type ` = Just `Type -> Type` hsTyKindSig `Maybe :: ((Type -> Type))` = Just `Type -> Type`This is used to extract the result kind of type synonyms with a CUSK:2type S = (F :: res_kind) ^^^^^^^^rghcRetrieve the name of the "head" of a nested type application. This is somewhat like GHC.Tc.Gen.HsType.splitHsAppTys, but a little more thorough. The purpose of this function is to examine instance heads, so it doesn't handle *all* cases (like lists, tuples, (~), etc.).rghc Compute the  associated with an P.rghcr id fixity args! pretty-prints an application of id to args , using the fixity to tell whether id. should be printed prefix or infix. Examples: pprHsArgsApp T Prefix [HsTypeArg Bool, HsValArg Int] = T @Bool Int pprHsArgsApp T Prefix [HsTypeArg Bool, HsArgPar, HsValArg Int] = (T @Bool) Int pprHsArgsApp (++) Infix [HsValArg Char, HsValArg Double] = Char ++ Double pprHsArgsApp (++) Infix [HsValArg Char, HsValArg Double, HsVarArg Ordering] = (Char ++ Double) Ordering ghc.Pretty-print a prefix identifier to a list of Ps.ghcPretty-print an P in isolation.rghcDecompose a pattern synonym type signature into its constituent parts.Note that this function looks through parentheses, so it will work on types such as  (forall a.  ...). The downside to this is that it is not generally possible to take the returned types and reconstruct the original type (parentheses and all) from them.rghc$Decompose a sigma type (of the form forall  tvs. context => body) into its constituent parts. Only splits type variable binders that were quantified invisibly (e.g.,  forall a., with a dot).This function is used to split apart certain types, such as instance declaration types, which disallow visible forall)s. For instance, if GHC split apart the forall in "instance forall a -> Show (Blah a)6, then that declaration would mistakenly be accepted!Note that this function looks through parentheses, so it will work on types such as  (forall a.  ...). The downside to this is that it is not generally possible to take the returned types and reconstruct the original type (parentheses and all) from them.rghc;Decompose a GADT type into its constituent parts. Returns (outer_bndrs, mb_ctxt, body), where: outer_bndrs are Q if the type has explicit, outermost type variable binders. Otherwise, they are Q.mb_ctxt is Just5 the context, if it is provided. Otherwise, it is Nothing.body, is the body of the type after the optional foralls and context.?This function is careful not to look through parentheses. See Note [GADT abstract syntax] (Wrinkle: No nested foralls or contexts)  GHC.Hs.Decls for why this is important.rghcDecompose a type of the form forall  tvs. body into its constituent parts. Only splits type variable binders that were quantified invisibly (e.g.,  forall a., with a dot).This function is used to split apart certain types, such as instance declaration types, which disallow visible forall)s. For instance, if GHC split apart the forall in "instance forall a -> Show (Blah a)6, then that declaration would mistakenly be accepted!Note that this function looks through parentheses, so it will work on types such as  (forall a.  ...). The downside to this is that it is not generally possible to take the returned types and reconstruct the original type (parentheses and all) from them. Unlike r, this function does not look through parentheses, hence the suffix _KP (short for "Keep Parentheses").rghcDecompose a type of the form forall  tvs. body into its constituent parts. Only splits type variable binders that were quantified invisibly (e.g.,  forall a., with a dot).This function is used to split apart certain types, such as instance declaration types, which disallow visible forall)s. For instance, if GHC split apart the forall in "instance forall a -> Show (Blah a)6, then that declaration would mistakenly be accepted!Unlike r, this function does not look through parentheses, hence the suffix _KP (short for "Keep Parentheses").rghcDecompose a type of the form context => body into its constituent parts.Note that this function looks through parentheses, so it will work on types such as  (context =>  ...). The downside to this is that it is not generally possible to take the returned types and reconstruct the original type (parentheses and all) from them.ghcDecompose a type of the form context => body into its constituent parts.Unlike r, this function does not look through parentheses, hence the suffix _KP (short for "Keep Parentheses").rghc3Decompose a type class instance type (of the form forall  tvs. context => instance_head-) into its constituent parts. Note that the [Name] s returned correspond to either:The implicitly bound type variables (if the type lacks an outermost forall), orThe explicitly bound type variables (if the type has an outermost forall).?This function is careful not to look through parentheses. See 6Note [No nested foralls or contexts in instance types] for why this is important.rghc3Decompose a type class instance type (of the form forall  tvs. context => instance_head ) into the  instance_head.rghc3Decompose a type class instance type (of the form forall  tvs. context => instance_head ) into the  instance_head and retrieve the underlying class type constructor (if it exists).sghcPrints the explicit forall in a type family equation if one is written. If there is no explicit forall, nothing is printed.sghcPrints the outermost forall in a type signature if one is written. If there is no outermost forall, nothing is printed.sghc3Prints a forall; When passed an empty list, prints forall ./ forall -> only when  -dppr-debug is enabled.sghcs p t returns L if the type t% needs parentheses under precedence p.sghcs p ty checks if s p ty is true, and if so, surrounds ty with an Q . Otherwise, it simply returns ty.sghcs p ctxt checks if ctxt is a single constraint c such that s p c is true, and if so, surrounds c with an Q to form a parenthesized ctxt . Otherwise, it simply returns ctxt unchanged.sghcThis instance is meant for debug-printing purposes. If you wish to pretty-print an application of Ps, use r instead.rghc Location of forall and -> for HsForAllVis Location of forall and k for HsForAllInvissrrrrrrrrrrrrrrrrrrrrrrrrrrrsrrrrrrrrrrrrrrrrrrrrrrrssssrrsssssrrrrrrrrrrrrQQQQQQQQQPPPPPPrrrrrrrrrrrr PPPPQPPPPQQPPPPPPPPPPQQQQQQQPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQPQQPQQQQQQQQQQQPQQQQQQQQQrQQQrrrrQQQQQQQQQQQQQQQQQQQQQQQQQQQQQrQQQQQQQQQQQrQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQrrrrQQQQQQQQQQQQQQrQQQQQQQQPPPPrrPrrQQPPPPPP rrPPPQQPPQsPPPPQPPPPPPrPPPPPrrrrrsrrrrrrsrrQrrrrrrrrrrQrQrrrrrrrrrrrrrrrrrrrrrrrrrrrrrQrrrrssssssssNone &ighcEvery node in an expression annotated with its (non-global) free variables, both Ids and TyVars, and type.ighcEvery node in an expression annotated with its (non-global) free variables, both Ids and TyVars, and type. NB: see Note [The FVAnn invariant]ighcEvery node in a binding group annotated with its (non-global) free variables, both Ids and TyVars, and type.ighcFind all locally-defined free Ids or type variables in an expression returning a non-deterministic set.ighcFind all locally-defined free Ids or type variables in an expression returning a composable FV computation. See Note [FV naming conventions] in  GHC.Utils.FV for why export it.ighcFind all locally-defined free Ids or type variables in an expression returning a deterministic set.ighcFind all locally-defined free Ids or type variables in an expression returning a deterministically ordered list.ighc2Find all locally-defined free Ids in an expressionighcFind all locally-defined free Ids in an expression returning a deterministic set.ighcFind all locally-defined free Ids in an expression returning a deterministically ordered list.ighcFind all locally-defined free Ids in several expressions returning a deterministic set.ighcFind all locally-defined free Ids in several expressions returning a deterministically ordered list.ighcFind all locally-defined free Ids or type variables in several expressions returning a non-deterministic set.ghcFind all locally-defined free Ids or type variables in several expressions returning a composable FV computation. See Note [FV naming conventions] in  GHC.Utils.FV for why export it.ighcFind all locally-defined free Ids or type variables in several expressions returning a deterministically ordered list.ighc4Find all locally defined free Ids in a binding groupighc=Finds free variables in an expression selected by a predicateighcFinds free variables in an expression selected by a predicate returning a deterministically ordered list.ghcFinds free variables in an expression selected by a predicate returning a deterministic set.ighcFinds free variables in several expressions selected by a predicateighcFinds free variables in several expressions selected by a predicate returning a deterministically ordered list.ghcFinds free variables in several expressions selected by a predicate returning a deterministic set.ghcFinds the free external names of an expression, notably including the names of type constructors (which of course do not show up in i).ighcFinds the free external# names of several expressions: see  for detailsighci collects the names of the concrete types and type constructors that make up the LHS of a type family instance, including the family name itself.For instance, given `type family Foo a b`: `type instance Foo (F (G (H a))) b = ...` would yield [Foo,F,G,H]Used (via orphNamesOfFamInst) in the implementation of ":info" in GHCi. and when determining orphan-hood for a FamInst or moduleghcThose locally-defined variables free in the left and/or right hand sides of the rule, depending on the first argument. Returns an ( computation.ghcThose locally-defined variables free in the left and/or right hand sides from several rules, depending on the first argument. Returns an ( computation.ighcThose variables free in the right hand side of a rule returned as a non-deterministic setighcThose locally-defined free s in the right hand side of several rules returned as a non-deterministic setighcThis finds all locally-defined free Ids on the left hand side of a rule and returns them as a non-deterministic setighcThis finds all locally-defined free Ids on the left hand side of a rule and returns them as a deterministically ordered listighcThose variables free in the both the left right hand sides of a rule returned as a non-deterministic setighcThose variables free in the both the left right hand sides of rules returned as a deterministic setighcThose variables free in both the left right hand sides of several rulesighcMake a \ containing a number of Y!s, suitable for putting into an ighcInverse function to iighc$Extract the vars reported in a FVAnnighc Annotate a  with its (non-global) free type and value variables at every tree node.ighc Says which s are interestingighc Says which s are interestingghc Says which s are interestingghc Says which s are interesting3iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii(3iiiiiiiiiiii(iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiNone7< ghcCollect class instance matches, including matches that we know are overridden but might still be useful to override other instances (which we call "guards").'See Note [Instance overlap and guards].ghcGuards: matches that we know we won't pick in the end, but might still be useful for ruling out other instances, as per #20946. See Note [Instance overlap and guards], (A).ghcMinimal matches: we have knocked out all strictly more general matches that are overlapped by a match in this list.pghc=Why a particular typeclass application couldn't be looked up.pghcTyvars aren't an exact match.pghcOne of the tyvars is flexible.pghcNo matching instance was found.pghcSet of visible orphan modules, according to what modules have been directly imported. This is based off of the dep_orphs field, which records transitively reachable orphan modules (modules that define orphan instances).pghcp represents the combination of the global type class instance environment, the local type class instance environment, and the set of transitively reachable orphan modules (according to what modules have been directly imported) used to test orphan instance visibility.pghcA type-class instance. Note that there is some tricky laziness at work here. See Note [ClsInst laziness and the rough-match fields] for more details.qghcis_dfun_name = idName . is_dfun.We use q for the visibility check, q, which needs to know the   which the dictionary is defined in. However, we cannot use the   attached to p since doing so would mean we would potentially pull in an entire interface file unnecessarily. This was the cause of #12367.qghcTop of type args The class itself is always the first element of this listqghc Class nameqghcA fuzzy comparison function for class instances, intended for sorting instances before displaying them to the user.qghcCollects the names of concrete types and type constructors that make up the head of a class instance. For instance, given `class Foo a b`:`instance Foo (Either (Maybe Int) a) Bool` would yield [Either, Maybe, Int, Bool].Used in the implementation of ":info" in GHCi.The a is because of instance Foo a => Baz T where ... The decl is an orphan if Baz and T are both not locally defined, even if Foo *is* locally definedqghcTest if an instance is visible, by checking that its origin module is in p2. See Note [Instance lookup and orphan instances]qghcChecks for an exact match of ClsInst in the instance environment. We use this when we do signature checking in  GHC.Tc.Moduleqghc/Makes no particular effort to detect conflicts.qghcTrue when when the instance heads are the same e.g. both are Eq [(a,b)] Used for overriding in GHCi Obviously should be insensitive to alpha-renamingqghcLook up an instance in the given instance environment. The given class application must match exactly one instance and the match may not contain any flexi type variables. If the lookup is unsuccessful, yield 'Left errorMessage'.qghcSee Note [Rules for instance lookup] ^ See Note [Safe Haskell Overlapping Instances] in  GHC.Tc.Solver ^ See Note [Safe Haskell Overlapping Instances Implementation] in  GHC.Tc.SolverghcRemove from the argument list any InstMatches for which another element of the list is more specific, and overlaps it, using the rules of Note [Rules for instance lookup]ghcComputes whether the first class instance overrides the second, i.e. the first is more specific and can overlap the second.More precisely, instA  instB returns L precisely when:instA is more specific than instB,instB is not more specific than instA,instA is overlapping OR instB is overlappable.ghcAdd a new solution, knocking out strictly less specific ones See Note [Rules for instance lookup] and Note [Instance overlap and guards].Property/: the order of insertion doesn't matter, i.e. ;insert_overlapping inst1 (insert_overlapping inst2 matches) gives the same result as ;insert_overlapping inst2 (insert_overlapping inst1 matches).qghcthe name of the classghc)the rough match signature of the instanceghcthe  of the dictionary bindingghcthe  of the dictionary.ghcmay this instance overlap?ghcis this instance an orphan?qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqMM"pppqqpqppqqqppppppppppppppppp!!!!!!!!!!!''ppppppqq!!!!!!!!!!!"ppqqqqqqppppqqqqqqqqqqqqpppppppppppqqqqqqqqqqqqqqqqqqqqMMqqqNone7 %qghcWhere to store evidence for expression holes See Note [Holes] in GHC.Tc.Types.Constraintqghc Evidence for  CallStack implicit parameters.qghcEvCsPushCall origin loc stk represents a call from origin, occurring at loc, in a calling context stk.qghcInstructions on how to make a Typeable0 dictionary. See Note [Typeable evidence terms]qghcDictionary for  Typeable T where T is a type constructor with all of its kind variables saturated. The [EvTerm] is Typeable" evidence for the applied kinds..qghcDictionary for Typeable (s t), given a dictionaries for s and t.qghcDictionary for Typeable (s % w -> t), given a dictionaries for w, s, and t.qghc%Dictionary for a type literal, e.g. Typeable "foo" or  Typeable 3 The q is evidence of, e.g.,  KnownNat 3 (see #10348)qghcIf a ! is !$, flip the orientation of a coercionqghcSmart constructor to create a q q.PRECONDITION: the "from" type of the first wrapper must have a syntactically fixed RuntimeRep (see Note [Fixed RuntimeRep] in GHC.Tc.Utils.Concrete).qghcIdentifies the  lambda-bound dictionaries of an q. This is used (only) to allow the pattern-match overlap checker to know what Given dictionaries are in scope.7We specifically do not collect dictionaries bound in a q. These are either superclasses of lambda-bound ones, or (extremely numerous) results of binding Wanted dictionaries. We definitely don't want all those cluttering up the Given dictionaries for pattern-match overlap checking!rghc,Any sort of evidence Id, including coercionsrghcd |> corghc Create a  that unwraps an implicit-parameter dictionary to expose the underlying value. We expect the - to have the form `IP sym ty`, and return a  `co :: IP sym ty ~ ty`rghc Create a > that wraps a value in an implicit-parameter dictionary. See r.rghcConvert the QuoteWrapper into a normal HsWrapper which can be used to apply its contents.rghc-The Semigroup instance is a bit fishy, since  WpCompose, as a data constructor, is "syntactic" and not associative. Concretely, if a, b, and c aren't WpHole: (a <> b) <> c ?= a <> (b <> c)> (a `WpCompose` b) `WpCompose` c /= @ a `WpCompose` (b `WpCompose` c)However these two associations are are "semantically equal" in the sense that they produce equal functions when passed to GHC.HsToCore.Binds.dsHsWrapper.qghc&where to write the erroring expressionghc expected type of that expressionghcfor debug output onlyqghcthe "from" type of the first wrapper MUST have a fixed RuntimeRepghcEither "from" type or "to" type of the second wrapper (used only when the second wrapper is the identity)qrqrrrrrrrrrrrrrrrrrrrqqqrrqrqrrrrqqqqqqqqqqrrrrrr!Dqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq!!! qqqqqqqqqqqqqqqqqqqqqqqqqrqqqqqqqqqqqqqrrrrrrrrrrqqqqqqqqqrrrrrqqqqqqqqqqrrrrrrrrrrrrrqqqqqqqqqqqqqqDqqq !!!!qrrqqrrNone/17 0{ghc!Type checker Specification Pragma{ghcThe Id to be specialised, a wrapper that specialises the polymorphic function, and inlining spec for the specialised function{ghc*Located Type checker Specification Pragmas{ghc#Type checker Specialisation Pragmas{ conveys  SPECIALISE/ pragmas from the type checker to the desugarer{ghcSuper-specialised: a default method should be macro-expanded at every call site{ghcA type signature in generated code, notably the code generated for record selectors. We simply record the desired Id itself, replete with its name, type and IdDetails. Otherwise it's just like a type signature: there should be an accompanying binding{ghcAbstraction Bindings Export{ghcSPECIALISE pragmas{ghcSee Note [ABExport wrapper] Shape: (forall abs_tvs. abs_ev_vars => abe_mono) ~ abe_poly{ghc(Any INLINE pragma is attached to this Id{ghcTypechecked, generalised bindings, used in the output to the type checker. See Note [AbsBinds].{ghcTypechecked user bindings{ghc#Evidence bindings Why a list? See GHC.Tc.TyCl.Instance4 Note [Typechecking plan for instance declarations]{ghcAbsBinds only gets used when idL = idR after renaming, but these need to be idL's for the collect... code in HsUtil to have the right type{ghcIncludes equality constraints{ghc7Extracts the name for a SPECIALIZE instance pragma. In {, the src field of R signature contains the SourceText for a SPECIALIZE instance pragma of the form: "SourceText {-# SPECIALIZE"Extraction ensures that all variants of the pragma name (with a Z or an S+) are output exactly as used in the pragma.{ghcUsing SourceText in case the pragma was spelled differently or used mixed caseghcAfter the type-checker, the FunBind extension field contains the ticks to put on the rhs, if any, and a coercion from the type of the MatchGroup to the type of the Id. Example: 1 f :: Int -> forall a. a -> a f x y = y Then the MatchGroup will have type (Int -> a' -> a') (with a free type variable a'). The coercion will take a CoreExpr of this type and convert it to a CoreExpr of type Int -> forall a'. a' -> a' Notice that the coercion captures the free a'.ghcAfter the renamer (but before the type-checker), the FunBind extension field contains the locally-bound free variables of this defn. See Note [Bind free vars]{{{{{{{{{{{{{{{{{{{{{{{{{{{SRRSRSRRR{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR9{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{None(/7 ={ghcThis is the extension field for ConPat, added after typechecking It adds quite a few extra fields, to support elaboration of pattern matching.{ghcExtra wrapper to pass to the matcher Only relevant for pattern-synonyms; ignored for data cons{ghc%Bindings involving those dictionaries{ghcDitto *coercion variables* and *dictionaries* One reason for putting coercion variable here I think is to ensure their kinds are zonked{ghcExistentially bound type variables in correctly-scoped order e.g. [k:* x:k]{ghcThe universal arg types 1-1 with the universal tyvars of the constructor/pattern synonym Use (conLikeResTy pat_con cpt_arg_tys) to get the type of the pattern{ghc8Extension constructor for Pat, added after typechecking.{ghc#Coercion Pattern (translation only):During desugaring a (CoPat co pat) turns into a cast with co+ on the scrutinee, followed by a match on pat.{ghcPattern expansion: original pattern, and desugared pattern, for RebindableSyntax and other overloaded syntax such as OverloadedLists. See Note [Rebindable syntax and HsExpansion].{ghcType of whole pattern, t1{ghc)Why not LPat? Ans: existing locn will do{ghcCoercion Pattern If co :: t1 ~ t2, p :: t2, then (CoPat co p) :: t1ghc)Print with type info if -dppr-debug is on{ghc(isIrrefutableHsPat p) is true if matching against p cannot fail in the sense of falling through to the next pattern. (NB: this is not quite the same as the (silly) defn in 3.17.2 of the Haskell 98 report.)WARNING: isIrrefutableHsPat returns False if it's in doubt. Specifically on a ConPatIn, which is what it sees for a (LPat Name) in the renamer, it doesn't know the size of the constructor family, so it returns False. Result: only tuple patterns are considered irrefutable at the renamer stage.=But if it returns True, the pattern is definitely irrefutable{ghc%Is the pattern any of combination of:(pat) pat :: Type~pat!pat x (variable){ghcIs this pattern boring from the perspective of pattern-match checking, i.e. introduces no new pieces of long-dinstance information which could influence pattern-match checking?See Note [Boring patterns].{ghc{ p pat returns L if the pattern pat% needs parentheses under precedence p.ghc p cp returns L if the constructor patterns cp% needs parentheses under precedence p.{ghc0Parenthesize a pattern without token information{ghc{ p pat checks if { p pat is true, and if so, surrounds pat with a R. Otherwise, it simply returns pat.{ghc Are we in a -XStrict1 context? See Note [-XStrict and irrefutability]{{{{{{{{{{{{{{{{{{R{RRRR{{{{{{{{{{{{{{{{{{{{RRRRQQRRQQRRRRRRRRR RRRRRRRRRRRRRRRRRRRRRRR RRRRRRRRRRRRRRRRRRRR {{{{{{{{{{{{R{{{{{{{{RRRRRRRRQQQRRQRRRRRRRRRR{R{{{{{{{{{{{{{{{{{{RNone 1 CghcAn accumulator to build a prefix data constructor, e.g. when parsing  MkT A B C), the accumulator will evolve as follows:  1. PrefixDataConBuilder [] MkT 2. PrefixDataConBuilder [A] MkT 3. PrefixDataConBuilder [A, B] MkT 4. PrefixDataConBuilder [A, B, C] MkT There are two reasons we have a separate builder type instead of using HsConDeclDetails GhcPs directly: It's faster, because  gives us constant-time snoc.Having a separate type helps ensure that we don't forget to finalize a RecTy into a P (we do that in dataConBuilderDetails).See Note [PatBuilder] for another builder type used in the parser. Here the technique is similar, but the motivation is different.ghc?See Note [Ambiguous syntactic categories] and Note [PatBuilder]ghc"Last two are the locations of the '|' before and after the payloadNone/7 I8 |ghcThe locations of forall and k for forall'd term vars Using AddEpAnn to capture possible unicode variants|ghcThe locations of forall and k for forall'd type vars Using AddEpAnn to capture possible unicode variants|ghcdoes this have a CUSK? See Note [CUSKs: complete user-supplied kind signatures]|ghcPartition a list of HsDecls into function/pattern bindings, signatures, type family declarations, type family instances, and documentation comments.Panics when given a declaration that cannot be put into any of the output groups.2The primary use of this function is to implement .|ghcThe fixity signatures for each top-level declaration and class method in an U7. See Note [Top-level fixity signatures in an HsGroup]|ghcDoes this declaration have a complete, user-supplied kind signature? See Note [CUSKs: complete user-supplied kind signatures]|ghc-Maybe return name of the result type variable|ghcA short description of a DerivStrategy'.|ghcReturn K fields> if a data constructor declaration uses record syntax (i.e., P ), where fields- are the field selectors. Otherwise, return J.|ghc Convert a T to a  |ghc Eliminate a S.|ghc Map over the via type if dealing with S. Otherwise, return the S unchanged.||||||||||||||||||||||||||||||||||UUUUUUUUUUUUUUUUU|||||||||||||SSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTSSSSSSTTTTSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUTTTTTTTUUUUUUUUUUUUUUUTTTTSSSSSSSSSSSSSTSSTSSSTTSUTTTSSSSSUTTTTTSSTSSSSSSSSSSSSSSSSSSSSSSUUUUUUTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTSSSSSSSSUUUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTTTTT||TTTT|TTTTTTTTTTTTTTTTTTTTTTTTT||||TTTTTTTTUUUUUUU|UUUUU|||||U||TTTTTTTTTTTTTTT||SSSSSSSSSSSSTTTTTTTTTT|TTSSSS|||SSSSSSSSSTTTSSSSSSSSSSSSSSSSSSSSSSSSS|||||SSSSSSSSSSSSSSSSS|||||||SSSSSU||SSSSUUUUUUUSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTT|||SSSSSSUSSSSSSSSSSSSSSSSSSUSSSS|TTTTTTTTTT|||UUUUUUUUUUUUUUU|||U||None /167 WXWghc8The result of splicing; See Note [Lifecycle of a splice]Wghc%TH finalizers produced by the splice.Wghc&Finalizers produced by a splice with See Note [Delaying modFinalizers in untyped splices] in GHC.Rename.Splice. For how this is used.|ghcPending Type-checker Splice|ghcPending Renamer Splice|ghcMatch separator location}ghc'Command Syntax Table (for Arrow syntax)}ghc')'}ghc'('}ghc0Information about the parent of a record update:/the parent type constructor or pattern synonym,the relevant con-likes,the field labels.}ghc)HsWrap appears only in typechecker output}ghc7An expression with wrappers, used for rebindable syntaxThis should desugar to syn_res_wrap $ syn_expr (syn_arg_wraps[0] arg0) (syn_arg_wraps[1] arg1) ...:where the actual arguments come from elsewhere in the AST.}ghcThe function to use in rebindable syntax. See Note [NoSyntaxExpr].}ghcPost-Type checking TableWe use a PostTcTable where there are a bunch of pieces of evidence, more than is convenient to keep individually.}ghcPost-Type checking ExpressionPostTcExpr is an evidence expression attached to the syntax tree by the type checker (c.f. postTcType).}ghcThis is used for rebindable-syntax pieces that are too polymorphic for tcSyntaxOp (trS_fmap and the mzip in ParStmt)}ghcMake a 'SyntaxExpr GhcRn' from an expression Used only in getMonadFailOp. See Note [Monad fail : Rebindable syntax, overloaded strings] in GHC.Rename.Expr}ghcMake a   from a 4 (the "rn" is because this is used in the renamer).}ghc} p e returns L if the expression e% needs parentheses under precedence p.}ghc4Parenthesize an expression without token information}ghc} p e checks if } p e is true, and if so, surrounds e with an V. Otherwise, it simply returns e.}ghc.Is there only one RHS in this list of matches?~ghc(Just print the original expression (the a).}}}}}}}}}~}~}~}}}}}}}~~}}~~}}}}}}}}W}~W}}}~}W}~~~~}}}W}~}}~~~}}WW}}}}}}}}}}}}}~}}}}}WWWWWWWWW}}}}}}}}}}}}}}}}}}}}}}}||}}}}}}}}}||||}}}}}}}}}}}}}}}}WWWWW}}|||||||||}}||||||W}}}}}}}}}}W||||||||||||||||}}}}}}UUUUVVUVVUVVVUUUUUVVVVVVVVVVWWVVV VVVVVVVVVVVVUUUUUVVVVVVVVVVVVVVVUUUUUU WWVVWVVVWWVWVVWVWVVVWWWVWWWVWWVVVWWVVWWWWWWWWWWWWUUUUUUUUUUUUUUUUUVVVUUUUUUUUVUUUUUUVVVV UUUWVVV WWWWWWWWWVVVVVVVVVVVVVV VVVVVVVWWVVVVVVVVVVVVVVVVVVVVVVVVVVV VVV}WWWWWWWWWW~}||||W||W|}}}}}}}}}}W}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|||||}}}}}||||}}~||||||||||||||||}}}}}}}}}|||||}}}}}}}~}~~~~~~~~~~~~~~~None67 \None )*9 g ghc1a monad for the normalisation functions, reading i, a N, and a  .ighc;Result of testing two type family equations for injectiviy.ighcEither RHSs are distinct or unification of RHSs leads to unification of LHSsighcRHSs unify but LHSs don't unify under that substitution. Relevant for closed type families where equation after unification might be overlapped (in which case it is OK if they don't unify). Constructor stores axioms after unification.ighc Create a i from  indices. INVARIANTS: * The fs_tvs are distinct in each FamInst of a range value of the map (so we can safely unify them)ighc/Makes no particular effort to detect conflicts.ighcCheck whether two type family axioms don't violate injectivity annotation.ighcCreate a coercion constructor (axiom) suitable for the given newtype . The % should be that of a new coercion @, the  s the arguments expected by the newtype8 and the type the appropriate right hand side of the newtype/, with the free variables a subset of those s.ighcCheck whether an open type family equation can be added to already existing instance environment without causing conflicts with supplied injectivity annotations. Returns list of conflicting axioms (type instance declarations).ighcDo an apartness check, as described in the "Closed Type Families" paper (POPL '14). This should be used when determining if an equation (@) of a closed type family can be used to reduce a certain target type family application.ighcGet rid of *outermost* (or toplevel) * type function redex * data family redex * newtypes returning an appropriate Representational coercion. Specifically, if topNormaliseType_maybe env ty = Just (co, ty') then (a) co :: ty ~R ty' (b) ty' is not a newtype, and is not a type-family or data-family redexHowever, ty' can be something like (Maybe (F ty)), where (F ty) is a redex.Always operates homogeneously: the returned type has the same kind as the original type, and the returned coercion is always homogeneous.ighcTry to simplify a type-family application, by *one* step If topReduceTyFamApp_maybe env r F tys = Just (HetReduction (Reduction co rhs) res_co) then co :: F tys ~R# rhs res_co :: typeKind(F tys) ~ typeKind(rhs) Type families and data families; always Representational roleighc flattened target arguments. Make sure they're flattened! See Note [Flattening type-family applications when matching instances] in GHC.Core.Unify.ghcthe candidate equation we wish to use Precondition: this matches the targetghcTrue  = equation can fire?iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii?iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiNone iLghc A map from s to s, constructed by typechecking local declarations or interface filesNone lSghcThe / is essentially a cache for information in the ModIface for home modules only. Information relating to packages will be loaded into global environments in ExternalPackageState.ghc&Complete match pragmas for this moduleghcAnnotations present in this module: currently they only annotate things also declared in this moduleghcDomain may include Ids from other modulesghcDFunId"s for the instances in this moduleghcLocal type environment for this particular module Includes Ids, TyCons, PatSynsghcConstructs an empty ModDetails  None sghcWhether | is a synonym for .sghcSomething is promoted to the type-level without a promotion tick.sghc"Explain how something is in scope.sghc8It was locally bound at this particular source location.sghc6It was imported by this particular import declaration.sghcSuggest how to fix an import.sghcSome module exports what we want, but we aren't explicitly importing it.sghcSome module exports what we want, but we are explicitly hiding it.sghc5The module exports what we want, but it isn't a type.sghc=The module exports what we want, but it's a type and we have ExplicitNamespaces on.sghc;Suggest importing a data constructor to bring it into scopesghcThe  ' of the parent of the data constructor.sghcWhere to suggest importing the DataCon from.The 98 tracks whether to suggest using an import of the form import (pattern Foo), depending on whether -XPatternSynonyms was enabled.sghcAn s< for a '.hsig' file. This is generated by GHC in case of a DriverUnexpectedSignature and suggests a way to instantiate a particular signature, where the first argument is the signature name and the second is the module where the signature was defined. Example:src/MyStr.hsig:2:11: error: Unexpected signature: @MyStr@ (Try passing -instantiated-with="MyStr= MyStr" replacing  MyStr as necessary.)sghc$A type for hints emitted by GHC. A hint suggests a possible way to deal with a particular warning or error.sghcAn "unknown" hint. This type constructor allows arbitrary -- hints to be embedded. The typical use case would be GHC plugins -- willing to emit hints alongside their custom diagnostics.sghcSuggests adding a particular language extension. GHC will do its best trying to guess when the user is using the syntax of a particular language extension without having the relevant extension enabled.Example: If the user uses the keyword "mdo" (and we are in a monadic block), but the relevant extension is not enabled, GHC will emit a 'SuggestExtension RecursiveDo'.Test case(s): parser should_failT12429, parser should_fail$T8501c, parser should_failT18251e, ... (and many more)sghcSuggests possible corrections of a misspelled pragma. Its argument represents all applicable suggestions.%Example: {-# LNGUAGE BangPatterns #-}Test case(s): parsershould_compileT21589sghcSuggests that a monadic code block is probably missing a "do" keyword.Example: main = putStrLn "hello" putStrLn "world"Test case(s): parser should_failT8501a, parser should_fail)readFail007, parser should_failInfixAppPatErr, parser should_failT984sghc;Suggests that a "let" expression is needed in a "do" block.Test cases: None (that explicitly test this particular hint is emitted).sghcSuggests to add an ".hsig" signature file to the Cabal manifest.Triggered by: -, if Cabal is being used.Example: See comment of DriverUnexpectedSignature.Test case(s): driver/T12955sghcSuggests to explicitly list the instantiations for the signatures in the GHC invocation command.Triggered by: ", if Cabal is not being used.Example: See comment of DriverUnexpectedSignature.Test case(s): driver/T12955sghc'Suggests to use spaces instead of tabs.Triggered by: .)Examples: None Test Case(s): Nonesghc4Suggests adding a whitespace after the given symbol.+Examples: None Test Case(s): parsershould_compile T18834a.hssghcSuggests adding a whitespace around the given operator symbol, as it might be repurposed as special syntax by a future language extension. The second parameter is how such operator occurred, if in a prefix, suffix or tight infix position.Triggered by: .;Example: h a b = a+b -- not OK, no spaces around {.Test Case(s): parsershould_compile T18834b.hssghc.Suggests wrapping an expression in parentheses)Examples: None Test Case(s): NonesghcSuggests to increase the -fmax-pmcheck-models limit for the pattern match checker.Triggered by: Test case(s): pmcheckshould_compile)TooManyDeltas pmcheckshould_compile)TooManyDeltas pmcheckshould_compileT11822sghcSuggests adding a type signature, typically to resolve ambiguity or help GHC inferring types.sghcSuggests to explicitly discard the result of a monadic action by binding the result to the '_' wilcard.>Example: main = do _ <- getCurrentTimesghcSuggests adding an identifier to the export list of a signature.sghcSuggests increasing the limit for the number of iterations in the simplifier.sghcSuggests to explicitly import  from the + module, because using "*" to mean  relies on the StarIsType extension, which will become deprecated in the future.Triggered by:  Example: None Test case(s): wcompat-warnings/WCompatWarningsOn.hssghcSuggests placing the  qualified keyword after the module name.Triggered by: = Example: None Test case(s): module/mod184.hssghc0Suggests using TemplateHaskell quotation syntax.Triggered by:  only if TemplateHaskell is enabled. Example: None Test case(s): parser should_fail T13450TH.hssghc;Suggests alternative roles in case we found an illegal one.Triggered by: 2 Example: None Test case(s): roles should_fail Roles7.hssghcSuggests qualifying the |1 operator in modules where StarIsType is enabled.Triggered by:  Test case(s): warningsshould_compile StarBinder.hssghc0Suggests that a type signature should have form  variable ::  type( in order to be accepted by GHC.Triggered by:  Test case(s): parser should_failT3811sghcSuggests to move an orphan instance (for a typeclass or a type or data family), or to newtype-wrap it.Triggered by:  Test cases(s): warningsshould_compile&T9178 typecheckshould_compile*T4912 indexed-typesshould_compileT22717_fam_orphsghcSuggests to use a standalone deriving declaration when GHC can't derive a typeclass instance in a trivial way.Triggered by: ! Test cases(s): typecheck should_fail tcfail086sghcSuggests to add a standalone kind signature when GHC can't perform kind inference.Triggered by:  Test case(s): typecheck should_fail T22560_fail_dsghcSuggests the user to fill in the wildcard constraint to disambiguate which constraint that is.6Example: deriving instance _ => Eq (Foo f a)Triggered by: $ Test cases(s): partial-sigs should_fail T13324_fail2sghc)Suggests to use an identifier other than forall Triggered by: sghcSuggests to use the appropriate Template Haskell tick: a single tick for a term-level $,, or a double tick for a type-level $.Triggered by: .sghcSuggests enabling -ddump-splices to help debug an issue when a  is not in scope or is used in multiple different namespaces (e.g. both as a data constructor and a type constructor).Concomitant with  NoExactName or SameName errors, see e.g. "GHC.Rename.Env.lookupExactOcc_either". Test cases: T5971, T7241, T13937.sghcSuggests adding a tick to refer to something which has been promoted to the type level, e.g. a data constructor.Test cases: T9778, T19984.sghcSomething is split off from its corresponding declaration. For example, a datatype is given a role declaration in a different module.&Test cases: T495, T8485, T2713, T5533.sghcSuggest a similar name that the user might have meant, e.g. suggest  when the user has written travrese.Test case: mod73.sghcRemind the user that the field selector has been suppressed because of -XNoFieldSelectors.4Test cases: NFSSuppressed, records-nofieldselectors.sghc,Suggest importing from a module, removing a hiding clause, or explain to the user that we couldn't find a module with the given  .,Test cases: mod28, mod36, mod87, mod114, ...sghcFound a pragma in the body of a module, suggest placing it in the header.sghcSuggest using pattern matching syntax for a non-bidirectional pattern synonymTest cases: patsyn should_fail,record-exquant typecheck should_failT3176sghcSuggest tips for making a definition visible for the purpose of writing a SPECIALISE pragma for it in a different module.Test cases: nonesghcSuggest renaming implicitly quantified type variable in case it captures a term's name.sghcSuggest enabling one of the SafeHaskell modes Safe, Unsafe or Trustworthy.sghcSuggest removing a record wildcard from a pattern when it doesn't bind anything useful.sghcSuggest moving a method implementation to a different instance to its superclass that defines the canonical version of the method.sghc7Suggest to increase the solver maximum reduction depth sghcSuggest removing a method implementation when a superclass defines the canonical version of that method.sghcSuggest eta-reducing a type synonym used in the implementation of abstract data. sghcRemind the user that there is no field of a type and name in the record, constructors are in the usual order $x$, $r$, $a$ sghcSuggest binding the type variable on the LHS of the type declarationsghc>Suggest binding explicitly; e.g data T @k (a :: F k) = .... sghc0Whether this is a family instance (of the given i), or a class instance (J).sghcSuggest to enable the input extension. This is the hint that GHC emits if this is not a "known" fix, i.e. this is GHC giving its best guess on what extension might be necessary to make a certain program compile. For example, GHC might suggests to enable BlockArguments when the user simply formatted incorrectly the input program, so GHC here is trying to be as helpful as possible. If the input   is not empty, it will contain some extra information about the why the extension is required, but it's totally irrelevant/redundant for IDEs and other tools.sghcSuggest to enable the input extensions. The list is to be intended as  disjunctive' i.e. the user is suggested to enable any) of the extensions listed. If the input   is not empty, it will contain some extra information about the why the extensions are required, but it's totally irrelevant/redundant for IDEs and other tools.sghcSuggest to enable the input extensions. The list is to be intended as  conjunctive' i.e. the user is suggested to enable all& the extensions listed. If the input   is not empty, it will contain some extra information about the why the extensions are required, but it's totally irrelevant/redundant for IDEs and other tools.sghcSuggest to enable the input extension in order to fix a certain problem. This is the suggestion that GHC emits when is more-or-less clear "what's going on". For example, if both DeriveAnyClass and GeneralizedNewtypeDeriving5 are turned on, the right thing to do is to enabled DerivingStrategies, so in contrast to s GHC will be a bit more "imperative" (i.e. "Use X Y Z in order to ... "). If the input   is not empty, it will contain some extra information about the why the extensions are required, but it's totally irrelevant/redundant for IDEs and other tools.sghcThe bindings we have available in scope when suggesting an explicit type signature.sghc8An unknown binding (i.e. too complicated to turn into a )sghc4Suggests a single extension without extra user info.sghcLike s. but allows supplying extra info for the user.sghcSuggests to enable every extension in the list.sghcLike s. but allows supplying extra info for the user.sghcSuggests to enable any extension in the list.tghcLike s. but allows supplying extra info for the user.tghcWhether a constructor name is printed out as a bare symbol, e.g. :.*True for symbolic names in infix position.Used for pretty-printing.tghc$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 they are 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).t returns appropriate hints 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 |0 or its Unicode variant, we will suggest using '; otherwise we won't suggest anything.sghc8fixity declaration, role annotation, type signature, ...ghcthe + for the declaration sitesghc(move the implementation from this methodghc... to this methodghcDocumentation URLsghc(method with non-canonical implementationghc/possible other method to use as the RHS insteadghcDocumentation URLtttstsssstssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssttssssstttNone)*9:; 3tghcA diagnostic code is a namespaced numeric identifier unique to the given diagnostic (error or warning).All diagnostic codes defined within GHC are given the GHC namespace.5See Note [Diagnostic codes] in GHC.Types.Error.Codes.tghcthe actual diagnostic codetghcdiagnostic code prefix (e.g. GHC)tghcUsed to describe warnings and errors o The message has a file/line/column heading, plus "warning:" or "error:", added by mkLocMessage o With t the message is suppressed o Output is intended for end userstghcIgnore this message, for example in case of suppression of warnings users don't want to see. See Note [Suppressing Messages]tghcThe class for a diagnostic message. The main purpose is to classify a message within GHC, to distinguish it from a debug/dump message vs a proper diagnostic, for which we include a t.tghcLog message intended for compiler developers No file/line/column stufftghcLog messages intended for end users. No file/line/column stuff.tghcDiagnostics from the compiler. This constructor is very powerful as it allows the construction of a t- with a completely arbitrary permutation of t and t,. As such, users are encouraged to use the mkMCDiagnostic smart constructor instead. Use this constructor directly only if you need to construct and manipulate diagnostic messages directly, for example inside ". In all the other circumstances,  especially when emitting compiler diagnostics, use the smart constructor.The Maybe t field carries a code (if available) for this diagnostic. If you are creating a message not tied to any error-message type, then use Nothing. In the long run, this really should always have a t. See Note [Diagnostic codes].tghcAn envelope for GHC's facts about a running program, parameterised over the domain-specific5 (i.e. parsing, typecheck-renaming, etc) diagnostics.%To say things differently, GHC emits  diagnostics= about the running program, each of which is wrapped into a t that carries specific information like where the error happened, etc. Finally, multiple ts are aggregated into t that are returned to the user.tghc%The actual reason caused this message0See Note [Warnings controlled by multiple flags]tghc=The SrcSpan is used for sorting errors into line-number ordertghcLike a t), but resolved against a specific set of DynFlags? to work out which warning flag actually enabled this warning.tghc The reason why a t was emitted in the first place. Diagnostic messages are born within GHC with a very precise reason, which can be completely statically-computed (i.e. this is an error or a warning no matter what), or influenced by the specific state of the DynFlags) at the moment of the creation of a new t#. For example, a parsing error is always going to be an error, whereas a 'WarningWithoutFlag Opt_WarnUnusedImports' might turn into an error due to '-Werror' or '-Werror=warn-unused-imports'. Interpreting a t together with its associated t gives us the full picture.tghcBorn as a warning.tghc"Warning was enabled with the flag.tghc+Warning was enabled with a custom category.tghcBorn as an error.tghc A generic t message, without any further classification or provenance: By looking at a t we don't know neither where it was generated nor how to intepret its payload (as it's just a structured document). All we can do is to print it out and look at its t.tghc A generic Hint message, to be used with t.tghc4An existential wrapper around an unknown diagnostic.tghcA class identifying a diagnostic. Dictionary.com defines a diagnostic as:"a message output by a computer diagnosing an error in a computer program, computer system, or component device".A t carries the actual description of the message (which, in GHC's case, it can be an error or a warning) and the reason4 why such message was generated in the first place.tghc1Type of configuration options for the diagnostic.tghc&Extract the error message text from a t.tghc9Extract the reason for this diagnostic. For warnings, a t includes the warning flag.tghcExtract any hints a user might use to repair their code to avoid this diagnostic.tghcGet the t associated with this t. This can return J for at least two reasons: >The message might be from a plugin that does not supply codes.The message might not yet have been assigned a code. See the t instance for t.Ideally, case (2) would not happen, but because some errors in GHC still use the old system of just writing the error message in-place (instead of using a dedicated error type and constructor), we do not have error codes for all errors. #18516 tracks our progress toward this goal.tghcA t is isomorphic to a '[SDoc]' but it carries the invariant that the input '[SDoc]' needs to be rendered  decorated into its final form, where the typical case would be adding bullets between each elements of the list. The type of decoration depends on the formatting function used, but in practice GHC uses the formatBulleted.tghcA collection of messages emitted by GHC during error reporting. A diagnostic message is typically a warning or an error. See Note [Messages]. INVARIANT: All the messages in this collection must be relevant, i.e. their t should not be t. The smart constructor t# will filter out any message which t is t.tghcThe single warning case t is very common.tghcAdds a Message to the input collection of messages. See Note [Discarding Messages].tghcJoins two collections of messages together. See Note [Discarding Messages].tghc Joins many t s togethertghcCreates a new t out of a list of  .tghcCreates a new t out of a single  tghc Joins two t together. The resulting t will have a number of entries which is the sum of the lengths of the input.tghc5Apply a transformation function to all elements of a t.tghcMake a "simple" unknown diagnostic which doesn't have any configuration options.tghcMake an unknown diagnostic which uses the same options as the context it will be embedded into.tghcEmbed a more complicated diagnostic which requires a potentially different options type.tghcHelper function to use when no hints can be provided. Currently this function can be used to construct plain t and add hints to them, but once #18516 will be fully executed, the main usage of this function would be in the implementation of the t9 typeclass method, to report the fact that a particular t has no hints.tghcCreate an error t holding just a single  tghc Create a t% from a list of bulleted SDocs and a ttghcCreate an error t from a list of bulleted SDocsghc Shows an t. Only use this for debugging.tghcMake an error message with location info, specifying whether to show warning groups (if applicable).tghcReturns L if this is, intrinsically, a failure. See Note [Intrinsic And Extrinsic Failures].tghc5Are there any hard errors here? -Werror warnings are not; detected. If you want to check for -Werror warnings, use t.tghcReturns L if the envelope contains a message that will stop compilation: either an intrinsic error or a fatal (-Werror) warningtghc.Are there any errors or -Werror warnings here?tghcPartitions the t and returns a tuple which first element are the warnings, and the second the errors.tghcWhat kind of message?ghclocationghcmessagetghc%Print warning groups (if applicable)?ghcWhat kind of message?ghclocationghcmessagetttttttttttttttttttttttttttttttttstsssstttttttttttttttttttttttttttttttttttttttttttttttttttttttsssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssttt ttttttttttttttttttttttNone ptghc Logger flagsghcFlush the trace bufferghc= to the given valueughcUpdate LogFlagsughc Set LogFlagsughcSet the trace flushing functionThe currently set trace flushing function is passed to the updating functionughc!Calls the trace flushing functionghc.Default trace flushing function (flush stderr)ughc Log somethingughcDump somethingughcTrace somethingughcPush a log hookughcPop a log hookughcPush a dump hookughcPop a dump hookughcPush a trace hookughcPop a trace hookughcMake the logger thread-safeughcLike u but appends an extra newline.ughcThe boolean arguments let's the pretty printer know if it can optimize indent by writing ascii ' ' characters without going through decoding.ughcDefault action for  dumpAction hookghcWrite out a dump.If --dump-to-file is set then this goes to a file. otherwise emit to stdout (via the LogAction parameter).When hdr is empty, we print in a more compact format (no separators and blank lines)ughc#Run an action with the handle of a , if we are outputting to a file, otherwise J.ghc>Choose where to put a dump file based on LogFlags and DumpFlagughcDefault action for  traceAction hookughc Log somethingughcDump somethingughcLog a trace messageughc$Log a dump message (not a dump file)ughc!Dump if the given DumpFlag is setughc!Dump if the given DumpFlag is setUnlike u, has a NamePprCtx argumentughc9Ensure that a dump file is created even if it stays emptyuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuttututuuttuututtuuuuuuuuuuuuuuuuuttutttttuuuutttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuutuuuuuuuuuuuuuuuuuuuuuNone (9 ughcMonomorphic version of  Validity' specialised for  s.ughcEverything is fineughc%A problem, and some indication of whyughcError printing contextughcMax reported error countughcReverse error reporting orderughcTreat warnings as errorsughcFatal custom warning categoriesughc!Enabled custom warning categoriesughcFatal warningsughcEnabled warningsughc Computes the right t for the input t& out of the 'DiagOpts. This function has to be called when a diagnostic is constructed, i.e. with a 'DiagOpts "snapshot" taken as close as possible to where a particular diagnostic message is built, otherwise the computed t9 might not be correct, due to the mutable nature of the DynFlags in GHC.ughcMake a t for a given t, consulting the u.ughc Varation of u which can be used when we are sure the input t is t! and there is no diagnostic code.ughcWrap a t in a t,, recording its location. If you know your t is an error, consider using u), which does not require looking at the uughcWrap a t in a t, recording its location. Precondition: the diagnostic is, in fact, an error. That is, (diagnosticReason msg == ErrorWithoutFlag.ughc= 2 or -ddump-timings).See Note [withTiming] for more.ghc Worker for u and u.ughcLike u but with  SevOutput rather then SevInfoughc+Trace a command (when verbosity level >= 3)ughcRecord in the eventlog when the given tool command starts and finishes, prepending the given : with "systool:", to easily be able to collect and process all the systool events.For those events to show up in the eventlog, you need to run GHC with -v2 or -ddump-timings.ughcThe name of the phaseghc.A function to force the result (often either const () or rnf)ghc!The body of the phase to be timedughcThe name of the phaseghc.A function to force the result (often either const () or rnf)ghc!The body of the phase to be timedghcThe 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 timedttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuutttttttttttttttttttttttttttuuuuuuuuuuuuuu uuuuuuutttttttttttttttttttttttt ttttttttuuuuuuuuuuuuuuuuuuutttuuuuuuuttttttuuuuuuuuuuuuuuuuuNone ughcUsed when a temp file is created. This determines which component Set of PathsToClean will get the temp fileughcA file with lifetime TFL_CurrentModule will be cleaned up at the end of upweep_modughcA file with lifetime TFL_GhcSession will be cleaned up at the end of runGhc(T)ughc do ...The tmpDir: will be a new subdirectory of the given directory, e.g.  src/sdist.342.vghcDirectory name template. See  openTempFile.ghc#Callback that can use the directoryvghc)Temp directory to create the directory inghcDirectory name template. See  openTempFile.ghc#Callback that can use the directoryvvvvvuuuvuvvvvvuuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvNone f%èghc,check for Advanced Vector 512-bit ExtensionsĨghc&check for Advanced Vector Extensions 2Ũghc$check for Advanced Vector ExtensionsƨghcError (if any) to raise when vector instructions are used, see #StgToCmm.Prim.checkVecCompatibilityǨghc+Disable use of precomputed standard thunks.Ȩghc#Allowed to generate FMA instructionɨghc'Allowed to generate IntMul2 instructionʨghc2Allowed to generate AddWordC, SubWordC, Add2, etc.˨ghcAllowed to generate QuotRem̨ghc(Allowed to generate QuotRem instructionsͨghcAllowed to emit larger than native size arithmetic (only LLVM and C backends)Ψghc!Verify tag inference predictions.Ϩghc>decides whether to check array bounds in StgToCmm.Prim or notШghctrue if -fexternal-dynamic-refs>, meaning generate code for linking against dynamic librariesѨghctrue if -fPIEҨghctrue if -fPICӨghc=true means don't generate interface programs (implied by -O0)Ԩghc;true means omit heap checks when no allocation is performedըghcNo output should be created, like in Interpreter or NoBackend.vghc%says where to put the pipeline outputvghc its extensionvghc!basename of original input sourcevghc!basename of original input sourcevghcStop just after this phasevghcLift a f action into an m action.vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvNone ghc A sectionghcContent of the sectionghcName of the sectionghc Description of the section tableghc DynFlags -> IO [String]vghc-No additional command-line options are neededvghcReturn command-line options that tell GHC about the LLVM version.vghcNames a function that tells the driver what should happen after assembly code is written. This might include running a C compiler, running LLVM, running an assembler, or various similar activities. The function named normally has this type:  TPipelineClass TPhase m => PipeEnv -> HscEnv -> Maybe ModLocation -> FilePath -> m (Maybe FilePath)&The functions so named are defined in GHC.Driver.Pipeline.vghc0After code generation, nothing else need happen.vghcNames a function that generates code and writes the results to a file, of this type:  Logger -> DynFlags -> Module -- ^ module being compiled -> ModLocation -> FilePath -- ^ Where to write output -> Set UnitId -- ^ dependencies -> Stream IO RawCmmGroup a -- results from `StgToCmm` -> IO a&The functions so named are defined in GHC.Driver.CodeOutput.We expect one function per back end@or more precisely, one function for each back end that writes code to a file. (The interpreter does not write to files; its output lives only in memory.)vghcNames a function that discover from what toolchain the assembler is coming, of this type: 1Logger -> DynFlags -> Platform -> IO CompilerInfo&The functions so named are defined in GHC.Driver.Pipeline.Execute.vghc)Interrogate the standard system assemblervghc If using the JS backend; return  EmscriptenvghcIf running on Darwin, return Clang7; otherwise interrogate the standard system assembler.vghc7Names a function that runs the assembler, of this type: 3Logger -> DynFlags -> Platform -> [Option] -> IO ()&The functions so named are defined in GHC.Driver.Pipeline.Execute.vghc!Use the standard system assemblervghcJS Backend compile to JS via Stg, and so does not use any assemblervghc1If running on Darwin, use the assembler from the clang: toolchain. Otherwise use the standard system assembler.vghcThis enumeration type specifies how the back end wishes GHC's primitives to be implemented. (Module GHC.StgToCmm.Prim provides a generic implementation of every primitive, but some primitives, like  IntQuotRemOp, can be implemented more efficiently by certain back ends on certain platforms. For example, by using a machine instruction that simultaneously computes quotient and remainder.).For the meaning of each alternative, consult GHC.StgToCmm.Config. (In a perfect world, type v would be defined there, in the module that determines its meaning. But I could not figure out how to do it without mutual recursion across module boundaries.)vghcPrimitives supported by LLVMvghc1Primitives supported by the native code generatorvghc"Primitives supported by JS backendvghc%Primitives supported by all back endsvghcAvalue of type Backend represents one of GHC's back ends. The set of back ends cannot be extended except by modifying the definition of Backend in this module.The Backend type is abstract; thatis, its value constructors are not exported. It's crucial that they not be exported, because a value of type Backend carries only the back end's name', not its behavior or properties. If Backend were not abstract, then code elsewhere in the compiler could depend directly on the name, not on the semantics, which would make it challenging to create a new back end. Because Backend is abstract, all the obligations of a new back end are enumerated in this module, in the form of functions that take Backend as an argument.The issue of abstraction is discussed at great length in #20927 and !7442.vghc7Is the platform supported by the Native Code Generator?ghc,Is the platform supported by the JS backend?vghcThe native code generator. Compiles Cmm code into textual assembler, then relies on an external assembler toolchain to produce machine code.4Only supports a few platforms (X86, PowerPC, SPARC).See  GHC.CmmToAsm.vghcThe LLVM backend.Compiles Cmm code into LLVM textual IR, then relies on LLVM toolchain to produce machine code.It relies on LLVM support for the calling convention used by the NCG backend to produce code objects ABI compatible with it (see "cc 10" or "ghccc" calling convention in  7https://llvm.org/docs/LangRef.html#calling-conventions).4Supports a few platforms (X86, AArch64, s390x, ARM).See  GHC.CmmToLlvmvghcThe JavaScript Backend See documentation in GHC.StgToJSvghc!Via-C ("unregisterised") backend.Compiles Cmm code into C code, then relies on a C compiler to produce machine code."It produces code objects that are not> ABI compatible with those produced by NCG and LLVM backends.Produced code is expected to be less efficient than the one produced by NCG and LLVM backends because STG registers are not pinned into real registers. On the other hand, it supports more target platforms (those having a valid C toolchain).See  GHC.CmmToCvghcThe ByteCode interpreter.#Produce ByteCode objects (BCO, see  GHC.ByteCode/) that can be interpreted. It is used by GHCi.?Currently some extensions are not supported (foreign primops).See GHC.StgToByteCodevghc(A dummy back end that generates no code.Use this back end to disable code generation. It is particularly useful when GHC is used as a library for other purpose than generating code (e.g. to generate documentation with Haddock) or when the user requested it (via `-fno-code`) for some reason.vghcAn informal description of the back end, for use in issuing warning messages only. If code depends on what's in the string, you deserve what happens to you.vghcThis flag tells the compiler driver whether the back end will write files: interface files and object files. It is typically true for "real" back ends that generate code into the filesystem. (That means, not the interpreter.)vghcWhen the back end does write files, this value tells the compiler in what manner of file the output should go: temporary, persistent, or specific.vghcThis flag tells the driver whether the back end can reuse code (bytecode or object code) that has been loaded dynamically. Likely true only of the interpreter.vghc'It is is true of every back end except  -fno-code that it "generates code." Surprisingly, this property influences the driver in a ton of ways. Some examples:If the back end does not generate code, then the driver needs to turn on code generation for Template Haskell (because that code needs to be generated and run at compile time).If the back end does not generate code, then the driver does not need to deal with an output file.If the back end does/ generated code, then the driver supports  HscRecomp. If not, recompilation does not need a linkable (and is automatically up to date).vghcWhen set, this flag turns on interface writing for Backpack. It should probably be the same as v, but it is kept distinct for reasons described in Note [-fno-code mode].vghcWhen preparing code for this back end, the type checker should pay attention to SPECIALISE pragmas. If this flag is I, then the type checker ignores SPECIALISE pragmas (for imported things?).vghcThis back end wants the  mi_globals field of a ModIface to be populated (with the top-level bindings of the original source). Only true for the interpreter.vghc3The back end targets a technology that implements switch natively. (For example, LLVM or C.) Therefore it is not necessary for GHC to ccompile a Cmm Switch< form into a decision tree with jump tables at the leaves.vghc#As noted in the documentation for v, certain primitives have multiple implementations, depending on the capabilities of the back end. This field signals to module GHC.StgToCmm.Prim1 what implementations to use with this back end.vghcWhen this value is u, the back end is compatible with vector instructions. When it is u/, it carries a message that is shown to users.vghcThis flag says whether the back end supports large binary blobs. See Note [Embedding large binary blobs] in GHC.CmmToAsm.Ppr.vghcThis flag tells the compiler driver that the back end does not support every target platform; it supports only platforms that claim NCG support. (It's set only for the native code generator.) Crufty. If the driver tries to use the native code generator without platform support, the driver fails over to the LLVM back end.vghcThis flag is set if the back end can generate code for proc points. If the flag is not set, then a Cmm pass needs to split proc points (that is, turn each proc point into a standalone procedure).vghcThis flag guides the driver in resolving issues about API support on the target platform. If the flag is set, then these things are true:"When the target platform supports only an unregisterised API, this backend can be replaced with compilation via C.When the target does not support an unregisterised API, this back end can replace compilation via C.vghcThis flag is true if the back end works *only* with the unregisterised ABI.vghc8This flag is set if the back end generates C code in a .hc file. The flag lets the compiler driver know if the command-line flag -C is meaningful.vghcThis flag says whether SPT (static pointer table) entries will be inserted dynamically if needed. If this flag is I, then GHC.Iface.Tidy6 should emit C stubs that initialize the SPT entries.vghc8If this flag is unset, then the driver ignores the flag -fbreak-points, since backends other than the interpreter tend to panic on breakpoints.vghcIf this flag is set, then the driver forces the optimization level to 0, issuing a warning message if the command line requested a higher optimization level.vghcI don't understand exactly how this works. But if this flag is set *and* another condition is met, then  ghc/Main.hs will alter the DynFlags so that all the  hostFullWays4 are asked for. It is set only for the interpreter.vghcThis flag is also special for the interpreter: if a message about a module needs to be shown, do we know anything special about where the module came from? The Boolean argument is a recomp flag.vghcThis flag says whether the back end supports Haskell Program Coverage (HPC). If not, the compiler driver will ignore the `-fhpc` option (and will issue a warning message if it is used).vghcThis flag says whether the back end supports foreign import of C functions. (Supports means "does not barf on," so  -fno-code supports foreign C imports.)vghcThis flag says whether the back end supports foreign export of Haskell functions to C.vghcThis (defunctionalized) function runs the assembler used on the code that is written by this back end. A program determined by a combination of back end, DynFlags, and & is run with the given Options.The function's type is 7 Logger -> DynFlags -> Platform -> [Option] -> IO ()  This field is usually defaulted.vghcThis (defunctionalized) function is used to retrieve an enumeration value that characterizes the C/assembler part of a toolchain. The function caches the info in a mutable variable that is part of the DynFlags.The function's type is 5 Logger -> DynFlags -> Platform -> IO CompilerInfo  This field is usually defaulted.vghcWhen using this back end, it may be necessary or advisable to pass some `-D` options to a C compiler. This (defunctionalized) function produces those options, if any. An IO action may be necessary in order to interrogate external tools about what version they are, for example.The function's type is % Logger -> DynFlags -> IO [String]  This field is usually defaulted.vghcThis (defunctionalized) function generates code and writes it to a file. The type of the function is  Logger -> DynFlags -> Module -- ^ module being compiled -> ModLocation -> FilePath -- ^ Where to write output -> Set UnitId -- ^ dependencies -> Stream IO RawCmmGroup a -- results from `StgToCmm` -> IO avghcThis (defunctionalized) function tells the compiler driver what else has to be run after code output. The type of the function is  TPipelineClass TPhase m => PipeEnv -> HscEnv -> Maybe ModLocation -> FilePath -> m (Maybe FilePath)vghcSomewhere in the compiler driver, when compiling Haskell source (as opposed to a boot file or a sig file), it needs to know what to do with the code that the v writes to a file. This @ value gives instructions like "run the C compiler", "run the assembler," or "run the LLVM Optimizer."vghcName of the back end, if any. Used to migrate legacy clients of the GHC API. Code within the GHC source tree should not refer to a back end's name.vghcA list of all back ends. They are ordered as we wish them to appear when they are enumerated in error messages.vghcWhen foreign C import or export is invalid, the carried value enumerates the valid back ends.vghcWhen foreign C import or export is invalid, the carried value enumerates the valid back ends.vghc"The Show instance is for messages only. If code depends on what's in the string, you deserve what happens to you.vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvNone)* YghcA FlatSwitchPlan is a list of SwitchPlans, with an integer in between every two entries, dividing the range. So if we have (abusing list syntax) [plan1,n,plan2], then we use plan1 if the expression is < n, and plan2 otherwise.ghcA SwitchPlan abstractly describes how a Switch statement ought to be implemented. See Note [createSwitchPlan]ghc>A value of type SwitchTargets contains the alternatives for a  CmmSwitch value, and knows whether the value is signed, the possible range, an optional default value and a map from values to jump labels.ghcNumber of consecutive default values allowed in a jump table. If there are more of them, the jump tables are split.Currently 7, as it costs 7 words of additional code when a jump table is split (at least on x64, determined experimentally).ghcMinimum size of a jump table. If the number is smaller, the switch is implemented using conditionals. Currently 5, because an if-then-else tree of 4 values is nice and compact.ghcMinimum non-zero offset for a jump table. See Note [Jump Table Offset].ghcThe smart constructor mkSwitchTargets normalises the map a bit: * No entries outside the range * No entries equal to the default * No default if all elements have explicit valuesghc7Changes all labels mentioned in the SwitchTargets valueghcReturns the list of non-default branches of the SwitchTargets valueghc3Return the default label of the SwitchTargets valueghc+Return the range of the SwitchTargets valueghc.Return whether this is used for a signed valueghcswitchTargetsToTable creates a dense jump table, usable for code generation.Also returns an offset to add to the value; the list is 0-based on the result of that addition.The conversion from Integer to Int is a bit of a wart, as the actual scrutinee might be an unsigned word, but it just works, due to wrap-around arithmetic (as verified by the CmmSwitchTest test case).ghc Luite Stegeman Sylvain Henry Josh Meredith  experimentalNone  ghcA thread is in one of 4 statesghcThe thread is runningghcThe thread is blockedghcThe thread is doneghcThe thread has diedghcA Closure is one of six typesghcThe closure is a THUNKghcThe closure is a Functionghc$The closure is a Partial ApplicationghcThe closure is a ConstructorghcThe closure is a BlackholeghcThe closure is a stack frameghcA Primop result is either an inlining of some JS payload, or a primitive call to a JS function defined in Shim files in base.ghc-primop is inline, result is assigned directlyghcprimop is async call, primop returns the next function to run. result returned to stack top in registersghcTyped expressionghcTypes of FFI valuesѝghc%one toplevel block in the object file՝ghc raw JS code֝ghcthe codeםghcstatic closure data؝ghc,closure information of all closures in blockٝghc"toplevel symbols (stored in index)ڝghc5data used to generate one ObjBlock in our object fileݝghcalways link this unitޝghc7symbols not from a haskell id that this unit depends onߝghc2pseudo-id identifiers this unit depends on (fixme)ghc identifiers this unit depends onghc other exportsghc'exported names from haskell identifiersghcserializable unit infoghc#A foreign reference to some JS codeghcA Static literal valueghc?is function pointer, label (also used for string / binary init)ghcStatic Arguments. Static Arguments are things that are statically allocated, i.e., they exist at program startup. These are static heap objects or literals or things that have been floated to the top level binding by ghc.ghcreference to a heap objectghcliteralghcunfloated constructorghcheap object for functionghcheap object for CAF (field is Nothing when thunk is initialized in an alternative way, like string thunks through h$str)ghc+unboxed constructor (Bool, Int, Double etc)ghcregular datacon appghc%list initializer (with optional tail)ghcoptional CCS nameghcstatic initializationghc global objectghcA Stack Slot is either known or unknown. We avoid maybe here for more strictness.ghcThe global Identifier Cacheghc The identifier cache indexed on  local to a moduleghcSome other symbolghc-Keys to differentiate Ident's in the ID CacheghcThe type of identifiers. These determine the suffix of generated functions in JS Land. For example, the entry function for the K constructor is a  which compiles to:  function h$baseZCGHCziMaybeziJust_con_e() { return h$rs() };  which just returns whatever the stack point is pointing to. Whereas the entry function to K is an % and does the work. It compiles to:  function h$baseZCGHCziMaybeziJust_e() { var h$$baseZCGHCziMaybezieta_8KXnScrCjF5 = h$r2; h$r1 = h$c1(h$baseZCGHCziMaybeziJust_con_e, h$$baseZCGHCziMaybezieta_8KXnScrCjF5); return h$rs(); };  Which loads some payload from register 2, and applies the Constructor Entry function for the Just to the payload, returns the result in register 1 and returns whatever is on top of the stackghc.A plain identifier for values, no suffix addedghc$An entry function, suffix = "_e" in ghc3A Constructor entry function, suffix = "_con_e" in ghcFree variable typesghcpointer = reference to heap object (closure object), lifted or not. Can also be some RTS object (e.g. TVar#, MVar#, MutVar#, Weak#)ghc no fieldsghcA Double: one fieldghc$An Int (32bit because JS): one fieldghcA Long: two fields one for the upper 32bits, one for the lower (NB: JS is little endian)ghc4a pointer not to the heap: two fields, array + indexghcsome JS object, user supplied, be careful around these, can be anythingghc boxed arrayghc)Static references that must be kept aliveghc The type of ghcThe closure is a THUNKghcThe closure is a Constructorghc$The closure is a Partial ApplicationghcThe closure is a black holeghcThe closure is a stack frameghc number of registers for the argsghcfunction arityghcClosure Information, , layoutghc=layout stored in object itself, first position from the startghc?fixed size, but content unknown (for example stack apply frame)ghcwhole layout knownghc0closure size in array positions, including entryghc The set of sized Types to layoutghcClosure information,  , registersghc/A value witnessing a state of unknown registersghcargsghc)unused registers before actual args startghc6Information relevenat to code generation for closures.ghc static references of this objectghc2type of the object, with extra info where requiredghcheap/stack layout of the objectghcfriendly name for printingghc,size of the payload (in number of JS values)ghcobject being infodghc-The Configuration record for the StgToJS passĞghc#Enable runtime assertions settingsŞghcProfiling enabledўghcThe JS code generator state relevant for the current binding group՞ghcextra dependencies for the linkable unit that contains this group֞ghccurrent stack depthמghc%stack info for the current expression؞ghc&static (CAF) data in our binding groupٞghc4closure metadata (info tables) for the binding groupڞghc/extra toplevel statements for the binding group۞ghcThe JS code generator stateݞghcglobal (per module) statements (gets included when anything else from the module is used)ޞghc#state for the current binding groupߞghcunfloated argumentsghc*hash consing for identifiers from a Uniqueghc"unique number for the id generatorghccurrent moduleghccodegen settings, read-onlyghc2A State monad over IO holding the generator state.ghcConvert  to an IntghcConvert  to a Stringghc3Convert the status of a thread in JS land to an Intghc5convert the status of a thread in JS land to a stringghcstatic refs: array = references, null = nothing to report note: only works after all top-level objects have been created̝͝ϝНΝўҞٞ՞ӞԞמ֞؞ڞ۞ܞݞޞߞɝȝÝʝ˝ŝƝǝĝڝ۝ܝޝߝݝѝҝ؝ԝӝ՝֝םٝžɞȞÞǞ̞Ϟ͞ΞО˞ŞĞƞʞ۞ݞޞߞܞўӞԞ՞֞מ؞ٞڞҞÞĞŞƞǞȞɞʞ˞̞͞ΞϞОžڝܝݝޝߝ۝ѝӝԝ՝֝ם؝ٝҝ̝Н͝Νϝ˝ʝɝȝǝƝŝĝݝ"(c) The University of Glasgow 2001 BSD-style (see the file LICENSE)Jeffrey Young Luite Stegeman Sylvain Henry Josh Meredith  experimentalNone " pghcSyntactic sugar, i.e., a Haskell function which generates useful JS code. Given a JExpr, ex, inject a trace statement on ex in the compiled JS programghcSyntactic sugar. Given a JExpr, ex4 which is assumed to be a predicate, and a message m, assert that 'not ex' is True, if not throw an exception in JS land with message m.ghcname of the closure cghcType name of the closure cghcPerform the computation f', on the range of registers bounded by start and end.ghcassign frame size to thisghcstack frame header functionghc#size of the frame, including header"(c) The University of Glasgow 2001 BSD-style (see the file LICENSE)Sylvain Henry Jeffrey Young Luite Stegeman Josh Meredith experimental Serialization/deserialization of binary .o files for the JavaScript backend The .o files contain dependency information and generated code. All strings are mapped to a central string table, which helps reduce file size and gives us efficient hash consing on read Binary intermediate JavaScript object files: serialized [Text] -> ([ClosureInfo], JStat) blocks file layout: - magic "GHCJSOBJ" - compiler version tag - module name - offsets of string table - dependencies - offset of the index - unit infos - index - string tableNone " n-ghc&Offset of the block in the object fileghcSymbols exported by a blockghcSerialized block indexes and their exported symbols (the first block is module-global)ghcExported Functionsghc The functionghc"The module containing the functionghcdependencies on exported symbols in other objects , blockForeignExported :: [ExpFun] , blockForeignImported :: [ForeignRef]ghc%dependencies on blocks in this objectghcA BlockRef is a pair of a module and the index of the block in the object fileghcBlock index in the object fileghcModuleghcWhere are the blocksghcIn an object file at pathŸghcIn a Ar file at pathßghc In memoryƟghcBlock informationǟghcWhere to find the blocksȟghc)Information about blocks (linkable units)ʟghcdependencies of each block˟ghc#exported Haskell functions -> block̟ghcblocks that always need to be linked when this object is loaded (e.g. everything that contains initializer code or foreign exports)͟ghcModule they were generated fromПghcAn object fileҟghcBlock index: symbols per block and block offset in the object fileӟghcInformation about blocksԟghcOffset of the payload (units)՟ghc0BinHandle that can be used to read the ObjBlocks֟ghcname of the moduleןghcwe use the convention that the first block (0) is a module-global block that's always included when something from the module is loaded. everything in a module implicitly depends on the global block. The global block itself can't have dependenciesghcWrite an ObjBlock, except for the top level symbols which are stored in the indexghcRead an ObjBlock and associate it to the given symbols (that must have been read from the index)ghc?A tag that determines the kind of payload in the .o file. See StgToJS.Linker.Arhive.magic for another kind of magic؟ghc4Given a handle to a Binary payload, add the module, mod_name, its dependencies, deps(, and its linkable units to the payload.ٟghc&Test if the object file is a JS objectghc Check magicghcParse object magicڟghcParse object header۟ghcParse object body. Must be called after a sucessful getObjectHeaderܟghc Parse objectݟghcRead object from file9The object is still in memory after this (see objHandle).ޟghc3Reads only the part necessary to get the block infoߟghcGet blocks in the object file, using the given filtering functionghcRead blocks in the object file, using the given filtering functionghcHelper to convert Int to Int32ghcHelper to convert Int32 to Int؟ghcmoduleghc block infosghc linkable units and their symbols1ܟߟ۟ڟןٟ؟ݟޟϟΟȟɟʟ˟̟͟ŸßğşƟǟПџӟ՟ҟ֟ԟ1؟ڟ۟ܟݟߟޟןٟПџ֟՟ԟӟҟğşǟƟȟɟ̟͟˟ʟŸßϟΟ"(c) The University of Glasgow 2001 BSD-style (see the file LICENSE)Jeffrey Young Luite Stegeman Sylvain Henry Josh Meredith  experimentalNone " <ghcAn object file that's either already in memory (with name) or on diskghcload from this fileghc'already loaded: description and payloadghcExtra JS files to linkghc Archives to load JS sources fromghcBlocks to linkghcBlock informationghc(Generate all.js (combined js) + wrappersghc&Dump .frefs (foreign references) filesghcDisable .stats file generationghcDon't dump the generated RTSghc!Don't generate Haskell main entryghcDont' build JS executablesghcDefault linker configurationNone" 2ghcGet closure entry functionghcGet closure metadataghcGet closure cost-centerghcGet closure extra field 1ghcGet closure extra field 2ghc heap objectghcreference to entry, if you have one already (saves a c.f lookup twice)ghc8arity tag (tag >> 8 = registers, tag & 0xff = arguments)"(c) The University of Glasgow 2001 BSD-style (see the file LICENSE)Jeffrey Young Luite Stegeman Sylvain Henry Josh Meredith  experimentalNone ghc-Context into which an expression is evaluatedghcCache the length of ghcContents of current LNE frame&Variables and their index on the stackghc,LNE bindings with their expected stack size.The Int is the size of the stack when the LNE binding was defined. We need to shrink the stack back to this size when we enter one of the associated binder rhs: it expects its free variables at certain offsets in the stack.ghcSource locationghcIds that we know to be evaluated (e.g. case binders when the expression to evaluate is in an alternative)ghc-Target variables for the evaluated expressionghcTop-level binding IdghcInitialize an expression context in the context of the given top-level binding Idghc Set targetghcSet top-level binding Idghc$Add an Id to the known-evaluated setghcSet source locationghcUpdate let-no-escape frameghc.Remove information about the current LNE frameghc>Predicate: do we know for sure that the given Id is evaluated?ghc-Does the given Id correspond to a LNE bindingghc;Does the given Id correspond to a LNE live var on the stack ghcReturn the LNE stack size associated to the given Id. Return Nothing when the Id doesn't correspond to a LNE binding.àghc&Shrink the LNE stack to the given size à àNone" ghc%Number of slots occupied by a PrimRepghcAssign first expr only (if it exists), performing coercions between some PrimReps (e.g. StablePtr# and Addr#).ghc&Assign p2 to p1 with optional coercionghc;can we unbox C x to x, only if x is represented as a Numberghcone-constructor types with one primitive field represented as a JS Number can be unboxedghcReturn SlotCount as an Intghc:Number of slots occupied by a value with the given VarTypeghc/can we pattern match on these values in a case?ghc'Find the primitive representation of a . Defined here to avoid module loops. Call this only on unlifted tycons.ghcTake a kind (of shape TYPE rr) and produce the B#s of values of types of this kind.ghcAssociate the given values to each RrimRep in the given order, taking into account the number of slots per PrimRepghcAssociate the given values to the Id's PrimReps, taking into account the number of slots per PrimRepghcAssociate the given JExpr to the Id's PrimReps, taking into account the number of slots per PrimRepghccollect Ids that this binding refers to (does not include the bindees themselves) first argument is Id -> StgExpr map for unfloated argumentsghc3returns True if the expression is definitely inlineNone "%& ghc5Used to pass arguments to newClosure with some safetyghcCache "dXXX" field namesghcData names are used in the AST, and logging has determined that 255 is the maximum number we see.ghcWe use this in the RTS to determine the number of generated closures. These closures use the names cached here, so we bind them to the same number.ghcCache "h$dXXX" namesghcCache "h$cXXX" namesghcCache "xXXX" namesghcdebug: output symbol namesghcthe object nameghcthings in registersghclayout of the objectghc closure typeghcobject name, for printingghca) argument, depends on type (arity, conid)ghc static refs ghcdebug: output all symbol namesghcthe thing to modifyghc closure typeghcobject name, for printingghclist of item types in the object, if known (free variables, datacon fields)ghcextra a( parameter, for constructor tag or arityghc,object size, -1 (number of vars) for unknownghcthings in registersghc static refsghcobject being info'd see ciVar in  ClosureInfoghcrhsNone  }ghc(Unfloat some top-level unexported thingsGHC floats constants to the top level. This is fine in native code, but with JS they occupy some global variable name. We can unfloat some unexported things:global constructors, as long as they're referenced only once by another global constructor and are not in a recursive binding groupliterals (small literals may also be sunk if they are used more than once)ghcalways sinkable, values that may be duplicated in the generated code (e.g. small literals)ghc5once sinkable: may be sunk, but duplication is not okghccollect all idents used only once in an argument at the top level and never anywhere elseghcfold over all id in StgArg used at the top level in an StgRhsConghc%fold over all Id in StgArg in the ASTghcsince we have sequential initialization, topsort the non-recursive constructor bindingsghcthe module, since we treat definitions from the current module differentlyghc the bindingsghca map with sunken replacements for nodes, for where the replacement does not fit in the  AST and the new bindingsNone" ɱˠghc9emit a global (for the current module) toplevel statement̠ghc Luite Stegeman Sylvain Henry Josh Meredith 2experimental Module to deal with JS identifiersNone ghcGet fresh unique numberghc6Get fresh local Ident of the form: h$$unit:module_uniqghc2Generate unique Ident for the given ID (uncached!)"The ident has the following forms:global Id: h$unit:module.name[_num][_type_suffix] local Id: h$$unit:module.name[_num][_type_suffix]_uniqRetrieve default variable name for the given Id with sub indexĦghc)Retrieve all the JS vars for the given IdŦghc-Retrieve entry variable name for the given IdƦghc5Retrieve datacon entry variable name for the given IdǦghcRetrieve datacon worker entry variable name for the given dataconȦghcRetrieve datacon worker entry variable name for the given dataconɦghcDeclare all js vars for the idɦǦƦȦŦ¦æĦǦ¦æĦŦƦȦɦ"(c) The University of Glasgow 2001 BSD-style (see the file LICENSE)Jeffrey Young Luite Stegeman Sylvain Henry Josh Meredith  experimentalNone" 4ʦghcRun the action, m, with no stack info˦ghcrun the action, m, with current stack info, but don't let modifications propagateghcSet stack depthghcGet stack depthghcModify stack depth̦ghcoverwrite our stack knowledgeͦghc$retrieve our current stack knowledgeghcModify stack slotsΦghcadd n% unknown slots to our stack knowledgeϦghc#add knowledge about the stack slotsЦghcdrop n slots from our stack knowledgeӦghcGrow the stack pointer by n without modifying the stack depth. The stack is just a JS array so we add to grow (instead of the traditional subtract)ԦghcShrink the stack pointer by n'. The stack grows downward so substractզghc(Wrapper which adjusts the stack pointer and& modifies the stack depth tracked in  . See also Ӧ5 which actually does the stack pointer manipulation.֦ghcShrink the stack and stack pointer. NB: This function is unsafe when the input n*, is negative. This function wraps around ֦# which actually performs the work.צghcA constant array that holds global function symbols which do N pushes onto the stack. For example:  function h$p1(x1) { ++h$sp; h$stack[(h$sp - 0)] = x1; }; function h$p2(x1, x2) { h$sp += 2; h$stack[(h$sp - 1)] = x1; h$stack[(h$sp - 0)] = x2; }; and so on up to 32.ئghc Convert all function symbols in צ to global top-level functions. This is a hack which converts the function symbols to variables. This hack is caught in & to turn these into global functions.٦ghcPartial Push functions. Like צ8 except these push functions skip slots. For example,  function h$pp33(x1, x2) { h$sp += 6; h$stack[(h$sp - 5)] = x1; h$stack[(h$sp - 0)] = x2; }; The 33rd entry skips slots 1-4 to bind the top of the stack and the 6th slot. See ܦ and ۦ for use cases.ڦghcLike ئ# but for the partial push functionsܦghcoptimized push that reuses existing values on stack automatically chooses an optimized partial push (h$ppN) function when possible.ݦghc)push a let-no-escape frame onto the stackަghc0Pop things, don't update the stack knowledge in ߦghcLoad 'length (xs :: [JExpr])' things from the stack at offset 'n :: Int'. This function does no stack pointer manipulation, it merely indexes into the stack and loads payloads into xs.ghc"Pop but preserve the first N slotsghc Just like ߦ but operate on ʔs rather than ghcBlindly pop N slotsghc?Generate statements to update the current node with a blackholeghcWrapper around =, performs the stack manipulation before updating the Thunk.ghcUpdate a thunk by checking . If the config inlines black holes then update inline, else make an explicit call to the black hole handler.ܦghc:contents of the slots, True if same value is already thereަghcnumber of slots to skipghc!assign stack slot values to theseϦΦզӦ֦ԦЦͦ˦ߦަѦҦݦצئ٦ڦܦۦʦ̦ʦ˦̦ͦϦЦΦѦҦ֦ԦӦզ٦ڦئצۦܦݦަߦNone" /ghc%Generate JS expressions for a LiteralLiterals represented with 2 values: * Addr# (Null and Strings): array and offset * 64-bit values: high 32-bit, low 32-bit * labels: call to h$mkFunctionPtr and 0, or function name and 0ghc-generate a literal for the static init tables"(c) The University of Glasgow 2001 BSD-style (see the file LICENSE)Jeffrey Young Luite Stegeman Sylvain Henry Josh Meredith  experimentalNone {ghc4Unique Id -> ExportedFun (only to other modules)ghcUnique Module -> UnitghcGenerate module dependency dataGenerate the object's dependency data, taking care that package and module names are only stored once"(c) The University of Glasgow 2001 BSD-style (see the file LICENSE)Jeffrey Young Luite Stegeman Sylvain Henry Josh Meredith 4experimental Code generation of data constructorsNone" "ghcGenerate a data constructor. Special handling for unboxed tuplesghcAllocate a data constructor. Allocate in this context means bind the data constructor to toghcAllocate an unboxed data constructor. If we have a bool we calculate the right value. If not then we expect a singleton list and unbox by converting ''C x' to x. NB. This function may panic.ghc Allocate an entry function. See  for the object layout.ghcAllocate a dynamic objectghc csInlineAlloc from StgToJSConfig"(c) The University of Glasgow 2001 BSD-style (see the file LICENSE)Jeffrey Young Luite Stegeman Sylvain Henry Josh Meredith 8experimental Code generation of application argumentsNone ghc%Generate JS code for static argumentsghcGenerate JS code for an StgArgghcGenerate a Var as JExprghcGenerate an Id as an Identghc&Generate IDs for stack arguments. See  for use caseghcAllocate Static ConstructorsghcAllocate unboxed constructorsghcAllocate Static listghc.Generate JS code corresponding to a static argghc7Generate JS code corresponding to a list of static args  None " ghcgenerate the actual callghc6catch exception and convert them to haskell exceptionsghc/async (only valid with javascript calling conv)ghc#using javascript calling conventionghcasyncghcusing JavaScript calling convghc)Nothing for sync, Just callback for asyncghc"javascript calling convention usedghcpattern calledghc return typeghc5expressions to return in (may be more than necessary)ghc arguments"(c) The University of Glasgow 2001 BSD-style (see the file LICENSE)Jeffrey Young Luite Stegeman Sylvain Henry Josh Meredith  experimentalNone "-ghcApply specificationghc0number of JavaScript variables for the argumentsghcnumber of Haskell argumentsghcCalling conventionghc(Calling convention for an apply functionghc&Fast calling convention: use registersghc&Slow calling convention: use the stackghcPre-generated functions for fast Apply. These are bundled with the RTS.ghc.Generate an application of some args to an Id.The case where args is null is common as it's used to generate the evaluation code for an Id.ghcTry to use a specialized pre-generated application function. If there is none, use h$ap_gen_fast insteadghc"Name of the generic apply functionghc"Expr of the generic apply functionghcReturn the name of the specialized apply function for the given number of args, number of arg variables, and calling convention.ghcReturn the expression of the specialized apply function for the given number of args, number of arg variables, and calling convention.Warning: the returned function may not be generated! Use specApplyExprMaybe if you want to ensure that it exists.ghcReturn the expression of the specialized apply function for the given number of args, number of arg variables, and calling convention. Return Nothing if it isn't generated.ghcMake an ApplySpec from a calling convention, a list of Haskell args, and a list of corresponding JS variablesghc7Find a specialized application function if there is oneghc,List of specialized apply function templatesghc&Generate a tag for the given ApplySpec=Warning: tag doesn't take into account the calling conventionghc1Generate a tag expression for the given ApplySpecghc.Build arrays to quickly lookup apply functionsh$apply[r << 8 | n] = function application for r regs, n args h$paps[r] = partial application for r registers (number of args is in the object)ghc Push a continuation on the stackFirst push the given args, then push an apply function (specialized if possible, otherwise the generic h$ap_gen function).ghcGeneric stack apply function (h$ap_gen) that can do everything, but less efficiently than other more specialized functions.Stack layout: -3: ... -2: args -1: tag (number of arg slots << 8 | number of args)Regs: R1 = applied closureghcGeneric fast apply function (h$ap_gen_fast) that can do everything, but less efficiently than other more specialized functions.3Signature tag in argument. Tag: (regs << 8 | arity) Regs: R1 = closure to apply toghc7Make specialized apply function for the given ApplySpecghc=Make specialized apply function with Stack calling conventionghcthe function to call (Left for generic, Right for specialized)ghcid of the pap objectghc0the function that's called (can be a second pap)ghcnumber of arguments in papghc!values for the supplied arguments"(c) The University of Glasgow 2001 BSD-style (see the file LICENSE)Jeffrey Young Luite Stegeman Sylvain Henry Josh Meredith  experimentalNone "- ghc;The garbageCollector resets registers and result variables.ghcReset the register r in JS Land. Note that this "resets" by setting the register to a dummy variable called "null", not by setting to JS's nil value.ghcReset the return variable r in JS Land. Note that this "resets" by setting the register to a dummy variable called "null", not by setting to JS's nil value.ghcDefine closures based on size, these functions are syntactic sugar, e.g., a Haskell function which generates some useful JS. Each Closure constructor follows the naming convention h$cN, where N is a natural number. For example, h$c (with the nat omitted) is a JS Land Constructor for a closure in JS land which has a single entry function f, and no fields; identical to h$c0. h$c1 is a JS Land Constructor for a closure with an entry function f , and a single field x1, 'Just foo' is an example of this kind of closure. h$c2 is a JS Land Constructor for a closure with an entry function and two data fields: x1 and x2. And so on. Note that this has JIT performance implications; you should use h$c1, h$c2, h$c3, ... h$c24 instead of making objects manually so layouts and fields can be changed more easily and so the JIT can optimize better.ghc3JS Payload to perform stack manipulation in the RTSghc#JS payload to declare the registersghc:JS payload to define getters and setters on the registers.ghc;JS payload that defines the functions to load each registerghcAssign registers R1 ... Rn in descending order, that is assign Rn first. This function uses the 7 array to construct functions which set the registers.ghcJS payload which defines an array of function symbols that set N registers from M parameters. For example, h$l2 compiles to:  function h$l4(x1, x2, x3, x4) { h$r4 = x1; h$r3 = x2; h$r2 = x3; h$r1 = x4; }; ghc'JS payload to declare return variables.ghc'JS payload defining the types closures.ghc'JS payload declaring the RTS functions.ghcGenerated RTS codeghc*JS Payload which defines the embedded RTS.None 1IghcExtract the default case alternative findDefaultStg :: [Alt b] -> ([Alt b], Maybe (Expr b))ghc3Strip ticks of a given type from an STG expression.ghcStrip ticks of a given type from an STG expression returning only the expression.  NoneNone 9ghchave we run the unariser yet?ghcTop-level bindings can't inherit the cost centre stack from their (static) allocation site.ghcextra vars in scope from GHCighcmodule being compiledghchave we run Unarise yet?ghcwho produced the STG?None)*/1ghcSimple convert env to a env of the 'InferTaggedBinders pass with no other changes.ghcLook up a sig in the given envghcLook up a sig in the env or derive it from information in the arg itself. ++++*******None ghcLocalFVs: set of variable that are: (a) bound locally (by a lambda, non-top-level let, or case); that is, it appears in the  field of 1 (b) appear free in the expression It is a  deterministic set because it is used to annotate closures with their free variables, and we want closure layout to be deterministic.4Invariant: the LocalFVs returned is a subset of the  field of Envghc*ImpFVs: set of variables that are importedIt is a non-deterministic set because we use it only to perform module dependency analysis.ghcTopFVs: set of variables that are: (a) bound at the top level of this module, and (b) appear free in the expression It is a non-deterministic set because we use it only to perform dependency analysis on the top-level bindings.ghcSet of locally-bound, not-top-level binders in scope. That is, variables bound by a let (but not let-no-escape), a lambda (in a StgRhsClsoure), a case binder, or a case alternative. These are the variables that must be captured in a function closure, if they are free in the RHS. Example f = x. let g = y. x+1 let h = z. g z + 1 in h x In the body of h we have locals = {x, g, z}. Note that f is top level and does not appear in locals.ghcDependency sort a STG program, and annotate it with free variables The returned bindings: * Are in dependency order * Each StgRhsClosure is correctly annotated (in its extension field) with the free variables needed in the closure * Each StgCase is correctly annotated (in its extension field) with the variables that must be saved across the caseghc!Dependency analysis on STG terms.Dependencies of a binding are just free variables in the binding. This includes imported ids and ids in the current module. For recursive groups we just return one set of free variables which is just the union of dependencies of all bindings in the group.Implementation: pass bound variables (NestedIds) to recursive calls, get free variables (TopFVs) back. We ignore imported TopFVs as they do not change the ordering but it improves performance (see nameIsExternalFrom call in vars_fvs).None'>ghc.The CSE environment. See Note [CseEnv Example]ghcThe third component is an in-scope set, to rename away any shadowing bindersghcIf we come across a case expression case x as b of @ with a trivial binder, we add b C x to this. This map is *only* used when looking something up in the ce_conAppMap. See Note [Trivial case scrutinee]ghcThis substitution is applied to the code as we traverse it. Entries have one of two reasons:The input might have shadowing (see Note [Shadowing in Core]), so we have to rename some binders as we traverse the tree.If we remove `let x = Con z` because `let y = Con z` is in scope, we note this here as x C y.ghcThe main component of the environment is the trie that maps data constructor applications (with their ' arguments) to an in-scope name that can be used instead. This name is always either a let-bound variable or a case binder.ghcNote [CseEnv Example] ~~~~~~~~~~~~~~~~~~~~~ The following tables shows how the CseEnvironment changes as code is traversed, as well as the changes to that code.InExpr OutExpr conAppMap subst in_scope JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ -- empty {} {} case @ as a of {Con x y -> case @ as a of {Con x y -> -- Con x y C a {} {a,x,y} let b = Con x y (removed) -- Con x y C a bCa {a,x,y,b} let c = Bar a let c = Bar a -- Con x y C a, Bar a C c bCa {a,x,y,b,c} let c = some expression let c' = some expression -- Con x y C a, Bar a C c bCa, cCc', {a,x,y,b,c,c'} let d = Bar b (removed) -- Con x y C a, Bar a C c bCa, cCc', dCc {a,x,y,b,c,c',d} (a, b, c d) (a, a, c' c)ghc;This function short-cuts let-bindings that are now obsoleteNonePu*jghcRecover the type of a well-typed Core expression. Fails when applied to the actual 67 expression as it cannot really be said to have a typejghc4Returns the type of the alternatives right hand sidejghcReturns the type of the first alternative, which should be the same as for all alternativesjghcMakes a (->) type or an implicit forall type, depending on whether it is given a type variable or a term variable. This is used, for example, when producing the type of a lambda. Always uses Inferred binders.jghcj% for multiple type or value argumentsjghcDetermines the type resulting from applying an expression with given typejghcWrap the given expression in the coercion safely, dropping identity coercions and coalescing nested coercionsjghcWraps the given expression in the source annotation, dropping the annotation if possible.jghc b }&depending on whether we have to use a case or let" binding for the expression (see j). It's used by the desugarer to avoid building bindings that give Core Lint a heart attack, although actually the simplifier deals with them perfectly well. See also jghcTests whether we have to use a case rather than let7 binding for this expression as per the invariants of : see  GHC.Core#let_can_float_invariantjghcThis guy constructs the value that the scrutinee must have given that you are in one particular branch of a casejghc$Extract the default case alternativejghcFind the case alternative corresponding to a particular constructor: panics if no such constructor existsjghcMerge alternatives preserving order; alternatives in the first argument shadow ones in the secondjghcGiven: )case (C a b x y) of C b x y -> ...We want to drop the leading type argument of the scrutinee leaving the arguments to match against the patternjghc$Refine the default alternative to a Z, if there is a unique way to do so. See Note [Refine DEFAULT case alternatives]jghcj' returns True of an expression that is:Safe to evaluate even if normal order eval might not evaluate the expression at all, orSafe not- to evaluate even if normal order would do soIt is usually called on arguments of unlifted type, but not always In particular, Simplify.rebuildCase calls it on lifted types when a 'case' is a plain . See the example in Note [exprOkForSpeculation: case expressions] belowPrecisely, it returns True iff: a) The expression guarantees to terminate, b) soon, c) without causing a write side effect (e.g. writing a mutable variable) d) without throwing a Haskell exception e) without risking an unchecked runtime exception (array out of bounds, divide by zero)For exprOkForSideEffects( the list is the same, but omitting (e).Note that exprIsHNF implies exprOkForSpeculation exprOkForSpeculation implies exprOkForSideEffects3See Note [PrimOp can_fail and has_side_effects] in GHC.Builtin.PrimOps and Note [Transformations affected by can_fail and has_side_effects];As an example of the considerations in this test, consider: -let x = case y# +# 1# of { r# -> I# r# } in Ebeing translated to: 3case y# +# 1# of { r# -> let x = I# r# in E }We can only do this if the y + 1 is ok for speculation: it has no side effects, and can't diverge or raise an exception.jghcj' returns True of an expression that is:Safe to evaluate even if normal order eval might not evaluate the expression at all, orSafe not- to evaluate even if normal order would do soIt is usually called on arguments of unlifted type, but not always In particular, Simplify.rebuildCase calls it on lifted types when a 'case' is a plain . See the example in Note [exprOkForSpeculation: case expressions] belowPrecisely, it returns True iff: a) The expression guarantees to terminate, b) soon, c) without causing a write side effect (e.g. writing a mutable variable) d) without throwing a Haskell exception e) without risking an unchecked runtime exception (array out of bounds, divide by zero)For exprOkForSideEffects( the list is the same, but omitting (e).Note that exprIsHNF implies exprOkForSpeculation exprOkForSpeculation implies exprOkForSideEffects3See Note [PrimOp can_fail and has_side_effects] in GHC.Builtin.PrimOps and Note [Transformations affected by can_fail and has_side_effects];As an example of the considerations in this test, consider: -let x = case y# +# 1# of { r# -> I# r# } in Ebeing translated to: 3case y# +# 1# of { r# -> let x = I# r# in E }We can only do this if the y + 1 is ok for speculation: it has no side effects, and can't diverge or raise an exception.jghcA special version of j used during Note [Speculative evaluation]. When the predicate arg fun_ok returns False for b, then b! is never considered ok-for-spec.jghcShould we look past this tick when eta-expanding the given function?See Note [Ticks and mandatory eta expansion] Takes the function we are applying as argument.jghc:exprIsHNF returns true for expressions that are certainly already evaluated to head normal form. This is used to decide whether it's ok to change: case x of _ -> einto: e-and to decide whether it's safe to discard a . So, it does not treat variables as evaluated, unless they say they are. However, it does treat partial applications and constructor applications as values, even if their arguments are non-trivial, provided the argument type is lifted. For example, both of these are values: &(:) (f x) (map f xs) map (...redex...)because & on such things completes immediately.3For unlifted argument types, we have to be careful: C (f x :: Int#)Suppose f x diverges; then C (f x) is not a value. We check for this using needsCaseBinding belowjghc Similar to j but includes CONLIKE functions as well as data constructors. Conlike arguments are considered interesting by the inliner.ghcReturns true for values or value-like expressions. These are lambdas, constructors / CONLIKE functions (as determined by the function argument) or PAPs.jghcCan we bind this  at the top level?jghcCheck if the expression is zero or more Ticks wrapped around a literal string.jghcExtract a literal string from an expression that is zero or more Ticks wrapped around a literal string. Returns Nothing if the expression has a different shape. Used to "look through" Ticks in places that need to handle literal strings.jghcA cheap equality test which bales out fast! If it returns True the arguments are definitely equal, otherwise, they may or may not be equal.jghc9Cheap expression equality test, can ignore ticks by type.jghc-Finds differences between core bindings, see diffExpr.The main problem here is that while we expect the binds to have the same order in both lists, this is not guaranteed. To do this properly we'd either have to do some sort of unification or check all possible mappings, which would be seriously expensive. So instead we simply match single bindings as far as we can. This leaves us just with mutually recursive and/or mismatching bindings, which we then speculatively match by ordering them. It's by no means perfect, but gets the job done well enough.%Only used in GHC.Core.Lint.lintAnnotsghcFinds differences between core expressions, modulo alpha and renaming. Setting top means that the IdInfo6 of bindings will be checked for differences as well.ghcFind differences in IdInfo. We will especially check whether the unfoldings match, if present (see  diffUnfold).ghcFind differences in unfoldings. Note that we will not check for differences of IdInfo in unfoldings, as this is generally redundant, and can lead to an exponential blow-up in complexity.ghc)Add location information to diff messagesjghcTrue if the type has no non-bottom elements, e.g. when it is an empty datatype, or a GADT with non-satisfiable type parameters, e.g. Int :~: Bool. See Note [Bottoming expressions]See Note [No alternatives lint check] for another use of this function.jghcIf 1normSplitTyConApp_maybe _ ty = Just (tc, tys, co) then ty |> co = tc tys. It's (#, but looks through coercions via i. Hence the "norm" prefix.jghc-collectMakeStaticArgs (makeStatic t srcLoc e) yields Just (makeStatic, t, srcLoc, e).Returns Nothing for every other expression.jghcDoes this binding bind a join point (or a recursive group of join points)?jghcDo we expect there to be any benefit if we make this var strict in order for it to get treated as as cbv argument? See Note [Which Ids should be strictified] See Note [CBV Function Ids] for more background.jghcCase alternative constructorghc!Things bound by the pattern matchghc*The type arguments to the case alternativejghcType constructor of scrutinee's type (used to prune possibilities)ghcAnd its type argumentsghc imposs_cons: constructors known to be impossible due to the form of the scrutineeghc Alternativesjghc$Uniques for constructing new bindersghc.Multiplicity annotation of the case expressionghc$Type constructor of scrutinee's typeghc"Type arguments of scrutinee's typeghc3Constructors that cannot match the DEFAULT (if any)ghcL', if a default alt was replaced with a ZZHjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjHjjjjjjjjjjjjjjjjjjjjjjjjjZjjjjjjjjjjjjjjjjjjjjNone bghc-The analysis monad consists of the following  components:: Reader-like context. Contains a substitution, info about how how lifted identifiers are to be expanded into applications and configuration options. .: Writer output for the resulting STG program.No pure state componentBut wrapping around 2 for generating fresh lifted binders. (The uniqAway approach could give the same name to two different lifted binders, so this is necessary.)ghcWe need to detect when we are lifting something out of the RHS of a recursive binding (c.f. GHC.Stg.Lift.Monad#floats), in which case that binding needs to be added to the same top-level recursive group. This requires we detect a certain nesting structure, which is encoded by  and . Although  will only ever care if the current binding to be lifted (through ) will occur inside such a binding group or not, e.g. doesn't care about the nesting level as long as its greater than 0.ghc)Environment threaded around in a scoped, Reader-like fashion.ghcLifted s don't occur as free variables in any closure anymore, because they are bound at the top-level. Every occurrence must supply the formerly free variables of the lifted , so they in turn become free variables of the call sites. This environment tracks this expansion from lifted s to their free variables.'s to 's. Invariant: /s not present in this map won't be substituted.ghc(We need to track the renamings of local 's to their lifted ', because shadowing might make a closure's free variables unavailable at its call sites. Consider: * let f y = x + y in let x = 4 in f x  Here, f9 can't be lifted to top-level, because its free variable x# isn't available at its call site.ghc Read-only.ghc uncurry  .  = idghcFlattens an expression in [] into an STG program, see GHC.Stg.Lift.Monad#floats4. Important pre-conditions: The nesting of opening StartBindinGroups and closing EndBindinGroups is balanced. Also, it is crucial that every binding group has at least one recursive binding inside. Otherwise there's no point in announcing the binding group in the first place and an ASSERT will trigger.ghcOmitting this makes for strange closure allocation schemes that crash the GC.ghcWrites a plain  to the output.ghc&Starts a recursive binding group. See GHC.Stg.Lift.Monad#floats and .ghc$Ends a recursive binding group. See GHC.Stg.Lift.Monad#floats and .ghcLifts a binding to top-level. Depending on whether it's declared inside a recursive RHS (see GHC.Stg.Lift.Monad#floats and ), this might be added to an existing recursive top-level binding group.ghcTakes a binder and a continuation which is called with the substituted binder. The continuation will be evaluated in a  context in which that binder is deemed in scope. Think of it as a  computation: After the continuation finishes, the new binding won't be in scope anymore.ghcSee .ghc Similarly to , this function takes a set of variables to abstract over, the binder to lift (and generate a fresh, substituted name for) and a continuation in which that fresh, lifted binder is in scope.It takes care of all the details involved with copying and adjusting the binder and fresh name generation.ghcSee .ghcSubstitutes a binder  occurrence), which was brought in scope earlier by  / .ghc:Whether the given binding was decided to be lambda lifted.ghcReturns an empty list for a binding that was not lifted and the list of all local variables the binding abstracts over (so, exactly the additional arguments at adjusted call sites) otherwise.ghc Creates an expander function for the current set of lifted binders. This expander function will replace any ' by their corresponding ' and, in addition, will expand any lifted binders by the former free variables it abstracts over.NonedghcFor a binding we: * Look at the args * Mark any argument as call-by-value if: - It's argument to a worker and demanded strictly - Unless it's an unlifted type already * Update the id See Note [CBV Function Ids] See Note [Attaching CBV Marks to ids]NoneskjghcAdd a substitution for an  to the G: you must ensure that the in-scope set is such that TyCoSubst Note [The substitution invariant] holds after extending the substitution like thisjghcAdds multiple  substitutions to the G : see also jjghcAdd a substitution appropriate to the thing being substituted (whether an expression, type, or coercion). See also j, G, GjghcAdd a substitution as appropriate to each of the terms being substituted (whether expressions, types, or coercions). See also j.jghcFind the substitution for an  in the G The Id should not be a CoVarjghcSimultaneously substitute for a bunch of variables No left-right shadowing ie the substitution for (x y. e) a1 a2 so neither x nor y scope over a1 a2jghc.substExpr applies a substitution to an entire 1. Remember, you may only apply the substitution once/: See Note [Substitutions apply only once] in GHC.Core.TyCo.SubstDo *not* attempt to short-cut in the case of an empty substitution! See Note [Extending the IdSubstEnv]jghc"Apply a substitution to an entire Y$, additionally returning an updated G2 that should be used by subsequent substitutions.jghc"Apply a substitution to an entire Y$, additionally returning an updated G2 that should be used by subsequent substitutions.jghcDe-shadowing the program is sometimes a useful pre-pass. It can be done simply by running over the bindings with an empty substitution, because substitution returns a result that has no-shadowing guaranteed.(Actually, within a single type* there might still be shadowing, because substTy is a no-op for the empty substitution, but that's probably OK.) Aug 09This function is not used in GHC at the moment, but seems so short and simple that I'm going to leave it herejghcSubstitutes a " for another one according to the G- given, returning the result and an updated G3 that should be used by subsequent substitutions.  is preserved by this process, although it is substituted into appropriately.jghcApplies j to a number of s, accumulating a new G left-to-rightjghc,Substitute in a mutually recursive group of sjghcVery similar to j , but it always allocates a new  for each variable in its output. It substitutes the IdInfo though. Discards non-Stable unfoldingsjghcApplies j to a number of s, accumulating a final substitution from left to right Discards non-Stable unfoldingskghc$Clone a mutually recursive group of skghcSubstitute into some ! with regard to the supplied new .. Discards unfoldings, unless they are StablekghcSubstitutes for the *s within an unfolding NB: substUnfolding discards any unfolding without without a Stable source. This is usually what we want, but it may be a bit unexpectedkghcSubstitutes for the *s within an unfolding NB: substUnfolding discards any unfolding without without a Stable source. This is usually what we want, but it may be a bit unexpectedkghcSubstitutes for the  s within the \ given the new function kghcDrop free vars from the breakpoint if they have a non-variable substitution.ghc"Substitution to use for the IdInfoghc Substitution and Id to transformghc-Transformed pair NB: unfolding may be zapped9kjjjkjjjjjjjjjjjjjjjjkjjkkkjkkkkkGGGGGGGGGGGGGGGGGGGGGGG)9GGGG)jkkGGjjjjkkjjkkkkkGGGjGjjGGjjjjGGGGGGGGjjGjjjGGkjjjkNonetwNoneughcState Monad used inside exitifyghc8Traverses the AST, simply to find all joinrecs and call exitify8 on them. The really interesting function is exitifyRecghcGiven a recursive group of a joinrec, identifies @exit paths@ and binds them as join-points outside the joinrec.Nonez5ghcGiven a binding of in_id to in_rhs , and a fresh name to refer to in_id (out_id>, created from addBinder or addRecBinders), first try to CSE in_rhs>, and then add the resulting (possibly CSE'd) binding to the , so that we attempt to CSE any expressions which are equal to out_rhs. We use a different env for cse on the rhs and for extendCSEnvWithBinding for reasons explain in See Note [Separate envs for let rhs and body]ghcGiven a binder `let x = e`, this function determines whether we should add `e -> x` to the cs_mapghc Runs CSE on a single expression.This entry point is not used in the compiler itself, but is provided as a convenient entry point for users of the GHC API.ghcextendCSEnv env e triv_expr will replace any occurrence of e with  triv_expr going forward.ghcAdd clones to the substitution to deal with shadowing. See Note [Shadowing in CSE] for more details. You should call this whenever you go under a binder.Nonekghc;The analysis lattice of arity analysis. It is isomorphic to  data ArityType' = AEnd Divergence | ALam OneShotInfo ArityType' 1Which is easier to display the Hasse diagram for:  ALam OneShotLam at | AEnd topDiv | ALam NoOneShotInfo at | AEnd exnDiv | AEnd botDiv  where the at fields of ALam6 are inductively subject to the same order. That is, ALam os at1 < ALam os at2 iff  at1 < at2.Why the strange Top element? See Note [Combining case branches: optimistic one-shot-ness]We rely on this lattice structure for fixed-point iteration in k. For the semantics of k, see Note [ArityType].ghc`AT oss div` is an abstraction of the expression, which describes its lambdas, and how much work appears where. See Note [ArityType] for more informationIf  is dead-ending (X), then application to `length os` arguments will surely diverge, similar to the situation with W.kghcmanifestArity sees how many leading value lambdas there are, after looking through castskghc6(typeArity ty) says how many arrows GHC can expose in ty, after looking through newtypes. More generally, (typeOneShots ty) returns ty's [OneShotInfo], based only on the type itself, using typeOneShot on the argument type to access the "state hack".ghcLike ^, but taking the Horrible State Hack in to account See Note [The state-transformer hack] in GHC.Core.Opt.Aritykghc/Returns whether the lambda associated with the  is certainly applied at most once This one is the "business end", called externally. It works on type variables as well as Ids, returning True Its main purpose is to encapsulate the Horrible State Hack See Note [The state-transformer hack] in GHC.Core.Opt.Aritykghc+The number of value args for the arity typeghcAssuming this ArityType is all we know, find the arity of the function, and trim the argument info (and Divergence) to match that arity. See Note [SafeArityType]ghcTrim an arity type so that it has at most the given arity. Any excess !s are truncated to X, even if they end in ABot. See Note [Arity trimming]kghcThe Arity returned is the number of value args the expression can be applied to without doing much workghcLeast upper bound in the k lattice. See the haddocks on k for the lattice.Used for branches of a case.ghcThe ArityEnv used by k.ghc8Whether the analysis should be pedantic about bottoms. k always is.ghc A version of j that considers results from arity analysis and optionally the expression's type. Under k, no expressions are cheap.ghc A version of j that considers results from arity analysis. See Note [Arity analysis] for what's in the signature environment and why it's important.kghc(An approximate, even faster, version of k Roughly exprArity e = arityTypeArity (cheapArityType e) But it's a bit less clever about bottomsWe do not guarantee that exprArity e <= typeArity e You may need to do arity trimming after calling exprArity See Note [Arity trimming] Reason: if we do arity trimming here we have take exprType and that can be expensive if there is a large castkghc etaExpand n e1 returns an expression with the same meaning as e, but with arity n.Given: e' = etaExpand n eWe should have that: ty = exprType e = exprType e'ghcmkEtaWW n _ fvs ty will compute the , necessary for eta-expanding an expression e :: ty to take n value arguments, where fvs are the free variables of e.Note that this function is entirely unconcerned about cost centres and other semantically-irrelevant source annotations, so call sites must take care to preserve that info. See Note [Eta expansion and SCCs].kghc`tryEtaReduce [x,y,z] e sd` returns `Just e'` if `x y z -> e` is evaluated according to sd1 and can soundly and gainfully be eta-reduced to e'. See Note [Eta reduction soundness] and Note [Eta reduction makes sense] when that is the case.ghcCan we eta-reduce the given function See Note [Eta reduction soundness], criteria (B), (J), (W) and (L).kghcIf 'pushCoValArg co = Just (co_arg, co_res), then (\x.body) |> co = (\y. let { x = y |> co_arg } in body) |> co_res)or, equivalently 3(fun |> co) arg = (fun (arg |> co_arg)) |> co_resIf the LHS is well-typed, then so is the RHS. In particular, the argument  arg |> co_arg is guaranteed to have a fixed  RuntimeRep, in the sense of Note [Fixed RuntimeRep] in GHC.Tc.Utils.Concrete.kghcSplit an expression into the given number of binders and a body, eta-expanding if necessary. Counts value *and* type binders.kghc(This is the BNF of the generated output:  @ We format AT [o1,..,on] topDiv as o1..on.T and AT [o1,..,on] botDiv as o1..on.E", respectively. More concretely, AT [NOI,OS,OS] topDiv is formatted as ?11.T6. If the one-shot info is empty, we omit the leading .@.ghc;Info about one lambda in an ArityType See Note [ArityType]ghc&How many value arguments to eta-expandghc5The pretty-printed original expression, for warnings.ghc=A super-set of the free vars of the expression to eta-expand.ghcThe variables in  are fresh wrt. to the incoming ). The outgoing ) extends the incoming ) with the fresh variables in .#kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk#kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk"(c) The University of Glasgow 2001 BSD-style (see the file LICENSE)Jeffrey Young Luite Stegeman Sylvain Henry Josh Meredith .experimental Code generation of ExpressionsNone "9ghcA  represents a possible branching path of an Stg case statement, i.e., a possible code path from an ghcEvaluate an expression in the given expression context (continuation)ghc)regular let binding: allocate heap objectghcGenerate let-no-escape entryLet-no-escape entries live on the stack. There is no heap object associated with them.A let-no-escape entry is called like a normal stack frame, although as an optimization, ݖ[ޖ] is not set when making the call. This is done later if the thread needs to be suspended.)Updatable let-no-escape binders have one private slot in the stack frame. This slot is initially set to null, changed to h$blackhole when the thunk is being evaluated.ghc/Generate the entry function for a local closureghcGenerate the entry function types for identifiers. Note that this only returns either  or . Everything else (PAP Blackhole etc.) is filtered as not a RuntimeRepKinded type.ghcGenerate the body of an objectghcFind the result type after applying the function to the arguments$It's trickier than it looks because: we don't have the Arity of the Id. The following functions return different values in some cases: - idArity - typeArity . idType - idFunRepArity - typeArity . unwrapType . idType Moreover the number of args may be different than all of these aritiessometimes the type is Any, perhaps after some unwrapping. For example HappyAbsSyn is a newtype around HappyAny which is Any or (forall a. a).Se we're left to use the applied arguments to peel the type (unwrapped) one arg at a time. But passed args are args after unarisation so we need to unarise every argument type that we peel (using typePrimRepArgs) to get the number of passed args consumed by each type arg.In case of failure to determine the type, we default to LiftedRep as it's probably what it is.ghc-Ensure that the set of identifiers has valid B's. This function returns a no-op when Ğ in  is False.ghcGiven a set of  s, bind each  to the appropriate data fields in N registers. This assumes these data fields have already been populated in the registers. For the empty, singleton, and binary case use register 1, for any more use as many registers as necessary.ghc'Pop a let-no-escape frame off the stackghcGenerate an updated given an ghcBlackhole single entryOverwrite a single entry object with a special thunk that behaves like a black hole (throws a JS exception when entered) but pretends to be a thunk. Useful for making sure that the object is not accidentally entered multiple timesghcReorder the things we need to push to reuse existing stack values as much as possible True if already on the stack at that locationghcAllocate local closuresghcConsume Stg case statement and generate a case statement. See also ghcConsume an Stg case alternative and generate the corresponding alternative in JS land. If one alternative is a continuation then we must normalize the other alternatives. See  and .ghcIf  is set, then generate an assertion that asserts the pattern match is valid, e.g., the match is attempted on a Boolean, a Data Constructor, or some number.ghcIf one branch ends in a continuation but another is inline, we need to adjust the inline branch to use the continuation conventionghcLoad an unboxed tuple. Loading means getting all Idents from the input ID's, declaring them as variables in JS land and binding them, in order, to es.ghc4Switch for pattern matching on constructors or primsghcif/else for pattern matching on things that js cannot switch on the list of branches is expected to have the default alternative first, if it existsghc-Wrapper to contruct sequences of (===), e.g., mkEq [l0,l1,l2] [r0,r1,r2] = (l0 === r0) && (l1 === r1) && (l2 === r2)ghc"Generate a primitive If-expressionghc Load parameters from constructorghcDetermine if a branch will end in a continuation or not. If not the inline branch must be normalized. See  NB. not a Monoidghc*Push return arguments onto the stack. The 9 tracks whether the value is already on the stack or not, used in .ghc2Load the return arguments then pop the stack frameghc8allocate multiple, possibly mutually recursive, closuresghcGenerate a primop. This function wraps around the real generator , handling the 1 and all arguments before generating the primop.ghcA list of stack slots. -- Id: stored on the slot -- Int: the part of the value that is stored -- Bool: True when the slot already contains a valueghc"lhs to assign expression result toghcid being matchedghctypeghc3if known, fields in datacon from earlier expressionghcthe alternativesghctoplevel id for the resultghcdatacon to matchghcmatch alternative with bindersNone(K ghc Captures the result of applying  to a function `xyz.body`. The TailUsageDetails records * the number of lambdas (including type lambdas: a JoinArity) * UsageDetails for the body, unadjusted by . If the binding turns out to be a join point with the indicated join arity, this unadjusted usage details is just what we need; otherwise we need to discard tail calls. That's what  does.ghcCondensed variant of  needed during loop breaking.ghc (#22336) See Note [Boxing constructors] in GHC.Builtin.TypeskghcLifts a "small" constructor into a "big" constructor by recursive decompositionkghcSplit a list into lists that are small enough to have a corresponding tuple arity. The sub-lists of the result all have length <=  But there may be more than  sub-listskghcBuilds a selector which scrutinises the given expression and extracts the one name from the list given. If you want the no-shadowing rule to apply, the caller is responsible for making sure that none of these names are in scope.If there is just one 7 in the tuple, then the selector is just the identity.0If necessary, we pattern match on a "big" tuple.A tuple selector is not linear in its argument. Consequently, the case expression built by k must consume its scrutinee Many? times. And all the argument variables must have multiplicity Many.k is like k but one-tuples are NOT flattened (see Note [Flattening one-tuples])kghcBuilds a selector which scrutinises the given expression and extracts the one name from the list given. If you want the no-shadowing rule to apply, the caller is responsible for making sure that none of these names are in scope.If there is just one 7 in the tuple, then the selector is just the identity.0If necessary, we pattern match on a "big" tuple.A tuple selector is not linear in its argument. Consequently, the case expression built by k must consume its scrutinee Many? times. And all the argument variables must have multiplicity Many.ghc is like k, but for tuples that are guaranteed never to be "big". Also does not unwrap boxed types. mkSmallTupleSelector [x] x v e = [| e |] mkSmallTupleSelector [x,y,z] x v e = [| case e of v { (x,y,z) -> x } |] is like  but one-tuples are NOT flattened (see Note [Flattening one-tuples])ghc is like k, but for tuples that are guaranteed never to be "big". Also does not unwrap boxed types. mkSmallTupleSelector [x] x v e = [| e |] mkSmallTupleSelector [x,y,z] x v e = [| case e of v { (x,y,z) -> x } |]kghcA generalization of k?, allowing the body of the case to be an arbitrary expression.;To avoid shadowing, we use uniques to invent new variables./If necessary we pattern match on a "big" tuple.ghcAs k, but for a tuple that is small enough to be guaranteed not to need nesting.kghc/Applies the floats from right to left. That is wrapFloats [b1, b2, @, bn] u = let b1 in let b2 in @ in let bn in ukghc Makes a list [] for lists of the specified typelghc Makes a list (:) for lists of the specified typelghcMake a list containing the given expressions, where the list has the given typelghcMake a fully applied  expressionlghcMake a build6 expression applied to a locally-bound worker functionlghc&Makes a Nothing for the specified typelghc/Makes a Just from a value of the specified typeghc!Exception with type "forall a. a"Any exceptions added via this function needs to be added to the RTS's initBuiltinGcRoots() function.ghcAn  for an Id, such as , that throws an (imprecise) exception after being supplied one value arg for every argument W9 in the list. The demands end up in the demand signature. 8Sets the demand signature to unleash the given arg dmds XSets the arity info so that it matches the length of arg demands/Sets a bottoming CPR sig with the correct arityIt's important that all 3 agree on the arity, which is what this defn ensures. kghcfunctionghc argumentskghcfunctionghcargumentkghc scrutineeghcres_tyghcaltskghcguardghcthenghcelsekghc5"Small" constructor function, of maximum input arity ghc/Possible "big" list of things to construct fromghc:Constructed thing made possible by recursive decompositionkghcThe $s to pattern match the tuple againstghcThe  to selectghc,A variable of the same type as the scrutineeghc ScrutineeghcSelector expressionkghcThe $s to pattern match the tuple againstghcThe  to selectghc,A variable of the same type as the scrutineeghc ScrutineeghcSelector expressionkghcThe tuple identifiers to pattern match on; Bring these into scope in the bodyghcBody of the caseghc ScrutineeghcThe tuple argsghcBody of the caseghc,A variable of the same type as the scrutineeghc ScrutineelghcElement type of the listghcFold result typeghcCons! function expression for the foldghcNil expression for the foldghc#List expression being folded acresslghc!Type of list elements to be builtghc+Function that, given information about the s of the binders for the build worker function, returns the body of that workerlkklkklkkkkkkkklkklkkkkkkkkkkkkklklkkkllkkkllkkkkkkklllllklkkkjkkkkkkkkkkkkkkkkjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkklllllllllllllllllkk#Generic helpers for the HsSyn type.((c) The University of Glasgow, 1992-2006None()*/1n'ghcA bijection between record fields of a datatype and integers, used to implement Note [Collecting record fields in data declarations].ghc An integer i such that no integer i' >= i appears in the .ghc3Look up the index of a field label in the previous .ghcLook up a field from its index.~ghc3A mapping from constructors to all of their fields.9See Note [Collecting record fields in data declarations].~ghcThis class specifies how to collect variable identifiers from extension patterns in the given pass. Consumers of the GHC API that define their own passes should feel free to implement instances in order to make use of functions which depend on it.In particular, Haddock already makes use of this, with an instance for its DocNameI pass so that it can reuse the code in GHC for collecting binders.~ghc2Indicate if evidence binders have to be collected.This type is used as a boolean (should we collect evidence binders or not?) but also to pass an evidence that the AST has been typechecked when we do want to collect evidence binders, otherwise these binders are not available.*See Note [Dictionary binders in ConPatOut]~ghcDon't collect evidence binders~ghcCollect evidence binders~ghc e => (e)~ghcA simple case alternative with a single pattern, no binds, no guards; pre-typechecking~ghcWrap in parens if } appPrec says it needs them So f x becomes (f x), but 3 stays as 3.~ghcA useful function for building OpApps. The operator is always a variable, and we don't know the fixity yet.ghc NB: Only for   .ghc Wildcard pattern - after parsingghc!Wildcard pattern - after renamingghc4The Big equivalents for the source tuple expressionsghc1The Big equivalents for the source tuple patternsghc Convert an Q to an Q.ghc Convert an Q to an Q.ghcConvert R to R. The former is what is parsed, but the latter is what we need in class/instance declarationsghc8Not infix, with place holders for coercion and free varsghc!In Name-land, with empty bind_fvsghcIf any of the matches in the R are infix, the R is considered infix.ghc Return the 0 encompassing the contents of any enclosed bindsghcConvenience function using . This is for generated bindings only, do not use for user-written code.ghc#Make a prefix, non-strict function UghcShould we treat this as an unlifted bind? This will be true for any bind that binds an unlifted variable, but we must be careful around AbsBinds. See Note [isUnliftedHsBind]. For usage information, see Note [Strict binds checks] is GHC.HsToCore.Binds.ghc5Is a binding a strict variable or pattern bind (e.g. !x = ...)?ghcCollect  binders only, or "s + pattern synonyms, respectivelyghc Collect both s and pattern-synonym bindersghcSame as #, but works over a list of bindingsghcCollect s, or /s + pattern synonyms, depending on boolean flagghcUsed exclusively for the bindings of an instance decl which are all FunBindsghcReturns all the binding names of the decl. The first one is guaranteed to be the name of the decl. The first component represents all binding names except record fields; the second represents field occurrences. For record fields mentioned in multiple constructors, the SrcLoc will be from the first occurrence.3Each returned (Located name) has a SrcSpan for the whole- declaration. See Note [SrcSpan for binders]ghcSee Note [SrcSpan for binders]ghcCollects record pattern-synonym selectors only; the pattern synonym names are collected by .ghcthe < returned are for the whole declarations, not just the namesghcthe < returned are for the whole declarations, not just the namesrr~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~rr~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~None/67ghcextra source files (e.g. from #includes). The lexer collects these from '#  file  line' pragmas, which the C preprocessor leaves behind. These files and their timestamps are stored in the .hi file, so that we can force recompilation if any of them change (#3589)ghc,Haskell Module extension point: GHC specificghc-Haddock module info and description, unparseds : % ,ghc9reason/explanation for warning/deprecation of this modules : % ,ghcLayout info for the module. For incomplete modules (e.g. the output of parseHeader), it is NoLayoutInfo.{{{{{{{{{{{{{{{{{{{{{{{{{{{||||||||||||||||||||||||||||||||||:::::}}}}}}}}}~}~}~}}}}}}}~~}}~~}}}}}}}}W}~W}}}~}W}~~~~}}}W}~}}~~~}}WW}}}}}}}}}}}}}~}}}}}99999;;;;;;;;;;;;;{{{{{{{{{{{{{{{{{{{{{{{{R{srrrrrrrrrrrrrrrrrrrrrrrrrrrsrrrrrrrrrrrrrrrrrrrrrrrssssrrsssssrrrrrrrrrrrr~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//////////////./////././//.///////////////////////////////////.////SRRSRSRRRUUUUUUUUUUUUUUUUUUUUUWWWWWWWWW I RRRRQQQQQQQQ QQPPPPPP{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{|||||||||||||:::::::::::::::::::::::::::::}}}}}}}}}}}}}}}}}}}}}}}||}}}}}}}}}||||}}}}}}}}}}}}}}}}WWWWW}}|||||||||}}||||||W}}}}}}}}}}W||||||||||||||||}}}}}}99999999999999999;;;;;;;;;;;;;{{{{zz{{{{{{{{{{{{{{{{{{{{{{{rrrrrrrrrrrr~~~~~~~~~~~~~~~~~..------------.........................................................................................................----------------------------------------..........---......-------------------------------------------------------WWWWWWWW RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTSSSSSSTTTTSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUTTTTTTTUUUUUUUUUUUUUUUTTTTSSSSSSSSSSSSSTSSTSSSTTSUTTTSSSSSUTTTTTSSTTTSSSSSSSSSSSSSSSSSSSSSSUUUUUUTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTSSSSSSSSUUUUVVUVVUVVVUUUUUVVVVVVVVVVWWVVV VVVVVVVVVVVVUUUUUVVVVVVVVVVVVVVVUUUUUU WWVVWVVVWWVWVVWVWVVVWWWVWWWVWWVVVWWVVWWWWWWWWWWWWUUUUUUUUUUUUUUUUUVVVUUUUUUUUVUUUUUUVVVV UUUWVVV WWWWWWWWWVVVVVVVVVVVVVV VVVVVVVWWVVVVVVVVVVVVVVVVVVVVVVVVVVV VVV :::::::::::::::::::::::::::::::::::: :::IIIIIIIIIIIIIIIIIIIIIIIIIIIIII RRRRQQRRQQRRRRRRRRR RRRRRRRRRRRRRRRRRRRRRRRPPPPQPPPPQQPPPPPPPPPPQQQQQQQPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQPQQPQQQQQQQQQQQPQ WWWWWWWWNone(ghc ..., we are checking the type a because it's the type of a term variable bound in a lambda, so we use Ђ. ghcThe context in which a representation-polymorphism check was performed.Does not include the type on which the check was performed; see   for that. ghc  stores the origin of a skolem type variable, so that we can display this information to the user in case of a type error.The  field allows us to report all skolem type variables bound in the same place in a single report. ghc  stores the origin of a skolem type variable (e.g. bound by a user-written forall, the header of a data declaration, a deriving clause, ...).This information is displayed when reporting an error message, such as "Couldn't match k with l" C [a] where ... When typechecking the instance decl itself, including producing evidence for the superclasses of C, the superclasses of (Foo a) and (Bar a) will have  origin.ghc is used only for the Wanted constraints for the superclasses of an instance declaration.ghcTesting whether the constraint associated with an instance declaration in a signature file is satisfied upon instantiation.Test cases: backpack should_failbkpfail{11,43}.bkpghcIs at least one of the three elements above visible? (Errors from the polymorphic subsumption check are considered visible.) Only used for prioritizing error messages.ghc The thing that has type "actual"ghc"Some kind of type variable binder.Used for reporting errors, in   and TcSolverReportMsg.ghcSome thing which has a type.This datatype is used when we want to report to the user that something has an unexpected type.ghcReport Redundant Constraints.ghc"Don't report redundant constraintsghcReport redundant constraints, and here is the SrcSpan for the constraints E.g. f :: (Eq a, Ord b) => blah The span is for the (Eq a, Ord b)ghcUserTypeCtxt describes the origin of the polymorphic type in the places where we need an expression to have that type݃ghc8Wrap up the origin of a skolem type variable with a new 8, so that we can common up skolem type variables whose   shares a certain .ghcDid a constraint arise from expanding a Wanted constraint to look at superclasses?ghc)Extract a suitable CtOrigin from a HsExprghc-Extract a suitable CtOrigin from a MatchGroupghc-Extract a suitable CtOrigin from guarded RHSsghc7Extract a suitable CtOrigin from a list of guarded RHSsghcShort one-linersghcPrint the context for a FixedRuntimeRep# representation-polymorphism check.6Note that this function does not include the specific B4 which is not fixed. That information is stored in   and is reported separately. ghcrebindable syntax operatorghc!function used in the view patternghcfunctionghcargumentghcname of the functionghc equationsghc!the entire lambda-case expressionނghcargument position (1-indexed)ghcJust like GivenOriginghcThe number of superclass selections necessary to get this constraint; see Note [Replacement vs keeping] in GHC.Tc.Solver.DictghcTrue => "blocked": cannot use this to solve naked superclass Wanteds i.e. ones with (ScOrigin _ NakedSc) False => can use this to solve all Wanted constraints See Note [Solving superclass constraints] in GHC.Tc.TyCl.Instanceghc)Module in which the instance was declaredghcThe declared typeclass instanceghcThe Unique is used to common up skolem variables bound at the same location (only used in pprSkols)ghcIsGroupClosed describes a group of mutually-recursive bindingsghc+IdBindingInfo describes how an Id is bound.?It is used for the following purposes: a) for static forms in  and b) to figure out when a nested binding can be generalised, in .ghc?A typecheckable thing available in a local context. Could be  1, but also lexically scoped variables, etc. See GHC.Tc.Utils.Env for how to retrieve a  given a .ghc#No signature or a partial signatureghcMatches on either a global  or a `.88None <6ghcA stripped down version of TcM' which is sufficient for zonking types.ÄghcInformation needed by the , monad, which is a slimmed down version of TcM* with just enough information for zonking.̄ghcSame as traceTc, but for the  monad. ˄̄ÄĄńɄȄDŽƄʄ„ ʄ„ʄÄĄɄȄDŽƄń˄̄None=2фghcAdditional context to include in an error message, e.g. "In the type signature ...", "In the ambiguity check for ...", etc.ффNone>҄ghc/Local typechecker environment for a constraint.Used to restore the environment of a constraint when reporting errors, see  setCtLocM. See also  TcLclCtxt.߄ڄۄބ܄݄҄ӄׄلՄ؄Ԅք҄ӄل؄ׄքՄԄڄۄ܄݄ބ߄None hghcSee Note [SubGoalDepth]ghcWhether or not one Ѕ can rewrite another is determined by its flavour and its equality relation. See also Note [Flavours with roles] in GHC.Tc.Solver.InertSetghcStores a set of CoercionHoles that have been used to rewrite a constraint. See Note [Wanteds rewrite Wanteds].ghc?A place for type-checking evidence to go after it is generated.Wanted equalities use HoleDest,other Wanteds use EvVarDest.ghcbind this var to the evidence EvVarDest is always used for non-type-equalities e.g. class constraintsghcfill in this hole with the evidence HoleDest is always used for type-equalities See Note [Coercion holes] in GHC.Core.TyCo.RepghcAn  individual# problem that might be logged in a ghcA set? of problems in checking the validity of a type equality. See  checkTypeEq.ghcUsed to indicate extra information about why a CIrredCan is irreducibleghc0This constraint has a non-canonical shape (e.g. c Int, for a variable c)ghc8An equality where some invariant other than (TyEq:H) of Ӆ is not satisfied; the  states exactly whyghcAn equality that cannot be decomposed because it is representational. Example:  a b ~R# Int. These might still be solved later. INVARIANT: The constraint is a representational equality constraintghcA nominal equality that relates two wholly different types, like  Int ~# Bool or a b ~# 3=. INVARIANT: The constraint is a nominal equality constraintghcAn equality like T a b c ~ Q d e where either T or Q is an abstract type constructor. See Note [Skolem abstract data] in GHC.Core.TyCon. INVARIANT: The constraint is an equality constraint between two TyConAppsghcA typechecker plugin returned this in the pluginBadCts field of TcPluginProgressghc/Why did we decide that a type was not concrete?ghcThe type contains a TyConApp of a non-concrete .3See Note [Concrete types] in GHC.Tc.Utils.Concrete.ghcThe type contains a type variable that could not be made concrete (e.g. a skolem type variable).ghcThe type contains a cast.ghcThe type contains a forall.ghcThe type contains a  CoercionTy.ghc3Why did we require that a certain type be concrete?ghcConcreteness was required by a representation-polymorphism check.;See Note [The Concrete mechanism] in GHC.Tc.Utils.Concrete.ghcWhy did the check fail?ghc7Which representation-polymorphism check did we perform?ghc Where did this check take place?ghc,Used to indicate which sort of hole we have.ghcEither an out-of-scope variable or a "true" hole in an expression (TypedHoles). The HoleExprRef says where to write the the erroring expression for -fdefer-type-errors.ghc(A hole in a type (PartialTypeSignatures)ghcA hole in a constraint, like @f :: (_, Eq a) => ... Differentiated from TypeHole because a ConstraintHole is simplified differently. See Note [Do not simplify ConstraintHoles] in GHC.Tc.Solver.ghcA hole stores the information needed to report diagnostics about holes in terms (unbound identifiers or underscores) or in types (also called wildcards, as used in partial type signatures). See Note [Holes].ghcWhere hole was writtenghcType to be printed to the user For expression holes: type of expr For type holes: the missing typeghcThe name of this holeghcWhat flavour of hole is this?ghcA delayed error, to be reported after constraint solving, in order to benefit from deferred unifications.ghc A hole (in a type or in a term).See Note [Holes].ghc+A type could not be ensured to be concrete.;See Note [The Concrete mechanism] in GHC.Tc.Utils.Concrete.ghcA  is a type that can appear on the left of a canonical equality: a type variable or exactly-saturated type family application.օghcSays how many layers of superclasses can we expand. Invariant: ExpansionFuel should always be >= 0 see Note [Expanding Recursive Superclasses and ExpansionFuel]؅ghcA ؅-type is one that has been fully rewritten with respect to the inert set; that is, it has been rewritten by the algorithm in GHC.Tc.Solver.Rewrite. (Historical note: ؅, for years and years, meant that a type was type-family-free. It does *not* mean this any more.)مghc&Do not expand superclasses any furtherڅghc4Consumes one unit of fuel. Precondition: fuel > 0ۅghc>Returns True if we have any fuel left for superclass expansion܅ghcasserts if fuel is non-negative݅ghc*asserts if fuel is strictly greater than 0ghc?Are we sure that more solving will never solve this constraint?ghc8No problems in checking the validity of a type equality.ghcCheck whether a  is marked successful.ghcCheck whether a  has a ghcCheck whether a  has one  and no otherghcMark a  as not having an insoluble occurs-check: any occurs check under a type family or in a representation equality is soluble.ghcRetain only information about occurs-check failures, because only that matters after recurring into a kind.ghcReturns the evidence  for the argument Ѕ when this Ѕ is a .Returns J otherwise.ghcMakes a new equality predicate with the same role as the given evidence.ghcGet the flavour of the given Ѕghc(Get the equality relation for the given ЅghcIs a type a canonical LHS? That is, is it a tyvar or an exactly-saturated type family application? Does not look through type synonyms.ghc Convert a  back into a ghcRetrieve the kind of a ghcAre two s equal?ghcReturns free variables of constraints as a non-deterministic setghcReturns free variables of constraints as a non-deterministic setghcReturns free variables of constraints as a deterministically ordered list. See Note [Deterministic FV] in GHC.Utils.FV.ghcReturns free variables of constraints as a deterministically ordered list. See Note [Deterministic FV] in GHC.Utils.FV.ghcReturns free variables of constraints as a composable FV computation. See Note [Deterministic FV] in  GHC.Utils.FV.ghcReturns free variables of constraints as a composable FV computation. See Note [Deterministic FV] in GHC.Utils.FV.ghcReturns free variables of a bag of constraints as a non-deterministic set. See Note [Deterministic FV] in  GHC.Utils.FV.ghcReturns free variables of a bag of constraints as a deterministically ordered list. See Note [Deterministic FV] in  GHC.Utils.FV.ghcReturns free variables of a bag of constraints as a deterministically ordered list. See Note [Deterministic FV] in GHC.Utils.FV.ghcReturns free variables of a bag of constraints as a composable FV computation. See Note [Deterministic FV] in  GHC.Utils.FV.ghcReturns free variables of a bag of constraints as a composable FV computation. See Note [Deterministic FV] in GHC.Utils.FV.ghcReturns free variables of WantedConstraints as a non-deterministic set. See Note [Deterministic FV] in  GHC.Utils.FV.ghcReturns free variables of WantedConstraints as a deterministically ordered list. See Note [Deterministic FV] in  GHC.Utils.FV.ghcReturns free variables of WantedConstraints as a composable FV computation. See Note [Deterministic FV] in  GHC.Utils.FV.ghcReturns free variables of Implication as a composable FV computation. See Note [Deterministic FV] in  GHC.Utils.FV.ghcA constraint is considered to be a custom type error, if it contains custom type errors anywhere in it. See Note [Custom type errors in constraints]ghc9Is this an user error message type, i.e. either the form  TypeError err or Unsatisfiable err?ghc3Does this constraint contain an user error message?(That is, the type is either of the form Unsatisfiable err%, or it contains a type of the form  TypeError msg5, either at the top level or nested inside the type.ghcIs this type an unsatisfiable constraint? If so, return the error message.ghcTrue if taking superclasses of givens, or of wanteds (to perhaps expose more equalities or functional dependencies) might help to solve this constraint. See Note [When superclasses help]ghcChecks whether a the given wanted constraints are solved, i.e. that there are no simple constraints left and all the implications are solved.ghc#Gather all the type variables from  that it would be unhelpful to default. For the moment, these are only ` metavariables participating in a nominal equality whose other side is not concrete; it's usually better to report those as errors instead of defaulting.†ghcReturns True of constraints that are definitely insoluble, as well as TypeError constraints. Can return L for Given constraints, unlike .&The function is tuned for application after constraint solving i.e. assuming canonicalisation has been done That's why it looks only for IrredCt; all insoluble constraints are put into CIrredCanÆghcDoes this hole represent an "out of scope" error? See Note [Insoluble holes]φghc)Get the equality relation relevant for a ІghcGet the role relevant for a ҆ghc$Extract the set of rewriters from a  See Note [Wanteds rewrite Wanteds] If the provided CtEvidence is not for a Wanted, just return an empty set.چghcSet the type of CtEvidence.-This function ensures that the invariants on  hold, by updating the evidence and the ctev_pred in sync with each other. See Note [CtEvidence invariants].ghc-Extract the flavour, role, and boxity from a ghc$Extract the flavour and role from a Ѕghc$Extract the flavour and role from a Ѕghc+Take a CtLoc and moves it to the kind levelÅghcTyCon of the familyghc Arguments, exactly saturating the familyن܅݅džƆڅԆφՆӆ͆Ά̆҆Іцֆޅم݆߅ņƆ܆ÆۆۅɆʆȆ؆چ׆߆ކˆ߄ڄۄބ܄Å…ЅхӅ҅Յԅׅʅ˅΅υ̅ͅąŅƅɅȅDžօ؅҄ӄׄلՄ؄Ԅք؅Ѕх҅ӅԅՅׅąŅɅȅDžƅ߅ʅ˅υ΅̅ͅޅօمڅۅ܅݅…ÅÆ†ĆƆņdž҄ӄل؄ׄքՄԄބ܄ڄۄ߄ۆ܆̆͆ΆφӆцԆՆ҆ֆ׆Іچ؆ن݆ކ߆ˆɆȆʆNoneo4Nones ghcHoleFit is the type we use for valid hole fits. It contains the element that was checked, the Id of that element as found by tcLookup, and the refinement level of the fit, which is the number of extra argument holes that this fit uses (e.g. if hfRefLvl is 2, the fit is for `Id _ _`).ghcA fit that is just displayed as is. Here so thatHoleFitPlugins can inject any fit they want.ghc,Documentation of this HoleFit, if available.ghc;What the refinement variables got matched with, if anythingghcThe wrapper for the match.ghc The number of holes in this fit.ghc$The type of the id, possibly zonked.ghcThe candidate that was checked.ghcThe elements id in the TcMghcHoleFitCandidates are passed to hole fit plugins and then checked whether they fit a given typed-hole.LJghcThe hole itself, if available.ȇghcThe nested implications of the hole with the innermost implication first.ɇghcAny relevant Cts to the holeˇʇć‡ÇŇƇLJȇɇŇƇɇȇLJ‡ÇćˇʇNonewghcSubtract two natural numbers.ghcCompute the exact logarithm of a natural number. The logarithm base is the second argument.ghcDivide two natural numbers.ghcCompute the exact root of a natural number. The second argument specifies which root we are computing.ghcCompute the n-th root of a natural number, rounded down to the closest natural number. The boolean indicates if the result is exact (i.e., True means no rounding was done, False means rounded down). The second argument specifies which root we are computing. ghcCompute the logarithm of a number in the given base, rounded down to the closest integer. The boolean indicates if we the result is exact (i.e., True means no rounding happened, False means we rounded down). The logarithm base is the second argument. @@@@@@@@@@None )*xNone ghcSee Note [Safe Haskell Overlapping Instances Implementation] in GHC.Tc.SolverghcReturns True iff there are no Given constraints that might, potentially, match the given class consraint. This is used when checking to see if a Given might overlap with an instance. See Note [Instance and Given overlap] in GHC.Tc.Solver.Dictghc+Is it (potentially) loopy to use the first ct1 to solve ct2?Necessary (but not sufficient) conditions for this function to return True:ct1 and ct2& both arise from superclass expansion,ct1 is a Given and ct2 is a Wanted.See Note [Solving superclass constraints] in GHC.Tc.TyCl.Instance, (sc2).ghc don't solve itghccbv, must be a CycleBreakerTvghc'type family application the cbv maps toghc(cbv,expansion) pairsNone (4&ghc)Represents the head of a match against a ^ or literal. Really similar to 6.ghcUndecidable semantic equality result. See Note [Undecidable Equality for PmAltCons]ghcLiterals (simple and overloaded ones) for pattern match checking.-See Note [Undecidable Equality for PmAltCons]ghc A data type that caches for the  of x the results of querying dsGetCompleteMatches* and then striking out all occurrences of K for which we already know x D K from these sets.For motivation, see Section 5.3 in Lower Your Guards. See also Note [Implementation of COMPLETE pragmas]ghcThe residual sets for all COMPLETE sets from pragmas that are visible when compiling this module. Querying that set with dsGetCompleteMatches requires DsM, so we initialise it with J until first needed in a DsM context.ghcThe residual set for the vanilla COMPLETE set from the data defn. Tracked separately from , because it might only be known much later (when we have enough type information to see the ? of the match), or not at all even. Until that happens, it is J.ghcSee .ghcInformation about an . Stores positive () facts, like  x ~ Just 42, and negative (5) facts, like "x is not (:)". Also caches the type (vi_ty), the  of a COMPLETE set ().+Subject to Note [The Pos/Neg invariant] in GHC.HsToCore.Pmc.Solver.ghcA cache of the associated COMPLETE sets. At any time a superset of possible constructors of each COMPLETE set. So, if it's not in here, we can't possibly match on it. Complementary to . We still need it to recognise completion of a COMPLETE set efficiently for large enums.ghc8Can this variable be E? Models (mutually contradicting) x ~ E and x D E constraints. E.g. * : Don't know; Neither x ~ E nor x D E. * : x ~ E * : x D EghcNegative info: A list of *s that it cannot match. Example, assuming 0 data T = Leaf Int | Branch T T | Node Int T then x D [Leaf, Node] means that x cannot match a Leaf or Node, and hence can only match Branch!. Is orthogonal to anything from , in the sense that  returns PossiblyOverlap for any pairing between  and .ghcPositive info:  apps it is (i.e. x ~ [Just y, PatSyn z]), all at the same time (i.e. conjunctive). We need a list because of nested pattern matches involving pattern synonym case x of { Just y -> case x of PatSyn z -> ... } However, no more than one RealDataCon in the list, otherwise contradiction because of generativity.ghcThe  in question. Important for adding new constraints relative to this  when we don't easily have the  available.ghcThe term oracle state. Stores  for encountered s. These entries are possibly shared when we figure out that two variables must be equal, thus represent the same set of values.!See Note [TmState invariants] in GHC.HsToCore.Pmc.Solver.ghcWhich  needs to be checked for inhabitants because of new negative constraints (e.g. x D E or x D K).ghcAn environment for looking up whether we already encountered semantically equivalent expressions that we want to represent by the same  representative.ghcFacts about term variables. Deterministic env, so that we generate deterministic error messages.ghcThe type oracle state. An  that we incrementally add local type constraints to, together with a sequence number that counts the number of times we extended it with new facts.ghcA disjunctive bag of "s, representing a refinement type.ghcA normalised refinement type D ("nabla"), comprised of an inert set of canonical (i.e. mutually compatible) term and type constraints that form the refinement type's predicate.ghc"Term oracle; things like x~NothingghcType oracle; things like a~Intghc+An initial nabla that is always satisfiableghc!Initial state of the term oracle.ghcLike lookupVarInfo ts x, but lookupVarInfo ts x = (y, vi)3 also looks through newtype constructors. We have x ~ N1 (... (Nk y)) such that the returned y doesn't have a positive newtype constructor constraint associated with it (yet). The  returned is that of y's representative.Careful, this means that idType x might be different to idType y", even modulo type normalisation!See also Note [Coverage checking Newtype matches] in GHC.HsToCore.Pmc.Solver.ghcWhen  can be decided. True  = Equal, False  = Disjoint.ghc/Undecidable equality for values represented by 1s. See Note [Undecidable Equality for PmAltCons] Just True ==> Surely equal Just False. ==> Surely different (non-overlapping, even!)Nothing" ==> Equality relation undecidableghc Type of a ghc/Undecidable equality for values represented by ^4s. See Note [Undecidable Equality for PmAltCons]. ^s aren't enforced to be generative, so two syntactically different ^s might match the exact same values. Without looking into and reasoning about the pattern synonym's definition, we can't decide if their sets of matched values is different. Just True ==> Surely equal Just False. ==> Surely different (non-overlapping, even!)Nothing" ==> Equality relation undecidableghcWhether there is a  in the  that compares  to the given  according to .ghc'We can't in general decide whether two ?s match the same set of values. In addition to the reasons in  and , a 2 might or might not represent the same value as a 1. See Note [Undecidable Equality for PmAltCons]. Just True ==> Surely equal Just False. ==> Surely different (non-overlapping, even!)Nothing" ==> Equality relation undecidable.Examples (omitting some constructor wrapping):/eqPmAltCon (LitInt 42) (LitInt 1) == Just False: Lit equality is decidable0eqPmAltCon (DataCon A) (DataCon B) == Just False": DataCon equality is decidable4eqPmAltCon (LitOverInt 42) (LitOverInt 1) == Nothing$: OverLit equality is undecidable-eqPmAltCon (PatSyn PA) (PatSyn PB) == Nothing#: PatSyn equality is undecidable-eqPmAltCon (DataCon I#) (LitInt 1) == Nothing: DataCon to Lit comparisons are undecidable without reasoning about the wrapped Int#5eqPmAltCon (LitOverInt 1) (LitOverInt 1) == Just True2: We assume reflexivity for overloaded literals/eqPmAltCon (PatSyn PA) (PatSyn PA) == Just True/: We assume reflexivity for Pattern Synonymsghc Type of a ghcIs a match on this constructor forcing the match variable? True of data constructors, literals and pattern synonyms (#17357), but not of newtypes. See Note [Coverage checking Newtype matches] in GHC.HsToCore.Pmc.Solver.ghcNot user-facing.ghcSyntactic equality.ghcSyntactic equality.ghcNot user-facing.ghcNot user-facing.None(9VghcUsed as tree payload post-checking. The redundancy info we elaborated.ghc;Used as tree payload pre-checking. The LYG guards to check.ghc#Pattern-match coverage check resultghc&A flag saying whether we ran into the maxPmCheckModels limit for the purpose of suggesting to crank it up in the warning message. Writer state.ghcThe set of uncovered values falling out at the bottom. (for -Wincomplete-patterns, but also important state for the algorithm)ghc,A hole for redundancy info and covered sets.ghcRedundancy sets, used to determine redundancy of RHSs and bang patterns (later digested into a CIRB).ghcIf any of the  is empty, the corresponding  pin-points a bang pattern in source that is redundant. See Note [Dead bang patterns].ghcThe  Diverging set; empty if no match can lead to divergence. If it wasn't empty, we have to turn redundancy warnings into inaccessibility warnings for any subclauses.ghcThe Covered= set; the set of values reaching a particular program point.ghc(A guard tree denoting a pattern binding.ghc%A guard tree denoting an -XEmptyCase.ghcA guard tree denoting GRHS&: A payload describing the grds and a / useful for printing out in warnings messages.ghcA guard tree denoting GRHSs : A bunch of % guards for local bindings from the GRHSss where clauses and the actual list of GRHS=. See Note [Long-distance information for HsLocalBinds] in GHC.HsToCore.Pmc.Desugar.ghcA guard tree denoting Match5: A payload describing the pats and a bunch of GRHS.ghcA guard tree denoting  MatchGroup.ghcA sequence of s.ghcMeans by which we identify a source construct for later pretty-printing in a warning message.   for the equation to show,  for the location.ghcA very simple language for pattern guards. Let bindings, bang patterns, and matching variables against flat constructor patterns. The LYG guard language.ghcPmCon x K dicts args corresponds to a K dicts args <- x guard. The args" are bound in this construct, the x0 is just a use. For the arguments' meaning see .ghcPmBang x corresponds to a  seq x True guard. If the extra  is present, the bang guard came from a source bang pattern, in which case we might want to report it as redundant. See Note [Dead bang patterns] in GHC.HsToCore.Pmc.Check.ghc PmLet x expr corresponds to a  let x = expr guard. This actually binds x.ghcFormat a LYG sequence (e.g. Matches of a  MatchGroup or GRHSs) as {  firstalt; ...;  lastalt }ghcShould not be user-facing.ghcFormat LYG guards as | True <- x, let x = 42, !z1NoneghcThe result of .ghcPretty-print the guts of an uncovered value vector abstraction, i.e., its components and refutable shapes associated to any mentioned variables. Example for )([Just p, q], [p :-> [3,4], q :-> [0,5]]): (Just p) q where p is not one of {3, 4} q is not one of {0, 5} When the set of refutable shapes contains more than 3 elements, the additional elements are indicated by "...".ghc5Output refutable shapes of a variable in the form of "var is not one of {2, Nothing, 3}. Will never print more than 3 refutable shapes, the tail is indicated by an ellipsis.ghcExtract and assigns pretty names to constraint variables with refutable shapes.ghc*Allocates a new, clean name for the given ! if it doesn't already have one.ghcPretty print a variable, but remember to prettify the names of the variables that refer to neg-literals. The ones that cannot be shown are printed as underscores.ghcExtract a list of s out of a sequence of cons cells, optionally terminated by a wildcard variable instead of []. Some examples:pmExprAsList (1:2:[]) == Just ( [1,2]), a regular, [].-terminated list. Should be pretty-printed as [1,2].pmExprAsList (1:2:x) == Just ( [1,2] x), a list prefix ending in a wildcard variable x (of list type). Should be pretty-printed as (1:2:_). pmExprAsList [] == Just ( [])None <ܷghc"`where'3 clause at the same depth as implicit layout block"ghc"`|'- at the same depth as implicit layout block")ghcErrors from the Cmm parserghcUnknown Cmm primitiveghc Unknown macroghcUnknown calling conventionghcUnrecognised safetyghcUnrecognised hintghc Lexical errorghcUnknown pragmaghcLexical error in pragmaghc$Numeric escape sequence out of rangeghc)Lexical error in string/character literalghc2Unexpected end-of-file in string/character literalghcUnterminated `{-'ghcUnterminated OPTIONS pragmaghcUnterminated quasiquotationghc End of inputghcUTF-8 decoding errorghcError at given characterghcNegative application pattern?ghc*The list of type arguments for the patternghcExtra information for the expression GHC is currently inspecting/parsing. It can be used to generate more informative parser diagnostics and hints.ghc9Did the parser likely fail due to an incomplete do block?ghcIf K8, this is an infix pattern with the bound operator nameghc Is the parsed pattern recursive?ghcExtra details about a parse error, which helps us in determining which should be the hints to suggest.ghc!Did we parse a "pattern" keyword?ghcIs PatternSynonyms enabled?ghc Is there an mdo in the last 100 characters?ghc Is there a 'do' in the last 100 characters?ghcAn "unknown" message from the parser. This type constructor allows arbitrary messages to be embedded. The typical use case would be GHC plugins willing to emit custom diagnostics.ghc&A group of parser messages emitted in 5. See Note [Messages from GHC.Parser.Header].ghcPsWarnBidirectionalFormatChars is a warning (controlled by the -Wwarn-bidirectional-format-characters flag) that occurs when unicode bi-directional format characters are found within in a fileThe  contains the exact position in the buffer the character occurred, and the string contains a description of the character.ghcPsWarnTab is a warning (controlled by the -Wwarn-tabs flag) that occurs when tabulations (tabs) are found within a file.Test case(s): parser should_fail"T12610 parsershould_compile"T9723b parsershould_compile"T9723a parsershould_compile#read043 parser should_fail$T16270 warningsshould_compileT9230ghcPsWarnTransitionalLayout is a warning (controlled by the -Walternative-layout-rule-transitional flag) that occurs when pipes ('|' ) or 'where'3 are at the same depth of an implicit layout block. Example(s):f :: IO () f | True = do let x = () y = () return () | True = return ()Test case(s): layout/layout006 layout/layout003 layout/layout001ghcUnrecognised pragma. First field is the actual pragma name which might be empty. Second field is the set of valid candidate pragmas.ghc Invalid Haddock comment positionghc,Multiple Haddock comment for the same entityghc;Found binding occurrence of "*" while StarIsType is enabledghcUsing "*" for Type without StarIsType enabledghcPre qualified import with WarnPrepositiveQualifiedModule enabledghc4LambdaCase syntax used without the extension enabledghc(A lambda requires at least one parameterghc5Underscores in literals without the extension enabledghc%Invalid character in primitive stringghc Missing blockghc Lexer errorghcSuffix occurrence of @ghc Parse errorsghcCmm lexer errorghc#Unsupported boxed sum in expressionghc Unsupported boxed sum in patternghc Unexpected qualified constructorghc Tuple section in pattern contextghc*Bang-pattern without BangPattterns enabledghc%Operator applied to too few argumentsghc Import: multiple occurrences of  qualifiedghcPost qualified import without ImportQualifiedPostghc#Explicit namespace keyword without ExplicitNamespacesghc1Expecting a type constructor but found a variableghc.Illegal export form allowed by PatternSynonymsghcMalformed entity stringghcDots used in record updateghcPrecedence out of rangeghc!Invalid use of record dot syntax .ghcOverloadedRecordUpdate is not enabled.ghcCan't use qualified fields when OverloadedRecordUpdate is enabled.ghc;Cannot parse data constructor in a data/newtype declarationghc;Cannot parse data constructor in a data/newtype declarationghcIllegal DataKinds quote mark in data/newtype constructor declarationghc$UNPACK applied to a data constructorghc7Unexpected kind application in data/newtype declarationghcNot a record constructorghc)Illegal unboxed string literal in patternghc3Illegal primitive floating point literal in patternghcDo-notation in patternghcIf-then-else syntax in patternghcLambda-case in patternghccase..of in patternghclet-syntax in patternghcLambda-syntax in patternghc"Arrow expression-syntax in patternghcArrow command-syntax in patternghc"Arrow command-syntax in expressionghcView-pattern in expressionghc&Type-application without space before @ghcLazy-pattern (~) without space after itghcBang-pattern (!) without space after itghc#Pragma not allowed in this positionghcQualified do block in commandghc.Invalid infix hole, expected an infix operatorghc0Unexpected semi-colons in conditional expressionghc-Unexpected semi-colons in conditional commandghc @-operator in a pattern positionghc1Unexpected lambda command in function applicationghc/Unexpected case command in function applicationghc2Unexpected case(s) command in function applicationghc-Unexpected if command in function applicationghc.Unexpected let command in function applicationghc-Unexpected do command in function applicationghc+Unexpected do block in function applicationghc,Unexpected mdo block in function applicationghc4Unexpected lambda expression in function applicationghc2Unexpected case expression in function applicationghc5Unexpected case(s) expression in function applicationghc1Unexpected let expression in function applicationghc0Unexpected if expression in function applicationghc2Unexpected proc expression in function applicationghc+Malformed head of type or class declarationghcIllegal 'where' keyword in data declarationghcIllegal datatype contextghcParse error on inputghc!Malformed ... declaration for ...ghcNot a data constructorghc1Record syntax used in pattern synonym declarationghcEmpty 'where'& clause in pattern-synonym declarationghcInvalid binding name in 'where'& clause of pattern-synonym declarationghcMultiple bindings in 'where'& clause of pattern-synonym declarationghc"Declaration splice not a top-levelghc(Inferred type variables not allowed hereghc,Multiple names in standalone kind signaturesghcIllegal import bundle formghcIllegal role nameghcInvalid type signatureghcUnexpected type in declarationghcExpected a hyphenghcFound a space in a SCCghcFound two single quotesghcInvalid package nameghcInvalid rule activation markerghc1Linear function found but LinearTypes not enabledghc8Multi-way if-expression found but MultiWayIf not enabledghc=Explicit forall found but no extension allowing it is enabledghc.Found qualified-do without QualifiedDo enabledghcCmm parser errorghc!Illegal traditional record syntax+TODO: distinguish errors without using SDocghcParse error in command+TODO: distinguish errors without using SDocghcParse error in patternghcParse error in right operator section pattern TODO: embed the proper operator, if possibleghcIllegal linear arrow or multiplicity annotation in GADT record syntaxghcPsErrUnsupportedOptionsPragma is an error that occurs when an unknown OPTIONS_GHC pragma is supplied is found.+Example(s): {-# OPTIONS_GHC foo #-} Test case(s):tests safeHaskellflags/SafeFlags28 tests safeHaskellflags/SafeFlags19 tests safeHaskellflags/SafeFlags29 testsparser!should_fail/T19923c testsparser!should_fail/T19923b testsparser%should_fail/readFail044 testsdriverT2499ghc Builds a & with the information provided by the .ghcThe pattern argumentsghc Is the parsed pattern recursive?ghc4Number of other occurrences other than the first oneghcconditional exprghc"then" semi-colon?ghc "then" exprghc"else" semi-colon?ghc "else" exprghcconditional exprghc"then" semi-colon?ghc "then" exprghc"else" semi-colon?ghc "else" exprghc Is TH on?ghcis Unicode forall?ghcthe problematic characterghcthe character it looks likeghc,the name of the character that it looks likeNoneghcThe PRType (ty, tas) is short for (piResultTys ty (reverse tas))ghc Compute the  of an   9 in a pure fashion.ghc Compute the  of an   9 in a pure fashion.None lghcSource StatisticsNone5 ghc The type constructor for queriesghc,Should EpAnnotations be removed from output.ghc+Should source spans be removed from output.ghc*Show the full AST as the compiler sees it.ghcShow a GHC syntax tree. This parameterised because it is also used for comparing ASTs in ppr roundtripping tests, where the SrcSpan's are blanked out, to avoid comparing locations, only structureghc.Extend a generic query by a type-specific caseghc/Type extension of queries for type constructorsghc/Type extension of queries for type constructorsghcFlexible type extensionghcFlexible type extension  NoneghcRename a module from one name to another. The identity renaming means that the module should be brought into scope.ghcAn include of another unitghc Is this a dependency signature include? If so, we don't compile this include when we instantiate this unit (as there should not be any modules brought into scope.)ghcA declaration in a package, e.g. a module or signature definition, or an include.ghc Top level unit declaration in a Backpack file.  Noneghc7True if it's a bad idea to float bindings into this RHS1NoneghcUnfolding optionsjghc0The size of a candidate expression for unfoldingjghc?Size to subtract if result is scrutinised by a case expressionjghc2Arguments cased herein, and discount for each suchjghc Size foundjghc9Only report inlining decisions for names with this prefixjghcPenalize depth with 1/xjghcDon't consider depth up to xjghc!Force inlining in many more casesjghcDiscount for dictionariesjghc,Discount for lambdas that are used (applied)jghc2Threshold above which unfoldings are not *inlined*jghc2Threshold above which unfoldings are not *created*ghc)Finds a nominal size of a string literal.ghcThe size of a function callghc"The size of a jump to a join pointghcnumber of value argsghc"number of value args that are voidghcnumber of value argsghc"number of value args that are void*jjjjjYYjjjjjjjjjjjjjjjjjjjjjjjjjj*YYjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjNonevghcUsed 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.vghc!See Note [Implicit include paths]vghc&Don't try to build dynamic objects toovghc*Will still try to generate dynamic objectsvghc5Currently generating dynamic objects (in the backend)wghc+Flags for manipulating packages visibility.wghc-package,  -package-idwghc  -hide-packagewghc%Flags for manipulating package trust.wghc -trustwghc  -distrustwghc6Flags for manipulating the set of non-broken packages.wghc -ignore-packagewghcRepresents 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)]wghc Bring module m into scope under name n.wghc%Bring all exposed modules into scope?wghcWe accept flags which make packages visible, but how they select the package varies; this data type reflects what selection criterion is used.wghc-package, by  PackageNamewghc -package-id, by  wghc-What to do in the link step, if there is one.wghcDon't link at allwghcLink object code into a binarywghcUse the in-memory dynamic linker (works for both bytecode and object code).wghcLink objects into a dynamic lib (DLL on Windows, DSO on ELF platforms)wghcLink objects into a static libwghc(Link objects into a merged "GHCi object"wghcThe w 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 GHC.Unit.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.wghc--make , GHCi, etc.wghc  ghc -c Foo.hswghcghc -M, see GHC.Unit.Finder for why we need thiswghcThe type for the -jN argument, specifying that -j on its own represents using the number of machine processors.wghcUse this many processors (-j n flag).wghc5Use parallelism with as many processors as possible (-j flag without an argument).wghcUse the specific semaphore  sem to control parallelism (-jsem sem flag).wghc"Contains not only a collection of s but also a plethora of information relating to the compilation of a single file or GHC sessionwghc/Temporary: CFG Edge weights for fast iterationswghc9Unique supply configuration for testing build determinismwghc*Limit the maximum number of errors to showwghc/Reverse the order of error messages in GHC/GHCiwghcOnly inline memset if it generates no more than this many pseudo (roughly: Cmm) instructions.wghcOnly inline memcpy if it generates no more than this many pseudo (roughly: Cmm) instructions.wghc0Max size, in bytes, of inline array allocations.wghcRun-time assembler informationwghcRun-time C compiler informationwghc8Run-time linker information (what options we need, etc.)wghcEnable FMA instructions.wghc(Machine dependent flags (-m stuff)wghc-what kind of {-# SCC #-} to add automaticallywghc8GHCi scripts specified by -ghci-script, in reverse orderwghcUnfolding control See Note [Discounts and thresholds] in GHC.Core.UnfoldwghcSafe Haskell modewghcFilepath to the package environment file (if overriding default)wghcThe -trust and  -distrust flags. In *reverse* order that they're specified on the command line.wghcThe -plugin-package-id flags from command line. In *reverse* order that they're specified on the command line.wghcThe -package and  -hide-package flags from the command-line. In *reverse* order that they're specified on the command line.wghcThe -ignore-package flags from the command line. In *reverse* order that they're specified on the command line.wghcThe  -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  getUnitDbRefs.xghc-External plugins loaded from shared librariesxghcthe -ffrontend-opt flags given on the command line, in *reverse* order that they're specified on the command line.xghcthe -fplugin flags given on the command line, in *reverse* order that they're specified on the command line.xghcPath to store the .mix filesxghc Override the x set by  or 'ghc.GHCi.UI.runStmt' . Set by -ddump-file-prefixxghc1This defaults to 'non-module'. It can be set by  or 'ghc.GHCi.UI.runStmt'% based on where its output is going.xghcIndicate if we are now generating dynamic output because of -dynamic-too. This predicate is used to query the appropriate fields (outputFile/dynOutputFile, ways, etc.)xghc&Target way flags from the command linexghc8What the package is called, use with multiple home unitsxghcModule instantiationsxghcId of the unit to instantiatexghcTarget home unit-idxghcNumber of layers of superclass expansion for quantified constraints Should be < givensFuel See Note [Expanding Recursive Superclasses and ExpansionFuel]xghcNumber of layers of superclass expansion for wanteds Should be < givensFuel See Note [Expanding Recursive Superclasses and ExpansionFuel]xghcNumber of layers of superclass expansion for givens Should be < solverIterations See Note [Expanding Recursive Superclasses and ExpansionFuel]xghcNumber of iterations in the constraints solver Typically only 1 is neededxghcTypechecker maximum stack depthxghcSimplification history sizexghc4Align Cmm functions at this boundary or use default.xghcLambda lift even when this turns a known call into an unknown call.xghcMaximum number of arguments after lambda lifting a non-recursive function.xghcMaximum number of arguments after lambda lifting a recursive function.xghc%Arg count for lambda floating See xghcThreshold for LiberateCasexghcBinary literals (e.g. strings) whose size is above this threshold will be dumped in a binary file by the assembler code generator. 0 and Nothing disables this feature. See .xghcMax number of specialisations for recursive types Not optional; otherwise ForceSpecConstr can diverge.xghc2Max number of specialisations for any one functionxghcThreshold for SpecConstrxghcWhether DmdAnal should optimistically put an Unboxed demand on returned products with at most this number of fieldsxghcMultiplier for simplifier ticksxghcSoft limit on the number of models the pattern match checker checks a pattern against. A safe guard against exponential blow-up.xghcMaximum number of unmatched patterns to show in non-exhaustiveness warningsxghcMaximum level of refinement for refinement hole fits in typed hole error messagesxghcMaximum number of refinement hole fits to show in typed hole error messagesxghcMaximum number of hole fits to show in typed hole error messagesxghcMaximum number of bindings from the type envt to show in type error messagesxghcThe heap size to set.xghcEnable RTS timing statistics?xghcThe number of modules to compile in parallel If unspecified, compile with a single job.xghcAdditional demand analysisxghcMax simplifier iterationsxghcNumber of simplifier phasesxghc%How much debug information to producexghc,Verbosity level: see Note [Verbosity levels]xghcLLVM optimisation levelxghcThe backend to use (if any).7Whenever you change the backend, also make sure to set x to something sensible. NoBackend 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, using the default backend for the platform. See Note [-fno-code mode].xghcUsed by  to partially initialize a new w valuexghc The normal w. Note that they are not suitable for use in this form and must be fully initialized by  first.xghcAre we building with -fPIE or -fPIC enabled?xghcAppend 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.xghcAppend 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"xghcThese includes are not considered while fingerprinting the flags for iface | See Note [Implicit include paths]xghcConcatenate and flatten the list of global and quoted includes returning just a flat list of paths.xghcTest whether a  is setxghcSet a xghcUnset a xghcTest whether a  is set Note that x (i.e., dynamic objects built with `-dynamic-too`) always implicitly enables Opt_PIC, Opt_ExternalDynamicRefs, and disables Opt_SplitSections.xghcSet a xghcUnset a xghcTest whether a  is setxghcSet a xghcUnset a xghcTest whether a  is set as fatalxghcMark a  as fatal (do not set the flag)xghcMark a  as not fatalxghc%Enable all custom warning categories.xghc&Disable all custom warning categories.xghcMark all custom warning categories as fatal (do not set the flags).xghc0Mark all custom warning categories as non-fatal.xghc Set a custom :xghcUnset a custom :xghcMark a custom : as fatal (do not set the flag)yghcMark a custom : as not fatalyghc0Are there any custom warning categories enabled?yghcTest whether a  is setyghcSet a yghcUnset a yghcSet or unset a 7, unless it has been explicitly set or unset before.ghcThese 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.yghcThe language extensions implied by the various language variants. When updating this be sure to update the flag documentation in docs users_guideexts.yghcGet target profileyghcThe directory for this version of ghc in the user's app directory The appdir used to be in ~/.ghc but to respect the XDG specification we want to move it under $XDG_DATA_HOME/ However, old tooling (like cabal) might still write package environments to the old directory, so we prefer that if a subdirectory of ~/.ghc with the correct target and GHC version suffix exists. i.e. if ~.ghc$UNIQUE_SUBDIR exists we use that otherwise we use $XDG_DATA_HOME/$UNIQUE_SUBDIRUNIQUE_SUBDIR is typically a combination of the target platform and GHC versionyghc&Initialize the pretty-printing optionsyghcInitialize the pretty-printing options using the default user stylexxxxxxxxxxyxyyyxxxxxxxyxyyxxyyyxxyyxyyyyyyyyxyxxxxxxxxxxxxyyyyyyywwwwwwwwwwwwwwwwwxxwwwwxxwwxwwxxwwxxwxxxxxxxxxxwwxwwxxwwxxwxxxxwwwxwxxxxxxxxxxxwxxwwwwxxxxxxxxxwwwwxxxxxxwwxxxxwwwwxwxxxwwwwxxxxxwwwwxxxxwwwxxxxxxxwxxxxwxxxwwwwwwxxwwwxvvvvvvvwwwwwwwwwwwwwwwwwwvvvvvwwwwwwwwwwwwwwwwwwwvwwwwwwwwwwwvvvvvvvvvvwwwvtttttttttttttwwwxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyvvvvxxwwwwxwxxwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwywwwwvvvvvvwwwwxwwwwwwwxwwwwwwwwwwxwwwwwvwwwwvvvvvvvxyxxxxyyvyyyyyyyyyyyywwwwwwwwwwwwwwwwvvvvvxxxxyyyNone 'hyghcSubstitution on module variables, mapping module names to module identifiers.yghc!The result of performing a lookupyghc-Found the module uniquely, nothing else to doyghc,Multiple modules with the same name in scopeyghcNo 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 hiddenyghcNo modules found, but there were some unusable ones with an exact name matchyghc6Nothing found, here are some suggested different namesghcFor each unit, a mapping from uid -> i indicates that this unit was brought into GHC by the ith  -package-db flag on the command line. We use this mapping to make sure we prefer units 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.yghc"The reason why a unit is unusable.yghcWe ignored it explicitly using -ignore-package.yghcThis unit transitively depends on a unit that was never present in any of the provided databases.yghcThis unit transitively depends on a unit involved in a cycle. Note that the list of   reports the direct dependencies of this unit that (transitively) depended on the cycle, and not the actual cycle itself (which we report separately at high verbosity.)yghc;This unit transitively depends on a unit which was ignored.yghcThis unit transitively depends on a unit which was shadowed by an ABI-incompatible unit.yghc Unit databaseyghc0Indicate if we can instantiate units on-the-fly.This should only be true when we are type-checking an indefinite unit. See Note [About units] in GHC.Unit.yghcA map saying, for each requirement, what interfaces must be merged together when we use them. For example, if our dependencies are p[A=] and q[A=,B=r[C=]:B]*, then the interfaces to merge for A are  p[A=]:A, q[A=,B=r[C=]:B]:A and  r[C=]:C.?There's an entry in this map for each hole in our home library.yghc A map, like y$, but controlling plugin visibility.yghcThis 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.yghcUnits which we explicitly depend on (from a command line flag). We'll use this to generate version macros and the unused packages warning. The original flag which was used to bring the unit into scope is recorded for the -Wunused-packages warning.yghcThe units we're going to link in eagerly. This list should be in reverse dependency order; that is, a unit is always mentioned before the units it depends on.yghcA mapping from wired in unit ids to unit keys from the database.yghc7A mapping from database unit keys to wired in unit ids.yghc A mapping of @ to  . If several units have the same package name (e.g. different instantiations), then we return one of them... This is used when users refer to packages in Backpack includes. And also to resolve package qualifiers with the PackageImports extension.yghcThe 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]yghc A mapping of   to @>. This list is adjusted so that only valid units are here. @5 reflects what was stored *on disk*, except for the trusted flag, which is adjusted at runtime. (In particular, some units in this map may have the exposed flag be I.)ghc Map from  & to a set of module providers (i.e. a   and its y).NB: the set is in fact a 'Map Module ModuleOrigin', probably to keep only one origin for a given  ghcUnit configurationghcPlugins exposed unitsghc Trusted unitsghc Ignored unitsghc Exposed unitsghcUnit databases flagsghcCache of databases to use, in the order they were specified on the command line (later databases shadow earlier ones). If Nothing, databases will be found using .ghc!Hide all plugins units by defaultghcHide all units by defaultghcDistrust all units by defaultghc,Units to link automatically (e.g. base, rts)ghc$User DB name (e.g. "package.conf.d")ghc%Main GHC dir: contains settings, etc.ghcPath to global DBghcName of the compiler (e.g. GHC, GHCJS). Used to fetch environment variables such as "GHC[JS]_PACKAGE_PATH".ghcAllow virtual units ^ Do we allow the use of virtual units instantiated on-the-fly (see Note [About units] in GHC.Unit). This should only be true when we are type-checking an indefinite unit (not producing any code).ghc Ways to useghcPlatform arch and OSghc< records the various aspects of visibility of a particular  .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.)ghcThe signatures which are contributed to the requirements context from this unit ID.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 fooghc-Any custom renamings that should bring extra  s into scope.ghc map from   to a .yghcA unusable unit module originyghcIs the "module" a reexport?yghcReasonyghc Unusable unityghcGiven 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!yghcModule 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.)yghc3Module is unavailable because the unit is unusable.yghc7Module is public, and could have come from some places.yghcDid the module export come from a package flag? (ToDo: track more information.yghc]:B maps to  p[A=q():A]:B with A=q():A; similarly,  maps to q():A.zghcSubstitutes holes in a  , suitable for renaming when an include occurs; see Note [Representation of module/name variables].p[A=] maps to p[A=] with A=.zghcLike z, but requires only ClosureUnitInfoMap so it can be used by GHC.Unit.State.zghc(Like 'renameHoleUnit, but requires only ClosureUnitInfoMap so it can be used by GHC.Unit.State.zghc Injects an  to   (see also z.zghc9Print unit-ids with UnitInfo found in the given UnitStatezghc8Add package dependencies on the wired-in packages we useghc Home unit idghcHome unit instance ofghcHome unit instantiations@@@@@@@@@@@@@zzyyzzyzzyzzzzyzyyyyzyzzzzzzzyyzzzzzyyyyyzz@@@@@@@@yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzyzzzzzzyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzzyzzzzzzyzzzzzzzzNone&zghcz summarises what was imported from where, irrespective of whether the imported things are actually used or not. It is used: when processing the export list,4when constructing usage info for the interface file,to identify the list of directly imported modules for initialisation purposes and for optimised overlap checking of family instances,/when figuring out what things are really unusedzghcFamily instance modules below us in the import tree (and maybe including us for imported modules)zghcOrphan modules below us in the import tree (and maybe including us for imported modules)zghc Signature modules below this onezghcDomain is all modules which have hs-boot files, and whether we should import the boot version of interface file. Only used in one-shot mode to populate eps_is_boot.zghcThis records the packages the current module needs to trust for Safe Haskell compilation to succeed. A package is required to be trusted if we are dependent on a trustworthy module in that package. See Note [Tracking Trust Transitively] in GHC.Rename.NameszghcDo we require that our own package is trusted? This is to handle efficiently the case where a Safe module imports a Trustworthy module that resides in the same package as it. See Note [Trust Own Package] in GHC.Rename.Nameszghc5Packages directly needed by the module being compiledzghcHome-package modules directly imported by the module being compiled.zghc'Domain is all directly-imported modules-See the documentation on ImportedModsVal in GHC.Unit.Module.Imported for the meaning of the fields.We need a full ModuleEnv rather than a ModuleNameEnv here, because we might be importing modules of the same name from different packages. (currently not the case, but might be in the future).zghcRecords modules for which changes may force recompilation of this module See wiki: https://gitlab.haskell.org/ghc/ghc/wikis/commentary/compiler/recompilation-avoidanceThis differs from Dependencies. A module X may be in the dep_mods of this module (via an import chain) but if we don't use anything from X it won't appear in our UsagezghcModule from another packagezghcModule from the current packagezghcA file upon which the module depends, e.g. a CPP #include, or using TH's addDependentFilezghc-A requirement which was merged into this one.zghc)Was this module imported as a safe importzghc:Cached module ABI fingerprint (corresponds to mi_mod_hash)zghc#External package module depended onzghcFingerprint for the export list of this module, if we directly imported it (and hence we depend on its export list)zghcEntities we depend on, sorted by occurrence name and fingerprinted. NB: usages are for parent names only, e.g. type constructors but not the associated data constructors.zghc)UnitId of the HomeUnit the module is fromzghcName of the modulezghcAn optional string which is used in recompilation messages if file in question has changed.zghc of the file contents.zghcExternal file dependency. From a CPP #include or TH addDependentFile. Should be absolute.zghcThe *interface* hash of the module, not the ABI hash. This changes when anything about the interface (and hence the module) has changed.zghcDependency information about ALL modules and packages below this one in the import hierarchy. This is the serialisable version of z.(Invariant: the dependencies of a module M never includes M.0Invariant: none of the lists contain duplicates.Invariant: lists are ordered canonically (e.g. using stableModuleCmp)1See Note [Transitive Information in Dependencies]zghcTransitive closure of depended upon modules which contain family instances (whether home or external). This is used by checkFamInstConsistency%. This does NOT include us, unlike z9. See Note [The type family instance consistency story].zghcTransitive closure of orphan modules (whether home or external pkg).(Possible optimization: don't include family instance orphans as they are anyway included in z. But then be careful about code which relies on dep_orphs having the complete list!) This does NOT include us, unlike z.zghcAll modules which have boot files below this one, and whether we should use the boot file or not. This information is only used to populate the eps_is_boot field. See Note [Structure of dep_boot_mods]zghc4Transitive closure of hsig files in the home packagezghcAll units needed for pluginszghcAll packages directly imported by this module I.e. packages to which this module's direct imports belong. Does not include other home units when using multiple home units. Modules from these units will go in zzghcAll home-package modules which are directly imported by this one. This may include modules from other units when using multiple home unitszghcExtract information from the rename and typecheck phases to produce a dependencies information for the module being compiled.0The fourth argument is a list of plugin modules.zghcUpdate module dependencies containing orphans (used by Backpack)zghcUpdate module dependencies containing family instances (used by Backpack)zghcPretty-print unit dependencies*zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz*zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzNonew @@@@@@@@@@@@@ zzyyzzyzzyzzzzyzyyyyzyzzzzzzzyyzzzzzyyyyyz z @@@@@@@@yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy     None '12Շghc)Does this module define family instances?ևghc summarises everything we know about a compiled module. The  is the stuff *before* linking, and can be written out to an interface file. The 'ModDetails is after linking and can be completely recovered from just the .4When we read an interface file, we also construct a . from it, except that we explicitly make the  and a few other fields empty; as when reading we consolidate the declarations etc. into a number of indexed maps and environments in the ExternalPackageState.See Note [Strictness in ModIface] to learn about why some fields are strict and others are not.ڇghc8Hash of the .hs source, used for recompilation checking.ۇghcAdditional optional fields, where the Map key represents the field name, resulting in a (size, serialized data) pair. Because the data is intended to be serialized through the internal 3 class (increasing compatibility with types using  and  FastString,, such as HIE), this format is chosen over  ByteStrings.܇ghcEither () or % for a fully instantiated interface.݇ghc:Docstrings and related data for use by haddock, the ghci :doc command, and other tools.Just _  = the module was built with -haddock.߇ghcDo we require the package this module resides in be trusted to trust this module? This is used for the situation where a module is Safe (so doesn't require the package be trusted itself) but imports some trustworthy modules from its own package (which does require its own package be trusted). See Note [Trust Own Package] in GHC.Rename.Namesghc/Safe Haskell Trust information for this module.ghc:True if this program uses Hpc at any point in the program.ghc Sorted rulesghcSorted family instancesghcSorted class instanceghc6Binds all the things defined at the top level in the original source code for this module. which is NOT the same as mi_exports, nor mi_decls (which may contains declarations for things not actually defined by the user). Used for GHCi and for inspecting the contents of modules via the GHC API only.(We need the source file to figure out the top-level environment, if we didn't compile this module from source then this field contains Nothing).1Strictly speaking this field should live in the  HomeModInfo", but that leads to more plumbing.ghcExtra variable definitions which are **NOT** exposed but when combined with mi_decls allows us to restart code generation. See Note [Interface Files with Core Definitions] and Note [Interface File with Core: Sharing RHSs]ghcType, class and variable declarations The hash of an Id changes if its fixity or deprecations change (as well as its type of course) Ditto data constructors, class operations, except that the hash of the parent class/tycon changesghcAnnotations NOT STRICT! we read this field lazily from the interface fileghcWarnings NOT STRICT! we read this field lazily from the interface fileghcFixities NOT STRICT! we read this field lazily from the interface fileghcModule required TH splices when it was compiled. This disables recompilation avoidance (see #481).ghcExports Kept sorted by (mod,occ), to make version comparisons easier Records the modules that are the declaration points for things exported by this module, and the  s of those thingsghcUsages; kept sorted so that it's easy to decide whether to write a new iface file (changing usages doesn't affect the hash of this module) NOT STRICT! we read this field lazily from the interface file It is *only* consulted by the recompilation checkerghcThe dependencies of the module. This is consulted for directly-imported modules, but not for anything else (hence lazy)ghcBoot? Signature?ghcAre we a sig of another mod?ghcName of the module we are forghcSelects a IfaceDecl representation. For fully instantiated interfaces we also maintain a fingerprint, which is used for recompilation checks.ghc9Partial interface built based on output of core pipeline.ghcExtends a PartialModIface with information which is either: * Computed after codegen * Or computed just before writing the iface to disk. (Hashes) In order to fully instantiate it.ghcCached lookup for . The Nothing in  means that the thing isn't in decls. It's useful to know that when seeing if we are up to date wrt. the old interface. The  + is the parent of the name, if it has one.ghcCached lookup for ghcCached lookup for  for export deprecationsghcCached lookup for  for declaration deprecationsghc:Hash for orphan rules, class and family instances combinedghcHash of export listghcWhether this module has family instances. See Note [The type family instance consistency story].ghcWhether this module has orphansghcHash of pluginsghcHash of hpc flagsghcHash of optimisation flagsghcHash of the important flags used when compiling the module, excluding optimisation flagsghcHash of the ABI onlyghcHash of the whole interfaceghcOld-style accessor for whether or not the ModIface came from an hs-boot file.ghc-Lookups up a (possibly cached) fixity from a . If one cannot be found,  is returned instead.ghcThe semantic module for this interface; e.g., if it's a interface for a signature, if  is p[A= A]:A,  will be  A.ghc:The "precise" free holes, e.g., the signatures that this  depends on.ghcGiven a set of free holes, and a unit identifier, rename the free holes according to the instantiation of the unit identifier. For example, if we have A and B free, and our unit identity is p[A= C ,B=impl:B]%, the renamed free holes are just C.ghcConstructs cache for the  field of a <ׇ؇هއ݇ۇ܇ڇ߇Շև<؇ه߇އ݇܇ۇڇׇևՇNoneghc1Locations and information the finder cares about.Should be taken from DynFlags via initFinderOpts.ghcIf we encounter unknown modules, should we suggest modules that have a similar name.ghcDon't check that an imported interface file actually exists if it can only be at one location. The interface will be reported as  even if the file doesn't exist, so this is only useful in specific cases (e.g. to generate dependencies with `ghc -M`)ghcWhen looking up a home module:L-: search interface files (e.g. in '-c' mode)I-: search source files (e.g. in '--make' mode)ghc9Where are we allowed to look for Modules and Source filesghc/The result of searching for an imported module.NB: FindResult manages both user source-import lookups (which can result in  ) as well as direct imports for interfaces (which always result in ).ghcThe module was foundghc The requested unit was not foundghc"_Error_: both in multiple packagesghc Not foundghcPossible mis-spelled modulesghc,Module is in these units, but it is unusableghc5Module is in these units, but the *unit* is hiddenghc7Module is in these units, but the *module* is hiddenghcJust p => module is in this unit's manifest, but couldn't find the .hi fileghcPlaces where I lookedghcThe  maps modules to the result of searching for that module. It records the results of searching for modules along the search path. On :load., we flush the entire contents of this cache.((None{ghc"A module name: search for the fileghcA filename: preprocess & parse it to find the module name. If specified, the Phase indicates how to compile this file (which phase to start from). Nothing indicates the starting phase should be determined from the suffix of the filename.ghcA compilation target.A target may be supplied with the actual text of the module. If so, use this instead of the file contents (this is for use in an IDE where the file hasn't been saved by the user yet).7These fields are strict because Targets are long lived.ghcOptional in-memory buffer containing the source code GHC should use for this target instead of reading it from disk.Since GHC version 8.10 modules which require preprocessors such as Literate Haskell or CPP to run are also supported.If a corresponding source file does not exist on disk this will result in a  SourceError exception if targetId = TargetModule _! is used. However together with targetId = TargetFile _/ GHC will not complain about the file missing.ghc%id of the unit this target is part ofghcobject code allowed?ghcmodule or filename » »None 9zghcReasons why we need ticks,ghc For profilingghcFor Haskell Program Coverageghc%For ByteCode interpreter break pointsghcFor source notesghcWhether the number of times functions are entered should be counted.ghcWhere to insert ticksghcfor Hpcghcfor GHCighcfor -prof-auto-allghcfor -prof-auto-topghcfor -prof-auto-exportedghcfor stack tracingghcLabel for the tick counterghcIdentifiers being boundghcPath to the declarationghcTick source spanghcConfiguration for compilation pass to add tick for instrumentation to binding sites.ghc)Whether to count the entries to functionsRequires extra synchronization which can vastly degrade performance.ghc-What kind of {-# SCC #-} to add automaticallyghc"What purposes do we need ticks forghc1Decide whether to add a tick to a binding or not.ghcStrip CoreTicks from an HsExprghcA let body is treated differently from addTickLHsExprEvalInner above with TickForBreakPoints, because for breakpoints we always want to tick the body, even if it is not a redex. See test break012. This gives the user the opportunity to inspect the values of the let-bound variables.ghcTickishs that only make sense when their source code location refers to the current file. This might not always be true due to LINE pragmas in the code - which would confuse at least HPC.ghc:Get the next HPC cost centre index for a given centre nameghclocation of the current moduleghcExported Ids. When we call addTicksToBinds, isExportedId doesn't work yet (the desugarer hasn't set it), so we have to work from this set.ghc Type constructors in this moduleghc top level?ghc exported?ghcsimple pat bind?ghcINLINE pragma?None )*<zghc Pass to a  DriverMessage the information whether or not the '-fbuilding-cabal-package' flag is set.zghcWhether to show files we tried to look for or not when printing loader errors(zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz(zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzNone)*1<ghc7Reason why a type cannot be marshalled through the FFI.ghcThe phase in which an exception was encountered when dealing with a TH spliceghcLabel for a TH declarationghcThe reason a TH splice could not be converted to a Haskell expressionƈghcSourceΈghc3Identifies the TH splice attempting to be convertedֈghcSpliceThrewException is an error that occurs when running a Template Haskell splice throws an exception. Example(s):Test cases: annotations should_fail!annfail12 perfcompiler0MultiLayerModulesTH_Make perfcompilerMultiLayerModulesTH_OneShot th/T10796b th/T19470 th/T19709d th/T5358 th/T5976 th/T7276a th/T8987 th/TH_exn1 th/TH_exn2 th/TH_runIO׈ghcRunSpliceFailure is an error indicating that a Template Haskell splice failed to be converted into a valid expression. Example(s):Test cases: th/T10828a th/T10828b th/T12478_4 th/T15270A th/T15270B th/T16895a th/T16895b th/T16895c th/T16895d th/T16895e th/T18740d th/T2597b th/T2674 th/T3395 th/T7484 th/T7667a th/TH_implicitParamsErr1 th/TH_implicitParamsErr2 th/TH_implicitParamsErr3 th/TH_invalid_add_top_declوghcSplicePolymorphicLocalVar is the error that occurs when the expression inside typed Template Haskell brackets is a polymorphic local variable. a) -> [|| y ||]Test cases: quotes/T10384ڈghcTypedTHWithPolyType is an error that signifies the illegal use of a polytype in a typed Template Haskell expression.Example(s): bad :: (forall a. a -> a) -> () bad = $$( [|| _ -> () ||] )Test cases: th/T11452܈ghcInvalidTopDecl is a Template Haskell error occurring when one of the Decs passed to  addTopDecls is not a function, value, annotation, or foreign import declaration. Example(s): Test cases:݈ghcUnexpectedDeclarationSplice is an error that occurs when a Template Haskell splice appears inside top-level declarations added with  addTopDecls.Example(s): noneTest cases: noneghcCannotReifyInstance is a Template Haskell error for when an instance being reified via reifyInstances6 is not a class constraint or type family application. Example(s): Test cases:ghcCannotReifyOutOfScopeThing is a Template Haskell error indicating that the given name is not in scope and therefore cannot be reified. Example(s):Test cases: th/T16976fghcCannotReifyThingNotInTypeEnv is a Template Haskell error occurring when the given name is not in the type environment and therefore cannot be reified. Example(s): Test cases:ghcNoRolesAssociatedWithName is a Template Haskell error for when the user tries to reify the roles of a given name but it is not something that has roles associated with it. Example(s): Test cases:ghcCannotRepresentThing is a Template Haskell error indicating that a type cannot be reified because it does not have a representation in Template Haskell. Example(s): Test cases:ghcNonExactName is a Template Haskell error that occurs when the user attempts to define a binder with a + that is not an exact . Example(s): Test cases:ghcQuotedNameWrongStage is an error that can happen when a (non-top-level) Name is used at a different Template Haskell stage than the stage at which it is bound.Test cases: T16976zghcAn error involving Template Haskell quotes or splices, e.g. nested quotation brackets or the use of an untyped bracket inside a typed splice.ghcIllegalTHQuotes is an error that occurs when a Template Haskell quote is used without the TemplateHaskell extension enabled.Test case: T18251eghcIllegalTHSplice is an error that occurs when a Template Haskell splice occurs without having enabled the TemplateHaskell extension.Test cases: bkpfail01, bkpfail05, bkpfail09, bkpfail16, bkpfail35, bkpcabal06ghcNestedTHBrackets is an error that occurs when Template Haskell brackets are nested without any intervening splices.Example: foo = [| [| x |] |])Test cases: TH_NestedSplicesFail{5,6,7,8}ghcMismatchedSpliceType is an error that happens when a typed bracket or splice is used inside a typed splice/bracket, or the other way around. Examples:;f1 = [| $$x |] f2 = [|| $y ||] f3 = $$( [| x |] ) f4 = $( [|| y ||] ))Test cases: TH_NestedSplicesFail{1,2,3,4}ghcBadImplicitSplice is an error thrown when a user uses top-level implicit TH-splice without enabling the TemplateHaskell extension.Example:pure [] -- on top-levelTest cases: ghciprog019prog019 ghciscriptsT1914 ghciscriptsT6106 rename should_failT4042 rename should_failT12146ghc;A syntax error with Template Haskel quotes & splices. See .ghc'An error in Template Haskell involving s. See .ghc.An error in Template Haskell reification. See ߈.ghcAn error due to typing restrictions in Typed Template Haskell. See ؈.ghcAn error occurred when trying to run a splice in Template Haskell. See Ո.ghcAn error involving the  addTopDecls functionality. See ۈ.ghcIllegalStaticFormInSplice is an error when a user attempts to define a static pointer in a Template Haskell splice. Example(s):"Test cases: th/TH_StaticPointers02ghcFailedToLookupThInstName is a Template Haskell error that occurrs when looking up an instance fails. Example(s):Test cases: showIface should_failTHPutDocNonExistentghcAddInvalidCorePlugin is a Template Haskell error indicating that a Core plugin being added has an invalid module due to being in the current package. Example(s): Test cases:ghcAddDocToNonLocalDefn is a Template Haskell error for documentation being added to a definition which is not in the current module. Example(s):Test cases: showIface should_failTHPutDocExternalghc;ReportCustomQuasiError is an error or warning thrown using qReport from the Quasi instance of TcM. Example(s): Test cases:ghcWhich instance coverage condition failed? Was it the liberal coverage condition?ghc,Failed the instance coverage condition (ICC)ghc5Failed the liberal instance coverage condition (LICC)ghc)Whether the instance also failed the LICCghc6Description of an instance coverage condition failure.ghc1Why was a HasField instance declaration rejected?ghc3HasField instance for a type not headed by a TyCon.Example:instance HasField a where {..}Test case: hasfieldfail03ghc$HasField instance for a data family.Example:3data family D a data instance D Int = MkDInt Char*instance HasField "fld" (D Int) where {..}Test case: hasfieldfail03ghc9HasField instance for a type that already has that field.Exampledata T = MkT { quux :: Int } instance HasField "quux" T Int where {..}Test case: hasfieldfail03ghcHasField instance for a type that already has fields, when the field label could potentially unify with those fields.Example:data T = MkInt { quux :: Int } instance forall (fld :: Symbol). HasField fld T Int where {..}Test case: hasfieldfail03ghc.Why was a class instance declaration rejected?ghc,An illegal type at the head of the instance.See Ō.ghc"An illegal HasField instance. See .ghc8An illegal instance for a built-in typeclass such as  Coercible, , or KnownNat, outside of a signature file.Test cases: deriving should_failT9687 deriving should_fail>T14916 polykinds/T8132 typecheck should_fail)TcCoercibleFail2 typecheck should_failT12837 typecheck should_failT14390ghc)Why was an instance declaration rejected?ghc6Possible cases for the -Wnoncanonical-monad-instances.ghc pure = return was defined.ghc (*>) = (>>) was defined.ghcreturn% was defined as something other than pure.ghc(>>)% was defined as something other than (*>).ghc7Possible cases for the -Wnoncanonical-monoid-instances.ghc(<>) = mappend was defined.ghcmappend% was defined as something other than (<>).ghc1Different reasons for TcRnNonCanonicalDefinition.ghc Related to (<>) and mappend.ghc Related to (*>)(>>) and purereturn.ghcProvenance of an unused name.ghcDifferent places in which a nested foralls/contexts error might occur.ghcNested forall in SPECIALISE instanceghcNested forall in  deriving via (via-type)ghc/Nested forall in the type of a GADT constructorghc!Nested forall in an instance headghc4Nested forall in a standalone deriving instance headghc$Nested forall in deriving class typeghc-Different types of errors for unused imports.ghc3No names in the import list are used in the module.Test cases: overloadedrecfldsfail06, T10890_2, t22391, t22391j, T1074, prog018, mod177, rn046, rn037, T5211ghc=A set of names in the import list are not used in the module.Test cases: overloadedrecfldsfail06, T17324, mod176, T11970A, rn046, T14881, T7454, T8149, T13064ghc?Distinguish record fields from other names for pretty-printing.ghc,Different types of errors for import lookup.ghcAn item in an import statement is not exported by the corresponding module.Test cases: T21826, recomp001, retc001, mod79, mod80, mod81, mod91, T6007, T7167, T9006, T11071, T9905fail2, T5385, T10668ghc-A name is specified with a qualifying module.Test cases: T3792ghc;Something completely unexpected is in an import list, like  module Foo.%Test cases: ImportLookupIllegalghcAn item in an import list matches multiple names exported from that module.Test cases: Noneghc.Different types of warnings for dodgy imports.ghcAn import of the form 'T(..)' or 'f(..)' does not actually import anything beside T/f itself.Test cases: DodgyImportsghcA hiding clause contains something that would be reported as an error in a regular import, but is relaxed to a warning.%Test cases: DodgyImports_hidingghc doghcThe information necessary to report mismatched numbers of arguments in a match group.ghc1Context for a mismatch in the number of argumentsghcName of the functionghcPattern match specificsghcStores the information to be reported in a representation-polymorphism error message.ghcWhich non-concrete type did we try to unify this concrete type variable with?ghcWhat is the original type we checked for representation-polymorphism, and what specific check did we perform?ghc3Whether we ran out of fuel generating the bindings.ghc.A collection of hole fits and refinement fits.ghcA collection of valid hole fits or refinement fits, in which some fits might have been suppressed.ghcWhether we have suppressed any fits because there were too many.ghcThis datatype collates instances that match or unifier, in order to report an error message for an unsolved typeclass constraint.ghc!Explain a problem with an import.ghc/Couldn't find a module with the requested name.ghc9The imported modules don't export what we're looking for.ghcA message that aims to explain why two types couldn't be seen to be representationally equal.ghcNot knowing the role of a type constructor prevents us from concluding that two types are representationally equal.Example:foo :: Applicative m => m (Sum Int) foo = coerce (pure $ 1 :: Int)We don't know what role m2 has, so we can't coerce `m Int` to `m (Sum Int)`.#Test cases: T8984, TcCoercibleFail.ghcThe fact that a - is abstract prevents us from decomposing a TyConApp: and deducing that two types are representationally equal.Test cases: none.ghc Down Int foo = coerceTest cases: TcCoercibleFail.ghcReport an error involving a .This could be an out of scope data constructor or variable, a typed hole, or a wildcard in a type.ghcReport an out-of-scope data constructor or variable masquerading as an expression hole.Report a typed hole, or wildcard, with additional information.ghc2Configuration for pretty-printing valid hole fits.Êghc Some form of "not in scope" error. See also the  constructor of .ĊghcA run-of-the-mill "not in scope" error.ŊghcLike Ċ6, but when we know we are looking for a record field.Ɗghc An exact  was not in scope.This usually indicates a problem with a Template Haskell splice.Test cases: T5971, T18263.NJghcalways at least 2 elementsɊghc"Couldn't find a top-level binding.Happens when specifying an annotation for something that is not in scope.,Test cases: annfail01, annfail02, annfail11.ʊghcA class doesn't have a method with this name, or, a class doesn't have an associated type with this name, or, a record doesn't have a record field with this name.ˊghcA name is not in scope during type checking but passed the renamer.Test cases: none͊ghcModule does not export...ϊghc4Trying to import a data constructor directly, e.g. import Data.Maybe (Just) instead of import Data.Maybe (Maybe(Just))Њghc.The parent does not export the given children.ъghc Incorrect type5 keyword when importing something which isn't a type.Ҋghc'Explain how a kind equality originated.ԊghcExpected/actual information.Պghc&Display the expected and actual types.֊ghcDisplay the expected and actual types, after expanding type synonyms.ۊghc$Add some information about ambiguity܊ghc?Some type variables remained ambiguous: print them to the user.݊ghc?Remind the user that a particular type family is not injective.ފghcAmbiguous kind and type variables, respectively. Guaranteed to not both be empty.ߊghcTrue  => start the message with "Ambiguous type variable ..." False  =? create a message of the form "The type variable is ambiguous."ghc:Add some information to disambiguate errors in which two Names( would otherwise appear to be identical.)See Note [Disambiguating (X ~ X) errors].ghcWhether the two "s also came from the same package.ghcA cue to print out information about type variables, e.g. where they were bound, when there is a mismatch  tv1 ~ ty2.ghc(Additional information to be given in a & message, which is then passed on to mk_supplementary_ea_msg.ghc7A type equality between a type variable and a polytype.(Test cases: T12427a, T2846b, T10194, ...ghcAn occurs check.ghc)A skolem type variable escapes its scope.Example:7data Ex where { MkEx :: a -> MkEx } foo (MkEx x) = x#Test cases: TypeSkolEscape, T11142.ghcCan't unify the type variable with the other type due to the kind of type variable it is.For example, trying to unify a SkolemTv with the type Int, or with a TyVarTv.ghc:Whether to use expected/actual in a type mismatch message.ghcDon't use expected/actual.ghcUse expected/actual.ghc/Whether to also mention type synonym expansion.ghc"Couldn't unify two types or kinds.Example:93 + 3# -- can't match a lifted type with an unlifted typeTest cases: T1396, T8263, ...ghcA type has an unexpected kind.Test cases: T2994, T7609, ...ghc?A mismatch between two types, which arose from a type equality.Test cases: T1470, tcfail212.ghcCouldn't solve some Wanted constraints using the Givens. Used for messages such as "No instance for ..." and "Could not deduce ... from".ghc4Second type (the actual type if mismatch_ea is True)ghc8First type (the expected type if if mismatch_ea is True)ghc0The constraint in which the mismatch originated.ghc6Should this be phrased in terms of expected vs actual?ghcWhat thing is  the kind of?ghcWhat thing is  the kind of?ghcThe overall actual typeghcThe overall expected typeghc!Some additional info consumed by mk_supplementary_ea_msg.ghc)The Wanted constraints we couldn't solve. N.B.: the  at the head of the list has been tidied, perhaps not the others.ghcAn error reported after constraint solving. This is usually, some sort of unsolved constraint error, but we try to be specific about the precise problem we encountered.ghc4Quantified variables appear out of dependency order.Example:forall (a :: k) k. ...:Test cases: BadTelescope2, T16418, T16247, T16726, T18451.ghcWe came across a custom type error and we have decided to report it.Example:9type family F a where F a = TypeError (Text "error")err :: F () err = ()1Test cases: CustomTypeErrors0{1,2,3,4,5}, T12104.ghc;Report a Wanted constraint of the form "Unsatisfiable msg".ghcWe want to report an out of scope variable or a typed hole. See .ghc4Cannot unify a variable, because of a type mismatch.ghcA mismatch between two types.ghc:A violation of the representation-polymorphism invariants.See  and FixedRuntimeRepContext for more information.ghcAn equality between two types is blocked on a kind equality between their kinds.Test cases: none.ghc9Something was not applied to sufficiently many arguments.Example:instance Eq Maybe where {..}Test case: T11563.ghc,Trying to use an unbound implicit parameter.Example:foo :: Int foo = ?paramTest case: tcfail130.ghcA constraint couldn't be solved because it contains ambiguous type variables.Example:!class C a b where f :: (a,b) x = fst fTest case: T4921.ghcCould not solve a constraint; there were several unifying candidate instances but no matching instances. This is used to report as much useful information as possible about why we couldn't choose any instance, e.g. because of ambiguous type variables.ghcCould not solve a constraint using available instances because the instances overlap.,Test cases: tcfail118, tcfail121, tcfail218.ghcCould not solve a constraint from instances because instances declared in a Safe module cannot overlap instances from other modules (with -XSafeHaskell).%Test cases: SH_Overlap{1,2,5,6,7,11}.ghcA predicate with its arising location; used to encapsulate a constraint that will give rise to a diagnostic.ghc=for Wanteds, where to put the evidence for Givens, Nothingghc Context needed when reporting a , such as the enclosing implication constraints or whether we are deferring type errors.ghcTrue  = More important errors have occurred, so create bindings if need be, but don't issue any more errors/warnings See Note [Suppressing error messages]ghcTrue  = -fprint-expanded-synonymsghcTrue  = -Wredundant-constraintsghc(Reason for reporting out of scope holes.ghc$Reason for reporting holes in types.ghc*Reason for reporting holes in expressions.ghc*Whether to defer type errors until runtime‹ghcWe make some errors (depending on cec_defer) into warnings, and emit evidence bindings into ‹ for unsolved constraintsċghcEnclosing implications (innermost first) ic_skols and givens are tidied, rest are notŋghcA , together with context (e.g. enclosing implication constraints) that are needed in order to report it.Njghc%The content of the message to report.ȋghcContext for what we wish to report. This can change as we enter implications, so is stored alongside the content.ɋghc%Additional information to print in a ͋<, after the important messages and after the error context.See Note [Error report].͋ghcA collection of main error messages and supplementary information.In practice, we will: - display the important messages first, - then the error context (e.g. by way of a call to ), - then the supplementary information (e.g. relevant bindings, valid hole fits), - then the hints ("Possible fix: ...").So this is mostly just a way of making sure that the error context appears early on rather than at the end of the message.$See Note [Error report] for details.ҋghcA mismatch in a data constrcutor, between its declaration in an hs-boot file or signature file, and its implementation in a source Haskell module.ӋghcThe  s of the # s differ.ԋghcThe fixities of the # s differ.Ջghc"The strictness annotations of the # s differ.֋ghcThe #s have different field labels.׋ghcThe #s have incompatible types.؋ghcA mismatch in a datatype declaration, between an hs-boot file or signature file and its implementing module.ًghc5A datatype is implemented as a newtype or vice-versa.ڋghcThe constructors don't match.ۋghcThe datatype contexts differ.܋ghcA mismatch in an associated type of a class, between its declaration in an hs-boot or signature file, and its implementation in a source Haskell file.݋ghc!Two associated types don't match.ދghc)Two associated type defaults don't match.ߋghcA mismatch in a class method, between its declaration in an hs-boot or signature file, and its implementation in a source Haskell file.ghc%The class method names are different.ghc*The types of a class method are different.ghc,The default method types are not compatible.ghcA mismatch in a class, between its declaration in an hs-boot or signature file, and its implementation in a source Haskell file.ghcThe class methods don't match.ghc!The associated types don't match.ghc(The functional dependencies don't match.ghcThe superclasses don't match.ghcThe MINIMAL pragmas are not compatible.ghc4The quantified variables in an equation don't match.Example: the quantification of a in 1type family F a where { forall a. F a = Maybe a }ghc$The LHSs of an equation don't match.ghc$The RHSs of an equation don't match.ghcUtility datatype to record errors when checking compatibity between two lists of things, e.g. class methods, associated types, type family equations, etc.ghcDifferent number of items.ghc3The item at the given position in the list differs.ghcMismatched implementation of a ! in an hs-boot or signature file.ghcThe  kinds differ.ghcThe   s aren't compatible.ghcThe two s are of a different flavour, e.g. one is a data family and the other is a type family.ghc+The equations of a type family don't match.ghc4The type family injectivity annotations don't match.ghcThe s are both datatype s, but they have diferent #s.ghcThe  s are both A s, but the classes don't match.ghcThe %s are something completely different.ghc An abstract  is implemented using a type synonym in an invalid manner. See .ghcAn error in the implementation of an abstract datatype using a type synonym.ghc The type synony was not nullary.ghcThe type synonym RHS contained invalid types, e.g. a type family or a forall.ghcA mismatch of two s between an hs-boot or signature file and its implementing module.ghcThe s have different types.ghcSomething from the hs-boot or signature file is missing from the implementing module.ghcSomething defined in the hs-boot or signature file is not defined in the implementing module.ghcSomething exported by the hs-boot or signature file is not exported by the implementing module.ghcA mismatch between an hs-boot or signature file and its implementing module.ghcSomething defined or exported by an hs-boot or signature file is missing from the implementing module.ghcA typeclass instance is declared in the hs-boot file but it is not present in the implementing module.ghcA mismatch between an hsig file and its implementing module in the ' that a particular re-export refers to.ghcA mismatch between the declaration of something in the hs-boot or signature file and its implementation, e.g. a type mismatch or a type family implemented as a class.ghc>What declarations were not allowed in an hs-boot or hsig file?ghc2Is the object we are dealing with exported or not?Used for reporting "missing signature" warnings, see .ghc/What kind of thing is missing a type signature?Used for reporting "missing signature" warnings, see tcRnMissingSignature.ghcwhether -XCUSKs is enabledghcIf , the associated type of a typeclass is not parameterized over the last type variable of the classghc'The associated type family of the classghcIf , the associated type of a typeclass contains the last type variable of the class in a kind, which is not (yet) allowed by GHC.ghc'The associated type family of the classghcA type representing whether or not the input type has associated data family instances.ghc?Invalid arguments in an associated family instance declaration.ghcAn argument which isn't a type variable in an associated family instance default declaration.ghcDuplicate occurrence of a type variable in an associated family instance default declaration.ghcThe reason that an associated family default declaration was invalid.ghcAn associated family default declaration for something that isn't an associated family.ghc3Invalid arguments in an associated family instance.See .ghc:The reason that an associated family instance was invalid.ghcA class instance is missing its expected associated type/data instance.Test cases: derivingshould_compile!T14094 indexed-typesshould_compileSimple2 typecheckshould_compiletc254ghc.A top-level instance for an associated family .Example:4class C a where { type T a } instance T Int = BoolTest case: indexed-types should_fail SimpleFail7ghcAn associated type instance is provided for a class that doesn't have that associated type.8Examples(s): $(do d <- instanceD (cxt []) (conT ''Eq appT conT ''Foo) [tySynInstD $ tySynEqn Nothing (conT ''Rep appT conT ''Foo) (conT ''Maybe)] return [d]) ======> instance Eq Foo where type Rep Foo = MaybeTest cases: th/T12387aghcAn associated family instance does not mention any of the parent A s. Test cases: T2888, T9167, T12867ghc&An invalid associated family instance.See .Builderghc1An invalid associated family default declaration.See .ghcA dodgy binder, i.e. a variable that syntactically appears in LHS patterns but only in non-injective positions.See Note [Dodgy binding sites in type family instances] in GHC.Tc.Validity.ghcA quantified type variable in a type or data family equation that is not bound in any LHS patterns.ghcA quantified type variable in a type or data family equation that is not used on the RHS.ghcA quantified type variable in a type or data family equation that is either not bound in any LHS patterns or not used in the RHS (or both).ghc9For what reason was the quantified type variable invalid?ghcDid the user write this type variable, or was introduced by GHC? For example: with  -XPolyKinds, in type instance forall a. F = (), we have a user-written a$ but GHC introduces a kind variable k as well. See #23734.ghc0Why is a (type or data) family instance invalid?ghc"A top-level family instance for a  that isn't a family .Example:/data D a = MkD type instance D Int = BoolTest case: indexed-types should_failT3092ghcA top-level (open) type family instance for a closed type family.Test cases: indexed-types should_failOverlap7 indexed-types should_failOverlap3ghcA family instance was declared for a family of a different kind, e.g. a data instance for a type family .&Test cases: T9896, SimpleFail3aghcA family instance was declared with a different number of arguments than expected. See Note [Oversaturated type family equations] in GHC.Tc.Validity.Test cases: TyFamArity1, TyFamArity2, T11136, Overlap4, AssocTyDef05, AssocTyDef06, T14110ghcA closed type family equation used a different name than the parent family.Example:*type family F a where G Int = Bool:Test cases: Overlap5, T15362, T16002, T20260, T11623ŒghcThere are out-of-scope type variables in the right-hand side of an associated type or data family instance.Example:instance forall a. C Int where data instance D Int = MkD1 aTest cases: indexed-types should_failT5515, polykinds T9574, renameshould_fail/T18021Ìghcthe unused bound type variablesŌghc%Why is a class instance head invalid?ƌghcAn instance for an abstract class from an hs-boot or Backpack hsig file.Example:,- A.hs-boot module A where class C a- B.hs module B where import {-# SOURCE #-} A instance C Int where- A.hs module A where import B class C a where f :: aTest cases: typecheck should_failT13068njghc&An instance whose head is not a class. Examples(s): instance c instance 42instance !Show D7type C1 a = (Show (a -> Bool)) instance C1 Int whereTest cases: typecheckrenameT5513 typecheckrenameT16385 parser should_failT3811c rename should_fail;T18240a polykinds/T13267 deriving should_failT23522Ȍghc+Instance head was headed by a type synonym.Example: type MyInt = Int class C a where {..} instance C MyInt where {..}8Test cases: drvfail015, mod42, TidyClassKinds, tcfail139Ɍghc"Instance head was not of the form  T a1 ... an , where  a1, ..., an$ are all type variables or literals.Example:instance Num [Int] where {..}/Test cases: mod41, mod42, tcfail044, tcfail047.ʌghc5Multi-param instance without -XMultiParamTypeClasses.Example:instance C a b where {..}$Test case: IllegalMultiParamInstanceˌghc;Whether a sole extra-constraint wildcard is allowed, e.g. _ => .. as opposed to ( .., _ ) => ...Όghc6A context in which we don't allow anonymous wildcards.֌ghc-The type must not have some datatype context.׌ghcThe data constructor must not have exotic unlifted or polymorphic arguments.،ghc3The data constructor must be a vanilla constructor.ٌghcThe type must have some type parameters. check (d) from Note [Requirements for deriving Generic and Rep] in GHC.Tc.Deriv.Generics.ڌghc9The data constructor must not have existential arguments.یghcThe derivation applies a type to an argument involving the last parameter but the applied type is not of kind * -> *.݌ghc The given # must be truly polymorphic in the last argument of the data type.ތghc The given #7 must not use the type variable in a function argument"ߌghc The given # must not contain function typesghc The given # must use the type variable only as the last argument of a data typeghc The given #; is a GADT so we cannot directly derive an istance for it.ghc The given #( has existentials type vars in its type.ghc The given # has constraints in its type.ghc The given # has a higher-rank type.ghc8Why a particular typeclass instance couldn't be derived.ghc*The typeclass instance is not well-kinded.ghc=The instance type | We cannot derive instances in boot filesghc&We cannot use GND on non-newtype typesghc-We cannot derive instances of nullary classesghc,Last arg must be newtype or data applicationghc The given  is not a class.ghc"The given (representation of the)  has no data constructors.ghc/GHC simply doesn't how to how derive the input A for the given .ghc The given  must be an enumeration. See Note [Enumeration types] in GHC.Core.TyConghc The given  must have  precisely one constructor.ghc.The given data type must have some parameters.ghc2The given data type must not have a class context.ghcWe couldn't derive an instance for a particular data constructor for a variety of reasons.ghcWe couldn't derive a 6 instance for the given type for a variety of reasonsghcWe couldn't derive an instance either because the type was not an enum type or because it did have more than one constructor.ghcA data type to describe why a variable is not closed. See Note [Not-closed error messages] in GHC.Tc.Gen.ExprghcHelper type used in checkDataKindSig.Superficially similar to  ContextKind, but it lacks AnyKind and , and instead of TheKind liftedTypeKind provides 3, which is much simpler to match on and handle in isAllowedDataResKind.ghc'A description of whether something is adata or newtype () data instance or newtype instance () data family ()/At present, this data type is only consumed by checkDataKindSig.ghcWhy the particular injectivity error arose together with more information, if any.ghcWhy the particular illegal newtype error arose together with more information, if any.ghcIn what context did we require a type to have a fixed runtime representation?Used by  for throwing representation polymorphism errors when validity checking.See Note [Representation polymorphism checking] in GHC.Tc.Utils.ConcreteghcData constructor fields must have a fixed runtime representation.Tests: T11734, T18534.ghcPattern synonym signature arguments must have a fixed runtime representation.Test: RepPolyPatSynArg.ghcPattern synonym signature scrutinee must have a fixed runtime representation.Test: RepPolyPatSynRes.ghc Where a shadowed name comes fromghc(The shadowed name is local to the moduleghc?The shadowed name is global, typically imported from elsewhere.ghc"Why did we reject a record update?ghc.No constructor has all of the required fields.ghcThere are several possible parents which have all of the required fields, and we weren't able to disambiguate in any way.ghcWe used type-directed disambiguation, but this resulted in an invalid parent (the type-directed parent is not among the parents we computed from the field labels alone).ghcWhich parts of a record field are affected by a particular error or warning.ghc>Whether the error pertains to a function argument or a result.ghcSpecifies which calling convention is unsupported on the current platformÍghcSpecifies which back ends can handle a requested foreign import or exportčghcThings forbidden in  type data1 declarations. See Note [Type data declarations]ʍghcZonkerCannotDefaultConcrete is an error occurring when a concrete type variable cannot be defaulted.Test cases: T23153ˍghc8An error which might arise during typechecking/renaming.̍ghcSimply wraps an unknown t message a. It can be used by plugins to provide custom diagnostic messages originated during typechecking/renaming.͍ghcWrap an z to a ˍ for when we attempt to load interface files during typechecking but encounter an error. ΍ghcTcRnMessageWithInfo is a constructor which is used when extra information is needed to be provided in order to qualify a diagnostic and where it was originated (and why). It carries an extra y which can be used to pretty-print some names and it wraps a , which includes any extra context associated with this diagnostic.ύghcTcRnWithHsDocContext annotates an error message with the context in which it originated.ЍghcTcRnSolverReport is the constructor used to report unsolved constraints after constraint solving, as well as other errors such as hole fit errors.See the documentation of 8 datatype for an overview of the different errors.эghcTcRnSolverDepthError is an error that occurs when the constraint solver exceeds the maximum recursion depth.Example:class C a where { meth :: a } instance Cls [a] => Cls a where { meth = head . meth }t :: () t = methTest cases: T7788 T8550 T9554 T15316A T17267{D,a,b,c,e} T17458 ContextStack1 T22924b TcCoercibleFailҍghcTcRnRedundantConstraints is a warning that is emitted when a binding has a user-written type signature which contains superfluous constraints.Example:f :: (Eq a, Ord a) => a -> a -> a f x y = (x < y) || x == y -- `Eq a` is superfluous: the `Ord a` constraint suffices. Bool foo MkFalse = False foo MkTrue = True -- Inaccessible: requires True ~ FalseTest cases: T7293, T7294, T15558, T17646, T18572, T18610, tcfail167.ԍghcTcRnInaccessibleCoAxBranch is a warning that is emitted when a closed type family has a branch which is inaccessible due to a more general, prior branch.Example: type family F a where F a = Int F Bool = Bool Test cases: T9085, T14066a, T9085, T6018, tc265,ՍghcA type which was expected to have a fixed runtime representation does not have a fixed runtime representation.Example:data D (a :: TYPE r) = MkD aTest cases: T11724, T18534, RepPolyPatSynArg, RepPolyPatSynUnliftedNewtype, RepPolyPatSynRes, T20423֍ghcTcRnImplicitLift is a warning (controlled with -Wimplicit-lift) that occurs when a Template Haskell quote implicitly uses lift.Example: warning1 :: Lift t => t -> Q Exp warning1 x = [| x |]Test cases: th/T17804׍ghcTcRnUnusedPatternBinds is a warning (controlled with -Wunused-pattern-binds) that occurs if a pattern binding binds no variables at all, unless it is a lone wild-card pattern, or a banged pattern.Example: Just _ = rhs3 -- Warning: unused pattern binding (_, _) = rhs4 -- Warning: unused pattern binding _ = rhs3 -- No warning: lone wild-card pattern !() = rhs4 -- No warning: banged pattern; behaves like seq+Test cases: rename/{T13646,T17c,T17e,T7085}؍ghcTcRnUnusedQuantifiedTypeVar is a warning that occurs if there are unused quantified type variables.,Examples: f :: forall a. Int -> CharTest cases: renameshould_compile-ExplicitForAllRules1 renameshould_compileT5331ٍghcTcRnDodgyImports is a group of warnings (controlled with -Wdodgy-imports).See  for the different warnings.ڍghcTcRnDodgyExports is a warning (controlled by -Wdodgy-exports) that occurs when an export of the form 'T(..)' for a type constructor T0 does not actually export anything beside T itself.Example: module Foo ( T(..) -- Warning: T is a type synonym , A(..) -- Warning: A is a type family , C(..) -- Warning: C is a data family ) wheretype T = Int type family A :: * -> * data family C :: * -> *Test cases: warningsshould_compileDodgyExports01ۍghcTcRnMissingImportList is a warning (controlled by -Wmissing-import-lists) that occurs when an import declaration does not explicitly list all the names brought into scope.Test cases: renameshould_compileT4489܍ghcWhen a module marked trustworthy or unsafe (using -XTrustworthy or -XUnsafe) is compiled with a plugin, the TcRnUnsafeDueToPlugin warning (controlled by -Wunsafe) is used as the reason the module was inferred to be unsafe. This warning is not raised if the -fplugin-trustworthy flag is passed.Test cases: plugins/T19926ݍghcTcRnModMissingRealSrcSpan is an error that occurs when compiling a module that lacks an associated .Test cases: NoneލghcTcRnIdNotExportedFromModuleSig is an error pertaining to backpack that occurs when an identifier required by a signature is not exported by the module or signature that is being used as a substitution for that signature.Example(s): NoneTest cases: backpack should_fail bkpfail36ߍghcTcRnIdNotExportedFromLocalSig is an error pertaining to backpack that occurs when an identifier which is necessary for implementing a module signature is not exported from that signature.Example(s): NoneTest cases: backpack should_fail#bkpfail30 backpack should_fail#bkpfail31 backpack should_fail bkpfail34ghcTcRnShadowedName is a warning (controlled by -Wname-shadowing) that occurs whenever an inner-scope value has the same name as an outer-scope value, i.e. the inner value shadows the outer one. This can catch typographical errors that turn into hard-to-find bugs. The warning is suppressed for names beginning with an underscore.Examples(s): f = ... let f = id in ... f ... -- NOT OK, f is shadowed f x = do { _ignore <- this; _ignore <- that; return (the other) } -- suppressed via underscoreTest cases: typecheckshould_compileT10971a renameshould_compilern039 renameshould_compilern064 renameshould_compileT1972 rename should_failT2723 renameshould_compile$T3262 driver/werrorghcTcRnInvalidWarningCategory is an error that occurs when a warning is declared with a category name that is not the special category "deprecations", and either does not begin with the prefix "x-" indicating a user-defined category, or contains characters not valid in category names. See Note [Warning categories] in GHC.Unit.Module.Warnings7Examples(s): module M {-# WARNING in "invalid" Oops #-} where+{-# WARNING in "x- spaces not allowed" foo Oops #-}Test cases: warnings should_failWarningCategoryInvalidghcTcRnDuplicateWarningDecls is an error that occurs whenever a warning is declared twice.Examples(s): {-# DEPRECATED foo "Don't use me" #-} {-# DEPRECATED foo "Don't use me" #-} foo :: Int foo = 2Test cases: rename should_fail rnfail058ghcTcRnSimplifierTooManyIterations is an error that occurs whenever the constraint solver in the simplifier hits the iterations' limit.Examples(s): None.Test cases: None.ghcTcRnIllegalPatSynDecl is an error that occurs whenever there is an illegal pattern synonym declaration. Examples(s):varWithLocalPatSyn x = case x of P -> () where pattern P = () -- not valid, it can't be local, it must be defined at top-level.Test cases: patsyn should_faillocalghcTcRnLinearPatSyn is an error that occurs whenever a pattern synonym signature uses a field that is not unrestricted.Example(s): NoneTest cases: linear should_fail LinearPatSyn2ghcTcRnEmptyRecordUpdate is an error that occurs whenever a record is updated without specifying any field. Examples(s):$(deriveJSON defaultOptions{} ''Bad) -- not ok, no fields selected for update of defaultOptionsTest cases: th/T12788ghcTcRnIllegalFieldPunning is an error that occurs whenever field punning is used without the NamedFieldPuns extension enabled. Examples(s):data Foo = Foo { a :: Int }foo :: Foo -> Int foo Foo{a} = a -- Not ok, punning used without extension.Test cases: parser should_failRecordDotSyntaxFail12ghcTcRnIllegalWildcardsInRecord is an error that occurs whenever wildcards (..) are used in a record without the relevant extension being enabled. Examples(s):data Foo = Foo { a :: Int }foo :: Foo -> Int foo Foo{..} = a -- Not ok, wildcards used without extension.Test cases: parser should_failRecordWildCardsFailghcTcRnIllegalWildcardInType is an error that occurs when a wildcard appears in a type in a location in which wildcards aren't allowed. Examples:Type synonyms: type T = _!Class declarations and instances: class C _ instance C _Standalone kind signatures:type D :: _ data DTest cases: ExtraConstraintsWildcardInTypeSplice2 ExtraConstraintsWildcardInTypeSpliceUsed ExtraConstraintsWildcardNotLast ExtraConstraintsWildcardTwice NestedExtraConstraintsWildcard NestedNamedExtraConstraintsWildcard PartialClassMethodSignature PartialClassMethodSignature2 T12039 T13324_fail1 UnnamedConstraintWildcard1 UnnamedConstraintWildcard2 WildcardInADT1 WildcardInADT2 WildcardInADT3 WildcardInADTContext1 WildcardInDefault WildcardInDefaultSignature WildcardInDeriving WildcardInForeignExport WildcardInForeignImport WildcardInGADT1 WildcardInGADT2 WildcardInInstanceHead WildcardInInstanceSig WildcardInNewtype WildcardInPatSynSig WildcardInStandaloneDeriving WildcardInTypeFamilyInstanceRHS WildcardInTypeSynonymRHS saks_fail003 T15433aghcTcRnDuplicateFieldName is an error that occurs whenever there are duplicate field names in a single record. Examples(s):data R = MkR { x :: Int, x :: Bool } f r = r { x = 3, x = 4 }Test cases: T21959.ghcTcRnIllegalViewPattern is an error that occurs whenever the ViewPatterns syntax is used but the ViewPatterns language extension is not enabled..Examples(s): data Foo = Foo { a :: Int }8foo :: Foo -> Int foo (a -> l) = l -- not OK, the  ViewPattern extension is not enabled.Test cases: parser should_failViewPatternsFailghcTcRnCharLiteralOutOfRange is an error that occurs whenever a character is out of range.Examples(s): NoneTest cases: NoneghcTcRnNegativeNumTypeLiteral is an error that occurs whenever a type-level number literal is negative. type Neg = -1/Test cases: th/T8412 typecheck should_failT8306ghcTcRnIllegalWildcardsInConstructor is an error that occurs whenever the record wildcards '..'6 are used inside a constructor without labeled fields.Examples(s): NoneTest cases: rename should_failT9815.hs rename should_failT9815b.hs rename should_failT9815ghci.hs rename should_fail T9815bghci.hsghcTcRnIgnoringAnnotations is a warning that occurs when the source code contains annotation pragmas but the platform in use does not support an external interpreter such as GHCi and therefore the annotations are ignored.Example(s): NoneTest cases: NoneghcTcRnAnnotationInSafeHaskell is an error that occurs if annotation pragmas are used in conjunction with Safe Haskell.Example(s): NoneTest cases: annotations should_failT10826ghcTcRnInvalidTypeApplication is an error that occurs when a visible type application is used with an expression that does not accept "specified" type arguments.Example(s): foo :: forall {a}. a -> a foo x = x bar :: () bar = let x = foo @Int 42 in ()Test cases: overloadedrecflds should_fail1overloadedlabelsfail03 typecheck should_fail/ExplicitSpecificity1 typecheck should_fail0ExplicitSpecificity10 typecheck should_fail/ExplicitSpecificity2 typecheck should_fail!T17173 typecheck should_failVtaFailghcExample(s): foo :: forall a. a foo = tagToEnum# 0#Test cases: typecheck should_fail tcfail164ghc=TcRnTagToEnumResTyNotAnEnum is an error that occurs when the  'tagToEnum#' function is given a result type that is not an enumeration type.Example(s): foo :: Int -- not an enumeration TyCon foo = tagToEnum# 0#Test cases: typecheck should_fail tcfail164ghc Int f x = 2 * x -- binding not allowed:- B.hs-boot type family F a where { F Int = Bool }#- type family equations not allowed- C.hsig bar :: Int -> Int {-# RULES forall x. bar x = x #-} -- RULES not allowed Test cases:bindings: T19781class instance body: nonetype family instance: HsBootFam splice: noneforeign declaration: nonedefault declaration: none RULEs: noneghcTcRnBootMismatch is a family of errors that occur when there is a mismatch between the hs-boot and hs files. Examples:9- A.hs-boot foo :: Int -> Bool data D = MkD1- A.hs foo :: Int -> Char foo = chrdata D = MkD Int Test cases:missing export: bkpcabal06, bkpfail{01,05,09,16,35}, rnfail{047,055}missing definition: nonemissing instance: T14075#mismatch in exports: bkpfail{03,19}conflicting definitions: bkpcabal02, bkpfail{04,06,07,10,12,133,14,15,17,22,23,25,26,27,41,42,45,47,50,52,53,54}, T19244{a,b}, T23344, ClosedFam3, rnfail055ghcTcRnRecursivePatternSynonym is an error that occurs when a pattern synonym is defined in terms of itself, either directly or indirectly.3Example(s): pattern A = B pattern B = ATest cases: patsyn should_failT16900ghcTcRnPartialTypeSigTyVarMismatch is an error that occurs when a partial type signature attempts to unify two different types.7Example(s): f :: a -> b -> _ f x y = [x, y]Test cases: partial-sigs should_failT14449ghcTcRnPartialTypeSigBadQuantifier is an error that occurs when a type variable being quantified over in the partial type signature of a function gets unified with a type that is free in that function's context.Example(s): foo :: Num a => a -> a foo xxx = g xxx where g :: forall b. Num b => _ -> b g y = xxx + yTest cases: partial-sig should_failT14479ghcTcRnMissingSignature is a warning that occurs when a top-level binding or a pattern synonym does not have a type signature.Controlled by the flags: -Wmissing-signatures -Wmissing-exported-signatures -Wmissing-pattern-synonym-signatures -Wmissing-exported-pattern-synonym-signatures -Wmissing-kind-signatures -Wmissing-poly-kind-signaturesTest cases: T11077 (top-level bindings) T12484 (pattern synonyms) T19564 (kind signatures)ghcTcRnPolymorphicBinderMissingSig is a warning controlled by -Wmissing-local-signatures that occurs when a local polymorphic binding lacks a type signature.Example(s): id a = aTest cases: warningsshould_compileT12574ghcTcRnOverloadedSig is an error that occurs when a binding group conflicts with the monomorphism restriction.Example(s): data T a = T a mono = ... where x :: Applicative f => f a T x = ...Test cases: typecheckshould_compileT11339ghcTcRnTupleConstraintInst is an error that occurs whenever an instance for a tuple constraint is specified.Examples(s): class C m a class D m a f :: (forall a. Eq a => (C m a, D m a)) => m a f = undefined)Test cases: quantified-constraints/T15334ghcTcRnUserTypeError is an error that occurs due to a user's custom type error, which can be triggered by adding a  TypeError< constraint in a type signature or typeclass instance.Examples(s): f :: TypeError (Text "This is a type error") f = undefinedTest cases: typecheck should_fail.CustomTypeErrors02 typecheck should_failCustomTypeErrors03ghcTcRnConstraintInKind is an error that occurs whenever a constraint is specified in a kind.4Examples(s): data Q :: Eq a => Type where {}Test cases: dependent should_failT13895 polykinds/T16263 saks should_fail(saks_fail004 typecheck should_fail#T16059a typecheck should_failT18714ghcTcRnUnboxedTupleTypeFuncArg is an error that occurs whenever an unboxed tuple or unboxed sum type is specified as a function argument, when the appropriate extension (`-XUnboxedTuples` or `-XUnboxedSums`) isn't enabled.Examples(s): -- T15073.hs import T15073a newtype Foo a = MkFoo a deriving P- T15073a.hs class P a where p :: a -> (# a #)Test cases: deriving should_fail$T15073.hs deriving should_fail&T15073a.hs typecheck should_failT16059dghcTcRnLinearFuncInKind is an error that occurs whenever a linear function is specified in a kind.(Examples(s): data A :: * %1 -> *Test cases: linear should_fail#LinearKind linear should_fail$LinearKind2 linear should_fail LinearKind3ghcTcRnForAllEscapeError is an error that occurs whenever a quantified type's kind mentions quantified type variable.Examples(s): type T :: TYPE (BoxedRep l) data T = MkTTest cases: unlifted-datatypes should_failUnlDataNullaryPolyghcTcRnVDQInTermType is an error that occurs whenever a visible dependent quantification is specified in the type of a term.Examples(s): a = (undefined :: forall k -> k -> Type) @IntTest cases: dependent should_fail"T15859 dependent should_fail(T16326_Fail1 dependent should_fail(T16326_Fail2 dependent should_fail(T16326_Fail3 dependent should_fail(T16326_Fail4 dependent should_fail(T16326_Fail5 dependent should_fail(T16326_Fail6 dependent should_fail(T16326_Fail7 dependent should_fail(T16326_Fail8 dependent should_fail(T16326_Fail9 dependent should_fail)T16326_Fail10 dependent should_fail)T16326_Fail11 dependent should_fail)T16326_Fail12 dependent should_fail"T17687 dependent should_failT18271ghcTcRnBadQuantPredHead is an error that occurs whenever a quantified predicate lacks a class or type variable head.Examples(s): class (forall a. A t a => A t [a]) => B t where type A t a :: Constraint)Test cases: quantified-constraints/T16474ghcTcRnIllegalTupleConstraint is an error that occurs whenever an illegal tuple constraint is specified.Examples(s): g :: ((Show a, Num a), Eq a) => a -> a g = undefinedTest cases: typecheck should_fail tcfail209aghcTcRnNonTypeVarArgInConstraint is an error that occurs whenever a non type-variable argument is specified in a constraint.;Examples(s): data T instance Eq Int => Eq TTest cases: ghciscriptsT13202 ghciscriptsT13202a polykinds/T12055a typecheck should_fail"T10351 typecheck should_fail"T19187 typecheck should_fail!T6022 typecheck should_failT8883ghcTcRnIllegalImplicitParam is an error that occurs whenever an illegal implicit parameter is specified.Examples(s): type Bla = ?x::Int data T = T instance Bla => Eq T8Test cases: polykinds/T11466 typecheck should_fail!T8912 typecheck should_fail%tcfail041 typecheck should_fail%tcfail211 typecheck should_failtcrun045ghcTcRnIllegalConstraintSynonymOfKind is an error that occurs whenever an illegal constraint synonym of kind is specified.Examples(s): type Showish = Show f :: (Showish a) => a -> a f = undefinedTest cases: typecheck should_fail tcfail209ghcTcRnOversaturatedVisibleKindArg is an error that occurs whenever an illegal oversaturated visible kind argument is specified.Examples(s): type family F2 :: forall (a :: Type). Type where F2 @a = Maybe aTest cases: typecheck should_fail"T15793 typecheck should_failT16255ghcTcRnForAllRankErr is an error that occurs whenever an illegal ranked type is specified.Examples(s): foo :: (a,b) -> (a~b => t) -> (a,b) foo p x = pTest cases: - ghci should_runT15806 - indexed-types should_fail SimpleFail15 - typecheck should_failT11355 - typecheck should_failT12083a - typecheck should_failT12083b - typecheck should_failT16059c - typecheck should_failT16059e - typecheck should_failT17213 - typecheck should_failT18939_Fail - typecheck should_failT2538 - typecheck should_failT5957 - typecheck should_failT7019 - typecheck should_failT7019a - typecheck should_failT7809 - typecheck should_failT9196 - typecheck should_failtcfail127 - typecheck should_failtcfail184 - typecheck should_failtcfail196 - typecheck should_fail tcfail197ghcTcRnSimplifiableConstraint is a warning triggered by the occurrence of a simplifiable constraint in a context, when MonoLocalBinds is not enabled.Examples(s): simplifiableEq :: Eq (a, a) => a -> a -> Bool simplifiableEq = undefined#Test cases: - indexed-typesshould_compileT15322 - partial-sigsshould_compile%SomethingShowable - typecheckshould_compileT13526ghcTcRnArityMismatch is an error that occurs when a type constructor is supplied with fewer arguments than required.'Examples(s): f Left = undefinedTest cases: - backpack should_failbkpfail25.bkp - ghci should_failT16013 - ghci should_failT16287 - indexed-types should_failBadSock - indexed-types should_fail3T9433 - module/mod60 - ndexed-types should_failT2157 - parser should_fail(ParserNoBinaryLiterals2 - parser should_fail(ParserNoBinaryLiterals3 - patsyn should_fail5T12819 - polykinds/T10516 - typecheck should_failT12124 - typecheck should_failT15954 - typecheck should_failT16874 - typecheck should_failtcfail100 - typecheck should_failtcfail101 - typecheck should_failtcfail107 - typecheck should_failtcfail129 - typecheck should_fail tcfail187ghcTcRnIllegalClassInstance is a collection of diagnostics that arise from an invalid class or family instance declaration.See .ghcTcRnMonomorphicBindings is a warning (controlled by -Wmonomorphism-restriction) that arises when the monomorphism restriction applies to the given bindings.Examples(s): {-# OPTIONS_GHC -Wmonomorphism-restriction #-}bar = 10foo :: Int foo = bar&main :: IO () main = print foo)The example above emits the warning (for bar), because without monomorphism restriction the inferred type for bar: is 'bar :: Num p => p'. This warning tells us that if= we were to enable '-XMonomorphismRestriction' we would make bar less polymorphic, as its type would become 'bar :: Int', so GHC warns us about that.Test cases: typecheckshould_compileT13785ghcTcRnOrphanInstance is a warning (controlled by -Worphans) that arises when a typeclass instance or family instance is an "orphan", i.e. if it appears in a module in which neither the class/family nor the type being instanced are declared in the same module.Examples(s): NoneTest cases: warningsshould_compile!T9178 typecheckshould_compileT4912ghcTcRnFunDepConflict is an error that occurs when there are functional dependencies conflicts between instance declarations.Examples(s): NoneTest cases: typecheck should_fail!T2307 typecheck should_fail%tcfail096 typecheck should_fail tcfail202ghcTcRnDupInstanceDecls is an error that occurs when there are duplicate instance declarations.Examples(s): class Foo a where foo :: a -> Int)instance Foo Int where foo = id/instance Foo Int where foo = const 42Test cases: cabalT12733"T12733 typecheck should_fail%tcfail035 typecheck should_fail$tcfail023 backpack should_fail%bkpfail18 typecheck should_fail+TcNullaryTCFail typecheck should_fail%tcfail036 typecheck should_failtcfail073 module/mod51 module/mod52 module/mod44ghcTcRnConflictingFamInstDecls is an error that occurs when there are conflicting family instance declarations.Examples(s): None.Test cases: indexed-types should_fail4ExplicitForAllFams4b indexed-types should_fail&NoGood indexed-types should_fail$Over indexed-types should_fail1OverDirectThisMod indexed-types should_fail3OverIndirectThisMod indexed-types should_fail-SimpleFail11a indexed-types should_fail-SimpleFail11b indexed-types should_fail-SimpleFail11c indexed-types should_fail-SimpleFail11d indexed-types should_fail,SimpleFail2a indexed-types should_fail,SimpleFail2b indexed-types should_fail-T13092/T13092 indexed-types should_fail/T13092c/T13092c indexed-types should_fail&T14179 indexed-types should_fail&T2334A indexed-types should_fail%T2677 indexed-types should_fail&T3330b indexed-types should_fail%T4246 indexed-types should_fail&T7102a indexed-types should_failT9371 polykinds/T7524 typecheck should_failUnliftedNewtypesOverlapghcTcRnFamInstNotInjective is a collection of errors that arise from a type family equation violating the injectivity annotation.See .ghcTcRnBangOnUnliftedType is a warning (controlled by -Wredundant-strictness-flags) that occurs when a strictness annotation is applied to an unlifted type.Example(s): data T = MkT !Int# -- Strictness flag has no effect on unlifted typesTest cases: typecheckshould_compile"T20187a typecheckshould_compileT20187bghcTcRnLazyBangOnUnliftedType is a warning (controlled by -Wredundant-strictness-flags) that occurs when a lazy annotation is applied to an unlifted type.Example(s): data T = MkT ~Int# -- Lazy flag has no effect on unlifted typesTest cases: typecheckshould_compile"T21951a typecheckshould_compileT21951bghcTcRnMultipleDefaultDeclarations is an error that occurs when a module has more than one default declaration.Example: default (Integer, Int) default (Double, Float) -- 2nd default declaration not allowedText cases: module/mod58ghcTcRnBadDefaultType is an error that occurs when a type used in a default declaration does not have an instance for any of the applicable classes..Example(s): data Foo default (Foo)Test cases: typecheck should_failT11974bghcTcRnPatSynBundledWithNonDataCon is an error that occurs when a module's export list bundles a pattern synonym with a type that is not a proper `data` or  `newtype` construction.Example(s): module Foo (MyClass(.., P)) where pattern P = Nothing class MyClass a where foo :: a -> IntTest cases: patsyn should_fail export-classghcTcRnPatSynBundledWithWrongType is an error that occurs when the export list of a module has a pattern synonym bundled with a type that does not match the type of the pattern synonym.Example(s): module Foo (R(P,x)) where data Q = Q Int data R = R pattern P{x} = Q xText cases: patsyn should_fail)export-ps-rec-sel patsyn should_fail+export-type-synonym patsyn should_fail export-typeghc0TcRnDupeModuleExport is a warning controlled by -Wduplicate-exports that occurs when a module appears more than once in an export list.Example(s): module Foo (module Bar, module Bar) import BarText cases: NoneghcTcRnExportedModNotImported is an error that occurs when an export list contains a module that is not imported.Example(s): NoneText cases: module/mod135 module/mod8 rename should_fail#rnfail028 backpack should_fail bkpfail48ghcTcRnNullExportedModule is a warning controlled by -Wdodgy-exports that occurs when an export list contains a module that has no exports.Example(s): module Foo (module Bar) where import Bar ()Test cases: NoneghcTcRnMissingExportList is a warning controlled by -Wmissing-export-lists that occurs when a module does not have an explicit export list.Example(s): NoneTest cases: typecheck should_failMissingExportList03ghcTcRnExportHiddenComponents is an error that occurs when an export contains constructor or class methods that are not visible.Example(s): NoneTest cases: NoneghcTcRnDuplicateExport is a warning (controlled by -Wduplicate-exports) that occurs when an identifier appears in an export list more than once.Example(s): NoneTest cases: module/MultiExport module/mod128 module/mod14 module/mod5 overloadedrecflds should_fail(DuplicateExports patsynshould_compileT11959ghcTcRnExportedParentChildMismatch is an error that occurs when an export is bundled with a parent that it does not belong toExample(s): module Foo (T(a)) where data T a = TrueTest cases: module/T11970 module/T11970B module/mod17 module/mod3 overloadedrecflds should_failNoParentghcTcRnConflictingExports is an error that occurs when different identifiers that have the same name are being exported by a module.Example(s): module Foo (Bar.f, module Baz) where import qualified Bar (f) import Baz (f)Test cases: module/mod131 module/mod142 module/mod143 module/mod144 module/mod145 module/mod146 module/mod150 module/mod155 overloadedrecflds should_fail)T14953 overloadedrecflds should_fail/overloadedrecfldsfail10 rename should_fail!rnfail029 rename should_fail$rnfail040 typecheck should_fail#T16453E2 typecheck should_fail$tcfail025 typecheck should_fail tcfail026ghcTcRnDuplicateFieldExport is an error that occurs when a module exports multiple record fields with the same name, without enabling DuplicateRecordFields.Example:module M1 where data D1 = MkD1 { foo :: Int } module M2 where data D2 = MkD2 { foo :: Int } module M ( D1(..), D2(..) ) where import module M1 import module M2Test case: overloadedrecflds should_failoverloadedrecfldsfail10ghcTcRnAmbiguousRecordUpdate is a warning, controlled by -Wambiguous-fields, which occurs when a user relies on the type-directed disambiguation mechanism to disambiguate a record update. This will not be supported by -XDuplicateRecordFields in future releases. Example(s):data Person = MkPerson { personId :: Int, name :: String } data Address = MkAddress { personId :: Int, address :: String } bad1 x = x { personId = 4 } :: Person -- ambiguous bad2 (x :: Person) = x { personId = 4 } -- ambiguous good x = (x :: Person) { personId = 4 } -- not ambiguousTest cases: overloadedrecflds should_failoverloadedrecfldsfail06ghcTcRnMissingFields is a warning controlled by -Wmissing-fields occurring when the intialisation of a record is missing one or more (lazy) fields.Example(s): data Rec = Rec { a :: Int, b :: String, c :: Bool } x = Rec { a = 1, b = "two" } -- missing field cTest cases: deSugarshould_compileT13870 deSugarshould_compileds041 patsynshould_compileT11283 renameshould_compileT5334 renameshould_compileT12229 renameshould_compile T5892a warnings should_fail WerrorFail2ghcTcRnFieldUpdateInvalidType is an error occurring when an updated field's type mentions something that is outside the universally quantified variables of the data constructor, such as an existentially quantified type.Example(s): data X = forall a. MkX { f :: a } x = (MkX ()) { f = False }Test cases: patsyn should_fail+records-exquant typecheck should_failT3323ghcTcRnMissingStrictFields is an error occurring when a record field marked as strict is omitted when constructing said record.Example(s): data R = R { strictField :: !Bool, nonStrict :: Int } x = R { nonStrict = 1 }Test cases: typecheck should_fail T18869 typecheck should_fail#tcfail085 typecheck should_fail tcfail112ghcTcRnAmbiguousFieldInUpdate is an error that occurs when a field in a record update clashes with another field or top-level function of the same name, and the user hasn't enabled -XDisambiguateRecordFields.Example:{-# LANGUAGE NoFieldSelectors #-} {-# LANGUAGE NoDisambiguateRecordFields #-} module M wheredata A = MkA { fld :: Int }!fld :: Bool fld = Falsef r = r { fld = 3 }ghcTcRnBadRecordUpdate is an error when a regular (non-overloaded) record update cannot be pinned down to any one parent.4The problem with the record update is stored in the  field. Example(s):data R1 = R1 { x :: Int } data R2 = R2 { x :: Int } update r = r { x = 1 } -- ambiguousdata R1 = R1 { x :: Int, y :: Int } data R2 = R2 { y :: Int, z :: Int } update r = r { x = 1, y = 2, z = 3 } -- no parent has all the fieldsTest cases: overloadedrecflds should_fail9overloadedrecfldsfail01 overloadedrecflds should_fail9overloadedrecfldsfail01 overloadedrecflds should_failoverloadedrecfldsfail14ghcTcRnStaticFormNotClosed is an error pertaining to terms that are marked static using the -XStaticPointers extension but which are not closed terms.Example(s): f x = static xTest cases: rename should_fail-RnStaticPointersFail01 rename should_failRnStaticPointersFail03ghcTcRnUselessTypeable is a warning (controlled by -Wderiving-typeable) that occurs when trying to derive an instance of the  class. Deriving  is no longer necessary (hence the "useless") as all types automatically derive  in modern GHC versions.Example(s): None.Test cases: warningsshould_compileDerivingTypeableghcTcRnDerivingDefaults is a warning (controlled by -Wderiving-defaults) that occurs when both DeriveAnyClass and GeneralizedNewtypeDeriving2 are enabled, and therefore GHC defaults to DeriveAnyClass/, which might not be what the user wants.Example(s): None.Test cases: typecheckshould_compile!T15839a derivingshould_compileT16179ghcTcRnNonUnaryTypeclassConstraint is an error that occurs when GHC encounters a non-unary constraint when trying to derive a typeclass.Example(s): class A deriving instance A data B deriving A -- We cannot derive A, is not unary (i.e. 'class A a').Test cases: deriving should_failT7959 deriving should_fail$drvfail005 deriving should_fail$drvfail009 deriving should_fail drvfail006ghcTcRnPartialTypeSignatures is a warning (controlled by -Wpartial-type-signatures) that occurs when a wildcard '_' is found in place of a type in a signature or a type class derivation5Example(s): foo :: _ -> Int foo = ...!deriving instance _ => Eq (Foo a)Test cases: dependentshould_compile!T11241 dependentshould_compile!T15076 dependentshould_compile#T14880-2 typecheckshould_compile!T17024 typecheckshould_compile$T10072 partial-sigs should_fail(TidyClash2 partial-sigs should_fail.Defaulting1MROff partial-sigs should_fail:WildcardsInPatternAndExprSig partial-sigs should_fail$T10615 partial-sigs should_fail%T14584a partial-sigs should_fail'TidyClash partial-sigs should_fail$T11122 partial-sigs should_fail$T14584 partial-sigs should_fail$T10045 partial-sigs should_fail;PartialTypeSignaturesDisabled partial-sigs should_fail$T10999 partial-sigs should_failExtraConstraintsWildcardInExpressionSignature partial-sigs should_failExtraConstraintsWildcardInPatternSplice partial-sigs should_fail4WildcardInstantiations partial-sigs should_run$T15415 partial-sigsshould_compile$T10463 partial-sigsshould_compile%T15039a partial-sigsshould_compile%T16728b partial-sigsshould_compile%T15039c partial-sigsshould_compile$T10438 partial-sigsshould_compile)SplicesUsed partial-sigsshould_compile$T18008 partial-sigsshould_compile*ExprSigLocal partial-sigsshould_compile%T11339a partial-sigsshould_compile$T11670 partial-sigsshould_compile;WarningWildcardInstantiations partial-sigsshould_compile$T16728 partial-sigsshould_compile$T12033 partial-sigsshould_compile%T15039b partial-sigsshould_compile$T10403 partial-sigsshould_compile$T11192 partial-sigsshould_compile%T16728a partial-sigsshould_compile)TypedSplice partial-sigsshould_compile%T15039d partial-sigsshould_compile$T11016 partial-sigsshould_compile'T13324_compile2 linear should_failLinearPartialSig polykinds/T14265 polykinds/T14172ghcTcRnCannotDeriveInstance is an error that occurs every time a typeclass instance can't be derived. The 9 will contain the specific reason this error arose.Example(s): None.Test cases: genericsT10604.T10604_no_PolyKinds deriving should_fail%drvfail009 deriving should_fail+drvfail-functor2 deriving should_fail'T10598_fail3 deriving should_fail-deriving-via-fail2 deriving should_fail,deriving-via-fail deriving should_failT16181ghcTcRnLazyGADTPattern is an error that occurs when a user writes a nested GADT pattern match inside a lazy (~) pattern.Test case: gadt/lazypatghcTcRnArrowProcGADTPattern is an error that occurs when a user writes a GADT pattern inside arrow proc notation.Test case: arrows should_fail arrowfail004.ghcTcRnForallIdentifier is a warning (controlled with -Wforall-identifier) that occurs when a definition uses forall as an identifier.2Example: forall x = () g forall = ()2Test cases: T20609 T20609a T20609b T20609c T20609dghcTcRnCapturedTermName is a warning (controlled by -Wterm-variable-capture) that occurs when an implicitly quantified type variable's name is already used for a term. Example: a = 10 f :: a -> aTest cases: T22513a T22513b T22513c T22513d T22513e T22513f T22513g T22513h T22513ighcTcRnTypeMultipleOccurenceOfBindVar is an error that occurs if a bound type variable's name is already in use. Example: f :: forall a. ... f (MkT @a ...) = ...Test cases: TyAppPat_ScopedTyVarConflict TyAppPat_NonlinearMultiPat TyAppPat_NonlinearMultiAppPatghcTcRnBindMultipleVariables is an error that occurs in the case of multiple occurrences of a bound variable. Example: foo (MkFoo @(a,a) ...) = ...Test case: typecheck should_failTyAppPat_NonlinearSinglePatghcTcRnTypeEqualityOutOfScope is a warning (controlled by -Wtype-equality-out-of-scope) that occurs when the type equality (a ~ b) is not in scope.Test case: warningsshould_compileT18862bghcTcRnTypeEqualityRequiresOperators is a warning (controlled by -Wtype-equality-requires-operators) that occurs when the type equality (a ~ b) is used without the TypeOperators extension.Example: {-# LANGUAGE NoTypeOperators #-} f :: (a ~ b) => a -> bTest case: T18862aghcTcRnIllegalTypeOperator is an error that occurs when a type operator is used without the TypeOperators extension.Example: {-# LANGUAGE NoTypeOperators #-} f :: Vec a n -> Vec a m -> Vec a (n + m)Test case: T12811ghcTcRnIllegalTypeOperatorDecl is an error that occurs when a type or class operator is declared without the TypeOperators extension..See Note [Type and class operator definitions]Example: {-# LANGUAGE Haskell2010 #-} {-# LANGUAGE MultiParamTypeClasses #-}module T3265 wheredata a :+: b = Left a | Right bclass a :*: b where {}Test cases: T3265, tcfail173ghcTcRnGADTMonoLocalBinds is a warning controlled by -Wgadt-mono-local-binds that occurs when pattern matching on a GADT when -XMonoLocalBinds is off.Example(s): NoneTest cases: T20485, T20485aghcThe TcRnNotInScope constructor is used for various not-in-scope errors. See Ê for more details. ghcTcRnTermNameInType is an error that occurs when a term-level identifier is used in a type.Example:import qualified Prelude4bad :: Prelude.fst (Bool, Float) bad = FalseTest cases: T21605{c,d}ghcTcRnUntickedPromotedThing is a warning (controlled with -Wunticked-promoted-constructors) that is triggered by an unticked occurrence of a promoted data constructor. Examples:data A = MkA type family F (a :: A) where { F MkA = Bool }type B = [ Int, Bool ]Test cases: T9778, T19984.ghcTcRnIllegalBuiltinSyntax is an error that occurs when built-in syntax appears in an unexpected location, e.g. as a data constructor or in a fixity declaration. Examples: infixl 5 : data P = (,)/Test cases: rnfail042, T14907b, T15124, T15233.ghcTcRnWarnDefaulting is a warning (controlled by -Wtype-defaults) that is triggered whenever a Wanted typeclass constraint is solving through the defaulting of a type variable.Example:one = show 1 -- We get Wanteds Show a0, Num a0, and default a0 to Integer.Test cases: none (which are really specific to defaulting), but see e.g. tcfail204.ghc6TcRnIncorrectNameSpace is an error that occurs when a  is used in the incorrect  NameSpace, e.g. a type constructor or class used in a term, or a term variable used in a type.Example: f x = IntTest cases: T18740a, T20884.ŽghcTcRnForeignImportPrimExtNotSet is an error occurring when a foreign import is declared using the prim calling convention without having turned on the -XGHCForeignImportPrim extension.Example(s): foreign import prim "foo" foo :: ByteArray# -> (# Int#, Int# #)Test cases: ffi should_failT20116ÎghcTcRnForeignImportPrimSafeAnn is an error declaring that the safe/unsafe annotation should not be used with prim foreign imports.Example(s): foreign import prim unsafe "my_primop_cmm" :: ...Test cases: NoneĎghcTcRnForeignFunctionImportAsValue is an error explaining that foreign value) imports cannot have function types.Example(s): foreign import capi "math.h value sqrt" f :: CInt -> CIntTest cases: ffi should_failcapi_value_functionŎghc IO ())Test cases: ffishould_compileT1357ƎghcTcRnIllegalForeignDeclBackend is an error occurring when a foreign import declaration is not compatible with the code generation backend being used.Example(s): NoneTest cases: NoneǎghcTcRnUnsupportedCallConv informs the user that the calling convention specified for a foreign export declaration is not compatible with the target platform. It is a warning controlled by !-Wunsupported-calling-conventions in the case of stdcall& but is otherwise considered an error.Example(s): NoneTest cases: NoneȎghcTcRnIllegalForeignType is an error for when a type appears in a foreign function signature that is not compatible with the FFI.Example(s): NoneTest cases: ffi should_failT3066 ffi should_failccfail004 ffi should_failT10461 ffi should_failT7506 ffi should_fail!T5664 safeHaskellghcip6 safeHaskell safeLanguageSafeLang08 ffi should_failT16702 linear should_failLinearFFI ffi should_failT7243ɎghcTcRnInvalidCIdentifier indicates a C identifier that is not valid.Example(s): foreign import prim safe "not valid" cmm_test2 :: Int# -> Int#Test cases: th/T10638ʎghcTcRnExpectedValueId is an error occurring when something that is not a value identifier is used where one is expected.Example(s): noneTest cases: noneˎghcTcRnRecSelectorEscapedTyVar is an error indicating that a record field selector containing an existential type variable is used as a function rather than in a pattern match.Example(s): data Rec = forall a. Rec { field :: a } field (Rec True)Test cases: patsyn should_fail)records-exquant typecheck should_failT3176̎ghcTcRnPatSynNotBidirectional is an error for when a non-bidirectional pattern synonym is used as a constructor.Example(s): pattern Five :: Int pattern Five <- 5 five = FiveTest cases: patsyn should_fail,records-no-uni-update patsyn should_failrecords-no-uni-update2͎ghcTcRnIllegalDerivingItem is an error for when something other than a type class appears in a deriving statement.(Example(s): data X = X deriving IntTest cases: deriving should_failT5922ΎghcTcRnUnexpectedAnnotation indicates the erroroneous use of an annotation such as strictness, laziness, or unpacking.Example(s): data T = T { t :: Maybe {-# UNPACK #-} Int } data C = C { f :: !IntMap Int }Test cases: parser should_fail,unpack_inside_type typecheck should_failT7210ώghcTcRnIllegalRecordSyntax is an error indicating an illegal use of record syntax.0Example(s): data T = T Int { field :: Int }Test cases: rename should_failT7943 rename should_failT9077ЎghcTcRnInvalidVisibleKindArgument is an error for a kind application on a target type that cannot accept it.Example(s): bad :: Int Type bad = 1 type Foo :: forall a {b}. a -> b -> b type Foo x y = y type Bar = Foo Bool @Int True 42Test cases: indexed-types should_fail&T16356_Fail3 typecheck should_fail.ExplicitSpecificity7 typecheck should_fail!T12045b typecheck should_fail!T12045c typecheck should_fail!T15592a typecheck should_failT15816юghcTcRnTooManyBinders is an error for a type constructor that is declared with more arguments then its kind specifies.Example(s): type T :: Type -> (Type -> Type) -> Type data T a (b :: Type -> Type) x1 (x2 :: Type -> Type)Test cases: saks should_fail saks_fail008ҎghcTcRnDifferentNamesForTyVar is an error that indicates different names being used for the same type variable.Example(s): data SameKind :: k -> k -> * data Q (a :: k1) (b :: k2) c = MkQ (SameKind a b)Test cases: polykinds/T11203 polykinds/T11821a saks should_fail T20916 typecheck should_fail!T17566b typecheck should_failT17566cӎghcTcRnDisconnectedTyVar is an error for a data declaration that has a kind signature, where the implicitly-bound type type variables can't be matched up unambiguously with the ones from the signature. See Note [Disconnected type variables] in GHC.Tc.Gen.HsType.ԎghcTcRnInvalidReturnKind is an error for a data declaration that has a kind signature with an invalid result kind..Example(s): data family Foo :: ConstraintTest cases: typecheck should_fail!T14048b typecheck should_fail:UnliftedNewtypesConstraintFamily typecheck should_fail T12729 typecheck should_fail T15883 typecheck should_fail!T16829a typecheck should_fail!T16829b typecheck should_fail4UnliftedNewtypesNotEnabled typecheck should_fail tcfail079ՎghcTcRnUnexpectedKindVar is an error that occurs when the user tries to use kind variables without -XPolyKinds.0Example: f :: forall k a. Proxy (a :: k)Test cases: polykinds/BadKindVar polykinds/T14710 saks should_failT16722֎ghcTcRnIllegalKind is used for a various illegal kinds errors includingExample: type T :: forall k. Type -- without emabled -XPolyKindsTest cases: polykinds/T16762b׎ghcTcRnClassKindNotConstraint is an error for a type class that has a kind that is not equivalent to Constraint.6Example(s): type C :: Type -> Type class C aTest cases: saks should_failT16826؎ghcTcRnUnpromotableThing is an error that occurs when the user attempts to use the promoted version of something which is not promotable.Example(s): data T :: T -> * data X a where MkX :: Show a => a -> X a foo :: Proxy ('MkX 'True) foo = ProxyTest cases: dependent should_fail'PromotedClass dependent should_fail&T14845_fail1 dependent should_fail&T14845_fail2 dependent should_fail T15215 dependent should_fail!T13780c dependent should_failT15245 polykinds/T5716 polykinds/T5716a polykinds/T6129 polykinds/T7433 patsyn should_failT11265 patsyn should_failT9161-1 patsyn should_fail!T9161-2 dependent should_failSelfDep polykinds/PolyKinds06 polykinds/PolyKinds07 polykinds/T13625 polykinds/T15116 polykinds/T15116a saks should_failT16727a saks should_failT16727b rename should_failT12686 rename should_failT16635a rename should_failT16635b rename should_failT16635cَghcTcRnMatchesHaveDiffNumArgs is an error occurring when something has matches that have different numbers of arguments2Example(s): foo x = True foo x y = FalseTest cases: rename should_fail#rnfail045 typecheck should_fail T20768_failڎghcTcRnUnexpectedPatSigType is an error occurring when there is a type signature in a pattern without -XScopedTypeVariables extension%Examples: f (a :: Bool) = ...Test case: rename should_failT11663ێghcTcRnIllegalKindSignature is an error occuring when there is a kind signature without -XKindSignatures extension,Examples: data Foo (a :: Nat) = ....Test case: parser should_fail readFail036܎ghcTcRnDataKindsError is an error occurring when there is an illegal type or kind, probably required -XDataKinds and is used without the enabled extension. Examples:type Foo = [Nat, Char]type Bar = [Int, String]Test cases: linear should_failT18888 polykinds/T7151 th/TH_Promoted1Tuple typecheck should_fail tcfail094ݎghcTcRnCannotBindScopedTyVarInPatSig is an error stating that scoped type variables cannot be used in pattern bindings.!Example(s): let (x :: a) = 5Test cases: typecheckshould_compiletc141ގghcTcRnCannotBindTyVarsInPatBind is an error for when type variables are introduced in a pattern binding&Example(s): Just @a x = Just TrueTest cases: typecheck should_fail1TyAppPat_PatternBinding typecheck should_fail"TyAppPat_PatternBindingExistentialߎghcTcRnTooManyTyArgsInConPattern is an error occurring when a constructor pattern has more than the expected number of type argumentsExample(s): f (Just Int  Bool x) = xTest cases: typecheck should_fail*TyAppPat_TooMany typecheck should_failT20443bghcTcRnMultipleInlinePragmas is a warning signifying that multiple inline pragmas reference the same definition.Example(s): {-# INLINE foo #-} {-# INLINE foo #-} foo :: Bool -> Bool foo = idTest cases: noneghcTcRnUnexpectedPragmas is a warning that occurs when unexpected pragmas appear in the source. Example(s):Test cases: noneghcTcRnNonOverloadedSpecialisePragma is a warning for a specialise pragma being placed on a definition that is not overloaded.Example(s): {-# SPECIALISE foo :: Bool -> Bool #-} foo :: Bool -> Bool foo = idTest cases: simplCoreshould_compileT8537 typecheckshould_compileT10504ghcTcRnSpecialiseNotVisible is a warning that occurs when the subject of a SPECIALISE pragma has a definition that is not visible from the current module.Example(s): noneTest cases: noneghcTcRnPragmaWarning is a warning that can happen when usage of something is warned or deprecated by pragma.Test cases: DeprU T5281 T5867 rn050 rn066 (here is a warning, not deprecation) T3303ghcTcRnDifferentExportWarnings is an error that occurs when the warning messages for exports of a name differ between several export items.(Test case: DifferentExportWarningsghcTcRnIncompleteExportWarnings is a warning (controlled by -Wincomplete-export-warnings) that occurs when some of the exports of a name do not have an export warning and some do Test case: ExportWarnings6ghcTcRnIllegalHsigDefaultMethods is an error that occurs when a binding for a class default method is provided in a Backpack signature file.Test case: bkpfail40ghcTcRnHsigFixityMismatch is an error indicating that the fixity decl in a Backpack signature file differs from the one in the source file for the same operator.&Test cases: bkpfail37, bkpfail38ghcTcRnHsigShapeMismatch is a group of errors related to mismatches between backpack signatures.ghcTcRnHsigMissingModuleExport is an error indicating that a module doesn't export a name exported by its signature.Test cases: bkpfail01, bkpfail05, bkpfail09, bkpfail16, bkpfail35, bkpcabal06ghcTcRnBadGenericMethod This test ensures that if you provide a "more specific" type signatures for the default method, you must also provide a binding.0Example: {-# LANGUAGE DefaultSignatures #-}class C a where meth :: a default meth :: Num a => a meth = 0Test case: typecheck should_failMissingDefaultMethodBinding.hsghcTcRnWarningMinimalDefIncomplete is a warning that one must specify which methods must be implemented by all instances.Example: class Cheater a where -- WARNING LINE cheater :: a {-# MINIMAL #-} -- warning!Test case: warningsminimalWarnMinimal.hs:ghcTcRnIllegalQuasiQuotes is an error that occurs when a quasi-quote is used without the QuasiQuotes extension.Example:foo = [myQuoter|x y z|]Test cases: none; the parser fails to parse this if QuasiQuotes is off.ghcTcRnTHError is a family of errors involving Template Haskell. See .ghcTcRnDefaultMethodForPragmaLacksBinding is an error that occurs when a default method pragma is missing an accompanying binding.Test cases: typecheck should_failT5084.hs typecheck should_failT2354.hsghcTcRnIgnoreSpecialisePragmaOnDefMethod is a warning that occurs when a specialise pragma is put on a default method.Test cases: noneghcTcRnBadMethodErr is an error that happens when one attempts to provide a method in a class instance, when the class doesn't have a method by that name.Test case: th/T12387ghc:TcRnIllegalNewtype is an error that occurs when a newtype:#Does not have exactly one field, oris non-linear, or is a GADT, or+has a context in its constructor's type, or declaration occurs without the TypeOperators extension.!See Note [Type data declarations]Test case: type-data should_fail TDNoPragmaghc3TcRnTypeDataForbids is an error that occurs when a  type data declaration contains data4 declaration features that are forbidden in a  type data declaration.!See Note [Type data declarations]Test cases: type-data should_failTDDeriving type-data should_failTDRecordsGADT type-data should_failTDRecordsH98 type-data should_fail!TDStrictnessGADT type-data should_failTDStrictnessH98ghcTcRnUnsatisfiedMinimalDef is a warning that occurs when a class instance is missing methods that are required by the minimal definition.Example: class C a where foo :: a -> a instance C () -- | foo needs to be defined hereTest cases: typecheckprog001$typecheck.prog001 typecheckshould_compiletc126 typecheckshould_compileT7903 typecheckshould_compiletc116 typecheckshould_compiletc175 typecheckshould_compileHasKey typecheckshould_compiletc125 typecheckshould_compiletc078 typecheckshould_compiletc161 typecheck should_failT5051 typecheckshould_compileT21583 backpackshould_compilebkp47 backpack should_failbkpfail25 parsershould_compileT2245 parsershould_compileread014 indexed-typesshould_compileClass3 indexed-typesshould_compileSimple2 indexed-types should_failT7862 derivingshould_compilederiving-1935 derivingshould_compileT9968a derivingshould_compiledrv003 derivingshould_compileT4966 derivingshould_compileT14094 perfcompilerT15304 warningsminimalWarnMinimal simplCoreshould_compilesimpl020 deSugarshould_compileT14546d ghciscriptsT5820 ghciscriptsghci019ghc is an error that happens when a method in a class instance is given a type signature, but the user has not enabled the  InstanceSigs extension.Test case: module/mod45ghcTcRnNoRebindableSyntaxRecordDot is an error triggered by an overloaded record update without RebindableSyntax enabled. Example(s):Test cases: parser should_failRecordDotSyntaxFail5ghcTcRnNoFieldPunsRecordDot is an error triggered by the use of record field puns in an overloaded record update without enabling NamedFieldPuns./Example(s): print $ a{ foo.bar.baz.quux }Test cases: parser should_failRecordDotSyntaxFail12ghcTcRnIllegalStaticExpression is an error thrown when user creates a static pointer via TemplateHaskell without enabling the StaticPointers extension. Example(s):Test cases: th/T14204ghcTcRnListComprehensionDuplicateBinding is an error triggered by duplicate let-bindings in a list comprehension.2Example(s): [ () | let a = 13 | let a = 17 ]Test cases: typecheck should_fail tcfail092ghcTcRnEmptyStmtsGroup is an error triggered by an empty list of statements in a statement block. For more information, see  Example(s):  () | then ()do proc () -> doTest cases: rename should_failRnEmptyStatementGroup1ghcTcRnLastStmtNotExpr is an error caused by the last statement in a statement block not being an expression. Example(s):do x <- pure () do let x = 5Test cases: rename should_failT6060 parser should_failT3811g parser should_fail readFail028ghcTcRnUnexpectedStatementInContext is an error when a statement appears in an unexpected context (e.g. an arrow statement appears in a list comprehension). Example(s):Test cases: parser should_fail#readFail042 parser should_fail#readFail038 parser should_fail readFail043ghcTcRnIllegalTupleSection is an error triggered by usage of a tuple section without enabling the TupleSections extension.Example(s): (5,)Test cases: rename should_fail rnfail056ghcTcRnIllegalImplicitParameterBindings is an error triggered by binding an implicit parameter in an mdo block.,Example(s): mdo { let { ?x = 5 }; () }Test cases: rename should_failRnImplicitBindInMdoNotationghcTcRnSectionWithoutParentheses is an error triggered by attempting to use an operator section without parentheses.Example(s): ( x, ())Test cases: rename should_failT2490 rename should_failT5657ghcTcRnBindingOfExistingName is an error triggered by an attempt to rebind built-in syntax, punned list or tuple syntax, or a name quoted via Template Haskell. Examples:data [] data (->) $(pure [ValD (VarP 'succ) (NormalB (ConE 'True)) []])Test cases: rename should_failT14907b rename should_failT22839 rename should_fail$rnfail042 th/T13968ghcTcRnMultipleFixityDecls is an error triggered by multiple fixity declarations for the same operator. Example(s):infixr 6 $$ infixl 4 $$Test cases: rename should_failRnMultipleFixityFailghcTcRnIllegalPatternSynonymDecl is an error thrown when a user defines a pattern synonyms without enabling the PatternSynonyms extension.Example:%pattern O :: Int pattern O = 0Test cases: rename should_failRnPatternSynonymFailghcTcRnIllegalClassBinding is an error triggered by a binding in a class or instance declaration of an illegal form. Examples:class ZeroOne a where zero :: a one :: a instance ZeroOne Int where (zero,one) = (0,1))class C a where pattern P = ()0Test cases: module/mod48 patsyn should_failT9705-1 patsyn should_fail"T9705-2 typecheck should_fail tcfail021ghcTcRnOrphanCompletePragma is an error triggered by a {-# COMPLETE #-} pragma which does not mention any data constructors or pattern synonyms defined in the current module.Test cases: patsyn should_failT13349ghcTcRnEmptyCase is an error thrown when a user uses a case expression with an empty list of alternatives without enabling the EmptyCase extension. Example(s): case () ofTest cases: rename should_failRnEmptyCaseFailghcTcRnNonStdGuards is a warning thrown when a user uses non-standard guards (e.g. patterns in guards) without enabling the PatternGuards extension. More realistically: the user has explicitly disabled PatternGuards, as it is enabled by default with `-XHaskell2010`. Example(s):f | 5 <- 2 + 3 = ...Test cases: renameshould_compilern049ghcTcRnDuplicateSigDecl is an error triggered by two or more signatures for one entity. Examples::f :: Int -> Bool f :: Int -> Bool f _ = True9g x = x {-# INLINE g #-} {-# NOINLINE g #-}pattern P = () {-# COMPLETE P #-} {-# COMPLETE P #-}0Test cases: module/mod68 parser should_fail(OpaqueParseFail4 patsyn should_failT12165 rename should_fail!rnfail048 rename should_failT5589 rename should_failT7338 rename should_failT7338aghcTcRnMisplacedSigDecl is an error triggered by the pragma application in the wrong context, like MINIMAL applied to a function or  SPECIALIZE to an instance.Example: f x = x {-# MINIMAL f #-}Test cases: rename should_fail T18138 warningsminimalWarnMinimalFail1ghcTcRnUnexpectedDefaultSig is an error thrown when a user uses default signatures without enabling the DefaultSignatures extension.Example:class C a where m :: a default m :: Num a => a m = 0Test cases: rename should_failRnDefaultSigFailghcTcRnDuplicateMinimalSig is an error triggered by two or more minimal signatures for one type class.Example:class C where f :: () {-# MINIMAL f #-} {-# MINIMAL f #-}Test cases: rename should_failRnMultipleMinimalPragmaFailghc is an error that occurs when invisible type variable binders in type declarations are used without enabling the TypeAbstractions extension.Example: {-# LANGUAGE NoTypeAbstractions #-} -- extension disabled data T  k (a :: k) <(j :: Type) (b :: j) ^^ ^^^^^^^^^^^^Test case: T22560_fail_extghc is an error that occurs when an invisible type variable binder has no corresponding  forall k.- quantifier in the standalone kind signature.Example: type P :: forall a -> Type data P @a = MkP'Test cases: T22560_fail_a T22560_fail_bghc is an error triggered by attempting to use an invisible type variable binder in a type declaration without a standalone kind signature or a complete user-supplied kind.;Example: data T @k (a :: k) -- No CUSK, no SAKSTest case: T22560_fail_dghcTcRnDeprecatedInvisTyArgInConPat is a warning that triggers on type applications in constructor patterns when the user has not enabled '-XTypeAbstractions' but instead has enabled both '-XScopedTypeVariables' and '-XTypeApplications'.This warning is a deprecation mechanism that is scheduled until GHC 9.12.ghc5TcRnLoopySuperclassSolve is a warning, controlled by -Wloopy-superclass-solve, that is triggered when GHC solves a constraint in a possibly-loopy way, violating the class instance termination rules described in the section "Undecidable instances and loopy superclasses" of the user's guide.Example:class Foo f class Foo f => Bar f g instance Bar f f => Bar f (h k)0Test cases: T20666, T20666{a,b}, T22891, T22912.ghcTcRnUnexpectedStandaloneDerivingDecl is an error thrown when a user uses standalone deriving without enabling the StandaloneDeriving extension.Example:deriving instance Eq FooTest cases: rename should_failRnUnexpectedStandaloneDerivingghcTcRnUnusedVariableInRuleDecl is an error triggered by forall'd variable in rewrite rule that does not appear on left-hand sideExample:&{-# RULES "rule" forall a. id = id #-}Test cases: rename should_failExplicitForAllRules2ghcTcRnUnexpectedStandaloneKindSig is an error thrown when a user uses standalone kind signature without enabling the StandaloneKindSignatures extension.Example:!type D :: Type data D = DTest cases: saks should_fail saks_fail001ghcTcRnIllegalRuleLhs is an error triggered by malformed left-hand side of rewrite rule Examples:&{-# RULES "test" forall x. f x = x #-},{-# RULES "test" forall x. case x of = x #-}Test cases: rename should_failT15659ghcTcRnDuplicateRoleAnnot is an error triggered by two or more role annotations for one typeExample:data D a type role D phantom type role D phantomTest cases: roles should_failRoles8ghcTcRnDuplicateKindSig is an error triggered by two or more standalone kind signatures for one typeExample:4type D :: Type type D :: Type data DTest cases: saks should_fail saks_fail002ghcTcRnIllegalDerivStrategy is an error thrown when a user uses deriving strategy without enabling the DerivingStrategies extension or uses deriving via without enabling the DerivingVia extension. Examples:data T = T deriving stock Eqdata T = T deriving via Eq TTest cases: deriving should_fail-deriving-via-fail3 deriving should_fail T10598_fail4ghcTcRnIllegalMultipleDerivClauses is an error thrown when a user uses two or more deriving clauses without enabling the DerivingStrategies extension.Example:7data T = T deriving Eq deriving OrdTest cases: deriving should_fail T10598_fail5ghcTcRnNoDerivStratSpecified is a warning implied by -Wmissing-deriving-strategies and triggered by deriving clause without specified deriving strategy.Example: data T = T deriving EqTest cases: renameshould_compile T15798a renameshould_compile T15798b renameshould_compileT15798cghcTcRnStupidThetaInGadt is an error triggered by data contexts in GADT-style data declarationExample:/data (Eq a) => D a where MkD :: D IntTest cases: rename should_failRnStupidThetaInGadtghcTcRnShadowedTyVarNameInFamResult is an error triggered by type variable in type family result that shadows type variable from left hand sideExample:type family F a b c = bTest cases: ghciscripts(T6018ghcirnfail rename should_fail T6018rnfailghcTcRnIncorrectTyVarOnRhsOfInjCond is an error caused by a situation where the left-hand side of an injectivity condition of a type family is not a variable referring to the type family result. See Note [Renaming injectivity annotation] for more details.Example:type family F a = r | a -> aTest cases: ghciscripts(T6018ghcirnfail rename should_fail T6018rnfailghcTcRnUnknownTyVarsOnRhsOfInjCond is an error triggered by out-of-scope type variables on the right-hand side of a of an injectivity condition of a type familyExample: type family F a = res | res -> bTest cases: ghciscripts(T6018ghcirnfail rename should_fail T6018rnfailghcTcRnLookupInstance groups several errors emitted when looking up class instances.Test cases: noneghcTcRnBadlyStaged is an error that occurs when a TH binding is used in an invalid stage.Test cases: T17820dghcTcRnStageRestriction is an error that occurs when a top level splice refers to a local name.Test cases: T17820, T21547, T5795, qq00[1-4], annfail0{3,4,6,9}ghcTcRnTyThingUsedWrong is an error that occurs when a thing is used where another thing was expected.Test cases: noneghcTcRnCannotDefaultKindVar is an error that occurs when attempting to use unconstrained kind variables whose type isn't Type, without -XPolyKinds.Test cases: T11334bghcTcRnUninferrableTyVar is an error that occurs when metavariables in a type could not be defaulted.Test cases: T17301, T17562, T17567, T17567StupidTheta, T15474, T21479ghcTcRnSkolemEscape is an error that occurs when type variables from an outer scope is used in a context where they should be locally scoped.Test cases: T15076, T15076b, T14880-2, T15825, T14880, T15807, T16946, T14350, T14040A, T15795, T15795a, T14552ghcTcRnPatSynEscapedCoercion is an error indicating that a coercion escaped from a pattern synonym into a type. See Note [Coercions that escape] in GHC.Tc.TyCl.PatSynTest cases: T14507ghcTcRnPatSynExistentialInResult is an error indicating that the result type of a pattern synonym mentions an existential type variable.#Test cases: PatSynExistentialghcTcRnPatSynArityMismatch is an error indicating that the number of arguments in a pattern synonym's equation differs from the number of parameters in its signature.Test cases: PatSynArityghcTcRnPatSynInvalidRhs is an error group indicating that the pattern on the right hand side of a pattern synonym is invalid. Test cases: unidir, T14112ghcTcRnZonkerMessage is collection of errors that occur when zonking, i.e. filling in metavariables with their final values.See ɍghcTcRnTyFamDepsDisabled is an error indicating that a type family injectivity annotation was used without enabling the extension TypeFamilyDependencies.Test cases: T11381ghcTcRnAbstractClosedTyFamDecl is an error indicating that an abstract closed type family was declared in a regular source file, while it is only allowed in hs-boot files.Test cases: ClosedFam4ghcTcRnPartialFieldSelector is a warning indicating that a record selector was not defined for all constructors of a data type.)Test cases: DRFPartialFields, T7169ghcTcRnBadFieldAnnotation is an error/warning group indicating that a strictness/unpack related data type field annotation is invalid.ghcTcRnSuperclassCycle is an error indicating that a class has a superclass cycle.Test cases: mod40, tcfail027, tcfail213, tcfail216, tcfail217, T9415, T9739ghcTcRnDefaultSigMismatch is an error indicating that a default method signature doesn't match the regular method signature.1Test cases: T7437, T12918a, T12918b, T12151ghcTcRnTyFamsDisabled is an error indicating that a type family or instance was declared while the extension TypeFamilies was disabled. Test cases: TyFamsDisabledghc:TcRnBadTyConTelescope is an error caused by an ill-scoped  kind, due to type variables being out of dependency order.Example:class C a (b :: Proxy a) (c :: Proxy b) where type T c aTest cases: BadTelescope{D,3,4} T14066{f,g} T14887 T15591{b,c} T15743{c,d} T15764 T23252ghcTcRnTyFamResultDisabled is an error indicating that a result variable was used on a type family while the extension TypeFamilyDependencies was disabled.!Test cases: T13571, T13571aghcTcRnRoleValidationFailed is an error indicating that a variable was assigned an invalid role by the inference algorithm. This is only performed with -dcore-lint.ghcTcRnCommonFieldResultTypeMismatch is an error indicating that a sum type declares the same field name in multiple constructors, but the constructors' result types differ./Test cases: CommonFieldResultTypeMismatchghcTcRnCommonFieldTypeMismatch is an error indicating that a sum type declares the same field name in multiple constructors, but their types differ.)Test cases: CommonFieldTypeMismatchghcTcRnClassExtensionDisabled is an error indicating that a class was declared with an extension feature while the extension was disabled.ghcTcRnDataConParentTypeMismatch is an error indicating that a data constructor was declared with a type that doesn't match its type constructor (i.e. a GADT result type and its data name).Test cases: T7175, T13300, T14719, T18357, T18357b, gadt11, tcfail155, tcfail176ghcTcRnGADTsDisabled is an error indicating that a GADT was declared while the extension GADTs was disabled. Test cases: ghci057, T9293ghcTcRnExistentialQuantificationDisabled is an error indicating that a data constructor was declared with existential features while the extension ExistentialQuantification was disabled.Test cases: ghci057, T9293, gadtSyntaxFail001, gadtSyntaxFail002, gadtSyntaxFail003, prog006, rnfail053, T12083aghcTcRnGADTDataContext is an error indicating that a GADT was declared with a data type context. This error is emitted in the tc, but it is also caught in the renamer.ghcTcRnMultipleConForNewtype is an error indicating that a newtype was declared with multiple constructors. This error is caught by the parser.ghcTcRnKindSignaturesDisabled is an error indicating that a kind signature was used in a data type declaration while the extension KindSignatures was disabled.&Test cases: T20873c, readFail036ghcTcRnEmptyDataDeclsDisabled is an error indicating that a data type was declared with no constructors while the extension EmptyDataDecls was disabled.Test cases: readFail035ghcTcRnRoleMismatch is an error indicating that the role specified in an annotation differs from its inferred role. Test cases: T7253, Roles11ghcTcRnRoleCountMismatch is an error indicating that the number of roles in an annotation doesn't match the number of type parameters.Test cases: Roles6ghcTcRnIllegalRoleAnnotation is an error indicating that a role annotation was attached to a decl that doesn't allow it.Test cases: Roles5ghcTcRnRoleAnnotationsDisabled is an error indicating that a role annotation was declared while the extension RoleAnnotations was disabled.#Test cases: Roles5, TH_Roles1ghcTcRnIncoherentRoles is an error indicating that a role annotation for a class parameter was declared as not nominal.Test cases: T8773ÏghcTcRnPrecedenceParsingError is an error caused by attempting to use operators with the same precedence in one infix expression.)Example: eq :: (a ~ b ~ c) :~: ()1Test cases: module/mod61 parser should_fail$readFail016 rename should_fail"rnfail017 rename should_fail!T9077 typecheck should_failT18252aďghcTcRnPrecedenceParsingError is an error caused by attempting to use an operator with higher precedence than the operand.Example: k = (-3 **) where (**) = const infixl 7 **Test cases: overloadedrecflds should_fail0T13132_duplicaterecflds parser should_fail$readFail023 rename should_fail2rnfail019 th/TH_unresolvedInfix2ŏghcTcRnTypeSynonymCycle is an error indicating that a cycle between type synonyms has occurred./Test cases: mod27, ghc-e-fail2, bkpfail29ƏghcTcRnSelfImport is an error indicating that a module contains an import of itself.Test cases: T9032ǏghcTcRnNoExplicitImportList is a warning indicating that an import statement did not include an explicit import list.Test cases: T1789, T4489ȏghcTcRnSafeImportsDisabled is an error indicating that an import was declared using the safe) keyword while SafeHaskell wasn't active.Test cases: Mixed01ɏghcTcRnDeprecatedModule is a warning indicating that an imported module is annotated with a warning or deprecation pragma.Test cases: DeprUʏghcTcRnCompatUnqualifiedImport is a warning indicating that a special module (right now only Data.List) was imported unqualified without import list, for compatibility reasons.Test cases: T17244AˏghcTcRnRedundantSourceImport is a warning indicating that a {-# SOURCE #-} import was used when there is no import cycle.Test cases: nonȅghc?TcRnImportLookup is a group of errors about bad imported names.͏ghc;TcRnUnusedImport is a group of errors about unused imports.ΏghcTcRnDuplicateDecls is an error indicating that the same name was used for multiple declarations.Test cases: FieldSelectors, overloadedrecfldsfail03, T17965, NFSDuplicate, T9975a, TDMultiple01, mod19, mod38, mod21, mod66, mod20, TDPunning, mod18, mod22, TDMultiple02, T4127a, ghci048, T8932, rnfail015, rnfail010, rnfail011, rnfail013, rnfail002, rnfail003, rn_dup, rnfail009, T7164, rnfail043, TH_dupdecl, rnfail012ϏghcTcRnPackageImportsDisabled is an error indicating that an import uses a package qualifier while the extension PackageImports was disabled.(Test cases: PackageImportsDisabledЏghcTcRnIllegalDataCon is an error indicating that a data constructor was defined using a lowercase name, or a symbolic name in prefix position. Mostly caught by PsErrNotADataCon.Test cases: NoneяghcTcRnNestedForallsContexts is an error indicating that multiple foralls or contexts are nested/curried where this is not supported, like  D x. D y. instead of D x y..Test cases: T12087, T14320, T16114, T16394, T16427, T18191, T18240a, T18240b, T18455, T5951ҏghcTcRnRedundantRecordWildcard is a warning indicating that a pattern uses a record wildcard even though all of the record's fields are bound explicitly.Test cases: T15957_FailӏghcTcRnUnusedRecordWildcard is a warning indicating that a pattern uses a record wildcard while none of the fields bound by it are used.Test cases: T15957_FailԏghcTcRnUnusedName is a warning indicating that a defined or imported name is not used in the module.Test cases: ds053, mc10, overloadedrecfldsfail05, overloadedrecfldsfail06, prog018, read014, rn040, rn041, rn047, rn063, T13839, T13839a, T13919, T17171b, T17a, T17b, T17d, T17e, T18470, T1972, t22391, t22391j, T2497, T3371, T3449, T7145b, T7336, TH_recover_warns, unused_haddock, WarningGroups, werrorՏghcTcRnQualifiedBinder is an error indicating that a qualified name was used in binding position.Test cases: mod62, rnfail021, rnfail034, rnfail039, rnfail046֏ghcTcRnTypeApplicationsDisabled is an error indicating that a type application was used while the extension TypeApplications was disabled.9Test cases: T12411, T12446, T15527, T16133, T18251c׏ghcTcRnInvalidRecordField is an error indicating that a record field was used that doesn't exist in a constructor.Test cases: T13644, T13847, T17469, T8448, T8570, tcfail083, tcfail084؏ghcTcRnTupleTooLarge is an error indicating that the arity of a tuple exceeds mAX_TUPLE_SIZE.Test cases: T18723a, T18723b, T18723c, T6148a, T6148b, T6148c, T6148dُghcTcRnCTupleTooLarge is an error indicating that the arity of a constraint tuple exceeds mAX_CTUPLE_SIZE.Test cases: T10451ڏghcTcRnIllegalInferredTyVars is an error indicating that some type variables were quantified as inferred (like D {a}.) in a place where this is not allowed, like in an instance declaration.Test cases: ExplicitSpecificity5, ExplicitSpecificity6, ExplicitSpecificity8, ExplicitSpecificity9ۏghcTcRnAmbiguousName is an error indicating that an unbound name might refer to multiple names in scope.Test cases: BootFldReexport, DRFUnused, duplicaterecfldsghci01, GHCiDRF, mod110, mod151, mod152, mod153, mod164, mod165, NoFieldSelectorsFail, overloadedrecfldsfail02, overloadedrecfldsfail04, overloadedrecfldsfail11, overloadedrecfldsfail12, overloadedrecfldsfail13, overloadedrecfldswasrunnowfail06, rnfail044, T11167_ambig, T11167_ambiguous_fixity, T13132_duplicaterecflds, T15487, T16745, T17420, T18999_NoDisambiguateRecordFields, T19397E1, T19397E2, T23010_fail, tcfail037܏ghcTcRnBindingNameConflict is an error indicating that multiple local or top-level bindings have the same name.Test cases: dsrun006, mdofail002, mdofail003, mod23, mod24, qq006, rnfail001, rnfail004, SimpleFail6, T14114, T16110_Fail1, tcfail038, TH_spliceD1ݏghcTcRnNonCanonicalDefinition is a warning indicating that an instance defines an implementation for a method that should not be defined in a way that deviates from its default implementation, for example because it has been scheduled to be absorbed into another method, like pure making return obsolete.Test cases: WCompatWarningsOn, WCompatWarningsOff, WCompatWarningsOnOffޏghc8TcRnImplicitImportOfPrelude is a warning, controlled by Wimplicit-prelude9, that is triggered upon an implicit import of the Prelude module.Example:{-# OPTIONS_GHC -fwarn-implicit-prelude #-} module M where {}Test case: rn055ߏghcTcRnMissingMain is an error that occurs when a Main module does not define a main function (named main, by default, but overridable with the main-is command line flag).Example:module Main where {}Test cases: T414, T7765, readFail021, rnfail007, T13839b, T17171a, T16453E1, tcfail030, T19397E3, T19397E4ghcTcRnGhciUnliftedBind is an error that occurs when a user attempts to bind an unlifted value in GHCi.Example (in GHCi):let a = (# 1#, 3# #)Test cases: T9140, T19035bghcTcRnGhciMonadLookupFail is an error that occurs when the user sets the GHCi monad, using the GHC API  setGHCiMonad function, but GHC can't find which monad the user is referring to.Example:import GHC ( setGHCiMonad )... setGHCiMonad  NoSuchThingTest cases: noneghcTcRnMissingRoleAnnotation is a warning that occurs when type declaration doesn't have a role annotatiosn7Controlled by flags: - Wmissing-role-annotationsTest cases: T22702ghcTcRnPatersonCondFailure is an error that occurs when an instance declaration fails to conform to the Paterson conditions. Which particular condition fails depends on the constructor of PatersonCondFailure See Note [Paterson conditions].Test cases: T15231, tcfail157, T15316, T19187a, fd-loop, tcfail108, tcfail154, T15172, tcfail214ghcTcRnImplicitRhsQuantification is a warning that occurs when GHC implicitly quantifies over a type variable that occurs free on the RHS of the type declaration that is not mentioned on the LHSExample:type T = 'Nothing :: Maybe a:Controlled by flags: - Wimplicit-rhs-quantification/Test cases: T23510a T23510bghc* is an "internal" type (used only inside  that wraps a ˍ while also providing any extra info needed to correctly pretty-print this diagnostic later on.ghc1Extra supplementary info associated to the error.ghc&Extra context associated to the error.ghc(Whether we show the error context or notghc5Construct a basic mismatch message between two types.See pprMismatchMsg. for how such a message is displayed to users.ghc7Report a mismatch error without any extra information.ghc Create a "not in scope" error message for the given +.ghcDisplay some relevant bindings.ghc Expected typeghc Actual typeֈghcResult of showing the exception (cannot be done safely outside IO)ghctype of the spliceghcwhat's nested insideghc Module nameghcTrue => Error, False => Warningghc Error bodyghc#the label type in the instance headghcWhether the error is due to Safe Haskell being enabled | The instance failed the coverage condition, i.e. the functional dependencies were not respected.Example:;class C a b | a -> b where {..} instance C a b where {..}4Test cases: T9106, T10570, T2247, T12803, tcfail170.ghcthe instance head typeghc"the problem with the instance headghcthe instance head typeghcis this an invisible argument?ghc type familyghctype family argumentghcThe unsed namesghcwhether -XPatternSynonyms was enabledghc'The name extracted from the import itemghc'The name extracted from the import itemghcThe potential matchesʼnghc The arity͊ghc6suggestions for what might have been meant | Missing type keyword when importing a type.ghcthe message to reportghcthe message to reportghcalways a class constraintghc/ambiguous kind and type variables, respectivelyghcTrue  = subtype checkghcTrue  == role subtype check | Two type synonyms have different RHSs.ghcboot ghcreal  | Two s aren't compatible.ghcboot ghcreal ghcthe boot instance ' NB: we never trigger this for hsig files, as in that case we do a full round of constraint solving, and a missing instance gets reported as an unsolved Wanted constraint with a InstProvidedOrigin  (. See GHC.Tc.Utils.Backpack.check_inst.ghc boot thingghc real thingghcA ghc  | Multiple default declarations were given for an associated family instance.Test cases: none.ghcfamily ghcexpected type argumentsghcactual type argumentsghc was this a 'type' or a 'data' instance?ghcThe family tyconghcThe family tyconghcThe right number of parametersghcThe family nameghcThe name used in the equationŒghcfamily , arguments, and set of "dodgy" type variables See Note [Dodgy binding sites in type family instances] in GHC.Tc.Validityghcthe out-of-scope type variablesnjghcthe ' at the head of the instance head, or J/ if the instance head is not even headed by a ghcThe type constructor that occurs in the typeclass instance declaration.ghcThe typeclass kind.ghcThe number of typeclass arguments that GHC kept. See Note [tc_args and tycon arity] in GHC.Tc.Deriv. | Generic instances can only be derived using the stock strategy in Safe Haskell.ghc5Type constructor for which the instance is requestedghcWhether or not -XDeriveAnyClass is enabled already. | Stock deriving won't work, but perhaps DeriveAnyClass will.ghc!The possible parents (at least 2)΍ghcThe y will allow us to pretty-print some diagnostics with more detail.ҍghcThe contextual skolem info. The boolean controls whether we want to show it in the user message. (Nice to keep track of the info in either case, for other users of the GHC API.)Ӎghc+The implication containing a contradiction.ghcThe contradiction.ԍghcThe type family's constructorghcThe inaccessible branch؍ghc tyVar binder.ghc The limit.ghcthe wildcard name, or J for an anonymous wildcardghcfirst type variableghcsecond type variableghc function nameghc3user-written name of type variable being quantifiedghc function nameghc(type the variable unified with, if knownghcpartial type signatureghc2whether this is an unboxed tuple or an unboxed sumghcexpected arityghc actual arityghc the violationghc the family ghcthe family equationsghcparentghcchildghc&Occurrence name shared by both exportsghc First exportghcExport decl of first exportghc Second exportghcExport decl of second exportghc Field updateghc Record typeghcthe fields of the record updateghc*the reason this record update was rejectedghc6The typeclass we are trying to derive an instance forghc The typeclass arguments, if any.ghc The derivation strategy, if any.ghc*Is '-XGeneralizedNewtypeDeriving' enabled?ghcThe specific reason why we couldn't derive an instance for the class.ghcwhat the problem isghcthe name that is not in scopeghcimport errors that are relevantghchints, e.g. enable DataKinds to refer to a promoted data constructorghc?what kind of thing this is (a binding, fixity declaration, ...)ghc/Wanted constraints in which defaulting occurredghc!The type variable being defaultedghcThe default typeghcwhether the error is happening in a Template Haskell tick (so we should give a Template Haskell hint)ЎghcThe visible kind argumentghcTarget of the kind applicationԎghc&classification of thing being returnedghc allowed kindghcthe return kindghcsuggested extension֎ghcThe illegal kindghc0Whether enabling -XPolyKinds should be suggestedَghcPattern match specificsߎghcExpected number of argsghcActual number of argsghcTarget of the pragmasghcThe first pragmaghc Other pragmasghc'The name with different export warningsghcThe locations of export list items that differ from the one at which the error is reportedghcThe name that is exportedghcThe locations of export list items that are missing the export warningghc of the classghcdefault methodsghc$The operator whose fixity is definedghc"the fixity used in the source fileghc the fixity used in the signatureghcThe missing nameghcThe module's unit stateghcThe implementation moduleghc of the classghcProblematic methodghcmethodghc the pragmaghcTrue if linear types enabledghcWanted ghcWanted ghcThe binding being spliced.ghcThe binding stage.ghc'The stage at which the binding is used.ghcThe binding being spliced.ghcExpected thing.ghcThing used wrongly.ghcName of the thing used wrongly.ghcThe unconstrained variable.ghcKind of the variable.ghc*The variables that could not be defaulted.ghc'Description of the surrounding context.ghc The variables that would escape.ghc&The variable that is being quantified.ghcThe type in which they occur.ghcThe pattern-bound variableghcThe escaped coercionsghcThe name of the pattern synonymghcThe result typeghc!The escaped existential variablesghcThe name of the pattern synonymghc The number of equation argumentsghcThe differenceghcThe name of the pattern synonymghc The patternghc The LHS argsghc The number of equation argumentsghc The selectorghcThe index of the fieldghc-The constructor in which the field is definedghcThe error specificsghcThe details of the cycleghcThe name of the methodghc!The type of the default signatureghc"The name of the family or instanceghcThe name of the type familyghcName of the result variableghcThe validated roleghcThe failure reasonghcFirst constructorghcSecond constructorghc Field nameghcFirst constructorghcSecond constructorghc Field nameghc The classghc The extensionghcThe data constructorghcThe parent typeghcThe name of the GADTghcThe constructorghcThe data type nameghcThe newtype nameghcThe number of constructorsghcThe data type nameghcThe data type nameghcThe type variableghcThe annotated roleghcThe inferred roleghcThe number of type variablesghcThe role annotationghcThe role annotationghcThe annotated typeghcThe class tyconÏghc first operator's name and fixityghc!second operator's name and fixityďghc first operator's name and fixityghcargument operatorghcSectionŏghc The tycons involved in the cycleƏghc The moduleǏghcThe imported moduleȏghcThe imported moduleɏghcThe imported moduleghcThe pragma dataʏghc The importˏghcThe imported modulȅghcDetails about the error͏ghc The importghcDetails about the errorΏghcThe name of the declarationsghcThe individual declarationsЏghcThe constructor nameӏghcThe names bound by the wildcardԏghcThe unused nameghcThe provenance of the nameՏghcThe name used as a binder֏ghc$what kind of type application is it?׏ghcThe constructor nameghcThe name of the field؏ghcThe arity of the tupleُghc!The arity of the constraint tupleڏghcThe offending type variablesۏghcThe nameghcThe possible matches܏ghcThe conflicting nameghcThe locations of the duplicatesݏghc SpecificsghcThe instance typeߏghc.whether the module has an explicit export listghc&the expected name of the main functionghc3the textual name of the monad requested by the userghc lookup resultghcthe failed Paterson Conditionghcthe LHSghcthe RHSghc&Extra info associated with the messageKKۈވ݈܈ۊ܊݊ފߊΌЌόьՉ؉։׉̊ϊΊъ͊Њ܋ދ݋ҋՋ֋ԋӋ׋؋ڋۋًߋĈ͈̈ȈňƈˈʈɈȈLjՌ،ٌ֌ڌ׌ی܌ތ݌ߌĉljƉʼnԊՊ֊׊يڊ؊ÍҌԌӌŠÌŒČŌƌʌnjɌȌÊȊƊɊŊĊˊNJʊىډۉȉˉʉɉӈԈˌ͌̌͋΋ϋыЋ‹ċËɋʋ̋ˋŋƋNjȋՈ׈ֈЉщԉӉ҉̉Ή͉ω߈ˍۏ܏ُݎގ׎ʏ܎ɏҎӎڍٍΏʎĎŽÎŎߍލЏ͎ƎȎڏ֎ێώޏ֍̏ԍӍ͍Ɏ׏ԎЎَ΍ۍߏݍяǏݏϏ̎ÏՏˎҍҏˏȏďƏэЍюߎ؏֏ՍŏΎՎڎ̍؎܍ǎ͏ԏ׍؍ӏύΈψЈш҈‰ÉčōȍƍǍ؈وڈ܉݉މ߉ҊӊɍʍKKKKKKKKKKˍ͍̍΍ύЍэҍӍԍՍ֍׍؍ٍڍۍ܍ݍލߍŽÎĎŎƎǎȎɎʎˎ͎̎ΎώЎюҎӎԎՎ֎׎؎َڎێ܎ݎގߎÏďŏƏǏȏɏʏˏ̏͏ΏϏЏяҏӏԏՏ֏׏؏ُڏۏ܏ݏޏߏčōƍǍȍ܌݌ތߌҌӌԌΌόЌьˌ͌̌Ռ֌׌،ٌڌی͋΋ыЋϋɋʋˋ̋ŋƋȋNjċË‹ҊӊԊՊ؊׊֊ڊيۊ܊ߊފ݊ŠKKKKKKKKKKKKÊƊNJĊŊȊɊʊˊÍ܉݉މ߉ىډۉՉ։׉؉Љԉ҉щӉ͉̉ΉωȉɉʉˉĉʼnƉlj‰É̊͊ΊϊЊъߋ܋݋ދ؋ًڋۋҋӋԋՋ֋׋ŌƌnjȌɌʌČŒÌ߈؈وڈՈֈ׈ӈԈۈ܈݈ވˆÈĈňƈLjȈɈʈˈ͈̈ΈψЈш҈ɍʍ(None +ҐԐӐאؐڐސِݐߐېܐ ֐Ր+ אؐߐސݐܐېڐِҐԐӐՐ֐None9 =AANoneghcData for a module node in a  ModuleGraph/. Module nodes of the module graph are one of:A regular Haskell source moduleA hi-boot source moduleghc-The actual preprocessed source, if we have itghcCached flags from OPTIONS, INCLUDE and LANGUAGE$ pragmas in the modules source codeghc$Filename of preprocessed source fileghcThe parsed, nonrenamed source, if we have it. This is also used to support "inline module syntax" in Backpack files.ghc;Whether the special module GHC.Prim was imported explicitlyghc7Non-source imports of the module from the module *text*ghcSource imports of the moduleghc%Timestamp of hie file, if we have oneghcTimestamp of hi file, if we have one See Note [When source is considered modified] and #9243ghc+Timestamp of dynamic object, if we have oneghc#Timestamp of object, if we have oneghcContent hash of source fileghc5Location of the various files belonging to the moduleghc8The module source either plain Haskell, hs-boot, or hsigghcIdentity of the moduleghc= 1.6.9.0).ghc Version of &System.Process.readProcessWithExitCode> that takes a key-value tuple to insert into the environment.ghcRun a command, placing the arguments in an external response file.This command is used in order to avoid overlong command line arguments on Windows. The command line arguments are first written to an external, temporary response file, and then passed to the linker via @filepath. response files for passing them in. See: 'https://gcc.gnu.org/wiki/Response_Files /https://gitlab.haskell.org/ghc/ghc/issues/10777ghcBreak a line of an error message into a filename and the rest of the line, taking care to ignore colons in Windows drive letters (as noted in #17786). For instance, "hi.c: ABCD" is mapped to Just ("hi.c", "ABCD")"C:\hi.c: ABCD" is mapped to Just ("C:\hi.c", "ABCD")ghcstdoutghc program pathghc program argsghcaddition to the environmentghc(exit_code, stdout, stderr)None <.vghc5Why TemplateHaskell rejected the splice. Used in the  constructor of a .ghc/Diagnostics messages emitted during desugaring.ghcSimply wraps a generic t message.ghcDsEmptyEnumeration is a warning (controlled by the -Wempty-enumerations flag) that is emitted if an enumeration is empty. Example(s):main :: IO () main = do let enum = [5 .. 3] print enumHere enum8 would yield an empty list, because 5 is greater than 3. Test case(s): warningsshould_compileT10930 warningsshould_compileT18402 warningsshould_compileT10930b numericshould_compileT10929 numericshould_compileT7881 deSugar should_runT18172ghcDsIdentitiesFound is a warning (controlled by the -Widentities flag) that is emitted on uses of Prelude numeric conversions that are probably the identity (and hence could be omitted). Example(s):main :: IO () main = do let x = 10 print $ conv 10where conv :: Int -> Int conv x = fromIntegral x Here calling conv is essentially the identity function, and therefore can be omitted.Test case(s): deSugarshould_compileT4488ghcThe list of unbound bindersghcThe original bindersghcThe original LHSghcThe optimised LHSNone0ghc3Show a SDoc as a String with the default user styleghc.Allows caller to specify the NamePprCtx to use   None )*6<V'ghcA message from the driver.ghcSimply wraps a generic t message a.ghcA parse error in parsing a Haskell file header during dependency analysisghcDriverMissingHomeModules is a warning (controlled with -Wmissing-home-modules) that arises when running GHC in --make mode when some modules needed for compilation are not included on the command line. For example, if A imports B, `ghc --make A.hs` will cause this warning, while `ghc --make A.hs B.hs` will not.Useful for cabal to ensure GHC won't pick up modules listed neither in 'exposed-modules' nor in 'other-modules'.Test case: warningsshould_compile MissingModghcDriverUnknown is a warning that arises when a user tries to reexport a module which isn't part of that unit.ghcDriverUnknownHiddenModules is a warning that arises when a user tries to hide a module which isn't part of that unit.ghcDriverUnusedPackages occurs when when package is requested on command line, but was never needed during compilation. Activated by -Wunused-packages.Test cases: warningsshould_compileUnusedPackagesghcDriverUnnecessarySourceImports (controlled with -Wunused-imports) occurs if there are {-# SOURCE #-} imports which are not necessary. See warnUnnecessarySourceImports in .Test cases: warningsshould_compileT10637ghc5DriverDuplicatedModuleDeclaration occurs if a module A& is declared in multiple files.Test cases: None.ghc(DriverModuleNotFound occurs if a module A can't be found.Test cases: None.ghc0DriverFileModuleNameMismatch occurs if a module A is defined in a file with a different name. The first field is the name written in the source code; the second argument is the name extracted from the filename.Test cases: modulemod178, driver/bug1677ghc>DriverUnexpectedSignature occurs when GHC encounters a module A= that imports a signature file which is neither in the  signatures section of a '.cabal' file nor in any package in the home modules.Example:*- MyStr.hsig is defined, but not added to  signatures in the '.cabal' file. signature MyStr where data Str- A.hs, which tries to import the signature. module A where import MyStrTest cases: driver/T12955ghcDriverFileNotFound occurs when the input file (e.g. given on the command line) can't be found.Test cases: None.ghc1DriverStaticPointersNotSupported occurs when the StaticPointers9 extension is used in an interactive GHCi context.Test cases: ghciscripts StaticPtrghcDriverBackpackModuleNotFound occurs when Backpack can't find a particular module during its dependency analysis. Test cases: -ghcDriverUserDefinedRuleIgnored is a warning that occurs when user-defined rules are ignored. This typically happens when Safe Haskell. Test cases:tests safeHaskell%safeInfered/UnsafeWarn05 tests safeHaskell%safeInfered/UnsafeWarn06 tests safeHaskell%safeInfered/UnsafeWarn07 tests safeHaskell(safeInfered/UnsafeInfered11 tests safeHaskellsafeLanguage/SafeLang03ghcDriverMixedSafetyImport is an error that occurs when a module is imported both as safe and unsafe. Test cases:tests safeHaskellsafeInfered/Mixed03 tests safeHaskellsafeInfered/Mixed02ghcDriverCannotLoadInterfaceFile is an error that occurs when we cannot load the interface file for a particular module. This can happen for example in the context of Safe Haskell, when we have to load a module to check if it can be safely imported.Test cases: None.ghcDriverInferredSafeImport is a warning (controlled by the Opt_WarnSafe flag) that occurs when a module is inferred safe.Test cases: None.ghcDriverMarkedTrustworthyButInferredSafe is a warning (controlled by the Opt_WarnTrustworthySafe flag) that occurs when a module is marked trustworthy in SafeHaskell but it has been inferred safe.Test cases: tests safeHaskell)safeInfered/TrustworthySafe02 tests safeHaskellsafeInfered/TrustworthySafe03ghcDriverInferredSafeImport is a warning (controlled by the Opt_WarnInferredSafeImports flag) that occurs when a safe-inferred module is imported from a safe module.Test cases: None.ghcDriverCannotImportUnsafeModule is an error that occurs when an usafe module is being imported from a safe one.Test cases: None.ghcDriverMissingSafeHaskellMode is a warning (controlled by the Opt_WarnMissingSafeHaskellMode flag) that occurs when a module is using SafeHaskell features but SafeHaskell mode is not enabled.Test cases: None.ghcDriverPackageNotTrusted is an error that occurs when a package is required to be trusted but it isn't.Test cases: tests safeHaskellcheck/Check01 tests safeHaskellcheck/Check08 tests safeHaskellcheck/Check06 tests safeHaskellcheckpkg01ImpSafeOnly09 tests safeHaskellcheckpkg01ImpSafe03 tests safeHaskellcheckpkg01ImpSafeOnly07 tests safeHaskellcheckpkg01 ImpSafeOnly08ghcDriverCannotImportFromUntrustedPackage is an error that occurs in the context of Safe Haskell when trying to import a module coming from an untrusted package.Test cases: tests safeHaskellcheck/Check09 tests safeHaskellcheckpkg01ImpSafe01 tests safeHaskellcheckpkg01ImpSafe04 tests safeHaskellcheckpkg01ImpSafeOnly03 tests safeHaskellcheckpkg01ImpSafeOnly05 tests safeHaskellflags/SafeFlags17 tests safeHaskellflags/SafeFlags22 tests safeHaskellflags/SafeFlags23 tests safeHaskellghci/p11 tests safeHaskellghci/p12 tests safeHaskellghci/p17 tests safeHaskellghci/p3 tests safeHaskell'safeInfered/UnsafeInfered01 tests safeHaskell'safeInfered/UnsafeInfered02 tests safeHaskell'safeInfered/UnsafeInfered02 tests safeHaskell'safeInfered/UnsafeInfered03 tests safeHaskell'safeInfered/UnsafeInfered05 tests safeHaskell'safeInfered/UnsafeInfered06 tests safeHaskell'safeInfered/UnsafeInfered09 tests safeHaskell'safeInfered/UnsafeInfered10 tests safeHaskell'safeInfered/UnsafeInfered11 tests safeHaskell$safeInfered/UnsafeWarn01 tests safeHaskell$safeInfered/UnsafeWarn03 tests safeHaskell$safeInfered/UnsafeWarn04 tests safeHaskell$safeInfered/UnsafeWarn05 tests safeHaskell"unsafeLibs/BadImport01 tests safeHaskell"unsafeLibs/BadImport06 tests safeHaskell"unsafeLibs/BadImport07 tests safeHaskell"unsafeLibs/BadImport08 tests safeHaskell"unsafeLibs/BadImport09 tests safeHaskellunsafeLibs/Dep05 tests safeHaskellunsafeLibs/Dep06 tests safeHaskellunsafeLibs/Dep07 tests safeHaskellunsafeLibs/Dep08 tests safeHaskellunsafeLibs/Dep09 tests safeHaskellunsafeLibs/Dep10ghcA collection of driver messagesghcThe umbrella type that encompasses all the different messages that GHC might output during the different compilation stages. See Note [GhcMessage].ghc!A message from the parsing phase.ghc(A message from typecheck/renaming phase.ghc/A message from the desugaring (HsToCore) phase.ghcA message from the driver.ghcAn "escape" hatch which can be used when we don't know the source of the message or if the message is not one of the typed ones. The t and  constraints ensure that if we know, at pattern-matching time, the originating type, we can attempt a cast and access the fully-structured error. This would be the case for a GHC plugin that offers a domain-specific error type but that doesn't want to place the burden on IDEs/application code to "know" it. The t constraint ensures that worst case scenario we can still render this into something which can be eventually converted into a t.ghcA single warning message.  INVARIANT: It must have t severity.ghc!A collection of error messages.  INVARIANT: Each  in the collection should have t severity.ghc#A collection of warning messages.  INVARIANT: Each  in the collection should have t severity.ghcCreates a new  out of any diagnostic. This function is also provided to ease the integration of #18516 by allowing diagnostics to be wrapped into the general (but structured)  type, so that the conversion can happen gradually. This function should not be needed within GHC, as it would typically be used by plugin or library authors (see comment for the  type constructor)ghc9Abstracts away the frequent pattern where we are calling  ioMsgMaybe2 on the result of 'IO (Messages TcRnMessage, a)'.ghc9Abstracts away the frequent pattern where we are calling  ioMsgMaybe0 on the result of 'IO (Messages DsMessage, a)'.ghc-ghc -<<ghc >>-ghc*Used when the lexer can't make sense of itghcend of file tokenghcThe HsDocString contains more details about what this is and how to pretty print itghc(doc options (prune, ignore-exports, etc)ghccomment starting by "--"ghccomment in {- -}ghcThe parser has consumed a (possibly empty) prefix of the input and failed.The carried parsing state can be used to resume parsing. It is the state right before failure, including the fatal parse error.  and ' must return a non-empty bag of errors.ghcThe parser has consumed a (possibly empty) prefix of the input and produced a result. Use 9 to check for accumulated warnings and non-fatal errors.8The carried parsing state can be used to resume parsing.ghcIncludes the trailing '-}' decorators drop the last two elements with the callback if you don't want them to be includedghcHelper for defining IntX primitive literal parsers (specifically for the ExtendedLiterals extension, such as 123#Int8).ghcHelper for defining WordX primitive literal parsers (specifically for the ExtendedLiterals extension, such as  234#Word8).ghcTest whether a  is setghc1Given exactly the information needed, set up the ghc.Set parser options for parsing OPTIONS pragmasghcCreates a parse state from a  valueghcGet a bag of the errors that have been accumulated so far. Does not take -Werror into account.ghcGet the warnings and errors accumulated so far. Does not take -Werror into account.ghcGiven a  that surrounds a HsPar or HsParTy , generate . values for the opening and closing bordering on the start and end of the spanghcContinuation that gets the rest of the input and the lexed commentghcstarting value for accumulator (reversed) - When we want to include a decorator '{-' in the commentghc%permitted language extensions enabledghcdiagnostic optionsghc"Supported Languages and Extensionsghcare safe imports on?ghckeeping Haddock comment tokensghckeep regular comment tokensghcIf this is enabled, '{-# LINE ... -#}' and '{-# COLUMN ... #-}' update the internal position kept by the parser. Otherwise, those pragmas are lexed as  and  tokens.None()*/19:;>ghcDisambiguate constructs that may appear when we do not know ahead of time whether we are parsing a type or a newtype/data constructor.?See Note [Ambiguous syntactic categories] for the general idea.See Note [Parsing data constructors is hard] for the specific issue this particular class is solving.ghcProcess the head of a type-level function/constructor application, i.e. the H in H a b c.ghc Disambiguate f x3 (function application or prefix data constructor).ghc Disambiguate f @t (visible kind application)ghc Disambiguate f # x (infix operator)ghc Disambiguate {-# UNPACK #-} t (unpack/nounpack pragma)ghcDisambiguate constructs that may appear when we do not know ahead of time whether we are parsing an expression, a command, or a pattern. See Note [Ambiguous syntactic categories]ghcSee Note [Body in DisambECP]ghcInfix operator representationghc Function argument representationghcReturn a command without ambiguity, or fail in a non-command context.ghcReturn an expression without ambiguity, or fail in a non-expression context.ghc"Disambiguate "... -> ..." (lambda)ghcDisambiguate "let ... in ..."ghcBring superclass constraints on InfixOp into scope. See Note [UndecidableSuperClasses for associated types]ghc%Disambiguate "f # x" (infix operator)ghcDisambiguate "case ... of ..."ghcDisambiguate "case" and "cases"ghcBring superclass constraints on FunArg into scope. See Note [UndecidableSuperClasses for associated types]ghc)Disambiguate "f x" (function application)ghc.Disambiguate "f @t" (visible type application)ghc'Disambiguate "if ... then ... else ..."ghc'Disambiguate "do { ... }" (do notation)ghc$Disambiguate "( ... )" (parentheses)ghc2Disambiguate a variable "f" or a data constructor MkF.ghc"Disambiguate a monomorphic literalghc"Disambiguate an overloaded literalghcDisambiguate a wildcardghc'Disambiguate "a :: t" (type annotation)ghc$Disambiguate "[a,b,c]" (list syntax)ghc5Disambiguate "$(...)" and "[quasi|...|]" (TH splices)ghcDisambiguate "f { a = b, ... }" syntax (record construction and record updates)ghcDisambiguate "-a" (negation)ghc-Disambiguate "(# a)" (right operator section)ghc&Disambiguate "(a -> b)" (view pattern)ghcDisambiguate "a@b" (as-pattern)ghc Disambiguate "~a" (lazy pattern)ghc Disambiguate "!a" (bang pattern)ghc,Disambiguate tuple sections and unboxed sumsghcValidate infixexp LHS to reject unwanted {-# SCC ... #-} pragmasghcDisambiguate infix operators. See Note [Ambiguous syntactic categories]ghcResult of parsing {-# UNPACK #-} or {-# NOUNPACK #-}.ghcEssentially a wrapper for a RuleBndr GhcPsghcmkClassDecl builds a RdrClassDecl, filling in the names for tycon and datacon by deriving them from the name of the class. We fill in the names for the tycon and datacon corresponding to the class, by deriving them from the name of the class itself. This saves recording the names in the interface file (which would be equally good).ghcConverts a list of Qs annotated with their  to binders without annotations. Only accepts specified variables, and errors if any of the provided binders has an ' annotation.ghc Converts Q annotated with its  to one without annotations. Only accepts specified variables, and errors if the provided binder has an ' annotation.ghcAdd the annotation for a 'where' keyword to existing  HsLocalBindsghcThe - for a stmtlist is based on either the location or the first semicolon annotion.ghcFunction definitions are restructured here. Each is assumed to be recursive initially, and non recursive definitions are discovered by the dependency analyser.ghcReinterpret a type constructor, including type operators, as a data constructor. See Note [Parsing data constructors is hard]ghcConstruct a GADT-style data constructor from the constructor names and their type. Some interesting aspects of this function:This splits up the constructor type into its quantified type variables (if provided), context (if provided), argument types, and result type, and records whether this is a prefix or record GADT constructor. See Note [GADT abstract syntax] in  GHC.Hs.Decls for more details.ghcThis rather gruesome function is used mainly by the parser. When parsing: data T a = T | T1 Int"we parse the data constructors as types? because of parser ambiguities, so then we need to change the  type constr to a  data constrThe exact-name case can occur when parsing: data [] a = [] | a : [a]3For the exact-name case we return an original name.ghcCheck whether the given list of type parameters are all type variables (possibly with a kind signature).ghcCheck if the gadt_constrlist is empty. Only raise parse error for `data T where` to avoid affecting existing error message, see #8258.ghcYield a parse error if we have a function applied directly to a do block etc. and BlockArguments is not enabled.ghcValidate the context constraints and break up a context into a list of predicates.  (Eq a, Ord b) --> [Eq a, Ord b] Eq a --> [Eq a] (Eq a) --> [Eq a] (((Eq a))) --> [Eq a] ghcAnnotate a type with either an {-# UNPACK #-} or a {-# NOUNPACK #-} pragma.ghcCheck for monad comprehensions1If the flag MonadComprehensions is set, return a U# context, otherwise use the usual U contextghcEnsure that a literal pattern isn't of type Addr#, Float#, Double#.ghcRejects declarations such as  data T = 'MkT (note the leading tick).ghcCheck if a fixity is valid. We support bypassing the usual bound checks for some special operators.ghc#Hint about bang patterns, assuming  BangPatterns is off.ghc precedenceghc operators~~~~~~~~~~None(9 ghc#16895 Ensure an infix expression's operator is a variable/constructor. Consider this example: $(uInfixE [|1|] [|id id|] [|2|])This infix expression is obviously ill-formed so we use this helper function to reject such programs outright.The constructors  permits should be in sync with  pprInfixExp> in Language.Haskell.TH.Ppr from the template-haskell library.ghccvtOpApp x op y converts op and y' and produces the operator application x op y. The produced tree of infix expressions will be left-biased, provided x is.We can see that cvtOpApp9 is correct as follows. The inductive hypothesis is that cvtOpApp x op y is left-biased, provided x7 is. It is clear that this holds for both branches (of cvtOpApp:), provided we assume it holds for the recursive calls to cvtOpApp. When we call cvtOpApp from cvtl, the first argument will always be left-biased since we have already run cvtl on it.ghccvtOpAppP x op y converts op and y' and produces the operator application x op y. The produced tree of infix patterns will be left-biased, provided x is.See the cvtOpApp+ documentation for how this function works.ghcConvert a Template Haskell  to an Q%. To avoid duplicating the logic in  here, we simply reuse  and perform surgery on the Q it returns to turn it into an Q.ghcConstructs an application of a type to arguments passed in a list.ghccvtOpAppT x op y converts op and y' and produces the operator application x op y. The produced tree of infix types will be right-biased, provided y is.See the cvtOpApp+ documentation for how this function works.ghcConvert Maybe Kind to a type family result signature. Used with data families where naming of the result is not possible (thus only kind or no signature is possible).ghcConvert type family result signature. Used with both open and closed type families.ghc0Convert injectivity annotation of a type family.ghcIf passed an empty list of Q/s, this simply returns the third argument (an Q). Otherwise, return an Q using the provided Q and Q.ghcIf passed an empty ., this simply returns the third argument (an Q). Otherwise, return an Q using the provided Q and Q.ghc lc returns J if lc is empty and K lc otherwise.This is much like , except that it returns a @ (Q 9). This is used specifically for constructing superclasses, datatype contexts (#20011), and contexts in GADT constructor types (#20590). We wish to avoid using K [] in the case of an empty contexts, as the pretty-printer always prints K" contexts, even if they're empty.ghc(name of first constructor of parent typeghcconvert constructor nameghcparent constructor nameghcThe location of the returned Q" if it needs an explicit forallghc#The converted type variable bindersghcThe converted rho typeghc8The complete type, quantified with a forall if necessaryghc%The original Template Haskell contextghcThe location of the returned Q# if it needs an explicit contextghcThe converted contextghcThe converted tau typeghc8The complete type, qualified with a context if necessaryNone +ghc#Extract identifier from Alex state.ghcLex  for warning messagesghc!Lex identifiers from a docstring.ghcadornment lengthghc Token lengthghc2The remaining input beginning with the found tokenghcA precise identifier parserghcA precise identifier parserNone'49Hghc,Represents a predicate on the column number.ColumnBound | Int -> Bool --------------+----------------- ColumnFrom n | (>=n)+The semigroup instance corresponds to (&&).ghcWarnings accumulated in HdkM.ghcThe state of HdkM.ghcAdd Haddock documentation accumulated in the parser state to a parsed HsModule.Reports badly positioned comments when -Winvalid-haddock is enabled.ghcThe inverse of | that merges partitioned items back into a flat list. Elements are put back into the order in which they appeared in the original program before partitioning, using BufPos to order them.=Precondition (unchecked): the input lists are already sorted.NoneghcInsert alignment checks (cf -falignment-sanitisation)  NonekghcReturn the UnitId of the home-unit. This is used to create labels.  None)*1ghcConstruct an AddEpAnn from the annotation keyword and the location of the keyword itselfghcConstruct an AddEpAnn from the annotation keyword and the location of the keyword itself, provided the span is not zero widthghcConstruct an AddEpAnn from the annotation keyword and the Located Token. If the token has a unicode equivalent and this has been used, provide the unicode variant of the annotation.ghcIf the  is using its unicode variant return the unicode variant of the annotationghc6Synonyms for AddEpAnn versions of AnnOpen and AnnCloseghc6Synonyms for AddEpAnn versions of AnnOpen and AnnCloseghcParse a Haskell module with Haddock comments. This is done in two steps: to build the AST# to insert Haddock comments into itThis is the only parser entry point that deals with Haddock comments. The other entry points (, (, etc) do not insert them into the AST.ghcInstead of getting the *enclosed* comments, this includes the *preceding* ones. It is used at the top level to get comments between top level declarations.None-ghcReturns True! if passed string is a statement.ghcReturns True, if passed string has an import declaration.ghcReturns True+ if passed string is an import declaration.ghcReturns True' if passed string is a declaration but  not a splice.None%&'(13ghcGeneral version of cantFindError which has some holes which allow GHC/GHCi to display slightly different error messages.zzzzzzzzNone )*1Noneghc)Initialize StgToJS settings from DynFlagsNone)Noneghc!Initialize LogFlags from DynFlagsNoneNoneghc Create a new  from DynFlags.Noneghc!Initialize RuleOpts from DynFlagsNoneNone@ None ghcLike +, but doesn't catch asynchronous exceptionsghcAtomically update the reference. Does not force the evaluation of the new variable contents. For strict update, use .ghcStrict variant of .ghc2Perform a computation with a different environmentghc1Perform a computation with an altered environment824"f e!NonekghcSame as k# but simplifies the unfolding firstkghc0Used for things that absolutely must be unfoldedkghcMake an INLINE unfolding that may be used unsaturated (ug_unsat_ok = unSaturatedOk) and that is reported as having its manifest arity (the number of outer lambdas applications will resolve before doing any work).kghcMake an INLINE unfolding that will be used once the RHS has been saturated to the given arity.kghcSees if the unfolding is pretty certain to inline. If so, return a *stable* unfolding for it, that will always inline. The CoreExpr is the WW'd and simplified RHS. In contrast, the unfolding template might not have been WW'd yet.ZkkkkkkkkkkkkkkkkZkkkkkkkkkkkkkkkkNoneP [ghcSimple optimiser optionsghcFast OutVarSet tracking which recursive RHSs we are analysing. See Note [Eta reduction in recursive RHSs]ghc+Deals with cloning; includes the InScopeSetghcDeals with preInlineUnconditionally; things that occur exactly once and are inlined without having first been simplifiedghcSimplifier optionslghcEta reduction on?lghcCoercion optimiser optionslghcUnfolding optionslghc)Default options for the Simple optimiser.lghcReturns Just (bndr,rhs) if the binding is a join point: If it's a JoinId, just return it If it's not yet a JoinId but is always tail-called, make it into a JoinId and return it. In the latter case, eta-expand the RHS if necessary, to make the lambdas explicit, as is required for join pointsPrecondition: the InBndr has been occurrence-analysed, so its OccInfo is validlghcReturns 'Just ([b1..bp], dc, [t1..tk], [x1..xn]) if the argument expression is a *saturated* constructor application of the form *let b1 in .. let bp in dc t1..tk x1 .. xn>, where t1..tk are the *universally-quantified* type args of dc. Floats can also be (and most likely are) single-alternative case expressions. Why does l return floats? We may have to look through lets and cases to detect that we are in the presence of a data constructor wrapper. In this case, we need to return the lets and cases that we traversed. See Note [exprIsConApp_maybe on data constructors with wrappers]. Data constructor wrappers are unfolded late, but we really want to trigger case-of-known-constructor as early as possible. See also Note [Activation for data constructor wrappers] in GHC.Types.Id.Make.We also return the incoming InScopeSet, augmented with the binders from any [FloatBind] that we returnllllll[ll[llll[llllll[llllllNone~ BghcData Constructor BoxerlghcUnbox small strict fieldslghcUnbox strict fieldslghc?Disable automatic field unboxing (e.g. if we aren't optimising)lghcStrict fields by defaultlghcUsed for imported data constructors See Note [Bangs on imported data constructors]ghcConjure a fresh local binder.ghc/Unpack/Strictness decisions from source module.This function should only ever be invoked for data constructor fields, and never on the field of a newtype constructor. See Note [HsImplBangs for newtypes].ghcWrappers+Workers and representation following UnpackStrictness decisionsghcEvery alternative of an unboxed sum has exactly one field, and we use unboxed tuples when we need more than one field. This generates an unboxed tuple when necessary, to be used in unboxed sum alts.ghc%a string which will form part of the 's nameghcthe type of the *8lllllllBlBlllllllllllllllllllllllllllllBl*lBllllBlllBllllllllllllllllll8llllllllllllNoneNNone|Noneighc9Initialise coercion optimiser configuration from DynFlagsghc7Initialise Simple optimiser configuration from DynFlagsghc+Extract GHCi options from DynFlags and stepNone(!ghc8What part (2) of Note [Worker/wrapper for CPR] collects. A 2 capturing whether the split does anything useful.-The list of transit variables (see the Note).The result builder expression for the wrapper. The original case binder if not useful.0The result unpacking expression for the worker.  if not useful.ghc Returned by 9. See also Note [Detecting recursive data constructors].ghcThe algorithm detected a loopghcThe algorithm detected no loop, went out of fuel or hit an .hs-boot fileghc'Is the worker/wrapper split profitable?ghcDescribes the outer shape of an argument to be unboxed or left as-is Depending on how s is instantiated (e.g., W or Y).ghc/We ran out of strictness info. Leave untouched.ghcThe argument is used strictly or the returned product was constructed, so unbox it.ghc'The argument/field was absent. Drop it.ghcThe information needed to build a pattern for a DataCon to be unboxed. The pattern can be generated from  and  via . The coercion  is for newtype wrappers. If we get DataConPatContext dc tys co for some type ty and *dataConRepInstPat ... dc tys = (exs, flds), thendc exs flds :: T tys@ co :: T tys ~ tys will be W or Y.ghcGenerate workers even if the only effect is some args get passed unlifted. See Note [WW for calling convention]ghc&Used for absent argument error messageghcWhether to enable "Constructed Product Result" analysis. (Originally from DOI: 10.1017/S0956796803004751)ghc"Options for the "Simple optimiser"ghc)Environment of type/data family instancesghcGiven a function definition data T = MkT Int Bool Char f :: (a, b) -> Int -> T f = \x y -> E mkWwBodies _ f7 ['x::(a,b)','y::Int'] '(a,b)' ['1P(L,L)', '1P(L)'] '1' returnsThe wrapper body context for the call to the worker function, lacking only the  for the worker function: W[_] :: Id -> CoreExpr W[work_fn] = \x y -> -- args of the wrapper (cloned_arg_vars) case x of (a, b) -> -- unbox wrapper args (wrap_fn_str) case y of I# n -> -- case a b n of -- call to the worker fun (call_work) (# i, b, c #) -> MkT i b c -- rebox result (wrap_fn_cpr)The worker body context that wraps around its hole reboxing defns for x and y, as well as returning CPR transit variables of the unboxed MkT result in an unboxed tuple: w[_] :: CoreExpr -> CoreExpr w[fn_rhs] = \a b n -> -- args of the worker (work_lam_args) let { y = I# n; x = (a, b) } in -- reboxing wrapper args (work_fn_str) case x y of -- call to the original RHS (call_rhs) MkT i b c -> (# i, b, c #) -- return CPR transit vars (work_fn_cpr)NB: The wrap_rhs hole is to be filled with the original wrapper RHS x y -> E". This is so that we can also use w to transform stable unfoldings, the lambda args of which may be different than x and y.Id details for the worker function like demands on arguments and its join arity.All without looking at E (except for beta reduction, see Note [Join points and beta-redexes]), which allows us to apply the same split to function body and its unfolding(s) alike.ghc Version of 6 that does beta reduction on-the-fly. PRECONDITION: The arg expressions are not free in any of the lambdas binders.ghc'Whether the worker needs an additional `Void#` arg as per Note [Protecting the last value argument] or Note [Preserving float barriers].ghc Inserts a `Void#` arg as the last argument. Why last? See Note [Worker/wrapper needs to add void arg last]ghc0Do we want to create workers just for unlifting?ghcWW split not profitableghcWW split profitableghc Unwraps the   decision encoded in the given W and returns a - as well the nested demands on fields of the # to unbox.ghc*Unboxing strategy for constructed results.ghcTries to find a suitable absent filler to bind the given absent identifier to. See Note [Absent fillers].If mkAbsentFiller _ id == Just e, then e, is an absent filler with the same type as id/. Otherwise, no suitable filler could be found.ghcExactly P3, but lacks the (ASSERT'ed) precondition that the # may not have existentials. The lack of cloning the existentials this function "dubious"; only use it where type variables aren't substituted for! Why may the data con bind existentials? See Note [Which types are unboxed?]ghcisRecDataCon _ fuel dc, where tc = dataConTyCon dc returnsDefinitelyRecursive if the analysis found that tc" is reachable through one of dc's arg_tys.NonRecursiveOrUnsure if the analysis found that tc& is not reachable through one of dc$'s fields (so surely non-recursive).NonRecursiveOrUnsure when fuel /= Infinity and fuel expansions of nested data TyCons were not enough to prove non-recursiveness, nor arrive at an occurrence of tc thus proving recursiveness. (So not sure if non-recursive.)NonRecursiveOrUnsure when we hit an abstract TyCon (one without visible DataCons), such as those imported from .hs-boot files. Similarly for stuck type and data families.If fuel = Infinity and there are no boot files involved, then the result is never Nothing. and the analysis is a depth-first search. If fuel = > f, then the analysis behaves like a depth-limited DFS and returns Nothing! if the search was inconclusive.See Note [Detecting recursive data constructors] for which recursive DataCons we want to flag.ghcEntrypoint to CPR WW. See Note [Worker!wrapper for CPR] for an overview.ghc*Part (1) of Note [Worker/wrapper for CPR].ghc3See if we want to unbox the result and hand off to .ghcImplements the main bits of part (2) of Note [Worker/wrapper for CPR]ghc5Implements part (3) of Note [Worker/wrapper for CPR].8If `move_transit_vars [a,b] = (unbox, tup)` then * a and b are the *transit vars* to be returned from the worker to the wrapper * `unbox scrut alt = (case  scrut of (# a, b #) ->  alt)` * `tup = (# a, b #)` There is a special case for when there's 1 transit var, see Note [No unboxed tuple for single, unlifted transit var].ghcThe multiplicity of a case binder unboxing a constructed result. See Note [Linear types and CPR]ghcThe original functionghc"Manifest args of original functionghcResult type of the original function, after being stripped of argsghcStrictness of original functionghcInfo about function resultghcType of the argumentghcHow the arg was used  NoneghcAn environment storing Y$s for local Ids. Puts binders with Y in a space-saving IntSet+. See Note [Efficient Top sigs in SigEnv].ghc#Ids that have something other than Y.ghcAll these Ids have Y . Like a VarSet, but more efficient.ghcMemoised result of ghcNeeded when expanding type families and synonyms of product types.ghcTrue only on every first iteration in a fixed-point iteration. See Note [Initialising strictness] in GHC.Core.Opt.DmdAnalghc1Current approximation of signatures for local idsghcThe abstract semantic function O_O : Expr -> Env -> A from "Constructed Product Result Analysis for Haskell"ghcThe abstract semantic function O_O : Expr -> Env -> A from "Constructed Product Result Analysis for Haskell"ghc5Precise, hand-written CPR transformers for select IdsghcGet a (possibly nested) Y for an application of a #& worker, given a saturated number of Ys for its field expressions. Implements the Nested part of Note [Nested CPR].ghc$See Note [Trimming to mAX_CPR_SIZE].ghcProcess the RHS of the binding for a sensible arity, add the CPR signature to the Id, and augment the environment with the signature as well.ghcReturns an expandable unfolding (See Note [exprIsExpandable] in GHC.Core.Utils8) that has So effectively is a constructor application.ghc2Extend an environment with the (Id, CPR sig) pairsghc;Extend an environment with the CPR sigs attached to the idsghc7Extend an environment with the same CPR sig for all idsghc A version of  for a binder of which we don't see the RHS needed to compute a Y (e.g. lambdas and DataAlt field binders). In this case, we can still look at their demand to attach CPR signatures anticipating the unboxing done by worker/wrapper. See Note [CPR for binders that will be unboxed].ghc Produces a Y? according to how a strict argument will be unboxed. Examples:A head-strict demand 1!L would translate to 1A product demand  1!P(1!L,L) would translate to 1(1,)A product demand  1!P(1L,L) would translate to 1(,)3, because the first field will not be unboxed.ghcexpression to be denoted by a Yghcthe updated expression and its Yghcexpression to be denoted by a Yghcthe updated expression and its YghcCPR type of the scrutineeghccurrent alternativeghcThe analysis environmentghc The functionghcinfo about incoming value argumentsghc"The demand type of the applicationNoneghcSee Note [Thunk splitting].splitThunk converts the *non-recursive* binding x = e into x = let x' = e in case x' of I# y -> let x' = I# y in x' See comments above. Is it not beautifully short? Moreover, it works just as well when there are several binders, and if the binders are lifted E.g. x = e --> x = let x' = e in case x' of (a,b) -> let x' = (a,b) in x' Here, x' is a localised version of x, in case x is a top-level Id with an External Name, because Lint rejects local binders with External Names; see Note [About the NameSorts] in GHC.Types.Name.How can we do thunk-splitting on a top-level binder? See Note [Thunk splitting for top-level binders].NoneNoneghcReport the inlining of an identifier's RHS to the user, if requested. jjjjjjj jjjjjjjNoneyghcEach of these Ids was scrutinised by an enclosing case expression, at a level deeper than its binding level.The first LibCaseLevel is the *binding level* of the scrutinised Id, The second is the level *at which it was scrutinised*. (see Note [Avoiding fruitless liberate-case]) The former is a bit redundant, since you could always look it up in lc_lvl_env, but it's just cached here-The order is insignificant; it's a bag reallyThere's one element per scrutinisation; in principle the same Id may appear multiple times, although that'd be unusual: case x of { (a,b) -> ....(case x of ...) .. }ghcBinds *only* recursively defined ids, to their own binding group, and *only* in their own RHSsghcBinds all non-top-level in-scope Ids (top-level and imported things have a level of zero)ghcCurrent level The level is incremented when (and only when) going inside the RHS of a (sufficiently small) recursive function.ghcliberate case optionsghc#Options for the liberate case pass.ghcUnfolding optionsghc?Bomb-out size for deciding if potential liberatees are too big.NoneghcInitialize configuration for the liberate case Core optomization pass.NoneghcMemoised result of ghcTrue on first iteration only. See Note [Initialising strictness]ghcAnalysis optionsghc:An environment in which all demands are weak according to X2. See Note [Lazy and unleashable free variables].ghcOptions for the demand analysisghcValue of `-fmax-worker-args`. Don't unbox anything if we end up with more than this many args.ghcValue of `-fdmd-unbox-width`. See Note [Unboxed demand on function bodies returning small products]ghcGoverns whether the analysis should update boxity signatures. See Note [Don't change boxity without worker/wrapper].ghcValue of `-fdicts-strict` (on by default). When set, all functons are implicitly strict in dictionary args.ghcOutputs a new copy of the Core program in which binders have been annotated with demand and strictness information. Note: use seqBinds on the result to avoid leaks due to lazyness (cf Note [Stamp out space leaks in demand analysis])ghcWe attach useful (e.g. not W) ^3 to top-level bindings that satisfy this function.Basically, we want to know how top-level *functions* are *used* (e.g. called). The information will always be lazy. Any other top-level bindings are boring.;See also Note [Why care for top-level demand annotations?].ghcAnalyse a binding group and its "body", e.g. where it is in scope.It calls a function that knows how to analyse this "body" given an  with updated demand signatures for the binding group (reflecting their  idDmdSigInfo) and expects to receive a W in return, which it uses to annotate the binding group with their ^.ghc-Annotates uninteresting top level functions () with W!, the rest with the given demand.ghcUpdate the demand signature, but be careful not to change boxity info if  is True or if the signature is bottom. See Note [Don't change boxity without worker/wrapper] and Note [Boxity for bottoming functions].ghcLet bindings can be processed in two ways: Down (RHS before body) or Up (body before RHS). This function handles the up variant.It is very simple. For let x = rhs in body * Demand-analyse body2 in the current environment * Find the demand, rhs_dmd placed on x by body * Demand-analyse rhs in rhs_dmdThis is used for a non-recursive local let without manifest lambdas (see ).This is the LetUp rule in the paper @Higher-Order Cardinality Analysis@.ghcLet bindings can be processed in two ways: Down (RHS before body) or Up (body before RHS). This function handles the down variant.,It computes a demand signature (by means of +) and uses that at call sites in the body.It is used for toplevel definitions, recursive definitions and local non-recursive definitions that have manifest lambdas (cf. ). Local non-recursive definitions without a lambda are handled with LetUp.This is the LetDown rule in the paper @Higher-Order Cardinality Analysis@.ghcMimic the effect of , turning non-trivial argument expressions/RHSs into a proper let-bound thunk (lifted) or a case (with unlifted scrutinee).ghcA simple, syntactic analysis of whether an expression MAY throw a precise exception when evaluated. It's always sound to return L<. See Note [Which scrutinees may throw precise exceptions].ghc Recognises types that are * State# RealWorld * Unboxed tuples with a State# RealWorld+ field modulo coercions. This will detect D actions (even post Nested CPR! See T13380e) and user-written variants thereof by their type.ghc dmdAnalRhsSig analyses the given RHS to compute a demand signature for the LetDown rule. It works as follows:0assuming the weakest possible body sub-demand, Llooking at the definition"determining a strictness signatureSince it assumed a body sub-demand of L, the resulting signature is applicable at any call site.ghcThe result type after applying ] many arguments. Returns J% when the type doesn't have exactly ] many arrows.ghc.If given the (local, non-recursive) let-bound ,  determines whether we should process the binding up (body before rhs) or down (rhs before body).We use LetDown if there is a chance to get a useful strictness signature to unleash at call sites. LetDown is generally more precise than LetUp if we can correctly guess how it will be used in the body, that is, for which incoming demand the strictness signature should be computed, which allows us to unleash higher-order demands on arguments at call sites. This is mostly the case whenThe binding takes any arguments before performing meaningful work (cf. ];), in which case we are interested to see how it uses them.The binding is a join point, hence acting like a function, not a value. As a big plus, we know *precisely* how it will be used in the body; since it's always tail-called, we can directly unleash the incoming demand of the let binding on its RHS when computing a strictness signature. See [Demand analysis for join points].Thus, if the binding is not a join point and its arity is 0, we have a thunk and use LetUp, implying that we have no usable demand signature available when we analyse the let body.;Since thunk evaluation is memoised, we want to unleash its W of free vars at most once, regardless of how many times it was forced in the body. This makes a real difference wrt. usage demands. The other reason is being able to unleash a more precise product demand on its RHS once we know how the thunk was used in the let body.=Characteristic examples, always assuming a single evaluation:let x = 2*y in x + x => LetUp. Compared to LetDown, we find out that the expression uses y at most once.let x = (a,b) in fst x6 => LetUp. Compared to LetDown, we find out that b is absent.let f x = x*2 in f y => LetDown. Compared to LetUp, we find out that the expression uses y strictly, because we have f4's demand signature available at the call site.>join exit = 2*y in if a then exit else if b then exit else 3*y => LetDown. Compared to LetUp, we find out that the expression uses y' strictly, because we can unleash exit's signature at each call site.For a more convincing example with join points, see Note [Demand analysis for join points].ghc9How many registers does this type take after unarisation?ghc Unset the  flag if any of the given bindings is a DFun binding. Part of the mechanism that detects Note [Do not strictify a DFun's parameter dictionaries].ghcExtend an environment with the strictness sigs attached to the Idsghc7Demand put on the "body" (important for join points)ghcHow to analyse the "body", e.g. where the binding is in scopeghcThe analysis environmentghc The variableghc!The evaluation context of the varghcThe demand type unleashed by the variable in this context. The returned DmdEnv includes the demand on this function plus demand on its free variables See Note [What are demand signatures?] in GHC.Types.DemandghcType of the let-bound IdghcHow the Id is usedvNone D!&ghc&< is an abstract type that supports the following operations:Pretty printingIn a C file, does it need to be declared before use? (i.e. is it guaranteed to be already in scope in the places we need to refer to it?)If it needs to be declared, what type (code or data) should it be declared to have?.Is it visible outside this object file or not?#Is it "dynamic" (see details below)Eq and Ord, so that we can make sets of CLabels (currently only used in outputting C as far as I can tell, to avoid generating more than one declaration for any given label).3Converting an info table label into an entry label.CLabel usage is a bit messy in GHC as they are used in a number of different contexts:!By the C-- AST to identify labelsBy the unregisterised C code generator ("PprC") for naming functions (hence the name &)9By the native and LLVM code generators to identify labelsFor extra fun, each of these uses a slightly different subset of constructors (e.g.  and / are used only in the NCG and LLVM backends).In general, we use  to represent Haskell things early in the pipeline. However, later optimization passes will often represent blocks they create with  where there is no obvious  to hang off the label.gghcStyle of label pretty-printing.When we produce C sources or headers, we have to take into account that C compilers transform C labels when they convert them into symbols. For example, they can add prefixes (e.g., "_" on Darwin) or suffixes (size for stdcalls on Windows). So we provide two ways to pretty-print CLabels: C style or Asm style.gghc+C label style (used by C and LLVM backends)gghc%Asm label style (used by NCG backend)gghcInfo Table Provenance Entry See Note [Mapping Info Tables to Source Positions]ghcWhat type of Cmm label we're dealing with. Determines the suffix appended to the name when a CLabel.CmmLabel is pretty printed.ghc'misc rts info tables, suffix _infoghc(misc rts entry points, suffix _entryghc'misc rts ret info tables, suffix _infoghc&misc rts return points, suffix _retghc'misc rts data bits, eg CHARLIKE_closureghc misc rts codeghcclosures eg CHARLIKE_closureghc)a prim call to some hand written Cmm codeghcSelector thunksghc AP thunksghc_fast versions of generic applygghc=Which module is the info table from, and which number was it.ghcLabel for closureghc*Info tables for closures; always read-onlyghc Entry pointghcSlow entry pointghc)Like InfoTable but not externally visibleghc%Like Entry but not externally visibleghc7Label of place to keep Ticky-ticky hit info for this IdghcConstructor entry point, when `-fdistinct-info-tables` is enabled then each usage of a constructor will be given a unique number and a fresh info table will be created in the module where the constructor is used. The argument is used to keep track of which info table a usage of a constructor should use. When the argument is J then it uses the info table which is defined in the module where the datatype is declared, this is the usual case. When it is (Just (m, k)) it will use the kth info table defined in module m. The point of this inefficiency is so that you can work out where allocations of data constructors are coming from when you are debugging.ghcCorresponding info tableghc!Table of closures for Enum tyconsghc5Content of a string literal. See Note [Bytes label].ghcLike LocalInfoTable but for a proc-point block instead of a closure entry-point. See Note [Proc-point local block entry-points].ghcUsed for dynamic allocationsghc,Used to track dynamic hits of tag inference.gghc'Record where a foreign label is stored.gghcLabel is in a named packagegghcLabel is in some external, system package that doesn't also contain compiled Haskell code, and is not associated with any .hi files. We don't have to worry about Haskell code being inlined from external packages. It is safe to treat the RTS package as "external".hghcLabel is in the package currently being compiled. This is only used for creating hacky tmp labels during code generation. Don't use it in any code that might be inlined across a package boundary (ie, core code) else the information will be wrong relative to the destination module.hghc Indicate if  GHC.CmmToC has to generate an extern declaration for the label (e.g. "extern StgWordArray(foo)"). The type is fixed to StgWordArray.Symbols from the RTS don't need "extern" declarations because they are exposed via "rtsinclude&Stg.h" with the appropriate type. See h.The fixed StgWordArray type led to "conflicting types" issues with user provided Cmm files (not in the RTS) that declare data of another type (#15467 and test for #17920). Hence the Cmm parser considers that labels in data sections don't need the "extern" declaration (just add one explicitly if you need it).See  https://gitlab.haskell.org/ghc/ghc/-/wikis/commentary/compiler/backends/ppr-c#prototypes/ for why extern declaration are needed at all.ghcA label related to the definition of a particular Id or Con in a .hs file.ghcA label from a .cmm file that is not associated with a .hs level Id.ghcA label with a baked-in / algorithmically generated name that definitely comes from the RTS. The code for it must compile into libHSrts.a / libHSrts.so If it doesn't have an algorithmically generated name then use a CmmLabel instead and give it an appropriate UnitId argument.ghcA label associated with a block. These aren't visible outside of the compilation unit in which they are defined. These are generally used to name blocks produced by Cmm-to-Cmm passes and the native code generator, where we don't have a 4 to associate the label to and therefore can't use .ghcA C (or otherwise foreign) label.ghcLocal temporary label used for native (or LLVM) code generation; must not appear outside of these contexts. Use primarily for debug informationghcA label "derived" from another & by the addition of a suffix. Must not occur outside of the NCG or LLVM code generators.ghcA per-module metadata label.ghcThese labels are generated and used inside the NCG only. They are special variants of a label used for dynamic linking see module GHC.CmmToAsm.PIC for details.ghcThis label is generated and used inside the NCG only. It is used as a base for PIC calculations on some platforms. It takes the form of a local numeric assembler label '1'; and is pretty-printed as 1b, referring to the previous definition of 1: in the assembler source file.ghcA label before an info table to prevent excessive dead-stripping on darwinghc"Per-module table of tick locationsghcStatic reference tableghc"A bitmap (function or case return)hghcFor debugging problems with the CLabel representation. We can't make a Show instance for CLabel because lots of its components don't have instances. The regular Outputable instance only shows the label name, and not its other info.hghcDecides between external and local labels based on the names externality.hghcMake a foreign labelhghc-Update the label size field in a ForeignLabelhghc+Whether label is a top-level string literalhghc8Whether label is a non-haskell label (defined in C code)hghcWhether label is a static closure label (can come from haskell or cmm)hghc Whether label is a .rodata labelhghc2Whether label is points to some kind of info tablehghc4Whether label points to an info table defined in Cmmhghc1Whether label is points to constructor info tablehghc,Get the label size field from a ForeignLabelhghcA standard string unpacking thunk. See Note [unpack_cstring closures] in StgStdThunks.cmm.hghcA standard string unpacking thunk. See Note [unpack_cstring closures] in StgStdThunks.cmm.hghc*A label indicating the end of a procedure.hghcConstruct a label for a DWARF Debug Information Entity (DIE) describing another symbol.hghc7If a label is a local block label then return just its M , otherwise J.hghcCheck whether a label corresponds to a C function that has a prototype in a system header somewhere, or is built-in to the C compiler. For these labels we avoid generating our own C prototypes.hghcIs a CLabel visible outside this object file or not? From the point of view of the code generator, a name is externally visible if it has to be declared as exported in the .o file's symbol table; that is, made non-static.ghcWork out the general type of data at the address of this label whether it be code, data, or static GC object.hghcIs a &. defined in the current module being compiled?Sometimes we can optimise references within a compilation unit in ways that we couldn't for inter-module references. This provides a conservative estimate of whether a & lives in the current module.hghcDoes a & need dynamic linkage?When referring to data in code, we need to know whether that data resides in a DLL or not. [Win32 only.]  labelDynamic returns True if the label is located in a DLL, be it a data reference or not.hghc;Generate a label for a procedure internal to a module (if Opt_ExposeAllSymbols/ is enabled). See Note [Internal proc labels].hghcDon't depend on this if you need determinism. No determinism in the ncg backend, so we use the unique for Ord. Even if it pains me slightly.ghcencodes the suffix of the labelghc"what package the label belongs to.ghc.does the label need an "extern .." declarationghc)identifier giving the prefix of the labelghcencodes the suffix of the labelghcname of the imported label.ghc possible '9n' suffix for stdcall functions When generating C, the 'n' suffix is omitted, but when generating assembler we must add it to the label.ghc%what package the foreign label is in.ghcsuffixhghcthe current moduleghcthe internal proc labelhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh&hhhhh&ggggggggggghgggggggggghh&hhggghgggggggghhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhggggggghhhhhhhhhhhhhhhhhhhhhhhhhhhhhgggh&hhhhhNoneHghcA map storing all the different uses of a specific data constructor and the approximate source position that usage arose from. The > is an incrementing identifier which distinguishes each usage of a constructor in a module. It is paired with the source position the constructor was used at, if possible and a string which names the source location. This is the same information as is the payload for the 6 constructor.ghc A map from a ? to the best approximate source position that name arose from.ghcPosition and information about an info table. For return frames these are the contents of a .  NoneKJghc3Try to find the best source position surrounding a . The heuristic strips ticks from the current expression until it finds one which is from the module currently being compiled. This is the same method that the DWARF information uses to give locations to info tables.2It is usually a better alternative than using the - which is carefully propagated downwards by . It's "quick" because it works only using immediate context rather than looking at the parent context like NoneKghc4Initialize STG pretty-printing options from DynFlagsNone 19Lghc3If the argument expression is (potential chain of) Z, return the head of the app chain, and collect ticks/args along the chain.  NoneLNoneOghc-Create HPC initialization C code for a moduleEach module compiled with -fhpc declares an initialisation function of the form `hpc_init_ module?()`, which is emitted into the _stub.c file and annotated with  attribute9((constructor)) so that it gets executed at startup time.The function's purpose is to call hs_hpc_module to register this module with the RTS, and it looks something like this: static void hpc_init_Main(void) __attribute__((constructor)); static void hpc_init_Main(void) { extern StgWord64 _hpc_tickboxes_Main_hpc[]; hs_hpc_module("Main",8,1150288664,_hpc_tickboxes_Main_hpc); }NoneOiiMiMMMiiiNone[ghcCommon things that we can do with instructions, on all architectures. These are used by the shared parts of the native code generator, specifically the register allocators.ghcGet the registers that are being used by this instruction. regUsage doesn't need to do any trickery for jumps and such. Just state precisely the regs read and written by that insn. The consequences of control flow transfers, as far as register allocation goes, are taken care of by the register allocator.ghcApply a given mapping to all the register references in this instruction.ghcChecks whether this instruction is a jump/branch instruction. One that can change the flow of control in a way that the register allocator needs to worry about.ghcGive the possible destinations of this jump instruction. Must be defined for all jumpish instructions.ghcChange the destination of this jump instruction. Used in the linear allocator when adding fixup blocks for join points.ghc5An instruction to spill a register into a spill slot.ghc6An instruction to reload a register from a spill slot.ghc?See if this instruction is telling us the current C stack deltaghcCheck whether this instruction is some meta thing inserted into the instruction stream for other purposes.Not something that has to be treated as a real machine instruction and have its registers allocated. eg, comments, delta, ldata, etc.ghcCopy the value in a register to another one. Must work for all register classes.ghcTake the source and destination from this reg -> reg move instruction or Nothing if it's not oneghcMake an unconditional jump instruction. For architectures with branch delay slots, its ok to put a NOP after the jump. Don't fill the delay slot with an instruction that references regs or you'll confuse the linear allocator.ghcPretty-print an instruction§ghcHolds a list of source and destination registers used by a particular instruction.Machine registers that are pre-allocated to stgRegs are filtered out, because they are uninteresting from a register allocation standpoint. (We wouldn't want them to end up on the free list!)As far as we are concerned, the fixed registers simply don't exist (for allocation purposes, anyway).ƧghcNo regs read or written to.ghcthe reg to spillghcthe current stack deltaghcspill slot to useghc instructionsghcthe reg to reload.ghcthe current stack deltaghcthe spill slot to useghc instructionsghcsource registerghcdestination registerƧ§çŧħ§ŧħçƧNone ]WoghcSets of registersoghcA stack area is either the stack slot where a variable is spilled or the stack space where function arguments and results are passed.oghcReturns an alignment in bytes of a CmmExpr when it's a statically known integer constant, otherwise returns an alignment of 1 byte. The caller is responsible for using with a sensible CmmExpr argument.oooooooooooooooooooooo????????????????????????>?>>>>>>>>>>>>>>>>>>>>>>>>>?>>================<<<<<<;<<<<;;;;<<<<<<<<<<<<<<<<<<<<<;;<<<<<<<<<<<<<<<<<>>>>>>>>>>===============================================>>>>>>>>>>>>>>>>=>>>=========>>===========>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>========<<<<<<<<<<<<<<<=<<=<<<<======;;;;;;;;;;;;;;;ooooooooooo=====ooooooooooooo===<<<<<<<<<<<<<<<<<<<<<===================oooooooooooooooooooooooooooNonearɧȧ̧ͧ˧ʧȧɧʧ˧̧ͧNoneaϧΧҧӧѧЧΧϧЧѧҧӧNoneb էԧاק֧ԧէ֧קاNonebSڧ٧ݧܧۧ٧ڧۧܧݧNonebߧާާߧNonebNonec(NonecoNonecNonecNoneeghcReturns L if this global register is stored in a caller-saves machine register.ghcHere is where the STG register map is defined for each target arch. The order matters (for the llvm backend anyway)! We must make sure to maintain the order here with the order used in the LLVM calling conventions. Note that also, this isn't all registers, just the ones that are currently possibly mapped to real registers.None)*6t$ghcTick scope identifier, allowing us to reason about what annotations in a Cmm block should scope over. We especially take care to allow optimisations to reorganise blocks without losing tick association in the process.ghcThe global scope is the "root" of the scope graph. Every scope is a sub-scope of the global scope. It doesn't make sense to add ticks to this scope. On the other hand, this means that setting this scope on a block means no ticks apply to it.ghcConstructs a new sub-scope to an existing scope. This allows us to translate Core-style scoping rules (see  tickishScoped2) into the Cmm world. Suppose the following code:tick 1# case ... of A -> tick 2 ... B -> tick 3 ...We want the top-level tick annotation to apply to blocks generated for the A and B alternatives. We can achieve that by generating tick 1 into a block with scope a, while the code for alternatives A and B gets generated into sub-scopes a/b and a/c respectively.ghcA combined scope scopes over everything that the two given scopes cover. It is therefore a sub-scope of either scope. This is required for optimisations. Consider common block elimination: A -> tick 2, case ... of C -> [common] B -> tick 3 case ... of D -> [common]We will generate code for the C and D alternatives, and figure out afterwards that it's actually common code. Scoping rules dictate that the resulting common block needs to be covered by both tick 2 and tick 3, therefore we need to construct a scope that is a child to *both* scope. Now we can do that - if we assign the scopes ac and bd to the common-ed up blocks, the new block could have a combined tick scope ac+bd, which both tick 2 and tick 3 apply to.ghcA convention maps a list of values (function arguments or return values) to registers or stack locations.ghc top-level Haskell functions use NativeDirectCall, which maps arguments to registers starting with R2, according to how many registers are available on the platform. This convention ignores R1, because for a top-level function call the function closure is implicit, and doesn't need to be passed.ghcnon-top-level Haskell functions, which pass the address of the function closure in R1 (regardless of whether R1 is a real register or not), and the rest of the arguments in registers or on the stack.ghca native return. The convention for returns depends on how many values are returned: for just one value returned, the appropriate register is used (R1, F1, etc.). regardless of whether it is a real register or not. For multiple values returned, they are mapped to registers or the stack.ghc/Slow entry points: all args pushed on the stackghcEntry to the garbage collector: uses the node reg! (TODO: I don't think we need this --SDM)ghcOutput all scope paths.ghcReturns the head uniques of the scopes. This is based on the assumption that the Unique of SubScope identifies the underlying super-scope. Used for efficient equality and comparison, see below.ghcChecks whether two tick scopes are sub-scopes of each other. True if the two scopes are equal.©ghcCombine two tick scopes. The new scope should be sub-scope of both parameters. We simplify automatically if one tick scope is a sub-scope of the other already.©KK©Noneu==None)*ws  None)*19{ ghc%Static data, after SRTs are generatedghc8a literal value, size given by cmmLitRep of the literal.ghc uninitialised data, N bytes longghc1string of 8-bit values only, not zero terminated.ghc+an embedded binary file and its byte lengthghc!Info table as a haskell data typeghcCmmTopInfo is attached to each CmmDecl (see defn of CmmGroup), and contains the extra info (beyond the executable code) that belongs to that CmmDecl.ghcA top-level chunk, abstracted over the type of the contents of the basic blocks (Cmm or instructions are the likely instantiations).ghcRaw1 cmm group (TODO (osa): not sure what that means)ghcCmm group with SRTsghcCmm group before SRT generationghc?Should a data in this section be considered constant at runtimeghcThe branch block id is that of the first block in the branch, which is that branch's entry pointoooooooooooooooooooooo????????????????????????>?>>>>>>>>>>>>>>>>>>>>>>>>>?>>©================<<<<<<;<<<<;;;;<<<<<<<<<<<<<<<<<<<<<;;<<<<<<<<<<<<<<<<<<ݩީ۩ܩߩooooooooooooooooooooooooooooo========>>>>>>>>>>>===============================================>>>>>>>>>>>>>>>>=>>>=========>>===========>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>========<<<<<<<<<<<<<<<=<<=<<<<======;;;;;;;;;;;;;;;[[[[[[[[Kߩݩީ۩ܩ[[[[[[[[Noneghc0Excludes void arguments (LocalReg is never void)ghcalways equal to ]: of sli_id, i.e. unarised arity, including void argumentsêghc (), it's imperfect but works with wasm-ld.ghcDefined symbols with  visibility.ghcTarget platformghcRepresentation of WebAssembly control flow. Normally written as  WasmControl s e pre post  Type parameter s is the type of (unspecified) statements. It might be instantiated with an open Cmm block or with a sequence of Wasm instructions. Parameter e( is the type of expressions. Parameter pre represents the values that are expected on the WebAssembly stack when the code runs, and post2 represents the state of the stack on completion.ѫghcThe w type variable in the Wasm IR stands for "platform word type", so  on wasm32, and  on wasm64. This way, we can make the codegen logic work on both wasm32/wasm64 in a type-safe manner.ghcMost are Cmm functions, but may also contain synthesized function of other types, sigh.ghc No need to remember the symbols.ghcWe need to remember the symbols. Determinism is achieved by sorting symbols before writing the assembly.ghcNeither Cmm or Wasm type system takes integer signedness into account, therefore we always round up a o9 to the right width and handle it as an untyped integer.ghcWebAssembly doesn't really have proper read-only memory regions yet. Neverthless we add the .rodata logic here, wasm-ld will aggregate all .rodata sections into a single one, which adds possibility for runtime checks later, either via a customized runtime, or via code instrumentation. See https://github.com/llvm/llvm-project/blob/b296aed8ae239c20ebdd7969e978f8d2a3b9c178/lld/wasm/Writer.cpp#L856ghcRepresents whether a symbol is a data symbol or a function symbol. Unlike linkers for other targets, wasm-ld does panic at link-time if it finds symbol kind inconsistency between the definition site and other use sites.Currently we solely rely on isCFunctionLabel to determine a symbol's kind, but it does take extra effort to make it work. The main source of inconsistency arises from hand-written Cmm sources, where it's possible to refer to external entities like xxx_info and  xxx_closure without explicit import CLOSURE declarations. The Cmm parser will implicitly assume those are foreign function labels, and then this will break the WebAssembly backend. #22368 provides more context on this issue.9tl;dr for any GHC contributor that accidentally triggers wasm-ld errors when hacking Cmm: whatever data symbols are used in new code, just add the corresponding import CLOSURE+ declarations at the top of that Cmm file.ghc,Not defined in the current compilation unit. ([ undefined binding=global vis=default ]ghc0Defined, not visible to other compilation units. [ binding=local vis=default ]ghc,Defined, visible to other compilation units.Adds .hidden & .globl# directives in the output assembly. [ binding=global vis=hidden ]ghc,For simplicity, we record other metadata in / by need, instead of carrying them along with .ghcThe type of a WebAssembly function, loop, block, or conditional. This type says what values the code expects to pop off the stack and what values it promises to push. The WebAssembly standard requires that this type appear explicitly in the code.ghcList of WebAssembly types used to describe the sequence of WebAssembly values that a block of code may expect on the stack or leave on the stack.ghc+Singleton type useful for programming with  at the type level.ghcWebAssembly type of a WebAssembly value that WebAssembly code could either expect on the evaluation stack or leave on the evaluation stack.¬ͫΫɫ«ūǫƫīëʫȫϫЫѫ߫ҫ֫ԫګ۫ثܫݫޫӫ٫׫ի˫̫ѫҫӫԫի֫׫ث٫ګ۫ܫݫޫ߫ϫЫͫΫ˫̫«ëīūƫǫȫɫʫ¬None)*1RӬghcModule : GHC.Wasm.ControlFlow Description : Representation of control-flow portion of the WebAssembly instruction setԬҬӬɫ«ūǫƫīëʫȫ«ëīūƫǫȫɫʫԬҬӬNoneլghcReturns the info table associated with the CmmDecl's entry point, if any.֬ghcReturn the list of BlockIds in a CmmDecl that are entry points for this proc (i.e. they may be jumped to from outside this proc).֬լլ֬NoneN ݩީ۩ܩߩ׬٬ج ٬ج׬ݩީ۩ܩߩNoneڬghc#Get bytes of a Float representation۬ghc$Get bytes of a Double representationݬghcEmit a ".string" directiveެghcEmit a ".incbin" directive+A NULL byte is added after the binary data.۬ڬܬެ߬ݬ۬ڬܬݬެ߬None@ghcLlvm cast operations.ghcInteger truncateghcInteger extend (zero fill)ghcInteger extend (sign fill)ghcFloat truncateghc Float extendghcFloat to unsigned IntegerghcFloat to signed IntegerghcUnsigned Integer to FloatghcSigned Int to FloatghcPointer to IntegerghcInteger to Pointerghc6Cast between types where no bit manipulation is neededghcLlvm compare operations.ghcEqual (Signed and Unsigned)ghcNot equal (Signed and Unsigned)ghcUnsigned greater thanghcUnsigned greater than or equalghcUnsigned less thanghcUnsigned less than or equalghcSigned greater thanghcSigned greater than or equalghcSigned less thanghcSigned less than or equalghc Float equalghcFloat not equalghcFloat greater thanghcFloat greater than or equalghcFloat less thanghcFloat less than or equalghc)Llvm binary operators machine operations.ghc1add two integer, floating point or vector values.ghcsubtract two ...ghc multiply ..ghc$unsigned integer or vector division.ghcsigned integer ..ghc*unsigned integer or vector remainder (mod)ghc signed ...ghc(add two floating point or vector values.ghcsubtract two ...ghc multiply ...ghc divide ...ghc remainder ...ghc Left shiftghc3Logical shift right Shift right, filling with zeroghcArithmetic shift right The most significant bits of the result will be equal to the sign bit of the left operand.ghcAND bitwise logical operation.ghcOR bitwise logical operation.ghcXOR bitwise logical operation.ghcLinkage type of a symbol.The description of the constructors is copied from the Llvm Assembly Language Reference Manual  -http://www.llvm.org/docs/LangRef.html#linkage5, because they correspond to the Llvm linkage types.ghcGlobal values with internal linkage are only directly accessible by objects in the current module. In particular, linking code into a module with an internal global value may cause the internal to be renamed as necessary to avoid collisions. Because the symbol is internal to the module, all references can be updated. This corresponds to the notion of the static keyword in C.ghc Globals with linkonce linkage are merged with other globals of the same name when linkage occurs. This is typically used to implement inline functions, templates, or other code which must be generated in each translation unit that uses it. Unreferenced linkonce globals are allowed to be discarded.ghcweak linkage is exactly the same as linkonce linkage, except that unreferenced weak globals may not be discarded. This is used for globals that may be emitted in multiple translation units, but that are not guaranteed to be emitted into every translation unit that uses them. One example of this are common globals in C, such as int X; at global scope.ghc appending linkage may only be applied to global variables of pointer to array type. When two global variables with appending linkage are linked together, the two global arrays are appended together. This is the Llvm, typesafe, equivalent of having the system linker append together sections/ with identical names when .o files are linked.ghcThe semantics of this linkage follow the ELF model: the symbol is weak until linked, if not linked, the symbol becomes null instead of being an undefined reference.ghcThe symbol participates in linkage and can be used to resolve external symbol references.ghc Alias for 3 but with explicit textual form in LLVM assembly.ghcSymbol is private to the module and should not appear in the symbol tableghcFunctions can have a fixed amount of parameters, or a variable amount.ghc1Different calling conventions a function can use.ghcThe C calling convention. This calling convention (the default if no other calling convention is specified) matches the target C calling conventions. This calling convention supports varargs function calls and tolerates some mismatch in the declared prototype and implemented declaration of the function (as does normal C).ghcThis calling convention attempts to make calls as fast as possible (e.g. by passing things in registers). This calling convention allows the target to use whatever tricks it wants to produce fast code for the target, without having to conform to an externally specified ABI (Application Binary Interface). Implementations of this convention should allow arbitrary tail call optimization to be supported. This calling convention does not support varargs and requires the prototype of al callees to exactly match the prototype of the function definition.ghcThis calling convention attempts to make code in the caller as efficient as possible under the assumption that the call is not commonly executed. As such, these calls often preserve all registers so that the call does not break any live ranges in the caller side. This calling convention does not support varargs and requires the prototype of all callees to exactly match the prototype of the function definition.ghcThe GHC-specific  registerised calling convention.ghcAny calling convention may be specified by number, allowing target-specific calling conventions to be used. Target specific calling conventions start at 64.ghc X86 Specific  convention. LLVM includes a specific alias for it rather than just using CC_Ncc.ghc#Different types to call a function.ghc(Normal call, allocate a new stack frame.ghc7Tail call, perform the call in the current stack frame.ghcLlvm Function Attributes.Function attributes are set to communicate additional information about a function. Function attributes are considered to be part of the function, not of the function type, so functions with different parameter attributes can have the same function type. Functions can have multiple attributes.Descriptions taken from )http://llvm.org/docs/LangRef.html#fnattrsghcThis attribute indicates that the inliner should attempt to inline this function into callers whenever possible, ignoring any active inlining size threshold for this caller.ghcThis attribute indicates that the source code contained a hint that inlining this function is desirable (such as the "inline" keyword in C/C++). It is just a hint; it imposes no requirements on the inliner.ghcThis attribute indicates that the inliner should never inline this function in any situation. This attribute may not be used together with the alwaysinline attribute.ghcThis attribute suggests that optimization passes and code generator passes make choices that keep the code size of this function low, and otherwise do optimizations specifically to reduce code size.ghcThis function attribute indicates that the function never returns normally. This produces undefined behavior at runtime if the function ever does dynamically return.ghcThis function attribute indicates that the function never returns with an unwind or exceptional control flow. If the function does unwind, its runtime behavior is undefined.ghcThis attribute indicates that the function computes its result (or decides to unwind an exception) based strictly on its arguments, without dereferencing any pointer arguments or otherwise accessing any mutable state (e.g. memory, control registers, etc) visible to caller functions. It does not write through any pointer arguments (including byval arguments) and never changes any state visible to callers. This means that it cannot unwind exceptions by calling the C++ exception throwing methods, but could use the unwind instruction.ghcThis attribute indicates that the function does not write through any pointer arguments (including byval arguments) or otherwise modify any state (e.g. memory, control registers, etc) visible to caller functions. It may dereference pointer arguments and read state that may be set in the caller. A readonly function always returns the same value (or unwinds an exception identically) when called with the same set of arguments and global state. It cannot unwind an exception by calling the C++ exception throwing methods, but may use the unwind instruction.ghcThis attribute indicates that the function should emit a stack smashing protector. It is in the form of a "canary"@a random value placed on the stack before the local variables that's checked upon return from the function to see if it has been overwritten. A heuristic is used to determine if a function needs stack protectors or not.If a function that has an ssp attribute is inlined into a function that doesn't have an ssp attribute, then the resulting function will have an ssp attribute.ghcThis attribute indicates that the function should always emit a stack smashing protector. This overrides the ssp function attribute.If a function that has an sspreq attribute is inlined into a function that doesn't have an sspreq attribute or which has an ssp attribute, then the resulting function will have an sspreq attribute.ghcThis attribute indicates that the code generator should not use a red zone, even if the target-specific ABI normally permits it.ghc>This attributes disables implicit floating point instructions.ghcThis attribute disables prologue / epilogue emission for the function. This can have very system-specific consequences.ghcLLVM Parameter Attributes.Parameter attributes are used to communicate additional information about the result or parameters of a functionghcThis indicates to the code generator that the parameter or return value should be zero-extended to a 32-bit value by the caller (for a parameter) or the callee (for a return value).ghcThis indicates to the code generator that the parameter or return value should be sign-extended to a 32-bit value by the caller (for a parameter) or the callee (for a return value).ghcThis indicates that this parameter or return value should be treated in a special target-dependent fashion during while emitting code for a function call or return (usually, by putting it in a register as opposed to memory).ghcThis indicates that the pointer parameter should really be passed by value to the function.ghcThis indicates that the pointer parameter specifies the address of a structure that is the return value of the function in the source program.ghcThis indicates that the pointer does not alias any global or any other parameter.ghcThis indicates that the callee does not make any copies of the pointer that outlive the callee itselfghcThis indicates that the pointer parameter can be excised using the trampoline intrinsics.ghcAn LLVM Function­ghc(Function align value, must be power of 2íghcParameter types and attributesĭghc'Indicates if this function uses varargsŭghcType of the returned valueƭghc&The calling convention of the functionǭghcLinkageType of the functionȭghc!Unique identifier of the functionɭghcLlvm Static Data.These represent the possible global level variables and constants.ʭghcA comment in a static section˭ghc#A static variant of a literal valuḙghcFor uninitialised dataͭghcDefines a static έghcA static arrayϭghcA static structure typeЭghcA static structure typeѭghcA pointer to other dataҭghcTruncateӭghcPointer to Pointer conversionԭghcPointer to Integer conversionխghcConstant addition operation֭ghcConstant subtraction operation׭ghcLlvm Literal Data.(These can be used inline in expressions.حghc'Refers to an integer constant (i64 42).٭ghcFloating point literalڭghc.Literal NULL, only applicable to pointer typesۭghcVector literalܭghc>Undefined value, random bit pattern. Useful for optimisations.ݭghcLLVM VariablesޭghcVariables with a global scope.߭ghc,Variables local to a function or parameters.ghcNamed local variables. Sometimes we need to be able to explicitly name variables (e.g for function arguments).ghcA constant variableghcMutable global variableghcConstant global variableghcAlias of another variableghcAn LLVM section definition. If Nothing then let LLVM decide the sectionghc Llvm Typesghc&An integer with a given width in bits.ghc32 bit floating pointghc64 bit floating pointghc 80 bit (x86 only) floating pointghc128 bit floating pointghcA pointer to a ghc An array of ghc A vector of ghcA ݭ can represent a label (address)ghc Void typeghcPacked structure typeghcUnpacked structure typeghc A type aliasghc LLVM Metadataghc3Function type, used to create pointers to functionsghc A type aliasghcA String in LLVMghc4A global mutable variable. Maybe defined or externalghcReturn the value of the ghcReturns the variable of the ghc Return the  of the ݭghc Return the  of a ׭ghc Return the  of the ɭghc Return the  for a ݭghc0Add a pointer indirection to the supplied type.  and  cannot be lifted.ghcLift a variable to  type.ghc:Remove the pointer indirection of the supplied type. Only  constructors can be lowered.ghcLower a variable of  type.ghcTest if the given  is an integerghcTest if the given  is a floating point typeghcTest if the given  is an  constructghcTest if the given  is an  constructghc Test if a ݭ is global.ghcWidth in bits of an , returns 0 if not applicableghc"The target architectures word sizeghc"The target architectures word sizeghcConvert a Haskell Double to an LLVM hex encoded floating point form. In Llvm float literals can be printed in a big-endian hexadecimal format, regardless of underlying architecture.See Note [LLVM Float Types].ȭíŭĭ­ƭǭ׭٭حڭܭۭɭխӭʭԭέ˭ѭͭϭЭ֭ҭ̭ݭޭ߭ݭ߭ޭ׭ܭۭڭ٭حɭ֭խԭӭҭѭЭϭέ̭ͭ˭ʭ­íĭŭƭǭȭNoneghcMetadata declarations. Metadata can only be declared in global scope.ghcNamed metadata. Only used for communicating module information to LLVM. ('!name = !{ [!] }' form).ghcMetadata node declaration. ('!0 = metadata !{ }' form).ghcAssociates some metadata with a specific label for attaching to an instruction.®ghcLLVM metadata expressionsǮghc)A reference to an un-named metadata node. ɮ®ĮîƮŮǮȮ ǮȮɮ®ƮŮĮîNone:ЮghcLlvm ExpressionsѮghcAllocate amount * sizeof(tp) bytes on the stack * tp: LlvmType to reserve room for * amount: The nr of tp's which must be allocatedҮghcPerform the machine operator op on the operands left and right * op: operator * left: left operand * right: right operandӮghcPerform a compare operation on the operands left and right * op: operator * left: left operand * right: right operandԮghcExtract a scalar element from a vector * val: The vector * idx: The index of the scalar within the vectorծghcExtract a scalar element from a structure * val: The structure * idx: The index of the scalar within the structure Corresponds to "extractvalue" instruction.֮ghcInsert a scalar element into a vector * val: The source vector * elt: The scalar to insert * index: The index at which to insert the scalar׮ghcAllocate amount * sizeof(tp) bytes on the heap * tp: LlvmType to reserve room for * amount: The nr of tp's which must be allocatedخghcLoad the value at location ptrٮghc(Atomic load of the value at location ptrڮghcNavigate in a structure, selecting elements * inbound: Is the pointer inbounds? (computed pointer doesn't overflow) * ptr: Location of the structure * indexes: A list of indexes to select the correct value.ۮghcCast the variable from to the to type. This is an abstraction of three cast operators in Llvm, inttoptr, ptrtoint and bitcast. * cast: Cast type * from: Variable to cast * to: type to cast toܮghcAtomic read-modify-write operation * op: Atomic operation * addr: Address to modify * operand: Operand to operation * ordering: Ordering requirementݮghcCompare-and-exchange operation * addr: Address to modify * old: Expected value * new: New value * suc_ord: Ordering required in success case * fail_ord: Ordering required in failure case, can be no stronger than suc_ord Result is an i1, true if store was successful.ޮghcCall a function. The result is the value of the expression. * tailJumps: CallType to signal if the function should be tail called * fnptrval: An LLVM value containing a pointer to a function to be invoked. Can be indirect. Should be LMFunction type. * args: Concrete arguments for the parameters * attrs: A list of function attributes for the call. Only NoReturn, NoUnwind, ReadOnly and ReadNone are valid here.߮ghcCall a function as above but potentially taking metadata as arguments. * tailJumps: CallType to signal if the function should be tail called * fnptrval: An LLVM value containing a pointer to a function to be invoked. Can be indirect. Should be LMFunction type. * args: Arguments that may include metadata. * attrs: A list of function attributes for the call. Only NoReturn, NoUnwind, ReadOnly and ReadNone are valid here.ghcMerge variables from different basic blocks which are predecessors of this basic block in a new variable of type tp. * tp: type of the merged variable, must match the types of the predecessor variables. * predecessors: A list of variables and the basic block that they originate from.ghcInline assembly expression. Syntax is very similar to the style used by GCC. * assembly: Actual inline assembly code. * constraints: Operand constraints. * return ty: Return type of function. * vars: Any variables involved in the assembly code. * sideeffect: Does the expression have side effects not visible from the constraints list. * alignstack: Should the stack be conservatively aligned before this expression is executed.ghc/A LLVM expression with metadata attached to it.ghcLlvm StatementsghcAssign an expression to a variable: * dest: Variable to assign to * source: Source expressionghcMemory fence operationghc!Always branch to the target labelghcBranch to label targetTrue if cond is true otherwise to label targetFalse * cond: condition that will be tested, must be of type i1 * targetTrue: label to branch to if cond is true * targetFalse: label to branch to if cond is falseghcComment Plain comment.ghcSet a label on this position. * name: Identifier of this label, unique for this moduleghcStore variable value in pointer ptr. If value is of type t then ptr must be of type t*. * value: Variable/Constant to store. * ptr: Location to store the value inghcMultiway branch * scrutinee: Variable or constant which must be of integer type that is determines which arm is chosen. * def: The default label if there is no match in target. * target: A list of (value,label) where the value is an integer constant and label the corresponding label to jump to if the scrutinee matches the value.ghcReturn a result. * result: The variable or constant to returnghcAn instruction for the optimizer that the code following is not reachableghcRaise an expression to a statement (if don't want result or want to use Llvm unnamed values.ghcA nop LLVM statement. Useful as its often more efficient to use this then to wrap LLvmStatement in a Just or [].ghc'LLVM atomic operations. Please see the  atomicrmw instruction in the LLVM documentation for a complete description.ghcLLVM ordering types for synchronization purposes. (Introduced in LLVM 3.0). Please see the LLVM documentation for a better description.ghc(Some partial order of operations exists.ghc?A single total order for operations at a single address exists.ghc"Acquire synchronization operation.ghc"Release synchronization operation.ghc,Acquire + Release synchronization operation.ghc&Full sequential Consistency operation.ghcAn LLVM FunctionghcThe body of the functions.ghc Prefix dataghc%The section to put the function into,ghcThe function attributes.ghcThe functions argumentsghc(The signature of this declared function.ghc6An LLVM Module. This is a top level container in LLVM.ghc&LLVM Functions defined in this module.ghcLLVM Functions used in this module but defined in other modules.ghc*Global variables to include in the module.ghcLLVM meta data.ghcLLVM Alias type definitions.ghc/Comments to include at the start of the module.ghcA block of LLVM code.ghcA list of LlvmStatement's representing the code for this block. This list must end with a control flow statement.ghcThe code label for this blockghc Block labelsЮٮѮܮޮ߮ۮݮӮԮծڮ֮Үخ׮Ю߮ݮܮڮٮ׮֮ծԮҮѮۮӮޮخNoneghcPrint out a whole LLVM module.ghcPrint out a multi-line comment, can be inside a function or on its ownghc;Print out a comment, can be inside a function or on its ownghc7Print out a list of global mutable variable definitionsghc.Print out a global mutable variable definitionghc&Print out a list of LLVM type aliases.ghcPrint out an LLVM type alias.ghc"Print out a list of LLVM metadata.ghc&Print out an LLVM metadata definition.ghc)Print out a list of function definitions.ghc Print out a function definition.ghc'Print out a function definition header.ghc)Print out a list of function declaration.ghcPrint out a function declaration. Declarations define the function type but don't define the actual body of the function.ghc Print out a list of LLVM blocks.ghcPrint out an LLVM block. It must be part of a function definition.ghcPrint out an LLVM block label.ghcPrint out an LLVM statement, with any metadata to append to the statement.ghcPrint out an LLVM expression.ghcShould always be a function pointer. So a global var of function type (since globals are always pointers) or a local var of pointer function type.ghc)Return the variable name or value of the ݭ* in Llvm IR textual representation (e.g. @x, %y or 42).ghc)Return the variable name or value of the ݭ* in a plain textual representation (e.g. x, y or 42).ghcPrint a literal value. No type.ghc Blank line.ghcExclamation point.None ®ĮîƮŮǮȮЮٮѮܮޮ߮ۮݮӮԮծڮ֮Үخ׮ȭíŭĭ­ƭǭ׭٭حڭܭۭɭխӭʭԭέ˭ѭͭϭЭ֭ҭ̭ݭޭ߭ȭǭƭŭĭí­ЮӮخޮۮѮҮԮծ֮׮ٮڮܮݮ߮ݭޭ߭ɭʭ˭̭ͭέϭЭѭҭӭԭխ֭׭ح٭ڭۭܭ®îĮŮƮǮȮNone ghc;Get the LlvmVar function variable storing the real registerghc;Get the LlvmVar function argument storing the real registerghc>A list of STG Registers that should always be considered aliveghc'STG Type Based Alias Analysis hierarchyghcId values The  node is the root (there can be more than one) of the TBAA hierarchy and as of LLVM 4.0 should *only* be referenced by other nodes. It should never occur in any LLVM instruction statement.ghcId values The  node is the root (there can be more than one) of the TBAA hierarchy and as of LLVM 4.0 should *only* be referenced by other nodes. It should never occur in any LLVM instruction statement.ghcId values The  node is the root (there can be more than one) of the TBAA hierarchy and as of LLVM 4.0 should *only* be referenced by other nodes. It should never occur in any LLVM instruction statement.ghcId values The  node is the root (there can be more than one) of the TBAA hierarchy and as of LLVM 4.0 should *only* be referenced by other nodes. It should never occur in any LLVM instruction statement.ghcId values The  node is the root (there can be more than one) of the TBAA hierarchy and as of LLVM 4.0 should *only* be referenced by other nodes. It should never occur in any LLVM instruction statement.ghcId values The  node is the root (there can be more than one) of the TBAA hierarchy and as of LLVM 4.0 should *only* be referenced by other nodes. It should never occur in any LLVM instruction statement.ghcThe TBAA metadata identifierghcGet the correct TBAA metadata information for this register type  NoneWůghc%Get the integer format of this width.Ưghc#Get the float format of this width.ǯghc-Check if a format represent an integer value.ȯghc4Check if a format represents a floating point value.ɯghcConvert a Cmm type to a Format.ʯghcGet the Width of a Format.ɯƯ˯ʯůȯǯï᝝ïįůƯǯȯɯʯ˯NoneίϯίϯNoneghcregSqueeze_class reg Calculate the maximum number of register colors that could be denied to a node of this class due to having this reg as a neighbour.0Яүѯӯ߯ޯ֯ܯۯگٯدԯկׯݯ0ӯԯկ֯ׯدٯگۯܯݯޯ߯ЯѯүNoneNoneghcLanguage ID used for Haskell.ݰghc.Mapping of registers to DWARF register numbersްghc2Virtual register number to use for return address.ŰݰȰðǰưɰаѰ˰ʰϰ̰ͰΰװڰӰܰհְٰҰ۰԰ݰްذ°ðİŰưǰȰɰʰ˰̰ͰΰϰаѰҰӰ԰հְװذٰڰ۰ܰݰްNone 11a"ghcCombination of target node id and information about the branch we are looking at.ghc*(backEdge, loopBody), body includes headerghcBlockId -> LoopLevel mappingghcList of back edges߰ghcInformation about edgesghc%Unknown, but not heap or stack check.ghcHeap or stack checkghcCan we trace back a edge to a specific Cmm Node or has it been introduced during assembly codegen. We use this to maintain some information which would otherwise be lost during the Cmm <-> asm transition. See also Note [Inverting conditions]ghcA control flow graph where edges have been annotated with a weight. Implemented as IntMap (IntMap ) We must uphold the invariant that for each edge A -> B we must have: A entry B in the outer map. A entry B in the map we get when looking up A. Maintaining this invariant is useful as any failed lookup now indicates an actual error in code which might go unnoticed for a while otherwise.ghcConvenience function, generate edge info based on weight not originating from cmm.ghcAdjust the weight between the blocks using the given function. If there is no such edge returns the original map.ghcSet the weight between the blocks to the given weight. If there is no such edge returns the original map.ghc!Is this block part of this graph?ghcCheck if the nodes in the cfg and the set of blocks are the same. In a case of a mismatch we panic and show the difference.ghcFilter the CFG with a custom function f. Parameters are `f from to edgeInfo`ghcSometimes we insert a block which should unconditionally be executed after a given block. This function updates the CFG for these cases. So we get A -> B => A -> A' -> B -> C => -> Cghc5Adds a new edge, overwrites existing edges if presentghcAdds a edge with the given weight to the cfg If there already existed an edge it is overwritten. `addWeightEdge from to weight cfg`ghc4Destinations from bid ordered by weight (descending)ghc1Get successors of a given node with edge weights.ghc/Returns a unordered list of all edges with infoghc5Returns a unordered list of all edges without weightsghc4Get successors of a given node without edge weights.ghc8Invariant: The edge **must** exist already in the graph.ghcInsert a block in the control flow between two other blocks. We pass a list of tuples (A,B,C) where * A -> C: Old edge * A -> B -> C : New Arc, where B is the new block. It's possible that a block has two jumps to the same block in the assembly code. However we still only store a single edge for these cases. We assign the old edge info to the edge A -> B and assign B -> C the weight of an unconditional jump.ghcGenerate weights for a Cmm proc based on some simple heuristics.ghcModify branch weights based on educated guess on patterns GHC tends to produce and how they affect performance.6Most importantly we penalize jumps across info tables.ghc5Convert block-local branch weights to global weights.ghcDetermine loop membership of blocks based on SCC analysis This is faster but only gives yes/no answers.ghcDetermine loop membership of blocks based on Dominator analysis. This is slower but gives loop levels instead of just loop membership. However it only detects natural loops. Irreducible control flow is not recognized even if it loops. But that is rare enough that we don't have to care about that special case.ghcWe take in a CFG which has on its edges weights which are relative only to other edges originating from the same node.We return a CFG for which each edge represents a GLOBAL weight. This means edge weights are comparable across the whole graph.For irreducible control flow results might be imprecise, otherwise they are reliable.The algorithm is based on the Paper "Static Branch Prediction and Program Profile Analysis" by Y Wu, JR Larus The only big change is that we go over the nodes in the body of loops in reverse post order. Which is required for diamond control flow to work probably.We also apply a few prediction heuristics (based on the same paper)The returned result represents frequences. For blocks it's the expected number of executions and for edges is the number of traversals.ghcUpdate branch weights based on certain heuristics. See Note [Static Branch Prediction] TODO: This should be combined with optimizeCFGghcEdges are sorted ascending pointwise by weight, source and destinationghcCareful! Since we assume there is at most one edge from A to B the Eq instance does not consider weight..߰.߰None9A ghc(A basic block with liveness information.ghcStash regs live on entry to each basic block in the info part of the cmm code.ghcLiveness information. The regs which die are ones which are no longer live in the *next* instruction in this sequence. (NB. if the instruction is a jump, these registers might still be live at the jump target(s) - you have to check the liveness at the destination block to find out).ghc=registers that died because they were clobbered by something.ghc=registers that died because they were read for the last time.ghc?registers born in this instruction (written to for first time).ghc)An instruction with liveness information.ghcThe register allocator also wants to use SPILL/RELOAD meta instructions, so we'll keep those here.ghcA real machine instructionghcspill this reg to a stack slotghc!reload this reg from a stack slotghc5A top level thing which carries liveness information.ghc$Map from some kind of register to a.While we give the type for keys as Reg which is the common case sometimes we end up using VirtualReq or naked Uniques. See Note [UniqFM and the register allocator]ghc7map a function across all the basic blocks in this codeghcmap a function across all the basic blocks in this code (monadic version)ghcmap a function across all the basic blocks in this code (monadic version)ghcSlurp out the list of register conflicts and reg-reg moves from this top level thing. Slurping of conflicts and moves is wrapped up together so we don't have to make two passes over the same code when we want to build the graph.ghcFor spill/reloads+SPILL v1, slot1 ... RELOAD slot1, v2If we can arrange that v1 and v2 are allocated to the same hreg it's more likely the spill/reload instrs can be cleaned and replaced by a nop reg-reg move.ghc4Strip away liveness information, yielding NatCmmDeclghcPretty-print a ghcMap over instruction type in ghcStrip away liveness information from a basic block, and make real spill instructions out of SPILL, RELOAD pseudos along the way.ghcErase Delta instructions.ghcPatch the registers in this code according to this register mapping. also erase reg -> reg moves when the reg is the same. also erase reg -> reg moves when the destination dies in this instr.ghcPatch registers in this LiveInstr, including the liveness information.ghcConvert a NatCmmDecl to a LiveCmmDecl, with liveness informationghcCheck ordering of Blocks The computeLiveness function requires SCCs to be in reverse dependent order. If they're not the liveness information will be wrong, and we'll get a bad allocation. Better to check for this precondition explicitly or some other poor sucker will waste a day staring at bad assembly code..ghcIf we've compute liveness info for this code already we have to reverse the SCCs in each top to get them back to the right order so we can do it again.ghcComputing livenessOn entry, the SCCs must be in "reverse" order: later blocks may transfer control to earlier ones only, else .The SCCs returned are in the *opposite* order, which is exactly what we want for the next pass.ghc:Annotate a basic block with register liveness information.ghcCalculate liveness going forwards, filling in when regs are bornghcCalculate liveness going backwards, filling in when regs die, and what regs are live across each instructionghcSCCs of blocks that we're about to run the liveness determinator on.ghc$BlockIds that fail the test (if any)%%None%&KɱghcThe register allocator state˱ghc<(from,fixup,to) : We inserted fixup code between from and to̱ghc#Native code generator configurationͱghcRecord why things were spilled, for -ddrop-asm-stats. Just keep a list here instead of a map of regs -> reasons. We don't want to slow down the allocator if we're not going to emit the stats.αghc?unique supply for generating names for join point fixup blocks.ϱghcfree stack slots for spillingбghccurrent stack deltaѱghc assignment of temps to locationsұghcfree machine registersӱghcthe current mapping from basic blocks to the register assignments at the beginning of that block.Աghc>Used to carry interesting stats out of the register allocator.ֱghc<(from,fixup,to) : We inserted fixup code between from and toرghcReasons why instructions might be inserted by the spiller. Used when generating stats for -ddrop-asm-stats.ٱghcvreg was spilled to a slot so we could use its current hreg for another vregڱghc-vreg was moved because its hreg was clobbered۱ghc!vreg was loaded from a spill slotܱghc,reg-reg move inserted during join to targetsݱghc,reg-mem move inserted during join to targetsޱghcWhere a vreg is currently stored A temporary can be marked as living in both a register and memory (InBoth), for example if it was recently loaded from a spill location. This makes it cheap to spill (no save instruction required), but we have to be careful to turn this into InReg if the value in the register is changed.߱ghcvreg is in a registerghcvreg is held in a stack slotghc0vreg is held in both a register and a stack slotghcUsed to store the register assignment on entry to a basic block. We use this to handle join points, where multiple branch instructions target a particular label. We have to insert fixup code to make the register assignments from the different sources match up.ghc1Find the register mapping for a specific BlockId.ghc?Lookup which register a virtual register was first assigned to.ghcAn initial empty ghc/Add new register mappings for a specific block.ghc'Get the reg numbers stored in this Loc.ޱ߱ɱʱѱӱ̱б˱ұͱϱαԱձֱױرٱڱݱܱ۱ޱ߱رٱڱ۱ܱݱԱձױֱɱʱӱұѱбϱαͱ̱˱NoneMghcBuild a map of how many times each reg was alloced, clobbered, loaded etc.ghc+Count reg-reg moves remaining in this code.ghcPretty print some RegAllocStatsNone 9Oghc"The register allocator monad type.ghcSmart constructor for , as described in Note [The one-shot state monad trick] in GHC.Utils.Monad.ghc'Get native code generator configurationghcSpills and reloads that have been cleaned in this pass so far.ghc6Spills and reloads cleaned each pass (latest at front)ghcMap of (slot -> blocks which reload from this slot) used to decide if whether slot spilled to will ever be reloaded from on this path.ghcCollecting up what regs were valid across each jump. in the next pass we can collate these and write the results to sJumpValid.ghc0Regs which are valid at the start of each block.ghcCleaner monad.ghcThe identification number of a spill slot. A value is stored in a spill slot when we don't have a free register to hold it.ghc;Clean out unneeded spill/reloads from this top level thing.ghcDo one pass of cleaning.ghcClean out unneeded reload instructions, while walking forward over the code.ghc'Clean out unneeded reload instructions.Walking forwards across the code On a reload, if we know a reg already has the same value as a slot then we don't need to do the reload.ghc?Try and rewrite a reload instruction to something more pleasingghcClean out unneeded spill instructions, while walking backwards over the code.If there were no reloads from a slot between a spill and the last one then the slot was never read and we don't need the spill.SPILL r0 -> s1 RELOAD s1 -> r2 SPILL r3 -> s1 <--- don't need this spill SPILL r4 -> s1 RELOAD s1 -> r5Maintain a set of "slots which were spilled to but not reloaded from yet"Walking backwards across the code: a) On a reload from a slot, remove it from the set.a) On a spill from a slot If the slot is in set then we can erase the spill, because it won't be reloaded from until after the next spill.otherwise keep the spill and add the slot to the setTODO: This is mostly inter-block we should really be updating the noReloads set as we cross jumps also..TODO: generate noReloads from liveSlotsOnEntryghcCombine the associations from all the inward control flow edges.ghcSee if we have a reg with the same value as this slot in the association table.ghc$Construct the initial cleaner state.ghc(Remember the associations before a jump.ghcCheck if this is a reg store.ghcAn empty associationghcAdd an association between these two things. addAssoc :: Uniquable a => a -> a -> Assoc a -> Assoc aghc"Delete all associations to a node.ghc*Delete a single association edge (a -> b).ghc)Check if these two things are associated.ghcFind the refl. trans. closure of the association from this point.ghcIntersect two associations.ghc!Iteration number for the cleaner.ghc!Liveness annotated code to clean.ghc!the block that we're currently inghctwo store locations are associated if they have the same valueghcaccghc$instrs to clean (in backwards order)ghc$cleaned instrs (in forward order)ghc!Slots live on entry to each blockghc3Slots that have been spilled, but not reloaded fromghcaccghc#Instrs to clean (in forwards order)ghc$Cleaned instrs (in backwards order)Nonefghc Reg moves, if the first reg dies at the same time the second reg is born then the mov only serves to join live ranges. The two regs can be renamed to be the same and the move instruction safely erased.ghcAdd a v1 = v2 register renaming to the map. The register with the lowest lexical name is set as the canonical version.ghcDetermine the canonical name for a register by following v1 = v2 renamings in this map.ghc?Slurp out mov instructions that only serve to join live ranges.During a mov, if the source reg dies and the destination reg is born then we can rename the two regs to the same thing and eliminate the move.None)*q ghcMap of ghc1Records the expected cost to spill some register.ghcAn empty map of spill costs.ghcAdd two spill cost infos.ghcAdd two spill cost records.ghc7Slurp out information used for determining spill costs.For each vreg, the number of times it was written to, read from, and the number of instructions it was live on entry to (lifetime)ghc-Take all the virtual registers from this set.ghc&Choose a node to spill from this graphghc Chaitins spill cost function is:cost = sum loadCost * freq (u) + sum storeCost * freq (d) u <- uses (v) d <- defs (v)There are no loops in our code at the moment, so we can set the freq's to 1.If we don't have live range splitting then Chaitins function performs badly if we have lots of nested live ranges and very few registers.v1 v2 v3 def v1 . use v1 . def v2 . . def v3 . . . use v1 . . . use v3 . . . use v2 . . use v1 .defs uses degree cost v1: 1 3 3 1.5 v2: 1 2 3 1.0 v3: 1 1 3 0.666v3 has the lowest cost, but if we only have 2 hardregs and we insert spill code for v3 then this isn't going to improve the colorability of the graph.When compiling SHA1, which as very long basic blocks and some vregs with very long live ranges the allocator seems to try and spill from the inside out and eventually run out of stack slots.Without live range splitting, its's better to spill from the outside in so set the cost of very long live ranges to zeroghc+Extract a map of register lifetimes from a .ghcDetermine the degree (number of neighbors) of this node which have the same class.ghcShow a spill cost record, including the degree from the graph and final calculated spill cost.  NonesghcregSqueeze_class reg Calculate the maximum number of register colors that could be denied to a node of this class due to having this reg as a neighbour.NonesNone 9y ghc9Holds interesting statistics from the register allocator.ghcTarget platformghc/Information to help choose which regs to spill.²ghcThe initial, uncolored graph.òghcInitial code, with liveness.IJghc#Code with spill instructions added.ŲghcSpiller stats.ƲghcThe regs that were coalesced.Dzghc(Code we tried to allocate registers for.Ȳghc0Spill/reload/reg-reg moves present in this code.ɲghc Final code.ʲghc-Code with unneeded spill/reloads cleaned out.˲ghc"Code with vregs replaced by hregs.̲ghcCode with coalescings applied.ͲghcCoalesced and colored graph.βghc;Do all the different analysis on this list of RegAllocStatsϲghcDump a table of how many spill loads / stores were inserted for each vreg.вghcDump a table of how long vregs tend to live for in the initial code.ѲghcDump a table of how many conflicts vregs tend to have in the initial code.ҲghcFor every vreg, dump how many conflicts it has, and its lifetime. Good for making a scatter plot.Ӳghc Count spillreloadreg-reg moves. Lets us see how well the register allocator has done.Ҳghcglobal register conflict graphԲӲβѲҲвϲƲDz̲ɲ²Ͳò˲ȲʲŲIJò²DzƲŲIJͲ̲˲ʲɲȲβϲвѲҲӲԲNone ghc5The maximum number of build/spill cycles we'll allow.It should only take 3 or 4 cycles for the allocator to converge. If it takes any longer than this it's probably in an infinite loop, so it's better just to bail out and report a bug.ײghc7The top level of the graph coloring register allocator.ghc;Perform solver iterations for the graph coloring allocator.We extract a register conflict graph from the provided cmm code, and try to colour it. If that works then we use the solution rewrite the code with real hregs. If coloring doesn't work we add spill code and try to colour it again. After  iterations we give up.ghcBuild a graph from the liveness and coalesce information in this code.ghcAdd some conflict edges to the graph. Conflicts between virtual and real regs are recorded as exclusions.ghcAdd some coalescence edges to the graph Coalescences between virtual and real regs are recorded as preferences.ghcPatch registers in code using the reg -> reg mapping in this graph.ײghc#registers we can use for allocationghcset of available spill slots.ghccurrent number of spill slotsghc)code annotated with liveness information.ghc CFG of basic blocks if availableghccode with registers allocated, additional stacks required and stats for each stage of allocationghc4Number of solver iterations we've already performed.ghcFunction for calculating whether a register is trivially colourable.ghc$Free registers that we can allocate.ghc!Free stack slots that we can use.ghcNumber of spill slots in useghc!Current regalloc stats to add to.ghc$Liveness annotated code to allocate.ײײNoneزghcArmv6 | Armv7-A | Armv8-A AArch64 | | SIMD extension | NEON | NEON | |===========================================================================| | - Operates on 32-bit | - Separate reg. bank, | - Separate reg. bank, | | GP ARM registers | 32x64-bit NEON regs | 32x128-bit NEON regs | | - 8-bit16-bit integer | - 8163264-bit int | - 81632/64-bit int | | | - Single precision fp | - Single precision fp | | | | - Double precision fp | | | | - Single/Double fp are | | | | IEEE compliant | | - 2x16-bit/4x8-bit ops | - Up to 16x8-bit ops | - Up to 16x8-bit ops | | per instruction | per instruction | per instruction | '---------------------------------------------------------------------------'ܲݲ޲ڲ߲۲زٲزٲڲ۲ܲݲ޲߲Noneghc,SXTW Operand Operand | SXTX Operand Operandghc;ADC Operand Operand Operand -- rd = rn + rm + C | ADCS ...ghcADDS Operand Operand Operand -- rd = rn + rm | ADR ... | ADRP ...ghcMADD ... | MNEG ...ghc6NEGS ... | NGC ... | NGCS ... | SBC ... | SBCS ...ghc&SMADDL ... | SMNEGL ... | SMSUBL ...ghcSUBS ...ghcUMADDL ... -- Xd = Xa + Wn  Wm | UMNEGL ... -- Xd = - Wn  Wm | UMSUBL ... -- Xd = Xa - Wn  Wm | UMULH ... -- Xd = (Xn  Xm)_127:64 | UMULL ... -- Xd = Wn  Wmghc,MOVN Operand Operand | MOVZ Operand Operandghc.Floating-point fused multiply-add instructionsfmadd : d = r1 * r2 + r3fnmsub: d = r1 * r2 - r3fmsub : d = - r1 * r2 + r3fnmadd: d = - r1 * r2 - r3ghc reg move instruction or Nothing if it's not oneγghc'Make an unconditional jump instruction.ghcGet the registers that are being used by this instruction. regUsage doesn't need to do any trickery for jumps and such. Just state precisely the regs read and written by that insn. The consequences of control flow transfers, as far as register allocation goes, are taken care of by the register allocator.RegUsage = RU [ readregs] [ writeregs]سѳóҳ׳ų˳Ƴγɳ̳ȳϳгӳdzij³ֳʳͳճٳڳ۳ܳݳ޳߳Գ³óijųƳdzȳɳʳ˳̳ͳγϳгѳҳӳԳճֳ׳سٳڳ۳ܳݳ޳߳NoneONoneghc7Print appropriate alignment for the given section type.ghcPrint section header and appropriate alignment for that section.This one will emit the header:.section .text .balign 8ghcOutput the ELF .size directive.None )*T ghcWe make a top-level decl for the string, and return a label pointing to itghcWe make a top-level decl for the embedded binary file, and return a label pointing to itghcBuild a data-segment data blockŴghcUseful for creating an index into an array, with a statically known offset. The type is the element type; used for making the multiplierƴghcUseful for creating an index into an array, with an unknown offset.ȴghc*Load a naturally-aligned non-pointer word.ɴghc$Load a naturally-aligned GC pointer.ghcReturns True if the two STG registers overlap on the specified platform, in the sense that writing to one will clobber the other. This includes the case that the two registers are the same STG register. See Note [Overlapping global registers] for details.ghcReturns True if the STG register is used by the expression, in the sense that a store to the register might affect the value of the expression.We must check for overlapping registers and not just equal registers here, otherwise CmmSink may incorrectly reorder assignments that conflict due to overlap. See #10521 and Note [Overlapping global registers].ghclike (, but the entry block always comes firstghcLike , but we strive to ensure that we order blocks so that the false case of a conditional jumps to the next block in the output list of blocks. This matches the way OldCmm blocks were output since in OldCmm the false case was a fallthrough, whereas in Cmm conditional branches have both true and false successors. Block ordering can make a big difference in performance in the LLVM backend. Note that we rely crucially on the order of successors returned for CmmCondBranch by the NonLocal instance for CmmNode defined in  GHC.Cmm.Node. -GBMghc1Extract all tick annotations from the given block޴ִشŴƴĴʹӴȴɴǴԴ״˴̴ϴôδҴдմ´ʴѴܴߴڴ۴ٴݴ´Ĵôʴ˴ʹδ̴ѴдӴҴϴŴƴǴԴȴɴٴڴ۴ݴܴ״شմִߴ޴None %& ghcNo args, not a functionghcUsed in places where some invariant ensures that all these Ids are non-void; e.g. constructor field binders in case expressions. See Note [Post-unarisation invariants] in GHC.Stg.Unarise.ghcUsed in places where some invariant ensures that all these arguments are non-void; e.g. constructor arguments. See Note [Post-unarisation invariants] in GHC.Stg.Unarise.ghc$Assumes that there is precisely one B of the type. This assumption holds after unarise. See Note [Post-unarisation invariants]ghcAssumes that Ids have one PrimRep, which holds after unarisation. See Note [Post-unarisation invariants]ghcAssumes that arguments have one PrimRep, which holds after unarisation. See Note [Post-unarisation invariants]ghcAssumes that the argument has one PrimRep, which holds after unarisation. See Note [Post-unarisation invariants]ghcThe \< of an imported Id. See Note [The LFInfo of Imported Ids]ghcReturn the tag in the low order bits of a variable bound to this LambdaFormghc Convert from  to .ghc'Get the info table label for a *thunk*.ghcthunkEntryLabel is a local help function, not exported. It's used from getCallMethod.BB\\BB\\NoneiӵеԵҵյѵƵ̵˵ɵȵǵʵ͵εϵƵȵ̵ɵǵ˵ʵ͵εϵѵӵеҵԵյNone)*1ghcCompute the argument with the given set of ids treated as requiring capture as free variables.ghcCompute the argument with the given id treated as requiring capture as free variables in closures.ghcOriginal argumentsghc&var args to be evaluated ahead of timeghcFunction that reconstructs the expressions when passed the list of evaluated arguments.صصNone)*/1ghcThis constraint encodes the fact that no matter what pass we use the Let/Closure extension points are the same as these for 'InferTaggedBinders.ghcId we are binding to.None)*3޵ghcWe map STG registers onto appropriate CmmExprs. Either they map to real machine registers or stored as offsets from BaseReg. Given a GlobalReg, get_GlobalReg_addr always produces the register table address for it.ghcFixup global registers so that they assign to locations within the RegTable if they aren't pinned for the current target.ݵ޵ߵݵߵ޵None 9;ghcThe Llvm monad. Wraps LlvmEnv state as well as the IO monadghc9Non-constant registers (alloca'd in the function prelude)ghc!Local variables so far, with typeghc'Pointers to be added to llvm.used (see cmmUsedLlvmGens)ghc;Globals that we had to alias, see [Llvm Forward References]ghc"Global functions so far, with typeghcGlobal metadata nodesghcSupply of fresh metadata IDsghcMask for creating unique valuesghc Output bufferghcLoggerghcConfiguration for LLVM code genghc LLVM versionghcAn unresolved Label.Labels are unresolved when we haven't yet determined if they are defined in the module we are currently compiling, or an external one.ghc.Top level LLVM Data (globals and type aliases)ghcUnresolved code. Of the form: (data label, data type, unresolved data)ghc#Global registers live on proc entryghc)Translate a basic CmmType to an LlvmType.ghc*Translate a Cmm Float Width to a LlvmType.ghc(Translate a Cmm Bit Width to a LlvmType.ghcGHC Call Convention for LLVMghc#Llvm Function type for Cmm functionghcLlvm Function signatureghcAlignment to use for functionsghc Alignment to use for into tablesghcSection to use for a functionghcA Function's argumentsghc=Return a list of "padding" registers for LLVM function calls.When we generate LLVM function signatures, we can't just make any register alive on function entry. Instead, we need to insert fake arguments of the same register class until we are sure that one of them is mapped to the register we want alive. E.g. to ensure that F5 is alive, we may need to insert fake arguments mapped to F1, F2, F3 and F4.Invariant: Cmm FPR regs with number "n" maps to real registers with number "n" If the calling convention uses registers in a different order or if the invariant doesn't hold, this code probably won't be correct.ghcLlvm standard fun attributesghcConvert a list of types to a list of function parameters (each with no parameter attributes)ghc Pointer widthghcGet target platformghcLifting of IO actions. Not exported, as we want to encapsulate IO.ghcGet initial Llvm environment.ghcGet environment (internal)ghcModify environment (internal)ghc9Clear variables from the environment for a subcomputationghc3Insert variables or functions into the environment.ghc3Insert variables or functions into the environment.ghc1Lookup variables or functions in the environment.ghc1Lookup variables or functions in the environment.ghc(Set a register as allocated on the stackghc2Check whether a register is allocated on the stackghc1Allocate a new global unnamed metadata identifierghc/Get the LLVM version we are generating code forghcDumps the document if the corresponding flag has been set by the userghc.Prints the given contents to the output handle¿ghcMarks a variable as "used"ÿghc,Return all variables marked as "used" so farghcSaves that at some point we didn't know the type of the label and generated a reference to a type variable insteadĿghc%Sets metadata node for a given uniqueſghc#Gets metadata node for given uniqueƿghcHere we pre-initialise some functions that are used internally by GHC so as to make sure they have the most general type in the case that user code also uses these functions but with a different type than GHC internally. (Main offender is treating return type as void) instead of 'void *'). Fixes trac #5486.ǿghcPretty print a &.ȿghcCreate/get a pointer to a global value. Might return an alias if the value in question hasn't been defined yet. We especially make no guarantees on the type of the returned pointer.ɿghcDerive the definition label. It has an identified structure type.ʿghc7Generate definitions for aliases forward-referenced by  getGlobalPtr.Must be called at a point where we are sure that no new global definitions will be generated anymore!ghc!Is a variable one of the special $llvm globals?˿ghc=Here we take a global variable definition, rename it with a $def, suffix, and generate the appropriate alias./˿ʿȿſÿƿɿ¿Ŀǿ/¿ÿƿĿſǿȿʿ˿ɿNone )*;ghcA more convenient way of accumulating LLVM statements and declarations.ghcValues which can be passed to 6 to configure its behaviour in certain circumstances.Currently just used for determining if a comparison should return a boolean (i1) or a word. See Note [Literals and branch conditions].ghcAn expression conversion return data: * LlvmVar: The var holding the result of the expression * LlvmStatements: Any statements needed to evaluate the expression * LlvmCmmDecl: Any global data needed for this expressionֿghc)Top-level of the LLVM proc Code generatorghcGenerate code for a list of blocks that make up a complete procedure. The first block in the list is expected to be the entry point.ghcGenerate code for one blockghc.Convert a list of CmmNode's to LlvmStatement'sghc.Convert a CmmStmt to a list of LlvmStatement'sghcWrapper function to declare an instrinct function by function typeghc= 3.0ghc Insert a , unless the target platform is in the provided list of exceptions (where no code will be emitted instead).ghc Foreign CallsghcGenerate a call to an LLVM intrinsic that performs arithmetic operation with overflow bit (i.e., returns a struct containing the actual result of the operation and an overflow bit). This function will also extract the overflow bit and zero-extend it (all the corresponding Cmm PrimOps represent the overflow "bit" as a usual Int# or Word#).ghcA helper function for genCallWithOverflow that handles generating the call to the LLVM intrinsic and extracting the result from the struct to LlvmVars.ghc(Create a function pointer from a target.ghc(Create a function pointer from a target.ghcConversion of call arguments.ghcConversion of call arguments.ghc6Cast a collection of LLVM variables to specific types.ghc6Cast a collection of LLVM variables to specific types.ghcCast an LLVM variable to a specific type, panicking if it can't be done.ghc:Decide what C function to use to implement a CallishMachOpghcTail function callsghcCmmAssign operationWe use stack allocated variables for CmmReg. The optimiser will replace these with registers when possible.ghcCmmStore operationghcCmmStore operation This is a special case for storing to a global register pointer offset such as I32[Sp+8].ghcCmmStore operation Generic case. Uses casts and pointer arithmetic if needed.ghcUnconditional branchghcConditional branchghcGenerate call to llvm.expect.x intrinsic. Assigning result to a new var.ghc Switch branchghc'i1 type expected (condition scrutinee).ghcWord type expected (usual).ghcConvert a CmmExpr to a list of LlvmStatements with the result of the expression being stored in the returned LlvmVar.ghcHandle CmmMachOp expressionsghcHandle CmmMachOp expressions This is a specialised method that handles Global register manipulations like 'Sp - 16', using the getelementptr instruction.ghcHandle CmmMachOp expressions This handles all the cases not handle by the specialised genMachOp_fast.ghc1Generate code for a fused multiply-add operation.ghcHandle CmmLoad expression.ghcHandle CmmLoad expression. This is a special case for loading from a global register pointer offset such as I32[Sp+8].ghcHandle Cmm load expression. Generic case. Uses casts and pointer arithmetic if needed.ghcHandle CmmReg expression. This will return a pointer to the stack location of the register. Throws an error if it isn't allocated on the stack.ghcReturn the value of a given register, as well as its type. Might need to be load from stack.ghc$Allocate a local CmmReg on the stackghcGenerate code for a literalghc=Find CmmRegs that get assigned and allocate them on the stackAny register that gets written needs to be allocated on the stack. This avoids having to map a CmmReg to an equivalent SSA form and avoids having to deal with Phi node insertion. This is also the approach recommended by LLVM developers.On the other hand, this is unnecessarily verbose if the register in question is never written. Therefore we skip it where we can to save a few lines in the output and hopefully speed compilation up a bit.ghcFunction epilogue. Load STG variables to use as argument for call. STG Liveness optimisation done here.ghc/Get a function pointer to the CLabel specified.This is for Haskell functions, function type is assumed, so doesn't work with foreign functions.ghcCreate a new local varghc0Execute an expression, assigning result to a varghcExpand CmmRegOffghc0Convert a block id into a appropriate Llvm labelghcCreate Llvm int Literalghc1Convert int type to a LLvmVar of word or i32 sizeghcError functionsghc Returns TBAA meta data by uniqueghc)Returns TBAA meta data for given registerghc'Return element of single-element list; % if list is not a single-element listghcPrimOpghcWidth of the operands.ghcActual arguments.ghc"LLVM types of the returned struct.ֿֿNone)*ڏghcTraverses the , making sure that # are suitable for code generation.NoneڽNoneNoneݼghcThe string appended to a variable name to create its structure type aliasghc The LLVM visibility of the labelѿghc4Pass a CmmStatic section to an equivalent Llvm code.ghcProduce an initializer or finalizer array declaration. See Note [Initializers and finalizers in Cmm] in GHC.Cmm.InitFini for details.ghc-Format the section type part of a Cmm Sectionghc-Format a Cmm Section into a LLVM section nameҿghcHandle static dataghc(Generate Llvm code for a static literal.Will either generate the code or leave it unresolved if it is a & which isn't yet known.ҿѿѿҿNone߃ӿghcPretty print LLVM data codeԿghcPretty print LLVM code The HDoc we return is used to produce the final LLVM file, with the SDoc being returned alongside for use when Opt_D_dump_llvm, is set as we can't (currently) dump HDocs.տghcThe section we are putting info tables and their entry code into, should be unique since we process the assembly pattern matching this.տԿӿԿӿտNone "(ۿghc$Top-level of the LLVM Code generatorghc8Do LLVM code generation on all these Cmms data sections.ghcComplete LLVM code generation phase for a single top-level chunk of Cmm.ghcGenerate meta data nodesghc'Marks variables as used where necessaryۿ̚̚ۿNone()*9ZghcThe result type of most operations is determined by the operands. However, there are a few exceptions: particularly operations which might get promoted to a signed result. For these we explicitly cast the result.ghcProduce a list of word sized literals encoding the given list of os.ghcPrint in C hex format Examples:5114 :: W32 ===> ((StgWord32)0x13faU) (-5114) :: W32 ===> ((StgWord32)(-0x13faU))We use casts to support types smaller than `unsigned int`; C literal suffixes support longer but not shorter types.ghcConstruct a constructor/finalizer function. Instead of emitting a initializer/finalizer array we rather just emit a single function, annotated with the appropriate C attribute, which then calls each of the initializers.NoneghcIs the SRT offset field inline in the info table on this platform?See the section "Referring to an SRT from the info table" in Note [SRTs] in GHC.Cmm.Info.BuildghcValue of the srt field of an info table when using an StgLargeSRTghcWrap a o in an alignment check when -falignment-sanitisation is enabled.ghc:Takes a closure pointer and returns the info table pointerghcTakes an info pointer (the first word of a closure) and returns its entry codeghcTakes a closure pointer, and return the *zero-indexed* constructor tag obtained from the info table This lives in the SRT field of the info table (constructors don't need SRTs).ghcTakes a closure pointer, and return the closure type obtained from the info tableghcTakes an info pointer (the first word of a closure) and returns a pointer to the first word of the standard-form info table, excluding the entry-code word (if present)ghcTakes an info table pointer (from infoTable) and returns the constr tag field of the info table (same as the srt_bitmap field)ghcTakes an info table pointer (from infoTable) and returns the srt_bitmap field of the info tableghcTakes an info table pointer (from infoTable) and returns the closure type field of the info table.ghcTakes the info pointer of a function, and returns a pointer to the first word of the StgFunInfoExtra struct in the info table.ghcTakes the info pointer of a function, returns the function's arityghcByte offset of the SRT bitmap half-word which is in the *higher-addressed* part of the type_litghc)Byte offset of the closure type half-wordghcReturns: 1. The bitmap (literal value or label) 2. Large bitmap CmmData if neededNoneڹghc Fused multiply-add instructions.FMADD: rd = (ra * rb) + rdFMSUB: rd = ra * rb - rdFNMADD: rd = -(ra * rb + rd)FNMSUB: rd = -(ra * rb - rd)ghcGet the registers that are being used by this instruction. regUsage doesn't need to do any trickery for jumps and such. Just state precisely the regs read and written by that insn. The consequences of control flow transfers, as far as register allocation goes, are taken care of by the register allocator.ghcApply a given mapping to all the register references in this instruction.ghcChecks whether this instruction is a jump/branch instruction. One that can change the flow of control in a way that the register allocator needs to worry about.ghcChecks whether this instruction is a jump/branch instruction. One that can change the flow of control in a way that the register allocator needs to worry about.ghcChange the destination of this jump instruction. Used in the linear allocator when adding fixup blocks for join points.ghc5An instruction to spill a register into a spill slot.ghcThe size of a minimal stackframe header including minimal parameter save area.ghcThe maximum number of bytes required to spill a register. PPC32 has 32-bit GPRs and 64-bit FPRs, while PPC64 has 64-bit GPRs and 64-bit FPRs. So the maximum is 8 regardless of platforms unlike x86. Note that AltiVec's vector registers are 128-bit wide so we must not use this to spill them.ghc reg move instruction or Nothing if it's not oneùĹҹӹ˹¹ʹعԹ޹۹ݹܹ׹ڹֹٹ߹չŹ̹͹ƹǹѹιϹйȹɹ̹ùع¹ƹȹ͹׹ĹŹǹɹʹ˹ιϹйѹҹӹԹչֹٹڹ۹ܹݹ޹߹None}NoneUghcOutput the ELF .size directive.ghc7Print appropriate alignment for the given section type.ghcProcedure nameNone)*ghc(Expressions, used for unwind informationghc literal valueghcregister plus offsetghcpointer dereferencingghcMaps registers to expressions that yield their "old" values further up the stack. Most interesting for the stack pointer Sp, but might be useful to document saved registers, too. Note that a register's value will be J= when the register's previous value cannot be reconstructed.ghcA label associated with an ghcIntermediate data structure holding debug-relevant context information about a block.ghcDebug information about a block of code. Ticks scope over nested blocks.ghc Nested blocksghc+Output position relative to other blocks. Nothing# means the block was optimized outghcBest source tick covering blockghcTicks defined in this blockghc9The parent of this proc. See Note [Splitting DebugBlocks]ghcHas an info table?ghc Output labelghc Hoopl labelghcEntry label of containing procghcExtract debug data from a group of procedures. We will prefer source notes that come from the given module (presumably the module that we are currently compiling).ghc1Build a map of blocks sorted by their tick scopesThis involves a pre-order traversal, as we want blocks in rough control flow order (so ticks have a chance to be sorted in the right order).ghcSets position and unwind table fields in the debug block tree according to native generated code.ghc9Converts debug blocks into a label map for easier lookupsghcConversion of Cmm expressions to unwind expressions. We check for unsupported operator usages and simplify the expression as far as possible.None ghcN.B. when used with the ¯ , the source operand is interpreted to be a 32-bit sign-extended value. True 64-bit operands need to be moved with MOVABS , which we currently don't use.ghcThe format argument is the size of operand 1 (the number of bits we keep) We always zero *all* high bits, even though this isn't how the actual instruction works. The code generator also seems to rely on this behaviour and it's faster to execute on many cpus as well so for now I'm just documenting the fact.ʶghc#FMA3 fused multiply-add operations.ֶghcX86 call instructionghcReturns which registers are read and written as a (read, written) pair.ghc8Is this register interesting for the register allocator?ghcApplies the supplied function to all registers in instructions. Typically used to change virtual registers to real registers.ghcMake a spill instruction.ghc Make a spill reload instruction.ghc?See if this instruction is telling us the current C stack deltaghc Make a reg-reg move instruction.ghcCheck whether an instruction represents a reg-reg move. The register allocator attempts to eliminate reg->reg moves whenever it can, by assigning the src and dest temporaries to the same real register.ghc)Make an unconditional branch instruction.ghcOn most OSes the kernel will place a guard page after the current stack page. If you allocate larger than a page worth you may jump over this guard page. Not only is this a security issue, but on certain OSes such as Windows a new page won't be allocated if you don't hit the guard. This will cause a segfault or access fault.This function defines if the current allocation amount requires a probe. On Windows (for now) we emit a call to _chkstk for this. For other OSes this is not yet implemented. See  https://docs.microsoft.com/en-us/windows/desktop/DevNotes/-win32-chkstk& The Windows stack looks like this:SP GUARD PAGE  UNMAPPED In essence each allocation larger than a page size needs to be chunked and a probe emitted after each page allocation. You have to hit the guard page so the kernel can map in the next page, otherwise you'll segfault. See Note [Windows stack allocations].ֶghc Jump targetghc,Arguments (required for register allocation)ݶ޶ֶ׶ζŶɶȶĶǶƶ˶ضٶʶҶնӶԶ۶¶߶Ѷڶж϶̶Ͷܶöζ¶öĶŶƶǶȶɶʶ˶̶Ͷ϶жѶҶӶԶնֶ׶ضٶڶ۶ܶݶ޶߶NoneghcOutput an internal proc label. See Note [Internal proc labels] in CLabel.ghcOutput the ELF .size directive.ghcPrint section header and appropriate alignment for that section.ghc7Print appropriate alignment for the given section type.ghcProcedure nameghc Block nameNone;NoneghcFor a jump instruction at the end of a block, generate fixup code so its vregs are in the correct regs for its destination.ghc.Construct a graph of register/spill movements.1Cyclic components seem to occur only very rarely.We cut some corners by not handling memory-to-memory moves. This shouldn't happen because every temporary gets its own stack slot.ghcExpand out the destination, so InBoth destinations turn into a combination of InReg and InMem.ghcGenerate fixup code for a particular component in the move graph This component tells us what values need to be moved to what destinations. We have eliminated any possibility of single-node cycles in expandNode above.ghc(Move a vreg between these two locations.ghcmaps the unique of the blockid to the set of vregs that are known to be live on the entry to each block.ghcid of the current blockghc,branch instr on the end of the source block.ghcmaps the unique of the blockid to the set of vregs that are known to be live on the entry to each block.ghcacc blocks of fixup code.ghcid of the current blockghc,branch instr on the end of the source block.ghc&branch destinations still to consider.ghcsource of moveghcdestination of moveghccurrent C stack delta.ghc%unique of the vreg that we're moving.ghcsource location.ghcdestination location.ghcmove instruction.None/i ghcConstraints on the instruction instances used by the linear allocator.ghcDo register allocation on some basic blocks. But be careful to allocate a block in an SCC only if it has an entry in the block map or it is the first block.ghc*Do register allocation on this basic blockghcLoad the freeregs and current reg assignment into the RegM state for the basic block with this BlockId.ghc-Do allocation for a sequence of instructions.ghc'Do allocation for a single instruction.ghcMark all these real regs as allocated, and kick out their vreg assignments.ghcGiven a virtual reg find a preferred real register. The preferred register is simply the first one the variable was assigned to (if any). This way when we allocate for a loop variables are likely to end up in the same registers at the end and start of the loop, avoiding redundant reg-reg moves. Note: I tried returning a list of past assignments, but that turned out to barely matter.ghc:Calculate a new location after a register has been loaded.ghc=Load up a spilled temporary if we need to (read from memory).ghc entry pointsghc&live regs on entry to each basic blockghc$instructions annotated with "deaths"ghc entry pointsghc&live regs on entry to each basic blockghc$instructions annotated with "deaths"ghc&live regs on entry to each basic blockghc"block to do register allocation onghcblock with registers allocatedghc2map of what vregs are live on entry to each block.ghc'id of the current block, for debugging.ghc.liveness annotated instructions in this block.ghc2map of what vregs are love on entry to each block.ghc/accumulator for instructions already processed.ghc*the id of the current block, for debuggingghc9the instr to have its regs allocated, with liveness info.#ޱ߱ɱʱѱӱ̱б˱ұͱϱαԱձֱױرٱڱݱܱ۱None (9#>ghcTwo 32-bit regs used as a single virtual 64-bit register and the code to set them appropriatelyghc8Two 32-bit regs used as a single virtual 64-bit registerghcHaving a CFG with additional information is essential for some operations. However we can't reconstruct all information once we generated instructions. So instead we update the CFG as we go.ghc&Stack offset for unwinding informationghcTurn the sequence of jcc l1; jmp l2 into jncc l2;  when possible.ghcgiven the instruction sequence of a block, produce a list of the block's 2s See Note [What is this unwinding business?] in GHC.Cmm.DebugBlock= and Note [Unwinding information in the NCG] in this module.ghcThe list of block ids records the redirected jumps to allow us to update the CFG.ghc  is only for printing internal labels. See Note [Internal proc labels] in CLabel.ghcGet CFG edge weightsghc%Record that we added a block between from and old.ghcPlace  after block' and change any edges block -> X to  -> Xghc Return a virtual 64-bit registerghc7Convert a 64-bit LocalReg into two virtual 32-bit regs.9Used to handle 64-bit "registers" on 32-bit architecturesghc'Get native code generator configurationghcHelper to check whether the data resides in a DLL or not, see  labelDynamicghcSays what we have to add to our 'PIC base register' in order to get the address of a label.  None )*7_ghc+Memory addressing modes passed up the tree.ghcRegister's passed up the tree. If the stix code forces the register to live in a pre-decided machine register, it comes out as Fixed#; otherwise, it comes out as Any>, and the parent can decide which register to put it in.ghc#Condition codes passed up the tree.ghcs are the insn sequences generated by the insn selectors. They are really trees of insns to facilitate fast appending, where a left-to-right traversal yields the insns in the correct order.ghcConvert  instructions into ) instructions to capture changes in the sp: register. See Note [What is this unwinding business?] in GHC.Cmm.DebugBlock for details.ghcbid refers to the current block and is used to update the CFG if new blocks are inserted in the control flow. See Note [Keeping track of the current block] for more details.ghcGrab the Reg for a CmmRegghcCheck 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.ghc(Convert a BlockId to some CmmStatic dataghcThe dual to getAnyReg: compute an expression into a register, but we don't mind which one it is.ghc Convert a o' representing a memory address into an .An  is a datatype representing a valid address form for the target (e.g. "Base + Index + disp" or immediate) and the code to compute it.ghcLike , but on 32-bit use simple register addressing (i.e. no index register). This stops us from running out of registers on x86 when using instructions such as cmpxchg, which can use up to three virtual registers and one fixed register.ghcGiven a , produce a new  with an instruction block which will check the value for alignment. Used for -falignment-sanitisation.ghc%We return the instructions generated.ghcSee Note [Evaluate C-call arguments before placing in destination registers]ghc1Generate C call to the given function in ghc-primghc-Generate C call to the given function in libcghc0Generate C call to the given function in the RTSghcGenerate a real C call to the given address with the given conventionghc>Generate code for a fused multiply-add operation, of the form   x * y  z*, with 3 operands (FMA3 instruction set).ghcThis works on the invariant that all jumps in the given blocks are required. Starting from there we try to make a few more jumps redundant by reordering them. We depend on the information in the CFG to do so so without a given CFG we do nothing.ghcCount trailing zeroesghcCount trailing zeroes#64-bit width on 32-bit architectureghcCount trailing zeroes!Generic case (width <= word size)ghc Copy memoryUnroll memcpy calls if the number of bytes to copy isn't too large (cf ncgInlineThresholdMemcpy). Otherwise, call C's memcpy.ghcSet memory to the given byteUnroll memset calls if the number of bytes to copy isn't too large (cf ncgInlineThresholdMemset). Otherwise, call C's memset.ghc7Basic block these statement will start to be placed in.ghc Cmm StatementghcResulting instructionghc6Basic block this statement will start to be placed in.ghcInstructions, and bid of new block if successive statements are placed in a different basic block.ghcfunction to callghcwhere to put the resultghcarguments (of mixed type)ghcThe block we are inghcThe block we are inghcMachOpghcwhere to put the resultghcarguments (of mixed type)ghcthe block we are inghcMachOpghcwhere to put the resultghcarguments (of mixed type)ghcaddress of the function to callghccalling conventionghcwhere to put the resultghcarguments (of mixed type)ghcaddress of function to callghccalling conventionghcwhere to put the resultghcarguments (of mixed type)ghcCFG if presentghcBlocks with info tablesghcList of basic blocksNone7ghc-Instruction instance for x86 instruction set.None)*<ghcRegister's passed up the tree. If the stix code forces the register to live in a pre-decided machine register, it comes out as Fixed#; otherwise, it comes out as Any>, and the parent can decide which register to put it in.ghcs are the insn sequences generated by the insn selectors. They are really trees of insns to facilitate fast appending, where a left-to-right traversal yields the insns in the correct order.ghcs are the insn sequences generated by the insn selectors. They are really trees of insns to facilitate fast appending, where a left-to-right traversal (pre-order?) yields the insns in the correct order.ghcGrab the Reg for a CmmRegghc(Convert a BlockId to some CmmStatic dataghcCompute an expression into a register, but we don't mind which one it is.ghc6Generate code for a 4-register FMA instruction, e.g. 'fmadd rt ra rc rb := rt <- ra * rc + rb.None ([A,B], [A,B,C,D,E])) where [A,B] are blocks in the end region of a chain. This is cheaper then recomputing the ends multiple times.ghcLook at X number of blocks in two chains to determine if they are "neighbours".ghcGiven the Chain A -> B -> C -> D and we break at C we get the two Chains (A -> B, C -> D) as result.ghcFor a given list of chains and edges try to combine chains with strong edges between them.ghcPlace basic blocks based on the given CFG. See Note [Chain based CFG serialization]ghcRemove redundant jumps between blocks when we can rely on fall through.ghcEdges to considerghcCurrent chains of blocksghcResulting list of block chains, and a set of edges which were used to fuse chains and as such no longer need to be considered.ghc)Keys indicate an info table on the block.ghc&Control flow graph and some meta data.ghc"List of basic blocks to be placed.ghcBlocks placed in sequence.ghcCFG if we have one.ghcFunction to serializeNoneBghcInitialize the native code generator configuration from the DynFlagsNone Ty'ghcUnwind instructions for a block. Will become part of the containing FDE.·ghcthese unwind points must occur in the same order as they occur in the blockķghcUnwind instructions for an individual procedure. Corresponds to a "Frame Description Entry" (FDE) in DWARF.Ʒghc%List of blocks. Order must match asm!ɷghcInformation about unwind instructions for a procedure. This corresponds to a "Common Information Entry" (CIE) in DWARF.ηghcA DWARF address range. This is used by the debugger to quickly locate which compilation unit a given address belongs to. This type assumes a non-segmented address-space.ghc;Abbreviation codes used for encoding above records in the  .debug_info section.ghc)Pseudo, used for marking the end of listsҷghcIndividual dwarf records. Each one will be encoded as an entry in the  .debug_info section.ݷghc)label of DIE belonging to the parent tickghc1Generate assembly for the given abbreviation codeghcAbbreviation declaration. This explains the binary encoding we use for representing ҷ1. Be aware that this must be updated along with .ghc Generate assembly for DWARF dataghc+Print a CLabel name in a ".stringz "LABEL""ghcPrints assembler data corresponding to DWARF info records. Note that the binary format of this is parameterized in  abbrevDecls and has to be kept in synch.ghc'Close a DWARF info record with childrenghc4Print assembler directives corresponding to a DWARF .debug_aranges address table entry.ghcHeader for the  .debug_frame section. Here we emit the "Common Information Entry" record that establishes general call frame parameters and the default stack layout.ghcWrites a "Frame Description Entry" for a procedure. This consists mainly of referencing the CIE and writing state machine instructions to describe how the frame base (CFA) changes.ghcGenerates unwind information for a block. We only generate instructions where unwind information actually changes. This small optimisations saves a lot of space, as subsequent blocks often have the same unwind information.ghc+Get DWARF register ID for a given GlobalRegghcGenerate code for setting the unwind information for a register, optimized using its known old value in the table. Note that Sp/ is special: We see it as synonym for the CFA.ghc'Print the register number of the given <' as an unsigned LEB128 encoded number.ghcGenerates a DWARF expression for the given unwind expression. If spIsCFA is true, we see Sp0 as the frame base CFA where it gets mentioned.ghcGenerate code for re-setting the unwind information for a register to  undefinedghc)Align assembly at (machine) word boundaryghc1Assembly for a single byte of constant DWARF dataghc(Assembly for a two-byte constant integerghc"Assembly for a constant DWARF flagghc*Assembly for 4 bytes of dynamic DWARF dataghc+Assembly for 4 bytes of constant DWARF dataghcAssembly for a DWARF word of dynamic data. This means 32 bit, as we are generating 32 bit DWARF.ghcAssembly for a machine word of dynamic data. Depends on the architecture we are currently generating code for.ghcPrints a number in "little endian base 128" format. The idea is to optimize for small numbers by stopping once all further bytes would be 0. The highest bit in every byte signals whether there are further bytes to read.ghcSame as  pprLEBWord, but for a signed numberghcGenerates a dynamic null-terminated string. If required the caller needs to make sure that the string is escaped properly.ghc>Generate a string constant. We take care to escape the string.ghc%Escape a single non-unicode characterghcGenerate an offset into another section. This is tricky because this is handled differently depending on platform: Mac Os expects us to calculate the offset using assembler arithmetic. Linux expects us to just reference the target directly, and will figure out on their own that we actually need an offset. Finally, Windows has a special directive to refer to relative offsets. Fun.ghc4the register to produce an unwinding table entry forghc&the old and new values of the register.ηϷзѷɷʷ̷ͷ˷÷·ķŷƷǷȷҷշӷַԷܷٷ׷޷ط߷۷ݷڷ.ҷӷܷ۷ڷٷط׷Է޷ݷշ߷ַηϷѷзɷʷͷ̷˷ķŷȷǷƷ÷·NoneYW ghc Generate DWARF/debug informationghcBuild an address range entry for one proc. With split sections, each proc needs its own entry, since they may get scattered in the final binary. Without split sections, we could make a single arange based on the first/last proc.ghcHeader for a compilation unit, establishing global format parametersghcCompilation unit footer, mainly establishing size of debug sectionsghcSplits the blocks by procedures. In the result all nested blocks will come from the same procedure as the top-level block. See Note [Splitting DebugBlocks] for details.ghc/Generate DWARF info for a procedure debug blockghcGenerate DWARF info for a blockghcGenerates the data for the debug frame section, which encodes the desired stack unwind behaviour for the debuggerghc8Generates unwind information for a procedure debug blockNone ")*a ghcRegister's passed up the tree. If the stix code forces the register to live in a pre-decided machine register, it comes out as Fixed#; otherwise, it comes out as Any>, and the parent can decide which register to put it in.ghcs are the insn sequences generated by the insn selectors. They are really trees of insns to facilitate fast appending, where a left-to-right traversal yields the insns in the correct order.ghc Utilitiesghcbid refers to the current block and is used to update the CFG if new blocks are inserted in the control flow. See Note [Keeping track of the current block] for more details.ghcSometimes we need to change the Format of a register. Primarily during conversion.ghcGrab the Reg for a CmmRegghcConvert a BlockId to some CmmStatic data TODO: Add JumpTable Logic, see Ticket 19912 jumpTableEntry :: NCGConfig -> Maybe BlockId -> CmmStatic jumpTableEntry config Nothing = CmmStaticLit (CmmInt 0 (ncgWordWidth config)) jumpTableEntry _ (Just blockid) = CmmStaticLit (CmmLabel blockLabel) where blockLabel = blockLbl blockidThe dual to getAnyReg: compute an expression into a register, but we don't mind which one it is.ghcThe register width to be used for an operation on the given width operand.ghc3Is a given number encodable as a bitmask immediate? https://stackoverflow.com/questions/30904718/range-of-immediate-values-in-armv8-a64-assemblyghcInstructions to sign-extend the value in the given register from width w up to width w'.ghcInstructions to truncate the value in the given register from width w down to width w'.ghc7Basic block these statement will start to be placed in.ghc Cmm StatementghcResulting instructionghc6Basic block this statement will start to be placed in.ghcInstructions, and bid of new block if successive statements are placed in a different basic block.ghcwidth of loaded valueNoneb.ghc Instruction instance for aarch64None)*1i ghc abstracted over n (the node type)ghc?Function for rewriting and analysis combined. To be used with  rewriteCmm.Currently set to work with UniqSM monad, but we could probably abstract that away (if we do that, we might want to specialize the fixpoint algorithms to the particular monads through SPECIALIZE).ghc abstracted over n (the node type)ghc*The result of joining OldFact and NewFact.ghc!Result is different than OldFact.ghcResult is the same as OldFact.ghcSort the blocks into the right order for analysis. This means reverse postorder for a forward analysis. For the backward one, we simply reverse that (see Note [Backward vs forward analysis]).ghcConstruct a mapping from a Label to the block indexes that should be re-analyzed if the facts at that Label change.Note that we're considering here the entry point of the block, so if the facts change at the entry: * for a backward analysis we need to re-analyze all the predecessors, but * for a forward analysis, we only need to re-analyze the current block (and that will in turn propagate facts into its successors).ghcAfter some new facts have been generated by analysing a block, we fold this function over them to generate (a) a list of block indices to (re-)analyse, and (b) the new FactBase.ghcReturns the result of joining the facts from all the successors of the provided node or block.ghc(Returns the joined facts for each label.ghcFolds backward over all nodes of an open-open block. Strict in the accumulator.ghcFolds backward over all the nodes of an open-open block and allows rewriting them. The accumulator is both the block of nodes and f> (usually dataflow facts). Strict in both accumulated parts.ԒŒƒMŒƒԒMNone )*nghc>Specialization that only retains the keys for local variables.Local variables are mostly glorified Ints, and some parts of the compiler really don't care about anything but the Int part. So we can avoid some overhead by computing a IntSet instead of a Set LocalReg which (unsurprisingly) is quite a bit faster.ghc:A mapping from block labels to the variables live on entryghc&The variables live on entry to a blockghcThe dataflow latticeghc'Calculated liveness info for a CmmGraphghcOn entry to the procedure, there had better not be any LocalReg's live-in. If you see this error it most likely means you are trying to use a variable without it being defined in the given scope.ghcThe dataflow latticeghcOn entry to the procedure, there had better not be any LocalReg's live-in.None)*nghcconflicts (r,e) node is False if and only if the assignment r = e' can be safely commuted past statement node.None %)*o  None )*9pWghc2Check for obviously out-of-bounds shift operationsghcAs noted in Note [Register parameter passing], the arguments and ; of a foreign call mustn't mention caller-saved registers.˸̸˸̸None)*y ghcThe result of dominator analysis. Also includes a reverse postorder numbering, which is needed for dominator analysis and for other (downstream) analyses.Invariant: Dominators, graph, and RP numberings include only *reachable* blocks.ghc+Reverse postorder number of a node in a CFGghcDominator setsNode X dominates node Y if and only if every path from the entry to Y includes X. Node Y technically dominates itself, but it is never included in the *representation* of its dominator set.A dominator set is represented as a linked list in which each node points to its *immediate* dominator, which is its parent in the dominator tree. In many circumstances the immediate dominator will be the only dominator of interest.ghc0Set of nodes dominating the immediate dominator.ghc!Label of the immediate dominator.ghcUse to tell if the given label is in the given dominator set. Which is to say, does the bloc with with given label _properly_ and _non-vacuously_ dominate the node whose dominator set this is?Takes linear time in the height of the dominator tree, but uses space efficiently.ghcIntersect two dominator sets to produce a third dominator set. This function takes time linear in the size of the sets. As such it is inefficient and should be used only for things like visualizations or linters.ghcCall this function with a  to get back the results of a dominator analysis of that graph (as well as a reverse postorder numbering). The result also includes the subgraph of the original graph that contains only the reachable blocks.ghcUtility functionsCall  to get the mapping from M to  that is embedded in every .ghcUse  on the result of the dominator analysis to get a mapping from the M of each reachable block to the reverse postorder number of that block.ghcUse  on the result of the dominator analysis to get a mapping from the M of each reachable block to the dominator set (and the immediate dominator) of that block. The implementation is space-efficient: intersecting dominator sets share the representation of their intersection.ghc2Turn a function into an array. Inspired by SML's  Tell if a  is reducible, or make it soNone ")* ghcA "supernode" contains a single-entry, multiple-exit, reducible subgraph. The entry point is the given label, and the block with that label dominates all the other blocks in the supernode. When an entire graph is collapsed into a single supernode, the graph is reducible. More detail can be found in GHC.Data.Graph.Collapse.ghc1Represents the result of a reducibility analysis.ghcGiven a graph, say whether the graph is reducible. The graph must be bundled with a dominator analysis and a reverse postorder numbering, as these results are needed to perform the test.ghcGiven a graph, return an equivalent reducible graph, by "splitting" (copying) nodes if necessary. The input graph must be bundled with a dominator analysis and a reverse postorder numbering. The computation is monadic because when a node is split, the new copy needs a fresh label.Use this function whenever a downstream algorithm needs a reducible control-flow graph.ghcSplit one or more nodes of the given graph, which must be irreducible.ghc9Turn a collapsed supernode back into a control-flow graphghc Convert a  into an inductive graph. (The function coalesces duplicate edges into a single edge.)ghc-Return all labels defined within a supernode.ghcMap the given function over every use and definition of a label in the given supernode.ghcMap the given function over every use and definition of a label in the given block.ghcWithin the given supernode, replace every defined label (and all of its uses) with a fresh label.None 1dghcThe syntactic constructs in which Wasm code may be contained. A list of these constructs represents an evaluation context, which is used to determined what level of br$ instruction reaches a given label.ghc1Carries the label that follows `if...end`, if anyghcModule : GHC.Wasm.ControlFlow.FromCmm Description : Translation of (reducible) Cmm control flow to WebAssemblyCode in this module can translate any _reducible_ Cmm control-flow graph to the structured control flow that is required by WebAssembly. The algorithm is subtle and is described in detail in a draft paper to be found at  .https://www.cs.tufts.edu/~nr/pubs/relooper.pdf.Abstracts the kind of control flow we understand how to convert. A block can be left in one of four ways:Unconditionally%Conditionally on a predicate of type e=To a location determined by the value of a scrutinee of type e Not at all.ghc;Convert a Cmm CFG to WebAssembly's structured control flow.ghcA CmmSwitch scrutinee may have any width, but a br_table operand must be exactly word sized, hence the extension here. (#22871)ghcneeded for offset calculationghctranslator for expressionsghc!translator for straight-line codeghcCFG to be translatedNone"%&)*1v;ghc*Pop the results into locals after a ccall.ghc" operation, truncating the result.ghcLower a > operation.ghcLower a > operation, first sign-extending the LHS, then truncating the result.ghcLower a  MO_MulMayOflo+ operation. It's translated to a ccall to hs_mulIntMayOflo function in ghc-primcbits mulIntMayOflo, otherwise it's quite non-trivial to implement as inline assembly.ghc$Lower an unary conversion operation.ghcLower a > operation.ghcLower a > operation.ghcLower a > operation.ghcLower a o.ghcLower a o. Note that we don't emit  'f32.const' or  'f64.const' for the time being, and instead emit their relative bit pattern as int literals, then use an reinterpret cast. This is simpler than dealing with textual representation of floating point values.ghcLower a o.ghcLower a o, passing in the expected wasm representation type, and also the Cmm type (which contains width info needed for memory narrowing).5The Cmm type system doesn't track signedness, so all os are unsigned loads. However, as an optimization, we do emit signed loads when a o! result is immediately used as a > operand.ghcLower a o.ghcLower a o.ghcLower a o4, passing in the expected wasm representation type.ghcLower a o as a pointer, returning the pair of base pointer and non-negative offset.ghcLower an unary homogeneous = to a ccall.ghcLower a binary homogeneous = to a ccall.ghcLower a = operation.ghcLower a > operation to inline assembly. Currently we target wasm without atomics and threads, so it's just lowered to regular memory loads and stores.ghcLower a =.ghcLower a ccall, but drop the result by assigning it to an unused local. This is only used for lowering > and such, where the libc functions do have a return value, but the corresponding = does not expect one.ghcLower a . The target is F) a symbol, which translates to a direct call+, or an expression, which translates to a  call_indirect. The callee function signature is inferred from the passed in arguments here.ghcLower a .ghcLower a single Cmm action.ghcLower a block of Cmm actions.ghcLower a .ghcInvoked once for each & which indexes a  or .ghcInvoked for each function & with known type (e.g. a , or callee of ).ghcInvoked for all other &s along the way, e.g. in s or os.ghcInvoked for each =7, returning its wasm local id and representation type.ghcInvoked for each = with expected representation type, only returning its wasm local id.ghcInvoked for dtors. We don't bother to implement dtors yet; there's no native  .fini_array support for wasm, and the way clang/ handles dtors is generating a ctor that calls atexit() for dtors. Which makes some sense, but we don't need to do the same thing yet.ghcInvoked for ctors and dtors.ghcInvoked for each data section.ghcInvoked for each .ghcInvoked for each .ghcInvoked for each .None"%&)*Fghc2Reads current indentation, appends result to stateghc)To tail call or not, that is the questionghcDefault indent level is noneghcIncrease indent level by a tabghc5Writes a single line starting with the current indentghcWrites a single line breakghcWrites a line starting with a single tab, ignoring current indent levelNone "1None)*9ghcData accumulated during code generation. Mostly about statistics, but also collects debug data for DWARF generation.ghcsee Note [Unwinding information in the NCG] and Note [What is this unwinding business?] in GHC.Cmm.DebugBlock.ghcNative code generated, for statistics. This might hold a lot of data, so it is important to clear this field as early as possible if it isn't actually required.ghc,Do native code generation on all these cmms.ݿghcComplete native code generation phase for a single top-level chunk of Cmm. Dumping the output of each stage along the way. Global conflict graph and NGC statsghcMake sure all blocks we want the layout algorithm to place have been placed.ghc6Compute unwinding tables for the blocks of a procedureghc Build a doc for all the imports.ݿghcthe cmm to generate code forghc!sequence number of this top thingghc+the native code generated for the procedureghc?unwinding tables for all points of all blocks of the procedureݿܿܿݿNone)*None)*ghc$Ignore these node types for equalityghcGiven a block map, ensure that all "target" blocks are covered by the same ticks as the respective "source" blocks. This not only means copying ticks, but also adjusting tick scopes where necessary.Noneghc*Keep track of locally available registers.ghcAvailable vector XMM registersghcAvailable long registersghcAvailable double registersghcAvailable float registersghcAvailable vanilla registersƸghcGiven a list of arguments, and a function that tells their types, return a list showing where each argument is passedɸƸǸȸøĸŸøĸŸƸǸȸɸNone)* ڸghcUnlabeled graph with tick scope۸ghc+CmmAGraph is a chunk of code consisting of:.ordinary statements (assignments, stores etc.)jumpslabelsout-of-line labelled blocksThe semantics is that control falls through labels and out-of-line blocks. Everything after a jump up to the next label is by definition unreachable code, and will be discarded.*Two CmmAGraphs can be stuck together with  *, with the meaning that control flows from the first to the second.A ۸ can be turned into a  (closed at both ends) by providing a label for the entry point and a tick scope; see .޸ghc.creates a sequence "goto id; id:" as an AGraph߸ghc(creates an open AGraph from a given nodeghc)creates a closed AGraph from a given nodeghc0A labelled code block; should end in a last nodeghc*allocate a fresh label for the entry pointghc5use the given BlockId as the label of the entry pointghcAssumes natural alignmentghcA jump where the caller says what the live GlobalRegs are. Used for low-level hand-written Cmm.ghc Construct a 7 node for the given register and unwinding expression.*ܸݸ޸߸ոٸָظ׸۸ڸиѸӸҸԸ*۸ڸո׸ָظٸܸݸ޸߸иѸӸԸҸNone )*d ghc!Tick scope for new blocks & ticksghcDestination for ticky countsghcWhich tail calls can be compiled as local jumps? See Note [Self-recursive tail calls] in GHC.StgToCmm.Exprghc What to do at end of basic blockghcSize of current update frame UpdFrameOffset must be kept lazy or else the RTS will deadlock _and_ also experience a severe performance degradation׻ghco for the *tagged* valueٻghcId that this is the info forghcThe current tick scope. We will assign this to generated blocks.ghcPlaces blocks generated by the given code into a fresh (sub-)scope. This will make sure that Cmm annotations in our scope will apply to the Cmm blocks generated therein - but not the other way around.ghcGenerate code into a fresh tick (sub-)scope and gather generated codeghcAssumes natural alignment.ݻ޻ۻ߻ܻ¨ܨͨʨȨɨ˨̨ŨĨèϨΨبШڨר֨ըݨӨԨۨҨѨ٨Ǩߨިƨջֻٻػ׻˻̻ϻλѻлͻڻǻȻɻʻһӻԻƻªêŪĪ!ڻۻܻݻ!êĪŪһӻԻªǻȻʻɻƻ߻޻ջֻٻػ׻¨ߨިݨܨۨڨ٨بר֨ըԨӨҨѨШϨΨ̨ͨ˨ʨɨȨǨƨŨĨè˻ͻ̻ѻлϻλNone`ghcEmit the fields of an IpeBufferEntry struct for each entry in a given list.ghcByte order to write the data inghcList of IPE buffer entriesNone9&ghcDoes a computation in the FCode monad, with a current environment and a list of local declarations. Returns the resulting list of declarations.ghcMake a global definition for the string, and return its labelԼռӼҼԼռҼӼNone %&įghc0lower bound (inclusive), upper bound (exclusive)޼ghcaddToMem rep ptr n adds n to the integer pointed-to by ptr.߼ghcaddToMemE rep ptr n adds n to the integer pointed-to by ptr.ghcEmit a data-segment data blockghcEmit a read-only data blockghcEmit code to add an entry to a now-overwritten pointer to the update remembered set.ghcA bare bones InfoProvEnt for things which don't have a good source locationghc:Convert source information collected about identifiers in  to entries suitable for placing into the info table provenance table.The initial stats given to this function will (or should) only contain stats for stack info tables skipped during generateCgIPEStub. As the fold progresses, counts of tables per closure type will be accumulated.ghcUse signed comparisonsghc&value of pointer which was overwrittenghc the thunk>޴ִشʹӴԴ״˴̴ϴδҴдմʴѴߴ۴ݴ޵޼߼ܼݼּ׼ڼټؼۼ>޵ִմش״۴ߴ޴ݴϴ̴ѴʴӴʹд˴ҴδԴ޼߼ݼּܼ׼ۼڼټؼNoneghcCheck all arguments marked as cbv for the presence of a tag *at runtime*.ghcCheck all required-tagged arguments of a constructor are tagged *at compile time*.ghcCall barf if we failed to predict a tag correctly. This is immensely useful when debugging issues in tag inference as it will result in a program abort when we encounter an invalid call/heap object, rather than leaving it be and segfaulting arbitrary or producing invalid results. We check if either: * A tag is present * Or the object is a 25 (for which zero is the proper tag)ghcJump to the first block if the argument closure is subject to tagging requirements. Otherwise jump to the 2nd one.Noneɰghc;Emit top-level tables for HPC and return code to initialiseNone )*̐ghc5Collect all of the memory locations loaded from by a o.ghc$Generate TSAN instrumentation for a = occurrence.ghcMirrors __tsan_memory_order https://github.com/llvm-mirror/compiler-rt/blob/master/include/sanitizer/tsan_interface_atomic.h#L32ghcthe applied operationghcresultsghc argumentsghcK* a block of instrumentation, if applicableghcfunctionghcresultsghc argumentsghc function nameghcformalsghc argumentsghcsuccess orderingghcfailure orderingghcaddressghcexpected valueghc new valueghcresult destinationNoneghc:FVS, StgArg because for thunks these can also be literals.ghcArgsghc(Number of arguments for a ticky counter.Ticky currently treats args to constructor allocations differently than those for functions/LNE bindings.ghcRegister a ticky counter.It's important that this does not race with other entries of the same closure, lest the ticky_entry_ctrs list may become cyclic. However, we also need to make sure that this is reasonably efficient. Consequently, we first perform a normal load of the counter's "registered" flag to check whether registration is necessary. If so, then we do a compare-and-swap to lock the counter for registration and use an atomic-exchange to add the counter to the list. if ( f_ct.registeredp == 0 ) { if (cas(f_ct.registeredp, 0, 1) == 0) { old_head = xchg(ticky_entry_ctrs, f_ct); f_ct.link = old_head; } } ghcPredicted a pointer would be tagged correctly (GHC will crash if not so no miss case)ghc2Pass a boolean expr indicating if tag was present.ghcCalled when for `case v of ...` we can avoid entering v based on tag inference information.ghcFVsghcArgsghcstaticghc updateableghc Free varsghc updateableghcFree vars + functionghclbl for the counterghcarityghcfun descghcarg descghc json descghcinfo table lblghc!size of the full header, in bytesghcsize of the payload, in bytes  NoneؙghcUsed to tell the various mkVirtHeapOffsets functions what kind of header the object has. This will be accounted for in the offsets of the fields returned.ghc$Return multiple values to the sequelIf the sequel is Return  return (x,y)If the sequel is AssignTo [p,q]  p=x; q=y;ghcemitCall conv fun args# makes a call to the entry-code of fun$, using the call/return convention conv , passing args3, and returning the results to the current sequel.ghc*emitCallWithExtraStack conv fun args stack$ makes a call to the entry-code of fun#, using the call/return convention conv , passing args0, pushing some extra stack frames described by stack2, and returning the results to the current sequel.ghc takes a list of function arguments and prepares them for pushing on the stack for "extra" arguments to a function which requires fewer arguments than we currently have.ghc1Just like mkVirtHeapOffsets, but for constructorsghcJust like mkVirtConstrOffsets, but used when we don't have the actual arguments. Useful when e.g. generating info tables; we just need to know sizes of pointer and non-pointer fields."ӵѵƵ̵˵ɵȵǵʵ͵εϵ"Ƶȵ̵ɵǵ˵ʵ͵εϵѵӵNone 1ghcTags every binder with its  and let bindings with their s.ghcTags binders of an  with its  and let bindings with their s. Additionally, returns its  and the set of binder occurrences in argument and nullary application position (cf. GHC.Stg.Lift.Analysis#arg_occs).ghcHow many times will the lambda body of the RHS bound to the given identifier be evaluated, relative to its defining context? This function computes the answer in form of a W.ghcCombines several heuristics to decide whether to lambda-lift a given let-binding to top-level. See GHC.Stg.Lift.Analysis#when for details.ghc?The size in words of a function closure closing over the given s, including the header.ghcThe number of words a single  adds to a closure's size. Note that this can't handle unboxed tuples (which may still be present in let-no-escapes, even after Unarise), in which case  will crash.ghc"closureGrowth expander sizer f fvs> computes the closure growth in words as a result of lifting f to top-level. If there was any growing closure under a multi-shot lambda, the result will be " . Also see GHC.Stg.Lift.Analysis#clogro.ghcIs the binding a let-no-escape?ghcLet bodyghc Binding groupghc9RHS skeletons, argument occurrences and annotated bindingghcIs the binding a let-no-escape?ghcLet body skeletonghc Argument occurrences in the bodyghc Binding groupghcLet skeleton, argument occurrences, scope skeleton of binding and the annotated bindingghcAn expander function, turning 's into 's. See .ghc Just abs_ids  =) This binding is beneficial to lift and abs_ids* are the variables it would abstract overghc:Expands outer free ids that were lifted to their free varsghc/Computes the closure footprint of an identifierghc0Binding group for which lifting is to be decidedghcFree vars of the whole binding group prior to lifting it. These must be available at call sites if we decide to lift the binding group.ghc(Abstraction of the scope of the functionghcClosure growth. "; indicates there was growth under a (multi-shot) lambda.ߜߜNoneghc=Lambda lifts bindings to top-level deemed worth lifting (see ).(Mostly) textbook instance of the lambda lifting transformation, selecting which bindings to lambda lift by consulting .ghcJust former_fvs  =( this RHS was lifted and we have to add  former_fvs. as lambda binders, discarding all free vars.None %&yoghc6All the information about the breakpoints for a moduleoghc6info about each breakpoint from the bytecode generatoroghc1Array pointing to cost centre for each breakpointoghcAn array giving the names of the declarations enclosing each breakpoint. See Note [Field modBreaks_decls]oghcAn array giving the names of the free variables at each breakpoint.oghc3An array giving the source span of each breakpoint.oghcThe array of flags, one per breakpoint, indicating which breakpoints are enabled.oghcC CostCentre typeoghcBreakpoint indexoghcInformation about a breakpoint that we know at code-generation time In order to be used, this needs to be hydrated relative to the current HscEnv by hydrateCgBreakInfo. Everything here can be fully forced and that's critical for preventing space leaks (see #22530)oghc)Type variables in scope at the breakpointoghcA reference to a top-level string literal; see Note [Generating code for top-level string literal bindings] in GHC.StgToByteCode.oghcOnly used internally in the assembler in an intermediate representation; should never appear in a fully-assembled UnlinkedBCO. Also see Note [Allocating string literals] in GHC.ByteCode.Asm.pghcConstruct an empty ModBreaksppppoooooooooooooooppoooooopppppppppppoooooooooooooppopppppppooooooooppppppppppppppppppoopppoppppppppooooooooooooooooooooooooooooooooooooooopoNoneRghcAn entry to be inserted into a module's static pointer table. See Note [Grand plan for static forms] in GHC.Iface.Tidy.StaticPtrTable.ghc3Objects which have yet to be linked by the compilerghcAn object file (.o)ghcStatic archive file (.a)ghc3Dynamically linked library file (.so, .dll, .dylib)ghcSerialised core which we can turn into BCOs (or object files), or used by some other backend See Note [Interface Files with Core Definitions]ghcA list of BCOs, but hidden behind extra indirection to avoid being too strict.ghcA byte-code object, lives only in memory. Also carries some static pointer table entries which should be loaded along with the BCOs. See Note [Grand plan for static forms] in GHC.Iface.Tidy.StaticPtrTable.ghcInformation we can use to dynamically link modules into the compilerghc3Those files and chunks of code we have yet to link.4INVARIANT: A valid linkable always has at least one  item.ghcThe linkable module itselfghcTime at which this linkable was built (i.e. when the bytecodes were produced, or the mod date on the files)ghcLike  and , but for top-level 'Addr#' literals, see Note [Generating code for top-level string literal bindings] in GHC.StgToByteCode.ghcThe current global mapping from RdrNames of DataCons to info table addresses. When a new Unlinked is linked into the running image, or an existing module in the image is replaced, the itbl_env must be updated appropriately.ghc>Current global mapping from closure Names to their true valuesghcWe need to remember the name of previous temporary DLL/.so libraries so we can link them (see #10322)ghcThe currently-loaded packages; always object code haskell libraries, system libraries, transitive dependenciesghc8And the currently-loaded compiled modules (home package)ghc7The currently loaded interpreted modules (home package)ghc6Current global mapping from Names to their true valuesghc6Is this an actual file on disk we can link in somehow?ghc1Is this a bytecode linkable with no file on disk?ghcRetrieve the filename of the linkable if possible. Panic if it is a byte-code objectghcRetrieve the compiled byte-code if possible. Panic if it is a file-based linkable;;None?%ǽghcA restricted form of ӽ for code generation purposesɽghcStatic pointer table entries for static forms defined in the module. See Note [Grand plan for static forms] in GHC.Iface.Tidy.StaticPtrTableʽghcModule breakpoints˽ghc%Program coverage tick box information̽ghc>Dependent packages, used to generate #includes for C code genνghcForeign export stubsнghcThe tidied main bindings, including previously-implicit bindings for record and class selectors, and data constructor wrappers. But *not* data constructor workers; reason: we regard them as part of the code-gen of tyconsѽghcAlgebraic data types (including ones that started life as classes); generate constructors and info tables. Includes newtypes, just for the benefit of External CoreҽghcModule being compiledӽghcA ModGuts is carried through the compiler, accumulating stuff as it goes There is only one ModGuts at any time, the one for the module being compiled right now. Once it is compiled, a ModIface and  ModDetails, are extracted and the ModGuts is discarded.սghcDocumentation.ֽghcDo we need to trust our own package for Safe Haskell? See Note [Trust Own Package] in GHC.Rename.Names׽ghcSafe Haskell modeٽghc&Type-family instance environment for  home-package% modules (including this one); c.f. tcg_fam_inst_envڽghc Class instance environment for  home-package% modules (including this one); c.f.  tcg_inst_env۽ghcBreakpoints for the moduleܽghc!Coverage tick boxes in the moduleݽghcComplete Matches޽ghc#Annotations declared in this module߽ghcWarnings declared in the moduleghc(Files to be compiled with the C compilerghc'Foreign exports declared in this moduleghcBindings for this moduleghcBefore the core pipeline starts, contains See Note [Overall plumbing for rules] in GHC.Core.Rulesghc(Pattern synonyms declared in this moduleghc(Family instances declared in this moduleghc'Class instances declared in this moduleghc=TyCons declared in this module (includes TyCons for classes)ghcFixities declared in this module. Used for creating interface files.ghcTop-level lexical environmentghcDid we run a TH splice?ghc$What was used? Used for interfaces.ghc*What it depends on, directly or otherwiseghcWhat it exportsghc$For error messages from inner passesghcWhether it's an hs-boot moduleghcModule being compiled+ǽȽнϽ̽νͽ˽ʽҽɽѽӽԽ޽ؽݽսٽܽڽ۽׽ֽ߽+ӽԽ߽޽ݽܽ۽ڽٽؽ׽ֽսǽȽҽѽнϽνͽ̽˽ʽɽNone 1ghc?A full rule environment which we can apply rules from. Like a , but it also includes the set of visible orphans we use to filter out orphan rules which are not visible (even though we can see them...) See Note [Orphans] in GHC.CoreghcGathers a collection of Ys. Maps (the name of) an  to its rulesghc Used to make Y for an 1 defined in the module being compiled. See also 6ghcFind the "top" free names of several expressions. Such names are either: The function finally being applied to in an application chain (if that name is a GlobalId: see GHC.Types.Var#globalvslocal), orThe TyCon if the expression is a This is used for the fast-match-check for rules; if the top names don't match, the rest can'tghcruleCantMatch tpl actual returns True only if actual definitely can't match tpl by instantiating tpl. It's only a one-way match; unlike instance matching we don't consider unification.Notice that [_$_] )ruleCantMatch [Nothing] [Just n2] = False Reason: a template variable can be instantiated by a constant Also: )ruleCantMatch [Just n1] [Nothing] = False Reason: a local variable v in the actuals might [_$_]ghcGather all the rules for locally bound identifiers from the supplied bindingsghcThe main rule matching function. Attempts to apply all (active) supplied rules to this instance of an application in a given context, returning the rule applied and the resulting expression if successful.ghcReport partial matches for rules beginning with the specified string for the purposes of error reportingghc0Target; can have more elements than the templateghc Rule optionsghcRule activation testghc Rule patternghcRules for an IdghcBindings to check inghcResulting check messageNone ?ghcThe action to retrieve an up-to-date EPS RuleEnv See Note [Overall plumbing for rules]ghc!Max #ticks in this simplifier runghcMake a join id with given type and arity but without call-by-value annotations.ghcSize of the bindings, used to limit the number of ticks we allowNone% ghcA substitution result.ghcCoercion optimiser optionsghcWhether to enable floating outghcWhether pre-inlining is enabledghcWhether case-of-case is enabledghcUnfolding optionsghc!Do we swizzle casts past lambdas?ghc Whether eta-expansion is enabledghcWhether inlining is enabledghcWhether RULES are enabledghcName(s) of the phaseghcFast OutVarSet tracking which recursive RHSs we are analysing. See Note [Eta reduction in recursive RHSs] in GHC.Core.Opt.Arity.Noneighc;Helps us find information about modules in the home packageghc7Information about modules in the package being compiledghcThe actual artifact we would like to link to access things in this module. See Note [Home module build products] might be empty: If this is an .hs-boot moduleTemporarily during compilation if we pruned away the old linkable because it was out of date.When re-linking a module (), we construct the  by building a new  from the old  (only).ghc1Extra information that has been created from the / for the module, typically during typecheckingghcThe basic loaded interface file: every loaded module has one of these, even if it is imported from another packageghc$Constructs an empty HomePackageTable  NoneF ghc(Action to perform in backend compilationghc+Update the boot and signature file results.ghcRecompile this module.ghcOld interface hash for this compilation, if an old interface file exists. Pass to hscMaybeWriteIface when writing the interface to avoid updating the existing interface when the interface isn't changed.ghcPartial interfaceghc Module infoghc#Information for the code generator.ghc-Status of a module in incremental compilationghc*Nothing to do because code already exists.ghcRecompilation of module, or update of interface is required. Optionally pass the old interface hash to avoid updating the existing interface when it has not changed.  None"None "-ghcCode generator for JavaScriptghc?Generate the ingredients for the linkable units for this moduleghc+variable prefix for the nth block in moduleghcOutput file nameghcthe linkable unitsNoneNone(ghc StaticPtr dataconghc StaticPtrInfo dataconghcIds for `unpackCString[Utf8]#`ghcGenerate CStub or notghcTarget platformghc!Replaces all bindings of the form 'b = /\ ... -> makeStatic location valuewith b = /\ ... -> StaticPtr key (StaticPtrInfo "pkg key" "module" location) value3where a distinct key is generated for each binding.It also yields the C stub that inserts these bindings into the static pointer table.ghcsptModuleInitCode module fps. is a C stub to insert the static entries of module into the static pointer table.fps is a list associating each binding corresponding to a static entry with its fingerprint.  Noneb%pppCppppppppCpppCpppppppCpppppCpCppCp%ppppppCppCpCCpCppCpCpppppppppppppppppNone"None" ghcPretty-prints a  in context: that is, if the entity is a data constructor, record selector, or class method, then the entity's parent declaration is pretty-printed with irrelevant parts omitted.ghcPretty-prints a .ghcPretty-prints a i8 (type/data family instance) with its defining location.ghcPretty-prints a  with its defining location.ghcPretty-prints the  header. For functions and data constructors the function is equivalent to  but for type constructors and classes it prints only the header part of the declaration.ghcLike !, but adds the defining location.None%&'(13)j ghcChange [x] to "x", [x, y] to "x and y", [x, y, z] to "x, y, and z", and so on. The  stands for any  conjunction, which is passed in.ghcWhat warning flags are associated with the given missing signature?ghcPretty-print a ŋ, containing a  with its enclosing .ghcPretty-print a , with its enclosing .ghcDirectly display the given matching and unifying instances, with a header for each: `Matching instances Potentially matching instances`.ghcDisplay a summary of available instances, omitting those involving out-of-scope types, in order to explain why we couldn't solve a particular constraint, e.g. due to instance overlap or out-of-scope types.To directly display a collection of matching/unifying instances, use .ghcDisplay a summary of available instances, omitting out-of-scope ones.Use 3 to automatically set the pretty-printing options.ghcCompute a message informing the user of any instances that are overlapped but were not discarded because the instance overlapping them wasn't strictly more specific.ghc6Pretty-print an informational message, to accompany a .ghcExpand type synonyms in given types only enough to make them as similar as possible. Returned types are the same in terms of used type synonyms.To expand all synonyms, see .See ExpandSynsFail tests in tests testsuiteteststypecheck/should_fail for some examples of how this should work.ghc:the type which doesn't have a fixed runtime representationghcIf False, only prints the why.ghcWhether to print all potential instancesghcheraldNone-ghc'Write into a currently-empty MetaTyVar.(Works with both type and kind variables.ghcWrite into the  mutable references of a `.ghcA suitable TyCoMapper for zonking a type during type-checking, before all metavars are filled in.ghc6zonkId is used *during* typechecking just to zonk the Id's typeghcCheck that a coercion is appropriate for filling a hole. (The hole itself is needed only for printing.) Always returns the checked coercion, but this return value is necessary so that the input coercion is forced only when the output is forced.ghcGet a ) that includes mappings for all vars free in the given type. Useful when tidying open types.ghcthe type varfiable to write toghc,the type to write into the mutable referenceghcfor debug assertions only;ghc#ref cell must be for the same tyvarghc*the type to write to the mutable reference1˄̄ÄĄńɄȄDŽƄʄ„%None )*1//ghcSuggests a list of s" for the '.hsig' file to the user.None3 ghcA source error is an error that is caused by one or more errors in the source code. A  is thrown by many functions in the compilation pipeline. Inside GHC these errors are merely printed via  log_action, but API clients may treat them differently, for example, insert them into a list box. If you want the default behaviour, use the idiom: handleSourceError printExceptionAndWarnings $ do ... api calls that may fail ...The %s error messages can be accessed via 8. This list may be empty if the compiler failed due to -Werror (Opt_WarnIsError).See printExceptionAndWarnings for more information on what to take care of when writing a custom error handler.ghcPerform the given action and call the exception handler if the action throws a . See  for more information.ghcexception handlerghcaction to performNone7ghc#Parse the imports of a source file. Throws a  if parsing fails.ghc6Parse OPTIONS and LANGUAGE pragmas of the source file. Throws a 5 if flag parsing fails (including unsupported flags.)ghc6Parse OPTIONS and LANGUAGE pragmas of the source file. Throws a 5 if flag parsing fails (including unsupported flags.)ghc4Complain about non-dynamic flags in OPTIONS pragmas. Throws a  if the input list is non-empty claiming that the input flags are unknown.ghcParser optionsghcImplicit Prelude?ghc Parse this.ghcFilename the buffer came from. Used for reporting parse error locations.ghcThe original source filename (used for locations in the function result)ghcThe source imports and normal imports (with optional package names from -XPackageImports), and the module name.ghc Input fileghcParsed options, if any.ghc Input Bufferghc)Source filename. Used for location info.ghcwarnings and parsed options.None9DghcGiven a bag of diagnostics, turn them into an exception if any has t, or print them out otherwise.ghc Convert a PsError into a wrapped ; use it for dealing with parse errors when the driver is doing dependency analysis. Defined here to avoid module loops between GHC.Driver.Error.Types and GHC.Driver.Error.PprNone:ghcInitialise the general configuration for printing diagnostic messages For example, this configuration controls things like whether warnings are treated like errors.ghcInitialise the configuration for printing specific diagnostic messagesNone9= ghc6A command-line warning message and the reason it arose,This used to be own type, but now it's just t .ghcA command-line error messageghc4GHC flag modes describing when a flag has an effect.ghc-The flag only affects the non-interactive GHCghc)The flag only affects the interactive GHCghc#The flag affects multiple ghc modesghc.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 signghc%Parse a response file into arguments.ghccmdline parser specghcargsghcresponse file handler++None?Dghc:A local block label (e.g. identifying a case alternative).NoneBcghcBuild a PrimOp Idghc z  y and x * 1 + z ==> z  x.ghcCheck if there is comparison with minBound or maxBound, that is always true or false. For instance, an Int cannot be smaller than its minBound, so we can replace such comparison with False.ghcCreate an Int literal expression while ensuring the given Integer is in the target Int rangeghcCreate an Int literal expression while ensuring the given Integer is in the target Int rangeghcCreate an Int literal expression while ensuring the given Integer is in the target Int rangeghcCreate an unboxed pair of an Int literal expression, ensuring the given Integer is in the target Int range and the corresponding overflow flag (0#/1#) if it wasn't.ghcCreate a Word literal expression while ensuring the given Integer is in the target Word rangeghcCreate a Word literal expression while ensuring the given Integer is in the target Word rangeghcCreate a Word literal expression while ensuring the given Integer is in the target Word rangeghcCreate a Word literal expression while ensuring the given Integer is in the target Word rangeghcCreate an unboxed pair of a Word literal expression, ensuring the given Integer is in the target Word range and the corresponding carry flag (0#/1#) if it wasn't.ghc'ambient (primop x) = x', but not necessarily 'primop (ambient x) = x'.ghc=Transform `extendWordN (narrowWordN x)` into `x .&. 0xFF..FF`ghcnarrow subsumes bitwise  with full mask (cf #16402):narrowN (x .&. m) m .&. (2^N-1) = 2^N-1 ==> narrowN x3e.g. narrow16 (x .&. 0xFFFF) ==> narrow16 xghcMatch (op (op v e) e) or (op e (op v e)) or (op (op e v) e) or (op e (op e v)) and return the innermost (op v e) or (op e v).ghc+Match BigNat#, Integer and Natural literalsghcMatch numeric literalsghc8Match the application of a DataCon to a numeric literal.Can be used to match e.g.: IS 123# IP bigNatLiteral W# 123##ghc$Left identity rule for PrimOps like IntAddC and WordAddC, where, in addition to the result, we have to indicate that no carry/overflow occurred.ghc%Right identity rule for PrimOps like IntSubC and WordSubC, where, in addition to the result, we have to indicate that no carry/overflow occurred.ghcIdentity rule for PrimOps like IntAddC and WordAddC, where, in addition to the result, we have to indicate that no carry/overflow occurred.ghcCreate a numeric literalghc*Create a numeric literal if it is in rangeghcMatch the scrutinee of a case and potentially return a new scrutinee and a function to apply to each literal alternative.ghc Case rulesIt's important that occurence info are present, hence the use of In* types.ghcIf the given primop is a quotRem, return the corresponding (quot,rem).ghcScutineeghc Case-binderghc+Alternatives in standard (increasing) orderNone\ghc:Accumulated statistics about what we are putting into the !. "In" means stuff that is just read from interface files, "Out" means actually sucked in and type-checkedghcInformation about other packages that we have slurped in by reading their interface filesghc7Statistics about what was loaded from external packagesghcThe family instances accumulated from external packages, keyed off the module that declared themghc The total 3 accumulated from all the external-package modulesghc The total 93 accumulated from all the external-package modulesghc The total RuleEnv3 accumulated from all the external-package modulesghc The total i3 accumulated from all the external-package modulesghc The total p3 accumulated from all the external-package modulesghcResult of typechecking all the external package interface files we have sucked in. The domain of the mapping is external-package modulesghc Cache for #. Ordinarily, we can rely on the  for this information, EXCEPT that when we do dependency analysis, we need to look at the  Dependencies of our imports to determine what their precise free holes are (moduleFreeHolesPrecise). We don't want to repeatedly reread in the interface for every import, so cache it here. When the PIT gets filled in we can drop these entries.ghcThe s for modules in external packages whose interfaces we have opened. The declarations in these interface files are held in the  eps_decls, ,  and  eps_rules$ fields of this record, not in the , fields of the interface we have sucked in.What is in the PIT is: The ModuleFingerprint info Its exportsFixitiesDeprecations and warningsghcIn OneShot mode (only), home-package modules accumulate in the external package state, and are sucked in lazily. For these home-pkg modules (only) we need to record which are boot modules. We set this field after loading all the explicitly-imported interfaces, but before doing anything elseThe   part is not necessary, but it's useful for debug prints, and it's convenient because this field comes direct from ghcInformation about the currently loaded external packages. This is mutable because packages will be demand-loaded during a compilation run as required.ghcHelps us find information about modules in the imported packagesghc%Constructs an empty PackageIfaceTableghc&Add stats for one newly-read interface$$None 9:;f ghc Home-unitghcThe home package table describes already-compiled home-package modules,  excluding the module we are compiling right now. (In one-shot mode the current module is the only home-package module, so homeUnitEnv_hpt is empty. All other modules count as "external-package" modules. However, even in GHCi mode, hi-boot interfaces are demand-loaded into the external-package table.) is not mutable because we only demand-load external packages; the home package is eagerly loaded, module by module, by the compilation manager.0The HPT may contain modules compiled earlier by --make but not actually below the current module in the dependency graph.4(This changes a previous invariant: changed Jan 05.)ghcThe dynamic flag settingsghc0Stack of unit databases for the target platform.+This field is populated with the result of y.J4 means the databases have never been read from disk.Usually we don't reload the databases from disk if they are cached, even if the database flags changed!ghcExternal unitsghc2GHC name/version (used for dynamic library suffix)ghcPlatformghcInformation about the currently loaded external packages. This is mutable because packages will be demand-loaded during a compilation run as required.ghc Get home-unit+Unsafe because the home-unit may not be setghcLookup @ for every preload unit from the UnitState, for every unit used to instantiate the home unit, and for every unit explicitly passed in the given list of UnitId.ghcLookup @ for every preload unit from the UnitState and for every unit used to instantiate the home unit.ghc+Test if the module comes from the home unitghc*Rename a unit id in the internal unit env. oldUnit newUnit UnitEnv, it is assumed that the oldUnit. exists in the map, otherwise we panic. The w3 associated with the home unit will have its field   set to newUnit.NonejyghcCreates some functions that work out the best ways to format names for the user according to a set of heuristics.ghcCreates a function for formatting modules based on two heuristics: (1) if the module is the current module, don't qualify, and (2) if there is only one exposed package which exports this module, don't qualify.ghcCreates a function for formatting packages based on two heuristics: (1) don't qualify if the package in question is "main", and (2) only qualify with a unit id if the package ID would be ambiguous.ghcA function which only qualifies package names if necessary; but qualifies all other identifiers.Noneq#ghcPath to "ghc-interp.js" scriptghcNodeJS settingsghcNodeJs configurationghckeep node.js (TH, GHCJSi) processes alive if they don't use more than thisghc"extra arguments to pass to node.jsghcvalue of NODE_PATH environment variable (search path for Node modules; GHCJS used to provide some)ghclocation of node.js programghcIs the Haskell server started?ghcLinker state of the interpreterghc GHCi unit-idghc Mutable stateghcStdin for the processghc?Common field between native external interpreter and the JS oneghcInstance specific extra fieldsghcLookupSymbol cacheghcValues that need to be freed before the next command is sent. Finalizers for ForeignRefs can append values to this list asynchronously.ghcExternal interpreter process and its pipe (communication channel)ghc5Configuration needed to spawn an external interpreterghc!Trace action executed after spawnghcHookghcUse Dynamic wayghcUse Profiling wayghcCommand-line optionsghcExternal program to runghc!Status of an external interpreterghcNot spawned yetghcRunningghcProcess handle of the serverghc#Pipe to communicate with the serverghcExternal 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).ghcExternal interpreterghcInternal interpreterghc InterpreterghcInterpreter loaderghc)Interpreter instance (internal, external)Nonev7 ghcSend a message to the interpreter process that doesn't expect a responseghc9Send a message to the interpreter that excepts a responseghcSend a message to the interpreter process whose response is expected laterThis is useful to avoid forgetting to receive the value and to ensure that the type of the response isn't lost. Use receiveDelayedResponse to read it.ghcSend any valueghcExpect a value to be receivedghc*Expect a delayed result to be received nowghcExpect a value to be receivedghcSend a 6 and receive the response from the interpreter processghc)Read a value from the interpreter processghc'Send a value to the interpreter process44NoneghcBring the exports of a particular module (filtered by an import decl) into scopeghcBring into scope the entire top-level envt of of this module, including the things imported into it.ghcInteractive context, recording information about the state of the context in which statements are executed in a GHCi session.ghcCache of loaded plugins. We store them here to avoid having to load them every time we switch to the interactive context.ghcvirtual CWD of the programghcThe function that is used for printing results of expressions in ghci and -e mode.ghc#The monad that GHCi is executing inghc The stack of breakpoint contextsghc$The current default types, set by a  'default' declarationghc#Fixities declared in let statementsghcAll instances and family instances created during this session. These are grabbed en masse after each update to be sure that proper overlapping is retained. That is, rather than re-check the overlapping each time we update the context, we just take the results from the instance code that already does that.ghcEssentially the cached +.The GlobalRdrEnv contains everything in scope at the command line, both imported and everything in ic_tythings, with the correct shadowing.The IcGlobalRdrEnv contains extra data to allow efficient recalculation when the set of imports change. See Note [icReaderEnv recalculation]ghcTyThings defined by the user, in reverse order of definition (ie most recent at the front). Also used in GHC.Tc.Module.runTcInteractive to fill the type checker environment. See Note [ic_tythings]ghcThe GHCi top-level scope (icReaderEnv) is extended with these importsThis field is only stored here so that the client can retrieve it with GHC.getContext. GHC itself doesn't use it, but does reset it to empty sometimes (such as before a GHC.load). The context is set with GHC.setContext.ghcEach GHCi stmt or declaration brings some new things into scope. We give them names like interactive:Ghci9.T, where the ic_index is the '9'. The ic_mod_index is incremented whenever we add something to ic_tythings See Note [The interactive package]ghcThe w: used to evaluate interactive expressions and statements.ghc'Constructs an empty InteractiveContext.ghcThis function returns the list of visible TyThings (useful for e.g. showBindings).It picks only those TyThings that are not shadowed by later definitions on the interpreter, to not clutter :showBindings with shadowed ids, which would show up as Ghci9.foo.Some TyThings define many names; we include them if _any_ name is still available unqualified.ghcGet the NamePprCtx function based on the flags and this InteractiveContextghcextendInteractiveContext is called with new TyThings recently defined to update the InteractiveContext to include them. By putting new things first, unqualified use will pick the most recently defined thing with a given name, while still keeping the old names in scope in their qualified form (Ghci1.foo).ghcAdd TyThings to the +, earlier ones in the list shadowing later ones, and shadowing existing entries in the +.ghc0discard names that are only available qualified?NonejNonepghcFind all the link options in these and the preload packages, returning (package hs lib options, extra library options, other flags)ghc Either the  or  as appropriate for the way.NoneghcHscEnv is like , except that some of the fields are immutable. An HscEnv is used to compile a single module from plain Haskell source code (after preprocessing) to either C, assembly or C--. It's also used to store the dynamic linker state to allow for multiple linkers in the same address space. Things like the module graph don't change during a single compilation.Historical note: "hsc" used to be the name of the compiler binary, when there was a separate driver and compiler. To compile a single module, the driver would invoke hsc on the source code... so nowadays we think of hsc as the layer of the compiler that deals with compiling a single module.ghcLLVM configuration cache.ghcTemporary filesghcHooksghcLogger with its flags.Don't forget to update the logger flags if the logging related DynFlags change. Or better, use hscSetFlags setter which does it.ghc/Unit environment (unit state, home unit, etc.).)Initialized from the databases cached in  hsc_unit_dbs and from the DynFlags.ghcPluginsghctarget code interpreter (if any) to use for TH and GHCi. See Note [Target code interpreter]ghc7Used for one-shot compilation only, to initialise the IfGblEnv. See  for (. See also Note [hsc_type_env_var hack]ghc:The cached result of performing finding in the file systemghcGlobal Name cache so that each Name gets a single Unique. Also track the origin of the Names.ghc1The context for evaluating interactive statementsghc'The module graph of the current sessionghc-The targets (or roots) of the current sessionghcThe dynamic flag settingsghc:The Hsc monad: Passing an environment and diagnostic stateNoneghcSwitches in the DynFlags and Plugins from the InteractiveContextghcA variant of runHsc that switches in the DynFlags and Plugins from the InteractiveContext before running the Hsc computation.ghc(Retrieve the ExternalPackageState cache.ghcFind all the instance declarations (of classes and families) from the Home Package Table filtered by the provided predicate function. Used in  tcRnImports, to select the instances that are in the transitive closure of imports from the currently compiled module.ghc4Find instances visible from the given set of importsghcGet rules from modules "below" this one (in the dependency sense)ghcGet annotations from modules "below" this one (in the dependency sense)ghcGet things from modules "below" this one (in the dependency sense) C.f Inst.hptInstancesghcDeal with gathering annotations in from all possible places and combining them into a single 9ghc Find the  for the given  by using all the resources at our disposal: the compiled modules in the : and the compiled modules in other packages that live in '. Note that this does NOT look up the  in the module being compiled: you have to do that yourself, if desiredghc Find the  for a  , searching in both the loaded home and external package module informationghc$Retrieve the target code interpreter0Fails if no target code interpreter is availableghcUpdate the LogFlags of the Log in hsc_logger from the DynFlags in hsc_dflags. You need to call this when DynFlags are modified.ghc Update Flagsghc Set FlagsghcDiscard the contents of the InteractiveContext, but keep the DynFlags and the loaded plugins. It will also keep ic_int_print and ic_monad if their names are from external packages.44NoneghcLocate a module that was imported by the user. We have the module's name, and possibly a package name. Without a package name, this function will use the search path and the known exposed packages to find the module, if a package is specified then only that package is searched for the module.ghcLocate a plugin module requested by the user, for a compiler plugin. This consults the same set of exposed packages as  , unless -hide-all-plugin-packages or -plugin-package are specified.ghcLocate a specific  0. The purpose of this function is to create a  for a given  , that is to find out where the files associated with this module live. It is used when reading the interface for a module mentioned by another interface, for example (a "system import").ghcGiven a monadic actions this and or_this, first execute this. If the returned / is successful, return it; otherwise, execute or_this. If both failed, this function also combines their failure messages in a reasonable way.ghcHelper function for 8: this function wraps an IO action which would look up mod_name in the file system (the home package), and first consults the  cache to see if the lookup has already been done. Otherwise, do the lookup (with the IO action) and save the result in the finder cache and the module location cache (if it was successful.)ghcImplements the search for a module name in the home package only. Calling this function directly is usually *not* what you want; currently, it's used as a building block for the following operations: When you do a normal package lookup, we first check if the module is available in the home module, before looking it up in the package database.When you have a package qualified import with package name "this", we shortcut to the home module.When we look up an exact  , if the unit id associated with the module is the current home module do a look up in the home module.Some special-case code in GHCi (ToDo: Figure out why that needs to call this.)ghc1Prepend the working directory to the search path.ghc.Search for a module in external packages only.ghc2Look up the interface file associated with module mod. This function requires a few invariants to be upheld: (1) the   in question must be the module identifier of the *original* implementation of a module, not a reexport (this invariant is upheld by GHC.Unit.State) and (2) the @, must be consistent with the unit id in the  . The redundancy is to avoid an extra lookup in the package state for the appropriate config.ghcConstructs the filename of a .o file for a given source file. Does not! check whether the .o file existsghcConstructs the filename of a .dyn_o file for a given source file. Does not% check whether the .dyn_o file existsghcConstructs the filename of a .hi file for a given source file. Does not" check whether the .hi file existsghcConstructs the filename of a .dyn_hi file for a given source file. Does not& check whether the .dyn_hi file existsghcConstructs the filename of a .hie file for a given source file. Does not# check whether the .hie file exists77None6None 9ghc-A function called to log warnings and errors.ghcA monad transformer to add GHC specific features to another monad.Note that the wrapped monad must support IO and handling of exceptions.ghcThe Session is a handle to the complete state of a compilation session. A compilation session consists of a set of modules constituting the current program or library, the context for interactive evaluation, and various caches.ghcA minimal implementation of a . If you need a custom monad, e.g., to maintain additional state consider wrapping this monad or using .ghc:A monad that has all the features needed by GHC API calls.In short, a GHC monadallows embedding of IO actions,can log warnings,/allows handling of (extensible) exceptions, andmaintains a current session.If you do not use  or , make sure to call 5 before any call to the GHC API functions can occur.ghc+Call the argument with the current session.ghc#Grabs the DynFlags from the SessionghcSet the current session to the result of applying the current session to the argument.ghcSet the current session to the result of applying the current session to the argument.ghc3Call an action with a temporarily modified Session.ghcModify the loggerghcPush a log hook on the stackghcPop a log hook from the stackghcPut a log messageghcPut a log messageghcTime an actionghc+A monad that allows logging of diagnostics.ghcReflect a computation in the  monad into the D monad.>You can use this to call functions returning an action in the  monad inside an D action. This is needed for some (too restrictive) callback arguments of some library functions: libFunc :: String -> (Int -> IO a) -> IO a ghcFunc :: Int -> Ghc a ghcFuncUsingLibFunc :: String -> Ghc a -> Ghc a ghcFuncUsingLibFunc str = reifyGhc $ \s -> libFunc $ \i -> do reflectGhc (ghcFunc i) sghcPrint the all diagnostics in a '. Useful inside exception handlers.None9ghcThe monad used by Core-to-Core passes to register simplification statistics. Also used to have common state (in the form of UniqueSupply) for generating Uniques.ghc%Allow floating to the top level only.ghcTrue  = float out over-saturated applications based on arity information. See Note [Floating over-saturated applications] in GHC.Core.Opt.SetLevelsghcTrue  = float constants to top level, even if they do not escape a lambdaghcJust n  = float lambdas to top level, if doing so will abstract over n or fewer value variables Nothing  = float all lambdas to top level, regardless of how many free variables Just 0 is the vanilla case: float a lambda iff it has no free varsghcLift an  operation into ghcLift an D operation into  while consuming its ghc2Adjust the dyn flags passed to the argument actionghcDrop the single count of the argument action so it doesn't effect the total.ghcGet 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).This should be done once at the start of a Core-to-Core pass that uses annotations.See Note [Annotations]ghcGet at most one annotation of a given type per annotatable item.ghc%Output a String message to the screenghcOutput a message to the screenghcOutput an error to the screen. Does not cause the compiler to die.ghcOutput a fatal error to the screen. Does not cause the compiler to die.ghcOutput a fatal error to the screen. Does not cause the compiler to die.ghc8Output a string debugging message at verbosity level of -v or higherghc2Outputs a debugging message at verbosity level of -v or higherghcddump-simpl-statsghcMask!w!wNoneghcA  is a binding along with a cached set containing its free variables (both type variables and dictionaries). We need this set in splitDictBinds, when filtering bindings to decide which are captured by a binderghcThe binders of . Caches a superset of the expression `mkVarSet (bindersOfDictBinds fdb_binds))` for later addition to an InScopeSetghcAn argument that we might want to specialise. See Note [Specialising Calls] for the nitty gritty details.ghcType arguments that should be specialised, due to appearing free in the type of a .ghc.Type arguments that should remain polymorphic.ghcDictionaries that should be specialised. mkCallUDs ensures that only "interesting" dictionary arguments get a SpecDict; see Note [Interesting dictionary arguments]ghc/Value arguments that should not be specialised.ghcSpecialise calls to type-class overloaded functions occurring in a program.ghc.Specialise a set of calls to imported bindingsghcReturns whether or not to show a missed-spec warning. If -Wall-missed-specializations is on, show the warning. Otherwise, if -Wmissed-specializations is on, only show a warning if there is at least one imported function being specialized, and if all imported functions are marked with an inline pragma Use the most specific warning as the reason.ghc(Given binders from an original function f , and the s corresponding to its usage, compute everything necessary to build a specialisation.?We will use the running example from Note [Specialising Calls]:=f :: forall a b c. Int -> Eq a => Show b => c -> Blah f a b @c i dEqA dShowB x = blah c -> Blah $sf = SUBST[a :-> T1, b :-> T2, dEqA :-> dEqT1, dShowB :-> dShow1] (@c i x -> blah)?where dShow1 is a floated binding created by bindAuxiliaryDict.The cases for  below are presented in the same order as this running example. The result of  for this example is as follows:( -- Returned arguments env + [a :-> T1, b :-> T2, dEqA :-> dEqT1, dShowB :-> dShow1] , [x]- RULE helpers , [c, i, d1, d2] , [T1, T2, c, i, d1, d2]- Specialised function helpers , [c, i, x] , [dShow1 = $dfShow dShowT2] , [T1, T2, c, i, dEqT1, dShow1] )ghcBinds a dictionary argument to a fresh name, to preserve sharingghc Construct a  from a Yghc!Identify the free variables of a YghcFlatten a set of "dumped" s, and some other binding pairs, into a single recursive binding.kk None# ghc3Options for Specializing over constructors in Core.ghcSpecialise on arguments that are known constructors, even if they are not scrutinised in the body. See Note [Making SpecConstr keener].ghcMax # of specialisations over recursive type. Stops ForceSpecConstr from diverging.ghcMax # of specialisations for any one function. Nothing => no limit. See Note [Avoiding exponential blowup] and decreaseSpecCountghc#Size threshold: Nothing => no limitghc&The name of the module being processedghcUnfolding optionsghc"Whether to print debug informationghcThe threshold at which a worker-wrapper transformation used as part of this pass will no longer happen, measured in the number of arguments.ghc9Does this occurence represent one worth specializing for.ghcSubstitute the free variables captured by a breakpoint. Variables are dropped if they have a non-variable substitution, like in .ghcwildCardPats are always boringNoneɠghc5Clone the binders bound by a single-alternative case.None@None '7<>x ;;;;;;;;; ;;;;;;;;;None 9ghc%In which ghc mode the flag has effectghcExtra action to run when the flag is found Typically, emit a warning or errorghcFlag in internal formghcFlag in string formghc "unbuild" a ? from a w. This shouldn't be needed in the vast majority of code. But GHCi questionably uses this to produce a default w1 from which to compute a flags diff for printing.ghc(Set the Haskell language standard to useghcIs the -fpackage-trust mode onghc9Is Safe Haskell on in some way (including inference mode)ghc(Is the Safe Haskell safe language in useghc.Is the Safe Haskell safe inference mode activeghc(Test if Safe Imports are on in some formghcSet a 'Safe Haskell' flagghcAre all direct imports required to be safe for this Safe Haskell mode? Direct imports are when the code explicitly imports a moduleghcAre all implicit imports required to be safe for this Safe Haskell mode? Implicit imports are things in the prelude. e.g System.IO when print is used.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.ghcA list of unsafe flags under Safe Haskell. Tuple elements are: * name of the flag * function to get srcspan that enabled the flag * function to test if the flag is on * function to turn the flag offghcA list of unsafe flags under Safe Haskell. Tuple elements are: * name of the flag * function to get srcspan that enabled the flag * function to test if the flag is on * function to turn the flag offghc3Retrieve the options corresponding to a particular opt_* field in the correct orderghcGets the verbosity flag for the current verbosity level. This is fed to other tools, so GHC-specific verbosity flags like  -ddump-most are not includedghc Sets the w to be appropriate to the optimisation level and signals if any changes took placeghc Sets the w, to be appropriate to the optimisation levelghcParse dynamic flags from a list of command line arguments. Returns the parsed w=, the left-over arguments, and a list of warnings. Throws a  if errors occurred during parsing (such as unknown flags or missing arguments).ghcLike  but does not allow the package flags (-package, -hide-package, -ignore-package, -hide-all-packages, -package-db). Used to parse flags set in a modules pragma.ghcA helper to parse a set of flags from a list of command-line arguments, handling response files.ghcParses the dynamically set flags for GHC. This is the most general form of the dynamic flag parser that the other methods simply wrap. It allows saying which flags are valid flags and indicating if we are parsing arguments from the command line or from a file pragma.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.ghcProduce a list of suggestions for a user provided flag that is invalid.ghcAll 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 onesghc;Warnings have both new-style flags to control their state (-W, -Wno-, -Werror=, -Wwarn=) and old-style flags (-fwarn-,  -fno-warn-). We define these uniformly for individual warning flags and groups of warnings.ghcThis is where we handle unrecognised warning flags. If the flag is valid as an extended warning category, we call the supplied action. Otherwise, issue a warning if -Wunrecognised-warning-flags is set. See #11429 for context. See Note [Warning categories] in GHC.Unit.Module.Warnings.ghcMake 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.ghcDefine a warning flag.ghc%Define a warning flag with an effect.ghc,Define a new deprecated flag with an effect.ghcDefine a new deprecated flag.ghc!Define a deprecated warning flag.ghc8Define a deprecated warning name substituted by another.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 .ghcThese -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-ghcThese -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-ghcThese -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.ghcThese -X blah$ flags can all be reversed with -XNo blahghcThings you get with `-dlint`.ghc1Resolve any internal inconsistencies in a set of w. Returns the consistent w6 as well as a list of warnings to report to the user.ghc,Indicate if cost-centre profiling is enabledghc1Indicate whether we need to generate source notesghcShould we use `-XLinker -rpath` when linking or not? See Note [-fno-use-rpaths]ghc/Pretty-print the difference between 2 DynFlags.For now only their general flags but it could be extended. Useful mostly for debugging.ghcw to retrieve the options fromghc%Relevant record accessor: one of the opt_* accessorsghc#Correctly ordered extracted optionsghcUpdated w-, left-over arguments, and list of warnings.ghcUpdated w-, left-over arguments, and list of warnings.ghcvalid flags to match againstghc current stateghcarguments to parseghc(leftovers, errors, warnings)ghcvalid flags to match againstghc(are the arguments from the command line?ghccurrent dynamic flagsghcarguments to parseghcSet the warningghcUnset the warningghcMake the warning an errorghcClear the error statusghcTrue  = it should be turned onghcThe flag prefixghc!What to do when the flag is foundghc&Specification of this particular flagxxxxxxxxxxyxyyyxxxxxxxyxyyxxyyxxyyxyyyyyyyxyxxxxxxxxxxxxyyyyyyy&@??@?????@@@@@@@@@@@@@@@?????????@?@@?@@???@??wwwwwwwwwwwwwwwwwxxwwwwxxwwxwwxxwwxxwxxxxxxxxxxwwxwwxxwwxxwxxxxwwwxwxxxxxxxxxxxwxxwwwwxxxxxxxxxwwwwxxxxxxwwxxxxwwwwxwxxxwwwwxxxxxwwwwxxxxwwwxxxxxxxwxxxxwxxxwwwwwwxxwwwxvvvvvvvwwwwwwwwwwwwwwwwwwvvvvvwwwwwwwwwwwwwwwwwwwvwwwwwwwwwwwvvvvvvvvvvwwwv%%%%%%???????????????????tttttttttttttwwwxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyvvvvxxwwwwxwxxwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwywwwwvvvvvvwwwwxwwwwwwwxwwwwwwwwwwxwwwwwvwwwwvvvvvvvxy???????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@???????????%%%%%%yyyyyyyyyxxxxvyyy&wwwwwwwwwwwwwwwwvvvvvxxxxyyyNoneghc,Grab compiler info and cache it in DynFlags.ghc-Grab assembler info and cache it in DynFlags.NoneKghcPrepend the working directory to the search path. Note [Filepaths and Multiple Home Units]ghcRun compiler of C-like languages and raw objects (such as gcc or clang).ghc8Run the linker with some arguments and return the outputghcRun the LLVM OptimiserghcRun the LLVM CompilerghcRun the clang compiler (used as an assembler for the LLVM backend on OS X as LLVM doesn't support the OS X system assembler)ghc
Initialize the Llvm code generator configuration from DynFlagsNoneghcSee Note [Initializers and finalizers in Cmm] in GHC.Cmm.InitFini for details.ghc(Generate code to initialise cost centresghcGenerate code to initialise info pointer origin See Note [Mapping Info Tables to Source Positions] ghc3additional files to be compiled with the C compiler ghc DependenciesNoneghc.The profiling header words in a static closureghc+Profiling header words in a dynamic closureghc1Initialise the profiling field of an update frameghcRecord the allocation of a closure. The CmmExpr is the cost centre stack to which to attribute the allocation.ghcRecord the allocation of a closure (size is given by a CmmExpr) The size must be in words, because the allocation counter in a CCS counts in words.ghc; see Note [unpack_cstring closures] in StgStdThunks.cmm).The CAFLabel! is the label of the CAF closure.The  Set CAFLabel is the set of CAFfy closures which should be included in the closure's SRT.Note that CAFs are treated differently from other labelled blocks:we never shortcut a reference to a CAF to the contents of its SRT, since the point of SRTs is to keep CAFs alive.CAFs therefore don't take part in the dependency analysis in depAnalSRTs. instead we generate their SRTs after everything else.ghcGet the list of blocks that correspond to the entry points for  FUN_STATIC closures. These are the blocks for which if we have an SRT we can merge it with the static closure. [FUN]ghcGiven  of a module, returns the set of non-CAFFY names in the module. Any Names not in the set are CAFFY.ghcResolve a CAFfyLabel to its  using the .ghc&Attach SRTs to all info tables in the $s, and add SRT declarations to the .ghc;Build the SRT for a strongly-connected component of blocks.ghc Build an SRT for a set of blocksghcBuild a static SRT object (or a chain of objects) from a list of s.ghcUpdate info tables with references to their SRTs. Also generate static closures, splicing in SRT fields as necessary.ghcThe blocks representing continuations, ie. those that will get RET info tables. These labels will get their own SRTs, so we don't aggregate CAFs from references to these labels, we just use the label.ghcThe top label of the procghc for procedures. From .ghcCAFEnv for statics. Maps statics to the set of the CAFfy things which they refer to. From .ghcthe decls to analyse.ghcs and s for code blocksghcstatic data decls and their sghc-which blocks are static function entry pointsghc static dataghc-which blocks are static function entry pointsghcblocks in this setghclabels for those blocksghcTrue  = this SRT is for a CAFghcSRT for this setghcSRT labels for each blockghc&SRTs to merge into FUN_STATIC closuresghc.Whether the CmmDecl's group has CAF referencesNone( ghcEmit code for a foreign call, and return the results to the sequel. Precondition: the length of the arguments list is the same as the arity of the foreign function.ghc1Produce code to save the current thread state to  CurrentTSOghcSave STG registersSTG registers must be saved around a C call, just in case the STG register is mapped to a caller-saves machine register. Normally we don't need to worry about this the code generator has already loaded any live STG registers into variables for us, but in hand-written low-level Cmm code where we don't know which registers are live, we might have to save them all.ghcRestore STG registers (see )ghcPush a subset of STG registers onto the stack, specified by the bitmapSometimes, a "live" subset of the STG registers needs to be saved on the stack, for example when storing an unboxed tuple to be used in the GHCi bytecode interpreter.The "live registers" bitmap corresponds to the list of registers given by ɸ, with the least significant bit indicating liveness of the first register in the list.Each register is saved to a stack slot of one or more machine words, even if the register size itself is smaller.The resulting Cmm code looks like this, with a line for each real or virtual register used for returning tuples:... if((mask & 2) != 0) { Sp_adj(-1); Sp(0) = R2; } if((mask & 1) != 0) { Sp_adj(-1); Sp(0) = R1; })See Note [GHCi and native call registers]ghc2Pop a subset of STG registers from the stack (see )ghccloseNursery dflags tso produces code to close the nursery. A local register holding the value of  CurrentTSO is expected for efficiency.6Closing the nursery corresponds to the following code:  tso = CurrentTSO; cn = CurrentNuresry; // Update the allocation limit for the current thread. We don't // check to see whether it has overflowed at this point, that check is // made when we run out of space in the current heap block (stg_gc_noregs) // and in the scheduler when context switching (schedulePostRunThread). tso->alloc_limit -= Hp + WDS(1) - cn->start; // Set cn->free to the next unoccupied word in the block cn->free = Hp + WDS(1); ghc3Produce code to load the current thread state from  CurrentTSOghcopenNursery profile tso produces code to open the nursery. A local register holding the value of  CurrentTSO is expected for efficiency.6Opening the nursery corresponds to the following code:  tso = CurrentTSO; cn = CurrentNursery; bdfree = CurrentNursery->free; bdstart = CurrentNursery->start; // We *add* the currently occupied portion of the nursery block to // the allocation limit, because we will subtract it again in // closeNursery. tso->alloc_limit += bdfree - bdstart; // Set Hp to the last occupied word of the heap block. Why not the // next unoccupied word? Doing it this way means that we get to use // an offset of zero more often, which might lead to slightly smaller // code on some architectures. Hp = bdfree - WDS(1); // Set HpLim to the end of the current nursery block (note that this block // might be a block group, consisting of several adjacent blocks. HpLim = bdstart + CurrentNursery->blocks*BLOCK_SIZE_W - 1; NoneJ'ghcOut of line fake primop that's actually just a foreign call to other (presumably) C--.ghc#Real primop turned into inline C--.ghcInterpret the argument as an unsigned value, assuming the value is given in two-complement form in the given width. Example: asUnsigned W64 (-1) is 18446744073709551615.This function is used to work around the fact that many array primops take Int# arguments, but we interpret them as unsigned quantities in the code gen. This means that we have to be careful every time we work on e.g. a CmmInt literal that corresponds to the array size, as it might contain a negative Integer value if the user passed a value larger than 2^(wORD_SIZE_IN_BITS-1) as the Int# literal.ghc*The big function handling all the primops.In the simple case, there is just one implementation, and we emit that.In more complex cases, there is a foreign call (out of line) fallback. This might happen e.g. if there's enough static information, such as statically know arguments.ghc1Implements branchless recovery of the carry flag c/ by checking the leftmost bits of both inputs a and b and result  r = a + b:  c = a&b | (a|b)&~r  https://brodowsky.it-sky.net/2015/04/02/how-to-recover-the-carry-bit/ghc1Implements branchless recovery of the carry flag c/ by checking the leftmost bits of both inputs a and b and result  r = a - b:  c = ~a&b | (~a|b)&r  https://brodowsky.it-sky.net/2015/04/02/how-to-recover-the-carry-bit/ghc?Translate byte array prefetch operations into proper primcalls.ghcTranslate mutable byte array prefetch operations into proper primcalls.ghc, but check for range overlap when -fcheck-prim-bounds is on.ghcEmit a call to memmove.ghcEmit a call to memset9. The second argument must fit inside an unsigned char.ghcWrite barrier for MUT_VAR modification.ghcPush a range of pointer-array elements that are about to be copied over to the update remembered set.ghc The primopghcThe primop argumentsghc element typeghc index typeghcreturn registerghcrepresentation of the arrayghc info pointerghcheader payloadghc array sizeghcinitial elementghc copy functionghc source arrayghcoffset in source arrayghcdestination arrayghcoffset in destination arrayghcnumber of elements to copyghc copy functionghc source arrayghcoffset in source arrayghcdestination arrayghcoffset in destination arrayghcnumber of elements to copyghc Result regghcAtomic op (e.g. add)ghcMutableByteArray#ghcIndexghc(Type of element by which we are indexingghc Op argument (e.g. amount to add)ghc Result regghcAtomic op (e.g. add)ghcAddr#ghcPointed value typeghc Op argument (e.g. amount to add)ghc Result regghcMutableByteArray#ghcIndexghc(Type of element by which we are indexingghc Result regghcAddr#ghc(Type of element by which we are indexingghcMutableByteArray#ghcIndexghc(Type of element by which we are indexingghcValue to writeghcAddr#ghc(Type of element by which we are indexingghcValue to writeghc Result regghcMutableByteArray#ghcIndexghc(Type of element by which we are indexingghc Old valueghc New valueghcaccessed indexghcarray size (in elements)ghcfirst accessed indexghc%number of accessed indices (non-zero)ghcarray size (in elements)ghcaccessed index (in bytes)ghc pointer to  StgMutArrPtrsghcaccessed index (in bytes)ghc pointer to  StgMutArrPtrsghcaccessed index (in elements)ghc pointer to  StgArrBytesghc indexing typeghc element typeghcarray header size (in bytes)ghcdestination arrayghc&offset in destination array (in words)ghcnumber of elements to copyNone %&)*Qu ghcregs on the stackghcNumber of words of stack that we do not describe with an info table, because it contains an update frame.ghcthe number of bytes of arguments in the area for this block Defn: the offset of young(L) relative to the base is given by (sm_sp - sm_args) of the StackMap for block L.ghc>the offset of Sp relative to the base on entry to this block.ghccreate a sequence of assignments to establish the new StackMap, given the old StackMap.ghcGiven a set of live registers and a StackMap, save all the registers on the stack and return the new StackMap and the assignments to do the saving.ghcManifest Sp: turn all the CmmStackSlots into CmmLoads from Sp. The block looks like this:middle_pre -- the middle nodes Sp = Sp + sp_off -- Sp adjustment goes here last -- the last nodeAnd we have some extra blocks too (that don't contain Sp adjustments)The adjustment for middle_pre will be different from that for middle_post, because the Sp adjustment intervenes.ghc,Determine whether a stack check cannot fail.ghcEliminate stores of the formSp[area+n] = rwhen we know that r is already in the same slot as Sp[area+n]. We could do this in a later optimisation pass, but that would involve a separate analysis and we already have the information to hand here. It helps clean up some extra stack stores in common cases.Note that we may have to modify the StackMap as we walk through the code using procMiddle, since an assignment to a variable in the StackMap will invalidate its mapping there.NoneSghc!Top level driver for C-- pipelineConverts C-- with an implicit stack and native C-- calls into optimized, CPS converted and native-call-less C--. The latter C-- can be used to generate assembly.ghcThe Cmm pipeline for a single  . Returns:in the case of a : M3 of the resulting (possibly proc-point-split)  s and their CafEnv. CAF analysis necessarily happens *before* proc-point splitting, as described in Note [SRTs].in the case of a , the unmodified  and a  containing"(c) The University of Glasgow 2001 BSD-style (see the file LICENSE)Jeffrey Young Luite Stegeman Sylvain Henry Josh Meredith  experimentalNone"X ghc-Retrieve library directories provided by the UnitId in  UnitStateghc0Retrieve the names of the libraries provided by UnitIdghc?A constant holding the JavaScript executable Filename extensionghc5CPP definitions that are inserted into every .pp fileghcCPP definitions for normal operation and profiling. Use CAFs for commonCppDefs_* so that they are shared for every CPP fileghcCPP definitions for normal operation and profiling. Use CAFs for commonCppDefs_* so that they are shared for every CPP fileghc,Generate macros MK_TUP* for tuples sized 2+.ghcGenerate CPP Definitions depending on a profiled or normal build. This occurs at link time.ghcConstruct the Filename for the "binary" of Haskell code compiled to JavaScript.ghcParse option pragma in JS fileghc Input fileghcParsed options, if any.NoneY{ghcReturn the "link info" stringSee Note [LinkInfo section]  NoneZ[ghc Luite Stegeman Sylvain Henry Josh Meredith  experimentalNone "k$ghc)ModuleCode after link with other modules.It contains less information than ModuleCode because they have been commoned up into global "metadata" for the whole link.ghcrendered exportsghcCompiled moduleghcrendered exportsghcExtra JS files to linkghc&Extra root functions from loaded unitsghc>Predicate for exported functions in objects to declare as rootghcnumber of bytes for metadataghc!number of bytes linked per moduleghc/link and write result to disk (jsexe directory)ghcGiven a base0 link plan (assumed to be already linked) and a new0 link plan, compute `(diff, total)` link plans.diff* is the incremental link plan to get from base to totaltotal is the total link plan as if base and new were linked at onceghc9Output JS statements and return the output size in bytes.ghc8Link modules and pretty-print them into the given HandleghcRender linker statsghcCombine rts.js, lib.js, out.js to all.js that can be run directly with node.js or SpiderMonkey jsshellghcwrite the index.html file that loads the program if it does not exitghcwrite the runmain.js file that will be run with defer so that it runs after index.html is loadedghc3Get all block dependencies for a given set of roots1Returns the update block info map and the blocks.ghc'collect dependencies for a set of rootsghcA helper function to read system dependencies that are hardcodedghc8dependencies for the RTS, these need to be always linkedghcExport the functions in baseghcExport the Prim functionsghcGiven a UnitId, a module name, and a set of symbols in the module, package these into an  ExportedFun.ghcGiven a Module< and a set of symbols in the module, package these into an  ExportedFun.ghc4read all dependency data from the to-be-linked filesghc(Load dependencies for the Linker from ArghcPredicate to check that an entry in Ar is a JS source and to return it without its headerghc-Predicate to check that a file is a JS sourceghc+Get JS source with its header (if it's one)ghcread block info from an object that might have already been into memory pulls in all Deps from an archiveghcEmbed a JS file into a .o fileThe JS file is merely copied into a .o file with an additional header ("//Javascript") in order to be recognized later on.JS files may contain option pragmas of the form: //#OPTIONS: For now, only the CPP option is supported. If the CPP option is set, we append some common CPP definitions to the file and call cpp on it.ghcLink module codes.Performs link time optimizations and produces one JStat per module plus some commoned up initialization code.ghc/Only keep a single StaticInfo with a given nameghcInitialize a global object.>All global objects have to be declared (staticInfoDecl) first.ghcdeclare and do first-pass init of a global object (create JS object for heap objects)ghcoutput file/directoryghc+should we render readable JS for debugging?ghclinked code per moduleghcadditional JS filesghcoutput directoryghcoutput directoryghcSettingsghcOutput directoryghcBlock info per moduleghc"Used to load block info if missingghc start hereghcand also link theseghc Packages that are already LinkedghcNew units and functions to linkghcDiffghcobject files to linkNone )*-o$ ghcStart NodeJS interactively with "ghc-interp.js" script loaded inghcSpawn a JS interpreterRun NodeJS with "ghc-interp.js" loaded in. Then load GHCi.Server and its deps (including the rts) and run GHCi.Server.defaultServer.ghc Link JS RTSghcLink JS interpreterghcLink object filesghc6Link an object file using the given functions as rootsghcLink the given link planPerform incremental linking by removing what is already linked from the planghc$Send a command to the JS interpreterghc!Load a JS file in the interpreterghc Run JS serverNone %&yOghc3Run a command in the interpreter's context. With -fexternal-interpreter, the command is serialized and sent to an external iserv process, and the response is deserialized (hence the Binary constraint). With -fno-external-interpreter' we execute the command directly here.ghcGrab a lock on the  and do something with it. Overloaded because this is used from TcM as well as IO.ghcSpawn JS interpreter if it isn't already running and execute the given actionUpdate the interpreter state.ghcSpawn an interpreter if not already running according to the status in the MVar. Update the status, free pending heap references, and return the interpreter instance.This function is generic to support both the native external interpreter and the JS one.ghcExecute an action of type IO [a] , returning s for each of the results.ghcExecute an action of type IO ()ghcExecute an action of type  IO StringghcExecute an action of type String -> IO StringghcAllocate and store the given bytes in memory, returning a pointer to the memory in the remote process.ghc4Create a set of BCOs that may be mutually recursive.ghcSend a Seq message to the iserv process to force a value #2950ghcProcess the result of a Seq or ResumeSeq message. #2950ghcloadDLL loads a dynamic library using the OS's native linker (i.e. dlopen() on Unix, LoadLibrary() on Windows). It takes either an absolute pathname to the file, or a relative filename (e.g. "libfoo.so" or "foo.dll"). In the latter case, loadDLL searches the standard locations for the appropriate library.Returns:0Nothing => success Just err_msg => failureghcSpawn an external interpreterghcStop the interpreterghc Creates a & that will automatically release the ! when it is no longer referenced.ghc Convert a  to the value it references directly. This only works when the interpreter is running in the same process as the compiler, so it fails when -fexternal-interpreter is on.ghc Convert an  to the value it references directly. This only works when the interpreter is running in the same process as the compiler, so it fails when -fexternal-interpreter is on.ghcInterpreter uses Profiling wayghcInterpreter uses Dynamic wayNoneghc On macOS we rely on the linkers -dead_strip_dylibs flag to remove unused libraries from the dynamic library. We do this to reduce the number of load commands that end up in the dylib, and has been limited to 32K (32768) since macOS Sierra (10.14).-dead_strip_dylibs does not dead strip -rpath entries, as such passing -l and -rpath to the linker will result in the unnecessary libraries not being included in the load commands, however the -rpath entries are all forced to be included. This can lead to 100s of -rpath entries being included when only a handful of libraries end up being truly linked.Thus after building the library, we run a fixup phase where we inject the -rpath for each found library (in the given library search paths) into the dynamic library through  -add_rpath.#See Note [Dynamic linking on macOS]None %&{ ghcInterface loader functionghc Enabled waysghcOptions for diagnosticsghc Use bytecode rather than objectsghcFinder optionsghc Finder cacheghc$Rendering options for error messagesghcUnit environmentghc Module graphghcIs the driver in one-shot mode?ghcSuffix of .o filesghcFind all the packages and linkables that a set of modules depends onReturn the module and package dependencies for the needed modules. See Note [Object File Dependencies]8Fails with an IO exception if it can't find enough filesNoneNone SNoneNone %&99ghcFinds external references. Remember to remove the names defined by this group of BCOs themselvesNone %&9ghcMaps Ids to their stack depth. This allows us to avoid having to mess with it after each push/pop.ghcsee Note [Generating code for top-level string literal bindings]ghcBuilds a bitmap for a stack layout with a nonpointer prefix followed by some number of arguments.ghcPush an atom for constructor (i.e., PACK instruction) onto the stack. This is slightly different to pushAtom due to the fact that we allow packing constructor fields. See also  mkConAppCode and  pushPadding.ghc/Indicate if the calling convention is supportedghcLet szsw be the sizes in bytes of some items pushed onto the stack, which has initial depth original_depth. Return the values which the stack environment should map these items to.ghc'original expression; for debugging onlyghcarityghc bitmap sizeghcbitmapghcTrue  =* is a return point, rather than a functionghc9The number of nonpointer words that prefix the arguments.ghcThe stack layout of the arguments, where each offset is relative to the bottom of the stack space they occupy. Their offsets must be word-aligned, and the list must be sorted in order of ascending offset (i.e. bottom to top).ooNoneghcfilename of executableghcextra objects to embed, maybeNoneghc7Some platforms require that we explicitly link against libm if any math-y things are used (which we assume to include all programs). See #14022.NoneghcLinking a static lib will not really link anything. It will merely produce a static archive of all dependent static libraries. The resulting library will still need to be linked with any remaining link flags.None%&|ghcProduce a fingerprint of a DynFlags> value. We only base the finger print on important fields in DynFlags= so that the recompilation checker can use this fingerprint.NB: The   parameter is the  3 recorded by the *interface* file, not the actual   according to our w.NoneNone )*ghcGiven: * an initial mapping from info tables to possible source locations, * initial ּ , * a ,#map every info table listed in the >s of the group to their possible source locations and update ּ for skipped stack info tables (in case both -finfo-table-map and -fno-info-table-map-with-stack were given). See: Note [Stacktraces from Info Table Provenance Entries (IPE based stack unwinding)]Note: While it would be cleaner if we could keep the recursion and accumulation internal to this function, this cannot be done without separately traversing stream of  in . The initial implementation of this logic did such a thing, and code generation performance suffered considerably as a result (see #23103).ghcSee Note [Stacktraces from Info Table Provenance Entries (IPE based stack unwinding)]ghcSee Note [Stacktraces from Info Table Provenance Entries (IPE based stack unwinding)]None;ghc4Initialize STG pretty-printing options from DynFlagsNoneghc%Extracts the flags needed for parsingNoneNoneNone {ghc*s that should be treated as being in scopeghcLinting the result of this passghcTarget platformghcDiagnostics optsghcAllow  makeStatic to occur anywhere.ghcAllow  makeStatic calls at the top-level only.ghc Reject any  makeStatic occurrence.ghcSee Note [Linting linearity]ghc,See Note [Linting type synonym applications]ghcSee Note [Checking StaticPtrs]ghcTarget platformghcTarget platformghcConfiguration for boilerplate operations at the end of a compilation pass producing Core.ghc/Whether we should lint the result of this pass.ghcWhether core bindings should be dumped with the size of what they are binding (i.e. the size of the RHS of the binding).ghc Type-check a Y!. See Note [Core Lint guarantee].ghc1Checks the RHS of bindings. It only differs from 8 in that it doesn't reject occurrences of the function  makeStatic( when they appear at the top level and 'lf_check_static_ptrs == AllowAtTopLevel, and for join points, it skips the outer lambdas that take arguments to the join point.See Note [Checking StaticPtrs].ghc9Lint the RHS of a join point with expected join arity of n (see Note [Join points] in GHC.Core).ghcLint an expression cast through the given coercion, returning the type resulting from the cast.ghcThis function checks that we are able to perform eta expansion for functions with no binding, in order to satisfy invariant I3 from Note [Representation polymorphism invariants] in GHC.Core.ghc'Implements the case rules for linearityghclintValApp arg fun_ty arg_ty lints an application of fun arg where  fun :: fun_ty and  arg :: arg_ty), returning the type of the application.ghcCheck to make sure that an AxInstCo is internally consistent. Returns the conflicting branch, if it exists See Note [Conflict checking with AxiomInstCo]ghcThis checks whether a pass correctly looks through debug annotations ( SourceNote). This works a bit different from other consistency checks: We check this by running the given task twice, noting all differences between the results.ghcRun the given pass without annotations. This means that we both set the debugLevel setting to 0 in the environment as well as all annotations from incoming modules.ghcIf L!, display linter warnings. If I, ignore linter warnings.ghc The source of the linted programghc"The linted program, pretty-printedghcTrue  = is a compulsory unfoldingghc6the function (head of the application) we are checkingghc the arguments to the applicationghc0the instantiated type of the overall applicationghcThe source of the linted axiomsghc Action to runghc>What sort of casted thing this is ("expression" or "type").ghc:What sort of coercion is being used ("type" or "kind").ghcThe thing being casted.,,None  None ghc Stop[e] = eghcDescribes how the  will evaluate the hole as a W. This can be more insightful than the limited syntactic context that  provides, because the # constructor might carry a useful W.. For example, when simplifying the argument e in `f e` and f has the demand signature ` MP(S,A)?`, this function will give you back `P(S,A)` when simplifying e.PRECONDITION: Don't call with . We haven't thoroughly thought about what to do then and no call sites so far seem to care.ghc Type of the holeghcTells if there is something interesting about the syntactic context, and hence the inliner should be a bit keener (see interestingCallContext) Specifically: This is an argument of a function that has RULES Inlining the call might allow the rule to fire Never ValAppCxt (use ApplyToVal instead) or CaseCtxt (use Select instead)ghcThe evaluation context of e. Tells how e is evaluated. This fuels eta-expansion or eta-reduction without looking at lambda bodies, for example.See Note [Eta reduction based on evaluation context] The evaluation context for other SimplConts can be reconstructed with None ;ghcPush a TickIt context outwards past applications and cases, as long as this is a non-scoping tick, to let case and application optimisations apply.ghc.A "friendly name" to build the new binder fromNone~ghcConfiguration record for #. The values of this datatype are only( driven by the demands of that function.ghcConfiguration record for #. The values of this datatype are only( driven by the demands of that function.None[ghcThe core-to-core simplifier.ghc'A description of the plugin pass itselfNonemghc Type-check a Y!. See Note [Core Lint guarantee].None)*ghcThe current collection of docs that Template Haskell has built up via putDoc.ghcThis is a mirror of Template Haskell's DocLoc, but the TH names are resolved to GHC names.ghc$A plugin for controlling defaulting.ghc9Clean up after the plugin, when exiting the type-checker.ghcDefault some typesghc.Initialize plugin, when entering type-checker.ghc emptyUFM 4 if your plugin does not provide this functionality.ghcSolve some constraints.This function will be invoked at two points in the constraint solving process: once to simplify Given constraints, and once to solve Wanted constraints. In the first case (and only in the first case), no Wanted constraints will be passed to the plugin.The plugin can either return a contradiction, or specify that it has solved some constraints (with evidence), and possibly emit additional constraints. These returned constraints must be Givens in the first case, and Wanteds in the second.Use & \ _ _ _ _ -> pure $ TcPluginOk [] [] 5 if your plugin does not provide this functionality.ghc.Initialize plugin, when entering type-checker.ghc5 is the monad in which type-checking plugins operate.ghcFor rewriting type family applications, a type-checking plugin provides a function of this type for each type family .The function is provided with the current set of Given constraints, together with the arguments to the type family. The type family application will always be fully saturated.ghcThe solve function of a type-checking plugin takes in Given and Wanted constraints, and should return a  indicating which Wanted constraints it could solve, or whether any are insoluble.ghc describes the top-level of the module at the point at which the typechecker is finished work. It is this structure that is handed on to the desugarer For state that needs to be updated during the typechecking phase and returned at end, use a  (= ).ghc2See Note [Generating fresh names for FFI wrappers]ghc,Tracking indices for cost centre annotationsghcWanted constraints of static forms. See Note [Constraints in static forms].ghc%The RealSrcSpan this module came fromghc8A list of user-defined plugins for hole fit suggestions.ghc;A list of user-defined plugins for type defaulting plugins.ghcA collection of all the user-defined type-checking plugins for rewriting type family applications, collated by their type family s.ghcA list of user-defined type-checking plugins for constraint solving.ghcUnreported reasons why tcg_safe_infer is False. INVARIANT: If this Messages is non-empty, then tcg_safe_infer is False. It may be that tcg_safe_infer is False but this is empty, if no reasons are supplied (#19714), or if those reasons have already been reported by GHC.Driver.Main.markUnsafeInferghcHas the typechecker inferred this module as -XSafe (Safe Haskell)? See Note [Safe Haskell Overlapping Instances Implementation], although this is used for more than just that failure case.ghcThe Name of the main function, if this module is the main module.ghc5Whether this module has a corresponding hi-boot fileghcTrue if any part of the prog uses hpc instrumentation. NB. BangPattern is to fix a leak, see #15111ghcMaybe Haddock header docsghc#Docs added in Template Haskell via putDoc.ghcTemplate Haskell stateghc,Core plugins added by Template Haskell code.ghc#Template Haskell module finalizers.+They can use particular local environments.ghc>Exact names bound in top-level declarations in tcg_th_topdeclsghcForeign files emitted from TH.ghc'Top-level declarations from addTopDeclsghc"dependencies from addDependentFileghcRenamed decls, maybe. Nothing! <=> Don't retain renamed decls.ghcThe requirements we merged with; we always have to recompile if any of these changed.ghc&Allows us to choose unique DFun names.ghcThe set of runtime dependencies required by this module See Note [Object File Dependencies]ghcTrue( <=> A Template Haskell splice was used.2Splices disable recompilation avoidance (see #481)ghcTrue" <=> Template Haskell syntax used.We need this so that we can generate a dependency on the Template Haskell package, because the desugarer is going to emit loads of references to TH symbols. The reference is implicit rather than explicit, so we have to zap a mutable variable.ghcINVARIANT: all these GREs were imported; that is, they all have a non-empty gre_imp field.ghcInformation about what was imported from where, including things bound in this module. Also store Safe Haskell info here about transitive trusted package requirements.There are not many uses of this field, so you can grep for all them.The ImportAvails records information about the following things: 6All of the modules you directly imported (tcRnImports)The orphans (only!) of all imported modules in a GHCi session (runTcInteractive)(The module that instantiated a signature%Each of the signatures that merged inIt is used in the following ways: - imp_orphs is used to determine what orphan modules should be visible in the context (tcVisibleOrphanMods) - imp_finsts is used to determine what family instances should be visible (tcExtendLocalFamInstEnv) - To resolve the meaning of the export list of a module (tcRnExports) - imp_mods is used to compute usage info (mkIfaceTc, deSugar) - imp_trust_own_pkg is used for Safe Haskell in interfaces (mkIfaceTc, as well as in GHC.Driver.Main) - To create the Dependencies field in interface (mkDependencies)ghcWhat is exportedghcAnd for annotationsghcDitto for family instances NB. BangPattern is to fix a leak, see #15111ghcInstance envt for all  home-package modules; Includes the dfuns in tcg_insts NB. BangPattern is to fix a leak, see #15111ghcGlobal type env for the module we are compiling now. All TyCons and Classes (for this module) end up in here right away, along with their derived constructors, selectors.(Ids defined in this module start in the local envt, though they move to the global envt during zonking)NB: for what "things in this module" means, see Note [The interactive package] in GHC.Runtime.ContextghcJust for things in this moduleghcTypes used for defaulting. Nothing => no default declghc$Top level envt; used during renamingghc4What kind of module (regular Haskell, hs-boot, hsig)ghcIf a signature, the backing module See also Note [Identity versus semantic module]ghcModule being compiledghc describes the result of running the frontend of a Haskell module. Currently one always gets a , since running the frontend involves typechecking a program. hs-sig merges are not handled here.This data type really should be in GHC.Driver.Env, but it needs to have a TcGblEnv which is only defined here.ghcA  carries the necessary context for performing rewrites (i.e. type family reductions and following filled-in metavariables) in the solver.ghc"See Note [Wanteds rewrite Wanteds]ghcAt what role are we rewriting?3See Note [Rewriter EqRels] in GHC.Tc.Solver.Rewriteghc"In which context are we rewriting?Type-checking plugins might want to use this location information when emitting new Wanted constraints when rewriting type family applications. This ensures that such Wanted constraints will, when unsolved, give rise to error messages with the correct source location.ghc0Historical "type-checking monad" (now it's just ).ghc+Historical "renaming monad" (now it's just ).ghcA  is a substitution on s that can be used to refine the identities of a hole while we are renaming interfaces (see GHC.Iface.Rename). Specifically, a  for ns_module_name A, defines a mapping from {A.T} (for some   T) to some arbitrary other ."The most intriguing thing about a (, however, is how it's constructed. A  is *implied* by the exported +s of the implementor of an interface: if an implementor of signature  exports M.T-, you implicitly define a substitution from {H.T} to M.T. So a  is computed from the list of +s that are exported by the implementation of a module, or successively merged together by the export lists of signatures which are joining together.It's not the most obvious way to go about doing this, but it does seem to work!NB: Can't boot this and put it in NameShape because then we start pulling in too many DynFlags things.ghc,The plugin has not found any contradictions,The first field is for constraints that were solved. The second field contains new work, that should be processed by the constraint solver.ghcThe plugin found a contradiction. The returned constraints are removed from the inert set, and recorded as insoluble.7The returned list of constraints should never be empty.ghcGet target platformghcUnion two ImportAvailsThis function is a key part of Import handling, basically for each import we create a separate ImportAvails structure and then union them all together with this function.ghc;This function provides an escape for direct access to the TcM: monad. It should not be used lightly, and the provided  API should be favoured instead.ghc Check the  for consistency. Currently, only checks axioms, but should check other aspects, too.ghcRewriter environmentghcGivensghctype family argumentsghcGivensghcWantedsKKˍKKKKKKKKKKфҐԐӐאؐڐސِݐߐېܐ ֐Րzzzzzzzzzzz אؐߐސݐܐېڐِфzzzzzzzzzzz֐KKKKKKKKKKKKՐҐԐӐˍNone %&-ghc*Setup the initial typechecking environmentghcRun a & action in the context of an existing GblEnv.ghcDo it flag is trueghcUpdate the external package state. Returns the second result of the modifier function.This is an atomic operation and forces evaluation of the modified EPS in order to avoid space leaks.ghc"Update the external package state.This is an atomic operation and forces evaluation of the modified EPS in order to avoid space leaks.ghc"A convenient wrapper for taking a MaybeErr SDoc a. and throwing an exception if it is an error.ghc3Trace when a certain flag is enabled. This is like  but accepts a string as a label and formats the trace message uniformly.ghcDump if the given  is set.ghc&Unconditionally dump some trace outputCertain tests (T3017, Roles3, T12763 etc.) expect part of the output generated by `-ddump-types` to be in   style. However, generally we want all other debugging output to use   style. We   style if  useUserStyle is True.ghcAdd current location if -dppr-debug (otherwise the full location is usually way too much)ghc*Like logInfoTcRn, but for user consumptionghc?Mark the inner computation as being done inside generated code.+See Note [Error contexts in generated code]ghcAdd a fixed message to the error context. This message should not do any tidying.ghcAdd a message to the error context. This message may do tidying.ghcAdd a fixed landmark message to the error context. A landmark message is always sure to be reported, even if there is a lot of context. It also doesn't count toward the maximum number of contexts reported.ghc Variant of 1 that allows for monadic operations and tidying.ghctcCollectingUsage thing_inside runs  thing_inside and returns the usage information which was collected as part of the execution of  thing_inside . Careful: tcCollectingUsage thing_inside itself does not report any usage information, it's up to the caller to incorporate the returned usage information into the larger context appropriately.ghc tcScalingUsage mult thing_inside runs  thing_inside* and scales all the usage information by mult.ghcDrop elements of the input that fail, so the result list can be shorter than the argument listghcApply the function to all elements on the input list If all succeed, return the list of results Otherwise fail, propagating all errorsghc2The accumulator is not updated if the action failsghc(Display a warning if a condition is met.ghc(Display a warning if a condition is met.ghc+Display a diagnostic if a condition is met.ghc,Display a diagnostic in the current context.ghc(Display a diagnostic in a given context.ghcA variation of $ that takes a function to produce a  TcRnDsMessage5 given some additional context about the diagnostic.ghcDisplay a diagnostic for the current source location, taken from the  monad.ghc1Display a diagnostic for a given source location.ghcDisplay a diagnostic, with an optional flag, for the current source location.ghcCreates an EvBindsVar incapable of holding any bindings. It still tracks covar usages (see comments on ebv_tcvs in GHC.Tc.Types.Evidence!), thus must be made monadicallyghc5Throw out any constraints emitted by the thing_insideghcThe name says it all. The returned TcLevel is the *inner* TcLevel.ghcAdds the given modFinalizers to the global environment and set them to use the current local environment.ghcMark that safe inference has failed See Note [Safe Haskell Overlapping Instances Implementation] although this is used for more than just that failure case.ghc.Figure out the final correct safe haskell modeghc9Switch instances to safe instances if we're in Safe mode.ghcRun an = (top-level interface monad) computation inside an existing ; (typecheck-renaming monad) computation by initializing an  based on .ghc? can be used when there's no chance that the action will call typecheckIface% when inside a module loop and hence  tcIfaceGlobal.ghc'This is used when we are doing to call typecheckModule on an ModIface, if it's part of a loop with some other modules then we need to use their IORef TypeEnv vars when typechecking but crucially not our own.ghc.Initialize interface typechecking, but with a ' to apply when typechecking top-level  s (see lookupIfaceTop)ghcRun thing_inside in an interleaved thread. It shares everything with the parent thread, so this is DANGEROUS.+It throws an error if the computation failsIt's used for lazily type-checking interface signatures, which is pretty benign.&See Note [Masking exceptions in forkM]ghc [a]2 would be rejected to the inferred type variable {a}, but forall a. [a] -> [a] would be accepted. See +Note [Unobservably inferred type variables].ghc"Examines a non-outermost type for foralls or contexts, which are assumed to be nested. For example, in the following declaration: ,instance forall a. forall b. C (Either a b) The outermost forall a is fine, but the nested forall b is not. We invoke  on the type forall b. C (Either a b) to catch the nested forall' and create a suitable error message.  returns K err_msg if such a forall# or context is found, and returns Nothing otherwise./This is currently used in the following places:In GADT constructor types (in  rnConDecl ). See Note [GADT abstract syntax] (Wrinkle: No nested foralls or contexts) in  GHC.Hs.Type."In instance declaration types (in  rnClsIntDecl and rnSrcDerivDecl in GHC.Rename.Module and  renameSig in GHC.Rename.Bind ). See 6Note [No nested foralls or contexts in instance types] in  GHC.Hs.Type.ghcA common way to invoke .ghcChecks to see if we need to warn for -Wunused-record-wildcards or -Wredundant-record-wildcardsghcProduce a warning when the `..`! pattern binds no new variables. 0 data P = P { x :: Int } foo (P{x, ..}) = x The `..`$ here doesn't bind any variables as x is already bound.ghc/Produce a warning when no variables bound by a `..` pattern are used. . data P = P { x :: Int } foo (P{..}) = () The `..` pattern binds x6 but it is not used in the RHS so we issue a warning.ghc$Should we report the fact that this  is unused? The   may differ from  due to DuplicateRecordFields.ghc?Ensure that a boxed or unboxed tuple has arity no larger than .ghc8Ensure that a constraint tuple has arity no larger than .--None nghcCalled from the typechecker ( GHC.Tc.Errors") when we find an unbound variableghcWhen the name is in scope as field whose selector has been suppressed by NoFieldSelectors, display a helpful message explaining this.ghcGenerate errors and helpful suggestions if a qualified name Mod.foo is not in scope.ghc*to find out whether -XDataKinds is enabledghc$What kind of name are we looking forghcName space of the original nameghc/Name space of a name that might have been meant"00"00Noneghc Look up the  for a given   and   . Consider alternatively using  if you're in the  monad and   is simply that of the  you are typechecking.ghcSet the   of a .ghc6Look up a top-level name from the current Iface moduleNone#ghcSubstitution on {A.T}&. We enforce the invariant that the & of keys of this map have  hole (meaning that if we have a hole substitution, the keys of the map are never affected.) Alternatively, this is isomorphic to Map ( ,  ) .ghcCreate an empty  (i.e., the renaming that would occur with an implementing module with no exports) for a specific hole mod_name.ghc Create a 7 corresponding to an implementing module for the hole mod_name that exports a list of +s.ghcGiven an existing , merge it with a list of +s with Backpack style mix-in linking. This is used solely when merging signatures together: we successively merge the exports of each signature until we have the final, full exports of the merged signature.What makes this operation nontrivial is what we are supposed to do when we want to merge in an export for M.T when we already have an existing export {H.T}. What should happen in this case is that {H.T} should be unified with M.T: we've determined a more *precise* identity for the export at   T.Note that we don't do unrestricted unification: only name holes from ns_mod_name ns are flexible. This is because we have a much more restricted notion of shaping than in Backpack'14: we do shaping *as* we do type-checking. Thus, once we shape a signature, its exports are *final* and we're not allowed to refine them further,ghc%The export list associated with this  (i.e., what the exports of an implementing module which induces this  would be.)ghcGiven a !, substitute it according to the ! implied substitution, i.e. map {A.T} to M.T&, if the implementing module exports M.T.ghcLike , but returns Nothing if no substitution works.ghcThe   of any s a  has action over.ghcSubstitute names in a .ghcSubstitute names in an +. This has special behavior for type constructors, where it is sufficient to substitute the + to induce a substitution on +.ghc Merges to + lists together, assuming the +s have already been unified ().ghcUnify two lists of +"s, given an existing substitution subst, with only name holes from flexi( unifiable (all other name holes rigid.)ghc Unify two +"s, given an existing substitution subst, with only name holes from flexi( unifiable (all other name holes rigid.)ghc Unify two "s, given an existing substitution subst, with only name holes from flexi( unifiable (all other name holes rigid.)ghc Unify a name h which &4 with another name, given an existing substitution subst, with only name holes from flexi) unifiable (all other name holes rigid.)  NoneghcMonadic because it makes a Name for the coercion TyCon We pass the Name of the parent TyCon, as well as the TyCon itself, because the latter is part of a knot, whereas the former is not.ghc Make the  for this ghc Univ and reqghc Ex and provghcArgument typesghc Result typeghc,Field labels for a record pattern synonymNone'ghcEnvironment for  monads.ghcWhat we have is a generalized ModIface, which corresponds to a module that looks like p[A=]:B. We need a *specific* ModIface, e.g. p[A=q():A]:B (or maybe even p[A=]:B) which we load up (either to merge it, or to just use during typechecking).Suppose we have:p[A=]:M ==> p[A=q():A]:MSubstitute all occurrences of with q():A (renameHoleModule). Then, for any Name of form {A.T}, replace the Name with the Name according to the exports of the implementing module. This works even for p[A=]:M, since we just read in the exports of B.hi, which is assumed to be ready now. This function takes an optional , which can be used to further refine the identities in this interface: suppose we read a declaration for {H.T} but we actually know that this should be Foo.T; then we'll also rename this (this is used when loading an interface to merge it into a requirement.)ghcRename just the exports of a ?. Useful when we're doing shaping prior to signature merging.ghcRun a computation in the  monad.ghcThe key function. This gets called on every Name embedded inside a ModIface. Our job is to take a Name from some generalized unit ID p[A=, B=], and change it to the correct name for a (partially) instantiated unit ID, e.g. p[A=q[]:A, B=].%There are two important things to do:If a hole is substituted with a real module implementation, we need to look at that actual implementation to determine what the true identity of this name should be. We'll do this by loading that module's interface and looking at the mi_exports.However, there is one special exception: when we are loading the interface of a requirement. In this case, we may not have the "implementing" interface, because we are reading this interface precisely to "merge it in".External case: p[A=]:A (and thisUnitId is something else) We are loading this in order to determine B.hi! So don't load B.hi to find the exports.Local case: p[A=]:A (and thisUnitId is p[A=]) This should not happen, because the rename is not necessary in this case, but if it does we shouldn't load A.hi!Compare me with  tcIfaceGlobal!ghcRename an implicit name, e.g., a DFun or coercion axiom. Here is where we ensure that DFuns have the correct module as described in Note [rnIfaceNeverExported].ghc Rename an m?, with special handling for an associated dictionary function.None 'None*tghc7A HoleFitPlugin is a pair of candidate and fit plugins.ghcHoleFitPluginR adds a TcRef to hole fit plugins so that plugins can track internal state. Note the existential quantification, ensuring that the state cannot be modified from outside the plugin.ghc7Cleanup of state, guaranteed to be called even on errorghc'The function defining the plugin itselfghc0Initializes the TcRef to be passed to the pluginghc=A plugin for modifying hole fits *after* they've been found.ghcA plugin for modifying the candidate hole fits *before* they're checked.  None*None (8}ghcExtract docs from renamer output. This is monadic since we need to be able to read documentation added from Template Haskell's putDoc, which is stored in .ghcIf we have an explicit export list, we extract the documentation structure from that. Otherwise we use the renamed exports and declarations.ghcFigure out the documentation structure by correlating the module exports with the located declarations.ghcExtract named documentation chunks from the renamed declarations.If there is no explicit export list, we simply return an empty map since there would be no way to link to a named chunk.ghcCreate decl and arg doc-maps by looping through the declarations. For each declaration, find its names, its subordinates, and its doc strings.ghcThe "OccEnv Name" is the default method environment for this module Ultimately, the a special "defaultMethodOcc" name is used for the signatures on bindings for default methods. Unfortunately, this name isn't generated until typechecking, so it is not in the renamed AST. We have to look it up from the $ parameter constructed from the typechecked AST. See also Note [default method Name] in GHC.Iface.RecompghcGet all subordinate declarations inside a declaration, and their docs. A subordinate declaration is something like the associate type or data family of a type class.ghcExtract constructor argument docs from inside constructor decls.ghcAll the sub declarations of a class (that we handle), ordered by source location, with documentation attached if it exists.ghc;Extract function argument docs from inside top-level decls.ghc1Extract function argument docs from inside types.ghc1Extract function argument docs from inside types.ghcThe top-level declarations of a module that we care about, ordered by source location, with documentation attached if it exists.ghcTake all declarations except pragmas, infix decls, rules from an U.ghc7Collect docs and attach them to the right declarations.;A declaration may have multiple doc strings attached to it.This is an example.ghc7Filter out declarations that we don't handle in HaddockghcGo through all class declarations and filter their sub-declarationsghc%Was this signature given by the user?ghcTake a field of declarations from a data structure and create HsDecls using the given constructorghcExtracts out individual maps of documentation added via Template Haskell's putDoc.ghcUnions together two  ArgDocMaps (or ArgMaps in haddock-api), such that two maps with values for the same key merge the inner map as well. Left biased so unionArgMaps a b prefers a over b.ghc  Module headerDocs on top level declarationsDocs on argumentsghcThe current moduleghcImportsghcExplicit export listghc All exportsghcDefault MethodsghcThe current moduleghcExplicit export listghcThe default method environmentghcAll exports, unorderedghc#Do we have an explicit export list?ghcDefault method environment for this module. See Note [default method Name] in GHC.Iface.RecompghcThe default method environmentNone I%GghcG is the compiler plugin data type. Try to avoid constructing one of these directly, and just modify some fields of  instead: this is to try and preserve source-code compatibility when we add fields to this.Nonetheless, this API is preliminary and highly likely to change in the future.ghcA static plugin with its arguments. For registering compiled-in plugins through the GHC API.ghc>A plugin with its arguments. The result of loading the plugin.ghcThe object files required by the loaded plugins See Note [Plugin dependencies]ghcPlugins dynamically loaded after processing arguments. What will be loaded here is directed by DynFlags.pluginModNames. Arguments are loaded from DynFlags.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 .ghcExternal plugins loaded directly from libraries without loading module interfaces.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 addPluginModuleName instead.ghc9the actual plugin together with its commandline argumentsghcExternal plugin loaded directly from a library without loading module interfacesghc Module nameghcUnitIdghcPlugin with its argumentsghc the module containing the pluginghc9the actual plugin together with its commandline argumentsghc%command line arguments for the pluginghcthe actual callable pluginghc>Modify an interface that have been loaded. This is called by GHC.Iface.Load when an interface is successfully loaded. Not applied to the loading of the plugin interface. Tools that rely on information from modules other than the currently compiled one should implement this function.ghc4Modify the TH splice or quasiqoute before it is run.ghcModify the module when it is type checked. This is called at the very end of typechecking.ghcModify each group after it is renamed. This is called after each U has been renamed.ghc8Modify the module when it is parsed. This is called by GHC.Driver.Main when the parser has produced no or only non-fatal errors. Compilation will fail if the messages produced by this function contain any errors.ghc3Specify how the plugin should affect recompilation. ghcAn optional plugin to update , right after plugin loading. This can be used to register hooks or tweak any field of DynFlags' before doing actual work on a module.ghcAn optional plugin to handle hole fits, which may re-order or change the list of valid hole fits and refinement hole fits.ghcAn optional defaulting plugin, which may specify the additional type-defaulting rules.ghcAn optional typechecker plugin, which may modify the behaviour of the constraint solver.ghcModify the Core pipeline that will be used for compilation. This is called as the Core pipeline is built for every module being compiled, and plugins get the opportunity to modify the pipeline in a nondeterministic order.ghc2Result of running the parser and the parser pluginghcWarnings and errors from parser, potentially modified by a pluginghc/Parsed module, potentially modified by a pluginghc*Errors and warnings produced by the parserghcCommand line options gathered from the -PModule.Name:stuff syntax are given to you as this typeghcDefault plugin: does nothing at all, except for marking that safe inference has failed unless -fplugin-trustworthy is passed. For compatibility reason you should base all your plugin definitions on this default value.ghcA renamer plugin which mades the renamed source available in a typechecker plugin.ghc9Perform an operation by using all of the plugins in turn.ghcPerform a constant operation by using all of the plugins in turn.ghcLoad external pluginsHGGHNone )*Kghc8A wrapper around the interpretation function for phases.None MghcHooks can be used by GHC API clients to replace parts of the compiler pipeline. If a hook is not installed, GHC uses the default built-in behaviourghcActual type: Maybe ([LForeignDecl GhcTc] -> DsM (ForeignStubs, OrdList (Id, CoreExpr)))None Q ghcDesugaring monad. See also TcM.ghc>Local state of the desugarer, extended as we lexically descendghcSee Note [Desugaring non-canonical evidence]: this field collects all un-specialisable evidence variables in scope.ghc(See Note [Long-distance information] in GHC.HsToCore.Pmc. The set of reaching values Nablas is augmented as we walk inwards, refined through each pattern match in turnghc%To put in pattern-matching error msgsghcTemplate Haskell bindingsghcGlobal read-only context and state of the desugarer. The statefulness is implemented through s.ghc2See Note [Generating fresh names for FFI wrappers]NoneQNoneR0ghc#The source of the linted expressionNoneR_NoneUghcThis list is used to ensure that when you say "Prelude.map" in your source code, or in an interface file, you get a Name with the correct known key (See Note [Known-key names] in GHC.Builtin.Names)ghc.Check the known-key names list of consistency.ghcGiven a  lookup its associated ) if it corresponds to a known-key thing.ghcIs a  known-key?ghcMaps s to known-key names. The type is UniqFM Name Name to denote that the s used in the domain are s associated with *s (as opposed to some other namespace of s).ghcGiven a  lookup any associated arbitrary SDoc's to be displayed by GHCi's ':info' command. ll llNoneUNone VghcGenerate Cmm code for a tick. Depending on the type of Tickish, this will either generate actual Cmm instrumentation code, or simply pass on the annotation as a  CmmTickish.ԼԼNoneW"None X@ghcGenerate a source note spanning from "a" to "b" (inclusive), then proceed with parsing. This allows debugging tools to reason about locations in Cmm code.ghcaddressghcvalueNone1XNone"79:;ly3ghc's get converted into 's before being written into .hie files. See  and  fromHieName6 for logic on how to convert between these two types.ghcScope of a type variable.%This warrants a data type apart from 6 because of complexities introduced by features like -XScopedTypeVariables and -XInstanceSigs. For example, consider: "foo, bar, baz :: forall a. a -> a Here a' is in scope in all the definitions of foo, bar, and baz, so we need a list of scopes to keep track of this. Furthermore, this list cannot be computed until we resolve the binding sites of foo, bar, and baz.Consequently, a starts with an  [foo, bar, baz] Nothing# which later gets resolved into a .ghc4Unresolved scopes should never show up in the final .hie fileghctype or data familyghc type synonymghcdata declarationghcconstructor declarationghcpattern synonymghcclass declarationghcinstance declarationghcTypes of imports and exportsghcEq/Ord instances compare on the converted HieName, as non-exported names may have different uniques after a roundtripghcbound by a pattern matchghcbound by a type signatureghcbound by a hswrapperghcbound by an implicit variableghc%Bound by some instance of given classghcA direct let bindingghc0Different contexts under which identifiers existghcregular variableghc import/exportghc Value bindingghcPattern bindingThis case is tricky because the bound identifier can be used in two distinct scopes. Consider the following example (with -XViewPatterns) 'do (b, a, (a -> True)) <- bar foo a The identifier a% has two scopes: in the view pattern  (a -> True) and in the rest of the do -block in foo a.ghc Declarationghc Type variableghc Record fieldghc/Constraint/Dictionary evidence variable bindingghcUsage of evidence variableghc,Information associated with every identifierWe need to include types with identifiers because sometimes multiple identifiers occur in the same span(Overloaded Record Fields and so on)ghc'The information stored in one AST node.The type parameter exists to provide flexibility in representation of types (see Note [Efficient serialization of redundant type info]).ghc%All the identifiers and their detailsghc'The Haskell types of this node, if any.ghc AnnotationsghcA node annotationghcname of the AST node Typeghc name of the AST node constructorghcSource of node infoghcNodeInfos grouped by sourceghc/Mapping from filepaths to the corresponding ASTghcA list of type arguments along with their respective visibilities (ie. is this an argument that would return L for isVisibleForAllTyFlag?).ghc(Roughly isomorphic to the original core Type.ghcA flattened version of Type.9See Note [Efficient serialization of redundant type info]ghctype with constraint: t1 => t2 (see  IfaceDFunTy)ghcGHC builds up a wealth of information about Haskell source as it compiles it. .hie files are a way of persisting some of this information to disk so that external tools that need to work with haskell source don't need to parse, typecheck, and rename all over again. These files contain:a simplified AST3nodes are annotated with source positions and types0identifiers are annotated with scope information+the raw bytes of the initial Haskell source#Besides saving compilation cycles, .hie; files also offer a more stable interface than the GHC API.ghc'Raw bytes of the initial Haskell sourceghc"The names that this module exportsghc$Type-annotated abstract syntax treesghcTypes referenced in the .9See Note [Efficient serialization of redundant type info]ghcThe module this HIE file is forghc Initial Haskell source file pathghcCurrent version of .hie filesghc3names of the definitions over which the scope spansghcthe location of the instance/class declaration for the case where the type variable is declared in a method type signatureghc,whether or not the binding is in an instanceghc#scope over which the value is boundghcspan of entire bindingghcscope in the pattern9 (the variable bound can be used further in the pattern)ghc%rest of the scope outside the patternghcspan of entire bindingghctype of declarationghcspan of entire bindingghc!how did this bind come into beingghc#scope over which the value is boundghcspan of the binding siteNone "(9vLghc>One must contain the other. Leaf nodes cannot contain anythingghc/Insert an AST in a sorted list of disjoint AstsghcMerge two nodes together.,Precondition and postcondition: elements in  are ordered.ghcMerge two sorted, disjoint lists of ASTs, combining when necessary.1In the absence of position-altering pragmas (ex: # line "file.hs" 3), different nodes in an AST tree should either have disjoint spans (in which case you can say for sure which one comes first) or one span should be completely contained in the other (in which case the contained span corresponds to some child node).>However, since Haskell does have position-altering pragmas it is possible for spans to be overlapping. Here is an example of a source file in which foozball and quuuuuux have overlapping spans: module Baz where # line 3 "Baz.hs" foozball :: Int foozball = 0 # line 3 "Baz.hs" bar, quuuuuux :: Int bar = 1 quuuuuux = 2 8In these cases, we just do our best to produce sensible 's. The blame should be laid at the feet of whoever wrote the line pragmas in the first place (usually the C preprocessor...).ghc*combines and sorts ASTs using a merge sortghchelps fill in  (with )ghc)return an empty list if this is unhelpfulghchelps fill in  (with )ghc)return an empty list if this is unhelpfulghchelps fill in  (with )ghc)return an empty list if this is unhelpfulghctype to associate with the nodeghchelps fill in  (with )ghc)return an empty list if this is unhelpfulghctype to associate with the nodeNone"xghcLook for any identifiers which occur outside of their supposed scopes. Returns a list of error messages.  Nonezghc7The header for HIE files - Capital ASCII letters "HIE".ghcWrite a  to the given ., with a proper header and symbol tables for s and sghcRead a  from a . Can use an existing . Allows you to specify which versions of hieFile to attempt to read. M* case returns the failing header versions.ghcRead a  from a . Can use an existing .NoneghcRead an interface file header, checking the magic number, version, and way. Returns the hash of the source file and a BinHandle which points at the start of the rest of the interface file data.ghcRead an interface file.ghcThis performs a get action after reading the dictionary and symbol table. It is necessary to run this before trying to deserialise any Names or FastStrings.ghc?Setup a BinHandle to read something written using putWithTablesReading names has the side effect of adding them into the given NameCache.ghcWrite an interface fileghc(Put a piece of data with an initialised  field. This is necessary if you want to serialise Names or FastStrings. It also writes a symbol table and the dictionary. This segment should be read using .ghcWrite name/symbol tables =setup the given BinHandle with Name/FastString table handlingwrite the following - FastString table pointer - Name table pointer - payload - Name table - FastString tableIt returns (number of names, number of FastStrings, payload write result)ghc:Initial ram buffer to allocate for writing interface filesNone (9ghc,B=]:B, although the free holes are A and B, B might not depend on A at all!If this is invoked on a signature, this does NOT include the signature itself; e.g. precise free module holes of p[A=,B=]:B never includes B.ghc>Check if we need to try the dynamic interface for -dynamic-tooghcWrite interface fileghc readIface tries just the one file.Failed err  => file not found, or unreadable, or illegible Succeeded iface  = successfully found and parsedghc'Read binary interface, and print it outghcShow a ModIface but don't display details; suitable for ModIfaces stored in the EPT.ghcShow a ModIface+The UnitState is used to pretty-print unitsghc/Reason for loading the iface (used for tracing)ghc=The unique identifier of the on-disk module we're looking forghcThe *actual* module we're looking for. We use this to check the consistency of the requirements of the module we read out.ghc Looking for .hi-boot or .hi file None >ghcMake a name for the dict fun for an instance decl. It's an *external* name, like other top-level names, and hence must be made with newGlobalBinder.ghc mkWrapperName ref what nameBase7See Note [Generating fresh names for FFI wrappers] for ref 's purpose.^^^^^^^^None)*ghcZonking monad for a computation that zonks to Type, reading from and extending or modifying a .See Note [Zonking to Type].ghcZonking monad for a computation that zonks to Type, reading from a $ but not extending or modifying it.See Note [Zonking to Type].ghc4Confused by zonking? See Note [What is zonking?] in GHC.Tc.Zonk.Type.ghcIs a coercion hole filled in?ghcRetrieve the contents of a coercion hole. Panics if the hole is unfilledghc9Retrieve the contents of a coercion hole, if it is filledghcCheck whether any coercion hole in a RewriterSet is still unsolved. Does this by recursively looking through filled coercion holes until one is found that is not yet filled in, at which point this aborts.6ÛțƛɛǛśě›ʛNone ghc.Create a new Wanted constraint with the given .ghc.Create a new Wanted constraint with the given  +, and location information taken from the  environment.ghc-Create new Wanted constraints with the given  +, and location information taken from the  environment.ghcEmits a new Wanted. Deals with both equalities and non-equalities.ghcEmits a new equality constraintghcCreates a new EvVar and immediately emits it as a Wanted. No equality predicates here.ghc!Emit a new wanted expression holeghc Create a new  with as many sensible defaults for its fields as possible. Note that the , , and  fields do not have sensible defaults, so they are initialized with lazy thunks that will  if forced, so one should take care to initialize these fields after creation.This is monadic to look up the  , which is used to initialize , and to set the -Winaccessible-code flag. See Note [Avoid -Winaccessible-code when deriving] in GHC.Tc.TyCl.Instance.ghcPut a value in a coercion holeghcExtract a type out of an ExpType, if one exists. But one should always exist. Unless you're quite sure you know what you're doing.ghc,Same as readExpType, but for Scaled ExpTypesghc4Extract a type out of an ExpType. Otherwise, panics.ghcExtracts the expected type if there is one, or generates a new TauTv if there isn't.ghc?Infer a type using a fresh ExpType See also Note [ExpType] in GHC.Tc.Utils.TcMTypeUse  if you require the type to have a fixed runtime representation.ghcLike , except it ensures that the resulting type has a syntactically fixed RuntimeRep as per Note [Fixed RuntimeRep] in GHC.Tc.Utils.Concrete.ghcCreate a new metavariable, of the given kind, which can only be unified with a concrete type.Invariant: the kind must be concrete, as per Note [ConcreteTv]. This is checked with an assertion.ghc.Create a new flexi ty var with a specific nameghcCreate a tyvar that can be a lifted or unlifted type. Returns alpha :: TYPE kappa, where both alpha and kappa are freshghcExtract out the kind vars (in order) and type vars (in order) from a . The lists are guaranteed to be distinct. Keeping the lists separate is important only in the -XNoPolyKinds case.ghcGathers free variables to use as quantification candidates (in ). This might output the same var in both sets, if it's used in both a type and a kind. The variables to quantify must have a TcLevel strictly greater than the ambient level. (See Wrinkle in Note [Naughty quantification candidates]) See Note [CandidatesQTvs determinism and order] See Note [Dependent type variables]ghcLike , but over a list of types The variables to quantify must have a TcLevel strictly greater than the ambient level. (See Wrinkle in Note [Naughty quantification candidates])ghcLike , but consider every free variable to be dependent. This is appropriate when generalizing a *kind*, instead of a type. (That way, -XNoPolyKinds will default the variables to Type.)ghcInternal function to check whether the given type has a fixed  RuntimeRep.Use  to allow rewriting, or  to perform a syntactic check.ghcEnsure that the given type ty can unify with a concrete type, in the sense of Note [Concrete types].Returns a coercion co :: ty ~# conc_ty, where conc_ty is concrete.If the type is already syntactically concrete, this immediately returns a reflexive coercion. Otherwise, it creates a new concrete metavariable  concrete_tv# and emits an equality constraint ty ~# concrete_tv*, to be handled by the constraint solver.:Invariant: the kind of the supplied type must be concrete.We assume the provided type is already at the kind-level (this only matters for error messages).ghc'Ensure that the given type is concrete.This is an eager syntactic check, and never defers any work to the constraint solver.Invariant: the kind of the supplied type must be concrete. Invariant: the output type is equal to the input type, up to zonking.We assume the provided type is already at the kind-level (this only matters for error messages).ghcTry to turn the provided type into a concrete type, by ensuring unfilled metavariables are appropriately marked as concrete.Returns a zonked type which is "as concrete as possible", and a list of problems encountered when trying to make it concrete.INVARIANT: the returned type is equal to the input type, up to zonking. INVARIANT: if this function returns an empty list of NotConcreteReasons, then the returned type is concrete, in the sense of Note [Concrete types].ghcContext to be reported to the user if the type ends up not having a fixed  RuntimeRep.ghc-The type to check (we only look at its kind).ghc (co, ty') where  ty' :: ki', ki is concrete, and co :: ty ~# ty' . That is, ty' has a syntactically fixed RuntimeRep in the sense of Note [Fixed RuntimeRep].ghcContext to be reported to the user if the type does not have a syntactically fixed  RuntimeRep.ghc-The type to check (we only look at its kind).ghc!The check to perform on the kind.ghc#The context which required a fixed  RuntimeRep1, e.g. an application, a lambda abstraction, ...ghc The type ty4 to check (the check itself only looks at its kind).ghcReturns  (co, frr_ty) with co :: ty ~# frr_ty and frr_ty has a fixed  RuntimeRep.None %ghc Used when  is the wired-in name for a wired-in class method, so the caller knows its type for sure, which should be of form forall a. C a =>  is supposed to instantiate just the outer type variable and constraintghcGiven ty::forall k1 k2. k, instantiate all the invisible forall-binders returning ty kk1  kk2 :: k[kk1k1, kk2k1] Called only to instantiate kinds, in user-written type signaturesghcGiven a list of [], skolemize the type variables, returning a substitution mapping the original tyvars to the skolems, and the list of newly bound skolems.ghcGive fresh uniques to a bunch of TyVars, but they stay as TyVars, rather than becoming TcTyVars Used in , and ghcGive fresh uniques to a bunch of CoVars Used in "GHC.Tc.Instance.Family.newFamInst"ghcCheck that the result type of an expression has a fixed runtime representation.'Used only for arrow operations such as arr, first, etc.ghcwhy do we need this?ghcname of the methodghc)types with which to instantiate the classghc%How to instantiate the type variablesghcType to instantiateghc1Result (type vars, preds (incl equalities), rho)ghcType to instantiate it atghc(Standard name, user name)ghc(Standard name, suitable expression) USED ONLY FOR CmdTop (sigh) *** See Note [CmdSyntaxTable] in  GHC.Hs.Expr$$None %&P ghcWhat to do when encountering a type-family application while processing a type equality in the pure unifier.7See Note [Family applications in canonical constraints]ghcOptions describing how to deal with a type equality in the pure unifier. See ghc looks for just one function arrow, returning an uninstantiated sigma-type.Invariant: the returned argument type has a syntactically fixed RuntimeRep in the sense of Note [Fixed RuntimeRep] in GHC.Tc.Utils.Concrete.4See Note [Return arguments with a fixed RuntimeRep].ghcLike , but used when you have an "actual" type, for example in function application.INVARIANT: the returned argument types all have a syntactically fixed RuntimeRep in the sense of Note [Fixed RuntimeRep] in GHC.Tc.Utils.Concrete. See Note [Return arguments with a fixed RuntimeRep].ghcUse this function to split off arguments types when you have an "expected" type.*This function skolemises at each polytype.Invariant: this function only applies the provided function to a list of argument types which all have a syntactically fixed RuntimeRep in the sense of Note [Fixed RuntimeRep] in GHC.Tc.Utils.Concrete. See Note [Return arguments with a fixed RuntimeRep].ghcFill an ` with the given type.If !co = fillInferResult t1 infer_res, then co :: t1 ~# t2 , where t2 is the type stored in the ` field of  infer_res.0This function enforces the following invariants:%Level invariant. The stored type t2* is at the same level as given by the ` field. FRR invariant. Whenever the ` field is not Nothing, t2 is guaranteed to have a syntactically fixed RuntimeRep, in the sense of Note [Fixed RuntimeRep] in GHC.Tc.Utils.Concrete.ghc Variant of  that takes an ExpTypeghc-Breaks apart a function kind into its pieces.ghccheckTopShape checks (TYVAR-TV) Note [Unification preconditions]; returns True if these conditions are satisfied. But see the Note for other preconditions, too. ghc'If present, the thing that has type ty1ghc)See Note [Herald for matchExpectedFunTys]ghcThe thing with type TcSigmaTypeghcTotal number of value args in the call, and types of values args to which function has been applied already (reversed) (Both are used only for error messages)ghcType to analyse: a TcRhoTypeghc)See Note [Herald for matchExpectedFunTys]ghcthe thing with type TcSigmaTypeghcActualghcExpectedghcUsed when instantiatingghcUsed when skolemisingghcThe expression that has type actual (if known)ghc Actual typeghc Expected typeghcThe wrapper has type: spec_ty ~> expected_ty Just like tcTopSkolemise, but calls deeplySkolemise instead of topSkolemise See Note [Deep skolemisation]ghcThe wrapper has type: spec_ty ~> expected_ty See Note [Skolemisation] for the differences between tcSkolemiseScoped and tcTopSkolemiseghcThe wrapper has type: spec_ty ~> expected_ty See Note [Skolemisation] for the differences between tcSkolemiseScoped and tcTopSkolemiseghctype, only for errorsghcn: number of desired arrowsghcfun_kindghc-co :: fun_kind ~ (arg1 -> ... -> argn -> res)None %&ghc&A monad within which we will generate KindRep+s. Here we keep an environment containing KindReps which we've already generated so we can re-use them opportunistically.ghcMaps kinds to KindRep bindings. This binding may either be defined in some other module (in which case the Maybe (LHsExpr Id will be J) or a binding which we generated in the current module (in which case it will be K the RHS of the binding).ghc To construct TrName,s The various TyCon and DataCons of KindRepghcof TyConghcTarget platformghc A group of s in need of type-rep bindings.ghcBuild exported KindRep% bindings for the given set of kinds.ghcThe s in need of bindings kindsghcModule name fingerprintghcPackage name fingerprintghcModule's typerep bindingghcInformation we need about a / to generate its representation. We carry the 4 in order to share it between the generation of the TyCon and KindRep bindings.ghcGenerate the Typeable bindings for a module. This is the only entry-point of this module and is invoked by the typechecker driver in  tcRnSrcDecls.&See Note [Grand plan for Typeable] in GHC.Tc.Instance.Typeable.ghc6Generate TyCon bindings for a set of type constructorsghc [a] -> a sumNumList [] = 0 sumNumList (x : xs) = x + sumList xsand add a breakpoint to it:ghci> break sumNumList ghci> sumNumList ([0 .. 9] :: [Int])+ghci shows us more precise types than just as:Stopped in Main.sumNumList, debugger.hs:3:23-39 _result :: Int = _ x :: Int = 0 xs :: [Int] = _ghc&How many times to recurse for subtermsghc Force thunksghc!Type of the object to reconstructghcObject to reconstructghc&How many times to recurse for subtermsghcType to refineghc Refine the type using this value  None?ghcAttempt to convert a Template Haskell name to one that GHC can understand. Original TH names such as those you get when you use the 'foo syntax will be translated to their equivalent GHC name exactly. Qualified or unqualified TH names will be dynamically bound to names in the module being compiled, if possible. Exact TH names will be bound to the name they represent, exactly.ghcAttempt to convert a Template Haskell name to one that GHC can understand. Original TH names such as those you get when you use the 'foo syntax will be translated to their equivalent GHC name exactly. Qualified or unqualified TH names will be dynamically bound to names in the module being compiled, if possible. Exact TH names will be bound to the name they represent, exactly.1One must be careful to consistently use the same > to create identifier that might be compared. (C.f. how the . Monad enforces that variables from separate  invocations are never intermingled; it would be valid to use the same tricks for s and s.)For now, the easiest and recommended way to ensure a consistent < is used it to retrieve the preexisting one from an active  . A single  is created per GHC "session", and this ensures everything in that session will get the same name cache.*57$__$____$_$$__$_$___$_____$_`__$_$_$$___________`_$$_____$_$$$$$$$$__$____``````$``__`___`_$$$$$$_$$$$_____$$`_$`````_`_``__$$$_````$```_`___$$``````__`````````$$$___$_$___$$$$$$___$_____$__$_$$_$$_$_$$$$$$$$$_$$$$$$_$$___$___$$EEEEEEEZZZZZZZZZ[[[Z[Z[[ZZZZ[[[[ZZZZZZZZZZZZZ[ZZZZZZZ[[ZZZ[[[ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[ZZ[[ZZ[NNNNNNNANNNANANNAANANNNANNNNNNNANNNNNNNANNNANNNANNNNNNNNNNNNNANNNNAANNANANNNANAANNNANNNNNNNAAAANAANNNNNAANNNAANANANNNANNNANNNNNNANNNNNNNNNNNNNNANNNNNNNNPPPPPP##PP#PPPP#PPP$PPPPPPPPPP#P#PPP#PP##P##PPPPPPPPPPPPPPPPP##PPPP#PPiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiilkklkklkkkkkkkklkklkkkkkkkkkkkkklklkkkllkkkllkkkkkkklllllklkkkkjjjkjjjjjjjjjjjjjjjjkjjkkkjkkkkkGGGFFFFFFGGFFFFFFFFFFFGFGGMDDDDDDDDDDDDDDDDDDDDDDGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGCCCCCCCCCCCCCCCCCCCBCCCCBBCCCCBCBCCCCCCCCCCCCCCCBBBBBBBBBCBBBCCBCCCBBCBCCCCCCCCBBBBBBBBCCCCCCCCCBBCCCCCCCCCBCCBCCBCCCCCCBCCBHHHHIH(HH(HHHHHHHHHHH(HHH(HIHHHHHH(HIIIHHIHHHHH(HHH(IHI(HHIH(IH(HHHIHHHIHHHHHHIHHHHIHHHH(HIII(H(HHHHHIHHHHIIIHH(HHH(H(HHHHI(HIIIIHHHHHHHHHHHHHHHHHHHHHHHHHH(HIIHHHHHHHIHH(HHIII(HI(IHjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjxxxxxxxxxxyxyyyxxxxxxxyxyyxxyyxxyyxyyyyyyyxyxxxxxxxxxxxxyyyyyyy&@??@?????@@@@@@@@@@@@@@@?????????@?@@?@@???@??ˇʇ9999999""""!"""""""""""!""""""""""""""""""""""""""""""""""""""!"""""""""""""""!""""!"""!""""""""""""""""""""""""""""+]]]^^^]]^]^^^]]^]]^^^]]^]^^^]^]]]]]]^]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^]^]]]]^]^]^]^]]^]^^^^]^]^^^^^]^^]^^^^^^]^^\\]]]]\]]\]]]\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&**********************************************%%$$%%%%%%%%%%%%%%%$%%%%%$%%%%%$%%$%$$%%$%$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$%$$%%%%%%%%%%$ %%%$%%%%%$$$%$%%%$%%$$%$%%%%$,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*************************************''''''''''''''''('(''''''(''''''''''''''''''''''''('''''''''''''''''''''''''''''''''*)*))*))))**)))))*)))*)))***))))))))*)*)))*)*)))))))*)*)*))))))*)**)))*)**))))))))))))))))))))))))*)))))(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( @@@@@@@@@@@@@zzyyzzyzzyzzzzyzyyyyzyzzzzzzzyyzzzzzyyyyyz                           z]_______ZZZZZZYYYYYYYYYYYYYYYYYZZZZYYYYYYYYYYYYYYZYYYYZZZZZZZZZZZYZZZZZZZYYZZZZZZZZZZZZZYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYNNNNNNNN#P#PPPPPPP#PPPPPPPPPiiiiikkkkkkkкܺغݺ޺ۺٺֺ׺ߺںպҺѺԺӺ;DDDDDDDDDDDDDDDDDDDCCCCCCCGGGGGBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBGGGHGGGHjwwwwwwwwwwwwwwwwwxxwwwwxxwwxwwxxwwxxwxxxxxxxxxxwwxwwxxwwxxwxxxxwwwxwxxxxxxxxxxxwxxwwwwxxxxxxxxxwwwwxxxxxxwwxxxxwwwwxwxxxwwwwxxxxxwwwwxxxxwwwxxxxxxxwxxxxwxxxwwwwwwxxwwwxvvvvvvvwwwwwwwwwwwwwwwwwwvvvvvwwwwwwwwwwwwwwwwwwwvwwwwwwwwwwwvvvvvvvvvvwwwvHG%%%%%%???????????????????\ć‡ÇŇƇLJȇɇ9999999999!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!ttttttt++++++++++++++\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\KKKKKKKKKKKKKKKKKKKKK&&&** $$ $$$$+++++++++++++++++++++++++++++++++++++++++++++++++++++++,+,++++********* '''''''''''''''''''''''''''''''''''''''''''))))))))))))((((((((( @@@@@@@@ǽȽнϽ̽νͽ˽ʽҽɽѽӽԽ޽ؽݽսٽܽڽ۽׽ׇֽ߽؇هއ݇ۇ܇ڇ߇Շևyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy    (  $ $$$%$$$$$$ $$$$$$$$$$%%%%%%%%%%%%%$% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$%%%%%%%%%%%$%%%%%$ $$$&&%&&$$$$&&&&&&&&&&&$$ &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$$$$$$$$$$%%%%%%%%%%%%%$% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$%%%%%%%%%%%$%%%%%]]]('(]]]]]]]]'''''Y^^^^^^^]]]]']]^^]]]]]]]]]]]]]]]]]]]]]']]]''''']]]]^^^^^^]^]]]]]]]]]]]]]^]]]']]]]^^^^^^]]]^^^^^^]]]^^^]]^^^^^]]^^^^^^]]]^])GGGjGGkGGGGjkkGjjjjkkjjkkkkGGGjGjGjjjjGGGGjjjjjkjjjkHDHH''(HDDI$$'E(('''''GGGGGHHIIIIIIHFHFIGGG'((H'I'GDGGGGGGGGGGGGG(HHFFFFFFFFGGGGGGGFF((HHHDDD''''''''''DDDDDDDDDDDDDCCCCCCCDD((GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG(((GGGGGGGGGGGGGB('HHHHHHHHHHHHHHHHH(HHH(HHHHHHHHHHHHHHHHHHHH(HHHHHHHHHHHHHHHHH(HGHHHHHHHHHHHHGGHHGGGHHH'''''''''''''''HHHHHHHHHHHHHIIIIIIIIIIHIHHHHHHHHHHHHHHHHIHH(H(HHH(HIIIIIIIIIHIHIII DDDDDDDDDDDDDDDDDD!!!'NNNNNAAAAAAANNNAANAANNNNNNNNNNAAANNAAANAAANNAANNANAAAANANNNNANNNNNNNNNNNNNNNANNNANNNNNNNNNNNNA!AANNANNNNNNNNNNNNNNNNN''NNNFFFFFFDGGGGGGGGGGGNNNNNNNNNNNNNNNNNNNNNNNNNNAMNNNNNNGGNNNNNNNNtNone'9& ghc?Options for generated static pointers, if enabled (/= Nothing).ghcAre rules exposed or not?ghctrim off the arity, one-shot-ness, strictness etc which were retained for the benefit of the code generatorghcWhich unfoldings to exposeghc$Always true if we compile with -profghcDon't expose unfoldingsghcOnly expose required unfoldingsghcExpose all unfoldingsghcCollect cost centres defined in the current module, including those in unfoldings.None'|None/p ghc.This environment is used for three operations: To support cloning of local Ids so that they are all unique (see item (6) of CorePrep overview).To support beta-reduction of runRW, see Note [runRW magic] and Note [runRW arg].To let us inline trivial RHSs of non top-level let-bindings, see Note [lazyId magic], Note [Inlining in CorePrep] and Note #12076(CorePrep inlines trivial CoreExpr not IdghcThis flag is intended to aid in debugging strictness analysis bugs. These are particularly nasty to chase down as they may manifest as segmentation faults. When this flag is enabled we instead produce an b expression to catch the case where a function we think should bottom unexpectedly returns.ghcConvert some numeric literals (Integer, Natural) into their final Core form.ghc/Whether to generate a default alternative with b in these cases. This is helpful when debugging demand analysis or type checker bugs which can sometimes manifest as segmentation faults.ghc%See Note [Floating Ticks in CorePrep]ghc Convert a  so it satisfies , without producing any floats (any generated floats are immediately let-bound using ). Generally you want this, esp. when you've reached a binding form (e.g., a lambda) and floating any further would be incorrect.ghc Convert a  so it satisfies ; also produce a list of  which are being propagated upwards. In fact, this function is used in only two cases: to implement  (which is what you usually want), and in the case when a let-binding is in a case scrutinee--here, we can always float out:case (let x = y in z) of ... ==> let x = y in case z of ...ghcIs an argument okay to CPE?ghc+Like wrapFloats, but only wraps tick floatsghcCreate a function that converts Bignum literals into their final CoreExpr  None/None ()*=$ghcIf co :: T ts ~ rep_ty then: +instNewTyCon_maybe T ts = Just (rep_ty, co)Checks for a newtype, and for being saturated Just like Coercion.instNewTyCon_maybe, but returns a TcCoercionghcLike , but returns the arguments back if there is no data family to unwrap. Returns a Representational coercionghcConverts a data family type (eg F [a]) to its representation type (eg FList a) and returns a coercion between the two: co :: F [a] ~R FList a.ghc gets rid of top-level newtypes, potentially looking through newtype  instances and type synonyms.It is only used by the type inference engine (specifically, when solving representational equality), and hence it is careful to unwrap only if the relevant data constructor is in scope. That's why it gets a GlobalRdrEnv argument.It is careful not to unwrap data/newtype instances nor synonyms if it can't continue unwrapping. Such care is necessary for proper error messages.It does not look through type families. It does not normalise arguments to a tycon.If the result is Just ((gres, co), rep_ty), then co : ty ~R rep_ty gres are the GREs for the data constructors that had to be in scopeghc4Checks to make sure no two family instances overlap.ghcCheck whether a new open type family equation can be added without violating injectivity annotation supplied by the user. Returns True when this is possible and False if adding this equation would violate injectivity annotation. This looks only at the one equation; it does not look for interaction between equations. Use checkForInjectivityConflicts for that. Does checks (2)-(4) of Note [Verifying injectivity annotation] in GHC.Core.FamInstEnv.ghcReport a list of injectivity errors together with their source locations. Looks only at one equation; does not look for conflicts *among* equations.ghc,Is type headed by a type family application?ghcIf a RHS is a bare type variable return a set of LHS patterns that are not bare type variables.ghcReturn the set of type variables that a type family equation is expected to be injective in but is not. Suppose we have type family F a b = r | r -> a. Then any variables that appear free in the first argument to F in an equation must be fixed by that equation's RHS. This function returns all such variables that are not indeed fixed. It also returns whether any of these variables appear invisibly and whether -XUndecidableInstances would help. See Note [Coverage condition for injective type families].ghcReport error message for a pair of equations violating an injectivity annotation. No error message if there are no branches.ghcReport error message for equation with injective type variables unused in the RHS. Note [Coverage condition for injective type families], step 6ghcReport error message for equation that has a type family call at the top level of RHSghcReport error message for equation that has a bare type variable in the RHS but LHS pattern is not a bare type variable.ghc(Type family for which we generate errorsghc1Currently checked equation (represented by axiom)ghcInjectivity annotation i iNone 'OghcReport unsolved goals as errors or warnings. We may also turn some into deferred run-time errors if `-fdefer-type-errors` is on.ghcReport *all* unsolved goals as errors, even if -fdefer-type-errors is on However, do not make any evidence bindings, because we don't have any convenient place to put them. NB: Type-level holes are OK, because there are no bindings. See Note [Deferring coercion errors to runtime] Used by solveEqualities for kind equalities (see Note [Failure in local type signatures] in GHC.Tc.Solver)ghcReport all unsolved goals as warnings (but without deferring any errors to run-time). See Note [Safe Haskell Overlapping Instances Implementation] in  GHC.Tc.Solverghc,Report unsolved goals as errors or warnings.ghcMake a report from a single .ghc Returns True  == the SolverReportErrCtxt indicates that something is deferredghcShould we completely ignore this constraint in error reporting? It *must* be the case that any constraint for which this returns True somehow causes an error to be reported elsewhere. See Note [Constraints to ignore].ghcMakes an error item from a constraint, calculating whether or not the item should be suppressed. See Note [Wanteds rewrite Wanteds] in GHC.Tc.Types.Constraint. Returns Nothing if we should just ignore a constraint. See Note [Constraints to ignore].ghcActually report this .ghc#zonkTidyTcLclEnvs takes a bunch of ҄$s, each from a Hole. It returns a ( :-> ) mapping which gives the zonked, tidied type for each Id in any of the binder stacks in the ҄s. Since there is a huge overlap between these stacks, is is much, much faster to do them all at once, avoiding duplication.ghcWrap an input ˍ with additional contextual information, such as relevant bindings or valid hole fits.ghcPretty-print supplementary information, to add to an error report.ghc(Display a collection of valid hole fits.ghc'Add a "Constraints include..." message."See Note [Constraints include ...]ghcConstructs a new hole error, unless this is deferred. See Note [Constructing Hole Errors].ghcFor all the skolem type variables in a type, zonk the skolem info and group together all the type variables with the same origin.ghcAdds deferred bindings (as errors). See Note [Adding deferred bindings].ghcReport a representation-polymorphism error to the user: a type is required to have a fixed runtime representation, but doesn't.See Note [Reporting representation-polymorphism errors] in GHC.Tc.Types.Origin.ghc&Whether to report something using the FixedRuntimeRep mechanism.ghcThis function tries to reconstruct why a "Coercible ty1 ty2" constraint is left over.ghc&Whether to print explicit kinds (with -fprint-explicit-kinds ) in an  = when a type mismatch occurs to due invisible kind arguments.)This function first checks to see if the   argument is a . If so, it first checks whether the equality is a visible equality; if it's not, definitely print the kinds. Even if the equality is a visible equality, check the expected/actual types to see if the types have equal visible components. If the   is not a 6, fall back on the actual mismatched types themselves.ghcIf the  is a type mismatch between an actual and an expected type, return the actual and expected types (in that order)./Prefer using this over manually inspecting the  datatype if you just want this information, as the datatype itself is subject to change across GHC versions.ghcFilter the list by the given predicate, but if that would be empty, just give back the original list. We use this as we must report something for fdefer-type-errors.ghc The main payload of the message.ghcThe context to add, after the main diagnostic but before the supplementary information. Nothing  = don't add any context.ghcSupplementary information, to be added at the end of the message.ghcThe context we're in, i.e. the implications and the tidy environmentghcUnsolved simple constraintsghcThe holeghcWe return the new context with a possibly updated tidy environment, and the valid hole fits.NonePJghc returns (True, fixity) if it finds a  in a local environment or from an interface file. Otherwise, it returns (False, fixity) (e.g., for unbound s or .s without user-supplied fixity declarations).None )*hghcWhether to report deprecation warnings when registering a used GREThere is no option to only emit declaration warnings since everywhere we emit the declaration warnings we also emit export warnings (See Note [Handling of deprecations] for details)ghc We couldn't find a suitable nameghc!The child has an incorrect parentghcThis domain specific datatype is used to record why we decided it was possible that a GRE could be exported with a parent.ghc7The GRE could not be found, or it has the wrong parent.ghc5The GRE has no parent. It could be a pattern synonym.ghc,The parent of the GRE is the correct parent.ghcThe GRE is ambiguous.For example, two normal identifiers with the same name are in scope. They will both be resolved to UniqueOccurrence8 and the monoid will combine them to this failing case.ghcFound an Exact Or Orig NameghcThe RdrName was an Exact or Orig, but there was an error looking up the Nameghc(The RdrName is neither an Exact nor Origghc Lookup an Exact RdrName. See Note [Looking up Exact RdrNames]. This never adds an error, but it may return one, see Note [Errors in lookup functions]ghc5Look up the arity and record fields of a constructor.ghcLook up an occurrence of a field in record construction or pattern matching (but not update).8If -XDisambiguateRecordFields is off, then we will pass J for the # , i.e. we don't use the data constructor for disambiguation. See Note [DisambiguateRecordFields] and Note [NoFieldSelectors].ghc,Used in export lists to lookup the children.ghcFind all the things the ++ maps to, and pick the one with the right + .ghc Look up a +% used as a variable in an expression.This may be a local variable, global variable, or one or more record selector functions. It will not return record fields created with the NoFieldSelectors) extension (see Note [NoFieldSelectors]).If the name is not in scope at the term level, but its promoted equivalent is in scope at the type level, the lookup will succeed (so that the type-checker can report a more informative error later). See Note [Promotion].ghc Lookup a  in the +, falling back to looking up in the type environment it if fails.ghclookupInfoOccRn is intended for use in GHCi's ":info" command It finds all the GREs that RdrName could mean, not complaining about ambiguity, but rather returning them all (c.f. #9881).lookupInfoOccRn is also used in situations where we check for at least one definition of the RdrName, not complaining about multiple definitions (see #17832).ghc1Look up all record field names, available in the +, that a given + might refer to. (Also includes implicit qualified imports in GHCi).'Throws an error if no fields are found.0See Note [DisambiguateRecordFields for updates].ghc Look up a +2, which might refer to an overloaded record field.Don't allow any ambiguity: emit a name-clash error if there are multiple matching GREs.ghcReturns all possible collections of field labels for the given record update.Example:data D = MkD { fld1 :: Int, fld2 :: Bool } data E = MkE1 { fld1 :: Int, fld2 :: Bool, fld3 :: Char } | MkE2 { fld1 :: Int, fld2 :: Bool } data F = MkF1 { fld1 :: Int } | MkF2 { fld2 :: Bool }f r = r { fld1 = a, fld2 = b }This function will return:  [ D.fld1, D.fld2 -- could be a record update at type D , [ E.fld1, E.fld2 ] -- could be a record update at type E ] -- cannot be a record update at type F: no constructor has both -- of the fields fld1 and fld2?If there are no valid parents for the record update, throws a  error.ghc0Create an error message when there is no single ^; which has all of the required fields for a record update.This boils down the problem to a smaller set of fields, to avoid the error message containing a lot of uninformative field names that aren't really relevant to the problem.NB: this error message should only be triggered when all the field names are in scope (i.e. each individual field name does belong to some constructor in scope).ghcLike  but returning at most one name, reporting an ambiguity error if there are more than one.ghc%Look up *all* the names to which the + may refer in GHCi (using -fimplicit-import-qualified). This will normally be zero or one, but may be more in the presence of DuplicateRecordFields.ghc Look up the + associated with the given ( by looking up in the type environment.ghc,Lookup a name in relation to the names in a ghc Looks up the +, expecting it to resolve to one of the bound names currently in scope. If not, return an appropriate error message.&See Note [Looking up signature names].ghcparentghcchild we were looking forghc2list of possible parents | We resolved to a childghcthing we are looking upghchow to look it up (e.g. which $ s to look in)ghc1Field names that don't belong to a single dataconghcThe list of field labels for each constructor. (These are the constructors in which the first field occurs.)ghc:description of thing we're looking up, like "type family"ghcwhat to look upghcif the +" we are looking up is in a value $2, should we also look up in the type constructor $?ghcThe standard nameghcPossibly a non-standard name Lookup a Name that may be subject to Rebindable Syntax (RS).8When RS is off, just return the supplied (standard) NameWhen RS is on, look up the OccName of the supplied Name; return what we find, or the supplied Name if there is nothing in scopeghcThe standard nameghcPossibly a non-standard nameNonenghcExtra information about the parent instance declaration, needed when type-checking associated types. The A. is the enclosing class, the [TyVar] are the scoped* type variable of the instance decl. The  VarEnv Type. maps class variables to their instance types.ghcMaps class tyvars to their instance types See Note [Matching in the consistent-instantiation check]ghcThe scoped6 tyvars of the instance Why scoped? See bind_me in ghc,Assumes that we've checked that this is the Typeable4 class, and it was applied to the correct argument.ghcRepresentation for a type ty of the form  arg -> ret.ghc co1) ~ ty2 (modulo a swap-flag)ghcCall canEqSoftFailure when canonicalizing an equality fails, but if the equality is representational, there is some hope for the future.ghcCall when canonicalizing an equality fails with utterly no hope.ghc%Solve a reflexive equality constraintghc :: ty1 ~ ty2ghcty1ghc :: ty1 ~ ty1'ghcty2ghcty2, with type synonymsNone ghcRepresents collections of constraints generated by typechecker pluginsghc"New constraints emitted by pluginsghc,Constraints reported as insoluble by pluginsghcConstraints solved by pluginsghcOriginal inputs to the plugins with solved/bad constraints removed, but otherwise unmodifiedghc7A solved pair of constraints, with evidence for wantedsghc8A pair of (given, wanted) constraints to pass to pluginsghcExtract the (inert) givens and invoke the plugins on them. Remove solved givens from the inert set and emit insolubles, but return new work produced so that ( can feed it back into the main solver.ghcGiven a bag of (rewritten, zonked) wanteds, invoke the plugins on them and produce an updated bag of wanteds (possibly with some new work) and a bag of insolubles. The boolean indicates whether < should feed the updated wanteds back into the main solver.ghcStarting from a pair of (given, wanted) constraints, invoke each of the typechecker constraint-solving plugins in turn and return%the remaining unmodified constraints,"constraints that have been solved,#constraints that are insoluble, and new work.Note that new work generated by one plugin will not be seen by other plugins on this pass (but the main constraint solver will be re-invoked and they will see it later). There is no check that new work differs from the original constraints supplied to the plugin: the plugin itself should perform this check if necessary.ghc old evidenceghc"new predicate + coercion, of type  typeof old evidence ~ new predicateghc>See Note [Wanteds rewrite Wanteds] in GHC.Tc.Types.ConstraintNone ghc8How should we choose which constraints to quantify over?ghcApply the monomorphism restriction, never quantifying over any constraintsghcSee Note [TcRnExprMode] in  GHC.Tc.Module, the :type +d case; this mode refuses to quantify over any defaultable constraintghcQuantify over any constraint that satisfies pickQuantifiablePredsghcType-check a thing that emits only equality constraints, solving any constraints we can and re-emitting constraints that we can't. Use this variant only when we'll get another crack at it later See Note [Failure in local type signatures]Panics if we solve any non-equality constraints. (In runTCSEqualities we use an error thunk for the evidence bindings.)ghcSimplify top-level constraints, but without reporting any unsolved constraints nor unsafe overlapping.ghc/If an implication contains a Given of the form Unsatisfiable msg6, use it to solve all Wanteds within the implication.4This does a complete walk over the implication tree.See point (C) in Note [Implementation of Unsatisfiable constraints] in GHC.Tc.Errors.ghc.Is this evidence variable the evidence for an  Unsatisfiable constraint?If so, return the variable itself together with the error message type.ghcWe have an implication with an  Unsatisfiable Given; use that Given to solve all the other Wanted constraints, including those nested within deeper implications.ghcCreate an evidence expression for an arbitrary constraint using evidence for an  Unsatisfiable Given.3See Note [Evidence terms from Unsatisfiable Givens]ghcDefault any remaining  CallStack constraints to empty  CallStacks.ghcReturn (Just new_inerts) if the Givens are satisfiable, Nothing if definitely contradictory.>See Note [Pattern match warnings with insoluble Givens] above.ghc4Return True if the Wanteds are soluble, False if notghcNormalise a type as much as possible using the given constraints. See Note [tcNormalise].ghcWhen inferring types, should we quantify over a given predicate? See Note [pickQuantifiablePreds]ghcLike , but in the TcS monad.NoneNghcCheck a list of binders to see if they make a valid telescope. See Note [Bad TyCon telescopes]ghc0Information about a type being validity-checked.ghcWhen validity-checking an application of a type synonym, should we check the arguments, check the expanded type, or both? See Note [Correctness and performance of type synonym validity checking]ghcOnly check the expanded type.ghcOnly check the arguments.ghc/Check both the arguments and the expanded type.ghcIndicates whether a ? represents type-level contexts, kind-level contexts, or both.ghcA + that only represents type-level positions.ghcA + that only represents kind-level positions.ghcA 8 that can represent both type- and kind-level positions.ghcCheck whether the type signature contains custom type errors, and fail if so.1Note that some custom type errors are acceptable:in the RHS of a type synonym, e.g. to allow users to define type synonyms for custom type errors with large messages (#20181),inside a type family application, as a custom type error might evaporate after performing type family reduction (#20241).ghcDetermine whether a  can represent type-level contexts, kind-level contexts, or both.ghcReturns L if the supplied  is unambiguously not the context for a kind of a type. If the  can refer to both types and kinds, this function conservatively returns L.An example of something that is unambiguously the kind of a type is the Show a => a -> a in type Foo :: Show a => a -> a'. On the other hand, the same type in foo :: Show a => a -> a is unambiguously the type of a term, not the kind of a type, so it is permitted.ghcReturns L if the supplied  is unambiguously not the context for a kind of a type, where the arbitrary use of constraints is currently disallowed.ghcReturns L if the supplied  is unambiguously not the context for a kind of a type, where all function arrows currently must be unrestricted.ghcReturns L if the supplied  is unambiguously not the context for the type of a term, where visible, dependent quantification is currently disallowed. If the  can refer to both types and kinds, this function conservatively returns L.An example of something that is unambiguously the type of a term is the forall a -> a -> a in foo :: forall a -> a -> a'. On the other hand, the same type in %type family Foo :: forall a -> a -> a is unambiguously the kind of a type, not the type of a term, so it is permitted.For more examples, see  testsuitetests dependentshould_compileT16326_Compile*.hs+ (for places where VDQ is permitted) and  testsuitetests dependent should_failT16326_Fail*.hs' (for places where VDQ is disallowed).ghcIf LiberalTypeSynonyms is enabled, we start in $ mode for the reasons explained in Note [Liberal type synonyms]. Otherwise, we start in  mode.ghc2See Note [Validity checking of HasField instances]ghc#Split an instance type of the form #forall tvbs. inst_ctxt => inst_head and return (inst_ctxt, inst_head). This function makes no attempt to look through type synonyms. See (Note [Instances and constraint synonyms].ghcDo validity checks on a type family equation, including consistency with any enclosing class instance head, termination, and lack of polytypes.See also the separate  which performs scoping checks on a type family equation. (It's separate because it expects A, which comes from a separate place e.g. for associated type defaults.)ghc.Checks that an associated type family default:  induced by an import of a particular interface, but without z.ghcIssue a warning if the user imports Data.List without either an import list or  qualified.. This is part of the migration plan for the  proposal. See #17244.ghcAll the +s associated with an +.ghcAll the +"s associated with a collection of +s.ghcMake an $ of all the imports.Complicated by the fact that associated data types and pattern synonyms can appear twice. See Note [Dealing with imports].ghcEssentially like ,lookupGRE env (LookupOccName occ which_gres), but working with  s instead of +s.ghc3Given an import/export spec, appropriately set the gre_imp field for the +s.ghcWarn the user about top level binders that lack type signatures. Called after type inference, so that we can report the inferred type of the functionghc>Warn the user about tycons that lack kind signatures. Called after type (and kind) inference, so that we can report the inferred kinds.ghc Import specghc&Whether this is a "hiding" import listNone 1ghcShould GHC warn if a quantified type variable goes unused? Usually, the answer is "yes", but in the particular case of binding Q$, we avoid emitting warnings. See 8Note [Suppress -Wunused-foralls when binding LHsQTyVars].ghcAlways bind any free tyvars of the given type, regardless of whether we have a forall at the top.For pattern type sigs, we do want to bring those type variables into scope, even if there's a forall at the top which usually stops that happening, e.g: \ (x :: forall a. a -> b) -> eHere we do bring b into scope.RULES can also use #, such as in the following example: {-# RULES \"f\" forall (x :: forall a. a -> b). f x = ... b ... #-}This only applies to RULES that do not explicitly bind their type variables. If a RULE explicitly quantifies its type variables, then  is used instead. See also ,Note [Pattern signature binders and scoping] in  GHC.Hs.Type.ghcNever bind any free tyvars. This is used for RULES that have both explicit type and term variable binders, e.g.: {-# RULES \"const\" forall a. forall (x :: a) y. const x y = x #-})The presence of the type variable binder  forall a. implies that the free variables in the types of the term variable binders x and y are not bound. In the example above, there are no such free variables, but if the user had written (y :: b) instead of y% in the term variable binders, then b5 would be rejected for being out of scope. See also ,Note [Pattern signature binders and scoping] in  GHC.Hs.Type.ghcWhen the NamedWildCards extension is enabled, partition_nwcs removes type variables that start with an underscore from the FreeKiTyVars in the argument and returns them in a separate list. When the extension is disabled, the function returns the argument and empty list. See Note [Renaming named wild cards]ghcCreate new renamed type variables corresponding to source-level ones. Duplicates are permitted, but will be removed. This is intended especially for the case of handling the implicitly bound free variables of a type signature.ghcCreate fresh type variables for binders, disallowing multiple occurrences of the same variable. Similar to  except that duplicate occurrences will result in an error, and the source locations of the variables are not adjusted, as these variable occurrences are themselves the binding sites for the type variables, rather than the variables being implicitly bound by a signature.ghc(In what contexts are wildcards permittedghc>Ensures either that we're in a type or that -XPolyKinds is setghc(Look up the fixity for an operator name.ghcFilter out any type and kind variables that are already in scope in the the supplied LocalRdrEnv. Note that this includes named wildcards, which look like perfectly ordinary type variables at this point.ghcFilter out any type and kind variables that are already in scope in the the environment's LocalRdrEnv. Note that this includes named wildcards, which look like perfectly ordinary type variables at this point.ghc finds the type/kind variables of a HsType/HsKind. It's used when making the forall6s explicit. See Note [Kind and type-variable binders]ghcExtracts the free type/kind variables from the kind signature of a HsType. This is used to implicitly quantify over k in type T = Nothing :: Maybe k. The left-to-right order of variables is preserved. See Note [Kind and type-variable binders] and Note [Ordering of implicit variables] and Note [Implicit quantification in type synonyms].ghcExtracts free type and kind variables from types in a list. When the same name occurs multiple times in the types, all occurrences are returned.ghcExtracts free type and kind variables from an argument in a GADT constructor, returning variable occurrences in left-to-right order. See %Note [Ordering of implicit variables].ghcGet type/kind variables mentioned in the kind signature, preserving left-to-right order:data T a (b :: k1) :: k2 -> k1 -> k2 -> Type -- result: [k2,k1] an associated type declghcSurface-syntax free vars that we will implicitly bind. May have duplicates, which are removed here.ghcK _ => an associated type declghcSurface-syntax free vars that we will implicitly bind. Duplicate variables will cause a compile-time error regarding repeated bindings.ghcname of the wildcard, or J for an anonymous wildcardghcK _ => an associated type declghcExplicitly bound hereghcPotential implicit bindersghcFinal implicit binders33None%(9zghcBuild a { out of an extension constructor, and the two components of the expansion: original and desugared patternsghcRename a regular (non-overloaded) record field update, disambiguating the fields if necessary.ghcTurn a Fractional-looking literal which happens to be an integer into an Integer-looking literal. We only convert numbers where the exponent is between 0 and 100 to avoid converting huge numbers and incurring long compilation times. See #15646.ghcsource patternghcexpanded patternghcsuitably wrapped {None /None 'e ghc0'InstDeclFreeVarsMap is an association of an InstDecl with FreeVars. The FreeVars are the tycon names that are both a) free in the instance declaration b) bound by this group of typeclassinstance declsghcStandalone kind signatures.ghc-Free variables of standalone kind signatures.ghcTracks whether we are renaming an equation in a closed type family equation ( ) or not ().ghcTracks whether we are renaming: A type family equation that is not associated with a parent type class ( ). Examples:  type family F a type instance F Int = Bool -- NonAssocTyFamEqn NotClosed type family G a where G Int = Bool -- NonAssocTyFamEqn Closed  /An associated type family default declaration (). Example:  class C a where type A a type instance A a = a -> a -- AssocTyFamDeflt C  0An associated type family instance declaration (). Example:  instance C a => C [a] where type A [a] = Bool -- AssocTyFamInst C [a] ghc rnSourceDecl "renames" declarations. It simultaneously performs dependency analysis and precedence parsing. It also does the following error checks:Checks that tyvars are used properly. This includes checking for undefined tyvars, and tyvars in contexts that are ambiguous. (Some of this checking has now been moved to module  TcMonoType, since we don't have functional dependency information at this point.)1Checks that all variable occurrences are defined. Checks the (..)$ etc constraints in the export list.Brings the binders of the group into scope in the appropriate places; does NOT assume that anything is in scope alreadyghcFor Windows DLLs we need to know what packages imported symbols are from to generate correct calls. Imported symbols are tagged with the current package, so if they get inlined across a package boundary we'll still know where they're from.ghc8Warn about non-canonical typeclass instance declarationsA "non-canonical" instance definition can occur for instances of a class which redundantly defines an operation its superclass provides as well (c.f. /!). In such cases, a canonical instance is one where the subclass inherits its method implementation from its superclass instance (usually the subclass has a default method implementation to that effect). Consequently, a non-canonical instance occurs when this is not the case.See also descriptions of checkCanonicalMonadInstances and checkCanonicalMonoidInstancesghcRenames role annotations, returning them as the values in a NameEnv and checks for duplicate role annotations. It is quite convenient to do both of these in the same place. See also Note [Role annotations in the renamer]ghc Construct an InstDeclFreeVarsMap by eliminating any Names from the FreeVars" which are *not* the binders of a TyClDecl.ghcGet the  LInstDecls which have empty FreeVars sets, and the InstDeclFreeVarsMap with these entries removed. We call (getInsts tcs instd_map) when we've completed the declarations for tcs. The call returns (inst_decls, instd_map'), where inst_decls are the instance declarations all of whose free vars are now defined instd_map' is the inst-decl map with tcs- removed from the free-var setghcRename injectivity annotation. Note that injectivity annotation is just the part after the "|". Everything that appears before it is renamed in rnFamDecl.ghcBrings pattern synonym names and also pattern synonym selectors from record pattern synonyms into scope.ghc.Type variables declared in type family headghcResult signatureghcInjectivity annotationNone " ghcMap from names that should not have export warnings to the spans of export list items that are missing those warningsghcList of names and the information about their warnings (warning, export list item span)ghcWhat names not to export warnings for (because they are exported without a warning)ghc$Information about warnings for namesghcTracks (re-)exported module names and the names they re-exportghc Tracks exported occurrence namesghcGiven a resolved name in the children export list and a parent. Decide whether we are allowed to export the child with the parent. Invariant: gre_par == NoParent See Note [Typing Pattern Synonym Exports]ghcInsert the given + s into the #, checking that each of the given +)s does not appear multiple times in the 1, as per Note [Exporting duplicate declarations].ghcIs it OK for the given name to be exported by both export items?,See Note [Exporting duplicate declarations].ghcIs it OK to export two clashing duplicate record fields coming from the given export items, with -XDisambiguateRecordFields disabled?-See Note [Exporting duplicate record fields].ghcJ means no explicit export listghc-Imported modules; this is used to test if a  module Foo6 export is valid (it's not valid if we didn't import Foo!)ghc5Alleged parent type constructor User wrote T( P, Q )ghcEither a a) Pattern Synonym Constructor b) A pattern synonym selectorNone =ghc/Rename a splice pattern. See Note [rnSplicePat]ghcThe splice data to be loggedghcEnsure that we are not using a term-level name in a type-level namespace or vice-versa. Throws a  error if there is a problem.ghcReturns the result of running a splice and the modFinalizers collected during the execution.5See Note [Delaying modFinalizers in untyped splices].ghcoutputs splice information for 2 flags which have different output formats: `-ddump-splices` and `-dth-dec-file`None(/^ghcRename some StmtsghcA tree of statements using a mixture of applicative and bind constructs.ghcThe s of return and pure. These may not be  returnName and pureName due to  QualifiedDo or RebindableSyntax.ghcmaybe rearrange statements according to the ApplicativeDo transformationghc.strip the FreeVars annotations from statementsghcIs this a context where we respect RebindableSyntax? but ListComp are never rebindable Neither is ArrowExpr, which has its own desugarer in GHC.HsToCore.Arrowsghcrearrange a list of statements using ApplicativeDoStmt. See Note [ApplicativeDo].ghcTurn a sequence of statements into an ExprStmtTree using a heuristic algorithm. O(n^2)ghcTurn a sequence of statements into an ExprStmtTree optimally, using dynamic programming. O(n^3)ghcTurn the ExprStmtTree back into a sequence of statements, using ApplicativeStmt where necessary.ghcDivide a sequence of statements into segments, where no segment depends on any variables defined by a statement in another segment.ghcFind a "good" place to insert a bind in an indivisible segment. This is the only place where we use heuristics. The current heuristic is to peel off the first group of independent statements and put the bind after those.ghcBuild an ApplicativeStmt, and strip the "return" from the tail if necessary.For example, if we start with do x <- E1; y <- E2; return (f x y) then we get do (E1[x] | E2[y]); f x ythe LastStmt in this case has the return removed, but we set the flag on the LastStmt to indicate this, so that we can print out the original statement correctly in error messages. It is easier to do it this way rather than try to ignore the return later in both the typechecker and the desugarer (I tried it that way first!).ghcGiven the statements following an ApplicativeStmt, determine whether we need a join or not, and remove the return if necessary.We don't need join if there's a single LastStmt in the form of return E,  return $ E, pure E or pure $ E.ghc(Just e, Just False), if the expression is  return/pure e-, and the third argument is Nothing, (Just e, Just True) if the expression is return/pure $ e-, and the third argument is Nothing, (Just (pure e), Nothing) if the expression is  return/pure e!, and the third argument is Just pure_expr, (Just (pure $ e), Nothing) if the expression is return/pure $ e!, and the third argument is Just pure_expr, otherwise Nothing.ghcBuild a } out of an extension constructor, and the two components of the expansion: original and desugared expressions.ghc7How to rename the body of each statement (e.g. rnLExpr)ghc Statementsghcif these statements scope over something, this renames it and returns the result.ghc'How to rename the body of the statementghc The statementghc0Rename the stuff that this statement scopes overghcThe free variables used in later statements. If the boolean is L, this might be an underestimate because we are in GHCi, and might thus be missing some "used later" FVs. See Note [What is "used later" in a rec stmt]ghc the "tail"ghcfree variables of the tailghcThe argsghcTrue  = need a joinghcThe body statementsghcsource expressionghcexpanded expressionghcsuitably wrapped }None %&cghcLoad the module containing the given Name and get its associated . Throws a . if loading fails or the name cannot be found.ghc"Temporarily extend the loaded env.ghcDisplay the loader state.ghc,Initialise the dynamic linker. This entails*a) Calling the C initialisation procedure,6b) Loading any packages specified on the command line,c) Loading any packages specified on the command line, now held in the -l options in v_Opt_l,d) Loading any .o/.dll7 files specified on the command line, now held in ldInputs, e) Loading any MacOS frameworks.NOTE: This function is idempotent; if called more than once, it does nothing. This is useful in Template Haskell, where we call it before trying to link.ghcMerge runs of consecutive of . This allows for resolution of cyclic symbol references when dynamically linking. Specifically, we link together all of the static objects into a single shared object, avoiding the issue we saw in #13786.ghcLoad a single expression,  including first loading packages and modules that this expression depends on.Raises an IO exception () if it can't find a compiled version of the dependents to load.ghc#Load the object files and link themIf the interpreter uses dynamic-linking, build a shared library and load it. Otherwise, use the RTS linker.ghcCreate a shared library containing the given object files and load it.ghc!Useful to apply to the result of ghc8Unloading old objects ready for a new compilation sweep.The compilation manager provides us with a list of linkables that it considers "stable", i.e. won't be recompiled this time around. For each of the modules current linked in memory,if the linkable is stable (and it's the same one -- the user may have recompiled the module on the side), we keep it,otherwise, we unload it.?we also implicitly unload all temporary bindings at this point.ghcLoad exactly the specified packages, and their dependents (unless of course they are already loaded). The dependents are loaded automatically, and it doesn't matter what order you specify the input packages.ghcRetrieve the list of search directory GCC and the System use to find libraries and components. See Note [Fork/Exec Windows].ghcCache for the GCC search directories as this can't easily change during an invocation of GHC. (Maybe with some env. variable but we'll) deal with that highly unlikely scenario then.ghcGet a list of system search directories, this to alleviate pressure on the findSysDll function.ghcMerge the given list of paths with those in the environment variable given. If the variable does not exist then just return the identity.ghc%returns the set of linkables requiredghcThe linkables to *keep*.None&ghcInitialise plugins specified by the current DynFlags and update the session.ghcLoads the plugins specified in the pluginModNames field of the dynamic flags. Should be called after command line arguments are parsed, but before actual compilation starts. Idempotent operation. Should be re-called if pluginModNames or pluginModNameOpts changes.ghc=Force the interfaces for the given modules to be loaded. The  # parameter is used for debugging (-ddump-if-trace) only: it is shown as the reason why the module is being loaded.ghcForce the interface for the module containing the name to be loaded. The  # parameter is used for debugging (-ddump-if-trace) only: it is shown as the reason why the module is being loaded.ghc Load the  associated with the given name, come hell or high water. Fails if:!The interface could not be loadedThe name is not that of a +The name did not exist in the loaded moduleghc#Loads the value corresponding to a  if that value has the given . This only provides limited safety in that it is up to the user to ensure that that type corresponds to the type you try to use the return value at!8If the value found was not of the correct type, returns Left actual_type.. Any other condition results in an exception:%If we could not load the names module(If the thing being loaded is not a value(If the Name does not exist in the moduleIf the link failedghcCoerce a value as usual, but:1) Evaluate it immediately to get a segfault early if the coercion was wrong2) Wrap it in some debug messages at verbosity 3 or higher so we can see what happened if it does segfaultghc Finds the  corresponding to the given + in the context of the   . Returns Nothing if no such > could be found. Any other condition results in an exception: If the module could not be found3If we could not determine the imports of the moduleCan only be used for looking up names while loading plugins (and is *not* suitable for use within plugins). The interface file is loaded very partially: just enough that it can be used, without its rules and instances affecting (and being linked from!) the module being compiled. This was introduced by 57d6798.Need the module as well to record information in the interface file  None %&6oghcReturns true if an m is for data T (an abstract data type)ghc Merge two ms together, preferring a non-abstract one. If both are non-abstract we pick one arbitrarily (and check for consistency later.)ghc Merge two $s of ms by  .ghcThis is a very interesting function. Like typecheckIface, we want to type check an interface file into a ModDetails. However, the use-case for these ModDetails is different: we want to compare all of the ModDetails to ensure they define compatible declarations, and then merge them together. So in particular, we have to take a different strategy for knot-tying: we first speculatively merge the declarations to get the "base" truth for what we believe the types will be (this is "type computation.") Then we read everything in relative to this truth and check for compatibility.During the merge process, we may need to nondeterministically pick a particular declaration to use, if multiple signatures define the declaration (). If, for all choices, there are no type synonym cycles in the resulting merged graph, then we can show that our choice cannot matter. Consider the set of entities which the declarations depend on: by assumption of acyclicity, we can assume that these have already been shown to be equal to each other (otherwise merging will fail). Then it must be the case that all candidate declarations here are type-equal (the choice doesn't matter) or there is an inequality (in which case merging will fail.)Unfortunately, the choice can matter if there is a cycle. Consider the following merge:signature H where { type A = C; type B = A; data C } signature H where { type A = (); data B; type C = B } If we pick  type A = C as our representative, there will be a cycle and merging will fail. But if we pick  type A = () as our representative, no cycle occurs, and we instead conclude that all of the types are unit. So it seems that we either (a) need a stronger acyclicity check which considers *all* possible choices from a merge, or (b) we must find a selection of declarations which is acyclic, and show that this is always the "best" choice we could have made (ezyang conjectures this is the case but does not have a proof). For now this is not implemented.It's worth noting that at the moment, a data constructor and a type synonym are never compatible. Consider:signature H where { type Int=C; type B = Int; data C = Int} signature H where { export Prelude.Int; data B; type C = B; }This will be rejected, because the reexported Int in the second signature (a proper data type) is never considered equal to a type synonym. Perhaps this should be relaxed, where a type synonym in a signature is considered implemented by a data type declaration which matches the reference of the type synonym.ghcTypecheck a signature  under the assumption that we have instantiated it under some implementation (recorded in ?) and want to check if the implementation fills the signature.0This needs to operate slightly differently than  because (1) we have a , from the exports of the implementing module, which we will use to give our top-level declarations the correct s even when the implementor provided them with a reexport, and (2) we have to deal with DFun silliness (see Note [rnIfaceNeverExported])ghc1See Note [Interface File with Core: Sharing RHSs]ghcTrue  =# discard IdInfo on IfaceId bindingsghc,For associated type/data family declarationsghcTrue  =# discard IdInfo on IfaceId bindingsghcIs this unfolding compulsory? See Note [Checking for representation polymorphism] in GHC.Core.LintNone(1Wghc) describes how to typecheck an explicit (Q) or implicit () binder in a type. It is just a record of flags that describe what sort of  to create.ghc1Describes the kind expected in a certain context.ghca specific kindghcany kind will doghcsomething of the form TYPE _ghcInfo about the context in which we're checking a type. Currently, differentiates only between types and kinds, but this will likely grow, at least to include the distinction between patterns and not-patterns./To find out where the mode is used, search for =This data type is purely local, not exported from this moduleghcTypecheck a deriving strategy. For most deriving strategies, this is a no-op, but for the via* strategy, this requires typechecking the via type.ghc%Type-check a visible type applicationghcCheck and desugar a type, returning the core type and its possibly-polymorphic kind. Much like  tcInferRho at the expression level.ghcCall / and check its result against an expected kind.ghcInfer the kind of a type and desugar. This is the "up" type-checker, as described in Note [Bidirectional type checking]ghcApply a type of a given kind to a list of arguments. This instantiates invisible parameters as necessary. Always consumes all the arguments, using matchExpectedFunKind as necessary. This takes an optional  VarEnv Kind which maps kind variables to kinds.- These kinds should be used to instantiate invisible kind variables; they come from an enclosing class for an associated type/data family.tcInferTyApps also arranges to saturate any trailing invisible arguments of a type-family application, which is usually the right thing to do tcInferTyApps_nosat does not do this saturation; it is used only by ":kind" in GHCighcApply a type of a given kind to a list of arguments. This instantiates invisible parameters as necessary. Always consumes all the arguments, using matchExpectedFunKind as necessary. This takes an optional  VarEnv Kind which maps kind variables to kinds.- These kinds should be used to instantiate invisible kind variables; they come from an enclosing class for an associated type/data family.tcInferTyApps also arranges to saturate any trailing invisible arguments of a type-family application, which is usually the right thing to do tcInferTyApps_nosat does not do this saturation; it is used only by ":kind" in GHCighcThis instantiates invisible arguments for the type being checked if it must be saturated and is not yet saturated. It then calls and uses the result from checkExpectedKindX to build the final typeghcNew unification variable '_' for a wildcardghc=Create a TyConBinder for a user-written type variable binder.ghc Kind-check a Q . Used in inferInitialKind$ (for tycon kinds and other kinds).-This function does not do telescope checking.ghcKind-check a declaration header against a standalone kind signature. See Note [kcCheckDeclHeader_sig]ghcCheck the result kind annotation on a type constructor against the corresponding section of the standalone kind signature. Drops invisible binders that interfere with unification.ghcSkolemise the Qs in an Q with the supplied .ghcBring into scope the binders of a PolyTcTyCon Used for the type variables of a type or class decl in the "kind checking" and "type checking" pass, but not in the initial-kind run.ghcGeneralize some of the free variables in the given type. All such variables should be *kind* variables; any type variables should be explicitly quantified (with a forall ) before now.The WantedConstraints are un-solved kind constraints. Generally they'll be reported as errors later, but meanwhile we refrain from quantifying over any variable free in these unsolved constraints. See Note [Failure in local type signatures].But in all cases, generalize only those variables whose TcLevel is strictly greater than the ambient level. This "strictly greater than" means that you likely need to push the level before creating whatever type gets passed here.Any variable whose level is greater than the ambient level but is not selected to be generalized will be promoted. (See [Promoting unification variables] in  GHC.Tc.Solver. and Note [Recipe for checking a signature].)The resulting KindVar are the variables to quantify over, in the correct, well-scoped order. They should generally be Inferred, not Specified, but that's really up to the caller of this function.ghcSpecialised version of , but with empty WantedConstraints, so no filtering is needed i.e. kindGeneraliseAll = kindGeneralizeSome emptyWCghcSpecialized version of , but where no variables can be generalized, but perhaps some may need to be promoted. Use this variant when it is unknowable whether metavariables might later be constrained.To see why this promotion is needed, see Note [Recipe for checking a signature], and especially Note [Promotion in signatures].ghcChecks that the return kind in a data declaration's kind signature is permissible. There are three cases:If dealing with a data, newtype,  data instance, or newtype instance- declaration, check that the return kind is Type.If the declaration is a newtype or newtype instance and the UnliftedNewtypes extension is enabled, this check is slightly relaxed so that a return kind of the form TYPE r (for some r) is permitted. See )Note [Implementation of UnliftedNewtypes] in  GHC.Tc.TyCl.If dealing with a  data family declaration, check that the return kind is either of the form: TYPE r (for some r), ork (where k% is a bare kind variable; see #12369))See also Note [Datatype return kinds] in  GHC.Tc.TyClghc2Checks that the result kind of a class is exactly  Constraint<, rejecting type synonyms and type families that reduce to  Constraint . See #16826.ghcMake an appropriate message for an error in a function argument. Used for both expressions and types.ghc3Add a "In the data declaration for T" or some such. ghcThe deriving strategyghcThe typechecked deriving strategy and the tyvars that it binds (if using S).ghcargument typesghcof these kindsghc expected kind of the whole tupleghcFunction (for printing only)ghcFunctionghcArgsghc(f args, result kind)ghcFunction (for printing only)ghcFunctionghcArgsghc(f args, result kind)ghc"type we're checking (for printing)ghctype we're checkingghcthe known kind of that typeghcthe expected kindghcof the thing being checkedghc What sort of  is being checkedghcBinders in the headerghcThe result kindghcA suitably-kinded TcTyConghcof the thing being checkedghc What sort of  is being checkedghcBinders in the headerghc/The result kind. AnyKind == no result signatureghc%A suitably-kinded generalized TcTyConghcof the thing being checkedghc What sort of  is being checkedghcBinders in the headerghcThe result kindghc%A suitably-kinded generalized TcTyConghcof the thing being checkedghc What sort of  is being checkedghcThe result kindghc)A suitably-kinded non-generalized TcTyConghc;Standalone kind signature, fully zonked! (zonkTcTypeToType)ghcof the thing being checkedghc What sort of  is being checkedghcBinders in the headerghc/The result kind. AnyKind == no result signatureghcA suitably-kinded, fully generalised TcTyCon Postcondition to (kcCheckDeclHeader_sig sig_kind n f hs_tvs kc_res_ki): kind(returned PolyTcTyCon) = sig_kindghc0the result kind from the separate kind signatureghc+the result kind from the declaration headerghcneedn't be zonkedЃŃՃ҃˃Ӄʃ΃σ̃ƒȃǃɃу̓Ã׃ƃփԃăǃƒÃăŃƃȃɃʃ˃̃̓΃σЃу҃ӃԃՃփ׃NoneghcFind the location of the top-level context of a HsType. For example:  forall a b. (Eq a, Ord b) => blah ^^^^^^^^^^^^^  If there is none, return Nothingghc0If there are no wildcards, return a LHsSigWcType,,None `ghc A variant of tcPat that takes a custom originghc:Convenient wrapper for calling a matchExpectedXXX functionghcCheck that a pattern isn't a GADT, or doesn't have existential variables, in a situation in which that is not permitted (inside a lazy pattern, or in arrow notation).ghcatternsghctypes of the patternsghcchecker for the bodyghc(origin to use if the type needs inst'ingghcFully refined result typeghcTranslated patternghcType of the patternghcThe TyCon that this data constructor actually returns. In the case of a data family, this is the representation TyCon.ghcThe type of the pattern. In the case of a data family, this would mention the family TyConghc existentialsghcargument types  None`gNone aLghcWarn the user about polymorphic local binders that lack type signatures.ghcThe location of the first pattern synonym binding (for error reporting)None 9cghcA monad for type synonym cycle checking, which keeps track of the TyCons which are known to be acyclic, or a failure message reporting that a cycle was found.ghc Test if a 8 is acyclic, short-circuiting if we've seen it already.ghcChecks if any of the passed in s have cycles. Takes the   of the home package (as we can avoid checking those TyCons: cycles never go through foreign packages) and the corresponding LTyClDecl Name for each (, so we can give better error messages.  None r ghcGiven a . of an instantiated signature (note that the  must be knot-tied consistently with the actual implementation) and a + constructed from the implementor of this interface, verify that the actual implementation actually matches the original interface.Note that it is already assumed that the implementation *exports* a sufficient set of entities, since otherwise the renaming and then typechecking of the signature  would have failed.ghc Checks if a p is "defined". In general, for hsig files we can't assume that the implementing file actually implemented the instances (they may be reexported from elsewhere). Where should we look for the instances? We do the same as we would otherwise: consult the EPS. This isn't perfect (we might conclude the module exports an instance when it doesn't, see #9422), but we will never refuse to compile something.ghc For a module modname of type  , determine the list of extra "imports" of other requirements which should be considered part of the import of the requirement, because it transitively depends on those requirements by imports of modules from other packages. The situation is something like this:unit p where signature X signature Y import Xunit q where dependency p[X=,Y=] signature A signature BAlthough q's B does not directly import A, we still have to make sure we process A first, because the merging process will cause B to indirectly import A. This function finds the TRANSITIVE closure of all such imports we need to make.ghcLike implicitRequirements', but returns either the module name, if it is a free hole, or the instantiated unit the imported module is from, so that that instantiated unit can be processed and via the batch mod graph (rather than a transitive closure done here) all the free holes are still reachable.ghcGiven a  , make sure it is well typed. This is because unit IDs come from Cabal, which does not know if things are well-typed or not; a component may have been filled with implementations for the holes that don't actually fulfill the requirements.ghcTop-level driver for signature instantiation (run when compiling an hsig file.)ghcTop-level driver for signature merging (run after typechecking an hsig file).ghc The list of s of *non-exported* ms which this m may refer to. A non-exported m1 should be kept after thinning if an *exported* m (or , perhaps) refers to it; we can't decide to keep it by looking at the exports of a module after thinning. Keep this synchronized with  rnIfaceDecl.ghcGiven a local ), merge all inherited requirements from z) into this signature, producing a final ? that matches the local signature and all required signatures.ghcAdd on the necessary transitive information from the merged signature to the z of the result of merging. This propagates the orphan instances which were in the transitive closure of the signature through the merge.ghcTop-level driver for signature instantiation (run when compiling an hsig file.)ghcCheck if module implements a signature. (The signature is always un-hashed, which is why its components are specified explicitly.)ghcGiven , instantiate a  from the indefinite library to use the actual implementations of the relevant entities, checking that the implementation matches the signature.ghc+From the signature resulting from the mergeghcFrom the original signature  None tghc PatSyn NameghcPatSyn type (UniBidirExplicitBidir)ghc Whether infixghcPattern of the PatSynghcPattern arguments and types. These must have a syntactically fixed RuntimeRep as per Note [Fixed RuntimeRep] in GHC.Tc.Utils.Concrete.ghc Pattern type ghc Type) Maybe where {} 'Then in order to typecheck the default F+ instance, we must apply the substitution #[k :-> (Type -> Type), a :-> Maybe] to F's binders, which are [k, a, (b :: k)]#. The result should look like this: ? type F (Type -> Type) Maybe (b :: Type -> Type) = (Proxy (Type -> Type) Maybe, Proxy $(Type -> Type) (b :: Type -> Type)) 9Making this work requires some care. There are two cases: If we encounter a type variable in the domain of the substitution (e.g., k or a+), then we apply the substitution directly.Otherwise, we substitute into the type variable's kind (e.g., turn b :: k to b :: Type -> Type=). We then return an extended substitution where the old b (of kind k) maps to the new b (of kind  Type -> Type).This step is important to do in case there are later occurrences of b, which we must ensure have the correct kind. Otherwise, we might end up with Proxy @(Type -> Type) (b :: k) on the right-hand side of the default instance, which would be completely wrong. Contrast . function with similar substitution functions: substTyVars does not substitute into the kinds of each type variable, nor does it extend the substitution.  substTyVars8 is meant for occurrences of type variables, whereas  substATBndrs is meant for binders.substTyVarBndrs does substitute into kinds and extends the substitution, but it does not apply the substitution to the variables themselves. As such, substTyVarBndrs returns a list of s rather than a list of s.  None 1!ghcInformation about the arguments to the class in a stock- or newtype-derived instance. For a deriving2-generated instance declaration such as this one: instance Ctx => Cls cls_ty_1 ... cls_ty_m (TC tc_arg_1 ... tc_arg_n) where ...  corresponds to cls_ty_1 ... cls_ty_m. corresponds to TC. corresponds to tc_arg_1 ... tc_arg_n.See &Note [DerivEnv and DerivSpecMechanism] in GHC.Tc.Deriv.Utils for a more in-depth explanation, including the relationship between  and .A ? value can be seen as a more structured representation of the  denv_inst_tys in a DerivEnv , as the  denv_inst_tys is equal to dit_cls_tys ++ [( dit_tc dit_tc_args]?. Other parts of the instance declaration can be found in the DerivEnv. For example, the Cls* in the example above corresponds to the denv_cls field of DerivEnv./Similarly, the type variables that appear in a + value are the same type variables as the denv_tvs in the parent DerivEnv. Accordingly, if we are inferring an instance context, the type variables will be , skolems. Otherwise, they will be ordinary s. See Note [Overlap and deriving] in GHC.Tc.Deriv.Infer.ghcThe cached results of instantiating each data constructor's field types using P data_con  . See 2Note [Instantiating field types in stock deriving].This field is only used for stock-derived instances and goes unused for newtype-derived instances. It is put here mainly for the sake of convenience.ghcThe representation types for 7 (for data family instances). Otherwise the same as .ghcThe representation tycon for 7 (for data family instances). Otherwise the same as .ghc!Arguments to the type constructorghcType constructor for which the instance is requested (last arguments to the type class)ghc,Other arguments to the class except the lastghcA declarative description of an auxiliary binding that should be generated. See Note [Auxiliary binders]8 for a more detailed description of how these are used.ghc$tag2con:: Given a tag, computes the corresponding data constructorghc$maxtag: The maximum possible tag value among a data type's constructorsghc$t: The DataType representation for a Data instanceghc$c: The Constr representation for a Data instanceghc Retrieve the +" of the binding that the supplied  describes.ghcshowString :: String -> ShowSghc(showsPrec :: Show a => Int -> a -> ShowSghcshows :: Show a => a -> ShowSghc6Generate the full code for an auxiliary binding. See =Note [Auxiliary binders] (Wrinkle: Reducing code duplication).ghcGenerate the code for an auxiliary binding that is a duplicate of another auxiliary binding. See =Note [Auxiliary binders] (Wrinkle: Reducing code duplication).ghc:Generate the type signature of an auxiliary binding. See Note [Auxiliary binders].ghcTake a  of s and generate the code for auxiliary bindings based on the declarative descriptions in the supplied s. See Note [Auxiliary binders].ghcMake a function binding. If no equations are given, produce a function with the given arity that produces a stock error.ghcMake a function binding. If no equations are given, produce a function with the given arity that uses an empty case expression for the last argument that is passes to the given function to produce the right-hand side.ghcProduces a function binding. When no equations are given, it generates a binding of the given arity and an empty case expression for the last argument that it passes to the given function to produce the right-hand side.ghcProduces a function binding. When there are no equations, it generates a binding with the given arity that produces an error based on the name of the type of the last argument.ghcGenerate the name for an auxiliary binding, giving it a fresh . Returns an + + with an underlying System . See Note [Auxiliary binders].ghc$getPossibleDataCons tycon tycon_args returns the constructors of tycon0 whose return types match when checked against  tycon_args.7See Note [Filter out impossible GADT data constructors]ghc;Look up a data constructor's instantiated field types in a . See 2Note [Instantiating field types in stock deriving].ghc tycon arg_tys' constructs a cache that maps each of tycon's data constructors to their field types, with are to be instantiated with arg_tys. See 2Note [Instantiating field types in stock deriving].ghc#Apply a substitution to all of the s contained in a . See 2Note [Instantiating field types in stock deriving]' for why we need to substitute into a  in the first place.ghc Zonk the s in a  value to s. See Note [What is zonking?] in GHC.Tc.Zonk.Type.This is only used in the final zonking step when inferring the context for a derived instance. See Note [Overlap and deriving] in GHC.Tc.Deriv.Infer.&&None A ghc Forall typeghc.Type app, variable other than in last argumentghc2Type app, variable only in last argument. The two ,s are the function and argument parts of  fun_ty arg_ty, respectively.ghcTuple type. The [a]= is the result of folding over the arguments of the tuple.ghc Function typeghc$The variable itself, contravariantlyghcThe variable itselfghcDoes not contain variableghc#Return all syntactic subterms of a  that are applied to the  argument. This determines what constraints should be inferred for derived *, 5, and 6 instances in GHC.Tc.Deriv.Infer. For instance, if we have: :data Foo a = MkFoo Int a (Maybe a) (Either Int (Maybe a)) Then the following would hold: a Int would return [], since Int' does not contain the type variable a at all. a a would return []. Although the type a contains the type variable a , it is not applied to a!, which is the criterion that  checks for. a (Maybe a) would return [Maybe], as Maybe is applied to a. a (Either Int (Maybe a)) would return [Either Int, Maybe]%. Both of these types are applied to a through composition. As used in GHC.Tc.Deriv.Infer, the ! argument will always come from , so it is important that the  comes from P to match. Make sure not to take the  from B, as these differ from the P when the data type is a GADT. (See #22167 for what goes wrong if B is used.)ghcVariable to look forghc How to foldghcType to processNone ghcSee documentation of ; that function uses the fields of this type to interpret the structure of a type when that type is considered as an argument to a constructor that is being represented with Rep1.ghc Called by 6; generates a list of types, each of which must be a * in order for the Generic1- instance to work. For instance, if we have: :data Foo a = MkFoo Int a (Maybe a) (Either Int (Maybe a)) Then  a (f (g a)) would return  [Either Int], as a derived Generic1 instance would need to call  at that type. Invoking  a* on any of the other fields would return []. is very similar in spirit to  in GHC.Tc.Deriv.Functor. Just like with , it is important that the  argument come from P%. (See #22167 for what goes wrong if B is used.)ghc argTyFold3 implements a generalised and safer variant of the arg function from Figure 3 in  (http://dreixel.net/research/pdf/gdmh.pdf. arg is conceptually equivalent to: arg t = case t of _ | isTyVar t -> if (t == argVar) then Par1 else Par0 t App f [t'] | representable1 f && t' == argVar -> Rec1 f App f [t'] | representable1 f && t' has tyvars -> f :.: (arg t') _ -> Rec0 twhere argVar is the last type variable in the data type declaration we are finding the representation for. argTyFold is more general than arg because it uses . to abstract out the concrete invocations of Par0, Rec0, Par1, Rec1, and :.:. argTyFold is safer than arg because arg would lead to a GHC panic for some data types. The problematic case is when t0 is an application of a non-representable type f to argVar: App f [argVar] is caught by the _% pattern, and ends up represented as Rec0 t. This type occurs free in the RHS of the eventual Rep1 instance, which is therefore ill-formed. Some representable1 checks have been relaxed, and others were moved to canDoGenerics1.ghc-Variant of foldr for producing balanced listsNone 2ghc A list of  constraints to simplify when inferring a derived instance's context. For the stock, newtype, and via- deriving strategies, these will consist of  s, and for DeriveAnyClass, these will consist of 0s. Here is an example to illustrate the latter: class Foo a where bar :: forall b. Ix b => a -> b -> String default bar :: forall y. (Show a, Ix y) => a -> y -> String bar x y = show x ++ show (range (y, y)) baz :: Eq a => a -> a -> Bool default baz :: Ord a => a -> a -> Bool baz x y = compare x y == EQ data Quux q = Quux deriving anyclass Foo Then it would generate two s, one for each method: [ SubTypePredSpec { stps_ty_actual = forall y. (Show (Quux q), Ix y) => Quux q -> y -> String , stps_ty_expected = forall b. (Ix b) => Quux q -> b -> String , stps_ty_origin = DerivClauseCtxt } , SubTypePredSpec { stps_ty_actual = Ord (Quux q) => Quux q -> Quux q -> Bool , stps_ty_expected = Eq (Quux q) => Quux q -> Quux q -> Bool , stps_ty_origin = DerivClauseCtxt } ] (Note that the type variable q is bound by the data type Quux , and thus appears free in the s and s.)See ?Note [Gathering and simplifying constraints for DeriveAnyClass] in GHC.Tc.Deriv.Infer! for an explanation of how these /s are used to compute implication constraints.ghcA  specifies a constraint to emitted when inferring the instance context for a derived instance in .ghc An ordinary  that directly stores a , which will be emitted as a wanted constraint in the constraint solving machinery. This is the simple case, as there are no skolems, metavariables, or given constraints involved.ghc A special  that is only used by DeriveAnyClass. This will check if stps_ty_actual0 is a subtype of (i.e., more polymorphic than) stps_ty_expected in the constraint solving machinery, emitting an implication constraint as a side effect. For more details on how this works, see ?Note [Gathering and simplifying constraints for DeriveAnyClass] in GHC.Tc.Deriv.Infer.ghc(Whether the constraint is a type or kindghcThe origin of the constraintghc"The constraint to emit as a wantedghcThe origin of the constraintghc%The expected type. In the context of DeriveAnyClass., this is the original method type signature.ghc#The actual type. In the context of DeriveAnyClass-, this is the default method type signature.ghc-Describes how to generate instance bindings ()) and associated type family instances (+) for a particular stock-derived instance.ghcDescribes how to generate associated type family instances for a stock-derived instance. This function takes the same arguments as the  function but returns a list of is instead. Generating type family instances is done separately from  since the type family instances must be generated before the instance bindings can be typechecked. See Note [Staging of tcDeriving] in  GHC.Tc.Deriv.ghcDescribes how to generate instance bindings for a stock-derived instance."This function takes two arguments: : the source location where the instance is being derived. This will eventually be instantiated with the  field of a .: information about the argument types to which a class is applied in a derived instance. This will eventually be instantiated with the  field of a ."This function returns four things: R 96: The derived instance's function bindings (e.g., !compare (T x) (T y) = compare x y)[R 9]: A list of instance specific signatures/pragmas. Most likely INLINE pragmas for class methods. : Auxiliary bindings needed to support the derived instance. As examples, derived % and ,+ instances sometimes require top-level con2tag functions. See Note [Auxiliary binders] in GHC.Tc.Deriv.Generate.[]: A list of Names for which -Wunused-binds should be suppressed. This is used to suppress unused warnings for record selectors when deriving -, 1, or Generic . See +Note [Deriving and unused record selectors].ghcRecords whether a particular class can be derived by way of an  originative deriving strategy (i.e., stock or anyclass).See Note [Deriving strategies] in  GHC.Tc.Deriv.ghcWhether GHC is processing a deriving. clause or a standalone deriving declaration.ghc'InferContext mb_wildcard is either:A deriving clause (in which case  mb_wildcard is J).A standalone deriving declaration with an extra-constraints wildcard as the context (in which case  mb_wildcard is K loc, where loc$ is the location of the wildcard.GHC should infer the context.ghc theta. is a standalone deriving declaration, where theta& is the context supplied by the user.ghc>What action to take in order to derive a class instance. See &Note [DerivEnv and DerivSpecMechanism], as well as Note [Deriving strategies] in  GHC.Tc.Deriv.ghc"Standard" classesghc GeneralizedNewtypeDerivingghc DeriveAnyClassghc  DerivingViaghcHow to generate the instance bindings and associated type family instances.ghcInformation about the arguments to the class in the derived instance, including what type constructor the last argument is headed by. See &Note [DerivEnv and DerivSpecMechanism].ghcThe newtype rep type.ghcInformation about the arguments to the class in the derived instance, including what type constructor the last argument is headed by. See &Note [DerivEnv and DerivSpecMechanism].ghcThe via typeghcThe last argument to the class.ghc0All arguments to the class besides the last one.ghcContains all of the information known about a derived instance when determining what its EarlyDerivSpec should be. See &Note [DerivEnv and DerivSpecMechanism].ghcK if user requests a particular deriving strategy. Otherwise, J.ghcThe   used to skolemise the denv_tvs in the case where the  is .ghc theta for standalone deriving (where theta( is the context of the instance).  for deriving clauses, or for standalone deriving that uses a wildcard constraint. See %Note [Inferring the instance context].ghcAll arguments to  in the derived instance.ghc-Class for which we need to derive an instanceghcUniversally quantified type variables in the instance. If the  denv_ctxt is , these will be  skolems. If the  denv_ctxt is , these will be ordinary  s. See Note [Overlap and deriving] in GHC.Tc.Deriv.Infer.&All type variables that appear in the , , , and  should come from .ghc Is this an overlapping instance?ghc0To avoid having to manually plumb everything in " throughout various functions in  GHC.Tc.Deriv and GHC.Tc.Deriv.Infer , we use #, which is a simple reader around .ghc4Is GHC processing a standalone deriving declaration?ghcIs GHC processing a standalone deriving declaration with an extra-constraints wildcard as the context? (e.g., !deriving instance _ => Eq (Foo a))ghcReturn ̃! if processing with a standalone deriving declaration or Ӄ if processing a deriving clause.ghc wc returns  if wc is L, and  if wc is I. Useful for error-reporting.ghcSet the  in a .ghc Zonk the s in a  to s. See Note [What is zonking?] in GHC.Tc.Zonk.Type.This is only used in the final zonking step when inferring the context for a derived instance. See Note [Overlap and deriving] in GHC.Tc.Deriv.Infer.ghc Convert a  to its corresponding S.ghc Zonk the s in a  to s. See Note [What is zonking?] in GHC.Tc.Zonk.Type.This is only used in the final zonking step when inferring the context for a derived instance. See Note [Overlap and deriving] in GHC.Tc.Deriv.Infer.ghcBuild a list of s, using the supplied   and ! values for each .ghc"Capture wanted constraints from a .ghcSome common validity checks shared among stock derivable classes. One check that absolutely must hold is that if an instance C (T a) is being derived, then T must be a tycon for a data type or a newtype. The remaining checks are only performed if using a deriving) clause (i.e., they're ignored if using StandaloneDeriving): The data type must have at least one constructor (this check is ignored if using EmptyDataDeriving).0The data type cannot have any GADT constructors.The data type cannot have any constructors with existentially quantified type variables.+The data type cannot have a context (e.g., data Foo a = Eq a => MkFoo).8The data type cannot have fields with higher-rank types.ghcFor some classes (eg %, ,) we allow unlifted arg types by generating specialised code. For others (eg Data!) we don't. For even others (eg Lift7), unlifted types aren't even a special consideration!ghc2Information about the type arguments to the class.ghcu if deriving an instance for this type is possible. Otherwise, it's u err, where err explains what went wrong.ghc9Used to inform error messages as to whether we are in a deriving clause or a standalone deriving declarationghc0The specs from which constraints will be createdghc? if this is standalone deriving with a user-supplied context,  if not. If it is the former, we relax some of the validity checks we would otherwise perform (i.e., "just go for it").ghcL  = allow higher rank arguments and empty data types (with no data constructors) even in the absence of the -XEmptyDataDeriving extension.None]ghcLike #, but used only in the case of the stock deriving strategy. The constraints are inferred by inspecting the fields of each data constructor. In this example: 'data Foo = MkFoo Int Char deriving Show*We would infer the following constraints (s): (Show Int, Show Char)9Note that this function also returns the type variables (s) and class arguments (`>s) for the resulting instance. This is because when deriving *-like classes, we must sometimes perform kind substitutions to ensure the resulting instance is well kinded, which may affect the type variables and class arguments. In this example: newtype Compose (f :: k -> Type) (g :: Type -> k) (a :: Type) = Compose (f (g a)) deriving stock FunctorWe must unify k with Type in order for the resulting *+ instance to be well kinded, so we return []/ [Type, f, g] for the s`s, not [k] [k, f, g]-. See Note [Inferring the instance context].ghcLike , but used only in the case of DeriveAnyClass, which gathers its constraints based on the type signatures of the class's methods instead of the types of the data constructor's field.See Note [Gathering and simplifying constraints for DeriveAnyClass] for an explanation of how these constraints are used to determine the derived instance context.ghcGiven instance (wanted) => C inst_ty , simplify wanted, as much as possible. Fail if not possible.ghc1Needed constraints (after simplification), i.e. [].None%()*1dghcRebuild an application: takes a type-checked application head expression together with arguments in the form of typechecked s and returns a typechecked application of the head to the arguments.This performs a representation-polymorphism check to ensure that the remaining value arguments in an application have a fixed RuntimeRep.=See Note [Checking for representation-polymorphic built-ins].ghcThe worker function for : simply rebuilds an application chain in which arguments are specified as typechecked s.ghcTypecheck the remaining value arguments in a partial application, ensuring they have a fixed RuntimeRep in the sense of Note [Fixed RuntimeRep] in GHC.Tc.Utils.Concrete.Example: >repPolyId :: forall r (a :: TYPE r). a -> a repPolyId = coerce$This is an invalid instantiation of coerce, as we can't eta expand it to 1\@r \@(a :: TYPE r) (x :: a) -> coerce @r @a @a xbecause the binder x. does not have a fixed runtime representation.ghc:Count visible and invisible value arguments in a list of  arguments.ghcCounts the number of invisible term-level arguments applied by an q7. Precondition: this wrapper contains no abstractions.ghcthe function being appliedghcthe arguments to the functionghcresult type of the applicationghcthe function being appliedghcthe arguments to the function00None%&/1ghcType-check a MatchGroup.ghccheckArgCounts takes a [RenamedMatch] and decides whether the same number of args are used in each equation.ghc Case contextghcType of scrutineeghcThe case alternativesghc!Type of the whole case expressionghcExpected pattern types.ghc"Expected result-type of the Match.None -ghc'Arrow type constructor, of kind *->*->*ghc5Typechecking for case command alternatives. Used for V.ghcTypechecking for V and V.ghc2Type-checked Arrow class methods (arr, (>>>), ...)ghcType of the scrutinee.ghccase alternativesNone )*1tghcArgumentghcType expected by the functionNone 1ghc!Slightly more general version of  that allows the caller to specify the shape of the result of the syntax operatorghcTypecheck a syntax operator The operator is a variable or a lambda at this stage (i.e. renamer output)tghcDesugars a record update $record_expr { fld1 = e1, fld2 = e2 } into a case expression that matches on the constructors of the record r), as described in Note [Record Updates].Returns a renamed but not-yet-typechecked expression, together with the result type of this desugared record update.ghcPretty-print a collection of lines, adding commas at the end of each line, and adding "and" to the start of the last line.ghc+Disambiguate the fields in a record update.Most of the disambiguation has been done by the renamer; this function performs a final type-directed disambiguation pass, as explained in Note [Type-directed record disambiguation].ghc=Checks if the given name is closed and emits an error if not.%See Note [Not-closed error messages].ghc"shape of syntax operator argumentsghcoverall result typeghcType check any arguments, takes a type per hole and a multiplicity per arrow in the shape.€ghcArgument types. This function ensures they all have a fixed runtime representation.Àghc/the operator to check (for error messages only)ghcshape it is expected to haveghccheck the argumentsghcreturns a wrapper :: (type of right shape) "->" (type passed in)Āghc1the operator we are checking (for error messages)ghcargument shapesghc result shapeghccheck the argumentsghcreturns a wrapper to be applied to the original function, wrappers to be applied to arguments and a wrapper to be applied to the overall expressionghc record_expr2: expression to which the record update is appliedghcPossible parent /Us for the record update, with the associated constructors and field labelsghcthe record update fieldsghc-the expected result type of the record update``````````````NoneNone (ghcCheck that the type has the form (IO t) or (t) , and that t satisfies the given predicate. When calling this function, any newtype wrappers (should) have been already dealt with by normaliseFfiType.We also check that the Safe Haskell condition of FFI imports having results in the IO monad holds.ŀghc0Reason why a type in an FFI signature is invalidƀghc&Check validity for a type of the form Any :: k.This function returns: Just IsValid for  Any :: Type and Any :: UnliftedType,Just (NotValid ..) for Any :: k if k is not a kind of boxed types,Nothing if the type is not Any.None ghc%Stuff needed to process a datatype's  `deriving` clausesghc error contextghc4Variables that scope over the deriving clause. See !Note [Scoped tyvars in a TcTyCon] in GHC.Core.TyCon.ghcThe data tycon for normal datatypes, or the *representation* tycon for data familiesǀghc(Process the derived classes in a single deriving clause.Ȁghc Process a single predicate in a deriving clause.This returns a @& because the user might try to derive Typeable, which is a no-op nowadays.ɀghc Generate the  for the required instance, plus any auxiliary bindings required (see Note [Auxiliary binders] in GHC.Tc.Deriv.Generate) and any additional free variables that should be marked (see +Note [Deriving and unused record selectors] in GHC.Tc.Deriv.Utils).ʀghcGenerate the associated type family instances for a derived instance.ˀghcIf , add a snippet about how not even GeneralizedNewtypeDeriving would make this declaration work. This only kicks in when an explicit deriving strategy is not given.None ( ̀ghcGet the initial kind of a TyClDecl, either generalized or non-generalized, depending on the .̀ghcMaybe return a list of Bools that say whether a type family was declared injective in the corresponding type arguments. Length of the list is equal to the number of arguments (including implicit kind/coercion arguments). True on position N means that a function is injective in its Nth argument. False means it is not.΀ghcProduce an "expected kind" for the arguments of a data/newtype. If the declaration is indeed for a newtype, then this expected kind will be the kind provided. Otherwise, it is OpenKind for datatypes and liftedTypeKind. Why do we not check for -XUnliftedNewtypes? See point  ErrorMessages. in Note [Implementation of UnliftedNewtypes]πghcFrom information about a source datacon definition, extract out what the universal variables and the GADT equalities should be. See Note [mkGADTVars].Ѐghc Check that a 9 is consistent with the one in the hs-boot file, if any.+See Note [TyCon boot consistency checking].рghc Just cls  =* this is an associated family of class clsҀghcFamily TyCon (not knot-tied)ghcDefaultsghcType checked RHSπghcThe tycon varsghcThe datacon varsghcThe matching between the template result type and the actual result typeghcThe univ. variables, the GADT equalities, and a subst to apply to the GADT equalities and existentials.None sghcUse DerivInfo for data family instances (produced by tcInstDecls1), datatype declarations (TyClDecl), and standalone deriving declarations (DerivDecl) to check and process all derived class instances.None"ghcCompares two things for equivalence between boot-file and normal code, reporting an error if they don't match up.ghc3How should we infer a type? See Note [TcRnExprMode]ghc-Instantiate inferred quantifiers only (:type)ghcInstantiate all quantifiers, and do eager defaulting (:type +d)Ӏghc9A plan is an attempt to lift some code into the IO monad.ԀghcWriter monad for accumulating errors when comparing an hs-boot or signature file with its implementing module.ghc1Top level entry point for typechecker and renamerՀghcRuns TH finalizers and renames and typechecks the top-level declarations that they could introduce.րghcIf the test in the first parameter is True, succeed. Otherwise, record the given error.׀ghcRecord an error.؀ghc0A convenience synonym for a lack of errors, for  checkBootDecl and friends.ـghc>Map over the error types in an error-accumulating computation.ڀghc/Wrap up a list of errors into a single message.ghcCompares the two things for equivalence between boot-file and normal code. Returns Nothing on success or !Just "some helpful info for user"; failure. If the difference will be apparent to the user,  Just empty is perfectly suitable.ۀghc?Run the check provided for every pair of elements in the lists.Records an error:when any two items at the same position in the two lists don't match according to the given function,(when the lists are of different lengths.܀ghc=Check that two class methods have compatible type signatures.݀ghc/Check that two associated types are compatible.ހghc4Check that two functional dependencies are the same.߀ghc0Check compatibility of two type family flavours.ghcCheck that two Bs are compatible.ghcCheck that two #s are compatible.ghc=We are implementing an abstract data declaration of the form data T+ in a signature file, with a type synonym type T tvs = rhs in the implementing module.6This function checks that the implementation is valid: 0the type synonym T is nullary, i.e. tvs is null,rhs doesn't contain any type families, foralls, or qualified types.+See Note [Synonyms implement abstract data]ghc5Is this type a valid implementation of abstract data?0Returns a list of invalid sub-types encountered.ghcGet the unqualified name of the function to use as the "main" for the main module. Either returns the default name or the one configured on the command line with -main-isghcThe returned [Id] is the list of new Ids bound by this statement. It can be used to extend the InteractiveContext via extendInteractiveContext.The returned TypecheckedHsExpr is of type IO [ Any ], a list of the bound values, coerced to Any.ghcTry the plans in order. If one fails (by raising an exn), try the next. If one succeeds, take it.ghcTypecheck (and lift4) a stmt entered by the user in GHCi into the GHCi  environment.By lift and 'environment we mean that the code is changed to execute properly in an IO monad. See Note [Interactively-bound Ids in GHCi] in GHC.Driver.Env for more details. We do this lifting by trying different ways (plans) of lifting the code into the IO monad and type checking each plan until one succeeds.ghcTypecheck the statements given and then return the results of the statement in the form 'IO [Any]'.ghcGenerate a typed ghciStepIO expression (ghciStep :: Ty a -> IO a)ghc:tcRnExpr just finds the type of an expression for :typeghc)ASSUMES that the module is either in the HomePackageTable or is a package module with an interface on disk. If neither of these is true, then the result will be an error indicating the interface could not be found.ghc8Find all the Names that this RdrName could mean, in GHCighc!Dump, with a banner, if -ddump-rnghc.Extract the renamed information from TcGblEnv.ghc boot thingghc real thingghctc1, the abstract data  we are implementingghctc2, a type synonym type T tvs = ty we are using to implement tc1ghc tvsghc ty!! None 9ghcThis is a value of type a with potentially a CoreExpr-shaped hole in it. This is used to deal with cases where we are potentially handling pattern match failure, and want to later specify how failure is handled.ghcWe represent the case where there is no hole without a function from , like this, because sometimes we have nothing to put in the hole and so want to be sure there is in fact no hole.ghcWhat to do after matchghc-Was this equation present in the user source?=This helps us avoid warnings on patterns that GHC elaborated.For instance, the pattern  -1 :: Word gets desugared into W# -1## :: Word9, but we shouldn't warn about an overflowed literal for both of these cases.ghcThe patterns for an equation NB: We have already applied decideBangHood3 to these patterns. See Note [decideBangHood] in GHC.HsToCore.UtilsghcRun a  action inside the  monad.ghcRun a  action inside the D monad.ghc5Build a set of desugarer environments derived from a .ghcRun a & action in the context of an existing ӽghc0Get the current pattern match oracle state. See .ghcSet the pattern match oracle state within the scope of the given action. See .ghcEmit a diagnostic for the current source location. In case the diagnostic is a warning, the latter will be ignored and discarded if the relevant  is not set in the DynFlags. See Note [Discarding Messages] in .ghcIssue an error, but return the expression for (), so that we can continue reporting errors.ghcThe COMPLETE pragmas that are in scope.ghcInject a trace message into the compiled program. Whereas pprTrace prints out information *while compiling*, pprRuntimeTrace captures that information and causes it to be printed *at runtime* using Debug.Trace.trace.pprRuntimeTrace hdr doc expr*will produce an expression that looks liketrace (hdr + doc) exprWhen using this to debug a module that Debug.Trace depends on, it is necessary to import {-# SOURCE #-} Debug.Trace () in that module. We could avoid this inconvenience by wiring in Debug.Trace.trace, but that doesn't seem worth the effort and maintenance cost.ghcSee .ghcProduct is an "or" on fallibility---the combined match result is infallible only if the left and right argument match results both were.This is useful for combining a bunch of alternatives together and then getting the overall fallibility of the entire group. See  mkDataConCase for an example.ghcheaderghcinformation to outputghc expression4"f e!4 !"efqsrtNone"R ghcGenerate a fresh  of a given typeghc=All warning flags that need to run the pattern match checker.ghcCheck whether the redundancy checker should run (redundancy only)ghcCheck whether the exhaustiveness checker should run (exhaustiveness only)ghc6Check whether unnecessary bangs should be warned aboutghcDenotes whether an exhaustiveness check is supported, and if so, via which  it's controlled. Returns J if check is not supported.ghcCheck whether any part of pattern match checking is enabled for this U (does not matter whether it is the redundancy check or the exhaustiveness check).ghc7Check whether exhaustivity checks are enabled for this U1, when dealing with a single pattern (using the matchSinglePatVar function).ghc4Return True when any of the pattern match warnings () are enabled, in which case we need to run the pattern match checker.  None(Q3ghc)See Note [Case split inhabiting patterns]ghcA high-level pattern-match constraint. Corresponds to  from Figure 3 of the LYG paper.ghcA type constraint "T ~ U".ghc PhiCoreCt x e encodes "x ~ e", equating x with the  e.ghcPhiConCt x K tvs dicts ys encodes K @tvs dicts ys <- x , matching x against the  application K @tvs dicts ys , binding tvs, dicts and possibly unlifted fields ys in the process. See Note [Strict fields and variables of unlifted type].ghcPhiNotConCt x K! encodes "x D K", asserting that x can't be headed by K.ghc PhiBotCt x encodes "x ~ E", equating x to E. by K.ghcPhiNotBotCt x y! encodes "x D E", asserting that x can't be E.ghcThe return value of ghc was able to simplify the type with some local constraint from the type oracle, but N! couldn't identify a type redex.ghc5 may or may not been able to simplify the type, but N made progress either way and got rid of at least one outermost type or data family redex or newtype. The first field is the last type that was reduced solely through type family applications (possibly just the d type). This is the one that is equal (in source Haskell) to the initial type. The third field is the type that we get when also looking through data family applications and newtypes. This would be the representation type in Core (modulo casts). The second field is the list of Newtype #s that we looked through in the chain of reduction steps between the Source type and the Core type. We also keep the type of the DataCon application and its field, so that we don't have to reconstruct it in inhabitationCandidates and 1. For an example, see Note [Type normalisation].ghcAdd a bunch of  s to all the  s. Lifts  over many .ghcaddPmCtsNablas for a single PmCt.ghcTest if any of the s is inhabited. Currently this is pure, because we preserve the invariant that there are no uninhabited s. But that could change in the future, for example by implementing this function in terms of notNull  $ generateInhabitingPatterns 1 ds.ghcUpdate the COMPLETE sets of , or J4 if there was no change as per the update function.ghc A pseudo-1 for the vanilla complete set of the given data . Ex.: vanillaCompleteMatchTC @ ==> Just (Maybe, {K,J})ghcInitialise from 1 (containing all COMPLETE pragmas) if the given  were empty.ghcAdds the declared  from COMPLETE pragmas, as well as the vanilla data defn if it is a #.ghcAdds * the % from COMPLETE pragmas * and the vanilla  from the data  to the , if not already present.ghcReturn the fields of 3. Returns appropriate defaults in the other cases.ghcGet rid of *outermost* (or toplevel) * type function redex * data family redex * newtypes Behaves like i, but instead of returning a coercion, it returns useful information for issuing pattern matching warnings. See Note [Type normalisation] for details. It also initially -s the type with the bag of local constraints.See % for the meaning of the return value.NB: Normalisation can potentially change kinds, if the head of the type is a type family with a variable result kind. I (Richard E) can't think of a way to cause trouble here, though.ghcReturns L if the argument  is a fully saturated application of a closed type constructor.Closed type constructors are those with a fixed right hand side, as opposed to e.g. associated types. These are of particular interest for pattern-match coverage checking, because GHC can exhaustively consider all possible forms that values of a closed type can take on.Note that this function is intended to be used to check types of value-level patterns, so as a consequence, the = supplied as an argument to this function should be of kind Type.ghcNormalise the given source type to WHNF. If it isn't already in WHNF () , it will normalise the type and then try to step through type family applications, but not data family applications or newtypes.(This is a pretty common case of calling  and it should be efficient.ghc Is the source type in WHNF wrt. ?Returns False if the given type is not a TyCon application, or if the TyCon app head is a type family TyCon. (But not for data family TyCons!)ghcThe fuel for the inhabitation test. See Note [Fuel for the inhabitation test].ghcAdds new constraints to  and returns J# if that leads to a contradiction.0In terms of the paper, this function models the E_3 function in Figure 7 on batches of  constraints.ghcAdds new type-level constraints by calling out to the type-checker via .ghc'Add some extra type constraints to the  ; return J# if we find a contradiction (e.g.  Int ~ Bool).See Note [Pattern match warnings with insoluble Givens] in GHC.Tc.Solver.ghcAllocates a fresh ' name for PredTys.ghcAdds a single higher-level  constraint by dispatching to the various oracle functions.In terms of the paper, this function amounts to the constructor constraint case of E_ in Figure 7, which "desugars" higher-level  constraints into lower-level  constraints. We don't have a data type for  constraints and call the corresponding oracle function directly instead.Precondition: The  is not0 a type constraint! These should be handled by  before, through .ghcAdds the constraint x ~ E', e.g. that evaluation of a particular  x$ surely diverges. Quite similar to #, only that it only cares about E.ghcAdds the constraint x ~/ E to . Quite similar to *, but only cares for the E "constructor".ghc Record a x ~/ K$ constraint, e.g. that a particular  x can't take the shape of a  K in the  and return Nothing if that leads to a contradiction. See Note [TmState invariants].ghcAdd a x ~ K tvs args ts constraint. addConCt x K tvs args ts+ extends the substitution with a solution x :-> (K, tvs, args)? if compatible with the negative and positive info we have on x , reject (Nothing ) otherwise.See Note [TmState invariants].ghcAdds a x ~ y constraint by merging the two &s and record the gained knowledge in .Returns Nothing5 when there's a contradiction while merging. Returns  Just nabla when the constraint was compatible with prior facts, in which case nabla; has integrated the knowledge from the equality constraint.See Note [TmState invariants].ghc Inspects a PmCoreCt  let x = e by recording constraints for x based on the shape of the  e . Examples:For let x = Just (42, z)( we want to record the constraints $x ~ Just a, a ~ (b, c), b ~ 42, c ~ z . See  data_con_app.For let x = unpackCString# "tmp"/ we want to record the literal constraint  x ~ "tmp".For  let x = I# 42 we want the literal constraint x ~ 42'. Similar for other literals. See .Finally, if we have  let x = e and we already have seen  let y = e, we want to record x ~ y.ghcLike ', but with an effectful modifier actionghcFinds a representant of the semantic equality class of the given e. Which is the x of a  let x = e' constraint (with e semantically equivalent to e') we encountered earlier, or a fresh identifier if there weren't any such constraints.ghc Change out s which are uniquely determined by their type to a common value, so that different names for dictionaries of the same type are considered equal when building a .6See Note [Unique dictionaries in the TmOracle CoreMap]ghcMakes sure the given  is still inhabited, by trying to instantiate all dirty variables (or all variables when the 1 changed) to concrete inhabitants. It returns a  with the *same* inhabitants, but with some amount of work cached (like failed instantiation attempts) from the test.The  D E x inh, judgment form in Figure 8 of the LYG paper.ghcChecks whether the given . needs to be tested for inhabitants. Returns I when we can skip the inhabitation test, presuming it would say "yes" anyway. See Note [Shortcutting the inhabitation test].ghcReturns (Just vi) if at least one member of each ConLike in the COMPLETE set satisfies the oracle9Internally uses and updates the CompleteMatchs in vi_rcm. NB: Does not filter each CompleteMatch with the oracle; members may remain that do not satisfy it. This lazy approach just avoids doing unnecessary work.ghcThe E_{Bot} rule from the paperghcDoes a ( and then tries to look through a data family application to find the representation TyCon, to which the data constructors are attached. Returns the representation TyCon, the TyCon application args and a representational coercion that will be Refl for non-data family apps.ghcThis is the |-Inst rule from the paper (section 4.5). Tries to find an inhabitant in every complete set by instantiating with one their constructors. If there is any complete set where we can't find an inhabitant, the whole thing is uninhabited. It returns the updated  where all the attempted ConLike instantiations have been purged from the , which functions as a cache.ghc instCompleteSet fuel nabla x cls iterates over cls5 until it finds the first inhabited ConLike (as per ). Any failed instantiation attempts of a ConLike are recorded as negative information in the returned , so that later calls to this function can skip repeatedly fruitless instantiation of that same constructor.Note that the returned Nabla is just a different representation of the original Nabla, not a proper refinement! No positive information will be added, only negative information from failed instantiation attempts, entirely as an optimisation.ghcIs this # trivially inhabited, that is, without needing to perform any inhabitation testing because of strict/unlifted fields or type equalities? See Note [DataCons that are definitely inhabitable]ghc'All these types are trivially inhabitedghc"instCon fuel nabla (x::match_ty) K tries to instantiate x to K. by adding the proper constructor constraint.#See Note [Instantiating a ConLike].ghcmatchConLikeResTy _ _ ty K tries to match ty against the result type of K, res_ty. It returns a substitution s for K's universal tyvars such that  s(res_ty) equals ty if successful.Make sure that ty is normalised before.2See Note [Matching against a ConLike result type].ghc%generateInhabitingPatterns vs n nabla returns a list of at most n% (but perhaps empty) refinements of nabla that represent inhabited patterns. Negative information is only retained if literals are involved or for recursive GADTs.None )*9Vghc*Coverage checking action. Can be composed  or .ghc Composes s top-to-bottom: If a value falls through the resulting action, then it must fall through the first action and then through the second action. If a value matches the resulting action, then it either matches the first action or matches the second action. Basically the semantics of the LYG branching construct.ghc Composes s left-to-right: If a value falls through the resulting action, then it either falls through the first action or through the second action. If a value matches the resulting action, then it must match the first action and then match the second action. Basically the semantics of the LYG guard construct.ghcthrottle limit old new returns old if the number of s in new is exceeding the given limit and the old number of -s. See Note [Countering exponential blowup].None XJghcUse -XStrict to add a ! or remove a ~ See Note [decideBangHood]ghc Scrutineeghc Type of expghc,Alternatives (bndrs *include* tyvars, dicts)ghcticks to add, possiblyghc The patternghc(Expression to which the pattern is boundghcId the rhs is bound to, for desugaring strict binds (see Note [Desugar Strict binds] in GHC.HsToCore.Binds) and all the desugared bindsghcOriginal pattern55NoneYNoneYNoneZXghc(Desugaring of JavaScript foreign importsNoneZghc Foreign callsNone ZNone `/ ghc'See Note [FractionalLit representation]ghcPost-typechecker, the   field of an I8 contains (an expression for) the literal value itself.ghcEmit warnings on overloaded integral literals which overflow the bounds implied by their type.ghcEmit warnings on integral literals which overflow the bounds implied by their type.ghcEmit warnings on integral literals which overflow the bounds implied by their type.ghc Warns about  [2,3 .. 1] or [b .. a] which return the empty list. For numeric literals, only works for integral types, not floating point.ghcSee if the expression is an ( literal.ghcIf (, extract the value and type of the overloaded literal. See Note [Literals and the OverloadedLists extension]ghcIf (;, extract the value and type of the non-overloaded literal.ghc5Extract the Char if the expression is a Char literal.ghcConvert a pair (Integer, Type) to (Integer, Name) after eventually normalising the typeghcConvert a pair (Integer, Type) to (Integer, Name) without normalising the typeghc'the literal value and name of its tyconghc!Type of the whole case expressionghc All PgLits  Nonea5ghc Guarded RHSsghc Type of RHSghcRefined pattern match checking models, one for the pattern part and one for each GRHS.None %)*gghc.Smart constructor that eliminates trivial letsghcADT constructor pattern => no existentials, no local constraintsghcCreates a '[PmGrd]' refining a match var of list type to a list, where list fields are matched against the incoming tagged '[PmGrd]'s. For example: )mkListGrds "a" "[(x, True <- x),(y, !y)]" to 2"[(x:b) <- a, True <- x, (y:c) <- b, !y, [] <- c]" where b and c are freshly allocated in  mkListGrds and a is the match variable.ghc2Create a '[PmGrd]' refining a match variable to a .ghcdesugarPat _ x pat transforms pat into a '[PmGrd]', where the variable representing the match is x.ghc-, but also select and return a new match var.ghc-, but also select and return a new match var.ghc desugarListPat _ x [p1, ..., pn] is basically 6desugarConPatOut _ x $(mkListConPatOuts [p1, ..., pn]> without ever constructing the  ConPatOuts.ghcDesugar a constructor patternghcDesugar the non-empty Ves of a  .ghc.Desugar a guarded right-hand side to a single GrdTreeghc(Desugar a guard statement to a '[PmGrd]'ghc%Desugar local bindings to a bunch of ! guards. Deals only with simple let or where bindings without any polymorphism, recursion, pattern bindings etc. See Note [Long-distance information for HsLocalBinds].ghcDesugar a pattern guard pat  -e == let x = e; guards for pat <- xghcDesugar a boolean guard e ==> let x = e; True <- xNone )*6vghc7A datatype to accommodate the different call sites of . Used for extracting s from a concrete - through :. Since this is only possible for a couple of well-known -s, this is a GADT.ghc TypeRep a  None1? ghcConstruct the functions which will apply the relevant part of the QuoteWrapper to identifiers during desugaring.ghc+Represent result signature of a type familyghcRepresent result signature using a Maybe Kind. Used with data families, where the result signature can be either missing or a kind but never a named result variable.ghc1Represent injectivity annotation of a type familyÁghcIf a type implicitly quantifies its outermost type variables, return L if the list of implicitly bound type variables is empty. If a type explicitly quantifies its outermost type variables, always return L.This is used in various places to determine if a Template Haskell  should be headed by a ForallT or not.āghcIf a type explicitly quantifies its outermost type variables, return L if the list of explicitly bound type variables is empty. If a type implicitly quantifies its outermost type variables, always return L.This is used in various places to determine if a Template Haskell  should be headed by a ForallT or not.Łghc Represent a type variable binderƁghc#Represent a type wrapped in a Maybeǁghc:Construct Core expression for Nothing of a given type nameȁghc5Construct Core expression for Nothing of a given typeɁghc:Store given Core expression in a Just of a given type nameʁghc5Store given Core expression in a Just of a given typeˁghcTrue for a  type data declaration. See Note [Type data declarations] in GHC.Rename.Moduleǁghc%Name of the TyCon of the element typeȁghcThe element typeɁghc%Name of the TyCon of the element typeʁghcThe element typeNonepNone #(ghc matchSimply is a wrapper for  which deals with the situation where we want to match a single expression against a single pattern. It returns an expression.́ghc'Use this pattern synonym to match on a R.2N.B.: View patterns can occur inside HsExpansions.ghc&The scrutinee the match id is bound toghc Scrutineeghc Match kindghcPattern it should matchghcReturn this if it matchesghcReturn this if it doesn'tghcFor shadowing warning messagesghc0Scrutinee(s) see Note [matchWrapper scrutinees]ghcMatches being desugaredghcResults (usually passed to )ghcVariables rep'ing the exprs we're matching with ^ See Note [Match Ids]^ Note that the Match Ids carry not only a name, but ^ also the multiplicity at which each column has been ^ type checked.ghcType of the case expressionghc.Info about patterns, etc. (type synonym below)ghcDesugared result!NoneQ́ghc'the desugared rhs of the bind statementghc S in (>>=) :: Q -> (R -> S) -> TNone -None (Fghc)Desugar a located typechecked expression.ghc!Desugar a typechecked expression.΁ghc4The longest list length which we will desugar using build.This is essentially a magic number and its setting is unfortunate rather arbitrary. The idea here, as mentioned in Note [Desugaring explicit lists], is to avoid deforesting large static data into large(r) code. Ideally we'd want a smaller threshold with larger consumers and vice-versa, but we have no way of knowing what will be consuming our list in the desugaring impossible to set generally correctly.0The effect of reducing this number will be that build fusion is applied less often. From a runtime performance perspective, applying build more liberally on "moderately" sized lists should rarely hurt and will often it can only expose further optimization opportunities; if no fusion is possible it will eventually get rule-rewritten back to a list). We do, however, pay in compile time.ρghcThis function desugars }>: it eta-expands data constructors to make linear types work. b) where module B where import A -- ** module C where import A import BWhether or not we add or remove the import to A in B affects the orphan hash of B. But it shouldn't really affect the orphan hash of C. If we hashed only direct dependencies, there would be no way to tell that the net effect was a wash, and we'd be forced to recompile C and everything else.فghcCreates cached lookup for the  field of ModIface Hackily, we use "module" as the OccName for any module-level annotationsghc the reason we need to recompile.ghcThe old item, if it exists--NoneghcAre all implicit imports required to be safe for this Safe Haskell mode?ځghcFind object files corresponding to the transitive closure of given home modules and direct object files for pkg dependenciesNone-NonekghcFully instantiate an interface. Adds fingerprints and potentially code generator produced information.CmmCgInfos is not available when not generating code (-fno-code), or when not generating interface pragmas (-fomit-interface-pragmas). See also Note [Conveying CAF-info and LFInfo between modules] in GHC.StgToCmm.Types.ghcMake an interface from the results of typechecking only. Useful for non-optimising compilation, or where we aren't generating any object code at all ( NoBackend).None")*/17ہghcUsed to collect type info܁ghcThe main worker class See Note [Updating HieAst for changes in the GHC AST] for more information on how to add/modify instances for this.݁ghcconveniently calculate locations for things without locations attachedށghcFirst scope remains constant Second scope is used to build up the scope of a tyvar over things to its right, ala RScoped߁ghc Pattern scopeghcScope spans over everything to the right of a, (mostly) not including a itself (Includes a in a few special cases like recursive do bindings) or let/where bindingsghccontext for type signaturesghc#context for pattern synonym fields.ghccontext for imports/exportsghccontext for imports/exportsghccontext for record fieldsghc Construct an % from the outputs of the typechecker.ghc Construct an  from the outputs of the typechecker but don't read the source file again from disk.ghc2Each element scopes over the elements to the rightghc specialised to ߁ thingsghc specialised to Rghc specialised to ށ thingsghc!This instance tries to construct  nodes which include the type of the expression. It is not yet possible to do this efficiently for all expression forms, so we skip filling in the type for those inputs.7See Note [Computing the type of every node in the tree]ghcuse site of the patternghc*pattern to the right of a, not including aNone ]ghc"Main entry point to the desugarer.None-ghc`getCasts from_rep to_rep` gives us a list of primops which when applied in order convert from_rep to to_rep. See Note [PrimRep based casting]NoneghcA mapping from binders to the Ids they were expanded/renamed to.x :-> MultiVal [a,b,c] in rhoiff x's typePrimRep is not a singleton, or equivalently x's type is an unboxed tuple, sum or void.x :-> UnaryVal x'iff x's RepType is UnaryRep or equivalently x's type is not unboxed tuple, sum or void.So x :-> MultiVal [a] in rho means x is represented by singleton tuple.*x :-> MultiVal [] in rho means x is void.INVARIANT: OutStgArgs in the range only have NvUnaryTypes (i.e. no unboxed tuples, sums or voids)ghcExtend the environment, checking the UnariseEnv invariant. The id is mapped to one or more things. See Note [UnariseEnv]ghcMake alternatives that match on the tag of a sum (i.e. generate LitAlts for the tag)ghc:Build a unboxed sum term from arguments of an alternative.3Example, for (# x | #) :: (# (# #) | Int #) we call0mkUbxSum (# _ | #) [ (# #), Int ] [ voidPrimId ] which returns  1#, rubbish ghc/Return a rubbish value for the given slot type.We use the following rubbish values: * Literals: 0 or 0.0 * Pointers: `ghc-prim:GHC.Prim.Panic.absentSumFieldError`(See Note [aBSENT_SUM_FIELD_ERROR_ID] in  GHC.Core.Makeghc:MultiVal a function argument. Never returns an empty list.ghcMultiVal a DataCon argument. Returns an empty list when argument is void.None fghcOptional Stg-to-Stg passes.ghc Common subexpression eliminationghcLambda lifting closure variables, trading stack/register allocation for heap allocationghcMandatory unarise pass, desugaring unboxed tuple and sum bindersghc$Mandatory when compiling to bytecodeghcUseful for building up  getStgToDoghc9Should we lint the STG at various stages of the pipeline?ghc$Spec of what stg-to-stg passes to doghcextra vars in scope from GHCighcmodule being compiledghc input program++Noneghc4Initialize STG pretty-printing options from DynFlagsghc;Which Stg-to-Stg passes to run. Depends on flags, ways etc.ghcAre we preparing for bytecode?None ')*ϗ(ghc/Initialize HscEnv from an optional top_dir pathghcThe binutils linker on ARM emits unnecessary R_ARM_COPY relocations which breaks tables-next-to-code in dynamically linked modules. This check should be more selective but there is currently no released version where this bug is fixed. See  5https://sourceware.org/bugzilla/show_bug.cgi?id=16177 and 9https://gitlab.haskell.org/ghc/ghc/issues/4210#note_78333ghclog warning in the monad, and if there are errors then throw a SourceError exception.ghcLog warnings and throw errors, assuming the messages contain at least one error (e.g. coming from PFailed)ghcSet module to unsafe and (potentially) wipe trust information.Make sure to call this method to set a module to inferred unsafe, it should be a central and single failure method. We only wipe the trust information when we aren't in a specific Safe Haskell mode.While we only use this for recording that a module was inferred unsafe, we may call it on modules using Trustworthy or Unsafe flags so as to allow warning flags for safety to function correctly. See Note [Safe Haskell Inference].ghc.Figure out the final correct safe haskell modeghcRun Core2Core simplifier. The list of String is a list of (Core) plugin module names added via TH (cf  addCorePlugin).ghcRun Core2Core simplifier. The list of String is a list of (Core) plugin module names added via TH (cf  addCorePlugin).ghcGenerate a stripped down interface file, e.g. for boot files or when ghci generates interface files. See Note [simpleTidyPgm - mkBootModDetailsTc]ghcCompile to hard-code.ghc9Compile a stmt all the way to an HValue, but don't run itWe return Nothing to indicate an empty statement (or comment only), not a parse error.ghc9Compile a stmt all the way to an HValue, but don't run itWe return Nothing to indicate an empty statement (or comment only), not a parse error.ghcCompile a declsghcCompile a declsghcLoad the given static-pointer table entries into the interpreter. See Note [Grand plan for static forms] in GHC.Iface.Tidy.StaticPtrTable.ghc*Typecheck an expression (but don't run it)ghc-Find the kind of a type, after generalisationghcGenerate JS code for the given bindings and return the HValue for the given id ghcKeep renamed source?ghcIs this a simple interface generated after the core pipeline, or one with information from the backend? See: Note [Writing interface files]ghcThe old interface hash, used to decide if we need to actually write the new interface.ghcJust f  = _stub.c is fghc(Bindings come already annotated with fvsghc The statementghc The sourceghc Starting lineghcThe parsed statementghc The statementghc The statementghc The sourceghc Starting lineghcThe expressionghcNormalise the typeghcThe type as a stringghc-Resulting type (possibly normalised) and kindNone')*3ڴghc(Releases the external interpreter state.ghc*A type variable with kind * -> * named "m"ghc For a type m , emit the constraint 'Quote m'.ghcCompute the expected type of a quotation, and also the QuoteWrapper in the case where it is an overloaded quotation. All quotation forms are overloaded aprt from Variable quotations ('foo)ghc4Typechecking a pending splice from a untyped bracketghcForce the contents of the Serialized value so weknow it doesn't contain any bottomsghcLooks up documentation for a declaration in first the current module, otherwise tries to find it in another module via .ghcLike , looks up documentation for a function argument. If it can't find any documentation for a function in this module, it tries to find it in another module.ghc;Returns the module a Name belongs to, if it is isn't local.ghcFind the GHC name of the first instance that matches the TH typeghc8Adds a mod finalizer reference to the local environment.ghccommunicate with a remotely-running TH computation until it finishes. See Note [Remote Template Haskell] in librariesghci GHCi/TH.hs.ghcCheck a QResultghcRetrieve (or create, if it hasn't been created already), the remote TH state. The TH state is a remote reference to an IORef QState living on the server, and we have to pass this to each RunTH call we make.>The TH state is stored in tcg_th_remote_state in the TcGblEnv.ghcWe only want to produce warnings for TH-splices if the user requests so. See Note [Warnings for TH splices].ghcAnnotate (with TH.SigT) a type if the first parameter is True and if the type contains a free variable. This is used to annotate type patterns for poly-kinded tyvars in reifying class and type instances. See 5Note [Reified instances and explicit kind signatures].ghcFor every argument type that a type constructor accepts, report whether or not the argument is poly-kinded. This is used to eventually feed into . See 5Note [Reified instances and explicit kind signatures].ghcReturns M in the case that the instances were found to be class instances, or N if they are family instances.None %&ghcFailure modes for .ghc& returned J.ghcThe module was loaded without -haddock,ghcThe  was defined interactively.ghc,Finds the enclosing top level function name ghc=Update fixity environment in the current interactive context.ghcdefault ExecOptionsghc3Run a statement in the current interactive context.ghcLike , but takes a parsed statement as argument. Useful when doing preprocessing on the AST before execution, e.g. in GHCi (see GHCi.UI.runStmt).ghcRun some declarations and return any user-visible names that were brought into scope.ghcLike , but takes parsed declarations as argument. Useful when doing preprocessing on the AST before execution, e.g. in GHCi (see GHCi.UI.runStmt).ghc'Set the interactive evaluation context.(setContext imports) sets the ic_imports field (which in turn determines what is in scope at the prompt) to imports9, and updates the icReaderEnv environment to reflect it.We retain in scope all the things defined at the prompt, and kept in ic_tythings. (Indeed, they shadow stuff from ic_imports.)ghcGet the interactive evaluation context, consisting of a pair of the set of modules from which we take the full top-level scope, and the set of modules from which we take just the exports respectively.ghcReturns True if the specified module is interpreted, and hence has its full top-level scope available.ghcLooks up an identifier in the current interactive context (for :info) Filter the instances by the ones whose tycons (or classes resp) are in scope (qualified or otherwise). Otherwise we list a whole lot too many! The exact choice of which ones to show, and which to hide, is a judgement call. (see #1581)ghc=Returns all names in scope in the current interactive contextghc Returns all +s in scope in the current interactive context, excluding any that are internally-generated.ghc:Parses a string as an identifier, and returns the list of s that the identifier can refer to in the current interactive context.ghcGet the type of an expression Returns the type as described by ghcGet the kind of a typeghcParse an expression, the parsed expression can be further processed and passed to compileParsedExpr.ghcCompile an expression, run it, and deliver the resulting HValue.ghcCompile an expression, run it, and deliver the resulting HValue.ghcCompile a parsed expression (before renaming), run it, and deliver the resulting HValue.ghcCompile an expression, run it and return the result as a Dynamic.ghcL: The module was compiled. I: The module was :loaded.ghc a statement (bind or expression)None')* ghcThe default mechanism to run a pipeline, see Note [The Pipeline Monad]ghc5Default interpretation of each phase, in terms of IO.ghc!Run the JS Backend postHsc phase.ghc5Deal with foreign JS files (embed them into .o files)ghcCalculate the ModLocation from the provided DynFlags. This function is only used in one-shot mode and therefore takes into account the effect of -o/-ohi flags (which do nothing in --make mode)ghcComputes the next output filename for something in the compilation pipeline. This is controlled by several variables: @!: the last phase to be run (e.g.  stopPhase). This is used to tell if we're in the last phase or not, because in that case flags like -o may be important.v: is this intended to be a v or v build output? Temporary files just go in a fresh temporary name.:3: what was the basename of the original input file?w: the obvious thing@8: the phase we want to determine the output filename of.Maybe ModLocation: the  of the module we're compiling; this can be used to override the default output of an object file. (TODO: do we actually need this?)ghcLLVM Options. These are flags to be passed to opt and llc, to ensure consistency we list them in pairs, so that they form groups.ghcWhat phase to run after one of the backend code generators has runghcSee Note [Object merging].ghcThe next phaseghc8A ModLocation, if we are compiling a Haskell source fileghcpairs of (opt, llc) arguments  None'(/)ghcJust preprocess a file, put the result in a temp. file (used by the compilation manager during the summary phase).We return the augmented DynFlags, because they contain the result of slurping in the OPTIONS pragmasghcCompileCompile a single module, under the control of the compilation manager.This is the interface between the compilation manager and the compiler proper (hsc), where we deal with tedious details like reading the OPTIONS pragma from the source file, converting the C or assembly that GHC produces into an object file, and compiling FFI stub files.NB. No old interface can also mean that the source has changed.ghcCheck if the start is *before* the current phase, otherwise skip with a defaultghcThe preprocessor pipelineghc7The complete compilation pipeline, from start to finishghcEverything after preprocessghcinput filenameghc8optional buffer to use instead of reading the input fileghcstarting phaseghc!summary for module being compiledghc module N ...ghc... of Mghcold interface, if we have oneghcold linkable, if we have oneghc'the complete HomeModInfo, if successfulghc!summary for module being compiledghc module N ...ghc... of Mghcold interface, if we have oneghc'the complete HomeModInfo, if successfulghcinteractive or batchghcLoggerghc dynamic flagsghcunit environmentghcattempt linking in batch mode? ghc what to linkghc dynamic flagsghcunit environmentghcattempt linking in batch mode?ghc what to link<vvvvvvvvvvv<vvvvvvvvvvvNone%&')*469:;(ghc Convenience named arguments for 5 only used to make code more readable, not exported.ghc(Environment used when compiling a moduleghc;Simple wrapper around MVar which allows a functor instance.ghcThis describes what we use to limit the number of jobs, either we limit it ourselves to a specific number or we have an external parallelism semaphore limit it for us.ghcSemaphore name to useghcA  is the result of attempting to linearise a single strongly-connected component of the module graph.ghcA simple, single module all alone (which *might* have an hs-boot file, if it isn't part of a cycle)ghc-A resolved cycle, linearised by hs-boot filesghc7An actual cycle, which wasn't resolved by hs-boot filesghcA ModuleGraphNode which also has a hs-boot file, and the list of nodes on any path from module to its boot file.ghc>Describes which modules of the module graph need to be loaded.ghc&Load all targets and its dependencies.ghc0Load only the given module and its dependencies.ghcLoad only the dependencies of the given module, but not the module itself.ghcPerform a dependency analysis starting from the current targets and update the session with the new module graph.(Dependency analysis entails parsing the import directives and may therefore require running certain preprocessors.Note that each  in the module graph caches its w . These w are determined by the current session w and the OPTIONS and LANGUAGE pragmas of the parsed module. Thus if you want changes to the w to take effect you need to call this function again. In case of errors, just throw them.ghc$Perform dependency analysis like in . In case of errors, the errors and an empty module graph are returned.ghc!Perform dependency analysis like  but return a partial module graph even in the face of problems with some modules.Modules which have parse errors in the module header, failing preprocessors or other issues preventing them from being summarised will simply be absent from the returned module graph.Unlike  this function will not update  with the new module graph.ghc5Collect the instantiations of dependencies to create ξ work graph nodes. These are used to represent the type checking that is done after all the free holes (sigs in current package) relevant to that instantiation are compiled. This is necessary to catch some instantiation errors.In the future, perhaps more of the work of instantiation could be moved here, instead of shoved in with the module compilation nodes. That could simplify backpack, and maybe hs-boot too.ghcTry to load the program. See  for the different modes.+This function implements the core of GHC's --make mode. It preprocesses, compiles and loads the specified modules, avoiding re-compilation wherever possible. Depending on the backend (see  field) compiling and loading may result in files being created on disk. Calls the > after each compiling each module, whether successful or not.If errors are encountered during dependency analysis, the module  returns together with the errors an empty ModuleGraph. After processing this empty ModuleGraph, the errors of depanalE are thrown. All other errors are reported using the .ghcGeneralized version of  which also supports a custom  (for reporting progress) and ľ! (generally produced by calling .ghcFinish up after a load.ghcIf there is no -o option, guess the name of target executable by using top-level source file name as a base.ghcPrune the HomePackageTable+Before doing an upsweep, we can throw away:all ModDetails, all linked codeall unlinked code that is out of date with respect to the source fileThis is VERY IMPORTANT otherwise we'll end up requiring 2x the space at the end of the upsweep, because the topmost ModDetails of the old HPT holds on to the entire type environment from the previous compilation. Note [GHC Heap Invariants]ghc Unloadingghc Block until the result is ready.ghcGiven the build plan, creates a graph which indicates where each NodeKey should get its direct dependencies from. This might not be the corresponding build action if the module participates in a loop. This step also labels each node with a number for the output. See Note [Upsweep] for a high-level description.ghcCompile a single module. Always produce a Linkable for it if successful. If no compilation happened, return the old Linkable.ghcAdd the entries from a BCO linkable to the SPT table, see See Note [Grand plan for static forms] in GHC.Iface.Tidy.StaticPtrTable.ghc$Topological sort of the module graphCalculate SCCs of the module graph, possibly dropping the hi-boot nodes The resulting list of strongly-connected-components is in topologically sorted order, starting with the module(s) at the bottom of the dependency graph (ie compile them first) and ending with the ones at the top.'Drop hi-boot nodes (first boolean arg)?False: treat the hi-boot summaries as nodes of the graph, so the graph must be acyclicTrue: eliminate the hi-boot nodes, and instead pretend the a source-import of Foo is an import of Foo The resulting graph has no hi-boot nodes, but can be cyclicghcIf there are {-# SOURCE #-} imports between strongly connected components in the topological sort, then those imports can definitely be replaced by ordinary non-SOURCE imports: if SOURCE were necessary, then the edge would be part of a cycle.ghcDownsweep (dependency analysis)Chase downwards from the specified root set, returning summaries for all home modules encountered. Only follow source-import links.We pass in the previous collection of summaries, which is used as a cache to avoid recalculating a module summary if the source is unchanged.The returned list of [ModSummary] nodes has one node for each home-package module, plus one for any hs-boot files. The imports of these nodes are all there, including the imports of non-home-package modules.ghcUpdate the every ModSummary that is depended on by a module that needs template haskell. We enable codegen to the specified target, disable optimization and change the .hi and .o file locations to be temporary files. See Note [-fno-code mode]ghcHelper used to implement . In particular, this enables unoptimized code generation for all modules that meet some condition (first parameter), or are dependencies of those modules. The second parameter is a condition to check before marking modules for code generation.ghc3Populate the Downsweep cache with the root modules.ghc.Wrap an action to catch and handle exceptions.ghcWait for some dependencies to finish and then read from the given MVar.ghc?Wait for dependencies to finish, and then return their results.ghcBuild and run a pipelineghc;Run the given actions and then wait for them all to finish.ghcExecute each action in order, limiting the amount of parallelism by the given semaphore. ghc*The module itself (not the hs-boot module)ghcThe modules in between the module and its hs-boot file, not including the hs-boot file itself.ghcexcluded modulesghcallow duplicate rootsghcexcluded modulesghcallow duplicate rootsghcexcluded modulesghcallow duplicate rootsghcpossibly empty Bag of errors and a module graph.ghc=Instructions about how to cache interfaces as we create them.ghcHow to wrap error messages before they are displayed to a user. If you are using the GHC API you can use this to override how messages created during  are displayed to the user.ghc How much  should loadghc0The number of workers we wish to run in parallelghc3The base HscEnv, which is augmented for each moduleghc7A cache to incrementally write final interface files toghcDrop hi-boot nodes? (see below)ghcRoot module name. If Nothing, use the full graph.ghc Old summariesghcMap of old summariesghc1optional source code buffer and modification timeghc)The HPT in this HscEnv needs rehydrating.ghc+These are the modules we want to rehydrate.ghcHow to limit work parallelismghcThe basic HscEnv which is augmented with specific info for each moduleghc2Optional custom messager to use to report progressghc'The build plan for all the module nodes7 ¾žƾȾǾþ 7 þ ¾žƾǾȾNone 'D=ghc?An error thrown if the GHC API is used in an incorrect fashion.ghc"Container for information about a  .ghc.A CoreModule consists of just the fields of a ӽ that are needed for the  interface.ghcSafe Haskell modeghc Declarationsghc2Type environment for types declared in this moduleghc Module nameghcThe result of successful desugaring (i.e., translation to core). Also contains all the information of a typechecked module.ghcThe result of successful typechecking. It also contains the parser result.ghc!The result of successful parsing.ghcInstall some default exception handlers and run the inner computation. Unless you want to handle exceptions yourself, you should wrap this around the top level of your program. The default handlers output the error message(s) to stderr and exit cleanly.ghcThis function is no longer necessary, cleanup is now done by runGhc/runGhcT.ghcRun function for the  monad.0It initialises the GHC session and warnings via . Each call to this function will create a new session which should not be shared among several threads."Any errors not handled inside the ) action are propagated as IO exceptions.ghcRun function for  monad transformer.0It initialises the GHC session and warnings via . Each call to this function will create a new session which should not be shared among several threads.ghcInitialise a GHC session.If you implement a custom  you must call this function in the monad run function. It will initialise the session variable and clear all warnings.The first argument should point to the directory where GHC's library files reside. More precisely, this should be the output of ghc --print-libdir of the version of GHC the module using this API is compiled with. For portability, you should use the  ghc-paths package, available at  ,http://hackage.haskell.org/package/ghc-paths.ghcSets the program w. Note: this invalidates the internal cached module graph, causing more work to be done the next time  is called.Returns a boolean indicating if preload units have changed and need to be reloaded.ghcReturns the program w.ghcSet the w used to evaluate interactive expressions. Also initialise (load) plugins.9Note: this cannot be used for changes to packages. Use , or  and then copy the  unitState into the interactive DynFlags.ghcGet the w* used to evaluate interactive expressions.ghcParse command line arguments that look like files. First normalises its arguments and then splits them into source files and object files. A source file can be turned into a  via ghcSplitting arguments into source files and object files. This is where we interpret the -x  suffix option, and attach a (Maybe Phase) to each source file indicating the phase specified by the -x option in force, if any.ghcTo simplify the handling of filepaths, we normalise all filepaths right away. Note the asymmetry of FilePath.normalise: Linux: p/q -> p/q; p\q -> p\q Windows: p/q -> p\q; p\q -> p\q #12674: Filenames starting with a hyphen get normalised from ./-foo.hs to -foo.hs. We have to re-prepend the current directory.ghcChecks the set of new DynFlags for possibly erroneous option combinations when invoking  and friends, and if found, returns a fixed copy (if possible).ghcSets the targets for this session. Each target may be a module name or a filename. The targets correspond to the set of root modules for the program/library. Unloading the current program is achieved by setting the current set of targets to be empty, followed by .ghc"Returns the current set of targetsghcAdd another target.ghcRemove a targetghcAttempts to guess what Target a string refers to. This function implements the --make(/GHCi command-line syntax for filenames:if the string looks like a Haskell source filename, then interpret it as suchif adding a .hs or .lhs suffix yields the name of an existing file, then use that/otherwise interpret the string as a module nameghcUnwrap   or retrieve the   of the current  .ghcInform GHC that the working directory has changed. GHC will flush its cache of module locations, since it may no longer be valid.Note: Before changing the working directory make sure all threads running in the same session have stopped. If you change the working directory, you should also unload the current program (set targets to empty, followed by load).ghc Return the ! of a module with the given name.1The module must be part of the module graph (see  and ľ9). If this is not the case, this function will throw a .This function ignores boot modules and requires that there is only one non-boot module with the given name.ghcParse a module. Throws a  on parse error.ghc%Typecheck and rename a parsed module. Throws a  if either fails.ghcDesugar a typechecked module.ghcThis is the way to get access to the Core bindings corresponding to a module.  compileToCore parses, typechecks, and desugars the module, then returns the resulting Core module (consisting of the module name, type declarations, and function declarations) if successful.ghcLike compileToCoreModule, but invokes the simplifier, so as to return simplified and tidied Core.ghc Get the module dependency graph.ghcReturn True <==> module is loaded.ghc8Return the bindings for the current interactive session.ghc9Return the instances for the current interactive session.ghc#Request information about a loaded  ghc2The list of top-level entities defined in a moduleghcReturns the instances defined by the specified module. Warning: currently unimplemented for package modules.ghc!Retrieve module safe haskell modeghcLooks up a global name: that is, any top-level name in any visible module. Unlike , lookupGlobalName does not use the interactive context, and therefore does not require a preceding .ghc"get the GlobalRdrEnv for a sessionghcRetrieve all type and family instances in the environment, indexed by . Each name's lists will contain every instance in which that name is mentioned in the instance head.ghcprint a 0, adding parentheses if the name is an operator.ghc9Return module source as token stream, including comments.A   can be turned into a  using 2 if your session is fully initialised. Throws a  on parse error.ghc.Give even more information on the source than  This function allows reconstructing the source completely with .ghcGiven a source location and a StringBuffer corresponding to this location, return a rich token stream with the source associated to the tokens.ghc/Take a rich token stream such as produced from  and return source code almost identical to the original code (except for insignificant whitespace.)ghcTakes a   and possibly a  , and consults the filesystem and package database to find the corresponding  +, using the algorithm that is used for an import declaration.ghcLike , but differs slightly when the module refers to a source file, and the file has not been loaded via . In this case, / will throw an error (module not loaded), but  will check to see whether the module can also be found in a package, and if so, that package   will be returned. If not, the usual module-not-found error will be thrown.ghcCheck that a module is safe to import (according to Safe Haskell).We return True to indicate the import is safe and False otherwise although in the False case an error may be thrown first.ghcReturn if a module is trusted and the pkgs it depends on to be trusted.ghc.Set the monad GHCi lifts user statements into.;Checks that a type (in string form) is an instance of the GHC.GHCi.GHCiSandboxIO type class. Sets it to be the GHCi monad if it is, throws an error otherwise.ghc.Get the monad GHCi lifts user statements into.ghc Returns the  for a . The 2 may refer to any entity known to GHC, including s defined using runStmt.ghc&A pure interface to the module parser.ghc,Find the package environment (if one exists)We interpret the package environment as a set of package flags; to be specific, if we find a package environment file like clear-package-db global-package-db package-db blah/package.conf.d package-id id1 package-id id2we interpret this as [ -hide-all-packages , -clear-package-db , -global-package-db , -package-db blah/package.conf.d , -package-id id1 , -package-id id2 ]There's also an older syntax alias for package-id, which is just an unadorned package id id1 id2ghcSee argument to .ghcThe action to perform.ghcSee argument to .ghcThe action to perform.ghcvisible modules. An orphan instance will be returned if it is visible from at least one module in the list.ghcmodules to load. If this is not specified, we load modules for everything that is in scope unqualified.ghc6Haskell module source text (full Unicode is supported)ghc the flagsghc#the filename (for source locations)EAAAAA#PP#PPPqqqMMMMCCCCCCCCCCCCHHvvvvvx{{{{{{{{{{{{{{{{{{{{{{{{{{{||||||||||||||||||||||||||||||||||:::::}}}}}}}}}~}~}~}}}}}}}~~}}~~}}}}}}}}W}~W}}}~}W}~~~~}}}W}~}}~~~}}WW}}}}}}}}}}}}}~}}}}}99999;;;;;;;;;;;;;{{{{{{{{{{{{{{{{{{{{{{{{R{srrrrrrrrrrrrrrrrrrrrrrrrrrrsrrrrrrrrrrrrrrrrrrrrrrrssssrrsssssrrrrrrrrrrrr~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//////////////./////././//.///////////////////////////////////.////""]]]]]]]]]]]&&&(('ܾ־۾پuuu SRRSRSRRRUUUUUUUUUUUUUUUUUUUUUWWWWWWWWW I RRRRQQQQQQQQ QQoooooooooA#PPPPPPPPPipBBBvwwwwwwwwxxwwwwxxwwxwwxxwwxxwxxxxxxxxxxwwxwwxxwwxxwxxxxwwwxwxxxxxxxxxxxwxxwwwwxxxxxxxxxwwwwxxxxxxwwxxxxwwwwxwxxxwwwwxxxxxwwwwxxxxwwwxxxxxxxwxxxxwxxxwwwwwwxxwwwxwwwwwwwwwww@{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{|||||||||||||:::::::::::::::::::::::::::::}}}}}}}}}}}}}}}}}}}}}}}||}}}}}}}}}||||}}}}}}}}}}}}}}}}WWWWW}}|||||||||}}||||||W}}}}}}}}}}W||||||||||||||||}}}}}}99999999999999999;;;;;;;;;;;;;{{{{zz{{{{{{{{{{{{{{{{{{{{{{{rrrrrrrrrrrr~~~~~~~~~~~~~~~~~..------------.........................................................................................................----------------------------------------..........---......-------------------------------------------------------!!!tttt+++ ^^^^ľ؇هއ݇ۇ܇ڇ߇ tt WWWWWWWW RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTSSSSSSTTTTSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUTTTTTTTUUUUUUUUUUUUUUUTTTTSSSSSSSSSSSSSTSSTSSSTTSUTTTSSSSSUTTTTTSSTTTSSSSSSSSSSSSSSSSSSSSSSUUUUUUTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTSSSSSSSSUUUUVVUVVUVVVUUUUUVVVVVVVVVVWWVVV VVVVVVVVVVVVUUUUUVVVVVVVVVVVVVVVUUUUUU WWVVWVVVWWVWVVWVWVVVWWWVWWWVWWVVVWWVVWWWWWWWWWWWWUUUUUUUUUUUUUUUUUVVVUUUUUUUUVUUUUUUVVVV UUUWVVV WWWWWWWWWVVVVVVVVVVVVVV VVVVVVVWWVVVVVVVVVVVVVVVVVVVVVVVVVVV VVV :::::::::::::::::::::::::::::::::::: :::IIIIIIIIIIIIIIIIIIIIIIIIIIIIII RRRRQQRRQQRRRRRRRRR RRRRRRRRRRRRRRRRRRRRRRRPPPPQPPPPQQPPPPPPPPPPQQQQQQQPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQPQQPQQQQQQQQQQQPQ uwxwxxwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwttttvxvvvvvwwwwwwwwwwwttuu@!!!"" ľܾ־پ۾؇ه߇އ݇܇ۇڇ ooooooooo &&&+++]]]('(]]]]]]]]BCBCCCCCCCCCCCBE###PPPPPPPPAAAAAApqqqiHHMMMM^^^^.............................................................................................................NonehghcThe :print & friends commandsghcGive names, and bind in the interactive environment, to all the suspensions included (inductively) in a termNonehNone "vJghc&Backpack environment. NB: this has a  and not an &, because we are going to update the  as we go.ghcWhen a package we are compiling includes another package which has not been compiled, we bump the level and compile that.ghc2Table of source units which we know how to compile‚ghc,The filename of the bkp file we're compilingÂghc The sessionĂghcBackpack monad is a 7 which also maintains a little extra state beyond the , c.f. .łghc9Tiny enum for all types of Backpack operations we may do.ƂghcA compilation operation which will result in a runnable executable being produced.ǂghcA type-checking operation which produces only interface files, no object files.ȂghcA compilation operation which produces both interface files and object files.ghc'Entry point to compile a Backpack file.ɂghcCreate a temporary Session to do some sort of type checking or compilation.ʂghcCompute the dependencies with instantiations of a syntactic HsUnit; e.g., wherever you see dependency p[A= A] in a unit file, return the   corresponding to p[A= A]. The  include_sigs4 parameter controls whether or not we also include dependency signature" declarations in this calculation.%Invariant: this NEVER returns UnitId.˂ghc=Register a new virtual unit database containing a single unit̂ghcGet the current .͂ghc:Get the nesting level, when recursively compiling modules.΂ghcRun a Ă0 computation, with the nesting level bumped one.ςghcUpdate the EPS from a (. TODO move to appropriate library spot.ЂghcGet the EPS from a .тghcRun Ă in .҂ghcPrint a compilation progress message, but with indentation according to level (for nested compilation).ӂghc Creates a ? for Backpack compilation; this is basically a carbon copy of  but calling ҂, which handles indentation.Ԃghc  for Backpack messages; here we usually want the module to be qualified (so we can tell how it was instantiated.) But we try not to qualify packages so we can use simple names for them.Ղghc2Message when we initially process a Backpack unit.ւghc,Message when we instantiate a Backpack unit.ׂghc(Message when we include a Backpack unit.؂ghcThis is our version of GHC.Driver.Make.downsweep, but with a few modifications: Every module is required to be mentioned, so we don't do any funny business with targets or recursively grabbing dependencies. (We could support this in principle).We support inline modules, whose summary we have to synthesize ourself.We don't bother trying to support GHC.Driver.Make for now, it's more trouble than it's worth for inline modules.قghcUp until now, GHC has assumed a single compilation target per source file. Backpack files with inline modules break this model, since a single file may generate multiple output files. How do we decide to name these files? Should there only be one output file? This function our current heuristic, which is we make a "fake" module and use that.ڂghc>Create a new, externally provided hashed unit id from a hash.ۂ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""###############################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''''''''()))))))*********++++,,,,,---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------.................................//////01111111112222222222222222222222222223333333333444444444455555556667888888999<<<<<<<<<<<<<<<<<<<>>>>>> ???????????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@AAAAA    BBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHIIIIIJJJJJJJJKLLLLLLLMMMMMMMMMNNNNNNNNNNNNOOOOOOOOOPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSS SSSSSSSTTTTTTTTTTUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^ ^ ^ ^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` a a a a a a a a a a a a a a a a a a a a a a a a a a b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b!b!b!b!b!b!b!b!b!b!b!b!b!ccc!c!c!c!c!c!c!c!c!c!c!cccd!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d!d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d"d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$e$e$e$e$e$e$e$e$e$e%e%e%e%e%e%e%e%f%f%f%f%f%f%f%f%f%g%g%g%%g%%g%%g%%g%h%h%h%h%h%h%h%h%h%,%,%,%,%,%%,%%,%,%,%%,%,,%,%,%,%,%,%,%%,%%,%%,%%,%%,%,%,%,%,%,%,%,%,%,%,,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,&,&,&,&,&,&,&,&,&,&,&,&,&,&,&,&,&,&,&,&,&i&i&i&&i&&i&&i&&i&&i&&i&i&i&i&i&i&i&i&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&j&k&k&k&k&k&k&k&k&k&k&k&k&k&k&l&l&lll&l&l&l&l&l&l&l&l&l&l&l&l&l&l&l&l&l&l&l&l&l&l&l&l&l'l'l'l'l'l'l'l'l'l'l'l'l'l'l'l'l'l'l'l'l'l'l'l'l'l'l'l'l'l'l'l'l'l'l'm'm'm'm'm'm'm'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'o'o'o'o'o'o'o'o'o'o'o'o'o'o'o'o'o'o'o'o'p'p'p'p'q'q'r'r'r'r'r'r''''''''''''''''''''''''(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))**************************************************************************************s*s*s*s*s*s*s*s*s*s*s*s*s*s*s*s*s*s*s*s*s*s*s*s*t*t*t*t*t*t*t*t*t*t*t*t*t*t*t*t*t*t*u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+s+s+s+s+s+s+s+s+s+s+s++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,,,,,,,,,,,,,,,,-----------------------------------------------------------------------v-v-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4+4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/;/;/;/;/;/;/;/;/;/;/;/;/;/;/;/;/;/;/;/;/;/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/x0x0x0x0x0x0x0y0y0y0y0y0y0y0y0y0y0y0y0y0y0y0y0y0y0y0y0y0y0y0y0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z0z1z1z1z1z1z1z1z1z1z1z1z1z1z1z1z1z1z1z1z1{1{1{11{1{1{1{1{1{1{1{1{1{1{1{1{1{1{1{1{1{1{1{1{1{1{1{1{1{1{1{1{1{0{1{/{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|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1}1~2~2~22~22~2~2~2~22~2~2~2~2~2~2~2~2~2~2~2~2~2~2~2~2~2~2~2~2~2~2~2~2~2~2~2~2~2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222223333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333334444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555-55555555555555555555666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777778888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888899999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<================================================================================================================================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@???@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFF F F FF F F F F F F F F F F F F F F F F F F F F F F F F(FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG:G:G:G:G:G:G:G:G:G:G:G:G:G:G:G:G:G:G:G:G:G:G:G:G:G:G:G:G:G:G:G:G:G:G:G:GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG8G8G8G8G8G8G8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H88H8H8H8H8(8H8H8H8H8H8H8HH8HH8HH8HH8HH8HH8HH8HH8HH8HH8HH8HH8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H88H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8/8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8I8IIIIIIII<<I<I<II<II<II<II<II<I<I<II<II<II<I<I<I<I<I<I<I<I<I<I<I<I<I<I<I<I<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<JJ<JJ<JJ<JJ<JJ<JJ<J<J<J<J<J<J<J<J<J<J<J<J<JJ<JJ<JJ<JJ<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<J<JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L LLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM;M;M;M;MM;MM;MM;MM;MM;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;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;O;O;O;O;O;O;O;OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO)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)OO)OO)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)PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQ=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS>S>S>S>S>S>S>S>S>S>S>S>S>S>S>S>S>S>S>S>S>S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:T:TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUURUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUtUtUtUtUtUtUtUtUtUtUtUtUtUUtUUtUUtUUtUUtUtUtUtUtUtUtUtUtUtUtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWVWVWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWqWqWqWWqWWqWWqWWqWqWqWqWqWqWqWqWWqWqWqWWqWWqWqWqWqWqWqWqWqWqWqWqWqWqWqWqWqWqWqWqWqWqWqWWqWWqWWqWqWqWqWqWqWqWqWqWqWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@X@X@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-XXXXXXXXXXXXXYXYXYXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZYZYZZZZZZZZZZZZZZZZZZZZZZGGZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZrZrZrZrZrZrZrZrZrZrZrZrZrZrZrZr[r[r[r[r[r[r[r[r[r[r[r[r[r[r[r[r[[r[[r[[r[r[r[r[r[r[r[r[r[r[r[r[r[r[r[rr[r[r[r[r[[r[[r[[r[[r[[r[[r[[r[[r[[r[r[r[rr[r[r[r[r[r[r[r[r[r[r[r[r[r[[r[[r[[r[[r[[r[[r[[r[[r[[r[[r[[r[[r[[r[[r[[r[[r[r[r[r[r[r[r[r[r[r[r[r[r[r[r[r'r[r'[r'[r'[r[r[r[r[[r[[r[[r[[r[r[r[r[[r[[r[r[r[rr[r[r[r[r[r[r[r[r[r[r[r[r[r[r[r[r[r[r[r\r\r\r\r\r\r\r\r\r\r\r\r\\r\\r\r\r\r\r\rOrOr\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r'r\r\r\r\r\\r\\r\\r\\r\\r\\r\\r\\r\\r\\r\\r\r\r\r\\r\\r\\r\\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^6^6^66^6^6^6^6^66^666^6^66^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^66_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_66_6_6_6_6_6_66_6_6_6_6_6_6_666_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_66_6_6_6_6_6_6_6_6_6_6_6_6_6_6_6_6_6_6_6_6_6_6_6_6_6_6_6_6_6_6_6_6_6_6_6_6`6`6`6`6`6`6`6`6`6`6`6`6`6`6`6`6`6`6`6`6`6`6`6`6`6`6`6`6`6`6`6`6`6`6`6`6`6`````````````````````````````````````````````````````````````````````````````````````````````````aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa[aaaaaaaaaaaaaaaaaaaaaaaaa/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/./a/./a/aa/aa/aa/a/a/a/a/a/a/a/a/a/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b7b7b7b7b7b7b7b7b7b7.7.7b7.7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7cccccccccccccccccccccccccccccccccccccccccccccccccccc(ccccccccccccccccccccccccc9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9d9d9d9d9d9d9d9d9d9d9999dudududududdudduddududududududududududududududududududududududududududududududududududududududududududududududududududududududududududududududududududududududududududududududududududududududududududududududududududududududududududududududueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueue5e5e5e5e5ee5ee5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5ee5ee5ee5e5e5e5e5e5e5e5e5e5e5e5e5ee5ee5ee5ee5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5ffffff0f0f0f0f0f0f0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0h0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0j0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0k0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0lvlvlvlvlvlvllvllvllvllvllvlvlvlvlvlvlvlvlvlvlvlvlvlvlvlvlvlvlvlvlvlvlvlvlvlvlvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnoooooooooooooooooooooooooooooooooooooooooooooooooooooo1o1o1o1oo1oo1oo1o1o1o1o1o1o1o1o1o1o1o11o1o1o1o1o1o1o1o1o1o1o1o1o1o1o1oooooooooooooooooooooooooooooooooooooooooooooppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp``p`p`pppppppppppppppqpqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqrqrqrqrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssCsssssssssssssttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt````tttttttttttttttttttttttttttttttttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvuvuvuvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww5wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww3wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxwxxxxxxxxxxxxxxxwxwxwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}~}~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Q~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~€ÀĀŀƀǀȀɀʀˀ̀̀΀πЀрҀӀԀՀր׀؀ـڀۀ܀݀ހ߀\ÁāŁƁǁȁɁcʁˁ́́΁ρЁсҁӁԁՁցׁ؁فځہ܁݁ށ߁5‚ÂĂłƂǂȂɂʂ˂̂͂΂ςЂт҂ӂԂՂւׂ؂قڂۂ܂݂ނ߂ƒÃăŃƃǃȃɃʃ˃̃̓΃σЃу҃ӃԃՃփ׃؃كڃۃ܃݃ރ߃„ÄĄńƄDŽȄɄʄ˄̄̈́΄τЄф҄ӄԄՄքׄ؄لڄۄ܄݄ބ߄…ÅąŅƅDžȅɅʅ˅̅ͅ΅υЅх҅ӅԅՅօׅ؅مڅۅ܅݅ޅ߅************************************†*Æ*Ć*ņ*Ɔ*dž*Ȇ*Ɇ*ʆ*ˆ*̆*͆*Ά**φ*І*ц*҆*ӆ*Ԇ*Ն*ֆ*׆*؆*ن*چ*ۆ*܆*݆*ކ*߆*********************************************Ԇ*Ԇ*Ԇ*Ԇ****************************************************‡*Ç*ć*Ň*Ƈ*LJ*ȇ*ɇ*ʇ*ˇ*̇*͇*·*χ*Ї*ч*҇*Ӈ*ԇ*Շ*և*ׇ*؇*ه*ڇ*ۇ*܇*݇*އ*߇***************ˆÈĈňƈLjȈɈʈˈˈˈ̈ˈ͈ˈΈˈψЈш҈ӈԈՈՈֈ׈؈׈و׈ڈ׈ۈ׈܈׈݈ވ߈‰ÉĉʼnƉljȉɉʉˉ͉̉ΉωЉщ҉ӉԉՉ։׉؉ىډۉ܉݉މ߉ŠÊĊŊƊNJȊɊʊˊ̊͊ΊϊЊъҊӊԊՊ֊׊؊يڊۊ܊݊ފߊ‹ËċŋƋNjȋɋʋˋ̋͋΋ϋЋыҋӋԋՋ֋׋׋׋؋׋ً׋ڋ׋ۋ׋܋׋݋׋ދ׋ߋ׋׋׋׋׋׋ŒÌČŌƌnjȌɌʌˌ̌͌ΌȌŌόЌьҌӌԌՌ֌׌֌،ٌٌٌڌٌیٌ܌ٌ݌ތߌތVWÍčōƍǍȍɍɍʍˍ͍͍̍΍ύЍэҍӍԍԍՍԍ֍׍؍ٍڍۍ܍ݍލߍŽÎĎŎƎǎȎŎɎŎʎŎˎŎ̎Ŏ͎ŎΎŎώŎЎŎюŎҎŎӎŎԎŎՎŎ֎Ŏ׎Ŏ؎ŎَŎڎŎێŎ܎ݎގߎގގގގގގގގގގގގގގގގގÏďŏƏǏȏɏʏˏ̏͏ΏϏ̏ЏяϏҏӏԏՏ֏׏؏ُڏۏ܏ݏޏߏÐĐŐƐǐȐɐʐː̐͐ΐϐАѐҐӐԐՐ֐אِؐڐېܐݐސߐ_‘ÑđőƑǑȑɑʑˑ̑͑ΑϑБёґӑԑՑ֑בّؑڑۑܑݑޑߑ’ÒĒŒƒǒȒɒʒ˒̒͒ΒϒВђҒӒԒՒ֒גْؒڒےܒݒޒߒ“ÓēœƓǓȓɓʓ˓͓̓ΓϓГѓғӓԓՓ֓דؓٓړۓܓݓޓߓ((((((((((((((((((((((((((((((((((((((((((”ÔĔŔƔǔȔɔʔ˔͔̔ΔϔДєҔӔԔԔՔՔՔ֔ՔהՔؔՔٔՔڔՔ۔Քܔݔޔߔ •ÕĕŕƕǕȕɕʕ˕͕̕ΕϕЕѕҕӕԕՕ֕וٕؕڕەܕݕޕߕ0–ÖĖŖƖǖȖɖʖ˖̖͖Ζ0ϖЖіҖӖԖՖ֖זٖؖږۖܖݖޖߖ—×ėŗƗǗǗȗɗʗ˗̗͗ΗϗЗkїҗӗԗ՗֗חؗٗڗۗܗݗޗߗ˜ØĘŘƘǘȘɘʘ˘̘͘ΘϘИјҘӘԘ՘֘טؘ٘ژۘܘݘޘߘ ™ÙęřƙǙșəʙ˙̙͙ΙϙBЙљҙәԙՙ֙יؙٙڙۙܙݙޙߙšÚĚŚƚǚȚɚʚ˚͚̚ΚϚКњҚӚԚ՚֚ךؚٚښۚܚݚޚߚʗ˗̗͗ΗϗЗkїҗӗԗ՗חؗٗڗۗܗݗޗߗ›ÛěśƛǛțɛʛ˛̛͛ΛϛЛћқӛԛ՛֛כ؛ٛڛۛܛݛޛߛ0œÜĜŜƜƜƜǜȜȜȜɜȜʜ˜˜˜̜˜͜˜ΜϜϜϜМϜќϜҜϜӜϜԜϜ՜Ϝ֜ϜלϜ؜ٜڜۜܜݜޜߜLMMooooÝĝŝƝǝȝɝʝ˝̝͝ΝϝНѝҝӝԝ՝֝ם؝ٝڝ۝ܝݝޝߝ112žÞĞŞƞǞȞɞʞ˞̞͞ΞϞОўҞӞԞ՞֞מ؞ٞڞ۞ܞݞޞߞ``ŸßßßğßşßƟǟǟǟȟǟɟǟʟǟ˟ǟ̟ǟ͟ǟΟϟϟϟПϟџϟҟϟӟϟԟϟ՟ϟ֟ϟן؟؟؟ٟ؟ڟ؟۟؟ܟ؟ݟ؟ޟߟ àĠŠƠǠȠɠʠˠ̠͠ΠϠРѠҠӠԠՠ֠נؠ٠ڠ۠ܠݠޠߠR¡áġšơǡȡɡʡˡ̡͡ΡϡСѡҡӡԡա֡סء١ڡۡܡݡޡߡ¢âĢŢ_ƢǢȢɢʢˢ̢͢΢ϢТѢѢѢҢѢӢԢբ֢֢֢ע֢آ֢٢ڢڢڢۢڢܢڢݢޢߢߢߢߢߢߢߢߢߢߢߢߢߢ£ãģţƣǣȣɣʣˣ̣ͣΣϣУѣңӣԣգ֣ףأ٣ڣۣܣݣޣߣ¤äĤŤƤǤȤɤʤˤ̤ͤΤϤФѤҤӤԤդ֤פؤ٤ڤۤܤݤޤߤ¥åĥťƥǥȥɥʥ˥̥ͥΥϥХѥҥӥԥե֥ץإ٥ڥۥܥݥޥߥ¦æĦŦƦǦȦɦʦ˦̦ͦΦϦЦѦҦӦԦզ֦צئ٦ڦۦܦݦަߦ§çħŧƧǧȧɧʧJ˧̧ͧΧϧЧѧҧӧԧէ֧קا٧ڧۧܧݧާߧ¨èĨŨ+ƨ+Ǩ+Ȩɨʨ˨̨ͨΨϨШѨҨӨԨը֨רب٨ڨۨܨݨިߨ TT©©©é©ĩ©ũ©Ʃ©ǩ©ȩ©ɩʩ˩̩nͩΩϩЩЩЩѩЩҩЩөЩԩЩթЩ֩ЩשЩةЩ٩ЩکЩ۩ЩܩЩݩЩީЩߩЩЩЩЩЩЩЩЩЩЩЩЩЩЩЩЩЩЩЩЩЩЩЩЩ şªêĪŪƪǪȪɪʪ˪̪ͪΪϪЪѪҪӪԪժ֪תت٪ڪ۪ܪݪުߪs«ëīūƫǫȫɫʫɫ˫̫ͫΫϫЫѫҫӫԫի֫׫ث٫ګ۫ܫݫޫ߫¬ìĬŬƬǬȬɬʬˬ̬ͬάϬЬѬҬӬԬլ֬׬ج٬ڬ۬ܬݬެ߬­íĭŭƭǭȭɭʭ˭̭ͭέϭЭѭҭӭԭխ֭׭ح٭ڭۭܭݭޭ߭(®îĮŮƮǮȮɮʮˮ̮ͮήϮЮѮҮӮԮծ֮׮خٮڮۮܮݮޮ߮_¯ïįůƯǯȯɯʯ˯̯ͯίϯƫЯѯүӯԯկ֯ׯدٯگۯܯݯޯ߯ϫҫӫԫի֫׫ث٫ګ۫ܫݫޫ߫њ՚֚°ðİŰưǰȰɰʰ˰̰ͰΰϰаѰҰӰ԰հְװذٰڰ۰ܰݰް߰±ñıűƱDZȱɱʱ˱̱ͱαϱбб```ѱ`ұ`ӱԱԱձֱױرٱڱ۱sܱݱޱ߱ҫӫԫի֫׫ث٫ګ۫ϫ²òޫ߫ܫݫIJŲƲDzȲɲʲ˲̲ͲβϲвβѲβҲβӲβԲβղβֲβײβزβٲβڲβ۲βܲβݲβ޲ֱ߲³óijųƳdzȳɳʳ˳̳њͳγϳгѳҳӳԳճֳ׳سٳڳ۳ܳݳ޳߳´ôĴŴƴǴȴɴʴ˴̴ʹδϴдѴҴӴԴմִ״شٴڴ۴ܴݴ޴ߴTµõĵŵƵǵȵɵʵ˵̵͵εϵеѵҵӵԵյֵ׵صٵڵ۵ܵݵ޵ߵֱ¶ųȳööĶĶŶƶǶǶǶȶǶɶǶʶǶ˶Ƕ̶ǶͶǶζǶ϶жжжѶжҶжӶжԶжжųжնжֶжжжжж׶жضжٶڶ۶ܶݶ޶߶·÷ķķķŷķƷķǷȷɷʷ˷ʷ̷ʷͷηϷзѷҷӷԷշַ׷طٷڷ۷ܷݷ޷߷¯¸øĸֱŸƸǸȸɸʸ˸̸͸θϸиѸҸӸԸոָ׸ظٸڸ۸ܸݸ޸߸¶ȳ³ųųض׶ҶѶض׶ض׶_¹ùĹŹƹǹȹɹʹ˹̹͹ιϹйѹҹӹԹչֹ׹عٹڹ۹ܹܹܹݹܹ޹ܹ߹ºúĺźƺǺȺɺʺ˺̺ͺκϺкѺҺӺԺպֺ׺غٺںۺܺݺ޺ߺܹ.׺غߺкѺ»ûĻŻƻǻȻɻʻ˻̻ͻλϻлѻһӻԻջֻ׻Ԕػٻڻۻۻܻݻ޻߻ߡ¼üļżƼǼȼɼʼ˼̼ͼμϼмѼҼӼԼռּ׼ؼ׼ټ׼ڼ׼ۼ׼ܼݼ޼߼½ýĽŽƽǽȽɽʽ˽̽ͽνϽнѽҽӽԽսֽ׽ؽٽڽ۽ܽݽ޽߽ ¾þľžƾǾȾɾʾ˾̾̾̾;̾ξ̾Ͼ̾о̾ѾҾӾԾվ־־־׾־ؾ־پ־ھ۾ܾݾ޾߾¿ÿĿſƿƿǿƿȿƿɿƿʿƿ˿ƿ̿ƿͿƿοƿϿƿпƿѿҿҿҿӿԿտֿ׿ؿٿڿۿܿݿ޿߿߿߿oMMpMMMM`P@GGGGGG______͖׺                                       FFzzzzܹܹܹܹܹܹp       ɺ                                                        ܹܹܹܹܹܹ[ɺغn/ڧ       !####. BBBBBKG        Q\\\   2CCVVeRR,[b +++++++333344ۏ44xyyyyy8H88888e8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H8H88888 ;;;;;;;;;; )))))))))):::::::::tt¯T6////5uuuuuuuuuuuu55yyyyyzzzz `ܹܹ ʯ ***111 vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvsvvvvvvvvvvɺ._óijƳب~ǭ4                       ghc-9.8.2-f9d1GHC.Prelude.BasicGHC.Utils.TraceGHC.Utils.MonadGHC.Driver.PluginsGHC.Utils.FingerprintGHC.Utils.Misc GHC.PlatformGHC.Utils.Exception GHC.Unit.InfoGHC.Core.TyCo.FVsGHC.Data.IOEnvGHC.HsToCore.MonadGHC.Core.Opt.SpecConstrGHC.Data.Graph.Directed GHC.SysToolsGHC.Data.MaybeGHC.SysTools.BaseDirGHC.ByteCode.AsmGHC.Types.BasicGHCGHC.Runtime.InterpreterGHC.Runtime.Interpreter.ProcessGHC.Driver.MakeSemGHC.Data.List.InfiniteGHC.Platform.ConstantsGHC.Data.FastMutInt GHC.Data.BoolGHC.Settings.ConfigGHC.Utils.ConstantsGHC.Utils.GlobalVarsGHC.Utils.IO.UnsafeGHC.Utils.Panic.PlainGHC.Data.FastStringGHC.Utils.BufHandle GHC.Utils.PprGHC.Utils.Ppr.ColourLanguage.Haskell.Syntax.Basic!Language.Haskell.Syntax.Extension#Language.Haskell.Syntax.Module.NameGHC.Tc.Types.LclEnvGHC.Iface.TypeGHC.Tc.Types.OriginGHC.Types.Name.OccurrenceGHC.Unit.TypesGHC.Utils.OutputableGHC.Utils.PanicGHC.Types.Id.InfoGHC.Builtin.PrimOpsGHC.Core.UnfoldGHC.Types.UniqueGHC.Types.Name GHC.Types.VarGHC.Tc.Utils.TcTypeGHC.Core GHC.Types.IdGHC.Core.TyConGHC.Types.TyThingGHC.Core.Coercion GHC.Core.TypeGHC.Core.TyCo.RepGHC.Core.MultiplicityGHC.Core.TyCo.PprGHC.Types.Unique.FMGHC.Data.StrictGHC.Data.FiniteMapGHC.Utils.LexemeGHC.Types.Unique.Supply Language.Haskell.Syntax.ConcreteGHC.Settings.ConstantsGHC.Cmm.Dataflow.CollectionsGHC.Data.StringBufferGHC.Tc.Types.TcRefGHC.Utils.CliOptionGHC.Types.ProfAutoGHC.SysTools.TerminalGHC.Driver.Plugins.ExternalGHC.Driver.Backend.InternalGHC.CmmToAsm.CFG.WeightGHC.Types.HpcInfoGHC.Utils.JsonGHC.Types.SrcLocGHC.Utils.BinaryGHC.Data.EnumSetGHC.Utils.Binary.TypeableGHC.Iface.Ext.FieldsGHC.Types.Unique.DFMGHC.Data.FastString.EnvGHC.Types.CostCentre.StateGHC.Types.Unique.SetGHC.Types.Unique.DSetGHC.Types.SourceTextGHC.Data.OrdListGHC.Types.Unique.MapGHC.Types.FieldLabelGHC.Data.List.SetOps GHC.Data.BagGHC.Types.FixityGHC.Hs.DocString GHC.Data.PairGHC.Driver.FlagsGHC.Types.SafeHaskellGHC.Parser.Errors.Basic GHC.Unit.PprGHC.Tc.Types.RankGHC.Unit.Module.LocationGHC.Unit.Module.EnvGHC.Unit.ModuleGHC.Types.ForeignCall GHC.Unit.HomeGHC.Types.PkgQualGHC.Types.SourceFileGHC.Unit.ParserLanguage.Haskell.Syntax.PatLanguage.Haskell.Syntax.ExprGHC.Builtin.UniquesGHC.Core.DataConGHC.Builtin.TypesGHC.Cmm.CLabelGHC.Types.Var.Set GHC.Utils.FVGHC.Data.Graph.UnVarGHC.Types.Var.EnvGHC.Types.Name.SetGHC.Types.Name.EnvGHC.Stg.InferTags.TagSigGHC.Types.GREInfoGHC.Types.AvailGHC.Types.Name.ReaderGHC.Unit.Module.ImportedGHC.Parser.AnnotationGHC.Data.BooleanFormulaGHC.Types.CostCentreGHC.Builtin.NamesGHC.Types.AnnotationsGHC.Iface.Recomp.BinaryGHC.Hs.Extension GHC.Hs.DocLanguage.Haskell.Syntax.ImpExpGHC.Unit.Module.WarningsGHC.Core.Opt.CallerCC.TypesGHC.Types.Fixity.Env GHC.Hs.ImpExpGHC.Core.Rules.ConfigGHC.Types.ForeignStubs GHC.Cmm.TypeGHC.Platform.WaysGHC.Platform.Profile GHC.Cmm.RegGHC.Cmm.MachOp GHC.SettingsGHC.Driver.PhasesGHC.Core.Coercion.AxiomGHC.Core.ClassGHC.Types.Id.MakeGHC.CoreToIfaceGHC.Builtin.Types.PrimGHC.Core.TyCo.SubstGHC.Core.TyCo.TidyLanguage.Haskell.Syntax.LitGHC.Core.TyCo.CompareGHC.Types.TickishGHC.Core.UsageEnv GHC.Tc.Errors.Types.PromotionErrGHC.Types.LiteralGHC.Data.TrieMapGHC.Cmm.Dataflow.LabelGHC.Cmm.BlockIdGHC.Core.TyCon.EnvGHC.Core.TyCon.RecWalkGHC.Core.RoughMapGHC.Core.Map.TypeGHC.Core.UnifyGHC.Core.PredicateLanguage.Haskell.Syntax.Type GHC.Hs.PatLanguage.Haskell.Syntax.BindsLanguage.Haskell.Syntax.Decls GHC.Hs.ExprLanguage.Haskell.SyntaxGHC.Types.DemandGHC.Types.RepType GHC.Types.CprGHC.Core.SimpleOptGHC.Core.ReductionGHC.Runtime.Heap.LayoutGHC.StgToCmm.TypesGHC.Core.PatSynGHC.Core.Stats GHC.Core.Ppr GHC.Core.SeqGHC.Core.ConLikeGHC.Core.Coercion.Opt GHC.Core.FVsGHC.Core.FamInstEnvGHC.Core.UtilsGHC.Core.SubstGHC.Core.Opt.ArityGHC.Core.Opt.OccurAnalGHC.Core.Unfold.Make GHC.Core.MakeGHC.Iface.Syntax GHC.Cmm.ExprGHC.ByteCode.TypesGHC.Core.InstEnvGHC.Tc.Types.Evidence GHC.Hs.TypeGHC.Types.HintGHC.Types.ErrorGHC.Utils.LoggerGHC.Utils.ErrorGHC.Utils.TmpFsGHC.Driver.Pipeline.MonadGHC.Driver.BackendGHC.Driver.DynFlagsGHC.Unit.StateGHC.Unit.Module.DepsGHC.Iface.Errors.Types GHC.Hs.Lit GHC.Hs.Binds GHC.Hs.Decls GHC.Hs.UtilsGHC.Hs.InstancesGHC.HsGHC.Tc.Types.BasicTypesGHC.Tc.Zonk.MonadGHC.Tc.Types.ErrCtxtGHC.Tc.Types.CtLocEnvGHC.Tc.Types.ConstraintGHC.Tc.Types.THGHC.Tc.Errors.Hole.FitTypesGHC.Unit.Module.ModIfaceGHC.Tc.Errors.TypesGHC.Utils.Monad.State.StrictGHC.Utils.Monad.CodensityGHC.Types.MetaGHC.SysTools.ArGHC.Runtime.UtilsGHC.Linker.ConfigGHC.Data.UnionFindGHC.Data.UnboxedGHC.Data.StreamGHC.Data.SmallArrayGHC.CmmToAsm.X86.CondGHC.CmmToAsm.CFG.DominatorsGHC.CmmToAsm.AArch64.CondGHC.Cmm.Dataflow.BlockGHC.Parser.CharClassGHC.Data.Graph.Inductive.Graph%GHC.Data.Graph.Inductive.PatriciaTreeGHC.CmmToAsm.PPC.CondGHC.Types.Unique.MemoFunGHC.Data.Graph.BaseGHC.Types.Unique.SDFM GHC.CmmToAsm.Reg.Linear.StackMapGHC.CmmToAsm.Reg.Graph.BaseGHC.CmmToAsm.Reg.Graph.X86GHC.Types.SaneDoubleGHC.JS.Unsat.Syntax GHC.JS.MakeGHC.StgToJS.Regs GHC.JS.SyntaxGHC.JS.TransformGHC.JS.Optimizer GHC.Utils.AsmGHC.Settings.IOGHC.Linker.Static.UtilsGHC.CmmToLlvm.ManglerGHC.Platform.Reg.ClassGHC.Platform.RegGHC.CmmToAsm.Reg.Utils$GHC.CmmToAsm.Reg.Graph.TrivColorable GHC.JS.PprGHC.StgToJS.Linker.OptGHC.Stg.Lift.ConfigGHC.Data.BitmapGHC.Cmm.ConfigGHC.Data.Graph.PprGHC.Data.Graph.OpsGHC.Data.Graph.ColorGHC.CmmToLlvm.ConfigGHC.Driver.LlvmConfigCacheGHC.CmmToAsm.CPrimGHC.Types.Name.CacheGHC.Types.BreakInfoGHC.StgToJS.SymbolsGHC.CmmToAsm.ConfigGHC.Driver.Env.KnotVars GHC.Stg.SubstGHC.Tc.Zonk.EnvGHC.Data.Graph.CollapseGHC.Cmm.Dataflow.Graph GHC.Types.IPEGHC.Core.TyCon.SetGHC.HsToCore.Foreign.UtilsGHC.Stg.Lift.TypesGHC.Stg.SyntaxGHC.StgToJS.TypesGHC.StgToJS.Rts.TypesGHC.StgToJS.ObjectGHC.StgToJS.Linker.TypesGHC.StgToJS.HeapGHC.StgToJS.ExprCtxGHC.StgToJS.MonadGHC.StgToJS.ProfilingGHC.StgToJS.Prim GHC.Stg.Utils GHC.Stg.Stats GHC.Stg.FVs GHC.Stg.DebugGHC.Stg.BcPrep!GHC.Unit.Module.WholeCoreBindingsGHC.Runtime.Eval.TypesGHC.Types.CompleteMatchGHC.Iface.DeclGHC.Builtin.Names.THGHC.StgToJS.UtilsGHC.StgToJS.SinkerGHC.StgToJS.IdsGHC.StgToJS.StackGHC.StgToJS.LiteralGHC.StgToJS.DepsGHC.StgToJS.ClosureGHC.StgToJS.DataConGHC.StgToJS.ArgGHC.StgToJS.FFIGHC.StgToJS.ApplyGHC.StgToJS.Rts.RtsGHC.Stg.InferTags.TypesGHC.CmmToAsm.InstrGHC.Platform.X86_64GHC.Platform.X86GHC.Platform.Wasm32GHC.Platform.S390XGHC.Platform.RISCV64GHC.Platform.PPCGHC.Platform.NoRegsGHC.Platform.LoongArch64GHC.Platform.ARMGHC.Platform.AArch64GHC.Platform.RegsGHC.Cmm.LRegSetGHC.Core.Map.Expr GHC.Stg.CSEGHC.Types.TypeEnvGHC.Unit.Module.ModDetailsGHC.Types.TyThing.PprGHC.StgToCmm.ConfigGHC.SysTools.ElfGHC.Cmm.Switch GHC.Cmm.NodeGHC.CmmGHC.StgToCmm.SequelGHC.CmmToAsm.X86.RegsGHC.CmmToAsm.Reg.Linear.X86_64GHC.CmmToAsm.Reg.Linear.X86GHC.CmmToAsm.Wasm.UtilsGHC.CmmToAsm.Wasm.TypesGHC.Wasm.ControlFlowGHC.CmmToAsm.UtilsGHC.CmmToAsm.TypesGHC.CmmToAsm.PprGHC.Llvm.TypesGHC.Llvm.MetaDataGHC.Llvm.Syntax GHC.Llvm.PprGHC.CmmToLlvm.RegsGHC.CmmToAsm.FormatGHC.CmmToAsm.X86.RegInfoGHC.CmmToAsm.PPC.RegsGHC.CmmToAsm.Reg.Linear.PPCGHC.CmmToAsm.Dwarf.ConstantsGHC.CmmToAsm.CFGGHC.CmmToAsm.Reg.LivenessGHC.CmmToAsm.Reg.Linear.BaseGHC.CmmToAsm.Reg.Linear.StatsGHC.CmmToAsm.Reg.Linear.State!GHC.CmmToAsm.Reg.Graph.SpillCleanGHC.CmmToAsm.Reg.Graph.SpillGHC.CmmToAsm.Reg.Graph.Coalesce GHC.CmmToAsm.Reg.Graph.SpillCostGHC.CmmToAsm.AArch64.RegsGHC.CmmToAsm.Reg.TargetGHC.CmmToAsm.Reg.Graph.StatsGHC.CmmToAsm.Reg.GraphGHC.CmmToAsm.Reg.Linear.AArch64GHC.CmmToAsm.AArch64.InstrGHC.CmmToAsm.AArch64.RegInfoGHC.CmmToAsm.AArch64.Ppr GHC.Cmm.UtilsGHC.StgToCmm.ClosureGHC.StgToCmm.ArgRepGHC.Stg.InferTags.RewriteGHC.StgToCmm.CgUtilsGHC.Cmm.Switch.Implement GHC.Cmm.OptGHC.Cmm.InitFini GHC.CmmToCGHC.Cmm.DebugBlockGHC.CmmToAsm.X86.InstrGHC.CmmToAsm.X86.PprGHC.CmmToAsm.MonadGHC.CmmToAsm.BlockLayoutGHC.CmmToAsm.Dwarf.TypesGHC.CmmToAsm.DwarfGHC.Cmm.DataflowGHC.Cmm.Liveness GHC.Cmm.SinkGHC.Cmm.DominatorsGHC.Cmm.ReducibilityGHC.Wasm.ControlFlow.FromCmmGHC.CmmToAsm.Wasm.FromCmmGHC.CmmToAsm.Wasm.AsmGHC.Cmm.CallConv GHC.Cmm.Lint GHC.Cmm.GraphGHC.Cmm.ContFlowOptGHC.Cmm.CommonBlockElim GHC.Cmm.InfoGHC.CmmToAsm.PPC.Instr GHC.CmmToAsm.Reg.Linear.FreeRegs%GHC.CmmToAsm.Reg.Linear.JoinToTargetsGHC.CmmToAsm.Reg.LinearGHC.CmmToAsm.PPC.RegInfoGHC.CmmToAsm.PPC.PprGHC.CmmToAsm.PICGHC.CmmToAsm.X86.CodeGenGHC.CmmToAsm.X86GHC.CmmToAsm.PPC.CodeGenGHC.CmmToAsm.PPCGHC.CmmToAsm.AArch64.CodeGenGHC.CmmToAsm.AArch64GHC.Cmm.ProcPoint GHC.Stg.LintGHC.Driver.Pipeline.LogQueueGHC.Core.Opt.StatsGHC.Stg.Lift.MonadGHC.Unit.Finder.TypesGHC.Types.TargetGHC.StgToCmm.MonadGHC.StgToCmm.InfoTableProvGHC.StgToCmm.ExtCodeGHC.StgToCmm.EnvGHC.StgToCmm.LitGHC.StgToCmm.UtilsGHC.StgToCmm.TagCheckGHC.StgToCmm.HpcGHC.Cmm.ThreadSanitizerGHC.Linker.TypesGHC.Unit.Module.ModGutsGHC.Unit.Home.ModInfoGHC.Unit.Module.StatusGHC.StgToJS.StaticPtrGHC.CmmToAsm.WasmGHC.Unit.Module.ModSummaryGHC.Unit.Module.GraphGHC.SysTools.ProcessGHC.Stg.InferTagsGHC.Driver.PprGHC.Driver.Config.StgToJSGHC.Driver.Config.Stg.LiftGHC.Driver.Config.Stg.DebugGHC.Driver.Config.LoggerGHC.Driver.Config.LinkerGHC.Driver.Config.HsToCoreGHC.Driver.Config.FinderGHC.Driver.Config.Core.RulesGHC.Driver.Config.CmmToAsmGHC.Driver.Config.CmmGHC.Driver.ConfigGHC.CmmToLlvm.BaseGHC.CmmToLlvm.DataGHC.CmmToLlvm.PprGHC.CmmToLlvm.CodeGen GHC.CmmToLlvm GHC.CmmToAsmGHC.Core.Opt.Simplify.InlineGHC.Core.Opt.LiberateCase'GHC.Driver.Config.Core.Opt.LiberateCase GHC.Core.TidyGHC.Core.Opt.StaticArgsGHC.Core.Opt.ExitifyGHC.Core.Opt.CSEGHC.StgToJS.ExprGHC.StgToJS.CodeGen GHC.Driver.Config.Core.Opt.Arity GHC.CoreToStgGHC.Driver.Config.CoreToStgGHC.Core.Opt.CallArityGHC.Tc.Types.EvTermGHC.Iface.Tidy.StaticPtrTableGHC.Core.Opt.FloatInGHC.Core.RulesGHC.Core.Opt.Simplify.MonadGHC.Core.Opt.WorkWrap.UtilsGHC.Core.Opt.DmdAnalGHC.Core.Opt.CprAnalGHC.Core.Opt.WorkWrap#GHC.Driver.Config.Core.Opt.WorkWrapGHC.Core.Opt.ConstantFoldGHC.Builtin.PrimOps.IdsGHC.Unit.External GHC.Unit.EnvGHC.Types.Name.PprGHC.Runtime.Interpreter.TypesGHC.Linker.UnitGHC.Core.Opt.Simplify.EnvGHC.Core.Opt.Simplify.UtilsGHC.Core.Opt.Simplify.IterationGHC.Builtin.Types.LiteralsGHC.Builtin.UtilsGHC.Iface.Ext.TypesGHC.Iface.Ext.UtilsGHC.Iface.Ext.DebugGHC.Iface.Ext.BinaryGHC.Tc.Solver.TypesGHC.Tc.Solver.InertSetGHC.HsToCore.Pmc.Solver.TypesGHC.HsToCore.Pmc.TypesGHC.HsToCore.Pmc.PprGHC.Types.Hint.PprGHC.Parser.TypesGHC.Tc.Instance.FunDepsGHC.Parser.Errors.TypesGHC.HsToCore.TicksGHC.HsToCore.CoverageGHC.HsToCore.Errors.TypesGHC.Driver.Errors.TypesGHC.Types.Error.CodesGHC.Parser.Errors.PprGHC.Parser.LexerGHC.Parser.PostProcess GHC.ThToHsGHC.Parser.HaddockLexGHC.Cmm.Parser.ConfigGHC.Cmm.Parser.Monad GHC.Cmm.LexerGHC.Iface.Errors.PprGHC.Tc.Errors.PprGHC.Tc.Zonk.TcTypeGHC.HsToCore.Errors.PprGHC.Driver.Errors.PprGHC.Types.SourceErrorGHC.Driver.ErrorsGHC.Driver.Config.DiagnosticGHC.Driver.CmdLineGHC.Hs.Syn.Type GHC.Hs.Stats GHC.Hs.DumpGHC.Driver.HooksGHC.Tc.Errors.Hole.PluginGHC.Runtime.ContextGHC.Driver.Env.TypesGHC.Driver.EnvGHC.Driver.MonadGHC.Core.Opt.Monad GHC.Core.LintGHC.Core.Opt.SimplifyGHC.Core.Opt.Pipeline.TypesGHC.Core.Lint.InteractiveGHC.Driver.Config.Core.Lint GHC.Tc.TypesGHC.Driver.Pipeline.PhasesGHC.Unit.FinderGHC.Iface.ErrorsGHC.Core.Opt.SpecialiseGHC.Core.Opt.SetLevelsGHC.Core.Opt.FloatOutGHC.Core.Opt.CallerCCGHC.Driver.SessionGHC.SysTools.InfoGHC.SysTools.TasksGHC.Driver.Config.CmmToLlvmGHC.Driver.CodeOutputGHC.StgToCmm.ProfGHC.StgToCmm.ForeignGHC.StgToCmm.TickyGHC.StgToCmm.LayoutGHC.Stg.Lift.Analysis GHC.Stg.LiftGHC.ByteCode.InstrGHC.StgToCmm.HeapGHC.StgToCmm.DataConGHC.Cmm.Info.BuildGHC.StgToCmm.PrimGHC.Cmm.LayoutStackGHC.Cmm.PipelineGHC.StgToCmm.BindGHC.StgToCmm.Expr GHC.StgToCmmGHC.Cmm.ParserGHC.StgToJS.Linker.UtilsGHC.Linker.ExtraObjGHC.SysTools.CppGHC.StgToJS.Linker.LinkerGHC.Runtime.Interpreter.JSGHC.Linker.MacOSGHC.Linker.DepsGHC.HsToCore.BreakpointsGHC.ByteCode.LinkerGHC.ByteCode.InfoTableGHC.StgToByteCodeGHC.Linker.WindowsGHC.Linker.DynamicGHC.Linker.StaticGHC.Iface.Recomp.FlagsGHC.Driver.Config.StgToCmmGHC.Driver.GenerateCgIPEStubGHC.Driver.Config.Stg.PprGHC.Driver.Config.ParserGHC.Driver.Config.Cmm.Parser GHC.Driver.Config.HsToCore.TicksGHC.HsToCore.DocsGHC.HsToCore.TypesGHC.Tc.Utils.MonadGHC.Rename.UtilsGHC.Rename.UnboundGHC.Rename.Doc GHC.Iface.EnvGHC.Types.Name.ShapeGHC.Tc.TyCl.BuildGHC.Iface.BinaryGHC.Iface.LoadGHC.Iface.RenameGHC.IfaceToCoreGHC.Tc.Utils.EnvGHC.Tc.Instance.Typeable GHC.PluginsGHC.Builtin.PrimOps.CastsGHC.Stg.UnariseGHC.Stg.PipelineGHC.Driver.Config.Stg.PipelineGHC.Iface.TidyGHC.Driver.Config.TidyGHC.CoreToStg.PrepGHC.Tc.Instance.FamilyGHC.Rename.FixityGHC.Rename.EnvGHC.Rename.NamesGHC.Linker.LoaderGHC.Runtime.LoaderGHC.Iface.RecompGHC.HsToCore.UsageGHC.HsToCore.Pmc.Utils GHC.Driver.Config.CoreToStg.Prep#GHC.Driver.Config.Core.Opt.Simplify'GHC.Driver.Config.Core.Lint.InteractiveGHC.Core.LateCC GHC.Driver.Config.HsToCore.UsageGHC.Iface.MakeGHC.Iface.Ext.AstGHC.Core.Opt.PipelineGHC.Driver.Backpack.Syntax GHC.ParserGHC.Parser.PostProcess.HaddockGHC.Parser.UtilsGHC.Parser.HeaderGHC.Driver.PipelineGHC.HsToCore.BindsGHC.HsToCore.MatchGHC.HsToCore.ExprGHC.HsToCore.UtilsGHC.HsToCore.Foreign.CallGHC.HsToCore.Foreign.PrimGHC.HsToCore.Foreign.JavaScriptGHC.HsToCore.Foreign.CGHC.HsToCore.Foreign.DeclGHC.HsToCore.GuardedRHSsGHC.Rename.ExprGHC.Rename.SpliceGHC.Rename.HsTypeGHC.Tc.Errors.HoleGHC.Tc.Gen.MatchGHC.Tc.Gen.ExprGHC.Tc.Utils.UnifyGHC.Tc.Gen.SpliceGHC.Tc.Zonk.TypeGHC.Tc.Utils.TcMTypeGHC.Tc.Utils.ConcreteGHC.Tc.Utils.InstantiateGHC.Tc.Instance.ClassGHC.Rename.PatGHC.Rename.BindGHC.HsToCore.Match.LiteralGHC.HsToCore.Pmc.DesugarGHC.Tc.Solver.MonadGHC.Tc.Solver.RewriteGHC.Tc.Solver.DictGHC.Tc.Solver.IrredGHC.Tc.Solver.EqualityGHC.Tc.Solver.Solve GHC.Tc.Errors GHC.Tc.SolverGHC.Tc.ValidityGHC.HsToCore.Pmc.SolverGHC.HsToCore.Pmc.CheckGHC.HsToCore.PmcGHC.HsToCore.Match.ConstructorGHC.HsToCore.ListCompGHC.HsToCore.QuoteGHC.HsToCore.ArrowsGHC.Tc.Gen.HsTypeGHC.Tc.Gen.SigGHC.Tc.TyCl.PatSynGHC.Tc.Gen.PatGHC.Tc.Gen.BindGHC.Tc.TyCl.UtilsGHC.Tc.TyCl.ClassGHC.Tc.Gen.HeadGHC.Tc.Gen.ArrowGHC.Tc.Gen.AppGHC.Tc.Deriv.GenerateGHC.Tc.Deriv.FunctorGHC.Tc.Deriv.GenericsGHC.Tc.Deriv.UtilsGHC.Tc.Deriv.InferGHC.Tc.Gen.DefaultGHC.Tc.Gen.AnnotationGHC.Rename.ModuleGHC.Tc.Gen.RuleGHC.Tc.Gen.ForeignGHC.Tc.Gen.Export GHC.Tc.DerivGHC.Tc.TyCl.Instance GHC.Tc.ModuleGHC.Tc.Utils.Backpack GHC.Tc.TyCl GHC.HsToCoreGHC.Driver.MainGHC.Driver.Pipeline.ExecuteGHC.Runtime.Heap.Inspect GHC.Tc.PluginGHC.Runtime.EvalGHC.Driver.MakeGHC.Runtime.DebuggerGHC.Driver.MakeFileGHC.Driver.Backpack5 GhcExceptionSDocNEfromList326 System.IOHandlepprWithUnitStatePretty printDoc_$dmbndrIsJoin_maybe$dmhcat$dmhsep $dmlines_ $dmpprBndr$dmvcat GHC.Prelude GHC.Linker Data.Listunconsheadtailnull4 $dmlabEdges $dmmatchAny $dmnoNodes $dmnodeRange $dmgetUniqueM$dmgetUniquesM$dmput$dmput_ AnnKeywordIdAnnOpen AnnHeaderAnnValAnnClose cc_flavour.^.! expr2statJExprJStat$dmtoJExprFromList789Data.MapdifferenceWithputIfaceTopBndrgetIfaceTopBndr $dmgetOccNameAnnType AnnBackquoteAnnTildeMxexports_from_availAnnDeclHsImpExpIE AnnPattern Annotation AnnDotdotAnnComma AnnModule AnnImportAnnSafe AnnQualifiedAnnPackageNameAnnAs AnnHidingAnnSemi mkTyConTy TypeError ModBreaksCoreMap1GHC.Data.Graph.Inductive*PromDataConInfo AnnDcolon AnnForallAnnDot AnnDarrow AnnRarrowAnnBangAnnUnitAnnEqualAnnAt AnnDefaultAnnInfix AnnInstanceAnnVbar AnnLarrowAnnWhere tcMonoBindsAnnFunIdAnnRole AnnForeign AnnExport AnnDerivingAnnStock AnnAnyClass AnnNewtypeAnnData AnnNewTypeAnnCLose AnnFamilyAnnOpenP AnnClosePAnnClassAnnThenAnnByAnnGroupAnnUsingAnnLetAnnRec Annlarrowtail Annrarrowtail AnnLarrowtail AnnRarrowtailAnnOpenB AnnCloseBAnnLamAnnCaseAnnOfAnnCasesAnnIfAnnElseAnnInAnnDoAnnColonAnnMinusAnnOpenE AnnOpenEQ AnnCloseQAnnProc AnnStaticHsExprRdrNamesUniqueRdrNameNameId mkCoreApps mkCoreConApps mkIntExpr mkWordExpr mkCharExpr mkStringExpr mkFloatExpr mkDoubleExpr mkCoreLams mkCoreLets$dmlookupDataCon $dmlookupId$dmlookupTyConSubst typePrimReptypeLevity_maybe0cvBindsAndSigsLanguage.Haskell.TH.SyntaxaddModFinalizer Data.KindTypeDriverUnexpectedSignature PsWarnTabPsWarnOperatorWhitespaceDsMaxPmCheckModelsReachedDataKindPsWarnStarIsTypePsWarnImportPreQualifiedPsErrEmptyDoubleQuotesPsErrIllegalRoleNamePsWarnStarBinderPsErrInvalidTypeSignatureTcRnOrphanInstanceDerivBadErrConstructorTcRnInvisBndrWithoutSigTcRnForallIdentifierTcRnIncorrectNameSpace GHC.UtilsError NoExtFieldmakeIdentForIdGHC.StgToJS.Printer prettyBlock' GHC.StgToJShs StgToJS.Expr loadRetArgs mkCoreLetRWSlocal StgToJSConfigcsRuntimeAssert StgToJS.Stack pushOptimizedgenPrimcheckClosedInStaticFormdecideGeneralisationPlanAltConInertSet ConPatOutHeader setDumpPrefixFloatOutSwitchesConfigrunGhcLangExt ExtensionStrictGHC.Unit mkErrorReportcheckTypeHasFixedRuntimeRep GHC.Tc.UtilsMonadtopSortModuleGraph flattenSCC GHC.DriverMakeTHCxtdataConRepInstPatmkApps isRecDataCon GHC.Core.PrepmkFloat SourceNoteCoreSynGHC.LlvmArraytabulateGHC.STGDebug idPrimRepliftedIdsExpanderCoreRule HscNoRecompexpandTypeSynonymsBitsshiftR imp_dep_modsSessiontcg_type_env_varTcGblEnv initGhcMonadGHC.Opt.Specialise specTickishMaininitializePlugins newFamInst newClsInstControl.Monad.STSTrunSTcheckConsistentFamInst singletoninferConstraints simplifyInfer GHC.Types addExternal rnImportDeclDynFlagsbackendcompileToCoreModule SourceErrorbaseGHC.Base++ghc-primGHC.PrimseqGHC.Listfilterzipprint otherwise Debug.Tracetracemap$GHC.Num fromInteger-GHC.Real fromRationalGHC.EnumenumFrom enumFromThen enumFromToenumFromThenTo GHC.Classes==>=negate>>=>>fmapreturnControl.Monad.FixmfixControl.Monad.Failfail fromIntegral realToFrac toInteger toRationalmemptymappendmconcat<*>pure*>BoundedEnumEq GHC.FloatFloating FractionalIntegralFunctorNumOrdGHC.ReadReadReal RealFloatRealFracGHC.ShowShowMonadFix MonadFail Applicative Data.FoldableFoldableData.Traversable Traversable SemigroupMonoidBoolStringCharDoubleFloatInt ghc-bignumGHC.Num.IntegerInteger GHC.MaybeMaybeOrderingRational~IOWord Data.EitherEitherPluginFrontendPluginFalseNothingJustTrueLeftRightLTEQGTGHC.Fingerprint.Type Fingerprintcompare<<=>maxmin/=&&||notGHC.Stack.Types HasCallStack GHC.ByteOrder ByteOrder BigEndian LittleEndianGHC.Exception.Type SomeExceptionGHC.ErrerrorerrorWithoutStackTrace undefinedliftA2<*<$=<<idconst.flip$!untilasTypeOf$dm<$$dm<*> $dmliftA2$dm*>$dm<*$dm>> $dmreturn $dmmempty $dmmappend $dmmconcat Data.VersionVersion+abssignumsubtract$dm- $dmnegate Data.Maybemaybelastinitfoldl1'scanlscanl1scanrscanr1iteraterepeat replicatecycle takeWhile dropWhiletakedropsplitAtspanbreakreverselookup!!zip3zipWithzipWith3unzipunzip3 showsPrecshowshowListShowSshowsshowChar showString showParen $dmshowsPrec$dmshow $dmshowListsuccpredtoEnumfromEnumminBoundmaxBound$dmsucc$dmpred $dmenumFrom$dmenumFromThen $dmenumFromTo$dmenumFromThenToproperFractiontruncateroundceilingfloor/recipquotremdivmodquotRemdivModevenodd^^^gcdlcm$dmquot$dmrem$dmdiv$dmmod $dmdivMod$dm/$dmrecip $dmtruncate$dmround $dmceiling$dmfloorGHC.Bits FiniteBits finiteBitSizecountLeadingZeroscountTrailingZeros.&..|.xor complementshiftrotatezeroBitsbitsetBitclearBit complementBittestBit bitSizeMaybebitSizeisSigned unsafeShiftL unsafeShiftRrotateLrotateRpopCount bitDefaulttestBitDefaultpopCountDefaulttoIntegralSized$dmshift $dmrotate $dmzeroBits $dmsetBit $dmclearBit$dmcomplementBit $dmbitSize$dmunsafeShiftL$dmunsafeShiftR $dmrotateL $dmrotateR$dmcountLeadingZeros$dmcountTrailingZeros floatRadix floatDigits floatRange decodeFloat encodeFloatexponent significand scaleFloatisNaN isInfiniteisDenormalizedisNegativeZeroisIEEEatan2piexplogsqrt**logBasesincostanasinacosatansinhcoshtanhasinhacoshatanh$dmsqrt$dm** $dmlogBase$dmtan$dmtanh $dmexponent$dmsignificand $dmscaleFloat$dmatan2 Data.Tuplefstsndcurryuncurry Data.Functor<$>Text.ParserCombinators.ReadPReadS readsPrecreadList readParenlex $dmreadsPrec $dmreadListGHC.FingerprintfingerprintStringfingerprintFingerprintseither Text.ReadreadsreadData.Semigroup.InternalEndoappEndofoldMapfoldrfoldlfoldl'foldr1foldl1lengthelemmaximumminimumsumproductfoldrMfoldlMmapM_ sequence_concat concatMapandoranyallnotElem $dmfoldMap$dmfoldr$dmfoldl $dmfoldl' $dmfoldr1 $dmfoldl1$dmnull $dmlength$dmelem $dmmaximum $dmminimum$dmsum $dmproduct Data.OldListlinesunlineswordsunwordsArithExceptionOverflow UnderflowLossOfPrecision DivideByZeroDenormalRatioZeroDenominator Exception toException fromExceptiondisplayException$dmtoException$dmfromException$dmdisplayException GHC.Exception ErrorCallErrorCallWithLocationthrowGHC.IO.ExceptionIOError IOException userErrorGHC.IO MaskingStateUnmaskedMaskedInterruptibleMaskedUninterruptibleFilePathcatchthrowIO interruptiblegetMaskingStatemask_maskuninterruptibleMask_uninterruptibleMaskevaluate GHC.IORefIORefArrayExceptionIndexOutOfBoundsUndefinedElementAsyncException StackOverflow HeapOverflow ThreadKilled UserInterruptSomeAsyncExceptionAssertionFailedCompactionFailedAllocationLimitExceededDeadlockBlockedIndefinitelyOnSTMBlockedIndefinitelyOnMVarasyncExceptionToExceptionasyncExceptionFromExceptionioError GHC.Conc.SyncthrowToControl.Exception.BaseNestedAtomicallyNonTermination NoMethodError RecUpdError RecConError RecSelErrorPatternMatchFail catchJusthandle handleJust mapExceptiontrytryJust onExceptionbracketfinallybracket_bracketOnErrorControl.ExceptionHandlercatchesallowInterruptputCharputStrputStrLngetChargetLine getContentsinteractreadFile writeFile appendFilereadLnreadIOtraverse sequenceAmapMsequence $dmtraverse $dmsequenceA$dmmapM $dmsequence versionTags versionBranch Control.Monad mapAndUnzipM fingerprint0fingerprintData getFileHashControl.Monad.IO.ClassMonadIOliftIO Data.Data mkNoRepTypeGHC.ExtsSpecConstrAnnotation NoSpecConstrForceSpecConstrsortWithcontainers-0.6.8-4a87 Data.GraphSCC AcyclicSCC CyclicSCC flattenSCCsdirectory-1.3.8.1-6cf8System.DirectorycopyFiletransformers-0.6.1.0-3597Control.Monad.Trans.MaybeMaybeTghc-boot-9.8.2-2ea8 GHC.BaseDir expandTopDirGHC.Data.SizedSeqSizedSeqssEltssizeSSGHC.Platform.ArchOSOS OSUnknownOSLinuxOSDarwin OSSolaris2 OSMinGW32 OSFreeBSD OSDragonFly OSOpenBSDOSNetBSD OSKFreeBSDOSHaikuOSQNXNTOOSAIXOSHurdOSWasiOSGhcjs PPC_64ABIELF_V1ELF_V2ArmABISOFTSOFTFPHARD ArmISAExtVFPv2VFPv3VFPv3D16NEONIWMMX2ArmISAARMv5ARMv6ARMv7Arch ArchUnknownArchX86 ArchX86_64ArchPPC ArchPPC_64 ArchS390XArchARM ArchAArch64 ArchAlpha ArchMipseb ArchMipsel ArchRISCV64ArchLoongArch64ArchJavaScript ArchWasm32ArchOS archOS_OS archOS_archGHC.Unit.DatabaseGenericUnitInfo unitIsTrusted unitIsExposedunitIsIndefiniteunitHiddenModulesunitExposedModulesunitHaddockHTMLsunitHaddockInterfacesunitIncludeDirs unitIncludes unitCcOptionsunitLinkerOptionsunitExtDepFrameworkDirsunitExtDepFrameworksunitLibraryDynDirsunitLibraryDirsunitExtDepLibsGhcunitExtDepLibsSys unitLibrariesunitImportDirsunitAbiDepends unitDepends unitAbiHashunitComponentNameunitPackageVersionunitPackageName unitPackageIdunitInstantiationsunitInstanceOfunitIdghc-boot-th-9.8.2-54d4GHC.ForeignSrcLang.TypeForeignSrcLangLangAsmLangCLangCxxLangJsLangObjc LangObjcxx RawObjectghci-9.8.2-f83aGHCi.RemoteTypes ForeignHValueHValue GHCi.Message EvalResult EvalException EvalSuccess EvalStatus_ EvalComplete EvalBreak EvalStatusEvalExprEvalThisEvalAppMessageShutdown RtsRevertCAFs InitLinker LookupSymbol LookupClosureLoadDLL LoadArchiveLoadObj UnloadObjAddLibrarySearchPathRemoveLibrarySearchPath ResolveObjsFindSystemLibrary CreateBCOsFreeHValueRefs AddSptEntry MallocData MallocStringsPrepFFIFreeFFIMkConInfoTableEvalStmt ResumeStmt AbandonStmt EvalStringEvalStringToStringEvalIO MkCostCentresCostCentreStackInfo NewBreakArraySetupBreakpointBreakpointStatusGetBreakpointVarStartTHRunTHRunModFinalizers GetClosureSeq ResumeSeqsemaphore-compat-1.0.0-fdccSystem.Semaphore AbstractSem releaseSem acquireSem Semaphore SemaphoreNamegetSemaphoreNamewithAbstractSem runMaybeTInfiniteInfunfoldrgroupBydropList allListsOftoList$fApplicativeInfinite$fFoldableInfinite$fFunctorInfinite$fTraversableInfinitePlatformConstantspc_USE_INLINE_SRT_FIELDpc_ILDV_STATE_USEpc_ILDV_STATE_CREATEpc_ILDV_CREATE_MASK pc_LDV_SHIFT pc_TAG_BITSpc_BITMAP_BITS_SHIFTpc_CLONG_LONG_SIZE pc_CLONG_SIZE pc_CINT_SIZE pc_WORD_SIZEpc_AP_STACK_SPLIMpc_RESERVED_STACK_WORDSpc_RESERVED_C_STACK_BYTESpc_MAX_Real_Long_REGpc_MAX_Real_XMM_REGpc_MAX_Real_Double_REGpc_MAX_Real_Float_REGpc_MAX_Real_Vanilla_REGpc_MAX_XMM_REGpc_MAX_Long_REGpc_MAX_Double_REGpc_MAX_Float_REGpc_MAX_Vanilla_REGpc_MUT_ARR_PTRS_CARD_BITSpc_MAX_CHARLIKEpc_MIN_CHARLIKEpc_MAX_INTLIKEpc_MIN_INTLIKEpc_MIN_PAYLOAD_SIZEpc_MAX_SPEC_AP_SIZEpc_MAX_SPEC_SELECTEE_SIZEpc_REP_StgFunInfoExtraRev_arity"pc_OFFSET_StgFunInfoExtraRev_aritypc_SIZEOF_StgFunInfoExtraRevpc_REP_StgFunInfoExtraFwd_arity"pc_OFFSET_StgFunInfoExtraFwd_arity pc_OFFSET_StgUpdateFrame_updateepc_OFFSET_StgStack_stackpc_OFFSET_StgStack_sppc_OFFSET_StgTSO_stackobjpc_OFFSET_StgTSO_cccspc_OFFSET_StgTSO_alloc_limitpc_OFFSET_StgArrBytes_bytespc_SIZEOF_StgArrBytes_NoHdr!pc_OFFSET_StgSmallMutArrPtrs_ptrs"pc_SIZEOF_StgSmallMutArrPtrs_NoHdrpc_OFFSET_StgMutArrPtrs_sizepc_OFFSET_StgMutArrPtrs_ptrspc_SIZEOF_StgMutArrPtrs_NoHdrpc_SIZEOF_StgUpdateFrame_NoHdr#pc_OFFSET_StgEntCounter_entry_countpc_OFFSET_StgEntCounter_link#pc_OFFSET_StgEntCounter_registeredppc_REP_StgEntCounter_allocdpc_OFFSET_StgEntCounter_allocdpc_REP_StgEntCounter_allocspc_OFFSET_StgEntCounter_allocspc_SIZEOF_StgSMPThunkHeaderpc_OFFSET_StgHeader_ldvwpc_OFFSET_StgHeader_ccs pc_REP_CostCentreStack_scc_count#pc_OFFSET_CostCentreStack_scc_count pc_REP_CostCentreStack_mem_alloc#pc_OFFSET_CostCentreStack_mem_allocpc_SIZEOF_CostCentreStackpc_OFFSET_bdescr_flagspc_OFFSET_bdescr_blockspc_OFFSET_bdescr_freepc_OFFSET_bdescr_startpc_OFFSET_Capability_rpc_OFFSET_stgGCFunpc_OFFSET_stgGCEnter1pc_OFFSET_stgEagerBlackholeInfopc_OFFSET_StgRegTable_rHpAlloc%pc_OFFSET_StgRegTable_rCurrentNursery!pc_OFFSET_StgRegTable_rCurrentTSOpc_OFFSET_StgRegTable_rCCCSpc_OFFSET_StgRegTable_rHpLimpc_OFFSET_StgRegTable_rHppc_OFFSET_StgRegTable_rSpLimpc_OFFSET_StgRegTable_rSppc_OFFSET_StgRegTable_rL1pc_OFFSET_StgRegTable_rZMM6pc_OFFSET_StgRegTable_rZMM5pc_OFFSET_StgRegTable_rZMM4pc_OFFSET_StgRegTable_rZMM3pc_OFFSET_StgRegTable_rZMM2pc_OFFSET_StgRegTable_rZMM1pc_OFFSET_StgRegTable_rYMM6pc_OFFSET_StgRegTable_rYMM5pc_OFFSET_StgRegTable_rYMM4pc_OFFSET_StgRegTable_rYMM3pc_OFFSET_StgRegTable_rYMM2pc_OFFSET_StgRegTable_rYMM1pc_OFFSET_StgRegTable_rXMM6pc_OFFSET_StgRegTable_rXMM5pc_OFFSET_StgRegTable_rXMM4pc_OFFSET_StgRegTable_rXMM3pc_OFFSET_StgRegTable_rXMM2pc_OFFSET_StgRegTable_rXMM1pc_OFFSET_StgRegTable_rD6pc_OFFSET_StgRegTable_rD5pc_OFFSET_StgRegTable_rD4pc_OFFSET_StgRegTable_rD3pc_OFFSET_StgRegTable_rD2pc_OFFSET_StgRegTable_rD1pc_OFFSET_StgRegTable_rF6pc_OFFSET_StgRegTable_rF5pc_OFFSET_StgRegTable_rF4pc_OFFSET_StgRegTable_rF3pc_OFFSET_StgRegTable_rF2pc_OFFSET_StgRegTable_rF1pc_OFFSET_StgRegTable_rR10pc_OFFSET_StgRegTable_rR9pc_OFFSET_StgRegTable_rR8pc_OFFSET_StgRegTable_rR7pc_OFFSET_StgRegTable_rR6pc_OFFSET_StgRegTable_rR5pc_OFFSET_StgRegTable_rR4pc_OFFSET_StgRegTable_rR3pc_OFFSET_StgRegTable_rR2pc_OFFSET_StgRegTable_rR1pc_TICKY_BIN_COUNTpc_BLOCKS_PER_MBLOCK pc_BLOCK_SIZEpc_PROF_HDR_SIZEpc_STD_HDR_SIZEpc_CONTROL_GROUP_CONST_291parseConstantsHeader$fShowPlatformConstants$fReadPlatformConstants$fEqPlatformConstants$fOrdPlatformConstantsshiftL FastMutInt newFastMutIntreadFastMutIntwriteFastMutIntatomicFetchAddFastMutOverridingBoolAutoNeverAlways overrideWith$fShowOverridingBool$fReadOverridingBool$fEqOverridingBool$fOrdOverridingBool$fEnumOverridingBool$fBoundedOverridingBoolcBuildPlatformStringcHostPlatformString cProjectNamecBooterVersioncStagecProjectUnitId ghciSupported debugIsOn isWindowsHost isDarwinHostExceptionMonadcatchIOhandleIOtryIOreadHexFingerprintfingerprintByteStringv_unsafeHasPprDebugv_unsafeHasNoDebugOutputv_unsafeHasNoStateHackunsafeHasPprDebugunsafeHasNoDebugOutputunsafeHasNoStateHackglobal consIORefglobalM sharedGlobal sharedGlobalMinlinePerformIOPlainGhcException PlainSignalPlainUsageErrorPlainCmdLineError PlainPanic PlainSorryPlainInstallationErrorPlainProgramErrorshowPlainGhcExceptionpanicsorrypgmError cmdLineErrorcmdLineErrorIO assertPanicassertmassertassertM$fShowPlainGhcException$fExceptionPlainGhcExceptionHasDebugCallStack DirectionForwards BackwardsSuffix applyWhennTimesconst2fstOf3sndOf3thdOf3fstOf4sndOf4fst3snd3third3uncurry3 filterOut partitionWith chkAppendzipEqual zipWithEqual zipWith3Equal zipWith4Equal filterByList filterByListspartitionByListstretchZipWithmapFstmapSnd mapAndUnzip mapAndUnzip3 mapAndUnzip4zipWithAndUnzip zipAndUnzipatLength lengthExceeds lengthAtLeastlengthIs lengthIsNot lengthAtMostlengthLessThan listLengthCmp equalLength compareLengthleLengthltLength isSingletonnotNullonly expectOnly chunkListholes changeLastexpectNonEmptymapLastM whenNonEmpty mergeListsBy isSortedByminWithnubSortordNubordNubOntransitiveClosurefoldl2all2count countWhiletakeList splitAtListdropTaildropWhileEndLEspanEndlast2 lastMaybeonJustsnocViewsplit capitaliseisEqual removeSpaces<&&><||> fuzzyMatch fuzzyLookup unzipWithseqList strictMap strictZipWithstrictZipWith3looksLikeModuleNamelooksLikePackageName exactLog2 readRationalreadSignificandExponentPairreadHexRationalreadHexSignificandExponentPairdoesDirNameExistgetModificationUTCTimemodificationTimeIfExistsfileHashIfExistswithAtomicRenamesplitLongestPrefix escapeSpacesreslashmakeRelativeToabstractConstrabstractDataTypecharToC hashString mapMaybe' PtrStringLexicalFastStringNonDetFastString FastStringfs_zencfs_sbsn_charsuniq FastZStringbytesFSfastStringToByteStringfastStringToShortByteStringfastStringToShortTextfastZStringToByteStringunsafeMkByteStringhPutFZSzString zStringTakeN lengthFZSlexicalCompareFS uniqCompareFS mkFastString#mkFastStringBytesmkFastStringByteStringmkFastStringShortByteString mkFastStringmkFastStringByteListlengthFSnullFSunpackFS zEncodeFSappendFSconcatFSconsFSunconsFS uniqueOfFSnilFSgetFastStringTablegetFastStringZEncCounterhPutFS mkPtrString#unpackPtrStringunpackPtrStringTakeNlengthPSfsLit$fNFDataFastString$fDataFastString$fShowFastString$fMonoidFastString$fSemigroupFastString$fIsStringFastString$fEqFastString$fOrdNonDetFastString$fOrdLexicalFastString$fEqLexicalFastString$fShowLexicalFastString$fDataLexicalFastString$fEqNonDetFastString$fShowNonDetFastString$fDataNonDetFastString$fNFDataFastZString BufHandle newBufHandlebPutCharbPutStrbPutFSbPutFZS bPutPtrString bPutReplicatebFlushModePageMode ZigZagModeLeftMode OneLineMode asciiSpaceStyleribbonsPerLine lineLengthmode TextDetailsChrStrPStrZStrLStrRStrDocchartextftextptextztext sizedText zeroWidthText emptyTextemptyisEmptydocHeadsemicommacolonspaceequalslparenrparenlbrackrbracklbracerbraceintintegerfloatdoublerationalhexquotessquotesquote doubleQuotesparensbracketsbraces maybeParenshcathsepvcatnesthang hangNotEmpty punctuate$$$+$<><+>sepcatfcatfsepstyle renderStyle txtPrinter fullRenderprintDocprintLeftRender bufLeftRender $fShowDocSchemesMarginsFatalsErrorsWarningsMessagesHeader PprColour renderColourrenderColourAfresh colCustomcolResetcolBold colBlackFgcolRedFg colGreenFg colYellowFg colBlueFg colMagentaFg colCyanFg colWhiteFg defaultScheme parseScheme$fMonoidPprColour$fSemigroupPprColourSrcUnpackedness SrcUnpack SrcNoUnpack NoSrcUnpack SrcStrictnessSrcLazy SrcStrict NoSrcStrictRoleNominalRepresentationalPhantomFieldLabelString field_labelConTagSumWidthBoxityBoxedUnboxedisBoxed$fEqSrcUnpackedness$fDataSrcUnpackedness$fEqSrcStrictness$fDataSrcStrictness$fEqRole $fOrdRole $fDataRole$fDataFieldLabelString$fEqFieldLabelString$fNFDataFieldLabelString $fEqBoxity $fDataBoxityNoGhcTcXXIEWrappedNameXIEType XIEPatternXIENameXXIE XIEDocNamedXIEDocXIEGroupXIEModuleContents XIEThingWith XIEThingAll XIEThingAbsXIEVarImportDeclPkgQual XXImportDecl XCImportDecl XXFieldOcc XCFieldOccXXConDeclField XConDeclField XXTyVarBndr XKindedTyVar XUserTyVarXXHsForAllTelescopeXHsForAllInvis XHsForAllVisXXTyLitXCharTyXStrTyXNumTyXXType XWildCardTyXTyLitXExplicitTupleTyXExplicitListTyXRecTyXBangTyXDocTy XSpliceTyXKindSigXStarTy XIParamTyXParTyXOpTyXSumTyXTupleTyXListTyXFunTy XAppKindTyXAppTyXTyVarXQualTy XForAllTyXXHsPatSigTypeXHsPSXXHsWildCardBndrsXHsWC XXHsSigTypeXHsSigXXHsOuterTyVarBndrsXHsOuterExplicitXHsOuterImplicit XXLHsQTyVarsXHsQTvs XHsFieldBindXXPatXCoPatXSigPat XNPlusKPatXNPatXLitPat XSplicePatXViewPatXConPatXSumPat XTuplePatXListPatXBangPatXParPatXAsPatXLazyPatXVarPatXWildPat XXOverLitXOverLitXXLit XHsDoublePrim XHsFloatPrimXHsRat XHsInteger XHsWord64Prim XHsWord32Prim XHsWord16Prim XHsWord8Prim XHsInt64Prim XHsInt32Prim XHsInt16Prim XHsInt8Prim XHsWordPrim XHsIntPrimXHsInt XHsStringPrim XHsString XHsCharPrimXHsCharXXApplicativeArgXApplicativeArgManyXApplicativeArgOneXXParStmtBlock XParStmtBlockXXCmdXCmdWrapXCmdDoXCmdLetXCmdIf XCmdLamCaseXCmdCaseXCmdParXCmdLamXCmdApp XCmdArrForm XCmdArrAppXXStmtLRXRecStmt XTransStmtXParStmtXLetStmt XBodyStmtXApplicativeStmt XBindStmt XLastStmtXXGRHSXCGRHSXXGRHSsXCGRHSsXXMatchXCMatch XXMatchGroupXMGXXCmdTopXCmdTopXXQuoteXVarBrXTypBrXDecBrGXDecBrLXPatBrXExpBrXXUntypedSplice XQuasiQuoteXUntypedSpliceExprXXTupArgXMissingXPresentXXAmbiguousFieldOcc XAmbiguous XUnambiguousXXPragEXSCC XXDotFieldOcc XCDotFieldOccXXExprXPragEXBinTickXTickXStaticXProcXUntypedSplice XTypedSpliceXUntypedBracket XTypedBracket XArithSeqXExprWithTySig XProjection XGetFieldXLHsOLRecUpdLabelsXLHsRecUpdLabels XRecordUpd XRecordCon XExplicitListXDoXLetXMultiIfXIfXCase XExplicitSumXExplicitTuple XSectionR XSectionLXParXNegAppXOpApp XAppTypeEXAppXLamCaseXLamXLitE XOverLitEXIPVar XOverLabelXRecSel XUnboundVarXVarXXModuleXCModuleXXInjectivityAnnXCInjectivityAnnXXRoleAnnotDeclXCRoleAnnotDecl XXAnnDecl XHsAnnotation XXWarnDeclXWarning XXWarnDecls XWarnings XXRuleBndr XRuleBndrSig XCRuleBndr XXRuleDeclXHsRule XXRuleDecls XCRuleDeclsXXForeignExportXCExportXXForeignImportXCImport XXForeignDeclXForeignExportXForeignImport XXDefaultDecl XCDefaultDecl XViaStrategyXNewtypeStrategyXAnyClassStrategyXStockStrategy XXDerivDecl XCDerivDecl XXInstDecl XTyFamInstD XDataFamInstD XClsInstD XXClsInstDecl XCClsInstDeclXXTyFamInstDeclXCTyFamInstDeclXXFamEqnXCFamEqn XXConDecl XConDeclH98 XConDeclGADTXXDerivClauseTys XDctMulti XDctSingleXXHsDerivingClauseXCHsDerivingClause XXHsDataDefn XCHsDataDefn XXFamilyDecl XCFamilyDeclXXFamilyResultSig XTyVarSig XCKindSigXNoSig XXTyClGroup XCTyClGroupXXFunDepXCFunDep XXTyClDecl XClassDecl XDataDeclXSynDeclXFamDecl XXSpliceDecl XSpliceDecl XXHsGroup XCHsGroupXXHsDecl XRoleAnnotDXDocDXSpliceDXRuleDXAnnD XWarningDXForDXDefD XKindSigDXSigDXValDXDerivDXInstDXTyClDXXStandaloneKindSigXStandaloneKindSig XXFixitySig XFixitySigXXSigXCompleteMatchSig XSCCFunSig XMinimalSig XSpecInstSigXSpecSig XInlineSigXFixSigXIdSig XClassOpSig XPatSynSigXTypeSigXXIPBindXCIPBind XXHsIPBindsXIPBinds XXPatSynBindXPSB XXHsBindsLR XPatSynBindXVarBindXPatBindXFunBind XXValBindsLR XValBindsXXHsLocalBindsLRXEmptyLocalBinds XHsIPBinds XHsValBindsLIdPIdPWrapXRecwrapXRecMapXRecmapXRecUnXRecunXRecAnnoXRecDataConCantHappen noExtFielddataConCantHappen$fDataDataConCantHappen$fEqDataConCantHappen$fOrdDataConCantHappen$fDataNoExtField$fEqNoExtField$fOrdNoExtField ModuleNamestableModuleNameCmp moduleNameFSmoduleNameString mkModuleNamemkModuleNameFSmoduleNameSlashesmoduleNameColonsparseModuleName$fNFDataModuleName$fDataModuleName$fOrdModuleName$fShowModuleName$fEqModuleNameTcLclEnvShowSub IfaceBndr IfaceCoercion IfaceTyLit IfaceTyCon IfaceType IfaceAppArgs ClsInstOrQC IsClsInstIsQCCtOriginFixedRuntimeRepOriginFixedRuntimeRepContext SkolemInfoSkolemInfoAnonunkSkol HasOccNameoccNameOccName mkVarOccFSIsBootInterfaceNotBootIsBootUnitModuleGenUnit GenModuleUnitIdIsDocLinelinelines_dualDocIsLinedualLineIsOutputdocWithContext docWithStyleHDocHLineOutputableBndrpprBndr pprPrefixOcc pprInfixOccbndrIsJoin_maybe BindingSite LambdaBindCaseBind CasePatBindLetBindPDoc OutputablePpdoc Outputableppr SDocContextSDCsdocUnitIdForUsersdocPrintTypeAbbreviationssdocListTuplePunssdocLinearTypessdocStarIsTypesdocErrorSpanssdocSuppressStgRepssdocSuppressStgExtssdocSuppressModulePrefixessdocSuppressUniquessdocSuppressVarKindssdocSuppressUnfoldingssdocSuppressCoercionTypessdocSuppressCoercionssdocSuppressIdInfosdocSuppressTypeApplicationssdocSuppressTypeSignaturessdocSuppressTickssdocPrintEqualityRelationssdocPrintPotentialInstancessdocPrintExplicitForallssdocPrintExplicitRuntimeRepssdocPrintExplicitCoercionssdocPrintExplicitKindssdocPrintAxiomIncompssdocPrintTypecheckerElaborationsdocPrintCaseAsLetsdocPrintUnicodeSyntax sdocPprDebugsdocHexWordLiteralssdocCanUseUnicodesdocLineLengthsdocDefaultDepthsdocShouldUseColorsdocLastColour sdocColScheme sdocStyle QualifyName NameUnqualNameQualNameNotInScope1NameNotInScope2IsEmptyOrSingleton PromotedItemPromotedItemListSyntaxPromotedItemTupleSyntaxPromotedItemDataConPromotionTickContext PromTickCtxptcPrintRedundantPromTicksptcListTuplePunsQueryPromotionTickQueryQualifyPackageQueryQualifyModuleQueryQualifyName NamePprCtx QueryQualifyqueryPromotionTickqueryQualifyPackagequeryQualifyModulequeryQualifyNameDepth AllTheWayPartWay DefaultDepthPprStylePprUserPprDumpPprCodeisListEmptyOrSingletonreallyAlwaysQualifyNamesalwaysQualifyNamesneverQualifyNamesalwaysQualifyModulesneverQualifyModulesalwaysQualifyPackagesneverQualifyPackagesalwaysPrintPromTickreallyAlwaysQualify alwaysQualify neverQualifydefaultUserStyledefaultDumpStyle mkDumpStyledefaultErrStyle mkErrStylecmdlineParserStyle mkUserStyle withUserStyle withErrStylesetStyleColouredrunSDocdefaultSDocContexttraceSDocContext withPprStyle pprDeeper pprDeeperList pprSetDepth getPprStylesdocWithContext sdocOptionupdSDocContextqualName qualModule qualPackagepromTick queryQual codeStyle dumpStyle userStyle getPprDebug ifPprDebug whenPprDebug printSDoc printSDocLnbufLeftRenderSDocpprCoderenderWithContextshowSDocOneLineshowSDocUnsafe showPprUnsafepprDebugAndThen docToSDocword doublePrec angleBracketscparen blankLinedcolonarrowlollipoplarrowdarrowarrowtlarrowtarrowttlarrowttlambda underscoredotvbar forAllLitbullet unicodeSyntaxpunctuateFinalppWhenppUnless ppWhenOptionppUnlessOptioncolouredkeyword pprModuleName pprHsChar pprHsString pprHsBytesprimCharSuffixprimFloatSuffix primIntSuffixprimDoubleSuffixprimWordSuffixprimInt8SuffixprimWord8SuffixprimInt16SuffixprimWord16SuffixprimInt32SuffixprimWord32SuffixprimInt64SuffixprimWord64Suffix pprPrimChar pprPrimInt pprPrimWord pprPrimInt8 pprPrimInt16 pprPrimInt32 pprPrimInt64 pprPrimWord8 pprPrimWord16 pprPrimWord32 pprPrimWord64 pprPrefixVar pprInfixVarpprFastFilePathpprFilePathString pprWithCommas pprWithBarsspaceIfSingleQuote interppSP interpp'SP interpp'SP' pprQuotedListquotedListWithOrquotedListWithNorquotedListWithAnd intWithCommasspeakNthspeakNspeakNOfpluralsingularisOrAredoOrDoes itsOrTheiritOrThey thisOrThese hasOrHavebPutHDoc$fOutputableModuleName$fOutputableIntMap$fOutputableMap$fOutputableIntSet$fOutputableSet$fOutputableNonEmpty$fOutputableList$fOutputableDouble$fOutputableFloat$fOutputableWord$fOutputableWord64$fOutputableWord32$fOutputableWord16$fOutputableWord8$fOutputableInteger$fOutputableInt$fOutputableInt64$fOutputableInt32$fOutputableInt16$fOutputableInt8$fOutputableSDoc$fOutputablePenvVoid$fOutputablePenvSDoc$fOutputablePenvSCC$fOutputablePenvMap$fOutputablePenvTuple3$fOutputablePenvTuple2$fOutputablePenvMaybe$fOutputablePenvList$fOutputablePenvPDoc$fIsOutputHDoc$fIsOutputHLine$fIsOutputSDoc $fIsLineHLine $fIsLineSDoc$fOutputablePenvSet$fOutputableExtension$fOutputableSerialized$fOutputableFingerprint$fOutputableFastString$fOutputableTuple7$fOutputableTuple6$fOutputableTuple5$fOutputableTuple4$fOutputableTuple3$fOutputableEither$fOutputableMaybe$fOutputableTuple2$fOutputableArg$fOutputableUTCTime$fOutputableUnit$fOutputableOrdering$fOutputableBool$fOutputableVoid$fIsStringSDoc$fOutputablePprStyle$fOutputableQualifyName $fIsDocHDoc $fIsDocSDoc$fOutputableSCC$fEqBindingSite$fOutputableLexicalFastString$fOutputableNonDetFastStringSignal UsageError CmdLineErrorPanicPprPanicSorryPprSorryInstallationError ProgramErrorPprProgramError showExceptionsafeShowExceptionshowGhcExceptionUnsafeshowGhcExceptionthrowGhcExceptionthrowGhcExceptionIOhandleGhcExceptionpprPanicpanicDocsorryDoc pgmErrorDoctryMostwithSignalHandlers callStackDocprettyCallStackDocassertPprPanic assertPprassertPprMaybe massertPpr assertPprM$fShowGhcException$fExceptionGhcExceptionpprTrace pprTraceM pprTraceDebug pprTraceWith pprTraceItpprTraceException pprSTrace warnPprTracepprTraceUserWarning IdDetailsIdInfo pprIdDetailsisCoVarDetails coVarDetails vanillaIdInfoPrimOp UnfoldingOptsupdateCaseScalingupdateCaseThresholdupdateVeryAggressiveupdateDictDiscountupdateFunAppDiscountupdateUseThresholdupdateCreationThresholddefaultUnfoldingOpts Uniquable getUnique uNIQUE_BITSmkUniqueGrimilygetKey incrUnique stepUnique mkLocalUniqueminLocalUniquemaxLocalUnique newTagUniquemkUnique unpkUniqueisValidKnownKeyUniquehasKeyeqUniqueltUniquenonDetCmpUniquepprUniqueAlways $fShowUnique$fOutputableUnique $fEqUnique$fUniquableUnique$fUniquableModuleName$fUniquableInt$fUniquableFastString NamedThing getOccNamegetName isFieldName tidyNameOcc nameOccName setNameUnique nameUnique InvisTVBinderTcTyVarTyCoVarTyVar SpecificityVarBndrVar FunTyFlag ForAllTyFlagTcTyVarDetails MetaDetailsisConcreteTyVarisTyConableTyVar isMetaTyVarvanillaSkolemTvUnkpprTcTyVarDetailsCoreExprCoreBndrExpridName TyConRepNameTyConmkPrelTyConRepNametyConRepName_maybeisUnboxedTupleTyCon isTupleTyConTyThingmkAnIdmkATyCon MCoercionN CoercionN ThetaTypeRuntimeRepTypePredTypeMultScaled MCoercionTyLitUnivCoProvenanceCoSelFunSelCoercion mkNakedFunTymkNakedTyConTy mkForAllTy scaledThingpprTyVarpprTyLitpprCopprKind debugPprTypepprTypenoFreeVarsOfType NonDetUniqFM getNonDetUniqFMemptyUFM isNullUFMunitUFMunitDirectlyUFMzipToUFM listToUFMlistToUFM_DirectlylistToIdentityUFM listToUFM_CaddToUFM addListToUFMaddListToUFM_DirectlyaddToUFM_Directly addToUFM_C addToUFM_Acc addToUFM_LalterUFMalterUFM_DirectlyaddListToUFM_C adjustUFMadjustUFM_Directly delFromUFMdelListFromUFMdelListFromUFM_DirectlydelFromUFM_DirectlyplusUFM plusUFM_C plusUFM_CD plusUFM_CD2mergeUFMplusMaybeUFM_C plusUFMListplusUFMListWithsequenceUFMListminusUFM minusUFM_C intersectUFMintersectUFM_C disjointUFM nonDetFoldUFMnonDetFoldWithKeyUFMmapUFM mapMaybeUFMmapMaybeWithKeyUFMmapUFM_Directly strictMapUFM filterUFMfilterUFM_Directly partitionUFMsizeUFMelemUFMelemUFM_Directly lookupUFMlookupUFM_DirectlylookupWithDefaultUFMlookupWithDefaultUFM_DirectlyufmToSet_DirectlyanyUFMallUFM seqEltsUFM nonDetEltsUFM nonDetKeysUFMnonDetStrictFoldUFMnonDetStrictFoldUFM_DirectlyMnonDetStrictFoldUFM_DirectlynonDetUFMToList ufmToIntMapunsafeIntMapToUFMunsafeCastUFMKey equalKeysUFM pprUniqFMpprUFMpprUFMWithKeys pluralUFM$fOutputableUniqFM$fMonoidUniqFM$fSemigroupUniqFM$fTraversableNonDetUniqFM$fFoldableNonDetUniqFM$fFunctorNonDetUniqFM $fDataUniqFM $fEqUniqFM$fFunctorUniqFMPairAnd fromMaybe$fAlternativeMaybe$fApplicativeMaybe $fMonoidMaybe$fSemigroupMaybe$fEqPair $fOrdPair $fShowPair $fFunctorPair$fFoldablePair$fTraversablePair $fDataPair $fEqMaybe $fOrdMaybe $fShowMaybe$fFunctorMaybe$fFoldableMaybe$fTraversableMaybe $fDataMaybe insertListinsertListWith deleteList foldRightfoldRightWithKey GHC.Lexeme startsConId startsConSym startsVarId startsVarSymisLexConisLexVarisLexIdisLexSym isLexConId isLexVarId isLexConSym isLexVarSymokVarOccokConOccokTcOcc okVarIdOcc okVarSymOcc okConIdOcc okConSymOccMaybeErr SucceededFailed firstJust firstJusts firstJustsM expectJust whenIsJustorElse rightToMaybe liftMaybeT tryMaybeT isSuccessfailME$fMonadMaybeErr$fApplicativeMaybeErr$fFunctorMaybeErr zipWith3M zipWith3M_ zipWith4MzipWithAndUnzipM zipWith3MNE mapAndUnzip3M mapAndUnzip4M mapAndUnzip5M mapAccumLMmapSndM concatMapM mapMaybeManyMallMorMfoldlM_whenMunlessM filterOutM partitionM MonadUniquegetUniqueSupplyM getUniqueM getUniquesMUniqSM UniqSupplymkSplitUniqSupplyinitUniqSupply uniqFromMasksplitUniqSupplylistSplitUniqSupplyuniqFromSupplyuniqsFromSupplytakeUniqFromSupplyinitUsinitUs_$fMonadFixUniqSM$fMonadFailUniqSM$fApplicativeUniqSM $fMonadUniqSM$fFunctorUniqSM$fMonadUniqueUniqSM LayoutInfoExplicitBraces VirtualBraces NoLayoutInfo HsUniToken HsNormalTok HsUnicodeTokHsTokenHsTok LHsUniTokenLHsToken$fDataHsUniToken $fDataHsToken $fEqHsToken hiVersionmAX_TUPLE_SIZEmAX_CTUPLE_SIZE mAX_SUM_SIZEmAX_REDUCTION_DEPTHmAX_SOLVER_ITERATIONS mAX_QC_FUELmAX_WANTEDS_FUELmAX_GIVENS_FUEL wORD64_SIZE fLOAT_SIZE dOUBLE_SIZEtARGET_MAX_CHAR UniqueMap UniqueSetIsMapKeyOfmapNullmapSize mapMember mapLookupmapFindWithDefaultmapEmpty mapSingleton mapInsert mapInsertWith mapDeletemapAlter mapAdjustmapUnionmapUnionWithKey mapDifferencemapIntersection mapIsSubmapOfmapMap mapMapWithKeymapFoldlmapFoldrmapFoldlWithKeymapFoldMapWithKey mapFiltermapFilterWithKeymapElemsmapKeys mapToList mapFromListmapFromListWithIsSetElemOfsetNullsetSize setMembersetEmpty setSingleton setInsert setDeletesetUnion setDifferencesetIntersection setIsSubsetOf setFiltersetFoldlsetFoldrsetElems setFromList setInsertList setDeleteList setUnions mapInsertList mapDeleteList mapUnions$fIsSetUniqueSet$fIsMapUniqueMap $fEqUniqueMap$fOrdUniqueMap$fShowUniqueMap$fFunctorUniqueMap$fFoldableUniqueMap$fTraversableUniqueMap $fEqUniqueSet$fOrdUniqueSet$fShowUniqueSet$fSemigroupUniqueSet$fMonoidUniqueSet StringBuffercurlenbufhGetStringBufferhGetStringBufferBlockhPutStringBufferappendStringBuffersstringToStringBufferstringBufferFromByteStringnextCharbidirectionalFormatCharscontainsBidirectionalFormatChar currentCharprevCharstepOn offsetBytesbyteDiffatEndfingerprintStringBufferatLinelexemeToStringlexemeToFastStringdecodePrevNCharsparseUnsignedInteger$fShowStringBufferTcRefnewTcRef readTcRef writeTcRefupdTcRef updTcRefMOption FileOptionshowOpt $fEqOptionProfAuto NoProfAuto ProfAutoAll ProfAutoTopProfAutoExports ProfAutoCalls $fEqProfAuto$fEnumProfAutostderrSupportsAnsiColorsExternalPluginSpecesp_args esp_module esp_unit_idesp_libparseExternalPluginSpec BackendNameNCGLLVMViaC JavaScript Interpreter NoBackend$fEqBackendName$fShowBackendNameWeights backEdgeBonusinfoTablePenaltyunlikelyCondWeightlikelyCondWeight callWeight switchWeightcondBranchWeight uncondWeightdefaultWeights parseWeights AnyHpcUsageHpcInfo NoHpcInfo hpcInfoHashhpcInfoTickCounthpcUsed emptyHpcInfo isHpcUsedToJsonjsonJsonDocJSNullJSBoolJSIntJSStringJSArrayJSObject renderJSONescapeJsonString $fToJsonInt $fToJsonList PsLocatedPsSpan psBufSpan psRealSpanPsLocpsBufPos psRealLoc RealLocatedLocated GenLocatedLUnhelpfulSpanReasonUnhelpfulNoLocationInfoUnhelpfulWiredInUnhelpfulInteractiveUnhelpfulGeneratedUnhelpfulOtherSrcSpan RealSrcSpan UnhelpfulSpanBufSpan bufSpanEnd bufSpanStart RealSrcSpan' srcSpanFileSrcLoc RealSrcLoc UnhelpfulLocBufPosbufPosmkSrcLoc mkRealSrcLocleftmostColumn getBufPosnoSrcLocgeneratedSrcLocinteractiveSrcLocmkGeneralSrcLoc srcLocFile srcLocLine srcLocCol advanceSrcLoc advanceBufPos sortLocatedsortRealLocated lookupSrcLoc lookupSrcSpan removeBufSpan getBufSpan noSrcSpanwiredInSrcSpaninteractiveSrcSpangeneratedSrcSpanisGeneratedSrcSpan isNoSrcSpanmkGeneralSrcSpan srcLocSpanrealSrcLocSpan mkRealSrcSpanisPointRealSpan mkSrcSpancombineSrcSpanscombineRealSrcSpanscombineBufSpanssrcSpanFirstCharacter isGoodSrcSpan isOneLineSpanisZeroWidthSpan containsSpansrcSpanStartLinesrcSpanEndLinesrcSpanStartCol srcSpanEndCol srcSpanStart srcSpanEndrealSrcSpanStartrealSrcSpanEndsrcSpanFileName_maybesrcSpanToRealSrcSpanunhelpfulSpanFSpprUnhelpfulSpanReason pprUserSpanpprUserRealSpanunLocgetLocnoLocmkGeneralLocated combineLocsaddCLoc eqLocated cmpLocated cmpBufSpan pprLocatedpprLocatedAlwaysrightmost_smallestleftmost_smallestleftmost_largestspans isSubspanOfisRealSubspanOfgetRealSrcSpan unRealSrcSpanpsLocatedToLocated advancePsLocmkPsSpan psSpanStart psSpanEnd mkSrcSpanPs$fShowRealSrcLoc$fOutputableRealSrcLoc$fOutputableSrcLoc$fOutputableRealSrcSpan$fShowRealSrcSpan$fOrdRealSrcSpan$fToJsonRealSrcSpan$fDataRealSrcSpan$fSemigroupBufSpan$fOutputableUnhelpfulSpanReason$fOutputableSrcSpan$fNFDataSrcSpan$fToJsonSrcSpan $fDataSrcSpan$fOutputableGenLocated$fNFDataGenLocated$fOutputableGenLocated0 $fEqPsSpan $fOrdPsSpan $fShowPsSpan $fDataPsSpan $fEqPsLoc $fOrdPsLoc $fShowPsLoc$fEqGenLocated$fOrdGenLocated$fShowGenLocated$fDataGenLocated$fFunctorGenLocated$fFoldableGenLocated$fTraversableGenLocated $fEqSrcSpan $fShowSrcSpan$fEqUnhelpfulSpanReason$fShowUnhelpfulSpanReason $fEqBufSpan $fOrdBufSpan $fShowBufSpan $fDataBufSpan$fEqRealSrcSpan $fEqSrcLoc $fShowSrcLoc $fEqBufPos $fOrdBufPos $fShowBufPos $fDataBufPos$fEqRealSrcLoc$fOrdRealSrcLoc BinSrcSpan unBinSrcSpanBinSpan unBinSpan BinLocated unBinLocated SymbolTableFSTable DictionaryUserData ud_put_fsud_put_binding_nameud_put_nonbinding_name ud_get_fs ud_get_nameFixedLengthEncoding unFixedLengthBinaryput_putgetBin BinHandleBinData dataHandle handleData getUserData setUserData withBinBufferunsafeUnpackBinBuffercastBinputAtgetAt openBinMemtellBinseekBin writeBinMem readBinMem readBinMemNfoldGetfoldGet'putBytegetByte putULEB128 getULEB128 putSLEB128 getSLEB128 forwardPut forwardPut_ forwardGetlazyPutlazyGet lazyPutMaybe lazyGetMaybe newReadState newWriteState noUserData putDictionary getDictionarygetDictFastString initFSTableputDictFastStringputFS$fNFDataBinData$fBinaryIntMap$fBinaryUnhelpfulSpanReason$fBinaryModuleName$fBinaryFingerprint$fBinaryFastString$fBinaryByteString $fBinaryBin $fBinaryRatio$fBinaryInteger$fBinaryDiffTime $fBinaryDay$fBinaryUTCTime$fBinaryEither $fBinaryMaybe$fBinaryMaybe0$fBinaryTuple7$fBinaryTuple6$fBinaryTuple5$fBinaryTuple4$fBinaryTuple3$fBinaryTuple2 $fBinaryArray$fBinaryNonEmpty $fBinarySet $fBinaryList $fBinaryInt $fBinaryChar $fBinaryBool $fBinaryUnit $fBinaryInt64 $fBinaryInt32 $fBinaryInt16 $fBinaryInt8$fBinaryWord64$fBinaryWord32$fBinaryWord16 $fBinaryWord8$fBinaryFixedLengthEncoding$fBinaryFixedLengthEncoding0$fBinaryFixedLengthEncoding1$fBinaryFixedLengthEncoding2$fBinaryBinData$fBinaryBinSpan$fBinaryBinSrcSpan$fBinaryBinLocated$fEqFixedLengthEncoding$fOrdFixedLengthEncoding$fShowFixedLengthEncoding$fEqBin$fOrdBin $fShowBin $fBoundedBin$fBinaryLexicalFastString$fBinaryNonDetFastStringEnumSetmemberinsertdelete difference$fBinaryEnumSet$fSemigroupEnumSet$fMonoidEnumSet$fNFDataEnumSetgetSomeTypeRep$fBinarySerialized$fBinaryTypeLitSort$fBinaryKindRep$fBinaryRuntimeRep$fBinaryVecElem$fBinaryVecCount$fBinaryTypeRep$fBinarySomeTypeRep $fBinaryTyConExtensibleFieldsgetExtensibleFields FieldNameemptyExtensibleFields readField readFieldWith writeFieldwriteFieldWith deleteField$fNFDataExtensibleFields$fBinaryExtensibleFieldsUniqDFM emptyUDFMunitUDFM addToUDFMaddToUDFM_DirectlyaddToUDFM_C_Directly addToUDFM_C addListToUDFM delFromUDFM plusUDFM_CplusUDFM lookupUDFMlookupUDFM_DirectlyelemUDFMfoldUDFMnonDetStrictFoldUDFMeltsUDFM filterUDFMfilterUDFM_DirectlyudfmRestrictKeysudfmRestrictKeysSet udfmToList equalKeysUDFM isNullUDFMsizeUDFM intersectUDFMudfmIntersectUFM disjointUDFMdisjointUdfmUfm minusUDFM udfmMinusUFM ufmMinusUDFM partitionUDFMdelListFromUDFM udfmToUfm listToUDFMlistToUDFM_Directly adjustUDFMadjustUDFM_Directly alterUDFMmapUDFM mapMaybeUDFManyUDFMallUDFMalwaysUnsafeUfmToUdfmunsafeCastUDFMKey pprUniqDFMpprUDFM $fEqTaggedVal$fOutputableUniqDFM$fTraversableUniqDFM$fFoldableUniqDFM $fDataUniqDFM$fFunctorUniqDFM$fDataTaggedVal$fFunctorTaggedVal$fFoldableTaggedVal$fTraversableTaggedValDFastStringEnv FastStringEnv emptyFsEnv unitFsEnv extendFsEnvextendFsEnvList lookupFsEnv alterFsEnvmkFsEnv elemFsEnv plusFsEnv plusFsEnv_C extendFsEnv_CmapFsEnvextendFsEnv_AccextendFsEnvList_C delFromFsEnvdelListFromFsEnv filterFsEnv mapMaybeFsEnvlookupFsEnv_NFstrictMapFsEnvnonDetFoldFsEnv emptyDFsEnv dFsEnvEltsmkDFsEnv lookupDFsEnvCostCentreIndexunCostCentreIndexCostCentreStatenewCostCentreState getCCIndex$fEqCostCentreIndex$fOrdCostCentreIndex$fDataCostCentreIndex$fBinaryCostCentreIndexUniqSet emptyUniqSet unitUniqSet mkUniqSetaddOneToUniqSetaddListToUniqSetdelOneFromUniqSetdelOneFromUniqSet_DirectlydelListFromUniqSetdelListFromUniqSet_Directly unionUniqSetsunionManyUniqSets minusUniqSetintersectUniqSetsdisjointUniqSetsrestrictUniqSetToUFMuniqSetMinusUFMuniqSetMinusUDFMelementOfUniqSetelemUniqSet_Directly filterUniqSetfilterUniqSet_DirectlypartitionUniqSet uniqSetAny uniqSetAll sizeUniqSetisEmptyUniqSet lookupUniqSetlookupUniqSet_DirectlynonDetEltsUniqSetnonDetKeysUniqSetnonDetStrictFoldUniqSet mapUniqSet getUniqSetunsafeUFMToUniqSet pprUniqSet$fOutputableUniqSet $fEqUniqSet $fDataUniqSet$fSemigroupUniqSet$fMonoidUniqSetUniqDSet emptyUniqDSet unitUniqDSet mkUniqDSetaddOneToUniqDSetaddListToUniqDSetdelOneFromUniqDSetdelListFromUniqDSetunionUniqDSetsunionManyUniqDSets minusUniqDSetuniqDSetMinusUniqSetintersectUniqDSetsuniqDSetIntersectUniqSetnonDetStrictFoldUniqDSetelementOfUniqDSetfilterUniqDSet sizeUniqDSetisEmptyUniqDSetlookupUniqDSetuniqDSetToListpartitionUniqDSet mapUniqDSet getUniqDSet pprUniqDSet$fOutputableUniqDSet $fEqUniqDSet$fDataUniqDSet StringLiteralsl_tcsl_fssl_stFractionalExponentBaseBase2Base10 FractionalLitFL fl_exp_basefl_expfl_signifl_negfl_text IntegralLitILil_valueil_negil_text SourceText NoSourceTextpprWithSourceText mkIntegralLitnegateIntegralLitmkFractionalLitfractionalLitFromRationalrationalFromFractionalLitmkTHFractionalLitnegateFractionalLitintegralFractionalLitmkSourceFractionalLit$fBinarySourceText$fNFDataSourceText$fOutputableSourceText$fOutputableIntegralLit$fOrdIntegralLit$fEqIntegralLit$fOutputableFractionalLit$fOrdFractionalLit$fEqFractionalLit$fOutputableStringLiteral$fEqStringLiteral$fDataStringLiteral$fDataFractionalLit$fShowFractionalLit$fEqFractionalExponentBase$fOrdFractionalExponentBase$fDataFractionalExponentBase$fShowFractionalExponentBase$fDataIntegralLit$fShowIntegralLit$fDataSourceText$fShowSourceText$fEqSourceTextOrdListSnocOLConsOLNilOLnilOLunitOLsnocOLconsOLconcatOLheadOLlastOLisNilOLappOLfromOL fromOLReversemapOLmapOL'foldrOLfoldlOLtoOL reverseOL strictlyEqOL strictlyOrdOL$fTraversableOrdList$fFoldableOrdList$fMonoidOrdList$fSemigroupOrdList$fOutputableOrdList$fFunctorOrdListUniqMap getUniqMap emptyUniqMap isNullUniqMap unitUniqMap listToUniqMaplistToUniqMap_C addToUniqMapaddListToUniqMapaddToUniqMap_CaddToUniqMap_AccaddToUniqMap_L alterUniqMapaddListToUniqMap_C adjustUniqMapdelFromUniqMapdelListFromUniqMap plusUniqMap plusUniqMap_CplusMaybeUniqMap_CplusUniqMapListplusUniqMapListWith minusUniqMapintersectUniqMapintersectUniqMap_CdisjointUniqMap mapUniqMap filterUniqMapfilterWithKeyUniqMappartitionUniqMap sizeUniqMap elemUniqMap lookupUniqMaplookupWithDefaultUniqMap anyUniqMap allUniqMapnonDetUniqMapToListnonDetUniqMapToKeySetnonDetKeysUniqMapnonDetEltsUniqMapnonDetFoldUniqMap$fNFDataUniqMap$fOutputableUniqMap$fMonoidUniqMap$fSemigroupUniqMap $fDataUniqMap $fEqUniqMap$fFunctorUniqMapEdgeTypeForwardCrossBackwardSelfLoopNode DigraphNodenode_dependenciesnode_key node_payloadGraphgraphFromEdgedVerticesOrdgraphFromEdgedVerticesUniq findCyclestronglyConnCompG$stronglyConnCompFromEdgedVerticesOrd%stronglyConnCompFromEdgedVerticesUniq%stronglyConnCompFromEdgedVerticesOrdR&stronglyConnCompFromEdgedVerticesUniqRtopologicalSortG reachableG outgoingG reachablesG allReachableallReachableCyclic hasVertexG verticesGedgesG transposeGemptyG classifyEdgesgraphFromVerticesAndAdjacency$fOutputableEdge$fOutputableNode$fOutputableGraph$fOutputableEdgeType$fEqTime $fOrdTime $fNumTime$fOutputableTime $fEqEdgeType $fOrdEdgeType $fFunctorNodeFieldSelectorsNoFieldSelectorsDuplicateRecordFieldsNoDuplicateRecordFields FieldLabel flSelectorflHasFieldSelectorflHasDuplicateRecordFields FieldLabelEnvflLabelflIsOverloaded$fUniquableFieldLabelString$fOutputableFieldLabelString$fNFDataDuplicateRecordFields!$fOutputableDuplicateRecordFields$fBinaryDuplicateRecordFields$fNFDataFieldSelectors$fOutputableFieldSelectors$fBinaryFieldSelectors$fBinaryFieldLabel$fOutputableFieldLabel$fHasOccNameFieldLabel$fDataFieldLabel$fEqFieldLabel$fShowFieldSelectors$fEqFieldSelectors$fDataFieldSelectors$fShowDuplicateRecordFields$fEqDuplicateRecordFields$fDataDuplicateRecordFieldsAssocgetNth unionListsOrd unionLists minusListassocDefaultUsingassoc assocDefault assocUsing assocMaybe hasNoDups equivClasses removeDups removeDupsOnnubOrdBy findDupsEqisInisn'tInBagemptyBagunitBag lengthBagelemBag unionManyBags unionBagsconsBagsnocBag isEmptyBagisSingletonBag filterBag filterBagM lookupBagallBaganyBaganyBagM concatBag catBagMaybes partitionBagpartitionBagWithfoldBagmapBag concatMapBagconcatMapBagPair mapMaybeBag mapMaybeBagMmapBagMmapBagM_ flatMapBagMflatMapBagPairMmapAndUnzipBagM mapAccumBagL mapAccumBagLM listToBag nonEmptyToBag bagToListunzipBag headMaybepprBag $fMonoidBag$fSemigroupBag $fIsListBag $fDataBag$fOutputableBag $fNFDataBag $fFoldableBag $fFunctorBag$fTraversableBag LexicalFixityPrefixInfixFixityDirectionInfixLInfixRInfixNFixity maxPrecedence minPrecedence defaultFixity negateFixity funTyFixity compareFixity$fBinaryFixityDirection$fOutputableFixityDirection$fBinaryFixity $fEqFixity$fOutputableFixity$fOutputableLexicalFixity$fDataLexicalFixity$fEqLexicalFixity $fDataFixity$fEqFixityDirection$fDataFixityDirectionHsDocStringChunkLHsDocStringChunkHsDocStringDecoratorHsDocStringNextHsDocStringPreviousHsDocStringNamedHsDocStringGroup HsDocStringMultiLineDocStringNestedDocStringGeneratedDocString LHsDocStringpprWithDocStringmkHsDocStringChunk mkHsDocStringChunkUtf8ByteString unpackHDSCmkGeneratedHsDocStringisEmptyDocStringdocStringChunkspprHsDocStringpprHsDocStringsexactPrintHsDocStringrenderHsDocStringrenderHsDocStrings$fBinaryHsDocStringDecorator$fNFDataHsDocStringDecorator $fOutputableHsDocStringDecorator$fOutputableHsDocStringChunk$fBinaryHsDocStringChunk$fBinaryHsDocString$fNFDataHsDocString$fOutputableHsDocString$fEqHsDocString$fDataHsDocString$fShowHsDocString$fEqHsDocStringChunk$fOrdHsDocStringChunk$fDataHsDocStringChunk$fShowHsDocStringChunk$fNFDataHsDocStringChunk$fEqHsDocStringDecorator$fOrdHsDocStringDecorator$fShowHsDocStringDecorator$fDataHsDocStringDecoratorpSndpFstunPairtoPairswappLiftFstpLiftSnd$fOutputablePair $fMonoidPair$fSemigroupPair$fApplicativePair WarningGroupW_compatW_unused_bindsW_extended_warnings W_defaultW_extraW_all W_everything WarningFlagOpt_WarnDuplicateExportsOpt_WarnDuplicateConstraintsOpt_WarnRedundantConstraintsOpt_WarnHiShadowsOpt_WarnImplicitPreludeOpt_WarnIncompletePatternsOpt_WarnIncompleteUniPatterns Opt_WarnIncompletePatternsRecUpdOpt_WarnOverflowedLiteralsOpt_WarnEmptyEnumerationsOpt_WarnMissingFieldsOpt_WarnMissingImportListOpt_WarnMissingMethodsOpt_WarnMissingSignaturesOpt_WarnMissingLocalSignaturesOpt_WarnNameShadowingOpt_WarnOverlappingPatternsOpt_WarnTypeDefaultsOpt_WarnMonomorphismOpt_WarnUnusedTopBindsOpt_WarnUnusedLocalBindsOpt_WarnUnusedPatternBindsOpt_WarnUnusedImportsOpt_WarnUnusedMatchesOpt_WarnUnusedTypePatternsOpt_WarnUnusedForallsOpt_WarnUnusedRecordWildcardsOpt_WarnRedundantBangPatterns Opt_WarnRedundantRecordWildcardsOpt_WarnDeprecatedFlags!Opt_WarnMissingMonadFailInstancesOpt_WarnSemigroupOpt_WarnDodgyExportsOpt_WarnDodgyImportsOpt_WarnOrphansOpt_WarnAutoOrphansOpt_WarnIdentities Opt_WarnTabsOpt_WarnUnrecognisedPragmasOpt_WarnMisplacedPragmasOpt_WarnDodgyForeignImportsOpt_WarnUnusedDoBindOpt_WarnWrongDoBind)Opt_WarnAlternativeLayoutRuleTransitionalOpt_WarnUnsafe Opt_WarnSafeOpt_WarnTrustworthySafeOpt_WarnMissedSpecsOpt_WarnAllMissedSpecs%Opt_WarnUnsupportedCallingConventionsOpt_WarnUnsupportedLlvmVersionOpt_WarnMissedExtraSharedLibOpt_WarnInlineRuleShadowingOpt_WarnTypedHolesOpt_WarnPartialTypeSignatures!Opt_WarnMissingExportedSignatures$Opt_WarnUntickedPromotedConstructorsOpt_WarnDerivingTypeableOpt_WarnDeferredTypeErrors#Opt_WarnDeferredOutOfScopeVariables"Opt_WarnNonCanonicalMonadInstances&Opt_WarnNonCanonicalMonadFailInstances#Opt_WarnNonCanonicalMonoidInstances'Opt_WarnMissingPatternSynonymSignatures Opt_WarnUnrecognisedWarningFlags$Opt_WarnSimplifiableClassConstraintsOpt_WarnCPPUndefOpt_WarnUnbangedStrictPatternsOpt_WarnMissingHomeModulesOpt_WarnPartialFieldsOpt_WarnMissingExportListOpt_WarnInaccessibleCodeOpt_WarnStarIsTypeOpt_WarnStarBinderOpt_WarnImplicitKindVarsOpt_WarnSpaceAfterBang!Opt_WarnMissingDerivingStrategies"Opt_WarnPrepositiveQualifiedModuleOpt_WarnUnusedPackagesOpt_WarnInferredSafeImportsOpt_WarnMissingSafeHaskellMode Opt_WarnCompatUnqualifiedImportsOpt_WarnDerivingDefaultsOpt_WarnInvalidHaddock%Opt_WarnOperatorWhitespaceExtConflictOpt_WarnOperatorWhitespaceOpt_WarnAmbiguousFieldsOpt_WarnImplicitLiftOpt_WarnMissingKindSignatures!Opt_WarnMissingPolyKindSignatures/Opt_WarnMissingExportedPatternSynonymSignatures Opt_WarnRedundantStrictnessFlagsOpt_WarnForallIdentifier,Opt_WarnUnicodeBidirectionalFormatCharactersOpt_WarnGADTMonoLocalBindsOpt_WarnTypeEqualityOutOfScope%Opt_WarnTypeEqualityRequiresOperatorsOpt_WarnLoopySuperclassSolveOpt_WarnTermVariableCaptureOpt_WarnMissingRoleAnnotations!Opt_WarnImplicitRhsQuantification Opt_WarnIncompleteExportWarningsOpt_WarnInconsistentFlags GeneralFlagOpt_DumpToFileOpt_DumpWithWaysOpt_D_dump_minimal_importsOpt_DoCoreLintingOpt_DoLinearCoreLintingOpt_DoStgLintingOpt_DoCmmLintingOpt_DoAsmLintingOpt_DoAnnotationLintingOpt_DoBoundsCheckingOpt_NoLlvmMangler Opt_FastLlvmOpt_NoTypeableBindsOpt_DistinctConstructorTablesOpt_InfoTableMapOpt_InfoTableMapWithFallbackOpt_InfoTableMapWithStackOpt_WarnIsErrorOpt_ShowWarnGroupsOpt_HideSourcePathsOpt_PrintExplicitForallsOpt_PrintExplicitKindsOpt_PrintExplicitCoercionsOpt_PrintExplicitRuntimeRepsOpt_PrintEqualityRelationsOpt_PrintAxiomIncompsOpt_PrintUnicodeSyntaxOpt_PrintExpandedSynonymsOpt_PrintPotentialInstances Opt_PrintRedundantPromotionTicksOpt_PrintTypecheckerElaboration Opt_CallArityOpt_ExitificationOpt_StrictnessOpt_LateDmdAnalOpt_KillAbsenceOpt_KillOneShotOpt_FullLaziness Opt_FloatInOpt_LocalFloatOutOpt_LocalFloatOutTopLevelOpt_LateSpecialiseOpt_SpecialiseOpt_SpecialiseAggressivelyOpt_CrossModuleSpecialiseOpt_PolymorphicSpecialisationOpt_InlineGenericsOpt_InlineGenericsAggressively Opt_StaticArgumentTransformationOpt_CSE Opt_StgCSEOpt_StgLiftLamsOpt_LiberateCaseOpt_SpecConstrOpt_SpecConstrKeenOpt_SpecialiseIncoherentsOpt_DoLambdaEtaExpansionOpt_IgnoreAssertsOpt_DoEtaReduction Opt_CaseMergeOpt_CaseFoldingOpt_UnboxStrictFieldsOpt_UnboxSmallStrictFieldsOpt_DictsCheapOpt_EnableRewriteRulesOpt_EnableThSpliceWarnings Opt_RegsGraphOpt_RegsIterativeOpt_PedanticBottoms Opt_LlvmTBAAOpt_LlvmFillUndefWithGarbageOpt_IrrefutableTuples Opt_CmmSinkOpt_CmmStaticPredOpt_CmmElimCommonBlocksOpt_CmmControlFlowOpt_AsmShortcuttingOpt_OmitYieldsOpt_FunToThunkOpt_DictsStrictOpt_DmdTxDictSelOpt_LoopificationOpt_CfgBlocklayoutOpt_WeightlessBlocklayout Opt_CprAnalOpt_WorkerWrapperOpt_WorkerWrapperUnliftOpt_SolveConstantDictsOpt_AlignmentSanitisationOpt_CatchNonexhaustiveCasesOpt_NumConstantFoldingOpt_CoreConstantFoldingOpt_FastPAPCallsOpt_DoTagInferenceChecksOpt_SimplPreInliningOpt_IgnoreInterfacePragmasOpt_OmitInterfacePragmasOpt_ExposeAllUnfoldingsOpt_WriteInterface Opt_WriteHieOpt_DisableJsMinifierOpt_AutoSccsOnIndividualCafsOpt_ProfCountEntriesOpt_ProfLateInlineCcsOpt_ProfLateCcsOpt_ProfManualCcsOpt_PpOpt_ForceRecompOpt_IgnoreOptimChangesOpt_IgnoreHpcChangesOpt_ExcessPrecisionOpt_EagerBlackHoling Opt_NoHsMainOpt_SplitSections Opt_StgStatsOpt_HideAllPackagesOpt_HideAllPluginPackagesOpt_PrintBindResult Opt_HaddockOpt_HaddockOptionsOpt_BreakOnExceptionOpt_BreakOnErrorOpt_PrintEvldWithShowOpt_PrintBindContentsOpt_GenManifestOpt_EmbedManifestOpt_SharedImplibOpt_BuildingCabalPackageOpt_IgnoreDotGhciOpt_GhciSandboxOpt_InsertBreakpointsOpt_GhciHistoryOpt_GhciLeakCheckOpt_ValidateHieOpt_LocalGhciHistoryOpt_NoItOpt_HelpfulErrorsOpt_DeferTypeErrorsOpt_DeferTypedHolesOpt_DeferOutOfScopeVariablesOpt_PICOpt_PIEOpt_PICExecutableOpt_ExternalDynamicRefs Opt_TickyOpt_Ticky_Allocd Opt_Ticky_LNEOpt_Ticky_Dyn_Thunk Opt_Ticky_Tag Opt_Ticky_APOpt_CmmThreadSanitizer Opt_RPathOpt_RelativeDynlibPathsOpt_CompactUnwindOpt_HpcOpt_FamAppCacheOpt_ExternalInterpreterOpt_OptimalApplicativeDoOpt_VersionMacrosOpt_WholeArchiveHsLibsOpt_SingleLibFolderOpt_ExposeInternalSymbols Opt_KeepCAFs Opt_KeepGoing Opt_ByteCodeOpt_ByteCodeAndObjectCode!Opt_UnoptimizedCoreForInterpreter Opt_LinkRtsOpt_ErrorSpansOpt_DeferDiagnosticsOpt_DiagnosticsShowCaretOpt_PprCaseAsLetOpt_PprShowTicksOpt_ShowHoleConstraintsOpt_ShowValidHoleFitsOpt_SortValidHoleFitsOpt_SortBySizeHoleFitsOpt_SortBySubsumHoleFitsOpt_AbstractRefHoleFitsOpt_UnclutterValidHoleFitsOpt_ShowTypeAppOfHoleFitsOpt_ShowTypeAppVarsOfHoleFitsOpt_ShowDocsOfHoleFitsOpt_ShowTypeOfHoleFitsOpt_ShowProvOfHoleFitsOpt_ShowMatchesOfHoleFitsOpt_ShowLoadedModulesOpt_HexWordLiteralsOpt_SuppressCoercionsOpt_SuppressCoercionTypesOpt_SuppressVarKindsOpt_SuppressModulePrefixesOpt_SuppressTypeApplicationsOpt_SuppressIdInfoOpt_SuppressUnfoldingsOpt_SuppressTypeSignaturesOpt_SuppressUniquesOpt_SuppressStgExtsOpt_SuppressStgRepsOpt_SuppressTicksOpt_SuppressTimestampsOpt_SuppressCoreSizesOpt_ShowErrorContextOpt_AutoLinkPackagesOpt_ImplicitImportQualifiedOpt_KeepHscppFilesOpt_KeepHiDiffsOpt_KeepHcFilesOpt_KeepSFilesOpt_KeepTmpFilesOpt_KeepRawTokenStreamOpt_KeepLlvmFilesOpt_KeepHiFilesOpt_KeepOFilesOpt_BuildDynamicTooOpt_WriteIfSimplifiedCore Opt_UseBytecodeRatherThanObjectsOpt_DistrustAllPackagesOpt_PackageTrustOpt_PluginTrustworthyOpt_G_NoStateHackOpt_G_NoOptCoercionDumpFlagOpt_D_dump_cmmOpt_D_dump_cmm_from_stgOpt_D_dump_cmm_rawOpt_D_dump_cmm_verbose_by_procOpt_D_dump_cmm_verboseOpt_D_dump_cmm_cfgOpt_D_dump_cmm_cbeOpt_D_dump_cmm_switchOpt_D_dump_cmm_procOpt_D_dump_cmm_spOpt_D_dump_cmm_sinkOpt_D_dump_cmm_cafOpt_D_dump_cmm_procmapOpt_D_dump_cmm_splitOpt_D_dump_cmm_infoOpt_D_dump_cmm_cpsOpt_D_dump_cmm_thread_sanitizerOpt_D_dump_cfg_weightsOpt_D_dump_asmOpt_D_dump_asm_nativeOpt_D_dump_asm_livenessOpt_D_dump_asm_regallocOpt_D_dump_asm_regalloc_stagesOpt_D_dump_asm_conflictsOpt_D_dump_asm_statsOpt_D_dump_c_backendOpt_D_dump_llvm Opt_D_dump_jsOpt_D_dump_core_statsOpt_D_dump_deriv Opt_D_dump_dsOpt_D_dump_ds_preoptOpt_D_dump_foreignOpt_D_dump_inliningsOpt_D_dump_verbose_inliningsOpt_D_dump_rule_firingsOpt_D_dump_rule_rewritesOpt_D_dump_simpl_traceOpt_D_dump_occur_analOpt_D_dump_parsedOpt_D_dump_parsed_ast Opt_D_dump_rnOpt_D_dump_rn_astOpt_D_dump_simplOpt_D_dump_simpl_iterationsOpt_D_dump_specOpt_D_dump_spec_constrOpt_D_dump_prepOpt_D_dump_late_ccOpt_D_dump_stg_from_coreOpt_D_dump_stg_unarisedOpt_D_dump_stg_cgOpt_D_dump_stg_tagsOpt_D_dump_stg_finalOpt_D_dump_call_arityOpt_D_dump_exitifyOpt_D_dump_stranalOpt_D_dump_str_signaturesOpt_D_dump_cpranalOpt_D_dump_cpr_signatures Opt_D_dump_tcOpt_D_dump_tc_astOpt_D_dump_hieOpt_D_dump_typesOpt_D_dump_rulesOpt_D_dump_cseOpt_D_dump_float_outOpt_D_dump_float_inOpt_D_dump_liberate_case)Opt_D_dump_static_argument_transformationOpt_D_dump_worker_wrapperOpt_D_dump_rn_traceOpt_D_dump_rn_statsOpt_D_dump_opt_cmmOpt_D_dump_simpl_statsOpt_D_dump_cs_traceOpt_D_dump_tc_traceOpt_D_dump_ec_traceOpt_D_dump_if_traceOpt_D_dump_splicesOpt_D_th_dec_fileOpt_D_dump_BCOsOpt_D_dump_tickedOpt_D_dump_rttiOpt_D_source_statsOpt_D_verbose_stg2stg Opt_D_dump_hiOpt_D_dump_hi_diffsOpt_D_dump_mod_cyclesOpt_D_dump_mod_mapOpt_D_dump_timings!Opt_D_dump_view_pattern_commoningOpt_D_verbose_core2coreOpt_D_dump_debugOpt_D_dump_jsonOpt_D_ppr_debugOpt_D_no_debug_outputOpt_D_dump_faststringsOpt_D_faststring_statsOpt_D_ipe_statsLanguage Haskell98 Haskell2010GHC2021getDumpFlagFromenabledIfVerboseoptimisationFlags codeGenFlags warnFlagNameswarningGroupNamewarningGroupFlags$warningGroupIncludesExtendedWarnings warningGroupswarningHierarchiessmallestWarningGroups smallestWarningGroupsForCategorystandardWarnings minusWOpts minusWallOptsminusWeverythingOptsminusWcompatOptsunusedBindsFlags$fNFDataLanguage$fBinaryLanguage$fOutputableLanguage$fBoundedWarningGroup$fEnumWarningGroup$fEqWarningGroup$fEqWarningFlag$fOrdWarningFlag$fShowWarningFlag$fEnumWarningFlag$fBoundedWarningFlag$fEqGeneralFlag$fShowGeneralFlag$fEnumGeneralFlag $fEqDumpFlag$fShowDumpFlag$fEnumDumpFlag $fEqLanguage$fEnumLanguage$fShowLanguage$fBoundedLanguageIfaceTrustInfoSafeHaskellModeSf_None Sf_UnsafeSf_TrustworthySf_SafeSf_SafeInferred Sf_Ignore IsSafeImport getSafeMode setSafeModenoIfaceTrustInfo$fOutputableSafeHaskellMode$fShowSafeHaskellMode$fBinaryIfaceTrustInfo$fOutputableIfaceTrustInfo$fEqSafeHaskellModeOperatorWhitespaceOccurrence#OperatorWhitespaceOccurrence_Prefix#OperatorWhitespaceOccurrence_Suffix'OperatorWhitespaceOccurrence_TightInfixOperatorWhitespaceSymbol&OperatorWhitespaceSymbol_PrefixPercent%OperatorWhitespaceSymbol_PrefixDollar+OperatorWhitespaceSymbol_PrefixDollarDollarpprOperatorWhitespaceSymbol UnitPprInfounitPprComponentNameunitPprPackageVersionunitPprPackageName unitPprId$fOutputableUnitPprInfoRank ArbitraryRank LimitedRankMonoTypeRankZeroMonoTypeTyConArgMonoTypeSynArgMonoTypeConstraintMustBeMonoType$fOutputableRankModuleWithIsBootModuleNameWithIsBoot GenWithIsBootGWIB gwib_isBootgwib_modDefinite unDefinite DefUnitIdunitIdFSInstantiationsGenInstantiationsInstantiatedUnitGenInstantiatedUnit instUnitHoles instUnitInstsinstUnitInstanceOf instUnitKey instUnitFSRealUnitVirtUnitHoleUnitUnitKeyIsUnitIdunitFSInstantiatedModuleHomeUnitModuleInstalledModule moduleName moduleUnit moduleUnitIdmkModule pprModulepprInstantiatedModule isHoleUnit stableUnitCmppprUnitunitFreeModuleHolesmoduleFreeHolesmkInstantiatedUnit mkVirtUnitmkInstantiatedUnitHashfsToUnit unitString stringToUnit mapGenUnitmapInstantiationstoUnitId virtualUnitIdunitIsDefinite unitIdStringstringToUnitId primUnitId bignumUnitId baseUnitId rtsUnitId thisGhcUnitIdinteractiveUnitIdthUnitIdthUnitprimUnit bignumUnitbaseUnitrtsUnit thisGhcUnitinteractiveUnit mainUnitIdmainUnitisInteractiveModulewiredInUnitIds$fBinaryIsBootInterface$fNFDataGenModule$fBinaryGenModule$fIsUnitIdUnitKey$fOutputableUnitId$fUniquableUnitId $fOrdUnitId $fEqUnitId$fBinaryUnitId$fIsUnitIdUnitId$fOutputableGenModule$fUniquableGenUnit $fEqGenUnit$fOrdGenInstantiatedUnit$fEqGenInstantiatedUnit$fIsUnitIdGenUnit$fBinaryGenInstantiatedUnit$fOutputableGenInstantiatedUnit$fOutputableGenModule0$fBinaryGenUnit $fShowGenUnit$fOutputableGenUnit$fNFDataGenUnit $fDataGenUnit $fOrdGenUnit$fOutputableGenModule1$fUniquableGenModule$fOutputableGenWithIsBoot$fBinaryGenWithIsBoot$fEqGenWithIsBoot$fOrdGenWithIsBoot$fShowGenWithIsBoot$fFunctorGenWithIsBoot$fFoldableGenWithIsBoot$fTraversableGenWithIsBoot$fFunctorDefinite $fEqDefinite $fOrdDefinite$fOutputableDefinite$fBinaryDefinite$fUniquableDefinite$fIsUnitIdDefinite $fDataUnitId $fEqGenModule$fOrdGenModule$fDataGenModule$fFunctorGenModule ModLocation ml_hie_fileml_dyn_obj_file ml_obj_fileml_dyn_hi_file ml_hi_file ml_hs_file addBootSuffixremoveBootSuffixaddBootSuffix_maybeaddBootSuffixLocn_maybeaddBootSuffixLocnaddBootSuffixLocnOut$fOutputableModLocation$fShowModLocationInstalledModuleEnvDModuleNameEnv ModuleNameEnv ModuleSet ModuleEnvfilterModuleEnvmapMaybeModuleEnv elemModuleEnvextendModuleEnvextendModuleEnvWithextendModuleEnvListextendModuleEnvList_CplusModuleEnv_CdelModuleEnvList delModuleEnv plusModuleEnvlookupModuleEnvlookupWithDefaultModuleEnv mapModuleEnvpartitionModuleEnvalterModuleEnv mkModuleEnvemptyModuleEnv moduleEnvKeys moduleEnvEltsmoduleEnvToList unitModuleEnvisEmptyModuleEnv mkModuleSetextendModuleSetextendModuleSetListemptyModuleSetisEmptyModuleSet moduleSetElts elemModuleSetintersectModuleSetminusModuleSet delModuleSetunionModuleSetunionManyModuleSets unitModuleSetemptyInstalledModuleEnvlookupInstalledModuleEnvextendInstalledModuleEnvfilterInstalledModuleEnvdelInstalledModuleEnvinstalledModuleEnvEltsmergeInstalledModuleEnvplusInstalledModuleEnv $fOrdNDModule$fOutputableNDModule$fOutputableModuleEnv$fOutputableInstalledModuleEnv $fEqNDModule HasModule getModuleContainsModule extractModulemoduleIsDefinitemoduleStableStringstableModuleCmpinstalledModuleEqgetModuleInstantiationgetUnitInstantiationsuninstantiateInstantiatedUnituninstantiateInstantiatedModule isHoleModule mkHoleModuleCType CLabelString CCallConvCApiConv StdCallConv PrimCallConvJavaScriptCallConv CCallTarget StaticTarget DynamicTarget CCallSpec CExportSpec CExportStaticSafetyPlaySafePlayInterruptible PlayRisky ForeignCallCCallisSafeForeignCallplaySafeplayInterruptibleisDynamicTargetdefaultCCallConvccallConvToIntccallConvAttributepprCLabelStringisCLabelString$fBinarySafety$fOutputableSafety$fBinaryCCallConv$fOutputableCCallConv$fBinaryCCallTarget$fBinaryCCallSpec$fOutputableCCallSpec$fBinaryForeignCall$fOutputableForeignCall$fBinaryCExportSpec$fOutputableCExportSpec$fBinaryHeader$fOutputableHeader $fBinaryCType$fOutputableCType $fEqCType $fDataCType $fEqHeader $fDataHeader$fDataCExportSpec$fEqForeignCall $fEqCCallSpec$fEqCCallTarget$fDataCCallTarget $fEqCCallConv$fDataCCallConv$fEnumCCallConv $fEqSafety $fShowSafety $fDataSafety $fEnumSafetyHomeUnit GenHomeUnitDefiniteHomeUnitIndefiniteHomeUnit homeUnitIdhomeUnitInstantiationshomeUnitInstanceOfhomeUnitInstanceOfMaybehomeUnitAsUnit homeUnitMapisHomeUnitIndefiniteisHomeUnitDefiniteisHomeUnitInstantiating isHomeUnit isHomeUnitId notHomeUnitIdisHomeUnitInstanceOf isHomeModuleisHomeInstalledModulenotHomeInstalledModulenotHomeInstalledModuleMaybe notHomeModulenotHomeModuleMaybe mkHomeModulemkHomeInstalledModulehomeModuleNameInstantiationhomeModuleInstantiationPkgQual NoPkgQualThisPkgOtherPkg RawPkgQual NoRawPkgQual$fOutputableRawPkgQual$fOutputablePkgQual $fDataPkgQual $fOrdPkgQual $fEqPkgQual$fDataRawPkgQual HscSource HsSrcFile HsBootOrSigHsBootHsigHsigFile HsBootFilehscSourceToIsBoothscSourceString isHsBootOrSig isHsBootFile isHsigFile$fBinaryHscSource $fEqHscSource$fOrdHscSource$fShowHscSource$fEqHsBootOrSig$fOrdHsBootOrSig$fShowHsBootOrSig parseUnit parseUnitIdparseHoleyModule parseModSubstLPatPatLHsExpr SyntaxExprGRHSs MatchGroupHsUntypedSplice PromotionFlag NotPromoted IsPromoted isPromotedDefaultingStrategyDefaultKindVarsNonStandardDefaultingNonStandardDefaultingStrategyDefaultNonStandardTyVars TryNotToDefaultNonStandardTyVars TypeOrDataIAmDataIAmType TyConFlavour ClassFlavour TupleFlavour SumFlavourDataTypeFlavourNewtypeFlavourAbstractTypeFlavourOpenFamilyFlavourClosedTypeFamilyFlavourTypeSynonymFlavourBuiltInTypeFlavourPromotedDataConFlavourTypeOrConstraintTypeLikeConstraintLikeLevityLiftedUnlifted TypeOrKind TypeLevel KindLevel IntWithInfUnfoldingSource VanillaSrc StableUserSrcStableSystemSrc CompulsorySrc InlineSpecInline InlinableNoInlineOpaqueNoUserInlinePrag RuleMatchInfoConLikeFunLike InlinePragmainl_ruleinl_actinl_sat inl_inlineinl_src Activation AlwaysActive ActiveBefore ActiveAfter FinalActive NeverActive CompilerPhase InitialPhasePhase FinalPhasePhaseNum SuccessFlag DefMethSpec VanillaDM GenericDM TailCallInfoAlwaysTailCalledNoTailCallInfo InsideLam IsInsideLam NotInsideLamInterestingCxt IsInterestingNotInteresting BranchCountOccInfoManyOccsIAmDeadOneOccIAmALoopBreakerocc_tail occ_int_cxtocc_n_br occ_in_lamocc_rules_onlyEPtoEPfromEPUnboxedTupleOrSumUnboxedTupleTypeUnboxedSumType TupleSort BoxedTuple UnboxedTupleConstraintTuplePprPrec OverlapMode NoOverlap Overlappable OverlappingOverlaps Incoherent NonCanonical OverlapFlag isSafeOverlap overlapModeDoPmcSkipPmcOrigin FromSource GeneratedRecFlag Recursive NonRecursiveCbvMark MarkedCbv NotMarkedCbv TopLevelFlagTopLevel NotTopLevelRuleNameFunctionOrData IsFunctionIsDataSwapFlag NotSwapped IsSwapped OneShotInfo NoOneShotInfo OneShotLam AlignmentalignmentBytesConTagZ FullArgCount JoinArityRepArityArity LeftOrRightCLeftCRightpickLR fIRST_TAG mkAlignment alignmentOf noOneShotInfo isOneShotInfohasNoOneShotInfo worstOneShot bestOneShotflipSwap isSwappedunSwap pprRuleName isNotTopLevel isTopLevel isMarkedCbvisRecisNonRec boolToRecFlag isGenerated requiresPMCsetOverlapModeMaybehasIncoherentFlaghasOverlappableFlaghasOverlappingFlaghasNonCanonicalFlagtopPrecsigPrecfunPrecopPrecstarPrecappPrecmaxPrec maybeParentupleSortBoxityboxityTupleSort tupleParens sumParenspprAlternativeunboxedTupleOrSumExtension oneBranch noOccInfo isNoOccInfo isManyOccs seqOccInfo tailCallInfozapOccTailCallInfoisAlwaysTailCalledstrongLoopBreakerweakLoopBreakerisWeakLoopBreakerisStrongLoopBreaker isDeadOccisOneOcc zapFragileOcc successIf succeededfailed beginPhase activeAfter nextPhase laterPhaseactivateAfterInitialactivateDuringFinalisActiveactiveInFinalPhase isNeverActiveisAlwaysActive competesWith isConLike isFunLikenoUserInlineSpecdefaultInlinePragmaalwaysInlinePragmaneverInlinePragmaalwaysInlineConLikePragmainlinePragmaSpecinlinePragmaSourceinlineSpecSourcedfunInlinePragmaisDefaultInlinePragmaisInlinePragmaisInlinablePragmaisNoInlinePragmaisAnyInlinePragmaisOpaquePragmainlinePragmaSatinlinePragmaActivationinlinePragmaRuleMatchInfosetInlinePragmaActivationsetInlinePragmaRuleMatchInfoinlinePragmaName pprInlinepprInlineDebugisStableUserSourceisStableSystemSourceisCompulsorySourceisStableSourceinfinity intGtLimit subWithInftreatZeroAsInf mkIntWithInf isTypeLevel isKindLevel mightBeLiftedmightBeUnliftedtyConFlavourAssoc_maybedefaultNonStandardTyVars$fBinaryBoxity$fOutputableBoxity$fBinaryPromotionFlag$fOutputablePromotionFlag$fBinaryLeftOrRight$fOutputableLeftOrRight$fOutputablePenvAlignment$fOutputableAlignment$fOutputableOneShotInfo$fOutputableSwapFlag$fBinaryFunctionOrData$fOutputableFunctionOrData$fOutputableTopLevelFlag$fBinaryCbvMark$fOutputableCbvMark$fBinaryRecFlag$fOutputableRecFlag$fOutputableDoPmc$fOutputableOrigin$fBinaryOverlapMode$fOutputableOverlapMode$fBinaryOverlapFlag$fOutputableOverlapFlag$fBinaryTupleSort$fOutputableTupleSort$fOutputableUnboxedTupleOrSum$fMonoidInterestingCxt$fSemigroupInterestingCxt$fMonoidInsideLam$fSemigroupInsideLam$fOutputableTailCallInfo$fOutputableOccInfo$fOutputableDefMethSpec$fOutputableSuccessFlag$fSemigroupSuccessFlag$fOutputableCompilerPhase$fBinaryActivation$fOutputableActivation$fBinaryRuleMatchInfo$fOutputableRuleMatchInfo$fBinaryInlineSpec$fOutputableInlineSpec$fBinaryInlinePragma$fOutputableInlinePragma$fOutputableUnfoldingSource$fBinaryUnfoldingSource$fNumIntWithInf$fOutputableIntWithInf$fOrdIntWithInf$fOutputableTypeOrKind$fBinaryLevity$fOutputableLevity$fOutputableTypeOrData$fNFDataTyConFlavour$fOutputableTyConFlavour)$fOutputableNonStandardDefaultingStrategy$fOutputableDefaultingStrategy$fEqTyConFlavour$fDataTyConFlavour$fFunctorTyConFlavour$fEqTypeOrData$fDataTypeOrData$fEqTypeOrConstraint$fOrdTypeOrConstraint$fDataTypeOrConstraint $fDataLevity $fEqLevity $fOrdLevity $fShowLevity$fEqTypeOrKind$fEqIntWithInf$fEqInlinePragma$fDataInlinePragma$fEqInlineSpec$fDataInlineSpec$fShowInlineSpec$fEqRuleMatchInfo$fDataRuleMatchInfo$fShowRuleMatchInfo$fEqActivation$fDataActivation$fEqCompilerPhase $fEqOccInfo$fEqTailCallInfo $fEqInsideLam$fEqInterestingCxt$fEqUnboxedTupleOrSum $fEqTupleSort$fDataTupleSort $fEqPprPrec $fOrdPprPrec $fShowPprPrec$fEqOverlapFlag$fDataOverlapFlag$fEqOverlapMode$fDataOverlapMode $fEqOrigin $fDataOrigin $fEqDoPmc $fDataDoPmc $fEqRecFlag $fDataRecFlag $fEqCbvMark$fDataTopLevelFlag$fEqFunctionOrData$fOrdFunctionOrData$fDataFunctionOrData$fEqOneShotInfo $fEqAlignment$fOrdAlignment$fEqLeftOrRight$fDataLeftOrRightdataConTyRepNameUniquedataConWorkerUniquemkPreludeDataConUniquetyConRepNameUniquemkPreludeTyConUniqueinitExitJoinUniquemkRegSingleUniquemkRegPairUniquemkRegSubUniquemkRegClassUniquemkPseudoUniqueEmkBuiltinUniquemkPreludeMiscIdUniquemkPrimOpWrapperUniquemkPrimOpIdUniquemkPreludeClassUniquemkAlphaTyVarUniquemkTupleDataConUniquemkTupleTyConUniquemkCTupleDataConUniquemkCTupleTyConUniquemkSumDataConUniquemkSumTyConUniqueknownUniqueNameEqSpec DataConRepDataConpromoteDataCon dataConWrapId isTypeDataConisUnboxedSumDataCondataConFullSigdataConStupidThetadataConInstOrigArgTysdataConFieldLabelsdataConSourceAritydataConUserTyVarBindersdataConUserTyVarsdataConExTyCoVars dataConTyCon dataConWorkId dataConNamesumTyCon sumDataConcTupleSelIdNamecTupleTyConNamecTupleDataConName cTupleDataCon tupleTyCon tupleDataConpromotedTupleDataCon integerTy naturalTytupleDataConNametupleTyConName multMulTyConunrestrictedFunTyConmanyDataConTyCon manyDataConTyoneDataConTyCon oneDataConTymultiplicityTymultiplicityTyConunboxedTupleKind anyTypeOfKindint8ElemRepDataConTyint16ElemRepDataConTyint32ElemRepDataConTyint64ElemRepDataConTyword8ElemRepDataConTyword16ElemRepDataConTyword32ElemRepDataConTyword64ElemRepDataConTyfloatElemRepDataConTydoubleElemRepDataConTy vec2DataConTy vec4DataConTy vec8DataConTyvec16DataConTyvec32DataConTyvec64DataConTyintRepDataConTyint8RepDataConTyint16RepDataConTyint32RepDataConTyint64RepDataConTywordRepDataConTyword8RepDataConTyword16RepDataConTyword32RepDataConTyword64RepDataConTyaddrRepDataConTyfloatRepDataConTydoubleRepDataConTyliftedDataConTyunliftedDataConTy liftedRepTy unliftedRepTy zeroBitRepTyvecRepDataConTyContupleRepDataConTyConboxedRepDataConTyConliftedDataConTyCon runtimeRepTylevityTyruntimeRepTyCon levityTyCon vecCountTyCon vecElemTyConconstraintKindliftedRepTyConunliftedRepTyConliftedTypeKindTyConunliftedTypeKindTyConliftedTypeKindunliftedTypeKindzeroBitTypeKindconstraintKindTyConNameliftedTypeKindTyConNameunitTycoercibleTyConheqTyConmkBoxedTupleTycharTytypeSymbolKind listTyConmkCTupleSelIdUniqueisTupleTyConUniquemkCostCentreUnique varNSUnique dataNSUnique tvNSUnique tcNSUnique mkFldNSUnique isFldNSUniquemkBoxingTyConUniqueboxingDataConUnique TidyOccEnvOccSetOccEnv occNameFS occNameSpace NameSpacetcNameclsName tcClsNamedataName srcDataNametvNamevarName fieldNameisDataConNameSpaceisTcClsNameSpace isTvNameSpaceisVarNameSpaceisTermVarOrFieldNameSpaceisValNameSpaceisFieldNameSpace pprNameSpacepprNonVarNameSpacepprNameSpaceBrief pprOccNameoccNameMangledFS mkOccName mkOccNameFSmkVarOcc mkRecFieldOccmkRecFieldOccFSvarToRecFieldOccrecFieldToVarOcc mkDataOcc mkDataOccFS mkTyVarOcc mkTyVarOccFSmkTcOcc mkTcOccFSmkClsOcc mkClsOccFS demoteOccNamedemoteOccTvNamepromoteOccName emptyOccEnv unitOccEnv extendOccEnvextendOccEnvList lookupOccEnvlookupOccEnv_AllNameSpaceslookupOccEnv_WithFieldslookupFieldsOccEnvmkOccEnv mkOccEnv_C elemOccEnvnonDetFoldOccEnvnonDetOccEnvElts plusOccEnv plusOccEnv_C mapOccEnvmapMaybeOccEnvextendOccEnv_Acc delFromOccEnvdelListFromOccEnv filterOccEnv alterOccEnvintersectOccEnv_C minusOccEnv minusOccEnv_CminusOccEnv_C_Ns pprOccEnvstrictMapOccEnv forceOccEnv emptyOccSet unitOccSetmkOccSet extendOccSetextendOccSetList unionOccSetsunionManyOccSets elemOccSet isEmptyOccSet occNameStringsetOccNameSpaceisVarOccisTvOccisTcOcc isFieldOccfieldOcc_maybeisValOcc isDataOcc isDataSymOccisSymOcc parenSymOccstartsWithUnderscoreisDerivedOccNameisDefaultMethodOccisTypeableBindOccmkDataConWrapperOcc mkWorkerOcc mkMatcherOcc mkBuilderOccmkDefaultMethodOccmkClassOpAuxOcc mkDictOccmkIPOcc mkSpecOccmkForeignExportOcc mkRepEqOccmkClassDataConOcc mkNewTyCoOcc mkInstTyCoOcc mkEqPredCoOcc mkCon2TagOcc mkTag2ConOcc mkMaxTagOcc mkDataTOcc mkDataCOcc mkTyConRepOccmkGenRmkGen1RmkDataConWorkerOccmkSuperDictAuxOccmkSuperDictSelOcc mkLocalOcc mkInstTyTcOcc mkDFunOcc mkMethodOccemptyTidyOccEnvinitTidyOccEnvdelTidyOccEnvListavoidClashesOccEnv tidyOccNamemainOccppMainFn$fBinaryNameSpace$fNFDataNameSpace$fUniquableNameSpace$fOrdNameSpace$fBinaryOccName$fOutputableBndrOccName$fOutputableOccName$fNFDataOccName $fDataOccName $fOrdOccName $fEqOccName$fHasOccNameOccName$fNFDataOccEnv$fOutputableOccEnv$fFunctorOccEnv $fEqNameSpace PlatformMiscplatformMisc_llvmTargetplatformMisc_libFFIplatformMisc_ghcWithInterpreter!platformMisc_targetPlatformString BmiVersionBMI1BMI2 SseVersionSSE1SSE2SSE3SSE4SSE42PlatformWordSizePW4PW8Platformplatform_constantsplatformHasLibmplatformTablesNextToCodeplatformLeadingUnderscoreplatformIsCrossCompiling platformHasSubsectionsViaSymbolsplatformHasIdentDirectiveplatformHasGnuNonexecStackplatformUnregisterisedplatformByteOrderplatformWordSizeplatformArchOS wordAlignment isSseEnabled isSse2EnabledplatformConstantsgenericPlatformplatformWordSizeInBytesplatformWordSizeInBits platformArch platformOSisARM target32Bit osElfTarget osMachOTargetplatformUsesFrameworksosSubsectionsViaSymbolsplatformMinIntplatformMaxIntplatformMaxWordplatformInIntRangeplatformInWordRangeplatformCConvNeedsExtensionplatformHasRTSLinkerplatformSONameplatformHsSOName platformSOExtlookupPlatformConstants$fReadPlatformWordSize$fShowPlatformWordSize$fEqBmiVersion$fOrdBmiVersion$fEqSseVersion$fOrdSseVersion$fReadPlatform$fShowPlatform $fEqPlatform $fOrdPlatform$fEqPlatformWordSize$fOrdPlatformWordSizeCLabel pprCLabel BuiltInSyntax UserSyntax nameNameSpace nameSrcLoc nameSrcSpan isWiredInName isWiredInwiredInNameTyThing_maybeisBuiltInSyntaxisTupleTyConNameisExternalNameisInternalName isHoleName isDynLinkName nameModulenameModule_maybe namePun_maybenameIsLocalOrFromnameIsExternalOrFromnameIsHomePackagenameIsHomePackageImportnameIsFromExternalPackage isTyVarName isTyConName isDataConName isValName isVarName isSystemNamemkInternalNamemkClonedInternalNamemkDerivedInternalNamemkExternalName mkWiredInName mkSystemNamemkSystemNameAtmkSystemVarName mkSysTvName mkFCallName setNameLoc localiseName stableNameCmppprName pprFullName pprTickyNamepprNameUnqualifiedpprModulePrefix pprDefinedAtpprNameDefnLocnameStableString getSrcLoc getSrcSpan getOccStringgetOccFS pprInfixName pprPrefixName$fNFDataFieldLabel$fNFDataNameSort$fOutputableNameSort$fOutputableBndrName$fOutputableName $fBinaryName $fDataName$fUniquableName $fOrdName$fEqName$fHasOccNameName $fNFDataName$fNamedThingGenLocated$fNamedThingName PiTyVarBinder PiTyBinderNamedAnon ReqTVBinder TyVarBinder ReqTyBinder InvisTyBinderForAllTyBinderBndrFTF_T_TFTF_T_CFTF_C_TFTF_C_C InferredSpec SpecifiedSpec InvisibleRequiredvarTypevarMultOutIdOutCoVarOutTyVarOutVarInIdInCoVarInTyVarInVarJoinIdEqVarIpIdDictIdDFunIdEvVarEvIdKindVarTypeVarTKVarNcIdCoVar SpecifiedInferred nonDetCmpVar varUnique varMultMaybe setVarUnique setVarName setVarType updateVarTypeupdateVarTypeMisVisibleForAllTyFlagisInvisibleForAllTyFlagisInferredForAllTyFlag mkFunTyFlagvisArgvisArgTypeLikevisArgConstraintLikeinvisArginvisArgTypeLikeinvisArgConstraintLikeisInvisibleFunArgisVisibleFunArgisFUNArgfunTyFlagArgTypeOrConstraintfunTyFlagResultTypeOrConstrainttyVarSpecToBinderstyVarSpecToBindertyVarReqToBinderstyVarReqToBinder binderVar binderVars binderFlag binderFlags binderType isTyVarBindermkForAllTyBinder mkTyVarBindermkForAllTyBindersmkTyVarBinders mapVarBndr mapVarBndrsisInvisiblePiTyBinderisVisiblePiTyBinderisNamedPiTyBindernamedPiTyBinder_maybeisAnonPiTyBinderanonPiTyBinderType_maybe isTyBinderpiTyBinderType tyVarName tyVarKindsetTyVarUnique setTyVarName setTyVarKindupdateTyVarKindupdateTyVarKindMmkTyVar mkTcTyVartcTyVarDetailssetTcTyVarDetailsidInfo idDetails mkGlobalVar mkLocalVarmkCoVarmkExportedLocalVar lazySetIdInfo setIdDetails globaliseId setIdExportedsetIdNotExportedupdateIdTypeButNotMultupdateIdTypeAndMultupdateIdTypeAndMultM setIdMultisTyVar isTcTyVar isTyCoVarisIdisCoVar isNonCoVarId isLocalId isLocalVar isGlobalIdmustHaveLocalBinding isExportedId$fHasOccNameVar $fDataVar$fOrdVar$fEqVar$fUniquableVar$fNamedThingVar$fOutputableVar$fBinarySpecificity$fBinaryForAllTyFlag$fOutputableForAllTyFlag$fBinaryFunTyFlag$fOutputableFunTyFlag$fNamedThingVarBndr$fBinaryVarBndr$fOutputableVarBndr$fOutputableVarBndr0$fOutputablePiTyBinder$fDataPiTyBinder $fDataVarBndr $fEqFunTyFlag$fOrdFunTyFlag$fDataFunTyFlag$fEqForAllTyFlag$fOrdForAllTyFlag$fDataForAllTyFlag$fEqSpecificity$fOrdSpecificity$fDataSpecificitychooseFunTyFlagpartitionInvisibleTypes getLevitygetTyVar_maybetyConAppTyCon_maybesplitTyConApp_maybeisLiftedTypeKindisMultiplicityTy isLevityTyisRuntimeRepTy rewriterViewcoreViewtypeTypeOrConstrainttypeKind piResultTy mkCoercionTy mkTyConAppmkCastTymkAppTy isCoercionTyisPredTy DTyCoVarSet DTyVarSetDIdSetDVarSet TyCoVarSetCoVarSetTyVarSetIdSetVarSet emptyVarSet unitVarSet extendVarSetextendVarSetListintersectVarSet unionVarSet unionVarSets elemVarSet minusVarSet delVarSet delVarSetList isEmptyVarSetmkVarSetlookupVarSet_Directly lookupVarSetlookupVarSetByName sizeVarSet filterVarSetdelVarSetByKeyelemVarSetByKeypartitionVarSetmapUnionVarSetintersectsVarSetdisjointVarSet subVarSet anyVarSet allVarSet mapVarSetnonDetStrictFoldVarSet fixVarSettransCloVarSet seqVarSet pluralVarSet pprVarSet emptyDVarSet unitDVarSet mkDVarSet extendDVarSet elemDVarSet dVarSetElems subDVarSet unionDVarSet unionDVarSetsmapUnionDVarSetintersectDVarSetdVarSetIntersectVarSetdisjointDVarSetintersectsDVarSetisEmptyDVarSet delDVarSet minusDVarSetdVarSetMinusVarSetnonDetStrictFoldDVarSet anyDVarSet allDVarSet mapDVarSet filterDVarSet sizeDVarSetpartitionDVarSetdelDVarSetList seqDVarSetextendDVarSetListdVarSetToVarSettransCloDVarSetFVInterestingVarFun fvVarList fvDVarSetfvVarSetunitFVemptyFVunionFVdelFVdelFVsfilterFV mapUnionFVunionsFVmkFVs UnVarGraphUnVarSetdomUFMUnVarSet emptyUnVarSet elemUnVarSetisEmptyUnVarSet delUnVarSetdelUnVarSetList mkUnVarSetextendUnVarSetextendUnVarSetList unionUnVarSetunionUnVarSetsemptyUnVarGraphunionUnVarGraphunionUnVarGraphscompleteBipartiteGraph completeGraph neighbors hasLoopAtdelNode$fOutputableUnVarSet$fOutputableUnVarGraph $fEqUnVarSet DTyVarEnvDIdEnvDVarEnvCoVarEnv TyCoVarEnvTyVarEnvIdEnvVarEnvTidyEnvRnEnv2 InScopeSetInScopeemptyInScopeSetgetInScopeVars mkInScopeSetmkInScopeSetListextendInScopeSetextendInScopeSetListextendInScopeSetSet delInScopeSetelemInScopeSet lookupInScopelookupInScope_Directly unionInScope varSetInScopeuniqAwayunsafeGetFreshLocalUniquemkRnEnv2extendRnInScopeSetList rnInScope rnInScopeSetrnEnvLrnEnvRrnBndrs2rnBndr2 rnBndr2_varrnBndrLrnBndrRrnEtaLrnEtaRdelBndrLdelBndrR delBndrsL delBndrsRrnOccLrnOccR rnOccL_maybe rnOccR_maybeinRnEnvLinRnEnvR anyInRnEnvRlookupRnInScope nukeRnEnvL nukeRnEnvRrnSwap emptyTidyEnvmkEmptyTidyEnvdelTidyEnvList elemVarEnvelemVarEnvByKeydisjointVarEnv alterVarEnv extendVarEnvextendVarEnv_CextendVarEnv_AccextendVarEnvList plusVarEnv_C plusVarEnv_CDplusMaybeVarEnv_C delVarEnvList delVarEnv minusVarEnv plusVarEnvplusVarEnvList lookupVarEnvlookupVarEnv_Directly filterVarEnv anyVarEnvlookupWithDefaultVarEnv mapVarEnvmkVarEnvmkVarEnv_Directly emptyVarEnv unitVarEnv isEmptyVarEnvpartitionVarEnv varEnvDomainnonDetStrictFoldVarEnv_DirectlyrestrictVarEnv zipVarEnvlookupVarEnv_NF modifyVarEnvmodifyVarEnv_Directly emptyDVarEnv dVarEnvElts mkDVarEnv extendDVarEnv minusDVarEnv lookupDVarEnv foldDVarEnvnonDetStrictFoldDVarEnv mapDVarEnv filterDVarEnv alterDVarEnv plusDVarEnv plusDVarEnv_C unitDVarEnv delDVarEnvdelDVarEnvListisEmptyDVarEnv elemDVarEnvextendDVarEnv_C modifyDVarEnvpartitionDVarEnvextendDVarEnvList anyDVarEnv$fOutputableInScopeSet NonCaffySet ncs_nameSetDefUsesDefUseUsesDefsFreeVarsNameSetisEmptyNameSet emptyNameSet unitNameSet mkNameSetextendNameSetList extendNameSet unionNameSet unionNameSets minusNameSet elemNameSetdelFromNameSet filterNameSetintersectNameSetdisjointNameSetdelListFromNameSetintersectsNameSet nameSetAny nameSetAllnameSetElemsStable isEmptyFVsemptyFVsplusFVsplusFVaddOneFV intersectFVsemptyDUsusesOnlymkDUsplusDUduDefsallUsesduUsesfindUses$fSemigroupNonCaffySet$fMonoidNonCaffySetDNameEnvNameEnvdepAnalnonDetNameEnvElts emptyNameEnvisEmptyNameEnv unitNameEnv extendNameEnvextendNameEnvListextendNameEnvListWith lookupNameEnv alterNameEnv mkNameEnv mkNameEnvWith fromUniqMap elemNameEnv plusNameEnv plusNameEnv_CplusNameEnv_CDplusNameEnv_CD2plusNameEnvListplusNameEnvListWithextendNameEnv_C mapNameEnvextendNameEnv_AccextendNameEnvList_CdelFromNameEnvdelListFromNameEnv filterNameEnvmapMaybeNameEnv anyNameEnvdisjointNameEnvseqEltsNameEnvlookupNameEnv_NF emptyDNameEnvisEmptyDNameEnvlookupDNameEnvdelFromDNameEnvfilterDNameEnv mapDNameEnvadjustDNameEnv alterDNameEnvextendDNameEnvextendDNameEnv_C eltsDNameEnv foldDNameEnvplusDNameEnv_CnonDetStrictFoldDNameEnvTagInfoTagDunnoTagTuple TagProper TagTaggedTagSig StgCgInfos isTaggedSig seqTagSig seqTagInfo$fBinaryTagInfo$fOutputableTagInfo$fBinaryTagSig$fOutputableBndrTuple2$fOutputableTagSig $fEqTagSig $fEqTagInfo RecFieldInfo recFieldCons recFieldLabel ConLikeName DataConName PatSynNameconLikeName_NameConInfoConHasRecordFieldsConHasPositionalArgs ConIsNullaryGREInfoVanilla UnboundGREIAmTyCon IAmConLike IAmRecField plusGREInfo mkConInfo conInfoFields$fOutputableConInfo$fNFDataConInfo$fNFDataConLikeName$fUniquableConLikeName$fOutputableConLikeName$fOutputableRecFieldInfo$fNFDataRecFieldInfo$fOutputableGREInfo$fNFDataGREInfo $fDataGREInfo$fEqRecFieldInfo$fDataRecFieldInfo$fEqConLikeName$fDataConLikeName $fEqConInfo $fDataConInfoAvails AvailInfoAvailAvailTCstableAvailCmpavailsToNameSetavailsToNameEnvavailExportsDecl availName availNamesavailSubordinateNames plusAvail trimAvail filterAvails filterAvail nubAvails$fNFDataAvailInfo$fBinaryAvailInfo$fOutputableAvailInfo$fDataAvailInfo ImpItemSpecImpAllImpSomeis_iloc is_explicit ImpDeclSpecis_dlocis_qualis_asis_mod ImportSpecImpSpecis_itemis_decl LookupChildprioritiseParentlookupDataConFirst wantedParent WhichGREs SameNameSpace RelevantGREslookupTyConsAsWelllookupVariablesForFieldsincludeFieldSelectors LookupGRE LookupOccName LookupRdrNameLookupExactNameLookupChildrenlookInAllNameSpaceslookupExactNameFieldsOrSelectors WantNormalWantBoth WantFieldParentNoParentParentIspar_isFieldGlobalRdrElt GlobalRdrEltXGREgre_infogre_impgre_lclgre_pargre_nameIfGlobalRdrElt GlobalRdrElt GlobalRdrEnvXIfGlobalRdrEnv GlobalRdrEnv LocalRdrEnvUnqualQualOrigExactRelevantGREsFOSAllRelevantGREs rdrNameOcc rdrNameSpace demoteRdrNamedemoteRdrNameTvpromoteRdrName mkRdrUnqual mkRdrQualmkOrigmkUnqual mkVarUnqualmkQual getRdrName nameRdrName isRdrDataCon isRdrTyVarisRdrTc isSrcRdrNameisUnqualisQual isQual_maybeisOrig isOrig_maybeisExact isExact_maybeemptyLocalRdrEnvextendLocalRdrEnvextendLocalRdrEnvListlookupLocalRdrEnvlookupLocalRdrOccelemLocalRdrEnvlocalRdrEnvEltsinLocalRdrEnvScopeminusLocalRdrEnvminusLocalRdrEnvListgreName greNameSpace greParentgreInfomkGRE mkExactGRE mkLocalGREmkLocalVanillaGREmkLocalTyConGREmkLocalConLikeGREmkLocalFieldGREs greOccNamegreDefinitionSrcSpangreDefinitionModulegreQualModName greRdrNames greSrcSpanmkParent availParentgreParent_maybe gresToNameSetgresToAvailInfo availFromGREemptyGlobalRdrEnvglobalRdrEnvEltsforceGlobalRdrEnvhydrateGlobalRdrEnvpprGlobalRdrEnvfieldGRE_maybe fieldGRELabel fieldGREInforecFieldConLike_mayberecFieldInfo_maybefilterFieldGREsallowGRE greIsRelevant lookupGRElookupGRE_NamelookupGRE_FieldLabelgetGRE_NameQualifier_maybes isLocalGRE isImportedGRE isRecFldGREisDuplicateRecFldGREisNoFieldSelectorGREisFieldSelectorGREgreFieldLabel_maybeunQualOKpickGREspickGREsModExpplusGlobalRdrEnvmkGlobalRdrEnv insertGREplusGRE transformGREsextendGlobalRdrEnv shadowNamesgreClashesWith bestImport unQualSpecOK qualSpecOK importSpecLocimportSpecModuleisExplicitItempprNameProvenanceopIsAt $fOrdRdrName $fEqRdrName$fOutputableBndrRdrName$fOutputableRdrName$fHasOccNameRdrName$fOutputableLocalRdrEnv$fNFDataParent$fOutputableParent$fOutputableWhichGREs$fOutputableLookupChild$fSemigroupShadowedFieldGREs$fMonoidShadowedFieldGREs$fSemigroupShadowedGREs$fMonoidShadowedGREs$fOutputableImportSpec$fNFDataImportSpec$fOutputableGlobalRdrEltX$fHasOccNameGlobalRdrEltX$fNFDataGlobalRdrEltX$fDataGlobalRdrEltX$fEqImportSpec$fDataImportSpec$fEqImpItemSpec$fDataImpItemSpec$fEqImpDeclSpec$fDataImpDeclSpec$fEqFieldsOrSelectors$fShowFieldsOrSelectors $fEqParent $fDataParent $fDataRdrNameImportedModsVal imv_qualifiedimv_all_exports imv_is_hiding imv_is_safeimv_spanimv_name ImportedByImportedByUserImportedBySystem ImportedModsimportedByUserNoEpAnnsEpAnnCO AnnSortKey NoAnnSortKey AnnPragmaapr_rest apr_closeapr_open NameAdornment NameParensNameParensHashNameBackquotes NameSquareNameAnn NameAnnCommas NameAnnBars NameAnnOnly NameAnnRArrow NameAnnQuoteNameAnnTrailing nann_trailing nann_close nann_name nann_opennann_adornment nann_commas nann_bars nann_mclose nann_mopen nann_unicode nann_quoted nann_quote AnnContextac_closeac_open ac_darrow ParenType AnnParens AnnParensHashAnnParensSquareAnnParenap_closeap_open ap_adornmentAnnList al_trailingal_restal_closeal_open al_anchor AnnListItem lann_trailing TrailingAnn AddSemiAnn AddCommaAnn AddVbarAnn LocatedAn SrcSpanAnnC SrcSpanAnnP SrcSpanAnnL SrcSpanAnnN SrcSpanAnnALocatedCLocatedPLocatedLLocatedNLocatedASrcAnn SrcSpanAnn' SrcSpanAnnlocAann LEpaComment EpAnnComments EpaCommentsEpaCommentsBalanced priorCommentsfollowingCommentsAnchorOperationUnchangedAnchor MovedAnchorAnchor anchor_opanchorEpAnn EpAnnNotUsedcommentsannsentryDeltaPosSameLine DifferentLine deltaColumn deltaLine TokenLocation NoTokenLocTokenLoc EpaLocationEpaSpanEpaDeltaAddEpAnn EpaCommentTok EpaDocComment EpaDocOptionsEpaLineCommentEpaBlockComment EpaEofComment EpaComment ac_prior_tokac_tokHasENoEIsUnicodeSyntax UnicodeSyntax NormalSyntax AnnAnyclass AnnCloseBU AnnCloseC AnnCloseQU AnnClosePH AnnCloseS AnnCommaTuple AnnDarrowU AnnDcolonU AnnForallU AnnLarrowU AnnLollyUAnnMdoAnnName AnnOpenBUAnnOpenC AnnOpenEQUAnnOpenS AnnOpenPH AnnDollarAnnDollarDollar AnnPercent AnnPercentOne AnnRarrowUAnnSimpleQuote AnnSignature AnnThTyQuote AnnValStrAnnViaAnnlarrowtailUAnnrarrowtailUAnnLarrowtailUAnnRarrowtailU unicodeAnngetTokenSrcSpandeltaPos getDeltaLineepaLocationRealSrcSpanepaLocationFromSrcAnn spanAsAnchorrealSpanAsAnchor emptyComments parenTypeKwstrailingAnnToAddEpAnnaddTrailingAnnToLaddTrailingAnnToAaddTrailingCommaToNl2nn2lla2nala2lal2lna2lareLocreLocAreLocLreLocCreLocN realSrcSpan srcSpan2ela2eextraToAnnListreAnnreAnnCreAnnL getLocAnngetLocAnoLocA noAnnSrcSpan noSrcSpanAnoAnnaddAnnsaddAnnsA widenSpan widenAnchor widenAnchorRwidenLocatedAn epAnnAnnsL epAnnAnnsannParen2AddEpAnn epAnnComments sortLocatedAmapLocA combineLocsAcombineSrcSpansAaddCLocA addCLocAAgetFollowingCommentssetFollowingCommentssetPriorComments noCommentsplaceholderRealSpancommentaddCommentsToSrcAnnsetCommentsSrcAnnaddCommentsToEpAnnsetCommentsEpAnn transferAnnsA commentsOnlyAremoveCommentsA$fOutputableAnnKeywordId$fOutputableIsUnicodeSyntax$fOutputableEpaComment$fOutputableDeltaPos$fOutputableAnchorOperation$fOutputableAnchor$fSemigroupAnchor $fOrdAnchor$fOutputableEpAnnComments$fSemigroupEpAnnComments$fOutputableEpAnn $fMonoidEpAnn$fSemigroupEpAnn$fOutputableEpaLocation$fOutputableAddEpAnn$fOutputableBndrGenLocated$fOutputableGenLocated1$fOutputableSrcSpanAnn'$fSemigroupSrcSpanAnn'$fOutputableTrailingAnn$fOutputableAnnListItem$fMonoidAnnListItem$fSemigroupAnnListItem$fOutputableAnnList$fMonoidAnnList$fSemigroupAnnList$fOutputableAnnContext$fOutputableNameAdornment$fOutputableNameAnn$fMonoidNameAnn$fSemigroupNameAnn$fOutputableAnnPragma$fOutputableAnnSortKey$fMonoidAnnSortKey$fSemigroupAnnSortKey$fOutputableNoEpAnns$fSemigroupNoEpAnns$fDataNoEpAnns $fEqNoEpAnns $fOrdNoEpAnns$fDataAnnSortKey$fEqAnnSortKey$fDataAnnPragma $fEqAnnPragma $fDataNameAnn $fEqNameAnn$fEqNameAdornment$fOrdNameAdornment$fDataNameAdornment$fDataAnnContext$fDataAnnParen $fEqParenType$fOrdParenType$fDataParenType $fDataAnnList $fEqAnnList$fDataAnnListItem$fEqAnnListItem$fDataTrailingAnn$fEqTrailingAnn$fDataSrcSpanAnn'$fEqSrcSpanAnn'$fDataAddEpAnn $fEqAddEpAnn$fDataTokenLocation$fEqTokenLocation$fDataEpaLocation$fEqEpaLocation $fDataEpAnn $fEqEpAnn$fFunctorEpAnn$fDataEpAnnComments$fEqEpAnnComments $fDataAnchor $fEqAnchor $fShowAnchor$fDataAnchorOperation$fEqAnchorOperation$fShowAnchorOperation$fShowDeltaPos $fEqDeltaPos $fOrdDeltaPos$fDataDeltaPos$fEqEpaComment$fDataEpaComment$fShowEpaComment$fEqEpaCommentTok$fDataEpaCommentTok$fShowEpaCommentTok$fEqHasE $fOrdHasE $fDataHasE $fShowHasE$fEqIsUnicodeSyntax$fOrdIsUnicodeSyntax$fDataIsUnicodeSyntax$fShowIsUnicodeSyntax$fEqAnnKeywordId$fOrdAnnKeywordId$fDataAnnKeywordId$fShowAnnKeywordIdBooleanFormulaOrParensLBooleanFormulamkVarmkFalsemkTruemkAndmkOrisFalseisTrueevalsimplify isUnsatisfied impliesAtomimpliespprBooleanFormulapprBooleanFormulaNice$fOutputableBooleanFormula$fEqBooleanFormula$fDataBooleanFormula$fFunctorBooleanFormula$fFoldableBooleanFormula$fTraversableBooleanFormula CollectedCCsCostCentreStack CCFlavourCcName CostCentreNormalCC AllCafsCCcc_loccc_modcc_name mkCafFlavourmkExprCCFlavourmkDeclCCFlavourmkHpcCCFlavourmkLateCCFlavourmkCallerCCFlavour cmpCostCentreisCafCC isSccCountCC sccAbleCCccFromThisModulemkUserCCmkAutoCC mkAllCafsCCemptyCollectedCCs collectCC currentCCS dontCareCCS isCurrentCCSisCafCCSmaybeSingletonCCSmkSingletonCCSpprCostCentreStack pprCostCentrepprCostCentreCorecostCentreUserNamecostCentreUserNameFScostCentreSrcSpan$fBinaryCCFlavour$fBinaryCostCentre$fOutputableCostCentre$fOrdCostCentre$fEqCostCentre$fOutputableCostCentreStack$fEqCostCentreStack$fOrdCostCentreStack$fDataCostCentre $fEqCCFlavour$fOrdCCFlavour$fDataCCFlavour$fEqIndexedCCFlavour$fOrdIndexedCCFlavour$fDataIndexedCCFlavour$fEnumIndexedCCFlavourallNameStringsallNameStringListitName mkUnboundName isUnboundNamebasicKnownKeyNamesgenericTyConNamespRELUDEgHC_PRIMgHC_PRIM_PANIC gHC_TYPES gHC_MAGICgHC_MAGIC_DICT gHC_CSTRING gHC_CLASSESgHC_PRIMOPWRAPPERSgHC_BASEgHC_ENUMgHC_GHCIgHC_GHCI_HELPERSgHC_SHOWgHC_READgHC_NUM gHC_MAYBEgHC_NUM_INTEGERgHC_NUM_NATURALgHC_NUM_BIGNATgHC_LIST gHC_TUPLEgHC_TUPLE_PRIM dATA_EITHER dATA_LIST dATA_STRING dATA_FOLDABLEdATA_TRAVERSABLEgHC_CONCgHC_IOgHC_IO_ExceptiongHC_STgHC_IX gHC_STABLEgHC_PTRgHC_ERRgHC_REAL gHC_FLOATgHC_TOP_HANDLER sYSTEM_IOdYNAMICtYPEABLEtYPEABLE_INTERNALgENERICS rEAD_PREClEXgHC_INTgHC_WORDmONAD mONAD_FIX mONAD_ZIP mONAD_FAILaRROW gHC_DESUGARrANDOMgHC_EXTS gHC_IS_LISTcONTROL_EXCEPTION_BASE gHC_GENERICS gHC_TYPEERROR gHC_TYPELITSgHC_TYPELITS_INTERNAL gHC_TYPENATSgHC_TYPENATS_INTERNAL dATA_COERCE dEBUG_TRACE uNSAFE_COERCEfOREIGN_C_CONSTPTR gHC_SRCLOC gHC_STACKgHC_STACK_TYPES gHC_STATICPTRgHC_STATICPTR_INTERNALgHC_FINGERPRINT_TYPEgHC_OVER_LABELS gHC_RECORDS rOOT_MAINmkInteractiveModule pRELUDE_NAME mAIN_NAME mkPrimModulemkBignumModule mkBaseModule mkBaseModule_mkThisGhcModulemkThisGhcModule_ mkMainModule mkMainModule_main_RDR_Unqualeq_RDRge_RDRle_RDRlt_RDRgt_RDR compare_RDR ltTag_RDR eqTag_RDR gtTag_RDR eqClass_RDR numClass_RDR ordClass_RDR enumClass_RDRmonadClass_RDRmap_RDR append_RDR foldr_RDR build_RDR returnM_RDR bindM_RDR failM_RDRleft_RDR right_RDR fromEnum_RDR toEnum_RDR enumFrom_RDRenumFromTo_RDRenumFromThen_RDRenumFromThenTo_RDRratioDataCon_RDRintegerAdd_RDRintegerMul_RDR ioDataCon_RDRnewStablePtr_RDR bindIO_RDR returnIO_RDRfromInteger_RDRfromRational_RDR minus_RDR times_RDRplus_RDR toInteger_RDRtoRational_RDRfromIntegral_RDRfromString_RDR fromList_RDR fromListN_RDR toList_RDR compose_RDRand_RDRnot_RDR dataToTag_RDRsucc_RDRpred_RDR minBound_RDR maxBound_RDR range_RDR inRange_RDR index_RDRunsafeIndex_RDRunsafeRangeSize_RDR readList_RDRreadListDefault_RDRreadListPrec_RDRreadListPrecDefault_RDR readPrec_RDR parens_RDR choose_RDRlexP_RDR expectP_RDR readField_RDRreadFieldHash_RDRreadSymField_RDRpunc_RDR ident_RDR symbol_RDRstep_RDRalt_RDR reset_RDRprec_RDR pfail_RDR showsPrec_RDR shows_RDRshowString_RDR showSpace_RDRshowCommaSpace_RDR showParen_RDR error_RDR u1DataCon_RDRpar1DataCon_RDRrec1DataCon_RDR k1DataCon_RDR m1DataCon_RDR l1DataCon_RDR r1DataCon_RDRprodDataCon_RDRcomp1DataCon_RDR unPar1_RDR unRec1_RDRunK1_RDR unComp1_RDRfrom_RDR from1_RDRto_RDRto1_RDRdatatypeName_RDRmoduleName_RDRpackageName_RDRisNewtypeName_RDR selName_RDR conName_RDR conFixity_RDRconIsRecord_RDRprefixDataCon_RDRinfixDataCon_RDRleftAssocDataCon_RDRrightAssocDataCon_RDRnotAssocDataCon_RDRuAddrDataCon_RDRuCharDataCon_RDRuDoubleDataCon_RDRuFloatDataCon_RDRuIntDataCon_RDRuWordDataCon_RDR uAddrHash_RDR uCharHash_RDRuDoubleHash_RDRuFloatHash_RDR uIntHash_RDR uWordHash_RDRfmap_RDR replace_RDRpure_RDRap_RDR liftA2_RDRfoldable_foldr_RDR foldMap_RDRnull_RDRall_RDR traverse_RDR mempty_RDR mappend_RDR varQual_RDR tcQual_RDR clsQual_RDR dataQual_RDR fieldQual_RDR wildCardName runMainIOName runRWNameorderingTyConNameordLTDataConNameordEQDataConNameordGTDataConName specTyConNameeitherTyConNameleftDataConNamerightDataConName voidTyConName v1TyConName u1TyConName par1TyConName rec1TyConName k1TyConName m1TyConName sumTyConName prodTyConName compTyConName rTyConName dTyConName cTyConName sTyConName rec0TyConName d1TyConName c1TyConName s1TyConName repTyConName rep1TyConName uRecTyConNameuAddrTyConNameuCharTyConNameuDoubleTyConNameuFloatTyConName uIntTyConNameuWordTyConNameprefixIDataConNameinfixIDataConNameleftAssociativeDataConNamerightAssociativeDataConNamenotAssociativeDataConNamesourceUnpackDataConNamesourceNoUnpackDataConNamenoSourceUnpackednessDataConNamesourceLazyDataConNamesourceStrictDataConNamenoSourceStrictnessDataConNamedecidedLazyDataConNamedecidedStrictDataConNamedecidedUnpackDataConNamemetaDataDataConNamemetaConsDataConNamemetaSelDataConName divIntName modIntNamecstringLengthName eqStringNameunpackCStringNameunpackCStringAppendNameunpackCStringFoldrNameunpackCStringUtf8NameunpackCStringAppendUtf8NameunpackCStringFoldrUtf8Name inlineIdName eqClassNameeqName ordClassNamegeNamefunctorClassNamefmapNamemonadClassName thenMName bindMName returnMNamemonadFailClassName failMNameapplicativeClassNameapAName pureAName thenANamefoldableClassNametraversableClassNamesemigroupClassName sappendNamemonoidClassName memptyName mappendName mconcatName joinMNamealternativeClassName joinMIdKey apAClassOpKeypureAClassOpKeythenAClassOpKeyalternativeClassKeyconsiderAccessibleName dollarNameotherwiseIdName foldrName buildName augmentNamemapName appendName assertNamefromStringName numClassNamefromIntegerName minusName negateName bnbVarQual bnnVarQual bniVarQualbignatFromWordListName bignatEqNamebignatCompareNamebignatCompareWordNamenaturalToWordNamenaturalPopCountNamenaturalShiftRNamenaturalShiftLNamenaturalAddNamenaturalSubNamenaturalSubThrowNamenaturalSubUnsafeNamenaturalMulNamenaturalQuotRemNamenaturalQuotNamenaturalRemNamenaturalAndNamenaturalAndNotName naturalOrNamenaturalXorNamenaturalTestBitNamenaturalBitNamenaturalGcdNamenaturalLcmNamenaturalLog2NamenaturalLogBaseWordNamenaturalLogBaseNamenaturalPowModNamenaturalSizeInBaseNameintegerFromNaturalNameintegerToNaturalClampNameintegerToNaturalThrowNameintegerToNaturalNameintegerToWordNameintegerToIntNameintegerToWord64NameintegerToInt64NameintegerFromWordNameintegerFromWord64NameintegerFromInt64NameintegerAddNameintegerMulNameintegerSubNameintegerNegateNameintegerAbsNameintegerPopCountNameintegerQuotNameintegerRemNameintegerDivNameintegerModNameintegerDivModNameintegerQuotRemNameintegerEncodeFloatNameintegerEncodeDoubleNameintegerGcdNameintegerLcmNameintegerAndName integerOrNameintegerXorNameintegerComplementNameintegerBitNameintegerTestBitNameintegerShiftLNameintegerShiftRNamerationalTyConNameratioTyConNameratioDataConName realClassNameintegralClassNamerealFracClassNamefractionalClassNamefromRationalName toIntegerNametoRationalNamefromIntegralNamerealToFracNamemkRationalBase2NamemkRationalBase10NamefloatingClassNamerealFloatClassNameintegerToFloatNameintegerToDoubleNamenaturalToFloatNamenaturalToDoubleNamerationalToFloatNamerationalToDoubleName ixClassNametrModuleTyConNametrModuleDataConNametrNameTyConNametrNameSDataConNametrNameDDataConNametrTyConTyConNametrTyConDataConNamekindRepTyConNamekindRepTyConAppDataConNamekindRepVarDataConNamekindRepAppDataConNamekindRepFunDataConNamekindRepTYPEDataConNamekindRepTypeLitSDataConNamekindRepTypeLitDDataConNametypeLitSortTyConNametypeLitSymbolDataConNametypeLitNatDataConNametypeLitCharDataConNametypeableClassNametypeRepTyConNamesomeTypeRepTyConNamesomeTypeRepDataConName typeRepIdName mkTrTypeName mkTrConName mkTrAppName mkTrFunNametypeNatTypeRepNametypeSymbolTypeRepNametypeCharTypeRepNametrGhcPrimModuleNamestarKindRepNamestarArrStarKindRepNamestarArrStarArrStarKindRepNameconstraintKindRepNamewithDictClassNamenonEmptyTyConNameerrorMessageTypeErrorFamNametypeErrorTextDataConNametypeErrorAppendDataConNametypeErrorVAppendDataConNametypeErrorShowTypeDataConNameunsatisfiableClassNameunsatisfiableIdNameunsafeEqualityProofNameunsafeEqualityTyConNameunsafeReflDataConNameunsafeCoercePrimName toDynName dataClassNameassertErrorName traceName enumClassName enumFromNameenumFromToNameenumFromThenNameenumFromThenToNameboundedClassName concatName filterNamezipNameisListClassName fromListName fromListNName toListName getFieldName setFieldName showClassName readClassName genClassName gen1ClassNamedatatypeClassNameconstructorClassNameselectorClassNamegenericClassNamesghciIoClassNameghciStepIoMName ioTyConName ioDataConName thenIOName bindIOName returnIOName failIOName printName int8TyConNameint16TyConNameint32TyConNameint64TyConNameword8TyConNameword16TyConNameword32TyConNameword64TyConName ptrTyConNamefunPtrTyConNamestablePtrTyConNamenewStablePtrNamemonadFixClassNamemfixNamearrAName composeAName firstANameappAName choiceAName loopAName guardMName liftMNamemzipNametoAnnotationWrapperNamemonadPlusClassNameisStringClassNameknownNatClassNameknownSymbolClassNameknownCharClassNamefromLabelClassOpName ipClassNamehasFieldClassNamecallStackTyConNameemptyCallStackNamepushCallStackNamesrcLocDataConNamepLUGINSpluginTyConNamefrontendPluginTyConNamemakeStaticNamestaticPtrInfoTyConNamestaticPtrInfoDataConNamestaticPtrTyConNamestaticPtrDataConNamefromStaticPtrNamefingerprintDataConNameconstPtrConNamevarQualtcQualclsQualdcQualmk_known_key_nameboundedClassKey enumClassKey eqClassKeyfloatingClassKeyfractionalClassKeyintegralClassKey monadClassKey dataClassKeyfunctorClassKey numClassKey ordClassKey readClassKey realClassKeyrealFloatClassKeyrealFracClassKey showClassKey ixClassKeytypeableClassKeywithDictClassKeymonadFixClassKeymonadFailClassKeymonadPlusClassKeyrandomClassKeyrandomGenClassKeyisStringClassKeyapplicativeClassKeyfoldableClassKeytraversableClassKey genClassKey gen1ClassKeydatatypeClassKeyconstructorClassKeyselectorClassKeyknownNatClassNameKeyknownSymbolClassNameKeyknownCharClassNameKeyghciIoClassKeysemigroupClassKeymonoidClassKey ipClassKeyhasFieldClassNameKeyaddrPrimTyConKeyarrayPrimTyConKey boolTyConKeybyteArrayPrimTyConKeystringTyConKeycharPrimTyConKey charTyConKeydoublePrimTyConKeydoubleTyConKeyfloatPrimTyConKey floatTyConKey fUNTyConKeyintPrimTyConKey intTyConKeyint8PrimTyConKey int8TyConKeyint16PrimTyConKey int16TyConKeyint32PrimTyConKey int32TyConKeyint64PrimTyConKey int64TyConKeyintegerTyConKeynaturalTyConKey listTyConKeyforeignObjPrimTyConKey maybeTyConKeyweakPrimTyConKeymutableArrayPrimTyConKeymutableByteArrayPrimTyConKeyorderingTyConKeymVarPrimTyConKeyioPortPrimTyConKey ratioTyConKeyrationalTyConKeyrealWorldTyConKeystablePtrPrimTyConKeystablePtrTyConKey eqTyConKey heqTyConKeyctArrowTyConKeyccArrowTyConKeytcArrowTyConKeystatePrimTyConKeystableNamePrimTyConKeystableNameTyConKeyeqPrimTyConKeyeqReprPrimTyConKeyeqPhantPrimTyConKeymutVarPrimTyConKey ioTyConKeywordPrimTyConKey wordTyConKeyword8PrimTyConKey word8TyConKeyword16PrimTyConKeyword16TyConKeyword32PrimTyConKeyword32TyConKeyword64PrimTyConKeyword64TyConKey kindConKey boxityConKey typeConKeythreadIdPrimTyConKeybcoPrimTyConKey ptrTyConKeyfunPtrTyConKeytVarPrimTyConKeycompactPrimTyConKeystackSnapshotPrimTyConKeypromptTagPrimTyConKeyeitherTyConKey voidTyConKeynonEmptyTyConKey dictTyConKeyliftedTypeKindTyConKeyunliftedTypeKindTyConKey tYPETyConKeycONSTRAINTTyConKeyconstraintKindTyConKeylevityTyConKeyruntimeRepTyConKeyvecCountTyConKeyvecElemTyConKeyliftedRepTyConKeyunliftedRepTyConKeyzeroBitRepTyConKeyzeroBitTypeTyConKeypluginTyConKeyfrontendPluginTyConKeytrTyConTyConKeytrModuleTyConKeytrNameTyConKeykindRepTyConKeytypeLitSortTyConKey v1TyConKey u1TyConKey par1TyConKey rec1TyConKey k1TyConKey m1TyConKey sumTyConKey prodTyConKey compTyConKey rTyConKey dTyConKey cTyConKey sTyConKey rec0TyConKey d1TyConKey c1TyConKey s1TyConKey repTyConKey rep1TyConKey uRecTyConKey uAddrTyConKey uCharTyConKeyuDoubleTyConKeyuFloatTyConKey uIntTyConKey uWordTyConKeyunsatisfiableClassNameKeyerrorMessageTypeErrorFamKeycoercibleTyConKeyproxyPrimTyConKey specTyConKey anyTyConKeysmallArrayPrimTyConKeysmallMutableArrayPrimTyConKeystaticPtrTyConKeystaticPtrInfoTyConKeycallStackTyConKeytypeRepTyConKeysomeTypeRepTyConKeysomeTypeRepDataConKeytypeSymbolAppendFamNameKeyunsafeEqualityTyConKeymultiplicityTyConKeyunrestrictedFunTyConKeymultMulTyConKeyint8X16PrimTyConKeyint16X8PrimTyConKeyint32X4PrimTyConKeyint64X2PrimTyConKeyint8X32PrimTyConKeyint16X16PrimTyConKeyint32X8PrimTyConKeyint64X4PrimTyConKeyint8X64PrimTyConKeyint16X32PrimTyConKeyint32X16PrimTyConKeyint64X8PrimTyConKeyword8X16PrimTyConKeyword16X8PrimTyConKeyword32X4PrimTyConKeyword64X2PrimTyConKeyword8X32PrimTyConKeyword16X16PrimTyConKeyword32X8PrimTyConKeyword64X4PrimTyConKeyword8X64PrimTyConKeyword16X32PrimTyConKeyword32X16PrimTyConKeyword64X8PrimTyConKeyfloatX4PrimTyConKeydoubleX2PrimTyConKeyfloatX8PrimTyConKeydoubleX4PrimTyConKeyfloatX16PrimTyConKeydoubleX8PrimTyConKeytypeSymbolKindConNameKeytypeCharKindConNameKeytypeNatAddTyFamNameKeytypeNatMulTyFamNameKeytypeNatExpTyFamNameKeytypeNatSubTyFamNameKeytypeSymbolCmpTyFamNameKeytypeNatCmpTyFamNameKeytypeCharCmpTyFamNameKeytypeLeqCharTyFamNameKeytypeNatDivTyFamNameKeytypeNatModTyFamNameKeytypeNatLogTyFamNameKeytypeConsSymbolTyFamNameKeytypeUnconsSymbolTyFamNameKeytypeCharToNatTyFamNameKeytypeNatToCharTyFamNameKeyconstPtrTyConKeycharDataConKeyconsDataConKeydoubleDataConKeyfalseDataConKeyfloatDataConKey intDataConKeynothingDataConKeyjustDataConKey eqDataConKey nilDataConKeyratioDataConKeyword8DataConKeystableNameDataConKeytrueDataConKeywordDataConKey ioDataConKey heqDataConKeycrossDataConKey inlDataConKey inrDataConKeygenUnitDataConKeyleftDataConKeyrightDataConKeyordLTDataConKeyordEQDataConKeyordGTDataConKeymkDictDataConKeycoercibleDataConKeystaticPtrDataConKeystaticPtrInfoDataConKeyfingerprintDataConKeysrcLocDataConKeytrTyConDataConKeytrModuleDataConKeytrNameSDataConKeytrNameDDataConKeytrGhcPrimModuleKeytypeErrorTextDataConKeytypeErrorAppendDataConKeytypeErrorVAppendDataConKeytypeErrorShowTypeDataConKeyprefixIDataConKeyinfixIDataConKeyleftAssociativeDataConKeyrightAssociativeDataConKeynotAssociativeDataConKeysourceUnpackDataConKeysourceNoUnpackDataConKeynoSourceUnpackednessDataConKeysourceLazyDataConKeysourceStrictDataConKeynoSourceStrictnessDataConKeydecidedLazyDataConKeydecidedStrictDataConKeydecidedUnpackDataConKeymetaDataDataConKeymetaConsDataConKeymetaSelDataConKeyvecRepDataConKeytupleRepDataConKeysumRepDataConKeyboxedRepDataConKeyboxedRepDataConTyConKeytupleRepDataConTyConKeyruntimeRepSimpleDataConKeysliftedDataConKeyunliftedDataConKeyvecCountDataConKeysvecElemDataConKeyskindRepTyConAppDataConKeykindRepVarDataConKeykindRepAppDataConKeykindRepFunDataConKeykindRepTYPEDataConKeykindRepTypeLitSDataConKeykindRepTypeLitDDataConKeytypeLitSymbolDataConKeytypeLitNatDataConKeytypeLitCharDataConKeyunsafeReflDataConKey oneDataConKeymanyDataConKeyintegerISDataConKeyintegerINDataConKeyintegerIPDataConKeynaturalNSDataConKeynaturalNBDataConKey wildCardKeyabsentErrorIdKeyabsentConstraintErrorIdKey augmentIdKey appendIdKey buildIdKey foldrIdKeyrecSelErrorIdKeyseqIdKeyabsentSumFieldErrorIdKey eqStringIdKeynoMethodBindingErrorIdKeynonExhaustiveGuardsErrorIdKeyimpossibleErrorIdKeyimpossibleConstraintErrorIdKey patErrorIdKeyrealWorldPrimIdKeyrecConErrorIdKeyunpackCStringUtf8IdKeyunpackCStringAppendUtf8IdKeyunpackCStringFoldrUtf8IdKeyunpackCStringIdKeyunpackCStringAppendIdKeyunpackCStringFoldrIdKey voidPrimIdKeytypeErrorIdKey divIntIdKey modIntIdKeycstringLengthIdKey concatIdKey filterIdKeyzipIdKey bindIOIdKey returnIOIdKeynewStablePtrIdKey printIdKey failIOIdKey nullAddrIdKey voidArgIdKeyotherwiseIdKey assertIdKeyleftSectionKeyrightSectionKey rootMainKey runMainKey thenIOIdKey lazyIdKeyassertErrorIdKey oneShotKeyrunRWKeytraceKey nospecIdKey inlineIdKeymapIdKey dollarIdKeycoercionTokenIdKeyconsiderAccessibleIdKey noinlineIdKeynoinlineConstraintIdKeyintegerToFloatIdKeyintegerToDoubleIdKeynaturalToFloatIdKeynaturalToDoubleIdKeyrationalToFloatIdKeyrationalToDoubleIdKey coerceKey unboundKeyfromIntegerClassOpKeyminusClassOpKeyfromRationalClassOpKeyenumFromClassOpKeyenumFromThenClassOpKeyenumFromToClassOpKeyenumFromThenToClassOpKey eqClassOpKey geClassOpKeynegateClassOpKeybindMClassOpKeythenMClassOpKeyfmapClassOpKeyreturnMClassOpKey mfixIdKeyfailMClassOpKeyfromLabelClassOpKey arrAIdKey composeAIdKey firstAIdKey appAIdKey choiceAIdKey loopAIdKeyfromStringClassOpKeytoAnnotationWrapperIdKeyfromIntegralIdKeyrealToFracIdKeytoIntegerClassOpKeytoRationalClassOpKey guardMIdKey liftMIdKey mzipIdKeyghciStepIoMClassOpKeyisListClassKeyfromListClassOpKeyfromListNClassOpKeytoListClassOpKey proxyHashKey mkTyConKey mkTrTypeKey mkTrConKey mkTrAppKeytypeNatTypeRepKeytypeSymbolTypeRepKeytypeCharTypeRepKey typeRepIdKey mkTrFunKeystarKindRepKeystarArrStarKindRepKeystarArrStarArrStarKindRepKeyconstraintKindRepKey toDynIdKey eqSCSelIdKey heqSCSelIdKeycoercibleSCSelIdKeysappendClassOpKeymemptyClassOpKeymappendClassOpKeymconcatClassOpKeyemptyCallStackKeypushCallStackKeyfromStaticPtrClassOpKey makeStaticKeyunsafeEqualityProofIdKeyunsafeCoercePrimIdKeygetFieldClassOpKeysetFieldClassOpKeyunsatisfiableIdNameKeyintegerFromNaturalIdKeyintegerToNaturalClampIdKeyintegerToNaturalThrowIdKeyintegerToNaturalIdKeyintegerToWordIdKeyintegerToIntIdKeyintegerToWord64IdKeyintegerToInt64IdKeyintegerAddIdKeyintegerMulIdKeyintegerSubIdKeyintegerNegateIdKeyintegerAbsIdKeyintegerPopCountIdKeyintegerQuotIdKeyintegerRemIdKeyintegerDivIdKeyintegerModIdKeyintegerDivModIdKeyintegerQuotRemIdKeyintegerEncodeFloatIdKeyintegerEncodeDoubleIdKeyintegerGcdIdKeyintegerLcmIdKeyintegerAndIdKeyintegerOrIdKeyintegerXorIdKeyintegerComplementIdKeyintegerBitIdKeyintegerTestBitIdKeyintegerShiftLIdKeyintegerShiftRIdKeyintegerFromWordIdKeyintegerFromWord64IdKeyintegerFromInt64IdKeynaturalToWordIdKeynaturalPopCountIdKeynaturalShiftRIdKeynaturalShiftLIdKeynaturalAddIdKeynaturalSubIdKeynaturalSubThrowIdKeynaturalSubUnsafeIdKeynaturalMulIdKeynaturalQuotRemIdKeynaturalQuotIdKeynaturalRemIdKeynaturalAndIdKeynaturalAndNotIdKeynaturalOrIdKeynaturalXorIdKeynaturalTestBitIdKeynaturalBitIdKeynaturalGcdIdKeynaturalLcmIdKeynaturalLog2IdKeynaturalLogBaseWordIdKeynaturalLogBaseIdKeynaturalPowModIdKeynaturalSizeInBaseIdKeybignatFromWordListIdKey bignatEqIdKeybignatCompareIdKeybignatCompareWordIdKeymkRationalBase2IdKeymkRationalBase10IdKeynumericClassKeysfractionalClassKeysstandardClassKeysderivableClassKeysinteractiveClassNamesinteractiveClassKeyspretendNameIsInScopeAnnEnv CoreAnnTarget AnnTarget NamedTarget ModuleTarget AnnPayload ann_value ann_target emptyAnnEnvmkAnnEnvextendAnnEnvList plusAnnEnvfindAnnsfindAnnsByTypeRepdeserializeAnns$fBinaryAnnTarget$fOutputableAnnTarget$fOutputableAnnotation$fFunctorAnnTargetfingerprintBinMemcomputeFingerprintputNameLiterallyOutputableBndrId NoGhcTcPassIdGhcPIsPassghcPassGhcTcGhcRnGhcPsPassParsedRenamed TypecheckedGhcPass IsSrcSpanAnnpprIfPspprIfRnpprIfTcnoHsTok noHsUniTok$fOutputableHsUniToken$fOutputableHsToken$fOutputableDataConCantHappen$fOutputableNoExtField $fDataGhcPass$fMapXRecGhcPass$fUnXRecGhcPass$fIsPassTypechecked$fIsPassRenamed$fIsPassParsed $fDataPass$fDataLayoutInfoExtractedTHDocsethd_inst_docs ethd_arg_docsethd_decl_docsethd_mod_headerDocsdocs_extensions docs_languagedocs_haddock_optsdocs_named_chunksdocs_structure docs_args docs_decls docs_mod_hdr DocStructureDocStructureItemDsiSectionHeading DsiDocChunkDsiNamedChunkRef DsiExports DsiModExportLHsDocWithHsDocIdentifiershsDocIdentifiers hsDocStringHsDochsDocIds pprWithDocpprMaybeWithDoc pprHsDocDebug emptyDocs$fBinaryWithHsDocIdentifiers $fOutputableWithHsDocIdentifiers$fNFDataWithHsDocIdentifiers$fNFDataDocStructureItem$fOutputableDocStructureItem$fBinaryDocStructureItem$fOutputableDocs $fBinaryDocs $fNFDataDocs$fEqWithHsDocIdentifiers$fDataWithHsDocIdentifiersLIEWrappedName IEWrappedNameIEName IEPatternIETypeXIEWrappedName IEWildcard NoIEWildcardIEVar IEThingAbs IEThingAll IEThingWithIEModuleContentsIEGroupIEDoc IEDocNamedXIELIEImportListInterpretationExactly EverythingBut ImportDecl XImportDeclideclImportListideclAsideclQualified ideclSafe ideclSource ideclPkgQual ideclNameideclExtImportDeclQualifiedStyle QualifiedPre QualifiedPost NotQualified LImportDecl$fEqIEWildcard$fDataIEWildcard$fEqImportListInterpretation$fDataImportListInterpretation$fEqIsBootInterface$fOrdIsBootInterface$fShowIsBootInterface$fDataIsBootInterface$fEqImportDeclQualifiedStyle$fDataImportDeclQualifiedStyleExportWarnNamesDeclWarnOccNamesWarningsWarnSomeWarnAll WarningTxt DeprecatedTxtWarningCategorySetWarningCategoryInWarningCategoryiwc_wciwc_stiwc_infromWarningCategorymkWarningCategorydefaultWarningCategoryvalidWarningCategoryemptyWarningCategorySetcompleteWarningCategorySetnullWarningCategorySetelemWarningCategorySetinsertWarningCategorySetdeleteWarningCategorySetwarningTxtCategorywarningTxtMessagewarningTxtSamepprWarningTxtForMsg emptyWarnmkIfaceDeclWarnCachemkIfaceExportWarnCacheemptyIfaceWarnCacheinsertWarnDeclsinsertWarnExports$fOutputableInWarningCategory$fOutputableWarningTxt$fGenericWarningTxt$fDataInWarningCategory$fBinaryWarningCategory$fDataWarningCategory$fEqWarningCategory$fOutputableWarningCategory$fShowWarningCategory$fUniquableWarningCategory$fNFDataWarningCategory $fEqWarnings$fDataWarningTxt$fEqWarningTxt$fEqInWarningCategoryCallerCcFilter ccfFuncName ccfModuleName NamePatternPChar PWildcardPEndoccNameMatchesparseNamePatternparseCallerCcFilter$fBinaryNamePattern$fOutputableNamePattern$fBinaryCallerCcFilter$fOutputableCallerCcFilterFixItem FixityEnvemptyFixityEnv lookupFixitymkIfaceFixCacheemptyIfaceFixCache$fOutputableFixItemEpAnnImportDeclimportDeclAnnAsimportDeclAnnPackageimportDeclAnnQualifiedimportDeclAnnSafeimportDeclAnnPragmaimportDeclAnnImportXImportDeclPass ideclImplicitideclSourceTextideclAnnimportDeclQualifiedStyleisImportDeclQualifiedsimpleImportDeclieNameieNames ieDeprecationieWrappedLName ieWrappedNamelieWrappedNameieLWrappedNamereplaceWrappedNamereplaceLWrappedName pprImpExp$fOutputableIEWrappedName$fOutputableBndrIEWrappedName$fHasOccNameIEWrappedName$fOutputableIE$fOutputableImportDecl$fDataXImportDeclPass$fDataEpAnnImportDecl$fEqIEWrappedName$fEqIEWrappedName0$fEqIEWrappedName1$fDataIEWrappedName$fDataIEWrappedName0$fDataIEWrappedName1RuleOpts roBignumRulesroExcessRationalPrecisionroNumConstantFolding roPlatform ForeignStubsNoStubsCHeader getCHeaderCStub getFinalizersgetInitializersgetCStubinitializerCStubfinalizerCStub appendStubC$fSemigroupCStub $fMonoidCStub$fSemigroupCHeader$fMonoidCHeaderDoAlignSanitisation ForeignHintNoHintAddrHint SignedHintLengthWidthW8W16W32W64W128W256W512CmmType cmmEqTypecmmEqType_ignoring_ptrhood typeWidthsetCmmTypeWidthcmmBitscmmFloatb8b16b32b64b128b256b512f32f64bWord bHalfWordgcWordcInt isFloatType isGcPtrType isBitsType isWordAnyisWord64isWord32 isFloat32 isFloat64 wordWidth halfWordWidth halfWordMask cIntWidth widthInBits widthInByteswidthFromBytes widthInLognarrowUnarrowSvecvec2vec4vec8vec16vec2f64vec2b64vec4f32vec4b32vec8b16vec16b8cmmVec vecLength vecElemType isVecTyperEP_CostCentreStack_mem_allocrEP_CostCentreStack_scc_countrEP_StgEntCounter_allocsrEP_StgEntCounter_allocd$fOutputableWidth$fOutputableCmmCat$fOutputableCmmType$fOutputableForeignHint$fEqForeignHint $fShowCmmType $fEqCmmCat $fShowCmmCat $fEqWidth $fOrdWidth $fShowWidthWaysWay WayCustom WayThreadedWayDebugWayProfWayDynhasWay hasNotWayaddWay removeWayallowed_combinationwaysTag waysBuildTagwayTag wayRTSOnlyfullWaysrtsWayswayDescwayGeneralFlagswayUnsetGeneralFlagswayOptcwayOptlwayOptPhostIsProfiled hostIsDynamichostIsThreadedhostIsDebugged hostIsTracinghostWays hostFullWays$fEqWay$fOrdWay $fShowWay $fReadWayProfile profileWaysprofilePlatformprofileConstantsprofileIsProfilingprofileWordSizeInBytesprofileBuildTag $fEqProfile $fOrdProfile $fShowProfile $fReadProfile GlobalReg VanillaRegFloatReg DoubleRegLongRegXmmRegYmmRegZmmRegSpSpLimHpHpLimCCCS CurrentTSOCurrentNurseryHpAllocEagerBlackholeInfoGCEnter1GCFunBaseRegMachSpUnwindReturnReg PicBaseRegLocalRegCmmRegCmmLocal CmmGlobal GlobalRegUseglobalRegUseTypeglobalRegUseGlobalRegpprGlobalRegUse cmmRegType cmmRegWidth localRegType pprGlobalRegbaseRegspReghpReghpLimRegspLimRegnodeReg currentTSORegcurrentNurseryReg hpAllocRegcccsRegnodeglobalRegSpillTypeisArgReg$fUniquableLocalReg $fOrdLocalReg$fOutputableLocalReg $fEqLocalReg$fOutputablePenvGlobalReg$fOutputableGlobalReg$fOrdGlobalRegUse$fEqGlobalRegUse$fOutputableGlobalRegUse$fOutputableCmmReg $fEqCmmReg $fOrdCmmReg $fShowCmmReg$fShowGlobalRegUse $fEqGlobalReg$fOrdGlobalReg$fShowGlobalReg$fShowLocalReg AtomicMachOpAMO_AddAMO_SubAMO_AndAMO_NandAMO_OrAMO_XorMemoryOrderingMemOrderRelaxedMemOrderAcquireMemOrderReleaseMemOrderSeqCst CallishMachOp MO_F64_Pwr MO_F64_Sin MO_F64_Cos MO_F64_Tan MO_F64_Sinh MO_F64_Cosh MO_F64_Tanh MO_F64_Asin MO_F64_Acos MO_F64_Atan MO_F64_Asinh MO_F64_Acosh MO_F64_Atanh MO_F64_Log MO_F64_Log1P MO_F64_Exp MO_F64_ExpM1 MO_F64_Fabs MO_F64_Sqrt MO_F32_Pwr MO_F32_Sin MO_F32_Cos MO_F32_Tan MO_F32_Sinh MO_F32_Cosh MO_F32_Tanh MO_F32_Asin MO_F32_Acos MO_F32_Atan MO_F32_Asinh MO_F32_Acosh MO_F32_Atanh MO_F32_Log MO_F32_Log1P MO_F32_Exp MO_F32_ExpM1 MO_F32_Fabs MO_F32_Sqrt MO_I64_ToI MO_I64_FromI MO_W64_ToW MO_W64_FromW MO_x64_Neg MO_x64_Add MO_x64_Sub MO_x64_Mul MO_I64_Quot MO_I64_Rem MO_W64_Quot MO_W64_Rem MO_x64_And MO_x64_Or MO_x64_Xor MO_x64_Not MO_x64_Shl MO_I64_Shr MO_W64_Shr MO_x64_Eq MO_x64_Ne MO_I64_Ge MO_I64_Gt MO_I64_Le MO_I64_Lt MO_W64_Ge MO_W64_Gt MO_W64_Le MO_W64_Lt MO_UF_Conv MO_S_Mul2 MO_S_QuotRem MO_U_QuotRem MO_U_QuotRem2MO_Add2 MO_AddWordC MO_SubWordC MO_AddIntC MO_SubIntC MO_U_Mul2MO_ReadBarrierMO_WriteBarrierMO_TouchMO_Prefetch_Data MO_Memcpy MO_Memset MO_Memmove MO_Memcmp MO_PopCntMO_PdepMO_PextMO_ClzMO_CtzMO_BSwapMO_BRev MO_AtomicRMW MO_AtomicReadMO_AtomicWrite MO_CmpxchgMO_XchgMO_SuspendThreadMO_ResumeThreadFMASignFMAddFMSubFNMAddFNMSubMachOpMO_AddMO_SubMO_EqMO_NeMO_MulMO_S_MulMayOflo MO_S_QuotMO_S_RemMO_S_Neg MO_U_QuotMO_U_RemMO_S_GeMO_S_LeMO_S_GtMO_S_LtMO_U_GeMO_U_LeMO_U_GtMO_U_LtMO_F_AddMO_F_SubMO_F_NegMO_F_Mul MO_F_QuotMO_FMAMO_F_EqMO_F_NeMO_F_GeMO_F_LeMO_F_GtMO_F_LtMO_AndMO_OrMO_XorMO_NotMO_ShlMO_U_ShrMO_S_Shr MO_SF_Conv MO_FS_Conv MO_SS_Conv MO_UU_Conv MO_XX_Conv MO_FF_Conv MO_V_Insert MO_V_ExtractMO_V_AddMO_V_SubMO_V_Mul MO_VS_Quot MO_VS_Rem MO_VS_Neg MO_VU_Quot MO_VU_Rem MO_VF_Insert MO_VF_Extract MO_VF_Add MO_VF_Sub MO_VF_Neg MO_VF_Mul MO_VF_QuotMO_AlignmentCheck pprMachOp pprFMASign mo_wordAdd mo_wordSub mo_wordEq mo_wordNe mo_wordMul mo_wordSQuot mo_wordSRem mo_wordSNeg mo_wordUQuot mo_wordURem mo_wordSGe mo_wordSLe mo_wordSGt mo_wordSLt mo_wordUGe mo_wordULe mo_wordUGt mo_wordULt mo_wordAnd mo_wordOr mo_wordXor mo_wordNot mo_wordShl mo_wordSShr mo_wordUShr mo_u_8To32 mo_s_8To32 mo_u_16To32 mo_s_16To32 mo_u_8ToWord mo_s_8ToWord mo_u_16ToWord mo_s_16ToWord mo_s_32ToWord mo_u_32ToWord mo_WordTo8 mo_WordTo16 mo_WordTo32 mo_WordTo64mo_32To8 mo_32To16isCommutableMachOpisAssociativeMachOpisComparisonMachOpmaybeIntComparisonisFloatComparisonmaybeInvertComparisonmachOpResultType machOpArgRepspprCallishMachOpcallishMachOpHintsmachOpMemcpyishAlign$fEqCallishMachOp$fShowCallishMachOp$fEqAtomicMachOp$fShowAtomicMachOp$fEqMemoryOrdering$fOrdMemoryOrdering$fShowMemoryOrdering $fEqMachOp $fShowMachOp $fEqFMASign $fShowFMASignGhcNameVersionghcNameVersion_projectVersionghcNameVersion_programName FileSettings"fileSettings_globalPackageDatabasefileSettings_topDirfileSettings_toolDirfileSettings_ghciUsagePathfileSettings_ghcUsagePath ToolSettingstoolSettings_extraGccViaCFlagstoolSettings_opt_itoolSettings_opt_lcctoolSettings_opt_lctoolSettings_opt_lotoolSettings_opt_windrestoolSettings_opt_lmtoolSettings_opt_ltoolSettings_opt_atoolSettings_opt_cxxtoolSettings_opt_ctoolSettings_opt_FtoolSettings_opt_P_fingerprinttoolSettings_opt_PtoolSettings_opt_LtoolSettings_pgm_itoolSettings_pgm_lcctoolSettings_pgm_lctoolSettings_pgm_lotoolSettings_pgm_ranlib"toolSettings_pgm_install_name_tooltoolSettings_pgm_otooltoolSettings_pgm_artoolSettings_pgm_windrestoolSettings_pgm_TtoolSettings_pgm_dlltoolSettings_pgm_lmtoolSettings_pgm_ltoolSettings_pgm_atoolSettings_pgm_cxxtoolSettings_pgm_ctoolSettings_pgm_FtoolSettings_pgm_PtoolSettings_pgm_LtoolSettings_arSupportsDashLtoolSettings_useInplaceMinGWtoolSettings_ccSupportsNoPietoolSettings_ldIsGnuLd#toolSettings_ldSupportsSingleModule$toolSettings_ldSupportsResponseFilestoolSettings_ldSupportsFilelist$toolSettings_ldSupportsCompactUnwindSettings sRawSettings sPlatformMisc sToolSettingssTargetPlatform sFileSettingssGhcNameVersion dynLibSuffix sProgramNamesProjectVersion sGhcUsagePathsGhciUsagePathsToolDirsTopDirsGlobalPackageDatabasePathsLdSupportsCompactUnwindsLdSupportsFilelistsLdSupportsResponseFiles sLdIsGnuLdsGccSupportsNoPiesUseInplaceMinGWsArSupportsDashLsPgm_LsPgm_PsPgm_FsPgm_csPgm_cxxsPgm_asPgm_lsPgm_lmsPgm_dllsPgm_T sPgm_windressPgm_ar sPgm_otoolsPgm_install_name_tool sPgm_ranlibsPgm_losPgm_lcsPgm_lccsPgm_isOpt_LsOpt_PsOpt_P_fingerprintsOpt_FsOpt_csOpt_cxxsOpt_asOpt_lsOpt_lm sOpt_windressOpt_losOpt_lcsOpt_lccsOpt_isExtraGccViaCFlagssTargetPlatformStringsGhcWithInterpretersLibFFI PackageName unPackageName PackageIdUnitInfo UnitKeyInfo GenUnitInfo mkUnitKeyInfo mapUnitInfounitPackageIdStringunitPackageNameString pprUnitInfomkUnit mkUnitPprInfocollectIncludeDirscollectExtraCcOptscollectLibraryDirscollectFrameworkscollectFrameworksDirs unitHsLibs$fOutputablePackageId$fUniquablePackageId$fOutputablePackageName$fUniquablePackageName$fEqPackageName $fEqPackageIdUnlitCppHsPpHscCcxxCcCobjcCobjcxxHCcAsLlvmOptLlvmLlc LlvmMangleCmmCppCmm MergeForeignJsStopLn StopPhaseStopPreprocessStopCStopAsNoStopstopPhaseToPhaseisStopLneqPhase happensBefore startPhase phaseInputExtisHaskellishSuffixisBackpackishSuffixisHaskellSigSuffixisHaskellSrcSuffix isCishSuffixisHaskellUserSrcSuffixisObjectSuffixisDynLibSuffixisSourceSuffixisHaskellishTargetisHaskellishFilenameisHaskellSrcFilenameisCishFilenameisHaskellUserSrcFilenameisSourceFilenameisHaskellSigFilenameisObjectFilenameisDynLibFilenamephaseForeignLanguage$fOutputablePhase $fEqPhase $fShowPhaseBuiltInSynFamilysfInteractInert sfInteractTop sfMatchFam CoAxiomRule coaxrProves coaxrRolecoaxrAsmpRoles coaxrNameTypeEqn CoAxBranch cab_incompscab_rhscab_lhs cab_rolescab_cvs cab_eta_tvscab_tvscab_locCoAxiomco_ax_implicitco_ax_branchesco_ax_tc co_ax_role co_ax_name co_ax_uniqueBranches MkBranches unMkBranches UnbranchedBranched BranchFlag BranchIndex manyBranches unbranched fromBranches numBranchesmapAccumBranchestoBranchedAxiomtoUnbranchedAxiomcoAxiomNumPatscoAxiomNthBranch coAxiomArity coAxiomName coAxiomRolecoAxiomBranchescoAxiomSingleBranch_maybecoAxiomSingleBranch coAxiomTyConcoAxBranchTyVarscoAxBranchCoVars coAxBranchLHS coAxBranchRHScoAxBranchRolescoAxBranchSpanisImplicitCoAxiomcoAxBranchIncompsplaceHolderIncomps fsFromRoletrivialBuiltInFamily $fBinaryRole$fOutputableRole$fOutputableCoAxBranch$fOutputableCoAxiom $fDataCoAxiom$fNamedThingCoAxiom$fUniquableCoAxiom $fEqCoAxiom$fOutputableCoAxiomRule$fOrdCoAxiomRule$fEqCoAxiomRule$fUniquableCoAxiomRule$fDataCoAxiomRule$fDataCoAxBranchtopNormaliseNewType_maybe coercionType coercionRKind coercionLKind coercionKindseqComkCoercionType coVarRolecoVarKindsTypesRoledecomposePiCos isReflexiveCoisReflCo isGReflCofunRole mkAxiomRuleComkProofIrrelComkSubComkKindCo mkNomReflCo mkGReflComkInstComkLRComkSelCo mkTransComkSymComkUnivCo mkPhantomCo mkAxiomInstCo mkCoVarComkFunCo2 mkNakedFunComkFunCo mkForAllComkAppCo mkTyConAppComkReflCoClassMinimalDefTyFamEqnValidityInfoNoVIVIvi_rhsvi_patsvi_non_user_tvsvi_qtvsvi_loc ClassATItemATI DefMethInfo ClassOpItemFunDepClass classTyVarsclassKey className classTyConclassMinimalDefmkClassmkAbstractClass classArityclassAllSelIds classSCSelIds classSCSelId classMethods classOpItemsclassATs classATItems classSCTheta classHasSCs classTvsFds classHasFds classBigSigclassExtraBigSigisAbstractClasspprDefMethInfo pprFundeps pprFunDep $fDataClass$fOutputableClass$fNamedThingClass$fUniquableClass $fEqClass DataConBoxer mkDictSelIdmkDataConWorkIdExpandSynResult NoExpansion ExpandsSyn PrimElemRep Int8ElemRep Int16ElemRep Int32ElemRep Int64ElemRep Word8ElemRep Word16ElemRep Word32ElemRep Word64ElemRep FloatElemRep DoubleElemRepPrimRepVoidRepBoxedRepInt8RepInt16RepInt32RepInt64RepIntRepWord8Rep Word16Rep Word32Rep Word64RepWordRepAddrRepFloatRep DoubleRepVecRep FamTyConFlavDataFamilyTyConOpenSynFamilyTyConClosedSynFamilyTyConAbstractClosedSynFamilyTyConBuiltInSynFamTyCon Injectivity NotInjective Injective AlgTyConFlavVanillaAlgTyConUnboxedSumTyCon ClassTyConDataFamInstTyCon NoPromInfo RuntimeRepVecCountVecElem AlgTyConRhs AbstractTyCon DataTyCon TupleTyConSumTyConNewTyCondata_fixed_lev is_type_datais_enumdata_cons_size data_constup_sortdata_con nt_fixed_repnt_co nt_etad_rhsnt_rhsAlgTyCon algTcFields tyConRolestyConNullaryTy tyConArity tyConKind tyConTyVarstyConHasClosedResKind tyConResKind tyConBinders tyConName tyConUnique TyConBndrVisNamedTCBAnonTCB TyConBindermkAnonTyConBindermkAnonTyConBindersmkNamedTyConBindermkNamedTyConBindersmkRequiredTyConBindertyConBinderForAllTyFlagtyConBndrVisForAllTyFlagisNamedTyConBinderisVisibleTyConBinderisVisibleTcbVisisInvisSpecTcbVisisInvisibleTyConBinder mkTyConKindtyConInvisTVBinderstyConVisibleTyVarsmkLevPolyDataTyConRhsmkDataTyConRhsvisibleDataCons isNoParenttyConRepModOcc isVoidRep isGcPtrRepprimRepCompatibleprimRepsCompatible primRepSizeBprimElemRepSizeBprimElemRepToPrimRepprimRepIsFloat primRepIsWord primRepIsInttyConFieldLabelslookupTyConFieldLabel mkAlgTyCon mkClassTyCon mkTupleTyCon mkSumTyCon mkTcTyConnoTcTyConScopedTyVars mkPrimTyConmkSynonymTyCon mkFamilyTyConmkPromotedDataConisAbstractTyCon isPrimTyCon isAlgTyConisVanillaAlgTyCon isDataTyConisTypeDataTyConisInjectiveTyConisGenerativeTyConisGenInjAlgRhs isNewTyConunwrapNewTyCon_maybeunwrapNewTyConEtad_maybeisTypeSynonymTyCon isTauTyConisFamFreeTyConisForgetfulSynTyContyConMustBeSaturatedisGadtSyntaxTyConisEnumerationTyCon isFamilyTyConisOpenFamilyTyConisTypeFamilyTyConisDataFamilyTyConisOpenTypeFamilyTyCon%isClosedSynFamilyTyConWithAxiom_maybeisBuiltInSynFamTyCon_maybetyConFamilyResVar_maybetyConInjectivityInfo isTyConAssoctyConAssoc_maybetyConTuple_maybeisBoxedTupleTyConisUnboxedSumTyConisLiftedAlgTyConisPromotedDataCon_maybeisPromotedTupleTyConisPromotedDataConisDataKindsPromotedDataCon isKindTyConisLiftedTypeKindTyConNameisImplicitTyContyConCType_maybetcHasFixedRuntimeRepisConcreteTyCon isTcTyConsetTcTyConKind isMonoTcTyContcTyConScopedTyVarsexpandSynTyCon_maybeisTyConWithSrcDataCons tyConDataConstyConDataCons_maybetyConSingleDataCon_maybetyConSingleDataContyConSingleAlgDataCon_maybetyConAlgDataCons_maybetyConFamilySize algTyConRhs newTyConRhsnewTyConEtadAritynewTyConEtadRhsnewTyConCo_maybe newTyConConewTyConDataCon_maybetyConStupidThetasynTyConDefn_maybesynTyConRhs_maybefamTyConFlav_maybe isClassTyContyConClass_maybetyConATsisFamInstTyContyConFamInstSig_maybetyConFamInst_maybetyConFamilyCoercion_maybetyConPromDataConInfo mkTyConTagMap tyConFlavourtcFlavourIsOpenpprPromotionQuote tyConSkolem$fBinaryTyConBndrVis$fOutputableTyConBndrVis$fBinaryInjectivity$fOutputableFamTyConFlav$fBinaryPrimElemRep$fOutputablePrimElemRep$fBinaryPrimRep$fOutputablePrimRep $fDataTyCon$fNamedThingTyCon$fOutputableTyCon$fUniquableTyCon $fEqTyCon$fOutputableAlgTyConFlav $fDataPrimRep $fEqPrimRep $fOrdPrimRep $fShowPrimRep$fDataPrimElemRep$fEqPrimElemRep$fOrdPrimElemRep$fShowPrimElemRep$fEnumPrimElemRep$fEqInjectivitytidyToIfaceTcArgstoIfaceCoercionX toIfaceTcArgs toIfaceTyContoIfaceForAllBndrs toIfaceTyLit toIfaceTypeX TyCoFoldertcf_tycobindertcf_hole tcf_covar tcf_tyvartcf_view CoercionHolech_hetero_kindch_ref ch_co_var PhantomProvProofIrrelProv PluginProv CorePrepProv MCoercionRMReflMCo KindCoercion CoercionP CoercionRSelMultSelArgSelResSelTyConSelFun SelForAllReflGRefl TyConAppCoAppCoForAllCoFunCoCoVarCo AxiomInstCo AxiomRuleCoUnivCoSymCoTransCoSelCoLRCoInstCoKindCoSubCoHoleCofco_resfco_argfco_multfco_afrfco_aflfco_roleKnotTiedNumTyLitStrTyLit CharTyLitTyVarTyAppTyTyConAppForAllTyFunTyLitTyCastTy CoercionTyft_resft_argft_multft_afFRRType LevityType KindOrTypenonDetCmpTyLitcmpTyLit mkTyVarTy mkTyVarTys mkTyCoVarTy mkTyCoVarTysmkFunTy mkInvisFunTy mkInvisFunTys tcMkVisFunTytcMkInvisFunTy mkVisFunTymkVisFunTyManymkVisFunTysManymkScaledFunTystcMkScaledFunTys mkForAllTysmkInvisForAllTysmkPiTymkPiTys coHoleCoVarisHeteroKindCoHolesetCoHoleCoVarfoldTyConoViewtypeSize typesSize coercionSizeprovSize scaledMult mapScaledType$fOutputableTyLit$fOutputableFunSel $fNFDataCoSel $fBinaryCoSel$fOutputableCoSel$fUniquableCoercionHole$fOutputableCoercionHole$fDataCoercionHole$fOutputableUnivCoProvenance$fOutputableMCoercion$fOutputableCoercion$fOutputableType$fOutputableScaled $fDataScaled $fDataType$fDataCoercion$fDataUnivCoProvenance$fDataMCoercion $fEqCoSel $fDataCoSel $fEqFunSel $fDataFunSel $fEqTyLit $fDataTyLit primTyConsunexposedPrimTyConsexposedPrimTyConscharPrimTyConNameintPrimTyConNameint8PrimTyConNameint16PrimTyConNameint32PrimTyConNameint64PrimTyConNamewordPrimTyConNameword8PrimTyConNameword16PrimTyConNameword32PrimTyConNameword64PrimTyConNameaddrPrimTyConNamefloatPrimTyConNamedoublePrimTyConNamemkTemplateKindVarmkTemplateKindVarsmkTemplateTyVarsFrommkTemplateTyVarsmkTemplateTyConBindersmkTemplateKiTyVarsmkTemplateKiTyVarmkTemplateKindTyConBindersmkTemplateAnonTyConBinders alphaTyVars alphaTyVar betaTyVar gammaTyVar deltaTyVaralphaTyVarSpec betaTyVarSpecgammaTyVarSpecdeltaTyVarSpecalphaConstraintTyVaralphaConstraintTyalphaTysalphaTybetaTygammaTydeltaTyalphaTyVarsUnliftedRepalphaTyVarUnliftedRepalphaTysUnliftedRepalphaTyUnliftedRepruntimeRep1TyVarruntimeRep2TyVarruntimeRep3TyVarruntimeRep1TyVarInfruntimeRep2TyVarInf runtimeRep1Ty runtimeRep2Ty runtimeRep3TyopenAlphaTyVar openBetaTyVaropenGammaTyVaropenAlphaTyVarSpecopenBetaTyVarSpecopenGammaTyVarSpec openAlphaTy openBetaTy openGammaTy levity2TyVar levity1TyVarlevity1TyVarInflevity2TyVarInf levity1Ty levity2TylevPolyAlphaTyVarlevPolyBetaTyVarlevPolyAlphaTyVarSpeclevPolyBetaTyVarSpeclevPolyAlphaTy levPolyBetaTymultiplicityTyVar1multiplicityTyVar2funTyFlagTyCon isArrowTyCon fUNTyConNamectArrowTyConNameccArrowTyConNametcArrowTyConNamefUNTyCon ctArrowTyCon ccArrowTyCon tcArrowTyCon tYPETyCon tYPETyConNametYPEKindcONSTRAINTTyConcONSTRAINTTyConNamecONSTRAINTKind charPrimTy charPrimTyCon intPrimTy intPrimTyCon int8PrimTy int8PrimTyCon int16PrimTyint16PrimTyCon int32PrimTyint32PrimTyCon int64PrimTyint64PrimTyCon wordPrimTy wordPrimTyCon word8PrimTyword8PrimTyCon word16PrimTyword16PrimTyCon word32PrimTyword32PrimTyCon word64PrimTyword64PrimTyCon addrPrimTy addrPrimTyCon floatPrimTyfloatPrimTyCon doublePrimTydoublePrimTyCon mkStatePrimTystatePrimTyConrealWorldTyCon realWorldTyrealWorldStatePrimTy mkProxyPrimTyproxyPrimTyCon eqPrimTyConeqReprPrimTyConeqPhantPrimTyCon equalityTyConarrayPrimTyConmutableArrayPrimTyConmutableByteArrayPrimTyConbyteArrayPrimTyConsmallArrayPrimTyConsmallMutableArrayPrimTyCon mkArrayPrimTybyteArrayPrimTymkSmallArrayPrimTymkMutableArrayPrimTymkMutableByteArrayPrimTymkSmallMutableArrayPrimTymutVarPrimTyConmkMutVarPrimTyioPortPrimTyConmkIOPortPrimTy mVarPrimTyCon mkMVarPrimTy tVarPrimTyCon mkTVarPrimTystablePtrPrimTyConmkStablePtrPrimTystableNamePrimTyConmkStableNamePrimTycompactPrimTyCon compactPrimTystackSnapshotPrimTyConstackSnapshotPrimTy bcoPrimTy bcoPrimTyCon weakPrimTyCon mkWeakPrimTythreadIdPrimTythreadIdPrimTyConpromptTagPrimTyConmkPromptTagPrimTy int8X16PrimTyint8X16PrimTyCon int16X8PrimTyint16X8PrimTyCon int32X4PrimTyint32X4PrimTyCon int64X2PrimTyint64X2PrimTyCon int8X32PrimTyint8X32PrimTyConint16X16PrimTyint16X16PrimTyCon int32X8PrimTyint32X8PrimTyCon int64X4PrimTyint64X4PrimTyCon int8X64PrimTyint8X64PrimTyConint16X32PrimTyint16X32PrimTyConint32X16PrimTyint32X16PrimTyCon int64X8PrimTyint64X8PrimTyConword8X16PrimTyword8X16PrimTyConword16X8PrimTyword16X8PrimTyConword32X4PrimTyword32X4PrimTyConword64X2PrimTyword64X2PrimTyConword8X32PrimTyword8X32PrimTyConword16X16PrimTyword16X16PrimTyConword32X8PrimTyword32X8PrimTyConword64X4PrimTyword64X4PrimTyConword8X64PrimTyword8X64PrimTyConword16X32PrimTyword16X32PrimTyConword32X16PrimTyword32X16PrimTyConword64X8PrimTyword64X8PrimTyCon floatX4PrimTyfloatX4PrimTyCondoubleX2PrimTydoubleX2PrimTyCon floatX8PrimTyfloatX8PrimTyCondoubleX4PrimTydoubleX4PrimTyConfloatX16PrimTyfloatX16PrimTyCondoubleX8PrimTydoubleX8PrimTyCon runTyCoVarstyCoVarsOfTypetyCoVarsOfTypes tyCoVarsOfCo tyCoVarsOfMCo tyCoVarsOfCos deepTcvFoldershallowTyCoVarsOfTypeshallowTyCoVarsOfTypesshallowTyCoVarsOfCoshallowTyCoVarsOfCosshallowTyCoVarsOfTyVarEnvshallowTyCoVarsOfCoVarEnv coVarsOfType coVarsOfTypes coVarsOfCo coVarsOfCoscloseOverKindscloseOverKindsListcloseOverKindsDSettyCoVarsOfTypeDSettyCoVarsOfTypeListtyCoVarsOfTypesDSettyCoVarsOfTypesList tyCoFVsOfType tyCoFVsBndrtyCoFVsVarBndrstyCoFVsVarBndrtyCoFVsOfTypestyCoVarsOfCoDSettyCoVarsOfCoList tyCoFVsOfCo tyCoFVsOfCosalmostDevoidCoVarOfCo visVarsOfTypevisVarsOfTypesisInjectiveInTypeinjectiveVarsOfTypeinjectiveVarsOfTypesinvisibleVarsOfTypeinvisibleVarsOfTypesanyFreeVarsOfTypeanyFreeVarsOfTypesanyFreeVarsOfConoFreeVarsOfTypesnoFreeVarsOfCo scopedSorttyCoVarsOfTypeWellScopedtyCoVarsOfTypesWellScoped tyConsOfType tyConsOfTypesoccCheckExpand CvSubstEnv TvSubstEnv IdSubstEnvemptyIdSubstEnvemptyTvSubstEnvemptyCvSubstEnvcomposeTCvSubst emptySubst mkEmptySubst isEmptySubstisEmptyTCvSubstmkSubst mkIdSubst mkTvSubst mkCvSubst getIdSubstEnv getTvSubstEnv getCvSubstEnvgetSubstInScope setInScopegetSubstRangeTyCoFVs isInScope elemSubst notElemSubstzapSubstextendSubstInScopeextendSubstInScopeListextendSubstInScopeSetextendTCvSubstextendTCvSubstWithClone extendTvSubstextendTvSubstBinderAndInScopeextendTvSubstWithClone extendCvSubstextendCvSubstWithCloneextendTvSubstAndInScopeextendTvSubstListextendTCvSubstList unionSubst zipTvSubst zipCvSubst zipTCvSubst mkTvSubstPrszipTyEnvzipCoEnv substTyWithsubstTyWithUncheckedsubstTyWithInScope substCoWithsubstCoWithUncheckedsubstTyWithCoVars substTysWithsubstTysWithCoVarssubstTyAddInScopeisValidTCvSubstcheckValidSubstsubstTysubstTyUnchecked substScaledTysubstScaledTyUncheckedsubstTyssubstScaledTyssubstTysUncheckedsubstScaledTysUnchecked substThetasubstThetaUnchecked substTyVarsubstTyVarToTyVar substTyVars substTyCoVars lookupTyVarsubstCosubstCoUncheckedsubstCossubstForAllCoBndrsubstForAllCoBndrUsing substCoVar substCoVars lookupCoVarsubstTyVarBndrsubstTyVarBndrs substVarBndr substVarBndrssubstCoVarBndrsubstVarBndrUsingcloneTyVarBndrcloneTyVarBndrs substTyCoBndr$fOutputableSubst tidyVarBndrs tidyVarBndravoidNameClashestidyForAllTyBindertidyForAllTyBinderstidyFreeTyCoVarstidyOpenTyCoVarstidyOpenTyCoVartidyTyCoVarOcc tidyTypestidyType tidyOpenTypes tidyOpenType tidyTopTypetidyCotidyCos ErrorMsgType TyCoMapper tcm_tycontcm_tycobindertcm_hole tcm_covar tcm_tyvarManyTyOneTy coreFullViewkindRep kindRep_maybeisUnliftedTypeKindpickyIsLiftedTypeKindkindBoxedRepLevity_maybeisLiftedRuntimeRepisUnliftedRuntimeRepisLiftedLevityisUnliftedLevityisRuntimeRepVar isLevityVarisMultiplicityVarsplitRuntimeRep_maybeisBoxedRuntimeRepruntimeRepLevity_maybelevityType_maybemapTyComapTyCoXgetTyVarrepGetTyVar_maybe isTyVarTygetCastedTyVar_maybemkAppTyssplitAppTy_maybe splitAppTysplitAppTyNoView_maybetcSplitAppTyNoView_maybe splitAppTyssplitAppTysNoView mkNumLitTy isNumLitTy mkStrLitTy isStrLitTy mkCharLitTy isCharLitTyisLitTyuserTypeError_maybepprUserTypeErrorTyfunTyConAppTy_maybetyConAppFunTy_maybetyConAppFunCo_maybemkFunctionTypemkScaledFunctionTys splitFunTysplitFunTy_maybe splitFunTys funResultTyfunArgTy piResultTys applyTysXtyConAppTyConPicky_maybe tyConAppTyContyConAppArgs_maybe tyConAppArgs splitTyConAppsplitTyConAppNoView_maybetcSplitTyConApp_maybetcSplitTyConAppnewTyConInstRhssplitCastTy_maybeisCoercionTy_maybestripCoercionTytyConBindersPiTyBindersmkTyCoInvForAllTy mkInfForAllTymkTyCoInvForAllTysmkInfForAllTysmkSpecForAllTymkSpecForAllTysmkVisForAllTysmkTyConBindersPreferAnonsplitForAllForAllTyBinderssplitForAllTyCoVarssplitForAllTyVarssplitForAllReqTyBinderssplitForAllInvisTyBinders isForAllTy isForAllTy_tyisForAllTy_invis_ty isForAllTy_coisPiTyisFunTysplitForAllTyCoVar dropForAllssplitForAllTyCoVar_maybesplitForAllTyVar_maybesplitForAllCoVar_maybesplitPiTy_maybe splitPiTy splitPiTysgetRuntimeArgTysinvisibleTyBndrCountsplitInvisPiTyssplitInvisPiTysNfilterOutInvisibleTypesfilterOutInferredTypespartitionInvisiblestyConForAllTyFlagsappTyForAllTyFlagsisTauTy isAtomicTymkFamilyTyConApp coAxNthLHS isFamFreeTy buildSynTyConisUnliftedTypemightBeLiftedTypedefinitelyLiftedTypemightBeUnliftedTypedefinitelyUnliftedType isBoxedTypeisRuntimeRepKindedTydropRuntimeRepArgs getRuntimeRepisUnboxedTupleTypeisUnboxedSumType isAlgTypeisDataFamilyAppType isStrictTypeisTerminatingType isCoVarTypeisPrimitiveTypeisValidJoinPointTypeseqTypeseqTypessORTKind_maybeisTYPEorCONSTRAINTtyConIsTYPEorCONSTRAINTisConstraintLikeKindisConstraintKindtcIsLiftedTypeKindtcIsBoxedTypeKindisTypeLikeKindreturnsConstraintKindtypeHasFixedRuntimeRepargsHaveFixedRuntimeRepisFixedRuntimeRepKindisConcreteTypetyConAppNeedsKindSig unrestrictedlineartymultirrelevantMultmkScaled scaledSetisManyTyisOneTy isLinearType mkTYPEappmkTYPEapp_maybemkCONSTRAINTappmkCONSTRAINTapp_maybemkBoxedRepApp_maybemkTupleRepApp_maybetypeOrConstraintKind OverLitVal HsIntegral HsFractional HsIsString HsOverLitOverLitol_valol_extHsLitHsChar HsCharPrimHsString HsStringPrimHsInt HsIntPrim HsWordPrim HsInt8Prim HsInt16Prim HsInt32Prim HsInt64Prim HsWord8Prim HsWord16Prim HsWord32Prim HsWord64Prim HsIntegerHsRat HsFloatPrim HsDoublePrimXLitnegateOverLitVal $fEqHsLit$fOrdOverLitVal$fEqOverLitVal$fOrdHsOverLit $fEqHsOverLit$fDataOverLitValtcEqKindtcEqTypetcEqTypeNoKindCheck tcEqTyConApps tcEqTypeVis pickyEqType eqForAllVis cmpForAllViseqTypeeqTypeXeqTypes eqVarBndrs nonDetCmpTypenonDetCmpTypesnonDetCmpTypeXnonDetCmpTypesX nonDetCmpTc$fEqTypeOrdering$fOrdTypeOrdering$fEnumTypeOrdering$fBoundedTypeOrdering ShowHowMuch ShowHeaderShowSome ShowIfaceAltPpr ss_forall ss_how_muchShowForAllFlagShowForAllMustShowForAllWhenPrintExplicitKinds UseBndrParensSuppressBndrSigIfaceUnivCoProvIfacePhantomProvIfaceProofIrrelProvIfacePluginProvIfaceCorePrepProv IfaceReflCo IfaceGReflCo IfaceFunCoIfaceTyConAppCo IfaceAppCo IfaceForAllCo IfaceCoVarCoIfaceAxiomInstCoIfaceAxiomRuleCo IfaceUnivCo IfaceSymCo IfaceTransCo IfaceSelCo IfaceLRCo IfaceInstCo IfaceKindCo IfaceSubCoIfaceFreeCoVar IfaceHoleCoIfaceMCoercion IfaceMReflIfaceMCoIfaceTyConInfoifaceTyConSortifaceTyConIsPromotedIfaceTyConSortIfaceNormalTyConIfaceTupleTyCon IfaceSumTyConIfaceEqualityTyConifaceTyConInfoifaceTyConNameIA_NilIA_ArgIfaceForAllSpecBndrIfaceForAllBndrIfaceTyConBinder IfaceNumTyLit IfaceStrTyLitIfaceCharTyLit IfaceContext IfacePredType IfaceMultIfaceFreeTyVar IfaceTyVar IfaceLitTy IfaceAppTy IfaceFunTy IfaceForAllTy IfaceTyConApp IfaceCastTyIfaceCoercionTy IfaceTupleTy IfaceKind IfaceOneShotIfaceNoOneShot IfaceLamBndr IfaceTvBndr IfaceIdBndr IfExtName IfLclName ifaceBndrNamemkIfaceForAllTvBndrmkIfaceTyConKindifaceForAllSpecToBndrsifaceForAllSpecToBndrmkIfaceTyConInfoisIfaceLiftedTypeKindsplitIfaceSigmaTysuppressIfaceInvisiblesstripIfaceInvisVarsifForAllBndrVarifForAllBndrNameifTyConBinderVarifTyConBinderNamemkIfaceTySubstinDomIfaceTySubstsubstIfaceAppArgssubstIfaceTyVarstripInvisArgsappArgsIfaceTypesappArgsIfaceTypesForAllTyFlagspprIfacePrefixAppisIfaceRhoType pprIfaceBndrspprIfaceLamBndrpprIfaceIdBndrpprIfaceTvBndrpprIfaceTyConBinders pprIfaceTypepprParendIfaceTypepprPrecIfaceType pprTypeArrowmany_typprIfaceAppArgspprParendIfaceAppArgspprIfaceForAllPartpprIfaceForAllPartMustpprIfaceForAllpprIfaceSigmaTypepprUserIfaceForAllpprIfaceTypeApp pprTyTcApppprIfaceCoTcApp pprIfaceTyLitpprIfaceCoercionpprParendIfaceCoercionpprIfaceContextArrpprIfaceContext$fNFDataIfaceOneShot$fBinaryIfaceOneShot$fOutputableIfaceOneShot$fNFDataIfaceTyLit$fBinaryIfaceTyLit$fOutputableIfaceTyLit$fNFDataIfaceTyConSort$fBinaryIfaceTyConSort$fOutputableIfaceTyConSort$fNFDataIfaceTyConInfo$fBinaryIfaceTyConInfo$fOutputableIfaceTyConInfo$fNFDataIfaceTyCon$fBinaryIfaceTyCon$fOutputableIfaceTyCon$fNFDataIfaceAppArgs$fNFDataIfaceBndr$fNFDataIfaceMCoercion$fNFDataIfaceUnivCoProv$fNFDataIfaceCoercion$fNFDataIfaceType$fBinaryDefMethSpec$fBinaryIfaceUnivCoProv$fBinaryIfaceCoercion$fBinaryIfaceMCoercion$fBinaryIfaceType$fBinaryIfaceAppArgs$fOutputableIfaceCoercion$fOutputableIfaceAppArgs$fOutputableIfaceType$fBinaryIfaceBndr$fMonoidIfaceAppArgs$fSemigroupIfaceAppArgs$fOutputableIfaceBndr$fOutputableShowHowMuch$fEqIfaceTyCon$fEqIfaceTyConInfo$fEqIfaceTyConSort$fEqIfaceTyLitTickishPlacement PlaceRuntime PlaceNonLamPlaceCostCentreTickishScopingNoScope SoftScopeCostCentreScope GenTickishProfNoteHpcTick Breakpoint profNoteScope profNoteCount profNoteCCtickId tickModule breakpointFVs breakpointId breakpointExt sourceName sourceSpan CmmTickish StgTickish CoreTickish XTickishId tickishCounts tickishScopedtickishScopesLiketickishFloatabletickishCanSplit mkNoCount mkNoScope tickishIsCode isProfTick tickishPlacetickishContains$fOutputableTickishPlacement$fEqTickishPlacement$fShowTickishPlacement$fEqTickishScoping$fDataGenTickish$fOrdGenTickish$fEqGenTickish$fDataGenTickish0$fDataGenTickish1$fOrdGenTickish0$fEqGenTickish0 IsSubmultSubmultUnknown isMultMul mkMultAdd mkMultMul scaleScaled mkMultSupsubmultpprArrowWithMultiplicity$fOutputableIsSubmult$fShowIsSubmult $fEqIsSubmultUsageEnvUsageZeroBottomMUsageaddUsage scaleUsage singleUsageUEzeroUEbottomUEaddUEscaleUEsupUEsupUEsdeleteUElookupUEpopUE$fOutputableUsage$fOutputableUsageEnv PromotionErrTyConPEClassPE FamDataConPEConstrainedDataConPEPatSynPE RecDataConPETermVariablePE NoDataKindsDCTypeVariablePE pprPECategory peCategory$fOutputablePromotionErr$fGenericPromotionErr LitNumType LitNumBigNat LitNumInt LitNumInt8 LitNumInt16 LitNumInt32 LitNumInt64 LitNumWord LitNumWord8 LitNumWord16 LitNumWord32 LitNumWord64LiteralLitChar LitNumber LitString LitNullAddr LitRubbishLitFloat LitDoubleLitLabellitNumIsSigned litNumBitSizemkLitNumberWrap litNumWrap litNumCoerce litNumNarrowlitNumCheckRange litNumRange mkLitNumbermkLitNumberMaybemkLitInt mkLitIntWrapmkLitIntUnchecked mkLitIntWrapC mkLitWord mkLitWordWrapmkLitWordUncheckedmkLitWordWrapC mkLitInt8 mkLitInt8WrapmkLitInt8Unchecked mkLitWord8mkLitWord8WrapmkLitWord8Unchecked mkLitInt16mkLitInt16WrapmkLitInt16Unchecked mkLitWord16mkLitWord16WrapmkLitWord16Unchecked mkLitInt32mkLitInt32WrapmkLitInt32Unchecked mkLitWord32mkLitWord32WrapmkLitWord32Unchecked mkLitInt64mkLitInt64WrapmkLitInt64Unchecked mkLitWord64mkLitWord64WrapmkLitWord64Unchecked mkLitFloat mkLitDouble mkLitChar mkLitString mkLitBigNat isLitRubbish isMinBound isMaxBound inCharRange isZeroLitisOneLitlitValueisLitValue_maybe mapLitValue narrowInt8LitnarrowInt16LitnarrowInt32LitnarrowInt64LitnarrowWord8LitnarrowWord16LitnarrowWord32LitnarrowWord64LitconvertToWordLitconvertToIntLit charToIntLit intToCharLit floatToIntLit intToFloatLitdoubleToIntLitintToDoubleLitfloatToDoubleLitdoubleToFloatLit nullAddrLit litIsTrivial litIsDupable litFitsInChar litIsLifted literalType pprLiteral$fBinaryLitNumType $fOrdLiteral $fEqLiteral$fOutputableLiteral$fBinaryLiteral $fDataLiteral$fDataLitNumType$fEnumLitNumType$fEqLitNumType$fOrdLitNumTypeGenMap LiteralMapListMapMaybeMapTrieMapKeyemptyTMlookupTMalterTMfilterTMfoldTMXTinsertTMdeleteTM foldMapTM isEmptyTM>.>|>|>> foldMaybe filterMaybelkListxtListlkGxtGmapGfdG$fTrieMapUniqDFM $fTrieMapMap$fTrieMapIntMap$fFoldableMaybeMap$fTrieMapMaybeMap$fFunctorMaybeMap$fOutputableListMap$fFoldableListMap$fTrieMapListMap$fFunctorListMap$fFoldableGenMap$fTrieMapGenMap$fFunctorGenMap$fOutputableGenMapFactBaseLabelMapLabelSetLabel mkHooplLabel lookupFact$fOutputablePenvLabel$fOutputableLabel$fUniquableLabel $fShowLabel$fOutputableLabelSet$fIsSetLabelSet$fTrieMapLabelMap$fOutputablePenvLabelMap$fOutputableLabelMap$fIsMapLabelMap $fEqLabelMap $fOrdLabelMap$fShowLabelMap$fFunctorLabelMap$fFoldableLabelMap$fTraversableLabelMap $fEqLabelSet $fOrdLabelSet$fShowLabelSet$fMonoidLabelSet$fSemigroupLabelSet $fEqLabel $fOrdLabelBlockId mkBlockId DTyConEnvTyConEnvnonDetTyConEnvElts emptyTyConEnvisEmptyTyConEnv unitTyConEnvextendTyConEnvextendTyConEnvListlookupTyConEnv alterTyConEnv mkTyConEnvmkTyConEnvWith elemTyConEnv plusTyConEnvplusTyConEnv_CplusTyConEnv_CDplusTyConEnv_CD2extendTyConEnv_C mapTyConEnvextendTyConEnv_AccextendTyConEnvList_CdelFromTyConEnvdelListFromTyConEnvfilterTyConEnv anyTyConEnvdisjointTyConEnvlookupTyConEnv_NFemptyDTyConEnvisEmptyDTyConEnvlookupDTyConEnvdelFromDTyConEnvfilterDTyConEnv mapDTyConEnvmapMaybeDTyConEnvadjustDTyConEnvalterDTyConEnvextendDTyConEnv foldDTyConEnv RecTcChecker initRecTcdefaultRecTcMaxBoundsetRecTcMaxBound checkRecTc$fOutputableRecTcCheckerRoughMapRoughMatchLookupTc RML_KnownTc RML_NoKnownTc RML_WildCard RoughMatchTc RM_KnownTc RM_WildCardinstanceCantMatchroughMatchTcToLookupisRoughWildcard roughMatchTcsroughMatchTcsLookuptypeToRoughMatchLookupTctypeToRoughMatchTcemptyRMlookupRM lookupRM'unionRMinsertRMfilterRMfilterMatchingRMelemsRMfoldRMsizeRM$fOutputableRoughMatchTc$fOutputableRoughMatchLookupTc$fOutputableRoughMap$fFunctorRoughMap$fDataRoughMatchLookupTc$fDataRoughMatchTc pprParendType pprTidiedType pprPrecType pprPrecTypeX pprParendKind pprParendCo pprClassPredpprThetapprParendThetapprThetaArrowTy pprSigmaType pprForAll pprUserForAll pprTCvBndrs pprTCvBndr pprTyVars pprDataCons pprTypeApppprWithExplicitKindsWhen pprWithTYPEpprSourceTyCon LiftCoEnvLiftingContextLCNormaliseStepResultNS_DoneNS_AbortNS_StepNormaliseStepper coVarNamesetCoVarUnique setCoVarNameetaExpandCoAxBranch pprCoAxiompprCoAxBranchUserpprCoAxBranchLHS pprCoAxBranchtidyCoAxBndrsForUsercoToMCocheckReflexiveMCo isGReflMCo mkTransMCo mkTransMCoL mkTransMCoRmkSymMCo mkCastTyMComkHomoForAllMComkPiMCos mkFunResMComkGReflLeftMComkGReflRightMComkCoherenceRightMCo isReflMCo decomposeCodecomposeFunCogetCoVar_maybemultToCosplitAppCo_maybesplitFunCo_maybesplitForAllCo_maybesplitForAllCo_ty_maybesplitForAllCo_co_maybe coVarLType coVarRType coVarTypes coVarKindmkRuntimeRepCoisReflCoVar_maybeisGReflCo_maybeisReflCo_maybeisReflexiveCo_maybe mkRepReflCo mkFunCoNoFTFmkAppCos mkForAllCosmkHomoForAllCos mkCoVarCos mkAxInstComkUnbranchedAxInstCo mkAxInstRHSmkUnbranchedAxInstRHS mkAxInstLHSmkUnbranchedAxInstLHSmkHoleCo getNthFunmkGReflRightCo mkGReflLeftComkCoherenceLeftComkCoherenceRightCo downgradeRolesetNominalRole_maybe tyConRolesXtyConRoleListXtyConRolesRepresentationaltyConRoleListRepresentational tyConRoleltRolepromoteCoercioncastCoercionKind2castCoercionKind1castCoercionKindmkPiCosmkPiCo mkFunResComkCoCastinstNewTyCon_maybecomposeSteppersunwrapNewTypeSteppertopNormaliseTypeX eqCoercion eqCoercionXliftCoSubstWithExliftCoSubstWith liftCoSubstemptyLiftingContextmkSubstLiftingContextextendLiftingContextextendLiftingContextAndInScopezapLiftingContextsubstForAllCoBndrUsingLCliftCoSubstTyVarliftCoSubstVarBndrUsing isMappedByLC substLeftCo substRightCo swapLiftCoEnv lcSubstLeft lcSubstRightliftEnvSubstLeftliftEnvSubstRightlcSubst lcInScopeSet coercionKindscoercionKindRolegetNthFromType coercionRole mkPrimEqPredmkReprPrimEqPredmkPrimEqPredRolemkNomPrimEqPred buildCoercionhasCoercionHoleTyhasCoercionHoleCohasThisCoercionHoleTy setCoHoleType$fOutputableNormaliseStepResult$fOutputableLiftingContext$fFunctorNormaliseStepResultVarMapBndrMapDeBruijnDCmEnv LooseTypeMapTypeMapTypeMapG CoercionMapGeqDeBruijnType eqDeBruijnVar foldTypeMap emptyTypeMap lookupTypeMap extendTypeMaplookupTypeMapWithScopeextendTypeMapWithScopemkDeBruijnContextemptyCME extendCME extendCMEs lookupCME deBruijnizelkBndrxtBndrlkVarxtVar lkDFreeVar xtDFreeVarlkDNamedxtDNamed$fTrieMapTyLitMap$fFunctorTyLitMap $fEqDeBruijn $fEqDeBruijn0 $fEqDeBruijn1 $fEqDeBruijn2 $fEqDeBruijn3$fTrieMapVarMap$fFunctorVarMap$fTrieMapBndrMap$fFunctorBndrMap$fTrieMapTypeMapX$fFunctorTypeMapX$fTrieMapLooseTypeMap$fFunctorLooseTypeMap$fTrieMapTypeMap$fFunctorTypeMap$fTrieMapCoercionMapX$fFunctorCoercionMapX$fTrieMapCoercionMap$fFunctorCoercionMapBindFlagBindMeApartMaybeApartReason MARTypeFamily MARInfiniteMARTypeVsConstraint UnifyResultM Unifiable MaybeApart SurelyApart UnifyResultBindFun tcMatchTy tcMatchTyX_BM tcMatchTyKi tcMatchTyX tcMatchTys tcMatchTyKis tcMatchTysX tcMatchTyKisXruleMatchTyKiX matchBindFun alwaysBindFuntypesCantMatch typesAreApart tcUnifyTy tcUnifyTyKitcUnifyTyWithTFs tcUnifyTys tcUnifyTyKis tcUnifyTysFG liftCoMatch flattenTys flattenTysX$fSemigroupMaybeApartReason$fOutputableMaybeApartReason$fOutputableUnifyResultM$fMonadUnifyResultM$fApplicativeUnifyResultM $fMonadFailUM $fMonadUM$fApplicativeUM $fFunctorUM $fEqBindFlag$fFunctorUnifyResultMEqRelNomEqReprEqPred ClassPredEqPred IrredPred ForAllPredclassifyPredType mkClassPredisDictTytypeDeterminesValuegetClassPredTysgetClassPredTys_maybe classMethodTyclassMethodInstTy eqRelRole getEqPredTysgetEqPredTys_maybe getEqPredRole predTypeEqRel isEvVarType isClassPredisEqPred isEqPrimPredisEqualityClass isCTupleClass isIPTyCon isIPClassisIPPred_maybeisCallStackPredTyisCallStackPred isCallStackTy isIPLikePred mentionsIPisEvVarisDictId$fOutputableEqRel $fEqEqRel $fOrdEqRelStrictnessMark MarkedStrictNotMarkedStrict HsImplBangHsLazyHsStrictHsUnpack HsSrcBang DataConEnv NoDataConRepDCR dcr_bangs dcr_stricts dcr_arg_tys dcr_boxer dcr_wrap_idmkEqSpec eqSpecTyVar eqSpecType eqSpecPair eqSpecPredseqHsBangisBanged isSrcStrict isSrcUnpackedisMarkedStrictcbvFromStrictMark mkDataCon dataConTag dataConTagZdataConOrigTyCondataConRepTypedataConIsInfixdataConUnivTyVarsdataConUnivAndExTyCoVars dataConThetadataConWrapId_maybedataConImplicitTyThingsdataConFieldTypedataConFieldType_maybedataConSrcBangsdataConRepArityisNullarySrcDataConisNullaryRepDataCondataConRepStrictnessdataConImplBangs dataConBoxerdataConInstSigdataConOrigResTydataConWrapperTypedataConNonlinearTypedataConDisplayTypedataConInstArgTysdataConInstUnivsdataConOrigArgTysdataConOtherThetadataConRepArgTysdataConIdentityisTupleDataConisBoxedTupleDataConisUnboxedTupleDataConisVanillaDataCon isNewDataConisCovertGadtDataConspecialPromotedDc classDataCondataConCannotMatchdataConResRepTyArgscheckDataConTyVarsdataConUserTyVarsNeedWrappersplitDataProductType_maybe$fBinarySrcUnpackedness$fBinarySrcStrictness$fOutputableSrcUnpackedness$fOutputableSrcStrictness$fOutputableHsSrcBang$fOutputableHsImplBang$fBinaryStrictnessMark$fOutputableStrictnessMark$fOutputableEqSpec $fDataDataCon$fOutputableBndrDataCon$fOutputableDataCon$fNamedThingDataCon$fUniquableDataCon $fEqDataCon$fEqStrictnessMark$fDataHsImplBang$fDataHsSrcBangAmbiguousFieldOcc Unambiguous AmbiguousXAmbiguousFieldOccLAmbiguousFieldOccFieldOcc XFieldOccfoLabelfoExt LFieldOcc LHsTypeArgHsArgHsValArg HsTypeArgHsArgPar HsConDetails PrefixConRecConInfixCon ConDeclField cd_fld_doc cd_fld_type cd_fld_names cd_fld_ext LConDeclField HsTupleSortHsUnboxedTupleHsBoxedOrConstraintTupleHsScaledHsLinearArrowTokensHsPct1HsLollyHsArrowHsUnrestrictedArrow HsLinearArrowHsExplicitMultHsTyLitHsNumTyHsStrTyHsCharTyHsType HsForAllTyHsQualTyHsTyVarHsAppTy HsAppKindTyHsFunTyHsListTy HsTupleTyHsSumTyHsOpTyHsParTy HsIParamTyHsStarTy HsKindSig HsSpliceTyHsDocTyHsBangTyHsRecTyHsExplicitListTyHsExplicitTupleTy HsWildCardTyXHsTypehst_bodyhst_tele hst_xforallhst_ctxt hst_xqual HsBndrVisHsBndrRequiredHsBndrInvisible HsTyVarBndr UserTyVar KindedTyVar XTyVarBndrHsIPName HsSigTypeHsSig XHsSigTypesig_body sig_bndrssig_ext LHsSigWcType LHsWcType LHsSigType HsPatSigTypeHsPS XHsPatSigType hsps_bodyhsps_extHsWildCardBndrsHsWCXHsWildCardBndrs hswc_bodyhswc_extHsOuterFamEqnTyVarBndrsHsOuterSigTyVarBndrsHsOuterTyVarBndrsHsOuterImplicitHsOuterExplicitXHsOuterTyVarBndrs hso_ximplicit hso_bndrs hso_xexplicit LHsQTyVarsHsQTvs XLHsQTyVars hsq_explicithsq_ext LHsTyVarBndrHsForAllTelescope HsForAllVis HsForAllInvisXHsForAllTelescope hsf_vis_bndrshsf_xvishsf_invis_bndrs hsf_xinvisLHsKindHsKindLHsType HsContext LHsContextBangType LBangType hsQTvExplicit hsPatSigTypemapHsOuterImplicit hsIPNameFSisHsBndrInvisibleisHsKindedTyVarhsMult hsScaledThing noTypeArgsconDetailsArity$fDataHsConDetails$fDataHsTupleSort $fEqHsIPName$fDataHsIPName$fEqPromotionFlag$fDataPromotionFlag $fEqFieldOcc HsFieldBindhfbPunhfbRHShfbLHShfbAnn HsRecUpdField HsRecFieldLHsRecUpdField LHsRecField LHsFieldBindRecFieldsDotDotunRecFieldsDotDot HsRecFields rec_dotdotrec_fldsHsConPatDetails HsConPatTyArgConLikePWildPatVarPatLazyPatAsPatParPatBangPatListPatTuplePatSumPatConPatViewPat SplicePatLitPatNPat NPlusKPatSigPatXPatpat_argspat_con pat_con_ext hsConPatArgs hsRecFieldshsRecFieldsArgs hsRecFieldSel$fFunctorHsFieldBind$fFoldableHsFieldBind$fTraversableHsFieldBind$fDataRecFieldsDotDot$fEqRecFieldsDotDot$fOrdRecFieldsDotDotpprLPat HsPatSynDirUnidirectionalImplicitBidirectionalExplicitBidirectionalRecordPatSynFieldrecordPatSynPatVarrecordPatSynFieldHsPatSynDetails FixitySig LFixitySigSigTypeSig PatSynSig ClassOpSigFixSig InlineSigSpecSig SpecInstSig MinimalSig SCCFunSigCompleteMatchSigXSigLSigIPBindXIPBindLIPBind HsIPBindsIPBinds PatSynBindPSBpsb_dirpsb_defpsb_argspsb_idpsb_extHsBindLRFunBindPatBindVarBind XHsBindsLR fun_matchesfun_idfun_extpat_rhspat_lhspat_extvar_rhsvar_idvar_ext LHsBindLR LHsBindsLRHsBindLHsBindsLHsBind HsValBindsLRValBinds XValBindsLR HsValBindsLHsLocalBindsLRHsLocalBindsLREmptyLocalBindsXHsLocalBindsLR LHsLocalBinds HsLocalBinds isFixityLSig isTypeLSig isSpecLSigisSpecInstLSig isPragLSig isInlineLSig isMinimalLSig isSCCFunSigisCompleteMatchSig RoleAnnotDeclXRoleAnnotDeclLRoleAnnotDecl AnnProvenanceValueAnnProvenanceTypeAnnProvenanceModuleAnnProvenance HsAnnotationXAnnDeclLAnnDeclWarnDeclWarning XWarnDecl LWarnDecl WarnDecls XWarnDecls wd_warningswd_ext LWarnDeclsDocDeclDocCommentNextDocCommentPrevDocCommentNamedDocGroupLDocDeclRuleBndr RuleBndrSig XRuleBndr LRuleBndrRuleDeclHsRule XRuleDeclrd_rhsrd_lhsrd_tmvsrd_tyvsrd_actrd_namerd_ext LRuleDecl RuleDeclsHsRules XRuleDecls rds_rulesrds_ext LRuleDecls ForeignExportCExport CImportSpec CFunctionCWrapper ForeignImportCImport ForeignDecl XForeignDeclfd_fi fd_sig_tyfd_namefd_i_extfd_fefd_e_ext LForeignDecl DefaultDecl XDefaultDecl LDefaultDecl DerivStrategy StockStrategyAnyclassStrategyNewtypeStrategy ViaStrategyLDerivStrategy DerivDecl XDerivDeclderiv_overlap_modederiv_strategy deriv_type deriv_ext LDerivDeclInstDeclClsInstD DataFamInstD TyFamInstD XInstDeclcid_inst cid_d_ext dfid_instdfid_ext tfid_insttfid_ext LInstDecl ClsInstDecl XClsInstDeclcid_overlap_modecid_datafam_instscid_tyfam_instscid_sigs cid_binds cid_poly_tycid_ext LClsInstDeclFamEqnXFamEqnfeqn_rhs feqn_fixity feqn_pats feqn_bndrs feqn_tyconfeqn_extDataFamInstDecldfid_eqnLDataFamInstDecl TyFamInstDeclXTyFamInstDecltfid_eqntfid_xtnLTyFamInstDeclLTyFamDefltDeclTyFamDefltDecl TyFamInstEqnHsTyPats LTyFamInstEqnHsConDeclGADTDetails PrefixConGADT RecConGADTHsConDeclH98DetailsConDecl ConDeclGADT ConDeclH98XConDeclcon_doc con_res_ty con_g_args con_mb_cxt con_bndrs con_dcolon con_names con_g_extcon_args con_ex_tvs con_forallcon_namecon_extLConDecl DataDefnCons NewTypeCon DataTypeCons NewOrDataNewTypeDataTypeStandaloneKindSigLStandaloneKindSigDerivClauseTys DctSingleDctMultiXDerivClauseTysLDerivClauseTysHsDerivingClauseXHsDerivingClausederiv_clause_tysderiv_clause_strategyderiv_clause_extLHsDerivingClause HsDeriving HsDataDefn XHsDataDefn dd_derivsdd_cons dd_kindSigdd_cTypedd_ctxtdd_ext FamilyInfo DataFamilyOpenTypeFamilyClosedTypeFamilyInjectivityAnnXInjectivityAnnLInjectivityAnn FamilyDecl XFamilyDeclfdInjectivityAnn fdResultSigfdFixityfdTyVarsfdLName fdTopLevelfdInfofdExt LFamilyDeclFamilyResultSigNoSigKindSigTyVarSigXFamilyResultSigLFamilyResultSig TyClGroup XTyClGroup group_instds group_kisigs group_roles group_tyclds group_ext LHsFunDepXFunDepTyClDeclFamDeclSynDeclDataDecl ClassDecl XTyClDecltcdFamtcdFExttcdRhs tcdFixity tcdTyVarstcdLNametcdSExt tcdDataDefntcdDExttcdDocs tcdATDefstcdATstcdMethstcdSigstcdFDstcdCtxt tcdLayouttcdCExt LTyClDeclSpliceDecoration DollarSplice BareSplice SpliceDecl LSpliceDeclHsGroupXHsGrouphs_docs hs_ruledshs_annds hs_warndshs_fordshs_defdshs_fixds hs_derivds hs_tyclds hs_splcdshs_valdshs_extHsDeclTyClDInstDDerivDValDSigDKindSigDDefDForDWarningDAnnDRuleDSpliceDDocD RoleAnnotDXHsDeclLHsDeclhsGroupInstDecls isDataDecl isSynDecl isClassDecl isFamilyDeclisTypeFamilyDeclisOpenTypeFamilyInfoisClosedTypeFamilyInfoisDataFamilyDecltyClDeclTyVarstyClGroupTyClDeclstyClGroupInstDeclstyClGroupRoleDeclstyClGroupKindSigsfamilyInfoTyConFlavourdataDefnConsNewOrDataisTypeDataDefnConsfirstDataDefnConcollectRuleBndrSigTys docDeclDocannProvenanceName_maybe$fDataCImportSpec$fEqDataDefnCons$fDataDataDefnCons$fFoldableDataDefnCons$fFunctorDataDefnCons$fTraversableDataDefnCons $fEqNewOrData$fDataNewOrData$fDataSpliceDecoration$fEqSpliceDecoration$fShowSpliceDecoration $fDataDocDecl HsDoFlavourDoExprMDoExpr GhciStmtCtxtListComp MonadCompHsArrowMatchContextProcExpr ArrowCaseAltArrowLamCaseAlt KappaExpr HsStmtContextHsDoStmtPatGuard ParStmtCtxt TransStmtCtxt ArrowExprHsMatchContextFunRhs LambdaExprCaseAlt LamCaseAltIfAltArrowMatchCtxt PatBindRhs PatBindGuardsRecUpdStmtCtxt ThPatSplice ThPatQuotePatSyn mc_strictness mc_fixitymc_fun ArithSeqInfoFromFromThenFromTo FromThenToHsQuoteExpBrPatBrDecBrLDecBrGTypBrVarBrXQuoteHsUntypedSpliceExpr HsQuasiQuoteApplicativeArgApplicativeArgOneApplicativeArgManyXApplicativeArg is_body_stmtarg_exprapp_arg_patternxarg_app_arg_one stmt_context bv_pattern final_expr app_stmtsxarg_app_arg_many FailOperator ParStmtBlock TransFormThenForm GroupFormStmtLRLastStmtBindStmtApplicativeStmtBodyStmtLetStmtParStmt TransStmtRecStmtXStmtLRtrS_fmaptrS_bindtrS_rettrS_by trS_using trS_bndrs trS_stmtstrS_formtrS_ext recS_mfix_fn recS_ret_fn recS_bind_fn recS_rec_idsrecS_later_ids recS_stmtsrecS_extGhciStmt GhciLStmt GuardStmt GuardLStmtExprStmt ExprLStmtCmdStmtCmdLStmtStmtLStmtLRLStmtGRHSXGRHSLGRHSXGRHSsgrhssLocalBinds grhssGRHSsgrhssExtMatchXMatchm_grhssm_patsm_ctxtm_extLMatchMG XMatchGroupmg_altsmg_ext HsRecordBindsHsCmdTop LHsCmdTop HsArrAppTypeHsHigherOrderAppHsFirstOrderAppHsCmd HsCmdArrApp HsCmdArrFormHsCmdAppHsCmdLamHsCmdPar HsCmdCase HsCmdLamCaseHsCmdIfHsCmdLetHsCmdDoXCmdLHsCmdLamCaseVariantLamCaseLamCasesHsTupArgPresentMissingXTupArg LHsTupArgHsPragE HsPragSCCXHsPragE DotFieldOcc XDotFieldOccdfoLabeldfoExtHsVar HsUnboundVarHsRecSel HsOverLabelHsIPVarHsLam HsLamCaseHsApp HsAppTypeOpAppNegAppHsParSectionLSectionR ExplicitTuple ExplicitSumHsCaseHsIf HsMultiIfHsLetHsDo ExplicitList RecordCon RecordUpd HsGetField HsProjection ExprWithTySigArithSeqHsTypedBracketHsUntypedBracket HsTypedSpliceHsProcHsStaticXExpr rcon_fldsrcon_conrcon_ext rupd_flds rupd_exprrupd_extgf_fieldgf_exprgf_ext proj_fldsproj_extLHsRecUpdFieldsRegularRecUpdFieldsOverloadedRecUpdFields recUpdFields xRecUpdFieldsolRecUpdFieldsxOLRecUpdFields LHsRecUpdProj RecUpdProj LHsRecProjRecProjFieldLabelStringsLFieldLabelStrings isInfixMatch isPatSynCtxtqualifiedDoModuleName_maybeisComprehensionContextisDoComprehensionContextisMonadStmtContextisMonadDoStmtContextisMonadCompContextisMonadDoCompContext$fDataTransForm$fDataHsArrAppType$fDataLamCaseVariant$fEqLamCaseVariantHsUntypedSpliceResultHsUntypedSpliceTopHsUntypedSpliceNestedutsplice_resultutsplice_result_finalizersThModFinalizersSplicePointName pprFunBind pprPatBindpprUntypedSplicepprTypedSplicepprExprpprLExprHsModuleXModule hsmodDecls hsmodImports hsmodExports hsmodNamehsmodExt TypeShapeTsFunTsProdTsUnkDmdTransformerDmdSigDmdTypedt_argsdt_envDmdEnvDEde_divde_fvs DivergenceDivergesExnOrDivDunno SubDemandPolyProdDemandBotDmdAbsDmd CardNonOnce CardNonAbsCard:*C_0NC_1NC_01C_11C_10C_00isStrictisAbs isUsedOnce oneifyCardlubCardplusCardmultCard topSubDmdmkProdviewProdtopDmdabsDmdbotDmdseqDmdunboxDeeplyDmdmultDmd multSubDmdlubDmd lubSubDmdplusDmd plusSubDmdisTopDmdisAbsDmd isStrictDmd isStrUsedDmd isUsedOnceDmd isWeakDmdevalDmdstrictOnceApply1DmdstrictManyApply1Dmd lazyApply1Dmd lazyApply2Dmd oneifyDmd strictifyDmdstrictifyDictDmd lazifyDmdmkCalledOnceDmdmkCalledOnceDmds peelCallDmd peelManyCallssubDemandIfEvaluatedmkWorkerDemand argsOneShots argOneShotssaturatedByOneShots lubDivergencetopDivexnDivbotDiv isDeadEndDiv mkTermDmdEnv nopDmdEnv addVarDmdEnv plusDmdEnv plusDmdEnvsreuseEnv lubDmdTypediscardArgDmds plusDmdType botDmdType nopDmdType dmdTypeDepth splitDmdTy multDmdTypepeelFV addDemand findIdDemanddeferAfterPreciseExceptionmkDmdSigForAritymkClosedDmdSigmkVanillaDmdSig splitDmdSig dmdSigDmdEnvhasDemandEnvSigbotSignopSigisNopSig isDeadEndSigisBottomingSigonlyBoxedArgumentsisDeadEndAppSigtrimBoxityDmdSigtransferArgBoxityDmdSigprependArgsDmdSigetaConvertDmdSigdmdTransformSigdmdTransformDataConSigdmdTransformDictSelSig zapDmdEnvSigzapUsageDemandzapUsedOnceDemandzapUsedOnceSig trimToType trimBoxity seqDemand seqDemandList seqDmdType seqDmdSig $fBinaryCard$fOutputableCard $fShowCard$fBinarySubDemand$fBinaryDemand$fOutputableSubDemand$fOutputableDemand $fEqSubDemand$fBinaryDivergence$fOutputableDivergence$fBinaryDmdEnv$fOutputableDmdEnv $fEqDmdEnv$fBinaryDmdType$fOutputableDmdType $fEqDmdType$fBinaryDmdSig$fOutputableDmdSig$fOutputableTypeShape $fEqDmdSig$fEqDivergence $fEqDemand$fEqCardSlotTy PtrLiftedSlotPtrUnliftedSlotWordSlot Word64Slot FloatSlot DoubleSlotVecSlot UnaryType NvUnaryType isNvUnaryTypetypePrimRepArgs unwrapTypecountFunRepArgscountConRepArgsdataConRuntimeRepStrictness isZeroBitTy ubxSumRepType layoutUbxSum typeSlotTy primRepSlot slotPrimReptypePrimRep_maybe typePrimRep1 tyConPrimRep tyConPrimRep1kindPrimRep_mayberuntimeRepPrimRepruntimeRepPrimRep_maybeprimRepToRuntimeRep primRepToType mightBeFunTy$fOutputableSlotTy $fEqSlotTy $fOrdSlotTyCprSig getCprSigUnpackConFieldsResult AllFieldsSame ForeachFieldCprTypect_cprct_artyCprConCprtopCprbotCpr flatConCprasConCpr topCprType botCprTypeflatConCprType lubCprType applyCprTy abstractCprTy trimCprTyunpackConFieldsCprmkCprSigForArity topCprSig isTopCprSigmkCprSig seqCprSigprependArgsCprSig $fBinaryCpr$fOutputableCpr$fBinaryCprType$fOutputableCprType $fEqCprType$fOutputableCprSig $fEqCprSig$fBinaryCprSig$fEqCprAnnBind AnnNonRecAnnAltAnnExpr'AnnVarAnnLitAnnAppAnnCastAnnTick AnnCoercionAnnExpr TaggedAlt TaggedArg TaggedExpr TaggedBind TaggedBndrTBCoreAltCoreBindCoreArg CoreProgramUnfoldingGuidanceUnfWhen UnfIfGoodArgsUnfNever ug_boring_ok ug_unsat_okug_arityug_resug_sizeug_argsUnfoldingCache uf_expandableuf_is_work_free uf_is_conlike uf_is_value Unfolding NoUnfolding BootUnfoldingOtherCon DFunUnfolding CoreUnfoldingdf_argsdf_condf_bndrs uf_guidanceuf_cache uf_is_topuf_srcuf_tmplIdUnfoldingFun InScopeEnvISERuleFunRule BuiltinRuleru_local ru_orphan ru_originru_autoru_rhsru_argsru_bndrsru_roughru_fnru_actru_nameru_tryru_nargsIsOrphan NotOrphan MOutCoercionOutArgOutAltOutExprOutBind OutCoercionOutKindOutTypeOutBndr InCoercionInArgInAltInExprInBindInKindInTypeInBndrBindNonRecRecDataAltLitAltDEFAULTAltArgLitAppLamLetCaseCastTickisOrphan notOrphanchooseOrphanAnchor isBuiltinRule isAutoRule ruleArityruleName ruleModuleruleActivation ruleIdName isLocalRule setRuleIdName needSaturated unSaturatedOk boringCxtOkboringCxtNotOk noUnfoldingevaldUnfolding bootUnfolding mkOtherConunfoldingTemplatemaybeUnfoldingTemplate otherConsisValueUnfoldingisEvaldUnfoldingisConLikeUnfoldingisCheapUnfoldingisExpandableUnfoldingexpandUnfolding_maybeisCompulsoryUnfoldingisStableUnfoldingisStableUserUnfoldingisStableSystemUnfoldingisInlineUnfoldinghasSomeUnfoldingisBootUnfoldingneverUnfoldGuidancehasCoreUnfolding canUnfoldcmpAltltAlt cmpAltCon deTagExprmkCoApps mkVarAppsmkConAppmkTyApps mkConApp2mkTyArgmkIntLit mkIntLitWrap mkWordLit mkWordLitWrap mkWord8LitmkWord64LitWord64mkInt64LitInt64 mkCharLit mkStringLit mkFloatLitmkFloatLitFloat mkDoubleLitmkDoubleLitDoublemkLamsmkLetsmkLet mkLetNonRecmkLetRecmkTyBindmkCoBind varToCoreExprvarsToCoreExprs exprToType bindersOfbindersOfBindsfoldBindersOfBindStrictfoldBindersOfBindsStrict rhssOfBind rhssOfAlts flattenBindscollectBinderscollectTyBinderscollectTyAndValBinderscollectNBinderscollectNValBinders_maybe collectArgscollectFunSimple wrapLamBody stripNArgscollectArgsTicks isRuntimeVar isRuntimeArgisValArg isTyCoArgisCoArg isTypeArg valBndrCount valArgCountcollectAnnArgscollectAnnArgsTicks deAnnotate deAnnotate'deAnnAlt deAnnBindcollectAnnBndrscollectNAnnBndrs$fOutputableAltCon $fOrdAltCon$fBinaryIsOrphan$fOutputableTaggedBndr$fEqUnfoldingGuidance$fEqUnfoldingCache$fDataIsOrphan $fDataBind $fDataExpr $fDataAlt $fEqAltCon $fDataAltCon SimpleOpts simpleOptExprArgsReductions Reductions ReductionR ReductionN HetReduction ReductionreductionReducedTypereductionCoercionmkHetReductionhomogeniseHetRedn mkReductionreductionOriginalType coercionRedn downgradeRedn mkSubRedn mkTransRedn mkReflRednmkGReflRightRednmkGReflRightMRednmkGReflLeftRednmkGReflLeftMRednmkCoherenceRightRednmkCoherenceRightMRedn mkCastRedn1 mkCastRedn2 mkAppRedn mkFunRedn mkForAllRednmkHomoForAllRednmkProofIrrelRedn mkReflCoRedn mkReductions mkAppRednsmkTyConAppRednmkClassPredRedn unzipRednssimplifyArgsWorker$fOutputableReductionArgDescrArgSpecArgGen ArgUnknownLivenessConstrDescriptionClosureTypeInfoConstrFunThunk ThunkSelector BlackHole IndStaticIsStaticSMRepHeapRep ArrayPtrsRepSmallArrayPtrsRep ArrayWordsRepStackRepRTSRep StgHalfWordStgWordWordOffByteOffroundUpToWords roundUpTo wordsToBytesbytesToWordsRoundUp fromStgWord toStgWordfromStgHalfWord toStgHalfWord halfWordSizehalfWordSizeInBits mkHeapRepmkRTSRep mkStackRep blackHoleRep indStaticRep arrPtrsRepsmallArrPtrsRep arrWordsRep isStaticRep isStackRepisConRep isThunkRepisFunRepisStaticNoCafCon fixedHdrSize fixedHdrSizeW profHdrSizearrWordsHdrSizearrWordsHdrSizeWarrPtrsHdrSizearrPtrsHdrSizeWsmallArrPtrsHdrSizesmallArrPtrsHdrSizeW thunkHdrSizehdrSizehdrSizeW nonHdrSize nonHdrSizeWheapClosureSizeWcard cardRoundUpcardTableSizeBcardTableSizeWrtsClosureType rET_SMALLrET_BIGaRG_GEN aRG_GEN_BIG$fOutputableStgWord$fOutputableStgHalfWord$fOutputableArgDescr$fOutputableClosureTypeInfo$fOutputableSMRep $fEqSMRep $fOrdSMRep$fEqClosureTypeInfo$fOrdClosureTypeInfo $fEqArgDescr $fOrdArgDescr$fEqStgHalfWord $fEqStgWord $fBitsStgWord DoExtDynRefsDoSCCProfilingStandardFormInfoNonStandardThunk SelectorThunkApThunkLambdaFormInfo LFReEntrantLFThunkLFCon LFUnknown LFUnlifted LFLetNoEscape ModuleLFInfos CmmCgInfos cgIPEStub cgLFInfos cgNonCafs$fOutputableStandardFormInfo$fOutputableLambdaFormInfo$fEqStandardFormInfo PatSynBuilder PatSynMatchermkPatSyn patSynName patSynIsInfix patSynArityisVanillaPatSyn patSynArgspatSynFieldLabelspatSynFieldTypepatSynUnivTyVarBinderspatSynExTyVarspatSynExTyVarBinders patSynSigBndr patSynSig patSynMatcher patSynBuilderpatSynResultTypepatSynInstArgTyspatSynInstResTy pprPatSynType $fDataPatSyn$fOutputableBndrPatSyn$fOutputablePatSyn$fNamedThingPatSyn$fUniquablePatSyn $fEqPatSyn TickBoxOpTickBox TickBoxIdCafInfoMayHaveCafRefs NoCafRefsRuleInfoInlinePragInfo ArityInfotagSiglfInfo demandInfo cprSigInfo dmdSigInfooccInfoinlinePragInforealUnfoldingInforuleInfo RecSelParent RecSelData RecSelPatSyn VanillaIdRecSelId DataConWorkId DataConWrapId ClassOpIdPrimOpIdFCallId TickBoxOpIdCoVarId WorkerLikeId sel_naughtysel_fieldLabel sel_tyconrecSelParentNamerecSelFirstConNameisJoinIdDetails_maybe oneShotInfo arityInfocafInfo callArityInfo tagSigInfo setRuleInfosetInlinePragInfo setOccInfo unfoldingInfosetUnfoldingInfohasInlineUnfolding setArityInfosetCallArityInfo setCafInfo setLFInfo setTagSigsetOneShotInfo setDemandInfo setDmdSigInfo setCprSigInfo noCafIdInfo unknownArity ppArityInfo pprStrictness emptyRuleInfoisEmptyRuleInforuleInfoFreeVars ruleInfoRulessetRuleInfoHeadmayHaveCafRefs ppCafInfo zapLamInfo zapDemandInfo zapUsageInfozapUsageEnvInfozapUsedOnceInfozapFragileInfo trimUnfoldingzapTailCallInfozapCallArityInfo$fOutputableRecSelParent$fOutputableCafInfo$fOutputableTickBoxOp$fOutputableIdDetails $fEqCafInfo $fOrdCafInfo$fEqRecSelParent$fDataRecSelParentidUniqueidTypeidMult idScaledType scaleIdBy scaleVarBy setIdName setIdUnique setIdType localiseId setIdInfo modifyIdInfomaybeModifyIdInfo mkGlobalIdmkVanillaGlobalmkVanillaGlobalWithInfo mkLocalId mkLocalCoVarmkLocalIdOrCoVarmkLocalIdWithInfomkExportedLocalIdmkExportedVanillaId mkSysLocalmkSysLocalOrCoVar mkSysLocalMmkSysLocalOrCoVarM mkUserLocalmkUserLocalOrCoVar mkWorkerIdmkTemplateLocalmkScaledTemplateLocalmkTemplateLocalsmkTemplateLocalsNumrecordSelectorTyConrecordSelectorTyCon_maybeisRecordSelectorisDataConRecordSelectorisPatSynRecordSelectorisNaughtyRecordSelector isClassOpIdisClassOpId_maybe isPrimOpIdisDFunIdisPrimOpId_maybe isFCallIdisFCallId_maybeisDataConWorkIdisDataConWorkId_maybeisDataConWrapIdisDataConWrapId_maybeisDataConId_maybeisWorkerLikeIdisJoinIdisJoinId_maybe idDataCon hasNoBinding isImplicitIdidIsFrom isDeadBinder idJoinArityasJoinId zapJoinIdasJoinId_maybeidArity setIdArity idCallAritysetIdCallArity idFunRepArity isDeadEndIdidDmdSig setIdDmdSigidCprSig setIdCprSig zapIdDmdSig isStrictIdidTagSig_maybe idUnfoldingnoUnfoldingFunalwaysActiveUnfoldingFunwhenActiveUnfoldingFunrealIdUnfoldingsetIdUnfolding idDemandInfosetIdDemandInfo setIdTagSig setIdCbvMarksidCbvMarks_maybeidCbvMarkArityasNonWorkerLikeIdasWorkerLikeIdsetCaseBndrEvaldzapIdUnfoldingidSpecialisation idCoreRules idHasRulessetIdSpecialisation idCafInfo setIdCafInfoidLFInfo_maybe setIdLFInfo idOccInfo setIdOccInfo zapIdOccInfoidInlinePragmasetInlinePragmamodifyInlinePragmaidInlineActivationsetInlineActivationidRuleMatchInfo isConLikeId idOneShotInfosetOneShotLambdaclearOneShotLambdasetIdOneShotInfoupdOneShotInfo zapLamIdInfozapFragileIdInfozapIdDemandInfozapIdUsageInfozapIdUsageEnvInfozapIdUsedOnceInfozapIdTailCallInfozapStableUnfoldingtransferPolyIdInfo CoreStatsCScs_jbcs_vbcs_cocs_tycs_tmcoreBindsStats exprStats coreBindsSizeexprSize$fOutputableCoreStatspprCoreBindingspprCoreBindingpprCoreBindingsWithSizepprCoreBindingWithSize pprParendExpr pprCoreExprpprOptCo pprCoreAltpprOccpprOccWithTick pprCoreBinderpprCoreBinderspprIdpprIdspprRulespprRule$fOutputableGenTickish$fOutputableCoreRule$fOutputableUnfoldingCache$fOutputableUnfolding$fOutputableUnfoldingGuidance$fOutputableIdInfo$fOutputableBndrTaggedBndr$fOutputableBndrVar$fOutputableAlt$fOutputableExpr$fOutputableBind megaSeqIdInfo seqRuleInfoseqRulesseqExprseqExprsseqBinds seqUnfolding RealDataCon PatSynConisVanillaConLikeconLikeConLikeName conLikeArityconLikeFieldLabelsconLikeConInfoconLikeInstOrigArgTysconLikeUserTyVarBindersconLikeExTyCoVars conLikeNameconLikeStupidThetaconLikeHasBuilderconLikeImplBangs conLikeResTyconLikeFullSigconLikeFieldTypeconLikesWithFieldsconLikeIsInfix $fDataConLike$fOutputableBndrConLike$fOutputableConLike$fNamedThingConLike$fUniquableConLike $fEqConLike MonadThings lookupThinglookupId lookupDataCon lookupTyConAnIdAConLikeATyConACoAxiompprShortTyThingpprTyThingCategorytyThingCategoryimplicitTyThingsimplicitConLikeThingsimplicitClassThingsimplicitTyConThingsimplicitCoTyConisImplicitTyThingtyThingParent_maybetyThingsTyCoVarstyThingLocalGREstyThingGREInfo tyThingTyContyThingCoAxiomtyThingDataContyThingConLike tyThingId$fNamedThingTyThing$fOutputableTyThing$fMonadThingsReaderT BoxingInfoBI_NoBoxNeededBI_NoBoxAvailableBI_Box bi_boxed_type bi_inst_con bi_data_con wiredInTyConsmkWiredInTyConNamemkWiredInIdName eqTyConName eqTyCon_RDR heqTyConNamecoercibleTyConName charTyConName intTyConName boolTyConName listTyConNamenilDataConNameconsDataConNamemaybeTyConNamenothingDataConNamejustDataConName wordTyConNamefloatTyConNamedoubleTyConNameanyTyConanyTymakeRecoveryTyCon boolTyCon_RDR false_RDRtrue_RDR intTyCon_RDR charTyCon_RDRstringTyCon_RDRintDataCon_RDR listTyCon_RDRconsDataCon_RDRtypeSymbolKindConisBuiltInOcc_maybeisTupleTyOcc_maybeisPunOcc_maybe mkTupleStr cTupleTyConcTupleTyConNamesisCTupleTyConNamecTupleTyConNameArity_maybecTupleDataConNames cTupleSelIdmkPromotedPairTyisPromotedPairType unitTyCon unitTyConKey unitDataCon unitDataConId soloTyCon pairTyCon unboxedUnitTyunboxedUnitTyConunboxedUnitDataConunboxedSumKindeqTyConeqClass eqDataConheqClass heqDataConcoercibleClasscoercibleDataConmultiplicityTyConNameoneDataConNamemanyDataConName oneDataCon manyDataConunrestrictedFunTyConNameconstraintKindTyContypeToTypeKindunliftedTypeKindTyConNameunliftedDataConTyConsumRepDataConTyConliftedRepTyConNameunliftedRepTyConName charTyCon charDataConstringTyintTyintTyCon intDataConwordTy wordTyCon wordDataConword8Ty word8TyCon word8DataConfloatTy floatTyCon floatDataCondoubleTy doubleTyCon doubleDataCon boxingDataConboolTy boolTyCon falseDataCon trueDataConfalseDataConId trueDataConId orderingTyCon ordLTDataCon ordEQDataCon ordGTDataConordLTDataConIdordEQDataConIdordGTDataConIdmkListTy nilDataCon consDataCon maybeTyConnothingDataCon justDataConmkPromotedMaybeTy mkMaybeTyisPromotedMaybeTy mkTupleTy mkTupleTy1mkConstraintTupleTymkSumTypromotedTrueDataConpromotedFalseDataConpromotedNothingDataConpromotedJustDataConpromotedLTDataConpromotedEQDataConpromotedGTDataConpromotedConsDataConpromotedNilDataConmkPromotedListTyintegerTyConNameintegerISDataConNameintegerIPDataConNameintegerINDataConName integerTyConintegerISDataConintegerIPDataConintegerINDataConnaturalTyConNamenaturalNSDataConNamenaturalNBDataConName naturalTyConnaturalNSDataConnaturalNBDataCon filterCTupleTypeSize PatersonSizePS_TyFam PS_Vanillaps_sizeps_tvsPatersonCondFailureContextInInstanceDeclInTyFamEquationPatersonCondFailure PCF_TyVarPCF_Size PCF_TyFamTcLevelConcreteTvOrigin ConcreteFRRMetaInfoTauTvTyVarTv RuntimeUnkTvCycleBreakerTv ConcreteTvFlexiIndirectSkolemTv RuntimeUnkMetaTv mtv_tclvlmtv_refmtv_info SyntaxOpTypeSynAnySynRhoSynListSynFunSynType ExpRhoTypeExpSigmaTypeFRR ExpTypeFRR ExpSigmaType InferResultIRir_refir_frrir_lvlir_uniqExpTypeCheckInfer TcDTyCoVarSet TcDTyVarSet TcTyCoVarSet TcTyVarSetTcKind TcTauType TcRhoTypeTcSigmaTypeFRR TcSigmaType TcThetaType TcPredType TcTyConBinder PolyTcTyCon MonoTcTyConTcTyCon TcReqTVBinderTcInvisTVBinder TcTyVarBinder TcTypeFRR TcTyCoVarTcTypeTcCoVarmkCheckExpTypecheckingExpType_maybecheckingExpType synKnownType mkSynFunTys maxTcLevel minTcLevel topTcLevel isTopTcLevel pushTcLevelstrictlyDeeperThandeeperThanOrSame sameDepthAs tcTyVarLevel tcTypeLevel tcTyFamInststcTyFamInstsAndVistcTyConAppTyFamInstsAndVis isTyFamFreeanyRewritableTyVaranyRewritableTyFamAppexactTyCoVarsOfTypeexactTyCoVarsOfTypes tcIsTcTyVarisPromotableMetaTyVarisTouchableMetaTyVarisImmutableTyVar isSkolemTyVarskolemSkolInfoisOverlappableTyVarisAmbiguousTyVarisCycleBreakerTyVarisConcreteTyVar_maybeisConcreteInfoisConcreteTyVarTyisConcreteTyVarTy_maybe isMetaTyVarTy metaTyVarInfometaTyVarTcLevelmetaTyVarTcLevel_maybe metaTyVarRefsetMetaTyVarTcLevel isTyVarTyVarisFlexi isIndirectisRuntimeUnkSkolmkTyVarNamePairsfindDupTyVarTvs ambigTkvsOfTy mkInfSigmaTy mkSpecSigmaTy mkSigmaTytcMkDFunSigmaTymkPhiTy tcMkPhiTy tcMkDFunPhiTy getDFunTyKey tcSplitPiTystcSplitPiTy_maybetcSplitForAllTyVarBinder_maybetcSplitForAllTyVarstcSplitForAllInvisTyVarstcSplitSomeForAllTyVarstcSplitForAllReqTVBinderstcSplitForAllInvisTVBinderstcSplitForAllTyVarBinderstcSplitPredFunTy_maybe tcSplitPhiTytcSplitSigmaTytcSplitNestedSigmaTystcTyConAppTyContcTyConAppTyCon_maybetcTyConAppArgs tcSplitFunTystcSplitFunTy_maybetcSplitFunTysN tcFunArgTy tcFunResultTytcFunResultTyNtcSplitAppTy_maybe tcSplitAppTy tcSplitAppTys tcIsTyVarTytcSplitQuantPredTy tcSplitDFunTytcSplitDFunHeadtcSplitMethodTyisTyVarClassPredcheckValidClsArgs hasTyVarHead evVarPred boxEqPredpickCapturedPredsmkMinimalBySCstransSuperClassesimmSuperClassesisImprovementPred isSigmaTyisRhoTy isRhoExpTyisOverloadedTy isFloatTy isDoubleTy isIntegerTy isNaturalTyisIntTyisWordTyisBoolTyisUnitTyisCharTy anyTy_maybeisFloatingPrimTy isStringTy isRigidTy deNoteTypetcSplitIOType_maybetyConVisibilitiesisNextTyConArgVisibleisNextArgVisible pSizeZeropSizeOneltPatersonSize noMoreTyVars pSizeType pSizeTypes pSizeTypeX pSizeTyConApppSizeClassPredpSizeClassPredXisStuckTypeFamilyisTerminatingClassallDistinctTyVarssizeType sizeTypes$fOutputableMetaDetails$fOutputableMetaInfo$fOutputableTcLevel$fOutputableTcTyVarDetails$fOutputableInferResult$fOutputableExpType$fOutputablePatersonSize $fEqTcLevel $fOrdTcLevelOptCoercionOptsoptCoercionEnabled optCoercionPrimCallPrimOpResultInfo ReturnsPrim ReturnsAlg PrimOpVecCatIntVecWordVecFloatVecCharGtOpCharGeOpCharEqOpCharNeOpCharLtOpCharLeOpOrdOp Int8ToIntOp IntToInt8Op Int8NegOp Int8AddOp Int8SubOp Int8MulOp Int8QuotOp Int8RemOp Int8QuotRemOp Int8SllOp Int8SraOp Int8SrlOp Int8ToWord8OpInt8EqOpInt8GeOpInt8GtOpInt8LeOpInt8LtOpInt8NeOp Word8ToWordOp WordToWord8Op Word8AddOp Word8SubOp Word8MulOp Word8QuotOp Word8RemOpWord8QuotRemOp Word8AndOp Word8OrOp Word8XorOp Word8NotOp Word8SllOp Word8SrlOp Word8ToInt8Op Word8EqOp Word8GeOp Word8GtOp Word8LeOp Word8LtOp Word8NeOp Int16ToIntOp IntToInt16Op Int16NegOp Int16AddOp Int16SubOp Int16MulOp Int16QuotOp Int16RemOpInt16QuotRemOp Int16SllOp Int16SraOp Int16SrlOpInt16ToWord16Op Int16EqOp Int16GeOp Int16GtOp Int16LeOp Int16LtOp Int16NeOpWord16ToWordOpWordToWord16Op Word16AddOp Word16SubOp Word16MulOp Word16QuotOp Word16RemOpWord16QuotRemOp Word16AndOp Word16OrOp Word16XorOp Word16NotOp Word16SllOp Word16SrlOpWord16ToInt16Op Word16EqOp Word16GeOp Word16GtOp Word16LeOp Word16LtOp Word16NeOp Int32ToIntOp IntToInt32Op Int32NegOp Int32AddOp Int32SubOp Int32MulOp Int32QuotOp Int32RemOpInt32QuotRemOp Int32SllOp Int32SraOp Int32SrlOpInt32ToWord32Op Int32EqOp Int32GeOp Int32GtOp Int32LeOp Int32LtOp Int32NeOpWord32ToWordOpWordToWord32Op Word32AddOp Word32SubOp Word32MulOp Word32QuotOp Word32RemOpWord32QuotRemOp Word32AndOp Word32OrOp Word32XorOp Word32NotOp Word32SllOp Word32SrlOpWord32ToInt32Op Word32EqOp Word32GeOp Word32GtOp Word32LeOp Word32LtOp Word32NeOp Int64ToIntOp IntToInt64Op Int64NegOp Int64AddOp Int64SubOp Int64MulOp Int64QuotOp Int64RemOp Int64SllOp Int64SraOp Int64SrlOpInt64ToWord64Op Int64EqOp Int64GeOp Int64GtOp Int64LeOp Int64LtOp Int64NeOpWord64ToWordOpWordToWord64Op Word64AddOp Word64SubOp Word64MulOp Word64QuotOp Word64RemOp Word64AndOp Word64OrOp Word64XorOp Word64NotOp Word64SllOp Word64SrlOpWord64ToInt64Op Word64EqOp Word64GeOp Word64GtOp Word64LeOp Word64LtOp Word64NeOpIntAddOpIntSubOpIntMulOp IntMul2OpIntMulMayOfloOp IntQuotOpIntRemOp IntQuotRemOpIntAndOpIntOrOpIntXorOpIntNotOpIntNegOp IntAddCOp IntSubCOpIntGtOpIntGeOpIntEqOpIntNeOpIntLtOpIntLeOpChrOp IntToWordOp IntToFloatOp IntToDoubleOp WordToFloatOpWordToDoubleOpIntSllOpIntSraOpIntSrlOp WordAddOp WordAddCOp WordSubCOp WordAdd2Op WordSubOp WordMulOp WordMul2Op WordQuotOp WordRemOp WordQuotRemOpWordQuotRem2Op WordAndOpWordOrOp WordXorOp WordNotOp WordSllOp WordSrlOp WordToIntOpWordGtOpWordGeOpWordEqOpWordNeOpWordLtOpWordLeOp PopCnt8Op PopCnt16Op PopCnt32Op PopCnt64OpPopCntOpPdep8OpPdep16OpPdep32OpPdep64OpPdepOpPext8OpPext16OpPext32OpPext64OpPextOpClz8OpClz16OpClz32OpClz64OpClzOpCtz8OpCtz16OpCtz32OpCtz64OpCtzOp BSwap16Op BSwap32Op BSwap64OpBSwapOpBRev8OpBRev16OpBRev32OpBRev64OpBRevOp Narrow8IntOp Narrow16IntOp Narrow32IntOp Narrow8WordOpNarrow16WordOpNarrow32WordOp DoubleGtOp DoubleGeOp DoubleEqOp DoubleNeOp DoubleLtOp DoubleLeOp DoubleAddOp DoubleSubOp DoubleMulOp DoubleDivOp DoubleNegOp DoubleFabsOp DoubleToIntOpDoubleToFloatOp DoubleExpOp DoubleExpM1Op DoubleLogOp DoubleLog1POp DoubleSqrtOp DoubleSinOp DoubleCosOp DoubleTanOp DoubleAsinOp DoubleAcosOp DoubleAtanOp DoubleSinhOp DoubleCoshOp DoubleTanhOp DoubleAsinhOp DoubleAcoshOp DoubleAtanhOp DoublePowerOpDoubleDecode_2IntOpDoubleDecode_Int64Op FloatGtOp FloatGeOp FloatEqOp FloatNeOp FloatLtOp FloatLeOp FloatAddOp FloatSubOp FloatMulOp FloatDivOp FloatNegOp FloatFabsOp FloatToIntOp FloatExpOp FloatExpM1Op FloatLogOp FloatLog1POp FloatSqrtOp FloatSinOp FloatCosOp FloatTanOp FloatAsinOp FloatAcosOp FloatAtanOp FloatSinhOp FloatCoshOp FloatTanhOp FloatAsinhOp FloatAcoshOp FloatAtanhOp FloatPowerOpFloatToDoubleOpFloatDecode_IntOp FloatFMAdd FloatFMSub FloatFNMAdd FloatFNMSub DoubleFMAdd DoubleFMSub DoubleFNMAdd DoubleFNMSub NewArrayOp ReadArrayOp WriteArrayOp SizeofArrayOpSizeofMutableArrayOp IndexArrayOpUnsafeFreezeArrayOpUnsafeThawArrayOp CopyArrayOpCopyMutableArrayOp CloneArrayOpCloneMutableArrayOp FreezeArrayOp ThawArrayOp CasArrayOpNewSmallArrayOpShrinkSmallMutableArrayOp_CharReadSmallArrayOpWriteSmallArrayOpSizeofSmallArrayOpSizeofSmallMutableArrayOpGetSizeofSmallMutableArrayOpIndexSmallArrayOpUnsafeFreezeSmallArrayOpUnsafeThawSmallArrayOpCopySmallArrayOpCopySmallMutableArrayOpCloneSmallArrayOpCloneSmallMutableArrayOpFreezeSmallArrayOpThawSmallArrayOpCasSmallArrayOpNewByteArrayOp_CharNewPinnedByteArrayOp_Char NewAlignedPinnedByteArrayOp_CharMutableByteArrayIsPinnedOpByteArrayIsPinnedOpByteArrayContents_CharMutableByteArrayContents_CharShrinkMutableByteArrayOp_CharResizeMutableByteArrayOp_CharUnsafeFreezeByteArrayOpSizeofByteArrayOpSizeofMutableByteArrayOpGetSizeofMutableByteArrayOpIndexByteArrayOp_CharIndexByteArrayOp_WideCharIndexByteArrayOp_IntIndexByteArrayOp_WordIndexByteArrayOp_AddrIndexByteArrayOp_FloatIndexByteArrayOp_DoubleIndexByteArrayOp_StablePtrIndexByteArrayOp_Int8IndexByteArrayOp_Word8IndexByteArrayOp_Int16IndexByteArrayOp_Word16IndexByteArrayOp_Int32IndexByteArrayOp_Word32IndexByteArrayOp_Int64IndexByteArrayOp_Word64IndexByteArrayOp_Word8AsChar IndexByteArrayOp_Word8AsWideCharIndexByteArrayOp_Word8AsIntIndexByteArrayOp_Word8AsWordIndexByteArrayOp_Word8AsAddrIndexByteArrayOp_Word8AsFloatIndexByteArrayOp_Word8AsDouble!IndexByteArrayOp_Word8AsStablePtrIndexByteArrayOp_Word8AsInt16IndexByteArrayOp_Word8AsWord16IndexByteArrayOp_Word8AsInt32IndexByteArrayOp_Word8AsWord32IndexByteArrayOp_Word8AsInt64IndexByteArrayOp_Word8AsWord64ReadByteArrayOp_CharReadByteArrayOp_WideCharReadByteArrayOp_IntReadByteArrayOp_WordReadByteArrayOp_AddrReadByteArrayOp_FloatReadByteArrayOp_DoubleReadByteArrayOp_StablePtrReadByteArrayOp_Int8ReadByteArrayOp_Word8ReadByteArrayOp_Int16ReadByteArrayOp_Word16ReadByteArrayOp_Int32ReadByteArrayOp_Word32ReadByteArrayOp_Int64ReadByteArrayOp_Word64ReadByteArrayOp_Word8AsCharReadByteArrayOp_Word8AsWideCharReadByteArrayOp_Word8AsIntReadByteArrayOp_Word8AsWordReadByteArrayOp_Word8AsAddrReadByteArrayOp_Word8AsFloatReadByteArrayOp_Word8AsDouble ReadByteArrayOp_Word8AsStablePtrReadByteArrayOp_Word8AsInt16ReadByteArrayOp_Word8AsWord16ReadByteArrayOp_Word8AsInt32ReadByteArrayOp_Word8AsWord32ReadByteArrayOp_Word8AsInt64ReadByteArrayOp_Word8AsWord64WriteByteArrayOp_CharWriteByteArrayOp_WideCharWriteByteArrayOp_IntWriteByteArrayOp_WordWriteByteArrayOp_AddrWriteByteArrayOp_FloatWriteByteArrayOp_DoubleWriteByteArrayOp_StablePtrWriteByteArrayOp_Int8WriteByteArrayOp_Word8WriteByteArrayOp_Int16WriteByteArrayOp_Word16WriteByteArrayOp_Int32WriteByteArrayOp_Word32WriteByteArrayOp_Int64WriteByteArrayOp_Word64WriteByteArrayOp_Word8AsChar WriteByteArrayOp_Word8AsWideCharWriteByteArrayOp_Word8AsIntWriteByteArrayOp_Word8AsWordWriteByteArrayOp_Word8AsAddrWriteByteArrayOp_Word8AsFloatWriteByteArrayOp_Word8AsDouble!WriteByteArrayOp_Word8AsStablePtrWriteByteArrayOp_Word8AsInt16WriteByteArrayOp_Word8AsWord16WriteByteArrayOp_Word8AsInt32WriteByteArrayOp_Word8AsWord32WriteByteArrayOp_Word8AsInt64WriteByteArrayOp_Word8AsWord64CompareByteArraysOpCopyByteArrayOpCopyMutableByteArrayOp$CopyMutableByteArrayNonOverlappingOpCopyByteArrayToAddrOpCopyMutableByteArrayToAddrOpCopyAddrToByteArrayOpCopyAddrToAddrOpCopyAddrToAddrNonOverlappingOpSetByteArrayOpSetAddrRangeOpAtomicReadByteArrayOp_IntAtomicWriteByteArrayOp_IntCasByteArrayOp_IntCasByteArrayOp_Int8CasByteArrayOp_Int16CasByteArrayOp_Int32CasByteArrayOp_Int64FetchAddByteArrayOp_IntFetchSubByteArrayOp_IntFetchAndByteArrayOp_IntFetchNandByteArrayOp_IntFetchOrByteArrayOp_IntFetchXorByteArrayOp_Int AddrAddOp AddrSubOp AddrRemOp AddrToIntOp IntToAddrOpAddrGtOpAddrGeOpAddrEqOpAddrNeOpAddrLtOpAddrLeOpIndexOffAddrOp_CharIndexOffAddrOp_WideCharIndexOffAddrOp_IntIndexOffAddrOp_WordIndexOffAddrOp_AddrIndexOffAddrOp_FloatIndexOffAddrOp_DoubleIndexOffAddrOp_StablePtrIndexOffAddrOp_Int8IndexOffAddrOp_Word8IndexOffAddrOp_Int16IndexOffAddrOp_Word16IndexOffAddrOp_Int32IndexOffAddrOp_Word32IndexOffAddrOp_Int64IndexOffAddrOp_Word64ReadOffAddrOp_CharReadOffAddrOp_WideCharReadOffAddrOp_IntReadOffAddrOp_WordReadOffAddrOp_AddrReadOffAddrOp_FloatReadOffAddrOp_DoubleReadOffAddrOp_StablePtrReadOffAddrOp_Int8ReadOffAddrOp_Word8ReadOffAddrOp_Int16ReadOffAddrOp_Word16ReadOffAddrOp_Int32ReadOffAddrOp_Word32ReadOffAddrOp_Int64ReadOffAddrOp_Word64WriteOffAddrOp_CharWriteOffAddrOp_WideCharWriteOffAddrOp_IntWriteOffAddrOp_WordWriteOffAddrOp_AddrWriteOffAddrOp_FloatWriteOffAddrOp_DoubleWriteOffAddrOp_StablePtrWriteOffAddrOp_Int8WriteOffAddrOp_Word8WriteOffAddrOp_Int16WriteOffAddrOp_Word16WriteOffAddrOp_Int32WriteOffAddrOp_Word32WriteOffAddrOp_Int64WriteOffAddrOp_Word64InterlockedExchange_AddrInterlockedExchange_WordCasAddrOp_AddrCasAddrOp_WordCasAddrOp_Word8CasAddrOp_Word16CasAddrOp_Word32CasAddrOp_Word64FetchAddAddrOp_WordFetchSubAddrOp_WordFetchAndAddrOp_WordFetchNandAddrOp_WordFetchOrAddrOp_WordFetchXorAddrOp_WordAtomicReadAddrOp_WordAtomicWriteAddrOp_Word NewMutVarOp ReadMutVarOp WriteMutVarOpAtomicSwapMutVarOpAtomicModifyMutVar2OpAtomicModifyMutVar_Op CasMutVarOpCatchOpRaiseOpRaiseUnderflowOpRaiseOverflowOpRaiseDivZeroOp RaiseIOOpMaskAsyncExceptionsOpMaskUninterruptibleOpUnmaskAsyncExceptionsOp MaskStatusNewPromptTagOpPromptOp Control0Op AtomicallyOpRetryOp CatchRetryOp CatchSTMOp NewTVarOp ReadTVarOp ReadTVarIOOp WriteTVarOp NewMVarOp TakeMVarOp TryTakeMVarOp PutMVarOp TryPutMVarOp ReadMVarOp TryReadMVarOp IsEmptyMVarOp NewIOPortOp ReadIOPortOp WriteIOPortOpDelayOp WaitReadOp WaitWriteOpForkOpForkOnOp KillThreadOpYieldOp MyThreadIdOp LabelThreadOpIsCurrentThreadBoundOp NoDuplicateOpGetThreadLabelOpThreadStatusOp ListThreadsOpMkWeakOpMkWeakNoFinalizerOpAddCFinalizerToWeakOp DeRefWeakOpFinalizeWeakOpTouchOpMakeStablePtrOpDeRefStablePtrOp EqStablePtrOpMakeStableNameOpStableNameToIntOp CompactNewOpCompactResizeOpCompactContainsOpCompactContainsAnyOpCompactGetFirstBlockOpCompactGetNextBlockOpCompactAllocateBlockOpCompactFixupPointersOp CompactAddCompactAddWithSharing CompactSizeReallyUnsafePtrEqualityOpParOpSparkOpSeqOp GetSparkOp NumSparks KeepAliveOp DataToTagOp TagToEnumOp AddrToAnyOp AnyToAddrOp MkApUpd0_OpNewBCOOpUnpackClosureOp ClosureSizeOpGetApStackValOp GetCCSOfOpGetCurrentCCSOp ClearCCSOp WhereFromOp TraceEventOpTraceEventBinaryOp TraceMarkerOpSetThreadAllocationCounterVecBroadcastOp VecPackOp VecUnpackOp VecInsertOpVecAddOpVecSubOpVecMulOpVecDivOp VecQuotOpVecRemOpVecNegOpVecIndexByteArrayOpVecReadByteArrayOpVecWriteByteArrayOpVecIndexOffAddrOpVecReadOffAddrOpVecWriteOffAddrOpVecIndexScalarByteArrayOpVecReadScalarByteArrayOpVecWriteScalarByteArrayOpVecIndexScalarOffAddrOpVecReadScalarOffAddrOpVecWriteScalarOffAddrOpPrefetchByteArrayOp3PrefetchMutableByteArrayOp3PrefetchAddrOp3PrefetchValueOp3PrefetchByteArrayOp2PrefetchMutableByteArrayOp2PrefetchAddrOp2PrefetchValueOp2PrefetchByteArrayOp1PrefetchMutableByteArrayOp1PrefetchAddrOp1PrefetchValueOp1PrefetchByteArrayOp0PrefetchMutableByteArrayOp0PrefetchAddrOp0PrefetchValueOp0 maxPrimOpTag primOpTag allThePrimOps tagToEnumKey primOpFixity primOpDocsprimOpOutOfLineprimOpOkForSpeculationprimOpOkForSideEffects primOpIsCheap primOpIsDivprimOpCodeSize primOpTypeprimOpResultType primOpOccprimOpWrapperIdisComparisonPrimOp primOpSiggetPrimOpResultInfo pprPrimOpprimOpIsReallyInline$fOutputablePrimOp $fOrdPrimOp $fEqPrimOp$fOutputablePrimCall LabelStyleCStyleAsmStyle InfoProvEnt infoTableProvinfoProvModule infoTableTypeinfoProvEntClosureType infoTablePtrDynamicLinkerLabelInfoCodeStub SymbolPtr GotSymbolPtrGotSymbolOffsetConInfoTableLocation UsageSiteDefinitionSiteForeignLabelSourceForeignLabelInPackageForeignLabelInExternalPackageForeignLabelInThisPackageNeedExternDecl isIdLabel isTickyLabelpprDebugCLabelgetConInfoTableLocation mkSRTLabelmkRednCountsLabel mkTagHitLabelmkClosureLabelmkInfoTableLabel mkEntryLabelmkClosureTableLabelmkConInfoTableLabel mkBytesLabelmkBlockInfoTableLabelmkDirty_MUT_VAR_Label#mkNonmovingWriteBarrierEnabledLabelmkUpdInfoLabelmkBHUpdInfoLabelmkIndStaticInfoLabelmkMainCapabilityLabelmkMAP_FROZEN_CLEAN_infoLabelmkMAP_FROZEN_DIRTY_infoLabelmkMAP_DIRTY_infoLabelmkTopTickyCtrLabelmkCAFBlackHoleInfoTableLabelmkArrWords_infoLabelmkSMAP_FROZEN_CLEAN_infoLabelmkSMAP_FROZEN_DIRTY_infoLabelmkSMAP_DIRTY_infoLabelmkBadAlignmentLabelmkOutOfBoundsAccessLabelmkMemcpyRangeOverlapLabelmkMUT_VAR_CLEAN_infoLabelmkSRTInfoLabelmkCmmInfoLabelmkCmmEntryLabelmkCmmRetInfoLabel mkCmmRetLabelmkCmmCodeLabelmkCmmClosureLabelmkCmmDataLabelmkRtsCmmDataLabelmkLocalBlockLabelmkRtsPrimOpLabelmkSelectorInfoLabelmkSelectorEntryLabelmkApInfoTableLabelmkApEntryLabelmkPrimCallLabelmkForeignLabel addLabelSize isBytesLabelisForeignLabelisStaticClosureLabelisSomeRODataLabelisInfoTableLabelisCmmInfoTableLabelisConInfoTableLabelforeignLabelStdcallInfo mkBitmapLabel mkCCLabel mkCCSLabel mkIPELabelmkRtsApFastLabelmkRtsSlowFastTickyCtrLabelmkRtsUnpackCStringLabelmkRtsUnpackCStringUtf8LabelmkHpcTicksLabelmkDynamicLinkerLabeldynamicLinkerLabelInfomkPicBaseLabelmkDeadStripPreventermkStringLitLabelmkInitializerStubLabelmkInitializerArrayLabelmkFinalizerStubLabelmkFinalizerArrayLabelmkAsmTempLabelmkAsmTempDerivedLabelmkAsmTempEndLabelmkAsmTempProcEndLabelmkAsmTempDieLabel toClosureLbltoSlowEntryLbl toEntryLbl toInfoLblhasHaskellNamehasIdLabelInfohasCAF needsCDeclmaybeLocalBlockLabel isMathFunexternallyVisibleCLabelisCFunctionLabel isGcPtrLabel isLocalCLabel labelDynamic pprAsmLabelppInternalProcLabel mayRedirectTo$fOutputableForeignLabelSource$fOrdTickyIdInfo$fOutputableTickyIdInfo $fOutputableConInfoTableLocation$fOutputableIdLabelInfo$fOutputablePPlatformCLabel $fOutputablePPlatformInfoProvEnt $fOrdCLabel $fShowCLabel$fEqInfoProvEnt$fOrdInfoProvEnt $fEqCLabel$fEqDynamicLinkerLabelInfo$fOrdDynamicLinkerLabelInfo$fEqCmmLabelInfo$fOrdCmmLabelInfo$fEqRtsLabelInfo$fOrdRtsLabelInfo$fEqIdLabelInfo$fOrdIdLabelInfo$fEqConInfoTableLocation$fOrdConInfoTableLocation$fEqTickyIdInfo$fShowTickyIdInfo$fEqForeignLabelSource$fOrdForeignLabelSource$fOrdNeedExternDecl$fEqNeedExternDecl$fEqModuleLabelKind$fOrdModuleLabelKind newBlockIdblockLbl infoTblLblCoreAltWithFVsCoreExprWithFVs'CoreExprWithFVsCoreBindWithFVsFVAnn exprFreeVarsexprFVsexprFreeVarsDSetexprFreeVarsList exprFreeIds exprsFreeIdsexprFreeIdsDSetexprFreeIdsListexprsFreeIdsDSetexprsFreeIdsList exprsFreeVarsexprsFreeVarsList bindFreeVarsexprSomeFreeVarsexprSomeFreeVarsListexprsSomeFreeVarsexprsSomeFreeVarsListexprsOrphNamesorphNamesOfTypeorphNamesOfTypes orphNamesOfCoorphNamesOfCoConorphNamesOfAxiomLHSruleRhsFreeVarsrulesRhsFreeIdsruleLhsFreeIdsruleLhsFreeIdsList ruleFreeVarsrulesFreeVarsDSet rulesFreeVars mkRuleInfo freeVarsOf freeVarsOfAnnvarTypeTyCoVarsvarTypeTyCoFVs idFreeVars dIdFreeVarsidFVsbndrRuleAndUnfoldingVarsDSetbndrRuleAndUnfoldingIds idRuleVarsidUnfoldingVarsstableUnfoldingVars freeVarsBindfreeVars FamInstMatchfim_cosfim_tys fim_instanceInjectivityCheckResultInjectivityAcceptedInjectivityUnified FamInstEnv FamInstEnvs FamFlavor SynFamilyInstDataFamilyInstFamInst fi_orphanfi_rhsfi_tysfi_cvsfi_tvsfi_tcsfi_fam fi_flavorfi_axiom famInstAxiom famInstRHS famInstTyConfamInstsRepTyConsfamInstRepTyCon_maybedataFamInstRepTyConorphNamesOfFamInst pprFamInst pprFamInstsmkLocalFamInstmkImportedFamInstfamInstEnvSizeemptyFamInstEnvsemptyFamInstEnvfamInstEnvEltsfamilyInstancesfamilyNameInstancesunionFamInstEnvextendFamInstEnvListextendFamInstEnvcompatibleBranchesinjectiveBranches mkCoAxBranchmkBranchedCoAxiommkUnbranchedCoAxiommkSingleCoAxiommkNewTypeCoAxiomlookupFamInstEnvByTyConlookupFamInstEnvlookupFamInstEnvConflicts$lookupFamInstEnvInjectivityConflicts isDominatedByreduceTyFamApp_maybeapartnessChecktopNormaliseTypetopNormaliseType_maybetopReduceTyFamApp_maybe normaliseTypenormaliseTcApp$fOutputableFamInst$fNamedThingFamInst$fOutputableFamInstEnv$fOutputableFamInstMatch$fApplicativeNormM $fMonadNormM$fFunctorNormM CheapAppFunexprType coreAltType coreAltsType mkLamType mkLamTypesapplyTypeToArgs mkCastMComkPiMComkCastmkTickmkTicksisSaturatedConApp mkTickNoHNF tickHNFArgs stripTicksTopstripTicksTopEstripTicksTopT stripTicksE stripTicksT bindNonRecneedsCaseBinding mkAltExpr mkDefaultCasemkSingleAltCase findDefault addDefault isDefaultAltfindAlt mergeAlts trimConArgs filterAltsrefineDefaultAltcombineIdenticalAlts scaleAltsBy exprIsTrivialgetIdFromTrivialExprgetIdFromTrivialExpr_maybe exprIsDupableexprIsWorkFree exprIsCheap exprIsCheapXexprIsExpandable isCheapAppisExpandableAppexprOkForSpeculationexprOkForSideEffectsexprOkForSpecEvalaltsAreExhaustiveetaExpansionTick exprIsHNF exprIsConLikeexprIsTopLevelBindableexprIsTickedStringexprIsTickedString_maybedataConRepFSInstPat cheapEqExpr cheapEqExpr' diffBinds isEmptyTynormSplitTyConApp_maybeextendInScopeSetBindextendInScopeSetBndrsmkInScopeSetBndrscollectMakeStaticArgs isJoinBinddumpIdInfoOfProgrammkStrictFieldSeqsshouldStrictifyIdForCbvshouldUseCbvForIdisUnsafeEqualityProofExprSizeTooBigSizeIs _es_discount_es_args _es_size_isCallCtxt BoringCtxtRhsCtxt DiscArgCtxt RuleArgCtxt ValAppCtxtCaseCtxt ArgSummaryTrivArg NonTrivArgValueArgunfoldingReportPrefixunfoldingCaseScalingunfoldingCaseThresholdunfoldingVeryAggressiveunfoldingDictDiscountunfoldingFunAppDiscountunfoldingUseThresholdunfoldingCreationThresholdupdateReportPrefixnonTrivinlineBoringOkcalcUnfoldingGuidancesizeExpr$fOutputableArgSummary$fOutputableCallCtxt$fOutputableExprSize extendIdSubstextendIdSubstWithCloneextendIdSubstList extendSubstextendSubstWithVarextendSubstList lookupIdSubstlookupIdSubst_maybedelBndrdelBndrs mkOpenSubst substExprSC substExpr substBindSC substBind deShadowBinds substBndr substBndrs substRecBndrs cloneIdBndr cloneIdBndrs cloneBndrs cloneBndrcloneRecIdBndrs substIdType substIdInfosubstUnfoldingSCsubstUnfolding substIdOcc substRuleInfosubstRulesForImportedIds substDVarSet substTickish ArityOptsao_dicts_cheap ao_ped_bot ArityType manifestArity joinRhsArityexprBotStrictness_maybearityTypeBotSigs_maybe typeArity typeOneShots typeOneShot isOneShotBndrisStateHackType zapLamBndrsmkBotArityTypearityTypeArityexprEtaExpandArity findRhsArity idArityTypecheapArityType exprArity exprIsDeadEnd etaExpand etaExpandAT tryEtaReduce pushCoArgs pushCoArg pushCoTyArg pushCoValArgpushCoercionIntoLambda pushCoDataConcollectBindersPushingCoetaExpandToJoinPointetaExpandToJoinPointRule$fOutputableArityType$fOutputableArityEnv$fOutputableEtaInfo $fEqArityType$fEqCostoccurAnalyseExproccurAnalysePgmzapLambdaBndrsscrutBinderSwap_maybe$fOutputableOccEncl$fOutputableUsageDetails$fOutputableTailUsageDetails$fOutputableNodeDetails$fOutputableSimpleNodeDetailsmkFinalUnfoldingmkFinalUnfolding'mkCompulsoryUnfolding'mkCompulsoryUnfoldingmkSimpleUnfoldingmkDFunUnfoldingmkDataConUnfoldingmkWrapperUnfoldingmkWorkerUnfoldingmkInlineUnfoldingNoAritymkInlineUnfoldingWithAritymkInlinableUnfolding specUnfolding mkUnfoldingmkCoreUnfoldingcertainlyWillInline FloatBindFloatLet FloatCase MkStringIdsunpackCStringUtf8IdunpackCStringId sortQuantVars mkCoreAppmkWildValBinder mkWildCase mkIfThenElsecastBottomExpr mkLitRubbishmkUncheckedIntExpr mkIntExprInt mkIntegerExpr mkNaturalExprmkStringExprFSgetMkStringIdsmkStringExprFSWithmkCoreUnboxedTuplemkCoreTupBoxitymkCoreVarTupTy mkCoreTupmkCoreUnboxedSummkBigCoreVarTupSolomkBigCoreVarTup mkBigCoreTupmkBigCoreVarTupTymkBigCoreTupTyunitExpr mkChunkifiedchunkifymkBigTupleSelectormkBigTupleSelectorSolomkBigTupleCase wrapFloat wrapFloats floatBindings mkNilExpr mkConsExpr mkListExpr mkFoldrExpr mkBuildExpr mkNothingExpr mkJustExprmkRuntimeErrorApperrorIdsrEC_SEL_ERROR_IDrEC_CON_ERROR_ID pAT_ERROR_IDnO_METHOD_BINDING_ERROR_IDnON_EXHAUSTIVE_GUARDS_ERROR_ID tYPE_ERROR_IDaBSENT_SUM_FIELD_ERROR_IDmkImpossibleExprmkAbsentErrorApp$fOutputableFloatBind so_eta_red so_co_opts so_uf_optsdefaultSimpleOptssimpleOptExprWith simpleOptPgmjoinPointBinding_maybejoinPointBindings_maybeexprIsConApp_maybeexprIsLiteral_maybeexprIsLambda_maybe$fOutputableSimpleOptEnvBangOptsbang_opt_unbox_smallbang_opt_unbox_strictbang_opt_unbox_disablebang_opt_strict_dataDataConBangOpts FixedBangOpts SrcBangOptsDCB wiredInIds ghcPrimIds mkDictSelRhsvanillaDataConBoxer mkDataConRepunwrapNewTypeBodywrapFamInstBody mkFCallId mkDictFunId coerceNameleftSectionNamerightSectionName nospecIdName proxyHashId nullAddrIdseqIdlazyIdnoinlineIdNamenoinlineConstraintIdName noinlineIdnoinlineConstraintIdnospecIdcoerceIdrealWorldPrimId voidPrimIdunboxedUnitExpr voidArgIdcoercionTokenId IfaceJoinInfoIfaceNotJoinPointIfaceJoinPoint IfaceMaybeRhsIfUseUnfoldingRhsIfRhsIfaceTopBndrInfo IfLclTopBndr IfGblTopBndr IfaceLetBndr IfLetBndr IfaceBindingX IfaceNonRecIfaceRec IfaceBinding IfaceConAlt IfaceDefault IfaceDataAlt IfaceLitAltIfaceAlt IfaceTickish IfaceHpcTickIfaceSCC IfaceSource IfaceExprIfaceLclIfaceExtIfaceCo IfaceTupleIfaceLamIfaceApp IfaceCase IfaceECaseIfaceLet IfaceCastIfaceLitIfaceLitRubbish IfaceFCall IfaceTick IfaceLFInfo IfLFReEntrant IfLFThunkIfLFCon IfLFUnknown IfLFUnliftedIfaceIdDetails IfVanillaIdIfWorkerLikeId IfRecSelIdIfDFunIdifRecSelIdFieldLabelifRecSelIdIsNaughtyifRecSelFirstConifRecSelIdParent IfGuidance IfNoGuidanceIfWhenIfaceUnfolding IfCoreUnfold IfDFunUnfold IfaceInfoItemHsArityHsDmdSigHsCprSigHsInlineHsUnfold HsNoCafRefsHsLFInfoHsTagSig IfaceIdInfoIfaceCompleteMatchIfaceAnnTargetIfaceAnnotationifAnnotatedValueifAnnotatedTargetIfaceStringLiteralIfStringLiteralIfaceWarningTxt IfWarningTxtIfDeprecatedTxt IfaceWarnings IfWarnAll IfWarnSome IfaceRule ifRuleOrph ifRuleAuto ifRuleRhs ifRuleArgs ifRuleHead ifRuleBndrs ifActivation ifRuleName IfaceFamInst ifFamInstOrphifFamInstAxiom ifFamInstTys ifFamInstFam IfaceClsInst ifInstOrphifOFlagifDFun ifInstTys ifInstCls IfaceSrcBang IfSrcBang IfaceBangIfNoBangIfStrictIfUnpack IfUnpackCo IfaceEqSpec IfaceConDeclIfConifConSrcStricts ifConStricts ifConFields ifConArgTys ifConCtxt ifConEqSpecifConUserTvBinders ifConExTCvs ifConInfix ifConWrapper ifConName IfaceConDeclsIfAbstractTyCon IfDataTyCon IfNewTyCon IfaceAxBranch ifaxbIncompsifaxbRHS ifaxbRolesifaxbLHS ifaxbCoVarsifaxbEtaTyVars ifaxbTyVarsIfaceAT IfaceClassOpIfaceFamTyConFlavIfaceDataFamilyTyConIfaceOpenSynFamilyTyConIfaceClosedSynFamilyTyCon!IfaceAbstractClosedSynFamilyTyConIfaceBuiltInSynFamTyConIfaceTyConParent IfNoParentIfDataInstanceIfaceBooleanFormulaIfVarIfAndIfOrIfParensIfaceClassBodyIfAbstractClassIfConcreteClassifMinDefifSigsifATs ifClassCtxt IfaceDeclIfaceId IfaceData IfaceSynonym IfaceFamily IfaceClass IfaceAxiom IfacePatSynifIdInfo ifIdDetailsifTypeifNameifParent ifGadtSyntaxifConsifCtxtifRolesifCType ifResKind ifBindersifSynRhsifFamInj ifFamFlavifResVarifBodyifFDs ifAxBranchesifRoleifTyCon ifFieldLabelsifPatTy ifPatArgs ifPatReqCtxt ifPatProvCtxt ifPatExBndrsifPatUnivBndrs ifPatBuilder ifPatMatcher ifPatIsInfix IfaceTopBndrfromIfaceBooleanFormulavisibleIfConDeclsifaceDeclImplicitBndrsifaceDeclFingerprintsfromIfaceWarnings showToHeader showToIface pprIfaceDecl pprIfaceExprfreeNamesIfDeclfreeNamesIfConDeclsfreeNamesIfRulefreeNamesIfFamInst$fNFDataIfaceBooleanFormula$fBinaryIfaceBooleanFormula$fNFDataIfaceTyConParent$fBinaryIfaceTyConParent$fOutputableIfaceTyConParent$fNFDataIfaceClassOp$fBinaryIfaceClassOp$fOutputableIfaceClassOp$fHasOccNameIfaceClassOp$fNamedThingIfaceClassOp$fNFDataIfaceAxBranch$fBinaryIfaceAxBranch$fNFDataIfaceFamTyConFlav$fBinaryIfaceFamTyConFlav$fNFDataIfaceBang$fBinaryIfaceBang$fNFDataIfaceSrcBang$fBinaryIfaceSrcBang$fNFDataIfaceConDecl$fBinaryIfaceConDecl$fHasOccNameIfaceConDecl$fNamedThingIfaceConDecl$fNFDataIfaceConDecls$fBinaryIfaceConDecls$fNFDataIfaceClsInst$fBinaryIfaceClsInst$fOutputableIfaceClsInst$fNFDataIfaceFamInst$fBinaryIfaceFamInst$fOutputableIfaceFamInst$fNFDataIfaceStringLiteral$fBinaryIfaceStringLiteral$fOutputableIfaceStringLiteral$fNFDataIfaceWarningTxt$fBinaryIfaceWarningTxt$fOutputableIfaceWarningTxt$fNFDataIfaceWarnings$fBinaryIfaceWarnings$fOutputableIfaceWarnings$fNFDataIfaceAnnotation$fBinaryIfaceAnnotation$fOutputableIfaceAnnotation$fNFDataIfaceCompleteMatch$fBinaryIfaceCompleteMatch$fOutputableIfaceCompleteMatch$fNFDataIfGuidance$fBinaryIfGuidance$fOutputableIfGuidance$fBinaryIfaceLFInfo$fOutputableIfaceLFInfo$fNFDataIfaceTickish$fBinaryIfaceTickish$fNFDataIfaceConAlt$fBinaryIfaceConAlt$fOutputableIfaceConAlt$fNFDataIfaceBindingX$fBinaryIfaceBindingX$fOutputableIfaceBindingX$fNFDataIfaceJoinInfo$fBinaryIfaceJoinInfo$fOutputableIfaceJoinInfo$fNFDataIfaceLetBndr$fNFDataIfaceAlt$fNFDataIfaceExpr$fNFDataIfaceUnfolding$fNFDataIfaceInfoItem$fBinaryIfaceLetBndr$fBinaryIfaceExpr$fBinaryIfaceAlt$fBinaryIfaceUnfolding$fBinaryIfaceInfoItem$fOutputableIfaceUnfolding$fOutputableIfaceInfoItem$fOutputableIfaceExpr$fNFDataIfaceMaybeRhs$fBinaryIfaceMaybeRhs$fOutputableIfaceMaybeRhs$fNFDataIfaceIdDetails$fNFDataIfaceAT$fNFDataIfaceClassBody$fNFDataIfaceDecl$fBinaryIfaceIdDetails$fBinaryIfaceAT$fBinaryIfaceDecl$fOutputableIfaceIdDetails$fOutputableIfaceAT$fOutputableIfaceDecl$fHasOccNameIfaceDecl$fNamedThingIfaceDecl$fNFDataIfaceTopBndrInfo$fBinaryIfaceTopBndrInfo$fOutputableIfaceTopBndrInfo$fNFDataIfaceRule$fBinaryIfaceRule$fOutputableIfaceRule$fFunctorIfaceBindingX$fFoldableIfaceBindingX$fTraversableIfaceBindingX$fOrdIfaceBindingX$fEqIfaceBindingX DefinerOfRegs foldRegsDefd UserOfRegs foldRegsUsed GlobalRegSet LocalRegSetRegSetCmmLitCmmIntCmmFloatCmmVecCmmLabel CmmLabelOffCmmLabelDiffOffCmmBlockCmmHighStackMarkAreaOldYoung AlignmentSpecNaturallyAligned UnalignedCmmExprCmmLoad CmmMachOp CmmStackSlot CmmRegOff cmmExprType cmmLitType cmmExprWidthcmmExprAlignmentmaybeInvertCmmExprisTrivialCmmExprhasNoGlobalRegsisLitisComparisonExpr emptyRegSet nullRegSet elemRegSet extendRegSetdeleteFromRegSetmkRegSet minusRegSet plusRegSet timesRegSet sizeRegSet regSetToListfoldLocalRegsUsedfoldLocalRegsDefd$fOutputableArea$fOutputableCmmLit$fOutputablePPlatformCmmLit$fOutputablePPlatformCmmExpr $fEqCmmExpr$fUserOfRegsrList$fUserOfRegsrCmmExpr$fUserOfRegsrr$fUserOfRegsGlobalRegUseCmmReg$fUserOfRegsGlobalRegCmmReg$fUserOfRegsLocalRegCmmReg$fDefinerOfRegsrList$fDefinerOfRegsrr!$fDefinerOfRegsGlobalRegUseCmmReg$fDefinerOfRegsGlobalRegCmmReg$fDefinerOfRegsLocalRegCmmReg $fShowCmmExpr $fEqCmmLit $fShowCmmLit$fEqArea $fOrdArea $fShowArea$fEqAlignmentSpec$fOrdAlignmentSpec$fShowAlignmentSpecmodBreaks_breakInfo modBreaks_ccsmodBreaks_declsmodBreaks_varsmodBreaks_locsmodBreaks_flags CCostCentre BreakIndex CgBreakInfo cgb_restycgb_vars cgb_tyvarsBCONPtr BCONPtrWord BCONPtrLbl BCONPtrItbl BCONPtrAddr BCONPtrStrBCOPtr BCOPtrName BCOPtrPrimOp BCOPtrBCOBCOPtrBreakArray UnlinkedBCOunlinkedBCOPtrsunlinkedBCOLitsunlinkedBCOBitmapunlinkedBCOInstrsunlinkedBCOArityunlinkedBCONameAddrPtrItblPtrAddrEnvItblEnvNativeCallInfonativeCallStackSpillSizenativeCallRegsnativeCallSizenativeCallTypeNativeCallTypeNativePrimCallNativeTupleReturn RegBitmap unRegBitmapHalfWordFFIInfoCompiledByteCode bc_breaksbc_strsbc_ffisbc_itblsbc_bcosseqCompiledByteCodevoidTupleReturnInfovoidPrimCallInfoemptyModBreaks$fOutputableNativeCallInfo$fNFDataBCONPtr$fOutputableUnlinkedBCO$fNFDataBCOPtr$fNFDataUnlinkedBCO$fOutputableCgBreakInfo$fOutputableCompiledByteCode$fNFDataAddrPtr $fShowItblPtr$fNFDataItblPtr$fEqNativeCallType$fEnumRegBitmap $fEqRegBitmap$fShowRegBitmap$fIntegralRegBitmap$fNumRegBitmap$fOrdRegBitmap$fRealRegBitmap$fBitsRegBitmap$fFiniteBitsRegBitmap$fOutputableRegBitmap$fEnumHalfWord $fEqHalfWord$fShowHalfWord$fIntegralHalfWord $fNumHalfWord $fOrdHalfWord$fRealHalfWord$fOutputableHalfWord $fEnumWordOff $fEqWordOff $fShowWordOff$fIntegralWordOff $fNumWordOff $fOrdWordOff $fRealWordOff$fOutputableWordOff $fEnumByteOff $fEqByteOff $fShowByteOff$fIntegralByteOff $fNumByteOff $fOrdByteOff $fRealByteOff$fOutputableByteOff $fShowFFIInfo$fNFDataFFIInfo toIfaceTvBndrtoIfaceTvBndrs toIfaceIdBndr toIfaceBndrtoIfaceForAllBndr toIfaceKind toIfaceType toIfaceTyVartoIfaceTyCon_nametoIfaceCoerciontidyToIfaceTypetidyToIfaceContextpatSynToIfaceDecl toIfaceBangtoIfaceSrcBangtoIfaceLetBndrtoIfaceTopBndrtoIfaceIdDetails toIfaceIdInfo toIfUnfolding toIfaceExprtoIfaceTickish toIfaceBindtoIfaceTopBind toIfaceAlt toIfaceCon toIfaceApp toIfaceVar toIfaceLFInfodehydrateCgBreakInfoPotentialUnifiers NoUnifiersOneOrMoreUnifiers CanonicalLookupInstanceErrReasonLookupInstErrNotExactLookupInstErrFlexiVarLookupInstErrNotFoundClsInstLookupResult InstMatch DFunInstTypeVisibleOrphanModulesInstEnvs ie_visibleie_local ie_globalInstEnvClsInst is_orphanis_flagis_dfunis_tysis_clsis_tvs is_dfun_nameis_tcs is_cls_nmfuzzyClsInstCmpisOverlappable isOverlapping isIncoherentinstanceDFunIdupdateClsInstDFunupdateClsInstDFuns pprInstancepprInstanceHdr pprInstances instanceHeadorphNamesOfClsInst instanceSigmkLocalClsInstmkImportedClsInst emptyInstEnv mkInstEnv instEnvEltsinstEnvClasses instIsVisibleclassInstancesclassNameInstances memberInstEnv unionInstEnvextendInstEnvList extendInstEnv filterInstEnv anyInstEnv mapInstEnvdeleteFromInstEnvdeleteDFunFromInstEnvidenticalClsInstHeadlookupUniqueInstEnvgetPotentialUnifiers nullUnifiers lookupInstEnvinstanceBindFun$fOutputableClsInst$fNamedThingClsInst$fOutputableInstEnv$fSemigroupPotentialUnifiers$fOutputablePotentialUnifiers$fOutputableInstMatches $fGenericLookupInstanceErrReason $fDataClsInst QuoteWrapper HoleExprRefHER EvCallStack EvCsEmpty EvCsPushCall EvTypeableEvTypeableTyConEvTypeableTyAppEvTypeableTrFunEvTypeableTyLitEvExprEvTermEvFunet_bodyet_bindset_givenet_tvsEvBindeb_infoeb_rhseb_lhs EvBindInfo EvBindGiven EvBindWanted ebi_canonical EvBindMapev_bind_varenv EvBindsVar CoEvBindsVarebv_tcvs ebv_bindsebv_uniq TcEvBindsEvBinds HsWrapperWpHole WpComposeWpFunWpCastWpEvLamWpEvAppWpTyLamWpTyAppWpLetWpMultCoercion TcMCoercionR TcMCoercionN TcMCoercion TcCoercionP TcCoercionR TcCoercionN TcCoercion maybeSymCo<.>mkWpFunmkWpEta mkWpCastR mkWpCastN mkWpTyApps mkWpEvApps mkWpEvVarApps mkWpTyLams mkWpEvLamsmkWpLet idHsWrapper isIdHsWrapperhsWrapDictBinderscollectHsWrapBindersisCoEvBindsVaremptyEvBindMap extendEvBindsisEmptyEvBindMap lookupEvBindevBindMapBinds foldEvBindMapnonDetStrictFoldEvBindMapfilterEvBindMapevBindMapToVarSetvarSetMinusEvBindMap evBindVarmkWantedEvBind mkGivenEvBindevId evCoercionevCast evDFunApp evDataConApp evSelector evTypeablemkEvCastmkEvScSelectorsemptyTcEvBindsisEmptyTcEvBindsevTermCoercion_maybeevTermCoercionfindNeededEvVars evVarsOfTerm pprHsWrapperunwrapIPwrapIPquoteWrapperTyVarTyapplyQuoteWrapper$fOutputableEvTypeable$fOutputableEvTerm$fOutputableEvBind$fUniquableEvBindsVar$fOutputableEvBindsVar$fOutputableTcEvBinds$fOutputableEvBindMap$fDataTcEvBinds$fOutputableHsWrapper$fMonoidHsWrapper$fSemigroupHsWrapper$fOutputableEvCallStack$fDataHoleExprRef$fOutputableHoleExprRef$fDataQuoteWrapper$fDataEvCallStack$fDataHsWrapper$fDataEvTypeable $fDataEvTermOutputableBndrFlagOpNameNormalOpNegateOp UnboundOpRecFldOpHsCoreTyHsPSRn hsps_imp_tvs hsps_nwcs EpAnnForallTy getBangTypegetBangStrictnessfromMaybeContextmkHsForAllVisTelemkHsForAllInvisTelemkHsQTvs emptyLHsQTvs hsSigWcType dropWildCardshsOuterTyVarNameshsOuterExplicitBndrsmkHsOuterImplicitmkHsOuterExplicitmkHsImplicitSigTypemkHsExplicitSigTypemkHsWildCardBndrsmkHsPatSigTypemkEmptyWildCardBndrshsTyVarBndrFlagsetHsTyVarBndrFlagupdateHsTyVarBndrFlaghsTvbAllKindedhsLinearhsUnrestrictedisUnrestricted arrowToHsType pprHsArrow hsWcScopedTvs hsScopedTvs hsScopedKvs hsTyVarName hsLTyVarName hsLTyVarNameshsExplicitLTyVarNameshsAllLTyVarNameshsLTyVarLocNamehsLTyVarLocNames hsTyKindSig ignoreParensmkAnonWildCardTymkHsOpTy mkHsAppTy mkHsAppTys mkHsAppKindTysplitHsFunTypehsTyGetAppHead_maybelhsTypeArgSrcSpannumVisibleArgs pprHsArgsAppsplitLHsPatSynTysplitLHsSigmaTyInvissplitLHsGadtTysplitLHsForAllTyInvissplitLHsForAllTyInvis_KPsplitLHsQualTysplitLHsInstDeclTygetLHsInstDeclHeadgetLHsInstDeclClass_maybe mkFieldOccmkAmbiguousFieldOccambiguousFieldOccRdrNameambiguousFieldOccLRdrNameselectorAmbiguousFieldOccunambiguousFieldOccambiguousFieldOccpprAnonWildCardpprHsOuterFamEqnTyVarBndrspprHsOuterSigTyVarBndrs pprHsForAll pprLHsContextpprConDeclFields pprHsTypehsTypeNeedsParensparenthesizeHsTypeparenthesizeHsContext$fOutputableBndrFieldOcc$fOutputableFieldOcc$fOutputableHsConDetails$fOutputableBndrHsIPName$fOutputableHsIPName$fOutputableHsTyLit$fOutputableHsPatSigType$fOutputableHsWildCardBndrs$fOutputableHsForAllTelescope$fOutputableLHsQTyVars$fOutputableHsType$fOutputableHsSigType$fOutputableBndrGenLocated0!$fOutputableBndrAmbiguousFieldOcc$fOutputableAmbiguousFieldOcc$fOutputableHsArg$fOutputableConDeclField$fOutputableHsArrow$fNamedThingHsTyVarBndr$fOutputableOpName$fOutputableHsTyVarBndr$fOutputableHsOuterTyVarBndrs$fOutputableBndrFlagHsBndrVisp $fOutputableBndrFlagSpecificityp$fOutputableBndrFlagUnitp $fDataHsPSRn StarIsType StarIsNotTypeUntickedPromotedThingUntickedConstructorUntickedExplicitList SimilarNameSimilarRdrName HowInScopeLocallyBoundAtImportSuggestionCouldImportFromCouldUnhideFromCouldRemoveTypeKeywordCouldAddTypeKeyword ImportDataCon ies_parenties_suggest_import_fromInstantiationSuggestionGhcHint UnknownHintSuggestExtensionSuggestCorrectPragmaNameSuggestMissingDoSuggestLetInDoSuggestAddSignatureCabalFileSuggestSignatureInstantiationsSuggestUseSpacesSuggestUseWhitespaceAfterSuggestUseWhitespaceAroundSuggestParenthesesSuggestIncreaseMaxPmCheckModelsSuggestAddTypeSignaturesSuggestBindToWildcard SuggestAddInlineOrNoInlinePragmaSuggestAddPhaseToCompetingRuleSuggestAddToHSigExportList#SuggestIncreaseSimplifierIterationsSuggestUseTypeFromDataKindSuggestQualifiedAfterModuleNameSuggestThQuotationSyntax SuggestRolesSuggestQualifyStarOperatorSuggestTypeSignatureFormSuggestFixOrphanInstSuggestAddStandaloneDerivation!SuggestAddStandaloneKindSignatureSuggestFillInWildcardConstraintSuggestRenameForallSuggestAppropriateTHTickSuggestDumpSlicesSuggestAddTickSuggestMoveToDeclarationSiteSuggestSimilarNamesRemindFieldSelectorSuppressedSuggestPlacePragmaInHeaderSuggestPatternMatchingSyntax SuggestSpecialiseVisibilityHintsSuggestRenameTypeVariableLoopySuperclassSolveHintSuggestExplicitBidiPatSynSuggestSafeHaskellSuggestRemoveRecordWildcard!SuggestMoveNonCanonicalDefinitionSuggestIncreaseReductionDepth#SuggestRemoveNonCanonicalDefinitionSuggestEtaReduceAbsDataTySynRemindRecordMissingFieldSuggestBindTyVarOnLhsSuggestBindTyVarExplicitlyisFamilyInstancesuppressed_parentssuppressed_selectorLanguageExtensionHintSuggestSingleExtensionSuggestAnyExtensionSuggestExtensionsSuggestExtensionInOrderToAvailableBindings NamedBindingsUnnamedBindingsuggestExtensionsuggestExtensionWithInfosuggestExtensionssuggestExtensionsWithInfosuggestAnyExtensionsuggestAnyExtensionWithInfouseExtensionInOrderTopprUntickedConstructor isBareSymbolnoStarIsTypeHintsDiagnosticCodediagnosticCodeNumberdiagnosticCodeNameSpaceSeverity SevIgnore SevWarningSevError MessageClassMCOutputMCFatal MCInteractiveMCDumpMCInfo MCDiagnostic MsgEnvelope errMsgReasonerrMsgSeverityerrMsgDiagnostic errMsgContext errMsgSpanResolvedDiagnosticReasonresolvedDiagnosticReasonDiagnosticReasonWarningWithoutFlagWarningWithFlagsWarningWithCategoryErrorWithoutFlagDiagnosticMessage diagHints diagReason diagMessageDiagnosticHintNoDiagnosticOptsUnknownDiagnostic DiagnosticDiagnosticOptsdiagnosticMessagediagnosticReasondiagnosticHintsdiagnosticCodeHasDefaultDiagnosticOpts defaultOpts DecoratedSDoc Decorated unDecoratedMessages getMessagesWarningWithFlag emptyMessages mkMessagesisEmptyMessages singleMessage addMessage unionMessagesunionManyMessages mkDecoratedmkSimpleDecoratedunionDecoratedSDocmapDecoratedSDocdefaultDiagnosticOptsmkSimpleUnknownDiagnosticmkUnknownDiagnosticembedUnknownDiagnostic pprDiagnosticnoHintsmkPlainDiagnostic mkPlainErrormkDecoratedDiagnosticmkDecoratedError pprMessageBag mkLocMessagemkLocMessageWarningGroupsgetCaretDiagnosticisIntrinsicErrorMessageisWarningMessage errorsFoundisExtrinsicErrorMessageerrorsOrFatalWarningsFoundgetWarningMessagesgetErrorMessagespartitionMessages*$fHasDefaultDiagnosticOptsNoDiagnosticOpts$fOutputableDiagnosticHint$fOutputableDiagnosticReason$$fOutputableResolvedDiagnosticReason$fToJsonSeverity$fOutputableSeverity$fShowMsgEnvelope$fOutputableDiagnosticCode$fToJsonMessageClass$fDiagnosticDiagnosticMessage$fOutputableMessages$fDiagnosticUnknownDiagnostic$fSemigroupMessages$fMonoidMessages$fFunctorMessages$fFoldableMessages$fTraversableMessages$fFunctorMsgEnvelope$fFoldableMsgEnvelope$fTraversableMsgEnvelope $fEqSeverity $fOrdSeverity$fShowSeverity$fEqDiagnosticReason$fShowDiagnosticReasonContainsLogger extractLogger HasLogger getLoggerLoggerlogFlags DumpFormat FormatHaskell FormatCore FormatSTGFormatByteCode FormatCMM FormatASMFormatC FormatLLVMFormatJS FormatText TraceAction DumpAction LogActionLogFlagslog_ways log_verbositylog_enable_debug log_with_wayslog_dump_prefix_overridelog_dump_prefix log_dump_dirlog_dump_to_filelog_enable_timestampslog_show_warn_groupslog_show_caretlog_dump_flagslog_default_dump_contextlog_default_user_contextdefaultLogFlagslog_dopt log_set_doptlogHasDumpFlaglogVerbAtLeastupdateLogFlags setLogFlagsloggerTraceFlushUpdateloggerTraceFlush initLogger putLogMsg putDumpFile putTraceMsg pushLogHook popLogHook pushDumpHook popDumpHook pushTraceHook popTraceHookmakeThreadSafe jsonLogActiondefaultLogActiondefaultLogActionHPrintDocdefaultLogActionHPutStrDocdefaultDumpActionwithDumpFileHandledefaultTraceActionlogMsg logDumpFile logTraceMsg logDumpMsgputDumpFileMaybeputDumpFileMaybe' touchDumpFile$fShowDumpFormat$fEqDumpFormatValidity Validity'IsValidNotValidDiagOpts diag_ppr_ctxdiag_max_errorsdiag_reverse_errorsdiag_warn_is_error$diag_fatal_custom_warning_categoriesdiag_custom_warning_categoriesdiag_fatal_warning_flagsdiag_warning_flags emptyDiagOpts diag_woptdiag_fatal_woptdiagReasonSeveritymkMCDiagnosticerrorDiagnostic mkMsgEnvelopemkErrorMsgEnvelopemkPlainMsgEnvelopemkPlainErrorMsgEnvelopeandValidallValid getInvalidsformatBulleted pprMessagespprMsgEnvelopeBagWithLocpprMsgEnvelopeBagWithLocDefaultpprLocMsgEnvelopeDefaultpprLocMsgEnvelope sortMsgBagghcExiterrorMsg fatalErrorMsgcompilationProgressMsgshowPass withTimingwithTimingSilent debugTraceMsgputMsgprintInfoForUserprintOutputForUserlogInfo logOutputprettyPrintGhcErrorstraceCmdtraceSystoolCommand$fEqPrintTimings$fShowPrintTimings$fFunctorValidity'TempDirTempFileLifetimeTFL_CurrentModuleTFL_GhcSession PathsToCleanptcCurrentModule ptcGhcSessionTmpFsemptyPathsToClean initTmpFs forkTmpFsFrommergeTmpFsInto cleanTempDirscleanTempFileskeepCurrentModuleTempFilescleanCurrentModuleTempFilesaddFilesToCleanchangeTempFilesLifetime newTempName newTempSubDirnewTempLibNamewithSystemTempDirectorywithTempDirectory$fShowTempFileLifetimePipelineOutput Temporary Persistent SpecificFile NoOutputFilePipeEnv output_spec start_phase src_suffix src_basename src_filename stop_phaseMonadUseuseTPipelineClass$fShowPipelineOutputDefunctionalizedCDefsNoCDefs LlvmCDefsDefunctionalizedPostHscPipelineNcgPostHscPipelineViaCPostHscPipelineLlvmPostHscPipelineJSPostHscPipelineNoPostHscPipelineDefunctionalizedCodeOutput NcgCodeOutputViaCCodeOutputLlvmCodeOutput JSCodeOutput#DefunctionalizedAssemblerInfoGetterStandardAssemblerInfoGetterJSAssemblerInfoGetterDarwinClangAssemblerInfoGetterDefunctionalizedAssemblerProgStandardAssemblerProgJSAssemblerProgDarwinClangAssemblerProgPrimitiveImplementationLlvmPrimitives NcgPrimitives JSPrimitivesGenericPrimitivesBackendplatformDefaultBackendplatformNcgSupported ncgBackend llvmBackend jsBackend viaCBackendinterpreterBackend noBackendbackendDescriptionbackendWritesFilesbackendPipelineOutputbackendCanReuseLoadedCodebackendGeneratesCodebackendGeneratesCodeForHsBootbackendSupportsInterfaceWritingbackendRespectsSpecialisebackendWantsGlobalBindingsbackendHasNativeSwitchbackendPrimitiveImplementationbackendSimdValiditybackendSupportsEmbeddedBlobsbackendNeedsPlatformNcgSupport backendSupportsUnsplitProcPointsbackendSwappableWithViaCbackendUnregisterisedAbiOnlybackendGeneratesHcbackendSptIsDynamicbackendSupportsBreakpointsbackendForcesOptimization0backendNeedsFullWaysbackendSpecialModuleSourcebackendSupportsHpcbackendSupportsCImportbackendSupportsCExportbackendAssemblerProgbackendAssemblerInfoGetter backendCDefsbackendCodeOutputbackendUseJSLinkerbackendPostHscPipelinebackendNormalSuccessorPhase backendName allBackendsbackendValidityOfCImportbackendValidityOfCExport $fShowBackend$fShowPrimitiveImplementation TurnOnFlag IncludeSpecsincludePathsQuoteImplicitincludePathsGlobalincludePathsQuotePkgDbRef GlobalPkgDb UserPkgDb PkgDbPathDynamicTooStateDT_DontDT_OKDT_DynRtsOptsEnabled RtsOptsNone RtsOptsIgnoreRtsOptsIgnoreAllRtsOptsSafeOnly RtsOptsAll DynLibLoader DeployableSystemDependent PackageDBFlag PackageDBNoUserPackageDBNoGlobalPackageDBClearPackageDBs PackageFlag ExposePackage HidePackage TrustFlag TrustPackageDistrustPackageIgnorePackageFlag IgnorePackage ModRenaming modRenamingsmodRenamingWithImplicit PackageArg UnitIdArgGhcLinkNoLink LinkBinary LinkInMemory LinkDynLib LinkStaticLib LinkMergedObjGhcMode CompManagerOneShotMkDepend CompilerInfoGCCClang AppleClang AppleClang51 Emscripten UnknownCC LinkerInfoGnuLDMoldGnuGoldLlvmLLDDarwinLD SolarisLDAixLD UnknownLD ParMakeCountParMakeThisManyParMakeNumProcessorsParMakeSemaphoreOnOffOnOffFlushOut FatalMessagerContainsDynFlagsextractDynFlags HasDynFlags getDynFlags cfgWeightsuniqueIncrement initialUnique maxErrors reverseErrorsmaxInlineMemsetInsnsmaxInlineMemcpyInsnsmaxInlineAllocSize rtasmInfortccInfortldInfofmaavx512pfavx512favx512eravx512cdavx2avx bmiVersion sseVersioninteractivePrintcallerCcFiltersprofAuto colScheme canUseColoruseColor useUnicodepprCols pprUserLength ghciScriptshaddockOptionsghcVersionFileflushOut ghciHistSize maxWorkerArgs unfoldingOptsextensionFlags extensionstrustworthyOnLocwarnUnsafeOnLoc warnSafeOnLoc pkgTrustOnLocincoherentOnLocoverlapInstLocderiveViaOnLoc newDerivOnLocthOnLoc safeInferred safeInfer safeHaskelllanguagefatalCustomWarningCategoriescustomWarningCategoriesfatalWarningFlags warningFlags generalFlags dumpFlags packageEnv trustFlagspluginPackageFlags packageFlagsignorePackageFlagspackageDBFlags depSuffixesdepExcludeModsdepIncludeCppDepsdepIncludePkgDeps depMakefileexternalPluginSpecsfrontendPluginOptspluginModNameOptspluginModNameshpcDirrtsOptsSuggestionsrtsOptsEnabledrtsOptscmdlineFrameworksframeworkPaths libraryPaths includePathsldInputsdumpPrefixForce dumpPrefix dynamicNow dynLibLoader dynOutputHioutputHidynOutputFile_ outputFile_ dynHiSuf_ dynObjectSuf_hieSufhiSuf_hcSuf objectSuf_dumpDirstubDirhieDirhiDirdylibInstallName objectDir splitInfo targetWays_reexportedModules hiddenModulesthisPackageNameworkingDirectoryhomeUnitInstantiations_homeUnitInstanceOf_ homeUnitId_qcsFuel wantedsFuel givensFuelsolverIterationsreductionDepth mainFunIsmainModuleNameIs importPaths historySizecmmProcAlignment liftLamsKnownliftLamsNonRecArgsliftLamsRecArgs floatLamArgsliberateCaseThresholdbinBlobThresholdspecConstrRecursivespecConstrCountspecConstrThreshold dmdUnboxWidthsimplTickFactormaxPmCheckModelsmaxUncoveredPatternsrefLevelHoleFitsmaxRefHoleFitsmaxValidHoleFitsmaxRelevantBinds ghcHeapSizeenableTimeStats parMakeCountstrictnessBefore ruleCheckmaxSimplIterations simplPhases debugLevel verbosity llvmOptLeveltmpDir rawSettings platformMisc toolSettingstargetPlatform fileSettingsghcNameVersionghcLinkghcMode initDynFlagsdefaultDynFlagsdefaultFatalMessagerdefaultFlushOut isOneShotisNoLinkpackageFlagsChangedpositionIndependentdynamicTooState setDynamicNowaddGlobalIncludeaddQuoteIncludeaddImplicitQuoteIncludeflattenIncludes hasPprDebughasNoDebugOutputhasNoStateHackhasNoOptCoerciondoptdopt_set dopt_unsetgoptgopt_set gopt_unsetwoptwopt_set wopt_unset wopt_fatalwopt_set_fatalwopt_unset_fatalwopt_set_all_customwopt_unset_all_customwopt_set_all_fatal_customwopt_unset_all_fatal_customwopt_set_customwopt_unset_customwopt_set_fatal_customwopt_unset_fatal_customwopt_any_customxoptxopt_set xopt_unsetxopt_set_unlessExplSpecxopt_DuplicateRecordFieldsxopt_FieldSelectorslang_set optLevelFlagsturnOnturnOfflanguageExtensionsways targetProfile programNameprojectVersion ghcUsagePath ghciUsagePathtopDirtoolDirextraGccViaCFlagsglobalPackageDatabasePathversionedAppDirversionedFilePathinitSDocContextinitDefaultSDocContextinitPromotionTickContext$fOutputableOnOff$fOutputableGhcMode$fOutputablePackageArg$fOutputableModRenaming$fOutputablePackageFlag$fHasDynFlagsExceptT$fHasDynFlagsMaybeT$fHasDynFlagsReaderT$fHasDynFlagsWriterT$fShowIncludeSpecs$fEqPackageDBFlag $fEqPkgDbRef$fEqDynamicTooState$fShowDynamicTooState$fOrdDynamicTooState$fShowRtsOptsEnabled$fEqDynLibLoader$fEqPackageFlag $fEqTrustFlag$fEqIgnorePackageFlag$fEqModRenaming$fEqPackageArg$fShowPackageArg $fEqGhcLink $fShowGhcLink $fEqGhcMode$fEqCompilerInfo$fEqLinkerInfo $fEqOnOff $fShowOnOff ShHoleSubstUnitErr CloseUnitErrPackageFlagErr TrustFlagErrModuleSuggestionSuggestVisible SuggestHidden LookupResult LookupFoundLookupMultiple LookupHiddenLookupUnusableLookupNotFoundUnusableUnitReasonIgnoredWithFlagBrokenDependenciesCyclicDependenciesIgnoredDependenciesShadowedDependencies UnitInfoMap UnitDatabaseunitDatabaseUnitsunitDatabasePath UnitStateallowVirtualUnitsrequirementContextpluginModuleNameProvidersMapmoduleNameProvidersMaphomeUnitDepends explicitUnits preloadUnits unwireMapwireMappackageNameMappreloadClosure unitInfoMapPreloadUnitClosure UnusableUnit uuIsReexportuuReasonuuUnit ModuleOrigin ModHidden ModUnusable ModOriginfromPackageFlagfromHiddenReexportfromExposedReexport fromOrigUnitemptyUnitState lookupUnit lookupUnit' lookupUnitId lookupUnitId'unsafeLookupUnitunsafeLookupUnitIdlookupPackageNamesearchPackageIdresolvePackageImport listUnitInfo initUnitsreadUnitDatabases getUnitDbRefsresolveUnitDatabasereadUnitDatabasepprFlag pprReason unwireUnitlookupModuleInAllUnitslookupModuleWithSuggestionslookupModulePackage!lookupPluginModuleWithSuggestionslistVisibleModuleNames closeUnitDepscloseUnitDeps'mayThrowUnitErrrequirementMergespprUnitIdForUserpprUnitInfoForUserpprUnitspprUnitsSimple pprModuleMap improveUnitinstUnitToUnitrenameHoleModulerenameHoleUnitrenameHoleModule'renameHoleUnit'instModuleToModuleimplicitPackageDeps$fMonoidUnitVisibility$fSemigroupUnitVisibility$fOutputableUnitVisibility$fOutputableUnitDatabase$fOutputableUnusableUnitReason$fMonoidModuleOrigin$fSemigroupModuleOrigin$fOutputableModuleOrigin$fOutputableUnitErr ImportAvails imp_finsts imp_orphs imp_sig_mods imp_boot_modsimp_trust_pkgsimp_trust_own_pkgimp_dep_direct_pkgsimp_direct_dep_modsimp_modsUsagePackageModuleUsageHomeModule UsageFileUsageHomeModuleInterfaceUsageMergedRequirementusg_safe usg_mod_hashusg_mod usg_exports usg_entities usg_unit_id usg_mod_nameusg_file_label usg_file_hash usg_file_pathusg_iface_hash DependenciesDeps dep_finsts dep_orphs dep_boot_modsdep_trusted_pkgs dep_sig_modsdep_plugin_pkgsdep_direct_pkgsdep_direct_modsmkDependenciesdep_orphs_updatedep_finsts_updatenoDependenciespprDeps$fBinaryDependencies $fBinaryUsage $fEqUsage$fEqDependenciesBuildingCabalPackageYesBuildingCabalPackageNoBuildingCabalPackageFindingModuleOrInterface FindingModuleFindingInterfaceCantFindInstalledCantFindInstalledReasonNoUnitIdMatchingMissingPackageFilesMissingPackageWayFiles NotAModuleCouldntFindInFilesGenericMissingMultiplePackagesReadInterfaceErrorExceptionOccurredHiModuleNameMismatchWarnMissingInterfaceErrorBadSourceImport HomeModErrorDynamicHashMismatchError CantFindErr BadIfaceFileFailedToLoadDynamicInterface IfaceMessageCan'tFindInterfaceCan'tFindNameInInterfaceCircularImportInterfaceLookingForLookingForNameLookingForHiBootLookingForModule LookingForSigIfaceMessageOptsifaceBuildingCabalPackageifaceShowTriedFiles$fEqBuildingCabalPackage$fGenericIfaceMessage$fGenericMissingInterfaceError$fGenericCantFindInstalled $fGenericCantFindInstalledReason$fGenericReadInterfaceError OverLitTcol_type ol_witness ol_rebindable OverLitRn ol_from_fun pprXOverLit overLitTypehsOverLitNeedsParenshsLitNeedsParens convertLit pmPprHsLit$fOutputableOverLitVal$fOutputableHsOverLit$fOutputableHsLit TcSpecPragSpecPrag LTcSpecPrag TcSpecPragsIsDefaultMethod SpecPragsAnnSigasRestasDcolonIdSigunIdSigABExportABE abe_pragsabe_wrapabe_monoabe_polyAbsBindsabs_sig abs_binds abs_ev_binds abs_exports abs_ev_varsabs_tvs XVarBindGhc NHsValBindsLR NValBinds pprLHsBindspprLHsBindsForUser pprDeclListemptyLocalBindseqEmptyLocalBindsisEmptyValBindsemptyValBindsInemptyValBindsOut emptyLHsBindsisEmptyLHsBindsplusHsValBinds ppr_monobindpprTicksisEmptyIPBindsPRisEmptyIPBindsTc noSpecPrags hasSpecPragsisDefaultMethodppr_sighsSigDocextractSpecPragName pragBracketspragSrcBrackets pprVarSigpprSpecpprTcSpecPrags pprMinimalSig$fOutputableFixitySig$fOutputableSig$fOutputableIPBind$fOutputableHsIPBinds$fOutputableRecordPatSynField$fOutputablePatSynBind$fOutputableHsBindLR$fOutputableHsLocalBindsLR$fOutputableHsValBindsLR$fOutputableTcSpecPrag$fOutputableABExport$fDataTcSpecPrags$fDataTcSpecPrag $fDataAnnSig $fDataIdSigConPatTccpt_wrap cpt_binds cpt_dictscpt_tvs cpt_arg_tysHsPatExpansion HsPatExpanded XXPatGhcTcCoPat ExpansionPat co_pat_ty co_pat_inner co_cpt_wrap EpAnnSumPatsumPatVbarsAftersumPatVbarsBefore sumPatParens hsRecFieldIdhsRecUpdFieldRdrhsRecUpdFieldIdhsRecUpdFieldOcc pprParendLPat pprConArgsmkPrefixConPatmkNilPat mkCharLitPat isBangedLPatlooksLazyPatBindisIrrefutableHsPat isSimplePat isBoringHsPatpatNeedsParensgParPatparenthesizePatcollectEvVarsPatscollectEvVarsPat$fOutputablePat$fOutputableHsFieldBind$fOutputableHsRecFields$fOutputableHsConPatTyArg$fOutputableHsPatExpansion$fDataHsPatExpansion$fDataEpAnnSumPat HsRuleAnnra_rest ra_tmanns ra_tyannsHsRuleRnXViaStrategyPs DataDeclRntcdFVs tcdDataCuskpartitionBindsAndSigs emptyRdrGroup emptyRnGrouphsGroupTopLevelFixitySigs appendGroupstyFamInstDeclNametyFamInstDeclLName tyClDeclLNamecountTyClDeclstcdName hsDeclHasCuskpp_vanilla_decl_headpprTyClDeclFlavourfamilyDeclLNamefamilyDeclNamefamResultKindSignatureresultVariableNamederivStrategyNamestandaloneKindSigName getConNamesgetRecConArgs_maybehsConDeclThetappDataDefnHeaderpprTyFamInstDeclpprDataFamInstFlavourpprHsFamInstLHSinstDeclDataFamInstsnewOrDataToFlavour anyLConIsGadtfoldDerivStrategymapDerivStrategyflattenRuleDeclspprFullRuleNameroleAnnotDeclName$fOutputableRoleAnnotDecl$fOutputableAnnDecl$fOutputableWarnDecl$fOutputableWarnDecls$fOutputableRuleBndr$fOutputableRuleDecl$fOutputableRuleDecls$fOutputableForeignExport$fOutputableForeignImport$fOutputableForeignDecl$fOutputableDefaultDecl$fOutputableDerivStrategy$fOutputableDerivDecl$fOutputableNewOrData$fOutputableInstDecl$fOutputableClsInstDecl$fOutputableDataFamInstDecl$fOutputableTyFamInstDecl$fOutputableConDecl$fOutputableStandaloneKindSig$fOutputableHsDataDefn$fOutputableDerivClauseTys$fOutputableHsDerivingClause$fOutputableFamilyDecl$fOutputableFunDep$fOutputableTyClGroup$fOutputableTyClDecl$fOutputableFamilyInfo$fOutputableSpliceDecoration$fOutputableSpliceDecl$fOutputableHsGroup$fOutputableHsDecl$fOutputableDocDecl$fOutputableXViaStrategyPs$fDataHsRuleAnn $fEqHsRuleAnn$fDataHsRuleRn$fDataDataDeclRnPendingTcSplicePendingRnSpliceUntypedSpliceFlavourUntypedExpSpliceUntypedPatSpliceUntypedTypeSpliceUntypedDeclSplice DelayedSplice XBindStmtTc xbstc_failOpxbstc_boundResultMultxbstc_boundResultType xbstc_bindOp XBindStmtRn xbsrn_failOp xbsrn_bindOp RecStmtTc recS_ret_ty recS_rec_retsrecS_later_rets recS_bind_tyGrhsAnnga_sepga_vbar MatchGroupTc mg_origin mg_res_ty mg_arg_tysCmdTopTcCmdSyntaxTable HsExpansion HsExpanded XXExprGhcTcWrapExpr ExpansionExpr ConLikeTcHsTick HsBinTickAnnsIf aiElseSemi aiThenSemiaiElseaiThenaiIf AnnProjectionapCloseapOpen AnnFieldLabelafDotAnnExplicitSumaesClose aesBarsAfter aesBarsBeforeaesOpenHsRecUpdParentEpAnnUnboundVar hsUnboundHolehsUnboundBackquotes EpAnnHsCasehsCaseAnnsRest hsCaseAnnOf hsCaseAnnCase HsBracketTc hsb_spliceshsb_wraphsb_ty hsb_quoteHsWrap SyntaxExprTcNoSyntaxExprTc syn_res_wrap syn_arg_wrapssyn_expr SyntaxExprRnNoSyntaxExprRn SyntaxExprGhc PostTcTable PostTcExprTcRecUpdParent tcRecUpdConstcRecUpdLabelstcRecUpdParentRnRecUpdParent rnRecUpdConsrnRecUpdLabelsnoExpr noSyntaxExpr mkSyntaxExprmkRnSyntaxExpr tupArgPresent isQuietHsExprpprBinds ppr_lexprppr_exprppr_infix_exprppr_infix_expr_rnppr_infix_expr_tcppr_appspprDebugParendExprpprParendLExprhsExprNeedsParensgHsParparenthesizeHsExprstripParensLHsExprstripParensHsExprisAtomicHsExprpprLCmdpprCmd isQuietHsCmdppr_lcmdppr_cmd pprCmdArgisEmptyMatchGroupisSingletonMatchGroupmatchGroupArity hsLMatchPats pprMatchespprMatchpprGRHSspprGRHSpp_rhspprStmt pprBindStmtpprArgpprTransformStmt pprTransStmtpprBypprDo pprArrowExprppr_module_name_prefix ppr_do_stmtspprComppprQualspprPendingSplice ppr_quasi ppr_splice thBrackets thTyBracketsppr_with_pending_tc_splices pp_dotdotlamCaseKeywordpprExternalSrcLoc pprHsArrTypematchContextErrStringmatchArrowContextErrStringmatchDoContextErrStringpprMatchInCtxt pprStmtInCtxtmatchSeparatorpprMatchContextpprMatchContextNounpprMatchContextNounspprArrowMatchContextNounpprArrowMatchContextNounspprAStmtContextpprStmtContext pprStmtCatpprAHsDoFlavourpprHsDoFlavourprependQualifiedpprFieldLabelStringspprPrefixFastString$fWrapXRecGhcPassa$fOutputableDotFieldOcc!$fOutputableBndrFieldLabelStrings$fOutputableFieldLabelStrings$fOutputableHsStmtContext$fOutputableHsArrowMatchContext$fOutputableLamCaseVariant$fOutputableHsMatchContext$fOutputableArithSeqInfo$fOutputableHsQuote$fOutputableApplicativeArg$fOutputableStmtLR$fOutputableParStmtBlock$fOutputableMatch$fOutputableHsCmdTop$fOutputableHsCmd$fOutputableHsPragE$fOutputableHsExpr$fOutputableSyntaxExprRn$fOutputableSyntaxExprTc$fOutputableHsExpansion$fOutputableXXExprGhcTc$fOutputableGrhsAnn$fDataThModFinalizers$fDataDelayedSplice$fOutputablePendingRnSplice$fOutputablePendingTcSplice$fDataUntypedSpliceFlavour $fDataGrhsAnn$fDataMatchGroupTc$fDataHsExpansion $fDataAnnsIf$fDataAnnProjection$fDataAnnFieldLabel$fDataAnnExplicitSum$fDataEpAnnUnboundVar$fDataEpAnnHsCase $fDataHsWrapLConsWithFields consFieldsconsWithFieldIndices TyDeclBinderstyDeclConsWithFields tyDeclOpSigs tyDeclATstyDeclMainBinder CollectPass collectXXPatcollectXXHsBindsLRcollectXSplicePat CollectFlagCollNoDictBindersCollWithDictBindersmkHsPar mkSimpleMatchunguardedGRHSs unguardedRHS mkMatchGroupmkLamCaseMatchGroup mkLocatedListmkHsApp mkHsAppWithmkHsApps mkHsAppsWith mkHsAppType mkHsAppTypesmkHsLammkHsLams mkHsCaseAlt nlHsTyApp nlHsTyAppsmkLHsParmkParPatnlParPat mkRecStmt mkHsIntegralmkHsFractional mkHsIsStringmkHsDo mkHsDoAnnsmkHsComp mkHsCompAnnsmkHsIf mkHsCmdIfmkNPat mkNPlusKPatemptyTransStmtmkTransformStmtmkTransformByStmtmkGroupUsingStmtmkGroupByUsingStmt mkLastStmt mkBodyStmt mkPsBindStmt mkRnBindStmt mkTcBindStmt unitRecStmtTc emptyRecStmtemptyRecStmtNameemptyRecStmtId mkLetStmt mkHsOpApp mkHsString mkHsStringFSmkHsStringPrimLitmkHsCharPrimLit mkConLikeTcnlHsVarnl_HsVar nlHsDataConnlHsLit nlHsIntLitnlVarPatnlLitPatnlHsAppnlHsSyntaxAppsnlHsApps nlHsVarApps nlConVarPatnlConVarPatName nlInfixConPatnlConPat nlConPatNamenlNullaryConPat nlWildConPat nlWildPat nlWildPatNamenlHsDo nlHsOpAppnlHsLamnlHsParnlHsIfnlHsCasenlList nlHsAppTy nlHsTyVar nlHsFunTy nlHsParTy nlHsTyConApp nlHsAppKindTymkLHsTupleExpr mkLHsVarTuple nlTuplePat missingTupArgmkBigLHsVarTup mkBigLHsTupmkBigLHsVarPatTupmkBigLHsPatTuphsTypeToHsSigTypehsTypeToHsSigWcType mkHsSigEnv mkClassOpSigs mkLHsWrapmkHsWrap mkHsWrapCo mkHsWrapCoR mkLHsWrapCo mkHsCmdWrap mkLHsCmdWrap mkHsWrapPat mkHsWrapPatCo mkHsDictLet mkFunBind mkTopFunBind mkHsVarBind mkVarBind mkPatSynBindisInfixFunBindspanHsLocaLBindsmkSimpleGeneratedFunBindmkPrefixFunRhsmkMatchisUnliftedHsBindisUnliftedHsBindsisBangedHsBindcollectLocalBinderscollectHsIdBinderscollectHsValBinderscollectHsBindBinderscollectHsBindsBinderscollectHsBindListBinderscollectMethodBinderscollectLStmtsBinderscollectStmtsBinderscollectLStmtBinderscollectStmtBinderscollectPatBinderscollectPatsBindershsGroupBindershsTyClForeignBindershsLTyClDeclBindershsForeignDeclsBindershsPatSynSelectorsgetPatSynBindshsDataFamInstBinderslStmtsImplicitshsValBindsImplicits lPatImplicits$fCollectPassGhcPass$fDataXViaStrategyPs$fDataXXPatGhcTc$fDataXXExprGhcTc$fEqIE$fEqIE0$fEqIE1$fDataIE $fDataIE0 $fDataIE1$fDataImportDecl$fDataImportDecl0$fDataImportDecl1$fDataAmbiguousFieldOcc$fDataAmbiguousFieldOcc0$fDataAmbiguousFieldOcc1$fDataFieldOcc$fDataFieldOcc0$fDataFieldOcc1$fDataConDeclField$fDataConDeclField0$fDataConDeclField1 $fDataHsArg $fDataHsArg0 $fDataHsArg1$fDataHsScaled$fDataHsScaled0$fDataHsScaled1 $fDataHsArrow$fDataHsArrow0$fDataHsArrow1$fDataHsLinearArrowTokens$fDataHsLinearArrowTokens0$fDataHsLinearArrowTokens1 $fDataHsTyLit$fDataHsTyLit0$fDataHsTyLit1 $fDataHsType $fDataHsType0 $fDataHsType1$fDataHsTyVarBndr$fDataHsTyVarBndr0$fDataHsTyVarBndr1$fDataHsForAllTelescope$fDataHsForAllTelescope0$fDataHsForAllTelescope1$fDataHsPatSigType$fDataHsPatSigType0$fDataHsPatSigType1$fDataHsWildCardBndrs$fDataHsWildCardBndrs0$fDataHsWildCardBndrs1$fDataHsSigType$fDataHsSigType0$fDataHsSigType1$fDataHsOuterTyVarBndrs$fDataHsOuterTyVarBndrs0$fDataHsOuterTyVarBndrs1$fDataLHsQTyVars$fDataLHsQTyVars0$fDataLHsQTyVars1$fDataHsBndrVis$fDataHsBndrVis0$fDataHsBndrVis1$fDataHsRecFields$fDataHsRecFields0$fDataHsRecFields1$fDataHsFieldBind$fDataHsConPatTyArg$fDataHsConPatTyArg0$fDataHsConPatTyArg1$fDataConPatTc $fDataPat $fDataPat0 $fDataPat1$fDataOverLitTc$fDataOverLitRn$fDataHsOverLit$fDataHsOverLit0$fDataHsOverLit1 $fDataHsLit $fDataHsLit0 $fDataHsLit1$fDataXBindStmtTc$fDataXBindStmtRn$fDataSyntaxExprTc$fDataSyntaxExprRn$fDataPendingTcSplice$fDataPendingRnSplice$fDataCmdTopTc$fDataArithSeqInfo$fDataArithSeqInfo0$fDataArithSeqInfo1$fDataHsBracketTc $fDataHsQuote$fDataHsQuote0$fDataHsQuote1$fDataHsUntypedSpliceResult$fDataHsUntypedSplice$fDataHsUntypedSplice0$fDataHsUntypedSplice1$fDataHsMatchContext$fDataHsMatchContext0$fDataHsMatchContext1$fDataHsDoFlavour$fDataHsArrowMatchContext$fDataHsStmtContext$fDataHsStmtContext0$fDataHsStmtContext1$fDataApplicativeArg$fDataApplicativeArg0$fDataApplicativeArg1$fDataParStmtBlock$fDataParStmtBlock0$fDataParStmtBlock1$fDataParStmtBlock2$fDataRecStmtTc $fDataStmtLR $fDataStmtLR0 $fDataStmtLR1 $fDataStmtLR2 $fDataStmtLR3 $fDataStmtLR4 $fDataStmtLR5 $fDataStmtLR6 $fDataGRHS $fDataGRHS0 $fDataGRHS1 $fDataGRHS2 $fDataGRHS3 $fDataGRHS4 $fDataGRHSs $fDataGRHSs0 $fDataGRHSs1 $fDataGRHSs2 $fDataGRHSs3 $fDataGRHSs4 $fDataMatch $fDataMatch0 $fDataMatch1 $fDataMatch2 $fDataMatch3 $fDataMatch4$fDataMatchGroup$fDataMatchGroup0$fDataMatchGroup1$fDataMatchGroup2$fDataMatchGroup3$fDataMatchGroup4$fDataHsCmdTop$fDataHsCmdTop0$fDataHsCmdTop1 $fDataHsCmd $fDataHsCmd0 $fDataHsCmd1$fDataHsTupArg$fDataHsTupArg0$fDataHsTupArg1 $fDataHsExpr $fDataHsExpr0 $fDataHsExpr1 $fDataHsPragE$fDataHsPragE0$fDataHsPragE1$fDataDotFieldOcc$fDataDotFieldOcc0$fDataDotFieldOcc1$fDataLHsRecUpdFields$fDataLHsRecUpdFields0$fDataLHsRecUpdFields1$fDataHsRecUpdParent$fDataHsRecUpdParent0$fDataHsRecUpdParent1$fDataFieldLabelStrings$fDataFieldLabelStrings0$fDataFieldLabelStrings1$fDataRoleAnnotDecl$fDataRoleAnnotDecl0$fDataRoleAnnotDecl1 $fDataAnnDecl$fDataAnnDecl0$fDataAnnDecl1$fDataAnnProvenance$fDataAnnProvenance0$fDataAnnProvenance1$fDataWarnDecl$fDataWarnDecl0$fDataWarnDecl1$fDataWarnDecls$fDataWarnDecls0$fDataWarnDecls1$fDataRuleBndr$fDataRuleBndr0$fDataRuleBndr1$fDataRuleDecl$fDataRuleDecl0$fDataRuleDecl1$fDataRuleDecls$fDataRuleDecls0$fDataRuleDecls1$fDataForeignExport$fDataForeignExport0$fDataForeignExport1$fDataForeignImport$fDataForeignImport0$fDataForeignImport1$fDataForeignDecl$fDataForeignDecl0$fDataForeignDecl1$fDataDefaultDecl$fDataDefaultDecl0$fDataDefaultDecl1$fDataDerivStrategy$fDataDerivStrategy0$fDataDerivStrategy1$fDataDerivDecl$fDataDerivDecl0$fDataDerivDecl1$fDataInstDecl$fDataInstDecl0$fDataInstDecl1$fDataClsInstDecl$fDataClsInstDecl0$fDataClsInstDecl1 $fDataFamEqn $fDataFamEqn0 $fDataFamEqn1$fDataDataFamInstDecl$fDataDataFamInstDecl0$fDataDataFamInstDecl1$fDataTyFamInstDecl$fDataTyFamInstDecl0$fDataTyFamInstDecl1$fDataHsConDeclGADTDetails$fDataHsConDeclGADTDetails0$fDataHsConDeclGADTDetails1 $fDataConDecl$fDataConDecl0$fDataConDecl1$fDataDerivClauseTys$fDataDerivClauseTys0$fDataDerivClauseTys1$fDataHsDerivingClause$fDataHsDerivingClause0$fDataHsDerivingClause1$fDataHsDataDefn$fDataHsDataDefn0$fDataHsDataDefn1$fDataFamilyInfo$fDataFamilyInfo0$fDataFamilyInfo1$fDataInjectivityAnn$fDataInjectivityAnn0$fDataInjectivityAnn1$fDataFamilyDecl$fDataFamilyDecl0$fDataFamilyDecl1$fDataFamilyResultSig$fDataFamilyResultSig0$fDataFamilyResultSig1$fDataTyClGroup$fDataTyClGroup0$fDataTyClGroup1 $fDataFunDep $fDataFunDep0 $fDataFunDep1$fDataTyClDecl$fDataTyClDecl0$fDataTyClDecl1$fDataSpliceDecl$fDataSpliceDecl0$fDataSpliceDecl1 $fDataHsGroup$fDataHsGroup0$fDataHsGroup1 $fDataHsDecl $fDataHsDecl0 $fDataHsDecl1$fDataHsPatSynDir$fDataHsPatSynDir0$fDataHsPatSynDir1$fDataStandaloneKindSig$fDataStandaloneKindSig0$fDataStandaloneKindSig1$fDataFixitySig$fDataFixitySig0$fDataFixitySig1 $fDataSig $fDataSig0 $fDataSig1 $fDataIPBind $fDataIPBind0 $fDataIPBind1$fDataHsIPBinds$fDataHsIPBinds0$fDataHsIPBinds1$fDataPatSynBind$fDataPatSynBind0$fDataPatSynBind1$fDataPatSynBind2$fDataRecordPatSynField$fDataRecordPatSynField0$fDataRecordPatSynField1$fDataABExport$fDataAbsBinds$fDataHsBindLR$fDataHsBindLR0$fDataHsBindLR1$fDataHsBindLR2$fDataNHsValBindsLR$fDataNHsValBindsLR0$fDataNHsValBindsLR1$fDataHsValBindsLR$fDataHsValBindsLR0$fDataHsValBindsLR1$fDataHsValBindsLR2$fDataHsLocalBindsLR$fDataHsLocalBindsLR0$fDataHsLocalBindsLR1$fDataHsLocalBindsLR2HsParsedModule hpm_src_files hpm_module AnnsModuleam_eofam_declsam_main XModulePshsmodHaddockModHeaderhsmodDeprecMessage hsmodLayouthsmodAnn$fOutputableHsModule$fDataXModulePs$fDataAnnsModule$fEqAnnsModule$fDataHsModule InstanceWhatBuiltinEqInstanceBuiltinTypeableInstanceBuiltinInstance LocalInstanceTopLevInstance iw_safe_over iw_dfun_idSafeOverlappingExpectedFunTyOriginExpectedFunTySyntaxOpExpectedFunTyViewPatExpectedFunTyArgExpectedFunTyMatchesExpectedFunTyLamExpectedFunTyLamCaseFRRArrowContext ArrowCmdResTy ArrowCmdAppArrowCmdArrApp ArrowCmdCaseArrowFunArgPos ArgPosInvis ArgPosVis RepPolyFunRepPolyWiredInRepPolyDataCon StmtOriginMonadComprehension DoNotation FRRRecordConFRRRecordUpdate FRRBinder FRRPatBind FRRPatSynArgFRRCaseFRRDataConPatArgFRRNoBindingResArg FRRTupleArgFRRTupleSection FRRUnboxedSum FRRBodyStmtFRRBodyStmtGuard FRRBindStmtFRRBindStmtGuardFRRArrowFRRExpectedFunTy frr_contextfrr_type NakedScFlagNakedSc NotNakedSc GivenOrigin GivenSCOrigin OccurrenceOfOccurrenceOfRecSel AppOriginSpecPragOrigin TypeEqOrigin KindEqOrigin IPOccOriginOverLabelOrigin LiteralOrigin NegateOriginArithSeqOriginAssocFamPatOrigin SectionOriginHasFieldOrigin TupleOrigin ExprSigOrigin PatSigOrigin PatOriginProvCtxtOriginRecordUpdOrigin ViewPatOriginScOriginDerivClauseOrigin DerivOriginDCDerivOriginCoerceStandAloneDerivOrigin DefaultOriginDoOrigin DoPatOrigin MCompOriginMCompPatOrigin ProcOriginArrowCmdOrigin AnnOrigin FunDepOrigin1 FunDepOrigin2 InjTFOrigin1ExprHoleOriginTypeHoleOriginPatCheckOrigin ListOriginIfThenElseOrigin BracketOrigin StaticOriginImpedanceMatchingShouldn'tHappenOriginInstProvidedOriginNonLinearPatternOriginUsageEnvironmentOfCycleBreakerOrigin FRROriginWantedSuperclassOriginInstanceSigOriginAmbiguityCheckOrigin uo_visibleuo_thing uo_expected uo_actual TyVarBndrsHsTyVarBndrsRn TypedThing HsTypeRnThing TypeThing HsExprRnThing NameThingSigSkol SigTypeSkol ForAllSkol DerivSkolInstSkol FamInstSkolPatSkolIPSkolRuleSkol InferSkol BracketSkolUnifyForAllSkol TyConSkol DataConSkol ReifySkolRuntimeUnkSkolArrowReboundIfSkolUnkSkolReportRedundantConstraintsNoRRCWantRRC UserTypeCtxt FunSigCtxt InfSigCtxt ExprSigCtxt KindSigCtxtStandaloneKindSigCtxt TypeAppCtxt ConArgCtxt TySynCtxt PatSynCtxt PatSigCtxt RuleSigCtxt ForSigCtxtDefaultDeclCtxt InstDeclCtxt SpecInstCtxt GenSigCtxtGhciCtxt ClassSCCtxt SigmaCtxt DataTyCtxtDerivClauseCtxtTyVarBndrKindCtxt DataKindCtxt TySynKindCtxtTyFamResKindCtxtreportRedundantConstraintsredundantConstraintsSpanpprUserTypeCtxt isSigMaybe unkSkolAnon mkSkolemInfo getSkolemInfo mkClsInstSkol pprSkolInfopprSigSkolInfoisVisibleOrigintoInvisibleOrigin isGivenOriginisWantedWantedFunDepOriginisWantedSuperclassOrigin lexprCtOrigin exprCtOriginmatchesCtOrigin grhssCtOrigin pprCtOriginisPushCallStackOrigincallStackOriginFSpprFixedRuntimeRepContextpprFRRArrowContextpprExpectedFunTyOriginpprExpectedFunTyHerald$fOutputableTypedThing$fOutputableTyVarBndrs$fOutputableNakedScFlag$fOutputableStmtOrigin$fOutputableRepPolyFun$fOutputableFRRArrowContext"$fOutputableFixedRuntimeRepContext!$fOutputableFixedRuntimeRepOrigin$fOutputableCtOrigin$fOutputableSkolemInfoAnon$fOutputableSkolemInfo$fUniquableSkolemInfo$fOutputableInstanceWhat$fEqUserTypeCtxt$fEqReportRedundantConstraints ClosedTypeIdRhsNames IsGroupClosed IdBindingInfo NotLetBound ClosedLet NonClosedLet TcTyThingAGlobalATcIdATyVarATcTyCon APromotionErrtct_infotct_id TcPatSynInfoTPSIpatsig_body_ty patsig_provpatsig_ex_bndrs patsig_reqpatsig_univ_bndrspatsig_implicit_bndrs patsig_name TcIdSigInstTISI sig_inst_wcx sig_inst_wcs sig_inst_tausig_inst_thetasig_inst_skols sig_inst_sig TcIdSigInfo CompleteSig PartialSigsig_locsig_ctxtsig_bndr psig_hs_ty psig_name TcSigInfoTcIdSig TcPatSynSigTcSigFunTcBinderTcIdBndrTcIdBndr_ExpTypeTcTvBndrTcId TcBinderStack isPartialSighasCompleteSigtcTyThingTyCon_maybepprTcTyThingCategorytcTyThingCategory$fHasOccNameTcBinder$fOutputableTcBinder$fOutputableTcIdSigInfo$fOutputableTcIdSigInst$fOutputableTcPatSynInfo$fOutputableTcSigInfo$fOutputableIdBindingInfo$fOutputableTcTyThingZonkMZonkM'runZonkM ZonkGblEnvzge_binder_stack zge_tc_level zge_src_spanzge_name_ppr_ctx zge_logger getZonkGblEnv traceZonk$fMonadIOZonkM $fMonadZonkM$fApplicativeZonkM$fFunctorZonkMErrCtxtCtLocEnvctl_rdrctl_in_gen_code ctl_tclvl ctl_bndrsctl_locctl_ctxtgetCtLocEnvLocgetCtLocEnvLvlsetCtLocEnvLvlsetCtLocRealLocsetCtLocEnvLocctLocEnvInGeneratedCodeCtLoc ctl_depth ctl_t_or_kctl_env ctl_origin SubGoalDepth CtFlavourRole CtFlavourGivenWanted RewriterSet CtEvidenceCtGivenCtWantedctev_loc ctev_evar ctev_predctev_rewriters ctev_destTcEvDest EvVarDestHoleDest UserGiven HasGivenEqs NoGivenEqs LocalGivenEqs MaybeGivenEqs ImplicStatus IC_Solved IC_InsolubleIC_BadTelescope IC_Unsolvedics_dead ImplicationImplic ic_status ic_need_outer ic_need_inneric_binds ic_wantedic_envic_warn_inaccessible ic_given_eqsic_givenic_skolsic_infoic_tclvlWantedConstraintsWC wc_errorswc_impl wc_simpleCheckTyEqProblemCheckTyEqResult CtIrredReasonIrredShapeReasonNonCanonicalReason ReprEqReasonShapeMismatchReasonAbstractTyConReason PluginReasonNotConcreteReasonNonConcreteTyConNonConcretisableTyVar ContainsCastContainsForallContainsCoercionTyNotConcreteErrorNCE_FRR nce_reasonsnce_frr_originnce_locHoleSortExprHoleTypeHoleConstraintHoleHolehole_lochole_tyhole_occ hole_sort DelayedErrorDE_HoleDE_NotConcreteQCInstQCI qci_pend_scqci_predqci_tvsqci_evIrredCt ir_reasonir_evCanEqLHSTyVarLHSTyFamLHSEqCt eq_eq_releq_rhseq_lhseq_evDictCt di_pend_scdi_tysdi_clsdi_evCtCDictCan CIrredCanCEqCan CQuantCan CNonCanonical ExpansionFuelCtsXi doNotExpand consumeFuel pendingFuelassertFuelPreconditionassertFuelPreconditionStrictdictCtEvidence eqCtEvidenceeqCtLHS mkIrredCtirredCtEvidence irredCtPred ctIrredCtisInsolubleReasoncteOKcterHasNoProblemcteImpredicative cteTypeFamilycteInsolubleOccurscteSolubleOccurscteCoercionHole cteConcretecteSkolemEscape cteProblemimpredicativeProbleminsolubleOccursProblemsolubleOccursProblemcterHasProblemcterHasOnlyProblemcterHasOnlyProblemscterRemoveProblemcterHasOccursCheckcterClearOccursCheckcterSetOccursCheckSoluble cterFromKindmkNonCanonicalmkGivens ctEvidence updCtEvidencectLocctOriginctPred ctRewritersctEvIdwantedEvId_maybemkTcEqPredLikeEv ctFlavourctEqRelcanEqLHS_maybecanTyFamEqLHS_maybe canEqLHSType canEqLHSKind eqCanEqLHS tyCoVarsOfCttyCoVarsOfCtEvtyCoVarsOfCtListtyCoVarsOfCtEvList tyCoVarsOfCtstyCoVarsOfCtsListtyCoVarsOfCtEvsList tyCoVarsOfWCtyCoVarsOfWCList isGivenLoc isWantedCt isGivenCtgetUserTypeErrorMsgisTopLevelUserTypeErrorcontainsUserTypeErrorisUnsatisfiableCt_maybeisPendingScDictisPendingScDictCtpendingScDict_maybependingScInst_maybesuperClassesMightHelpgetPendingWantedScssingleCtandCts listToCtsctsEltsconsCtssnocCts extendCtsListemptyCts isEmptyCtsctsPredsemptyWC mkSimpleWC mkImplicWC isEmptyWC isSolvedWCandWCunionsWC addSimples addImplics addInsolsaddHolesaddNotConcreteErroraddDelayedErrorsdropMisleadingisSolvedStatusisInsolubleStatusinsolubleImplicnonDefaultableTyVarsOfWC insolubleWCinsolubleWantedCtinsolubleIrredCt insolubleCtisOutOfScopeHoleimplicationPrototypegetUserGivensFromImplicscheckTelescopeSkolcheckImplicationInvariants pprEvVars pprEvVarThetapprEvVarWithTypewrapTypectEvPredctEvLoc ctEvOrigin ctEvEqRelctEvRolectEvTerm ctEvRewritersctEvExpr ctEvCoercionctEvEvId ctEvUniquetcEvDestUnique setCtEvLocarisesFromGivenssetCtEvPredTypeisWantedisGivenemptyRewriterSetunitRewriterSetunionRewriterSetisEmptyRewriterSet addRewriterrewriterSetFromCts ctEvFlavourctEvFlavourRoleeqCtFlavourRole ctFlavourRole eqCanRewriteeqCanRewriteFRinitialSubGoalDepthbumpSubGoalDepthmaxSubGoalDepthsubGoalDepthExceeded mkKindEqLocadjustCtLocTyConBinder adjustCtLoc toKindLoctoInvisibleLoc mkGivenLocctLocEnv ctLocLevel ctLocDepth ctLocOrigin ctLocSpanctLocTypeOrKind_maybe setCtLocSpanbumpCtLocDepthsetCtLocOriginupdateCtLocOrigin setCtLocEnvpprCtLoc$fOutputableCanEqLHS$fOutputableHoleSort$fOutputableCheckTyEqResult$fMonoidCheckTyEqResult$fSemigroupCheckTyEqResult$fOutputableCtIrredReason$fOutputableCheckTyEqProblem$fEqCheckTyEqProblem$fOutputableImplicStatus$fMonoidHasGivenEqs$fSemigroupHasGivenEqs$fOutputableHasGivenEqs$fOutputableTcEvDest$fOutputableCtFlavour$fOutputableCtEvidence$fOutputableQCInst$fOutputableEqCt$fOutputableCt$fOutputableIrredCt$fOutputableDictCt$fOutputableNotConcreteError$fOutputableHole$fOutputableDelayedError$fOutputableImplication$fOutputableWantedConstraints$fEqSubGoalDepth$fOrdSubGoalDepth$fOutputableSubGoalDepth $fEqCtFlavour$fOutputableRewriterSet$fSemigroupRewriterSet$fMonoidRewriterSet$fEqHasGivenEqsThLevel PendingStuffRnPendingUntypedRnPendingTyped TcPendingThStageSplice RunSpliceCompBrackSpliceOrBracketIsSplice IsBracket SpliceTypeTypedUntypedtopStage topAnnStagetopSpliceStageimpLevel outerLevelthLevel$fOutputableThStageHoleFit RawHoleFithfDoc hfMatcheshfWraphfRefLvlhfTypehfCandhfIdHoleFitCandidateIdHFCand NameHFCand GreHFCand TypedHoleth_hole th_implicsth_relevant_ctspprHoleFitCandhfIsLcl$fOutputableTypedHole$fOrdHoleFitCandidate$fHasOccNameHoleFitCandidate$fNamedThingHoleFitCandidate$fOutputableHoleFitCandidate$fEqHoleFitCandidate $fOrdHoleFit$fOutputableHoleFit $fEqHoleFitWhetherHasFamInstWhetherHasOrphans IfaceExport ModIface_ModIface mi_src_hash mi_ext_fields mi_final_extsmi_docsmi_complete_matches mi_trust_pkgmi_trustmi_hpcmi_rules mi_fam_instsmi_insts mi_globalsmi_extra_declsmi_declsmi_annsmi_warns mi_fixities mi_used_th mi_exports mi_usagesmi_deps mi_hsc_src mi_sig_of mi_moduleIfaceBackendExts IfaceDeclExtsModIfaceBackend mi_hash_fn mi_fix_fnmi_export_warn_fnmi_decl_warn_fnmi_orphan_hash mi_exp_hash mi_finsts mi_orphanmi_plugin_hash mi_hpc_hash mi_opt_hash mi_flag_hash mi_mod_hash mi_iface_hashPartialModIfacemi_bootmi_mnwibmi_fixmi_semantic_module mi_free_holesrenameFreeHolesemptyPartialModIfaceemptyFullModIfacemkIfaceHashCacheemptyIfaceHashCache forceModIface$fNFDataModIfaceBackend$fNFDataModIface_$fBinaryModIface_TypeCannotBeMarshaledReason NotADataTypeNewtypeDataConNotInScopeUnliftedFFITypesNeededNotABoxedMarshalableTyConForeignLabelNotAPtrNotSimpleUnliftedTypeNotBoxedKindAnyIllegalForeignTypeReasonTypeCannotBeMarshaledForeignDynNotPtrSafeHaskellMustBeInIOIOResultExpectedUnexpectedNestedForallLinearTypesNotAllowedOneArgExpectedAtLeastOneArgExpectedUnrepresentableTypeDescrLinearInvisibleArgumentCoercionsInTypesLookupTHInstNameErrReasonNoMatchesFoundCouldNotDetermineInstance SplicePhaseSplicePhase_RunSplicePhase_CompileAndLinkTHDeclDescriptor InstanceDecl WhereClause LetBinding LetExpressionClssDecl IllegalDeclsIllegalFamDeclsConversionFailReasonIllegalOccNameSumAltArityExceeded IllegalSumAltIllegalSumArity MalformedTypeIllegalLastStatementKindSigsOnlyAllowedOnGADTsIllegalDeclarationCannotMixGADTConsWith98ConsEmptyStmtListInDoBlockNonVarInInfixExprMultiWayIfWithoutAltsCasesExprWithoutAltsImplicitParamsWithOtherBindsInvalidCCallImpent RecGadtNoCons GadtNoConsInvalidTypeInstanceHeaderInvalidTyFamInstLHSInvalidImplicitParamBindingDefaultDataInstDeclFunBindLacksEquationsThingBeingConvertedConvDecConvExpConvPatConvTypeRunSpliceFailReasonConversionFailSpliceFailReasonSpliceThrewExceptionRunSpliceFailure TypedTHErrorSplicePolymorphicLocalVarTypedTHWithPolyTypeAddTopDeclsErrorInvalidTopDecl&AddTopDeclsUnexpectedDeclarationSpliceAddTopDeclsRunSpliceFailure THReifyErrorCannotReifyInstanceCannotReifyOutOfScopeThingCannotReifyThingNotInTypeEnvNoRolesAssociatedWithThingCannotRepresentType THNameError NonExactNameQuotedNameWrongStage THSyntaxErrorIllegalTHQuotesIllegalTHSpliceNestedTHBracketsMismatchedSpliceTypeBadImplicitSpliceTHErrorTHSpliceFailedIllegalStaticFormInSpliceFailedToLookupThInstNameAddInvalidCorePluginAddDocToNonLocalDefnReportCustomQuasiErrorFailedCoverageCondition FailedICC FailedLICCalsoFailedLICCCoverageProblemnot_covered_liberalnot_covered_invis_vis_tvsnot_covered_fundep_instnot_covered_fundepIllegalHasFieldInstance IllegalHasFieldInstanceNotATyCon"IllegalHasFieldInstanceFamilyTyCon$IllegalHasFieldInstanceTyConHasField%IllegalHasFieldInstanceTyConHasFieldsIllegalClassInstanceReasonIllegalInstanceHeadIllegalSpecialClassInstance%IllegalInstanceFailsCoverageConditionIllegalInstanceReasonIllegalClassInstanceIllegalFamilyInstance"IllegalFamilyApplicationInInstanceNonCanonical_MonadNonCanonical_PureNonCanonical_ThenANonCanonical_ReturnNonCanonical_ThenMNonCanonical_MonoidNonCanonical_SappendNonCanonical_MappendNonCanonicalDefinitionNonCanonicalMonoidNonCanonicalMonadUnusedNameProvUnusedNameTopDeclUnusedNameImportedUnusedNameTypePatternUnusedNameMatchUnusedNameLocalBindNestedForallsContextsInNFC_Specialize NFC_ViaTypeNFC_GadtConSigNFC_InstanceHead!NFC_StandaloneDerivedInstanceHeadNFC_DerivedClassTypeUnusedImportReasonUnusedImportNoneUnusedImportSomeUnusedImportNameUnusedImportNameRecFieldUnusedImportNameRegularImportLookupReasonImportLookupBadImportLookupQualifiedImportLookupIllegalImportLookupAmbiguousDodgyImportsReasonDodgyImportsEmptyParentDodgyImportsHidingTySynCycleTyConsHsTyVarBndrExistentialFlagHsTypeOrSigTypeTypeApplicationTypeApplicationInPatternTyFamsDisabledReasonTyFamsDisabledFamilyTyFamsDisabledInstanceDisabledClassExtensionMultiParamDisabledFunDepsDisabledConstrainedClassMethodsDisabledRoleValidationFailedReasonTyVarRoleMismatchTyVarMissingInEnvBadCoercionRoleSuperclassCycleDetail SCD_HeadTyVar SCD_HeadTyFamSCD_SuperclassSuperclassCycleMkSuperclassCyclereasonsdefiniteclsBadFieldAnnotationReasonLazyFieldsDisabledUnpackWithoutStrictnessBackpackUnpackAbstractTypePatSynInvalidRhsReasonPatSynNotInvertiblePatSynUnboundVarUninferrableTyVarCtxUninfTyCtx_ClassContextUninfTyCtx_DataContextUninfTyCtx_ProvidedContextUninfTyCtx_TyFamRhsUninfTyCtx_TySynRhsUninfTyCtx_SigStageCheckReasonStageCheckInstanceStageCheckSpliceWrongThingSortWrongThingTypeWrongThingDataConWrongThingPatSynWrongThingConLikeWrongThingClassWrongThingTyConWrongThingAxiomHsigShapeMismatchReasonHsigShapeSortMismatchHsigShapeNotUnifiableRuleLhsErrReasonUnboundVariableIllegalExpressionNonStandardGuardsDeclSort ClassDeclSortInstanceDeclSortUnexpectedStatementEmptyStatementGroupErrReasonEmptyStmtsGroupInParallelComp"EmptyStmtsGroupInTransformListCompEmptyStmtsGroupInDoNotationEmptyStmtsGroupInArrowNotationMatchArgBadMatchesMatchArgMatchesmatchArgBadMatchesmatchArgFirstMatchMatchArgsContext EquationArgs PatternArgs HsDocContext TypeSigCtxStandaloneKindSigCtxPatCtxSpecInstSigCtxDefaultDeclCtxForeignDeclCtx DerivDeclCtxRuleCtx TyDataCtxTySynCtx TyFamilyCtx FamPatCtx ConDeclCtx ClassDeclCtxExprWithTySigCtxTypBrCtx HsTypeCtx HsTypePatCtxGHCiCtx SpliceTypeCtxClassInstanceCtx GenericCtxFixedRuntimeRepErrorInfoFRR_Infofrr_info_not_concretefrr_info_originRelevantBindings ranOutOfFuelrelevantBindingNamesAndTys ValidHoleFitsrefinementFitsholeFitsFitsMbSuppressedFitsfitsSuppressedfitsPotentialInstancesunifiersmatches ImportError MissingModuleModulesDoNotExport CoercibleMsg UnknownRolesTyConIsAbstractOutOfScopeNewtypeConstructor HoleErrorOutOfScopeHoleHoleFitDispConfigHFDC showMatchesshowProvshowType showWrapVarsshowWrapNotInScopeError NotInScopeNotARecordField NoExactNameSameNameMissingBindingNoTopLevelBindingUnknownSubordinate NotInScopeTc BadImportKindBadImportNotExportedBadImportAvailTyConBadImportAvailDataCon BadImportNotExportedSubordinatesBadImportAvailVar WhenMatchingExpectedActualInfoExpectedActual!ExpectedActualAfterTySynExpansion ea_actual ea_expectedea_expanded_actualea_expanded_expected AmbiguityInfo AmbiguityNonInjectiveTyFam ambig_tyvarslead_with_ambig_msg SameOccInfoSameOcc sameOcc_rhs sameOcc_lhssameOcc_same_pkg TyVarInfootherTythisTyVarIsUntouchable thisTyVar CND_ExtraCannotUnifyVariableReasonCannotUnifyWithPolytype OccursCheck SkolemEscapeDifferentTyVarsRepresentationalEqoccursCheckAmbiguityInfosoccursCheckInterestingTyVars MismatchEANoEAEA mismatch_mbEA MismatchMsg BasicMismatch KindMismatchTypeEqMismatchCouldNotDeducemismatch_mb_same_occmismatch_whenMatching mismatch_ty2 mismatch_ty1 mismatch_item mismatch_eakmismatch_actualkmismatch_expectedkmismatch_whatteq_mb_same_occteq_mismatch_whatteq_mismatch_actualteq_mismatch_expectedteq_mismatch_ty2teq_mismatch_ty1teq_mismatch_itemteq_mismatch_ppr_explicit_kinds cnd_extra cnd_wantedcnd_user_givensTcSolverReportMsg BadTelescope UserTypeErrorUnsatisfiableErrorReportHoleErrorCannotUnifyVariableMismatchFixedRuntimeRepErrorBlockedEqualityExpectingMoreArgumentsUnboundImplicitParamsAmbiguityPreventsSolvingCtCannotResolveInstanceOverlappingInstances UnsafeOverlapcannotUnifyReason mismatchMsgmismatchCoercibleInfomismatchAmbiguityInfomismatchTyVarInfocannotResolve_relevant_bindingscannotResolve_suggestionscannotResolve_importErrorscannotResolve_candidatescannotResolve_unifierscannotResolve_itemoverlappingInstances_unifiersoverlappingInstances_matchesoverlappingInstances_itemunsafeOverlappedunsafeOverlap_matchunsafeOverlap_item ErrorItemEI ei_suppress ei_m_reasonei_loc ei_flavour ei_evdestei_predSolverReportErrCtxtCEC cec_suppresscec_expand_synscec_warn_redundantcec_out_of_scope_holescec_type_holescec_expr_holescec_defer_type_errors cec_bindscec_tidycec_enclSolverReportWithCtxt reportContent reportContextSolverReportSupplementarySupplementaryBindingsSupplementaryHoleFitsSupplementaryCts SolverReportsr_hintssr_supplementarysr_important_msgBootDataConMismatchMismatchedDataConNamesMismatchedDataConFixitiesMismatchedDataConBangsMismatchedDataConFieldLabelsMismatchedDataConTypesBootDataMismatchMismatchedNewtypeVsDataMismatchedConstructorsMismatchedDatatypeContextsBootATMismatchMismatchedTyConATMismatchedATDefaultTypeBootMethodMismatchMismatchedMethodNamesMismatchedMethodTypesMismatchedDefaultMethodsBootClassMismatchMismatchedMethods MismatchedATsMismatchedFunDepsMismatchedSuperclassesMismatchedMinimalPragmasBootAxiomBranchMismatchMismatchedAxiomBindersMismatchedAxiomLHSMismatchedAxiomRHSBootListMismatchesBootListMismatchMismatchedLengthMismatchedThingBootTyConMismatchTyConKindMismatchTyConRoleMismatchTyConSynonymMismatchTyConFlavourMismatchTyConAxiomMismatchTyConInjectivityMismatchTyConMismatchedDataTyConMismatchedClassesTyConsVeryDifferentSynAbstractDataSynAbstractDataErrorSynAbsDataTySynNotNullarySynAbstractDataInvalidRHSBootMismatchWhatBootMismatchedIdTypesBootMismatchedTyConsMissingBootThingMissingBootDefinitionMissingBootExport BootMismatchMissingBootInstanceBadReexportedBootThing BadBootDecls BootBindsPs BootBindsRnBootInstanceSigs BootFamInstBootSpliceDeclsBootForeignDeclsBootDefaultDecls BootRuleDeclsExported IsNotExported IsExportedMissingSignatureMissingTopLevelBindingSigMissingPatSynSigMissingTyConKindSig!AssociatedTyNotParamOverLastTyVar$YesAssociatedTyNotParamOverLastTyVar#NoAssociatedTyNotParamOverLastTyVarAssociatedTyLastVarInKindYesAssocTyLastVarInKindNoAssocTyLastVarInKindHasAssociatedDataFamInsts YesHasAdfs NoHasAdfsAssocDefaultBadArgsAssocDefaultNonTyVarArgAssocDefaultDuplicateTyVarsInvalidAssocDefaultAssocDefaultNotAssocAssocMultipleDefaultsInvalidAssocInstanceAssocInstanceMissingAssocInstanceNotInAClassAssocNotInThisClassAssocNoClassTyVarAssocTyVarsDontMatch InvalidAssocInvalidFamInstQTvReasonInvalidFamInstQTvDodgyInvalidFamInstQTvNotBoundInPatsInvalidFamInstQTvNotUsedInRHSInvalidFamInstQTv ifiqtv_reasonifiqtv_user_writtenifiqtvIllegalFamilyInstanceReasonNotAFamilyTyConNotAnOpenFamilyTyConFamilyCategoryMismatchFamilyArityMismatchTyFamNameMismatchFamInstRHSOutOfScopeTyVarsFamInstLHSUnusedBoundTyVarsIllegalInstanceHeadReasonInstHeadAbstractClassInstHeadNonClassInstHeadTySynArgsInstHeadNonTyVarArgsInstHeadMultiParam"SoleExtraConstraintWildcardAllowed%SoleExtraConstraintWildcardNotAllowedBadAnonWildcardContextWildcardNotLastInConstraint!ExtraConstraintWildcardNotAllowedWildcardsNotAllowedAtAll HasWildcardYesHasWildcard NoHasWildcardDeriveGenericsErrReason*DerivErrGenericsMustNotHaveDatatypeContext%DerivErrGenericsMustNotHaveExoticArgs$DerivErrGenericsMustBeVanillaDataCon&DerivErrGenericsMustHaveSomeTypeParams'DerivErrGenericsMustNotHaveExistentialsDerivErrGenericsWrongArgKindDeriveInstanceBadConstructorDerivErrBadConExistentialDerivErrBadConCovariantDerivErrBadConFunTypesDerivErrBadConWrongArgDerivErrBadConIsGADTDerivErrBadConHasExistentialsDerivErrBadConHasConstraintsDerivErrBadConHasHigherRankTypeDeriveInstanceErrReasonDerivErrNotWellKindedDerivErrSafeHaskellGenericInstDerivErrDerivingViaWrongKindDerivErrNoEtaReduceDerivErrBootFileFoundDerivErrDataConsNotAllInScopeDerivErrGNDUsedOnDataDerivErrNullaryClassesDerivErrLastArgMustBeAppDerivErrNoFamilyInstanceDerivErrNotStockDeriveableDerivErrHasAssociatedDatatypes!DerivErrNewtypeNonDeriveableClassDerivErrCannotEtaReduceEnoughDerivErrOnlyAnyClassDeriveableDerivErrNotDeriveableDerivErrNotAClassDerivErrNoConstructorsDerivErrLangExtRequiredDerivErrDunnoHowToDeriveForTypeDerivErrMustBeEnumType%DerivErrMustHaveExactlyOneConstructorDerivErrMustHaveSomeParametersDerivErrMustNotHaveClassContextDerivErrBadConstructorDerivErrGenericsDerivErrEnumOrProductDeriveAnyClassEnabledYesDeriveAnyClassEnabledNoDeriveAnyClassEnabledUsingGeneralizedNewtypeDerivingYesGeneralizedNewtypeDerivingNoGeneralizedNewtypeDerivingSuggestPartialTypeSignaturesYesSuggestPartialTypeSignaturesNoSuggestPartialTypeSignaturesNotClosedReasonNotLetBoundReason NotTypeClosed NotClosedAllowedDataResKind AnyTYPEKind AnyBoxedKind LiftedKindDataSort DataDeclSortDataInstanceSortDataFamilySortSuggestUnliftedTypesSuggestUnliftedNewtypesSuggestUnliftedDatatypesSuggestUndecidableInstancesYesSuggestUndecidableInstacesNoSuggestUndecidableInstacesHasKinds YesHasKinds NoHasKindsInjectivityErrReasonInjErrRhsBareTyVarInjErrRhsCannotBeATypeFamInjErrRhsOverlapInjErrCannotInferFromRhsIllegalNewtypeReasonDoesNotHaveSingleField IsNonLinearIsGADTHasConstructorContextHasExistentialTyVarHasStrictnessAnnotationFixedRuntimeRepProvenanceFixedRuntimeRepDataConFieldFixedRuntimeRepPatSynSigArgFixedRuntimeRepPatSynSigResShadowedNameProvenanceShadowedNameProvenanceLocalShadowedNameProvenanceGlobalBadRecordUpdateReasonNoConstructorHasAllFieldsMultiplePossibleParentsInvalidTyConParentconflictingFieldsRecordFieldPartRecordFieldDeclRecordFieldConstructorRecordFieldPatternRecordFieldUpdate ArgOrResultResultUnsupportedCallConventionStdCallConvUnsupportedPrimCallConvUnsupportedJavaScriptCallConvUnsupportedExpectedBackendsTypeDataForbidsTypeDataForbidsDatatypeContextsTypeDataForbidsLabelledFields$TypeDataForbidsStrictnessAnnotationsTypeDataForbidsDerivingClauses ZonkerMessageZonkerCannotDefaultConcrete TcRnMessageTcRnUnknownMessageTcRnInterfaceErrorTcRnMessageWithInfoTcRnWithHsDocContextTcRnSolverReportTcRnSolverDepthErrorTcRnRedundantConstraintsTcRnInaccessibleCodeTcRnInaccessibleCoAxBranch"TcRnTypeDoesNotHaveFixedRuntimeRepTcRnImplicitLiftTcRnUnusedPatternBindsTcRnUnusedQuantifiedTypeVarTcRnDodgyImportsTcRnDodgyExportsTcRnMissingImportListTcRnUnsafeDueToPluginTcRnModMissingRealSrcSpanTcRnIdNotExportedFromModuleSigTcRnIdNotExportedFromLocalSigTcRnShadowedNameTcRnInvalidWarningCategoryTcRnDuplicateWarningDeclsTcRnSimplifierTooManyIterationsTcRnIllegalPatSynDeclTcRnLinearPatSynTcRnEmptyRecordUpdateTcRnIllegalFieldPunningTcRnIllegalWildcardsInRecordTcRnIllegalWildcardInTypeTcRnDuplicateFieldNameTcRnIllegalViewPatternTcRnCharLiteralOutOfRangeTcRnNegativeNumTypeLiteral!TcRnIllegalWildcardsInConstructorTcRnIgnoringAnnotationsTcRnAnnotationInSafeHaskellTcRnInvalidTypeApplicationTcRnTagToEnumMissingValArgTcRnTagToEnumUnspecifiedResTyTcRnTagToEnumResTyNotAnEnumTcRnTagToEnumResTyTypeData(TcRnArrowIfThenElsePredDependsOnResultTyTcRnIllegalHsBootOrSigDeclTcRnBootMismatchTcRnRecursivePatternSynonymTcRnPartialTypeSigTyVarMismatchTcRnPartialTypeSigBadQuantifierTcRnMissingSignatureTcRnPolymorphicBinderMissingSigTcRnOverloadedSigTcRnTupleConstraintInstTcRnUserTypeErrorTcRnConstraintInKind TcRnUnboxedTupleOrSumTypeFuncArgTcRnLinearFuncInKindTcRnForAllEscapeErrorTcRnVDQInTermTypeTcRnBadQuantPredHeadTcRnIllegalTupleConstraintTcRnNonTypeVarArgInConstraintTcRnIllegalImplicitParam"TcRnIllegalConstraintSynonymOfKindTcRnOversaturatedVisibleKindArgTcRnForAllRankErrTcRnSimplifiableConstraintTcRnArityMismatchTcRnIllegalInstanceTcRnMonomorphicBindingsTcRnFunDepConflictTcRnDupInstanceDeclsTcRnConflictingFamInstDeclsTcRnFamInstNotInjectiveTcRnBangOnUnliftedTypeTcRnLazyBangOnUnliftedTypeTcRnMultipleDefaultDeclarationsTcRnBadDefaultTypeTcRnPatSynBundledWithNonDataConTcRnPatSynBundledWithWrongTypeTcRnDupeModuleExportTcRnExportedModNotImportedTcRnNullExportedModuleTcRnMissingExportListTcRnExportHiddenComponentsTcRnDuplicateExportTcRnExportedParentChildMismatchTcRnConflictingExportsTcRnDuplicateFieldExportTcRnAmbiguousRecordUpdateTcRnMissingFieldsTcRnFieldUpdateInvalidTypeTcRnMissingStrictFieldsTcRnAmbiguousFieldInUpdateTcRnBadRecordUpdateTcRnStaticFormNotClosedTcRnUselessTypeableTcRnDerivingDefaultsTcRnNonUnaryTypeclassConstraintTcRnPartialTypeSignaturesTcRnCannotDeriveInstanceTcRnLazyGADTPatternTcRnArrowProcGADTPatternTcRnCapturedTermNameTcRnBindVarAlreadyInScopeTcRnBindMultipleVariablesTcRnTypeEqualityOutOfScope!TcRnTypeEqualityRequiresOperatorsTcRnIllegalTypeOperatorTcRnIllegalTypeOperatorDeclTcRnGADTMonoLocalBindsTcRnNotInScopeTcRnTermNameInTypeTcRnUntickedPromotedThingTcRnIllegalBuiltinSyntaxTcRnWarnDefaultingTcRnForeignImportPrimExtNotSetTcRnForeignImportPrimSafeAnn TcRnForeignFunctionImportAsValue TcRnFunPtrImportWithoutAmpersandTcRnIllegalForeignDeclBackendTcRnUnsupportedCallConvTcRnIllegalForeignTypeTcRnInvalidCIdentifierTcRnExpectedValueIdTcRnRecSelectorEscapedTyVarTcRnPatSynNotBidirectionalTcRnIllegalDerivingItemTcRnUnexpectedAnnotationTcRnIllegalRecordSyntaxTcRnInvalidVisibleKindArgumentTcRnTooManyBindersTcRnDifferentNamesForTyVarTcRnDisconnectedTyVarTcRnInvalidReturnKindTcRnUnexpectedKindVarTcRnIllegalKindTcRnClassKindNotConstraintTcRnUnpromotableThingTcRnMatchesHaveDiffNumArgsTcRnUnexpectedPatSigTypeTcRnIllegalKindSignatureTcRnDataKindsError!TcRnCannotBindScopedTyVarInPatSigTcRnCannotBindTyVarsInPatBindTcRnTooManyTyArgsInConPatternTcRnMultipleInlinePragmasTcRnUnexpectedPragmas!TcRnNonOverloadedSpecialisePragmaTcRnSpecialiseNotVisibleTcRnPragmaWarningTcRnDifferentExportWarningsTcRnIncompleteExportWarningsTcRnIllegalHsigDefaultMethodsTcRnHsigFixityMismatchTcRnHsigShapeMismatchTcRnHsigMissingModuleExportTcRnBadGenericMethodTcRnWarningMinimalDefIncompleteTcRnIllegalQuasiQuotes TcRnTHError&TcRnDefaultMethodForPragmaLacksBinding%TcRnIgnoreSpecialisePragmaOnDefMethodTcRnBadMethodErrTcRnIllegalNewtypeTcRnIllegalTypeDataTcRnTypeDataForbidsTcRnUnsatisfiedMinimalDefTcRnMisplacedInstSigTcRnNoRebindableSyntaxRecordDotTcRnNoFieldPunsRecordDotTcRnIllegalStaticExpression%TcRnListComprehensionDuplicateBindingTcRnEmptyStmtsGroupTcRnLastStmtNotExpr TcRnUnexpectedStatementInContextTcRnIllegalTupleSection$TcRnIllegalImplicitParameterBindingsTcRnSectionWithoutParenthesesTcRnBindingOfExistingNameTcRnMultipleFixityDeclsTcRnIllegalPatternSynonymDeclTcRnIllegalClassBindingTcRnOrphanCompletePragma TcRnEmptyCaseTcRnNonStdGuardsTcRnDuplicateSigDeclTcRnMisplacedSigDeclTcRnUnexpectedDefaultSigTcRnDuplicateMinimalSigTcRnIllegalInvisTyVarBndrTcRnInvalidInvisTyVarBndr TcRnDeprecatedInvisTyArgInConPatTcRnLoopySuperclassSolve$TcRnUnexpectedStandaloneDerivingDeclTcRnUnusedVariableInRuleDeclTcRnUnexpectedStandaloneKindSigTcRnIllegalRuleLhsTcRnDuplicateRoleAnnotTcRnDuplicateKindSigTcRnIllegalDerivStrategyTcRnIllegalMultipleDerivClausesTcRnNoDerivStratSpecifiedTcRnStupidThetaInGadt TcRnShadowedTyVarNameInFamResult TcRnIncorrectTyVarOnLhsOfInjCondTcRnUnknownTyVarsOnRhsOfInjCondTcRnLookupInstanceTcRnBadlyStagedTcRnStageRestrictionTcRnTyThingUsedWrongTcRnCannotDefaultKindVarTcRnUninferrableTyVarTcRnSkolemEscapeTcRnPatSynEscapedCoercionTcRnPatSynExistentialInResultTcRnPatSynArityMismatchTcRnPatSynInvalidRhsTcRnZonkerMessageTcRnTyFamDepsDisabledTcRnAbstractClosedTyFamDeclTcRnPartialFieldSelectorTcRnBadFieldAnnotationTcRnSuperclassCycleTcRnDefaultSigMismatchTcRnTyFamsDisabledTcRnBadTyConTelescopeTcRnTyFamResultDisabledTcRnRoleValidationFailed!TcRnCommonFieldResultTypeMismatchTcRnCommonFieldTypeMismatchTcRnClassExtensionDisabledTcRnDataConParentTypeMismatchTcRnGADTsDisabled%TcRnExistentialQuantificationDisabledTcRnGADTDataContextTcRnMultipleConForNewtypeTcRnKindSignaturesDisabledTcRnEmptyDataDeclsDisabledTcRnRoleMismatchTcRnRoleCountMismatchTcRnIllegalRoleAnnotationTcRnRoleAnnotationsDisabledTcRnIncoherentRolesTcRnPrecedenceParsingErrorTcRnSectionPrecedenceErrorTcRnTypeSynonymCycleTcRnSelfImportTcRnNoExplicitImportListTcRnSafeImportsDisabledTcRnDeprecatedModuleTcRnCompatUnqualifiedImportTcRnRedundantSourceImportTcRnImportLookupTcRnUnusedImportTcRnDuplicateDeclsTcRnPackageImportsDisabledTcRnIllegalDataConTcRnNestedForallsContextsTcRnRedundantRecordWildcardTcRnUnusedRecordWildcardTcRnUnusedNameTcRnQualifiedBinderTcRnTypeApplicationsDisabledTcRnInvalidRecordFieldTcRnTupleTooLargeTcRnCTupleTooLargeTcRnIllegalInferredTyVarsTcRnAmbiguousNameTcRnBindingNameConflictTcRnNonCanonicalDefinitionTcRnImplicitImportOfPreludeTcRnMissingMainTcRnGhciUnliftedBindTcRnGhciMonadLookupFailTcRnMissingRoleAnnotationTcRnPatersonCondFailureTcRnImplicitRhsQuantificationpragma_warning_defined_modpragma_warning_import_modpragma_warning_msgpragma_warning_occbadMethodErrMethodNamebadMethodErrClassNameTcRnMessageDetailedErrInfoerrInfoSupplementaryerrInfoContextTcRnMessageOptstcOptsIfaceOptstcOptsShowContextmkTcRnUnknownMessagepprFixedRuntimeRepProvenancehasKindssuggestUndecidableInstances ppDataSortsuggestPartialTypeSignaturesusingGeneralizedNewtypeDerivingderiveAnyClassEnabled hasWildcardhasAssociatedDataFamInstsassociatedTyLastVarInKind!associatedTyNotParamOverLastTyVarmissingBootThing getUserGivenserrorItemOriginerrorItemEqRelerrorItemCtLoc errorItemPreddiscardProvCtxtGivensmkBasicMismatchMsgmkPlainMismatchMsgmkTcRnNotInScopenoValidHoleFitspprRelevantBindings$fOutputableTypeDataForbids$fNamedThingInvalidFamInstQTv$fOutputableExported$fOutputableErrorItem$fOutputableHsTypeOrSigType&$fOutputableHsTyVarBndrExistentialFlag$fGenericTcRnMessage$fGenericTcRnMessageDetailed!$fGenericIllegalForeignTypeReason$$fGenericTypeCannotBeMarshaledReason$fGenericTHError$fGenericTHReifyError$fGenericSpliceFailReason$fGenericAddTopDeclsError$fGenericRunSpliceFailReason$fGenericConversionFailReason$fGenericTypedTHError$fGenericTHNameError$fGenericTHSyntaxError$fGenericIllegalInstanceReason#$fGenericIllegalClassInstanceReason $fGenericIllegalHasFieldInstance$fGenericNonCanonicalDefinition$fGenericUnusedImportReason$fGenericDodgyImportsReason$fGenericImportLookupReason$fGenericTypeApplication$fGenericTyFamsDisabledReason$fGenericDisabledClassExtension#$fGenericRoleValidationFailedReason!$fGenericBadFieldAnnotationReason$fGenericPatSynInvalidRhsReason $fGenericHsigShapeMismatchReason%$fGenericEmptyStatementGroupErrReason$fGenericSolverReportWithCtxt$fGenericTcSolverReportMsg"$fGenericCannotUnifyVariableReason$fGenericNotInScopeError$fGenericBadImportKind$fGenericMismatchMsg$fGenericWhenMatching$fGenericBootMismatch$fGenericBootMismatchWhat$fGenericMissingBootThing $fEqExported $fGenericDeriveInstanceErrReason%$fEqAssociatedTyNotParamOverLastTyVar$fEqAssociatedTyLastVarInKind$fEqHasAssociatedDataFamInsts$$fGenericIllegalFamilyInstanceReason$fGenericInvalidAssoc$fGenericInvalidAssocDefault$fGenericAssocDefaultBadArgs$fGenericInvalidAssocInstance"$fGenericIllegalInstanceHeadReason$fEqHasWildcard$fEqDeriveAnyClassEnabled#$fEqUsingGeneralizedNewtypeDeriving"$fShowSuggestPartialTypeSignatures $fEqSuggestPartialTypeSignatures!$fShowSuggestUndecidableInstances$fEqSuggestUndecidableInstances$fShowHasKinds $fEqHasKinds$fGenericIllegalNewtypeReason$fGenericBadRecordUpdateReason$fEqUnsupportedCallConvention$fGenericTypeDataForbids$fGenericZonkerMessage ArrowCtxt NoArrowCtxt ThBindEnv TcTypeEnv TcLclCtxttcl_envtcl_arrow_ctxt tcl_th_bndrs tcl_th_ctxttcl_rdr tcl_bndrs tcl_tclvltcl_in_gen_codetcl_ctxttcl_loctcl_errstcl_lie tcl_usage tcl_lcl_ctxtgetLclEnvThStagesetLclEnvThStagegetLclEnvThBndrsgetLclEnvArrowCtxtgetLclEnvTypeEnvsetLclEnvTypeEnvsetLclEnvTcLevelmodifyLclEnvTcLevelgetLclEnvTcLevel setLclEnvLoc getLclEnvLocgetLclEnvErrCtxtsetLclEnvErrCtxtaddLclEnvErrCtxtlclEnvInGeneratedCodegetLclEnvBinderStacksetLclEnvBinderStackgetLclEnvRdrEnvsetLclEnvRdrEnv modifyLclCtxtStatestategetsmodify evalState execStaterunState $fMonadState$fApplicativeState$fFunctorState Codensity runCodensity toCodensity fromCodensity$fMonadFixCodensity$fMonadIOCodensity$fMonadTransCodensity$fMonadCodensity$fApplicativeCodensity$fFunctorCodensityMetaHook MetaResult MetaRequestMetaEMetaPMetaTMetaDMetaAW metaRequestE metaRequestP metaRequestT metaRequestD metaRequestAWArchive ArchiveEntryfiledatafilesizefilemodefilegrpfileownfiletimefilenameafilter isBSDSymdef isGNUSymdefparseAr writeBSDAr writeGNUArloadArloadObj $fEqArchive $fShowArchive$fSemigroupArchive$fMonoidArchive$fEqArchiveEntry$fShowArchiveEntry runWithPipes FrameworkOptsfoCmdlineFrameworksfoFrameworkPathsLinkInfoPoint writePoint readPointfreshreprfindunion equivalent $fEqPointMaybeUB NothingUBJustUB fromMaybeUB apMaybeUB fmapMaybeUBmaybeUBStreamSYieldDoneEffectStreamrunStreamInternal runStreamyieldcollectconsume mapAccumL_$fMonadStreamS$fApplicativeStreamS$fMonadIOStream $fMonadStream$fApplicativeStream$fFunctorStream$fFunctorStreamSSmallMutableArray SmallArray newSmallArraywriteSmallArrayfreezeSmallArrayunsafeFreezeSmallArrayindexSmallArray listToArrayCondALWAYSEQQGEGEUGTTGULELEULTTLUNEGPOSCARRYOFLOPARITY NOTPARITYcondToUnsigned maybeFlipCondmaybeInvertCond$fEqCondRootedEdgePathdompdomdomTreepdomTreeidomipdompddfsrpddfsfromAdj fromEdgestoAdjtoEdgesparents ancestorsasGraphasTree$fApplicativeS$fMonadS $fFunctorSSLTSLESGESGTULTULEUGEUGTOLTOLEOGEOGTUOLTUOLEUOGEUOGTVSVCBlockBlockCOBlockCCBlockOCBNilBMiddleBCatBSnocBConsMaybeOJustONothingO IndexedCOCO ExtensibilityOpenClosed isEmptyBlock emptyBlock blockCons blockSnoc blockJoinHead blockJoinTail blockJoin blockAppend blockConcat firstNodelastNodeblockSplitHeadblockSplitTail blockSplit blockToList blockFromListreplaceFirstNodereplaceLastNodemapBlock mapBlock' mapBlock3'foldBlockNodesFfoldBlockNodesB3foldBlockNodesB$fFunctorMaybeO expandToolDir findTopDir tryFindTopDir findToolDiris_ident is_symbolis_anyis_spaceis_loweris_upperis_digit is_alphanumhexDigit octDecDigit is_decdigit is_hexdigit is_octdigit is_bindigitOrdGrunOrdGrDynGraph&matchmkGraphlabNodesmatchAnynoNodes nodeRangelabEdgesUDecompUContextGDecompDecompMContextContextAdjUPathLPathLPunLPathUEdgeLEdgeUNodeLNodeordersizeufoldgmapnmapemapnemapnodesedgestoEdgetoLEdge edgeLabelnewNodesgeleminsNodeinsEdgedelEdgedelLEdge delAllLEdgeinsNodesinsEdgesdelNodesdelEdgesbuildGrmkUGraph gfiltermap labnfilternfilter labfiltersubgraphcontextlab lneighborssucprelsuclpreoutinnoutdegindegdegnode'lab'labNode' neighbors' lneighbors'suc'pre'lsuc'lpre'out'inn'outdeg'indeg'deg'hasEdge hasNeighborhasLEdgehasNeighborAdjequalprettify prettyPrint $fOrdLPath $fEqLPath $fShowLPath$fEqGroupEdges $fOrdOrdGr $fEqOrdGr $fReadOrdGr $fShowOrdGr$fShowGroupEdges$fReadGroupEdgesUGrGr $fBifunctorGr $fFunctorGr $fDynGraphGr $fGraphGr$fReadGr$fShowGr$fEqGr$fEqFromListCounting$fShowFromListCounting$fReadFromListCounting $fGenericGr condNegate condUnsignedmemoiseUniqueFun nodeCoalescenodePreferencenodeExclusions nodeConflicts nodeColor nodeClassnodeIdgraphMapTriv initGraphgraphMapModifynewNodeUniqSDFM emptyUSDFM lookupUSDFM equateUSDFM addToUSDFM traverseUSDFM$fOutputableShared$fOutputableUniqSDFMStackMapstackMapAssignmentstackMapNextFreeSlot StackSlot emptyStackMapgetStackSlotFor getStackUseRegSubSubL16SubL8SubL8HRegRegClassClassG32ClassG16ClassG8ClassF64worstboundsqueese$fUniquableReg $fShowReg$fEqReg $fShowRegSub $fEnumRegSub $fOrdRegSub $fEqRegSub$fShowRegClass $fEqRegClass$fEnumRegClass classOfReg regsOfClassregNameregAlias SaneDouble unSaneDouble$fBinarySaneDouble$fShowSaneDouble$fOrdSaneDouble$fEqSaneDouble$fFractionalSaneDouble$fNumSaneDoubleIdentTxtIitxtJUOpNotOpBNotOpNegOpPlusOpNewOpTypeofOpDeleteOpVoidOpPreIncOp PostIncOpPreDecOp PostDecOpJOpEqOp StrictEqOpNeqOp StrictNeqOpGtOpGeOpLtOpLeOpAddOpSubOpMulOpDivOpModOp LeftShiftOp RightShiftOp ZRightShiftOpBAndOpBOrOpBXorOpLAndOpLOrOp InstanceofOpInOpJValJVarJListJDoubleJIntJStrJRegExJHashJFuncUnsatValValExprSelExprIdxExpr InfixExprUOpExprIfExprApplExpr UnsatExprJsLabelDeclStat ReturnStatIfStat WhileStatForStat ForInStat SwitchStatTryStat BlockStatApplStatUOpStat AssignStat UnsatBlock LabelStat BreakStat ContinueStatFuncStat IdentSupplyISrunIdentSupplyLAndLOrBNotBXorBAndBOrModDivMulSubAddNegateNotPostDecPreDecPostIncPreIncNewnewIdentSupplypseudoSaturateidentFS $fNFDataJOp $fNFDataJUOp$fShowIdentSupply$fOrdIdentSupply$fEqIdentSupply$fFunctorIdentSupply$fNFDataIdentSupply $fMonoidJStat$fSemigroupJStat $fEqJStat$fGenericJStat $fEqJExpr$fGenericJExpr$fEqJVal $fGenericJVal $fShowIdent $fEqIdent$fUniquableIdent $fShowJUOp$fEqJUOp $fOrdJUOp $fEnumJUOp $fDataJUOp $fGenericJUOp $fShowJOp$fEqJOp$fOrdJOp $fEnumJOp $fDataJOp $fGenericJOpToStattoStatToJExprtoJExprtoJExprFromListjLamjFunjVar jFunctionjForIn jForEachInjFor jForNoDecljTryCatchFinallyvarjStringdecljhEmptyjhSinglejhAdd jhFromListnullStat.==..===..!=..!==..>..>=..<..<=..||..&&..<<..>>..>>>.typeofif_ifSjwhenSifBlockSif10if01appappSreturnSloop loopBlockSpreIncrS postIncrSpreDecrS postDecrSoff64off32off16off8mask8mask16 signExtend8 signExtend16|=||=assignAllEqual assignAllassignAllReverseOrder declAssignAllnull_zero_one_two_three_ undefined_true_false_ returnStackmath_logmath_sinmath_cosmath_tanmath_exp math_acos math_asin math_atanmath_absmath_pow math_sqrt math_asinh math_acosh math_atanh math_sinh math_cosh math_tanh math_expm1 math_log1p math_fround$fFractionalJExpr $fNumJExpr$fToJExprTuple6$fToJExprTuple5$fToJExprTuple4$fToJExprTuple3$fToJExprTuple2$fToJExprFastString$fToJExprIdent $fToJExprChar$fToJExprInteger $fToJExprInt$fToJExprDouble $fToJExprMap$fToJExprUniqMap $fToJExprJVal $fToJExprBool $fToJExprUnit$fToJExprJExpr $fToJExprList $fToStatList $fToStatJExpr $fToStatList0 $fToStatJStat $fToSatFUN $fToSatList $fToSatJExpr $fToSatJStat $fToSatList0StgRetRet1Ret2Ret3Ret4Ret5Ret6Ret7Ret8Ret9Ret10SpecialStackStgRegR1R2R3R4R5R6R7R8R9R10R11R12R13R14R15R16R17R18R19R20R21R22R23R24R25R26R27R28R29R30R31R32R33R34R35R36R37R38R39R40R41R42R43R44R45R46R47R48R49R50R51R52R53R54R55R56R57R58R59R60R61R62R63R64R65R66R67R68R69R70R71R72R73R74R75R76R77R78R79R80R81R82R83R84R85R86R87R88R89R90R91R92R93R94R95R96R97R98R99R100R101R102R103R104R105R106R107R108R109R110R111R112R113R114R115R116R117R118R119R120R121R122R123R124R125R126R127R128spstackr1r2r3r4 jsRegToInt intToJSRegjsRegmaxRegminReg regsFromR1 regsFromR2 jsRegsFromR1 jsRegsFromR2$fToJExprStgReg$fToJExprSpecial$fToJExprStgRet $fEqStgRet $fOrdStgRet $fShowStgRet $fEnumStgRet$fBoundedStgRet $fIxStgRet $fShowSpecial $fEqSpecial $fEqStgReg $fOrdStgReg $fShowStgReg $fEnumStgReg$fBoundedStgReg $fIxStgRegAOpAssignOp AddAssignOp SubAssignOpUOpOpJLabelJStringSatIntJLAndJLOrJBNotJBXorJBAndJBOrJModJDivJMulJSubJAddJNegateJNotJPostDecJPreDecJPostIncJPreIncJNewjassignAllEqual jassignAlljvar $fNFDataOp $fNFDataUOp $fNFDataAOp $fShowAOp$fEqAOp$fOrdAOp $fEnumAOp $fDataAOp $fGenericAOp $fShowUOp$fEqUOp$fOrdUOp $fEnumUOp $fDataUOp $fGenericUOp$fShowOp$fEqOp$fOrdOp$fEnumOp$fDataOp $fGenericOpComposcomposJMGadtJMGIdJMGStatJMGExprJMGValJMacrojtoGADT jfromGADTidentsSidentsEidentsVcomposOp composOpM composOpM_ composOpFoldsatJStatsatJExpr $fJMacroJVal $fJMacroJExpr $fJMacroJStat $fJMacroIdent$fComposJMGadt jsOptimize$fMonoidBlockOpt$fSemigroupBlockOpt sectionType SettingsErrorSettingsError_MissingDataSettingsError_BadData initSettings exeFileName llvmFixupAsm RcIntegerRcFloatRcDouble$fOutputableRegClass$fUniquableRegClass RegVirtualRegRealRealReg RealRegSingle VirtualReg VirtualRegI VirtualRegHi VirtualRegF VirtualRegDRegNorenameVirtualRegclassOfVirtualReggetHiVirtualRegFromLogetHiVRegFromLoregNosOfRealReg realRegsAlias regSingle realRegSingle isRealReg takeRealReg isVirtualRegtakeVirtualRegliftPatchFnToRegReg$fOutputableVirtualReg$fUniquableVirtualReg$fOrdVirtualReg$fOutputableRealReg$fUniquableRealReg$fOutputableReg$fOrdReg $fEqRealReg $fShowRealReg $fOrdRealReg$fEqVirtualReg$fShowVirtualRegtoRegMap toVRegMap trivColorableJsRender<+?>$$$jcatjnestaddSemiJsToDocjsToDocRRenderJs renderJsI renderJsV renderJsE renderJsSrenderJsdefaultRenderJsjsToDocrenderPrefixJsrenderPrefixJs' pprStringLit interSemi braceNest hangBrace$fOutputableJVal$fOutputableJExpr$fJsRenderHLine$fJsRenderSDoc $fJsToDocList$fJsToDocList0$fJsToDocIdent $fJsToDocJVal$fJsToDocJExpr$fJsToDocJStatpretty optRenderJs StgLiftConfigc_liftLamsKnownc_liftLamsNonRecArgsc_liftLamsRecArgsc_targetProfile$fShowStgLiftConfig$fReadStgLiftConfig$fEqStgLiftConfig$fOrdStgLiftConfigBitmapmkBitmapintsToReverseBitmapmAX_SMALL_BITMAP_SIZE CmmConfigcmmSplitProcPointscmmDoCmmSwitchPlanscmmExternalDynamicRefscmmGenStackUnwindInstrcmmOptThreadSanitizer cmmOptSinkcmmOptElimCommonBlks cmmDoLintingcmmOptControlFlow cmmProfile cmmPlatformrunJSemAbstractSem$fOutputableJobResources dumpGraphdotGraph lookupNodegetNodeaddNodemodNode addConflict delConflict addConflicts addExclusion addExclusions addCoalesce delCoalesce addPreference coalesceGraph coalesceNodes freezeNodefreezeOneInGraphfreezeAllInGraph scanGraph validateGraphslurpNodeConflictCountsetColor colorGraph LlvmVersion llvmVersionNE LlvmConfig llvmPasses llvmTargets LlvmTarget lAttributeslCPU lDataLayout LlvmCgConfigllvmCgLlvmConfigllvmCgLlvmTarget llvmCgDoWarnllvmCgLlvmVersionllvmCgBmiVersionllvmCgSplitSectionllvmCgFillUndefWithGarbage llvmCgContextllvmCgPlatforminitLlvmConfigparseLlvmVersionsupportedLlvmVersionLowerBoundsupportedLlvmVersionUpperBoundllvmVersionSupportedllvmVersionStrllvmVersionList$fEqLlvmVersion$fOrdLlvmVersionLlvmConfigCacheinitLlvmConfigCachereadLlvmConfigCache popCntLabel pdepLabel pextLabel bSwapLabel bRevLabelclzLabelctzLabelword2FloatLabelatomicRMWLabel xchgLabel cmpxchgLabelatomicReadLabelatomicWriteLabel OrigNameCache NameCachensNames nsUniqChartakeUniqFromNameCachelookupOrigNameCacheextendOrigNameCache'extendOrigNameCache initNameCacheupdateNameCache'updateNameCache BreakInfobreakInfo_numberbreakInfo_moduleintBSmoduleGlobalSymbolmoduleExportsSymbol mkJsSymbolBS mkJsSymbolmkFreshJsSymbol mkRawSymbol NCGConfigncgEnableDeadCodeEliminationncgComputeUnwindingncgEnableShortcuttingncgCmmStaticPredncgDwarfSourceNotesncgExposeInternalSymbolsncgDwarfStripBlockInfoncgDwarfUnwindingsncgDwarfEnabledncgCfgWeightlessLayoutncgCfgBlockLayout ncgCfgWeightsncgDumpAsmConflictsncgDumpAsmStatsncgDumpRegAllocStages ncgBmiVersion ncgSseVersionncgDoConstantFolding ncgAsmLinting ncgRegsGraphncgRegsIterativencgSplitSectionsncgInlineThresholdMemsetncgInlineThresholdMemcpyncgPICncgExternalDynamicRefsncgProcAlignment ncgThisModule ncgAsmContext ncgPlatform ncgWordWidthncgSpillPreallocSizeplatformWordWidthKnotVars NoKnotVars kv_lookup kv_domain emptyKnotVarsknotVarsFromModuleEnv knotVarElemslookupKnotVarsknotVarsWithout$fOutputableKnotVars$fFunctorKnotVarsnoWarnLookupIdSubst extendInScope ZonkBndrT runZonkBndrT'ZonkTZonkT'runZonkT ZonkFlexi DefaultFlexiSkolemiseFlexiRuntimeUnkFlexiNoFlexiZonkEnvze_meta_tv_env ze_id_env ze_tv_envze_flexi runZonkBndrT noBinders don'tBind initZonkEnv getZonkEnvextendIdZonkEnvRec extendZonkEnvextendIdZonkEnvextendTyZonkEnv setZonkType$fOutputableZonkEnv$fMonadFixZonkT$fMonadTransZonkT$fMonadIOZonkT $fMonadZonkT$fApplicativeZonkT$fFunctorZonkT$fFunctorZonkBndrT$fApplicativeZonkBndrT$fMonadZonkBndrT$fMonadIOZonkBndrT$fMonadFixZonkBndrT Supernodefreshen PureSupernode superLabel mapLabelsNullCollapseVizunNCVVizCollapseMonadconsumeByInGraph splitGraphAt finalGraph MonadUniqSM liftUniqSMrunNullCollapsecollapseInductiveGraph$fMonadUniqSMNullCollapseViz$$fVizCollapseMonadNullCollapseVizgrs$fFunctorNullCollapseViz$fApplicativeNullCollapseViz$fMonadNullCollapseViz$fMonadUniqueNullCollapseVizGraph'GNilGUnitGManyNonLocal entryLabel successorsBody emptyBodybodyListbodyToBlockListaddBlockmapGraphmapGraphBlocks labelsDefinedrevPostorderFrom$fNonLocalBlockInfoTableProvMapprovInfoTables provClosureprovDCDCMap ClosureMapIpeSourceLocationemptyInfoTableProvMapTyConSetisEmptyTyConSet emptyTyConSet unitTyConSet mkTyConSetextendTyConSetListextendTyConSet unionTyConSetunionTyConSets minusTyConSet elemTyConSetdelFromTyConSetfilterTyConSetintersectTyConSetdisjointTyConSetdelListFromTyConSetintersectsTyConSetBinding getPrimTyOfprimTyDescCharppPrimTyConStgType BinderInfo BindsClosure BoringBinderSkeleton ClosureSkRhsSkAltSkBothSkNilSkbothSkaltSkrhsSkbinderInfoBndrbinderInfoOccursAsArg$fOutputableSkeleton$fOutputableBndrBinderInfo$fOutputableBinderInfo StgPprOpts stgSccEnabledOutputablePassStgOp StgPrimOp StgPrimCallOp StgFCallOp UpdateFlag ReEntrant Updatable SingleEntry XLetNoEscape XRhsClosureBinderPStgPassLiftLamsInferTaggedBinders InferTaggedCodeGenConstructorNumberNoNumberNumbered OutStgAlt OutStgRhs OutStgExpr OutStgArg OutStgBindingOutStgTopBindingInStgAltInStgRhs InStgExprInStgArg InStgBindingInStgTopBindingTgStgAltTgStgRhs TgStgExpr TgStgBindingTgStgTopBindingCgStgAltCgStgRhs CgStgExpr CgStgBindingCgStgTopBindingLlStgAltLlStgRhs LlStgExpr LlStgBindingLlStgTopBindingStgAltStgRhsStgExpr StgBinding StgTopBindingAltTypePolyAlt MultiValAltAlgAltPrimAlt GenStgAltalt_rhs alt_bndrsalt_conNoExtFieldSilent GenStgRhs StgRhsClosure StgRhsCon GenStgExprStgAppStgLit StgConAppStgOpAppStgCaseStgLetStgLetNoEscapeStgTickStgArg StgVarArg StgLitArg GenStgBinding StgNonRecStgRecGenStgTopBinding StgTopLiftedStgTopStringLit isDllConApp stgArgTypestgCaseBndrInScopenoExtFieldSilent stgRhsArity freeVarsOfRhs isUpdatablepanicStgPprOptsshortStgPprOptspprGenStgTopBindingpprGenStgTopBindings pprStgBindingpprStgTopBindingpprStgTopBindings pprStgArg pprStgExpr pprStgAlt pprStgRhs$fOutputableStgArg$fOutputableNoExtFieldSilent$fOutputableAltType$fOutputableConstructorNumber$fOutputableUpdateFlag$fOutputableStgOp$fOutputableGenStgRhs$fOutputableGenStgExpr$fOutputableGenStgBinding$fDataNoExtFieldSilent$fEqNoExtFieldSilent$fOrdNoExtFieldSilent ThreadStatusRunningBlockedFinishedDied ClosureTypePapCon Blackhole StackFrame ExprValData ExprResultExprCont ExprInlinePrimRes PrimInline PRPrimCall TypedExpr typex_expr typex_typ JSFFITypeInt8Type Int16Type Int32Type Int64Type Word8Type Word16Type Word32Type Word64Type DoubleType ByteArrayTypePtrTypeRefTypeExpFunresultargsisIOObjBlock oiFImports oiFExportsoiRawoiStatoiStaticoiClInfo oiSymbols LinkableUnit luForeignRefs luRequired luOtherDepsluPseudoIdDepsluIdDepsluOtherExports luIdExports luObjBlock ForeignJSRefforeignRefResultforeignRefArgsforeignRefCConvforeignRefSafetyforeignRefPatternforeignRefSrcSpan StaticLitBoolLitIntLitNullLit DoubleLit StringLitBinLitLabelLit StaticArg StaticObjArg StaticLitArg StaticConArg StaticUnboxedStaticUnboxedBoolStaticUnboxedIntStaticUnboxedDoubleStaticUnboxedStringStaticUnboxedStringOffset StaticVal StaticFun StaticThunk StaticData StaticList StaticInfosiCCsiValsiVarSlotId SlotUnknown GlobalIdCacheIdCache OtherSymbIdKeyIdTypeIdPlainIdEntry IdConEntryVarTypePtrVVoidVDoubleVIntVLongVAddrVObjVArrVCIStatic CIStaticRefs staticRefsCITypeCIFunCIThunkCIConCIPap CIBlackhole CIStackFramecitRegscitAritycitConstructorCILayoutCILayoutVariableCILayoutUnknown CILayoutFixed layoutSizelayoutCIRegs CIRegsUnknown ciRegsTypes ciRegsSkip ClosureInfociStaticciTypeciLayoutciNameciRegsciVar csContextcsProfcsTraceForeign csDebugAlloc csBoundsCheck csAssertRts csTraceRtscsPrettyRender csInlineAlloc csInlineEntercsInlineLoadRegscsInlineBlackhole csInlinePush GenGroupStateggsForeignRefsggsGlobalIdCache ggsExtraDeps ggsStackDepthggsStack ggsStaticggsClosureInfoggsToplevelStatsGenStategsGlobalgsGroup gsUnfloatedgsIdentsgsIdgsModule gsSettingsGctNumctJsNamethreadStatusNumthreadStatusJsName$fToJExprCIStatic$fToJExprVarType$fOrdOtherSymb$fToJExprStaticLit$fOutputableStaticLit$fOutputableStaticArg$fToJExprClosureType$fShowThreadStatus$fEqThreadStatus$fOrdThreadStatus$fEnumThreadStatus$fBoundedThreadStatus$fShowClosureType$fEqClosureType$fOrdClosureType$fEnumClosureType$fBoundedClosureType$fEqExprValData$fEqExprResult $fEqExpFun $fOrdExpFun $fShowExpFun$fShowJSFFIType$fOrdJSFFIType $fEqJSFFIType$fEnumJSFFIType$fEqStaticInfo$fShowStaticInfo $fEqStaticVal$fShowStaticVal $fEqStaticArg$fShowStaticArg $fEqStaticLit$fShowStaticLit$fEqStaticUnboxed$fOrdStaticUnboxed$fShowStaticUnboxed $fEqStackSlot$fOrdStackSlot $fEqOtherSymb $fEqIdKey $fOrdIdKey $fEnumIdType $fEqIdType $fOrdIdType$fEqClosureInfo$fShowClosureInfo $fEqCIRegs $fOrdCIRegs $fShowCIRegs $fEqCILayout $fOrdCILayout$fShowCILayout $fEqVarType $fOrdVarType $fEnumVarType$fBoundedVarType $fShowVarType $fEqCIStatic$fSemigroupCIStatic$fMonoidCIStatic$fShowCIStatic $fEqCIType $fOrdCIType $fShowCITypetraceRts assertRtsclName clTypeNamestackFrameSizewithRegs IndexEntry idxOffset idxSymbols ExportedFun funSymbol funModule BlockDeps blockFunDepsblockBlockDepsBlockRef block_ref_idx block_ref_mod BlockLocation ObjectFile ArchiveFileInMemoryLocatedBlockInfolbi_infolbi_loc BlockInfo bi_block_deps bi_exports bi_must_link bi_moduleBlockIdsObjectobjIndex objBlockInfoobjPayloadOffset objHandle objModuleName isGlobalBlock putObjectisJsObjectFilegetObjectHeader getObjectBody getObject readObjectreadObjectBlockInfogetObjectBlocksreadObjectBlocks$fBinaryStaticLit$fBinaryStaticArg$fBinaryStaticUnboxed$fBinaryStaticVal$fBinaryStaticInfo$fBinaryCIType$fBinaryCIStatic$fBinaryCILayout $fBinaryAOp $fBinaryUOp $fBinaryOp$fBinaryCIRegs$fBinaryVarType$fBinaryJSFFIType$fBinaryClosureInfo $fBinaryIdent $fBinaryJVal $fBinaryJExpr $fBinaryJStat$fBinaryExpFun$fBinaryForeignJSRef$fBinaryExportedFun$fOutputableExportedFun$fBinaryBlockDeps$fBinaryBlockInfo$fOutputableBlockInfo$fBinaryIndexEntry$fOutputableBlockLocation$fEqExportedFun$fOrdExportedFun $fEqBlockRef $fOrdBlockRef LinkedObjObjFile ObjLoadedLinkPlan lkp_extra_js lkp_archiveslkp_dep_blockslkp_block_info JSLinkConfig lcCombineAll lcForeignRefs lcNoStatslcNoRts lcNoHsMainlcNoJSExecutablesdefaultJSLinkConfig$fOutputableLinkPlan$fOutputableLinkedObj closureEntry_closureField1_closureField2_ closureMeta_ closureCC_ jTyObject closureTypeentryClosureTypeisObjectisThunkisThunk' isBlackholeisFunisFun'isPapisPap'isConisCon'conTagconTag' closureEntry closureMeta closureCC closureField1 closureField2funArity funArity'papArity funOrPapArityExprCtxctxLneFrameSizectxLneFrameVars ctxSrcSpanctxEvaluatedIds ctxTarget initExprCtx ctxSetTarget ctxSetTopctxAssertEvaluated ctxSetSrcSpanctxUpdateLneFramectxClearLneFramectxIsEvaluatedctxIsLneBindingctxIsLneLiveVarctxLneBindingStackSizectxLneShrinkStack GlobalOcc global_count global_id global_identrunG modifyGroup emitGlobal addDependency emitToplevel emitStaticemitClosureInfo emitForeign resetGroup assertRtsStat getSettingsgetGlobalIdCachesetGlobalIdCache globalOccsinitCostCentresemitCostCentreDeclemitCostCentreStackDeclenterCostCentreFunenterCostCentreThunksetCCpushRestoreCCS jCurrentCCSjCafCCS jSystemCCS profiling ifProfiling ifProfilingMprofStat costCentreLblcostCentreStackLblsingletonCCSLblccsVarJ mkUnarisedIds mkUnarisedIdmkStgAltTypeFromStgAlts bindersOfX bindersOfTopbindersOfTopBindsidArgsstripStgTicksTopstripStgTicksTopE showStgStats$fEqCounterType$fOrdCounterTypedepSortWithAnnotStgPgmannBindingFreeVars StgDebugOpts"stgDebug_distinctConstructorTablesstgDebug_infoTableMapcollectDebugInformationbcPrepWholeCoreBindingswcb_mod_location wcb_module wcb_bindingsHistoryhistoryEnclosingDeclshistoryBreakInfohistoryApStackResumeBindingsResumeresumeHistoryIx resumeHistory resumeCCS resumeDecl resumeSpanresumeBreakInfo resumeApStackresumeFinalIdsresumeBindings resumeContext resumeStmtIcGlobalRdrEnvigre_prompt_envigre_env ExecResult ExecComplete ExecBreakexecAllocation execResult breakInfo breakNames SingleStepRunToCompletionRunAndLogSteps ExecOptionsexecWrapexecLineNumberexecSourceFileexecSingleStepisStepCompleteMatches CompleteMatch cmResultTyCon cmConLikesvanillaCompleteMatchcompleteMatchAppliesAtType$fOutputableCompleteMatchtyThingToIfaceDeclcoAxiomToIfaceDecltoIfaceBooleanFormulatemplateHaskellNamesthSynthLibqqLib mkTHModulelibFunlibTcthFunthTcthClsthConthFldqqFld liftClassNamequoteClassName qTyConName nameTyConNamefieldExpTyConName patTyConNamefieldPatTyConName expTyConName decTyConName decsTyConName typeTyConNamematchTyConNameclauseTyConNamefunDepTyConName predTyConName codeTyConNameinjAnnTyConNameoverlapTyConNamemodNameTyConName returnQName bindQName sequenceQName newNameNameliftNameliftStringName mkNameName mkNameG_vName mkNameG_dNamemkNameG_tcNamemkNameG_fldName mkNameLName mkNameQName mkNameSName mkModNameName unTypeNameunTypeCodeNameunsafeCodeCoerceName liftTypedName charLName stringLName integerLName intPrimLName wordPrimLNamefloatPrimLNamedoublePrimLName rationalLNamestringPrimLName charPrimLNamelitPNamevarPNametupPNameunboxedTupPNameunboxedSumPNameconPName infixPName tildePName bangPNameasPName wildPNamerecPName listPNamesigPName viewPName fieldPatName matchName clauseNamevarENameconENamelitENameappEName appTypeEName infixEName infixAppName sectionLName sectionRNamelamEName lamCaseEName lamCasesENametupENameunboxedTupENameunboxedSumEName condEName multiIfENameletEName caseENamedoENamemdoEName compEName fromEName fromThenEName fromToENamefromThenToEName listENamesigEName recConEName recUpdEName staticENameunboundVarEName labelENameimplicitParamVarEName getFieldENameprojectionEName fieldExpName guardedBName normalBName normalGEName patGEName bindSNameletSName noBindSNameparSNamerecSNamefunDNamevalDName dataDName newtypeDName typeDataDName tySynDName classDNameinstanceWithOverlapDName standaloneDerivWithStrategyDNamesigDName kiSigDName defaultDNamedefaultSigDName forImpDName pragInlDNamepragOpaqueDName pragSpecDNamepragSpecInlDNamepragSpecInstDName pragRuleDNamepragCompleteDName pragAnnDName dataInstDNamenewtypeInstDNametySynInstDNameopenTypeFamilyDNameclosedTypeFamilyDNamedataFamilyDName infixLDName infixRDName infixNDNameroleAnnotDName patSynDNamepatSynSigDNameimplicitParamBindDNamecxtNamenoSourceUnpackednessNamesourceNoUnpackNamesourceUnpackNamenoSourceStrictnessNamesourceLazyNamesourceStrictName normalCNamerecCName infixCName forallCName gadtCName recGadtCNamebangName bangTypeNamevarBangTypeNameunidirPatSynNameimplBidirPatSynNameexplBidirPatSynNameprefixPatSynNameinfixPatSynNamerecordPatSynName forallTNameforallVisTNamevarTNameconTName tupleTNameunboxedTupleTNameunboxedSumTName arrowTName mulArrowTName listTNameappTName appKindTNamesigTName equalityTNamelitTName promotedTNamepromotedTupleTNamepromotedNilTNamepromotedConsTName wildCardTName infixTNameimplicitParamTName numTyLitName strTyLitName charTyLitName plainTVName kindedTVNameplainInvisTVNamekindedInvisTVNameplainBndrTVNamekindedBndrTVNamespecifiedSpecNameinferredSpecName bndrReqName bndrInvisName nominalRNamerepresentationalRName phantomRName inferRName starKNameconstraintKName noSigName kindSigName tyVarSigNameinjectivityAnnName cCallName stdCallName cApiCallName primCallNamejavaScriptCallName unsafeNamesafeNameinterruptibleName ruleVarNametypedRuleVarName funDepName tySynEqnNamevalueAnnotationNametypeAnnotationNamemoduleAnnotationNamederivClauseNamestockStrategyNameanyclassStrategyNamenewtypeStrategyNameviaStrategyName expQTyConNamedecsQTyConNametypeQTyConName patQTyConName stmtTyConName conTyConNamebangTypeTyConNamevarBangTypeTyConNameruleBndrTyConNametySynEqnTyConName roleTyConNamederivClauseTyConName kindTyConNametyVarBndrUnitTyConNametyVarBndrSpecTyConNametyVarBndrVisTyConNamederivStrategyTyConName quoteExpName quotePatName quoteDecName quoteTypeNamenoInlineDataConNameinlineDataConNameinlinableDataConNameconLikeDataConNamefunLikeDataConNameallPhasesDataConNamefromPhaseDataConNamebeforePhaseDataConNameoverlappableDataConNameoverlappingDataConNameoverlapsDataConNameincoherentDataConName liftClassKey quoteClassKey expTyConKey matchTyConKeyclauseTyConKey qTyConKey expQTyConKey patTyConKey stmtTyConKey conTyConKey typeQTyConKey typeTyConKey decTyConKeybangTypeTyConKeyvarBangTypeTyConKeyfieldExpTyConKeyfieldPatTyConKey nameTyConKey patQTyConKeyfunDepTyConKey predTyConKey predQTyConKeytyVarBndrUnitTyConKey decsQTyConKeyruleBndrTyConKeytySynEqnTyConKey roleTyConKeyinjAnnTyConKey kindTyConKeyoverlapTyConKeyderivClauseTyConKeyderivStrategyTyConKey decsTyConKeytyVarBndrSpecTyConKey codeTyConKeymodNameTyConKeytyVarBndrVisTyConKeynoInlineDataConKeyinlineDataConKeyinlinableDataConKeyconLikeDataConKeyfunLikeDataConKeyallPhasesDataConKeyfromPhaseDataConKeybeforePhaseDataConKeyoverlappableDataConKeyoverlappingDataConKeyoverlapsDataConKeyincoherentDataConKey returnQIdKey bindQIdKeysequenceQIdKey liftIdKey newNameIdKey mkNameIdKeymkNameG_vIdKeymkNameG_dIdKeymkNameG_tcIdKey mkNameLIdKey mkNameSIdKey unTypeIdKeyunTypeCodeIdKeyliftTypedIdKeymkModNameIdKeyunsafeCodeCoerceIdKey mkNameQIdKeymkNameG_fldIdKey charLIdKey stringLIdKey integerLIdKey intPrimLIdKeywordPrimLIdKeyfloatPrimLIdKeydoublePrimLIdKeyrationalLIdKeystringPrimLIdKeycharPrimLIdKeyliftStringIdKey litPIdKey varPIdKey tupPIdKeyunboxedTupPIdKeyunboxedSumPIdKey conPIdKey infixPIdKey tildePIdKey bangPIdKeyasPIdKey wildPIdKey recPIdKey listPIdKey sigPIdKey viewPIdKey fieldPatIdKey matchIdKey clauseIdKey varEIdKey conEIdKey litEIdKey appEIdKey appTypeEIdKey infixEIdKey infixAppIdKey sectionLIdKey sectionRIdKey lamEIdKey lamCaseEIdKeylamCasesEIdKey tupEIdKeyunboxedTupEIdKeyunboxedSumEIdKey condEIdKey multiIfEIdKey letEIdKey caseEIdKeydoEIdKey compEIdKey fromEIdKeyfromThenEIdKey fromToEIdKeyfromThenToEIdKey listEIdKey sigEIdKey recConEIdKey recUpdEIdKey staticEIdKeyunboundVarEIdKey labelEIdKeyimplicitParamVarEIdKey mdoEIdKeygetFieldEIdKeyprojectionEIdKey fieldExpIdKey guardedBIdKey normalBIdKey normalGEIdKey patGEIdKey bindSIdKey letSIdKey noBindSIdKey parSIdKey recSIdKey funDIdKey valDIdKey dataDIdKey newtypeDIdKey tySynDIdKey classDIdKeyinstanceWithOverlapDIdKeyinstanceDIdKey sigDIdKey forImpDIdKey pragInlDIdKeypragSpecDIdKeypragSpecInlDIdKeypragSpecInstDIdKeypragRuleDIdKey pragAnnDIdKeydataFamilyDIdKeyopenTypeFamilyDIdKeydataInstDIdKeynewtypeInstDIdKeytySynInstDIdKeyclosedTypeFamilyDIdKey infixLDIdKey infixRDIdKey infixNDIdKeyroleAnnotDIdKey!standaloneDerivWithStrategyDIdKeydefaultSigDIdKey patSynDIdKeypatSynSigDIdKeypragCompleteDIdKeyimplicitParamBindDIdKey kiSigDIdKey defaultDIdKeypragOpaqueDIdKeytypeDataDIdKeycxtIdKeynoSourceUnpackednessKeysourceNoUnpackKeysourceUnpackKeynoSourceStrictnessKey sourceLazyKeysourceStrictKey normalCIdKey recCIdKey infixCIdKey forallCIdKey gadtCIdKey recGadtCIdKey bangIdKeybangTKey varBangTKeyunidirPatSynIdKeyimplBidirPatSynIdKeyexplBidirPatSynIdKeyprefixPatSynIdKeyinfixPatSynIdKeyrecordPatSynIdKey forallTIdKeyforallVisTIdKey varTIdKey conTIdKey tupleTIdKeyunboxedTupleTIdKeyunboxedSumTIdKey arrowTIdKey listTIdKey appTIdKey appKindTIdKey sigTIdKeyequalityTIdKey litTIdKeypromotedTIdKeypromotedTupleTIdKeypromotedNilTIdKeypromotedConsTIdKeywildCardTIdKeyimplicitParamTIdKey infixTIdKey numTyLitIdKey strTyLitIdKeycharTyLitIdKey plainTVIdKey kindedTVIdKeyplainInvisTVIdKeykindedInvisTVIdKeyplainBndrTVIdKeykindedBndrTVIdKey nominalRIdKeyrepresentationalRIdKey phantomRIdKey inferRIdKey starKIdKeyconstraintKIdKey noSigIdKey kindSigIdKey tyVarSigIdKeyinjectivityAnnIdKey cCallIdKey stdCallIdKey cApiCallIdKey primCallIdKeyjavaScriptCallIdKey unsafeIdKey safeIdKeyinterruptibleIdKey funDepIdKeymulArrowTIdKey tySynEqnIdKey quoteExpKey quotePatKey quoteDecKey quoteTypeKey ruleVarIdKeytypedRuleVarIdKeyvalueAnnotationIdKeytypeAnnotationIdKeymoduleAnnotationIdKeyderivClauseIdKeystockStrategyIdKeyanyclassStrategyIdKeynewtypeStrategyIdKeyviaStrategyIdKeyspecifiedSpecKeyinferredSpecKey bndrReqKey bndrInvisKeylift_RDR liftTyped_RDRunsafeCodeCoerce_RDR mkNameG_dRDR mkNameG_vRDRmkNameG_fldRDRconE_RDRlitE_RDRappE_RDR infixApp_RDR stringL_RDR intPrimL_RDR wordPrimL_RDRfloatPrimL_RDRdoublePrimL_RDRstringPrimL_RDR charPrimL_RDRLiveVars SlotCountNoSlotOneSlotTwoSlotsassignToTypedExprsassignToExprCtx assignCoerce1isUnboxableCon isUnboxable slotCountvarSize varSlotCountisVoidisPtr isSingleVar isMultiVar isMatchabletyConVtidVttypeVtuTypeVt primRepVt typePrimRep' tyConPrimRep' kindPrimRep' primTypeVtargVt dataConType isBoolDataCon fixedLayout stackSlotType idPrimReps typePrimReps primRepSize assocPrimRepsassocIdPrimReps assocIdExprs mkArityTag toTypeList bindingRefsrhsRefsexprRefsaltRefsargRefs hasExport collectTopIds collectIds removeTick liveStaticliveVarsstgTopBindLive stgBindLivestgBindRhsLive stgRhsLive stgArgLive stgExprLive stgAltLivestgLetNoEscapeLivebindeesisUpdatableRhs stgLneLive' stgLneLivestgLneLiveExpr isInlineExprinspectInlineBindinginspectInlineRhsisInlineForeignCall isInlineApp$fOutputableSlotCount$fShowSlotCount $fEqSlotCount$fOrdSlotCountsinkPgm freshUnique freshIdentcachedIdentForId identForId identForIdN identsForIdidentForEntryIdidentForDataConEntryIdvarForId varForIdN varsForId varForEntryIdvarForDataConEntryIdidentForDataConWorkervarForDataConWorker declVarsForId resetSlots isolateSlotssetSlotsgetSlotsaddUnknownSlotsaddSlots dropSlotspushpush'adjSp'adjSpN'adjSpadjSpNpushNpushN'pushNNpushNN'pushOptimized' pushLneFramepopSkiploadSkippopSkipIpopNbhStats updateThunk updateThunk'genLit genStaticLitgenDependencyDataCopyCC DontCopyCCClosureclCCclMetaclField2clField1clEntryclosureInfoStatclosure conClosure newClosure assignClosure copyClosure mkClosurejsClosureCount dataFieldName allocData allocClsAgenConallocConallocUnboxedCon allocDynamicE allocDynamicgenArggenIdArg genIdArgIgenIdStackArgIallocConStaticallocUnboxedConStaticallocateStaticList jsStaticArg jsStaticArgs genPrimCall saturateFFIgenForeignCallrtsApplygenApp$fShowApplySpec $fEqApplySpec$fOrdApplySpec$fShowApplyConv $fEqApplyConv$fOrdApplyConv assignRegsrtsTagEnvTE te_bytecodete_gette_env TagSigEnv InferStgAlt InferStgRhs InferStgExprInferStgBindingInferStgTopBindingcombineAltInfo getBinderIdinitEnv makeTaggednoSig lookupSig lookupInfo isDunnoSig isTaggedInfo extendSigEnv$fOutputableTagEnv InstructionregUsageOfInstrpatchRegsOfInstrisJumpishInstrjumpDestsOfInstrpatchJumpInstr mkSpillInstr mkLoadInstrtakeDeltaInstr isMetaInstrmkRegRegMoveInstrtakeRegRegMoveInstr mkJumpInstrmkStackAllocInstrmkStackDeallocInstrpprInstr mkCommentRegUsageRUwritesnoUsage$fShowRegUsage callerSaves activeStgRegs haveRegBaseglobalRegMaybefreeReg freeRegBaseLRegKeyLRegSet emptyLRegSet nullLRegSet insertLRegSet elemLRegSetdeleteFromLRegSet sizeLRegSet plusLRegSet elemsLRegSeteqDeBruijnExpr eqCoreExpr lookupCoreMap extendCoreMap foldCoreMap emptyCoreMap$fTrieMapAltMap$fFunctorAltMap$fTrieMapCoreMapX$fFunctorCoreMapX$fOutputableCoreMap$fTrieMapCoreMap$fFunctorCoreMapstgCse$fTrieMapStgArgMap$fFunctorStgArgMap$fTrieMapConAppMap$fFunctorConAppMapTypeEnv emptyTypeEnv typeEnvElts typeEnvTyConstypeEnvCoAxioms typeEnvIdstypeEnvPatSynstypeEnvDataConstypeEnvClasses mkTypeEnvmkTypeEnvWithImplicitstypeEnvFromEntities lookupTypeEnv extendTypeEnvextendTypeEnvListextendTypeEnvWithIds plusTypeEnv ModDetailsmd_complete_matchesmd_annsmd_rules md_fam_instsmd_instsmd_types md_exportsemptyModDetailspprTyThingInContext pprTyThing pprTyThingLoc pprTyThingHdrpprTyThingInContextLocStgToCmmConfigstgToCmmAvx512f stgToCmmAvx2 stgToCmmAvxstgToCmmVecInstrsErrstgToCmmTickyAPstgToCmmAllowFMAInstrstgToCmmAllowIntMul2Instr!stgToCmmAllowExtendedAddSubInstrsstgToCmmAllowQuotRem2stgToCmmAllowQuotRemInstrstgToCmmAllowBigArithstgToCmmDoTagCheckstgToCmmDoBoundsCheckstgToCmmExtDynRefs stgToCmmPIE stgToCmmPICstgToCmmOmitIfPragmasstgToCmmOmitYieldsstgToCmmInfoTableMapWithStack stgToCmmInfoTableMapWithFallbackstgToCmmInfoTableMapstgToCmmEagerBlackHolestgToCmmSCCProfilingstgToCmmFastPAPCallsstgToCmmOptHpcstgToCmmAlignCheckstgToCmmLoopificationstgToCmmTickyTagstgToCmmTickyDynThunkstgToCmmTickyLNEstgToCmmTickyAllocdstgToCmmDoTickystgToCmmMaxInlAllocSizestgToCmmBinBlobThreshstgToCmmEmitDebugInfostgToCmmContextstgToCmmTmpDirstgToCmmThisModulestgToCmmProfilestgToCmmPlatformreadElfSectionByNamereadElfNoteAsString makeElfNote SwitchPlanUnconditionallyIfEqualIfLT JumpTable SwitchTargetsmkSwitchTargetsmapSwitchTargetsswitchTargetsCasesswitchTargetsDefaultswitchTargetsRangeswitchTargetsSignedswitchTargetsToTableswitchTargetsToListswitchTargetsFallThrougheqSwitchTargetWithcreateSwitchPlan$fShowSwitchPlan$fShowSwitchTargets$fEqSwitchTargets CmmTickScope GlobalScopeSubScope CombinedScope ForeignTarget PrimTarget CmmReturnInfo CmmMayReturnCmmNeverReturnsForeignConvention ConventionNativeDirectCallNativeNodeCall NativeReturnSlowGCUpdFrameOffset CmmFormal CmmActualCmmNodeCmmEntry CmmCommentCmmTick CmmUnwind CmmAssignCmmStoreCmmUnsafeForeignCall CmmBranch CmmCondBranch CmmSwitchCmmCallCmmForeignCall cml_likely cml_falsecml_truecml_pred cml_ret_off cml_ret_argscml_args cml_args_regscml_cont cml_targetintrblret_offret_argsrestgtforeignTargetHints wrapRecExpmapExp mapExpDeep wrapRecExpMmapExpM mapExpDeepM wrapRecExpffoldExp foldExpDeep mapSuccessorsmapCollectSuccessorsisTickSubScopecombineTickScopes$fOutputableConvention$fOutputableCmmReturnInfo$fOutputableForeignConvention$fUserOfRegsrForeignTarget"$fOutputablePPlatformForeignTarget$fOutputableCmmTickScope$fOrdCmmTickScope$fEqCmmTickScope$fDefinerOfRegsGlobalRegCmmNode$fDefinerOfRegsLocalRegCmmNode$fUserOfRegsGlobalRegCmmNode$fUserOfRegsLocalRegCmmNode$fNonLocalCmmNode$fOutputablePPlatformGraph'$fOutputablePPlatformBlock$fOutputablePPlatformBlock0$fOutputablePPlatformBlock1$fOutputablePPlatformBlock2$fOutputablePPlatformCmmNode$fEqForeignTarget$fEqForeignConvention$fEqCmmReturnInfo$fEqConvention $fEqCmmNode ListGraph GenBasicBlock BasicBlock RawCmmStatics CmmStatics GenCmmStatics CmmStaticsRaw CmmStatic CmmStaticLitCmmUninitialised CmmString CmmFileEmbedSectionSectionProtectionReadWriteSectionReadOnlySectionWriteProtectedSection SectionTypeText ReadOnlyDataRelocatableReadOnlyDataUninitialisedData InitArray FiniArrayCString OtherSection ProfilingInfoNoProfilingInfo CmmInfoTablecit_clocit_srtcit_profcit_repcit_lbl CmmStackInfo StackInfo do_layout arg_space CmmTopInfoTopInfo stack_info info_tbls GenCmmGraphCmmGraphg_graphg_entry RawCmmDecl CmmDataDecl CmmDeclSRTsCmmDecl GenCmmDeclCmmProcCmmData RawCmmGroup CmmGroupSRTsCmmGroup GenCmmGroup CmmProgramcmmDataDeclCmmDecl toBlockMap revPostorder toBlockList topInfoTablesectionProtectionblockId pprBBlock pprCmmGroup pprStatic pprSection $fOutputablePPlatformGenCmmGraph$fOutputableCmmStackInfo!$fOutputablePPlatformCmmInfoTable$fOutputablePPlatformCmmTopInfo$fOutputablePPlatformGenCmmDecl$fOutputableCmmStatic$fOutputablePPlatformCmmStatic"$fOutputablePPlatformGenCmmStatics$fOutputablePenvGenBasicBlock$fOutputableGenBasicBlock$fOutputablePenvListGraph$fOutputableListGraph$fFunctorListGraph$fFunctorGenBasicBlock$fFunctorGenCmmDecl$fEqSectionProtection$fShowSectionType$fEqCmmInfoTable$fOrdCmmInfoTable$fEqProfilingInfo$fOrdProfilingInfo SelfLoopInfoMkSelfLoopInfosli_header_block sli_registers sli_aritysli_idSequelReturnAssignTo$fOutputableSequelEAIndex EAIndexNoneEABase EABaseNone EABaseReg EABaseRipAddrMode AddrBaseIndexImmAddrImmImmInt ImmIntegerImmCLblImmLitImmIndexImmFloat ImmDoubleImmConstantSumImmConstantDiffvirtualRegSqueezerealRegSqueeze strImmLitlitToImm addrOffset addrModeRegsspRelfirstxmmlastxmmlastintargRegs allMachRegNosclassOfRealRegshowRegeaxebxecxedxesiediebpespraxrbxrcxrdxrsirdirbprspr8r9r10r11r12r13r14r15xmm0xmm1xmm2xmm3xmm4xmm5xmm6xmm7xmm8xmm9xmm10xmm11xmm12xmm13xmm14xmm15ripRelxmmcallClobberedRegs allArgRegs allIntArgRegs allFPArgRegsinstrClobberedRegsallocatableRegsFreeRegs noFreeRegs releaseReg initFreeRegs getFreeRegs allocateReg$fShowFreeRegs$fOutputableFreeRegswidthMax detEltsUFMdetEltsUniqMap builderCommas WasmCodeGenMWasmCodeGenStatewasmUniqSupplylocalRegsCount localRegsctors dataSections funcBodies funcTypes defaultSyms wasmPlatformBrTableInterval bti_countbti_lo WasmControlWasmPush WasmBlockWasmLoop WasmIfTopWasmBrWasmFallthrough WasmBrTable WasmTailCall WasmActionsWasmSeqWasmStatements SomeWasmExprWasmExpr WasmInstr WasmCommentWasmNopWasmDropWasmUnreachable WasmConst WasmSymConstWasmLoad WasmStore WasmGlobalGet WasmGlobalSet WasmLocalGet WasmLocalSet WasmLocalTee WasmCCallWasmCCallIndirect WasmConcatWasmReinterpret WasmTruncSat WasmConvertWasmAddWasmSubWasmMulWasmDivWasmRemWasmAndWasmOrWasmXorWasmEqWasmNeWasmLtWasmGtWasmLeWasmGeWasmShlWasmShrWasmI32Extend8SWasmI32Extend16SWasmI64Extend8SWasmI64Extend16SWasmI64Extend32SWasmI64ExtendI32WasmI32WrapI64WasmF32DemoteF64WasmF64PromoteF32WasmAbsWasmNegWasmCondSignageSignedUnsignedFuncBodyfuncBody funcLocals LocalInfo GlobalInfo DataSectiondataSectionContentsdataSectionAlignmentdataSectionKindDataSectionContentDataI8DataI16DataI32DataI64DataF32DataF64DataSymDataSkip DataASCII DataIncBinDataSectionKind SectionData SectionRODataSymKindSymDataSymFunc SymVisibility SymUndefined SymStatic SymDefaultSymNameWasmFunctionType ft_pushesft_popsTypeList TypeListNil TypeListCons SomeWasmType WasmTypeTagTagI32TagI64TagF32TagF64WasmTypeI32I64F32F64someWasmTypesFromTypeListwasmControlCastinitialWasmCodeGenState wasmGetsM wasmPlatformM wasmWordTypeMwasmWordCmmTypeM wasmStateM wasmModifyM wasmExecM!$fTestEqualityWasmTypeWasmTypeTag$fEqSomeWasmType$fOutputableBrTableInterval$fMonadUniqueWasmCodeGenM$fFunctorWasmCodeGenM$fApplicativeWasmCodeGenM$fMonadWasmCodeGenM$fShowBrTableInterval $fEqSymKind $fEqSymName$fIsStringSymName $fShowSymName$fUniquableSymName $fOrdSymName$fShowWasmTypeTagWasmIfinclusiveInterval entryBlocks NatBasicBlock NatCmmDeclNatCmm floatToBytes doubleToBytespprASCII pprString pprFileEmbedpprSectionHeader LlvmCastOpLM_TruncLM_ZextLM_Sext LM_FptruncLM_Fpext LM_Fptoui LM_Fptosi LM_Uitofp LM_Sitofp LM_Ptrtoint LM_Inttoptr LM_Bitcast LlvmCmpOp LM_CMP_Eq LM_CMP_Ne LM_CMP_Ugt LM_CMP_Uge LM_CMP_Ult LM_CMP_Ule LM_CMP_Sgt LM_CMP_Sge LM_CMP_Slt LM_CMP_Sle LM_CMP_Feq LM_CMP_Fne LM_CMP_Fgt LM_CMP_Fge LM_CMP_Flt LM_CMP_Fle LlvmMachOp LM_MO_Add LM_MO_Sub LM_MO_Mul LM_MO_UDiv LM_MO_SDiv LM_MO_URem LM_MO_SRem LM_MO_FAdd LM_MO_FSub LM_MO_FMul LM_MO_FDiv LM_MO_FRem LM_MO_Shl LM_MO_LShr LM_MO_AShr LM_MO_AndLM_MO_Or LM_MO_XorLlvmLinkageTypeInternalLinkOnceWeak Appending ExternWeakExternallyVisibleExternalPrivateLlvmParameterListType FixedArgsVarArgsLlvmCallConventionCC_Ccc CC_Fastcc CC_ColdccCC_GhcCC_Ncc CC_X86_Stdcc LlvmCallTypeStdCallTailCall LlvmFuncAttr AlwaysInline InlineHintOptSizeNoReturnNoUnwindReadNoneReadOnlySspSspReq NoRedZoneNoImplicitFloatNaked LlvmParamAttrZeroExtSignExtInRegByValSRetNoAlias NoCaptureNest LlvmParameterLlvmFunctionDeclsLlvmFunctionDecl funcAlign decParams decVarargs decReturnTypefuncCc funcLinkagedecName LlvmStatic LMComment LMStaticLit LMUninitType LMStaticStr LMStaticArray LMStaticStrucLMStaticStrucULMStaticPointerLMTruncLMBitcLMPtoILMAddLMSubLlvmLitLMIntLit LMFloatLit LMNullLit LMVectorLit LMUndefLitLlvmVar LMGlobalVar LMLocalVar LMNLocalVarLMLitVarLMConstGlobalConstantAliasLMAlign LMSectionLlvmTypeLMIntLMFloatLMDouble LMFloat80 LMFloat128 LMPointerLMArrayLMVectorLMLabelLMVoidLMStruct LMStructULMAlias LMMetadata LMFunction LlvmAliasLMStringLMGlobalgetGlobalValue getGlobalVar ppLlvmTypeppParams garbageLit getVarType getLitType getStatTypegetLinkpLiftpVarLiftpLower pVarLowerisIntisFloat isPointerisVectorisGloballlvmWidthInBitsi128i64i32i16i8i1i8PtrllvmWord llvmWordPtrppLlvmParamAttrppLlvmFuncAttrppLlvmCallConventionppLlvmLinkageType ppLlvmMachOp ppLlvmCmpOp ppLlvmCastOpppDoublenarrowFpwidenFpppFloat ppCommaJoin ppSpaceJoin$fOutputableLlvmParamAttr$fOutputableLlvmFuncAttr$fOutputableLlvmCallConvention$fOutputableLlvmLinkageType$fOutputableLlvmType$fOutputableLlvmMachOp$fOutputableLlvmCmpOp$fOutputableLlvmCastOp$fEqLlvmCastOp $fEqLlvmCmpOp$fEqLlvmMachOp $fEqLlvmVar $fEqLlvmLit$fEqLlvmFunctionDecl $fEqLlvmType$fEqLlvmLinkageType$fEqLlvmParameterListType$fShowLlvmParameterListType$fEqLlvmCallConvention$fEqLlvmCallType$fShowLlvmCallType$fEqLlvmFuncAttr$fEqLlvmParamAttr $fEqLMConstMetaDecl MetaNamed MetaUnnamed MetaAnnotMetaExprMetaStrMetaNodeMetaVar MetaStructMetaIdppMetaId$fOutputableMetaId $fEqMetaAnnot $fEqMetaExpr $fEqMetaId $fOrdMetaId $fEnumMetaIdLlvmExpressionAllocaLlvmOpCompareExtractExtractVInsertMallocLoadALoad GetElemPtr AtomicRMWCmpXChgCallCallMPhiAsmMExpr LlvmStatement AssignmentFenceBranchBranchIfCommentMkLabelStoreSwitch UnreachableNop LlvmAtomicOpLAO_XchgLAO_AddLAO_SubLAO_AndLAO_NandLAO_OrLAO_XorLAO_MaxLAO_MinLAO_UmaxLAO_UminLlvmSyncOrdering SyncUnord SyncMonotonic SyncAcquire SyncRelease SyncAcqRel SyncSeqCstSingleThreaded LlvmFunctions LlvmFunction funcPrefixfuncSect funcAttrsfuncArgsfuncDecl LlvmModulemodFuncs modFwdDecls modGlobalsmodMeta modAliases modComments LlvmBlocks LlvmBlock blockStmts blockLabel LlvmBlockId$fEqLlvmStatement$fEqLlvmExpression$fShowLlvmAtomicOp$fEqLlvmAtomicOp$fShowLlvmSyncOrdering$fEqLlvmSyncOrdering ppLlvmModuleppLlvmComments ppLlvmComment ppLlvmGlobals ppLlvmGlobal ppLlvmAliases ppLlvmAlias ppLlvmMetas ppLlvmMetappLlvmFunctionsppLlvmFunctionppLlvmFunctionDeclsppLlvmFunctionDeclppName ppPlainNameppLitppVar ppTypeLitlmGlobalRegVarlmGlobalRegArg alwaysLivestgTBAAtopNstackNheapNrxNbaseNtbaagetTBAAFormatII8II16II32II64FF32FF64 intFormat floatFormat isIntFormat isFloatFormat cmmTypeFormat formatToWidth formatInBytes $fShowFormat $fEqFormat mkVirtualReg regDotColor AddrRegReg AddrRegImmLOHIHAHIGHERAHIGHESTAtoRegNo fits16Bits makeImmediatefRegr0tocr30f1tmpRegdW_LANG_HaskelldW_TAG_array_typedW_TAG_lexical_blockdW_TAG_pointer_typedW_TAG_compile_unitdW_TAG_structure_typedW_TAG_typedefdW_TAG_subroutine_typedW_TAG_subrange_typedW_TAG_base_typedW_TAG_file_typedW_TAG_subprogramdW_TAG_variabledW_TAG_auto_variabledW_TAG_arg_variabledW_TAG_ghc_src_note dW_AT_namedW_AT_stmt_list dW_AT_low_pc dW_AT_high_pcdW_AT_languagedW_AT_comp_dirdW_AT_producerdW_AT_externaldW_AT_frame_basedW_AT_use_UTF8dW_AT_linkage_namedW_AT_ghc_tick_parentdW_AT_ghc_span_filedW_AT_ghc_span_start_linedW_AT_ghc_span_start_coldW_AT_ghc_span_end_linedW_AT_ghc_span_end_coldW_CHILDREN_nodW_CHILDREN_yes dW_FORM_addr dW_FORM_data2 dW_FORM_data4dW_FORM_string dW_FORM_flagdW_FORM_block1dW_FORM_ref_addr dW_FORM_ref4dW_FORM_flag_presentdW_ATE_addressdW_ATE_boolean dW_ATE_float dW_ATE_signeddW_ATE_signed_chardW_ATE_unsigneddW_ATE_unsigned_chardW_CFA_set_locdW_CFA_undefineddW_CFA_same_valuedW_CFA_def_cfadW_CFA_def_cfa_offsetdW_CFA_def_cfa_expressiondW_CFA_expressiondW_CFA_offset_extended_sfdW_CFA_def_cfa_sfdW_CFA_def_cfa_offset_sfdW_CFA_val_offsetdW_CFA_val_expression dW_CFA_offset dW_OP_addr dW_OP_deref dW_OP_consts dW_OP_minus dW_OP_mul dW_OP_plus dW_OP_lit0 dW_OP_breg0dW_OP_call_frame_cfadwarfInfoSectiondwarfAbbrevSectiondwarfLineSectiondwarfFrameSectiondwarfGhcSectiondwarfARangesSection dwarfSectiondwarfInfoLabeldwarfAbbrevLabeldwarfLineLabeldwarfFrameLabel dwarfRegNodwarfReturnRegNoEdgeInfo edgeWeighttransitionSourceTransitionSource CmmSource AsmCodeGen trans_info trans_cmmNodeCfgEdgeedgeInfoedgeToedgeFromCFG EdgeWeightweightToDouble mkWeightInfoadjustEdgeWeight setEdgeWeight getCfgNodeshasNodesanityCheckCfg filterEdgesshortcutWeightMapaddImmediateSuccessoraddEdge addWeightEdgegetSuccEdgesSortedgetSuccessorEdges getEdgeInfo reverseEdges infoEdgeListedgeList getSuccessorspprEdgeWeightsaddNodesBetween getCfgProcgetCfg optimizeCFG loopMembers loopLevelsloopInfomkGlobalWeights$fOutputableEdgeWeight$fOutputableBranchInfo$fOutputableEdgeInfo$fOutputableCfgEdge $fOrdCfgEdge $fEqCfgEdge$fOutputableLoopInfo$fNonLocalBlockNode $fEqEdgeInfo$fEqTransitionSource$fEqBranchInfo$fEqEdgeWeight$fOrdEdgeWeight$fEnumEdgeWeight$fNumEdgeWeight$fRealEdgeWeight$fFractionalEdgeWeightLiveBasicBlockLiveInfo liveDieWrite liveDieReadliveBorn LiveInstrInstrSRInstrSPILLRELOAD LiveCmmDeclBlockMapRegMap emptyRegMap mapBlockTop mapBlockTopMmapSCCMmapGenBlockTopmapGenBlockTopMslurpConflictsslurpReloadCoalesce stripLivepprLiveCmmDeclmapLiveCmmDeclstripLiveBlockeraseDeltasLivepatchEraseLivepatchRegsLiveInstrcmmTopLiveness regLivenessreverseBlocksInTops$fOutputableInstrSR$fInstructionInstrSR$fOutputablePenvLiveInstr$fOutputableLiveInstr$fOutputablePPlatformLiveInfo$fFunctorLiveInstr$fFunctorInstrSRRA_State ra_fixups ra_config ra_spillsra_usra_stackra_deltara_assig ra_freeregs ra_blockassig RegAllocStats ra_fixupListra_spillInstrs SpillReason SpillAlloc SpillClobber SpillLoad SpillJoinRR SpillJoinRMLocInMemInBothBlockAssignmentlookupBlockAssignmentlookupFirstUsedemptyBlockAssignmentupdateBlockAssignment regsOfLoc$fOutputableLoc$fEqLoc $fShowLoc$fOrdLoc$fEqReadingOrWriting$fOrdReadingOrWritingbinSpillReasonscountRegRegMovesNatpprStatsRegM getConfig getPlatformrunRspillRloadR getFreeRegsR setFreeRegsR getAssigR setAssigRgetBlockAssigRsetBlockAssigR setDeltaR getDeltaR getUniqueR recordSpillrecordFixupBlock $fMonadRegM$fApplicativeRegM $fFunctorRegM cleanSpills$fOutputableStore$fUniquableStore SpillStatsspillStoreLoadregSpill accSpillSL$fOutputableSpillStats regCoalesce slurpJoinMovs SpillCostInfoSpillCostRecordzeroSpillCostInfoplusSpillCostInfoplusSpillCostRecordslurpSpillCostInfo chooseSpilllifeMapFromSpillCostInfopprSpillCostRecordAddrReg allGpArgRegs allFpArgRegs $fEqAddrMode$fShowAddrMode$fEqImm $fShowImmtargetVirtualRegSqueezetargetRealRegSqueezetargetClassOfRealRegtargetMkVirtualRegtargetRegDotColortargetClassOfRegRegAllocStatsStartRegAllocStatsSpillRegAllocStatsColored raPlatform raSpillCostsraGraph raLiveCmm raSpilled raSpillStats raCoalescedraCoderaSRMsraFinal raSpillClean raPatchedraCodeCoalescedraGraphColoredpprStatsSpillspprStatsLifetimespprStatsConflictpprStatsLifeConflict countSRMsaddSRM$fOutputableRegAllocStats$fFunctorRegAllocStatsregAllocshowBitsOperandOpRegOpRegExt OpRegShiftOpImm OpImmShiftOpAddrRegShiftExtShift ShiftModeSLSLSLSRSASRSRORExtModeEUXTBEUXTHEUXTWEUXTXESXTBESXTHESXTWESXTXTargetTBlockTLabelTRegCOMMENTMULTILINE_COMMENTANNLOCATIONLDATANEWBLOCKDELTASXTBUXTBSXTHUXTHPUSH_STACK_FRAMEPOP_STACK_FRAMEADDCMNCMPMSUBMULSDIVSMULHSMULLSUBUDIVSBFMUBFMSBFXUBFXANDANDSASRBICBICSEONEORLSLLSRMOVMOVKMVNORNORRRORTSTSTRSTLRLDRLDARSTPLDPCSETCBZCBNZJBBLBCONDDMBSYFCVTSCVTFFCVTZSFABSFMAstackFrameHeaderSize spillSlotSize stackAlign maxSpillSlotsspillSlotToOffsetcallerSavedRegistersallocMoreStackinstrConopRegxzrwzrip0_xx0x1x2x3x4x5x6x7x8x9x10x11x12x13x14x15x16x17x18x19x20x21x22x23x24x25x26x27x28x29x30x31_dd0d1d2d3d4d5d6d7d8d9d10d11d12d13d14d15d16d17d18d19d20d21d22d23d24d25d26d27d28d29d30d31 opRegUExt opRegSExt$fOutputableRegUsage $fEqOperand $fShowOperand $fEqShiftMode$fShowShiftMode $fEqExtMode $fShowExtMode $fEqTarget $fOrdTargetJumpDest DestBlockIdgetJumpDestBlockId canShortcutshortcutStatics shortcutJump$fOutputableJumpDest pprNatCmmDecl pprBasicBlockprimRepCmmType slotCmmType typeCmmTypeprimRepForeignHinttypeForeignHint mkIntCLitzeroCLitzeroExpr mkWordCLitmkByteStringCLitmkFileEmbedLit mkDataLits mkRODataLits mkStgWordCLitpackHalfWordsCLit mkLblExpr cmmOffsetExpr cmmOffset cmmRegOff cmmOffsetLit cmmLabelOffcmmIndex cmmIndexExpr cmmLoadIndex cmmLoadBWord cmmLoadGCWord cmmRegOffB cmmOffsetBcmmOffsetExprB cmmLabelOffB cmmOffsetLitBcmmOffsetExprW cmmOffsetW cmmRegOffW cmmOffsetLitW cmmLabelOffW cmmLoadIndexW cmmOrWord cmmAndWord cmmNeWord cmmEqWord cmmULtWord cmmUGeWord cmmUGtWord cmmSLtWord cmmUShrWord cmmAddWord cmmSubWord cmmMulWord cmmQuotWord cmmNegate cmmToWord cmmMkAssigntAG_MASK mAX_PTR_TAG cmmTagMaskcmmPointerMaskcmmUntag cmmIsTaggedcmmIsNotTagged cmmConstrTag1 regsOverlapglobalRegsOverlap regUsedInglobalRegUsedIn mkLiveness modifyGraph ofBlockMaptoBlockListEntryFirst%toBlockListEntryFirstFalseFallthrough ofBlockList mapGraphNodesmapGraphNodes1foldlGraphBlocks blockTicksbaseExprspExpr spLimExprhpExpr hpLimExprcurrentTSOExprcurrentNurseryExprcccsExprclosureInfoLabel closureLFInfo closureName CallMethodEnterItJumpToItReturnItInferedReturnItSlowCall DirectEntryDynTagNonVoidCgLocCmmLocLneLoc isKnownFun fromNonVoid nonVoidIdsassertNonVoidIdsnonVoidStgArgsassertNonVoidStgArgs addIdReps addArgReps argPrimRep mkLFArgumentmkLFLetNoEscape mkLFReEntrant mkLFThunk mkConLFInfomkSelectorLFInfo mkApLFInfoimportedIdLFInfo mkLFStringLit isSmallFamily tagForCon tagForAritylfDynTag isLFThunk isLFReEntrantnodeMustPointToIt getCallMethod mkCmmInfo mkClosureInfoblackHoleOnEntryisStaticClosureclosureUpdReqd lfUpdatableclosureReEntrantclosureFunInfofunTagisToplevClosurestaticClosureLabelclosureSlowEntryLabelclosureLocalEntryLabelmkClosureInfoTableLabelmkDataConInfoTablecafBlackHoleInfoTableindStaticInfoTablestaticClosureNeedsLink$fOutputablePPlatformCgLoc$fOutputableNonVoid$fOutputableCallMethod $fEqNonVoid $fShowNonVoidArgRepPNVFV16V32V64 argRepStringtoArgRepisNonV argRepSizeWidArgRepslowCallPattern$fOutputableArgRep $fEqArgReprewriteTopBinds$fMonadUniqueRM $fFunctorRM $fMonadRM$fApplicativeRM baseRegOffsetget_GlobalReg_addrregTableOffsetget_Regtable_addr_from_offsetfixStgRegisterscmmImplementSwitchPlansconstantFoldNodeconstantFoldExpr cmmMachOpFoldcmmMachOpFoldM InitOrFini IsInitArray IsFiniArrayisInitOrFiniArraycmmToC $fFunctorTE$fApplicativeTE $fMonadTE UnwindExprUwConstUwRegUwDerefUwLabelUwPlusUwMinusUwTimes UnwindTable UnwindPoint DebugBlock dblBlocks dblUnwind dblPosition dblSourceTickdblTicks dblParent dblHasInfoTbl dblCLabeldblLabel dblProcedure cmmDebugGencmmDebugLabels cmmDebugLink debugToMappprUnwindTable toUnwindExpr$fOutputablePPlatformUnwindExpr $fOutputablePPlatformUnwindPoint$fOutputablePPlatformDebugBlock$fEqUnwindExprDestImmFMAPermutationFMA132FMA213FMA231PrefetchVariantNTALvl0Lvl1Lvl2UNWINDCMOVMOVZxLMOVSxLLEAADCSBBMUL2IMULIMUL2DIVIDIVADD_CCSUB_CCORXORNOTNEGIBSWAPSHLSARSHRBTNOPX87StoreCVTSS2SDCVTSD2SS CVTTSS2SIQ CVTTSD2SIQCVTSI2SSCVTSI2SDFMA3FDIVSQRTTESTSETCCPUSHPOPJMPJXXJXX_GBLJMP_TBLCALLCLTDFETCHGOTFETCHPCPOPCNTLZCNTTZCNTBSFBSRPDEPPEXTPREFETCHLOCKXADDCMPXCHGXCHGMFENCEarchWordFormat RegCode64Reg64NatM DwarfFiles NatM_Statenatm_cfgnatm_debug_map natm_fileid natm_confignatm_pic natm_imports natm_deltanatm_usNcgImplinvertCondBranchesextractUnwindPointsncgMakeFarBranchesncgAllocMoreStackpprNatCmmDeclHpprNatCmmDeclSgenerateJumpTableForInstr cmmTopCodeGen ncgConfig mkNatM_StateinitNat getUniqueNat getDeltaNat getCfgWeights setDeltaNatgetThisModuleNat addImportNat updateCfgNataddNodeBetweenNataddImmediateSuccessorNat getBlockIdNatgetNewLabelNat getNewRegNat getNewReg64 localReg64getPicBaseMaybeNat getPicBaseNat getFileId getDebugBlock$fHasModuleNatM$fMonadUniqueNatM $fFunctorNatM$fApplicativeNatM $fMonadNatM sequenceTopbackendMaintainsCfg$fOutputableBlockChain$fOrdBlockChain$fEqBlockChainDwarfFrameBlock dwFdeUnwinddwFdeBlkHasInfoDwarfFrameProc dwFdeBlocks dwFdeHasInfo dwFdeProc DwarfFrame dwCieProcs dwCieInit dwCieLabel DwarfARangedwArngEndLabeldwArngStartLabel DwarfInfoDwarfCompileUnitDwarfSubprogram DwarfBlock DwarfSrcNote dwHighLabel dwLowLabel dwCompDir dwProducerdwName dwChildrendwParentdwLabeldwMarker dwSrcSpanpprAbbrevDecls pprDwarfInfopprDwarfARanges pprDwarfFrame wordAlignpprBytepprHalf pprData4' pprDwWordpprWord pprLEBWord pprLEBInt sectionOffset$$fOutputablePPlatformDwarfFrameBlock$fEqDwarfAbbrev$fEnumDwarfAbbrevdwarfGen RewriteFun TransferFunDataflowLattice fact_joinfact_bot JoinedFactChanged NotChangedNewFactOldFactFact changedIf analyzeCmmBwd analyzeCmmFwd rewriteCmmBwdgetFact joinOutFacts joinFacts mkFactBasefoldNodesBwdOOfoldRewriteNodesBwdOO CmmLocalLive liveLatticecmmLocalLivenesscmmGlobalLivenessgen_kill liveLatticeLcmmLocalLivenessL gen_killLcmmSinkGraphWithDominatorsgwd_rpnumberinggwd_dominators gwd_graphRPNum DominatorSetImmediateDominator EntryNode ds_parentds_labeldominatorsMemberintersectDominatorsgraphWithDominators gwdRPNumbergwdDominatorsOfgwdDominatorTree$fOutputableDominatorSet$fOutputableRPNum $fShowRPNum $fEqRPNum $fOrdRPNum$fEqDominatorSet Reducibility Reducible Irreducible reducibility asReducible"$fSupernodeCmmSuperNullCollapseViz$fPureSupernodeCmmSuper$fSemigroupCmmSuper$fEqReducibility$fShowReducibilitystructuredControl$fOutputableContainingSyntax$fOutputableContextalignmentFromWordTypeglobalInfoFromCmmGlobalRegsupportedCmmGlobalRegs onCmmGroup execWasmAsmMasmTellEverything$fMonoidWasmAsmM$fSemigroupWasmAsmM$fFunctorWasmAsmM$fApplicativeWasmAsmM$fMonadWasmAsmM ParamLocation RegisterParam StackParamassignArgumentsPos assignStackrealArgRegsCoverallArgRegsCover$fOutputableParamLocationcmmLint cmmLintGraph$fFunctorCmmLint$fApplicativeCmmLint$fMonadCmmLintTransferJumpRetJumpRetCgStmtCgLabelCgLastCgForkCmmAGraphScoped CmmAGraph catAGraphsmkLabelmkMiddlemkLast outOfLinelgraphOfAGraph labelAGraphmkNopmkAssignmkStoremkJump mkRawJump mkJumpExtra mkCbranchmkSwitchmkReturnmkBranch mkFinalCallmkCallReturnsTomkJumpReturnsTo mkUnsafeCallmkUnwind stackStubExpr copyInOflow copyOutOflow mkCallEntry noExtraStacktoCall $fEqTransfer cmmCfgOptscmmCfgOptsProc replaceLabelsremoveUnreachableBlocksProcelimCommonBlocksmkEmptyContInfoTable cmmToRawCmm srtEscapeclosureInfoPtr entryCode getConstrTagcmmGetClosureType infoTableinfoTableConstrTaginfoTableSrtBitmapinfoTableClosureType infoTablePtrsinfoTableNonPtrs funInfoTable funInfoAritystdInfoTableSizeWfixedInfoTableSizeWprofInfoTableSizeWmaxStdInfoTableSizeWmaxRetInfoTableSizeWstdInfoTableSizeBstdSrtBitmapOffsetstdClosureTypeOffset stdPtrsOffsetstdNonPtrsOffsetconInfoTableSizeBLDLDFARLASTFARSTUSTCLISLIMRCMPLBCCBCCFARMTCTRBCTRBCTRLADDOADDCADDEADDZEADDISSUBFSUBFOSUBFCSUBFEMULLMULLOMFOVMULHUANDCNANDORISXORISEXTSCNTLZSLSRSRARLWINMCLRLICLRRIFADDFSUBFMULFNEGFMADDFCMPFCTIWZFCTIDZFCFIDFRSPCRNORMFCRMFLRHWSYNCISYNCLWSYNCRIRIRegRIImmmakeFarBranchesFR frAllocateReg frGetFreeRegsfrInitFreeRegs frReleaseReg $fFRFreeRegs $fFRFreeRegs0 $fFRFreeRegs1 $fFRFreeRegs2 joinToTargetsCmmMakeDynamicReferenceM addImport ReferenceKind DataReference CallReference JumpReferencecmmMakeDynamicReferenceneedImportedSymbolspprGotDeclarationpprImportedSymbolinitializePicBase_ppcinitializePicBase_x86$fCmmMakeDynamicReferenceMNatM$fEqReferenceKind InstrBlockncgX86 ncgX86_64$fInstructionInstrncgPPC ncgAArch64Status ReachedBy ProcPoint ProcPointSetprocPointAnalysiscallProcPointsminimalProcPointSetsplitAtProcPointsattachContInfoTables$fOutputableStatuslintStgTopBindings $fMonadLintM$fApplicativeLintM$fFunctorLintM LogQueueQueueLogQueuelogQueueSemaphorelogQueueMessages logQueueId newLogQueuefinishLogQueue writeLogQueue parLogActionnewLogQueueQueue initLogQueue allLogQueues logThreadPreInlineUnconditionallyPostInlineUnconditionally UnfoldingDone RuleFiredLetFloatFromLet EtaExpansion EtaReduction BetaReduction CaseOfCase KnownBranch CaseMergeAltMergeCaseElim CaseIdentityFillInCaseDefaultSimplifierDone SimplCount simplCountNzeroSimplCountisZeroSimplCounthasDetailedCountsdoFreeSimplTick doSimplTickplusSimplCount pprSimplCount $fOrdTick$fEqTick$fOutputableTickLiftM FloatLangStartBindingGroupEndBindingGroupPlainTopBinding LiftedBindingEnv e_expansionse_subste_configdecomposeStgBinding mkStgBinding collectFloatsrunLiftMaddTopStringLitstartBindingGroupendBindingGroupaddLiftedBinding withSubstBndrwithSubstBndrswithLiftedBndrwithLiftedBndrssubstOccisLiftedformerFreeVars$fOutputableFloatLang$fMonadUniqueLiftM$fFunctorLiftM$fApplicativeLiftM $fMonadLiftM FinderOptsfinder_stubDirfinder_dynObjectSuffinder_objectSuffinder_objectDirfinder_dynHiSuf finder_hiSuf finder_hiDir finder_hieSuf finder_hieDirfinder_reexportedModulesfinder_hiddenModulesfinder_thisPackageNamefinder_workingDirectoryfinder_enableSuggestions finder_waysfinder_bypassHiFileCheckfinder_lookupHomeInterfacesfinder_importPaths FindResultFound NoPackage FoundMultipleNotFoundfr_suggestions fr_unusablesfr_pkgs_hiddenfr_mods_hiddenfr_pkgfr_pathsInstalledFindResultInstalledFoundInstalledNoPackageInstalledNotFound FinderCache fcFileCache fcModuleCacheFinderCacheState$fShowFinderOptsInputFileBufferTargetId TargetModule TargetFiletargetContents targetUnitIdtargetAllowObjCodetargetId pprTarget pprTargetId$fOutputableTargetId$fOutputableTarget $fEqTargetIdVirtualHpOffset HeapUsagerealHpvirtHpCgState MkCgState cgs_uniqs cgs_hp_usg cgs_bindscgs_tops cgs_stmts ReturnKindAssignedDirectly ReturnedToCgIdInfocg_loccg_lfcg_idFCodeinitCrunCfixCheapHWM initHpUsagegetStatesetState getHpUsage setHpUsage setVirtHp getVirtHp setRealHpgetBindssetBinds newUniquenewTempinitFCodeState getSelfLoop withSelfLoop withSequel getSequelwithUpdFrameOffgetUpdFrameOffgetTickyCtrLabelsetTickyCtrLabel getTickScope tickScopegetStgToCmmConfig getProfile getContext getModuleNameforkClosureBody forkLneBodycodeOnlyforkAlts forkAltPairgetCodeRgetCode getCodeScoped getHeapUsage emitLabel emitCommentemitTick emitUnwind emitAssign emitStore emitStore'emitemitDecl emitOutOfLineemitProcWithStackFrameemitProcWithConventiongetCmmmkCmmIfThenElsemkCmmIfThenElse' mkCmmIfGoto mkCmmIfGoto' mkCmmIfThen mkCmmIfThen'mkCall mkCmmCall aGraphToGraph$fOutputablePPlatformCgIdInfo$fMonadUniqueFCode $fMonadFCode$fApplicativeFCode$fFunctorFCodeemitIpeBufferListNodeCmmParseECunECVarNFunNLabelN loopDeclsgetEnvwithNamenewLocalnewLabelnewFunctionName newImport lookupLabel lookupNamecode$fMonadUniqueCmmParse$fMonadCmmParse$fApplicativeCmmParse$fFunctorCmmParse litIdInfo lneIdInfo rhsIdInfo mkRhsInit idInfoToAmodemaybeLetNoEscapeaddBindC addBindsC getCgIdInfogetCgInfo_maybe bindToReg rebindToReg bindArgToRegbindArgsToRegsidToReg newStringCLitnewByteStringCLitcgLit mkSimpleLitIPEStats ipe_skipped ipe_fallbackipe_closure_types ipe_total addToMemLbl addToMemLblEaddToMem addToMemEmkTaggedObjectLoad tagToClosureemitBarf emitRtsCallemitRtsCallWithResultemitRtsCallGencallerSaveVolatileRegscallerSaveGlobalRegcallerRestoreGlobalReg emitDataLitsemitRODataLits emitDataCon assignTempnewUnboxedTupleRegsemitMultiAssign emitSwitchemitCmmLitSwitchwhenUpdRemSetEnabledemitUpdRemSetPushemitUpdRemSetPushThunkcmmInfoTableToInfoProvEntfallbackIpeStatsclosureIpeStatsskippedIpeStatsconvertInfoProvMap$fOutputableIPEStats$fMonoidIPEStats$fSemigroupIPEStatscheckFunctionArgTagscheckConArgsStaticcheckConArgsDyn whenCheckTagsemitTagAssertionemitArgTagCheckcheckArgcheckArgStatic mkTickBoxinitHpc annotateTSAN LibrarySpecObjectsDLLDLLPath FrameworkSptEntryUnlinkedDotODotADotDLL CoreBindings LoadedBCOsBCOs LinkableSetLinkableLMlinkableUnlinkedlinkableModule linkableTime LoadedPkgInfoloaded_pkg_trans_depsloaded_pkg_non_hs_objsloaded_pkg_hs_objsloaded_pkg_uid PkgsLoaded ClosureEnv LinkerEnvaddr_envitbl_env closure_env LoaderStatetemp_sos pkgs_loaded objs_loaded bcos_loaded linker_envLoader loader_stateuninitializedLoadermodifyClosureEnvfilterLinkerEnvemptyClosureEnvextendClosureEnv mkLinkableSetunionLinkableSetisObjectLinkable linkableObjsisInterpretablenameOfObject_maybe nameOfObjectbyteCodeOfObject$fOutputableSptEntry$fOutputableUnlinked$fOutputableLinkable$fOutputableLibrarySpec$fOutputableLoadedPkgInfoCgGutscg_spt_entries cg_modBreaks cg_hpc_info cg_dep_pkgscg_foreign_files cg_foreigncg_ccscg_binds cg_tycons cg_moduleModGutsmg_docs mg_trust_pkgmg_safe_haskellmg_boot_exportsmg_fam_inst_env mg_inst_env mg_modBreaks mg_hpc_infomg_complete_matchesmg_annsmg_warnsmg_foreign_files mg_foreignmg_bindsmg_rules mg_patsyns mg_fam_instsmg_instsmg_tcs mg_fix_env mg_rdr_env mg_used_th mg_usagesmg_deps mg_exportsmg_loc mg_hsc_src mg_modulemg_mnwibHomePackageTableHomeModLinkablehomeMod_objecthomeMod_bytecode HomeModInfo hm_linkable hm_detailshm_ifacehomeModInfoByteCodehomeModInfoObjectemptyHomeModInfoLinkable justBytecode justObjectsbytecodeAndObjectsemptyHomePackageTable lookupHptlookupHptDirectlyeltsHpt filterHptallHptanyHptmapHpt delFromHptaddToHptaddHomeModInfoToHpt addListToHpt listToHpt listHMIToHptlookupHptByModulepprHPT$fOutputableHomeModLinkableHscBackendAction HscUpdate HscRecomphscs_old_iface_hashhscs_partial_ifacehscs_mod_location hscs_gutsHscRecompStatus HscUpToDateHscRecompNeeded$fOutputableHscBackendActioninitStaticPtrsncgWasm ModSummary ms_hspp_buf ms_hspp_opts ms_hspp_file ms_parsed_modms_ghc_prim_importms_textual_imps ms_srcimps ms_hie_date ms_iface_datems_dyn_obj_date ms_obj_date ms_hs_hash ms_location ms_hsc_srcms_mod ms_unitidms_installed_mod ms_mod_namems_impsms_plugin_impsms_home_srcimps ms_home_imps msHsFilePath msHiFilePathmsDynHiFilePath msObjFilePathmsDynObjFilePath isBootSummaryms_mnwibmsDeps findTarget$fOutputableModSummary ModNodeKey SummaryNode ModuleGraphModNodeKeyWithUid mnkUnitId mnkModuleNameNodeKey NodeKey_UnitNodeKey_Module NodeKey_LinkModuleGraphNodeInstantiationNode ModuleNodeLinkNodemoduleGraphNodeModulemoduleGraphNodeModSummoduleGraphNodeUnitId nodeKeyUnitIdnodeKeyModNamemapMGunionMG mgTransDepsmgModSummariesmgModSummaries'mgLookupModuleemptyMGisTemplateHaskellOrQQNonBootextendMG extendMGInst extendMG' mkModuleGraphfilterToposortToModules showModMsgsummaryNodeSummarynodeDependenciesmoduleGraphNodes mkNodeKeymsKeymoduleGraphModulesBelow$fOutputableModNodeKeyWithUid$fOutputableNodeKey$fOrdModuleGraphNode$fEqModuleGraphNode$fOutputableModuleGraphNode$fFunctorNodeMap$fTraversableNodeMap$fFoldableNodeMap $fEqNodeKey $fOrdNodeKey$fEqModNodeKeyWithUid$fOrdModNodeKeyWithUid BuildMessageBuildMsg BuildErrorEOFenableProcessJobsreadCreateProcessWithExitCode' replaceVarreadProcessEnvWithExitCode c_locale_env getGccEnv runSomethingrunSomethingResponseFilerunSomethingFilteredrunSomethingWith handleProcbuilderMainLoop readerProc parseError breakColon breakIntColon linesPlatform inferTagsshowSDocshowPprshowSDocForUser printForUserinitStgToJSConfiginitStgLiftConfiginitStgDebugOpts initLogFlagsinitFrameworkOpts initBangOptsinitFinderOpts initRuleOpts initNCGConfig initCmmConfiginitOptCoercionOptsinitSimpleOpts initEvalOptsLlvmM UnresStatic UnresLabelLlvmData LlvmUnresDataLiveGlobalRegsLlvmBasicBlock LlvmCmmDecl cmmToLlvmTypewidthToLlvmFloatwidthToLlvmInt llvmFunTy llvmFunSig llvmFunAlign llvmInfAlignllvmFunSection llvmFunArgsisFPR padLiveArgsllvmStdFunAttrs tysToParams llvmPtrBitsrunLlvm withClearVars varInsert funInsert varLookup funLookup markStackReg checkStackReggetMetaUniqueId getLlvmVer dumpIfSetLlvm renderLlvm markUsedVar getUsedVars setUniqMeta getUniqMetaghcInternalFunctionsstrCLabel_llvm getGlobalPtr llvmDefLabelgenerateExternDeclsaliasify$fMonadUniqueLlvmM$fHasLoggerLlvmM$fFunctorLlvmM$fApplicativeLlvmM $fMonadLlvmM genLlvmDatagenData pprLlvmDatapprLlvmCmmDecl infoSection genLlvmProc$fMonoidLlvmAccum$fSemigroupLlvmAccum $fEqSignage $fShowSignage llvmCodeGen nativeCodeGen cmmNativeGen!$fCmmMakeDynamicReferenceMCmmOptM$fMonadCmmOptM$fApplicativeCmmOptM$fFunctorCmmOptMcouldBeSmallEnoughToInlinesmallEnoughToInlinecallSiteInline LibCaseOptslco_unfolding_opts lco_threshold liberateCaseinitLiberateCaseOptstidyCbvInfoToptidyExpr tidyRules tidyBndrs doStaticArgsexitifyProgram cseProgram cseOneExprgenExpr genEntryTypegenBody loadLiveFungenStaticRefsRhs genStaticRefs $fEqBranch$fFunctorBranchstgToJS initArityOpts CoreToStgOptscoreToStg_stgDebugOptscoreToStg_ExternalDynamicRefscoreToStg_InfoTableMap"coreToStg_AutoSccsOnIndividualCafscoreToStg_wayscoreToStg_platform coreToStg $fMonadCtsM$fApplicativeCtsM $fFunctorCtsM $fEqHowBound $fEqLetInfoinitCoreToStgOptscallArityAnalProgram callArityRHSevDelayedError evCallStack StaticPtrOptsopt_static_ptr_dataconopt_static_ptr_info_datacon opt_mk_string opt_gen_cstub opt_platformsptCreateStaticBindssptModuleInitCode floatInwards$fOutputableFloatInBindRuleEnvre_visible_orphs re_eps_rules re_home_rulesre_local_rulesRuleBasemkRule mkSpecRule roughTopNamespprRulesForUserextendRuleInfo addRuleInfoaddIdSpecialisations addRulesToId rulesOfBinds emptyRuleBase mkRuleBaseextendRuleBaseList pprRuleBase mkRuleEnvupdExternalPackageRules updLocalRules addLocalRules emptyRuleEnvgetRules lookupRuleruleCheckProgram TopEnvConfigte_tick_factorte_history_sizeSimplMinitSmpl traceSmpl getSimplRulesnewId newJoinId getSimplCounttick checkedTickfreeTick$fMonadIOSimplM$fHasLoggerSimplM$fMonadUniqueSimplM $fMonadSimplM$fApplicativeSimplM$fFunctorSimplMIsRecDataConResultDefinitelyRecursiveNonRecursiveOrUnsureUnboxingDecision DontUnboxDoUnbox DropAbsentDataConPatContext dcpc_argsdcpc_co dcpc_tc_argsdcpc_dcWwOptsMkWwOptswo_unlift_strict wo_module wo_cpr_analwo_simple_opts wo_fam_envs mkWwBodiesisWorkerSmallEnoughneedsVoidWorkerArg boringSplit usefulSplit canUnboxArgmkWWstr mkWWstr_onemkAbsentFillerdubiousDataConInstArgTys findTypeShape$fOutputableUnboxingDecision$fOutputableIsRecDataConResult$fEqIsRecDataConResult$fShowIsRecDataConResult DmdAnalOptsdmd_max_worker_argsdmd_unbox_width dmd_do_boxitydmd_strict_dictsdmdAnalProgram$fOutputableAnalEnvcprAnalProgram$fOutputableSigEnv wwTopBindsinitWorkWrapOpts primOpRulesprimOpIdallThePrimOpIds builtinRules caseRules caseRules2$fMonadPlusRuleM$fAlternativeRuleM$fMonadFailRuleM $fMonadRuleM$fApplicativeRuleM$fFunctorRuleMEpsStats n_insts_out n_insts_in n_rules_out n_rules_in n_decls_out n_decls_in n_ifaces_inExternalPackageStateEPS eps_statseps_mod_fam_inst_enveps_complete_matches eps_ann_env eps_rule_baseeps_fam_inst_env eps_inst_enveps_PTEeps_free_holeseps_PIT eps_is_bootExternalUnitCacheeuc_epsPackageIfaceTablePackageCompleteMatchesPackageFamInstEnvPackageInstEnvPackageRuleBasePackageTypeEnvemptyPackageIfaceTableinitExternalUnitCacheeucEPSinitExternalPackageState addEpsInStats UnitEnvGraph unitEnv_graphUnitEnvGraphKey HomeUnitGraph HomeUnitEnvhomeUnitEnv_home_unithomeUnitEnv_hpthomeUnitEnv_dflagshomeUnitEnv_unit_dbshomeUnitEnv_unitsUnitEnv ue_namever ue_platformue_home_unit_graphue_current_unitue_epsueEPS initUnitEnvunsafeGetHomeUnitupdateHpt_lazy updateHpt updateHugue_transitiveHomeDepspreloadUnitsInfo'preloadUnitsInfo mkHomeUnitEnvisUnitEnvInstalledModulelookupHugByModulehugEltsaddHomeModInfoToHug lookupHugunitEnv_insertunitEnv_deleteunitEnv_adjustunitEnv_mapWithKey unitEnv_newunitEnv_singleton unitEnv_mapunitEnv_memberunitEnv_lookup_maybeunitEnv_lookup unitEnv_keys unitEnv_elts unitEnv_hptsunitEnv_foldWithKey unitEnv_unionue_units ue_setUnits ue_unit_dbs ue_setUnitDbsue_hpt ue_setFlagsue_setUnitFlags ue_unitFlags ue_homeUnitue_unsafeHomeUnitue_unitHomeUnitue_all_home_unit_idsue_currentHomeUnitEnvue_setActiveUnitue_currentUnitue_findHomeUnitEnvue_updateHomeUnitEnvue_renameUnitIdassertUnitEnvInvariant$fOutputableHomeUnitEnv$fOutputableUnitEnvGraph$fFunctorUnitEnvGraph$fFoldableUnitEnvGraph$fTraversableUnitEnvGraph mkNamePprCtx mkQualModule mkQualPackagepkgQualJSInterpConfigjsInterpFinderCachejsInterpFinderOptsjsInterpUnitEnvjsInterpCodegenCfgjsInterpLoggerjsInterpTmpDir jsInterpTmpFsjsInterpScriptjsInterpNodeConfigNodeJsSettingsnodeKeepAliveMaxMem nodeExtraArgsnodePath nodeProgramJSStatejsServerStarted jsLinkState JSInterpExtrainstGhciUnitId instJSStateinstFinderOptsinstFinderCache instStdInExtInterpInstance instExtrainstLookupSymbolCacheinstPendingFrees instProcess IServConfigiservConfTrace iservConfHookiservConfDynamiciservConfProfiled iservConfOptsiservConfProgram InterpStatus InterpPending InterpRunning InterpProcess interpHandle interpPipeJSInterpIServExtInterpStatusVarExtInterpState interpStatus interpConfig ExtInterpExtIServExtJSInterpInstanceExternalInterpInternalInterpInterp interpLoaderinterpInstancedefaultNodeJsSettingsDelayedResponsesendMessageNoResponse sendMessagesendMessageDelayedResponse sendAnyValuereceiveAnyValuereceiveDelayedResponsereceiveTHMessagecallInterpProcessreadInterpProcesswriteInterpProcessgetUnitLinkOptscollectLinkOptscollectArchivesgetLibs JoinFloats JoinFloat LetFloatsSimplSRDoneExDoneIdContEx SimplFloats sfInScope sfJoinFloats sfLetFloats FloatEnable FloatDisabledFloatNestedOnly FloatEnabled SimplModesm_co_opt_opts sm_case_mergesm_case_folding sm_rule_opts sm_arity_optssm_do_eta_reductionsm_float_enable sm_pre_inline sm_case_case sm_uf_optssm_cast_swizzle sm_eta_expand sm_inlinesm_rulessm_namessm_phaseSimplEnv seCaseDepth seInScopeseRecIds seIdSubst seCvSubst seTvSubst seFamEnvsseMode seArityOpts seCaseCase seCaseFolding seCaseMerge seCastSwizzleseDoEtaReduction seEtaExpand seFloatEnableseInlineseNamesseOptCoercionOptssePedanticBottomssePhase sePlatform sePreInline seRuleOptsseRulesseUnfoldingOptssmPedanticBottoms smPlatform emptyFloats isEmptyFloats pprSimplEnv mkSimplEnvupdMode bumpCaseDepth getInScope setInScopeSetsetInScopeFromEsetInScopeFromFaddNewInScopeIds modifyInScopeenterRecGroupRHSs zapSubstEnv setSubstEnvmkContExdoFloatFromRhsemptyLetFloatsisEmptyLetFloatsemptyJoinFloatsisEmptyJoinFloats unitLetFloat unitJoinFloat mkFloatBind extendFloats addLetFloats addJoinFloats addFloats addLetFlts letFloatBinds addJoinFlts mkRecFloatswrapJoinFloatsXwrapJoinFloatsgetTopFloatBinds mapLetFloatssubstId lookupRecBndr simplBinders simplBindersimplNonRecBndr simplRecBndrssimplNonRecJoinBndrsimplRecJoinBndrsgetSubst$fOutputableSimplMode$fOutputableSimplSR$fOutputableFloatFlag$fOutputableLetFloats$fOutputableSimplFloatsValArgTyArgCastBy as_hole_tyas_argas_dmd as_arg_ty RewriteCallTryRules TryInlining TryNothingArgInfoai_discsai_dmdsai_encl ai_rewriteai_argsai_funDupFlagNoDup SimplifiedOkToDupFromWhatFromLetFromBeta StaticEnv SimplContStopCastIt ApplyToVal ApplyToTySelect StrictBind StrictArgTickItsc_contsc_envsc_arg sc_hole_tysc_dup sc_arg_tysc_altssc_bndrsc_bodysc_from sc_fun_tysc_fun BindContextBC_LetBC_JoinbindContextLevel isSimplified addValArgTo addTyArgTo addCastToisStrictArgInfoargInfoAppArgspushSimplifiedArgspushSimplifiedRevArgs argInfoExpr mkBoringStop mkRhsStop mkLazyArgStop contIsRhs contIsStop contIsDupable contIsTrivialcontResultType contHoleTypecontHoleScaling countArgscontArgs mkArgInfolazyArgContextinterestingCallContextupdModeForStableUnfoldingsupdModeForRulesactiveUnfoldinggetUnfoldingInRuleMatch activeRulepreInlineUnconditionallypostInlineUnconditionally rebuildLamtryEtaExpandRhswantEtaExpansionabstractFloats prepareAltsmkCase isExitJoinId$fOutputableDupFlag$fOutputableArgSpec$fOutputableArgInfo$fOutputableSimplCont simplTopBinds simplExpr simplImpRules typeNatTyConstypeNatAddTyContypeNatSubTyContypeNatMulTyContypeNatDivTyContypeNatModTyContypeNatExpTyContypeNatLogTyContypeNatCmpTyContypeSymbolCmpTyContypeSymbolAppendTyContypeConsSymbolTyContypeUnconsSymbolTyContypeCharToNatTyContypeNatToCharTyContypeNatCoAxiomRulestypeCharCmpTyCon knownKeyNameslookupKnownKeyNameisKnownKeyNamelookupKnownNameInfoghcPrimExportsghcPrimDeclDocsmaybeCharLikeConmaybeIntLikeConisNumericClassisStandardClassHieName ExternalName LocalName KnownKeyName TyVarScopeResolvedScopesUnresolvedScopeScope LocalScope ModuleScopeDeclTypeFamDecSynDecDataDecConDec PatSynDecClassDecInstDecBindType RegularBind InstanceBindRecFieldContext RecFieldDeclRecFieldAssign RecFieldMatch RecFieldOccImportImportAs ImportHidingExport EvBindDeps getEvBindDeps EvVarSource EvPatternBind EvSigBind EvWrapperBindEvImplicitBind EvInstBind EvLetBind isSuperInst ContextInfoUse MatchBindIEThingTyDeclValBind PatternBind ClassTyDeclDecl TyVarBindRecFieldEvidenceVarBindEvidenceVarUseIdentifierDetails identInfo identTypeNodeIdentifiers IdentifierNodeInfonodeIdentifiersnodeTypenodeAnnotationsNodeAnnotation nodeAnnotTypenodeAnnotConstr NodeOrigin SourceInfo GeneratedInfoSourcedNodeInfogetSourcedNodeInfoHieAST nodeChildrennodeSpansourcedNodeInfoHieASTsgetAstsHiePathHieArgs HieTypeFixRoll HieTypeFlatHieTypeHTyVarTyHAppTy HTyConApp HForAllTyHFunTyHQualTyHLitTyHCastTy HCoercionTy TypeIndexHieFile hie_hs_src hie_exportshie_asts hie_types hie_module hie_hs_fileSpan hieVersion pprNodeIdents pprIdentifier pprBindSpan hieNameOcc toHieName$fBinaryHieArgs$fBinaryHieType$fBinaryNodeOrigin$fOutputableNodeOrigin$fBinaryNodeAnnotation$fOutputableNodeAnnotation$fOrdNodeAnnotation$fBinaryEvBindDeps$fOrdEvBindDeps$fEqEvBindDeps$fOutputableEvVarSource$fBinaryEvVarSource$fBinaryIEType$fOutputableIEType$fBinaryRecFieldContext$fOutputableRecFieldContext$fBinaryBindType$fOutputableBindType$fBinaryDeclType$fOutputableDeclType $fBinaryScope$fOutputableScope$fBinaryTyVarScope$fOutputableTyVarScope$fBinaryContextInfo$fOutputableContextInfo$fBinaryIdentifierDetails$fMonoidIdentifierDetails$fSemigroupIdentifierDetails$fOutputableIdentifierDetails$fOutputableNodeInfo$fBinaryNodeInfo$fOutputableSourcedNodeInfo$fBinarySourcedNodeInfo$fOutputableHieAST$fBinaryHieAST$fOutputableHieASTs$fBinaryHieASTs$fBinaryHieFile$fOutputableHieName $fOrdHieName $fEqHieName$fFunctorHieASTs$fFoldableHieASTs$fTraversableHieASTs$fFunctorHieAST$fFoldableHieAST$fTraversableHieAST$fFunctorSourcedNodeInfo$fFoldableSourcedNodeInfo$fTraversableSourcedNodeInfo$fFunctorNodeInfo$fFoldableNodeInfo$fTraversableNodeInfo$fEqIdentifierDetails$fFunctorIdentifierDetails$fFoldableIdentifierDetails$fTraversableIdentifierDetails$fEqContextInfo$fOrdContextInfo$fEqTyVarScope$fOrdTyVarScope $fEqScope $fOrdScope $fDataScope $fEqDeclType $fOrdDeclType$fEnumDeclType $fEqBindType $fOrdBindType$fEnumBindType$fEqRecFieldContext$fEnumRecFieldContext$fOrdRecFieldContext $fEqIEType $fEnumIEType $fOrdIEType$fEqEvVarSource$fOrdEvVarSource$fOutputableEvBindDeps$fEqNodeAnnotation$fEqNodeOrigin$fEnumNodeOrigin$fOrdNodeOrigin$fEqHieTypeFix$fFunctorHieType$fFoldableHieType$fTraversableHieType $fEqHieType$fFunctorHieArgs$fFoldableHieArgs$fTraversableHieArgs $fEqHieArgs HieTypeStateHTS freshIndexhtyTabletyMap EvidenceInfoevidenceDetails evidenceType evidenceSpan evidenceVarRefMapgenerateReferencesMap renderHieTyperesolveVisibilityfoldType selectPointfindEvidenceUsegetEvidenceTreesAtPointgetEvidenceTreehieTypeToIface initialHTSfreshTypeIndex compressTypesrecoverFullType getTypeIndexresolveTyVarScopesresolveTyVarScopeLocalgetNameBinding getNameScopegetNameBindingInClassgetNameScopeAndBindinggetScopeFromContextgetBindSiteFromContext flattenAstsmallestContainingSatisfyingselectLargestContainedByselectSmallestContaining definedInAstsgetEvidenceBindDepsisEvidenceBindisEvidenceContext isEvidenceUse isOccurrencescopeContainsSpan combineAst insertAstnodeInfo emptyNodeInfosourcedNodeIdentscombineSourcedNodeInfocombineNodeInfo mergeAstsrightOfleftOf startsRightOf mergeSortAstssimpleNodeInfolocOnlymkScopeAmkScopemkLScope mkLScopeA mkLScopeN combineScopesmkSourcedNodeInfo makeNodeAmakeNode makeTypeNodeA makeTypeNode$fOutputableEvidenceInfo$fEqEvidenceInfo$fOrdEvidenceInfo$fFunctorEvidenceInfo DiffIdentDiffdiffFilediffAstsdiffAstnormalizeIdentsdiffListeqDiffvalidAstvalidateScopes HieHeader HieFileResulthie_file_resulthie_file_result_ghc_versionhie_file_result_versionhieMagic writeHieFilereadHieFileWithVersion readHieFile EqualCtListFunEqMapDictMapTcAppMapisEmptyTcAppMap emptyTcAppMapdelTcApp insertTcApp alterTcAppfilterTcAppMap tcAppMapToBag foldTcAppMap emptyDictMapfindDictfindDictsByClassfindDictsByTyConKey dictsToBag foldDicts emptyFunEqs findFunEqfindFunEqsByTyCon insertFunEqaddToEqualCtListfilterEqualCtListInteractResult KeepInertKeepWork KickOutSpec KOAfterUnify KOAfterAdding InertIrredsInertEqs InertCansICinert_given_eqsinert_given_eq_lvl inert_irredsinert_safehask inert_insts inert_dicts inert_funeqs inert_eqsinert_solved_dictsinert_famapp_cacheinert_cycle_breakers inert_cansCycleBreakerVarStackWorkListWL wl_implicswl_rest wl_rw_eqswl_eqsappendWorkList workListSizeextendWorkListEqextendWorkListEqsextendWorkListNonEqextendWorkListImplicextendWorkListCtextendWorkListCtListextendWorkListCtsisEmptyWorkList emptyWorkListselectWorkItem emptyInert addEqToCans foldTyEqsdelEqfindEqpartitionInertEqs foldFunEqspartitionFunEqsupdDictsdelDictaddDict addSolvedDict filterDictspartitionDictsaddIrredToCans addIrredsaddIrred updIrredsdelIrred foldIrredsfindMatchingIrreds updGivenEqskickOutRewritableLHSnoGivenNewtypeReprEqsnoMatchableGivenDictsmightEqualLaterprohibitedSuperClassSolvepushCycleBreakerVarStackaddCycleBreakerBindingsforAllCycleBreakerBindings_solveOneFromTheOther$fOutputableWorkList$fOutputableInertCans$fOutputableInertSet$fOutputableInteractResult PmAltConSetPmAltCon PmAltConLikePmAltLit PmEqualityEqualDisjointPossiblyOverlap PmLitValuePmLitIntPmLitRat PmLitChar PmLitString PmLitOverInt PmLitOverRatPmLitOverStringPmLit pm_lit_val pm_lit_tyResidualCompleteMatchesRCM rcm_pragmas rcm_vanillaBotInfoIsBotIsNotBotMaybeBot PmAltConAppPACApaca_idspaca_tvspaca_conVarInfovi_rcmvi_botvi_negvi_posvi_idTmStateTmStts_dirtyts_repsts_factsTyStateTySt ty_st_inertty_st_nNablasMkNablasNablaMkNabla nabla_tm_st nabla_ty_st initNablasgetRcmisRcmInitialised lookupVarInfolookupVarInfoNT trvVarInfo lookupRefutslookupSolution pmLitTypeemptyPmAltConSetisEmptyPmAltConSetelemPmAltConSetextendPmAltConSetpmAltConSetElems eqPmAltCon pmAltConTypeisPmAltConMatchStrictpmAltConImplBangsliteralToPmLit negatePmLit overloadPmLitpmLitAsStringLitcoreExprAsPmLit$fOutputableTyState$fOutputableBotInfo#$fOutputableResidualCompleteMatches$fOutputablePmLitValue$fOutputablePmLit$fOutputablePmEquality $fEqPmLit$fOutputablePmAltCon $fEqPmAltCon$fOutputablePmAltConApp$fOutputablePmAltConSet$fOutputableVarInfo$fOutputableTmState$fOutputableNabla$fMonoidNablas$fSemigroupNablas$fOutputableNablas$fEqPmEquality$fShowPmEquality $fEqBotInfoPostPre CheckResult cr_approxcr_uncovcr_retRedSetsrs_bangsrs_divrs_cov Precision ApproximatePrecise PmPatBind PmEmptyCasepe_varPmGRHSpg_rhspg_grdsPmGRHSs pgs_grhsspgs_lclsPmMatchpm_grhsspm_pats PmMatchGroupGrdVecSrcInfoPmGrdPmConPmBangPmLet pm_con_args pm_con_dicts pm_con_tvs pm_con_conpm_id_pm_loc _pm_let_expr$fOutputableSrcInfo$fOutputablePmGrd$fOutputableGrdVec$fOutputablePmGRHS$fOutputablePmGRHSs$fOutputablePmMatch$fOutputablePmMatchGroup$fOutputablePmEmptyCase$fOutputablePmPatBind$fMonoidPrecision$fSemigroupPrecision$fOutputablePrecision$fOutputableRedSets$fOutputableCheckResult$fFunctorCheckResult $fEqPrecision$fShowPrecision pprUncovered perhapsAsPat$fOutputableGhcHintDataConBuilderPrefixDataConBuilderInfixDataConBuilder PatBuilder PatBuilderPat PatBuilderPar PatBuilderAppPatBuilderAppTypePatBuilderOpApp PatBuilderVarPatBuilderOverLit SumOrTupleSumTuple pprSumOrTuple$fOutputablePatBuilder$fOutputableDataConBuilder FunDepEqnFDEqnfd_locfd_pred2fd_pred1fd_eqsfd_qtvs pprEquationinstFDimproveFromAnotherimproveFromInstEnvcheckInstCoveragecloseWrtFunDeps checkFunDeps$fOutputableFunDepEqn$fFunctorFunDepEqnFileHeaderPragmaType OptionsPrag IncludePrag LanguagePragDocOptionsPragTransLayoutReasonTransLayout_WhereTransLayout_PipeCmmParserErrorCmmUnknownPrimitiveCmmUnknownMacroCmmUnknownCConvCmmUnrecognisedSafetyCmmUnrecognisedHintLexErrLexErrorLexUnknownPragmaLexErrorInPragmaLexNumEscapeRangeLexStringCharLitLexStringCharLitEOFLexUnterminatedCommentLexUnterminatedOptionsLexUnterminatedQQ LexErrKindLexErrKind_EOFLexErrKind_UTF8LexErrKind_CharNumUnderscoreReasonNumUnderscore_IntegralNumUnderscore_FloatPsErrInPatDetails PEIP_NegApp PEIP_TypeArgsPEIP_RecPatternPEIP_OtherPatDetails ParseContextincomplete_do_blockis_infixPatIncompleteDoBlockYesIncompleteDoBlockNoIncompleteDoBlockPatIsRecursiveYesPatIsRecursiveNoPatIsRecursivePsErrParseDetailsped_pattern_parsedped_pat_syn_enabledped_mdo_in_last_100ped_do_in_last_100ped_th_enabled PsMessagePsUnknownMessagePsHeaderMessagePsWarnBidirectionalFormatCharsPsWarnTransitionalLayoutPsWarnUnrecognisedPragmaPsWarnMisplacedPragmaPsWarnHaddockInvalidPosPsWarnHaddockIgnoreMulti#PsWarnOperatorWhitespaceExtConflictPsErrLambdaCasePsErrEmptyLambdaPsErrNumUnderscoresPsErrPrimStringInvalidCharPsErrMissingBlock PsErrLexer PsErrSuffixAT PsErrParse PsErrCmmLexerPsErrUnsupportedBoxedSumExprPsErrUnsupportedBoxedSumPat#PsErrUnexpectedQualifiedConstructorPsErrTupleSectionInPatPsErrIllegalBangPatternPsErrOpFewArgsPsErrImportQualifiedTwicePsErrImportPostQualifiedPsErrIllegalExplicitNamespacePsErrVarForTyConPsErrIllegalPatSynExportPsErrMalformedEntityStringPsErrDotsInRecordUpdatePsErrPrecedenceOutOfRangePsErrOverloadedRecordDotInvalid%PsErrOverloadedRecordUpdateNotEnabled,PsErrOverloadedRecordUpdateNoQualifiedFieldsPsErrInvalidDataConPsErrInvalidInfixDataCon!PsErrIllegalPromotionQuoteDataConPsErrUnpackDataConPsErrUnexpectedKindAppInDataConPsErrInvalidRecordConPsErrIllegalUnboxedStringInPat#PsErrIllegalUnboxedFloatingLitInPatPsErrDoNotationInPatPsErrIfThenElseInPatPsErrLambdaCaseInPatPsErrCaseInPat PsErrLetInPatPsErrLambdaInPatPsErrArrowExprInPatPsErrArrowCmdInPatPsErrArrowCmdInExprPsErrViewPatInExprPsErrTypeAppWithoutSpacePsErrLazyPatWithoutSpacePsErrBangPatWithoutSpacePsErrUnallowedPragmaPsErrQualifiedDoInCmdPsErrInvalidInfixHolePsErrSemiColonsInCondExprPsErrSemiColonsInCondCmdPsErrAtInPatPosPsErrLambdaCmdInFunAppCmdPsErrCaseCmdInFunAppCmdPsErrLambdaCaseCmdInFunAppCmdPsErrIfCmdInFunAppCmdPsErrLetCmdInFunAppCmdPsErrDoCmdInFunAppCmdPsErrDoInFunAppExprPsErrMDoInFunAppExprPsErrLambdaInFunAppExprPsErrCaseInFunAppExprPsErrLambdaCaseInFunAppExprPsErrLetInFunAppExprPsErrIfInFunAppExprPsErrProcInFunAppExprPsErrMalformedTyOrClDeclPsErrIllegalWhereInDataDeclPsErrIllegalDataTypeContextPsErrParseErrorOnInputPsErrMalformedDeclPsErrNotADataConPsErrRecordSyntaxInPatSynDeclPsErrEmptyWhereInPatSynDecl!PsErrInvalidWhereBindInPatSynDecl"PsErrNoSingleWhereBindInPatSynDeclPsErrDeclSpliceNotAtTopLevelPsErrInferredTypeVarNotAllowed+PsErrMultipleNamesInStandaloneKindSignaturePsErrIllegalImportBundleFormPsErrUnexpectedTypeInDeclPsErrExpectedHyphenPsErrSpaceInSCCPsErrInvalidPackageName PsErrInvalidRuleActivationMarkerPsErrLinearFunctionPsErrMultiWayIfPsErrExplicitForallPsErrIllegalQualifiedDoPsErrCmmParser#PsErrIllegalTraditionalRecordSyntaxPsErrParseErrorInCmd PsErrInPatPsErrParseRightOpSectionInPat"PsErrIllegalGadtRecordMultiplicityPsErrInvalidCApiImportPsErrMultipleConForNewtypePsErrUnicodeCharLooksLikePsErrParseLanguagePragmaPsErrUnsupportedExtPsErrParseOptionsPragmaPsErrUnknownOptionsPragmaPsError PsWarningnoParseContextincompleteDoBlockfromParseContext$fGenericPsMessage$fShowLexErrKind$fEqLexErrKind$fOrdLexErrKind$fShowNumUnderscoreReason$fEqNumUnderscoreReason$fOrdNumUnderscoreReason$fEqParseContext$fEqPatIncompleteDoBlock$fGenericPsHeaderMessage TickishType ProfNotesHpcTicks Breakpoints SourceNotes tick_labeltick_ids tick_pathtick_loc TicksConfigticks_countEntriesticks_profAuto ticks_passesaddTicksToBindsstripTicksTopHsExprisGoodSrcSpan' $fMonadTM$fApplicativeTM $fFunctorTM$fEqTickishType$fEqTickDensitywriteMixEntries hpcInitCode BindsTypeUnliftedTypeBinds StrictBindsExhaustivityCheckTypeNegLiteralExtEnabledYesUsingNegLiteralsNotUsingNegLiteralsThRejectionReasonThAmbiguousRecordUpdatesThAbstractClosedTypeFamilyThForeignLabelThForeignExportThMinimalPragmas ThSCCPragmasThNoUserInlineThExoticFormOfTypeThAmbiguousRecordSelectorsThMonadComprehensionSyntax ThCostCentresThExpressionFormThExoticStatementThExoticLiteralThExoticPatternThGuardedLambdasThNegativeOverloadedPatternsThHaddockDocumentationThWarningAndDeprecationPragmasThSplicesWithinDeclBracketsThNonLinearDataConDsArgNum DsMessageDsUnknownMessageDsEmptyEnumerationDsIdentitiesFoundDsOverflowedLiteralsDsRedundantBangPatternsDsOverlappingPatternsDsInaccessibleRhsDsNonExhaustivePatternsDsTopLevelBindsNotAllowed)DsUselessSpecialiseForClassMethodSelector&DsUselessSpecialiseForNoInlineFunction#DsMultiplicityCoercionsNotSupported DsOrphanRuleDsRuleLhsTooComplicatedDsRuleIgnoredDueToConstructorDsRuleBindersNotBound#DsLazyPatCantBindVarsOfUnliftedTypeDsNotYetHandledByTHDsAggregatedViewExpressionsDsUnbangedStrictPatterns"DsCannotMixPolyAndUnliftedBindings DsWrongDoBindDsUnusedDoBind"DsRecBindsNotAllowedForUnliftedTysDsRuleMightInlineFirstDsAnotherRuleMightFireFirstMaxPmCheckModelsMaxUncoveredPatternsMaxBoundMinBoundnegLiteralExtEnabled$fGenericDsMessageDriverMessageOptsifaceDiagnosticOptspsDiagnosticOpts DriverMessageDriverUnknownMessageDriverPsHeaderMessageDriverMissingHomeModulesDriverUnknownReexportedModulesDriverUnknownHiddenModulesDriverUnusedPackagesDriverUnnecessarySourceImports!DriverDuplicatedModuleDeclarationDriverModuleNotFoundDriverFileModuleNameMismatchDriverFileNotFound DriverStaticPointersNotSupportedDriverBackpackModuleNotFoundDriverUserDefinedRuleIgnoredDriverMixedSafetyImportDriverCannotLoadInterfaceFileDriverInferredSafeModule&DriverMarkedTrustworthyButInferredSafeDriverInferredSafeImportDriverCannotImportUnsafeModuleDriverMissingSafeHaskellModeDriverPackageNotTrusted&DriverCannotImportFromUntrustedPackageDriverRedirectedNoMainDriverHomePackagesNotClosedDriverInterfaceErrorDriverInconsistentDynFlags!DriverSafeHaskellIgnoredExtensionDriverPackageTrustIgnoredDriverUnrecognisedFlagDriverDeprecatedFlagDriverMessagesGhcMessageOptsdriverMessageOpts dsMessageOpts tcMessageOpts psMessageOpts GhcMessage GhcPsMessageGhcTcRnMessage GhcDsMessageGhcDriverMessageGhcUnknownMessageWarnMsg ErrorMessagesWarningMessagesghcUnknownMessagehoistTcRnMessagehoistDsMessagecheckBuildingCabalPackage$fGenericGhcMessage$fGenericDriverMessageconstructorCode$fGDiagnosticCodeM1$fGDiagnosticCode:+:$fGDiagnosticCodeM10$fHasTypetyorigf$fHasTypetyorigM1$fConstructorCodeconfJust$fConstructorCodeconfJust0+$fHasTypeProdMaybeSymbolTYPEtyNothingorigfg($fHasTypeProdMaybeSymbolTYPEtyJustorigfg$fHasTypetyorig:*:$fConstructorCodeconfNothingpsHeaderMessageDiagnosticpsHeaderMessageReasonpsHeaderMessageHintssuggestParensAndBlockArgspp_unexpected_fun_appparse_error_in_pat forallSympprFileHeaderPragmaType$fDiagnosticPsMessageMonadPaddError addWarning addFatalErrorgetBitallocateCommentsPallocatePriorCommentsPallocateFinalCommentsPExtBitsFfiBitInterruptibleFfiBit CApiFfiBit ArrowsBitThBit ThQuotesBitIpBitOverloadedLabelsBitExplicitForallBit BangPatBitPatternSynonymsBit HaddockBit MagicHashBitRecursiveDoBitQualifiedDoBitUnicodeSyntaxBitUnboxedParensBitDatatypeContextsBitMonadComprehensionsBitTransformComprehensionsBitQqBitRawTokenStreamBitAlternativeLayoutRuleBitALRTransitionalBitRelaxedLayoutBitNondecreasingIndentationBitSafeHaskellBitTraditionalRecordSyntaxBitExplicitNamespacesBit LambdaCaseBitBinaryLiteralsBitNegativeLiteralsBitHexFloatLiteralsBitStaticPointersBitNumericUnderscoresBit StarIsTypeBitBlockArgumentsBitNPlusKPatternsBitDoAndIfThenElseBit MultiWayIfBit GadtSyntaxBitImportQualifiedPostBitLinearTypesBitNoLexicalNegationBitOverloadedRecordDotBitOverloadedRecordUpdateBitExtendedLiteralsBit InRulePragBitInNestedCommentBitUsePosPragsBitunPPState hdk_comments comment_qheader_commentseof_posalr_justClosedExplicitLetBlockalr_expecting_ocurly alr_context alr_last_localr_next_tokenalr_pending_implicit_tokenssrcfiles lex_stateloclast_lenlast_locprev_loclast_tk tab_count tab_firsterrorswarningsoptionsbuffer HdkCommentHdkCommentNextHdkCommentPrevHdkCommentNamedHdkCommentSection ParserOptspSupportedExts pDiagOpts pExtsBitmap ParseResultTokenITasITcaseITclassITdata ITdefault ITderivingITdoITelseIThiding ITforeignITifITimportITinITinfixITinfixlITinfixr ITinstanceITletITmodule ITnewtypeITof ITqualifiedITthenITtypeITwhereITforallITexportITlabel ITdynamicITsafeITinterruptibleITunsafe ITstdcallconv ITccallconv ITcapiconvITprimcallconvITjavascriptcallconvITmdoITfamilyITroleITgroupITbyITusing ITpatternITstaticITstock ITanyclassITviaITunit ITsignature ITdependency ITrequires ITinline_prag ITopaque_prag ITspec_pragITspec_inline_prag ITsource_prag ITrules_pragITwarning_pragITdeprecated_prag ITline_prag ITcolumn_prag ITscc_prag ITunpack_pragITnounpack_prag ITann_pragITcomplete_prag ITclose_pragIToptions_pragITinclude_pragITlanguage_pragITminimal_pragIToverlappable_pragIToverlapping_pragIToverlaps_pragITincoherent_pragITctypeITcomment_line_pragITdotdotITcolonITdcolonITequalITlamITlcaseITlcasesITvbarITlarrowITrarrowITdarrowITlollyITminus ITprefixminusITbangITtildeITat ITtypeApp ITpercentITstarITdotITprojITbiglamITocurlyITccurly ITvocurly ITvccurlyITobrack ITopabrack ITcpabrackITcbrackIToparenITcparen IToubxparen ITcubxparenITsemiITcomma ITunderscore ITbackquote ITsimpleQuoteITvaridITconidITvarsymITconsymITqvaridITqconid ITqvarsym ITqconsym ITdupipvarid ITlabelvaridITcharITstring ITinteger ITrational ITprimchar ITprimstring ITprimint ITprimword ITprimint8 ITprimint16 ITprimint32 ITprimint64 ITprimword8 ITprimword16 ITprimword32 ITprimword64 ITprimfloat ITprimdoubleITopenExpQuoteITopenPatQuoteITopenDecQuoteITopenTypQuote ITcloseQuoteITopenTExpQuoteITcloseTExpQuoteITdollarITdollardollar ITtyQuote ITquasiQuote ITqQuasiQuoteITprocITrec IToparenbar ITcparenbar ITlarrowtail ITrarrowtail ITLarrowtail ITRarrowtail ITunknownITeof ITdocComment ITdocOptions ITlineCommentITblockCommentPFailedPOkwarnoptfailMsgP failLocMsgP getPState setSrcLoc getRealSrcLoc setLastToken adjustChar nextIsEOF pushLexState popLexState getLexState activeContextxtestxsetxunset mkParserOptsdisableHaddock initPragStateinitParserStategetCommentsForgetPriorCommentsForgetFinalCommentsFor getEofPos addPsMessagegetPsErrorMessages getPsMessages popContextpushModuleContext srcParseFaillexerlexerDbglexTokenStream mkParensEpAnnallocateCommentsallocatePriorCommentsallocateFinalCommentscommentToAnnotation$fOutputableToken$fMonadP$fApplicativeP $fFunctorP $fMonadPP $fEnumExtBits$fShowHdkComment$fShowLayoutContext $fShowToken $fShowOpWsPV ImpExpQcSpec ImpExpQcName ImpExpQcTypeImpExpQcWildcard ImpExpSubSpec ImpExpAbs ImpExpAll ImpExpList ImpExpAllWithDisambTDmkHsAppTyHeadPV mkHsAppTyPVmkHsAppKindTyPV mkHsOpTyPVmkUnpackednessPV DisambECPInfixOpFunArg ecpFromCmd' ecpFromExp'mkHsProjUpdatePV mkHsLamPV mkHsLetPV superInfixOp mkHsOpAppPV mkHsCasePV mkHsLamCasePV superFunArg mkHsAppPV mkHsAppTypePVmkHsIfPVmkHsDoPV mkHsParPV mkHsVarPV mkHsLitPV mkHsOverLitPVmkHsWildCardPV mkHsTySigPVmkHsExplicitListPV mkHsSplicePV mkHsRecordPV mkHsNegAppPVmkHsSectionR_PV mkHsViewPatPV mkHsAsPatPV mkHsLazyPatPV mkHsBangPatPVmkSumOrTuplePVrejectPragmaPV DisambInfixOp mkHsVarOpPV mkHsConOpPVmkHsInfixHolePVFbindECPunECPUnpackednessPragma RuleTyTmVar LRuleTyTmVarmkTyClDmkInstD mkClassDeclmkTyData mkTySynonymmkStandaloneKindSigmkTyFamInstEqn mkDataFamInst mkTyFamInst mkFamDecl mkSpliceDeclmkRoleAnnotDeclfromSpecTyVarBndrsfromSpecTyVarBndrannBindsfixValbindsAnn stmtsAnchorstmtsLoc cvTopDecls cvBindGroupmkPatSynMatchGroup mkConDeclH98 mkGadtDeclsetRdrNameSpace mkRuleBndrsmkRuleTyVarBndrscheckRuleTyVarBndrNamescheckRecordSyntaxcheckEmptyGADTscheckExpBlockArgumentscheckCmdBlockArguments checkContextcheckImportDecl checkPatterncheckPattern_detailsplaceHolderPunRhs checkValDefcheckValSigLhsmkBangTyaddUnpackednessPcheckMonadComp ecpFromExp ecpFromCmddataConBuilderCondataConBuilderDetails checkPrecPmkRecConstrOrUpdatemkRdrRecordUpdmkRdrRecordConmkInlinePragmamkOpaquePragmamkImport parseCImportmkExport mkExtNamemkModuleImpExp mkTypeImpExpcheckImportSpecmkImpExpSubSpecwarnPrepositiveQualifiedModule!failNotEnabledImportQualifiedPostfailImportQualifiedTwicewarnStarIsType failOpFewArgsrunPV hintBangPatmkMultTymkTokenLocationstarSym mkRdrGetFieldmkRdrProjection $fMonadPPV $fMonadPV$fApplicativePV$fDisambTDDataConBuilder$fDisambTDHsType$fDisambInfixOpRdrName$fDisambInfixOpHsExpr$fDisambECPPatBuilder$fDisambECPHsExpr$fDisambECPHsCmd $fFunctorPV$fFoldablePV_Result$fFunctorPV_Result$fTraversablePV_ResultconvertToHsDeclsconvertToHsExpr convertToPatconvertToHsTypethRdrNameGuesses $fMonadCvtM'$fApplicativeCvtM'$fCvtFlagBndrVisHsBndrVis$fCvtFlagSpecificitySpecificity$fCvtFlagUnitUnit$fFunctorCvtM'lexStringLiterallexHsDocCmmParserConfigcmmpStgToCmmConfig cmmpPDConfigcmmpParserOptsPDConfigpdSanitizeAlignment pdProfilePDunPDliftP failMsgPD getPDConfig getHomeUnitId $fMonadPD$fApplicativePD $fFunctorPDCmmToken CmmT_SpecChar CmmT_DotDotCmmT_DoubleColonCmmT_ShrCmmT_ShlCmmT_GeCmmT_LeCmmT_EqCmmT_Ne CmmT_BoolAnd CmmT_BoolOr CmmT_CLOSURECmmT_INFO_TABLECmmT_INFO_TABLE_RETCmmT_INFO_TABLE_FUNCmmT_INFO_TABLE_CONSTRCmmT_INFO_TABLE_SELECTOR CmmT_else CmmT_export CmmT_section CmmT_gotoCmmT_if CmmT_call CmmT_jump CmmT_foreign CmmT_never CmmT_prim CmmT_reserve CmmT_return CmmT_returns CmmT_import CmmT_switch CmmT_case CmmT_default CmmT_push CmmT_unwind CmmT_bits8 CmmT_bits16 CmmT_bits32 CmmT_bits64 CmmT_bits128 CmmT_bits256 CmmT_bits512 CmmT_float32 CmmT_float64 CmmT_gcptrCmmT_GlobalReg CmmT_Name CmmT_StringCmmT_Int CmmT_FloatCmmT_EOF CmmT_False CmmT_True CmmT_likely CmmT_Relaxed CmmT_Acquire CmmT_Release CmmT_SeqCstcmmlex$fShowCmmTokeninterfaceErrorHintsmissingInterfaceErrorHintsinterfaceErrorReasonmissingInterfaceErrorReason pkgHiddenHintmayShowLocationscantFindErrorXinterfaceErrorDiagnosticlookingForHeraldreadInterfaceErrorDiagnosticmissingInterfaceErrorDiagnostic$fDiagnosticIfaceMessage*$fHasDefaultDiagnosticOptsIfaceMessageOpts messageWithInfoDiagnosticMessagemessageWithHsDocContext!pprTypeDoesNotHaveFixedRuntimeReppprUntouchableVariable pprScopeErrortidySkolemInfotidySkolemInfoAnoninHsDocContextpprHsDocContextpprTyThingUsedWrong$fOutputableImportError$fOutputableSolverReportErrCtxt$fDiagnosticTcRnMessage)$fHasDefaultDiagnosticOptsTcRnMessageOptswriteMetaTyVarwriteMetaTyVarRef zonkTcType zonkTcTypeszonkCo zonkTcTyCon zonkTcTyVarzonkTcTyVarsToTcTyVarszonkTcTyVarToTcTyVarzonkInvisTVBinderzonkTcTypeAndFV zonkTyCoVarzonkTyCoVarsAndFVzonkDTyCoVarSetAndFVzonkTyCoVarsAndFVList zonkTcTyVarszonkTyCoVarKindzonkTyCoVarBndrKindzonkId zonkCoVarcheckCoercionHolezonkImplicationzonkWC zonkSimpleszonkCtzonkSkolemInfozonkSkolemInfoAnon tcInitTidyEnvtcInitOpenTidyEnvzonkTidyTcTypezonkTidyTcTypeszonkTidyOriginzonkTidyOriginszonkTidyFRRInfostidyCttidyDelayedError tidyEvVar badMonadBindpprEqn pprContextdots$fDiagnosticDsMessage$fDiagnosticDriverMessage+$fHasDefaultDiagnosticOptsDriverMessageOpts$fDiagnosticGhcMessage($fHasDefaultDiagnosticOptsGhcMessageOptsmkSrcErrsrcErrorMessages throwErrors throwOneErrorhandleSourceError$fExceptionSourceError$fShowSourceError printMessagesprintOrThrowDiagnosticsmkDriverPsHeaderMessage initDiagOptsinitPrintConfiginitPsMessageOptsinitTcMessageOptsinitDsMessageOptsinitIfaceMessageOptsinitDriverMessageOptsEwMWarnErrerrMsgOptKindNoArgHasArgSepArg OptPrefix OptIntSuffix IntSuffix WordSuffix FloatSuffixPassFlag AnySuffix GhcFlagModeOnlyGhcOnlyGhciAllModes HiddenFlagFlag flagGhcMode flagOptKindflagNamedefFlag defGhcFlag defGhciFlag defHiddenFlag hoistFlagrunEwMaddErraddWarn addFlagWarngetArg getCurLocliftEwMwarnsToMessages processArgsparseResponseFileerrorsToGhcException $fMonadIOEwM $fMonadEwM$fApplicativeEwM $fFunctorEwM hsLPatType hsPatType hsLitType lhsExprType hsExprType hsWrapperType ppSourceStatsBlankEpAnnotationsNoBlankEpAnnotations BlankSrcSpanBlankSrcSpanFileNoBlankSrcSpanshowAstDataFull showAstData$fEqBlankEpAnnotations$fShowBlankEpAnnotations$fEqBlankSrcSpan$fShowBlankSrcSpan ContainsHooks extractHooksHasHooksgetHooksHooks emptyHooks IOEnvFailureIOEnvfailM failWithMrunIOEnvfixMtryMtryAllMtryMostMunsafeInterleaveMuninterruptibleMaskM_ newMutVar writeMutVar readMutVar updMutVaratomicUpdMutVaratomicUpdMutVar'setEnvupdEnv$fMonadPlusIOEnv$fAlternativeIOEnv$fHasModuleIOEnv$fHasLoggerIOEnv$fHasHooksIOEnv$fHasDynFlagsIOEnv$fApplicativeIOEnv$fMonadFailIOEnv $fMonadIOEnv$fMonadIOIOEnv$fFunctorIOEnv$fExceptionIOEnvFailure$fShowIOEnvFailure$fMonadThrowIOEnv$fMonadCatchIOEnv$fMonadMaskIOEnv$fMonadFixIOEnv HoleFitPlugin StaticPlugin LoadedPluginPlugins emptyPluginsInteractiveImportIIDeclIIModuleInteractiveContext ic_pluginsic_cwd ic_int_printic_monad ic_resume ic_default ic_fix_env ic_instances ic_gre_cache ic_tythings ic_imports ic_mod_index ic_dflagsemptyInteractiveContext icReaderEnvicInteractiveModule icInScopeTTs icNamePprCtxextendInteractiveContextextendInteractiveContextWithIdssetInteractivePrintNamereplaceImportEnvicExtendGblRdrEnvsubstInteractiveContext$fOutputableInteractiveImportHscEnvhsc_llvm_config hsc_tmpfs hsc_hooks hsc_logger hsc_unit_env hsc_plugins hsc_interphsc_type_env_varshsc_FChsc_NChsc_IC hsc_mod_graph hsc_targets hsc_dflags$fContainsDynFlagsHscEnv$fHasLoggerHsc$fHasDynFlagsHsc $fFunctorHsc$fApplicativeHsc $fMonadHsc $fMonadIOHscrunHscrunHsc'mkInteractiveHscEnvrunInteractiveHsc hsc_home_unithsc_home_unit_maybe hsc_unitshsc_HPThsc_HUEhsc_HUGhsc_all_home_unit_idshscUpdateHPT_lazy hscUpdateHPT hscUpdateHUGhscEPShptCompleteSigshptAllInstanceshptInstancesBelowhptRuleshptAnns hptAllThingshptSomeThingsBelowUsprepareAnnotations lookupTypelookupIfaceByModule mainModIs hscInterphscUpdateLoggerFlagshscUpdateFlags hscSetFlagshscSetActiveHomeUnithscSetActiveUnitIdhscActiveUnitId discardIC WarnErrLoggerGhcTunGhcTGhcunGhcGhcMonad getSession setSession withSessiongetSessionDynFlags modifySessionmodifySessionMwithTempSession modifyLogger pushLogHookM popLogHookMputMsgM putLogMsgM withTimingMlogDiagnostics reflectGhcreifyGhcliftGhcTprintExceptiondefaultWarnErrLogger $fGhcMonadGhc$fHasLoggerGhc$fHasDynFlagsGhc$fGhcMonadGhcT$fHasLoggerGhcT$fHasDynFlagsGhcT $fFunctorGhcT$fApplicativeGhcT $fMonadGhcT$fMonadFailGhcT$fMonadFixGhcT$fMonadThrowGhcT$fMonadCatchGhcT$fMonadMaskGhcT $fMonadIOGhcT $fFunctorGhc$fApplicativeGhc $fMonadGhc$fMonadFailGhc $fMonadFixGhc$fMonadThrowGhc$fMonadCatchGhc$fMonadMaskGhc $fMonadIOGhcCoreMfloatToTopLevelOnlyfloatOutOverSatAppsfloatOutConstantsfloatOutLambdasrunCoreMliftIOWithCount getHscEnv initRuleEnvgetExternalRuleBase getNamePprCtx getSrcSpanM addSimplCount getUniqMaskmapDynFlagsCoreMdropSimplCountgetInteractiveContextgetPackageFamInstEnvgetAnnotationsgetFirstAnnotationsmsgputMsgSfatalErrorMsgSdebugTraceMsgS$fOutputableFloatOutSwitches$fHasModuleCoreM$fHasLoggerCoreM$fHasDynFlagsCoreM$fMonadIOCoreM$fMonadUniqueCoreM$fMonadPlusCoreM$fAlternativeCoreM$fApplicativeCoreM $fMonadCoreM$fFunctorCoreM LintConfigl_varsl_flags l_platform l_diagOpts WarnsAndErrsStaticPtrCheck AllowAnywhereAllowAtTopLevelRejectEverywhere LintFlagsLFlf_check_fixed_replf_check_linearitylf_report_unsat_synslf_check_static_ptrslf_check_inline_loop_breakerslf_check_global_idsLintPassResultConfiglpr_localsInScope lpr_passPprlpr_showLintWarningslpr_makeLintFlags lpr_platform lpr_diagOpts EndPassConfigep_passDetails ep_prettyPass ep_dumpFlag ep_namePprCtxep_lintPassResultep_dumpCoreSizes endPassIOdumpPassResultlintPassResultdisplayLintResultslintCoreBindings' lintUnfoldinglintExpr lintAxioms lintAnnots$fMonadFailLintM$fEqStaticPtrCheck SimplifyOptsso_top_env_cfg so_hpt_rulesso_pass_result_cfgso_mode so_iterationsso_dump_core_sizesSimplifyExprOptsse_top_env_cfgse_mode se_fam_inst simplifyExpr simplifyPgmCoreToDoCoreDoSimplifyCoreDoPluginPassCoreDoFloatInwardsCoreDoFloatOutwardsCoreLiberateCaseCoreDoPrintCoreCoreDoStaticArgsCoreDoCallArity CoreDoExitify CoreDoDemand CoreDoCprCoreDoWorkerWrapperCoreDoSpecialisingCoreDoSpecConstrCoreCSECoreDoRuleCheck CoreDoNothing CoreDoPasses CoreDesugarCoreDesugarOptCoreTidyCorePrepCoreAddCallerCcsCoreAddLateCcsCorePluginPass bindsOnlyPasspprPassDetails$fOutputableCoreToDointeractiveInScopeendPassendPassHscEnvIOlintCoreBindingsinitEndPassConfiginitLintPassResultConfiginitLintConfigTHDocsDocLocDeclDocArgDocInstDoc ModuleDoc RoleAnnotEnvDefaultingPlugin dePluginStop dePluginRun dePluginInitFillDefaultingDefaultingPluginResultDefaultingProposal deProposalCtsdeProposalCandidatesdeProposalTyVarTcPluginRewriteResultTcPluginNoRewriteTcPluginRewriteTotcRewriterNewWantedstcPluginReductionTcPluginSolveResulttcPluginNewCtstcPluginSolvedCtstcPluginInsolubleCtsTcPlugin tcPluginStoptcPluginRewrite tcPluginSolve tcPluginInit TcPluginM runTcPluginMTcPluginRewriterTcPluginSolver SelfBootInfo NoSelfBootSelfBootsb_mdstcg_next_wrapper_num tcg_cc_sttcg_complete_matches tcg_static_wc tcg_top_loctcg_hf_pluginstcg_defaulting_pluginstcg_tc_plugin_rewriterstcg_tc_plugin_solverstcg_safe_infer_reasonstcg_safe_infertcg_main tcg_self_boottcg_hpc tcg_doc_hdr tcg_patsyns tcg_fords tcg_rules tcg_fam_insts tcg_insts tcg_ksigstcg_tcstcg_anns tcg_warns tcg_imp_specstcg_sigs tcg_binds tcg_tr_module tcg_ev_binds tcg_th_docstcg_th_remote_state tcg_th_statetcg_th_corepluginstcg_th_modfinalizerstcg_th_topnamestcg_th_foreign_filestcg_th_topdeclstcg_dependent_files tcg_rn_declstcg_rn_importstcg_rn_exports tcg_merged tcg_dfun_ntcg_th_needed_depstcg_th_splice_used tcg_th_usedtcg_keep tcg_used_grestcg_dus tcg_imports tcg_exports tcg_ann_envtcg_fam_inst_env tcg_inst_env tcg_type_env tcg_fix_env tcg_default tcg_rdr_envtcg_srctcg_semantic_modtcg_modFrontendResultFrontendTypecheckIfLclEnv if_id_env if_tv_envif_implicits_env if_nsubstif_locif_bootif_modIfGblEnv if_rec_typesif_doc RewriteEnvRE re_rewriters re_eq_rel re_flavourre_locenv_lclenv_gblenv_umenv_topTcMRnMIfLIfGIfMTcRnTcRnIf NameShapens_map ns_exports ns_mod_name TcPluginOkTcPluginContradictiontcVisibleOrphanMods bootExportsremoveBindingShadowing mkModDepsemptyImportAvailsplusImportAvailsunsafeTcPluginTcMmkRoleAnnotEnvemptyRoleAnnotEnvlookupRoleAnnot getRoleAnnots lintGblEnv$fContainsModuleEnv$fContainsLoggerEnv$fContainsHooksEnv$fContainsDynFlagsEnv$fOutputableDefaultingProposal$fContainsModuleTcGblEnv$fFunctorTcPluginM$fApplicativeTcPluginM$fMonadTcPluginM$fMonadFailTcPluginM $fEqDocLoc $fOrdDocLocHoleFitPluginR hfPluginStop hfPluginRun hfPluginInit fitPlugin candPlugin FitPlugin CandPluginfrontendFrontendPluginActionloadedPluginDeps loadedPluginsexternalPlugins staticPlugins CorePluginPluginRecompileForceRecompileNoForceRecompileMaybeRecompilespPluginExternalPluginepModuleepUnitepPluginlpModulelpPluginPluginWithArgs paArgumentspaPlugininterfaceLoadActionspliceRunActiontypeCheckResultActionrenamedResultActionparsedResultActionpluginRecompile driverPlugin holeFitPlugindefaultingPlugintcPlugininstallCoreToDos ParsedResultparsedResultMessagesparsedResultModule PsMessagespsErrors psWarningsCommandLineOption lpModuleNamepluginRecompile' purePlugin impurePlugin flagRecompile defaultPluginkeepRenamedSourcepluginsWithArgs withPlugins mapPlugins withPlugins_defaultFrontendPluginloadExternalPlugins$fMonoidPluginRecompile$fSemigroupPluginRecompile$fOutputablePluginRecompile PhaseHookTPhaseT_Unlit T_FileArgsT_CppT_HsPp T_HscRecompT_Hsc T_HscPostTc T_HscBackendT_CmmCppT_CmmT_CcT_AsT_Js T_ForeignJs T_LlvmOpt T_LlvmLlc T_LlvmMangleT_MergeForeigncmmToRawCmmHook stgToCmmHookcreateIservProcessHookgetValueSafelyHookrunRnSpliceHooklinkHook runMetaHook runPhaseHookghcPrimIfaceHookhscCompileCoreExprHookhscFrontendHooktcForeignExportsHooktcForeignImportsHookdsForeignsHookDsForeignsHookinitFinderCacheflushFinderCacheslookupFileCachefindImportedModulefindPluginModulefindExactModulefindExposedPackageModuleaddModuleToFinderaddHomeModuleToFinder uncacheModulefindHomeModulemkHomeModLocationmkHomeModLocation2mkHiOnlyModLocation mkObjPathmkHiPath mkStubPathsfindObjectLinkableMaybefindObjectLinkable badIfaceFilecannotFindInterfacecantFindInstalledErrcannotFindModule specProgram$fOutputableSpecEnv$fOutputableDictBind$fOutputableFloatedDictBinds$fOutputableSpecArg$fOutputableCallInfo$fOutputableCallInfoSetspecConstrProgram$fOutputableValue$fOutputableHowBound$fOutputableCall$fOutputableArgOcc$fOutputableScUsage$fOutputableCallPat FloatSpecFloatMeStayPut LevelTypeBndrLvl JoinCeilLvlLevel LevelledBndr LevelledBind LevelledExprfloatSpecLevel tOP_LEVEL incMinorLvl asJoinCeilLvlltLvlltMajLvlisTopLvl isJoinCeilLvl setLevels $fEqLevel$fOutputableLevel$fOutputableFloatSpec $fEqLevelType floatOutwards$fOutputableFloatBindsaddCallerCostCentresFlagSpecflagSpecGhcModeflagSpecAction flagSpecFlag flagSpecNameCmdLinePsettingspgm_Lpgm_Ppgm_Fpgm_cpgm_cxxpgm_apgm_lpgm_lmpgm_dllpgm_T pgm_windrespgm_lccpgm_ar pgm_ranlibpgm_lopgm_lcpgm_iopt_Lopt_Popt_P_signatureopt_Fopt_copt_cxxopt_aopt_lopt_lm opt_windresopt_lccopt_loopt_lcopt_ipackageTrustOn safeHaskellOnsafeHaskellModeEnabledsafeLanguageOn safeInferOn safeImportsOnsafeDirectImpsReqsafeImplicitImpsReq unsafeFlagsunsafeFlagsForInfergetOpts getVerbFlags setOutputFilesetDynOutputFile setOutputHisetDynOutputHiaddPluginModuleName updOptLevelparseDynamicFlagsCmdLineparseDynamicFilePragmagetCmdLineStateputCmdLineState runCmdLinePprocessCmdLinePparseDynamicFlagsFullflagSuggestionsallNonDeprecatedFlagsflagsAll flagsDynamic flagsPackageflagsForCompletion flagSpecOf wWarningFlagsfFlags fLangFlagssupportedLanguagesAndExtensionsxFlags impliedGFlagsimpliedOffGFlags impliedXFlagsglasgowExtsFlagssetGeneralFlag'unSetGeneralFlag' setUnitIdaugmentByWorkingDirectorysetFlagsFromEnvFile setTmpDir picCCOpts pieCCLDOptspicPOpts compilerInfomakeDynFlagsConsistentsetUnsafeGlobalDynFlagsisSse4_2Enabled isAvxEnabled isAvx2EnabledisAvx512cdEnabledisAvx512erEnabledisAvx512fEnabledisAvx512pfEnabled isFmaEnabled isBmiEnabled isBmi2EnabledsccProfilingEnabledneedSourceNotesuseXLinkerRPath outputFile objectSufpprDynFlagsDiffupdatePlatformConstants$fApplicativeCmdLineP$fMonadCmdLineP$fEqDeprecation$fOrdDeprecation$fFunctorCmdLinePneededLinkArgs getLinkerInfogetLinkerInfo'getCompilerInfogetAssemblerInfogetCompilerInfo'runUnlitaugmentImportsrunCpprunPprunCc isContainedInaskLdrunAs runLlvmOpt runLlvmLlcrunClang runEmscriptenfigureLlvmVersionrunLinkrunMergeObjectsrunAraskOtoolrunInstallNameTool runRanlib runWindrestouchinitLlvmCgConfig codeOutputoutputForeignStubsprofilingInitCode ipInitCodeccsTypeccType storeCurCCS mkCCostCentremkCCostCentreStackcostCentreFrom staticProfHdr dynProfHdrinitUpdFrameProfsaveCurrentCostCentrerestoreCurrentCostCentre profDynAlloc profAllocinitInfoTableProv emitSetCCCldvRecordCreateldvEnterClosureldvEnter emitPrimCallwithNewTickyCounterFunwithNewTickyCounterLNEwithNewTickyCounterThunkwithNewTickyCounterStdThunkwithNewTickyCounterConemitTickyCounterTagtickyPushUpdateFrametickyUpdateFrameOmittedtickyEnterDynContickyEnterThunktickyUpdateBhCaf tickyEnterFun tickyEnterLNEtickyReturnOldContickyReturnNewContickyUnboxedTupleReturntickyDirectCalltickyKnownCallTooFewArgstickyKnownCallExacttickyKnownCallExtraArgs tickySlowCalltickySlowCallPat tickyDynAlloctickyAllocHeaptickyAllocPrimtickyAllocThunk tickyAllocPAPtickyHeapChecktickyStackCheck tickyTagged tickyUntagged tickyTagSkip$fToJsonTickyClosureType ClosureHeaderNoHeader StdHeader ThunkHeaderFieldOffOrPaddingFieldOffPadding emitReturnemitCalladjustHpBackwards directCallslowCallgetHpRelOffsetmkVirtHeapOffsetsWithPaddingmkVirtHeapOffsetsmkVirtConstrOffsetsmkVirtConstrSizes mkArgDescr getArgAmodegetNonVoidArgAmodesemitClosureProcAndInfoTableemitClosureAndInfoTable cgForeignCall emitCCallemitCCallNeverReturnsemitForeignCallemitSaveThreadStatesaveThreadState emitSaveRegsemitRestoreRegsemitPushArgRegsemitPopArgRegsemitCloseNurseryemitLoadThreadStateloadThreadStateemitOpenNurserytagSkeletonTopBind goodToLift closureGrowth stgLiftLamsBCInstrSTKCHECKPUSH_LPUSH_LLPUSH_LLLPUSH8PUSH16PUSH32PUSH8_WPUSH16_WPUSH32_WPUSH_G PUSH_PRIMOPPUSH_BCO PUSH_ALTSPUSH_ALTS_TUPLE PUSH_PAD8 PUSH_PAD16 PUSH_PAD32 PUSH_UBX8 PUSH_UBX16 PUSH_UBX32PUSH_UBX PUSH_ADDR PUSH_APPLY_N PUSH_APPLY_V PUSH_APPLY_F PUSH_APPLY_D PUSH_APPLY_L PUSH_APPLY_P PUSH_APPLY_PPPUSH_APPLY_PPPPUSH_APPLY_PPPPPUSH_APPLY_PPPPPPUSH_APPLY_PPPPPPSLIDEALLOC_APALLOC_AP_NOUPD ALLOC_PAPMKAPMKPAPUNPACKPACKLABELTESTLT_ITESTEQ_ITESTLT_WTESTEQ_W TESTLT_I64 TESTEQ_I64 TESTLT_I32 TESTEQ_I32 TESTLT_I16 TESTEQ_I16 TESTLT_I8 TESTEQ_I8 TESTLT_W64 TESTEQ_W64 TESTLT_W32 TESTEQ_W32 TESTLT_W16 TESTEQ_W16 TESTLT_W8 TESTEQ_W8TESTLT_FTESTEQ_FTESTLT_DTESTEQ_DTESTLT_PTESTEQ_PCASEFAILCCALLPRIMCALLSWIZZLEENTERRETURN RETURN_TUPLEBRK_FUN LocalLabel getLocalLabelProtoBCO protoBCOFFIs protoBCOExpr protoBCOArityprotoBCOBitmapSizeprotoBCOBitmapprotoBCOInstrs protoBCOName bciStackUse$fOutputableLocalLabel$fOutputableBCInstr$fOutputableProtoBCO$fEqLocalLabel$fOrdLocalLabelallocDynClosureallocDynClosureCmmallocHeapClosure emitSetDynHdrmkStaticClosureFieldsmkStaticClosureentryHeapCheckentryHeapCheck' altHeapCheckaltHeapCheckReturnsTonoEscapeHeapCheckheapStackCheckGen cgTopRhsCon buildDynCon bindConArgsSRTMap ModuleSRTInfo moduleSRTMapflatSRTs dedupSRTs thisModuleCAFEnvCAFSet cafAnalDatacafAnalemptySRT srtMapNonCAFsdoSRTs$fOutputablePenvSomeLabel$fOutputablePenvModuleSRTInfo $fEqSomeLabel$fOrdSomeLabel $fEqSRTEntry $fOrdSRTEntry$fEqCAFfyLabel$fOrdCAFfyLabel$fOutputablePenvSRTEntry$fOutputablePenvCAFfyLabelcgOpAppshouldInlinePrimOpcmmLayoutStacksetInfoTableStackMap$fOutputableStackMap$fOutputableStackSlot cmmPipelinecgBindcgExprcgTopRhsClosureemitBlackHoleCodepushUpdateFrameemitUpdateFramecodeGen parseCmmFileJSOptionCPPgetInstalledPackageLibDirsgetInstalledPackageHsLibs commonCppDefs jsExeFileNamegetOptionsFromJsFile $fEqJSOption $fOrdJSOption mkExtraObjmkExtraObjToLinkIntoBinarymkNoteObjsToLinkIntoBinary getLinkInfoplatformSupportsSavingLinkOptsghcLinkInfoSectionNameghcLinkInfoNoteName checkLinkInfohaveRtsOptsFlags initSysTools copyHandlecopyWithHeaderCppOptscppLinePragmascppUseCcdoCppgetGhcVersionPathName applyCDefsoffsetIncludePathsLinkSpec lks_extra_jslks_extra_rootslks_obj_root_filter lks_obj_files lks_unit_ids jsLinkBinaryjsLink emptyLinkPlanincrementLinkPlancomputeLinkDependenciesmkExportedFunsmkExportedModFuns embedJsFilestaticInitStatstaticDeclStat$fOutputableLinkSpec spawnJSInterp jsLinkRts jsLinkInterp jsLinkObjects jsLinkObject jsLoadFile jsRunServer interpCmd withExtInterpwithExtInterpStatus withIServ withJSInterpevalStmt abandonStmtevalIO evalStringevalStringToIOString mallocData mkCostCentres createBCOs addSptEntrycostCentreStackInfo newBreakArraystoreBreakpointbreakpointStatusgetBreakpointVar getClosure seqHValue initObjLinker lookupSymbol lookupClosurepurgeLookupSymbolCacheloadDLL loadArchive unloadObjaddLibrarySearchPathremoveLibrarySearchPath resolveObjsfindSystemLibrary stopInterpmkFinalizedHValuefreeReallyRemoteReffreeHValueRefswormhole wormholeReffromEvalResult getModBreaksinterpreterProfiledinterpreterDynamicrunInjectRPathsgetUnitFrameworkOptsgetFrameworkOpts loadFrameworkLinkDeps ldNeededUnitsldUnitsldAllLinkablesldNeededLinkables LinkDepsOpts ldLoadIfaceldWays ldMsgOpts ldUseByteCode ldFinderOpts ldFinderCache ldPprOpts ldUnitEnv ldModuleGraph ldOneShotMode ldObjSuffix getLinkDeps mkModBreakslinkBCOlookupStaticPtrlookupIElinkFail nameToCLabelmkITbls bcoFreeNames assembleBCOsassembleOneBCOmkNativeCallInfoLitiNTERP_STACK_CHECK_THRESH$fMonadAssembler$fApplicativeAssembler$fFunctorAssembler byteCodeGen$fOutputableDiscr$fHasDynFlagsBcM $fMonadBcM$fApplicativeBcM $fFunctorBcM $fEqDiscr $fOrdDiscrmaybeCreateManifest linkDynLib libmLinkOpts linkBinary linkStaticLibfingerprintDynFlagsfingerprintOptFlagsfingerprintHpcFlagsinitStgToCmmConfiggenerateCgIPEStublookupEstimatedTicksinitStgPprOptsinitParserOptsinitCmmParserConfiginitTicksConfigbreakpointsAllowed extractDocsmkDocStructuremkDocStructureFromExportListmkDocStructureFromDeclsgetNamedChunksmkMapsgetMainDeclBinder sigNameNoLoc getInstLoc subordinates conArgDocs h98ConArgDocsgadtConArgDocs con_arg_docsisValD classDecls declTypeDocs nubByNametypeDocs sigTypeDocstopDeclsungroup collectDocs filterDecls filterClasses isUserSigmkDecls extractTHDocs unionArgMapsDsM DsMetaValDsBoundDsSplice DsMetaEnvDsLclEnvdsl_unspecables dsl_nablasdsl_locdsl_metaDsGblEnvds_next_wrapper_numds_cc_stds_complete_matches ds_if_envds_msgsds_name_ppr_ctxds_gbl_rdr_envds_fam_inst_envds_mod$fContainsModuleDsGblEnvIsExtraConstraintYesExtraConstraintNoExtraConstraintinitTc initTcWithGblinitTcInteractive initTcRnIf discardResult getTopEnv updTopEnv getGblEnv updGblEnv setGblEnv getLclEnv updLclEnv updLclCtxt setLclEnv restoreLclEnvgetEnvssetEnvsupdEnvs restoreEnvsxoptMdoptMgoptMwoptMsetXOptM unsetXOptM unsetGOptM unsetWOptM whenDOptM whenGOptM whenWOptM whenXOptM unlessXOptM getGhcModewithoutDynamicNow updTopFlags getEpsVargetEps updateEps updateEps_getHpt getEpsAndHug withException withIfaceErr newArrowScopeescapeArrowScopenewUniqueSupplycloneLocalNamenewName newNameAt newSysName newSysLocalIdnewSysLocalIdstraceTctraceRn traceOptTcRn dumpOptTcRndumpTcRnprintForUserTcRntraceIf traceOptIf getIsGHCi getGHCiMonadgetInteractivePrintNametcIsHsBootOrSig tcHscSourcetcIsHsigtcSelfBootInfogetGlobalRdrEnv getRdrEnvs getImports getFixityEnvextendFixityEnvgetDeclaredDefaultTysaddDependentFilesinGeneratedCode setSrcSpansetInGeneratedCode setSrcSpanAaddLocMaddLocMAwrapLocM wrapLocAM wrapLocMA wrapLocFstM wrapLocFstMA wrapLocSndM wrapLocSndMA wrapLocM_ wrapLocMA_ getErrsVar setErrsVarfailWithfailAtaddErrAtmkDetailedMessageaddErrscheckErr checkErrAt addMessagesdiscardWarnings mkTcRnMessagereportDiagnosticsreportDiagnostic checkNoErrs whenNoErrsifErrsM failIfErrsM getErrCtxt setErrCtxt addErrCtxt addErrCtxtMaddLandmarkErrCtxtaddLandmarkErrCtxtM popErrCtxt getCtLocM mkCtLocEnv setCtLocM askNoErrstryCaptureConstraintscaptureConstraintstcCollectingUsagetcScalingUsagetcEmitBindingUsageattemptMrecoverMmapAndRecoverM mapAndReportMfoldAndRecoverMtryTc discardErrstryTcDiscardingErrsaddErrTc addErrTcM failWithTc failWithTcMcheckTccheckTcMfailIfTc failIfTcMwarnIf diagnosticTc diagnosticTcMaddDiagnosticTcaddDiagnosticTcMaddDetailedDiagnosticaddTcRnDiagnostic addDiagnosticaddDiagnosticAt mkErrInfodebugTc addTopEvBinds newTcEvBindsnewNoTcEvBindscloneEvBindsVargetTcEvTyCoVarsgetTcEvBindsMapsetTcEvBindsMap addTcEvBindchooseUniqueOccTcgetConstraintVarsetConstraintVaremitStaticConstraintsemitConstraints emitSimple emitSimplesemitImplicationemitImplicationsemitDelayedErrorsemitHole emitHolesemitNotConcreteErrordiscardConstraintspushLevelAndCaptureConstraints pushTcLevelM_ pushTcLevelM getTcLevel setTcLevelisTouchableTcM getLclTypeEnv setLclTypeEnvtraceTcConstraintsemitAnonTypeHoleemitNamedTypeHole recordThUserecordThSpliceUserecordThNeededRuntimeDeps keepAlivegetStagegetStageAndBindLevelsetStageaddModFinalizersWithLclEnvrecordUnsafeInfer finalSafeModefixSafeInstancesgetLocalRdrEnvsetLocalRdrEnv mkIfLclEnv initIfaceTcRn initIfaceLoadinitIfaceLoadModuleinitIfaceCheck initIfaceLclinitIfaceLclWithSubst getIfModulefailIfMforkMsetImplicitEnvM getCCIndexM getCCIndexTcM liftZonkM$fMonadUniqueIOEnv$fOutputableIsExtraConstraintnewLocalBndrRnnewLocalBndrsRnbindLocalNamesbindLocalNamesFV delLocalNamescheckDupRdrNames checkDupNamescheckShadowedRdrNamescheckDupAndShadowedNamescheckInferredVarsnoNestedForallsContextsErraddNoNestedForallsContextsErraddFvRnmapFvRn mapMaybeFvRnwarnUnusedTopBindscheckUnusedRecordWildcardwarnUnusedLocalBindswarnUnusedMatcheswarnUnusedTypePatternswarnForallIdentifieraddNameClashErrRnmkNameClashErr dupNamesErrbadQualBndrErr typeAppErrbadFieldConErr checkTupSize checkCTupSize wrapGenSpan genHsAppsgenHsApp genLHsApp genLHsVargenHsVar genAppType genLHsLitgenHsIntegralLit genHsTyLitgenSimpleConPat genVarPat genWildPatgenSimpleFunBind genFunBindisIrrefutableHsPatRn IsTermInTypesUnknownTermInTypes TermInTypes NoTermInTypes LookingForlf_wherelf_which WhereLooking WL_Anywhere WL_Global WL_LocalTop WL_LocalOnly WhatLooking WL_AnythingWL_Constructor WL_RecFieldWL_NonemkUnboundNameRdr mkUnboundGREmkUnboundGRERdrreportUnboundName'reportUnboundName unboundName unboundNameXunboundTermNameInTypestermNameInType notInScopeErrunknownNameSuggestionsfieldSelectorSuggestionssimilarNameSuggestionsnameSpacesRelated$fEqWhatLookingrnLHsDoc rnLDocDecl rnDocDeclrnHsDocnewGlobalBindernewInteractiveBinderallocateGlobalBinderifaceExportNames lookupOriglookupNameCacheexternaliseName setNameModule tcIfaceLclIdextendIfaceIdEnv tcIfaceTyVarlookupIfaceTyVarlookupIfaceVarextendIfaceTyVarEnvextendIfaceEnvslookupIfaceTop newIfaceName newIfaceNamestrace_iftrace_hi_diffsemptyNameShape mkNameShapeextendNameShapenameShapeExportssubstNameShapemaybeSubstNameShapeMethInfo TcMethInfo mkNewTyConRhs buildDataCon buildPatSyn buildClassnewImplicitBindernewTyConRepNameBinSymbolTablebin_symtab_mapbin_symtab_next TraceBinIFace QuietBinIFace CheckHiWay IgnoreHiWayreadBinIfaceHeader readBinIfacegetWithUserData writeBinIfaceputWithUserDataputSymbolTablegetSymbolTableputName getSymtabName$fEqCheckHiWayloadSysInterface tcRnModIfacetcRnModExports rnModIface rnModExports tcIfaceDeclstcIfaceCompleteMatchestcIfaceAnnotationstcIfaceFamInst tcIfaceInst tcIfaceRules tcIfaceDecl WhereFrom ImportByUserImportBySystemImportByPlugintcLookupImported_maybe importDeclcheckWiredInTyConifCheckWiredInThingneedWiredInHomeIfaceloadSrcInterfaceloadSrcInterface_maybeloadModuleInterfaceloadModuleInterfacesloadInterfaceForNameloadInterfaceForModuleloadWiredInHomeIfaceloadUserInterfaceloadPluginInterface loadInterfacemoduleFreeHolesPrecisefindAndReadIface writeIface readIface ifaceStats showIfacepprModIfaceSimple pprModIface$fOutputableWhereFromtypecheckIfacetypecheckWholeCoreBindingstypecheckIfacesForMergingtypecheckIfaceForInstantiate tcHiBootIfacetcTopIfaceBindings tcIfaceExprtcIfaceOneShot tcIfaceGlobalhydrateCgBreakInfo InstBindings ib_derived ib_extensions ib_pragmasib_binds ib_tyvarsInstInfoiBindsiSpec lookupGloballookupGlobal_maybeaddTypecheckedBindstcLookupLocatedGlobaltcLookupGlobaltcLookupGlobalOnlytcLookupDataContcLookupPatSyntcLookupConLiketcLookupRecSelParent tcLookupClass tcLookupTyCon tcLookupAxiomtcLookupLocatedGlobalIdtcLookupLocatedClasstcLookupLocatedTyContcLookupInstance tcGetInstEnvssetGlobalTypeEnvtcExtendGlobalEnvImplicittcExtendGlobalEnvtcExtendTyConEnv tcTyThBinderstcExtendGlobalValEnvtcExtendRecEnvtcLookupLocatedtcLookupLcl_maybetcLookup tcLookupTyVar tcLookupIdtcLookupIdMaybetcLookupLocalIdstcLookupTcTyCongetInLocalScopetcExtendKindEnvListtcExtendKindEnvtcExtendTyVarEnvtcExtendNameTyVarEnvisTypeClosedLetBndrtcExtendRecIdstcExtendSigIdstcExtendLetEnv tcExtendIdEnvtcExtendIdEnv1tcExtendIdEnv2tcExtendLocalTypeEnvtcExtendBinderStacktcAddDataFamConPlaceholderstcAddPatSynPlaceholderstcAddKindSigPlaceholdersgetTypeSigNames tcExtendRulescheckWellStagedtopIdLvltcMetaTy isBrackStagetcGetDefaultTysiDFunIdpprInstInfoDetailssimpleInstInfoClsTysimpleInstInfoTysimpleInstInfoTyCon newDFunNamenewFamInstTyConNamenewFamInstAxiomNamemkStableIdFromStringmkStableIdFromName mkWrapperName pprBinders wrongThingErr$fMonadThingsIOEnv$fOutputableInstInfomkTypeableBindstyConIsTypeable$fFunctorKindRepM$fApplicativeKindRepM$fMonadKindRepMthNameToGhcNamethNameToGhcNameIO$fMonadThingsCoreMgetCastsunarise$fOutputableUnariseValStgToDoStgCSE StgLiftLamsStgStats StgUnarise StgBcPrep StgDoNothingStgPipelineOptsstgPipeline_forBytecode stgPlatformstgPipeline_pprOptsstgPipeline_lintstgPipeline_phasesstg2stg$fMonadUniqueStgM $fShowStgToDo $fReadStgToDo $fEqStgToDo $fOrdStgToDo $fFunctorStgM$fApplicativeStgM $fMonadStgM $fMonadIOStgMinitStgPipelineOptsTidyOptsopt_static_ptr_optsopt_expose_rules opt_trim_idsopt_expose_unfoldingsopt_unfolding_optsopt_collect_ccsopt_name_cacheUnfoldingExposure ExposeNone ExposeSome ExposeAllmkBootModDetailsTc tidyProgram $fMonadDFFV$fApplicativeDFFV $fFunctorDFFV$fShowUnfoldingExposure$fEqUnfoldingExposure$fOrdUnfoldingExposure initTidyOptsinitStaticPtrOptsCorePrepConfigcp_convertNumLitcp_catchNonexhaustiveCasesCorePrepPgmConfigcpPgm_generateDebugInfocpPgm_endPassConfig corePrepPgm corePrepExprmkConvertNumLiteral$fOutputableFloatingBind$fOutputableOkToSpec$fOutputableFloatscheckFamInstConsistencytcInstNewTyCon_maybetcLookupDataFamInsttcLookupDataFamInst_maybetcTopNormaliseNewTypeTF_maybetcExtendLocalFamInstEnvreportInjectivityErrors reportConflictingInjectivityErrstcGetFamInstEnvs MiniFixityEnvaddLocalFixitieslookupFixityRnlookupFixityRn_helplookupTyFixityRnlookupFieldFixityRn HsSigCtxt TopSigCtxt LocalBindCtxt ClsDeclCtxt HsBootCtxt RoleAnnotCtxtDeprecationWarningsNoDeprecationWarningsExportDeprecationWarningsAllDeprecationWarningsChildLookupResult NameNotFoundIncorrectParent FoundChildnewTopSrcBinderlookupTopBndrRnlookupLocatedTopConstructorRnlookupLocatedTopConstructorRnNlookupLocatedTopBndrRnlookupLocatedTopBndrRnNlookupInstDeclBndrlookupFamInstNamelookupConstructorFieldslookupConstructorInfolookupRecFieldOcclookupSubBndrOcc_helperlookupLocatedOccRnlookupLocatedOccRnConstrlookupLocatedOccRnRecFieldlookupLocatedOccRnNonelookupLocalOccRn_maybelookupLocalOccThLvl_maybe lookupOccRnlookupLocalOccRnlookupTypeOccRnlookupOccRn_maybelookupSameOccRn_maybelookupExprOccRnlookupGlobalOccRn_maybelookupGlobalOccRnlookupInfoOccRngetFieldUpdLbllookupRecUpdFieldsgetUpdFieldLblslookupGreAvailRnaddUsedDataCons addUsedGRE addUsedGREs lookupGREInfolookupSigOccRnlookupSigOccRnNlookupSigCtxtOccRnlookupLocalTcNames dataTcOccslookupIfThenElselookupSyntaxNamelookupSyntaxExpr lookupSyntaxlookupSyntaxNameslookupQualifiedDoExprlookupQualifiedDolookupNameWithQualifierlookupQualifiedDoName$fMonoidDisambigInfo$fSemigroupDisambigInfo$fOutputableDisambigInfo$fOutputableChildLookupResult$fOutputableHsSigCtxtImportDeclUsage rnImportsrenameRawPkgQual renamePkgQualcalculateAvailsextendGlobalRdrEnvRngetLocalNonValBindersnewRecordFieldLabelgresFromAvails mkChildEnv findChildrenreportUnusedNamesfindImportUsagegetMinimalImports classifyGREsprintMinimalImports checkConName$fOutputableImpOccItemmodifyLoaderStategetLoaderStateextendLoadedEnvdeleteFromLoadedEnvloadNamewithExtendedLoadedEnvshowLoaderStateinitLoaderStateloadCmdLineLibsloadExprinitLinkDepsOpts loadDecls loadModulepartitionLinkablermDupLinkablesunload loadPackagesinitializeSessionPluginsloadFrontendPluginforceLoadModuleInterfacesforceLoadNameModuleInterfaceforceLoadTyCongetValueSafelygetHValueSafelylessUnsafeCoercelookupRdrNameInModuleForPlugins RecompReasonUnitDepRemovedModulePackageChangedSourceFileChangedThisUnitIdChanged ImpurePluginPluginsChangedPluginFingerprintChangedModuleInstChanged HieMissing HieOutdatedSigsMergeChanged ModuleChanged ModuleRemoved ModuleAddedModuleChangedRawModuleChangedIface FileChanged CustomReason FlagsChangedOptimFlagsChangedHpcFlagsChangedMissingBytecodeMissingObjectFileMissingDynObjectFileMissingDynHiFileMismatchedDynHiFileObjectsChangedLibraryChangedTHWithJS CompileReason MustCompile RecompBecauseMaybeValidated UpToDateItem OutOfDateItemRecompileRequiredUpToDateNeedsRecompileneedsRecompileBecauseoutOfDateItemBecauserecompileRequired recompThen checkOldIfaceaddFingerprints$fOutputableRecompReason$fOutputableCompileReason$fOutputableMaybeValidated$fMonoidRecompileRequired$fSemigroupRecompileRequired$fOutputableRecompileRequired$fBinaryIfaceIdExtras$fBinaryIfaceDeclExtras$fOutputableIfaceDeclExtras$fEqRecompileRequired$fFunctorMaybeValidated$fEqCompileReason$fEqRecompReason UsageConfiguc_safe_implicit_imps_req mkUsedNames mkUsageInfo DsWarning MatchResult MR_Infallible MR_Fallible DsWrapper EquationInfoEqnInfoeqn_rhseqn_origeqn_patsDsMatchContext idDsWrapperrunMatchResultfixDsinitDsTcinitDsinitDsWithModGutsinitTcDsForSolver newUniqueIdduplicateLocalDs newPredVarDs newSysLocalDsnewFailLocalDsnewSysLocalsDs getGhcModeDs getPmNablas updPmNablasaddUnspecablesgetUnspecables getSrcSpanDs putSrcSpanDs putSrcSpanDsA diagnosticDs errDsCoreExpr failWithDsfailDsmkNamePprCtxDsdsLookupGlobaldsLookupGlobalId dsLookupTyCondsLookupDataCondsLookupConLikedsGetFamInstEnvs dsGetMetaEnvdsGetCompleteMatchesdsLookupMetaEnvdsExtendMetaEnvdiscardWarningsDspprRuntimeTrace getCCIndexDsM$fOutputableDsMatchContext$fApplicativeMatchResult$fOutputableEquationInfo$fFunctorMatchResulttracePmtraceWhenFailPmmkPmIdallPmCheckWarnings overlapping exhaustive redundantBangexhaustiveWarningFlagisMatchContextPmChecked!isMatchContextPmChecked_SinglePatneedToRunPmCheckinitCorePrepConfiginitCorePrepPgmConfiginitSimplifyExprOptsinitSimplifyOpts initSimplModeinitGentleSimplModelintInteractiveExpr collectCCsccState countEntriesaddLateCostCentresMGaddLateCostCentresPgmaddLateCostCentresinitUsageConfigmkPartialIface mkFullIface mkIfaceTcmkIfaceExports mkHieFilemkHieFileWithSourcegetCompressedAsts enrichHie$fModifyStateVar$fModifyStateName$fHasLocHsDataDefn $fHasLocHsArg$fHasLocDataDefnCons $fHasLocList$fHasLocGenLocated$fHasLocGenLocated0$fHasLocGenLocated1$fHasLocPScoped$fToHieGenLocated$fToHieGenLocated0$fToHieIEContext$fToHieIEContext0$fToHieIEContext1$fToHieGenLocated1$fToHieRScoped$fToHieGenLocated2$fToHieGenLocated3$fToHieAnnProvenance$fToHieGenLocated4$fToHieGenLocated5$fToHieGenLocated6$fToHieForeignExport$fToHieForeignImport$fToHieGenLocated7$fToHieGenLocated8$fToHieGenLocated9$fToHieGenLocated10$fToHieGenLocated11$fToHieGenLocated12$fToHieGenLocated13$fToHieGenLocated14$fToHieGenLocated15$fToHieGenLocated16$fToHieGenLocated17$fToHiePendingTcSplice$fToHiePendingRnSplice$fToHieHsQuote$fToHieGenLocated18$fToHieArithSeqInfo$fToHieGenLocated19$fToHieGenLocated20$fToHieTScoped$fToHieTVScoped $fToHieHsArg$fToHieGenLocated21$fToHieTVScoped0$fToHieTScoped0$fToHieStandaloneKindSig$fToHieGenLocated22$fToHieTScoped1$fToHieTScoped2$fToHieGenLocated23$fToHieGenLocated24$fToHieHsScaled$fToHieGenLocated25$fToHieRScoped0$fToHieGenLocated26$fToHieGenLocated27$fToHieGenLocated28$fToHieHsDataDefn$fToHieGenLocated29 $fToHieFamEqn$fToHieTScoped3$fToHieTScoped4$fToHieGenLocated30$fToHieRScoped1$fToHieFamilyInfo$fToHieGenLocated31$fToHieGenLocated32$fToHieTyClGroup$fToHieHsConDeclGADTDetails$fToHieHsConDetails$fToHieRContext$fToHieTScoped5$fToHieContext$fToHieGenLocated33$fToHieEvBindContext$fToHieContext0$fToHieContext1$fToHieContext2$fToHieContext3$fToHieIEContext2 $fToHieMaybe $fToHieBag$fToHieDataDefnCons$fToHieNonEmpty $fToHieList $fToHieVoid$fToHiePatSynFieldContext$fToHieContext4$fToHieGenLocated34$fToHieSigContext$fToHieGenLocated35$fToHieGenLocated36$fToHieRScoped2$fToHieRFContext$fToHieRFContext0$fToHieRContext0$fToHieRScoped3$fToHieRScoped4$fToHieRScoped5$fToHieRScoped6$fToHieHsTupArg$fToHieGenLocated37$fToHiePScoped$fToHieHsStmtContext$fToHieHsMatchContext$fToHieHsPatSynDir$fToHieGenLocated38$fToHieBindContext$fHiePassTypechecked$fHiePassRenamed$fHasTypeGenLocated$fHasTypeGenLocated0$fHasTypeGenLocated1$fHasLocFamEqn$fToHieRScoped7$fToHieGenLocated39 $fToHieGRHSs$fToHieGenLocated40$fToHieMatchGroup $fDataPScoped core2core LRenamingRenamingrenameTo renameFrom IncludeDeclidSignatureInclude idModRenamingidUnitId LHsUnitDecl HsUnitDeclDeclDIncludeDLHsUnitHsUnit hsunitBody hsunitName LHsModuleId HsModuleId HsModuleVarLHsModuleSubst HsModuleSubst LHsUnitIdHsUnitId HsComponentId hsComponentId hsPackageName$fOutputableHsComponentIdparseIdentifieraddHaddockToModule$fMonoidLowerLocBound$fSemigroupLowerLocBound$fMonoidUpperLocBound$fSemigroupUpperLocBound$fMonoidColumnBound$fSemigroupColumnBound$fMonoidLocRange$fSemigroupLocRange$fApplicativeHdkA$fHasHaddockGenLocated$fHasHaddockGenLocated0$fHasHaddockHsWildCardBndrs$fHasHaddockHsScaled$fHasHaddockGenLocated1$fHasHaddockGenLocated2$fHasHaddockGenLocated3$fHasHaddockGenLocated4$fHasHaddockHsDataDefn$fHasHaddockHsDecl$fHasHaddockGenLocated5$fHasHaddockGenLocated6$fHasHaddockGenLocated7$fHasHaddockGenLocated8$fHasHaddockList $fFunctorHdkA $fFunctorHdkM$fApplicativeHdkM $fMonadHdkM$fShowColumnBound$fShowUpperLocBound$fShowLowerLocBound$fSemigroupHasInnerDocs$fMonoidHasInnerDocsparseModuleNoHaddockparseSignature parseImportparseStatementparseDeclarationparseExpression parsePatternparseTypeSignature parseStmt parseType parseBackpack parseHeader parseModuleisStmt hasImportisImportisDecl mkPrelImportsgetOptionsFromFile getOptionstoArgscheckProcessArgsResultcompileEmptyStubcompileForeign dsHsWrappermatchSinglePatVar matchSimply matchWrapper dsLocalBinds dsSyntaxExprdsLExprdsExpr MkCaseAlt alt_result alt_wrapperalt_patselectSimpleMatchVarLselectMatchVarsselectMatchVarfirstPat shiftEqns matchCanFailalwaysFailMatchResultcantFailMatchResultextractMatchResultcombineMatchResultsadjustMatchResultDs wrapBindswrapBindseqVarmkCoLetMatchResultmkViewMatchResultmkEvalMatchResultmkGuardedMatchResultmkCoPrimCaseMatchResultmkCoAlgCaseMatchResultmkCoSynCaseMatchResult mkErrorAppDs mkFailExpr mkCoreAppDs mkCoreAppsDsmkCastDsmkSelectorBinds mkLHsPatTupmkVanillaTuplePatmkBigLHsVarTupId mkBigLHsTupIdmkBigLHsVarPatTupIdmkBigLHsPatTupIdshareFailureHandlerdsHandleMonadicFailure mkOptTickBoxmkBinaryTickBoxdecideBangHood isTrueLHsExprdsCCallmkFCallunboxArg boxResult resultWrapper dsPrimCall dsJsFExport dsJsImportdsJsFExportDynamic dsCFExport dsCImportdsCFExportDynamic dsForeigns dsGuardeddsGRHSsAnnoBodyrnStmtsrnLExprrnExprrnTopSpliceDecls rnSpliceDecl rnSplicePat rnSpliceType FreeKiTyVarsNegationHandlingReassociateNegationKeepNegationIntactWarnUnusedForallsNoWarnUnusedForallsHsPatSigTypeScoping AlwaysBind NeverBind rnHsSigWcTypernHsPatSigType rnHsWcTypernHsPatSigTypeBindingVars rnHsSigTypernImplicitTvOccs rnLHsType rnLHsTypesrnScaledLHsTypernHsType rnLHsKind rnLHsTypeArgs rnContextrnMaybeContextrnLTyVarbindSigTyVarsFV bindHsQTyVarsbindHsOuterTyVarBndrsbindHsForAllTelescopebindLHsTyVarBndrsbindLHsTyVarBndrnewTyVarNameRnrnConDeclFields lookupField mkOpAppRn mkNegAppRn mkOpFormRn mkConOpPatRncheckPrecMatchcheckSectionPrecfilterInScopeMextractHsTyArgRdrKiTyVarsextractHsTyRdrTyVarsextractHsTyRdrTyVarsKindVarsextractHsTysRdrTyVarsextractRdrKindSigVarsextractConDeclGADTDetailsTyVarsextractDataDefnKindVarsextractHsOuterTvBndrsnubLnubN$fOutputableRnTyKiWhat$fOutputableRnTyKiEnv$fOutputableWarnUnusedForallsHoleFitSortingAlgsortHoleFitsByGraphsortHoleFitsBySizezonkSubsgetHoleFitDispConfiggetHoleFitSortingAlg pprHoleFitaddHoleFitDocsgetLocalBindingstcFilterHoleFits tcSubsumeswithoutUnificationtcCheckHoleFitfindValidHoleFits tcMatchesFun tcGRHSsPat tcSyntaxOpGen tcSyntaxOp tcInferRho tcInferRhoNCtcExpr tcPolyExprtcCheckMonoExprtcCheckMonoExprNC tcMonoExpr tcMonoExprNCtcCheckPolyExprtcCheckPolyExprNC tcSubMultunifyInvisibleType unifyTypefinishTHrunRemoteModFinalizersrunQuasilookupThName_mayberunMetaDrunMetaTrunMetaPrunMetaEtcTopSpliceExpr runAnnotation runTopSplicetcUntypedBrackettcTypedBracket tcTypedSpliceZonkTcM zonkTyBndrsX zonkTyBndrXzonkTyVarBindersXzonkTyVarBinderX zonkTyVarOcc lookupTyVarXzonkTcTypeToTypezonkTcTypeToTypeXzonkTcTypesToTypesX zonkCoToCozonkScaledTcTypesToTypesX zonkTopBndrs zonkTopExpr zonkTopLExpr zonkTopDecls zonkTcEvBinds zonkEvBindszonkTcMethInfoToMethInfoXisFilledCoercionHoleunpackCoercionHoleunpackCoercionHole_maybezonkCtRewriterSetzonkCtEvRewriterSetzonkRewriterSet"$fMonoidUnfilledCoercionHoleMonoid%$fSemigroupUnfilledCoercionHoleMonoidCandidatesQTvsDVdv_cvsdv_tvsdv_kvsnewMetaKindVarnewMetaKindVars newEvVarsnewEvVarnewWantedWithLoc newWanted newWantedscloneWantedCtEv cloneWantedcloneWC emitWanted emitWantedEqs emitWantedEqemitWantedEvVaremitWantedEvVarsemitNewExprHolenewDictnewImplicationnewVanillaCoercionHolenewCoercionHolenewCoercionHoleOfillCoercionHolenewInferExpTypenewInferExpTypeFRRreadExpType_maybereadScaledExpType readExpTypescaledExpTypeToType expTypeToTypeinferResultToTypetcInfer tcInferFRRensureMonoType promoteTcTypenewMetaTyVarNamenewAnonMetaTyVarnewSkolemTyVar newTyVarTyVarcloneTyVarTyVarnewConcreteTyVarnewPatSigTyVarnewCycleBreakerTyVarnewMetaDetailsnewTauTvDetailsAtLevelcloneMetaTyVarcloneMetaTyVarWithInfo readMetaTyVarisFilledMetaTyVar_maybeisFilledMetaTyVarisUnfilledMetaTyVarnewMultiplicityVar newFlexiTyVarnewNamedFlexiTyVarnewFlexiTyVarTynewFlexiTyVarTysnewOpenTypeKindnewOpenFlexiTyVarTynewOpenFlexiTyVarnewOpenBoxedTypeKind newMetaTyVarsnewMetaTyVarsX newMetaTyVarXnewMetaTyVarTyVarX newWildCardXnewMetaTyVarTyAtLevelnewConcreteTyVarTyAtLevelcandidateKindVars delCandidatespartitionCandidatescandidateQTyVarsWithBinderscandidateQTyVarsOfTypecandidateQTyVarsOfTypescandidateQTyVarsOfKindcandidateQTyVarsOfKindsquantifyTyVarsisQuantifiableTvzonkAndSkolemiseskolemiseQuantifiedTyVar defaultTyVardoNotQuantifyTyVars tcCheckUsage tcShortCutLit shortCutLit hsOverLitNamepromoteMetaTyVarTopromoteTyVarSet$fOutputableCandidatesQTvs$fMonoidCandidatesQTvs$fSemigroupCandidatesQTvshasFixedRuntimeRephasFixedRuntimeRep_syntacticnewMethodFromName topSkolemisetopInstantiateinstantiateSigmainstTyVarsWithinstCallinstCallConstraints instDFunTypeinstStupidThetatcInstInvisibleTyBinderstcInstInvisibleTyBindersNtcInstInvisibleTyBinder tcInstTypetcInstTypeBndrstcSkolDFunTypetcSuperSkolTyVarstcInstSkolTyVarstcInstSkolTyVarsXtcInstSuperSkolTyVarsXtcSkolemiseInvisibleBndrsfreshenTyVarBndrsfreshenCoVarBndrsXnewOverloadedLit mkOverLit tcSyntaxNamegetOverlapFlag tcGetInststcExtendLocalInstEnv FamAppBreaker LevelCheckLC_NoneLC_Check LC_Promote AreUnifyingUnifying NotUnifying TyEqFamApp TEFA_Fail TEFA_Recurse TEFA_Break TyEqFlagsTEF tef_occurs tef_fam_app tef_unifyingtef_lhs tef_forallsPuResultPuFailPuOKUnifyEnvUE u_unifiedu_defer u_rewritersu_locu_rolematchActualFunTySigmamatchActualFunTysRhomatchExpectedFunTysmatchExpectedListTymatchExpectedTyConAppmatchExpectedAppTy tcWrapResult tcWrapResultOtcWrapResultMonounifyExpectedType tcSubTypePat tcSubType tcSubTypeDStcSubTypeSigmatcSubTypeAmbiguitytcSkolemiseScopedtcTopSkolemisetcSkolemiseExpTypecheckConstraintscheckTvConstraintsemitResidualTvConstraintbuildTvImplicationbuildImplicationFor unifyKindunifyTypeAndEmit setUEnvRole updUEnvLocuTypeswapOverTyVarsmatchExpectedFunKindsimpleUnifyCheck okCheckRefl failCheckWithmapCheckfamAppArgFlags checkTyEqRhsrecurseIntoTyConAppcheckPromoteFreeVarstouchabilityAndShapeTest$fOutputablePuResult$fApplicativePuResult$fFunctorPuResult$fOutputableLevelCheck$fOutputableAreUnifying$fOutputableTyEqFamApp$fOutputableTyEqFlags ClsInstResult NoInstanceOneInstNotSurecir_what cir_canonical cir_mk_ev cir_new_theta AssocInstInfo NotAssociated InClsInst ai_inst_env ai_tyvarsai_classisNotAssociated safeOverlapinstanceReturnsDictConmatchGlobalInstmatchEqualityInst$fOutputableClsInstResultHsRecFieldContext HsRecFieldCon HsRecFieldPat HsRecFieldUpd NameMakerCpsRnliftCpsliftCpsWithConttopRecNameMakerisTopRecNameMakerlocalRecNameMakerrnPatsrnPatapplyNameMaker rnBindPat rnHsRecFieldsrnHsRecUpdFieldsrnLit rnOverLit $fMonadCpsRn$fApplicativeCpsRn$fFunctorCpsRn rnTopBindsLHSrnTopBindsLHSBootrejectBootDeclsrnTopBindsBootrnLocalBindsAndThenrnLocalValBindsLHS rnValBindsRHSrnLocalValBindsRHSmakeMiniFixityEnv rnMethodBinds renameSigs rnMatchGrouprnGRHSsrnGRHSrnSrcFixityDecldsLit dsOverLitwarnAboutIdentitieswarnAboutOverflowedOverLitwarnAboutOverflowedLitwarnAboutEmptyEnumerations tidyLitPattidyNPat matchLiteralshsLitKey matchNPatsmatchNPlusKPatsdesugarPatBinddesugarEmptyCasedesugarMatches desugarGRHSsMaybeNewFreshCachedTcS SolverStageStagerunSolverStageStopOrContinue StartAgain ContinueWith simpleStagestartAgainWith continueWithstopWith stopWithStageaddInertForAllkickOutRewritablekickOutAfterUnificationaddInertSafehaskinsertSafeOverlapFailureTcSgetSafeOverlapFailuresupdSolvedDictsgetSolvedDictssetSolvedDicts updInertSet getInertCans setInertCans updInertCansupdInertSafehask getInertEqsgetInnermostGivenEqLevelgetInertInsolsgetInertGivensgetPendingGivenScsgetUnsolvedInertsgetHasGivenEqsremoveInertCtslookupFamAppInertlookupInertDictlookupSolvedDictlookupFamAppCacheextendFamAppCachewrapTcS wrapErrTcS wrapWarnTcSfailTcSwarnTcS addErrTcSpanicTcStryEarlyAbortTcS ctLocWarnTcStraceTcSrunTcPluginTcSgetGlobalRdrEnvTcSbumpStepCountTcS csTraceTcS traceFireTcSrunTcSrunTcSEarlyAbortrunTcSEqualities runTcSInertsrunTcSWithEvBinds setEvBindsTcS nestImplicTcSnestTcSemitImplicationTcSemitTvImplicationTcS getInertSet setInertSetpushLevelNoWorkListupdWorkListTcS emitWorkNCemitWorkgetTcEvBindsVar unifyTyVarreportUnificationsgetDefaultInfo getWorkListselectNextWorkItem getInstEnvsgetFamInstEnvsrecordUsedGREscheckWellStagedDFunpprEq pprKickedresetUnificationFlagsetUnificationFlag newFlexiTcSTy instFlexiXisFresh freshGoals getEvExpr setEvBind setWantedEqsetWantedEvTermsetEvBindIfWanted newGivenEvVarnewBoundEvVarId emitNewGivensemitNewWantedEq newWantedEqnewWantedEvVarNC newWantedNCcheckReductionDepthmatchFam matchFamTcMemitFunDepWanteds uPairsTcM unifyFunDepswrapUnifierTcScheckTouchableTyVarEq checkTypeEq$fOutputableStopOrContinue$fHasDynFlagsTcS$fMonadThingsTcS$fHasModuleTcS$fMonadUniqueTcS$fMonadFailTcS $fMonadIOTcS $fMonadTcS$fApplicativeTcS $fMonadFixTcS$fMonadSolverStage$fApplicativeSolverStage$fFunctorSolverStage $fFunctorTcS$fFunctorStopOrContinuerewriterewriteForErrorsrewriteArgsNom rewriteType$fHasDynFlagsRewriteM$fFunctorRewriteM$fApplicativeRewriteM$fMonadRewriteM solveDictNC solveDictsolveCallStackchooseInstancecheckInstanceOKmatchLocalInstmakeSuperClassesmkStrictSuperClasses solveIrred solveEqualitysolveSimpleGivenssolveSimpleWantedsreportUnsolvedreportAllUnsolvedwarnAllUnsolvedwarnDefaultingsolverReportMsg_ExpectedActuals InferModeApplyMREagerDefaultingNoRestrictionscaptureTopConstraintssimplifyTopImplic simplifyToppushLevelAndSolveEqualitiespushLevelAndSolveEqualitiesXsolveEqualitiessimplifyAndEmitFlatConstraintsreportUnsolvedEqualitiessimplifyTopWantedssimplifyAmbiguityChecksimplifyInteractivesimplifyDefault tcCheckGivenstcCheckWanteds tcNormalisefindInferredDiffgrowThetaTyVarssimplifyWantedsTcM solveWanteds approximateWC$fOutputableInferModecheckValidTypecheckValidMonoType checkTySynRhscheckEscapingKindcheckValidThetacheckValidInstHeadvalidDerivPredcheckValidInstancecheckValidCoAxiomcheckValidCoAxBranchcheckValidTyFamEqncheckValidAssocTyFamDefltcheckTyFamEqnValidityInfocheckFamPatBinderscheckTyConTelescope$fOutputableTypeOrKindCtxt$fOutputableExpandMode$fOutputableValidityEnv$fEqTypeOrKindCtxt HFSNoSorting HFSBySizeHFSBySubsumptionrelevantCtEvidence isFlexiTyVar$fEqHoleFitSortingAlg$fOrdHoleFitSortingAlgGenerateInhabitingPatternsModeCaseSplitTopLevel MinimalCoverPhiCtsPhiCtPhiTyCt PhiCoreCtPhiConCt PhiNotConCtPhiBotCt PhiNotBotCtaddPhiCtsNablasaddPhiCtNablas isInhabitedgenerateInhabitingPatterns"$fOutputableTopNormaliseTypeResult$fOutputablePhiCt*$fOutputableGenerateInhabitingPatternsMode"$fEqGenerateInhabitingPatternsMode$$fShowGenerateInhabitingPatternsMode CheckActionCAunCAcheckMatchGroup checkGRHSscheckEmptyCase checkPatBind$fFunctorCheckAction getLdiNablas pmcPatBindpmcGRHSs pmcMatchesaddTyCsaddCoreScrutTmCsaddHsScrutTmCs $fMonoidCIRB$fSemigroupCIRB$fEqFormatReportWarningsMode dsTopLHsBinds dsLHsBindsdsSpecdsWarnOrphanRuledecomposeRuleLhs dsHsWrappers dsTcEvBinds_s dsTcEvBinds dsEvBindsdsEvTermmatchConFamily matchPatSynmatchEquationsmatchSinglePat dsListComp dsMonadComp dsBracket$fRepTVHsBndrVisBndrVis$fRepTVSpecificitySpecificity$fRepTVUnitUnit dsProcExpr dsValBinds ContextKindTheKindAnyKindOpenKind SAKS_or_CUSKSAKSCUSKInitialKindStrategyInitialKindCheckInitialKindInferHoleModeHM_Sig HM_FamPatHM_VTA HM_TyAppPat funsSigCtxt addSigCtxt pprSigCtxt tcHsSigWcTypekcClassSigTypetcClassSigType tcHsSigTypetcStandaloneKindSig tcHsDerivtcDerivStrategytcHsClsInstType tcHsTypeApp tcFamTyPats tcHsOpenTypetcHsLiftedTypetcHsOpenTypeNCtcHsLiftedTypeNCtcCheckLHsTypetcInferLHsTypetcInferLHsTypeKindtcInferLHsTypeUnsaturatedtcMult tcHsContext tcLHsPredTypebindNamedWildCardBinders kcDeclHeadercheckForDuplicateScopedTyVars outerTyVarsouterTyVarBndrsscopedSortOuterbindOuterSigTKBndrs_TvbindOuterFamEqnTKBndrs_Q_TvbindOuterFamEqnTKBndrstcOuterTKBndrstcExplicitTKBndrsbindExplicitTKBndrs_SkolbindExplicitTKBndrs_TvbindExplicitTKBndrs_Q_SkolbindExplicitTKBndrs_Q_TvbindImplicitTKBndrs_SkolbindImplicitTKBndrs_TvbindImplicitTKBndrs_Q_SkolbindImplicitTKBndrs_Q_TvbindTyClTyVarsbindTyClTyVarsAndZonkzonkAndScopedSortkindGeneralizeAlletaExpandAlgTyConcheckDataKindSigcheckClassKindSigtcbVisibilitiestcHsPartialSigTypetcHsPatSigType tcLHsKindSig funAppCtxtaddTyConFlavCtxt$fOutputableHoleMode$fOutputableTcTyMode$fOutputableSAKS_or_CUSK TcPragEnv tcIdSigName tcSigInfoNamecompleteSigPolyId_maybetcTySigs tcUserTypeSiglhsSigWcTypeContextSpanlhsSigTypeContextSpancompleteSigFromIdisCompleteHsSig tcInstSig emptyPragEnv lookupPragEnv extendPragEnv mkPragEnvaddInlinePragArityaddInlinePrags tcSpecPrags tcSpecWrapper tcImpPragstcPatSynBuilderBind tcPatSynDecl LetBndrSpec LetLclBndr LetGblBndrtcLetPattcPats tcInferPat tcCheckPat tcCheckPat_O newLetBndraddDataConStupidTheta$fOutputableLetBndrSpec tcTopBinds tcHsBootSigs tcLocalBinds tcValBinds tcPolyCheckchooseInferredQuantifiers$fOutputableGeneralisationPlan RolesInfocheckSynCyclescheckClassCycles inferRolesaddTyConsToGblEnvmkDefaultMethodType tcRecSelBinds mkRecSelBindsmkOneRecordSelector$fMonadSynCycleM$fApplicativeSynCycleM $fMonadRoleM$fApplicativeRoleM$fFunctorRoleM$fFunctorSynCycleMHsSigFun tcClassSigs tcClassDecl2tcClassMinimalDefinstantiateMethod mkHsSigFunfindMethodBind instDeclCtxt1 instDeclCtxt2 instDeclCtxt3 tcATDefault substATBndrspatSynBuilderOccAppCtxt VAExpansionVACallEValArgValArgQLva_tyva_argsva_funva_expr HsExprArgETypeArgEPragEWrap eva_arg_tyeva_argeva_ctxteva_ty eva_hs_tyeva_atTcPassTcpRnTcpInstTcpTc appCtxtLocinsideExpansion addArgWrap splitHsApps rebuildHsApps isHsValArgcountLeadingValArgs isVisibleArgcountVisAndInvisValArgscountHsWrapperInvisArgspprHsExprArgTctcInferAppHeadtcInferAppHead_maybe addHeadCtxt obviousSigtyConOf tyConOfETfieldNotInType tcCheckId tcInferIdnonBidirectionalErr addFunResCtxt addExprCtxt$fOutputableAppCtxt$fOutputableEWrap$fOutputableEValArg$fOutputableHsExprArg TcStmtCheckerTcCmdStmtCheckerTcExprStmtChecker TcMatchCtxtMCmc_bodymc_what tcMatchesCase tcMatchLambdatcGRHS tcDoStmtstcBodytcStmtstcStmtsAndThen tcGuardStmttcDoStmtcheckArgCountstcProc tcInferSigmatcApp tcExprPrag DerivInstTysdit_dc_inst_arg_envdit_rep_tc_args dit_rep_tc dit_tc_argsdit_tc dit_cls_tys AuxBindSpec DerivTag2Con DerivMaxTagDerivDataDataTypeDerivDataConstr gen_Eq_binds gen_Ord_bindsgen_Enum_bindsgen_Bounded_binds gen_Ix_bindsgen_Read_bindsgen_Show_bindsgen_Data_bindsgen_Lift_bindsgen_Newtype_bindsgen_Newtype_fam_instsmkCoerceClassMethEqn genAuxBinds mkRdrFunBindmkRdrFunBindECmkRdrFunBindSEordOpTbl boxConTbl litConTbl error_ExprgetPossibleDataConsderivDataConInstArgTysbuildDataConInstArgEnvsubstDerivInstTyszonkDerivInstTys$fOutputableDerivInstTys FFoldTypeFT ft_forall ft_bad_app ft_ty_appft_tupft_fun ft_co_varft_varft_trivgen_Functor_bindsfunctorLikeTraversedeepSubtypesContainingfoldDataConArgsgen_Foldable_bindsgen_Traversable_binds GenericKindGen0Gen1gen_Generic_bindsget_gen1_constrained_tys canDoGenericscanDoGenerics1gen_Generic_fam_inst ThetaSpecPredSpecSimplePredSpecSubTypePredSpecsps_type_or_kind sps_originsps_pred stps_originstps_ty_expectedstps_ty_actual StockGenFnsstock_gen_fam_instsstock_gen_bindsOriginativeDerivStatusCanDeriveStockStockClassErrorCanDeriveAnyClassNonDerivableClass DerivContext InferContext SupplyContextDerivSpecMechanismDerivSpecStockDerivSpecNewtypeDerivSpecAnyClass DerivSpecViadsm_stock_gen_fns dsm_stock_ditdsm_newtype_rep_tydsm_newtype_dit dsm_via_tydsm_via_inst_tydsm_via_cls_tys DerivSpecDS ds_mechanismds_standalone_wildcard ds_overlap ds_user_ctxt ds_skol_infods_tysds_clsds_thetads_tvsds_nameds_locDerivEnv denv_stratdenv_skol_info denv_ctxt denv_inst_tysdenv_clsdenv_tvsdenv_overlap_modeDerivMisStandaloneDerivisStandaloneWildcardDerivaskDerivUserTypeCtxt mkDerivOrigin pprDerivSpecsetDerivSpecTheta zonkDerivSpecderivSpecMechanismToStrategyisDerivSpecStockisDerivSpecNewtypeisDerivSpecAnyClassisDerivSpecViazonkDerivSpecMechanismmkDirectThetaSpec substPredSpeccaptureThetaSpecConstraintshasStockDerivingcheckOriginativeSideConditionsstd_class_via_coerciblenon_coercible_classnewDerivClsInstextendLocalInstEnv$fOutputableDerivContext$fOutputableDerivEnv$fOutputableDerivSpecMechanism$fOutputableDerivSpec$fOutputablePredSpecsimplifyInstanceContexts tcDefaults tcAnnotationsannCtxt rnSrcDecls addTcgDUs rnWarningTxt findSplice SpliceInfospliceGenerated spliceIsDecl spliceSourcespliceDescriptionrnTypedBracketrnUntypedBracket rnTypedSplicernUntypedSpliceExpr traceSplicecheckThLocalNamemkExpandedExpr$fOutputableMonadNames$fOutputableStmtTreetcRulesisForeignImportisForeignExportnormaliseFfiTypetcForeignImportstcForeignImports' tcFImport tcCheckFIType checkCTargettcForeignExportstcForeignExports' tcFExport tcCheckFETypecheckForeignArgscheckForeignResnonIOokmustBeIO checkSafe noCheckSafe rnExports DerivInfodi_ctxt di_clauses di_scoped_tvs di_rep_tc tcDeriving$fOutputableEarlyDerivSpec tcInstDecls1checkBootDeclMfindExtraSigImportsimplicitRequirementsimplicitRequirementsShallow checkUnit tcRnCheckUnittcRnMergeSignaturesmergeSignaturestcRnInstantiateSignatureinstantiateSignature DataDeclInfo DDataType DDataInstancetcTyAndClassDecls kcConDeclstcTyFamInstEqncheckFamTelescopeunravelFamInstPatsaddConsistencyConstraintsdataDeclChecks tcConDeclscheckValidTyContcAddTyFamInstCtxttcMkDataFamInstCtxttcAddDataFamInstCtxttcInstDeclsDeriv tcInstDecls2 RenamedStuff TcRnExprModeTM_Inst TM_Default tcRnModuletcRnModuleTcRnMcheckHiBootIface' checkBootDecl rnTopSrcDecls tcTopSrcDeclsrunTcInteractivetcRnStmt isGHCiMonadtcRnExprtcRnImportDeclstcRnType tcRnDeclsigetModuleInterfacetcRnLookupRdrNametcRnLookupName tcRnGetInfoloadUnqualIfaces withTcPluginswithHoleFitPluginsgetRenamedStuffdeSugar deSugarExprCgInteractiveGutsMessager newHscEnvnewHscEnvWithHUG initHscEnv ioMsgMaybehscTcRnLookupRdrNamehscTcRcLookupNamehscTcRnGetInfohscIsGHCiMonadhscGetModuleInterfacehscRnImportDeclshscParse hscParse'hscTypecheckRenamehscTypecheckAndGetWarnings tcRnModule' hscDesugar hscDesugar'makeSimpleDetailshscRecompStatusinitModDetailsinitWholeCoreBindingshscDesugarAndSimplifyhscMaybeWriteIface oneShotMsgbatchMsg batchMultiMsg hscCheckSafe hscGetSafe hscSimplify hscSimplify'hscSimpleIface'hscGenHardCodemkCgInteractiveGutshscInteractivegenerateByteCodegenerateFreshByteCodehscCompileCmmFile doCodeGenhscStmthscStmtWithLocation hscParsedStmthscDeclshscParseModuleWithLocationhscParseDeclsWithLocationhscDeclsWithLocationhscParsedDeclshscAddSptEntries hscImport hscTcExpr hscKcType hscParseExprhscParseStmtWithLocation hscParseTypehscParseIdentifierhscTidyhscCompileCoreExprhscCompileCoreExpr'dumpIfaceStatsshowModuleIndexwriteInterfaceOnlyModedefaultRunMetarunMeta' $fQuasiIOEnv$fReifyFlagTyConBndrVisMaybe!$fReifyFlagSpecificitySpecificity$fReifyFlagUnitUnit HookedUse runHookedUse runPipelinerunPhaserunLlvmManglePhaserunMergeForeignrunLlvmLlcPhaserunLlvmOptPhase runAsPhase runJsPhaserunForeignJsPhaseapplyAssemblerProg runCcPhaserunHscBackendPhase runUnlitPhase getFileArgs runCppPhase runHscPhasemkOneShotModLocation runHscTcPhaserunHscPostTcPhase runHsPpPhasephaseOutputFilenameNewgetOutputFilename llvmOptionshscPostBackendPhase compileStubjoinObjectFilesgetHCFilePackageslinkDynLibChecktouchObjectFile$fMonadUseTPhaseHookedUse$fFunctorHookedUse$fApplicativeHookedUse$fMonadHookedUse$fMonadIOHookedUse$fMonadThrowHookedUse$fMonadCatchHookedUse preprocess compileOne compileOne'link linkingNeededoneShot compileFile mkPipeEnvpreprocessPipeline fullPipeline hscPipelinehscBackendPipelinehscGenBackendPipeline asPipeline viaCPipeline llvmPipelinellvmLlcPipelinellvmManglePipelinecmmCppPipeline jsPipelinehscPostBackendPipeline pipelineStartTermFoldfRefWrap fNewtypeWrap fSuspensionfPrimfTermTermPrim Suspension NewtypeWrapRefWrapsubTermsvaldctyvalRawbound_toctype wrapped_termtermTypeisFullyEvaluatedTermconstrClosToNamefoldTerm mapTermType termTyCoVarscPprTerm cPprTermBase cvObtainTermcvReconstructTypeimproveRTTIType$fOutputableTerm tcPluginIO tcPluginTracegetTargetPlatformisTouchableTcPluginMnewGivenGetDocsFailureNameHasNoModule NoDocsInIfaceInteractiveNamegetResumeContextgetHistoryModulegetHistorySpan execOptionsexecStmt execStmt'runDeclsrunDeclsWithLocationrunParsedDeclsparseImportDecl resumeExecsetupBreakpointbackforwardabandon abandonAll setContextmoduleIsInterpretedgetInfogetNamesInScopegetRdrNamesInScope parseNamegetDocsgetInstancesForTypeparseInstanceHead parseExpr compileExprcompileExprRemotecompileParsedExprRemotecompileParsedExprdynCompileExpr showModulemoduleIsBootOrNotObjectLinkableobtainTermFromValobtainTermFromIdreconstructType$fOutputableGetDocsFailureSummariseResultFoundInstantiationFoundHomeWithError FoundHomeNotThere ModNodeMap unModNodeMapAnyGhcDiagnostic ModIfaceCacheiface_addToCacheiface_clearCache LoadHowMuchLoadAllTargetsLoadUpToLoadDependenciesOfdepanaldepanalEdepanalPartialinstantiationNodes noIfaceCache newIfaceCacheload loadWithCacheload'emptyModNodeMapmodNodeMapInsertmodNodeMapElemsmodNodeMapLookupmodNodeMapSingletonmodNodeMapUnionWith downsweepcheckHomeUnitsClosed summariseFilesummariseModule noModErrorcyclicModuleErr$fOutputableCachedIface'$fOutputableModuleGraphNodeWithBootFile$fOutputableBuildPlan$fOutputableCodeGenEnable$fEqCodeGenEnable$fShowCodeGenEnable$fOrdCodeGenEnable$fFunctorModNodeMap$fTraversableModNodeMap$fFoldableModNodeMap$fShowResultOrigin$fShowResultLoopOrigin$fEqWorkerLimit$fFunctorResultVar GhcApiError ModuleInfo CoreModulecm_safecm_bindscm_types cm_moduleTypecheckedSource RenamedSource ParsedSourceDesugaredModuledm_core_moduledm_typechecked_moduleTypecheckedModule tm_internals_tm_checked_module_infotm_typechecked_sourcetm_renamed_sourcetm_parsed_module ParsedModulepm_extra_src_filespm_parsed_sourcepm_mod_summary coreModuleTypecheckedMod renamedSourcetypecheckedSource moduleInfo ParsedMod parsedSourcedefaultErrorHandlerdefaultCleanupHandlerrunGhcTwithCleanupSessionsetSessionDynFlagssetUnitDynFlagssetTopSessionDynFlagssetProgramDynFlagsgetProgramDynFlagssetInteractiveDynFlagsgetInteractiveDynFlagsparseDynamicFlagsparseTargetFiles setTargets getTargets addTarget removeTarget guessTargetworkingDirectoryChanged getModSummarytypecheckModule desugarModulecompileToCoreSimplifiedgetModuleGraphisLoadedisLoadedModule getBindingsgetInsts getModuleInfomodInfoTyThingsmodInfoTopLevelScopemodInfoExportsmodInfoExportsWithSelectorsmodInfoInstancesmodInfoIsExportedNamemkNamePprCtxForModulemodInfoLookupName modInfoIface modInfoRdrEnv modInfoSafemodInfoModBreaks isDictonaryIdlookupGlobalNamefindGlobalAnnsgetGREgetNameToInstancesIndexpprParenSymNamegetTokenStreamgetRichTokenStreamaddSourceToTokensshowRichTokenStream findModulefindQualifiedModulerenamePkgQualMrenameRawPkgQualM lookupModulelookupQualifiedModuleisModuleTrustedmoduleTrustReqs setGHCiMonadparserinterpretPackageEnv$fParsedModParsedModule$fOutputableCoreModule$fParsedModTypecheckedModule$fParsedModDesugaredModule$fTypecheckedModDesugaredModule!$fTypecheckedModTypecheckedModule$fDesugaredModDesugaredModule$fExceptionGhcApiError$fShowGhcApiErrorpprintClosureCommandshowTermpprTypeAndContents doMkDependHS doBackpack$fGhcMonadIOEnv$fEqSessionType GHC.VersioncProjectGitCommitIdcProjectPatchLevelcProjectPatchLevel1cProjectPatchLevel2cProjectVersioncProjectVersionInt short_usage$restrictedDamerauLevenshteinDistance hashInt32bytestring-0.12.1.0-9fc6Data.ByteString.Internal.Type ByteStringData.ByteString.Short.InternalShortByteString mkZFastStringGHC.IO.Handle.TypesRDoc reduceDocfirst hasAsciiSpacesignalHandlersRefCount forceStateNonEmptyandMfilterMokIdOccokIdChar reservedIds reservedOpsisDashesstderrSupportsAnsiColors' getPaddedIntgetGNUArchEntries putArchEntryfileInfoskipBOM catMaybesfromJustisJust isNothing listToMaybemapMaybe maybeToList.=renumfoldBlockNodesF3is_ctypeisOneLineRealSpanVMaybeviewConsviewSnocIdle AcquiringJobserverStatecanReleaseTokencanChangeNumCapsnumCapabilitiesjobserverAction JobResourcesJobs jobsWaiting tokensFree tokensOwnedJobserverOptionssetNumCapsDebouncesetNumCapabilitiesreleaseDebounce Jobserverjobs jSemaphoreaddToken addFreeTokenremoveFreeTokenremoveOwnedTokenaddJobactiveThread_maybestm-2.5.2.1-448fControl.Concurrent.STM.TMVarTMVar guardAcquire guardRelease acquireJob releaseJobcleanupJobserverdispatchTokensmodifyJobResourcesTVar acquireThread releaseThread tryAcquire tryRelease tryNoticeIdleJobserverAction tryStopThread jobserverLoop makeJobserver uniqueMaskgenSymmkUniqSM TaggedValSharedEntryseekBinNoExpandputPrimhashInstantiationsunitModuleStringZhddhdcompareFractionalLitunlines' appendJStatoptBlockhexDocBlockOpt BlockTrans jExprOptimize jValOptimize runBlockOpttailLoop combineOps declareAssign deadCodeElim flattenBlocksToSat dotNodeEdges checkNode colorScan assignColors selectColor plusWithInf mulWithInflibraryDirsForWayminClosureSizerewrites rewriteLinerewriteSymType rewriteAVX rewriteCall rewriteJump replaceOnce splitLineVarNameFldNameDataNameTvName TcClsName fldParentmk_derivn_locn_uniqn_occn_sort NotExportedIdScope realUniquefvVarAccCBPGCGpruneDelis_nullCafCC IndexedCCExprCCDeclCCHpcCCLateCCCallerCC flavourIndexpprFlavourCoreppCostCentreLblppFlavourLblComponentShadowedFieldGREsShadowAllFieldGREsShadowFieldSelectorsAndShadowFieldNameSpaces ShadowedGREsshadowedFieldGREsshadowedNonFieldNameSpaces IsShadowed IsNotShadowedIsShadowedIfFieldSelectorchildGREPriorityhighestPriorityGREs pickBothGRE greIsShadowednamespace_is_shadowedgreShadowedNameSpacesData.Typeable.InternalTypeablefindAnnPayloads widenRealSpanD:R:NoGhcTcGhcPassFiniteWarningCategorySetCofiniteWarningCategorySet powersetL powersetLS FamilyTyCon SynonymTyCon PrimTyConPromotedDataCon algTcFlavouralgTcRhsalgTcStupidThetaalgTcGadtSyntax tyConCTypesynTcRhsfamTcInj famTcParent famTcFlav famTcResVar primRepName promDcInfodataCon tctc_flavour tctc_is_polytctc_scoped_tvsokParenttyConFieldLabelEnvfieldsOfAlgTcRhs kindTyConKeystcFlavourMustBeSaturated pcPrimTyCon pcPrimTyCon0pcPrimTyCon_LevPolyLastArgcloseOverKindsFVsubstForAllCoBndrUncheckedsubstVarBndrUncheckedsubstTyVarBndrUsingsubstCoVarBndrUsingcore_full_viewexpandSynTyConApp_maybe expand_synisTyConKeyApp_maybeisNullaryTyConKeyAppisBoxedRuntimeRep_maybe mk_cast_tyfun_kind_arg_flagsgetRuntimeRep_maybegetLevity_maybe TickishPassD:R:XBreakpointTickishPassStg TypeOrderingTLTTEQTEQXTGTtcEqTypeNoSyns tc_eq_type narrowLit' singlePred forceMatch updateNodesingletonGraph consumeBy isMultiple anySplittableBody'isIfaceConstraintKinddefaultIfaceTyVarsOfKind liftedRep_ty lifted_ty ppr_itv_bndrs ppr_equalityppr_iface_tc_apppprSumpprTupleif_print_coercionsMkPatSynpsArgsRMEmptyrm_empty normaliseRMmkForAllCo_NoReflmkHomoForAllCos_NoRefldowngradeRole_maybe instCoercion instCoercionsextendLiftingContextEx ty_co_substliftCoSubstTyVarBndrUsingliftCoSubstCoVarBndrUsing TypeEqualityTNEQTypeMapX trieMapView tc_match_tystc_match_tys_x tc_unify_tys don'tBeSoSure ty_co_matchMkDatadcTagdataConKindEqSpecfitsIn kindPrimRepviewCall isCardNonOnce isCardNonAbs seqSubDmd botSubDmd strictifyCardglbCard viewDmdPair polyFieldDmdunboxDeeplySubDmdplusDivergencemultDivergence exnDmdTypeetaExpandDmdType defaultArgDmddecreaseArityDmdTypetransferBoxityConCpr_ FlatConCprcollectValBindersBitFieldbitfieldvanillaCafInfozapFragileUnfoldingsizeAnn pprTopBindsCoreMapXCoreMapGunboxedTupleSumKindisTupleNTyOcc_maybereadInt cTupleArr mkSumTyConOccmkSumDataConOcc unboxedSumArrmk_sumzeroBitRepTyConspecialBoxingDataCon_maybeextractPromotedListpcDataConWithFixitytcTyFamInstsAndVisXtcTyConAppTyFamInstsAndVisXReprFlagSymFlagopt_co1opt_co2opt_co3 opt_co4_wrapopt_co4 opt_phantomwrapRole chooseRoleppr_hs_args_prefix_appppr_single_hs_argsplitLHsQualTy_KPexprsFVsexprSomeFreeVarsDSetexprsSomeFreeVarsDSet exprOrphNamesruleFVsrulesFVs InstMatches instGuards instMatchespruneOverlappedMatches overridesinsert_overlappingD:R:XFunBindGhcPassGhcPassD:R:XFunBindGhcPassGhcPass0 pprPatBndrconPatNeedsParensNormMshowMsgEnvelope trace_flushgenerated_dumps trace_hook dump_hooklog_hook DumpCachedefaultTraceFlushdumpSDocWithStylechooseDumpFile withTiming'tmp_subdirs_to_cleantmp_files_to_cleantmp_next_suffixtmp_dirs_to_cleanmergePathsToCleangetTemporaryDirectoryentryBS entryName SectionTablesectionNameIndexsectionEntryCountsectionEntrySizesectionTableOffset ElfHeaderwordSizegwNgw32gw16 readElfHeaderreadElfSectionTablereadElfSectionByIndexfindSectionFromName readElfNoteBS runGetOrThrowplatformJSSupportedFlatSwitchPlanmaxJumpTableHoleminJumpTableSizeminJumpTableOffsetwriteLogQueueInternalD:R:XRhsClosureCodeGenIndex putObjBlock getObjBlockmagic checkMagic getCheckMagictoI32fromI32 ctxLneFrameBsctxTop assignCoercedataFieldCache nFieldCache dataCacheclsCachevarCache setObjInfoL setObjInfoalwaysSinkable onceSinkablecollectUsedOncecollectArgsTop topSortDeclssinkPgm'noOp cloneArray check_boundbnd_arr bnd_arr_rangebnd_babnd_ba8bnd_ba16bnd_ba32bnd_ba64bnd_ix8bnd_ix16bnd_ix32bnd_ix64 bnd_ba_rangecheckOverlapByteArray setStackDepth getStackDepthmodifyStackDepth modifySlots loadSkipIDDCddcId ddcModule genStaticArgparseFFIPatternparseFFIPatternAparseFFIPattern' ApplySpecspecVarsspecArgsspecConv ApplyConvRegsConv StackConv jumpToFastgenericApplyNamegenericApplyExpr specApplyName specApplyExprspecApplyExprMaybe mkApplySpec selectApply applySpecspecTag specTagExpr mkApplyArrpushContgenericStackApplygenericFastApply specApply stackApply fastApply numSpecPap specPapIdents getIdFields storeIdFieldsmkPapgarbageCollector resetRegisterresetResultVarclosureConstructors stackManipdeclRegsregGettersSettersloadRegs assignRegs'declRets closureTypesrtsDeclsrts'findDefaultStg lf_platformcheckNoCurrentCCSLocalFVslocalsImpFVsTopFVsCseEnv ce_in_scope ce_bndrMapce_subst ce_conAppMapmkStgLet exprIsHNFlikediffExpr diffIdInfo diffUnfoldlocBindControl.Monad.Trans.RWS.StrictRWST removeRhsCCCScomputeCbvInfo substIdBndrExitifyM exitifyReccse_bindCSEnvnoCSE extendCSEnv addBinderATidStateHackOneShotInfo safeArityType trimArityType andArityTypefindRhsArityEnvpedanticBottoms myExprIsCheap myIsCheapAppmkEtaWWEtaInfocantEtaReduceFun ATLamInfogenBind genEntryLnegenEntry resultSizeverifyRuntimeReps popLneFrame genUpdFrame bhSingleEntry optimizeFreeallocClsgenCasegenAltsnormalizeBranchesverifyMatchRep loadUbxTupmkIfElsemkEqmkPrimIfBranch loadParams branchResult pushRetArgs allocDynAll genPrimOp mkAlgBranchTailUsageDetailsoccAnalLamTailadjustTailUsageSimpleNodeDetails NodeDetailsLoopBreakerNode occAnalRecNDnd_rhs LetrecNodeadjustNonRecRhsmarkNonRecJoinOneShotsmarkNonRecUnfoldingOneShotsdecideJoinPointHoodmkCoreAppTypedmkCoreBoxedTuplewrapBoxboxTymkSmallTupleSelectormkSmallTupleSelector1mkSmallTupleCase mkExceptionIddivergingIdInfoaBSENT_ERROR_ID FieldIndicesnewIntData.IntMap.InternalIntMap fieldIndicesfields collect_bindshsDataDefnBindersScDepth lGRHSCtOriginpprCtOpprImportSuggestionpprSimilarName tyCoFVsOfCt tyCoFVsOfCtEv tyCoFVsOfCtstyCoFVsOfCtEvs tyCoFVsOfWCtyCoFVsOfImplicminuslogExactdivide rootExactgenRootgenLoglookupCycleBreakerVar initNabla initTmState decEqualityeqPmLit eqConLikepprLygSequence PmExprList pmExprAsListpprRefutableShapesprettifyRefuts getCleanNamepprPmVar NilTerminatedWcVarTerminatedPRTypeQextQext1Qext2Qext1ext2noFloatIntoRhslitSizecallSizejumpSizevalidHoleFitDefaultsUnitPrecedenceMapRevIndexModuleNameProvidersMap UnitConfigunitConfigFlagsPluginsunitConfigFlagsTrustedunitConfigFlagsIgnoredunitConfigFlagsExposedunitConfigFlagsDBunitConfigDBCacheunitConfigHideAllPluginsunitConfigHideAllunitConfigDistrustAllunitConfigAutoLinkunitConfigDBNameunitConfigGHCDirunitConfigGlobalDBunitConfigProgramNameunitConfigAllowVirtualunitConfigWaysunitConfigPlatformArchOSUnitVisibility uv_explicituv_requirementsuv_package_name uv_renamings VisibilityMapfromExposedModulesfromReexportedModulesfromFlag originVisible originEmpty mkUnitInfoMap findPackagesselectPackagesrenameUnitInfosortByPreferencecompareByPreference reverseDeps removeUnitsdepsNotAvailabledepsAbiMismatchmergeDatabasesvalidateDatabasemkModuleNameProvidersMap mkUnusableModuleNameProvidersMap addListTomkModMapadd_unit improveUnit' mkHomeUnit ModIfaceCoreTTEtte_countEntries TickDensityTickForCoverageTickForBreakPointsTickAllFunctionsTickTopFunctionsTickExportedFunctions TickCallSitesshouldTickBindaddTickLHsExprLetBodytickSameFileOnly GHC.GenericsGeneric home_impsHasTypeQGDiagnosticCodeGhcDiagnosticCode ConRecursInto ExtsBitmapGenSemicnested_comment_logic tok_primintX tok_primwordXtyConToDataCon checkTyVarscheckUnboxedLitPatcheckNotPromotedDataConensureValidOpExpcvtOpApp cvtOpAppPcvtSigTypeKind cvtTypeKindmk_apps cvtOpAppTcvtMaybeKindToFamilyResultSigcvtFamilyResultSigcvtInjectivityAnnotation mkHsForAllTy mkHsQualTymkHsContextMaybe cvtConstr cvt_id_arg getIdentifier ColumnBoundHdkWarnHdkStflattenBindsAndSigsmjmzmu toUnicodeAnnmomc commentsPAsafeTrySOE soe_rec_ids soe_substsoe_inlsoe_optsdataConSrcToImplBang dataConArgRep mkUbxSumAltTyCprWwResultOneWwUsenop_fn mkAppsBetaaddVoidWorkerArgwwUseForUnliftingcanUnboxResult mkWWcpr_entry mk_res_bndr mkWWcpr_oneunbox_one_resultmove_transit_varscprCaseBndrMultSigEnvSEse_sigsse_topsAE ae_rec_dc ae_fam_envs ae_virginae_sigscprAnalcprAnal'cprTransformBespokecprTransformDataConWork mAX_CPR_SIZE cprAnalBindcprDataStructureUnfolding_maybeextendSigEnvListextendSigEnvFromIdsextendSigEnvAllSameextendSigEnvForArg argCprType cprAnalAlt cprTransform splitThunk traceInline LibCaseEnv lc_scruts lc_rec_env lc_lvl_envlc_lvllc_optsae_optsWeakDmdsisInterestingTopLevelFn dmdAnalBindAnalEnvsetBindIdDemandInfosetIdDmdAndBoxSigdmdAnalBindLetUpuseLetUpdmdAnalBindLetDown dmdAnalRhsSig anticipateANFexprMayThrowPreciseExceptionforcesRealWorldresultType_maybe unariseArity enterDFunextendAnalEnvs dmdTransformfinaliseLetBoxity AsmTempLabelAsmTempDerivedLabelIdLabelLocalBlockLabel CmmLabelInfoCmmInfo CmmRetInfoCmmRetCmmCode CmmClosure CmmPrimCallRtsSelectorInfoTableRtsApInfoTable RtsApFast InfoTableLocalInfoTable LocalEntry IdTickyInfoConEntry ConInfoTable ClosureTableBytesBlockInfoTableTickyRednCountsTickyInferedTagRtsLabel ForeignLabel ModuleLabelDynamicLinkerLabel PicBaseLabelDeadStripPreventer HpcTicksLabelSRTLabelLargeBitmapLabel labelTypequickSourcePoswithSpan myCollectArgs scopeToPaths scopeUniquesSymSetSymMapppLlvmFunctionHeader ppLlvmBlocks ppLlvmBlockppLlvmBlockLabelppLlvmStatementppLlvmExpressionppCallnewLine exclamationrootNTargetNodeInfoLoopInfoliLoopsliLevels liBackEdgesNoInfoHeapStackCheckupdateEdgeWeight optHsPatterns staticPredCfgstaticBranchPredictioncheckIsReverseDependentcomputeLiveness livenessBlocklivenessForward livenessBackmkRegM makeRAStatsCleanSsCleanedSpillsAcc sCleanedCount sReloadedBy sJumpValidAcc sJumpValidCleanMSlot cleanSpincleanBlockForward cleanForward cleanReloadcleanTopBackwardcollateJoinPoints findRegOfSlot initCleanS accJumpValid isStoreReg emptyAssocaddAssocdelAssoc delAssoc1 elemAssoc closeAssocintersectAssoc cleanBackwardSpillS stateSpillSLstateUSSpillM regSpill_topregSpill_blockregSpill_instr spillRead spillWrite spillModify patchInstr initSpillSmakeSpillStats buildAllocsinkReg takeVirtualsspillCost_length nodeDegree maxSpinCount regAlloc_spin buildGraphgraphAddConflictSetgraphAddCoalescepatchRegsFromGraphpprAlignForSectionpprSectionAlign pprSizeDeclthunkEntryLabelwithClosureLclswithLclmkSeqs InferExtEq inferTagRhsLlvmEnv envStackRegs envVarMap envUsedVars envAliases envFunMap envUniqMeta envFreshMetaenvMask envOutput envLogger envConfig envVersion llvmGhcCC modifyEnv saveAliasisBuiltinLlvmVar LlvmAccumEOption exprToVarExprDatabasicBlocksCodeGenbasicBlockCodeGen stmtsToInstrs stmtToInstrs getInstrinct2 getInstrinctbarrier barrierUnlessgenCallgenCallWithOverflowgenCallExtract getFunPtrW getFunPtr arg_varsWarg_vars castVarsWcastVarscastVarcmmPrimOpFunctionsgenJump genAssigngenStore genStore_fast genStore_slow genBranch genCondBranch genExpectLit genSwitchi1Option wordOption genMachOpgenMachOp_fastgenMachOp_slowgenFmaOpgenLoad genLoad_fast genLoad_slow getCmmReg getCmmRegValallocReg funPrologue funEpilogue getHsFuncdoExpr expandCmmReg blockIdToLlvm getTBAAMetagetTBAARegMetasingletonPanic structStrlinkagegenGlobalLabelArrayllvmSectionType llvmSectioncmmDataLlvmGens cmmLlvmGencmmMetaLlvmPreludecmmUsedLlvmGensmachOpNeedsCaststaticLitsToWords pprHexVal pprCtorArray inlineSRT wordAlignedmkLivenessBitspprProcEndLabel BlockContext blockContexts interestingneeds_probe_call pprProcLabelpprBlockEndLabelmakeRegMovementGraph expandNodehandleComponentmakeMovejoinToTargets'OutputableRegConstraintlinearRegAlloc processBlock initBlocklinearRAraInsn clobberRegsfindPrefRealReg newLocationloadTemplinearRegAlloc'ncgLabelDynamic picRelativeAmodeRegisterCondCodeaddSpUnwindingsgetRegisterRegis32BitIntegerjumpTableEntry getSomeReggetAmodegetSimpleAmodeaddAlignmentCheckgenCondBranch'evalArgs genPrimCCall genLibCCall genRTSCCallgenCCall genFMA3CodegenCtz genCtz64_32 genCtzGeneric genMemCpy genMemSet genSimplePrim genCCall32 genCCall64fma_code BlockChain FrontierMapneighbourOverlapp breakChainAtcombineNeighbourhood sequenceChain dropJumps DwarfAbbrev DwAbbrNull pprAbbrevpprLabelStringpprDwarfInfoOpenpprDwarfInfoClose pprFrameProc pprFrameBlockdwarfGlobalRegNo pprSetUnwind pprLEBRegNo pprUnwindExprpprUndefUnwindpprData4 pprString' escapeChar mkDwarfARangecompileUnitHeadercompileUnitFooterdebugSplitProcs procToDwarf blockToDwarf debugFrame procToFrameswizzleRegisterRep opRegWidthisAArch64Bitmask signExtendReg truncateReg RewriteFun' TransferFun' sortBlocks mkDepBlocks updateFactBlockEntryLivenessLBlockEntryLivenessCmmLive noLiveOnEntrynoLiveOnEntryL conflicts lintShiftOpmayNotMentionCallerSavedRegsCmmSuper nodeSplitinflate cgraphOfCmm definedLabels changeLabelschangeBlockLabelsrelabelContainingSyntax IfThenElse ControlFlow smartExtendSomeWasmPostCCallSomeWasmPreCCall WasmPushessomeWasmTypeFromCmmTypewasmMemoryNarrowingsymNameFromCLabelsymVisibilityFromCLabelsymKindFromCLabeldataSectionKindFromCmmSectionalignmentFromCmmSectionlower_CmmStatic truncSubword extendSubwordlower_MO_Un_Homolower_MO_Bin_Homolower_MO_Bin_Homo_Trunclower_MO_Bin_Homo_Ext_Trunclower_MO_Bin_Rel_Extlower_MO_Bin_Rel shiftRHSCast lower_MO_Shllower_MO_U_Shrlower_MO_S_Shrlower_MO_MulMayOflolower_MO_Un_Convlower_MO_SS_Convlower_MO_UU_Convlower_MO_FF_Convlower_CmmMachOp lower_CmmLitlower_CmmRegOfflower_CmmLoad_Typed lower_CmmLoad lower_CmmExprlower_CmmExpr_Typedlower_CmmExpr_Ptrlower_CMO_Un_Homolower_CMO_Bin_Homolower_MO_UF_Convlower_MO_Cmpxchglower_CallishMachOplower_CmmUnsafeForeignCall_Droplower_CmmUnsafeForeignCalllower_CmmStorelower_CmmActionlower_CmmActionslower_CmmGraphonTopSym onFuncSymonAnySym onCmmLocalRegonCmmLocalReg_TypedonFini onCmmInitFini onCmmData onCmmProc onCmmDeclWasmAsmM doTailCall asmWithTab asmTellLine asmTellLFasmTellTabLine NativeGenAccNGS ngs_unwinds ngs_natives cmmNativeGens checkLayoutcomputeUnwindingmakeImportsDoc dont_care copyTicks AvailRegs availXMMRegs availLongRegsavailDoubleRegsavailFloatRegsavailVanillaRegs MkFCodeState fcs_tickscope fcs_ticky fcs_selfloop fcs_sequelfcs_upframeoffsettoIpeBufferEntriesDecls addVarDecladdLabel addDynTagLitBoundmk_discrete_switch needsArgTagcollectExprLoads annotatePrimmemoryOrderToTsanMemoryOrder tsanTarget tsanAtomicCas TickyThunkTickyLNE tickyArgArityregisterTickyCtrTickyFun emitTickyDataemitCallWithExtraStackslowArgstagSkeletonExprrhsCard closureSizeidClosureFootprinttagSkeletonLettagSkeletonBindingliftRhs ruleCantMatchmatchNSTEst_read_ruleenv st_max_ticksgenUnits modulePrefix commafyWithmissingSignatureWarningFlagspprSolverReportWithCtxtpprTcSolverReportMsgpprPotentialInstancespotentialInstancesErrMsgpotentials_msg_with_options%overlapping_but_not_more_specific_msgpprExpectedActualInfoexpandSynonymsToMatchformat_frr_errcannotMakeDerivedInstanceHeraldpprBootListMismatcheszonkTcTypeMappersuggestInstantiatedWithparseIntdropEq mkPrimOpId primOpIdsNumOps numLitTypenumNegnumOrnumAndnumDivnumMulnumSubnumAddOpValBinOpAppshiftRightLogicalNativefmaRulesfmaLit fmaZero_zfmaOne boundsCmp int8Result int16Result int32Result intCResult word8Result word16Result word32Result wordResult wordCResultsemiInversePrimOpextendNarrowPassthroughnarrowSubsumesAndsameArgIdempotentCommutisBignumLiteralisNumberLiteralisLitNumConAppleftIdentityCPlatformrightIdentityCPlatformidentityCPlatform mkNumLiteralmkNumLiteralMaybeis_any_quot_rem orIfNotFoundhomeSearchCachefindInstalledHomeModulefindPackageModulefindPackageModule_ mkDynObjPath mkDynHiPath mkHiePath liftIOEnv emptyWriterDictBindFDB fdb_bindsSpecArgSpecTypeSpecDict UnspecType UnspecArg spec_importstryWarnMissingSpecs specHeaderbindAuxiliaryDictmkDBbind_fvsrecWithDumpedDictsSpecConstrOptssc_keen sc_recursivesc_countsc_size sc_module sc_uf_optssc_debug sc_max_argsspecialisableArgOcc scTickish wildCardPatcloneCaseBndrs setLanguagesetSafeHaskellcombineSafeFlagsupdOptLevelChanged safeFlagCheck allFlagsDepswarningControlscustomOrUnrecognisedWarningflagSpec flagSpec'warnSpec warnSpec' depFlagSpecOp depFlagSpec depWarnSpec subWarnSpecdepFlagSpecOp' depFlagSpec'depFlagSpecCond flagGhciSpec flagGhciSpec'flagHiddenSpecflagHiddenSpec'hideFlagnegatableFlagsDeps dFlagsDeps fHoleFlagslanguageFlagsDepssafeHaskellFlagsDeps enableDLintmkFlagemitInitializerDeclsldvWord generic_gc mkGcLabel DataCAFEnv CAFfyLabelgetLabelledBlocks depAnalSRTsgetCAFs getStaticFuns resolveCAFSRTEntrydoSCConeSRT buildSRTChain updInfoSRTs closeNursery openNurseryPrimopCmmEmit_ExternalPrimopCmmEmit_Internal asUnsigned emitPrimOpgenericWordAddCOpgenericWordSubCOpdoPrefetchByteArrayOpdoPrefetchMutableByteArrayOpdoPrefetchAddrOpdoPrefetchValueOpmkBasicPrefetchdoNewByteArrayOpdoCopyByteArrayOpdoCopyMutableByteArrayOp&doCopyMutableByteArrayNonOverlappingOpdoCopyByteArrayToAddrOpdoCopyMutableByteArrayToAddrOpdoCopyAddrToByteArrayOpdoCopyAddrToAddrOp doCopyAddrToAddrNonOverlappingOpdoSetByteArrayOpdoSetAddrRangeOp doNewArrayOp doCopyArrayOpdoCopyMutableArrayOpemitCloneArrayemitCloneSmallArray emitSetCardsdoAtomicByteArrayRMWdoAtomicReadByteArraydoAtomicReadAddrdoAtomicWriteByteArraydoAtomicWriteAddremitMemcpyCallemitCheckedMemcpyCallemitMemmoveCallemitMemsetCallemitDirtyMutVaremitCopyUpdRemSetPushalignmentFromTypes emitCopyArrayemitCopySmallArraydoAtomicAddrRMWdoCasByteArrayemitBoundsCheckemitRangeBoundsCheckdoPtrArrayBoundsCheckdoSmallPtrArrayBoundsCheckdoByteArrayBoundsChecksm_regs sm_ret_offsm_argssm_sp fixupStackallocate manifestSpfalseStackCheckelimStackStorescpsTopjsexeExtensioncommonCppDefs_vanillacommonCppDefs_profiledgenMkTupgenCommonCppDefsCompactedModuleCode cmc_exports ModuleCode mc_exports LinkerStatspackedMetaDataSizebytesPerModulehPutJS renderLinkerrenderLinkerStats combineFiles writeHtml writeRunMaingetDepscollectModuleCodesdiffDepsrtsDeps mkBaseFuns mkPrimFunsloadObjBlockInfoloadArchiveBlockInfogetJsArchiveEntryisJsFilegetJsBSreadBlockInfoFromObj linkModules nubStaticInfo writeRunnerstartTHRunnerProcess jsLinkPlan jsSendCommandspawnInterpMaybehandleSeqHValueStatus spawnIServ ForeignRef RemoteRefBCEnvallocateTopStrings mkStackBitmappushConstrAtomisSupportedCConvmkStackOffsets mkProtoBCOlabelsToSourcesWithTNTClabelsToSourcesSansTNTC le_diagOpts le_platformlintRhs lintCoreExpr lintJoinLams lintCastExprcheckCanEtaExpandcheckCaseLinearity lintValApp checkAxInstCo withoutAnnotsinitL mk_cast_errcontEvalContext simplTick makeTriviallabelledTraceOptTcRn wrapDocLocadd_diagnosticwarnRedundantRecordWildcardwarnUnusedRecordWildcard reportableimportSuggestions ShNameSubst ns_module substNamesubstNameAvailInfo mergeAvails uAvailInfos uAvailInfouName uHoleNameShIfEnvShIfM initRnIface rnIfaceGlobalrnIfaceNeverExportedrnIfaceClsInstknownKeyNamesOkay knownKeysMapcgTickwithSourceNotedoStore getTables putWithTablesinitBinMemSizeloadInterfaceWithExceptionis_external_sigcomputeInterfaceload_dynamic_too_maybe ZonkBndrTcM candidateVars defaultTyVars checkFRR_with unifyConcreteensureConcretemakeTypeConcretehasFixedRuntimeRepResfillInferResult checkTopShape tcSubTypeNCtcDeeplySkolemiseKindRepM KindRepEnvStuff trNameLittrTyConDataConplatform TypeRepTodoExportedKindRepsTodo todo_tyconsmod_fingerprintpkg_fingerprint mod_rep_expr TypeableTyConmkTypeRepTodoBindsmkPrimTypeableTodosghcPrimTypeableTyConsghcTypesTypeableTyCons collect_stuff mkTrNameLitmkTyConRepBindskindIsTypeablebuiltInKindRepsmkExportedKindReps runKindRepM getKindRep mkKindRepRhsmkTyConRepTyConRHStraceTR instSchemeGHC.SerializeddeserializeWithDatafromSerializedserializeWithData toSerialized SerializedcollectCostCentresCPEcpe_env cpe_config FloatTick cpeBodyNFCpeBodycpeBodyFloatsokCpeArg wrapTickscheckForConflictscheckInjectiveEquation isTFHeadedbareTvInRHSViolatedunusedInjTvsInRHSreportUnusedInjectiveVarsErrreportTfHeadedErrreportBareVariableInRHSErrreport_unsolved importantdeferringAnyBindingsignoreConstraint mkErrorItemunsuppressErrorItemzonkTidyTcLclEnvspprSolverReportSupplementarypprValidHoleFitspprConstraintsInclude mkHoleErrorzonkAndGroupSkolTvsmaybeAddDeferredBindingsmkFRRErrfixedRuntimeRepOrigin_maybemkCoercibleExplanationshouldPprWithExplicitKinds tryFilter validHoleFits DisambigInfo NoOccurrenceUniqueOccurrenceDisambiguatedOccurrenceAmbiguousOccurrenceFoundExactOrOrigExactOrOrigErrorNotExactOrOriglookupExactOcc_eitherlookupSubBndrOcclookupGREInfo_GRElookupFieldGREslookupGlobalOccRn_overloaded badFieldsUpdlookupOneQualifiedNameGHCilookupQualifiedNameGHCilookupBindGroupOcc matchTypeabledoFunTy doTyConApponlyNamedBndrsAppliedmkTcScheckWellStagedInstanceWhatuseVarsnewWantedEvVarrestoreTyVarCyclesrunTcSWithEvBinds'RewriteTvResultRTRNotFollowed RTRFollowedRewriteM mkRewriteMsetEqRelrewrite_args_fastrewrite_args_slow rewrite_corewrite_reduction split_pi_tys'ty_con_binders_ty_binders'InstDFundominatingMatch impliedBySCs!tryLastResortProhibitedSuperClass zonkEqTypescan_eq_newtype_nc canEqCastcanEqSoftFailurecanEqHardFailurecanEqReflexiveTcPluginProgress pluginNewCts pluginBadCtspluginSolvedCtspluginInputCts SolvedCtsSplitCtsrunTcPluginsGivenrunTcPluginsWantedrunTcPluginSolversfinish_rewriteuseUnsatisfiableGivensunsatisfiableEv_maybesolveImplicationUsingUnsatGivenunsatisfiableEvExprdefaultCallStackspickQuantifiablePredsdefaultTyVarTcS TelescopeAcc ValidityEnv ExpandModeExpandNoExpandBothTypeOrKindCtxt OnlyTypeCtxt OnlyKindCtxtBothTypeAndKindCtxtcheckUserTypeErrortypeOrKindCtxttypeLevelUserTypeCtxtallConstraintsAllowedlinearityAllowed vdqAllowedinitialExpandModecheckHasFieldInstsplitInstTyForValiditycheckValidTypePatscheck_arg_type ImpOccItem imp_is_parent imp_bundledimp_item IsSubordinatewarnUnqualifiedImport gresFromAvailmkImportOccEnvlookupImpOccEnv gresFromIEwarnMissingSignatureswarnMissingKindSignatures filterImportspartition_nwcsrnImplicitTvBndrswildCardsAllowedcheckPolyKindslookupFixityOp filterInScopefilterFreeVarsToBind checkWildCard mkExpandedPatgeneralizeOverLitValInstDeclFreeVarsMap KindSigEnvKindSig_FV_EnvClosedTyFamInfo ClosedTyFamNotClosedTyFamAssocTyFamInfoNonAssocTyFamEqnAssocTyFamDefltAssocTyFamInstpatchForeignImportcheckCanonicalInstances rnRoleAnnotsmkInstDeclFreeVarsMaprnInjectivityAnnextendPatSynEnvDontWarnExportNamesExportWarnSpanNames ExportAccumexpacc_dont_warnexpacc_warn_spans expacc_modsexpacc_exp_occscheckPatSynParent check_occs ExportOccMap dupExport_okdupFieldExport_okcheck_namespace runRnSpliceStmtTree MonadNames postProcessStmtsForApplicativeDonoPostProcessStmtsrebindableContextrearrangeForApplicativeDomkStmtTreeHeuristicmkStmtTreeOptimalstmtTreeToStmtssegments splitSegmentmkApplicativeStmtneedJoin isReturnApprnStmtsegmentRecStmtsmergeStaticObjects loadObjects dynLoadObjsmakeForeignNamedHValueRefs linkSomeBCOs getGCCPathsgccSearchDirCachegetSystemDirectories addEnvPathsloadDependenciesisAbstractIfaceDeclmergeIfaceDeclmergeIfaceDeclstc_iface_binding tc_iface_decltcUnfoldingRhs SkolemModeTcTyMode mode_tykitc_infer_lhs_typetc_infer_hs_type_ektc_infer_hs_type tcInferTyAppstcInferTyApps_nosatcheckExpectedKindnewNamedWildTyVarmkExplicitTyConBinderkcInferDeclHeaderkcCheckDeclHeader_sigcheckExpectedResKindkindGeneralizeSomekindGeneralizeNone finish_tuplekcCheckDeclHeaderkcCheckDeclHeader_cuskmatchExpectedPatTy checkGADTtc_pat tcPatSynPatmatchExpectedConTy localSigWarnrecursivePatSynErr SynCycleMcheckTyConIsAcycliccheckHsigIface check_instifaceDeclNeverExportedRefsaddTransitiveDepInfocheckImplementstc_patsyn_finishmkPatSynRecSelBindsauxBindSpecRdrNamemk_showString_appmk_showsPrec_app mk_shows_appgenAuxBindSpecOriginalgenAuxBindSpecDupgenAuxBindSpecSig mkFunBindSE mkFunBindEC postfixModTbl assoc_ty_idassoc_ty_id_maybenewAuxBinderRdrNameArgTyAlg argTyFoldfoldBal cond_stdOK cond_args ConditioninferConstraintsStockinferConstraintsAnyclass simplifyDerivrebuild_hs_appstcRemainingValArgs tcMatchesCmdEnvcmd_arr tcCmdMatchestcCmdMatchLambdatcCmdTop quickLookArgdesugarRecordUpdmake_lines_msgdisambiguateRecordBinds tcTupArgs tcSynArgE tcSynArgAisFFIArgumentTy checkAnyTy deriveClause derivePred genInstBinds genFamInstsderivingThingFailWithgetInitialKind tcInjectivity getArgExpKind mkGADTVarscheckTyConConsistentWithBootget_fam_decl_initial_kindtcDefaultAssocDecl PlanResult BootErrsMrun_th_modfinalizerscheckbootErr checkSuccess embedErrswrapErrs checkListBy compatClassOpcompatATeqFD compatFamFlav compatAlgRhs compatConcheckSynAbsDatainvalidAbsDataSubTypes getMainOccrunPlans tcUserStmt tcGhciStmts getGhciStepIOrnDumpmkDsEnvsFromTcGblTopNormaliseTypeResultpmTopNormaliseTypeNormalisedByConstraints HadRedexes addPhiCtsupdRcmvanillaCompleteMatchTCaddCompleteMatchesaddConLikeMatchesaddTyConMatchestntrGutspmIsClosedTypenormaliseSourceTypeWHNFisSourceTypeInWHNFinitFueladdTyCtstyOraclenameTyCt addPhiTmCtaddBotCtaddConCt addNotBotCt addNotConCtaddVarCt addCoreCtmodifyT Control.Monad.Trans.State.StrictrepresentCoreExprmakeDictsCoherentinhabitationTestvarNeedsTesting instantiateinstBotsplitReprTyConApp_maybeinstCompleteSetsinstCompleteSetinstConisDataConTriviallyInhabitedtriviallyInhabitedTyConKeysmatchConLikeResTy leftToRight topToBottomthrottledsFCalldsFractionalLitToRationalwarnAboutOverflowedLiteralsgetLHsIntegralLitgetIntegralLitgetSimpleIntegralLit getLHsCharLitgetNormalisedTyconName getTyconName mkPmLetVar vanillaConGrd mkListGrds mkPmLitGrds desugarPat desugarPatV desugarLPatV desugarLPatdesugarListPatdesugarConPatOut desugarLGRHS desugarGuarddesugarLocalBinds desugarBinddesugarBoolGuardFormatReportWarningsModeformatReportWarningsCIRB collectInMode cirb_bangscirb_red cirb_inacccirb_cov noCheckDsaddRedundantBangs testRedSetsreportWarningslocallyExtendPmNablasdsHsBind makeCorePairds_ev_typeablegetRepmkMetaWrappersrepFamilyResultSigrepFamilyResultSigToMaybeKindrepInjectivityAnnnullOuterImplicitnullOuterExplicit repTyVarBndr repMaybeLTy coreNothing coreNothing'coreJust coreJust'repData TcViewPat dsMcBindStmtmaxBuildLength dsConLike checkVersions checkPlugins checkHsigcheckHie checkFlagHashcheckOptimHash checkHpcHash checkModUsagegetOrphanHashesmkIfaceAnnCache mkObjectUsageHasTypeToHieTVScopedPScopedRScoped SigContextPatSynFieldContext IEContext RFContext listScopes patScopestaScopestvScopesPS UnariseEnv extendRhounariseSumAltsmkUbxSumubxSumRubbishArg unariseFunArg unariseConArg getStgToDocheckBrokenTablesNextToCodelogWarningsReportErrorshandleWarningsThrowErrors ioMsgMaybe'extract_renamed_stuff hsc_typecheck checkObjects checkByteCode genModDetailshscCheckSafeImportscheckSafeImports hscCheckSafe' checkPkgTrustmarkUnsafeInferhscGetSafeModehscSimpleIface jsCodeGen mkMetaTyVaremitQuoteWantedbrackTytcPendingSplice seqSerialized lookupDeclDoc lookupArgDocgetExternalModIfacelookupThInstNameaddModFinalizerRef runRemoteTH checkQResult getTHStategetThSpliceOrigin annotThTypetyConArgsPolyKindedreifyInstances'findEnclosingDeclsupdateFixityEnv phaseIfAfterlink'MakeNewModSummarymakeNewModSummaryMakeEnv ResultVar WorkerLimit JSemLimit BuildPlan SingleModule ResolvedCycleUnresolvedCycleModuleGraphNodeWithBootFile loadFinishguessOutputFile pruneCache waitResultinterpretBuildPlan upsweep_mod addSptEntrieswarnUnnecessarySourceImportsenableCodeGenForTHenableCodeGenWhen mkRootMap wrapAction wait_deps_hug wait_depsrunParPipelinesrunAllPipelinesrunLoopupsweepgetPreprocessedImports rehydratepartition_args normalise_hypcheckNewDynFlagsunitIdOrHomeUnitbindSuspensionsBkpEnv bkp_level bkp_table bkp_filename bkp_sessionBkpM SessionType ExeSession TcSession CompSessionwithBkpSession hsunitDepsaddUnit getBkpEnv getBkpLevel innerBkpM updateEpsGhc_ getEpsGhcinitBkpMbackpackProgressMsg mkBackpackMsg backpackStyle msgTopPackage msgUnitId msgIncludehsunitModuleGraphhsModuleToModSummary newUnitId