-- | The module exports internal representation of dynamic DAWG.

module Data.DAWG.Dynamic.Internal
(
-- * DAWG type
  DAWG (..)
) where

import Control.Applicative ((<$>), (<*>))
import Data.Binary (Binary, put, get)

import Data.DAWG.Types
import Data.DAWG.Graph (Graph)
import qualified Data.DAWG.Dynamic.Node as N

-- | A directed acyclic word graph with phantom type @a@ representing
-- type of alphabet elements.
data DAWG a b = DAWG
    { graph :: !(Graph (N.Node b))
    , root  :: !ID }
    deriving (Show, Eq, Ord)

instance (Ord b, Binary b) => Binary (DAWG a b) where
    put d = do
        put (graph d)
        put (root d)
    get = DAWG <$> get <*> get