处理程序中实体列表的映射函数

Map function on a list of entities in handler

我有一个 ,它在服务之前将一些数据添加到 Entity 的 Json。

现在我想将相同的函数应用于我在执行操作时获得的实体列表:

getEventsR :: Handler Value
getEventsR = do
    events <- runDB $ selectList [] [] :: Handler [Entity Event]
    return $ object ["data" .= events]

如何将具有此类签名的函数应用到 events:

addMetaData :: EventId
            -> Event
            -> HandlerT App IO (Maybe Value)
addMetaData eid event = do

利用 Traversable 实例。

getEventsR :: Handler Value
getEventsR = do
    events <- runDB $ selectList [] [] :: Handler [Entity Event]
    maybeValues <- sequenceA [addMetaData eid event | Entity eid event <- events]
    return ...

两者都

  • sequenceA :: (Traversable t, Applicative app) => t (app a) -> app (t a)
  • sequence :: (Traversable t, Monad m) => t (m a) -> m (t a)

这里应该有用。 (在本例中 t ~ []app ~ HandlerT App IO。)