
minh thu wrote:
but i consider to move back to c/c++.
I'm led to believe that you just haven't got the hang of the things that just aren't there in C, such as Monads and higher order functions. So you cannot yet see what you would miss in C. (And I guess, you're not feeling at home in C++ either, since there is no language named C/C++.) Whatever, if you believe a person can only master a single programming language, it might as well be C for you...
* array : if i want to write something involving array, i could use list, and a lot (too much!) of array types (io/st, mutable/immutable, c-friendly (storable).
I've never understood peoples preoccupation with arrays. You lose all flexibility just for O(1) lookup and O(1) destructive(!) update. Most of the time you're better served with a finite map.
worst, code involving one type can need to be rewritten for another type.
Huh? It doesn't, that's the point of the overloaded IArray/MArray interface!
* laziness / array (again) always with array code, i was forced (maybe it's because i dont know enough) to use iouarray : if not, performance|memory consumption were low|high.
You're putting unevaluated thunks into your data structure, probably accumulating them there. Bringing out the sledge hammer of IOUArray only obscures the problem. You should 'seq' data before writeArray'ing it.
* randomIO but the threading of the randomIO argument is really not explicit for me : it just means that the underlying/threaded state in the IO monad can encapsulated a lot of things.
Duh, don't use IO if you neither like nor need it. Most random functions are no IO actions for a reason.
e.g. writing myfunction x1 .. xn | x1 `seq` ... False = undefined is not declarative
But it isn't all that bad either...
(and i still have to learn to identify where it helps and where it doesn't)
...while this is the real problem. You have to understand lazy evaluation to make beneficial use of 'seq'. It really helps to reproduce some reductions on paper.
the c language take some more time to learn at the beginning but that's it!
Oh come on, you cannot honestly believe that. If so, please send me some chunk of nontrivial C code, I send you back at least one location where it produces undefined behaviour. Yes, I'm confident that I'll find some.
did you had the same feeling ? does it disappear ? how ?
Never had that feeling, because C is just too ugly. It will disappear once you really understand lazy evaluation. Udo.