【发布时间】:2016-07-20 02:26:47
【问题描述】:
是否可以使用esqueleto 创建一个返回常量值的查询?比如SELECT 1。
【问题讨论】:
-
试试
select (return 1)-- 现在不能检查,但它可能会工作。 -
@chi:很遗憾没有:
No instance for (Database.Esqueleto.Internal.Sql.SqlSelect Int r0)
是否可以使用esqueleto 创建一个返回常量值的查询?比如SELECT 1。
【问题讨论】:
select (return 1) -- 现在不能检查,但它可能会工作。
No instance for (Database.Esqueleto.Internal.Sql.SqlSelect Int r0)
试试这个:
import Database.Esqueleto
-- | We have to specialize `val` or else the type inferencer
-- will complain about the `Esqueleto` instance.
val_ :: Int -> SqlExpr (Value Int)
val_ = val
query :: SqlPersistT IO [Value Int]
query = select $ return (val_ 1)
@chi 的评论很接近,但需要将1 提升为SqlExpr。 val 是通用编写的,依赖于 Esqueleto 类实例。通常,只要您使用 from 并拉入 SQL 表,类型推断器就会抓住它,但由于这里没有可用的,我们必须手动专门化。
总体而言,这是一个很好的例子,说明类型类如何混淆含义并迫使人们转向文档或论坛。
【讨论】: