haskell - pattern - ¿Cuál es la forma correcta de dividir dos valores de Int para obtener un flotador?
ord haskell (1)
Me gustaría dividir dos valores de Int
en Haskell y obtener el resultado como un Float
. Intenté hacerlo así:
foo :: Int -> Int -> Float
foo a b = fromRational $ a % b
pero GHC (versión 6.12.1) me dice "No se pudo hacer coincidir el tipo esperado ''Integer'' con el tipo inferido ''Int''" con respecto a la a
en la expresión.
Entiendo por qué: la llamada fromRational
requiere (%)
para producir un Ratio Integer
, por lo que los operandos deben ser de tipo Integer
lugar de Int
. Pero los valores que estoy dividiendo no se acercan al límite del rango Int
, por lo que el uso de un tipo de bignum de precisión arbitraria parece excesivo.
¿Cuál es la forma correcta de hacer esto? ¿Debo llamar a toInteger
en mis operandos o hay un mejor enfoque (tal vez uno que no incluya (%)
y proporciones) que no conozco?
Primero debe convertir los operandos a flotantes y luego dividir, de lo contrario, realizará una división entera (sin decimales).
Solución lacónica (requiere Data.Function
)
foo = (/) `on` fromIntegral
que es corto para
foo a b = (fromIntegral a) / (fromIntegral b)
con
foo :: Int -> Int -> Float