astar-monad-0.1.0.0: src/Control/Monad/AStar/Class.hs
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FunctionalDependencies #-}
module Control.Monad.AStar.Class (MonadAStar(..)) where
-- | A class which represents the ability to do A* search.
class MonadAStar w r m | m -> r, m -> w where
-- | Branch the search
branch :: m a -> m a -> m a
-- | Update the cost estimate of the current branch and re-evaluate available branches,
-- switching to a cheaper one when appropriate.
updateCost :: w -> m ()
-- | Return a solution and short-circuit any remaining branches.
done :: r -> m a