pandoc-types- Types for representing a structured document

MaintainerJohn MacFarlane <>
Safe HaskellNone



Functions for manipulating Pandoc documents or extracting information from them by walking the Pandoc structure (or intermediate structures like '[Block]' or '[Inline]'. These are faster (by a factor of four or five) than the generic functions defined in Text.Pandoc.Generic.

Here's a simple example, defining a function that replaces all the level 3+ headers in a document with regular paragraphs in ALL CAPS:

 import Text.Pandoc.Definition
 import Text.Pandoc.Walk
 import Data.Char (toUpper)

 modHeader :: Block -> Block
 modHeader (Header n _ xs) | n >= 3 = Para $ walk allCaps xs
 modHeader x = x

 allCaps :: Inline -> Inline
 allCaps (Str xs) = Str $ map toUpper xs
 allCaps x = x

 changeHeaders :: Pandoc -> Pandoc
 changeHeaders = walk modHeader

query can be used, for example, to compile a list of URLs linked to in a document:

 extractURL :: Inline -> [String]
 extractURL (Link _ (u,_)) = [u]
 extractURL (Image _ (u,_)) = [u]
 extractURL _ = []

 extractURLs :: Pandoc -> [String]
 extractURLs = query extractURL


class Walkable a b whereSource


walk :: (a -> a) -> b -> bSource

walk f x walks the structure x (bottom up) and replaces every occurrence of an a with the result of applying f to it.

walkM :: (Monad m, Functor m) => (a -> m a) -> b -> m bSource

A monadic version of walk.

query :: Monoid c => (a -> c) -> b -> cSource

query f x walks the structure x (bottom up) and applies f to every a, appending the results.