Как сделать параметрическое назначение записи в Haskell?
Предположим, у нас есть такой тип данных:
data NodeProperties =
NodeProperties
{
p1 :: PropertyInfo Bool,
p2 :: PropertyInfo [String],
p3 :: PropertyInfo [String],
p4 :: PropertyInfo Bool,
p5 :: PropertyInfo [String]
}
deriving (Show, Data, Typeable)
и у нас есть функция модификации, которая имеет такие предложения:
| p1Prefix /= Nothing =
let
value = readBoolean p1Prefix
newProperties =
properties
{
p1 = (p1 properties){value = Just value}
}
in
modifyPropertiesNode pragmas newProperties
| p2Prefix /= Nothing =
let
value = readStringList p2Prefix
newProperties =
properties
{
p2 = (p2 properties){value = Just value}
}
in
modifyPropertiesNode pragmas newProperties
На мой взгляд, было бы лучше обобщить код выше на что-то вроде кода ниже.
| p1Prefix /= Nothing =
updateProperty p1 readBoolean p1Prefix pragmas
| p2Prefix /= Nothing =
updateProperty p2 readStringList p2Prefix pragmas
Чтобы сделать что-то подобное, мне нужно было бы использовать переменные в левой части назначения записи, и, похоже, Хаскеллу не нравится эта идея. Есть ли альтернатива для достижения этого?