packages feed

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