module SAT.MiniSat.Functional where
import SAT.MiniSat.Monadic
import SAT.MiniSat.Literals
m_solve :: [[Lit Int]] -> [[Maybe Bool]]
m_solve :: [[Lit Int]] -> [[Maybe Bool]]
m_solve [[Lit Int]]
clauses = SolverState [[Maybe Bool]] -> [[Maybe Bool]]
forall a. SolverState a -> a
m_run (SolverState [[Maybe Bool]] -> [[Maybe Bool]])
-> SolverState [[Maybe Bool]] -> [[Maybe Bool]]
forall a b. (a -> b) -> a -> b
$ do
Bool
r <- [[Lit Int]] -> SolverState Bool
m_solver_addclauses [[Lit Int]]
clauses
if Bool
r Bool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
== Bool
False then do
[[Maybe Bool]] -> SolverState [[Maybe Bool]]
forall a. a -> StateT Solver Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return []
else do
SolverState ()
m_solver_solve_start
[[Maybe Bool]]
sols <- SolverState [[Maybe Bool]]
m_solver_next_solutions
[[Maybe Bool]] -> SolverState [[Maybe Bool]]
forall a. a -> StateT Solver Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return [[Maybe Bool]]
sols