The overflow is because of an infinite loop (and compiler shows it). Your proc
`-` does nothing, except of calling itself with same argument. It doesn't call
the `-` of `float32`, as you probably expect - the arguments type is still
`F_TYPE`. So just say to compiler to call the `-` of `float32`, by calling it
for an `F_TYPE` value:
proc `-`*(a:F_TYPE): F_TYPE =
return (-a.float32).F_TYPE
The same for two other procs.
Or you can do simpler - just borrow parent type's procs:
proc `-`*(a:F_TYPE): F_TYPE {.borrow.}