2017-03-24 4 views
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 

このバージョンでは、私が何をしたいんの機能を提供し、私が望む方法ではありません。 LensesTraversalsを使いたいです。

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 

このトラバーサルを行うにはどうすればよいですか? freenodeの上glguyから

答えて

2

getScore :: GameS -> [(Text,GhoulCount)] 
getScore gs = 
    itoListOf (game_data_gs . players_gd . p_map . ifolded <. score) gs 
関連する問題