module Program where import Import import Decleration import Text.PrettyPrint import Data.String.Utils import Text.Regex import Data.List data Program = Program String ImportType [Import] [Dec] genProgram :: Program -> Doc genProgram (Program name exports imports declerations) = text "module" <+> text name <+> exposingDoc exports $+$ (foldl ($+$) empty . map toDocI $ imports) $+$ (foldl ($+$) empty . map toDocD $ declerations) renderProgram :: Program -> String renderProgram program = let str = (render . genProgram $ program) ++ "\n" in join "\n" . map addNewline . split "\n" $ str where addNewline line = if (or $ map (\s -> isInfixOf s line) ["::", "type"]) then "\n" ++ line else line