Почему в программах DPH возникает ошибка «Не удается векторизовать выражение GHC.Prim.Int #»?

Я пытался реализовать проблему nqueens с помощью DPH, но в итоге получил ошибку Can't vectorise GHC.Prim.Int #. Когда я искал ошибку в Google, я нашел ошибку GHC, которая говорит о векторизации литералов, используемых для сопоставления с образцом (http://haskell.1045720.n5.nabble.com/GHC-5702-Can-t-vectorise-pattern-matching-on-numeric-literals-td5076659.html).. Я не уверен, что это тот же баг. Мой код выглядит следующим образом:

{-# LANGUAGE ParallelArrays #-}
{-# OPTIONS_GHC -fvectorise #-}
module NQueensP (nqueens_wrapper) 
where

import qualified Prelude
import Data.Array.Parallel
import Data.Array.Parallel.Prelude
import Data.Array.Parallel.Prelude.Int as I
import qualified Data.Array.Parallel.PArray as P


isSafe i q n  = isSafeHelper i (Prelude.zip (P.toList (toPArrayP q)) [n, n I.- 1..1]) 
            where isSafeHelper i []  = True
                  isSafeHelper i (x:xs) = (i I.== Prelude.fst x) && I.abs(i I.-   
                                  (Prelude.fst x)) I./= I.abs(n I.- (Prelude.snd x)) && 
                                       isSafeHelper i xs

nqueens_wrapper::Int -> PArray (PArray Int)
nqueens_wrapper n = toPArrayP (mapP toPArrayP (nqueens n 0))

nqueens::Int -> Int -> [:[:Int:]:]
nqueens n 1 = [:[:i:] | i <- (enumFromToP 1 n) :]
nqueens n k = [: [:i:] +:+ q | i <- oneton, q <- boards, isSafe i q k:]
           where boards = nqueens n (k I.- 1)
                 oneton = (enumFromToP 1 n) 

Пожалуйста, дайте мне знать, если я делаю что-то неправильно. Я использую GHC 7.4.1.

Заранее спасибо.

9
задан prasannak 19 August 2012 в 00:18
поделиться