This note aims at understanding the main codebase of Agda, i.e. the directory src/full/Agda/.
For now, we focus on its type checking and reflection mechanism.
In this note, a file path src/full/Agda/Foo/Bar.hs will be referred to as Agda.Foo.Bar, adapting the notation of Haskell's module system.
Requirements
We assume the reader has the following skills:
Be familiar with basic concepts of compilers.
Be familiar with Haskell and its toolchain Cabal or Stack.
Have the experience with building Agda from source.