ConstructionBase.jl icon indicating copy to clipboard operation
ConstructionBase.jl copied to clipboard

widening of type parameters (wishlist to use ConstructionBase in StructArrays)

Open piever opened this issue 3 years ago • 2 comments

This continues some of the discussion in https://github.com/JuliaObjects/ConstructionBase.jl/issues/53, esp. https://github.com/JuliaObjects/ConstructionBase.jl/issues/53#issuecomment-1073996640. See also https://github.com/JuliaArrays/StructArrays.jl/pull/241 for a PR to use this package in StructArrays.

In StructArrays one generally needs to figure out a type not from fieldvalues (which ConstructionBase can deal with) but from arrays of field values. For example, starting from the type Pair and the columns [1, 2, 3], ["a", "b", 2], I would like to figure out that the eltype for the resulting StructArray (which should be Pair{Int, Any}). Could ConstructionBase be extended to support something like this?

There is a second issue in this example. In this Pair{Int, Any} scenario, the default constructorof would "lie" about the element type. In other words:

julia> constructorof(Pair{Int, Any})(1, "a") isa Pair{Int, Any}
false

Would it be feasible to add a version of constructorof that respects the type parameters? Ideally, that would also address #58 as well as other problematic types (such as types with inner constructors).

piever avatar Sep 02 '22 12:09 piever

starting from the type Pair and the columns [1, 2, 3], ["a", "b", 2], I would like to figure out that the eltype for the resulting StructArray (which should be Pair{Int, Any}). Could ConstructionBase be extended to support something like this?

How is this related to ConstructionBase or https://github.com/JuliaArrays/StructArrays.jl/pull/241? I don't see any type computations in ConstructionBase now, only construction/modification of instances. That PR also doesn't touch StructArrays eltype computations at all.

Would it be feasible to add a version of constructorof that respects the type parameters?

That's basically just the type itself, unless it defines an inner constructor that doesn't just take its fields. A major point of constructorof is that it can construct an object with different field types, depending on the values.

aplavin avatar Sep 02 '22 18:09 aplavin

How is this related to ConstructionBase or JuliaArrays/StructArrays.jl#241? I don't see any type computations in ConstructionBase now, only construction/modification of instances. That PR also doesn't touch StructArrays eltype computations at all.

At the moment it isn't, but I was wondering whether one could have a deeper integration than the one in JuliaArrays/StructArrays.jl#241, where the bypass_constructor hack (as well as the complex promotion mechanisms) in StructArrays were no longer needed.

Naturally, I understand that it could be outside the scope of ConstructionBase.

piever avatar Sep 05 '22 13:09 piever