module Pangraph.GraphML.Parser ( parse, unsafeParse ) where import Data.Maybe import qualified Data.ByteString as BS import qualified Pangraph as P import qualified Text.XML.Hexml as H import qualified Pangraph.Internal.XMLTemplate as PT -- * Parsing -- | Returns 'Pangraph' if it can be parsed from a raw GraphML file. parse :: BS.ByteString -> Maybe P.Pangraph parse file = either (const Nothing) (PT.hexmlToPangraph PT.graphMLTemplate) (H.parse file) -- | Like 'parse' except it throws an error on Nothing, which is when parsing fails. unsafeParse :: BS.ByteString -> P.Pangraph unsafeParse file = fromMaybe (error "Parse failed") (parse file)