The Holey type

This is my version of the HoleyMonoid. To make this into a useful package I changed a few things.

The Category instance implied a name conflict burden with (.), so I changed that to (%):

(%) ::Monoid n =>Holey n b c ->Holey n b1 b ->Holey n b1 c

Rather than have the name-conflicting map function, I flipped the type arguments of the type and made it an instance of Functor.

Printers

There is an array of top-level printing functions for various output types:

-- | Run the formatter and return a lazy 'Text' value.format ::HoleyBuilderText a -> a
-- | Run the formatter and return a strict 'S.Text' value.sformat ::HoleyBuilderS.Text a -> a
-- | Run the formatter and return a 'Builder' value.bprint ::HoleyBuilderBuilder a -> a
-- | Run the formatter and print out the text to stdout.fprint ::HoleyBuilder (IO ()) a -> a
-- | Run the formatter and put the output onto the given 'Handle'.hprint ::Handle->HoleyBuilder (IO ()) a -> a

All the combinators work on a lazy text Builder which has good appending complexity and can output to a handle in chunks.