使用 HaskellDB 取消映射表记录的基本示例

2024-01-08

假设我有以下 (PostgreSQL) 表定义:

CREATE TABLE books (
    id serial NOT NULL,
    title character varying NOT NULL,

    PRIMARY KEY (id)
);

以及以下记录定义:

data Book = 
  { id :: Int
  , title :: String
  }

用于查询数据库中所有书籍的“unmap”函数的基本示例是什么,allBooks :: Database -> IO [Book]?


事实证明我的处理方式是错误的。

偶然发现之后马茨·劳哈拉 https://github.com/MasseR非常有帮助的博客文章,标题为使用 HaskellDB 的示例 http://users.utu.fi/machra/posts/2011-07-15-haskelldb.html,我能够编写一个测试项目来读取books table.

我首先需要定义“布局”,使用 haskelldb-th ,这还不错:

{-# LANGUAGE TemplateHaskell #-}

module Tables.Books (
    books
  , id
  , title
  , Books
  ) where

import Database.HaskellDB.CodeGen
import Prelude hiding (id)

mkDBDirectTable "Books" [
    ("id", [t|Int|])
  , ("title", [t|String|])
  ]

从那里开始,allBooks函数是:

allBooks db = query db $ do
    books <- table B.books
    return books

where B是导入模块的限定名称Tables.Books. allBooks具有类型:



allBooks :: Database
            -> IO
                 [Record
                    (Database.HaskellDB.HDBRec.RecCons
                       Tables.Books.Id
                       Int
                       (Database.HaskellDB.HDBRec.RecCons
                          Tables.Books.Title
                          String
                          Database.HaskellDB.HDBRec.RecNil))]
  

为了打印每个标题,我使用了:

main :: IO ()
main = do
    books <- postgresqlConnect [("host", "localhost"), ("user", "test"), ("password", "********")] allBooks
    mapM_ putStrLn (map (\r -> r!B.title) books)
    return ()

EDIT:我创建了一个 git 存储库,其中包含此示例的完整源代码:dtrebbien/haskelldb-示例 https://github.com/dtrebbien/haskelldb-example

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 HaskellDB 取消映射表记录的基本示例 的相关文章

随机推荐

  • 将整个 pandas multiIndex 数据框除以数据框变量

    我有一个如下形式的多索引数据框 如何将数据框中的所有值除以 df 三 one two three Number 1 2 3 1 2 3 1 2 3 Name grethe 0 299 1 444 0 920 1 378 0 376 0 39
  • 在groovy中读取Excel文件的最简单方法?

    是否有任何 warappers utils 可用于读取 Groovy 中的 Excel 文件 我正在寻找类似于 Groovy SQL 的东西rows功能如下面的 spock 测试示例所示 我的目的是用这个Spock 测试框架中使用 exce
  • 在 iOS 上签名的数据无法在 Java 中验证

    我有一些要在 iOS 上签名的数据SecKeyRawSign使用椭圆曲线私钥 但是 使用 Java 验证数据Signature verify 回报false 数据是一个随机的 64 位整数 像这样分成字节 uint64 t nonce so
  • python 3.6 multiprocessing.Pool() 使用 Windows 启动非常慢

    在 Windows 10 AMD Threadripper 16 核 CPU 64 GB RAM 快速 SSD 上运行 Python 3 6 4 64 位 在我开始此测试之前 没有其他任何东西正在运行 任何修复 解决方法 想法或解释将不胜感
  • Django 模板 - 将字符串拆分为数组

    我有一个模型字段 它存储 URL 列表 是的 我知道 这是错误的方式 作为url1 nurl2 nurl3 lt gt 我需要在模板中将字段拆分为数组 因此我创建了自定义过滤器 register filter name split def
  • 如何从命令 Visual Studio Extension 2017 获取 IWpfTextView

    我需要使用 TextViewAdornment 显示弹出窗口 它需要 IWpfTextView 有旧代码 private IWpfTextView GetWpfTextView IVsTextView vTextView IWpfTextV
  • 如何在代理后面使用捆绑器?

    我从以下输出中得到须藤捆绑安装命令 Fetching source index for http rubygems org Could not reach rubygems repository http rubygems org Coul
  • 在 Matlab 中交换 x 和 y 轴

    这里可能是简单的 matlab 问题 但我已经搜索过但无法弄清楚如何做到这一点 I ve got a variables which plot like this 我只是希望 x 轴成为 y 轴 反之亦然 我该如何交换它们 预先感谢您的帮助
  • 使用 ASP.NET MVC 5 和 Bootstrap 3 默认安装时,为什么样式会出现 403 错误,而字体会抛出 404 错误?

    使用默认安装的 ASP NET MVC 5 和更新的 Bootstrap 3 加载我的项目主页不会显示 CSS 样式或包含的字体字形 404 文件未找到错误 CSS 样式在 Content css 地址处收到 403 禁止查看文件夹内容 错
  • Hibernate二级缓存<>

    我想在我的 hibernate 项目中使用二级缓存 但我只了解一点关于 hibernate 二级缓存的知识 任何人都可以解释我应该如何在我的代码中使用它以及我需要什么配置和 jar 文件吗 我将这些设置设置为 hibernate cfg x
  • Scala 任务返回映射

    我有一种方法 readHeader 接受一个参数并返回任务 列表 标题 另一个方法调用多个 id 并返回列表 任务 列表 设备标题 如何退货任务 列表 列表 标题 兼容多id读取功能 trait M1 def readHeader id S
  • 当元素启用/禁用时触发函数

    这似乎是一件相对简单的事情 但我在任何地方都找不到关于如何做到这一点的任何信息 我有一个模式 在等待异步数据时打开并禁用输入 我想知道该输入何时启用 以便我可以集中输入 这就是我正在努力实现的目标 将其视为全局模式打开处理程序 modal
  • C语言中当前的微秒时间?

    如何在 Unix 平台上用 C 打印当前微秒时间 在 Linux 和 BSD 中 您可以使用gettimeofday 功能 这填充了一个timevalstruct 它有一个自纪元以来的秒字段和一个微秒字段 该函数已被弃用 分辨率越高时钟获取
  • PyQt5 图像和 QGridlayout

    我有一个小部件 它想要显示图像QLabel and QCheckBox 创建了 4 个类 每个类都包含一些要放在最终屏幕上的信息 Class Grid对齐和网格图像 文本和复选框 脚本运行后获取当前屏幕 当前小部件中没有出现图像 图像在哪里
  • 为什么以下操作数不能一起广播?

    数组的维度如下 dists 500 5000 train 5000 test 500 为什么前两个语句会抛出错误 而第三个语句却可以正常工作 dists train test Error ValueError operands could
  • 如何测试一个点是否在二维整数坐标中的凸多边形内部?

    多边形以 Vector2I 对象列表的形式给出 二维 整数坐标 如何测试给定点是否在内部 我在网上找到的所有实现都因一些微不足道的反例而失败 编写正确的实现似乎确实很难 语言并不重要 因为我会自己移植 如果它是凸的 检查它的一个简单方法是该
  • 有没有办法挂钩 Webpack 的 AST 使其识别新的模块格式?

    简洁版本 我们如何操作最终输出包的 AST 以及加载器内部文件的 AST 在这两种情况下 我都想操作现有的 AST 而不是解析源代码并创建新的 AST 我正在做的事情很慢 而且我知道 Webpack 一定已经做了 AST 所以我想避免重复工
  • PendingIntent 不适用于 Android O

    我的应用程序中有下载通知 我添加了 取消 按钮NotificationCompat Builder通过致电addAction 方法 但按钮在 Android O 设备上不起作用 当我按 取消 按钮时 什么也没有发生 但按钮在 Android
  • 在 Hive 中将字符串转换为时间戳

    我有一个值 2017 09 27T19 25 15 927 07 00 有什么方法可以将其转换为时间戳吗 我使用 Hive 1 1 0 select unix timestamp 2017 09 27T19 25 15 927 07 00
  • 使用 HaskellDB 取消映射表记录的基本示例

    假设我有以下 PostgreSQL 表定义 CREATE TABLE books id serial NOT NULL title character varying NOT NULL PRIMARY KEY id 以及以下记录定义 dat