anchor.diff:                                  | Choice1Of2 head -> 
                                       (Array.append x [|head|], [||])
                                   | Choice2Of2 tail -> (x, tail)
  -            | _ -> failwith "can never happen") <|>
  -        (pstring "::" >>. (h16 .>> pchar ':') |> manyMinMax 5 5|>> Array.ofSeq .>>. ls32)) |>> (fun (t1, t2) ->
  -            ([||], Array.append t1 t2)) |>> fun (x: uint16 array, y: uint16 array) ->     
  +            | _ -> failwith "can never happen") //<|>
  +        //((pstring "::" >>. (h16 .>> pchar ':') |> manyMinMax 5 5|>> Array.ofSeq .>>. ls32)) |>> (fun (t1, t2) -> ([||], Array.append t1 t2)))     
  +        |>> fun (x: uint16 array, y: uint16 array) ->     
                   let zeros =
                       let zerosLength = (8 - x.Length - y.Length)
                       Array.create zerosLength 0us
  
positive.code:         // 6( h16 “:” )           [(h16  “::”) | ls32]
          // “::” 5( h16 “:” ) ls32
  
          let h16 = manyMinMaxSatisfy 1 4 HEXDIG |>> fun x -> Convert.ToUInt16(x, 16)
          let ls32 = 
              (h16 .>> pchar ':' .>>. h16 |>> fun (x0, x1) -> 
                  [|x0; x1|]) <|> 
              (IPv4Address.Parser 
              |>> fun x -> 
                  let v = x.ToUInt32()
                  let x0 = v &&& 0xFFFF0000ul >>> 16 |> uint16
                  let x1 = v &&& 0x0000FFFFul |> uint16
                  [|x0; x1|])
          
          let tail i =
              let remainder =
                  (h16 |>> fun x -> [|x|])  <|>   
                  ((manyMinMax 0 i (h16 .>> pchar ':')) |>> Array.ofSeq .>>. ls32
                  |>> fun (x0, x1) -> 
                      Array.append x0 x1)
              
              h16 .>> pstring "::" .>>. (remainder <|>% [||])
  
  
negative.code: 
      override this.ToString() = 
          let writeBytes x = 
              let h160 = x &&& 0xFFFF0000ul >>> 16
              let h161 = x &&& 0x0000FFFFul >>> 0
  
              h160.ToString("X4") + ":" + h161.ToString("X4")
  
          (writeBytes x0) + ":" + (writeBytes x1) + ":" + (writeBytes x2) + ":" + (writeBytes x3)
  
  