From: Johnny Morrice Date: 2011-04-05T18:13:44+09:00 Subject: Re: functional languages -- any recommendations? On Tue, 5 Apr 2011 10:17:39 +0900 7stud -- wrote: > Haskell, Scala, or Erlang? Which one is the best? What about Racket, the descendent of PLT scheme? http://racket-lang.org/ I'd say it's just as good for learning about functional programming as the others, but it also makes it easy to write something useful. For instance, it has a nifty DSL for writing web-sites. Unimaginatively of me, here is an example from their home page: #lang web-server/insta ;; A "hello world" web server (define (start request) (response/xexpr) '(html (body "Hello World"))) The standard libraries include a web-server, and if you use that DSL, it'll start it up for you, and just serve your site, no extra configuration required. Which is pretty cool for learning at least. It comes with OpenGL too, which is great if you like writing games :D Also, it supports objects and classes, so you won't into the problems described below. Not so many libraries as Scala and Haskell though. And slower too. You can tell I'm a "fan-boy". I swear I'm not a PLT plant! But on to the others: Haskell doesn't have the feature called inheritance in Object Oriented Languages*. Living without objects is okay, but it means you can't create a new data-type that inherits members from another data-type. It has other mechanisms for code-reuse, but sometimes things which would be really simple with, for example, a template method, into a bit of an exercise in formal logic. Still, that's okay because that's pretty much how you program the whole of the system in Haskell. Haskell has a really cool macro system called Meta-Haskell. It's basically like an interface to a compiler front-end so you can create, explore or transform a Haskell abstract syntax tree, or fragments thereof. It's super-awesome :D Erlang doesn't have inheritance either but it doesn't become an exercise in logic the same way because it doesn't have static-typing. IIRC their structures are just transformed into a vector or something at compile time, there's no real notion of a member of a data-structure. I really like erlang though, the syntax is cool. Commas. Apologies for the long post! * Haskellers would probably call inheritance "sub-type polymorphism", sitting in their tweed and smoking their pipes, etc.