]> git.wincent.com - docvim.git/commitdiff
Avoid unwanted intermediate list in `cosmosOf uniplate`
authorGreg Hurrell <greg@hurrell.net>
Wed, 8 Jun 2016 01:41:34 +0000 (18:41 -0700)
committerGreg Hurrell <greg@hurrell.net>
Wed, 8 Jun 2016 01:41:34 +0000 (18:41 -0700)
Who knows: perhaps Haskell's magical laziness would have made these equivalent,
or perhaps this still ends up producing an intermediate list. But at least it
*looks* better.

Figured out by poring over the function list in the lens docs looking for likely
candidates.

lib/Docvim/Visitor/Section.hs

index 6d3683a66073544c8d6069647c54c82f476eb9bf..c43e58fe26c72d723dd6db81cd386e2634a5d3d6 100644 (file)
@@ -58,9 +58,8 @@ defaultSectionInfo = SectionInfo { _hasCommand = False
 --   - DON'T we have either? -> do nothing
 --
 getSectionInfo :: Node -> SectionInfo
-getSectionInfo n = execState (mapM_ check nodes) defaultSectionInfo
+getSectionInfo n = execState (mapMOf_ (cosmosOf uniplate) check n) defaultSectionInfo
   where
-    nodes = n ^.. cosmosOf uniplate
     check (CommandAnnotation {}) = hasCommand .= True
     check CommandsAnnotation     = hasCommands .= True
     check (FunctionAnnotation _) = hasFunction .= True