{-# OPTIONS_GHC -Wall #-} module AST.Expression.Canonical where import AST.PrettyPrint import Text.PrettyPrint as P import qualified AST.Expression.General as General import AST.Type (CanonicalType) import qualified AST.Annotation as Annotation import qualified AST.Pattern as Pattern import qualified AST.Variable as Var {-| Canonicalized expressions. All variables are fully resolved to the module they came from. -} type Expr = General.Expr Annotation.Region Def Var.Canonical type Expr' = General.Expr' Annotation.Region Def Var.Canonical data Def = Definition Pattern.CanonicalPattern Expr (Maybe CanonicalType) deriving (Show) instance Pretty Def where pretty (Definition pattern expr maybeTipe) = P.vcat [ annotation, definition ] where definition = pretty pattern <+> P.equals <+> pretty expr annotation = case maybeTipe of Nothing -> P.empty Just tipe -> pretty pattern <+> P.colon <+> pretty tipe