anchor.diff:    // - TODO: 
     //    -- still to do, possibly: median, percentile, corr, cov
   
  -  let internal applySeriesProj (proj: float option seq -> float seq) (series:Series<'K, float>) : Series<'K, float> =
  +  let internal applySeriesProj (proj: float opt seq -> float seq) (series:Series<'K, float>) : Series<'K, float> =
       let newData = 
         series.Vector.DataSequence 
  -      |> Seq.map OptionalValue.asOption
         |> proj 
         |> Vector.ofValues
   
  
positive.code:       if w.nobs < 4.0 then nan else
          let adjust p = (6.0 + p * (w.nobs + 1.0)) * (w.nobs - 1.0) / ((w.nobs - 2.0) * (w.nobs - 3.0))
          adjust ((w.nobs * w.M4) / (w.M2 * w.M2) - 3.0)
      applyExpandingStatsTransform toEstKurt series
  
    let expandingMin (series:Series<'K, float>) : Series<'K, float> =
      let minFn s v =
        match v with
        | Some x -> if System.Double.IsNaN(s) then x else min x s
        | None   -> s
      applySeriesProj (Seq.scan minFn nan) series
  
    let expandingMax (series:Series<'K, float>) : Series<'K, float> =
      let maxFn s v =
        match v with
        | Some x -> if System.Double.IsNaN(s) then x else max x s
        | None   -> s
      applySeriesProj (Seq.scan maxFn nan) series
  
    // end expanding window functions
  
negative.code: 
    let internal updateMomentsSparse state curr =     
      match curr with
      | OptionalValue.Present x -> updateMoments state x
      | OptionalValue.Missing   -> state
  
    let internal applyExpandingMomentsTransform (proj: Moments -> float) series =
      let initMoments = {nobs = 0.0; sum = 0.0; M1 = 0.0; M2 = 0.0; M3 = 0.0; M4 = 0.0 }
      let calcSparse = expandingWindowFn initMoments updateMomentsSparse proj
      applySeriesProj calcSparse series
  