関数型プログラミング言語Haskell Part24
■ このスレッドは過去ログ倉庫に格納されています
0636デフォルトの名無しさん
2014/01/25(土) 22:01:10.28Conduit のソース側で、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のモデルの意味ではない)は、
モデルビューアーキテクチャには向かないのかな?
■ このスレッドは過去ログ倉庫に格納されています