elm - 联合类型和模型

elm - union types and the model

this 指南中的以下代码使用联合类型来保存所有可能的小部件类型,然后呈现视图:

type Widget
    = ScatterPlot (List (Int, Int))
    | LogData (List String)
    | TimePlot (List (Time, Int))

view : Widget -> Element
view widget =
    case widget of
      ScatterPlot points ->
          viewScatterPlot points

      LogData logs ->
          flow down (map viewLog logs)

      TimePlot occurrences ->
          viewTimePlot occurrences 

我的基本问题是:

关于Widget类型,这里的底层模型是什么?

给定一个动作(例如,用户想要查看散点图小部件),应更新的底层结构是什么?

小部件是您的原始数据。然后您需要单独建模要显示的数据

type alias Model = Widget

然后假设您有一些传入的 IO 数据

update action model = 
  case action of 
    ScatterPoints pts ->     -- List (Int, Int)
      ScatterPlot pts
    LogPoints pts ->
      LogData pts
    ...

然后将数据加载到正确类型的 Widget 中,原始问题中的视图函数将知道如何处理数据