content: {-# LANGUAGE CPP #-}
  {-# LANGUAGE DeriveDataTypeable #-}
  {-# LANGUAGE FlexibleContexts #-}
  {-# LANGUAGE FlexibleInstances #-}
  {-# LANGUAGE LambdaCase #-}
  {-# LANGUAGE TemplateHaskell #-}
  
  module Text.Heterocephalus.Parse
    ( module Text.Heterocephalus.Parse
    , module Text.Heterocephalus.Parse.Control
    , module Text.Heterocephalus.Parse.Doc
    , module Text.Heterocephalus.Parse.Option
    ) where
  
  import Text.Heterocephalus.Parse.Control (Content(..), parseLineControl)
  import Text.Heterocephalus.Parse.Doc
         (Doc(..), parseDocFromControls)
  import Text.Heterocephalus.Parse.Option
         (ParseOptions(..), createParseOptions, defaultParseOptions)
  
  docFromString :: ParseOptions -> String -> [Doc]
  docFromString opts s =
    case parseDoc opts s of
      Left s' -> error s'
      Right d -> d
  
  parseDoc :: ParseOptions -> String -> Either String [Doc]
  parseDoc opts s = do
    controls <- parseLineControl opts s
    case parseDocFromControls controls of
      Left parseError -> Left $ show parseError
      Right docs -> Right docs
  