Ok, replying to the list this time. Darn Thunderbird not reading my mind again.

Rafael Cunha de Almeida wrote:
Maurí­cio wrote:
In one module, you can write:

----------
giveMeFunctions = do {
    newIORef ...
    newIORef ...
    newIORef ...
    (...)
    let f1 = ...
    let f2 = ...
    return (f1,f2)
----------

and in the main:

(keyboardMouse,display) <- giveMeFunctions

Doing it like that I could have all the definitions in one module, but
it doesn't solve another important problem: keyboardMouse and display
functions have to have as many parameters as there are IORefs.

I don't think so. I think M means the two functions are closures capturing all the IORefs, i.e. they know which IORefs they refer to. In OO terms, the two functions together are the two methods of an object that contains the IORefs as fields, and you needn't pass those IORefs in. Note that calling giveMeFunctions twice will get you two distinct "objects", not the same one twice.

--
src/
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to