Отображение данных списка haskell на веб-страницу - PullRequest
1 голос
/ 27 апреля 2011

Я использую Snap Framework и Haskell для создания простого веб-приложения. Я хочу знать, Как я могу отобразить список на веб-странице, вот так у меня есть список с именем и фамилией

[["firstName1","lastName1"],["firstName2","lastName2"],["firstName3","lastName3"]]

Я хочу отобразить эту информацию в двух столбцах. Каковы возможные способы сделать это, я смог связать информацию с одним значением и отобразить на веб-странице.

Ответы [ 2 ]

6 голосов
/ 27 апреля 2011

Предложение Дона Blaze-HTML является одним из способов сделать это, но я обнаружил, что когда я делаю это таким образом, у меня больше склонности нарушать обычно используемый шаблон проектирования MVC путем встраивания представления (в данном случае HTML ) в ваш код на Haskell. В некоторых случаях, если вы просто пытаетесь сделать что-то быстрое и грязное, это может быть то, что нужно сделать. Но если вы хотите, чтобы это вписывалось в более крупное приложение таким образом, чтобы отделить представление от контроллера и позволить проектировщикам работать с ним, незнакомым с Haskell, то вам лучше использовать систему шаблонов Heist.

У нас есть учебник Heist здесь . Я также недавно написал серию сообщений в блоге о подобных вещах. В частности, второй пост в серии , вероятно, наиболее актуален для вашего вопроса. Вот код, который делает что-то вроде того, что вы хотите:

names :: [(Text,Text)]
names = [("Alice", "Anderson"), ("Bob", "Brown")]

nameSplice :: (Text, Text) -> Splice Application
nameSplice name =
    runChildrenWithText [("firstName", fst name), ("lastName", snd name)]

namesSplice :: Splice Application
namesSplice = mapSplices nameSplice names

После того, как вы свяжете объединение имен где-то в вашем приложении с bindSplice "names" namesSplice, вы можете получить эти данные из шаблона, подобного этому:

<table>
<names>
  <tr><td><firstName/></td><td><lastName/></td></tr>
</names>
</table>

Приятно то, что веб-дизайнер полностью контролирует отображение имен. Если бы им нужно было изменить отображение на неупорядоченный список в формате «фамилия, имя», это было бы очень легко сделать здесь без необходимости перекомпилировать ваше приложение.

4 голосов
/ 27 апреля 2011

У меня есть сильное предпочтение blaze-html , как превосходного набора комбинаторов для быстрой трансляции структурированных типов данных Haskell в html.

У него хороший дом с множеством примеров , вот так:

{-# LANGUAGE OverloadedStrings #-}

import Prelude hiding (head)
import Control.Monad
import Text.Blaze.Html4.Strict
import Text.Blaze.Renderer.Text
import qualified Data.Text.Lazy.IO as T

main = T.writeFile "f" (renderHtml (draw xs))
  where
    xs = [("firstName1","lastName1"),("firstName2","lastName2"),("firstName3","lastName3")]

draw xs = html $ do
    head $ title "Example"
    body $ do
        h1 "Heading"
        table $ forM_ xs $ \(f,l) ->
            tr $ do
                td f
                td f

Генерирует строку text, содержащую эту таблицу:

Heading

firstName1  firstName1
firstName2  firstName2
firstName3  firstName3

Если вы можете вывести text из оснастки, у вас все будет хорошо.

...