I'm developing a Yesod application and I'm encountering an error while trying to use [`sendFlush`](http://hackage.haskell.org/package/yesod-core-1.4.24/docs/Yesod-Core-Handler.html#v:sendFlush) and [`sendChunkBS`](http://hackage.haskell.org/package/yesod-core-1.4.24/docs/Yesod-Core-Handler.html#v:sendFlush) inside a [`forkIO`](http://hackage.haskell.org/package/threads-0.5.1.4/docs/Control-Concurrent-Thread.html#v:forkIO).

`sendFlush` and `sendChunkBS` are of type `Monad m => Producer m (Flush Builder)` but `forkIO` requires an `IO ()`.

Here is the code:

```
respondSource "" $ do
  sendFlush

  (rid, rwait) <- liftIO $ T.forkIO $
    do
      let loop = do
            output <- liftIO $ SB.recv targetSocket (2^11)
            liftIO $ putStrLn $ "SB.recv: " ++ BSC.unpack output

            when (not $ BS.null output) $
              do
                sendChunkBS output
                sendFlush
                loop
      loop

```

and the error:

```
Couldn't match expected type ‘IO a0’
            with actual type ‘C.ConduitM
                                i0 (C.Flush Data.ByteString.Builder.Internal.Builder) m0 ()’
Relevant bindings include
  loop :: C.ConduitM
            i0 (C.Flush Data.ByteString.Builder.Internal.Builder) m0 ()
    (bound at app/Main.hs:96:13)
In a stmt of a 'do' block: loop
In the second argument of ‘($)’, namely
  ‘do { let loop = ...;
        loop }’

```