Le modèle de mon application Elm contient des enregistrements imbriqués. Je les configure actuellement avec des fonctions immuables normales.Enregistrements dynamiques dans Elm 0.18
Types.elm
type alias Model =
{ settings : Settings
...
}
type alias Settings =
{ username : String
, password : String
...
}
App.elm
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of
SetUsername username ->
(model |> setUserName username, Cmd.none)
SetPassword password ->
(model |> setPassword password, Cmd.none)
Setters.elm
setUserName : String -> Model -> Model
setUserName username model =
let
oldUserSettings =
model.userSettings
newUserSettings =
{ oldUserSettings | username = username }
in
{ model | userSettings = newUserSettings }
setPassword : String -> Model -> Model
setPassword password model =
let
oldUserSettings =
model.userSettings
newUserSettings =
{ oldUserSettings | password = password }
in
{ model | userSettings = newUserSettings }
Je voudrais généraliser les Setters afin que je puisse les définir dynamiquement. Quelque chose comme ceci:
setUserSettings : String -> String -> Model
setUserSettings field variable model =
let
oldUserSettings =
model.userSettings
newUserSettings =
{ oldUserSettings | field = variable }
in
{ model | userSettings = newUserSettings }
setUserName : String -> Model -> Model
setUserName value model =
setUserSettings username value
setPassword : String -> Model -> Model
setPassword value model =
setUserSettings password value
Quelle est la manière la plus semblable à l'orme de faire ceci?
Actuellement, il n'est pas possible de créer une fonction setter comme vous pouvez le faire pour un getter (par exemple '.myField'). Voir cette discussion: https://github.com/elm-lang/elm-compiler/issues/984 – Sidney