diff --git a/src-extra/transformation/JbeamEdit/Transformation.hs b/src-extra/transformation/JbeamEdit/Transformation.hs index b49574ca..c022ce2b 100644 --- a/src-extra/transformation/JbeamEdit/Transformation.hs +++ b/src-extra/transformation/JbeamEdit/Transformation.hs @@ -317,7 +317,7 @@ vertexForestToNodeVector initialMeta vf = oMap (_, listsOfNodes) = mapAccumL stepType initialMeta treesOrder - in V.fromList (concat listsOfNodes) + in foldMap V.fromList listsOfNodes treesOrder :: [VertexTreeType] treesOrder = [LeftTree, MiddleTree, RightTree, SupportTree] diff --git a/src-extra/transformation/JbeamEdit/Transformation/BeamExtraction.hs b/src-extra/transformation/JbeamEdit/Transformation/BeamExtraction.hs index 7e199f58..0c95705f 100644 --- a/src-extra/transformation/JbeamEdit/Transformation/BeamExtraction.hs +++ b/src-extra/transformation/JbeamEdit/Transformation/BeamExtraction.hs @@ -7,6 +7,8 @@ import Data.Map (Map) import Data.Map qualified as M import Data.Maybe (catMaybes) import Data.Ord (Down (Down)) +import Data.Set (Set) +import Data.Set qualified as S import Data.Text (Text) import Data.Vector (Vector) import Data.Vector qualified as V @@ -20,15 +22,14 @@ beamQuery :: NP.NodePath beamQuery = fromList [NP.ObjectIndex 0, NP.ObjectKey "beams"] rejectUnknownName - :: Foldable t - => t Text + :: Set Text -> Maybe (Vector Text) -> Maybe (Vector Text) rejectUnknownName knownNodeNames maybeBeam = bool maybeBeam Nothing - (any (any (`notElem` knownNodeNames)) maybeBeam) + (any (any (`S.notMember` knownNodeNames)) maybeBeam) possiblyBeam :: Node -> Either Node (Maybe (Vector Text)) possiblyBeam node @@ -53,7 +54,7 @@ vertexConns vertexConns maxSupport topNode vsPerType = go <$> extractBeams topNode where - knownNodeNames = concatMap (map anVertexName) vsPerType + knownNodeNames = foldMap (foldr (S.insert . anVertexName) mempty) vsPerType go beams = let possiblyInnerBeam = (:) . fmap (rejectUnknownName knownNodeNames) . possiblyBeam (badNodes, beamPairs) = diff --git a/src/JbeamEdit/Core/Node.hs b/src/JbeamEdit/Core/Node.hs index dca96190..8a7e0bbd 100644 --- a/src/JbeamEdit/Core/Node.hs +++ b/src/JbeamEdit/Core/Node.hs @@ -121,7 +121,7 @@ possiblyChildren n = expectArray n <|> expectObject n moreNodesThanOne :: Vector Node -> Bool moreNodesThanOne v - | len == 1 = any moreNodesThanOne . possiblyChildren $ V.head v + | len == 1 = any moreNodesThanOne . possiblyChildren $ V.unsafeHead v | len > 1 = True | otherwise = False where diff --git a/src/JbeamEdit/Formatting.hs b/src/JbeamEdit/Formatting.hs index 22c22a95..bb87eac7 100644 --- a/src/JbeamEdit/Formatting.hs +++ b/src/JbeamEdit/Formatting.hs @@ -128,11 +128,10 @@ applyIndentation n s | otherwise = T.replicate n " " <> s skipHeaderRow :: Vector (Vector Node) -> Vector (Vector Node) -skipHeaderRow nodes = - case V.uncons nodes of - Just (headerRow, rest) -> - bool nodes rest (all isStringNode headerRow) - Nothing -> nodes +skipHeaderRow nodes + | V.length nodes > 1 = + bool nodes (V.unsafeTail nodes) (all isStringNode $ V.unsafeHead nodes) + | otherwise = nodes maxColumnLengths :: RuleSet -> NC.NodeCursor -> Vector (Vector Node) -> Vector Int