Рекомендуемый способ конвертировать Double → Float в Haskell

Что такое идиоматический способ перехода Double -> Float?

Это uncurry encodeFloat . decodeFloat?

(Я использую gloss, для этого нужны поплавки)

И каков рекомендуемый способ найти ответ на такие вопросы?

Я пытался этот hoogle-запрос, но ответы все очень бесполезны (попробуйте - он имеет unsafeCoerce в верхней части списка)

Ответ 1

Используйте realToFrac :: (Real a, Fractional b) => a -> b.

Он преобразует из любого действительного числа (например, Int, Float или Double) в любой дробный тип (например, Float, Double или Rational).

Обратите внимание, что хотя общее определение этой функции (fromRational . toRational) выполняет медленное преобразование через тип Rational, существуют правила перезаписи, которые используют более эффективные реализации для преобразований между Float и Double.