anchor.diff:                                          PeriodTimeout = TimeSpan.FromSeconds(1.) } [ (localName, 1337us) ]
   
   // -------------------------------------------------------------
  +
   type Agent<'a> = MailboxProcessor<'a>
  +
  +type SeqNumber =
  +    private | SeqNumber of uint64
  +
  +[<RequireQualifiedAccess>]
  +module Sequence =
  +    let make() = SeqNumber(0UL)
  +    let incr = function
  +        | SeqNumber s -> SeqNumber(s + 1UL)
  +
  +type IncarnationNumber =
  +    private | IncarnationNumber of uint64
  +
  +[<RequireQualifiedAccess; CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>]
  +module IncarnationNumber =
  +    let make() = IncarnationNumber(0UL)
  +    let incr = function
  +        | IncarnationNumber i -> IncarnationNumber(i + 1UL)
   
   [<StructuralEquality; StructuralComparison>]
   type Node =
  
positive.code:       Port : uint16 }
      override x.ToString() = string x.Port
  
  type IncarnationNumber =
      | IncarnationNumber of uint64
  
  type SeqNumber =
      | SeqNumber of uint64
  
  type NodeStatus =
      | Alive of IncarnationNumber
      | Suspect of IncarnationNumber
      | Dead of IncarnationNumber
  
  type SwimEvent =
      | Membership of Node * NodeStatus
      | User of string
  
negative.code:         { memberList with Incarnation = incarnation' }
  
      // alive : MemberList -> Node -> IncarnationNumber -> MemberList
      let private alive memb incarnation memberList =
          match tryFind memb memberList with
          | NotFound ->
              let status = IncarnationNumber.make() |> Alive
              updateMembers memb status memberList
  
          | Member(Alive i)
          | Member(Suspect i) when i < incarnation ->
              updateMembers memb (Alive incarnation) memberList
  
          | Member _ -> memberList
          | Local _ -> memberList
  
      // suspect : MemberList -> Node -> IncarnationNumber -> MemberList
      let private suspect memb incarnation memberList =
          match tryFind memb memberList with
          | Local i -> stillAlive i memberList
  
          | Member(Alive i) when incarnation >= i ->
              updateMembers memb (Suspect incarnation) memberList
  
          | Member(Suspect i) when incarnation > i ->
              updateMembers memb (Suspect incarnation) memberList
  
          | Member _ -> memberList
          | NotFound -> memberList
  
      // dead : MemberList -> Node -> IncarnationNumber -> MemberList
      let private dead memb incarnation memberList =
          match tryFind memb memberList with
          | Local i -> stillAlive i memberList
  
          | Member(Alive i)
          | Member(Suspect i) when incarnation >= i ->
              updateMembers memb (Dead i) memberList
  
          | Member(Dead i) when incarnation > i ->
              updateMembers memb (Dead i) memberList
  
          | Member _ -> memberList
          | NotFound -> memberList
  