anchor.diff:                      |None -> DispatchReady <| (lines |> List.rev)
                       |Some li -> Processing <| li::lines)
   
  -    let receive (network:unit -> Stream) (retryDelay:TimeSpan seq option) =
  +    let asyncReadLine (sr:StreamReader) timeOut =
  +      let r = async{return sr.ReadLine()}
  +      Async.StartChild(r,defaultArg timeOut -1)
  +
  +    let receive (network:unit -> Stream) (retryDelay:TimeSpan seq option) (timeOut:int option) =
         let rec read (observer:IObserver<_>) (sr:StreamReader) = async {
  -        match (sr.ReadLine()) with
  +        let! child = asyncReadLine sr timeOut
  +        let! line = child
  +        match line with
           | null -> observer.OnCompleted()
           | line -> observer.OnNext line
           return! read observer sr}
  
positive.code:         |> retryAfterDelay (defaultArg retryDelay (Seq.initInfinite (fun _ -> TimeSpan.FromSeconds 0.)))
  
    type Connection =
      static member Receive(network:unit -> Stream, ?retryDelay: TimeSpan seq) =
        Observable.receive network retryDelay
negative.code:           elif f array.[i] then Some array.[i]
            else loop (i - 1)
        loop (array.Length - 1)
  
    type SSEData = SSEData of string
    [<CompilationRepresentation (CompilationRepresentationFlags.ModuleSuffix)>]
    module SSEData =
  