@@ -7,6 +7,8 @@ module JbeamEdit.Transformation.VertexExtraction (
77) where
88
99import Control.Monad (guard )
10+ import Control.Monad.Except (runExcept )
11+ import Control.Monad.Trans.Except (except )
1012import Data.Char (isDigit )
1113import Data.List.NonEmpty (NonEmpty (.. ))
1214import Data.List.NonEmpty qualified as NE
@@ -201,30 +203,28 @@ newVertexTree brks vertexNames badAcc vertexForest nodes =
201203 topComments = mapMaybe toInternalComment topNodes
202204 topMeta = M. unions . map metaMapFromObject $ topNodes
203205 vertexPrefix = getVertexPrefix' nodes'
204- in case breakVertices vertexPrefix vertexNames nodes' of
205- Left err -> Left err
206- Right (vertexNames', vertexNodes, rest') ->
207- case nodesToAnnotatedVertices topMeta vertexNodes of
208- Left err -> Left err
209- Right (badNodes, avNE) ->
210- let firstAV = NE. head avNE
211- vertexTree = VertexTree topComments avNE
212- in case determineGroup brks (aVertex firstAV) of
213- Just treeType ->
214- let updatedForest = insertTreeInForest treeType vertexTree vertexForest
215- in Right
216- (vertexNames', badAcc <> badNodes, treeType, vertexTree, updatedForest, rest')
217- Nothing -> Left " invalid breakpoint"
218-
219- determineGroup :: XGroupBreakpoints -> Vertex -> Maybe VertexTreeType
206+ in runExcept
207+ ( do
208+ (vertexNames', vertexNodes, rest') <-
209+ except (breakVertices vertexPrefix vertexNames nodes')
210+ (badNodes, avNE) <- except (nodesToAnnotatedVertices topMeta vertexNodes)
211+ let firstAV = NE. head avNE
212+ vertexTree = VertexTree topComments avNE
213+ treeType <- except . determineGroup brks . aVertex $ firstAV
214+ let updatedForest = insertTreeInForest treeType vertexTree vertexForest
215+ pure
216+ (vertexNames', badAcc <> badNodes, treeType, vertexTree, updatedForest, rest')
217+ )
218+
219+ determineGroup :: XGroupBreakpoints -> Vertex -> Either Text VertexTreeType
220220determineGroup (XGroupBreakpoints brks) v =
221221 case [vtype | (XGroupBreakpoint f brk, vtype) <- brks, applyOperator f (vX v) brk] of
222- (vtype : _) -> Just vtype
223- [] -> Nothing
222+ (vtype : _) -> Right vtype
223+ [] -> Left " invalid breakpoint "
224224
225- determineGroup' :: XGroupBreakpoints -> Vertex -> Maybe VertexTreeType
225+ determineGroup' :: XGroupBreakpoints -> Vertex -> Either Text VertexTreeType
226226determineGroup' brks v
227- | isSupportVertex v = Just SupportTree
227+ | isSupportVertex v = Right SupportTree
228228 | otherwise = determineGroup brks v
229229
230230nodesListToTree
0 commit comments