logic/Logic/Statement.hs

22 lines
631 B
Haskell

module Logic.Statement where
import Data.Set (singleton, union, toAscList)
data Statement
= Atom String
| Not Statement
| And Statement Statement
| Or Statement Statement
| Implies Statement Statement
| Iff Statement Statement
deriving (Show, Eq)
atoms :: Statement -> [String]
atoms = toAscList . mkSet
where
mkSet (Atom key) = singleton key
mkSet (Not s) = mkSet s
mkSet (And s1 s2) = union (mkSet s1) (mkSet s2)
mkSet (Or s1 s2) = union (mkSet s1) (mkSet s2)
mkSet (Implies s1 s2) = union (mkSet s1) (mkSet s2)
mkSet (Iff s1 s2) = union (mkSet s1) (mkSet s2)