[Haskell-cafe] Data.Bitmap, readBitmap exception

Alexander Foremny alexanderforemny at gmail.com
Thu Jun 28 13:34:16 CEST 2012


I am using bitmap-0.2 [1] to load a Bitmap file [2]. However, the
following sample GHCi session fails for me.

> Prelude Data.Bitmap Data.Bitmap.Pure.File> readBitmap "b.bmp" :: IO (Bitmap Word8)
> *** Exception: Data/Bitmap/Internal.hs:(63,17)-(67,15): Non-exhaustive patterns in case

I downloaded the sources of bitmap-0.2 from Hackage and modified the
relevant function by appending the last line.

> decodeCType :: CInt -> PixelComponentType
> decodeCType k = case k of
>   1 -> PctWord8
>   2 -> PctWord16
>   3 -> PctWord32
>   4 -> PctFloat
>   _ -> error $ "decodeCType: unexpected integer (" ++ show k ++ ")"

With this modification the same GHCi session given above results in
the following error.

> Prelude Data.Bitmap Data.Bitmap.Pure.File> readBitmap "b.bmp" :: IO (Bitmap Word8)
> *** Exception: decodeCType: unexpected integer (7077888)

I don't have any idea where 7077888 comes from. Am I doing something
wrong? Is my bitmap corrupted in some way? The number 7077888 has no
apparent significance except that it is a perfect cube [3]. So I guess
this is not a problem with endianness.

In fact as far as I can tell `decodeCType` is only called on
`(PixelComponent t => c_type t)` and `c_type t` only yields integer
values in the (inclusive) range of 1 to 4. That is if I am not missing
some orphaned instance.

Could anyone please enlighten me what is happening and if I am doing
something wrong?

In case this is relevant: I am using bitmap-0.2 from Hackage with GHC
7.4.1 on a 3.2.20 kernel i686 architecture Linux.

Alexander Foremny

[1] http://hackage.haskell.org/package/bitmap
[2] https://www.dropbox.com/s/pyutvni9vx6f6mo/b.bmp
[3] http://www.wolframalpha.com/input/?i=7077888

More information about the Haskell-Cafe mailing list