On 2/23/07, Sebastian Sylvan <[EMAIL PROTECTED]> wrote:
On 2/23/07, Greg Fitzgerald <[EMAIL PROTECTED]> wrote:
> I want to write a program where a user would update a bunch of variables,
> and everything that depends on those variables (and nothing else) are
> recalculated.  Basically, a spreadsheet, but generalized for any
> computation.  Could someone recommend an elegant way to do it or some good
> reading material?

Off the top of my head, one cool way of doing it would be to have each
variable be a separate thread (they're lightweight, so it's okay!
:-)), and you would have a list of input connections and output
connections, in the form of TVars.

In its resting state you would have a transaction which simply reads
all of the input variables, and returns the new list of inputs if and
only if either of them are changed, something like:

-- not compiled, consider it pseudocode :-)
getInputs :: (Eq a ) => [( a, TVar a)] -> STM [a]
getInputs inp = do
  let (vals, vars) = unzip inp
  newVals <- mapM readTVar vars
  when ( newVals /= vals ) retry -- at least one input must've been changed

Bah, this should be:

when ( newVals == vals ) retry

Of course...

--
Sebastian Sylvan
+46(0)736-818655
UIN: 44640862
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to