Persist + Conduit について質問。

Conduit のソース側で、Persist を使ってデータベースから行を読み取りデータ型Aのリストを流し、
Conduit のシンク側で、そのデータ型Aを使って print 関数なんかで表示する

ということをやってみようとしてて、本当はモデルビューアーキテクチャで分けたいんだけど、
ソース側とシンク側が強く結びついてしまって、なかなかうまく分離できない。
(もちろん、ソース側をモデルに、シンク側をビューに置く)

ソース側の型は (PersistMonadBackend m ~ SqlBackend, PersistQuery m) => Int -> Source m A
シンク側の型は (MonadIO m) => Int -> Sink A m ()

これだけなら綺麗に分けられそうだけど、
ソース側とシンク側を繋げる関数を分ける関数の型が
(PersistMonadBackend m ~ SqlBackend, PersistQuery m) => m IO
となってしまう。

つまり、PersistMonadBackend m ~ SqlBackend, PersistQuery m この制約が、
モデルだけに限らず、ビュー側(あるいは間を取り持つところ)にまで影響する。

なので、もしモデルのソース側を Persist を使わず、別のなにか、
たとえばただのファイル読み取りにしようとすると、
ビュー側(あるいは間を取り持つところ)の型まで変えなければならない。


Conduit が表現しようとしているモデル(紛らわしいがMVのモデルの意味ではない)は、
モデルビューアーキテクチャには向かないのかな?