-- | The module implements /directed acyclic word graphs/ (DAWGs) internaly
-- represented as /minimal acyclic deterministic finite-state automata/.
-- The implementation provides fast insert and delete operations
-- which can be used to build the DAWG structure incrementaly.
--
-- Transition backend has to be specified by a type signature.  You can import
-- the desired transition type and define your own dictionary construction
-- function.
--
-- > import Data.DAWG
-- > import Data.DAWG.Trans.Map (Trans)
-- >
-- > mkDict :: (Enum a, Ord b) => [([a], b)] -> DAWG Trans a b
-- > mkDict = fromList

module Data.DAWG
(
-- * DAWG type
  DAWG
, MkNode
-- * Query
, numStates
, lookup
-- * Construction
, empty
, fromList
, fromListWith
, fromLang
-- ** Insertion
, insert
, insertWith
-- ** Deletion
, delete
-- * Conversion
, assocs
, keys
, elems
) where

import Prelude hiding (lookup)
import Data.DAWG.Internal