Конвертировать double в GLfloat в Haskell

Я хочу конвертировать Double в GLfloat. Я хочу использовать это для сравнения.

xM <- newIORef 0.0
zM <- newIORef 0.0
mobs <- newIORef []
mapM_ (\x -> colision x xM) mobs

мобы наполнены методом.

colision mob xC = do
  xcama <- get xC
  --zcama <- get zC
  let menor = mob!!0
  let mayor = mob!!7
  --if xm>= xmin && xm <= xmax && zm >= zmin && zm <= zmax  then renderText (1, (-1.4)) $ "Dead"
  --else renderText (1, (-1.4)) $ "Warning..."
  renderText (1, (-1.4)) $ "Warning..."

Когда я пытаюсь скомпилировать это, покажите мне эту ошибку:

"Не удалось сопоставить тип 'Foreign.C.Types.CDouble' с 'Foreign.C.Types.CFloat' Ожидаемый тип:GLfloat

Фактический тип: GLdouble

-----Решение:------

Я использую этот код:

import GHC.Float
  d2f = realToFrac :: GLdouble -> GLfloat

2 ответа

Общая функция, используемая для преобразования между различными типами с плавающей запятой (и некоторыми другими, такими как Rational) является realToFrac,

Быстрее:

   import Unsafe.Coerce(unsafeCoerce)
   import GHC.Float(double2Float)
   doubleToGF = unsafeCoerce . double2Float :: Double -> GLfloat

Я хотел найти способ сделать это менее "небезопасным" с помощью Data.Coerce. Пока не получилось

Другие вопросы по тегам