module Control.Search.Combinator.Failure (failure) where
import Control.Search.Language
import Control.Search.GeneratorInfo
import Control.Search.Generator
import Control.Monatron.Monatron hiding (Abort, L, state, cont)
import Control.Monatron.IdT
failLoop uid _super =
commentEval $ Eval { structs = ([],[])
, treeState_ = []
, evalState_ = []
, pushLeftH = \_ -> return Skip
, pushRightH = \_ -> return Skip
, nextSameH = \_ -> return Skip
, nextDiffH = \_ -> return Skip
, bodyH = \i -> cachedAbort i
, addH = \_ -> return Skip
, failH = \i -> cachedAbort i
, returnH = \i -> cachedAbort i
, tryH = \i -> cachedAbort i
, startTryH = \i -> cachedAbort i
, tryLH = \_ -> return Skip
, intArraysE = []
, intVarsE = []
, boolArraysE = []
, deleteH = \i -> cachedAbort i
, initH = \_ -> return $ Skip
, toString = "fail" ++ show uid
, canBranch = return False
, complete = const $ return false
}
failure :: Search
failure =
Search { mkeval = \super -> get >>= \uid -> return (failLoop uid super)
, runsearch = runIdT
}