-- | Main module for the Pattern library.
--
-- This module provides convenient access to all Pattern library functionality
-- by re-exporting public APIs from core modules. Import this module to access
-- all Pattern types, functions, and typeclass instances without needing to
-- import individual modules.
--
-- == Library Organization
--
-- The Pattern library is organized into several modules:
--
-- * @Pattern.Core@ - Core Pattern data type, construction functions, query functions,
--   predicate functions, the unified scope abstractions ('ScopeQuery', 'TrivialScope',
--   'ScopeDict'), and typeclass instances (Functor, Applicative, Comonad, etc.)
-- * @Pattern.Graph@ - Low-level graph structural operations (GraphLens, 'fromGraphLens', nodes,
--   relationships, incidentRels, etc.) and 'GraphView' constructor 'toGraphView'.
-- * @Pattern.Graph.GraphQuery@ - Portable graph query interface ('GraphQuery', 'TraversalWeight',
--   combinators)
-- * @Pattern.Graph.Types@ - 'GraphView' and 'Substitution' types (re-exported via @Pattern.Graph@)
-- * @Pattern.Graph.Algorithms@ - Graph algorithms operating on 'GraphQuery' (bfs, dfs,
--   shortestPath, connectedComponents, etc.)
-- * @Pattern.Graph.Transform@ - Bulk graph transformations: 'unfoldGraph', 'mapGraph',
--   'mapAllGraph', 'filterGraph', 'foldGraph', 'mapWithContext', the graph-scope
--   reifier 'scopeDictFromGraphView', 'paraGraph', and 'paraGraphFixed'
-- * @Pattern.PatternGraph@ - Typed graph container with O(log n) lookups; 'fromPatternGraph',
--   'materialize', 'toGraphView'
-- * @Pattern.Reconcile@ - Pattern reconciliation for normalizing duplicate identities
--
-- == Usage
--
-- Import the main Pattern module to access all functionality:
--
-- >>> import Pattern
-- >>> let p = point "test"
-- >>> value p
-- "test"
--
-- For graph transformation pipelines:
--
-- > import Pattern
-- > import Pattern.Graph.Transform (mapAllGraph, filterGraph, mapWithContext)
-- > import Pattern.PatternGraph (toGraphView, materialize)
--
-- For graph algorithms, import the algorithm modules directly:
--
-- > import Pattern.Graph.GraphQuery (directed)
-- > import qualified Pattern.Graph.Algorithms as Alg
--
-- All public functions, types, and typeclass instances from Pattern.Core are
-- available through this module. See individual module documentation for
-- detailed information about specific functionality.
--
-- == Re-export Structure
--
-- This module re-exports:
--
-- * All public exports from @Pattern.Core@ (Pattern type, construction functions,
--   query functions, predicate functions, helper functions, and all typeclass instances)
-- * All public exports from @Pattern.Graph@ (graph operations, 'GraphView', 'Substitution')
-- * All public exports from @Pattern.Graph.GraphQuery@ (portable graph query interface)
-- * All public exports from @Pattern.Graph.Transform@ (bulk transformations and iterative algorithms)
-- * Selected exports from @Pattern.PatternGraph@ (PatternGraph, mergeWithPolicy, fromPatterns,
--   fromPatternsWithPolicy, empty, fromPatternGraph, materialize). For a @GraphView@ from a
--   @PatternGraph@ use @Pattern.PatternGraph.toGraphView@; 'toGraphView' for 'GraphLens' is
--   re-exported from @Pattern.Graph@.
-- * All public exports from @Pattern.Reconcile@ (reconciliation operations)
--
-- Internal implementation details and helper functions are not exported through
-- this module, ensuring a clean public API.
module Pattern
  ( -- * Core Pattern Type and Operations
    module Pattern.Core
    -- * Representation Maps
  , module Pattern.RepresentationMap
    -- * Graph Operations and GraphView
  , module Pattern.Graph
    -- * Portable Graph Query Interface
  , module Pattern.Graph.GraphQuery
    -- * Graph Transformations
  , module Pattern.Graph.Transform
    -- * Typed Graph Container
  , PatternGraph(..)
  , mergeWithPolicy
  , fromPatterns
  , fromPatternsWithPolicy
  , empty
  , fromPatternGraph
  , materialize
    -- * Reconciliation Operations
  , module Pattern.Reconcile
  ) where

import Pattern.Core
import Pattern.RepresentationMap
import Pattern.Graph
import Pattern.Graph.GraphQuery
import Pattern.Graph.Transform
import Pattern.PatternGraph
  ( PatternGraph(..)
  , mergeWithPolicy
  , fromPatterns
  , fromPatternsWithPolicy
  , empty
  , fromPatternGraph
  , materialize
  )
import Pattern.Reconcile