anchor.diff:                  | ArrayTyCap cap -> ArrayTy {valueType=term; capacity=cap}
                   | RefTyRef _ -> RefTy term
                   | ApplyTyTemplate template -> ApplyTy {tyConstructor=term; args=template})
  +
  +let floatParser =
  +    fun stream ->
  +        let reply = numberLiteralE NumberLiteralOptions.DefaultFloat (expected "floating-point number") stream
  +        if reply.Status = Ok then
  +            let result = reply.Result
  +            if result.IsInteger then
  +                stream.Skip(-result.String.Length)
  +                Reply(Error, expected "floating-point number with decimal")
  +            else
  +                try
  +                    let d =
  +                        if result.IsDecimal then
  +                            System.Double.Parse(result.String, System.Globalization.CultureInfo.InvariantCulture)
  +                        elif result.IsHexadecimal then
  +                            floatOfHexString result.String
  +                        elif result.IsInfinity then
  +                            if result.HasMinusSign then System.Double.NegativeInfinity else System.Double.PositiveInfinity
  +                        else
  +                            System.Double.NaN
  +                    Reply(d)
  +                with 
  +                | :? System.OverflowException ->
  +                    Reply(if result.HasMinusSign then System.Double.NegativeInfinity else System.Double.PositiveInfinity)
  +                | :? System.FormatException ->
  +                    stream.Skip(-result.String.Length)
  +                    Reply(FatalError, messageError "The floating-point number has an invalid format (this error is unexpected, please report this error message to fparsec@quanttec.com).")
  +        else
  +            Reply(reply.Status, reply.Error)
   
   // Pattern
   do
  
positive.code:             tyExpr
              (fun argTys retTy -> FunTy {template = None; args = argTys; returnType = retTy})
      let parens = skipChar '(' >>. ws >>. tyExpr .>> ws .>> skipChar ')' |>> ParensTy
      let t = choice (List.map attempt [mQual; varTy; name; fn; parens]) |> pos .>> ws
      typOpp.TermParser <-
          leftRecurse
              t
  
negative.code: // tyExpr
  do
      let varTy =
          skipChar '\'' >>. (fatalizeAnyError id) |> pos |>> VarTy
      let name =
          pos id |>>
          (fun (p, n) ->
  