Pretty.hs 651 B

12345678910111213141516171819202122
  1. {-# LANGUAGE OverloadedStrings #-}
  2. module Bunyan.Pretty (pretty) where
  3. import qualified Data.Foldable as F
  4. import qualified Data.Map as M
  5. import Data.Monoid ((<>))
  6. import qualified Data.Sequence as S
  7. import qualified Data.Text as T
  8. pretty :: M.Map T.Text (S.Seq (S.Seq T.Text)) -> T.Text
  9. pretty messages = T.unlines $ concat
  10. [ section annot fields
  11. | (annot, fields) <- M.toList messages
  12. , not (S.null fields)
  13. ]
  14. section :: T.Text -> S.Seq (S.Seq T.Text) -> [T.Text]
  15. section annot fields =
  16. let bullet [] = []
  17. bullet (x:xs) = ("* " <> x) : map (" " <>) xs
  18. in "" : (annot <> ":") : F.foldMap bullet (fmap F.toList fields)