haskell - yesod 回复纯文本

标签 haskell yesod

由于我对 Haskell 非常陌生,有人可以将我推向解决以下问题的正确方向......吗?

我从 Yesod 的脚手架应用程序开始。提供从数据库内容生成的 HTML 工作正常,但是是否有一种优雅的方法来创建迭代数据库表的纯文本响应?使用像这样的处理程序的简单纯文本

getTestR = return . RepPlain . toContent ...

也可以,但我想提供服务:

配置/模型:

File
    path Text
Conf
    key Text
    val Text
    file FileId

作为 SQL 查询中的明文:

select path, key, val from file, conf order by path, key;

由于 hamlet 用于生成 HTML,我想我必须完全在 Haskell 中生成响应(迭代数据库内容)?

如何在数据库实体和文本(或 Int,如果行的类型为 Int)之间进行转换,如何在数据库列 Id 之间进行转换?

最佳答案

带有纯文本模板!! ''#{expr}'' 允许 Text、String、Int32 或 Int64 表达式作为 Text.Shakespeare.Text.ToText 的实例

{-# LANGUAGE OverloadedStrings, ConstraintKinds #-} 
module Handler.Plain where

import Import
import qualified Data.List as List
import Database.Persist.Sqlite
import qualified Data.Text as Text
import Control.Monad.Logger (MonadLogger)
import Control.Monad.Trans.Resource (MonadResourceBase)
import Text.Shakespeare.Text                       -- for the plain text template

stmt :: Text
stmt = "SELECT ??, ??  FROM File, Conf ON Conf.file = File.id ORDER BY File.path, Conf.key"

getQryResult :: (PersistQuery SqlPersist m, MonadLogger m, MonadResourceBase m) => () -> SqlPersist m [(Text, Text, Text)]
getQryResult () = do
    result  <- rawSql stmt []

    return $ List.map getMyData (result :: [(Entity File, Entity Conf)])

  where
    getMyData (Entity _ file, Entity _ conf) = (filePath file, confKey conf, confVal conf)

getPlainR :: Handler RepPlain
getPlainR = do
    result <- runDB $ getQryResult ()
    return $ RepPlain $ toContent $ Text.unlines $ List.map formatMyData result
  where
    -- formatMyData (a, b, c) = Text.intercalate ", " [a,b,c]

    -- with a plain text template:
    formatMyData (a, b, c) = [st|
         #{a}, #{b}, #{c} |]  

关于haskell - yesod 回复纯文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14774278/

相关文章:

haskell - 使用 SIGUSR1 重新加载 yesod 网站的内容

haskell - 如何在持久化中存储代数数据类型

haskell - Haskell和Webframeworks

javascript - 在 Yesod 项目中的哪里包含静态 javascript?

haskell - 是否可以使用 Agda 作为库?

haskell - 使用特定类定义类型同义词

haskell - HackageDB 的用户名?

haskell - 如何使用列表理解创建多个/不同的自定义类型?

haskell - "No instance for (Ord k)"在 Data.Map.Map 上实现 Functor 时

haskell webframeworks 速度,GHCi 与编译