-- definitions for Lua 5.1 io library

--# type local file = {
--#     -- TODO method receivers and recursive types are generally not implemented yet
--#     `close`: function(self: WHATEVER);
--#     `flush`: function(self: WHATEVER);
--#     `lines`: function(self: WHATEVER) --> function() --> string?;
--#     -- TODO should be: function(self, '*n') --> number &
--#     --                 function(self, '*a') --> string &
--#     --                 function(self, '*l'|integer?) --> string
--#     -- for now, let's ignore *n (which is most useless)
--#     `read`: function(self: WHATEVER, format: '*a'|'*l'|integer?) --> string;
--#     `seek`: function(self: WHATEVER, whence: 'set'|'cur'|'end'?, offset: integer?);
--#     -- TODO again, 'no' does not accept an integer
--#     `setvbuf`: function(self: WHATEVER, mode: 'no'|'full'|'line', size: integer?);
--#     `write`: function(self: WHATEVER, string|number...);
--# }
--#
--# assume global `io`:
--#     {
--#         `close`: function(file: file?);
--#         `flush`: function();
--#         -- TODO should be separated
--#         `input`: function(file: string|file?) --> file;
--#         `lines`: function(filename: string?) --> function() --> string?;
--#         -- TODO sequence conditional union: (file) | (nil, string)
--#         `open`: function(filename: string, mode: string?) --> (file, string);
--#         `output`: function(file: string|file?) --> file;
--#         `popen`: function(prog: string, mode: string?) --> file;
--#         `read`: function(format: '*a'|'*l'|integer?) --> string;
--#         `tmpfile`: function() --> file;
--#         `type`: function(obj: any) --> 'file'|'closed file';
--#         `write`: function(string|number...);
--#         ...
--#     }

