
can you please rewrite *p++=*q++ in haskell? do { w p =<< r q; i p; i q }
how about *Object.File.Line.CurPtr++ = *AnotherObject.File.Line.CurPtr++ ? ;)
what's the difference?-) let p = Object.File.Line.CurPtr let q = AnotherObject.File.Line.CurPtr do { w p =<< r q; i p; i q } the other line-noise version i gave does't even need the lets to avoid duplicating long names: i Object.File.Line.CurPtr =: (r `ap1` i AnotherObject.File.Line.CurPtr) but this is rapidly approaching the level at which my brain calls for a separation of concerns. there are oneliners that make code more obvious, and there are oneliners that make code harder to read. and definitions of hard/obvious differ..
the problem with Haskell is that we need to split C expression into several statements and explicitly specify execution order even when we know that it doesn't matter. ideally, it should be possible to define
++x = modifyIORef x (+1) >> readIORef x *x = readIORef x
apart from the prefix symbols (i used one-letter prefix names), you can (as i'm sure you know). and the point of my little exercise was to show that instead of doing the splitting by hand at each usage site, we can write lifting combinators that do the splitting behind the scenes. what gives haskell aspirations to be a fine imperative language is that its abstraction mechanisms work as well for imperative code as for functional code. claus