b }
data UserData = UserData { _uFieldA :: Maybe a, _uFieldB :: Maybe b }
есть подобного рода рекорды: рекорд приложения, где множество филдов разных типов и рекорд пользователя, где каждый тип обёрнут в Maybe. Как "применить" один рекорд на другой, без обилия копипасты или template haskell (его ещё не осилил)? Т.е. для всех не Nothing значений рекорда пользователя записать значение в рекорд приложения?
пытался вот так, но, очевидно, ничего не вышло (не подумал):
mergeConfiguration original user = foldl transfer original $ filter userSetValue originalOnUser
where transfer original' (originalPath, userPath) = over originalPath (const $ fromJust $ preview userPath user) original'
userSetValue (_, userPath) = isJust $ preview userPath user
originalOnUser =
[ fieldA
, fieldB
] `zip`
[ uFieldA
, uFieldB
]
Видимо никак?
Обсуждают сегодня