    {-# LANGUAGE CPP #-}
    -- | A module for containing some CPPed code, due to:
    --
    -- https://github.com/yesodweb/wai/issues/192
    module Network.Wai.Middleware.RequestLogger.Internal
        ( getDateGetter
        , logToByteString
        ) where

    #if !MIN_VERSION_wai_logger(2, 2, 0)
    import Control.Concurrent (forkIO, threadDelay)
    import Control.Monad (forever)
    #endif
    import Data.ByteString (ByteString)
    import Network.Wai.Logger (clockDateCacher)
    import System.Log.FastLogger (LogStr, fromLogStr)

    logToByteString :: LogStr -> ByteString
    logToByteString :: LogStr -> ByteString
    logToByteString = LogStr -> ByteString
    fromLogStr

    getDateGetter :: IO () -- ^ flusher
                  -> IO (IO ByteString)
    #if !MIN_VERSION_wai_logger(2, 2, 0)
    getDateGetter flusher = do
        (getter, updater) <- clockDateCacher
        _ <- forkIO $ forever $ do
            threadDelay 1000000
            updater
            flusher
    #else
    getDateGetter :: IO () -> IO (IO ByteString)
    getDateGetter IO ()
    _ = do
        (IO ByteString
    getter, IO ()
    _) <- IO (IO ByteString, IO ())
    clockDateCacher
    #endif
        IO ByteString -> IO (IO ByteString)
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return IO ByteString
    getter