module CC.Source(module CC.Source, module CC.Types) where import CC.Pretty import CC.Types data Program = Program [Decl] deriving (Show, Read) data Decl = Def Def -- import? deriving (Show, Read) data Def = Function (Maybe Type) (Name, SourceRange) [(Name, SourceRange)] Expr deriving (Show, Read) data Type = TFun Type Type | TInt deriving (Show, Read) data Expr = Call SourceRange Expr Expr | Int SourceRange Int | Var SourceRange Name deriving (Show, Read) instance Pretty Type where prettyPrec _ TInt = "Int" prettyPrec p (TFun a b) = precParens p 2 (prettyPrec 3 a ++ " -> " ++ prettyPrec 2 b) instance HasRange Expr where range (Call sr _ _) = sr range (Int sr _) = sr range (Var sr _) = sr