#haskell #accelerate-haskell
#haskell #ускорение -haskell
Вопрос:
Мне нужно преобразовать реальное числовое значение в типе Exp
or Acc
библиотеки ускорения в соответствующее Complex
ему значение, например:
toComplex :: Exp Double -> Exp (Complex Double)
toComplex' :: Acc (Vector Double) -> Acc (Vector (Complex Double))
Я попытался сопоставить шаблон следующим образом
toComplex :: Exp Double -> Exp (Complex Double)
toComplex a = ((r, i) -> constant $ r : i) $ (a, constant 0)
и подозреваю, что lift
или unlift
как в https://www.acceleratehs.org/examples/mandelbrot.html может каким-то образом решить эту проблему, но не может определить правильное их применение.
Для моей попытки ghc
жалуется, что
• Couldn't match type ‘Exp Double’ with ‘Double’
Expected type: Exp (Complex Double)
Actual type: Exp (Complex (Exp Double))
Комментарии:
1. Разве это не было бы чем-то вроде
toComplex = lift1 (: 0)
?2. Вы правы, я упустил из виду эту функцию подъема.
toComplex = lift (: (constant 0))
решил мою проблему. Спасибо!