On Tue, Apr 1, 2008 at 1:02 PM, Bulat Ziganshin <[EMAIL PROTECTED]> wrote: > Hello Simon, > > > Tuesday, April 1, 2008, 2:18:25 PM, you wrote: > > > How can one answer the question--why choose Haskell over Scheme? >
Well as a longtime Scheme and OCaml programmer, and Haskell-cafe lurker, I'll take a stab at this... > 1. static typing with type inference - imho, must-be for production > code development. as many haskellers said, once compiler accept your > program, you may be 95% sure that it contains no bugs. just try it! > I think this is the biggest, and most obvious, difference to consider when choosing either Scheme or Haskell over the other -- for a particular problem. Dynamic and static typing each have their advantages, depending on the context. I think it's dangerous to try to answer the question "Scheme or Haskell?" without a problem context. > 2. lazy evaluation - reduces complexity of language. in particular, > all control structures are usual functions while in scheme they are > macros > Well, if I don't have side effects (and don't mind extra, unneeded evaluations), I can write my conditionals as functions in Scheme too. Heck, now that I think of it I can even avoid those extra evaluations and side-effect woes if i require promises for each branch of the conditional. No macros required... I think some problems are just more naturally modeled with lazy thinking, and a language with implicit support for lazy evaluation is a _huge_ win then. I written plenty of lazy Scheme, and OCaml for that matter, code where I wished and wished that it just supported lazy evaluation semantics by default. Again, I think this is highly problem dependent, though I think you win more with lazy evaluation in the long run. Do more experienced Haskellers than me have the opposite experience? I mean, do you ever find yourself forcing strict evaluation so frequently that you just wish you could switch on strict evaluation as a default for a while? > 3. great, terse syntax. actually, the best syntax among several > dozens of languages i know > I think this is possibly the weakest reason to choose Haskell over Scheme. Lispers like the regularity of the syntax of S-expressions, the fact that there is just one syntactic form to learn, understand, teach, and use. For myself, I find them to be exactly the right balance between terseness and expressiveness. For me, Haskell syntax can be a bit impenetrable at times unless I squint (and remember I'm also an OCaml programmer). Once you "get it," though, I agree that the brevity and expressiveness of Haskell is really beautiful. > 4. type classes machinery, together with type inference, means that > code for dealing with complex data types (say, serialization) is > generated on the fly and compiled right down to machine code > This is obviously related to #1, and Haskell sure does provide a lot of fancy, useful machinery for manipulating types -- machinery whose functionality is tedious at best to mimic in Scheme, when even possible. In short, I think the orginal question must be asked in context. For some problems, types are just a natural way to start thinking about them. For others dynamic typing, with _judicious_ use of macros to model key aspects, is the most natural approach. For the problems that straddle the fence, I usually pick the language I am most familiar with (Scheme) if there are any time constraints on solving it, and the language I'm least familiar with (Haskell, right now) if I have some breathing room and can afford to learn something in the process. Cheers, -Andy > > -- > Best regards, > Bulat mailto:[EMAIL PROTECTED] > > > > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe > _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe