On a higher-level, you might want to reconsider the design of that function called parseHeader.
It has type: (a -> IO b) only because there's a special case "now" which apparently requires querying for the current time. Other than that, it's a pure function.