On Sun, Mar 22, 2009 at 08:10:28PM -0300, Rafael Cunha de Almeida wrote:
> 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.
You may always create a new data type.
> Whereas in Haskell I would have something like
> keyboard var1 _ LeftKey = ...
> keyboard _ var2 RightKey = ...
> If I wanted to add a new IORef I'd have to do something like:
> keyboard var1 _ _ LeftKey = ...
> keyboard _ var2 _ RightKey = ...
> keyboard _ _ var3 RightKey = ...
> So, I had to change all previous definitions.
Initial code:
> data Vars = Vars {var1 :: {-# UNPACK #-} !(IORef Type1)
> ,var2 :: {-# UNPACK #-} !(IORef Type2)}
>
> keyboard v LeftKey = ... (var1 v) ...
> keyboard v RightKey = ... (var2 v) ...
Modified code:
> data Vars = Vars {var1 :: {-# UNPACK #-} !(IORef Type1)
> ,var2 :: {-# UNPACK #-} !(IORef Type2)
> ,var3 :: {-# UNPACK #-} !(IORef Type3)}
>
> keyboard v LeftKey = ... (var1 v) ... -- unchanged
> keyboard v RightKey = ... (var2 v) ... -- unchanged
> keyboard v OtherKey = ... (var3 v) ...
Note that the UNPACKs aren't really necessary.
--
Felipe.
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe