module Control.CP.FD.Solvers where



import qualified Control.CP.PriorityQueue as PriorityQueue

import qualified Data.Sequence



import Control.CP.ComposableTransformers

import Control.CP.SearchTree

import Control.CP.FD.FD

-- import Control.CP.FD.OvertonFD.Sugar

-- import Control.CP.FD.OvertonFD.OvertonFD

-- import Control.CP.FD.Gecode.CodegenSolver



--------------------------------------------------------------------------------

-- FORCE SOLVERS

--------------------------------------------------------------------------------



-- as_overtonfd :: Tree (FDWrapper OvertonFD) a -> Tree OvertonFD a

-- as_overtonfd = unwrap

-- 

-- as_gecode_codegen :: Tree (FDWrapper CodegenSolver) a -> Tree CodegenSolver a

-- as_gecode_codegen = unwrap

-- 

-- as_gen_gecode_codegen :: (FDExpr CodegenSolver -> Tree (FDWrapper CodegenSolver) a) -> (FDExpr CodegenSolver -> Tree CodegenSolver a)

-- as_gen_gecode_codegen f = (\x -> unwrap $ f x)

-- 



------------------------------------------------------------------------------

-- SEARCH STRATEGIES

------------------------------------------------------------------------------



dfs = []

bfs = Data.Sequence.empty

pfs :: Ord a => PriorityQueue.PriorityQueue a (a,b,c)

pfs = PriorityQueue.empty



nb :: Int -> CNodeBoundedST s a

nb = CNBST

db :: Int -> CDepthBoundedST s a

db = CDBST

bb :: NewBound s -> CBranchBoundST s a

bb = CBBST

sb :: Int -> CSolutionBoundST s a

sb = CSBST

fs :: CFirstSolutionST s a

fs = CFSST

it :: CIdentityCST s a

it = CIST

ra :: Int -> CRandomST s a

ra = CRST

ld :: Int -> CLimitedDiscrepancyST s a

ld = CLDST