diff --git a/Main.hs b/Main.hs index 72097e0..d1d6eb5 100644 --- a/Main.hs +++ b/Main.hs @@ -178,3 +178,30 @@ Tautology ghci> bucket $ fromJust $ fst <$> runParser stmt "(!(a|b)<->(!a&!b))" Tautology -} + +data SerializeFormat + = Ascii + | Latex + deriving (Show, Eq) + +serialize :: SerializeFormat -> Statement -> String +serialize = aux + where + aux Ascii = ascii + aux Latex = latex + + ascii (Atom string) = string + ascii (Not s) = "!" <> ascii s + ascii (And s1 s2) = connective "&" (ascii s1) (ascii s2) + ascii (Or s1 s2) = connective "|" (ascii s1) (ascii s2) + ascii (Implies s1 s2) = connective "->" (ascii s1) (ascii s2) + ascii (Iff s1 s2) = connective "<->" (ascii s1) (ascii s2) + + latex (Atom string) = string + latex (Not s) = "\\neg " <> latex s + latex (And s1 s2) = connective "\\cap " (latex s1) (latex s2) + latex (Or s1 s2) = connective "\\cup " (latex s1) (latex s2) + latex (Implies s1 s2) = connective "\\to " (latex s1) (latex s2) + latex (Iff s1 s2) = connective "\\leftrightarrow " (latex s1) (latex s2) + + connective token s1 s2 = "(" <> s1 <> token <> s2 <> ")"