{- |
   Module      : Data.Graph.Analysis.Algorithms
   Description : Graph analysis algorithms
   Copyright   : (c) Ivan Lazar Miljenovic 2008
   License     : 2-Clause BSD
   Maintainer  : Ivan.Miljenovic@gmail.com

   This module exports all the algorithms found in the
   @Data.Graph.Analysis.Algorithms.*@ modules.
 -}
module Data.Graph.Analysis.Algorithms
    ( -- * Graph Algorithms
      -- $algorithms
      module Data.Graph.Analysis.Algorithms.Common,
      module Data.Graph.Analysis.Algorithms.Directed,
      module Data.Graph.Analysis.Algorithms.Clustering,
      applyAlg
    ) where

import Data.Graph.Analysis.Types
import Data.Graph.Analysis.Algorithms.Common
import Data.Graph.Analysis.Algorithms.Directed
import Data.Graph.Analysis.Algorithms.Clustering

{- $algorithms
   For algorithms that return a group of nodes, there are typically
   two different forms: the standard form (e.g. 'cliquesIn') will
   return a list of @LNode@s, whilst the primed version
   (e.g. `cliquesIn'') will return a list of @Node@s.
 -}

-- | Apply an algorithm to the data to be analysed.
applyAlg   :: (AGr a -> b) -> GraphData a -> b
applyAlg f = f . graph