The following MWE worked just fine in Julia v1.12:
using GeoTables
t1 = georef((; a=rand(10,10)))
t2 = georef((; b=rand(10,10)))
t3 = georef((; c=rand(10,10)))
[t1 t2 t3]
I've updated to Julia v1.13 today and it now errors:
Warning: detected a stack overflow; program state may be corrupted, so further execution might be unreliable.
ERROR: StackOverflowError:
Stacktrace:
┌ [1] mapfoldl(f::Function, op::Function, itr::Tuple{GeoTable{…}}; init::Base._InitialValue)
│ @ Base ./reduce.jl:173
├ [2] mapfoldl
│ @ ./reduce.jl:173 [inlined]
├ [3] mapreduce
│ @ ./reduce.jl:306 [inlined]
├ [4] reduce(op::Function, itr::Tuple{GeoTable{Meshes.CartesianGrid{…}, @NamedTuple{…}}})
│ @ Base ./reduce.jl:490
├ [5] hcat(geotables::GeoTable{Meshes.CartesianGrid{…}, @NamedTuple{…}})
│ @ GeoTables ~/.julia/packages/GeoTables/7zeT2/src/api/dataframes.jl:138
├ [6] reduce_first(::typeof(hcat), x::GeoTable{Meshes.CartesianGrid{…}, @NamedTuple{…}})
│ @ Base ./reduce.jl:412
├ [7] BottomRF
│ @ ./reduce.jl:83 [inlined]
├ [8] afoldl(op::Base.BottomRF{typeof(hcat)}, a::Base._InitialValue, bs::GeoTable{Meshes.CartesianGrid{…}, @NamedTuple{…}})
│ @ Base ./operators.jl:610
├ [9] _foldl_impl(op::Base.BottomRF{typeof(hcat)}, init::Base._InitialValue, itr::Tuple{GeoTable{…}})
│ @ Base ./reduce.jl:66
├ [10] foldl_impl(op::Base.BottomRF{typeof(hcat)}, nt::Base._InitialValue, itr::Tuple{GeoTable{…}})
│ @ Base ./reduce.jl:46
├ [11] mapfoldl_impl(f::typeof(identity), op::typeof(hcat), nt::Base._InitialValue, itr::Tuple{GeoTable{…}})
│ @ Base ./reduce.jl:42
╰──────── repeated 8886 times
[97747] mapfoldl(f::Function, op::Function, itr::Tuple{GeoTable{…}}; init::Base._InitialValue)
@ Base ./reduce.jl:173
[97748] mapfoldl
@ ./reduce.jl:173 [inlined]
[97749] mapreduce
@ ./reduce.jl:306 [inlined]
[97750] reduce(op::Function, itr::Tuple{GeoTable{Meshes.CartesianGrid{…}, @NamedTuple{…}}})
@ Base ./reduce.jl:490
[97751] hcat(geotables::GeoTable{Meshes.CartesianGrid{…}, @NamedTuple{…}})
@ GeoTables ~/.julia/packages/GeoTables/7zeT2/src/api/dataframes.jl:138
[97752] reduce_first(::typeof(hcat), x::GeoTable{Meshes.CartesianGrid{…}, @NamedTuple{…}})
@ Base ./reduce.jl:412
[97753] BottomRF
@ ./reduce.jl:83 [inlined]
[97754] afoldl(op::Base.BottomRF{typeof(hcat)}, a::Base._InitialValue, bs::GeoTable{Meshes.CartesianGrid{…}, @NamedTuple{…}})
@ Base ./operators.jl:610
[97755] _foldl_impl(op::Base.BottomRF{typeof(hcat)}, init::Base._InitialValue, itr::Tuple{GeoTable{…}})
@ Base ./reduce.jl:66
[97756] foldl_impl(op::Base.BottomRF{typeof(hcat)}, nt::Base._InitialValue, itr::Tuple{GeoTable{…}})
@ Base ./reduce.jl:46
[97757] mapfoldl_impl(f::typeof(identity), op::typeof(hcat), nt::Base._InitialValue, itr::Tuple{GeoTable{…}})
@ Base ./reduce.jl:42
Some type information was truncated. Use `show(err)` to see complete types.
Is there any issue with our definition? https://github.com/JuliaEarth/GeoTables.jl/blob/037532e740c2c3c227ce7623bfbfb57ff8d73360/src/api/dataframes.jl#L138
Did something change regarding reduce with hcat?
The problem is related to type inference I guess. Re-implemented with an explicit init:
https://github.com/JuliaEarth/GeoTables.jl/pull/179
Júlio Hoffimann has marked this topic as resolved.
Last updated: Sep 19 2026 at 08:53 UTC