Rust/Haskell/OCaml/Idris/et. al. are “hard” because they force you to understand the whole problem you are solving with your code. “Easy” languages are generally easy because they let you do stupid things that you or your users will pay for at runtime.