2012-09-25 27 views
5

Tengo muy poca experiencia en Haskell y quiero escribir un rastreador de rayos simple para la práctica. Como no quería usar herramientas de GUI como wxHaskell (creo que tomará mucho tiempo aprender a usarlas), decidí simplemente guardar la imagen de salida en un archivo BMP. Pero tengo un problema aquí:"No se pudo hacer coincidir el tipo esperado con el tipo real" error al usar Codec.BMP

module Main where 

import Codec.BMP 
import qualified Data.ByteString as BS 

main = do 
    Right bmp <- readBMP "grass.bmp" 
    BS.putStrLn $ BS.take 4 $ unpackBMPToRGBA32 bmp 

Aquí sólo quiero tomar el primer píxel de la imagen e imprimir sus valores RGBA. Pero me sale un error que dice

Couldn't match expected type `BS.ByteString' 
      with actual type `bytestring-0.9.2.1:Data.ByteString.Internal.ByteString' 
In the return type of a call of `unpackBMPToRGBA32' 
In the second argument of `($)', namely `unpackBMPToRGBA32 bmp' 
In the second argument of `($)', namely 
    `BS.take 4 $ unpackBMPToRGBA32 bmp' 

¿Qué estoy haciendo mal? ¿Cómo puedo tomar los píxeles de la imagen e imprimir sus valores?

Respuesta

9

Tiene dos bytestring paquetes instalados, por lo unpackBMPToRGBA32 retorno de ByteStringbytestring-0.9.2.1 y BS.putStrLn espera ByteString de otra versión.

Pruebe ghc-pkg list bytestring para enumerar todas las versiones bytestring instaladas.

Y la solución podría ser

  • anular el registro de uno de ellos con ghc-pkg unregister bytestring-<version>
  • ocultar uno de ellos cuando la construcción: ghc --make -hide-package bytestring-<version>
+0

Sí, funciona! Gracias, esta opción '-hide-package' es realmente útil. –

+1

Gracias, Yuras. Si desea utilizar -hide-package con runhaskell (en lugar de compilar), necesitará la siguiente invocación: 'runhaskell -hide-package --ghc-arg = bytestring- Main.hs' – neillb

Cuestiones relacionadas