Que representação Haskell é recomendada para matrizes de pixels 2D e sem caixa com milhões de pixels?

Eu quero resolver alguns problemas de processamento de imagem em Haskell. Estou trabalhando com imagens bitonal (bitmap) e coloridas com milhões de pixels. Eu tenho várias perguntas:

Em que base devo escolher entreVector.Unboxed eUArray? Ambos são matrizes sem caixa, mas oVector abstração parece fortemente anunciada, principalmente em torno da fusão de loop. ÉVector sempre melhor? Se não,quando devo usar qual representação?

Para imagens coloridas, desejo armazenar triplos de números inteiros de 16 bits ou triplos de números de ponto flutuante de precisão única. Para esse fim, éVector ouUArray mais fácil de usar? Mais desempenho?

Para imagens bitonais, precisarei armazenar apenas 1 bit por pixel. Existe um tipo de dados predefinido que pode me ajudar aqui, agrupando vários pixels em uma palavra ou estou sozinho?

Finalmente, minhas matrizes são bidimensionais. Suponho que poderia lidar com o indireto extra imposto por uma representação como "matriz de matrizes" (ou vetor de vetores), mas prefiro uma abstração que tenha suporte ao mapeamento de índice. Alguém pode recomendar algo de uma biblioteca padrão ou do Hackage?

Sou um programador funcional e não tenho necessidade de mutação: -)

questionAnswers(4)

yourAnswerToTheQuestion