-------------------------------------------------------------------------------

  {-  LANGUAGE CPP #-}

-------------------------------------------------------------------------------

-- |
-- Module      :  Control.DeepSeq.Bounded.PatUtil
-- Copyright   :  Andrew G. Seniuk 2014-2015
-- License     :  BSD-style (see the file LICENSE)
--
-- Maintainer  :  Andrew Seniuk <rasfar@gmail.com>
-- Stability   :  provisional
-- Portability :  portable
--

-------------------------------------------------------------------------------

  module Control.DeepSeq.Bounded.PatUtil
  (

#if NEW_IMPROVED_PATTERN_GRAMMAR

     -- * Basic operations on Patterns

       unionPats
     , intersectPats
     , subPat
--   , unionPatsStr

#if ! HASKELL98_FRAGMENT
     -- * Operations for obtaining and modifying Patterns based on a term

     , mkPat
     , mkPatN
     , growPat
#endif

     -- * Operations for obtaining subpatterns (in the 'subPat' sense)

     , truncatePat
     , shrinkPat
#if PROVIDE_OLD_SHRINK_PAT
     , shrinkPat_old
#endif

     -- * Operations for the direct construction and perturbation of Patterns

     , emptyPat
     , liftPats

     , splicePats
     , elidePats

     , erodePat

     -- * Re-exported for convenience

     , module Control.DeepSeq.Bounded.Pattern

     -- * Debugging convenience

#if ! HASKELL98_FRAGMENT
     , Shape
     , shapeOf
     , ghom
#endif
     , probDensRose
     , weightedRose
     , unzipRose
     , showRose

#else

     -- * Basic operations on Patterns

       unionPats
     , intersectPats
     , subPat
--   , unionPatsStr

#if ! HASKELL98_FRAGMENT
     -- * Operations for obtaining and modifying Patterns based on a term

     , mkPat
     , mkPatN
     , growPat
#endif

     -- * Operations for obtaining subpatterns (in the 'subPat' sense)

     , truncatePat
     , shrinkPat
#if PROVIDE_OLD_SHRINK_PAT
     , shrinkPat_old
#endif

     -- * Operations for the direct construction and perturbation of Patterns

     , emptyPat
     , liftPats

     , splicePats
     , elidePats

     , erodePat

     -- * Re-exported for convenience

     , module Control.DeepSeq.Bounded.Pattern

#endif

--- #if NEW_IMPROVED_PATTERN_GRAMMAR
---      module Control.DeepSeq.Bounded.PatUtil_new_grammar  ,
--- #else
---      module Control.DeepSeq.Bounded.PatUtil_old_grammar  ,
--- #endif

  )
  where

-------------------------------------------------------------------------------

#if NEW_IMPROVED_PATTERN_GRAMMAR
  import Control.DeepSeq.Bounded.PatUtil_new_grammar
#else
  import Control.DeepSeq.Bounded.PatUtil_old_grammar
#endif

  -- Necessity seems like a Haddock bug, as it is both imported
  -- and exported by PatUtil_{old,new}_*.hs.
  import Control.DeepSeq.Bounded.Pattern

-------------------------------------------------------------------------------