Arguably, languages with strong static guarantees are exceptionally effective for LLMs since they're much quicker to provide feedback to the LLM than a dynamically typed language (which only fails once you actually run it - often several times to find the actual problem). You also get very well-designed build error messages rather than having to parse unstructured stderr output, etc etc.