{-# LANGUAGE CPP #-}

-- | Equality-constrained deterministic finite tree automata
--
-- Specialized to DAGs, plus at most one globally unique recursive node

module Data.ECTA (
    Edge(Edge)
  , mkEdge
  , edgeChildren
  , edgeSymbol

  , Node(Node, EmptyNode)
  , nodeEdges
  , numNestedMu
  , createMu

  -- * Operations
  , pathsMatching
  , mapNodes
  , refold
  , unfoldBounded
  , crush
  , onNormalNodes
  , nodeCount
  , edgeCount
  , maxIndegree
  , union
  , intersect
  , withoutRedundantEdges
  , reducePartially

  -- * Enumeration
  , EnumerateM
  , runEnumerateM
  , enumerateFully
  , getAllTerms
  , getAllTruncatedTerms
  , naiveDenotation


  -- * Visualization / debugging
  , toDot
  ) where

import Data.ECTA.Internal.ECTA.Enumeration
import Data.ECTA.Internal.ECTA.Operations
import Data.ECTA.Internal.ECTA.Type
import Data.ECTA.Internal.ECTA.Visualization