Я хочу отобразить функцию типа Float -> Float
на часть структуры данных, которая выглядит следующим образом.
VDstruct { _onBuild = Just True
, _imageName = Just "arc.png"
, _category = Just "All"
, _mmo = Just 210
, _structTypes = Just
( Mage
{ _ict = Nothing
, _create = Just 1.24
, _sh = Nothing
}
}
Я хочу применить эту функцию к _ict
, _create
и _sh
.
Я знаю, как это сделать для каждого из них.
Я использую линзы, чтобы помочь мне с этим.
Результат имеет _create = Just 5.4
, что именно то, что я ожидаю от функции plusXPercent
.
Это то, что я сейчас использую.
setSer x = x & (structTypes . _Just . create) %~ fmap plusXPercent
То, что я хочу сделать, это вместо того, чтобы называть каждый _ict
, _sh
и т. Д. Мне нужен способ «отобразить» эту функцию на всю структуру Mage
.
Как мне это сделать?
Редактировать: _ict
, _create
и _sh
имеют тип Maybe Float
и Mage
определяется следующим образом
data Mage = Mage { _ict :: Maybe Float
, _create :: Maybe Float
, _sh :: Maybe Float
} deriving Show