Nechápem, prečo keď FP zavrhuje výnimky a namiesto toho odporúča používať union typy ako Result alebo Option, tak F# aj tak podporuje klasické výnimky z .NET-u a dokonca má aj vlastné, neobjektové výnimky nazývané exception (čo je špecialita F#, v C# ani v iných jazykoch to nefunguje):
.NET exceptions:
open System
raise(Exception(message = "Klasicka .NET exception"))
F# exceptions:
exception Chyba of string
raise(Chyba "Typovo cista F# exception")
typ result:
let (/) x y =
match y with
| 0 -> Error("Delenie nulou neni povolene")
| _ -> Ok (x / y)
Okrem toho má ešte aj asynchrónne výnimky cez Async.Catch, a zároveň poskytuje typy Result aj Option. Nehovorím, že je to blbosť – z pohľadu výkonu je Result lepší ako výnimky. Ale aj tak nechápem, prečo sa vo F# dá robiť jedna vec piatimi rôznymi spôsobmi. Začína to pôsobiť, akoby F# bobtnal podobne ako C++.
Aký spôsob error handlingu používate v FP jazykoch?