Я пытаюсь оптимизировать приложение 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
Как я могу преобразовать это, чтобы красиво поток потоков?
(Это только выдуманный пример для объяснения проблемы, реальная проблема намного сложнее).