----------------------------------------------------------------------------- -- | -- Module : Language.Glambda.Unchecked -- Copyright : (C) 2015 Richard Eisenberg -- License : BSD-style (see LICENSE) -- Maintainer : Richard Eisenberg (rae@cs.brynmawr.edu) -- Stability : experimental -- -- Defines the AST for un-type-checked expressions -- ---------------------------------------------------------------------------- module Language.Glambda.Unchecked ( UExp(..) ) where import Language.Glambda.Pretty import Language.Glambda.Type import Language.Glambda.Token import Language.Glambda.Util import Text.PrettyPrint.ANSI.Leijen -- | Unchecked expression data UExp = UVar Int -- ^ de Bruijn index for a variable | UGlobal String | ULam Ty UExp | UApp UExp UExp | UArith UExp UArithOp UExp | UCond UExp UExp UExp | UFix UExp | UIntE Int | UBoolE Bool instance Pretty UExp where pretty = defaultPretty instance PrettyExp UExp where prettyExp = pretty_exp pretty_exp :: Coloring -> Prec -> UExp -> Doc pretty_exp c _ (UVar n) = prettyVar c n pretty_exp _ _ (UGlobal n) = text n pretty_exp c prec (ULam ty body) = prettyLam c prec (Just ty) body pretty_exp c prec (UApp e1 e2) = prettyApp c prec e1 e2 pretty_exp c prec (UArith e1 (UArithOp op) e2) = prettyArith c prec e1 op e2 pretty_exp c prec (UCond e1 e2 e3) = prettyIf c prec e1 e2 e3 pretty_exp c prec (UFix body) = prettyFix c prec body pretty_exp _ _ (UIntE n) = int n pretty_exp _ _ (UBoolE True) = text "true" pretty_exp _ _ (UBoolE False) = text "false"