serialize statements

This commit is contained in:
hi 2025-07-31 11:08:27 +00:00
parent 4fd2571d55
commit 1a2c2fb50f

27
Main.hs
View file

@ -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 <> ")"