Pure functions should be referentially transparent; you should be able to replace them with whatever value they evaluate to without changing the semantics of your code.
Throwing is referentially impure: what value do you get from calling x => throw new RuntimeException()
?
Instead, functional languages prefer to return a tagged union of the value or the error.
Note, though
It's a bit difficult to distinguish a burned body in a kibbutz as a civilian vs off duty military until there's a forensic identification of its identity.