2
我有一些嵌套的记录(简化到相关字段)。Renfield:我如何使这个遍历工作?
data GameS = GameS { _game_data_gs :: GameData }
data GameData = GameData { _players_gd :: PlayerMap }
data PlayerMap = PlayerMap { _p_map :: Map PlayerName Player }
data Player = Player { _score :: GhoulCount }
我试图创建一个功能与这种类型的
playerScores :: GameS -> [(PlayerName, GhoulCount)]
这里是一个尝试,让我型
playerScores :: GameS -> [GhoulCount]
playerScores gs =
toListOf (game_data_gs . players_gd . p_map . traverse . score) gs
这个版本我想要做什么的功能,但不是我想要的方式。我想使用Lenses
和Traversals
。
playerScores :: GameS -> [(PlayerName,GhoulCount)]
playerScores gs =
Data.Map.Strict.toList $
Data.Map.Strict mapWithKey (\_ v -> _score v) $
view (game_data_gs . players_gd . p_map) gs
那么我该如何做这个遍历工作?