https://ubuntuask.com/blog/how-are-numeric-types-defined-in-haskell