簡體   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