clingo-0.2.0.0: examples/SymbolicAtoms.hs
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Control.Arrow
import Control.Monad
import Control.Monad.IO.Class
import Clingo.Control
import Clingo.Symbol
import Clingo.Model
import Clingo.Inspection.Symbolic
import Data.Maybe
import Data.Text (Text)
import qualified Data.Text.IO as T
printSymbol :: SymbolicAtom s -> Text
printSymbol atom =
let isFact = guard (fact atom) *> pure ", fact"
isExternal = guard (external atom) *> pure ", external"
name = prettySymbol (symbol atom)
in mconcat . catMaybes $ [ Just " ", Just name, isFact, isExternal ]
main :: IO ()
main = withDefaultClingo $ do
addProgram "base" [] "a. {b}. #external c."
ground [Part "base" []] Nothing
liftIO (T.putStrLn "Symbolic Atoms:")
sa <- symbolicAtoms
mapM_ (liftIO . T.putStrLn . printSymbol) =<< fromSymbolicAtoms sa id