On Tuesday 23 March 2004 17:04, you wrote: > * Memory management (allocation and deallocation) is effortless. > > * Creating lexical closures is very easy. > > * You don't have to declare the types of all your functions and local > bindings, because the implementation can figure them out for itself. > > * You don't have to ensure that values are computed before they're used, > because the implementation handles that too. > > If you were learning C instead of Haskell, you'd be complaining (and > rightly so) about the effort required to do these things in C.
Actually, most of these things are pretty easy in Ruby, too. Everything is easy in Ruby :-) But what I like about Haskell is stuff like pattern matching and list comprehension. I also particularly like the effortless strong typing. Before Haskell, I thought strong typing meant variable type declarations, which are tedious. When I find myself doing design and writing pseudocode, and having it look a lot like a language I use, I decide that the language is Good. So far, this has happened to me with both Haskell and Ruby -- Haskell at a higher level, when I'm thinking about functions that I'll need, Ruby when I'm sketching out algorithms. In eight years of coding Java professionally, I *never* found myself writing any pseudo-code that looked anything like Java. > We'd all love to make the lifting implicit, but no one knows how to do it > without breaking the whole language. I've heard people talk about the functional "purity" of Haskell -- you'd have to break this purity to add implicit lifting? > A related problem which was discussed here recently is Haskell's lack of > per-type namespaces, something which even C programmers take for granted. > Again, the problem is the tricky interaction with type inference. Augh! Yes! I've hit that as well. Well, in my case, it was constructors. I was trying to do: data Effort = Easy | Middle | Hard data Impact = Low | Middle | High Effort and Impact aren't related (in any useful ontological sense that I can think of), so I don't want to make them instance of the same type -- but I can't reuse Middle without it (AFAIK). So I had to fudge, and call the Impact constructor "Medium", which sort of grates, as you can imagine. Yeah, that's something I'd like a work-around for, too. > Unless/until these problems are resolved, all you can do is learn a bunch > of different languages and use the one which is most convenient for a > particular task. Haskell, for all its problems, is a strong contender for > many tasks. What I use Haskell for are those tasks where I really want something compiled. What surprised me, after I'd used it for a few weeks, was that my applications were more robust than I expected, given the novelty of the language to me. If I were to write any software (in a language that I know) upon which lives depended, it'd be in Haskell. I find that, with Ruby, I don't struggle -- the code just flows -- but I *liberally* use unit testing, and even so I spend a fair amount of time debugging . With Haskell, I spend some effort figuring out how to solve the problem and some time getting it to compile, but once it does, it generally works as expected. Very rarely do I need to debug code that compiles. With Java, I spend a fair amount of time getting stuff compiled and running, and then even more time debugging, and then more time fixing stuff later. The most amazing thing to me about Java is how little the compilation phase contributes to making code more robust. My Ruby is no more buggy than my Java, and it is loosely typed and entirely interpreted. In fact, I generally trust Java applications less than Ruby applications. But, I fear I'm wandering off-topic. Thanks to everybody for the feedback about my problem; I have a working solution using the visitor pattern, and while I'm still concerned about IO monads (yes, just IO; other monads -- such as Maybe -- are less troublesome), it is "good enough". -- ### SER ### Deutsch|Esperanto|Francaise|Linux|XML|Java|Ruby|Aikido ### http://www.germane-software.com/~ser jabber.com:ser ICQ:83578737 ### GPG: http://www.germane-software.com/~ser/Security/ser_public.gpg _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell