Add TODO: handle line endings better
Add TODO: handle docs without titles better
Add TODO: detect errors and report to user
POST data as text/plain; charset=... in log script.

(greaselog.js does this without being told.)
Short-circuit via Either monad (instead of if) in app.
Require submissions to have Content-Type: text/*
Add TODO: add tests
Use withMVar instead of bracket/takeMVar/putMVar.
Report errors in greaselog.js
Short-circuit using EitherT.
Separate text decoding from main body of app.
Decode POSTed text using charset specified by client.
Reduce parentheses in body of app
Pass IO for whole body to getText, not IO for a chunk.