--- id: version-next-middle-end title: Middle End original_id: middle-end --- The Middle-End is the core of LIGO. It is also composed of three parts. ## Common AST The Common AST is the closest thing to what could be called “LIGO lang”. As such, it should be as simple as possible. Collapsing particular cases in more general constructs is encouraged. Documenting it is crucial for people who’ll write new parsers or editor support for Front-end related things. Its files are in `ast_simplified/`, of interest is the definition of the AST itself in `ast_simplified/types.ml`. ## Type Checker The Type Checker, among other things, checks that a given AST is valid with regard to type-safety. It also annotates expressions with their types, free-variables and local environments. As time passes, we want to make the type-system stronger, to encode arbitrarily complex properties in an extensible manner. Its files are in `typer/`. ## Typed AST The Typed AST is the result of Type Checker. On top of it, we also want to define/export many features aiming at making building tools on top LIGO as easy as possible. Its files are in `ast_typed/`, of interest is the definition of the Typed AST itself in `ast_typed/types.ml`.