packages feed

heterocephalus-1.0.3.0: src/Text/Heterocephalus/Parse.hs

{-# 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
  ) where

import Text.Heterocephalus.Parse.Control (Content(..), parseLineControl)
import Text.Heterocephalus.Parse.Doc
       (Doc(..), parseDocFromControls)

docFromString :: String -> [Doc]
docFromString s =
  case parseDoc s of
    Left s' -> error s'
    Right d -> d

parseDoc :: String -> Either String [Doc]
parseDoc s = do
  controls <- parseLineControl s
  case parseDocFromControls controls of
    Left parseError -> Left $ show parseError
    Right docs -> Right docs