Есть ли способ использовать defaultLayout и источник (канал) в Yesod - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь оптимизировать приложение Yesod, чтобы оно работало в постоянном пространстве. Например, я читаю таблицу БД и отображаю ее в виде таблицы HTML. Я должен иметь возможность начать отправку первой строки, прежде чем закончить обработку полной таблицы. Я понимаю, что могу сделать это, используя selectSource (для чтения БД) и responseSource или responseSourceDB, но я как обернуть его в макет по умолчанию, используя defaultLayout?

В данный момент мне нужно использовать полный исходный код для создания списка и HTML-кода за один раз. Например, допустим, у меня есть (возможно, не компилируется)

   data User = {name :: Text, email :: Text } deriving ...

   userSource = selectSource [] [Asc UserName]
   userToTR user = [whamlet|
             <tr>
                  <td>#{user name}
                  <td>#{user email}


   getUsers :: Handler Html
   getUsers = do
      rows <- runConduit $ userSource =$= mapC userToTR =$= sinkList
      table = [whamlet|
         <table>
           <tr>
             <th>Name
             <th>Email
           ^{mconcat rows}

       defaultLayout table

Как я могу преобразовать это, чтобы красиво поток потоков? (Это только выдуманный пример для объяснения проблемы, реальная проблема намного сложнее).

...