haskell - Opaleye 和 IfPP 中的 leftJoinF
问题描述
我想使用 aLEFT JOIN
来获取产品及其(可选)属性。我有如下类型:
type ProductPGR = ProductPoly (Column (PGID Product)) (Column PGText)
type ProductAttributePGR = ProductAttributePoly (Column (PGID ProductAttribute)) (Column (PGID Product)) (Column PGInt4)
我的意图是使用:
(p :: ProductPGR, pa :: Maybe ProductAttributePGR) <- leftJoinF
(\p' pa' -> (p', Just pa'))
(\p' -> (p', Nothing))
(\p' pa' -> productId p' .== paProductId pa')
productQuery
productAttributeQuery -< ()
这不会编译,因为:
No instance for (Default
IfPP
(Maybe
(ProductAttributePoly
(Column (PGID ProductAttribute))
(Column (PGID Product))
(Column PGInt4))))
(Maybe
(ProductAttributePoly
(Column (PGID ProductAttribute))
(Column (PGID Product))
(Column PGInt4))))
arising from a use of ‘leftJoinF’
我真的应该定义这个实例吗?它有什么用,我该怎么做?
或者如果我不应该使用Maybe
,我还能做什么?
解决方案
您不能Maybe
从功能连接中返回。功能连接允许您避免Nullable
从某种意义上说它对IS NULL
您隐藏检查。它不允许您将可空性“提升”到 Haskell 方面。
推荐阅读
- flutter - 在 Flutter 中,如何检测复制文件是否完成?
- reactjs - 将状态从“aspect:4/3”更改为设置变量“aspect:aspect_x/aspect_y”会出错
- django - 如何解决错误:配置不当:Windows 上的 Django 中需要 mysqlclient 1.3.13 或更高版本?
- c++ - 如何比较 C++ 中 lambda 函数的返回类型?
- python - 如何将 CSV 数据转换为 TFRecord 文件
- c# - Http 方法被重写 - Post => Get
- c++ - 如何在 c++ 类中克隆锯齿状数组?
- sql - PostgreSQL 匹配来自嵌套查询的字符串
- java - 为什么我们从存储库返回实时数据?(MVVM 安卓)
- c# - 将 C# 类的所有成员公开以供测试