anchor.diff:              | Some translator -> translator.Translate(value)
               | None -> failwith (sprintf "Unsupported CLR type ``%s''" targetType.Name)
   
  -    let (<??>) (context1 : #ITypeHandler) (context2 : #ITypeHandler) =
  -        new ChainTypeContext(context1, context2) :> ITypeHandler
  +    let (??>) (primary : #ITypeHandler) (secondary : #ITypeHandler) =
  +        new ChainTypeHandler(primary, secondary) :> ITypeHandler
  +
  +    let (??<) (secondary : #ITypeHandler) (primary : #ITypeHandler) =
  +        new ChainTypeHandler(primary, secondary) :> ITypeHandler
   
   type BuiltinTypeHandler() =
       static let integer (convert : int64 -> 'a) name (min, max) =
  
positive.code:             collection
          | _ -> failwith "Value not suitable for collection initialization"
      interface ITypeHandler with
          member this.GetKnownTypes = upcast []
          member this.GetMapping(targetType) =
              let emptyCons = targetType.GetConstructor([||])
              if isNull emptyCons then None else
  
negative.code:             box arr
          | _ -> failwith "Value not suitable for array initialization"
      interface ITypeHandler with
          member this.DefinedTypes = upcast []
          member this.GetMapping(targetType) =
              if targetType.IsArray then
                  let clrElementType = targetType.GetElementType()
  