-- | Main module for the Subject library.
--
-- This module provides convenient access to all Subject library functionality
-- by re-exporting public APIs from core modules. Import this module to access
-- all Subject types, functions, and typeclass instances without needing to
-- import individual modules.
--
-- == Library Organization
--
-- The Subject library is organized into several modules:
--
-- * @Subject.Core@ - Core Subject data type, Symbol type, PropertyRecord type,
--   and typeclass instances (Show, Eq, Ord, Hashable, Semigroup, Monoid)
-- * @Subject.Value@ - Value type system supporting standard and extended types
-- * @Subject.Construction@ - Constructor functions and property manipulation
--
-- == Usage
--
-- Import the main Subject module to access all functionality:
--
-- >>> import Subject
-- >>> import Data.Map (fromList, empty)
-- >>> import Data.Set (Set)
-- >>> import qualified Data.Set as Set
-- >>> import Subject.Value (VString)
-- >>> let s = Subject (Symbol "n") (Set.fromList ["Person"]) (fromList [("name", VString "Alice")])
--
-- All public functions, types, and typeclass instances from Subject.Core and
-- Subject.Value 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 @Subject.Core@ (Subject type, Symbol type,
--   PropertyRecord type, and all typeclass instances)
-- * All public exports from @Subject.Value@ (Value type, RangeValue type)
--
-- Internal implementation details and helper functions are not exported through
-- this module, ensuring a clean public API.
module Subject
  ( module Subject.Core
  , module Subject.Value
  , module Subject.Construction
  ) where

import Subject.Core
import Subject.Construction
import Subject.Value