In fact just modify `readFromSource` to take a reader instead of a Source