packages feed

LslPlus-0.1.2: src/Language/Lsl/Internal/BreakpointsDeserialize.hs

{-# OPTIONS_GHC -XFlexibleContexts #-}
module Language.Lsl.Internal.BreakpointsDeserialize(breakpointsElement, module Language.Lsl.Internal.Breakpoint) where

import Control.Monad.Error(MonadError)
import Language.Lsl.Internal.DOMProcessing(ElemAcceptor(..),elementList,findElement,simple)
import Language.Lsl.Internal.Breakpoint(Breakpoint(..),mkBreakpoint)
import Text.XML.HaXml(Content(..),Element(..))

breakpointsElement :: MonadError String m => ElemAcceptor m [Breakpoint]
breakpointsElement = elementList "breakpoints" breakpointElement

breakpointElement :: MonadError String m => ElemAcceptor m Breakpoint
breakpointElement =
    let f (Elem _ _ contents) = do
            (file,contents1) <- findElement (ElemAcceptor "file" simple) [ e | e@(CElem _ _) <- contents ]
            (lineStr,contents2) <- findElement (ElemAcceptor "line" simple) contents1
            return $ mkBreakpoint file (read lineStr) 0
    in ElemAcceptor "breakpoint" f