-- | This module contains the abstract syntax tree (AST) for the intermediate -- representation (IR) of the compiler. -- -- The intermediate language is very similar to the subset of Haskell -- supported by the compiler. The main goal is to make the transformations -- on the AST and code generation functions easier to comprehend. The IR does -- have fewer syntactic constructs than Haskell so that fewer cases need to -- be distinguished. For example, there is no explicit representation of -- infix function applications and no list literals. These kinds of syntactic -- sugar must be removed by the front end. -- -- An additional goal of this AST is to reduce coupling with the parsing -- library and source language. Ideally, the compiler works with any language -- whose AST can be transformed into this intermediate representation. -- -- A parser for the intermediate language and a description of its syntax -- can be found in "FreeC.Frontend.IR.Parser". While the intermediate -- language can be parsed, IR nodes are usually created by parsing another -- language and converting their AST to the IR AST. module FreeC.IR.Syntax ( module FreeC.IR.Syntax.Expr , module FreeC.IR.Syntax.FuncDecl , module FreeC.IR.Syntax.Module , module FreeC.IR.Syntax.Name , module FreeC.IR.Syntax.Pragma , module FreeC.IR.Syntax.Type , module FreeC.IR.Syntax.TypeDecl , module FreeC.IR.Syntax.TypeScheme , module FreeC.IR.Syntax.TypeVarDecl ) where import FreeC.IR.Syntax.Expr import FreeC.IR.Syntax.FuncDecl import FreeC.IR.Syntax.Module import FreeC.IR.Syntax.Name import FreeC.IR.Syntax.Pragma import FreeC.IR.Syntax.Type import FreeC.IR.Syntax.TypeDecl import FreeC.IR.Syntax.TypeScheme import FreeC.IR.Syntax.TypeVarDecl