From 1a2c2fb50fd1e52dcf4540daa5fe5b7555fc8bfd Mon Sep 17 00:00:00 2001 From: hi Date: Thu, 31 Jul 2025 11:08:27 +0000 Subject: [PATCH] serialize statements --- Main.hs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) 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 <> ")"