Hi all, Using pandoc-types' Walkable class, what is the best-performing/most idiomatic way to filter out certain elements from a document? Say I wanted to remove all occurrences of the word "the" from a Pandoc. The best implementation I've been able to write for this is isThe :: Inline -> Bool isThe (Str "the") = True isThe _ = False removeThe :: Pandoc -> Pandoc removeThe = walk (filter $ not . isThe) Is this right? Does the use of filter here not mean an additional O(n) traversal happens on every list of Inlines? I feel like a better solution for this would be using filterThe :: Inline -> [Inline] filterThe (Str "the") = [] filterThe x = [x] or something similar, but of course removeThe = walk filterThe does not typecheck. We need a -> a, meaning [Inline] -> [Inline] here. The same question actually applies to any transformation which "changes the number of elements": theFine :: Inline -> [Inline] theFine (Str "the") = [Str "the", Space, Str "fine"] theFine i = [i] allIsFine :: Pandoc -> Pandoc allIsFine = walk $ concatMap theFine Best, Ilia P.S. Sorry if this has been asked before. I feel it must be a common issue, but all I've been able to find is this thread with its links, which are 7 years old now and seem to be calling for changes in pandoc. Everything else suggests stepping outside Haskell. -- You received this message because you are subscribed to the Google Groups "pandoc-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to pandoc-discuss+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To view this discussion on the web visit https://groups.google.com/d/msgid/pandoc-discuss/915213fc-e4c4-480b-a6a2-fd3420777ddan%40googlegroups.com.