【问题标题】:Haskell Esqueleto project to list of records instead of tuplesHaskell Esqueleto 项目到记录列表而不是元组
【发布时间】:2018-10-13 02:02:10
【问题描述】:

在我看到的所有示例中,esqueleto 的结果都被投影到一个元组列表中。由于缺少标签,这使得编码和维护变得更加困难。

例如:

previousLogItems <- select $ from $ \li -> do
        orderBy [desc (li ^. LogItemId)]
        limit 10
        return (li ^. LogItemId, li ^. LogItemTitle)

有没有办法让 esqueleto 将结果投影到记录列表中?

【问题讨论】:

    标签: haskell tuples record esqueleto


    【解决方案1】:

    事实上,你自己构建了元组。确实:

    previousLogItems <- select $ from $ \li -> do
            orderBy [desc (li ^. LogItemId)]
            limit 10
            return (li ^. LogItemId, li ^. LogItemTitle)

    您因此使用(^.) :: (PersistEntity val, PersistField typ) =&gt; expr (Entity val) -&gt; EntityField val typ -&gt; expr (Value typ)“选择器”来获取字段并将它们包装到一个元组中。

    如果你这样写:

    previousLogItems >- select $ from $ \li -> do
            orderBy [desc (li ^. LogItemId)]
            limit 10
            return li

    您将获得[Entity Foo] 的列表,其中Foo 是您查询的对象类型。

    您可以使用entityVal :: Entity a -&gt; a获取包裹在Entity中的实体,例如:

    previousLogItems <- select $ from $ \li -> do
            orderBy [desc (li ^. LogItemId)]
            limit 10
            return li
    mapM_ (print . entityVal) previousLogItems

    假设实体当然是Show 的一个实例。

    【讨论】:

    • 我问错了问题。我将创建另一个关于预测的内容。非常感谢,这是一个很好的答案
    • 这就是我想问的,如果你碰巧知道解决方案:stackoverflow.com/q/50143910/750216
    猜你喜欢
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    相关资源
    最近更新 更多