signature STREAM = sig type fileId = int type fileOffset = int type pos = fileId * fileOffset type ppos (* pretty pos *) type pposCache type t type fileInfo = fileId * string * string val convert: t -> fileInfo val ppos2str: ppos -> string val getchar: t -> char option * t (* Will throw UngetcError, if applied at the beginning of the stream. * Can be always avoided, so is not provided in sig file *) val ungetc: t -> t val getPos: t -> pos val getPosAfterCharRead: t -> pos (* pos must come from t, see pos2pposWithFI *) val pos2ppos: pos -> t -> ppos (* #id pos must be equal to fileId of fileInfo, * otherwise InvalidFileInfo is thrown *) val pos2pposWithFI: pos -> fileInfo -> ppos (* Assumed to be called once for given pos, so will throw Unreachable on * second call *) val pposWithoutCol: ppos -> ppos val getSubstr: fileOffset -> fileOffset -> t -> string val isFirstOnLine: pos -> t -> bool (* throws IO.Io *) val create: string -> t val pposCacheInit: fileInfo -> pposCache val pposCacheAdvance: pos -> pposCache -> (int * int) * pposCache val pposCacheGetLine: pposCache -> int val pposCacheGetFname: pposCache -> string end