How to write a Haskell program
haskell.org
haskell.org
It was a while before I understood how Erlang project structure worked. But I knew where to look. Ditto when I try things like Scala and Clojure (as I'm no longer familiar with Java, really). This is a good and useful step.
Indeed; it gives the default values for lots of things in the program / build environment / revision control, etc.
One might of course later decide to change some of these settings, but one can be sure that none of the default settings are outright insane or likely to lead you up the garden path.
I suspect one of the reasons Lisp hasn't broken out of being a niche language is that there is no default value to the question: Which Lisp shall I learn/use?
Fuck that. If I do learn a Lisp it'll be Clojure, because there's only one implementation.
Use SBCL; it's the most common and well-supported implementation. It works fine on most OSes (and has done so for years, and will continue to do so for the foreseeable future), though it's a bit dodgy on Windows. If you're using a Unix (including OS X), you'll be fine:
http://www.sbcl.org/platform-table.html
The place to look for libraries is CLiki.net, and if you'd like to get started with minimum effort, then Quicklisp is exactly the library collection you're looking for:
http://www.quicklisp.org/beta/
Quicklisp has all the common libraries, with easy installation and dependency management.
For editing and debugging, it's hard to beat slime-mode in emacs. It's very slick and pleasant to work with. (Incidentally, this is also the most common way of editing Clojure, but it works more smoothly with Common Lisp. Much better stack traces, for example.)
I'm enjoying using Clojure right now, but please don't be scared away from Common Lisp. It's got a lot going for it.
Also, needs a couple of little updates (e.g. github didn't exist when we wrote this).
"How to write a Haskell program" would be much higher level because the joy (and challenge) of Haskell is that composing a program is really a process of composing functions or monads and the interactions can quickly become non-trivial (though, unlike OO systems, the interactions are generally visible). Whereas writing "Hello World" in Java can actually get you started in Java, writing "Hello World" in Haskell gets you just about nowhere ("But it introduces you to the IO monad!" <giggle>).
"writing a program" is probably mostly associated with the mental process whereas "creating a project" is about the mechanics and the article is clearly describing the latter.
Over in the Perl world, most libraries are GPL2/Artistic, so I follow that convention. In the end, I would probably prefer the MIT license for libraries... but following convention seems better than setting my own.
(For applications, I go with the GPL3 because it's not going to inconvenience anyone and it provides the best protection of free software. But people are just going to skip your library if they have to relicense their project, so I find that the GPL is not particularly appropriate in that case.)
BSD3: 2159 (72.38%)
GPL: 345 (11.57%)
LGPL: 117 (3.92%)
OtherLicense: 107 (3.59%)
PublicDomain: 85 (2.85%)
MIT: 67 (2.25%)
GPL-3: 64 (2.15%)
LGPL-2.1: 16 (0.54%)
GPL-2: 12 (0.4%)
LGPL-3: 8 (0.27%)
BSD4: 3 (0.1%)
Two libraries didn't list their license in their .cabal file. One of these is (from looking at their license file) available under a simple permissive license; the other doesn't make it clear.I've tidied it up and added some comments explaining what it does. The only dependency outside libraries which come with GHC is the 'text' package, which is included in the Haskell Platform.