
On 03/08/07, apfelmus
Chris Smith wrote:
Also, I got so frustrated that I ended up abandoning some code recently because STM is, in the end, so darn hard to use as a result of this issue. I'd love to see this solved, and I'm quite eager to do it.
This sounds suspicious, since the order of effects is of course important in the STM monad. Can you post an example of code you intend to abandon due to ugliness? I'd be astonished if there's no better way to write it.
Just because order *technically* matters doesn't mean it *actually* matters in a given circumstance: mytransaction = do { x0 <- readTVar xvar0 x1 <- readTVar xvar1 : xn <- readTVar xvarn return $ foo x0 x1 .. xn } Versus mytransaction = return $ foo $(readTVar xvar0) $(readTVar xvar1) .. $(readTVar xvarn) Now I'm not to happy about the long names for reading variables either, short overloaded names like "get" and "put" would look much nicer in this example, and in other places too. And certainly, sometimes you do want to name things for convenience. But in *lots* of cases you just want to e.g. read N variables, in an arbitrary order, and then do something with them. Yes the order matters to the *compiler*, but it doesn't always matter to the *programmer*, so to have a more convenient way to express those cases would be very nice, IMO. And there may even be cases where the order does matter but you'd be happy with a left-to-right ordering. This has been a pet-peeve of mine for ages. Imperative programming in Haskell is neat, but I really don't want to write what amounts to almost assembly programming levels of explicitness for simple tasks. I'd also like to reiterate my request for a notation that doesn't require brackets around the *action* but will also work by applying it to a function which when fully applied to its argument returns an action (i.e.: $foo x y + $bar z w, rather than $(foo x y) + $(bar z w)). Function application is normally very low-noise in Haskell (good), and it would be nice if we can keep it low-noise in this notation too. Maybe $ isn't a good operator though.. How about #? Maybe using angle brackets would work.. I'd still like to have them work for functions returning actions though ( <foo> x y + <bar> z w ). Wonder what that would do to ordering comparisons, lexically speaking.... -- Sebastian Sylvan +44(0)7857-300802 UIN: 44640862