diff --git a/other/example.hs b/other/example.hs
--- a/other/example.hs
+++ b/other/example.hs
@@ -1,11 +1,6 @@
-{-# OPTIONS_GHC -Wall #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-{-# LANGUAGE OverloadedLists #-}
+{-# LANGUAGE RebindableSyntax #-}
 {-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE TypeOperators #-}
-{-# LANGUAGE FlexibleInstances #-}
+{-# OPTIONS_GHC -Wall #-}
 
 import NumHask.Prelude
 import Readme.Lhs
diff --git a/other/readme-lhs.hsfiles b/other/readme-lhs.hsfiles
--- a/other/readme-lhs.hsfiles
+++ b/other/readme-lhs.hsfiles
@@ -8,31 +8,19 @@
 ----
 
 ```
-stack build --test --exec "$(stack path --local-install-root)/bin/{{name}}" --file-watch
+stack build --test --file-watch
 ```
 
 {-# START_FILE app/{{name}}.hs #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE OverloadedLabels #-}
+{-# LANGUAGE NegativeLiterals #-}
 {-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE RebindableSyntax #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE TypeOperators #-}
 {-# OPTIONS_GHC -Wall #-}
 
 import NumHask.Prelude
 
 main :: IO ()
-main = do
-  let n = 10
-  let answer = 1 + product [1..n::Integer]
-  print answer
+main = pure ()
 
 {-# START_FILE {{name}}.cabal #-}
 cabal-version: 2.4
@@ -52,18 +40,36 @@
   type: git
   location: https://github.com/{{github-username}}{{^github-username}}githubuser{{/github-username}}/{{name}}
 
+library
+  hs-source-dirs:
+    src
+  default-extensions:
+  ghc-options:
+    -Wall
+    -Wcompat
+    -Wincomplete-record-updates
+    -Wincomplete-uni-patterns
+    -Wredundant-constraints
+  build-depends:
+    base >=4.7 && <5,
+    lens >= 4 && < 5,
+    numhask >= 0.7 && < 0.8,
+    numhask-space >= 0.7 && < 0.8,
+    text >= 1.2 && < 1.3,
+  exposed-modules:
+
+  other-modules:
+  default-language: Haskell2010
+
 executable {{name}}
   main-is: {{name}}.hs
   hs-source-dirs: app
   build-depends:
     base >= 4.7 && < 5,
-    numhask-prelude >= 0.6
+    numhask >= 0.7 && < 0.8,
+    {{name}}
   default-language: Haskell2010
   default-extensions:
-    NegativeLiterals
-    NoImplicitPrelude
-    OverloadedStrings
-    UnicodeSyntax
   ghc-options:
     -funbox-strict-fields
     -fforce-recomp
@@ -71,10 +77,30 @@
     -rtsopts
     -with-rtsopts=-N
 
+test-suite test
+  type: exitcode-stdio-1.0
+  main-is: test.hs
+  hs-source-dirs:
+    test
+  build-depends:
+    base >=4.7 && <5,
+    doctest,
+    numhask >= 0.7 && < 0.8,
+    {{name}}
+  default-language: Haskell2010
+  default-extensions:
+  ghc-options:
+    -Wall
+    -Wcompat
+    -Wincomplete-record-updates
+    -Wincomplete-uni-patterns
+    -Wredundant-constraints
+
 {-# START_FILE .gitignore #-}
 /.stack-work/
 /dist-newstyle/
 TAGS
+stack.yaml.lock
 
 {-# START_FILE .projectile #-}
 
@@ -149,23 +175,35 @@
   esac
 
 {-# START_FILE stack.yaml #-}
-resolver: nightly-2020-06-25
+resolver: nightly-2020-11-19
 
 packages:
   - .
 
 extra-deps:
-  - git: https://github.com/tonyday567/numhask-space
-    commit: 6525f5096525196fe367dabdfe596a7bd0c0aa6c
-  - git: https://github.com/tonyday567/numhask
-    commit: 37ee8dced120f60a511baa6bb6c7ac382b1e8827
-    subdir: numhask-prelude
-  - git: https://github.com/tonyday567/numhask
-    commit: 37ee8dced120f60a511baa6bb6c7ac382b1e8827
-    subdir: numhask
+  - numhask-0.7.0.0
 
 {-# START_FILE hie.yaml #-}
 cradle:
   stack:
     - path: "./app/{{name}}.hs"
       component: "{{name}}:exe:{{name}}"
+    - path: "./src"
+      component: "{{name}}:lib"
+    - path: "./test/{{name}}.hs"
+      component: "{{name}}:test:{{name}}"
+
+{-# START_FILE test/test.hs #-}
+{-# OPTIONS_GHC -Wall #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+module Main where
+
+import NumHask.Prelude
+import Test.DocTest
+
+main :: IO ()
+main =
+  doctest
+  [
+  ]
diff --git a/readme-lhs.cabal b/readme-lhs.cabal
--- a/readme-lhs.cabal
+++ b/readme-lhs.cabal
@@ -1,8 +1,36 @@
 cabal-version:  2.4
 name:           readme-lhs
-version:        0.7.0
-synopsis:       See readme.md
-description:    See readme.md for description.
+version:        0.8.0
+synopsis:       Literate programming support.
+description:    This package provides support for literate programming in haskell, including:
+    .
+    -   conversion between *.lhs and *.hs formats.
+    .
+    -   insertion of program output into *.lhs and *.md for fast feedback in
+    development.
+    .
+    -   a simple wrapper for pandoc functionality.
+    .
+    -   a stack template, `readme-lhs`
+    .
+    == Usage
+    .
+    The best way to understand package functionality is to run the example.hs, with:
+    .
+    > stack build --test --exec "$(stack path --local-install-root)/bin/readme-lhs-example --file-watch
+    .
+    > import Readme.Lhs
+    > main =
+    >   void $
+    >   runOutput ("other/readme_.md", GitHubMarkdown) ("readme.md", GitHubMarkdown) $
+    >   output "example" (Fence "Simple example of an output")
+    .
+    == Template
+    .
+    To use the provided template, copy readme-lhs.hsfiles to a local directory, and try:
+    .
+    > stack new xyzzy readme-lhs
+
 category:       Development
 homepage:       https://github.com/tonyday567/readme-lhs#readme
 bug-reports:    https://github.com/tonyday567/readme-lhs/issues
@@ -24,10 +52,6 @@
   hs-source-dirs:
     src
   default-extensions:
-    NegativeLiterals
-    NoImplicitPrelude
-    OverloadedStrings
-    UnicodeSyntax
   ghc-options:
     -Wall
     -Wcompat
@@ -35,21 +59,19 @@
     -Wincomplete-uni-patterns
     -Wredundant-constraints
   build-depends:
-    attoparsec >= 0.13,
+    attoparsec >= 0.13 && < 0.14,
     base >=4.7 && <5,
     blaze-html >= 0.9,
     containers >= 0.6,
     foldl >= 1.4,
-    numhask >= 0.6 && < 0.7,
+    generic-lens >= 1.2 && < 3.0,
+    numhask >= 0.7 && < 0.8,
     pandoc >= 2.10,
     pandoc-types >= 1.21,
-    scientific >= 0.3,
-    tdigest >= 0.2,
     text >= 1.2,
     transformers >= 0.5
   exposed-modules:
     Readme.Convert
-    Readme.Format
     Readme.Lhs
   other-modules:
   default-language: Haskell2010
@@ -60,15 +82,10 @@
     other
   build-depends:
     base >=4.7 && <5,
-    numhask >= 0.6 && < 0.7,
-    readme-lhs,
-    text >= 1.2
+    numhask >= 0.7 && < 0.8,
+    readme-lhs
   default-language: Haskell2010
   default-extensions:
-    NegativeLiterals
-    NoImplicitPrelude
-    OverloadedStrings
-    UnicodeSyntax
   ghc-options:
     -Wall
     -Wcompat
@@ -81,10 +98,10 @@
   main-is: test.hs
   hs-source-dirs:
       test
-  default-extensions: NoImplicitPrelude UnicodeSyntax NegativeLiterals OverloadedStrings
+  default-extensions:
   build-depends:
     base >=4.7 && <5,
-    containers,
-    doctest,
-    readme-lhs
+    doctest >= 0.16 && < 0.18,
+    numhask >= 0.7 && < 0.8,
+    readme-lhs,
   default-language: Haskell2010
diff --git a/readme.md b/readme.md
--- a/readme.md
+++ b/readme.md
@@ -1,22 +1,43 @@
-[readme-lhs](https://tonyday567.github.io/readme-lhs) [![Build Status](https://travis-ci.org/tonyday567/readme-lhs.svg)](https://travis-ci.org/tonyday567/readme-lhs)
-=====================================================================================================================================================================
+# readme-lhs
 
+[![Build
+Status](https://travis-ci.org/tonyday567/readme-lhs.svg)](https://travis-ci.org/tonyday567/readme-lhs)
+[![Hackage](https://img.shields.io/hackage/v/readme-lhs.svg)](https://hackage.haskell.org/package/readme-lhs)
+
 <blockquote cite>
 The language in which we express our ideas has a strong influence on our
-thought processes. Knuth
+thought processes ~ Knuth
 </blockquote>
 
-example insert
+Support for literate programming in haskell including:
 
+-   conversion between *.lhs and *.hs formats.
+-   insertion of program output into *.lhs and *.md for fast feedback in
+    development.
+-   a simple wrapper for pandoc functionality.
+-   a stack template, `readme-lhs`
+
+## example insert
+
 ``` {.output .example}
 Simple example of an output
 ```
 
-template
-========
+# template
 
 A bare bones stack template is located in
 [other/readme-lhs.hsfiles](other/readme-lhs.hsfiles). It contains what
-you need to quickly get started with literate programming alongside the
-challenge of using a rapid workflow
-`stack build --test --exec "$(stack path --local-install-root)/bin/readme-lhs-example" --file-watch`.
+you need to quickly get started with literate programming and enjoy a
+rapid workflow
+
+Place this in a local directory and then:
+
+    stack new xyzzy readme-lhs
+    cd xyzzy
+    stack build
+
+will get you bootstrapped and ready to hack!
+
+# development
+
+`stack build --test --exec "$(stack path --local-install-root)/bin/readme-lhs-example --file-watch`.
diff --git a/src/Readme/Convert.hs b/src/Readme/Convert.hs
--- a/src/Readme/Convert.hs
+++ b/src/Readme/Convert.hs
@@ -1,7 +1,11 @@
 {-# LANGUAGE MultiWayIf #-}
-{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RebindableSyntax #-}
 {-# OPTIONS_GHC -Wall #-}
+{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
 
+-- | Helpers for converting between lhs and hs files.
+--
 module Readme.Convert
   ( Section (..),
     Block (..),
@@ -24,17 +28,20 @@
 import qualified Data.List as List
 import NumHask.Prelude hiding (print)
 
+-- | Type of file section
 data Section = Code | Comment deriving (Show, Eq)
 
+-- | A native section block.
 data Block = Block Section [Text] deriving (Show, Eq)
 
--- starting with .lhs bird style
+-- | *.lhs bird style
 bird :: A.Parser Block
 bird =
   (\x -> Block Code [x]) <$> ("> " *> A.takeText)
     <|> (\_ -> Block Code [""]) <$> (">" *> A.takeText)
     <|> (\x -> Block Comment [x]) <$> A.takeText
 
+-- | Parse an lhs-style block of text in
 parseLhs :: [Text] -> [Block]
 parseLhs text = L.fold (L.Fold step begin done) $ A.parseOnly bird <$> text
   where
@@ -68,6 +75,7 @@
         | otherwise ->
           xs
 
+-- | Convert a block of code into lhs.
 printLhs :: [Block] -> [Text]
 printLhs ss =
   mconcat $
@@ -85,8 +93,9 @@
         <> xs
         <> bool [""] [] (List.last xs == "")
 
--- coming from hs
--- normal code (.hs) is parsed where lines that are continuation of a section (neither contain clues as to whether code or comment) are output as Nothing, and the clues as to what the current and next section are is encoded as Just (current, next).
+-- | Parse a .hs
+--
+-- Normal code (.hs) is parsed where lines that are continuation of a section (neither contain clues as to whether code or comment) are output as Nothing, and the clues as to what the current and next section are is encoded as Just (current, next).
 normal :: A.Parser (Maybe (Section, Section), [Text])
 normal =
   -- Nothing represents a continuation of previous section
@@ -113,6 +122,7 @@
     -- everything else a continuation and verbatim
     (\x -> (Nothing, [x])) <$> A.takeText
 
+-- | Parse assuming a hs block of code
 parseHs :: [Text] -> [Block]
 parseHs text = L.fold (L.Fold step begin done) $ A.parseOnly normal <$> text
   where
@@ -131,6 +141,7 @@
         | null (ts <> ts') -> (Block s [], out)
         | otherwise -> (Block s (ts <> ts'), out)
 
+-- | Print a block of code to hs style
 printHs :: [Block] -> [Text]
 printHs ss =
   mconcat $
@@ -141,22 +152,26 @@
     )
       <$> ss
 
--- just in case there are ever other formats (YAML haskell anyone?)
+-- | just in case there are ever other formats (YAML haskell anyone?)
 data Format = Lhs | Hs
 
+-- | Print
 print :: Format -> [Block] -> [Text]
 print Lhs f = printLhs f
 print Hs f = printHs f
 
+-- | Parse
 parse :: Format -> [Text] -> [Block]
 parse Lhs f = parseLhs f
 parse Hs f = parseHs f
 
+-- | Convert a file from lhs to hs
 lhs2hs :: FilePath -> IO ()
 lhs2hs fp = do
   t <- readFile (fp <> ".lhs")
   writeFile (fp <> ".hs") $ unlines $ print Hs $ parse Lhs $ lines t
 
+-- | Convert a file from hs to lhs
 hs2lhs :: FilePath -> IO ()
 hs2lhs fp = do
   t <- readFile (fp <> ".hs")
diff --git a/src/Readme/Format.hs b/src/Readme/Format.hs
deleted file mode 100644
--- a/src/Readme/Format.hs
+++ /dev/null
@@ -1,102 +0,0 @@
-{-# LANGUAGE TupleSections #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RebindableSyntax #-}
-{-# OPTIONS_GHC -Wall #-}
-{-# OPTIONS_GHC -Wno-type-defaults #-}
-
--- | formatting of numbers and statistics
-module Readme.Format
-  ( average,
-    deciles,
-    percentile,
-    fixed,
-    commas,
-    prec,
-    secs,
-  ) where
-
-import NumHask.Prelude
-import Data.Scientific
-import Data.TDigest
-import qualified Data.Text as Text
-
--- | average
---
--- >>> average [0..1000]
--- 500.0
-average :: (Foldable f) => f Double -> Double
-average xs = sum xs / fromIntegral (length xs)
-
--- | compute deciles
---
--- >>> deciles 5 [1..1000]
--- [1.0,200.5,400.5,600.5000000000001,800.5,1000.0]
---
-deciles :: (Foldable f) => Int -> f Double -> [Double]
-deciles n xs =
-  ( \x ->
-      fromMaybe 0 $
-        quantile x (tdigest xs :: TDigest 25)
-  )
-    <$> ((/ fromIntegral n) . fromIntegral <$> [0 .. n])
-
--- | compute a percentile
---
--- >>> percentile 0.1 [1..1000]
--- 100.5
---
-percentile :: (Foldable f) => Double -> f Double -> Double
-percentile p xs = fromMaybe 0 $ quantile p (tdigest xs :: TDigest 25)
-
--- | fixed
--- >>> fixed 2 22.256
--- "22.26"
-fixed :: Int -> Double -> Text
-fixed n x
-  | Text.length a == 0 = "0." <> (Text.replicate (n - Text.length b) "0") <> b
-  | Text.length b == 0 = a
-  | otherwise = a <> "." <> b
-  where
-    i = show (round (x * (10.0 ^ n)) :: Integer) :: Text
-    (a, b) = Text.splitAt (Text.length i - n) i
-
--- | format a Float as a Scientific with a precision
--- >>> prec 3 123456
--- "1.235e5"
-prec :: Int -> Double -> Text
-prec p x = sciprec p (fromFloatDigits x)
-
--- | format with 1000 separated commas, and a fixed decimal part
--- >>> commas 2 123456.789
--- "123,456.79"
-commas :: Int -> Double -> Text
-commas n a
-  | a < 0 = "-" <> commas n (- a)
-  | a < 1000.0 = fixed n a
-  | otherwise = intPart (floor a) "" <> decPart (a - fromInteger (floor a))
-  where
-    intPart :: Integer -> Text -> Text
-    intPart x t
-      | x < 1000 = Text.pack (show x) <> t
-      | otherwise =
-        let (d, m) = divMod x 1000
-         in intPart d ("," <> Text.pack (show m))
-    decPart :: Double -> Text
-    decPart x = Text.drop 1 $ fixed n x
-
-sciprec :: Int -> Scientific -> Text
-sciprec n x = Text.pack $ formatScientific Exponent (Just n) x
-
--- | format as seconds
--- >>> secs 2 0.0000002345
--- "234ns"
-secs :: Int -> Double -> Text
-secs p s
-  | s < 0.0 = "-" <> secs p (- s)
-  | s >= 1.0 = fixed p s <> "s"
-  | s >= 1e-3 = fixed 0 (s * 1e3) <> "ms"
-  | s >= 1e-6 = fixed 0 (s * 1e6) <> "μs"
-  | s >= 1e-9 = fixed 0 (s * 1e9) <> "ns"
-  | otherwise = fixed p (s * 1e12) <> "ps"
diff --git a/src/Readme/Lhs.hs b/src/Readme/Lhs.hs
--- a/src/Readme/Lhs.hs
+++ b/src/Readme/Lhs.hs
@@ -1,10 +1,13 @@
 {-# LANGUAGE LambdaCase #-}
-{-# LANGUAGE MultiWayIf #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE NoImplicitPrelude #-}
 
+-- | Help for inserting programming output into an lhs or md-style file.
 module Readme.Lhs
-  ( -- * restricted pandoc types
+  ( -- * Usage
+    -- $setup
+
+    -- * pandoc
     Flavour (..),
     readPandoc,
     renderPandoc,
@@ -41,6 +44,7 @@
 import Text.Pandoc.Builder as B
 
 -- $setup
+--
 -- >>> :set -XOverloadedStrings
 -- >>> import Readme.Lhs
 -- >>> import Text.Pandoc.Builder as B
@@ -51,8 +55,9 @@
 --   use GitHubMarkdown for rendering code and results on github
 --
 --   The main differences between LHS and GitHubMarkdown is that GitHubMarkdown parses bird tracks as a BlockQuote.
+--
 -- >>> readPandoc "test/test.md" GitHubMarkdown
--- Right (Pandoc (Meta {unMeta = fromList []}) [Para [Str "haskell",Space,Str "LHS",Space,Str "style"],CodeBlock ("",["sourceCode","literate","haskell"],[]) "",Para [Str "bird-tracks"],BlockQuote [Para [Str "import",Space,Str "Readme.Lhs"]],Para [Str "code",Space,Str "block"],CodeBlock ("",[],[]) "indented\nunfenced code",Para [Str "github-style",Space,Str "fenced",Space,Str "code",Space,Str "blocks"],CodeBlock ("",["haskell"],[]) "",Para [Code ("",[],[]) "output test1"],Para [Str "php-style",Space,Str "fenced",Space,Str "code",Space,Str "blocks"],CodeBlock ("",["output","test1"],[]) "",Para [Str "raw",Space,Str "html"],RawBlock (Format "html") "<div><br><p>I am raw Html</p></div>"])
+-- Right (Pandoc (Meta {unMeta = fromList []}) [Para [Str "haskell",Space,Str "LHS",Space,Str "style"],CodeBlock ("",["sourceCode","literate","haskell"],[]) "",Para [Str "bird-tracks"],BlockQuote [Para [Str "import",Space,Str "Readme.Lhs"]],Para [Str "code",Space,Str "block"],CodeBlock ("",[],[]) "indented\nunfenced code",Para [Str "github-style",Space,Str "fenced",Space,Str "code",Space,Str "blocks"],CodeBlock ("",["haskell"],[]) "",Para [Code ("",[],[]) "output test1"],Para [Str "php-style",Space,Str "fenced",Space,Str "code",Space,Str "blocks"],CodeBlock ("",["output","test1"],[]) "",Para [Str "raw",Space,Str "html"],RawBlock (Format "html") "<div>",Para [RawInline (Format "html") "<br>",RawInline (Format "html") "<p>",Str "I",Space,Str "am",Space,Str "raw",Space,Str "Html",RawInline (Format "html") "</p>",RawInline (Format "html") "</div>"]])
 --
 -- >>> readPandoc "test/test.md" LHS
 -- Right (Pandoc (Meta {unMeta = fromList []}) [Plain [Str "haskell",Space,Str "LHS",Space,Str "style",SoftBreak,Str "```{.sourceCode",Space,Str ".literate",Space,Str ".haskell}",SoftBreak,Str "```",SoftBreak,Str "bird-tracks",SoftBreak,Str ">",Space,Str "import",Space,Str "Readme.Lhs",SoftBreak,Str "code",Space,Str "block",SoftBreak,Str "indented",SoftBreak,Str "unfenced",Space,Str "code",SoftBreak,Str "github-style",Space,Str "fenced",Space,Str "code",Space,Str "blocks",SoftBreak,Str "```",Space,Str "haskell",SoftBreak,Str "```",SoftBreak,Str "```",Space,Str "output",Space,Str "test1",SoftBreak,Str "```",SoftBreak,Str "php-style",Space,Str "fenced",Space,Str "code",Space,Str "blocks",SoftBreak,Str "```",Space,Str "{.output",Space,Str ".test1}",SoftBreak,Str "```",SoftBreak,Str "raw",Space,Str "html"],Div ("",[],[]) [Plain [LineBreak],Para [Str "I",Space,Str "am",Space,Str "raw",Space,Str "Html"]]])
@@ -64,8 +69,9 @@
 -- True
 data Flavour = GitHubMarkdown | LHS | Html deriving (Eq, Show, Ord)
 
--- | exts LHS is equivalent to 'markdown+lhs'
--- exts GitHubMarkdown is equivalent to 'gfm'
+-- | @exts LHS@ is equivalent to @markdown+lhs@
+-- @exts GitHubMarkdown@ is equivalent to @gfm@
+-- @exts Html@ is equivalent to @html@
 exts :: Flavour -> Extensions
 exts LHS = enableExtension Ext_literate_haskell $ getDefaultExtensions "markdown"
 exts GitHubMarkdown =
@@ -103,7 +109,7 @@
 -- | render a pandoc AST
 --
 -- >>> renderPandoc GitHubMarkdown (Pandoc mempty [table1])
--- Right "| first column | second column |\n|:-------------|--------------:|\n| first row    |             1 |\n| second row   |          1000 |\n"
+-- Right "| first column | second column |\n|:-------------|--------------:|\n| first row    |             1 |\n| second row   |          1000 |\n\nan example table\n"
 --
 -- >>> renderPandoc Html (Pandoc mempty [table1])
 -- Right "<table class=\"table table-bordered table-hover m-3\" style=\"width: 70%;\">\n<caption>an example table</caption>\n<thead>\n<tr class=\"header\">\n<th style=\"text-align: left;\">first column</th>\n<th style=\"text-align: right;\">second column</th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"odd\">\n<td style=\"text-align: left;\">first row</td>\n<td style=\"text-align: right;\">1</td>\n</tr>\n<tr class=\"even\">\n<td style=\"text-align: left;\">second row</td>\n<td style=\"text-align: right;\">1000</td>\n</tr>\n</tbody>\n</table>"
@@ -127,8 +133,10 @@
 -- | output can be native pandoc, text that replaces or inserts into the output code block, or Html.
 data Output = Native [Block] | Replace Text | Fence Text | RawHtml Text
 
+-- | a 'Map' of output keyed off of defined section names in the receiving file
 type OutputMap = Map Text Output
 
+-- | Insert a block into the 'OutputMap'
 insertOutput :: OutputMap -> Block -> [Block]
 insertOutput m b = case b of
   b'@(CodeBlock (id', classes, kv) _) ->
@@ -175,6 +183,7 @@
   either (pure . Left) (\t -> writeFile fo t >> pure (Right ())) w
 
 -- | create a simple table from Inlines
+--
 -- >>> defaultTable bootTableAttr (B.fromList [Str "an",Space,Str "example",Space,Str "table"]) [(AlignLeft, ColWidthDefault), (AlignRight, ColWidthDefault)] (B.fromList <$> [[Str "first",Space,Str "column"], [Str "second",Space,Str "column"]]) (fmap B.fromList <$> [[[Str "first",Space,Str "row"], [Str "1"]], [[Str "second",Space,Str "row"], [Str "1000"]]]) == singleton table1
 -- True
 defaultTable :: Attr -> Inlines -> [ColSpec] -> [Inlines] -> [[Inlines]] -> Blocks
@@ -211,6 +220,7 @@
 hask name t = codeWith (fromMaybe mempty name, ["sourceCode","literate","haskell"], []) t
 
 -- | create a badge link
+--
 -- >>> B.toList $ badge "Build Status" "https://travis-ci.org/tonyday567/readme-lhs.svg" "https://travis-ci.org/tonyday567/readme-lhs"
 -- [Link ("",[],[]) [Image ("",[],[]) [Str "Build Status"] ("https://travis-ci.org/tonyday567/readme-lhs.svg","")] ("https://travis-ci.org/tonyday567/readme-lhs","")]
 badge :: Text -> Text -> Text -> Inlines
diff --git a/test/test.hs b/test/test.hs
--- a/test/test.hs
+++ b/test/test.hs
@@ -1,16 +1,15 @@
+{-# LANGUAGE RebindableSyntax #-}
 {-# OPTIONS_GHC -Wall #-}
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
 
 module Main where
 
-import Prelude
+import NumHask.Prelude
 import Test.DocTest
 import Readme.Lhs
-import qualified Data.Map as Map
 
 main :: IO ()
 main =
   doctest
-  [ "src/Readme/Lhs.hs",
-    "src/Readme/Format.hs"
+  [ "src/Readme/Lhs.hs"
   ]
