Как сделать параметрическое назначение записи в 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

Чтобы сделать что-то подобное, мне нужно было бы использовать переменные в левой части назначения записи, и, похоже, Хаскеллу не нравится эта идея. Есть ли альтернатива для достижения этого?

0 ответов

Другие вопросы по тегам