anchor.diff:          // 6( h16 “:” )           [(h16  “::”) | ls32]
           // “::” 5( h16 “:” ) ls32
   
  -        let h16 = manyMinMaxSatisfy 1 4 HEXDIG |>> fun x -> Convert.ToUInt16(x, 16)
  +        let h16 = 
  +            manyMinMaxSatisfy 1 4 HEXDIG |>> fun x -> Convert.ToUInt16(x, 16)
  +
  +        let ``h16 ":"`` = h16 .>> pchar ':'
  +
           let ls32 = 
  -            (h16 .>> pchar ':' .>>. h16 |>> fun (x0, x1) -> 
  -                [|x0; x1|]) <|> 
  -            (IPv4Address.Parser 
  -            |>> fun x -> 
  +            let ipv4 = IPv4Address.Parser |>> fun x -> 
                   let v = x.ToUInt32()
  -                let x0 = v &&& 0xFFFF0000ul >>> 16 |> uint16
  -                let x1 = v &&& 0x0000FFFFul |> uint16
  -                [|x0; x1|])
  +                let x0 = (v &&& 0xFFFF0000ul) >>> 16 |> uint16
  +                let x1 = (v &&& 0x0000FFFFul) |> uint16
  +                [|x0; x1|]
  +            let h16h16 = (``h16 ":"`` .>>. h16 |>> fun (x0, x1) ->  [|x0; x1|]) 
  +            
  +            ipv4 <|> h16h16
           
           let tail i =
               let remainder =
                   (h16 |>> fun x -> [|x|])  <|>   
  -                ((manyMinMax 0 i (h16 .>> pchar ':')) |>> Array.ofSeq .>>. ls32
  -                |>> fun (x0, x1) -> 
  -                    Array.append x0 x1)
  +                (manyMinMax 0 i ``h16 ":"`` |>> Array.ofSeq .>>. ls32 |>> fun (x0, x1) -> Array.append x0 x1)
               
               h16 .>> pstring "::" .>>. (remainder <|>% [||])
   
  
positive.code:                     let high = (uint32 parts.[i]) <<< 16
                      let low = (uint32 parts.[i+1])
                      high + low
  
                  IPv6Address(getUInt32 0, getUInt32 1, getUInt32 2, getUInt32 3)
negative.code:         let _5lead = h16 .>> pstring "::" .>>. ((h16 |>> fun x -> [|x|]) <|>% [||])
          let _6lead = h16 .>> pstring "::" <^> ls32
  
          (h16 .>> pchar ':' .>> notFollowedBy (pchar ':') |> manyMinMax 0 6 |>> Array.ofSeq >>= fun x ->
              let len = Array.length x
              match len with
              | 0 -> _0lead |>> fun (head, tail) -> 
  