% Depth-First Search for Constraint Functional-Logic Programs % Sebastian Fischer (sebf@informatik.uni-kiel.de) This module defines depth-first search as a strategy that can be used in constraint functional-logic programs. It shows what definitions are necessary in order to turn an instance of the `MonadPlus` type class into a strategy for CFLP. > {-# LANGUAGE > FlexibleInstances > #-} > > module CFLP.Strategies.DepthFirst where > > import CFLP Depth-first search is implemented by the list monad. In order to make it a strategy, we need to make `[]` an instance of the `Enumerable` type class that allows to enumerate monadic values in a list. For the list monad, this instance is trivial: > instance Enumerable [] where enumeration = id We define depth-first search strategies for evaluation-time choice semantics. In order to get call-time choice, this needs to be transformed with the call-time choice transformer. > dfsWithEvalTimeChoice :: Monadic (UpdateT c []) () > dfsWithEvalTimeChoice = Monadic (return ())