bluedogtraining / bdt-elm / List.Bdt

List Helpers

Grouping

groupWhile : (a -> a -> Basics.Bool) -> List a -> List (List.Nonempty.Nonempty a)

Group while a condition holds true

[ { name = "One", date = Time.second * 1 |> Date.fromTime }
, { name = "Two", date = Time.second * 2 |> Date.fromTime }
, { name = "Three", date = Time.second * 1 |> Date.fromTime }
]
    |> List.sortWith (\rec1 rec2 -> Date.order rec1.date rec2.date)
    |> List.groupWhile (\rec1 rec2 -> rec1.date == rec2.date)

Will result in:

[ Nonempty { name = "One", date = Time.second * 1 |> Date.fromTime } [ { name = "Three", date = Time.second * 1 |> Date.fromTime } ]
, Nonempty { name = "Two", date = Time.second * 2 |> Date.fromTime } []
]

If we didn't sort, we would be getting, :

[ Nonempty { name = "One", number = 1 } []
, Nonempty { name = "Two", number = 2 } []
, Nonempty { name = "Three", number = 1 } []
]