diff --git a/src/PrettyPrinter/Function.hs b/src/PrettyPrinter/Function.hs index 7475095..b72090f 100644 --- a/src/PrettyPrinter/Function.hs +++ b/src/PrettyPrinter/Function.hs @@ -10,7 +10,24 @@ import PrettyPrinter.Type -- show printStatementTree printFunction :: Function -> String -printFunction = show . printFunctionSignature +printFunction f = show $ vcat [printFunctionSignature f, printFunctionBody f] + +printFunctionBody :: Function -> Doc a +printFunctionBody (MakeFunction name _ _ _ ex) = pretty name <+> "=" <+> printExpression ex +printExpression :: Expression -> Doc a +printExpression (Variable s) = pretty s +printExpression (Int s) = pretty s +printExpression (Real s) = pretty s +printExpression (Boolean s) = pretty s +printExpression Empty = "empty" +printExpression (Parens ex) = "(" <> printExpression ex <> ")" +printExpression (List ex) = list (map printExpression ex) +printExpression (Function name ex) = pretty name <> tupled (map printExpression ex) +printExpression (PrefixExp name ex) = pretty name <+> printExpression ex +printExpression (PostfixExp name ex) = printExpression ex <+> pretty name +printExpression (InfixExp name ex1 ex2) = printExpression ex1 <+> pretty name <+> printExpression ex2 +printExpression (IfSimple cond ex) = "if" <+> printExpression cond <+> "then" <+> printExpression ex +printExpression (IfElse cond ex1 ex2) = "if" <+> printExpression cond <+> "then" <+> printExpression ex1 <+> "else" <+> printExpression ex2 printFunctionSignature :: Function -> Doc a printFunctionSignature (MakeFunction name description inputs output _) =