>>659
たとえば、メインループを行う関数がCにあるなら、それを

loop :: (MonadIO m) -> Source m A -> Sink A m () -> m ()
loop source sink = input >>= \case ...

みたいに定義して、main内で、

runSqlite $ loop viewRecords recordsSink

みたいに呼ぶ

メインループがmain側にある場合も基本は同じで、mainが
viewRecordsを渡してやる