Fun fact, Num basically
requires inf and nan unless you're willing to tolerate either terrible overflow (non-)handling (eg Int,SatInt) or memory blowup (eg Integer,BaireReal).
# where R is some r such that Num r
let huge = <the largest (finite) value in R>
let inf = huge * huge # can't be finite unless you
# truncate or saturate or something
let nan = inf - inf # can't be either of
# infinite (infinitely < +inf and > -inf), or
# finite (catastrophic rounding errors)
Num doesn't allow inf or nan to be Maybe R, so you're stuck filtering out in-band errors from a bare R.