let dateRange (startDate : System.DateTime) (endDate : System.DateTime) =
let start = startDate.Date
let finish = endDate.Date
if start = finish then Seq.singleton start
if start < finish then fun d -> d <= finish
else fun d -> d >= finish
if start < finish then fun (d : System.DateTime) -> d.AddDays(1.0)
else fun (d : System.DateTime) -> d.AddDays(-1.0)
let rec getNext (nextDate : System.DateTime) =
if shouldContinue nextDate then
yield! getNext (nextDate |> moveNext)
dateRange (System.DateTime.Parse("08/01/2023 12:00:00 AM")) (System.DateTime.Parse("08/20/2023 12:00:00 AM"))
|> Seq.map (sprintf """{ "date": "%A" }""")