Due to the coroutine-based nature of conduit, this kind of approach isn't possible. In short, when you're inside the `ConduitT` transformer, you cannot use `timeout` on a `ConduitT` action because you need to yield control of execution to a different coroutine. Instead, you should move the `timeout` call to _outside_ the `ConduitT` parts, e.g.:
timeout foo $ runConduit $ src .| satisfy .| sink
It seems like in this case, that kind of timeout usage is going to be too coarse-grained. I haven't used it personally, but the `stm-conduit` package probably has something in the direction you're looking for. Alternatively, I put together an example of how this might be done using some standard Haskell libraries like stm and async here:
The basic idea is to have two sibling threads: one running the original source and writing its values to a queue, and another running the full conduit pipeline with a modified source that will time out on reads from that queue.