榆树 - 对多种类型

时间:2015-12-05 17:28:10

标签: types combinations elm

上周我正在尝试使用榆树(所以请考虑我是初学者),并且想知道以下内容,

我已经定义了多个类型Foo和Bar,例如都有一个日期字段。

type alias Foo = 
{
    date : String,
    check : Bool
}

type alias Bar = 
{
    date : String,
    check : Bool,
    text : String
}

是否可以使用sort对两个列表进行组合和排序?(sort) 我想这样做来创建一个列表来呈现所有项目。

谢谢!

1 个答案:

答案 0 :(得分:7)

您可以创建一个联合类型,允许您拥有一个混合Foo和Bar的列表:

type Combined
  = FooWrapper Foo
  | BarWrapper Bar

现在您可以组合两个Foos和Bars列表,然后使用case语句作为sortBy参数:

combineAndSort : List Foo -> List Bar -> List Combined
combineAndSort foos bars =
  let
    combined =
      List.map FooWrapper foos ++ List.map BarWrapper bars
    sorter item =
      case item of
        FooWrapper foo -> foo.date
        BarWrapper bar -> bar.date
  in
    List.sortBy sorter combined