hi all, two things: 1/ i do something and i'd like to know if it is correct 2/ i propose something about 1/
1/ i want to read some binary file (e.g. targa file format : *.tga). i do this : -- first way : via IOUArray showInfoHeader1 handle = do a <- newArray_ (1,8) :: IO (IOUArray Int Word8) hGetArray handle a 8 idLength <- readArray a 1 -- or getElems... putStrLn ("id length : " ++ show idLength) return () -- second way : via c-like array showInfoHeader2 handle = do b <- mallocArray 8 :: IO (Ptr Word8) hGetBuf handle b 8 [idLength] <- peekArray 1 b -- or peakArray 8 b putStrLn ("id length : " ++ show idLength) free b return () so, briefly, i have to read some content into some kind of buffer (IOUArray Int Word8 or Ptr Word8), then get one (or more) elements from the buffor into a standard haskell variable (is it the correct word ?) (or list). in the second case, i also have to free the buffer. in some case, when the data is more than one Word8 long, i have to 'reconstruct' it, i.e.: [x1,x2] <- getElems a let x = fromIntegral x1 + fromIntegral x2 * 256 :: Int is it the correct way to read binary files ? ------- 2/ haskell is (i heard that once ... :-) a high level language, so it has (must have) good support for abstraction... but in 1/, i have to choose between different kind of array representation (and i dont know which one is better) and it seems to me that the resulting code (compiled) would have to be the same. the thing i want to say here is : what i want to do is pretty obvious (in both code) but could be expressed more succintly and with only one possible syntax: for example, the couples (hGet*,peek/readArray) could be written in one line; also, one line for the reading/reconstructing more-than-one-Word8 value. is it already possible ? would it be interesting to add such capabilities to haskell ? (i think so) i can try to add it but i need some pointers about how to do it. thx a lot, vo minh thu _______________________________________________ Haskell mailing list Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell