[Haskell] line-based interactive program

Bulat Ziganshin bulatz at HotPOP.com
Sat Jul 9 12:17:30 EDT 2005

Hello Wolfgang,

Saturday, July 09, 2005, 7:01:06 PM, you wrote:

>> > As part of my diploma thesis, I'm working on a small collection of modules
>> > which provides safe I/O interleaving.  The key point is to split the state
>> > of the world since I/O on different parts of the world can be interleaved
>> > arbitrarily.  If someone is interested, I can post more details.   
>> yes, i am interested. i feel that this would be very interesting and useful
>> for real programs 

WJ> the idea is to have different monads for I/O on different resources.  A simple 
WJ> example is to have the two monads WorldIO and FileIO and a type FileIOHandle.  
WJ> A file is a part of the world.  You have the following functions:

WJ>     readChar :: FileIO Char
WJ>     writeChar :: Char -> FileIO ()
WJ>     runFileIO :: FilePath -> FileIO a -> WorldIO (a, FileIOHandle)
WJ>     finishFileIO :: FileIOHandle -> WorldIO ()

WJ> readChar and writeChar should be self-explanatory.  At first, runFileIO does 
WJ> nothing instead of opening the file and returning the result.  Whenever parts 
WJ> of the first component of the result pair are evaluated, as much readChar and 
WJ> writeChar actions of the file I/O action are executed as are needed to 
WJ> produce the desired parts of the result.  finishFileIO executes the remainder 
WJ> of the file I/O and closes the file afterwards.

sorry, it is probably not what i'm think about. as i can see, you are
provide safe equivalent of interleaveIO, while i'm think about
approach that simplifies creating of I/O and mutable-state programs,
something like:

string <- [readChar h, readChar h]

which automatically perform I/O actions `readChar h` in I/O monad and
then uses their results as in ordinal computation. this will allow
"do" syntax to more close imitate imperative languages

Best regards,
 Bulat                            mailto:bulatz at HotPOP.com

More information about the Haskell mailing list