anchor.diff:                      | _ -> failwith "Invalid object fields for constructor"
                   ) |> Some
   
  +/// Handles `output' types by representing them with `repr' types, where `repr' is supported by `rootHandler'.
  +type TranslationTypeHandler<'repr, 'output>
  +    ( rootHandler : ITypeHandler
  +    , name : string
  +    , validate : 'repr -> bool
  +    , translate : 'repr -> 'output
  +    ) =
  +    let mapping =
  +        lazy(
  +            match rootHandler.GetMapping(typeof<'repr>) with
  +            | None -> failwith <| sprintf "Unsupported represention type ``%s''" typeof<'repr>.Name
  +            | Some reprMapping ->
  +                let getReprValue value : 'repr =
  +                    reprMapping.Translate(value) |> Unchecked.unbox
  +                new TypeMapping
  +                    ( typeof<'output>
  +                    ,
  +                        ({ new ISchemaVariableType with
  +                            member this.TypeName = name
  +                            member this.CoreType = reprMapping.VariableType.Type
  +                            member this.ValidateValue(value) = getReprValue value |> validate
  +                        } |> NamedType).Nullable(reprMapping.VariableType.Nullable)
  +                    , getReprValue >> translate >> box
  +                    )
  +        )
  +    interface ITypeHandler with
  +        member this.GetKnownTypes = upcast []
  +        member this.GetMapping(targetType) =
  +            if targetType = typeof<'output> then
  +                Some mapping.Value
  +            else None
  +
   type RootTypeHandler(customContext : ITypeHandler -> ITypeHandler) as this =
       let mutable context : ITypeHandler = Unchecked.defaultof<ITypeHandler>
       do
  
positive.code:                     , translateCollection emptyCons icollection clrElementType
                      ) |> Some
  
  type EnumerableTypeContext(rootHandler : ITypeHandler) =
      let translateEnumerable
          (cons : ConstructorInfo) // constructor taking IEnumerable<clrElementType>
  
negative.code:             if constructors.Length <> 1 then None else
              let cons = constructors.[0]
              let parameters = cons.GetParameters()
              if parameters.Length < 1 then None else
              let fields =
                  [
                      for parameter in parameters do
  