packages feed

clingo-0.2.0.0: examples/Configuration.hs

{-# LANGUAGE OverloadedStrings #-}
module Main where

import Control.Monad
import Control.Monad.IO.Class
import Clingo.Control
import Clingo.Configuration
import Clingo.Symbol
import Clingo.Solving
import Clingo.Model

printModel :: (MonadIO (m s), MonadModel m) => Model s -> m s ()
printModel m = do
    syms <- map prettySymbol
        <$> modelSymbols m (selectNone { selectShown = True }) 
    liftIO (putStr "Model: " >> print syms)

(>>?=) :: (Monad m, Foldable t) => m (t a) -> (a -> m b) -> m ()
a >>?= b = a >>= mapM_ b
    
main :: IO ()
main = withDefaultClingo $ do
    conf <- configuration

    -- enumerate all models
    fromConfig conf (atMap "solve" >=> atMap "models" >=> value) >>?= ($= "0")

    -- use berkmin
    fromConfig conf (atMap "solver" >=> atArray 0 >=> atMap "heuristic" 
                      >=> value)
        >>?= ($= "berkmin")
    
    addProgram "base" [] "a :- not b. b :- not a."
    ground [Part "base" []] Nothing
    withSolver [] (allModels >=> mapM_ printModel)