I think the solution to that is to have only a few builtin effects. This is the approach taken by the Verse language:
https://dev.epicgames.com/documentation/en-us/uefn/specifier...
It's a compromise between the granularity of correctness checks and readability, but IMHO it's still a big improvement over current type systems.