h-&kb      !"#$%&' ( ) *+, - . / 0 12345 6789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                         !"""#$$$$$$$%&&&&&&&&&&&&&&&&&&&&&&&&'''''''((((((((((((((((((((((((((((())))))))))))))****************++++++,,,------------------------------------------------------------------------------------------------------------------------------------------------- ..........///////////////////000011111111112222222222222222222222222222222222222222222222223333344444444444                                                                          555555555556666666666666666666677777777777777777777777777777777778888888889:::::::::::::::::::::::: : : : : : : : : : : : : : : : : : :                               ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; < < < < = = = = = = = = = = = = = = = = = = = = = = = = = = = = = > > > > > > > > > > > > > > > > > > > > > > > > > >                                                                                                                      . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ A A A A A 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 C C C C C C C C C C C C C C C C C D D D D D D D E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E                                              F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F G G G G G G G G G G G G G G G G G H H H H H H I I I I I I I I I I I I I I I I I I I I I I I I I I I I IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRSSSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]^^^^^^^^^^_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_!_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_"_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$_$`%`%`%`%`%`%`%`%`%`%`%`%`%`%`%`%`%`%`%`%`%`%`%`%`%a%a%a%a%a%a%a%a%a%a%a%a%a%a%a%a%a%a%a%a%a%a%a%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%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&c&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d&d'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)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*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*f*f*f*f*f*f*f*f*f*f*f*f*f*f*f*f*f*f*f*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,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,k,k,k,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-m-n-n-o-o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.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/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/q/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r2r3r3r3r3r3r3r3r3r3r3r3r3r3r3r3r3r3r3r3r3r3r3r3r3r3r3r3r3r3r3r3s3s3s3s3s3s3s3s3s3s3s3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t3t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4t4u4u4u4u4u4u4u4u4u4u4u4u4u4u4u4u4u4u4u4u4u4u4u4u4u4u4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4v4w4w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5w5x5x5x5x5x5x5x5x5x5x5x5x5x5x5x5x5x5x5x5x5x5x5x5x5x5x5x5x5x5x5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y5y6y6y6y6y6y6y6y6y6y6y6y6y6y6y6y6y6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6{6{6{6{6{6{6{6{6{6{6{6{6{6{6{6{6{6{6{6{6{6{6{6{6{6{6{6{6{6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|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|7|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|8|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9}9}9}9}9}9}9}9}9}9}9}9}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~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<================================================================================================================================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^________________________________________________________________________________________________________________________________````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggghhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~€ÀĀŀƀǀȀɀʀˀ̀̀΀πЀрҀӀԀՀր׀؀ـڀۀ܀݀ހ߀ÁāŁƁǁȁɁʁˁ́́΁ρЁсҁӁԁՁցׁ؁فځہ܁݁ށ߁‚ÂĂłƂǂȂɂʂ˂̂͂΂ςЂт҂ӂԂՂւׂ؂قڂۂ܂݂ނ߂ƒÃăŃƃǃȃɃʃ˃̃̓΃σЃу҃ӃԃՃփ׃؃كڃۃ܃݃ރ߃„ÄĄńƄDŽȄɄʄ˄̄̈́΄τЄф҄ӄԄՄքׄ؄لڄۄ܄݄ބ߄…ÅąŅƅDžȅɅʅ˅̅ͅ΅υЅх҅ӅԅՅօׅ؅مڅۅ܅݅ޅ߅†ÆĆņƆdžȆɆʆˆ̆͆ΆφІц҆ӆԆՆֆ׆؆نچۆ܆݆ކ߆‡ÇćŇƇLJȇɇʇˇ͇̇·χЇч҇ӇԇՇևׇ؇هڇۇ܇݇އ߇ˆÈĈňƈLjȈɈʈˈ͈̈ΈψЈш҈ӈԈՈֈ׈؈وڈۈ܈݈ވ߈‰ÉĉʼnƉljȉɉʉˉ͉̉ΉωЉщ҉ӉԉՉ։׉؉ىډۉ܉݉މ߉ŠÊĊŊƊNJȊɊʊˊ̊͊ΊϊЊъҊӊԊՊ֊׊؊يڊۊ܊݊ފߊ‹ËċŋƋNjȋɋʋˋ̋͋΋ϋЋыҋӋԋՋ֋׋؋ًڋۋ܋݋ދߋŒÌČŌƌnjȌɌʌˌ̌͌ΌόЌьҌӌԌՌ֌׌،ٌڌی܌݌ތߌÍčōƍǍȍɍʍˍ͍̍΍ύЍэҍӍԍՍ֍׍؍ٍڍۍ܍ݍލߍŽÎĎŎƎǎȎɎʎˎ͎̎ΎώЎюҎӎԎՎ֎׎؎َڎێ܎ݎގߎÏďŏƏǏȏɏʏˏ̏͏ΏϏЏяҏӏԏՏ֏׏؏ُڏۏ܏ݏޏߏÐĐŐƐǐȐɐʐː̐͐ΐϐАѐҐӐԐՐ֐אِؐڐېܐݐސߐ‘ÑđőƑǑȑɑʑˑ̑͑ΑϑБёґӑԑՑ֑בّؑڑۑܑݑޑߑ..................................................................’.Ò.Ē.Œ.ƒ.ǒ.Ȓ.ɒ.ʒ.˒.̒.͒.Β.ϒ.В.ђ.Ғ.Ӓ.Ԓ.Ւ.֒.ג.ؒ.ْ.ڒ.ے.ܒ.ݒ.ޒ.ߒ..................................“ÓēœƓǓȓɓʓ˓͓̓ΓϓГѓғӓԓՓ֓דؓٓړۓܓݓޓߓ”ÔĔŔƔǔȔɔʔ˔͔̔ΔϔДєҔӔԔՔ֔הؔٔڔ۔ܔݔޔߔ•ÕĕŕƕǕȕɕʕ˕͕̕ΕϕЕѕҕӕԕՕ֕וٕؕڕەܕݕޕߕ–ÖĖŖƖǖȖɖʖ˖̖͖ΖϖЖіҖӖԖՖ֖זٖؖږۖܖݖޖߖ—×ėŗƗǗȗɗʗ˗̗͗ΗϗЗїҗӗԗ՗֗חؗٗڗۗܗݗޗߗ 2.7.20250701 None( #&'()+,/159<=>?}Return the error corresponding to an exit code from the Agda process11315471421 5 5*1$( "None( #&'()+,/159<=>?.A data file path relative to the project root.Agda's embedded data files.The subdirectory in the Agda data directory containing the emacs mode.The Agda mode's Emacs Lisp files, given in the order in which they should be compiled.None( #&'()+,/159<=>?The default termination depth.Cut off structural order comparison at some depth in termination checker?c >= 0( means: record decrease up to including c+1.   None( #&'()+,/159<=>?The standard semiring on s.HasZero is needed for sparse matrices, to tell which is the element that does not have to be stored. It is a cut-down version of SemiRing, which is definable without the implicit ?cutoff. Semirings. Addition.Multiplication.Zero. The one is never used in matrix multiplication , one :: a -- ^ One.The standard semiring on s.The standard semiring on s.  - -% %None( #&'()+,/159<=>?y%A term with many holes (error value).,A term with one hole and the (old) contents.A constant term. $ None( #&'()+,/159<=>?6Guard: return the value a only if the boolean is TrueGuard: return the action f only if the boolean is TrueBranch over a  collection of values.Branch over a 3 collection of values using the supplied action.Better name for .None( #&'()+,/159<=>?hBoolean algebras.Set difference, dual to .Types isomorphic to .   ' None) #&'()+,/159<=>?  Conclude u2 from  funUniv u1 u2 and u1. Conclude u1 from  funUniv u1 u2 and u2.Compute the universe type of a function space from the universe types of domain and codomain.Hacky showing of standard universes, does not take actual names into account.Fibrancy of standard universes.*The successor universe type of a universe.We have IsFibrant < IsStrict.Fibrant universe.Non-fibrant universe.Flavor of standard universe (Prop < Type < SSet,).!Fibrant universe of propositions.Non-fibrant universe.Fibrant universe. kind of the funSort. kind of the domain.* kind of the codomain, if uniquely exists.Have ? kind of the funSort. kind of the codomain. kind of the domain, if unique.   ! !")+/#18& &  None( #&'()+,/159<=>? Transform a  CallStack by filtering each CallSiteGet the most recent CallSite in a  CallStack, if there is one. Transform a  CallStack by transforming its list of CallSitePops n entries off a  CallStack using  popCallStack.. Note that frozen callstacks are unaffected.1The same as the un-exported internal function in %GHC.Exceptions (prettyCallStackLines) Prints like: +doFoo, called at foo.hs:190:24 in main:MainPretty-print a  CallStack". This has a few differences from GHC.Stack.prettyCallStackLines. We omit the "CallStack (from GetCallStack)" header line for brevity. If there is only one entry (which is common, due to the manual nature of the  HasCallStack constraint), shows the entry on one line. If there are multiple, then the following lines are indented. CallStack! comprising only the most recent CallSiteType of an entry in a  CallStackType of a filter for CallSite$Type of the name of a function in a CallSite | e.g. proveEverythingType of a column of a SrcLocType of a filename of a SrcLoc | e.g. `srcfullAgdaUtilsFoo.hs`Type of a line number of a SrcLocType of the module name of a SrcLoc | e.g. Type of the package name of a SrcLoc | e.g. `Agda-2.@`#3$  None( #&'()+,/159<=>?)Total function to convert an integer to a character. Maps surrogate code points to the replacement character U+FFFD.&Is a character a surrogate code point.?Map surrogate code points to the unicode replacement character.%The unicode replacement character  .None( #&'()+,/159<=>?"Expand a telescope of environment variables (each value may refer to variables earlier in the list).&List of environment variable bindings.~. $VARIABLE or  ${VARIABLE}.Ordinary characters.3Tokenization for environment variable substitution.Tokenize a string. The ~ is recognized as $HOME% only at the beginning of the string.Home directory.&Environment variable substitution map.Input.Output with variables and ~ (home) substituted.. ...None( #&'()+,/159<=>?! #(  None) #&'()+,/0159<=>? applyUnless b f a applies f to a unless b.applyUnlessIts p f a applies f to a unless p a.Monadic version of  applyUnlessapplyWhen b f a applies f to a when b.applyWhenIts p f a applies f to a when p a. version of .Monadic version of  applyWhen version of .Repeat a state transition f :: a -> (b, a) with output b while condition cond on the output is true. Return all intermediate results and the final result where cond is False.(Postconditions (when it terminates): (fst (last (iterWhile cond f a)) == False. $all fst (init (interWhile cond f a)). n f x applies f to x n times and returns the result.)The applications are calculated strictly.Iteration to fixed-point.iterateUntil r f a0 iterates endofunction f, starting with a0 , until r( relates its result to its input, i.e., f a r a.9This is the generic pattern behind saturation algorithms.If f is monotone with regard to r , meaning a r b implies f a r f b , and f-chains starting with a09 are finite then iteration is guaranteed to terminate.*A typical instance will work on sets, and r could be set inclusion, and a0 the empty set, and f- the step function of a saturation algorithm.Monadic version of .Repeat something while a condition on some state is true. Return the last state (including the changes of the last transition, even if the condition became false then).Monadic version of .More general trampoline, which allows some final computation from iteration state a into result type b.Monadic version of .%A version of the trampoline function.The usual function iterates f :: a -> Maybe a as long as Just{}, is returned, and returns the last value of a upon Nothing.usualTrampoline f = trampolineWhile $ a -> maybe (False,a) (True,) (f a).trampolineWhile is very similar to  repeatWhile, only that it discards the state on which the condition went False;, and returns the last state on which the condition was True.Monadic version of .,,None( #&'()+,/159<=>?ySemiring with idempotent  == dioidE.g. +neutral element of compose , e.g. zero  None( #&'()+,/159<=>? ?Composition: pure function after functorial (monadic) function.Any decoration is a lens. set is a special case of dmap.#Any decoration is traversable with traverse = traverseF. Just like any 6 is a functor, so is any decoration, given by just  traverseF , a functor.The true pure for loop.  is a misnomer, it should be forA.?A decoration is a functor that is traversable into any functor.The  superclass is given because of the limitations of the Haskell class system.  traverseF actually implies functoriality.Minimal complete definition:  traverseF or  distributeF.%Decorations commute into any functor. traverseF is the defining property.3Decorations compose. (Thus, they form a category.)%The identity functor is a decoration.0A typical decoration is pairing with some stuff. )'( ')(    None( #&'()+,/159<=>?? (bag ! a) finds all elements equal to a(. O(log n). Total function, returns [] if none are.Return the multiplicity of the given element. O(log n + count _ _).!Returns the bag, with duplicates.O(1) !fromList = unions . map singleton:Returns the elements of the bag, grouped by equality (==). "insert a b = union b (singleton a)#Returns the bag without duplicates.O(n). O(log n). O(log n).Is the bag empty?O(1)7Number of elements in the bag. Duplicates count. O(n).!Returns the bag, with duplicates.A set with duplicates. Faithfully stores elements which are equal with regard to (==).%The list contains all occurrences of a (not just the duplicates!). Hence, the invariant: the list is never empty.   ! $  (c) Sven Panne 2002-2005 BSD-styleNone( #&'()+,/159<=>?Process the command-line, and return the list of values that matched (and those that didn't). The arguments are:The order requirements (see )The option descriptions (see )9The actual command line arguments (presumably got from ). returns a triple consisting of the option arguments, a list of non-options, and a list of error messages.This is almost the same as , but returns a quadruple consisting of the option arguments, a list of non-options, a list of unrecognized options, and a list of error messages.Return a string describing the usage of a command, derived from the header (first argument) and the options described by the second argument.Describes whether an option takes an argument or not, and if so how the argument is injected into a value of type a.no argument expectedoptional argumentoption requires argument.What to do with options following non-options.*freely intersperse options and non-options+no option processing after first non-optionwrap non-options into optionsEach  describes a single option.The arguments to  are:list of short option characters*list of long option strings (without "--")argument descriptorexplanation of option for user description of a single options:2Kind of command line argument (internal use only): an optionan un-recognized option a non-option!end-of-options marker (i.e. "--")something went wrong...Take a look at the next cmd line arg and decide what to do with it.Handle long option.Handle short option.non-option handlingoption descriptorsthe command-line arguments &(options, non-options, error messages)non-option handlingoption descriptorsthe command-line arguments 4(options, non-options, unrecognized, error messages)headeroption descriptors'nicely formatted description of optionslist of short option characters*list of long option strings (without "--")argument descriptorexplanation of option for user   > > None( #&'()+,/159<=>?"An empty hash table.Inserts the key and the corresponding value into the hash table.Tries to find a value corresponding to the key in the hash table."Converts the hash table to a list.5The order of the elements in the list is unspecified. Hash tables.None( #&'()+,/159<=>?Should not be used when  could be used.Should only be used in let or where.7Unstructured pragma (Andreas, 2017-08-23, issue #2712). % %: :3 3+ + . .( (   = =     7 7  None( #&'()+,/159<=>? The function  makes every function argument, case and generator pattern, and  binding strict (except for those patterns that are marked as irrefutable, and anything in a  or :). Note that only the outermost patterns are made strict.  8 8  ? ? () ) . - -; ; None) #&'()+,/159<=>?!None( #&'()+,/159<=>?NReturns a close function for the file together with the contents."None( #&'()+,/159<=>?copyDirContent src dest recursively copies directory src onto dest.First, a to-do list of copy actions is created. Then, the to-do list is carried out.This avoids copying files we have just created again, which can happen if src and dest( are not disjoint. (See issue #2705.)copyIfChanged src dst makes sure that dst' exists and has the same content as dst.Search a directory recursively, with recursion controlled by a RecursionPredicate. Lazily return a unsorted list of all files matching the given FilterPredicate. Any errors that occur are ignored, with warnings printed to stderr.=Action to be carried out for copying a directory recursively.Create directory if missing.Copy file if changed.Perform scheduled .copyDirContentDryRun src dest; creates a to-do list for recursively copying directory src onto dest.&Control recursion into subdirectories.,Decide whether a file appears in the result.Directory to start searching.Files that matched the FilterPredicate.#None( #&'()+,/159<=>?RCreates a temporary file, writes some stuff, and returns the filepath$None) #&'()+,/159<=>?Reads a UTF8-encoded text file and converts many character sequences which may be interpreted as line or paragraph separators into 'n'.&If the file cannot be decoded, then a  is raised.Reads a UTF8-encoded text file and converts many character sequences which may be interpreted as line or paragraph separators into 'n'.&If the file cannot be decoded, then a  is raised.Writes a UTF8-encoded text file. The native convention for line endings is used.Writes a UTF8-encoded text file. The native convention for line endings is used.*A kind of exception that can be thrown by  and .#Decoding failed for the given file.Converts many character sequences which may be interpreted as line or paragraph separators into 'n'.,Strip the byte order mark (BOM) from a Text. (https://github.com/agda/agda/issues/6524 https://github.com/haskell-hvr/cassava/issues/106#issuecomment-3739861768 8!6 6%None( #&'()+,/159<=>?ERead +, modify it strictly, and return old value. &None) #&'()+,/159<=>?6 Throw an 1 error reporting the location where you place . Throw an * error reporting the *caller's* call site. Throw an  Unreachable error reporting the *caller's* call site. Note that this call to "withFileAndLine" will be filtered out due its filter on the srcLocModule.Construct a value of 8 reporting the location where you call this function.Abort by throwing an "impossible" error. You should not use this function directly. Instead use  IMPOSSIBLEMonads in which we can catch an "impossible" error, if possible. Catch any  exception. Catch only # exceptions selected by the filter. Version of , with argument order suiting short handlers. Version of , with argument order suiting short handlers."Impossible" errors, annotated with a file name and a line number corresponding to the source code location of the error.We reached a program point without all the required primitives or BUILTIN to proceed forward. (ImpMissingDefinitions neededDefs forThis7We reached a program point which should be unreachable. Impossible with a different error message. Used when we reach a program point which can in principle be reached, but not for a certain run.  ) )2 2/ /, ,'None( #&'()+,/159<=>?toImpossible e extracts the  Impossible value raised via  IMPOSSIBLE to create the element e of type Empty. It proceeds by evaluating e to weak head normal form and catching the exception. We are forced to wrap things in a Maybe because of catchImpossible's type.Values of type  are not forced, because ' is used as a constructor argument in r.    (None( #&'()+,/159<=>?The empty set.not . member b.A singleton set.toSingleton s == Just b iff s == singleton b. The full set.Isomorphic to Set .-"-)-- - -----)None( #&'()+,/159<=>?= All integers `>= n`All integers `< n` No integers. All integers. Invariant. MembershipA single integer.'If finite, return the list of elements.Represents a set of integers. Invariants: - All cannot be the argument to  or  - at most one  IntsBelow - at most one  IntsAbove - if `Below lo` and `Below hi`, then `lo < hi` - if `Below lo .. (Some xs)` then `all (> lo) xs` - if `Above hi .. (Some xs)` then `all (< hi - 1) xs`From a list of integers.      None( #&'()+,/159<=>??Modify a part of the state monadically, and return some result.Modify a part of the state.'Modify a part of the state monadically.Write a part of the state.Get inner part i of structure o as designated by  Lens' o i. Focus on given element in a set.8Focus on a part of the state for a stateful computation.#Build a lens out of an isomorphism."Access a map value at a given key.(Build a lens from a getter and a setter.&Only sound if the lenses are disjoint!/Modify a part of the state in a subcomputation.#Modify a part of the state locally.Modify inner part i of structure o using a function i -> i.Set inner part i of structure o as designated by  Lens' o i.Read a part of the state. Ask for part of read-only state.Van Laarhoven style homogeneous lenses. Mnemoic: "Lens outer inner", same type argument order as 'get :: o -> i'.(A(A*None* #&'()+,/12359<=>?[ !All indices into an indexed list./Turning an indexed list back into a plain list.!Indices are just natural numbers.>If you have an index you can get a lens for the given element.)Looking up an element in an indexed list./Constructing an indexed list from a plain list.Mapping over an indexed list.Unpacking a wrapped value.4Lists indexed by a type-level list. A value of type All p [xA..xA]% is a sequence of values of types p xA, .., p xA. An index into a type-level list.&Existential wrapper for indexed types.+None( #&'()+,/159<=>?P(View source:) This is how you implement a lens for a record field.,None( #&'()+,/159<=>?;Update monadically the value at one position (must exist!). Wrapper for  for convenience.Filter a map based on the keys.-None( #&'()+,/159<=>?A more general type would be )Null m => Map k a -> (Map1 k a -> m) -> m but this type is problematic as we do not have a general %instance Applicative m => Null (m ())./None( #&'()+,/159<=>?Lazy version of allJust  . sequence. (allJust = mapM for the Maybe/ monad.) Only executes monadic effect while isJust.Retain object when tag is . Version of  with different argument ordering. Often, we want to case on a %, do something interesting in the ( case, but only a default action in the * case. Then, the argument ordering of  caseMaybe is preferable. $caseMaybe m d f = flip (maybe d) m fMonadic version of . That is, $ with a different argument ordering.Filtering a singleton list. filterMaybe p a =  ( p [a]) Version of " with different argument ordering.Monadic version of . with flipped branches. with flipped branches.Lift a maybe to an Alternative.Monadic version of .Like , takes the prefix of a list satisfying a predicate. Returns the run of s until the first , and the tail of the list. unionWith for collections of size <= 1. unionsWith for collections of size <= 1. Unzipping a list of length <= 1.A more telling name for  for the  collection type. Or:  without the  case. without the  case. Pendent to . without the  case.˜ØĘŘƘ0None( #&'()+,/159<=>?"Simple, non-reentrant memoisation.Recursive memoisation, second argument is the value you get on recursive calls.1None( #&'()+,/159<=>?;/Maximum of on-negative (small) natural numbers. ! %         2None( #&'()+,/159<=>?Any ǘ is a .Embed Ș.%Represent a non-empty disjunction of Șs as .8Comparing the information content of two elements of '. More precise information is smaller.Includes equality: x  x == True. Opposites.related a po b iff related b (oppPO po) a.Combining two pieces of information (picking the least information). Used for the dominance ordering on tuples.orPO1 is associative, commutative, and idempotent. orPO has dominant element POAny, but no neutral element.+Are two elements related in a specific way? related a o b holds iff comparable a b is contained in o.Chains (transitivity)  x R y S z.seqPO1 is associative, commutative, and idempotent. seqPO has dominant element POAny and neutral element (unit) POEQ.A ! information is a disjunction of Ș informations.Inclusion comparison wrapper.Decidable partial orderings.6The result of comparing two things (of the same type).No information (incomparable).EqualGreater or equal. Greater than.Less or equal than. Less than.Pointwise comparison wrapper.1Partial ordering forms a monoid under sequencing.$Partial ordering for disjoint sums: Left _ and Right _ are unrelated.(Sets are partially ordered by inclusion.Sublist for ordered lists. and  _ are unrelated.Partial ordering for Maybe a is the same as for  Either () a..Less is ``less general'' (i.e., more precise).4The pointwise ordering for lists of the same length.There are other partial orderings for lists, e.g., prefix, sublist, subset, lexicographic, simultaneous order.&Pointwise partial ordering for tuples.related (x1,x2) o (y1,y2) iff related x1 o x2 and related y1 o y2.$   #  #  1 /   . $ 4 ; 3None( #&'()+,/159<=>?hasLeftAdjoint x checks whether  x^-1 := x  mempty is such that x  y == x^-1 <> y for any y.?Completing POMonoids with inverses to form a Galois connection.Law: composition and inverse composition form a Galois connection. & related (inverseCompose p x) POLE y  == related x POLE (p <> y) Partially ordered monoid."Law: composition must be monotone.  related x POLE x' && related y POLE y' ==> related (x <> y) POLE (x' <> y') Partially ordered semigroup."Law: composition must be monotone.  related x POLE x' && related y POLE y' ==> related (x <> y) POLE (x' <> y') 4None( #&'()+,/159<=>? Semirings ( &https://en.wikipedia.org/wiki/Semiring).Star semirings ( 5https://en.wikipedia.org/wiki/Semiring#Star_semirings). * ( (2% %None( #&'()+,/159<=>?#    ! ! None( #&'()+,/159<=>? Lossless . Opposite of .A more general type would be %Null m => Set a -> (Set1 a -> m) -> m but this type is problematic as we do not have a general %instance Applicative m => Null (m ()).0/0/5None( #&'()+,/159<=>?S  Converts 'A'-'A' to '0'-'9'.-Precondition: The digit needs to be in range.'Is the character one of the subscripts 'A'-'A'?Increase the suffix by one. Print suffix. Parse suffix. Converts '0'-'9' to 'A'-'A'-Precondition: The digit needs to be in range.&Classification of identifier variants.Identifier ends in number Integer (ordinary digits).Identifier ends in Integer many primes.Identifier ends in number Integer (subscript digits).  6None( #&'()+,/159<=>?Partition a list into 3 groups.)Preserves the relative order or elements.Partition a list into 3 groups.)Preserves the relative order or elements.Disjoint sum of three.Enum type with 3 elements.    # % )" " ""  ""  None( #&'()+,/159<=>?Bifunctoriality for pairs.Lifted pairing. mapFst f = f -*- idMonadic .Monadic version of . mapSnd g = id -*- gMonadic . Order a pair.    ')1 % 3>None( #&'()+,/159<=>?%Y  A variant of  that might provide more informative error messages if the index is out of bounds.4Precondition: The index should not be out of bounds. *Lookup function (safe). O(min n index). Analogous to zip, combines two lists by taking the union using These (strict). Check whether all consecutive elements of a list satisfy the given relation. O(n). Remove the first representative for each list element. Thus, returns all duplicate copies. O(n log n).&allDuplicates xs == sort $ xs \ nub xs. Checks if all the elements in the list are equal. Assumes that the ɘ6 instance stands for an equivalence relation. O(n).  A version of  that avoids a final #. It is right-folding just like .-Precondition: the right-unit law holds, i.e. m  | A.empty = m. A right-folding ( for nonempty lists, never producing . Breaks a list just after1 an element satisfying the predicate is found.breakAfter even [1,3,5,2,4,7,8]([1,3,5,2],[4,7,8]) Breaks a list just after1 an element satisfying the predicate is found. breakAfter1 even 1 [3,5,2,4,7,8](1 :| [3,5,2],[4,7,8]) 5Case distinction for lists, with list first. O(1).Cf. :. 5Case distinction for lists, with list first. O(1).Cf. :. 2Chop up a list in chunks of a given length. O(n). Chop a list at the positions when the predicate holds. Contrary to wordsBy, consecutive separator elements will result in an empty segment in the result. O(n). *intercalate [x] (chopWhen (== x) xs) == xs 6Compute the common prefix of two lists. O(min n m). 4Compute the common suffix of two lists. O(n + m). Check whether all elements in a list are distinct from each other. Assumes that the ɘ- instance stands for an equivalence relation.O(n) in the worst case distinct xs == True. downFrom n = [n-1,..1,0] . O(n). Drops from both lists simultaneously until one list is empty. O(min n m). *Drop from the end of a list. O(length). &dropEnd n = reverse . drop n . reverseForces the whole list even for n==0. dropFrom marker xs drops everything from xs starting with (and including) marker.If the marker does not appear, the string is returned unchanged.+The following two properties hold provided marker has no overlap with xs:  dropFrom marker (xs ++ marker ++ ys) == xs dropFrom marker xs == xs Returns an (arbitrary) representative for each list element that occurs more than once. O(n log n). *Implemented using dynamic programming and  Data.Array . O(n*m). Implemented using tree recursion, don't run me at home! O(3^(min n m)). An optimised version of  . O(n log n)./Precondition: The list's length must fit in an . Like , but additionally return the last partition of the list where the predicate is False everywhere. O(n). ,Find the longest suffix of the first string xs* that is a prefix of the second string ys. So, basically, find the overlap where the strings can be glued together. Returns the index where the overlap starts and the length of the overlap. The length of the overlap plus the index is the length of the first string. Note that in the worst case, the empty overlap  (length xs,0) is returned.)Worst-case time complexity is quadratic:  O(min(n,m)) where  n = length xs and  m = length ys.There might be asymptotically better implementations following Knuth-Morris-Pratt (KMP), but for rather short lists this is good enough. Find an element satisfying a predicate and return it with its index. O(n) in the worst case, e.g. findWithIndex f xs = Nothing.%TODO: more efficient implementation!? A generalised variant of  elemIndex. O(n). Check membership for the same list often. Use partially applied to create membership predicate hasElem xs :: a -> Bool. First time:  O(n log n) in the worst case.Subsequently: O(log n).Specification: hasElem xs == (ʘ xs). Head function (safe). Returns a default value on empty lists. O(1). >headWithDefault 42 [] = 42 headWithDefault 42 [1,2,3] = 1 7All ways of removing one element from a list. O(n). Lookup function with default value for index out of range. O(min n index).The name is chosen akin to . ˘& of non-empty list, safe. O(n). init1 a as = init (a:as) ˘ and ̘ in one go, safe. O(n). ˘ and ̘& of non-empty list, safe. O(n). *initLast1 a as = (init (a:as), last (a:as) init, safe. O(n). init, safe. O(n). 3Last element of non-empty list (safe). O(n). last1 a as = last (a : as) "Last two elements (safe). O(n).  last2' x y zs# computes the last two elements of x:y:zs . O(n). Last element (safe). O(n). Last element (safe). Returns a default list on empty lists. O(n). 4Case distinction for lists, with list last. O(1). Like , but additionally return the last partition of the list where the function always returns Nothing . O(n). Maybe cons. O(1). "mcons ma as = maybeToList ma ++ as Partition a list into first and later occurrences of elements (modulo some quotient given by a representation function).Time: O(n log n).Specification: nubAndDuplicatesOn f xs = (ys, xs List.\\ ys) where ys = nubOn f xs  A variant of   that is parametrised by a function that is used to select which element from a group of equal elements that is returned. The returned elements keep the order that they had in the input list. maybe (Left a) Right (f a))Note:  f = snd . partitionMaybe f. Append a single element at the end. Time: O(length); use only on small lists. &Check whether a list is sorted. O(n).Assumes that the ǘ% instance implements a partial order. Split off the largest suffix whose elements satisfy a predicate. O(n).spanEnd p xs = (ys, zs) where  xs = ys ++ zs and all p zs and #maybe True (not . p) (lastMaybe yz). A generalized version of span. O(length . fst . spanJust f). #splitExactlyAt n xs = Just (ys, zs) iff  xs = ys ++ zs and genericLength ys = n. Check if a list has a given prefix. If so, return the list minus the prefix. O(length prefix). &stripReversedSuffix rsuf xs = Just pre iff xs = pre ++ reverse suf . O(n). stripSuffix suf xs = Just pre iff xs = pre ++ suf. O(n). Returns a list with one boolean for each non-empty suffix of the list, starting with the longest suffix (the entire list). Each boolean is  exactly when every element in the corresponding suffix satisfies the predicate. An example:     AbCde( = [False, False, False, True, True] For total predicates p and finite and total lists xs the following holds:    p xs = Θ (Ϙ p) ( ( xs)) Tail function (safe). O(1). Tail function (safe). Returns a default list on empty lists. O(1). A generalized version of  takeWhile . (Cf. mapMaybe vs. filter#). @O(length . takeWhileJust f)."takeWhileJust f = fst . spanJust f. Efficient variant of nubBy for finite lists. O(n log n). uniqOn f == 'List.sortBy' (compare `'on'` f) . 'nubBy' ((==) `'on'` f),If there are several elements with the same f--representative, the first of these is kept. /Update nth element of a list, if it exists. O(min index n). Precondition: the index is >= 0. :Update the first element of a list, if it exists. O(1). 9Update the last element of a list, if it exists. O(n). 5Requires both lists to have the same length. O(n). Otherwise, Nothing is returned. Like И but keep the rest of the second list as-is (in case the second list is longer). O(n).  zipWithKeepRest f as bs == zipWith f as bs ++ drop (length as) bs $Internal state for stripping suffix. Error. +"Positive string" (result). Non-empty list. 8"Negative string" to remove from end. List may be empty. The values returned by this function are used to determine which element from a group of equal elements that is returned: the smallest one is chosen (and if two elements are equally small, then the first one is chosen).Two elements are treated as equal if this function returns the same value for both elements.  The list before the split point. The list after the split point. % %ENone( #&'()+,/159<=>?0 Return Just x if it's a finite number, otherwise return Nothing. Decode a Double to its mantissa and its exponent, normalised such that the mantissa is the smallest possible number without loss of accuracy. Denotational equality for floating point numbers, checks bitwise equality.NOTE: Denotational equality distinguishes NaNs, so its results may vary depending on the architecture and compilation flags. Unfortunately, this is a problem with floating-point numbers in general. I guess "denotational orderings" are now a thing? The point is that we need an Ord instance which provides a total ordering, and is consistent with the denotational equality.NOTE: The ordering induced via  * is total, and is consistent with  . However, it is *deeply* unintuitive. For one, it considers all negative numbers to be larger than positive numbers. .Encode a mantissa and an exponent as a Double. $Decode a Double to an integer ratio. Checks whether or not the Double is within a safe range of operation. $Encode an integer ratio as a double. Remove suffix .0$ from printed floating point number.јThe smallest representable mantissa. Simultaneously, the smallest integer which can be represented as a Double without loss of precision.ҘThe largest representable mantissa. Simultaneously, the largest integer which can be represented as a Double without loss of precision.Ә#The largest representable exponent.Ԙ$The smallest representable exponent.+ + None( #&'()+,/159<=>? Lookup keys in the same association list often. Use partially applied to create partial function apply m :: k -> Maybe v. First time:  O(n log n) in the worst case.Subsequently: O(log n).Specification:  apply m == (& m).O(n). Delete a binding. The key must be in the domain of the finite map. Otherwise, an internal error is raised.O(1). Add a new binding. Assumes the binding is not yet in the list.9O(n). Get the domain (list of keys) of the finite map.O(n). Named in analogy to . To preserve the invariant, it is sufficient that the key transformation is injective (rather than monotonic).?3All p as ensures that the constraint p is satisfied by all the types in as. (Types is between scare-quotes here because the code is actually kind polymorphic)Arrows [a1,..,an] r corresponds to a1 -> .. -> an -> r | Products [a1,..,an] corresponds to (a1, (..,( an, ())..)) Currying as b# witnesses the isomorphism between  Arrows as b and Products as -> b. It is defined as a type class rather than by recursion on a singleton for as so all of that these conversions are inlined at compile time for concrete arguments.Using IsBase we can define notions of Domains and  CoDomains. which *reduce* under positive information IsBase t ~ 'True even though the shape of t is not formally exposedOn Lists Version of Foldr taking a defunctionalised argument so that we can use partially applied functions. On BooleansIsBase t is 'True whenever t is *not* a function space. /  ; 8None) #&'()+,/1359<=>?A known boolean is one we can obtain a singleton for. Concrete values are trivially known."Singleton for type level booleans.  9None) #&'()+,/159<=>?(Checks if two arguments are equal as pointers in memory. Please note, that this function is a hack, and it can worsen the behavior of compiler. See  https://gitlab.haskell.org/ghc/ghc/-/blob/d151546e59a50158f25c3df6728b00d3c27bb4b9/compiler/GHC/Builtin/primops.txt.pp#L3455.:None( #&'()+,/159<=>?Disjunction (interpreting null _ as False). Satisfying null empty == True.The default implementation of  compares with 9, first trying pointer equality, then falling back to ɘ equality.Viewing  as  (), a boolean is  when it is false. A  is ' when it corresponds to the empty list.    ( )    7      %            4  7      6    (  2  <    None) #&'()+,/159<=>?  Time O(1).  Time O(n).  Time O(1).  Time O(1).  Time O(n). The empty set. Time O(1).  Time O(n).  Time O(n).  Time O(n).  Time O(1).  Time O(1).  Time O(1). not . member a . Time O(1).  Time O(1). A singleton set. Time O(1).  Time O(n).  Time O(n). The full set. Time O(1).  Time O(n). An element in a small set.This must implement ՘ and  , and contain at most 64 values.    ; ;  2  5 ;;" > >5 ;; ;;;None( #&'()+,/159<=>? 0Create-only collection with at most one element. A create-only possibly empty collection is a monoid with the possibility to inject elements.  Overloaded  singleton constructor for collections.    !     6 6$ : :? < >; 4 4' 3 3( 2 2* 1 1! 5 5% 9 9= ; ;= = =9 ? ?>    5  5  &  &  !  "  7  $    !  !  $      7  5<None( #&'()+,/159<=>?_ Given a function f :: a -> NonEmpty c9 which returns a non-empty list of characteristics of a, partition a list of as into groups such that each element in a group shares at least one characteristic with at least one other element of the group. Partition a list of as paired with a non-empty list of characteristics into groups such that each element in a group shares at least one characteristic with at least one other element of the group. Given a function f :: a -> NonEmpty c9 which returns a non-empty list of characteristics of a , partition a non-empty list of as into groups such that each element in a group shares at least one characteristic with at least one other element of the group. Partition a non-empty list of as paired with a non-empty list of characteristics into groups such that each element in a group shares at least one characteristic with at least one other element of the group.֘:Lift a function on non-empty lists to a function on lists. Duplicate of .  =None( #&'()+,/159<=>?  Version of   with different argument ordering. Often, we want to case on a  %, do something interesting in the  ( case, but only a default action in the  * case. Then, the argument ordering of  caseMaybe is preferable. (caseMaybe m err f = flip (maybe err) m f Monadic version of  . That is,  $ with a different argument ordering. Filtering a singleton list. filterMaybe p a =   ( p [a])  Version of  " with different argument ordering. Monadic version of  .   with flipped branches. Monadic version of  .  unionWith for collections of size <= 1.  Unzipping a list of length <= 1. A more telling name for  for the   collection type. Or:   without the   case.   without the   case. Note that strict Maybe is an ט only modulo strictness. The laws only hold in the strict semantics. Eg. pure f  * pure _|_ = _|_#, but according to the laws for ט it should be  pure (f _|_)3. We ignore this issue here, it applies also to  and .     % %>None( #&'()+,/159<=>? *Adjust value at key, leave subtree intact.Disclaimer: may return a non-canoncial trie because it does not clean up subtries that become empty. .Delete value at key, but leave subtree intact.Disclaimer: may return a non-canoncial trie because it does not clean up subtries that become empty. everyPrefix k v! is a trie where every prefix of k (including k itself) is mapped to v. Filter a trie. .Insert. Overwrites existing value if present. %insert = insertWith ( new old -> new) 6Insert with function merging new value with old value. 8Returns the value associated with the given key, if any. &Collect all values along a given path. (Get the subtrie rooted at the given key. Create new values based on the entire subtrie. Almost, but not quite comonad extend. %Is the given key present in the trie? Singleton trie. Convert to ascending list. Convert to ascending list. Convert to list where nodes at the same level are ordered according to the given ordering. Left biased union.#union = unionWith ( new old -> new). /Pointwise union with merge function for values.  Key lens. Finite map from [k] to v.With the strict  type,   is also strict in v.  Empty trie.ؘ"Helper function used to implement   and  .     .. 33 22 6 63 : : -- None) #&'()+,/159<=>? Checks if all the elements in the list are equal. Assumes that the ɘ6 instance stands for an equivalence relation. O(n). Breaks a list just after1 an element satisfying the predicate is found.breakAfter even [1,3,5,2,4,7,8](1 :| [3,5,2],[4,7,8]) Like . (Concatenate one or more non-empty lists. Like . List - but with a base case for the singleton list. Safe version of . More precise type for . A variant of : which applies the predicate to consecutive pairs. O(n).  [a] -> (List1 a -> m) -> m often causes type inference to fail, as we do not in general have %instance Applicative m => Null (m ()). Like . Like . 6Update the first element of a non-empty list. O(1). 5Update the last element of a non-empty list. O(n). Split a list into sublists. Generalisation of the prelude function words . Same as  and , but with the non-emptyness guarantee on the chunks. O(n). words xs == wordsBy isSpace xs Like . Like . $Default value if convertee is empty.&List to convert, supposedly non-empty.Converted list. vN|}hCO_cfikonrlpmqILSTW]u^KBRFwxjst~a`Y[Z\MXPzQ{gdJUVbeyGEHD*=> ?? vN|}hCO_cfikonrlpmqILSTW]u^KBRFwxjst~a`Y[Z\MXPzQ{gdJUVbeyGEHD=> ?@?*?None( #&'()+,/159<=>? Cache the size of an object. ,The size of a collection (i.e., its length). *Lazily compute a (possibly infinite) size.1Use when comparing a size against a fixed number. Strict size computation.Anti-patterns:  size xs == n where n is 0, 10 or another number that is likely smaller than size xs. Similar for  size xs >= 1 etc. Use   instead.See  https://wiki.haskell.org/Haskell_programming_tips#Don.27t_ask_for_the_length_of_a_list_when_you_don.27t_need_it . Thing decorated with its size. The thing should fit into main memory, thus, the size is an Int. Return the cached size.   ' 6 6 7 7 8 8 < < 4 4 : : 9 9 ; ; 5 5  CNone( #&'()+,/159<=>?( 1Adds a final newline if there is not already one. $Adds hyphens around the given stringputStrLn $ delimiter "Title"<@@@@ Title @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Turns the string into a Haskell string literal, avoiding escape codes. -Indents every line the given number of steps. Remove leading whitespace.  Append an "s"5 to the second argument if the first has cardinality /= 1.   adds double quotes around the string, replaces newline characters with n, and escapes double quotes and backslashes within the string. This is different from the behaviour of ݘ: > ޘ $ ݘ "\x2200" "\8704" > ޘ $   "\x2200" "D" (The code examples above have been tested using version 4.2.0.0 of the base library.) Remove trailing whitespace. 6Show a number using comma to separate powers of 1,000. 'Remove leading and trailing whitesapce. ߘ, but remove empty words first.   ?  <    ?  >  DNone) #&'()+,/159<=>?   Print an  without the call stack. Catch s in an extension of the  monad. "Upon exception, the error is lost.  Alias of  for the IO monad. #Upon exception, the state is reset. +Upon exception, the written output is lost.    ,   % %+  ,@None( #&'()+,/159<=>? Turn a possible non-surjective permutation into a surjective permutation. 2permute (compose p1 p2) == permute p1 . permute p2 9Pick the elements that are not picked by the permutation.  expandP i n  in the domain of  replace the ith element by n elements. 8permPicks (flipP p) = permute p (downFrom (permRange p)) or permute (flipP (Perm n xs)) [0..n-1] = permute (Perm n xs) (downFrom n)Can be use to turn a permutation from (de Bruijn) levels to levels to one from levels to indices.See . Identity permutation.  invertP err p is the inverse of p) where defined, otherwise defaults to err. composeP p (invertP err p) == p liftP k takes a  Perm {m} n to a Perm {m+k} (n+k). Analogous to ?, but Permutations operate on de Bruijn LEVELS, not indices. 'permute [1,2,0] [x0,x1,x2] = [x1,x2,x0] More precisely, permute indices list = sublist , generates sublist from list1 by picking the elements of list as indicated by indices. *permute [1,3,0] [x0,x1,x2,x3] = [x1,x3,x0]Agda typing: ,permute (Perm {m} n is) : Vec A m -> Vec A nPrecondition for   (  _ is) xs: Every index in is must be non-negative and, if xs is finite, then every index must also be smaller than the length of xs.The implementation is supposed to be extensionally equal to the following one (if different exceptions are identified), but in some cases more efficient:  permute (  _ is) xs = Θ (xs ) is  ?permute (reverseP p) xs == reverse $ permute p $ reverse xs Example:  permute (reverseP (Perm 4 [1,3,0])) [x0,x1,x2,x3] == permute (Perm 4 $ map (3-) [0,3,1]) [x0,x1,x2,x3] == permute (Perm 4 [3,0,2]) [x0,x1,x2,x3] == [x3,x0,x2] == reverse [x2,x0,x3] == reverse $ permute (Perm 4 [1,3,0]) [x3,x2,x1,x0] == reverse $ permute (Perm 4 [1,3,0]) $ reverse [x0,x1,x2,x3] With reverseP, you can convert a permutation on de Bruijn indices to one on de Bruijn levels, and vice versa. "Restrict a permutation to work on n elements, discarding picks >=n. Stable topologic sort. The first argument decides whether its first argument is an immediate parent to its second argument. %Things that support delayed dropping. )Delayed dropping which allows undropping. Where to drop from. &Non-negative number of things to drop. 3Invert a Permutation on a partial finite int map. inversePermute perm f = f' such that permute perm f' = f!Example, with map represented as  [Maybe a]:  f = [Nothing, Just a, Just b ] perm = Perm 4 [3,0,2] f' = [ Just a , Nothing , Just b , Nothing ]  Zipping perm with f gives  [(0,a),(2,b)], after compression with  catMaybes. This is an IntMap9 which can easily written out into a substitution again. Partial permutations. Examples:)permute [1,2,0] [x0,x1,x2] = [x1,x2,x0] (proper permutation).&permute [1,0] [x0,x1,x2] = [x1,x0] (partial permuation).,permute [1,0,1,2] [x0,x1,x2] = [x1,x0,x1,x2]- (not a permutation because not invertible).Agda typing would be: 9Perm : {m : Nat}(n : Nat) -> Vec (Fin n) m -> Permutation m is the   of the permutation. Perform the dropping.  Drop more. Pick up dropped stuff.           ( ( %- # ((  -  -  ,  , : : 6 6   * * 2 2 /:ANone( #&'()+,/159<=>?$ Parse and add a profiling option to a set of profiling options. Returns  with a helpful error message if the option doesn't parse or if it's incompatible with existing options. The special string "all" adds all options compatible with the given set and prefering the first of incompatible options. So `--profile=all` sets   over   and  0, but `--profile=modules --profile=all` sets   and not  . Check if a given profiling option is present in a set of profiling options. #The empty set of profiling options. Use only for serialization. Use only for serialization. Strings accepted by  Various things that can be measured when checking an Agda development. Turned on with the `--profile` flag, for instance `--profile=sharing` to turn on the   option.  ,  , and   are mutually exclusive.NOTE: Changing this data type requires bumping the interface version number in . +Collect statistics about constraint solving ,Collect statistics about conversion checking 3Measure time spent on individual (Agda) definitions (Collect statistics about instance search $Measure time of interactive commands Measure time taken by various parts of the system (type checking, serialization, etc) %Count number of created metavariables /Measure time spent on individual (Agda) modules /Collect detailed statistics about serialization !Measure things related to sharing  A set of  s  +"+) ++ ++ 11 +++2 - - 11 11# ++ + + 1 1BNone( #&'()+,/159<=>? O(length first list). O(length first list). 2Concatenate at least 2 lists of length at least 1. O(1).  Unsafe! O(1). Any   is either a singleton or a  . O(1).  Safe. O(1).  Safe. O(1).  Safe. O(1).  Safe. O(n). O(n).  Safe. O(1).  Safe. O(1).  Inverse of  . O(1). Lists of length D2.  is unsafe.      % -   # % %  &        / : None( #&'()+,/159<=>?k Returns  input_with_tags_stripped if all elements are to the , and otherwise . Returns  input_with_tags_stripped2 if all elements are to the right, and otherwise .  allRight xs == if all isRight xs then Just (map ((Right x) -> x) xs) else Nothing Monadic version of $ with a different argument ordering.  Analogue of .  Analogue of /.  Analogue of .  Analogue of /. )Groups a list into alternating chunks of  and  values 'Either _ b' is a functor. 'Either a' is a functor. Safe projection from . 8maybeLeft (Left a) = Just a maybeLeft Right{} = Nothing Safe projection from . = 4.10.0.0 already present in .  Loop while we have an exception. -. -. None) #&'()+,/159<=>? Strict ap  Binary bind. Lazy monadic disjunction with Either> truth values. Returns the last error message if all fail. Lazy monadic conjunction. ;Bracket without failure. Typically used to preserve state. Generalises the ˜& function from lists to an arbitrary . A monadic version of  dropWhileEnd :: (a -> Bool) -> [a] -> m [a]:. Effects happen starting at the end of the list until p becomes false. A monadic version of  :: (a -> Bool) -> [a] -> [a]. Finally for the Error class. Errors in the finally part take precedence over prior errors. Generalized version of 3for_ :: Applicative m => [a] -> (a -> m ()) -> m () The for version of  . The for version of  .  Translates  to . Monadic guard. Like  -, but raise given error when condition fails. Monadic if-then-else. ifNotM mc = ifM (not  $ mc)  Restore state after computation. Generalized version of 8traverse_ :: Applicative m => (a -> m ()) -> [a] -> m () Executes effects and collects results in left-to-right order. Works best with left-associative monoids.!Note that there is an alternative !mapM' f t = foldr mappend mempty  $ mapM f tthat collects results in right-to-left order (effects still left-to-right). It might be preferable for right associative monoids. A monadic version of  :: (a -> Maybe b) -> [a] -> [b].  A version of  ' with a computation for the input list. Lazy monadic disjunction. Lazy monadic disjunction with accumulation of errors in a monoid. Errors are discarded if we succeed. A `monadic' version of @ partition# :: (a -> Bool) -> [a] -> ([a],[a]) "Branch over elements of a monadic  data structure. Output a single value. 1Run a command, catch the exception and return it. Try a computation, return  if an Error occurs. Acquires resource. Run first.Releases resource. Run last. Computes result. Run in-between.  <876;9:12'+4  <876;9:12+4"!' FNone) #&'()+,/159<=>?Y Lazy monadic conjunction of lazy monadic list, effects left-to-right Lazy monadic disjunction of lazy monadic list, effects left-to-right  Case distinction over lazy list. The join operation of the ListT m monad. Consing a value to a lazy list.  Monadic cons. +Folding a lazy list, effects left-to-right.  Change from one monad to another Boilerplate function to lift  through the   transformer.  Extending a monadic function to  . !Alternative implementation using  . The empty lazy list. We can `run' a computation of a   as it is monadic itself. 8Force all values in the lazy list, effects left-to-right Singleton lazy list. Monadic singleton.  Inverse to  . .Lazy monadic computation of a list of results.        (    9         '  *GNone) #&'()+,/159<=>? Makes the path absolute.This function may raise an __IMPOSSIBLE__ error if " does not return an absolute path. !Resolve symlinks etc. Preserves  . Case-sensitive  for Windows.This is case-sensitive only on the file name part, not on the directory part. (Ideally, path components coming from module name components should be checked case-sensitively and the other path components should be checked case insensitively.)  Extract the   to be used as . True if the first file is newer than the second file. If a file doesn't exist it is considered to be infinitely old. Makes a path relative to a root without assuming that either path is canonical.  Constructs  s.2Precondition: The path must be absolute and valid. A partial version of & with flipped arguments, returning 6 if the given path cannot be relativized to the given root. Tries to establish if the two file paths point to the same file (or directory). False negatives may be returned.  Generalizes . %Paths which are known to be absolute.Note that the ɘ and ǘ instances do not check if different paths point to the same files or directories. (The absolute path we seek to relativize.The root for relativization.The relative path, if any.  ,, ,,$ ,&,, ,, , ,HNone( #&'()+,/159<=>?[ -Hashing a module name for unique identifiers. Hashes a piece of .  INone( #&'()+,/159<=>?_ The defaultWarningMode is a curated set of warnings covering non-fatal errors and disabling style-related ones Warnings enabled by  --exact-split. The flag corresponding to a warning is precisely the name of the constructor minus the trailing underscore.  warningUsage generated using warningNameDescription warningModeUpdate str computes the action of str over the current  WarningMode: it may reset the set of warnings, add or remove a specific flag or demand that any warning be turned into an error Common sets of warnings A  WarningMode has two components: a set of warnings to be displayed and a flag stating whether warnings should be turned into fatal errors. 2Some warnings are errors and cannot be turned off.  Warning that cannot be disabled. Unknown warning. The  WarningName data enumeration is meant to have a one-to-one correspondance to existing warnings in the codebase.8Some warning could not be set or unset. Parser Warnings9From user-given directives we compute WarningMode updates WarningName descriptions used for generating usage information Leave String empty to skip that name.The description should be a completion of the sentence "This warning is about ...". So, typically the subject is in plural.   (/"&99 99 18; ; !  99 JNone( #&'()+,/159<=>?r Compare a new set of favorites to an old one and discard the new favorites that are dominated by the old ones and vice verse. (Skewed conservatively: faithful to the old favorites.) 'compareFavorites new old = (new', old')Gosh, got some pretty a here, compare with my current favorites! Discard it if there is already one that is better or equal. (Skewed conservatively: faithful to the old favorites.) If there is no match for it, add it, and dispose of all that are worse than a.We require a partial ordering. Less is better! (Maybe paradoxically.)Construct favorites from elements of a partial order. The result depends on the order of the list if it contains equal elements, since earlier seen elements are favored over later seen equals. The first element of the list is seen first.%Compare, then insert accordingly. :insert a l = insertCompared a l (compareWithFavorites a l))After comparing, do the actual insertion.=Insert all the favorites from the first list into the second.;Result of comparing a candidate with the current favorites.Great, you are dominating a possibly (empty list of favorites) but there is also a rest that is not dominated. If null dominated, then  notDominated2 is necessarily the complete list of favorites..Sorry, but you are dominated by that favorite.!A list of incomparable favorites.Equality checking is a bit expensive, since we need to sort! Maybe use a Set! of favorites in the first place? forms a  under  and 'union. #  . 1!#.KNone( #&'()+,/159<=>?;Modifies the value at the given position, if any. O(log n).Precondition: See .The precondition for  f k m is that, if the value v is inserted into m, and  v% is defined, then no key other than k may map to a value v' for which  v' =  v.Modifies the value at the given position, if any. If the function returns &, then the value is removed. O(log n).Precondition: See .Modifies the value at the given position, if any. If the function returns &, then the value is removed. O(log n).The precondition for  f k m is that, if the value v is inserted into m, and  v% is defined, then no key other than k may map to a value v' for which  v' =  v.The precondition for  f k m is that, if the value v is inserted into m, and  v% is defined, then no key other than k may map to a value v' for which  v' =  v.The invariant for .>The values, ordered according to the corresponding keys. O(n).Conversion from two lists that contain distinct keys/tags, with the keys/tags in ascending order. O(n).Precondition: See .Conversion from lists of pairs. Later entries take precedence over earlier ones. O(n log n).Precondition: See .0Insertion. Overwrites existing values. O(log n).Precondition: See .Inserts a binding into the map. If a binding for the key already exists, then the value obtained by applying the function to the key, the new value and the old value is inserted, and the old value is returned.Precondition: See .The precondition for  f k v m is that, if the value v' is inserted into m, and  v'% is defined, then no key other than k may map to a value v'' for which  v'' =  v'.The precondition for  k v m: If v has a  ( v D ), then m must not contain any mapping k' C v' for which k D k' and  v =  v'.Inverse lookup. O(log n).#The keys, in ascending order. O(n).Lookup. O(log n).Changes all the values using the given function, which is also given access to keys. O(n log n).Precondition: See .Changes all the values using the given function, which is also given access to keys. O(n).Precondition: See ". Note that tags must not change.The precondition for  f m is that, if m maps k to v, then  (f k v) ==  v.The precondition for  f m!: For any two distinct mappings kA C vA, kA C vA in m for which the tags of f kA vA and f kA vA are defined the values of f must be distinct (f kA vA D f kA vA). Furthermore  must be injective for { f k v | (k, v) D m }.Singleton map. O(1).$Is the value a source key? O(log n).Checks if the function  is injective for the values in the given list for which the function is defined.$Is the value a target key? O(log n).Generates input suitable for . O(n).Conversion to lists of pairs, with the keys in ascending order. O(n).0Left-biased union. For the time complexity, see .Precondition: See .Modifies the value at the given position, if any. If the function returns &, then the value is removed. O(log n).Precondition: See .The precondition for  f k m is that, if the value v is inserted into m, and  v% is defined, then no key other than k may map to a value v' for which  v' =  v.Finite maps from k to v!, with a way to quickly get from v to k for certain values of type v (those for which  is defined).&Every value of this type must satisfy .0Partial injections from a type to some tag type.The idea is that ( should be injective on its domain: if  x =  y =  i, then x = y. However, this property does not need to hold globally. The preconditions of the 3 operations below specify for which sets of values  must be injective.'' (   + .LNone( #&'()+,/159<=>?Was this module name constructed from a file name rather than declared in the file?The range is not forced.=The record selector is not included in the resulting strings.    2 2(,, . .,8 8. = =,5 5) , ,MNone* #&'()+,/1359<=>?=Killing the range of an object sets all range information to .%Backup the position by one character.(Precondition: The character must not be 'n'. beginningOf r is an empty range (a single, empty interval) positioned at the beginning of r. If r" does not have a beginning, then  is returned.Are the intervals consecutive and separated, do they all point to the same file, and do they satisfy the interval invariant??Returns the shortest continuous range containing the given one.0Removes gaps between intervals on the same line.4Finds the least interval which covers the arguments.Precondition: The ranges must point to the same file (or be empty).fuseRanges r r' unions the ranges r and r'.!Meaning it finds the least range r0 that covers r and r'.Precondition: The ranges must point to the same file (or be empty).The length of an interval.*Interleaves two streams of ranged elementsIt will report the conflicts as a list of conflicting pairs. In case of conflict, the element with the earliest start position is placed first. In case of a tie, the element with the earliest ending position is placed first. If both tie, the element from the first list is placed first.0Converts a file name and an interval to a range.8Turns a file name plus a list of intervals into a range.Precondition: .*Remove ranges in keys and values of a map.A smart constructor for .?Advance the position by one character. A newline character ('n') moves the position to the first character in the next line. Any other character moves the position to the next column.!Advance the position by a string.  movePosByString = foldl' movePos$Ranges between two unknown positionsConverts a file name and two positions to an interval. Sort the positions ascendingly."Converts two positions to a range.;Precondition: The positions have to point to the same file.2Converts a file name and two positions to a range.;The position after the final position in the range, if any.;The position after the final position in the range, if any.*The initial position in the range, if any.*The initial position in the range, if any."The file the range is pointing to.7Range pointing to the first position in the given file.The intervals that make up the range. The intervals are consecutive and separated ().Range invariant.*The range's top-level module name, if any.*The range's top-level module name, if any.If there is no range, then ? is returned. If there is a range without a module name, then   is returned.Converts a range to an interval, if possible. Note that the information about the source file is lost.-Converts a range to an interval, if possible.%Conflate a range to its right margin.;The first position in a file: position 1, line 1, column 1.;The first position in a file: position 1, line 1, column 1.x `withRangeOf` y sets the range of x to the range of y.Return an empty range (a single, empty interval) at the beginning of the file.5Things that have a range are instances of this class.Things that have a  are instances of this class.An interval. The iEnd* position is not included in the interval.4Note the invariant which intervals have to satisfy: . Represents a point in the input.If two positions have the same  and  components, then the final two components should be the same as well, but since this can be hard to enforce the program should not rely too much on the last two components; they are mainly there to improve error messages for the user.4Note the invariant which positions have to satisfy: .Column number, counting from 1.Line number, counting from 1.Position, counting from 1.File.1Wrapper to indicate that range should be printed.A range is a file name, plus a sequence of intervals, assumed to point to the given file. The intervals should be consecutive and separated.1Note the invariant which ranges have to satisfy: .File information used in the ,  and  types.1The file's top-level module name (if applicable).This field is optional, but some things may break if the field is not instantiated with an actual top-level module name. For instance, the ɘ and ǘ( instances only make use of this field.The field uses  rather than  because it should be possible to instantiate it with something that is not yet defined (see ).>This '(TopLevelModuleName' Range)' should not contain a range.The file's path.;If it is also possible to set the range, this is the class.Instances should satisfy  ( r x) == r.beginningOfFile r is an empty range (a single, empty interval) at the beginning of r's starting position's file. If there is no such position, then an empty range is returned. Only the  component is compared.Precondition: The ranges of the list elements must point to the same file (or be empty).Precondition: The ranges of the list elements must point to the same file (or be empty).Precondition: The ranges of the tuple elements must point to the same file (or be empty).Precondition: The ranges of the tuple elements must point to the same file (or be empty).Precondition: The ranges of the tuple elements must point to the same file (or be empty).Precondition: The ranges of the tuple elements must point to the same file (or be empty).Precondition: The ranges of the tuple elements must point to the same file (or be empty).Precondition: The ranges of the tuple elements must point to the same file (or be empty).Overlaps with  KillRange [a]. Only the  component is compared.Precondition: The ranges must point to the same file (or be empty). & !  # "   %-$&#<3:5<  ;  $ * * ) *  . 4       "  1 :   ?  .         = /  + >  ;. , 3 , 4 , *3  / 8      # & $  $  '   $  $ * (  .    /:&1(3NNone( #&'()+,/159<=>?%"Non-code contents in literate AgdaDelimiters used to separate the Agda code blocks from the other contents in literate AgdaIs the name an operator part?Text occurring in pragmas that does not have a more specific aspect.Things like Set and Prop. Symbols like forall, =, ->, etc.6Syntactic aspects of the code. (These cannot overlap.)Meta information which can be associated with a character/character range.The definition site of the annotated thing, if applicable and known.This note, if not null, can be displayed as a tool-tip or something like that. It should contain useful information about the range (like the module containing a certain identifier, or the fixity of an operator).Is this entry token-based?#A pretty name for the HTML linking. Has this DefinitionSite/ been created at the defining site of the name?The defining module.The file position in that module. File positions are counted from 1.NameKind(s are figured out during scope checking.!Named argument, like x in {x = v}Bound variable.%Inductive or coinductive constructor. Record field.Generalizable variable. (This includes generalizable variables that have been generalized).Macro. Module name. Primitive. Record type.Other aspects, generated by type checking. (These can overlap with each other and with s.)$Nothing serious, just a beauty flaw.Used for highlighting unreachable clauses, unreachable RHS (because of an absurd pattern), etc..A warning that is considered fatal in the end.When this constructor is used it is probably a good idea to include a * explaining why the pattern is incomplete.Unusable instance etc.1Function declaration without matching definition.8Used for shadowed repeated variable names in telescopes.!Code which is being type-checked.Unsolved constraint not connected to meta-variable. This could for instance be an emptyness constraint.Is the highlighting "token-based", i.e. based only on information from the lexer?NameKind in Name can get more precise.Some #s are more informative than others.>>$+"   33  33 -4      33    None( #&'()+,/159<=>? a  ? b = hang a 2 balign max rows lays out the elements of rows in two columns, with the second components aligned. The alignment column of the second components is at most max2 characters to the right of the left-most column.Precondition: max > 0.Attach a simple , rather than a full set of , to a document.1Separate, but only if both separees are not null.Apply  to  if boolean is true.?Handles strings with newlines properly (preserving indentation)Only wrap in parens if not Used for with-like  telescopes"Pretty print a single association.+Comma separated list, without the brackets.!Pretty print an association list.Pretty print a set.Use instead of ݘ when printing to world. pshow = text . showReturn  for empty strings.5The type of documents. We use documents annotated by  to record syntactic highlighting information that is generated during pretty-printing.While - is for rendering data in Haskell syntax,  is for displaying data to the world, i.e., the user and the environment.Atomic data has no inner document structure, so just implement  as pretty a = text $ ... a ....Wrap document in {...}Wrap document in [...]Wrap document in "..."Wrap document in (...)Wrap document in '...'    )    '   9 $  2 & & $ 9 9 6  $  /   ONone( #&'()+,/159<=>?The current time.Measure the time of a computation. Of course, does not work with exceptions."CPU time in pico (10^-12) seconds. Timestamps.(Print CPU time in milli (10^-3) seconds. '''+' ''-'5'!'%'7'=''''. .''PNone( #&'()+,/159<=>?Precedence of atoms.Precedence of >>=.Precedence of  |.Uses the given document as the printed representation of the given parser. The document's precedence is taken to be ..Parses a token satisfying the given predicate.Precedence of  *.Precedence of E and +.Parses a given token.Parses a single token.(Documents paired with precedence levels.The parser type.The parameters of the type Parser k r tok a have the following meanings: kType used for memoisation keys.rThe type of memoised values. (Yes, all memoised values have to have the same type.)tokThe token type.aThe result type.Uses the given function to modify the printed representation (if any) of the given parser.&Tries to print the parser, or returns , depending on the implementation. This function might not terminate.Memoises the given parser./Every memoised parser must be annotated with a unique key. (Parametrised parsers must use distinct keys for distinct inputs.)Memoises the given parser, but only if printing, not if parsing./Every memoised parser must be annotated with a unique key. (Parametrised parsers must use distinct keys for distinct inputs.)Runs the parser.Parses a token satisfying the given predicate. The computed value is returned.An extended parser type, with some support for printing parsers.This must be a lazy tuple so that we don't generate the docs eagerly.Continuations.The extended parser type computes one top-level document, plus one document per encountered memoisation key. is used to mark that a given memoisation key has been seen, but that no corresponding document has yet been stored.State monad used by the parser. Positions.Memoised values.The constructor.A helper function. Pretty-prints a memoisation key.A helper function.  & & 1 1 " -  + 9 .QNone( #&'()+,/159<=>?/Returns True iff the graph is acyclic.'Combines each node label with a unique .Precondition: The number of nodes in the graph must not be larger than ͘ :: .Time complexity: O(n + e log n).Removes  edges. O(n + e).Transitive closure ported from Agda.Termination.CallGraph.%Relatively efficient, see Issue 1560. Version of  that produces a list of intermediate results paired to the left with a difference that lead to the new intermediat result.The last element in the list is the transitive closure, paired with the empty graph. (complete g = snd $ last $ completeIter gcomposeWith times plus g g' finds all edges s --c_i--> t_i --d_i--> u) and constructs the result graph from !edge(s,u) = sum_i (c_i times d_i).Complexity: For each edge s --> t in g' we look up all edges starting with t in g'.>Precondition: The two graphs must have exactly the same nodes. Constructs a  structure. O(n + e log n). invariant.All self-loops.  O(n log n).Checks whether the graph is discrete (containing no edges other than  edges). O(n + e).The graph's edges. O(n + e).edgesFrom g ns is a list containing all edges originating in the given nodes (i.e., all outgoing edges for the given nodes). If ns does not contain duplicates, then the resulting list does not contain duplicates. O(|ns| log |n| + |edgesFrom g ns|). edgesTo g ns is a list containing all edges ending in the given nodes (i.e., all incoming edges for the given nodes). If ns does not contain duplicates, then the resulting list does not contain duplicates. O(|ns | n log n)."Empty graph (no nodes, no edges). O(1).0Keep only the edges that satisfy the predicate. O(n + e). The graph filterNodes p g# contains exactly those nodes from g that satisfy the predicate p=. Edges to or from nodes that are removed are also removed. O(n + e).Removes the nodes that do not satisfy the predicate from the graph, but keeps the edges: if there is a path in the original graph between two nodes that are retained, then there is a path between these two nodes also in the resulting graph.(Precondition: The graph must be acyclic.Worst-case time complexity:  O(e n log n)) (this has not been verified carefully). fromEdges es$ is a graph containing the edges in es=, with the caveat that later edges overwrite earlier edges. O(|es| log n).fromEdgesWith f es$ is a graph containing the edges in es. Later edges are combined with earlier edges using the supplied function. O(|es| log n).Constructs a completely disconnected graph containing the given nodes. O(n).Constructs a completely disconnected graph containing the given nodes.  O(n log n).-Computes the transitive closure of the graph.Uses the Gauss-Jordan-Floyd-Warshall-McNaughton-Yamada algorithm (as described by Russell O'Connor in "A Very General Method of Computing Shortest Paths"  'http://r6.ca/blog/20110808T035622Z.html), implemented using , and with some shortcuts:Zero edge differences are not added to the graph, thus avoiding some zero edges.Strongly connected components are used to avoid computing some zero edges.The graph's strongly connected components (in reverse topological order) are returned along with the transitive closure.-Computes the transitive closure of the graph.Uses the Gauss-Jordan-Floyd-Warshall-McNaughton-Yamada algorithm (as described by Russell O'Connor in "A Very General Method of Computing Shortest Paths"  'http://r6.ca/blog/20110808T035622Z.html), implemented using matrices.4The resulting graph does not contain any zero edges.This algorithm should be seen as a reference implementation. In practice ! is likely to be more efficient. Inserts an edge into the graph. O(log n). Inserts an edge into the graph. O(log n). A variant of . O(log n).insertWith f s t new inserts an edge from s to t3 into the graph. If there is already an edge from s to t with label old6, then this edge gets replaced by an edge with label  f new old%, and otherwise the edge's label is new. O(log n).Internal invariant.*Nodes without incoming or outgoing edges. O(n + e log n).Constructs a graph g', with the same nodes as the original graph g. In g' there is an edge from n1 to n2> if and only if there is a (possibly empty) simple path from n1 to n2 in g. In that case the edge is labelled with all of the longest (in terms of numbers of edges) simple paths from n1 to n2 in g), as well as the lengths of these paths.Precondition: The graph must be acyclic. The number of nodes in the graph must not be larger than ͘ :: .>Worst-case time complexity (if the paths are not inspected):  O(e n log n)( (this has not been verified carefully).1The algorithm is based on one found on Wikipedia.If there is an edge from s to t, then  lookup s t g is  e, where e is the edge's label. O(log n). A variant of ܘ< that provides extra information to the function argument. O(n + e).neighbours u g consists of all nodes v" for which there is an edge from u to v in g-, along with the corresponding edge labels.  O(log n + |neighbours u g|).neighboursMap u g consists of all nodes v" for which there is an edge from u to v in g-, along with the corresponding edge labels. O(log n). All nodes. O(n).The opposite DAG.'The nodes reachable from the given SCC.reachableFrom g n/ is a map containing all nodes reachable from n in g. For each node a simple path to the node is given, along with its length (the number of edges). The paths are as short as possible (in terms of the number of edges).Precondition: n must be a node in g<. The number of nodes in the graph must not be larger than ͘ :: .Amortised time complexity (assuming that comparisons take constant time):  O(e log n), if the lists are not inspected. Inspection of a prefix of a list is linear in the length of the prefix.reachableFromSet g ns/ is a set containing all nodes reachable from ns in g.Precondition: Every node in ns must be a node in g<. The number of nodes in the graph must not be larger than ͘ :: .Amortised time complexity (assuming that comparisons take constant time): O((|ns | + e) log n).removeEdge s t g removes the edge going from s to t , if any. O(log n).removeNode n g removes the node n% (and all corresponding edges) from g. O(n + e).removeNodes ns g removes the nodes in ns% (and all corresponding edges) from g. O((n + e) log |ns|).Renames the nodes.6Precondition: The renaming function must be injective.Time complexity: O((n + e) log n).Renames the nodes.$Precondition: The renaming function ren" must be strictly increasing (if x  y then ren x  ren y).Time complexity: O(n + e).Constructs a DAG containing the graph's strongly connected components.Constructs a DAG containing the graph's strongly connected components.The graph's strongly connected components, in reverse topological order.The time complexity is likely O(n + e log n) (but this depends on the, at the time of writing undocumented, time complexity of ).The graph's strongly connected components, in reverse topological order.The time complexity is likely O(n + e log n) (but this depends on the, at the time of writing undocumented, time complexity of ).5A graph with two nodes and a single connecting edge. O(1).Nodes with outgoing edges. O(n).Nodes with incoming edges. O(n + e log n).The transitive closure. Using . NOTE: DO NOT USE () AS EDGE LABEL SINCE THIS MEANS EVERY EDGE IS CONSIDERED A ZERO EDGE AND NO NEW EDGES WILL BE ADDED! Use 'Maybe ()' instead.The transitive reduction of the graph: a graph with the same reachability relation as the graph, but with as few edges as possible.Precondition: The graph must be acyclic. The number of nodes in the graph must not be larger than ͘ :: .Worst-case time complexity:  O(e n log n)) (this has not been verified carefully).1The algorithm is based on one found on Wikipedia..The opposite graph (with all edges reversed). O((n + e) log n).Reverses an edge. O(1).Left-biased union.Time complexity: See .Union. The function is used to combine edge labels for edges that occur in both graphs (labels from the first graph are given as the first argument to the function).Time complexity:  O(nA log (nAnA + 1) + eA log eA), where nA/ is the number of nodes in the graph with the smallest number of nodes and nA0 is the number of nodes in the other graph, and eA is the number of edges in the graph with the smallest number of edges and eA+ is the number of edges in the other graph."Less complicated time complexity: O((n + e) log n (where n and e refer to the resulting graph).Union. O((n + e) log n (where n and e refer to the resulting graph).Union. The function is used to combine edge labels for edges that occur in several graphs. O((n + e) log n (where n and e refer to the resulting graph).Unzips the graph. O(n + e).#walkSatisfying every some g from to% determines if there is a walk from from to to in g/, in which every edge satisfies the predicate every(, and some edge satisfies the predicate some. If there are several such walks, then a shortest one (in terms of the number of edges) is returned.Precondition: from and to must be nodes in g<. The number of nodes in the graph must not be larger than ͘ :: .Amortised time complexity (assuming that comparisons and the predicates take constant time to compute): O(n + e log n). SCC DAGs.0The maps map SCC indices to and from SCCs/nodes.Edges.Edge label (weight).Outgoing node.Incoming node. Graph n e, is a type of directed graphs with nodes in n and edges in e.At most one edge is allowed between any two nodes. Multigraphs can be simulated by letting the edge type e be a collection type.The graphs are represented as adjacency maps (adjacency lists, but using finite maps instead of arrays and lists). This makes it possible to compute a node's outgoing edges in logarithmic time (O(log n)). However, computing the incoming edges may be more expensive.Note that neither the number of nodes nor the number of edges may exceed ͘ :: .Forward edges.Various kinds of nodes.!All nodes, with or without edges.Nodes with outgoing edges.Nodes with incoming edges.WithUniqueInt n consists of pairs of (unique) s and values of type n.2Values of this type are compared by comparing the s. with a more precise type.Used to implement  and .*The graph's strongly connected components.     3 ; .!% 5 RNone( #&'()+,/159<=>?topoligical sort with smallest-numbered available vertex first | input: nodes, edges | output is Nothing if the graph is not a DAG Note: should be stable to preserve order of generalizable variables. Algorithm due to Richard Eisenberg, and works by walking over the list left-to-right and moving each node the minimum distance left to guarantee topological ordering.SNone( #&'()+,/159<=>?Graph structureNone( #&'()+,/159<=>?   None( #&'()+,/159<=>?#3$  #3$  TNone( #&'()+,/159<=>?;Register a new file identifier or retrieve an existing one. Register a new file identifier () or retrieve an existing one ().;Register a new file identifier or retrieve an existing one.If . is returned, the file was already registered.Unique identifier of a file..Translate a file to an ID; mapping must exist.-Translate a ID to a file; mapping must exist.$%$)$ $..==$$#  #    # 4 4 3      $+$.$$$$UNone( #&'()+,/159<=>?"Add to specified CPU time account..Bill a pure computation to a specific account.Bill a computation to a specific account. Works even if the computation is aborted by an exception.;Bill a CPS function to an account. Can't handle exceptions.Semantic editor combinator.Semantic editor combinator.Semantic editor combinator..Resets the account and the timing information.Turn benchmarking on/off.Bill current account with time up to now. Switch to new account. Return old account (if any).(Account we can bill computation time to.Benchmark structure is a trie, mapping accounts (phases and subphases) to CPU time spent on their performance.Are we benchmarking at all?!What are we billing to currently?/The accounts and their accumulated timing bill.3Record when we started billing the current account.'Monad with access to benchmarking data.We need to be able to terminate benchmarking in case of an exception.$Initial benchmark structure (empty).2Print benchmark as three-column table with totals.Maybe new account.Maybe old account.   0 0 2 . 2 1 > * ,  3VNone( #&'()+,/159<=>?# (+) m1 m2 adds m1 and m2, using (+) to add values.  O(n1 + n2).Returns a matrix of size  m1 m2. x m adds a new column to m, after the columns already existing in the matrix. All elements in the new column get set to x. x m adds a new row to m, after the rows already existing in the matrix. All elements in the new row get set to x.#Constructs a matrix from a list of (index, value) -pairs. O(n) where n is size of the list.!Precondition: indices are unique. sz rs constructs a matrix from a list of lists of values (a list of rows). O(size) where size = rows  cols.Precondition:  rs ٘  sz and Ϙ (( sz ٘) . ) rs."Association list intersection.  O(n1 + n2). interAssocWith f l l' = { (i, f a b) | (i,a) D l and (i,b) D l' }Used to combine sparse matrices, it might introduce zero elements if f( can return zero for non-zero arguments. f m1 m2! build the pointwise conjunction m1 and m2 . Uses f to combine non-zero values.  O(n1 + n2).Returns a matrix of size  infSize m1 m2.Returns  iff the matrix is empty. (i,)  $ f a), and same for gs and g.?General pointwise combination function for sparse matrices.  O(n1 + n2). m extracts the diagonal of m.For non-square matrices, the length of the diagonal is the minimum of the dimensions of the matrix.%Type of matrix indices (row, column). Column index 1 <= col <= cols. Row index, 1 <= row <= rows.6Type of matrices, parameterised on the type of values.Sparse matrices are implemented as an ordered association list, mapping coordinates to values.Dimensions of the matrix.!Association of indices to values.Size of a matrix.Number of columns, >= 0.Number of rows, >= 0.Transposable things.Diagonal of sparse matrix.O(n) where n2 is the number of non-zero elements in the matrix.Pointwise comparison. Only matrices with the same dimension are comparable.Transposing coordinates.Matrix transposition. O(n log n) where n2 is the number of non-zero elements in the matrix.Size of transposed matrix.Turn a sparse vector into a vector by inserting a fixed element at the missing positions. O(size) where size is the dimension of the vector.?/Multiplication of .s. (Corresponds to sequential composition.)Smart constructor for Decr k :: Order which cuts off too big values.Possible values for k:  - ?cutoff  k  ?cutoff + 1.$Raw decrease which does not cut off.Decreasing and usable?$Raw increase which does not cut off.%The infimum of a (non empty) list of $s. Gets the worst information. & is the least element, thus, dominant.Matrix-shaped order is decreasing if any diagonal element is decreasing.le, lt,  decreasing, unknown4: for backwards compatibility, and for external use.Usable decrease.Smart constructor for matrix shaped orders, avoiding empty and singleton matrices.We use a record for semiring instead of a type class since implicit arguments cannot occur in instance constraints, like +instance (?cutoff :: Int) => SemiRing Order.+The supremum of a (possibly empty) list of ;s. More information (i.e., more decrease) is bigger. # is no information, thus, smallest.A partial order, aimed at deciding whether a call graph gets worse during the completion.:In the paper referred to above, there is an order R with   Le  Lt.This is generalized to   'Decr k' where Decr 1 replaces Lt and Decr 0 replaces Le. A negative decrease means an increase. The generalization allows the termination checker to record an increase by 1 which can be compensated by a following decrease by 2 which results in an overall decrease.However, the termination checker of the paper itself terminates because there are only finitely many different call-matrices. To maintain termination of the terminator we set a cutoff point which determines how high the termination checker can count. This value should be set by a global or file-wise option.See Call for more information.9TODO: document orders which are call-matrices themselves.2Decrease of callee argument wrt. caller parameter.The Bool indicates whether the decrease (if any) is usable. In any chain, there needs to be one usable decrease. Unusable decreases come from SIZELT constraints which are not in inductive pattern match or a coinductive copattern match. See issue #2331.UPDATE: Andreas, 2017-07-26: Feature #2331 is unsound due to size quantification in terms. While the infrastructure for usable/unusable decrease remains in place, no unusable decreases are generated by TermCheck.&Matrix-shaped order, currently UNUSED.No relation, infinite increase, or increase beyond termination depth./We assume the matrices have the same dimension.It does not get worse then ` increase'. If we are still decreasing, it can get worse: less decreasing.Information order:  is least information. The more we decrease, the more information we have.When having comparable call-matrices, we keep the lesser one. Call graph completion works toward losing the good calls, tending towards Unknown (the least information).(, , ) forms a semiring, with  as zero and Le as one.Pick the worst information. collapse mWe assume that m codes a permutation: each row has at most one column that is not Unknown.To collapse a matrix into a single value, we take the best value of each column and multiply them. That means if one column is all Unknown, i.e., no argument relates to that parameter, then the collapsed value is also Unknown.,This makes order multiplication associative.'Can two matrices be multplied together?      XNone) #&'()+,/159<=>? Insert into a call matrix set.Non-augmented call matrix./Convert into a list of augmented call matrices.Union two call matrix sets.0Call matrix indices = function argument indices.Machine integer  is sufficient, since we cannot index more arguments than we have addresses on our machine.Sets of incomparable call matrices augmented with path information. Use overloaded , ,  , .0Call matrix multiplication and call combination.Call matrices.A call matrix for a call f --> g has dimensions  ar(g)  ar(f).9Each column corresponds to one formal argument of caller f9. Each row corresponds to one argument in the call to g.In the presence of dot patterns, a call argument can be related to several different formal arguments of f. See e.g. testsucceedDotPatternTermination.agda:  data D : Nat -> Set where cz : D zero c1 : forall n -> D n -> D (suc n) c2 : forall n -> D n -> D n f : forall n -> D n -> Nat f .zero cz = zero f .(suc n) (c1 n d) = f n (c2 n d) f n (c2 .n d) = f n d 'Call matrices (without guardedness) are  -1 -1 n < suc n and n < c1 n d ? = c2 n d <= c1 n d = -1 n <= n and n < c2 n d ? -1 d < c2 n d Here is a part of the original documentation for call matrices (kept for historical reasons):This datatype encodes information about a single recursive function application. The columns of the call matrix stand for source function arguments (patterns). The rows of the matrix stand for target function arguments. Element (i, j)0 in the matrix should be computed as follows: (less than) if the j-th argument to the target; function is structurally strictly smaller than the i-th pattern. (less than or equal) if the j-th argument to the target+ function is structurally smaller than the i-th pattern. otherwise.,Call matrix augmented with path information.Meta info, like call path."The matrix of the (composed call).1Call matrix set product is the Cartesian product.Call matrix multiplication.f --(m1)--> g --(m2)--> h is combined to f --(m2  m1)--> h9Note the reversed order of multiplication: The matrix c1 of the second call g-->h in the sequence  f-->g-->h is multiplied with the matrix c2 of the first call.Preconditions: m1 has dimensions  ar(g)  ar(f). m2 has dimensions  ar(h)  ar(g).Postcondition:  m1 >*< m2 has dimensions  ar(h)  ar(f).%Augmented call matrix multiplication. 0  8 1 .  %-#%& ('+< * .  6-/:YNone) #&'()+,/159<=>?"Call graph comparison. A graph cs' is `worse' than cs if it has a new edge (call) or a call got worse, which means that one of its elements that was better or equal to Le moved a step towards Un.A call graph is complete if combining it with itself does not make it any worse. This is sound because of monotonicity: By combining a graph with itself, it can only get worse, but if it does not get worse after one such step, it gets never any worse. cs completes the call graph cs. A call graph is complete if it contains all indirect calls; if f -> g and g -> h are present in the graph, then f -> h should also be present.!Inserts a call into a call graph.!Make a call with a single matrix.Make a call with empty cinfo.Returns all the nodes with incoming edges. Somewhat expensive. O(e).Converts a call graph to a list of calls with associated meta information.#Takes the union of two call graphs.Calls are edges in the call graph. It can be labelled with several call matrices if there are several pathes from one function to another.A call graph is a set of calls. Every call also has some associated meta information, which should be al so that the meta information for different calls can be combined when the calls are combined.Call graph nodes.Machine integer  is sufficient, since we cannot index more than we have addresses on our machine. is a monoid under .: checks whether the call graph is completely disconnected.?Displays the recursion behaviour corresponding to a call graph.Converts a list of calls with associated meta information to a call graph.Call graph combination.Application of  to all pairs (c1,c2) for which  c1 =  c2.)    3 % ". 5   2  2ZNone) #&'()+,/159<=>?A call c! is idempotent if it is an endo ( == ) of order 1. (Endo-calls of higher orders are e.g. argument permutations). We can test idempotency by self-composition. Self-composition c >*< c: should not make any parameter-argument relation worse. cs( checks if the functions represented by cs terminate. The call graph cs should have one entry (&) per recursive function application.The termination criterion is taken from Jones et al. In the completed call graph, each idempotent call-matrix from a function to itself must have a decreasing argument. Idempotency is wrt. matrix multiplication.This criterion is strictly more liberal than searching for a lexicographic order (and easier to implement, but harder to justify)..Would termination go through with guardedness?+Guardedness does not help with termination./Guardedness would provide termination evidence.*Result of running the termination checker.3Termination proved without considering guardedness.Termination could not be proven, witnessed by the supplied problematic call path. Guardedness could help, though.Only consider calls whose source and target satisfy this predicate.Callgraph augmented with cinfo.A bad call path of type cinfo%, if termination could not be proven.    ")&)-) )$) ))) ! ! ))[None( #&'()+,/159<=>?Return the glyph set based on a given (unicode or ascii) glyph modePicking the appropriate set of special characters depending on whether we are allowed to use unicode or have to limit ourselves to ascii.We want to know whether we are allowed to insert unicode characters or not.'false: Stick to ASCII.!: Unicode characters are allowed./Choose the glyph set based on the unsafe IORef.3Are we allowed to use unicode supscript characters?$ $   $     & -) )" " \None( #&'()+,/159<=>?- +Lookup a builtin by the string used in the BUILTIN pragma.Builtins that come without a definition in Agda syntax. These are giving names to Agda internal concepts which cannot be assigned an Agda type.,An example would be a user-defined name for Set.{-# BUILTIN TYPE Type #-} The type of Type would be Type : Level C Set which is not valid Agda.%Lookup a primitive by its identifier.A builtin name, defined by the BUILTIN pragma.-The class of types which can be converted to .Get the identifier for this builtin, generally used for error messages. Convert this value to a builtin.!A primitive name, defined by the  primitive block. Either a  or , used for some lookups.##%)%)+2+2#     % %          ]None( #&'()+,/159<=>? Clear the running info buffer.Clear the warning bufferDisplay running information about what the type-checker is up to.-Writes a response command to standard output.Formats a response command. Replaces 'n'= with spaces to ensure that each command is a single line.Simple Emacs Lisp expressions.Atom.List.$The name of the running info buffer.0displayInBuffer buffername append header content displays content (with header header%) in some suitable way in the buffer  buffername. If append is True, then the content is appended to previous content (if any), otherwise any previous content is deleted.   " "%^None( #&'()+,/159<=>?Create a keyword range.5Range dedicated to a keyword or fixed token sequence.Motivation: by lacking a 0 instance we indicate that it cannot be updated.   % % ( (_None( #&'()+,/159<=>?`Combine inferred . The unit is .# forms a pointwise additive monoid.Combine inferred .Combine inferred . The unit is .. forms an additive monoid with zero Quantity0.Combine inferred . The unit is .Compose with cohesion flag from the left. This function is e.g. used to update the cohesion information on pattern variables a- after a match against something of cohesion rel.Compose with modality flag from the left. This function is e.g. used to update the modality information on pattern variables a- after a match against something of modality q.Compose with polarity flag from the left. This function is e.g. used to update the polarity information on pattern variables a- after a match against something of polarity pol.Compose with quantity flag from the left. This function is e.g. used to update the quantity information on pattern variables a- after a match against something of quantity q.Compose with relevance flag from the left. This function is e.g. used to update the relevance information on pattern variables a! after a match against something rel. can be embedded into .)Prefer user-written over system-inserted. composition.  is dominant,  is neutral.Composition of values of type . is dominant.  is neutral.Right-biased for the origin.(Multiplicative monoid (standard monoid). composition. composition.  is dominant,  is neutral.+Composition of quantities (multiplication). is dominant.  is neutral.Right-biased for origin. composition.  is dominant, + is neutral. Composition coincides with ./The default Modality terms are checked against.:Default Cohesion is the identity element under compositionThe default value of type  : not erased.Default is directive is private% (use everything, but do not export).The default Modality Beware that this is neither the additive unit nor the unit under composition, because the default quantity is .+Default used when not caring about polarityAbsorptive element! This differs from Relevance and Cohesion whose default is the multiplicative unit.;Default Relevance is the identity element under composition can be projected onto .Does an argument arg fit the shape dom of the next expected argument?The hiding has to match, and if the argument has a name, it should match the name of the domain. should be , so use as @ fromMaybe  IMPOSSIBLE $ fittingNamedArg arg dom @ Check for . Check for . Check for . arguments are hidden.Left division by a 3. Used e.g. to modify context when going into a rel argument.Left division by a 3. Used e.g. to modify context when going into a m argument.3Note that this function does not change quantities.Left division by a 3. Used e.g. to modify context when going into a pol argument.Left division by a 3. Used e.g. to modify context when going into a q argument.Left division by a 3. Used e.g. to modify context when going into a rel argument.inverseComposeCohesion r x returns the least y such that forall x, y we have (x `moreCohesion` (r `composeCohesion` y) iff /(r `inverseComposeCohesion` x) `moreCohesion` y1 (Galois connection). The above law fails for  r = Squash.inverseComposeModality r x returns the least modality y such that forall x, y we have .x `moreUsableModality` (r `composeModality` y) iff 5(r `inverseComposeModality` x) `moreUsableModality` y (Galois connection).inverseComposePolarity r x returns the least y such that forall x, y we have x `morePolarity'\` (r `composePolarity` y) iff ,(r `inverseComposePolarity` x) `morePolarity'\` y (Galois connection).inverseComposePolarity r x returns the least y such that forall x, y we have x `morePolarity'\` (r `composePolarity` y) iff ,(r `inverseComposePolarity` x) `morePolarity'\` y (Galois connection).inverseComposeQuantity r x returns the least quantity y such that forall x, y we have (x `moreQuantity` (r `composeQuantity` y) iff /(r `inverseComposeQuantity` x) `moreQuantity` y (Galois connection).inverseComposeRelevance r x returns the most irrelevant y such that forall x, y we have )x `moreRelevant` (r `composeRelevance` y) iff 0(r `inverseComposeRelevance` x) `moreRelevant` y (Galois connection).Irrelevant function arguments may appear non-strictly in the codomain type.isDefaultImportDir implies null, but not the other way round.Is the value "erased"?Monoidal composition of  information in some data. Alias for Mixed polarity.Information ordering. Flat `moreCohesion` Continuous `moreCohesion` Sharp `moreCohesion` SquashmorePolarity' x y is True whenever a variable of polarity x can be used anywhere where a variable of polarity y is expected. Note that morePolarity' x y actually means x <= y.m moreUsableQuantity m' means that an m can be used where ever an m' is required.Information ordering. Relevant `moreRelevant` ShapeIrrelevant `moreRelevant` Irrelevantm  m' means that an m can be used where ever an m' is required.Get the content of a .,Equality of argument names of things modulo  and . Alias for  polarity.An abbreviation: noPlaceholder =  .*Did the user supply a quantity annotation? and  arguments are  notVisible.Like partitionEithers.Extract the positional modality component for checks regarding only them.prettyHiding info visible doc# puts the correct braces around doc according to info info and returns  visible doc% if the we deal with a visible thing.Equality ignoring origin.Equality ignoring origin.Ignores .Equality ignoring origin.,Equality of argument names of things modulo  and .Equality for polarities.Equality ignoring origin.Equality ignoring origin. ,setNamedArg a b = updateNamedArg (const b) aApplied when working on types (unless --experimental-irrelevance).splittablePolarity pol == False& iff we cannot split on a variable of pol."Absorptive element under addition."Absorptive element under addition."Absorptive element under addition.Absorptive element is ."Absorptive element under addition.Identity under compositionIdentity under compositionIdentity under composition."Identity element under composition"Identity element under compositionThing with no range info.The functor instance for 8 would be ambiguous, so we give it another name here.usableCohesion rel == False! iff we cannot use a variable of rel.usablePolarity pol == False! iff we cannot use a variable of pol.9A thing of quantity 0 is unusable, all others are usable.usableRelevance rel == False! iff we cannot use a variable of rel. arguments are visible.xs `withArgsFrom` args translates xs into a list of s, using the elements in args to fill in the non- fields.5Precondition: The two lists should have equal length.4 forms a monoid under addition, and even a semiring.Identity under addition4 forms a monoid under addition, and even a semiring.Identity element under addition4 forms a monoid under addition, and even a semiring.Access modifier. Store the  of the private block that lead to this qualifier. This is needed for more faithful printing of declarations.  is the range of the private keyword.We have a tuple of annotations, which might not be fully orthogonal.Fitch-style dependent right adjoints. See Modal Dependent Type Theory and Dependent Right Adjoints, arXiv:1804.05236."Is any element of a collection an .4A function argument can be hidden and/or irrelevant.Sometimes we want a different kind of binder/pi-type, without it supporting any of the Modality interface.Names in binders and arguments.Associativity..Positions of variables in syntax declarations.The position (in the left-hand side of the syntax declaration) of the hole in which the variable is bound, counting from zero (and excluding parts that are not holes). For instance, for  syntax  A ( x C B) = B , A , x the number for x is 1, corresponding to B (0 would correspond to A).The position in the list of variables for this particular variable, counting from zero, and including wildcards. For instance, for "syntax F ( x _ y C A) = y ! A ! x the number for x is 0, the number for _ is 1, and the number for y is 2.1 of the CATCHALL pragma for a clause, if any.  means no such pragma.Cohesion modalities see "Brouwer's fixed-point theorem in real-cohesive homotopy type theory" (arXiv:1509.07584) types are now given an additional topological layer which the modalities interact with.identity modality. | Sharp -- ^ same points, codiscrete topology, idempotent monad, diamond-like.=same points, discrete topology, idempotent comonad, box-like.single point space, artificially added for Flat left-composition.Where does the ConP or Con come from?#User wrote a constructor (pattern).User wrote a record (pattern).(Generated by interactive case splitting.8Inserted by system or expanded from an implicit pattern./Distinguish constructors from pattern synonyms.0Can we construct a record by copattern matching?!Coverage check? (Default is yes).Variants of Cubical Agda.Distinguish parsing a DISPLAY pragma from an ordinary left hand side.A special case of : erased or not.Note that the ǘ2 instance does *not* ignore the origin arguments.*Expression kinds: Expressions or patterns.Fixity of operators.&Range of the whole fixity declaration.The notation is handled as the fixity in the renamer. Hence, they are grouped together in this type.Range of the name in the fixity declaration (used for correct highlighting, see issue #2140).$Fixity level declared as the number.No fixity declared.Pattern and copattern matching is allowed in the presence of eta.In the absence of eta, we have to choose whether we want to allow matching on the constructor or copattern matching with the projections. Having both leads to breakage of subject reduction (issue #4560).%Does a record come with eta-equality?The things you are allowed to say when you shuffle names between name spaces (i.e. in import,  namespace, or open declarations). Only for open. Exports the opened names from the current module. Range of the public keyword.3An imported name can be a module or a defined name.Imported module name of type m.Imported name of type n.Abstract or concrete.Functions can be defined in both infix and prefix style. See |.0Is this definition eligible for instance search? Range of the instance keyword.Is this a macro definition?Opaque or transparent.This definition is opaque, and it is guarded by the given opaque block.4Monoid representing the combined opaque blocks of a * containing possibly-opaque declarations.%More than one opaque block was found.Nothing here is opaque.= 0.Number >= 1.Notation as provided by the syntax declaration.Notation parts.A hole: a place where argument expressions can be written. For instance, for _+_) the two underscores are holes, and for  syntax  A ( x C B) = B , A , x the variables A and B are holes. The number is the position of the hole, counting from zero. For instance, the number for A is 0, and the number for B is 1.&An identifier part. For instance, for _+_ the only identifier part is +.A bound variable.The first range is the range of the variable in the right-hand side of the syntax declaration, and the second range is the range of the variable in the left-hand side./A wildcard (an underscore in binding position).The unique identifier of an opaque block. Second argument is the top-level module identifier.Origin of arguments.&Produced by an interactive case split. An expanded hidden argument pun.&Inserted by the generalization processE.g. inserted hidden arguments.%Produced by the reflection machinery.Named application produced to represent a substitution. E.g. "?0 (x = n)" instead of "?0 n"/From the source file / user input. (Preserve!) Origin of .User wrote ".".User wrote nothing.User wrote "@irr".User wrote "@irrelevant". Origin of .User wrote nothing.User wrote "@relevant". Origin of .User wrote "..".User wrote nothing.User wrote "@shirr".User wrote "@shape-irrelevant".The possible overlap modes for an instance, also used for instance candidates.No user-written overlap pragma. This instance can be overlapped by an OVERLAPPING instance, and it can overlap OVERLAPPABLE instances.'Overlapping instances in record fields.User-written INCOHERENT pragma: both overlappable and overlapping; and, if there are multiple candidates after all overlap has been handled, make an arbitrary choice.User-written OVERLAPPABLE pragma: this candidate can *be removed* by a more specific candidate.User-written OVERLAPPING pragma: this candidate can *remove* a less specific candidate.User-written OVERLAPS pragma: both overlappable and overlapping./Can we pattern match on the record constructor?=For a record without eta, which type of matching do we allow?5Can copattern match using the projections. (Default.)$Can match on the record constructor.#The actual polarity of the variableThe locks of the variable (= composition of all denominators the variable has been left divided by),The original polarity annotation by the user4The position of a name part or underscore in a name.;The following underscore is at the beginning of the name: _foo.4The following underscore is at the end of the name: foo_.8The following underscore is in the middle of the name: foo_bar.#Positivity check? (Default = True). Precedence levels for operators.A "problem" consists of a set of constraints and the same constraint can be part of multiple problems."Where does a projection come from? User wrote a postfix projection.User wrote a prefix projection.'Projection was generated by the system. Origin of .User wrote "@0".User wrote "@erased".User wrote nothing. Origin of .User wrote "@1".User wrote nothing.User wrote "@linear".Quantity for linearity.A quantity is a set of natural numbers, indicating possible semantic uses of a variable. A singleton set {n}= requires that the corresponding variable is used exactly n times. Zero uses {0}, erased at runtime. Linear use {1} (could be updated destructively). Mostly TODO (needs postponable constraints between quantities to compute uses).Unrestricted use B. Origin of .User wrote "@".User wrote nothing.User wrote "@plenty".String with range info.Thing with range info.A RawName is some sort of string.:A function argument can be relevant or irrelevant. See Agda.TypeChecking.Irrelevance.3The argument is irrelevant at compile- and runtime.4The argument is (possibly) relevant at compile-time.Like , the argument may never flow into evaluation position. So it is irrelevant at run-time, yet treated relevantly during equality checking.Unlike , it is used to type * arguments in functions: If you enable --experimental-irrelevance, then the type of an irrelevant function is forced to be shape-irrelevant. See: -  (https://doi.org/10.2168/LMCS-8(1:29)2012 example 2.8 (Not enforcing shape-irrelevant codomains can break subject reduction!) -  &https://dl.acm.org/doi/10.1145/3110277 - 'https://doi.org/10.1145/3209108.3209119New fixity of  (optional).Rename from this name.#To this one. Must be same kind as .The range of the "to" keyword. Retained for highlighting purposes.RewriteEqn' qn p e represents the rewrite and irrefutable with clauses of the LHS. qn stands for the QName of the auxiliary function generated to implement the feature nm/ is the type of names for pattern variables p is the type of patterns e is the type of expressions with p <- e in eq  using p <- e  rewrite e0Termination check? (Default = TerminationCheck).#Skip termination checking (unsafe).Treat as non-terminating./Treat as terminating (unsafe). Same effect as .Run the termination checker.2Skip termination checking but use measure instead.;Type wrapper to indicate additive monoid/semigroup context.Type wrapper to indicate composition or multiplicative monoid/semigroup context.!Universe check? (Default is yes).The using clause of import directive.No using clause given.using the specified names.Decorating something with  information.Decorating something with  information. Default is . Ignores range.",Composition is left-biased, taking the left  if both have one.", is an idempotent partial monoid, with unit .  and  are incompatible."+Semigroup computes if any of several is an ."Conjunctive semigroup ( is absorbing)."Right-biased composition, because the left relevance acts as context, and the right one as occurrence."Right-biased composition, because the left relevance acts as context, and the right one as occurrence." Just for the 9 instance. Should never combine different overlapping."Right-biased composition, because the left quantity acts as context, and the right one as occurrence."Right-biased composition, because the left quantity acts as context, and the right one as occurrence."Right-biased composition, because the left quantity acts as context, and the right one as occurrence." is the additive unit."" forms a semigroup under addition."'' is the additive unit."" forms a semigroup under addition."Pointwise additive unit."Pointwise addition."In the absense of finite quantities besides 0,  is the unit. Otherwise, 1 is the unit."+Composition of quantities (multiplication). is dominant.  is neutral.Right-biased for origin." is the unit under composition."% forms a semigroup under composition." Continous is the multiplicative unit."% forms a semigroup under composition." Continous is the multiplicative unit."% forms a semigroup under composition."Pointwise composition unit."Pointwise composition."Ranges are not forced.#Ranges are not forced.#Ranges are not forced.#5 shall mean no information, not even origin or range.#null for import directives holds when everything is imported unchanged (no names are hidden or renamed).#0 means no information, not even origin or range.#0 means no information, not even origin or range.#2Order is given by implication: flatter is smaller.#Ignores range.#More relevant is smaller.#Flatter is smaller.#The derived Ord instance for ModalPolarity is just used for serialisation and has no particular meaning. The actual order on modalities is a partial order.#Dominance ordering.#Note that the order is  D 0,1, more options is smaller.#More relevant is smaller.$Ignores range.$?The record selectors are not included in the resulting strings.#    , 2 " . 4 #; &  #  &")")#&-&-$+")")!#")# ) 5 % !%   #  %) $ $        %)   %)                                                            "                                         '/ %- ' '/ $ "*  ( %- %- #       %   (/ +2  +2     # # % # #     -4 %            #* +2 +2        +2  $      (! ! ! ! ! ,! ! ! ! ! ! ! 5! ! /! ! ! #! !! (! %! #! ! ! ! ! ! 6! ! >! ! ;! /! /! ! ! !!!"*! ! ! ! ! ! *! ! $! ! ! ! !! ! $! ! ! !! .! ! ! ! ! !! ! ! ! ! ! 7! ! ! !  ! ! ! $! "! )! ! &! $! #! ! ! ! ! ! ! 8! ! ! ! 7! !! >! 1! 1! 8! .! 9! /! 8! .! ! 6! 8! .! #! !  ! ! ! ! ! ! ! ! ! ! #! #! )! ! ! ! 1! #! #! " " " " #" #" $" ," " " " *" " "" " " " #" " " " " " "  " !" " " " !" !" $" " !" " " " " " " "  " !" $" " "" &" )" "  "  " #" " " " " " " )" ," *" -" )" ," 1" 4" )" ," ," /" -" 0" ," /" 4" 7" ," /" "  " " " $" " !" &" " " " ," " " " !" " " " " " (" " ?" <"" " " " " " " 1" " " " :" " " " !" " &" " " #" !"  "17" " # # # # '# 2# # 8# # 1# # 5# +# +# # # # # # # # # # %# # # # # $# # # # # # .# # ##,/##  ##### ###  ## ############ ##/2####### ########### ## ## ## ## !# ###### +# ,# +# 3# +# .# /# .# 6# .# 1# 2# 1# 9# 1# # "# # %# # ### '# *# 3# # $# # # ,# # # # # # ?$ <$ $ $ $ $ $ $ $ '$ $ !$ $ &$ $ !$ $ $ $ $ $ '$ $ 8$ $ 5$ +$ +$ -$ ($ $ /$ $ #$ !$ ($ #$ $ $ $ $ $ /$ /$$  $$$$$ $$$$ $ $$$$ $ $$$ $ $$$ $ $$$$$$$ $$ $$ $ $6:$ $$$!%$$ $!%$ $ $ $ $ $ $ $$ $$ $ $ $ $ $ $ $$  $$$$59$;?$$$$1<$/:$)4$1<$&1$,7$*5$/:$/:$ $ $ `None( #&'()+,/159<=>?%Blanks the non-code parts of a given file, preserving positions of characters corresponding to code. This way, there is a direct correspondence between source positions and positions in the processed result.%Returns True& if the role corresponds to Agda code.%Returns True! if the layer contains Agda code.%Short list of extensions for literate Agda files. For display purposes.%Preprocessor for Markdown.%$Preprocessor for Org mode documents.%List of valid extensions for literate Agda files, and their corresponding preprocessors.If you add new extensions, remember to update test/Utils.hs so that test cases ending in the new extensions are found.%"Preprocessor for reStructuredText.%Preprocessor for literate TeX.%9A sequence of characters in a file playing the same role.% Role of a character in the file.%A list of contiguous layers.%/Type of a literate preprocessor: Invariants:  f : Processorproposition> f pos s /= []*proposition> f pos s >>= layerContent == s7Annotates a tokenized string with position information.6Replaces non-space characters in a string with spaces.*Check if a character is a blank character.Returns a tuple consisting of the first line of the input, and the rest of the input.2Canonical decomposition of an empty literate file.Create a regular expression that: - Must match the whole string - Works across line boundaries#Preprocessor for Forester documents$%%%%%%%%%%%%%%%%%%%%%%%%%%%$%%%%%%%%%%%%%%,,%: :#%44%, ,aNone( #&'()+,/159<=>? %*Does a function application need brackets?%*Does a function application need brackets?%#Argument context preferring parens.%Does a lambda-like thing (lambda, let or pi) need brackets in the given context? A peculiar thing with lambdas is that they don't need brackets in certain right operand contexts. To decide we need to look at the stack of precedences and not just the current precedence. Example: mA >>= ( x C x) >>= mA (for _>>=_ left associative).%Do we need to bracket an operator application of the given fixity in a context with the given precedence.%Do we need to bracket an operator application of the given fixity in a context with the given precedence.%$Does a function space need brackets?%&Does a with application need brackets?%*Do we prefer parens around arguments like  x C x or not? See %.%(Precedence is associated with a context.%When printing we keep track of a stack of precedences in order to be able to decide whether it's safe to leave out parens around lambdas. An empty stack is equivalent to %. Invariant: `notElem TopCtx`.%Decorating something with Fixity'.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" "%33%% %""#%33 % 6% )% (%$ $ %5 5%""%7 7%""%33%-1% +bNone) #&'()+,/159<=>?W %Uses the given document as the printed representation of the given parser. The document's precedence is taken to be atomP.%&Tries to print the parser, or returns empty, depending on the implementation. This function might not terminate.%Memoises the given parser./Every memoised parser must be annotated with a unique key. (Parametrised parsers must use distinct keys for distinct inputs.)%Memoises the given parser, but only if printing, not if parsing./Every memoised parser must be annotated with a unique key. (Parametrised parsers must use distinct keys for distinct inputs.)%Runs the parser.%.Parses a token satisfying the given predicate.%Parses a token satisfying the given predicate. The computed value is returned.%Memoisation keys.%The parser monad.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%) )%%%cNone( #&'()+,/159<=>? $%Get the first version of the concrete name that does not satisfy the given predicate.%An open mixfix identifier is either prefix, infix, or suffix. That is to say: at least one of its extremities is a Hole%-Is the name an operator? Needs at least 2 &s.%Is the name (un)qualified?%$Zoom on the last non-hole in a name.%Don't use on 'NoName{}'.%(Lens for the unqualified part of a QName%Get a raw version of the name with all suffixes removed. For instance, nameRoot "xAAA" = "x".%Lens for accessing and modifying the suffix of a name. The suffix of a NoName is always Nothing, and should not be changed.%,Split a name into a base name plus a suffix.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&&&&&%%%%%%%%&&%%%%%%&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%&'& & & & & & & & & & & & +& /& & & & !& & & & & & & & & & && & & & & &&& &&8 8& dNone( #&'()+,/159<=>?'&Print list of errors.&Extra information for error &.&What kind of declaration? See also .&Name of a data type.&Name of a function.&Name of a record type.&Nicifier errors.&The reason for an ErasedDatatype error.& The flag --erased-matches is not used.&The K rule is not activated.&There are several constructors.&Symbolic name of an Agda error.)Reasons for error ).)Reasons for error ).)#Things not allowed in dot patterns.&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))))))&&&&&&&&&&&)))))))))&&&&&''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((&&&&&&&&&&&&&&&(((((((((((((((((())))))))))))))))))&&&&&&(((()))))))))))))))&&&&&&&&&&&&&&&&&&&&&&)"))"))")))*"*)))")))")))4)"))"))="=))"))1"1)))")) ) ) ) ))** ) )11 ) )== ) ) ) ) ) ) ) ))) ))1)))))**)))))==))11))  ) %) $) ') () ) ) ) )* *) )= =) ) ) ) ) ) ) )1 1) ) eNone( #&'()+,/159<=>?*Arbitrary JS code.**,)))))))))))*********************************.)))))))))******************))*****************"*11*66*; ;*''*1 1*. .*6 6* * * * "* (* (* * 2* *99$*99*< <*..*9 9*' '* *11*..*66* * * * * * "* )* 4fNone( #&'()+,/159<=>?**************************************gNone( #&'()+,/159<=>?*Separate by blank line.*1Separate by space that will be removed by minify.For non-removable space, use d <> " " <> d'.*Check if a string is a valid JS identifier. The check ignores keywords as we prepend z_ to our identifiers. The check is conservative and may not admit all valid JS identifiers.*Apply * to * if boolean is true.*1Concatenate vertically, separated by blank lines.++-****************************************+++++/**********************************+++++*++********+) )+ + + + "+ 4+ (+ + + + %+ + &+ + + .hNone( #&'()+,/159<=>? !+Get the name if unambiguous.+%Get the first of the ambiguous names.+Is a name ambiguous.+A module is anonymous if the qualification path ends in an underscore.+/Is the first module a weak child of the second?+0Is the first module a weak parent of the second?+1Is the first module a proper child of the second?+2Is the first module a proper parent of the second?+Is the name an operator?+9Get the next version of the concrete name. For instance, nextName "x" = "xA". The name must not be a NoName.+Turn a qualified name into a concrete name. This should only be used as a fallback when looking up the right concrete name in the scope fails.+ Convert a + to a + (add no module name).+%Useful for debugging scoping problems+A singleton "ambiguous" name.+Sets the ranges of the individual names in the module name to match those of the corresponding concrete names. If the concrete names are fewer than the number of module name name parts, then the initial name parts get the range .C.D.E `withRangesOf` [A, B] returns C.D.E! but with ranges set as follows:C: .D: the range of A.E: the range of B.Precondition: The number of module name name parts has to be at least as large as the length of the list.+Like +, but uses the name parts (qualifier + name) of the qualified name as the list of concrete names.+? ,&The map contains bindings of the form  bound |-> ess?, satisfying the following property: for every non-empty list w, /  w  bound iff  [ Ϙ every w   some w | (every, some) <- ess ].,+productOfEdgesInBoundedWalk occ g u v bound returns a value distinct from  iff there is a walk c (a list of edges) in g, from u to v, for which the product /  (Θ occ c)  bound&. In this case the returned value is  (/  c) for one such walk c.Preconditions: u and v must belong to g, and bound must belong to the domain of boundToEverySome.,Subterm occurrences for positivity checking. The constructors are listed in increasing information they provide: 3Mixed <= JustPos <= StrictPos <= GuardPos <= Unused Mixed <= JustNeg <= Unused.,Guarded strictly positive occurrence (i.e., under D). For checking recursive records.,Negative occurrence.,/Positive occurrence, but not strictly positive.,-Arbitrary occurrence (positive and negative).,Strictly positive occurrence.,Description of an occurrence.,The elements of the sequences, read from left to right, explain how to get to the occurrence. The second sequence includes the main information, and if the first sequence is non-empty, then it includes information about the context of the second sequence.,1List of polarities stemming from POLARITY pragma.,-One part of the description of an occurrence.,in the type of a constructor,&in an endpoint of a higher constructor,(in the nth argument of a define constant,'in the nth clause of a defined function,in the definition of a constant,$in a datatype index of a constructor,"is an index of an inductive family,1matched against in a clause of a defined function, as an argument of a metavariable,'in the principal argument of built-in D,as an argument to a bound variable. The polarity, if given, is the polarity of the argument the occurence is in,,* is a complete lattice with least element , and greatest element ,.&It forms a commutative semiring where  is meet (glb) and 0 is composition. Both operations are idempotent.For , , is neutral (zero) and , is dominant. For , , is neutral (one) and , is dominant.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"), ,,99,,99#,#, , ,; ;, , ,= =,,99,, , , , , ,9 9, , , !jNone( #&'()+,/159<=>?,Each redundant field comes with a range of associated dead code.,Record type, fields not supplied by user, non-fields but supplied. The redundant fields come with a range of associated dead code.,,,,,,,,,,,,,,,,,"), ,,, $, , kNone( #&'()+,/159<=>?",Ranges are not forced. ,,,,,,,,,,, ,,,,,,,,,,,,4 4, , , , , lNone( #&'()+,/159<=>? ,Expose the format  coerce f args.We fuse coercions, even if interleaving with applications. We assume that coercion is powerful enough to satisfy / coerce (coerce f a) b = coerce f a b ,=Strip leading coercions and indicate whether there were some.,filterUsed used args drops those args which are labelled  ArgUnused in list used.Specification:  filterUsed used args = [ a | (a, ArgUsed) <- zip args $ used ++ repeat ArgUsed ]  Examples:  filterUsed [] == id filterUsed (repeat ArgUsed) == id filterUsed (repeat ArgUnused) == const [] ,Introduces a new binding-4Usage status of function arguments in treeless code.-&Is this a match on an erased argument?-, if treeless usage analysis has not run yet.-The treeless compiler can behave differently depending on the target language evaluation strategy. For instance, more aggressive erasure for lazy targets.-Matches on the given constructor. If the match succeeds, the pattern variables are prepended to the current environment (pushes all existing variables aArity steps further away)-Binds no variablesThe guard must only use the variable that the case expression matches on.-Code which could not be obtained because of a hole in the program. This should throw a runtime error. The string gives some information about the meta variable that got compiled.-Code which is unreachable. E.g. absurd branches or missing case defaults. Runtime behaviour of unreachable code is undefined, but preferably the program will exit with an error message. The compiler is free to assume that this code is unreachable and to remove it.-Compiler-related primitives. This are NOT the same thing as primitives in Agda's surface or internal syntax! Some of the primitives have a suffix indicating which type of arguments they take, using the following naming convention: Char | Type C | Character F | Float I | Integer Q | QName S | String-?Treeless Term. All local variables are using de Bruijn indices.-Case scrutinee (always variable), case type, default value, alternatives First, all TACon alternatives are tried; then all TAGuard alternatives in top to bottom order. TACon alternatives must not overlap.-Used by the GHC backend-,A runtime error, something bad has happened.-introduces a new (non-recursive) local binding. The bound term MUST only be evaluated if it is used inside the body. Sharing may happen, but is optional. It is also perfectly valid to just inline the bound term in the body.-5Checks if the given expression is unreachable or not.+++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,,,-++++++++++++++++++++++++++++++%%%%%-----------------------------------------------------------------------------,,,,,,,,,,,,,,,,,,,,,--------------------------------------------------------------------------------''---!!-- ------''#-#-#-!!#-#-#-#-#- - - - - - - - - -''---!!-----' '- - -! !---- - - - - - mNone( #&'()+,/159<=>?9,Split alts into TAGuard alts and other alts.--nNone( #&'()+,/159<=>?]-We lose track of @-patterns in the internal syntax. This pass puts them back.--- oNone( #&'()+,/159<=>?-Unconditional layout keywords.Some keywords introduce layout only in certain circumstances, these are not included here..A misplaced end-comment "-}"..Arbitrary string (not enclosed in double quotes), used in pragmas.--.................................................................................................................................-.............................................................................-.............................--... . #.--..pNone( #&'()+,/159<=>?' .Drop / constructors. (Safe).Drop / constructors. (Safe). Discards Proj f entries./Drop / constructor. (Safe)/Only / variant./Split at first non-//5Eliminations, subsuming applications and projections./ Application./'IApply x y r, x and y are the endpoints/ Projection. + is name of a record projection./This instance cheats on /, use with care. /s are always assumed to be , since they have no . Same for IApply ...////////// ///////.///.. /$//? ?/ ,/ / &/ (/ /&1qNone( #&'()+,/159<=>? /When trying to reduce f es(, on match failed on one elimination e D es that came with info r :: NotBlocked.  stuckOn e r produces the new  NotBlocked info./ must be propagated, as this is blockage that can be lifted in the future (as more clauses are added)./ e0 is also propagated, since it provides more precise information as  StuckOn e (as e0 is the original reason why reduction got stuck and usually a subterm of e). An information like %StuckOn (Apply (Arg info (Var i []))) (stuck on a variable) could be used by the lhs/coverage checker to trigger a split on that (pattern) variable.In the remaining cases for r$, we are terminally stuck due to  StuckOn e. Propagating / does not seem useful./4 must not be propagated, as this would mean that f es is underapplied, which is not the case (it is stuck). Note that / can only arise when projection patterns were missing to complete the original match (in e/). (Missing ordinary pattern would mean the e is of function type, but we cannot match against something of function type.)/Something where a meta variable may block reduction. Notably a top-level meta is considered blocking. This did not use to be the case (pre Aug 2020)./What is causing the blocking? Or in other words which metas or problems need to be solved to unblock the blocked computation/constraint./ Unblock when function is defined/Unblock if meta is instantiated/Even if we are not stuck on a meta during reduction we can fail to reduce a definition by pattern matching for another reason./2We matched an absurd clause, results in a neutral Def./We ran out of clauses for +, all considered clauses produced an actual mismatch. This can happen when try to reduce a function application but we are still missing some function clauses. See  Agda.TypeChecking.Patterns.Match./Reduction was not blocked, we reached a whnf which can be anything but a stuck Def./The Elim' is neutral and blocks a pattern match./ >,// / ,/ / /* */ /&1rNone( #&'()+,/159<=>?2/Constant level n/Absurd lambdas are internally represented as identity with variable name "()"./6Make an absurd pattern with the given de Bruijn index./Doesn't do any reduction./Add 1 is it is not already a DontCare./Context entries without a type have this dummy type. Note: use macro  DUMMY_DOM !/A dummy level to constitute a level/sort created at location. Note: use macro  DUMMY_LEVEL !/Construct a string representing the call-site that created the dummy thing./5A dummy sort created at location. Note: use macro  DUMMY_SORT !/5A dummy term created at location. Note: use macro  DUMMY_TERM !/,Aux: A dummy term to constitute a dummy termlevel sort/type./5A dummy type created at location. Note: use macro  DUMMY_TYPE !0Build 0 from 0.0#A view distinguishing the neutrals Var, Def, and MetaV which can be projected.0+Is this a Prop universe? Answers are yes ( ) or maybe ().04Is this a strict universe inhabitable by data types?0Given a constant m and level l , compute m + l0Lens to edit a 1 as a list.0)A traversal for the names in a telescope.0'Retrieve the PatternInfo from a pattern0 Retrieve the origin of a pattern0 Turn a known  sort into a  sort, leave others unchanged.0 Get the flavor of the universe.  could also mean "don't know".0Removing a topmost 1 constructor.0(Convert a list telescope to a telescope.0%Convert a telescope to its list form.0Build partial 0 from 00>Convert top-level postfix projections into prefix projections.0Convert // projection eliminations according to their  into 1 projection applications.0An unapplied variable.0Binder.02: The bound variable might appear in the body. 0 is pseudo-binder, it does not introduce a fresh variable, similar to the const of Haskell.06The body has (at least) one free variable. Danger: 0! doesn't shift variables properly0Type of argument lists.0 'Blocked a without the a.0Newtypes for terms that produce a dummy, rather than crash, when applied to incompatible eliminations.03A clause is a list of patterns and the clause body.The telescope contains the types of the pattern variables and the de Bruijn indices say how to get from the order the variables occur in the patterns to the order they occur in the telescope. The body binds the variables in the order they appear in the telescope.  B.0 "@tactic e".0 NotHidden.0Builtin EQUALITY.0Hidden. Empty or Level.0 NotHidden.0Sort of this type.0Hidden.0View type as equality type.0A type of the form u D v4 decomposed into its parts. Used as type for the rewrite expression.0$A reduced type used as type for the with inspect idiom.0"A reduced type used as type for a with expression.1>A level is a maximum expression of a closed level and 0..n 14 expressions each of which is an atom plus a number.1Telescope as list.1Named pattern arguments.1Origin of the pattern: what did the user write in this position?1User wrote an absurd pattern1 User wrote a constructor pattern1User wrote a dot pattern1User wrote a literal pattern1User wrote a record pattern1Pattern generated by case split1+Argument to pattern generated by case split1Pattern inserted by the system1User wrote a variable pattern1User wrote a wildcard pattern1Pattern variables.1View type as path type.1reduced1Hidden1 NotHidden1 Builtin PATH.1 NotHidden1Sort of this type.1Hidden17Patterns are variables, constructors, or wildcards. QName is used in ConP rather than Name since a constructor might come from a particular namespace. This also meshes well with the fact that values (i.e. the arguments we are matching with) use QName.1c ps= The subpatterns do not contain any projection copatterns.1:Used for HITs, the QName should be the one from primHComp.1 .t1Path elimination pattern, like VarP but keeps track of endpoints.1E.g. 5, "hello".11Projection copattern. Can only appear by itself.1 x17Extract pattern variables in left-to-right order. A 1+ is also treated as variable (see docu for 0).1#Constructing a singleton telescope.1Sorts.1A postulated sort.1A (part of a) term or type which is only used for internal purposes. Replaces the abuse of Prop for a dummy sort. The String typically describes the location where we create this dummy, but can contain other information as well.1(Sort of a (non-dependent) function type.1Prop:, (S)Set:.1 IntervalUniv+, a sort inhabited by the cubical interval.1 LevelUniv, a sort inhabited by type Level;. When --level-universe isn't on, this universe reduces to Set 01LockUniv, a sort for locks.1Sort of the pi type.1SizeUniv, a sort inhabited by type Size.1Prop B, Set B, SSet B.1Sort of another sort.1Substitutions.1Substitution extension, `cons'.   E u : A  E  :  ----------------------  E u :#  : , A 1Empty substitution, lifts from the empty context. First argument is  IMPOSSIBLE. Apply this to closed terms you want to use in a non-empty context.  E EmptyS : ()1Identity substitution.   E IdS : 19Lifting substitution. Use this to go under a binder. Lift 1  == var 0 :# Wk 1 .   E  :  ------------------------- ,  E Lift ||  : ,  1/Strengthening substitution. First argument is  IMPOSSIBLE. In 'Strengthen err n  the number n must be non-negative. This substitution should only be applied to values t$ for which none of the variables 0 up to n - 1 are free in t[], and in that case n5 is subtracted from all free de Bruijn indices in t[].  E  :  || = n ---------------------------  E Strengthen n  : ,  @19Weakening substitution, lifts to an extended context.   E  :  ------------------- ,  E Wk ||  :  12Suggest a name if available (i.e. name is not "_")1 Drop the types from a telescope.1Sequence of types. An argument of the first type is bound in later types and so on.10 is never 0.1 Raw values.Def is used for both defined and undefined constants. Assume there is a type declaration and a definition for every constant, even if the definition is an empty list of clauses.1c es or record { fs = es } es allows only Apply and IApply eliminations, and IApply only for data constructors.1f es, possibly a delta/iota-redex1Irrelevant stuff in relevant position, but created in an irrelevant context. Basically, an internal version of the irrelevance axiom .irrAx : .A -> A.1A (part of a) term or type which is only used for internal purposes. Replaces the  Sort Prop hack. The String typically describes the location where we create this dummy, but can contain other information as well. The second field accumulates eliminations in case we apply a dummy term to more of them. Dummy terms should never be used in places where they can affect type checking, so syntactic checks are free to ignore the eliminators, which are only there to ease debugging when a dummy term incorrectly leaks into a relevant position.1+Terms are beta normal. Relevance is ignored1)dependent or non-dependent function space1x es neutral1The size of a term is roughly the number of nodes in its syntax tree. This number need not be precise for logical correctness of Agda, it is only used for reporting (and maybe decisions regarding performance).'Not counting towards the term size are:sort and color annotations, projections.1'Types are terms with a sort annotation.1(PropSetSSet):.1PropSetSSet B.2Ignores  and  and tactic.2A  clause is one with no patterns and no rhs. Should not exist in practice.32The size of a telescope is its length (as a list).0#eliminations ordered left-to-right.1The  PatVarName is a name suggestion.1111+++++++++++++++++++++++++++++++++++++//////////////////////////////////0000000000000000000000000000000000000000000000000000//////////////////////////////...////++++++++++++++++++++++++++++++%%%%%000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111/////////////////////////////////////////////////////////////0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 *1 /1 1 1 12 22 222 22222&2$2$2$22$2$222222-42222 2223:2 223:2 2 2 +2 2 *2 .2 2 2 "2 2 2 <2 2 2 /2 2 2 2 2 +2 2 .2 &2 2 "2 2 &2 &2 2 &2 &2 2 &2 "2 "2 (2 (2 2 2 $2 2 2 2 2 .2 $2 2 2 2 )2 2 2 2 .2 %2 2 2 2  2 2 2 -2 -2 (2 *2 $2 (2 2 2 2 32 2 )2 2 2 .2 +2 2 2 2 2 %2 #2  2<2 22 2 2 22 222 3 3 33 3 33 33 "3 3 3 3 3 3 3 3 3 3 3 23 3  3 +3(33&13&13&133&13&1sNone( #&'()+,/159<=>?[3Things we can substitute for a variable. Needs to be able to represent variables, e.g. for substituting under binders.3(Produce a variable with name suggestion.3+Produce a variable without name suggestion.3=Are we dealing with a variable? If yes, what is its index?3We can substitute Terms for variables.33333333333331 13* *36 6+3# #3 tNone( #&'()+,/159<=>?/33 aggregation (additive operation of the semiring). For combining occurrences of the same variable in subterms. This is a refinement of the  operation for 3 which would work if 3 did not have the 3* as an argument. Now, to aggregate two 3$ occurrences, we union the involved 3s.33 composition (multiplicative operation of the semiring). For accumulating the context of a variable.3 is dominant. Once we are under a meta, we are flexible regardless what else comes. We taint all variable occurrences under a meta by this meta.30 is next in strength. Destroys strong rigidity.3 is still dominant over 3.30 is the unit. It is the top (identity) context.3First argument is the outer occurrence (context) and second is the inner. This multiplicative operation is to modify an occurrence under a context.3Ignore free variables in sorts.3The initial context.3Absorptive for 3.3 Unit for 3.3Run function for FreeM.33Subtract, but return Nothing if result is negative.3The absorptive element of variable occurrence under aggregation: strongly rigid, relevant.3Going under a binder.3 Going under n binders.3 y) == withVarOcc o x <> withVarOcc o y ``` * Respects VarOcc composition: ``` withVarOcc oneVarOcc = id withVarOcc (composeVarOcc o1 o2) = withVarOcc o1 . withVarOcc o2 ``` * Respects VarOcc aggregation: ``` withVarOcc (o1 <> o2) x = withVarOcc o1 x <> withVarOcc o2 x ``` Since the corresponding unit law may fail, ``` withVarOcc mempty x = mempty ``` it is not quite a semimodule.35A set of meta variables. Forms a monoid under union.3Keep track of 37 for every variable, but forget the involved meta vars.3Representation of a variable set as map from de Bruijn indices to 3.3Occurrence of free variables is classified by several dimensions. Currently, we have 3 and .3Equality up to origin.4Compose everything with the 3 part of the 3.4Proper monoid instance for VarMap rather than inheriting the broken one from IntMap. We combine two occurrences of a variable using .4 Access to 3 in 3.4The neutral element for variable occurrence aggregation is least serious occurrence: flexible, irrelevant. This is also the absorptive element for 3, if we ignore the 3 in 3.4The default way of aggregating free variable info from subterms is by adding the variable occurrences. For instance, if we have a pair (tA,tA) then and tA has oA the occurrences of a variable x and tA has oA/ the occurrences of the same variable, then (tA,tA) has  mappend oA oA occurrences of that variable.From counting , we extrapolate this to 3 and : we care most about about 3  occurrences. E.g., if tA has a 3 occurrence and tA a 3 occurrence, then (tA,tA) still has a 3 occurrence. Analogously, Relevant occurrences count most, as we wish e.g. to forbid relevant occurrences of variables that are declared to be irrelevant.3 forms a semiring, and this monoid is the addition of the semiring.4A "set"-style  3 instance with default/initial variable occurrence.3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333393 3 3 3 3 3  3 (3  3  3 3  4 "4 4 4 4 "4 %4 "4 '4 4 !4 4 )4 44 "4 '44  4 4 4 4 .4 +4 $4 (4 #4 '4 "4 '4 "4 (4 #4(.4&4 74 .444 4444 4 (4 "4 44uNone( #&'()+,/159<=>?" 4Merge a pair of discrimination trees. This function tries to build the minimal discrimination tree that yields the union of the inputs' results, though it does so slightly navely, without considerable optimisations (e.g. it does not turn single-alternative 4s into 4s).4Construct the case tree corresponding to only performing proper matches on the given key. In this context, a "proper match" is any 4 that is not 4.4A 10-indexed associative data structure supporting  approximate, (conservative) lookup. Rather than using a Trie keyed by 4 directly, a 4% is instead represented more like a case tree.This allows us to exploit the fact that instance selection often focuses on a small part of the term: Only that critical chain is represented in the tree. As an example, level parameters are unlikely to contribute to narrowing a search problem, so it would be wasteful to have an indirection in the tree for every 4! standing for a level parameter.4Do case analysis on a term. 4 is scoped in the same way as fast case trees for the abstract machine: When matching actually succeeds, the variable that was matched gets replaced by its arguments directly in the context.4#Succeed with a given set of values.4The empty discrimination tree.4Constant lambdas.4Anything else.4Local variables.4Dependent function types. The domain will be represented accurately, for the case of a genuine dependent function type, the codomain will be a dummy.4Rigid symbols (constructors, data types, record types, postulates) identified by a QName.4 Universes.4The variable to case on.The proper branches.0A further tree, which should always be explored. 4444444444444 4444444444444 44((4 4((#4 ;4 )4 ,4 ,4* *4 4((44( (vNone( #&'()+,/159<=>?/44444444444444444444444444444444444444444444444/444444444444444444444444444444444444444444444444 4 48 84& &4 4 40 0wNone( #&'()+,/159<=>? 4Translate the clause patterns to terms with free variables bound by the clause telescope.%Precondition: no projection patterns.4Translate the clause patterns to an elimination spine with free variables bound by the clause telescope.5Computes the permutation from the clause telescope to the pattern variables.Use as  fromMaybe  IMPOSSIBLE . clausePerm to crash in a controlled way if a de Bruijn index is out of scope here.5Computes the permutation from the clause telescope to the pattern variables.Use as  fromMaybe  IMPOSSIBLE . dbPatPerm to crash in a controlled way if a de Bruijn index is out of scope here.The first argument controls whether dot patterns counts as variables or not.5Compute from each subpattern a value and collect them all in a monoid.55Augment pattern variables with their de Bruijn index.5Turn a pattern into a term. Projection patterns are turned into projection eliminations, other patterns into apply elimination.5Traverse pattern(s) with a modification after the recursive descent.5Traverse pattern(s) with a modification before the recursive descent.5+Arity of a function, computed from clauses.5Label the pattern variables from left to right using one label for each variable pattern and one for each dot pattern.5Intended, but unpractical due to the absence of type-level lambda, is: labelPatVars :: f (Pattern' x) -> State [i] (f (Pattern' (i,x)))5Generic pattern traversal.Pre-applies a pattern modification, recurses, and post-applies another one.5 Fold pattern.5Traverse pattern.5Combine a pattern and the value computed from its subpatterns.5pre : Modification before recursion.post: Modification after recursion.555555445555555555555555555555555555$4455555555555555555555555555555555555 85 45 <5 '5. .522/5**85 :5 25 5 .5 65 <5 25 .5 65 $5 5 <5 5 +xNone( #&'()+,/159<=>?55Put it in a monad to make it possible to do strictly.5Generic term traversal.Note: ignores sorts in terms! (Does not traverse into or collect from them.)5Generic fold, ignoring sorts.5?Generic traversal with post-traversal action. Ignores sorts.5555555555555 (5: :(5? ?,5# #5/ /5; ;(59 9*5 5' '5+ +5 5< <$5> >*5= =*5 53 35 5 )5 5 55 5 5 5 /yNone( #&'()+,/159<=>?5Check that the requirements on lazy matching (single inductive case) are met, and set lazy to False otherwise.51Check whether a case tree has a catch-all clause.55Check whether a case tree has any projection patterns5Branches in a case tree.5'(Possibly additional) catch-all clause.5Map from constructor (or projection) names to their arity and the case subtree. (Projections have arity 0.)5Eta-expand with the given (eta record) constructor. If this is present, there should not be any conBranches or litBranches.5?(if True) In case of non-canonical argument use catchallBranch.5Lazy pattern match. Requires single (non-copattern) branch with no lit branches and no catch-all.5!Map from literal to case subtree.53We are constructing a record here (copatterns). 5 lists projections.5Case tree with bodies.5 Case n bs stands for a match on the n(-th argument (counting from zero) with bs as the case branches. If the n+-th argument is a projection, we have only 5 with arity 0.5 Done xs b stands for the body b where the xs contains hiding and name suggestions for the free variables. This is needed to build lambdas on the right hand side for partial applications which can still reduce.5Absurd case. Add the free variables here as well so we can build correct number of lambdas for strict backends. (#4280)555555555555555555555555555555555555555555555555555555 5995#+5!!59 95 5! !5939:53:5!3!:5 +5 #5 05 45 +5 95 06 %6 16 *6 6 %6  6 *69-916-16!-!16 )6 56 .69 9+6!6! !+zNone( #&'()+,/159<=>?6Returns 6 in a list. allMetasList = allMetas (:[]).Note: this resulting list is computed via difference lists. Thus, use this function if you actually need the whole list of metas. Otherwise, use 6 with a suitable monoid.68Returns the first meta it find in the thing, if any. 'firstMeta == listToMaybe . allMetasList.6 if thing contains no metas. noMetas = null . allMetasList.6A blocker that unblocks if any of the metas in a term are solved.6A blocker that unblocks if any of the metas in a term are solved.6Returns every meta-variable occurrence in the given type, except for those in sort annotations on types.666666666 66666666663 3(6 96 *6! !61 1$6$$-62 2*6" "6 6 )6 6( (56+ +6. .6 {None( #&'()+,/159<=>?6getDefs' lookup emb a extracts all used definitions (functions, data/record types) from a, embedded into a monoid via emb7. Instantiations of meta variables are obtained via lookup."Typical monoid instances would be [QName] or  Set QName. Note that emb can also choose to discard a used definition by mapping to the unit of the monoid.6Getting the used definitions.Note: in contrast to x getDefs also collects from sorts in terms. Thus, this is not an instance of foldTerm.6Inputs to and outputs of getDefs' are organized as a monad.6*What it takes to get the used definitions.6 66666666666 6666666666666 &6 &66 66 &6 (6 6,6 "6 (6 6 6 6 69 96 16 6& &/|None* #&'()+,/1569<=>?'f6-Drop type annotations and lets from bindings.6Turn an expression into a pattern, turning non-pattern subexpressions into 8.6Turn an expression into a pattern. Fails if the expression is not a valid pattern.6Return 8 if 6 is 8.6We can try to get a  Telescope from a  [LamBinding]. If we have a type annotation already, we're happy. Otherwise we manufacture a binder with an underscore for the type.6Smart constructor for Pi: check whether the  Telescope is empty6Smart constructor for Lam: check for non-zero bindings.6Smart constructor for Let": check for non-zero let bindings.6Smart constructor for TLet": check for non-zero let bindings.6*Observe the hiding status of an expression62Observe various modifiers applied to an expression6-Observe the relevance status of an expression6Splits off allowed (= import) declarations before the first non-allowed declaration. After successful parsing, the first non-allowed declaration should be a module declaration.6#Parse outermost hiding information.6Unparse hiding information.6The 7 is not an application.6.From the parser, we get an expression for the as-&#, which we have to parse into a &.6The content of the as -clause of the import statement.6The "as" name.6The range of the "as" keyword. Retained for highlighting purposes.6 A Binder x@p, the pattern is optional6The @finite- cannot be parsed, it comes from the builtin Partial only.6From @tactic attribute.6The representation type of a declaration. The comments indicate which type in the intended family the constructor targets.6#lone data signature in mutual block7=Variables to be generalized, can be hidden and/or irrelevant.7The ) here only refers to the range of the instance( keyword. The range of the whole block InstanceB r ds is fuseRange r ds.7  opaque ...7In  Agda.Syntax.Concrete.Definitions we generate private blocks temporarily, which should be treated different that user-declared private blocks. Thus the .7%lone record signature in mutual block7notation declaration for a name7Axioms and functions can be irrelevant. (Hiding should be NotHidden)7  unfolding ...7 %unquoteDecl data d constructor xs = e7 unquoteDecl xs = e7 unquoteDef xs = e7 p C e where cs7Concrete expressions. Should represent exactly what the user wrote.7ex: () or {}, only in patterns7ex: \ ()7ex: e e, e {e}, or  e {x = e}7ex: x@p, only in patterns7ex: do x <- m1; m27to print irrelevant things7ex: .p, only in patterns7ex: ..A, used for parsing ..A -> B7...$, used internally to parse patterns.7ex: a = b, used internally in the parser7ex: .\ { p11 .. p1a -> e1 ; .. ; pn1 .. pnz -> en }7ex: e -> e or .e -> e (NYI: {e} -> e)7ex: {e} or {x=e}7ex: x7ex: (| e1 | e2 | .. | en |) or (|)7ex: {{e}} or {{x=e}}7An identifier coming from abstract syntax, for which we know a precise syntactic highlighting class (used in printing).7An operator application coming from abstract syntax, for which we know a precise syntactic highlighting class (used in printing).7ex:  \x {y} -> e or \(x:A){y:B} -> e7ex:  let Ds in e+, missing body when parsing do-notation let7ex: 1 or "foo"7ex: e + e The & is possibly ambiguous, but it must correspond to one of the names in the set.7ex: (e)7ex:  (xs:e) -> e or  {xs:e} -> e7ex: ? or  {! ... !}7ex: quote, should be applied to a name7ex:  quoteTerm, should be applied to a term7before parsing operators7ex: record {x = a; y = b}, or record { x = a; M1; M2 } The  is for the record keyword.7ex: record e {x = a; y = b} The  is for the record keyword.7ex:  @(tactic t)", used to declare tactic arguments7ex: _ or _A_57ex: unquote&, should be applied to a term of type Term7ex: e | e1 | .. | en7An expression followed by a where clause. Currently only used to give better a better error message in interaction.7(Extended content of an interaction hole.7 e7  (rewrite | invert) e0 | ... | en7The things you are allowed to say when you shuffle names between name spaces (i.e. in import,  namespace, or open declarations).73An imported name can be a module or a defined name.7;Left hand sides can be written in infix style. For example: +n + suc m = suc (n + m) (f D g) x = f (g x)We use fixity information to see which name is actually defined.7Original pattern (including with-patterns), rewrite equations and with-expressions.7e.g.  f ps | wps7(rewrite e | with p <- e in eq) (many)7with e1 in eq | {e2} | ... (many)7:Processed (operator-parsed) intermediate form of the core f ps of 7. Corresponds to 7.7 f7Record projection.7+Pattern that was expanded from an ellipsis ....7Main argument.7 ps7-Patterns for record indices (currently none).7 At least one (| p).70A lambda binding is either domain free or typed.7. x or {x} or .x or .{x} or {.x} or x@p or (p)7. (xs : e) or {xs : e}7Possibly empty sequence.7=Modules: Top-level pragmas plus other top-level declarations.7  M {{...}}7 tel M exprs where M exprs is a 7 just after parsing.7An abstraction inside a special syntax declaration (see Issue 358 why we introduce this).89Concrete patterns. No literals in patterns at the moment.8 ()8p p' or  p {x = p'}8 x@p8.e, the  is for the dot, the ) for the whole thing (including the dot).8...., only as left-most pattern. Second arg is Nothing before expansion, and Just p after expanding ellipsis to p.8i = i1$ i.e. cubical face lattice generator8{p} or {x = p}8c or xIf the boolean is  , then the & must not refer to a constructor or a pattern synonym. The value 2 is used when a hidden argument pun is expanded.8{{p}} or  {{x = p}}80, 1, etc.8eg: p => p' for operator _=>_ The & is possibly ambiguous, but it must correspond to one of the names in the set.8 (p)8 quote8p1..pn before parsing operators8record {x = p; y = q}. The  is for the record keyword.8 _8| p, for with-patterns.8)Applies to the following function clause.8*Display lhs as rhs (modifies the printer).8:For coinductive records, use pragma instead of regular  eta-equality, definition (as it is might make Agda loop).86Throws an internal error in the scope checker. The +s are words to be displayed with the error.89Mark a definition as injective for the conversion checker8Mark a definition as injective for the pattern matching unifier.8INLINE or NOINLINE8Applies to the following function (and all that are mutually recursive with it) or to the functions in the following mutual block.8:Applies to the following data/record type or mutual block.8*Applies to the following data/record type.8Applies to the stated function8Applies to the given name(s), which must be instance names (checked by the type checker).8$Second Range is for REWRITE keyword.8Applies to the following function (and all that are mutually recursive with it) or to the functions in the following mutual block.8Applies to the current module8Applies to the named function8+No right hand side because of absurd match.81Isolated record directives parsed as Declarations8 Range of [no-]eta-equality keyword.8Range of keyword  [co]inductive.8If declaration pattern is present, give its range.8A telescope is a sequence of typed bindings. Bound variables are in scope in later types.8Just type signatures.8(Just type signatures or instance blocks.8A typed binding.8Binding (x1@p1 ... xn@pn : A).8 Let binding (let Ds) or  (open M args).8where block following a clause.8The generalization  WhereClause' is for the sake of Agda.Concrete.Generic.8 Ordinary where.  of the where/ keyword. List of declarations can be empty.8No where clauses.8 Named where: module M where ds.  of the keywords module and where . The  flag applies to the & (not the module contents!) and is propagated from the parent function. List of declarations can be empty.8Type of where block following a clause.8 Ordinary where.8No where clauses.8 Named where: module M where ....9Ranges are not forced.9Ranges are not forced.9Ranges are not forced.9Ranges are not forced.9Ranges are not forced.9Ranges are not forced.9Ranges are not forced.9Ranges are not forced.9Ranges are not forced.9A 8 is  when the where keyword is absent. An empty list of declarations does not count as  here.Just field signatures)Generic expression to pattern conversion.&Default result for non-pattern things.The expression to translate.The translated pattern (maybe).666666666666666666666666666666666%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%6666666666666666666666666677777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777888888888888888888888888888888888888888888888888888888888888888888888888888888888%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&%%7777777777777777777777777777777777777776777666666666666666666666666667777688888877777667777766666666888888666666666666777777777777777777777777777688888877788787887666667888877777888888888888888888777777777777777777788888888888887767777888888888888888888888887777%%77776683588 8 8 8 8358 8 8 8-/8 8 8 8-/8 8 8-/88 8-/8 8 8$8$888888(088"888 8 8 8 8 8&8 8888 8 9 9 9 9 9 59 9 9 9 9 $9 #9 *9 9 9 9 "9 '9 9 9 9 9 9 9 9 9 79 9 9 9 %9 $9 ,9 9 9 9 #9?9 9 9 9 !9 $9 9 9 9 9 9 9 19 9 ,9 9 "9 !9 &9 9 9 9 %9 99 .9 -9 9 #9 9 9 9 9 9-19999&19&19 +9 +9 +9 +9 +92=9 +9$/}None( #&'()+,/159<=>?9#Hashes a raw top-level module name.9A lens focusing on the .9Turns a top-level module name into a file name with the given suffix.9Finds the current project's "root" directory, given a project file and the corresponding top-level module name.8Example: If the module "A.B.C" is located in the file "fooABC.agda", then the root is "foo".2Precondition: The module name must be well-formed.9Converts a top-level module name to a raw top-level module name.9#Computes the top-level module name.Precondition: The  has to be well-formed. This means that there are only allowed declarations before the first module declaration, typically import declarations. See spanAllowedBeforeModule.9 Computes the 9 corresponding to the given module name, which is assumed to represent a top-level module name.2Precondition: The module name must be well-formed.9Turns a qualified name into a 9. The qualified name is assumed to represent a top-level module name.90Turns a raw top-level module name into a string.9A corresponding . The range of each Name! part is the whole range of the 9.9Converts a raw top-level module name and a hash to a top-level module name.This function does not ensure that there are no hash collisions, that is taken care of by .9:Raw top-level module names (with linear-time comparisons).9Was this module name constructed from a file name rather than declared in the file?98Top-level module names (with constant-time comparisons).9The  is not forced.9999999999999999999999999999999999 94 4"9229 (9 *9 )9 &97 7#9> >&9 #9 (92 29: :%9 "~None( #&'()+,/159<=>? 9Compute a value from each subpattern and collect all values in a monoid.9)Does the LHS contain projection patterns?9Compute the context in which the ellipsis occurs, if at all. If there are several occurrences, this is an error. This only counts ellipsis that haven't already been expanded.99Does the pattern contain a with-pattern? (Shortcutting.)9Is 8?9Append patterns to 7), separating with patterns from the rest.9Add applicative patterns (non-projection / non-with patterns) to the right.9Add with-patterns to the right.9Construct the :" of the given list (if not empty).+Return the view and the remaining patterns.9?Map pattern(s) with a modification after the recursive descent.9 Modify the 8 component in 7.9Effectfully modify the 8 component in 7.92Count the number of with-subpatterns in a pattern?9View a pattern p as a list p0 .. pn where p04 is the identifier (in most cases a constructor).8Pattern needs to be parsed already (operators resolved).:Combine a pattern and the value computed from its subpatterns.:;Combine a pattern and the its recursively computed version.:pre : Modification before recursion.post: Modification after recursion.::::!99999999999999:::::::::::::::::::%::::::::::9999999:::::::9::9::9999::9: 0: =: ,: 2: 2: 4: 2: : :4 4:, ,:! !: &: *: None( #&'()+,/159<=>?:,Generic traversals for concrete expressions. Note: does not go into patterns!:This corresponds to .:This corresponds to Θ.:This corresponds to .:Collect declarations and subdeclarations, transitively. Prefix-order tree traversal.:Update declarations and their subdeclarations. Prefix-order traversal: traverses subdeclarations of updated declaration.::::::::::::: :::::::::::::*: (: : : : ;: : ": : : : $: *: *: 5: $: #:< <: /: *: *: : ): +: : 5: 5: : : 2:7 7: 1: /: : $: *: *: 1: ": ,: 2: 2: 9None( #&'()+,/159<=>?:Get the fixities and polarity pragmas from the current block. Doesn't go inside modules and where blocks. The reason for this is that these declarations have to appear at the same level (or possibly outside an abstract or mutual block) as their target declaration.While : and Polarities are not semigroups under disjoint union (which might fail), we get a semigroup instance for the monadic m (Fixities, Polarities)% which propagates the first error.Add more fixities. Throw an exception for multiple fixity declarations. OR: Disjoint union of fixity maps. Throws exception if not disjoint.Compute the names defined in a declaration. We stay in the current scope, i.e., do not go into modules.::::::::::::::::::::::::::::: : : !: 8: ;:None( #&'()+,/159<=>?=: Pretty-print ;.: Pretty-print ;.:#Compute a position position prefix.-Depending on the error to be printed, it willeither give the name of the  libraries file and a line inside it,or give the name of the  .agda-lib file.:)Does a parse error contain a line number?:The special name "." is used to indicated that the current directory should count as a project root.;Split a library name into basename and a list of version numbers. parseLibName "foo-1.2.3" == LibName "foo" [1, 2, 3] parseLibName "foo-01.002.3" == LibName "foo" [1, 2, 3]$Note that because of leading zeros,  parseLibName is not injective. (prettyShow . parseLibName would produce a normal form.); Content of a  .agda-lib file.;3How many directories above the Agda file is the  .agda-lib file located?; Dependencies.; Path to this  .agda-lib file (not content of the file).;3Roots where to look for the modules of the library.;!The symbolic name of the library.;4Default pragma options for all files in the library.;A symbolic executable name.;The executables file might not exist, but we may print its assumed location in error messages.;E.g. ~.agda executables.;5Cache locations of project configurations and parsed  .agda-lib files.; Contents of  .agda-lib% files that have already been parsed.;3Map from directories to paths of closest enclosing  .agda-lib files (or ; if there are none).;Collection of ;s and ;s.;0Collected errors while processing library files.;1Raised when a library name is defined in several .agda-lib files.;The  executables! file contains duplicate entries.;Raised when a library name could not successfully be resolved to an  .agda-lib file.;The  .agda-lib file could not be parsed.;/The user specified replacement for the default  libraries file does not exist.;*An I/O Error occurred when reading a file.;.The given project root contains more than one  .agda-lib file.; Collects ;s and ;s.;$Collected errors when processing an  .agda-lib file.;Throws ; exceptions, still collects ;s.;A symbolic library name.Library names are structured into the base name and a suffix of version numbers, e.g.  mylib-1.2.3". The version suffix is optional.;Actual library name.;Major version, minor version, subminor version, etc., all non-negative.;Exceptions thrown by the  .agda-lib parser.;At the given line number, an invalid field name is encountered before the :. (E.g., containing spaces.);1An invalid library name, e.g., containing spaces.;At the given line number, indented text (content) is not preceded by a field.;'These fields occur each more than once.;=At the given line number, the given field is not followed by :.;=At the given line number, a field name is missing before the :.;Missing these mandatory fields.;I/O error while reading file.;Information about which  .agda-lib. file we are reading and from where in the  libraries file it came from.; Library file.;Name of  libraries file.;Line number in  libraries file.;Library Warnings.;The libraries file might not exist, but we may print its assumed location in error messages.;E.g. ~.agda libraries.;The options from an OPTIONS pragma (or a  .agda-lib file).In the future it might be nice to switch to a more structured representation. Note that, currently, there is not a one-to-one correspondence between list elements and options.;The range of the options in the pragma (not including things like an OPTIONS keyword).; The options.;A file can either belong to a project located at a given root containing an .agda-lib file, or be part of the default project.;0How many directories above the Agda file is the  .agda-lib file located?; .agda-lib file relative to ; (filename only, no directory).;Directory which contains the  .agda-lib file for the current project.;Ranges are not forced.;In comparisons, a missing version number is assumed to be infinity. E.g. +foo > foo-2.2 > foo-2.0.1 > foo-2 > foo-1.0.; >; ; ; ; ;; ; ;<44< < < < << None( #&'()+,/159<=>? <Parse  .agda-lib file.Sets : name and turn mentioned include directories into absolute pathes (provided the given  is absolute).<4Break a comma-separated string. Result strings are trimmed.<+Remove leading whitespace and line comment.Header line, like a field name, e.g. "include :". Cannot be indented. String is trimmed."Other line. Must be indented. String is trimmed.(Library file field format format [sic!].Name of the field.Is it optional?Content parser for this field.*The range points to the start of the file.Sets parsed content in ; structure.E.g. field name. trimmed.E.g. field content. trimmed.The config files we parse have the generic structure of a sequence of field : content entries.Lines with line numbers.Parser monad: Can throw  LibParseErrors, and collects  LibWarning's library warnings.-...and trailing, but not leading, whitespace. .agda-lib& file format with parsers and setters.Parse file contents.Parse  with  descriptors.Given a list of 5 descriptors (with their custom parsers), parse a  into the ; structure.Checks mandatory fields are present; no duplicate fields, no unknown fields.Ensure that there are no duplicate fields and no mandatory fields are missing.Find  with given , throw error if unknown.Example:  parseGeneric "name:Main--BLAndepend:--BLAn standard-library--BLAninclude : . --BLAn src more-src n" == Right [("name",[Main]),("depend",["standard-library"]),("include",[".","src more-src"])] Parse line into  and  components.Precondition: line comments and trailing whitespace have been stripped away. Example file:  name: Main depend: standard-library include: . src more-src This should give ' [ Header 1 "name" , Content 1 Main , Header 2 "depend" , Content 3 "standard-library" , Header 4 "include" , Content 4 "." , Content 5 "src more-src" ] Collect  and subsequent s into .Leading s? That's an error.The parsed file.The parsed file.The parsed file.<<<<<<<<< None( #&'()+,/159<=>?2 < minus xs ys! computes the difference between xs and ys<: the result contains those positions which are present in xs but not in ys.*Linear in the lengths of the input ranges.< iff the ranges overlap.)The ranges are assumed to be well-formed.< Converts a  to a <.<The < invariant.<(Converts a range to a list of positions.< Converts a #, seen as a continuous range, to a .<The < invariant.</Converts several ranges to a list of positions.<Character ranges. The first character in the file has position 1. Note that the <4 position is considered to be outside of the range. Invariant: <  <.<.Zero or more consecutive and separated ranges.<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<$$<5 5<* *<55<& &<$$<$!$%<55None( #&'()+,/159<=>? <3Converts a list of pairs of ranges and values to a <. The ranges have to be non-overlapping and non-empty, and earlier ranges have to precede later ones.<,Inserts a value, along with a corresponding < , into a <. No attempt is made to merge adjacent ranges with equal values.The function argument is used to combine values. The inserted value is given as the first argument to the function.< Returns a <> overlapping the given range, as well as the rest of the map.<Invariant for <.8The ranges must not be empty, and they must not overlap.<Restricts the < to the given range.<Like <, but with several < instead of only one.< The value of < p f is a pair (f1, f2)! which contains everything from f. All the positions in f1 are less than p, and all the positions in f2 are greater than or equal to p.<A class that is intended to make it easy to swap between different range map implementations.Note that some <, operations are not included in this class.<?Returns the smallest range covering everything in the map (or , if the range would be empty).Note that the default implementation of this operation might be inefficient.<The map < rs x contains the ranges from rs9, and every position in those ranges is associated with x.<Converts the map to a list. The ranges are non-overlapping and non-empty, and earlier ranges precede later ones in the list.<Converts range maps to s from positions to values.<7A strict pair type where the first argument must be an .*This type is included because there is no ™ instance for Ù in the package strict before version 4.<*Maps containing non-overlapping intervals.The implementation does not use IntMap, because IntMap does not come with a constant-time size function.Note the invariant which <s should satisfy (<).<The keys are starting points of ranges, and the pairs contain endpoints and values.<Merges <s by inserting every "piece" of the smaller one into the larger one.<Merges <s by inserting every "piece" of the smaller one into the larger one.ę A variant of <. If a range in the middle was split into two pieces, then those two pieces are returned.řConstructs a pair.ƙ The number of ranges in the map.%This function should not be exported.<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< (< ,< /< (<< < < None( #&'()+,/159<=>?/<.Global variable to store benchmark statistics.<=Benchmark an IO computation and bill it to the given account.<>Benchmark a pure computation and bill it to the given account.<Phases to allocate CPU time to.< Subphase for <.< Subphase for <.< Subphase for <: checking the LHS< Subphase for < : reducing overlapping instances< Subphase for <: checking the RHS< Subphase for <: compacting interfaces.< Subphase for <.< Subphase for <.<0Coverage checking and compilation to case trees.<Dead code elimination.<)Dead code reachable definitions subphase.<Reading interface files.< Subphase for <": checking candidates for validity< Subphase for <: free variable computation.< Subphase for <: generalizing over variables< Subphase for <.<Generating highlighting info.<Import chasing.< Subphase for <: collecting initial candidates<Injectivity checking.< Subphase for <: solving instance goals<)Unfolding all metas before serialization.<Pretty printing names.< Subphase for <.< Subphase for <.< Subphase for <!: occurs check for solving metas.< Subphase for <.< Subphase for <.< Subphase for <%: ordering candidates for specificity<#Happy parsing and operator parsing.<-Positivity checking and polarity computation.<!Checking for projection likeness.< Subphase for <.< Subphase for <.< Subphase for <": evaluating elaborator reflection<2Scope checking and translation to abstract syntax.<Writing interface files.< Subphase for <.<Termination checking.< Subphase for <: checking a type signature<1Type checking and translation to internal syntax.< Subphase for <: unification of the indices< Subphase for <.7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <#< << < <None) #&'()+,/159<=>?-<Collect all free variables.<Collect all relevant free variables, excluding the "unused" ones.<=Collect all relevant free variables, possibly ignoring sorts.<0Is the term entirely closed (no free variables)?=7Get the full occurrence information of a free variable.=Variables occuring in arguments of metas. These are only potentially free, depending how the meta variable is instantiated. The set contains the id's of the meta variables that this variable is an argument to.=Collect all free variables together with information about their occurrence.Doesn't go inside solved metas, but collects the variables from a metavariable application X ts as  flexibleVars.=7Is the variable bound by the abstraction actually used?=Rigid variables: either strongly rigid, unguarded, or weakly rigid.=Compute free variables.=?Variables under only and at least one inductive constructor(s).=Variables at top or only under inductive record constructors s and s. The purpose of recording these separately is that they can still become strongly rigid if put under a constructor whereas weakly rigid ones stay weakly rigid.=7Get the full occurrence information of a free variable.="Hereditary Semigroup instance for . (The default instance for  may not be the hereditary one.)="Hereditary Semigroup instance for . (The default instance for  may not be the hereditary one.)Ǚ Collection? just keeping track of the occurrence of a single variable. & means variable does not occur freely.ș Collection? just keeping track of the occurrence of a single variable. & means variable does not occur freely.ə5Check if a variable is free, possibly ignoring sorts.5<<<<<================3333333===33333333333333333333335===3333333=3======<=<<<======33333333333333333==<3333= (= != = '=  = = = = = = = = = 3= == &None( #&'()+,/159<=>? =/Instantiate an abstraction. Strict in the term.=#Apply to a single default argument.=Apply to two default arguments.= Apply to some default arguments.= applySubst ( =& ) v == applySubst  (applySubst  v)=   E  : ,  -------------------  E dropS ||  :  =Single substitution without disturbing any deBruijn indices.  , A,  E u : A --------------------------------- , A,  E inplace || u : , A,  =Checks whether the variable bound by the abstraction is actually used, and, if not, returns the term within, =ed to live in the context outside the abstraction. See also .=Instantiate an abstraction. Lazy in the term, which allow it to be  IMPOSSIBLE in the case where the variable shouldn't be used but we cannot use =. Used in Apply.=$Lift a substitution under k binders.=lookupS (listS [(x0,t0)..(xn,tn)]) xi = ti, assuming x0 < .. < xn.=9Instantiate an abstraction that doesn't use its argument.=   E reverse vs :  -----------------------------  E parallelS vs  : ,   Note the  in , .=   E  :   E reverse vs :  ----------------------------- (treating Nothing as having any type)  E prependS vs  : ,  =%Raise de Bruijn index, i.e. weakening= #, ,  E raiseFromS || || : , =To replace index n by term u, do applySubst (singletonS n u).  ,  E u : A --------------------------------- ,  E singletonS || u : , A,  = E (strengthenS E ||) : ,=A "smart" variant of 1. If =1 is applied to a substitution with an outermost 1 constructor, then the "error message" of that constructor is discarded in favour of the  argument of this function.=Replace de Bruijn index i by a 1 in something.=Replace what is now de Bruijn index 0, but go under n binders. %substUnder n u == subst n (raise n u).=(abstract args v) = args --> v[args].=Apply something to a bunch of arguments. Preserves blocking tags (application can never resolve blocking).==& instance whose agument type is itself=Wrapper for types that do not contain variables (so applying a substitution is the identity). Useful if you have a structure of types that support substitution mixed with types that don't and need to apply a substitution to the full structure.=Apply a substitution.=Simple constraint alias for a = instance a with arg type t.==! instance whose argument type is 1==/===============================================1===================================================%= == += None( #&'()+,/159<=>?)1=Add a module to a scope.=Add a name to a scope.=Return all names in a scope.=$The flat list of ambiguous names in >.= Apply an  to a scope: "rename keys (C.Name) according to renaming;for untouched keys, either ofa) remove keys according to hiding', or b) filter keys according to using.Both steps could be done in one pass, by first preparing key-filtering functions C.Name -> Maybe C.Name for defined names and module names. However, the penalty of doing it in two passes should not be too high. (Doubling the run time.)= Version of = that also returns sets of name and module name clashes introduced by renaming0 to identifiers that are already imported by using or lack of hiding.=?For ambiguous constructors, we might have both alternatives of !. In this case, we default to .=+Add first string only if list is non-empty.=?For ambiguous constructors, we might have both alternatives of !. In this case, we default to >.=!Constructor and pattern synonyms.=:Get all concrete names in scope. Includes bound variables.=!All kinds of regular definitions.=3Disallow using generalized variables from the scope=The empty name space.=The empty scope.=The empty scope info.= Only return  [Co]ConName if no ambiguity.=&Returns the scope's non-private names.=Filter a scope keeping only concrete names matching the predicates. The first predicate is applied to the names and the second to the modules.=+Look up a single name in the current scope.This is equivalent to Map.lookup n . allNamesInScope', but more efficient when only a single name needs to be looked up.= inNameSpace> selects either the name map or the module name map from a ?. What is selected is determined by result type (using the dependent-type trickery).=.Add an explanation to why things are in scope.=Find the concrete names that map (uniquely) to a given abstract module name. Sort by length, shortest first.=Find the concrete names that map (uniquely) to a given abstract qualified name. Sort by number of modules in the qualified name, unqualified names first.= A version of = that also delivers the >. Used in highlighting.>Van Laarhoven lens on >.>Van Laarhoven lens on >.>9Map functions over the names and modules in a name space.>&Map monadic function over a namespace.>4Map functions over the names and modules in a scope.>Same as > but applies the same function to both the public and private name spaces.>Same as >7 but applies the function only on the given name space.>Same as >2 but applies the same function to all name spaces.>=Merge two scopes. The result has the name of the first scope.>Merge a non-empty list of scopes. The result has the name of the first scope in the list.>Modify a particular name space.>*Project name of unshadowed local variable.>%Get all locals that are not shadowed  by imports.>1Treat patternBound variable as a module parameter>5Get the public parts of the public modules of a scope>&Recompute the inScope sets of a scope.>Remove a name from a scope. Caution: does not update the nsInScope set. This is only used by rebindName and in that case we add the name right back (but with a different kind).>%Rename the abstract names in a scope.>9Remove private things from the given module from a scope.>%Remove private name space of a scope.Should be a right identity for =. >exportedNamesInScope . restrictPrivate == exportedNamesInScope.>Lenses for ScopeInfo components>Look up a name in the scope>Get a ? from ?.>Update a particular name space.>Move all names in a scope to the given name space (except never move from Imported to Public).>3Shadow a local name by a non-empty list of imports.> Lens for >.> A lens for ?>`Monadic' lens (Functor sufficient).> Lens for >.>Filter privates out of a ?>Zip together two name spaces.>Zip together two scopes. The resulting scope has the same name as the first scope.>Same as > but applies the same function to both the public and private name spaces.>-A decoration of abstract syntax module names.>&Explanation where this name came from.>The resolved module name.>A decoration of h.>6The kind (definition, constructor, record field etc.).>&Explanation where this name came from.>Additional information needed during scope checking. Currently used for generalized data/record params.>The resolved qualified name.>Used for instance arguments to check whether a name is in scope, but we do not care whether is is ambiguous>9Ambiguous constructors, projections, or pattern synonyms.>:Why is a resolved name ambiguous? What did it resolve to?Invariant (statically enforced): At least two resolvents in total.>/The name resolves to at least 2 declared names.>The name resolves both to a local variable and some declared names.>For each bound variable, we want to know whether it was bound by a , , module telescope, pattern, or let.> (currently also used for  and module parameters)>  let ... in>Binding added to scope by one of context-manipulating reflection primitives>f ... =. Remember  for pattern variables {x} and {{x}}. This information is only used for checking pattern synonyms. It is not serialized.>  | ... in q>-Type class for some dependent-types trickery.>#Set of types consisting of exactly > and >..A GADT just for some dependent-types trickery.>For the sake of parsing left-hand sides, we distinguish constructor and record field names from defined names.> Name of a  postulate.>Constructor name (definitely ).>Constructor name ( or don't know).> Name of a data.>&Generalizable variable from a let open>Record field name.>Name of a defined function.>Name to be generalized>Name of a macro>A DefName7, but either other kind or don't know which kind. End DefName0. Keep these together in sequence, for sake of  isDefName!>Name of a pattern synonym.> Name of a  primitive.>3A name that can only be quoted. Previous category DefName: (Refined in a flat manner as Enum and Bounded are not hereditary.)> Name of a record.> A set of >, for the sake of =.>All but these Kinds.>Only these kinds.>A local variable can be shadowed by an import. In case of reference to a shadowed variable, we want to report a scope error.>/Kind of binder used to introduce the variable (, let, ...).>If this list is not empty, the local variable is shadowed by one or more imports.>Unique ID of local variable.>Local variables.>"For the sake of highlighting, the ? map also stores the > of an A.QName.>)Possible renderings of the abstract name.?The >.?%Non-dependent tag for name or module.?A failure in name resolution, indicating the reason that a name which is% in scope could not be returned from tryResolveName.? The name was Foo.constructor, and Foo& is in scope, but it is not a record.?4Ambiguous names are not supported in this situation.?A  NameSpace contains the mappings from concrete names that the user can write to the abstract fully qualified names that the type checker wants to read.?All abstract names targeted by a concrete name in scope. Computed by >.?>Maps concrete module names to a list of abstract module names.?0Maps concrete names to a list of abstract names.?See _.?1Things from open public, exported by this module.?#Things not exported by this module.?+Things defined and exported by this module.? Data or record constructor name.?&Function, data/record type, postulate.?Record field name. Needs to be distinguished to parse copatterns.?Name of pattern synonym.? Unbound name.?9Local variable bound by , , module telescope, pattern, let.?What kind of binder??A scope is a named collection of names partitioned into public and private names.?The complete information about the scope at a particular program point includes the scope stack, the local variables, and the context precedence.?&Maps concrete names C.Name to fixities?(Maps concrete names C.Name to polarities?=Maps the name of a record to the name of its (co)constructor.?The variables that will be bound at the end of the current block of variables (i.e. clause). We collect them here instead of binding them immediately so we can avoid shadowing between variables in the same variable block.?Set the + in an abstract name.?%When we get here we cannot have both using and hiding.?Where does a name come from?=This information is solely for reporting to the user, see .?!Imported by a module application.?Defined in this module.?Imported from another module.?Decorate something with >@We show shadowed variables as prefixed by a ".", as not in scope.@Invariant: the > components should be equal whenever we have to concrete renderings of an abstract name.@/Sets the binding site of all names in the path.=4Merged scope, clashing names, clashing module names.? or  or both. isJust . = . > for all names.?> can be DefName, >, >.?(> ==) . > for all names.?(> ==) . > for all names.? The name x this explanation is about.2The directory in which the current module resides.The local variable that x could denote, if any.The defined names that x could denote.The modules that x could denote.?======================================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>?????????????????????????????????????????????????????????????????????????>>>????=?>>>>>?????????????>>>?>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>???????>>>>>>>=???>>>>>>>>>>>>>>>=>=======>>>>==>=????????>>>>>>???>>>>>>?????????>>>???=??>>>=>>>==>>>>>>>>=====>=>>>>>>=>=???>==>>>>==>>>===>>>>>>>>=====>???>=?$?")?")??? ? ?? ? ? ??? ? ? ? ? ?? ? ??'/?%?????&-?+2????+2???&-????? ?  ? ? ? ? ? !? ? ? $? ? #? ? ? ? ? ? ? ? @ @ @ @ @ @@ @@@ @ @ @ @ @ @ @ @ @ @  @ '@ %@ 0@ %@ @ 6@ @ @ @ @ @ @ @@ @ @ @@ @@ $@ @@ @ @@1<None( #&'()+,/159<=>?@-Default is system inserted and prefer parens.@@ with no range information.@Default meta kind from its  context.@Same as  mkDefInfo but where we can also give the  IsInstance@Empty range for patterns.@Information about application@6Do we prefer a lambda argument with or without parens?@Constructor pattern info.@Does this pattern come form the eta-expansion of an implicit pattern?@:Has the constructor pattern a dotted (forced) constructor?@Ordinary constructor.@Dotted constructor.@Information associated to a meta variable in the abstract syntax.@+Kind of a meta: the method how to solve it.@(Meta variable solved by instance search.@.Meta variable solved by unification (default).@Name suggestion for meta variable. Empty string means no suggestion.@The "as" module name, if any. Retained for highlighting purposes.@The range of the "as" and "to" keywords, if any. Retained for highlighting purposes.@ Retained for abstractToConcrete of 7.@;For a general pattern we remember the source code position.ADefault value for @.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #@ $@#@%)@@ @ @@@@@AA%%A AA A#AA+2AAA AA%%AAA A A A A A A A A A A:A A A A /A A A A A A A A %A #A A"(A A A A A A )A#A A#A A* *A A AA AA AA A' 'A AAAA A A A A08A AAA A A AA A A% %AA A*.None( #&'()+,/159<=>?ACollection of s of primitive modules.AThe Context is a stack of As.ATranslation between   and . that also knows about Agda's builtin modules.AFor the known 9s, remember whether they refer to Agda's builtin modules.A!(Building a) translation between   and .AThe absolute path to the directory with the builtin modules. Needs to be set upon initialization.A;How much highlighting should be sent to the user interface?AThis includes both non-interactive highlighting and interactive highlighting of the expression that is currently being type-checked.A6How should highlighting be sent to the user interface?A Via stdout.ABoth via files and via stdout.ADatatype representing a single boundary condition: x_0 = u_0, ... ,x_n = u_n E t = ?n esADiscern Agda's primitive modules from other file modules. @IsPrimitiveModule implies" IsBuiltinModuleWithSafePostulate implies isBuiltinModule.AAny builtin module.ASafe module, e.g. Agda.Builtin.Equality.AVery magical module, e.g. Agda.Primitive.AMaps top-level module names to the corresponding source file ids.A8For printing, we couple a meta with its name suggestion.A+Polarity for equality and subtype checking.AantitoneAmonotoneBno information (mixed variance)BconstantBB6s must exist and be registered in our file dictionary.7AAAA9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBB 7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBB9 &B BBB BB BB--B B$+B&B#BB#B/ /"B5 5$B8 8$B9 9(B3 3$B6 6$B7 7$B4 4$B B %B  B BBBB"BBB- -BBBB BNone( #&'()+,/159<=>?'B Interpret B as relation on B.BDefault polarity is B.BB acts as , B as .BReturns $ if the constraint is contradictory.B.Comparison operator, e.g. for size expression.BD.B<.B= 0.B*Type of solution wanted for each flexible.B)What type of solution are we looking for?B,Assigning a polarity to a flexible variable.BFixed size variables i.B2The rigid variables contained in a pice of syntax.B*Size expressions appearing in constraints.BConstant number n.BMeta variable X + n.B Infinity D.BVariable plus offset i + n.BSize metas in size expressions.BDe Bruijn indices.BPartial substitution from flexible variables to size expression.BExecuting a substitution.B)Make offsets non-negative by rounding up.BOffsets + n must be non-negativeB-An equality which ignores the meta arguments.C*An order which ignores the meta arguments.CComparison operator is ordered B < B.CAdd offset to size expression.BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB 'B B B)-B!$!(BB> >B B! !B B4 4BB C 4C !C C C 2C%-C08C#C'.CCCCC!!C%CC C, , C C :C "C C# #C 8C CC!!"C C>>C C!!CC44CC (C/ /#C 5C C :C C C) )C C 9C9 9C 8C C 7C +C  C )C C C C CC& &C6 6CCC C 3C 0C 6C 1C 0C/:C:C C (C C %None. #&'()+,/1359<=>? j'CCreates an empty dictionary.CThe actual logic of C is cold code, so it's out-of-line, to decrease code size and avoid cache pollution.Cicode# only if thing has not seen before.CicodeN tag t a1 ... an serialises the arguments a1, ..., an of the constructor t together with a tag tag picked to disambiguate between different constructors. It corresponds to 0icodeNode . (tag :) =<< mapM icode [a1, ..., an]CicodeN' is the same as icodeN except that there is no tagCThrows an error which is suitable when the data stream is malformed.C(Computing a qualified names composed ID.CData.Binary.runGetState is deprecated in favour of runGetIncremental. Reimplementing it in terms of the new function. The new Decoder type contains strict byte strings so we need to be careful not to feed the entire lazy byte string to the decoder at once.CIncrease entry for a in C.Cvcase value ix decodes thing represented by  ix :: Word32 via the valu function and stores it in D. If ix is present in D, valu, is not used, but the thing is read from D instead.CState of the the encoder.CIf True collect in stats the quantities of calls to icode for each  Typeable a.CWritten to interface file. Dicitionaries which are not serialized, but provide short cuts to speed up serialization: Andreas, Makoto, AIM XXI Memoizing A.Name does not buy us much if we already memoize A.QName.CWritten to interface file.CWritten to interface file.CNot written to interface file.CWritten to interface file.CNot written to interface file. Fresh UIDs and reuse statistics:CWritten to interface file.CWritten to interface file.CStructure providing fresh identifiers for hash map and counting hash map hits (i.e. when no fresh identifier required).CNumber of hash map misses.CicodeArgs proxy (a1, ..., an) maps icode over a1, ..., an* and returns the corresponding list of Word32.C=Univeral memo structure, to introduce sharing during decodingCAssociation lists mapping TypeRep fingerprints to values. In some cases values with different types have the same serialized representation. This structure disambiguates them.C5Constructor tag (maybe omitted) and argument indices.DTwo +s are equal if their QNameId is equal.DMonad used by the decoder.TCM is not used because the associated overheads would make decoding slower.DMonad used by the encoder.DState of the decoder.DObtained from interface file.DThe include directories.DObtained from interface file.DObtained from interface file.D >D 5D +D 3D None( #&'()+,/159<=>? DInvariant for D hl%, parametrised by the invariant for hl.?Additionally the endofunction should be extensionally equal to (fs ʙ) for some list fs.DThe invariant for D.?Additionally the endofunction should be extensionally equal to (fs ʙ) for some list fs.DThe invariant for D.D4Conversion from classification of the scope checker.D A variant of ˙ with  set to .DInvariant for D.D#Conversion between different types.D'Highlighting info with delayed merging.Merging large sets of highlighting info repeatedly might be costly. The idea of this type is to accumulate small pieces of highlighting information, and then to merge them all at the end.>Note the invariant which values of this type should satisfy (D).DHighlighting information.>Note the invariant which values of this type should satisfy (D).This is a type synonym in order to make it easy to change to another representation.DA type that is intended to be used when constructing highlighting information.>Note the invariant which values of this type should satisfy (D).This is a type synonym in order to make it easy to change to another representation."The type should be an instance of < ,  and &, and there should be an instance of D D D.DSyntax highlighting information, represented by maps from positions to .,The first position in the file has number 1.DA limited kind of syntax highlighting information: a pair consisting of < and .Note the invariant which Ds should satisfy (D).̙Merges meta information.DDDDDD<<?DMark a computation as dirty.DMap a D( computation (monad transformer action).DRun a D0 computation, returning result plus change flag.DRun a D0 computation, returning result plus change flag.DBlindly run an updater.DBlindly run an updater.DReplace result of updating with original input if nothing has changed.DThe ChangeT monad transformer.DThe class of change monads.DLike , but preserving sharing.DLike  Bifunctor, but preserving sharing.͙Eval an updater (using D).D8A mock change monad. Always assume change has happened.ΙRun a D% computation, but ignore change flag.D-Mark computation as having changed something.D = sharing . updater1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD%%!D% %D2 2,D%#%(D D .D%6%?D%%D%*%4D* *#D D D D None) #&'()+,/159<=>?dD7Keep only elements greater or equal to the given pivot.DSubtract from each element.DDDDDDNone( #&'()+,/159<=>?ϙDDDDDDDD D2 2E "E 8E >E &E !E8 8!E E !None) #&'()+,/1359<=>?EProvided that the default value is a known boolean (in practice we only use True or False), we can collapse a potentially uninitialised value to a boolean.EFocus, overwriting E.EUpdate, but keep E! when new value is default value.EOnly modify non-E values.EThe main mode of operation of these flags, apart from setting them explicitly, is to toggle them one way or the other if they hadn't been set already.EWe don't want to have to remember for each flag whether its default value is True or False. So we bake it into the representation: the flag's type will mention its default value as a phantom parameter.E%The null value of 'WithDefault b' is E. EEEEEEEEE EEEEEEEEEE E$ $#E* *!ENone( #&'()+,/159<=>? EEEEEEEEEE EEEEEEEEEEE E%-E#EEE/:E E None) #&'()+,/159<=>?Йљҙәԙՙ֙יNone( #&'()+,/159<=>?8EThe version of Agda.EThis package name. This is mainly intended for use in the test suites to filter ephemeral hash-fingerprinted package names like !Agda-2.6.2-5ceeWeguf1QFMaHLput4zw.EReturns a URL corresponding to the given section in the documentation for the current version.EEEEEEE!.!5None+ #&'()+,/159<=>?E1Agda's version suffixed with the git commit hash.EInformation about current git commit, generated at compile time.EEEENone+ #&'()+,/159<=>?EGet the path to ~/.agda1 (system-specific). Can be overwritten by the AGDA_DIR environment variable./(This is not to be confused with the directory E for the data files that Agda needs (e.g. the primitive modules).)EThis overrides the E from ' Paths_Agda'#. See the documentation for the --print-agda-data-dir flag.EThis overrides the E from ' Paths_Agda'.EFalse: Check whether we need to setup Agda. This function can be called when starting up Agda.True.: force a setup e.g. when passing Agda option --setup.Copies the embedded data files to the designated data directory.ؙ Given the  Agda_datadir#, what should the Agda data dir be?ٙThe embedded contents of the Agda data directory, generated by Template Haskell at compile time.ڙSpit out the embedded files into Agda data directory relative to the given directory. Lock the directory while doing so.ۙ.Dump line of warning or information to stderr.EEEEEEEENone( #&'()+,/159<=>?: E2Tries to compile the Agda mode's Emacs Lisp files.EHelp topic for  --emacs-mode.EPrints out the path to the Agda mode's main file (using UTF-8 and without any trailing newline).E7Tries to set up the Agda mode in the given .emacs file.ܙ7Tries to find the user's .emacs file by querying Emacs.ݙ&Has the Agda mode already been set up?ޙIf this string occurs in the .emacs file, then it is assumed that setup has already been performed.ߙ2The string appended to the end of the .emacs file.Evaluates the given Elisp command using Emacs. The output of the command (whatever was written into the current buffer) is returned.Note: The input is not checked. The input is assumed to come from a trusted source.Like  but handles  by printing diagnostics (PATH ) before .Escapes the string so that Emacs can parse it as an Elisp string.A `monadic' version of @ partition# :: (a -> Bool) -> [a] -> ([a],[a])Command to run.Arguments to command.EEEEEEEEEEEEEEEENone( #&'()+,/159<=>?9EUsage information generationEConversion functions to stringsEInterface to the help functionEGeneral usage informationE)Specialised usage information about TOPICList of Help Topics NOTA BENE: You need to add each new topic together with its name to  allHelpTopicsEEEEEEEEEEEEE E& &EE&&E E( (EE&&None) #$&'()+,/159<=>?EAll builtin modules.E(Non-empty) library names to be resolved to (lists of) pathes.2Resolved pathes (no duplicates). Contains "." if  [LibName] does.8Candidate (initially: the directory Agda was called in).Actual root and  .agda-lib file for this project.Override the default  libraries file?Name of  libraries file for error reporting./Library files paired with their line number in  libraries.-Content of library files. (Might have empty LibNames.),EEEEEEEEEEEEEE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,EEEEEEEEEEEE;;;;;;;;;;;;;;;;E;;;;;;;;;;;;;;ENone) #&'()+,/1359<=>??E'The list should not contain duplicates.E--build-library+: Build all modules in the current library.E2In the absence of a path the project root is used.EUse ~/.agda/defaults.EConfigure colour output.E3Emacs mode administration (formerly done by the  agda-mode' executable). Accepted subcommands: locate, setup, compile. Can be given several times, subcommands are accumulated in the set.E%Exit if an interactive command fails.E --interaction mode.E Agda REPL (-I).E--interaction-json mode.EShould the top-level module only be scope-checked, and not type-checked?E Use this (if  ) instead of ~/.agda/libraries.E$Force Agda to self-setup at startup.E/Configure notifications about imported modules.EShould code points that are not supported by the locale be transliterated?E3Map names of trusted executables to absolute paths.E look for  .agda-lib files.E If several  --emacs-mode commands are given, they are executed in the order as given in this datatype.E Compile the .el files to .elc.E#Print the installation location of agda2.el.E Add the initialization lines to .emacs.FInfective or coinfective?F%Options which can be set in a pragma.FAllow running external  executables from meta programs.FAutomatic compile-time inlining for simple definitions (unless marked NOINLINE).F)Use call-by-name instead of call-by-need.F&Are the cohesion modalities available?FTreat the module given at the command line or via interaction as main module in compilation?F"Check confluence of rewrite rules?F(Allow definitions by copattern matching?FCount extended grapheme clusters rather than code points when generating LaTeX.F,Mark parameters of record modules as erased?FAllow matching in erased positions for single-constructor, non-indexed data/record types. (This kind of matching is always allowed for record types with -equality.)F+irrelevant levels, irrelevant data matchingF:Defer instance search based on discrimination tree resultsFUse the Agda abstract machine ( fastReduce)?FShould we speculatively unify function applications as if they were injective? Implies optRequireUniqueMetaSolutions.FCan we split on a  (@flat x : A) argument?F0Allow recursion on forced constructor arguments.F2Perform the forcing analysis on data constructors?FShould patterns of the form {x} or S x S be interpreted as puns?FShould every top-level module start with an implicit statement ,open import Agda.Primitive using (Set; Prop)?FShould case splitting and coverage checking try to discharge absurd clauses? Default: , but  might make coverage checking considerably faster in some cases.FDo not discard clauses constructed by the coverage checker (needed for some external backends).FShould case splitting replace variables with dot patterns (False) or keep them as variables (True).FAllow large indices, and large forced arguments in constructors.FShould we load the primitive modules at all? This is a stronger form of optImportSorts.F0Is pattern matching allowed in the current file?FCan we use modal polarities (++,  +, etc.)?F$Should system generated projections  ProjSystem0 be printed postfix (True) or prefix (False).F6Perform the projection-likeness analysis on functions?F?Should instance search consider instances with qualified names?FForbid non-unique meta solutions allowed. For instance from INJECTIVE_FOR_INFERENCE pragmas.F$Can rewrite rules be added and used?F'Save meta-variables to interface files.F'Show generalized parameters in Pi typesFShow identity substitutions when pretty-printing terms (i.e. always show all arguments of a metavariable).FShould the conversion checker use the syntactic equality shortcut?  means that it should.  n, for a non-negative number n/, means that syntactic equality checking gets n units of fuel. If the fuel becomes zero, then syntactic equality checking is turned off. The fuel counter is decreased in the failure continuation of .FCut off structural order comparison at some depth in termination checker?FOptions  --version and --numeric-version (last wins).FPrint Agda version number.FPrint Agda version information.F is used if no verbosity options have been given, thus making it possible to handle the default case relatively quickly. Note that  corresponds to a trie with verbosity level 1 for the empty path.FFFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF  # . #   # ! %  !     None( #&'()+,/159<=>?F?Returns the command line options which are currently in effect.F9Returns the pragma options which are currently in effect.FFFFF" "0# #2$ $2% %.& &/' '2( (1) )>None+ #&'()+,/1359<=>?(FChecks that the given options are consistent. Also makes adjustments (e.g. when one option implies another).FCommand line options of previous versions of Agda. Should not be listed in the usage info, put parsed by GetOpt for good error messaging.FSimple interface for Agda.Utils.GetOpt Could be moved to Agda.Utils.Options (does not exist yet)F"Infective and coinfective options. Note that  --cubical and --erased-cubical are "jointly infective": if one of them is used in one module, then one or the other must be used in all modules that depend on this module.GMap a function over the long options. Also removes the short options. Will be used to add the plugin name to the plugin options.GG is implied by G.GG is implied by G. G; is also implied by an explicitly given `--erased-matches`.GG requires G.GParse options for a plugin.G%Parse options from an options pragma.GThis function returns ! if the file should be rechecked.GUsed for printing usage info. Does not include the dead options.G+Removes RTS options from a list of options.G?H%Render an annotated, pretty-printing ument into a string suitable for printing on VT100-compatible terminals.HHHHNone( #&'()+,/159<=>?FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHFFFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFNone( #&'()+,/159<=>?HShow the attributes necessary to recover a modality, in long-form (e.g. using at-syntax rather than dots). For the default modality, the result is at- (rather than the empty document). Suitable for showing modalities outside of binders.'HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH.H (H H H H 5H H 1H H H H H H H 1H "H !H H H H H H H  H 1H H 'H H H((-H$$H++!H&&#H44H//H''H00H**"H11!H55H33)H,,(H%%-H--H..H))$H22#None( #&'()+,/159<=>? HConvert a split tree into a  (for printing).HTag for labeling branches of a split tree. Each branch is associated to either a constructor or a literal, or is a catchall branch (currently only used for splitting on a literal type).HAbstract case tree shape.HA split is necessary.HNo more splits coming. We are at a single, all-variable clause.HArg. no to split at.H+The number of variables bound in the clauseHSub split trees.H for root of split treeHSplit tree branching. A finite map from constructor names to splittrees A list representation seems appropriate, since we are expecting not so many constructors per data type, and there is no need for random access.HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH55HH55#H#H22H H 1H H H +H55HH H +H /H5 5H H2 2None( #&'()+,/159<=>?  H Lens for  in I.HTarget argument position of a part (Nothing if it is not a hole).HIs the part a hole?IIs the part a binder?IIs the hole a binder?ICheck if a notation contains any lambdas (in which case it cannot be used in a pattern).IMerges Is that have the same precedence level and notation, with two exceptions:Operators and notations coming from syntax declarations are kept separate.If all instances of a given I have the same precedence level or are "unrelated", then they are merged. They get the given precedence level, if any, and otherwise they become unrelated (but related to each other).If Is that are merged have distinct associativities, then they get  as their associativity.Precondition: No 1 may occur in more than one list element. Every I must have the same I.Postcondition: No & occurs in more than one list element.I2From notation with names to notation with indices.An example (with some parts of the code omitted): The lists &["for", "x", "D", "xs", "return", "e"] and [I ("x" :| []) "e", I "xs"]- are mapped to the following notation:  [  "for" ,  ( 0 0) ,  "D" ,  1 ,  "return" ,  0 ] IIf an operator has no specific notation, then it is computed from its name.I'Converts a notation to a (non-)section.IFor non-sectioned operators this should match the notation's I.IEffective precedence level.  for closed notations.'HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII'IIIIIIIHHIIIIIIIIIIIIIIIIIIIIIIHIIIIIIIIIIII  I I I  I I I  III None) #&'()+,/1359<=>?# IParses a split-up, unqualified name consisting of at least two name parts.The parser does not check that underscores and other name parts alternate. The range of the resulting name is the range of the first name part that is not an underscore.I0Parse the "operator part" of the given notation.Normal holes (but not binders) at the beginning and end are ignored.If the notation does not contain any binders, then a section notation is allowed.IRuns a parser. If sections should be parsed, then identifiers with at least two name parts are split up into multiple tokens, using  to record the tokens' original positions within their respective identifiers.I)Parse a specific identifier as a NamePartI,Parses a potentially pattern-matching binderIThe & is possibly ambiguous, but it must correspond to one of the names in the set.IA singleton type for I (except for the constructor I).I"Used to define the return type of I.IShould sections be parsed?"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII I +I I INone( #&'()+,/159<=>? IOne clause in a function definition. There is no guarantee that the 7 actually declares the &#. We will have to check that later.I$The kind of the forward declaration.IName of a data typeIName of a function.IName of a record typeINumbering declarations in an interleaved mutual block.Iwe are nicifying a mutual blockI,we are nicifying decls not in a mutual blockIIn an inferred mutual block we keep accumulating nice declarations until all of the lone signatures have an attached definition. The type is therefore a bit span-like: we return an initial segment (the inferred mutual block) together with leftovers.I.Constructors associated to the data signature.I&Internal number of the data signature.IThe data signature.I6Function clauses associated to the function signature.IIn an `interleaved mutual' block we collect the data signatures, function signatures, as well as their associated constructors and function clauses respectively. Each signature is given a position in the block (from 0 onwards) and each set of constructor / clauses is given a *distinct* one. This allows for interleaved forward declarations similar to what one gets in a new-style mutual block.ISeveral declarations expect only type signatures as sub-declarations. These are:I constructor, in interleaved mutual.Jdata ... where=. Here we got a bad error message for Agda-2.5 (Issue 1698).Jfield. Ensured by parser.Jinstance. Actually, here all kinds of sub-declarations are allowed a priori.J  postulateJ primitive. Ensured by parser.J1Termination measure is, for now, a variable name.JWhen processing a mutual block we collect the various checks present in the block before combining them.JOnly Js.JThe nice declarations. No fixity declarations and function definitions are contained in a single constructor instead of spread out between type signatures and clauses. The private,  postulate, abstract and instance modifiers have been distributed to the individual declarations. Observe the order of components:Range Fixity' Access IsAbstract IsInstance TerminationCheck PositivityCheckfurther attributes(Q)Namecontent (Expr, Declaration ...)J: argument: We record whether a declaration was made in an abstract block. argument: Axioms and functions can be declared irrelevant. ( should be .)JBlock of function clauses (we have seen the type signature before). The 6s are the original declarations that were processed into this J and are only used in notSoNiceDeclaration9. Andreas, 2017-01-01: Because of issue #2372, we add 6 here. An alias should know that it is an instance.JAn uncategorized function clause, could be a function clause without type signature or a pattern lhs (e.g. for irrefutable let). The 6 is the actual 7.J (Maybe Range) gives range of the  'pattern' declaration.JOnly Js.IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJIIJJJJJIIIIIIIIIIIIIIIIIIIIJJJJJIIIIIIIIIIIIIIIIIJ JJ JJJ#JJ "J J J J J J JJ J  JJ JJJ None( #&'()+,/159<=>?4JThe name of the error.J(Nicifier warnings turned into errors in --safe mode.JPragmas not allowed in --safe mode produce an J.J-Exception with internal source code callstackJThe exception type.JIn an interleaved mutual block, a constructor could belong to any of the data signatures (&)JIn a mutual block, a clause could belong to any of the D2 type signatures (&).JA declaration that breaks an implicit mutual block (named by the String argument) was present while the given lone type signatures were still without their definitions.J9In a mutual block, all or none need a MEASURE pragma. 8 is the one of the offending pragma or the mutual block.Jopaque block nested in a mutual; block. This can never happen, even with reordering. The  is the one of the opaque keyword.JAn unfolding declaration was not the first declaration contained in an opaque block.J-Non-fatal errors encountered in the Nicifier.JEmpty abstract block.JEmpty  data _ where block.JEmpty field block.JEmpty variable block.JEmpty instance blockJEmpty macro block.JEmpty mutual block.J'POLARITY pragma without any polarities.JEmpty  postulate block.JEmpty  primitive block.JEmpty private block.JA  identifier in a variable declaration. Hiding has no effect there as generalized variables are always hidden (or instance variables).JA {-# CATCHALL #-} pragma that does not precede a function clause.JInvalid constructor block (not inside an interleaved mutual block)JA {-# NON_COVERING #-} pragma that does not apply to any function.JA {-# NO_POSITIVITY_CHECK #-} pragma that does not apply to any data or record type.JA {-# NO_UNIVERSE_CHECK #-} pragma that does not apply to a data or record type.JA {-# TERMINATING #-} and {-# NON_TERMINATING #-} pragma that does not apply to any function.JA data definition without a data signature.J9Declarations (e.g. type signatures) without a definition.Jabstract has no effect on open or import%. (But the user might think so.)  is the range of the open or import declaration.  is the range of the abstract keyword.Jprivate has no effect on open (import) public%. (But the user might think so.)  is the range of the  open public or open import public declaration. The first  is the range of the public keyword. The second  is the range of the private keyword.JCOMPILE& pragmas are not allowed in safe mode.JPragma {-# NO_TERMINATION_CHECK #-} has been replaced by {-# TERMINATING #-} and {-# NON_TERMINATING #-}.JETA" pragma is unsafe.J INJECTIVE pragma is unsafe.J NON_COVERING pragma is unsafe.JNO_POSITIVITY_CHECK pragma is unsafe.JNO_UNIVERSE_CHECK pragma is unsafe.JNON_TERMINATING pragma is unsafe.JPOLARITY pragma is unsafe.J TERMINATING pragma is unsafe.J7Public mixfix identifiers without a fixity declaration.Kabstract6 block with nothing that can (newly) be made abstract.Kinstance8 block with nothing that can (newly) become an instance.Kmacro3 block with nothing that can (newly) be made macro.Kprivate5 block with nothing that can (newly) be made private.Kopen or importKimport or  open import.Kopen.JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKJJJJJK")K K==KKKK 'K (K %K &K &K #K $K K &K #K $K K==KK K None( #&'()+,/159<=>? ~ KAdding a lone signature to the state. Return the name (which is made unique if %).KEnsure that all forward declarations have been given a definition, raising an error indicating *why* they would have had to have been defined.KLens for field K.KEnsure that all forward declarations have been given a definition.K"Search for forward type signature.KGet universe check pragma from a data/rec signature. Defaults to .KInitial nicifier state.K?Get names of lone function signatures, plus their unique names.KLens for field K.K Create a K map from an association list.KAdd a new warning.K4Check that no lone signatures are left in the state.K>Get current catchall pragma, and reset it for the next clause.KLens for field K.K'Remove a lone signature from the state.KRun a Nicifier computation, return result and warnings (in chronological order).KLens for field K.KLens for field K.KIf %!, this name can have a different  than the key of K pointing to it.KNicifier monad. Preserve the state when throwing an exception.KNicifier parameters.KAre we checking a where module?KWe are in a module declared --safe which is not a builtin module.KNicifier state.K.Catchall pragma waiting for a function clause.K)Coverage pragma waiting for a definition.K4Lone type signatures that wait for their definition.KWe distinguish different &&s (anonymous definitions) by a unique .K4Positivity checking pragma waiting for a definition.K5Termination checking pragma waiting for a definition.KUniverse checking pragma waiting for a data/rec signature or definition.K(Stack of warnings. Head is last warning.KWe retain the & also in the codomain since & as a key is up to Eq Name which ignores the range. However, without range names are not unique in case the user gives a second definition of the same name. This causes then problems in  replaceSigs, which might replace the wrong signature.Another reason is that we want to distinguish different occurrences of &) in a mutual block (issue #4157). The &$ in the codomain will have a unique .K(Stack of warnings. Head is last warning.6KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK6KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK"""K""K#9#K"$")K##!K###7K, ,!K None( #&'()+,/159<=>?KMain. Fixities (or more precisely syntax declarations) are needed when grouping function clauses.KHas the J a field of type ?K(Approximately) convert a J back to a list of 6s.KContents of a where& clause are abstract if the parent is.These are inherited 60 blocks, indicated by an empty range for the abstract keyword.Make a declaration abstract.Mark computation as D if there was a declaration that could be made abstract. If no abstraction is taking place, we want to complain about K."Alternatively, we could only flag D7 if a non-abstract thing was abstracted. Then, nested abstract+s would sometimes also be complained about.Make a declaration private.*Andreas, 2012-11-17: Mark computation as D if there was a declaration that could be privatized. If no privatization is taking place, we want to complain about K."Alternatively, we could only flag D6 if a non-private thing was privatized. Then, nested private+s would sometimes also be complained about.Check that declarations in a mutual block are consistently equipped with MEASURE pragmas, or whether there is a NO_TERMINATION_CHECK pragma. Replace (DataRecFun)Sigs with Axioms for postulated names The first argument is a list of axioms only.Range of the keyword abstract. Range of the private keyword.Origin of the private block.(Lone signatures to be turned into AxiomsDeclarations containing them+In the output, everything should be definedKKKJJKJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKJKKKKKKKKKJJK K K !K ,K &K "K &K #K K K *K %K !KNone( #&'()+,/159<=>?K#Concrete syntax for all attributes.K(Parsing an expression into an attribute.KModifiers for .KModifiers for Polarity.KModifiers for .KModifiers for .K!Setting an attribute (in e.g. an ). Overwrites previous value.KSetting some attributes in left-to-right order. Blindly overwrites previous settings.K'Setting an unset attribute (to e.g. an ).K#Setting a list of unset attributes.KSetting  if unset.KSetting  if unset.KSetting  if unset.KSetting  if unset.LSetting  if unset.L#Parsing a string into an attribute.LParsed attribute.L5Concrete, user written attribute for error reporting.LRange includes the @.LParsed attribute.LAn attribute is a modifier for .LInformation about attributes (attribute, range, printed representation).This information is returned by the parser. Code that calls the parser should, if appropriate, complain if support for the given attributes has not been enabled. This can be taken care of by , which should not be called until after pragma options have been set.L(Conjunctive constraint.)%KKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLL%LLLLLLLLLLLLLKKKLKKKLKKKLKKKKKKKKKKKLL L' 'L L9 9L L0 0LL% %None( #&'()+,/159<=>?9LThe default flags.LThe parse interval is between the last position and the current position.LConstructs the initial state of the parser. The string argument is the input string, the file path is only there because it's part of a position.LFor lexical errors we want to report the current position as the site of the error, whereas for parse errors the previous position is the one we're interested in (since this will be the position of the token we just lexed). This function does L the current position.L.The most general way of parsing a string. The Agda.Syntax.Parser; will define more specialised functions that supply the L and the L.L,Throw a parse error at the current position.LUse L or L as appropriate.LFake a parse error at the specified position. Used, for instance, when lexing nested comments, which when failing will always fail at the end of the file. A more informative position is the beginning of the failing comment.L3Report a parse error at the beginning of the given .LParses a string as if it were the contents of the given file Useful for integrating preprocessors.L.The even more general way of parsing a string.LRecords a warning.L5When we see a layout keyword, by default we expect a L block.L Return the current layout block.LA (layout) column.LWe need to keep track of the context to do layout. The context specifies the indentation columns of the open layout blocks. See Agda.Syntax.Parser.Layout for more informaton.LLayout at specified L, introduced by -.LThe stack of layout blocks..When we encounter a layout keyword, we push a L block with noColumn. This is replaced by aproper column once we reach the next token.L=Status of a layout column (see #1145). A layout column is L until we encounter a new line. This allows stacking of layout keywords. Inside a  LayoutContext the sequence of L columns needs to be strictly increasing. 'Tentative columns between L3 columns need to be strictly increasing as well.LWe have seen a new line since the layout keyword and the layout column has not been superseded by a smaller column.LThe token defining the layout column was on the same line as the layout keyword and we have not seen a new line yet.L:For context sensitive lexing alex provides what is called  start codes in the Alex documentation. It is really an integer representing the state of the lexer, so we call it LexState instead.L,Parse errors: what you get if parsing fails.L'Parse errors that concern a whole file.L,Parse errors that concern a range in a file.L4Errors that arise at a specific position in the fileLThe remaining input.L*Hopefully an explanation of what happened.L"The file which the error concerns.LWhere the error occurred.LThe previous token.L)The range of the bigger overlapping tokenL%The file in which the error occurred.L Parser flags.L/Should comment tokens be returned by the lexer?L The result of parsing something.LThe parser state. Contains everything the parser and the lexer could ever need.LEvery encountered attribute.Lparametrization of the parserLthe current inputLposition of last tokenL'the keyword for the coming layout blockL%the status of the coming layout blockLthe stack of layout blocksLthe state of the lexer (states can be nested so we need a stack)L"position at current input locationLthe character before the inputLthe previous tokenLIn reverse order.LWarnings for parsing.LMultiple attributes.L,Parse errors that concern a range in a file.LUnsupported attribute.L)The range of the bigger overlapping tokenLThe parse monad.L'Does not include printing of the range.Old interface to parser.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL==!L= =LL L L==L=#=(L=*=?L L L L LLL L L LL None( #&'()+,/159<=>?LConjunction of Ms.LDisjunction of Ms.L'Returns the next byte, and updates the M value.A trick is used to handle the fact that there are more than 256 Unicode code points. The function translates characters to bytes in the following way:Whitespace characters other than '\t' and '\n' are translated to ' '.8Non-ASCII alphabetical characters are translated to 'z'.;Other non-ASCII printable characters are translated to '+'.&Everything else is translated to '\1'.Note that it is important that there are no keywords containing 'z', '+', ' ' or '\1'.*This function is used by Alex (version 3).L,Returns the next character, and updates the M value.This function is not suitable for use by Alex 2, because it can return non-ASCII characters.L,Get the previously lexed character. Same as M. Alex needs this to be defined to handle "patterns with a left-context".L A lens for M.L Negation of Ms.M#This is what the lexer manipulates.MCurrent input.MCurrent position.MPreviously read character.MFile.MIn the lexer, regular expressions are associated with lex actions who's task it is to construct the tokens.MSometimes regular expressions aren't enough. Alex provides a way to do arbitrary computations to see if the input matches. This is done with a lex predicate.LLLLLLLLMMMMMMMMMMMMMMMMMMMMLLLLMMMMLLLMMMLMM M M M )None( #&'()+,/159<=>? M!Consume the next character. Does M followed by M.M$Get the current look-ahead position.MLift a computation in the L monad to the M monad.M8Throw an error message according to the supplied method.MDo a case on the current input string. If any of the given strings match we move past it and execute the corresponding action. If no string matches, we execute a default action, advancing the input one character. This function only affects the look-ahead position.MSame as M but takes the initial character from the first argument instead of reading it from the input. Consequently, in the default case the input is not advanced.MLook at the next character. Fails if there are no more characters.M-Undo look-ahead. Restores the input from the L.MRun a M7 computation. The first argument is the error function.MSet the look-ahead position.MConsume all the characters up to the current look-ahead position.MThe LookAhead monad is basically a state monad keeping with an extra M, wrapped around the L monad.#Look at the next character. Return ! if there are no more characters. MMMMMMMMMMMM MMMMMMMMMMMMM))#M))M)%)*None( #&'()+,/159<=>? MLex a character literal. Assumes that a single quote has been lexed. A character literal is lexed in exactly the same way as a string literal. Only before returning the token do we check that the lexed string is of length 1. This is maybe not the most efficient way of doing things, but on the other hand it will only be inefficient if there is a lexical error.MLex a string literal. Assumes that a double quote has been lexed.Custom error function.The general function to lex a string or character literal token. The character argument is the delimiter (" for strings and ' for characters).This is where the work happens. The string argument is an accumulating parameter for the string being lexed.A string gap consists of whitespace (possibly including line breaks) enclosed in backslashes. The gap is not part of the resulting string.Lex a single character.?Lex an escaped character. Assumes the backslash has been lexed.$Read a number in the specified base.Same as $ but with an accumulating parameter.šThe escape codes.MMMMNone( #&'()+,/159<=>?M Lex a hole ( {! ... !}#). Holes can be nested. Returns . ..M Should comment tokens be output?M Should comment tokens be output?M,Manually lexing a block comment. Assumes an  open comment< has been lexed. In the end the comment is discarded and M" is called to lex a real token.MSkip a block of text enclosed by the given open and close strings. Assumes the first open string has been consumed. Open-close pairs may be nested.MMMMMMMMMMNone* #&'()+,/159<=>? M3This is the main lexing function generated by Alex.MThis state is entered at the beginning of each line. You can't lex anything in this state, and to exit you have to check the layout rule. Done with M.MWe enter this state from M when the token following a layout keyword is to the left of (or at the same column as) the current layout context. Example: )data Empty : Set where foo : Empty -> Nat(Here the second line is not part of the where8 clause since it is has the same indentation as the data definition. What we have to do is insert an empty layout block {} after the where;. The only thing that can happen in this state is that M is executed, generating the closing brace. The open brace is generated when entering by M.MThis state can only be entered by the parser. In this state you can only lex the keywords using, hiding, renaming and to. Moreover they are only keywords in this particular state. The lexer will never enter this state by itself, that has to be done in the parser.M8The layout state. Entered when we see a layout keyword (M$) and exited at the next token (M).MReturn the next token. This is the function used by Happy in the parser.  lexer k = M >>= kMThis is the initial state for parsing a regular, non-literate file.ÚThe state inside a FOREIGN pragma. This needs to be different so that we don't lex further strings as pragma keywords.Ě&Do not use this function; it sets the L to Ś.ƚThe state inside a pragma. MMMMMMMMMMMMM MMMMMMMMMMMMMNone) #&'()+,/159<=>?0M.Prepend some parser manipulation to an action.M.Enter a new state without consuming any input.M/Enter a new state and perform the given action.M3Enter a new state throwing away the current lexeme.M4Exit the current state and perform the given action.M8Exit the current state throwing away the current lexeme.M&True if we are at the end of the file.MTrue when the given character is the next character of the input string.M7Parse an identifier. Identifiers can be qualified (see Name). Example:  Foo.Bar.fM?!MAt a new line, we confirm either existing tentative layout columns, or, if the last token was a layout keyword, the expected new layout column.M&This action is only executed from the / state. It will exit this state, enter the  state, and return a virtual close brace (closing the empty layout block started by M).M? "M+Converts lambda bindings to typed bindings.M%Apply an attribute to thing (usually ). This will fail if one of the attributes is already set in the thing to something else than the default value.M&Apply some attributes to some binders.M#Apply attributes to thing (usually ). Expects a reversed list of attributes. This will fail if one of the attributes is already set in the thing to something else than the default value.MBuild a with-blockMBuild a with-statementMReport a parse error if two attributes in the list are of the same kind, thus, present conflicting information.MBuild a do-statementMReport an attribute as conflicting (e.g., with an already set value).MReport attributes as conflicting (e.g., with each other). Precondition: List not emtpy.MInterpret an expression as a list of names and (not parsed yet) as-patternsM0Match a pattern-matching "assignment" statement p <- eM)Turn an expression into a left hand side.MTurn an expression into a name. Fails if the expression is not a valid identifier.MTurn an expression into a pattern. Fails if the expression is not a valid pattern.MConstructs extended lambdas.M&Constructs extended or absurd lambdas.MInsert a top-level module if there is none. Also fix-up for the case the declarations in the top-level module are not indented (this is allowed as a special case).M'Build a forall pi (forall x y z -> ...)M$Get the tactic attribute if present.MWhen given expression is e1 = e2, turn it into a named expression. Call this inside an implicit argument {e} or {{e}}, where an equality must be a named argument (rather than a cubical partial match).MCreate a name from a stringMCreate a name from a string. The boolean indicates whether a part of the name can be token  constructor.M.Create a qualified name from a list of stringsNCreate a name from a string. The boolean indicates whether a part of the name can be token  constructor.NReturns the value of the first erasure attribute, if any, or else the default value of type .Raises warnings for all attributes except for erasure attributes, and for multiple erasure attributes.NPolarity parser.NCreate a qualified name from a string (used in pragmas). Range of each name component is range of whole string. TODO: precise ranges!N$Set the tactic attribute of a binderNGrab leading OPTIONS pragmas.NParse an attribute.NResult of parsing LamBinds.N,Followed by possibly a final absurd pattern.N=A number of domain-free or typed bindings or record patterns.M Can contain tactic attribute.If the attributes to be set are not at default value here, crash.Binders to apply attributes to. Binders with attributes applied.M#The range of the lambda symbol and where or the braces. The attributes in reverse order.The clauses in reverse order.MThe range of the lambda symbol.!The attributes, in reverse order.M Possibly empty list of patterns.N!The attributes, in reverse order.MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNMMNMMMMMNMNNMNNNNNMMMMNMMMMMMMMMMMMMMMMMNMMNNNNMNMMMMMMMNMMMNMMMMNMNN None- #&'()+,/159<=>?N3Parse an expression. Could be used in interactions.NParse an expression followed by a where clause. Could be used in interactions.NParse a module.N1Parse the token stream. Used by the TeX compiler.ΚParse a display pragma.ϚRequired by Happy.Κ"Range of the whole DISPLAY pragma./Start of the name the thing we want to display.The DISPLAY pragma content.NNNNNNNNNNNNN None( #&'()+,/159<=>?NExtensions supported by N.NParses an expression.N0Parses an expression followed by a where clause.NParses an expression or some other content of an interaction hole.NParses a module name.NParses a module.NParse without top-level layout.N'Returns the contents of the given file.NRun a N computation, returning a list of warnings in first-to-last order and either a parse error or the parsed thing.N3Gives the parsed token stream (including comments).N/A monad for handling parse errors and warnings.NWrapped Parser type.КDo not keep comments in the token stream generated by the lexer.њ/Initial state for lexing with top-level layout.ҚAdd a L.ӚEmbed a L as N computation.ԚInitial state for lexing.՚Parse with top-level layout.֚Parse with top-level layout.ךParse with top-level layout.ؚ9Keep comments in the token stream generated by the lexer.N The file.)The file contents. Note that the file is not read from disk.՚Name of source file.Parser to use.Contents of source file.ٚ The file.)The file contents. Note that the file is not read from disk.#NNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLL#NNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLNNNNN::"N::N;;#N:$:)N:+:2N;%;>None( #&'()+,/159<=>?%NPattern synonym for regular N.N$The name defined by the given axiom.3Precondition: The declaration has to be a (scoped) N.N+The clause spine corresponding to a clause.N5The declaration spine corresponding to a declaration.NSmart constructor for O.N=The right-hand side spine corresponding to a right-hand side.NThe spine corresponding to a P value.NAre we in an abstract block?)In that case some definition is abstract.NRecord field assignment f = e.NA name in a binding position: we also compare the nameConcrete when comparing the binders for equality.With  --caching on we compare abstract syntax to determine if we can reuse previous typechecking results: during that comparison two names can have the same nameId but be semantically different, e.g. in  {_ : A} -> .. vs.  {r : A} -> ...NWe could throw away where0 clauses at this point and translate them to let,. It's not obvious how to remember that the let was really a where6 clause though, so for the time being we keep it here.NOnly in with-clauses where we inherit some already checked patterns from the parent. These live in the context of the parent clause left-hand side.NClause spines.NWe don't yet know the position of generalized parameters from the data sig, so we keep these in a set on the side.NThe ImportDirective is for highlighting purposes.N3Type signature (can be irrelevant, but not hidden).The fourth argument contains an optional assignment of polarities to arguments.Nlone data signatureN record fieldNsequence of function clausesNThe first argument is the (possibly empty) set of generalizable variables used in the type.NThe ImportDirective is for highlighting purposes.N)a bunch of mutually recursive definitionsNOnly for highlighting purposesNprimitive functionNThe P' gives the constructor type telescope, (x1 : A1)..(xn : An) -> Dummy, and the optional name is the constructor's name. The optional  is for the pattern attribute.Nlone record signatureNscope annotationN(Only for highlighting the unfolded namesNDeclaration spines. Used in debugging to make it easy to see where constructors such as N and N are placed.OExpressions after scope checking (operators parsed, names resolved).O() or {}.OOrdinary (binary) application.OConstructor (overloaded).OConstant: axiom, function, data or record type, with a possible suffix.O For printing DontCare from Syntax.Internal.O.e, for postfix projection.ONon-dependent function space.O(Like a Pi, but the ordering is not knownO bs C e.O let bs in e.OLiteral.OMacro.OPattern synonym.ODependent function space  C A.OProjection (overloaded).O&Meta variable for interaction. The " is usually identical with the @ of @. However, if you want to print an interaction meta as just ? instead of ?n, you should set the @ to  while keeping the .OQuote an identifier +.O Quote a term.ORecord construction. The  is for the record kewyword.ORecord update. The  is for the record kewyword.OScope annotation.O=Meta variable for hidden argument (must be inferred locally).O#The splicing construct: unquote ...OBound variable.OWith application.OMaps generalize variables to the corresponding bound variable (to be introduced by the generalisation).OThe lhs of a clause in focused (projection-application) view (outside-in). Projection patters are represented as Os.O Copatterns.ORange.OThe lhs in projection-application and with-pattern view. Parameterised over the type e of dot patterns.O&The head applied to ordinary patterns.O Projection.OWith patterns.OHead f.ORecord projection identifier.OMain argument of projection.O E.g. the O.OApplied to patterns ps.OApplied to with patterns | p1 | ... | pn*. These patterns are not prefixed with WithP!O0A lambda binding is either domain free or typed.O. x or {x} or .x or {x = y} or x@p or (p)O. (xs:e) or {xs:e} or (let Ds)OBindings that are valid in a let.O*LetApply mi newM (oldM args) renamings dir. The ImportDirective is for highlighting purposes.O5Function declarations in a let with no matching body.O LetBind info rel name type defnO,only for highlighting and abstractToConcreteOIrrefutable pattern binding.O  M {{...}}O tel. M args : applies M to args and abstracts tel.OTurn a name into an expression.O,Parameterised over the type of dot patterns.O%Defined pattern: function definition f ps. It is also abused to convert destructor patterns into concrete syntax thus, we put AmbiguousQName here as well.O Dot pattern .eODestructor pattern d.OUnderscore pattern entered by user. Or generated at type checking for implicit arguments.O| p, for with-patterns.OBuiltins that do not come with a definition, but declare a name for an Agda concept.O? is not ?:. Name can be ambiguous e.g. for built-in constructors.O:For coinductive records, use pragma instead of regular  eta-equality, definition (as it is might make Agda loop).O0Mark the definition as not being projection-likeO7If the definition is an instance, set its overlap mode.O"Range is range of REWRITE keyword.OA user pattern together with an internal term that it should be equal to after splitting is complete. Special cases: * User pattern is a variable but internal term isn't: this will be turned into an as pattern. * User pattern is a dot pattern: this pattern won't trigger any splitting but will be checked for equality after all splitting is complete and as patterns have been bound. * User pattern is an absurd pattern: emptiness of the type will be checked after splitting is complete. * User pattern is an annotated wildcard: type annotation will be checked after splitting is complete.PThe +" is the name of the with function.PThe +s are the names of the generated with functions, one for each O.PThe RHS should not be another  RewriteRHS.PThe patterns stripped by with-desugaring. These are only present if this rewrite follows a with.P&The where clauses are attached to the  RewriteRHS byPWe store the original concrete expression in case we have to reproduce it during interactive case splitting.  for internally generated rhss.PRight-hand side spines.P How did we get our hands on the +% for the constructor of this record?PWe made it up.PThe user wrote it.PRenaming (generic).PThe lhs of a clause in spine view (inside-out). Projection patterns are contained in  spLhsPats, represented as ProjP d.P!Name of function we are defining.PRange.P3Elimination by pattern, projections, with-patterns.PTypes are just expressions. Use this type synonym for hinting that an expression should be a type.POnly Ns.PA typed binding. Appears in dependent function spaces, typed lambdas, and telescopes. It might be tempting to simplify this to only bind a single name at a time, and translate, say,  (x y : A) to (x : A)(y : A) before type-checking. However, this would be slightly problematic: $We would have to typecheck the type A several times.If A contains a meta variable or hole, it would be duplicated by such a translation.While 1. is only slightly inefficient, 2. would be an outright bug. Duplicating A could not be done naively, we would have to make sure that the metas of the copy are aliases of the metas of the original.PAs in telescope  (x y z : A) or type (x y z : A) -> B.PE.g.  (let x = e) or  (let open M).PExtra information that is attached to a typed binding, that plays a role during type checking but strictly speaking is not part of the  name : type&" relation which a makes up a binding.PDoes this binding correspond to a Partial binder, rather than to a Pi binder? Must be present here to be reflected into abstract syntax later (and to be printed to the user later).P+Does this binding have a tactic annotation?Pis it an ordinary unnamed where?PThe declaration is a N.PSpines corresponding to P values.PDoes not compare ? fields.PDoes not compare ? fields. Does not distinguish between prefix and postfix projections.PIgnore  when comparing Os.PIgnore P when comparing Os.QTurn an > into an expression.QTurn a ? into an expression.Assumes name is not ?.NThing to insert (wildcard).6Range of the whole pattern synonym expression/pattern.PPPP7>PPPPPPPPP P::P ,P ,P P P P P P P P P P P $P P P::&P .P .Q !Q Q Q 'Q Q /Q Q Q %Q /Q Q Q !Q !Q Q Q  Q $Q %Q Q !Q:2:8Q (Q ,Q Q Q Q $Q Q )Q Q Q "Q )Q Q Q Q Q Q Q Q !Q "Q !Q !Q Q  Q Q Q:(:0Q Q: :QQ Q QQ Q Q Q Q Q Q Q Q Q Q QQ Q QQQ Q Q QQ Q *Q >Q Q 7Q &Q ,Q Q Q 1Q ,Q 8Q,7Q(3Q&1Q&1Q None( #&'()+,/159<=>?J Q-Gather applications to expose head and spine.Note: everything is an application, possibly of itself to 0 argumentsQGather top-level O%atterns to expose underlying pattern.QRemove O wrappers everywhere.!NB: Unless the implementation of Q for clauses has been finished, this does not work for clauses yet.Q Remove top O wrappers.Q-Extracts "all" names which are declared in a N.Includes: local modules and where clauses. Excludes:  open public, let, with" function names, extended lambdas.QApply an expression rewriting to every subexpression, inside-out. See Agda.Syntax.Internal.Generic.QThe first expression is pre-traversal, the second one post-traversal.QCollects plain lambdas.QCollect A.Pis.QQRRR!QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ&QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRQQQQ1R 2R R #R R ?R .R 4R 9R 4R R R (R R )R R (R R ,R  R R ;R R 5R &R R -R R R $R -R R *R $R R ,R *R R R +R R R 5R 5R R #R R $R /R None( #&'()+,/159<=>?RAll names used in an abstract expression. This is used when rendering clauses to figure out which (implicit) pattern variables must be preserved. For example, the for  f : Nat C Nat, the clause  f {n} = 0 can be printed as f = 0 (dropping the n), but  f {n} = n must preserve the n.R9Bound names in first argument scope over second argument.ښBound names in first argument do *not* scope over second argument.ۚRRR" ""R 0R R :R (R 8R R R =R R 5R !R !R ,R 2R (R !R 4R 2R 5R R R R #R %None( #&'()+,/159<=>?R.Match an expression against a pattern synonym.R*Match a pattern against a pattern synonym.RMerge a list of pattern synonym definitions. Fails unless all definitions have the same shape (i.e. equal up to renaming of variables and constructor names).RRRRRRNone( #&'()+,/159<=>? "RCheck if any user-written pattern variables occur more than once, and throw the given error if they do.R4Check if a pattern contains a specific (sub)pattern.RCheck if a pattern contains an absurd pattern. For instance, suc () , does so.+Precondition: contains no pattern synonyms.R)Check if a pattern contains an @-pattern.RCompute from each subpattern a value and collect them all in a monoid.RCombine a pattern and the value computed from its subpatterns.Rpre : Modification before recursion.post: Modification after recursion.RRRR)RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR-RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR 0R =S ,S 2S 4S #S S S 'S !S .S1 1 S S 8S >S S ?>SDemand an exact string.S#Initial auxiliary interaction stateSAn S parser.6If the parse fails, then an error message is returned.SConverter from the type of ܚ to T The first paramter is part of the error message in case the parse fails.SIOTCM commands.SA generalised command type.S A command.SStop processing commands.S8An error message for a command that could not be parsed.SCommand queues.SWhen this variable is set to Just n an attempt is made to abort all commands with a command number that is at most n.SCommands that should be processed, in the order in which they should be processed. Each command is associated with a number, and the numbers are strictly increasing. Abort commands are not put on this queue.S.Auxiliary state of an interactive computation.SThe command queue.*This queue should only be manipulated by initialiseCommandQueue and  maybeAbort.SWe remember (the scope of) old interaction points to make it possible to parse and compute highlighting information for the expression that it got replaced by.S*Reset the options on each reload to these.SThe file which the state applies to. Only stored if the module was successfully type checked (potentially with warnings).SThe interaction points of the buffer, in the order in which they appear in the buffer. The interaction points are recorded in  theTCState, but when new interaction points are added by give or refine Agda does not ensure that the ranges of later interaction points are updated.SAvailable backends.S*Information about the current main module.S0The arguments to Agda used for loading the file.S7The top-level module name of the currently loaded file.S+The file currently loaded into interaction.S;The modification time stamp of the file when it was loaded.SIOTCM commands.The commands are obtained by applying the functions to the current top-level module name, if any. Note that the top-level module name is not used by independent commands. For other commands the top-level module name should be known.SAn interactive computation.SAbort the current computation..Does nothing if no computation is in progress.SSolve (all goals / the goal at point) by using Mimer proof search.S'Custom hole-level command for backends.S&Custom top-level command for backends.Scmd_compile b m argv compiles the module in file m using the backend b, using argv as the command-line options.SParse and type check the given expression (as if it were defined at the top-level of the current module) and normalise it.SGrabs the current goal's type and checks the expression in the hole against it. Returns the elaborated term.SExit the program.S Goal commandsIf the range is , then the string comes from the minibuffer rather than the goal.S&Displays the current goal and context.SGrabs the current goal's type and checks the expression in the hole against it.S&Displays the current goal and context and# infers the type of an expression.STells Agda to compute highlighting information for the expression just spliced into an interaction point.SParse the given expression (as if it were defined at the top-level of the current module) and infer its type.Scmd_load m argv loads the module in file m , using argv as the command-line options.S!cmd_load_highlighting_info source: loads syntax highlighting information for the module in source<, and asks Emacs to apply highlighting info from this file.If the module does not exist, or its module name is malformed or cannot be determined, or the module has not already been visited, or the cached info is out of date, then no highlighting information is printed.This command is used to load syntax highlighting information when a new file is opened, and it would probably be annoying if jumping to the definition of an identifier reset the proof state, so this command tries not to do that. One result of this is that the command uses the current include directories, whatever they happen to be.SLoad a file and fail if there are any unsolved meta-variables. By default no output is generated if the command is successful. (This command was previously used in Agda's installation script (Setup.hs)).SShow unsolved metas. If there are no unsolved metas but unsolved constraints show those instead.SShows all the top-level names in scope which mention all the given identifiers in their type.SShows all the top-level names in the given module, along with their types. Uses the scope of the given goal.SShows all the top-level names in the given module, along with their types. Uses the top-level scope.S$Displays version of the running AgdaSSolve (all goals / the goal at point) whose values are determined by the constraints.STells Agda to compute token-based highlighting information for the file.This command works even if the file's module name does not match its location in the file system, or if the file is not scope-correct. Furthermore no file names are put in the generated output. Thus it is fine to put source code into a temporary file before calling this command. However, the file extension should be correct.If the second argument is T, then the (presumably temporary) file is removed after it has been read.S5Tells Agda whether or not to show implicit arguments.S7Tells Agda whether or not to show irrelevant arguments.S%Toggle display of implicit arguments.S'Toggle display of irrelevant arguments.S A subset of OutputConstraint.TThe T monad. ݚ! state holds the remaining input.T?3T4Info to display at the end of an interactive commandTT, denotes either an error or a success (when T< is present) TODO: split these into separate constructorsTWhen an error message is displayed this constructor should be used, if appropriate.TGive action result"Comment derived from agda2-mode.elIf T2 is 'Give_String s', then the goal is replaced by s, and otherwise the text inside the goal is retained (parenthesised if T is T).T/Auxiliary information that comes with Goal TypeTGoals & WarningsT Errors that goes into Info_ErrorWhen an error message is displayed this constructor should be used, if appropriate.T,There are two kinds of "make case" commands.TShould token-based highlighting be removed in conjunction with the application of new highlighting (in order to reduce the risk of flicker)?TNo.T7Yes, remove all token-based highlighting from the file.TEntry in context.T Whether the T is in scope.T)The value (if it is a let-bound variable)TThe original concrete name.T&The name reified from abstract syntax.T The type.T'Responses for any interactive interfaceNote that the response is given in pieces and incrementally, so the user can have timely response even during long computations.T%Clear highlighting of the given kind.TA command sent when an abort command has completed successfully.T>A command sent when an exit command is about to be completed.T$Response is list of printed clauses.T)The integer is the message's debug level.T(Solution for one or more meta-variables.TStatus information.T.Has the module been successfully type checked?T!Are implicit arguments displayed?U#Are irrelevant arguments displayed?TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUTTTTNone( #&'()+,/159<=>?U0Backend-specific hole-level interactive command.U/Backend-specific top-level interactive command.Uthe name of the backendU0Optional version information to be printed with  --version.UBackend-specific command-line flags. Should at minimum contain a flag to enable the backend.UCompile a single definition.U%Unless the backend has been enabled, runAgda- will fall back to vanilla Agda behaviour.UThe treeless compiler may ask the Backend if elements of the given type maybe possibly erased. The answer should be  if the compilation of the type is used by a third party, e.g. in a FFI binding.UDefault optionsU3Called after module compilation has completed. The IsMain argument is NotMain if the  --no-main flag is present.U?<U!Name of absurdLambda definitions.U:Not quite all reductions (skip non-terminating reductions)U.Preserve the state of the failing computation.UThe current modality. Note that the returned cohesion component is always .U2Has the definition failed the termination checker?UHas the definition not termination checked or did the check fail?U+Create a definition with sensible defaults.U$By default, we have no display form.U The default [ function prints certain things to stdout (other things generate internal errors).UTurn a A function into a Z function. Property:  dirToCmp f (fromCmp cmp) = f cmpVNote that this lens does not satisfy all lens laws: If hard compile-time mode is enabled, then quantities other than zero are replaced by .VA template for creating U& definitions, with sensible defaults.V&Base name for extended lambda patternsVExecute a finalizer even when an exception is thrown. Does not catch any errors. In case both the regular computation and the finalizer throw an exception, the one of the finalizer is propagated.V!Flip the direction of comparison.V6Runs the given computation in a separate thread, with a copy' of the current state and environment.Note that Agda sometimes uses actual, mutable state. If the computation given to forkTCM tries to modify this state, then bad things can happen, because accesses are not mutually exclusive. The forkTCM8 function has been added mainly to allow the thread to read7 (a snapshot of) the current state in a convenient way.Note also that exceptions which are raised in the thread are not propagated to the parent, so the thread should not do anything important.VEmbed A into Z.V Toggle the [ flag.V Toggle the [ flag.V Toggle the [ flag.V Toggle the [ flag.V Toggle the [ flag.V Toggle the [ flag.V Toggle the [ flag.V Toggle the [ flag.V.Base name for generalized variable projectionsV2Check whether we have a generalized variable fieldVCombines the source hash and the (full) hashes of the imported modules.V$ifTopLevelAndHighlightingLevelIs l m runs m when we're type-checking the top-level module (or before we've started doing this) and the highlighting level is at least l.V&ifTopLevelAndHighlightingLevelIs l b m runs m when we're type-checking the top-level module (or before we've started doing this) and either the highlighting level is at least l or b is .VEmpty session state.VEmpty persistent state.VEmpty state of type checker.V An initial .VA lens for the \ field of the \ type.V:Check whether we have an definition from an absurd lambda.VChecking whether we are dealing with a function yet to be defined.VBuilding the projection function (which drops the parameters).WIs the record type recursive?XConceptually: 2redBind m f k = either (return . Left . f) k =<< mXX runs a safe _ action (a _9 action which cannot fail, except that it might raise _!s) in the initial environment.X4Running the type checking monad (most general form).XRunning the type checking monad on toplevel (with initial state).X3Make sure we do not overwrite a user specification.XOverwrite the part of the _ focused on by the lens.XOverwrite the part of the _$ focused on by the lens (strictly).XGet the file name of a B.X Get make a B from a file name.Xuse  areWeCaching! from the Caching module instead.XNote that the lens is "strict".XModify the part of the _0 focused on by the lens, and return some result.X?Modify a part of the state monadically, and return some result.This is an instance of .X Append an  to a @, for computing the name suggestions of eta-expansion metas. If the @ is empty or an underscore, the field name is taken as the suggestion.XLookup the path of a top level module name, which must be a known one.X Union two Ys. Only defined for Y.X6Abstract things in the current module can be accessed.X#No abstract things can be accessed.X$All abstract things can be accessed.X Controlling reduce.Y%Copattern definitions may be reduced.Y6Non-recursive functions and primitives may be reduced.Y'Functions marked INLINE may be reduced.YReduce 1 terms.Y0Functions that have failed termination checking.Y:(Projection and) projection-like functions may be reduced.Y(Even recursive functions may be reduced.YAllow  allReductions in types, even if not allowed at term level (used by confluence checker)Y9Functions whose termination has not (yet) been confirmed.Y&Checked and inserted arguments so far.Y6The function applied to the already checked arguments.Y=.Z;The backends are responsible for parsing their own pragmas.ZCheck that the sort 1 of data type +( admits data/record types. E.g., sorts IUniv, SizeUniv, etc. do not admit such constructions. See .Z2Last argument is the error causing us to postpone.ZCheckLockedVars t ty lk lk_ty with t : ty,  lk : lk_ty and t lk well-typed.ZCheck that the 1. is either not a SIZELT or a non-empty SIZELT.Zthe second argument is the instance argument and the third one is dhe list of candidates (or Nothing if we haven@t determined the list of candidates yet)Z+The range is the one of the absurd pattern.ZResolve the head symbol of the type that the given instance targetsZMeta created for a term blocked by a postponed type checking problem or unsolved constraints. The \( for the meta (when unsolved) is either \ or \.ZFirst argument is computation and the others are hole and goal typeZIs the term usable at the given modality? This check should run if the Sort is Nothing or  isFibrant.Z+Number of arguments (excluding parameters).ZCubical composition.Z Name of datatype or record type.ZWhich arguments are erased at runtime (computed during compilation to treeless)?  means erased,  means retained.  if no erasure analysis has been performed yet. The length of the list is conArity.ZWas  --erasure in effect when the constructor was defined? (This can affect the constructor's type.)ZWhich arguments are forced (i.e. determined by the type of the constructor)? Either this list is empty (if the forcing analysis isn't run), or its length is conArity.ZShall we translate the constructor on the root of the rhs into copattern matching on the lhs? Activated by INLINE pragma.ZNumber of parameters.Z Projections.  if not yet computed.ZName of (original) constructor and fields. (This might be in a module instance.)ZInformation we have constructored in the middle of disambiguating a constructor.Z'The arguments given to the constructor.Z*The possible candidates for disambiguationZ9One of the eligible ambiguous names (for error messages).Z'The type of the constructor applicationZLike Y, but storing the log for an ongoing type checking of a module. Stored in reverse order (last performed action first).Z(This might be in an instantiated module.ZConstructor names, ordered according to the order of their definition.ZNumber of indices.ZMutually recursive functions, datas and records. Does include this data type. Empty if not recursive. Nothing- if not yet computed (by positivity checker).ZNumber of parameters.Z"Path constructor names (subset of dataCons).ZTransport function, should be available for all datatypes in supported sorts.Z dt: for a defined symbol (could be a constructor as well) q. The right hand side is a Z which is used to reify to a more readable . The patterns ts are just terms, but the first  dfPatternVars: variables are pattern variables that matches any term.ZLeft hand side patterns, the n first free variables are pattern variables, any variables above n are fixed and only match that particular variable. This happens when you have display forms inside parameterised modules that match on the module parameters. The  is ignored in these patterns.ZNumber n of pattern variables in Z.ZRight hand side.ZA structured presentation of a 1 for reification into .Zc vs.Zd vs.Z.(v es). See Z.Zv es. This is a frozen elimination that is not always safe to run, because display forms may be ill-typed. (See issue #6476.)Z(f vs | ws) es. The first Z is the parent function f with its args vs. The list of Zs are the with expressions ws . The 0 are additional arguments es (possible in case the with-application is of function type) or projections (if it is of record type).ZDon't generalize.ZGeneralize because it is a metavariable and we're currently checking the type of a generalizable variable (this should get the default modality).Z2Generalize because it is a generalizable variable.Z(Should a record type admit eta-equality?Z0Positivity checker inferred whether eta is safe.Z2User specifed 'eta-equality' or 'no-eta-equality'.ZError when trying to call an external executable during reflection.Z9The given file path does not have executable permissions.Z=The given executable could not be found under the given path.Z.The given executable is not listed as trusted.[!Do not append implicit arguments.[Add implicit arguments in the end until type is no longer hidden 1.[Makes  doExpandLast have no effect. Used to avoid implicit insertion of arguments to metavariables.[,Additional information for extended lambdas.[2Was this definition created from an absurd lambda  ()?[For complicated reasons the scope checker decides the QName of a pattern lambda, and thus its module. We really need to decide the module during type checking though, since if the lambda appears in a refined context the module picked by the scope checker has very much the wrong parameters.[Foreign code fragments are stored in reversed order to support efficient appending: head points to the latest pragma in module.[Create a fresh name from a.[Frozen meta variable cannot be instantiated by unification. This serves to prevent the completion of a definition by its use outside of the current block. (See issues 118, 288, 399).[Do not instantiate.[* while function is still type-checked. Just cc after type and coverage checking and translation to case trees.[Covering clauses computed by coverage checking. Erased by (IApply) confluence checking(?)[Is this function generated from an extended lambda? If yes, then return the number of hidden and non-hidden lambda-lifted arguments.[Various boolean flags pertaining to the function definition, see [.[Is this a helper for one of the Kan operations (transp, hcomp) on data types/records? If so, for which data type?[Mutually recursive functions, datas and records. Does include this function. Empty list if not recursive. Nothing- if not yet computed (by positivity checker).[Is this function opaque? If so, and we're not in an opaque block that includes this function('s name), it will be treated abstractly.[Is it a record projection? If yes, then return the name of the record type and index of the record argument. Start counting with 1, because 0 means that it is already applied to the record. (Can happen in module instantiation.) This information is used in the termination checker.[The split tree constructed by the coverage checker. Needed to re-compile the clauses after forcing translation.[9Has this function been termination checked? Did it pass?[2Intermediate representation for compiler backends.[Is this a generated with-function? If yes, then what's the name of the parent function?[Is the function abstract?[Was  --erasure in effect when the function was defined? (This can affect the type of a projection.)[Is this function INJECTIVE_FOR_INFERENCE? Indicates whether the first-order shortcut should be applied to the definition.[9Should calls to this function be inlined by the compiler?[Is this function a macro?[Is this function a descendant of a field (typically, a projection)?[