繁体   English   中英

Haskell Esqueleto项目将记录列表而不是元组

[英]Haskell Esqueleto project to list of records instead of tuples

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

例如:

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

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

实际上,您可以自己构造元组。 确实:

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

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

如果您这样写:

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

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

您可以使用entityVal :: Entity a -> a获得包装在Entity ,例如:

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

给定该实体当然是Show的实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM