[ Non-Hugs-specific stuff follows ... ] Apart from the fact that Hugs98 still doesn't implement hSeek, there seems to be some argument confusion: -- iomonad.c --------------------------------------------------------- [...] primFun(primHSetPosn) { #if HAVE_FSETPOS fpos_t pos = 0; #elif HAVE_FSEEK long pos = 0; #endif Int h; HandleArg(h,3); IntArg(pos,4); [...] ---------------------------------------------------------------------- This probably corresponds to hSetPosn :: Handle -> HandlePosn -> IO () and not the required hSetPosn :: HandlePosn -> IO () Consequently, I always get an "Illegal operation" here. This bug leads to something in the Haskell 98 library report I haven't really understood yet (section 11.5): * Why are there *two* ways to reposition a handle (one via hSeek and the other one via hSetPosn)? * Where is hTell? * Why is the handle supposed to be contained in HandlePosn? This way one can't keep "a finger" within a file without keeping it open. Yes, I know that the file can change in the meantime, but this is not under Haskell's control, anyway. Because it's already too late for Haskell 98, I propose the following for Haskell 2000: Keep hSeek as it is, remove HandlePosn/hGetPosn/hSetPosn and add hTell :: Handle -> IO Integer Rationale: Keeping a file position opaque is a bad idea, because *lots* of file formats rely on the fact that arithmetic is possible on file positions, see e.g. http://www.wotsit.org/. Merging a file position with a handle is even worse, because this keeps the file open even when only the position is needed later. Opinions? Cheers, Sven -- Sven Panne Tel.: +49/89/2178-2235 LMU, Institut fuer Informatik FAX : +49/89/2178-2211 LFE Programmier- und Modellierungssprachen Oettingenstr. 67 mailto:[EMAIL PROTECTED] D-80538 Muenchen http://www.informatik.uni-muenchen.de/~Sven.Panne