thanks a lot ! the code you give in the mail is +/- what i thought about ... is-it the fastest way ?
thank you also for your lib, i will read it later in the day. when i said "would have to be the same" in previous mail, it's because i like to see haskell as a really high-level abstraction where you just say what you want, but not in which way to do it. in the examples (mines or yours), the programmer has a lot of choices ... another problem is that you have to allocate a buffer before reading the file, but (i m not a os expert) i think there is already some kind of plumbing (maybe another buffer) to read file. so maybe that in all cases, we're losing efficiency when reading a file ? also, if our buffer allocation is mandatory, the compiler could put the right code for us (i.e. choose the best buffer length). again thx, minh thu 2006/4/6, Bulat Ziganshin <[EMAIL PROTECTED]>: > Hello minh, > > Wednesday, April 5, 2006, 10:41:02 PM, you wrote: > > > 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. > > no, the code will be slightly different. IOUArray will allocate space > in the GHC's heap, while malloc - in the C heap (ghc's heap is > additional storey on the C heap) > > btw, `getElems` is VERY INEEFECIENT way - it will convert entire array > to the list before return > > > 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. > > i don't see much problems here, just add peek16LE and other procedures > like it and you can use trivial code: > > idLength <- peek8 a 1 > x <- peek16LE a 8 > > peek8 a i = do (x::Word8) <- peekByteOff a i > return (fromIntegral x) > > peek16LE a i = do (x::Word8) <- peekByteOff a i > (y::Word8) <- peekByteOff a (i+1) > return (fromIntegral x + fromIntegral y * 256 ) > > > there are a couple of binary I/O libs (including my own one :) ), i > just don't think you need such power here. of course, if you want to > read data sequentially, binary i/o lib will be preferable. with my lib > you can write smth like this: > > -- Create new MemBuf filled with data from file > h <- readFromFile "test" > -- Read header fields sequentially > idLength <- getWord8 h > x <- getWord16le h > .... > > > i attached here a part of my library docs where this described in much > more details :) > > the lib itself is at http://freearc.narod.ru/Streams.tar.gz > > -- > Best regards, > Bulat mailto:[EMAIL PROTECTED] > > _______________________________________________ Haskell mailing list Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell