% Depth-First Search for Constraint Functional-Logic Programs
% Sebastian Fischer (email@example.com)
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.
> 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 :: c -> Monadic (UpdateT c ) a
> dfsWithEvalTimeChoice _ = Monadic undefined