Haskell Нет экземпляра для Integral Double - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь округлить переменную, используя Haskell.

r :: Double -> Double
r x = round (x)

Пытаясь скомпилировать это, я получаю следующую ошибку

Нет экземпляра для (Integral Double), возникающего изиспользование 'round'

Как я могу это исправить? Спасибо!

1 Ответ

1 голос
/ 31 октября 2019

Это логично, поскольку тип, который является экземпляром Integral, ну ... обычно является "целым". Таким образом, это означает, что он ведет себя как Integer. Примеры Integral, Integer, Int, Word8 и т. Д. A Float, Double и т. Д. Не являются интегральными, как говорит ошибка.

Вы можете использоватьfromIntegral :; (Num b, Integral a) => a -> b для преобразования чего-либо, имеющего тип Integral, в тип Num:

r :: Double -> Double
r = <b>fromIntegral</b> . round

Например:

Prelude> r 14.25
14.0
...