Подтвердить что ты не робот

Какой правильный способ разделить два значения Int для получения Float?

Я хотел бы разделить два значения Int в Haskell и получить результат как Float. Я пробовал сделать это вот так:

foo :: Int -> Int -> Float
foo a b = fromRational $ a % b

но GHC (версия 6.12.1) говорит мне: "Не удалось сопоставить ожидаемый тип" Целое число "с введенным типом" Int "в отношении a в выражении.

Я понимаю, почему: для вызова fromRational требуется (%) для создания Ratio Integer, поэтому операнды должны быть типа Integer, а не Int. Но значения, которые я разделяю, нигде не приближаются к пределу диапазона Int, поэтому использование типа bignum произвольной точности кажется излишним.

Какой правильный способ сделать это? Должен ли я просто называть toInteger моими операндами или есть лучший подход (возможно, один из них не включает (%) и коэффициенты), о которых я не знаю?

4b9b3361

Ответ 1

Сначала нужно преобразовать операнды в float, а затем разделить, иначе вы будете выполнять целочисленное деление (без десятичных знаков).

Лаконичное решение (требуется Data.Function)

foo = (/) `on` fromIntegral

что мало для

foo a b = (fromIntegral a) / (fromIntegral b)

с

foo :: Int -> Int -> Float