On Sunday, 30 January 2022 at 16:08:17 UTC, SealabJaster wrote:
On Sunday, 30 January 2022 at 10:58:33 UTC, 9il wrote:
...
...
I missed the full example I wanted to give:

```fsharp
let (|Seconds|NotANumber|) (str : string) =
    let mutable value = 0.0
    match Double.TryParse(str, &value) with
    | true -> Seconds value
    | false -> NotANumber

let (|ValidRequest|InvalidRequest|) (model : PutSubModel, rs : ResultSet) =
    if model.Taken > DateTimeOffset.UtcNow then
        InvalidRequest "This result was taken in the future?"
    ...
    else
        match model.Duration with
        | Seconds s -> ValidRequest {
               ...
            }
| NotANumber -> InvalidRequest "Duration is not a valid number"

let rec handleModel (model: PutSubModel) (array: PutSubModel[]) =
    match (model, rs) with
    | InvalidRequest error -> Some error
    | ValidRequest req ->
        req |> db.Add |> ignore
        if array.Length = 0 then
            None
        else
            handleModel array.[0] array.[1..]
```

Reply via email to