Elm/html:不同类型元素的有序列表

Elm/html: ordered list of different kind of elements

我在查看一些 Elm 示例时发现 "Example 3: A Dynamic List of Counters"。我想改变它以包含复选框,因此一个带有计数器 and/or 复选框的列表。每个都有自己的动作和模型(例如名称和选中的布尔值)。最重要的是,我想对列表进行排序,以便选中的复选框全部出现在顶部,未选中的出现在底部,计数器出现在中间。

虽然我找不到任何关于如何做和构造它的例子。有帮助吗?

注意:我对 Elm(以及一般的函数式编程)还很陌生。

谢谢!

实现此目的的一种方法是为项目使用联合类型(未经测试,我现在没有 Elm 环境来检查它):

type Item = Checkbox String Bool | Counter

type alias Model =
    { items : List ( ID, Item )
    , nextID : ID
    }

根据项目的类型,您可以将其呈现为

viewItem item =
   case item of
     Counter value -> renderCounter value
     CheckBox name state -> renderCheckbox name state

您的视图所要做的就是为每个项目调用 viewItem,对项目进行排序并将所有内容放入容器中(例如 div):

view address model =
  let 
    items = List.map (viewItem address) model.items 
            |> List.sort (your custom sorting here)
  in
      div [] ([remove, insert] ++ items)