Hi,

I come from an OOP background and trying to make the leap to keeping all 
state in a single immutable data store, which has shown to be amazing as 
long as the system is small, but I am having trouble scaling up to anything 
beyond a toy app.

One big challenge is trying to update nested fields. For example if I want 
to change a forecast parameter in the following code:

-- Model
type alias Forecast =
  { parameters: Pf.ArpsParameters
  , production: List Float
  }
type alias Model =
  { primaryForecast: Forecast
  , secondaryForecast: Forecast
  }

-- Init

init : (Model, Cmd Msg)
init =
  (
    { primaryForecast =
      { parameters =
        { q = Nothing
        , de = Nothing
        , c = Nothing
        , months = [0..48]
        }
      , production = []
      }
    }
    , Cmd.none
  )


I end up with code like this:

update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
  let
    primaryForecast = model.primaryForecast
    parameters = model.primaryForecast.parameters
  in
    case msg of
      Q string -> ({ model | primaryForecast = { primaryForecast | 
parameters = { parameters | q = toMaybe (String.toFloat string) } } }, 
message UpdateProduction)
      De string -> ({ model | primaryForecast = { primaryForecast | 
parameters = { parameters | de = toMaybe (String.toFloat string) } } }, 
message UpdateProduction)
      C string -> ({ model | primaryForecast = { primaryForecast | 
parameters = { parameters | c = toMaybe (String.toFloat string) } }}, 
message UpdateProduction)
      UpdateProduction -> ...


This seems unnecessarily verbose, and I'm unsure whether I am turning wrong 
with how I am structuring data or if I am trying to modify data incorrectly.

Thanks for any help!

Austin

-- 
You received this message because you are subscribed to the Google Groups "Elm 
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elm-discuss+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to