# CategoricalArrays forces OpenSpecFun\_jll recompilation

**URL:** <https://discourse.julialang.org/t/categoricalarrays-forces-openspecfun-jll-recompilation/87759>\
**Category:** Internals & Design\
**Tags:** method-invalidation\
**Created:** [September 24, 2022, 7:56pm UTC](https://discourse.julialang.org/t/categoricalarrays-forces-openspecfun-jll-recompilation/87759 "2022-09-24T19:56:13Z")\
**Posts on this page:** 1\
**Showing post:** 23

<div class="post-metadata">

**Author:** ![nalimilan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nalimilan/32/147_2.png) [@nalimilan](https://discourse.julialang.org/u/nalimilan)\
**Post date:** [September 26, 2022, 7:05am UTC](https://discourse.julialang.org/t/categoricalarrays-forces-openspecfun-jll-recompilation/87759/23 "2022-09-26T07:05:09Z")

</div>

I guess as a short-term measure we could at least turn RecipesBase and StructTypes into plain dependencies.

For SentinelArrays, I wonder whether we could find a solution by adding an API to ArrayInterfaceCore. Indeed, the problem to solve is just that CategoricalArrays defines a `copyto!` method dispatching on the destination array, while SentinelArrays defines one on the source array. But all that’s needed is to call the general fallback defined in SentinelArrays, there’s no particular interaction between these two packages. If we could add an API to indicate that SentinelArrays should take precedence all would work fine.

Regarding JSON.jl, the only line behind `@requires` is `JSON.lower(x::CategoricalValue) = JSON.lower(unwrap(x))`. I don’t understand how it can causes invalidations. Care to explain?

---

_[View the full topic](https://discourse.julialang.org/t/categoricalarrays-forces-openspecfun-jll-recompilation/87759)._
