79594190

Date: 2025-04-26 17:15:01
Score: 3
Natty:
Report link

The following code

open System

type UserSession = {
    Id: string
    CreatedAt: DateTime
    LastRefreshAt: DateTime option
}

type Base () = 
  let sessions = [{Id="1"; CreatedAt=DateTime.Now.AddMonths(-1); LastRefreshAt=None};
                  {Id="2"; CreatedAt=DateTime.Now.AddMonths(-1); LastRefreshAt=Some(DateTime.Now)};
                  {Id="3"; CreatedAt=DateTime.Now.AddMonths(-1); LastRefreshAt=Some(DateTime.Now.AddDays(-15))}]
  member this.Delete (f : UserSession -> bool) =
      List.map f sessions

type Derived () =
  inherit Base()
  member this.DeleteAbandoned1 (olderThan:DateTime) =               
    base.Delete (fun session -> 
        session.CreatedAt < olderThan &&
        // error: Value is not a property of UserSession
        (session.LastRefreshAt.IsNone || session.LastRefreshAt.Value < olderThan)
    )

  member this.DeleteAbandoned2 (olderThan:DateTime) =               
    base.Delete (fun session -> 
        session.CreatedAt < olderThan &&
        // error: Value is not a property of UserSession
        (session.LastRefreshAt.IsNone || session.LastRefreshAt < Some(olderThan))
    )


let t = Derived ()

printfn "%A" (t.DeleteAbandoned1(DateTime.Now.AddDays(-14)))

printfn "%A" (t.DeleteAbandoned2(DateTime.Now.AddDays(-14)))

will output

[true; false; true]
[true; false; true]
val it: unit = ()

in .Net 9, i.e. both versions of your DeleteAbandoned seem to work. Both in FSI and compiled version as well. So there seems to be something else going on in your code. Could you provide some additional details?

Reasons:
  • RegEx Blacklisted phrase (2.5): Could you provide some
  • Long answer (-1):
  • Has code block (-0.5):
  • Ends in question mark (2):
Posted by: jpe