In general if you want to remain pure and referentially transparent and even if you have facilities to catch exceptions in typed FP there is no need to throw exceptions at all and I would discourage from explicit throwing if you can represent your errors as pure values that you return from your functions