Exp / Acc 中的 Real-Complex 类型转换

Phi*_*ber 6 haskell accelerate-haskell

我需要将Accelerate 库ExporAcc类型中的 实数值转换为其相应的值,例如:Complex

toComplex :: Exp Double -> Exp (Complex Double)
toComplex' :: Acc (Vector Double) -> Acc (Vector (Complex Double))
Run Code Online (Sandbox Code Playgroud)

我试图模式匹配

toComplex :: Exp Double -> Exp (Complex Double)
toComplex a = (\(r, i) -> constant $ r :+ i) $ (a, constant 0)
Run Code Online (Sandbox Code Playgroud)

并怀疑liftunlifthttps://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))
Run Code Online (Sandbox Code Playgroud)