I think it would be a little more kosher for types like DataFrame to implement collect(e::Enumerable, ::Type{DataFrame}) (which would be a more specific method than the default fallback) instead of stealing the DataFrame(x::Any)definition.
Closing as the constructor approach now seems widely accepted, plus the code for DataFrames.jl now lives in DataFrames.jl itself, so no more type piracy there.
I think it would be a little more kosher for types like DataFrame to implement
collect(e::Enumerable, ::Type{DataFrame})
(which would be a more specific method than the default fallback) instead of stealing theDataFrame(x::Any)
definition.