5 ms·
How to write a Haskell program
- CoffeeDregs 16y agoI liked the article, but it's very much not about "How to write a Haskell program". It's about how to create and distribute a Haskell project. "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>).
- sigzero 16y agoIs the GPL "standard" for Haskell programs?
- dons 16y agoNo, the majority (around 80% of Haskell programs) use the BSD3 license.
- sigzero 16y agoThanks, I was just curious. I am not for or against either license but since that how-to referenced the GPL I was curious enough to ask the question.
- pjscott 16y agoI wonder how much this has to do with BSD3 being the default license when you use the "cabal init" command to generate a project skeleton. Most people probably don't care which open source license they're using; of those who do care, it's generally GPL versus everything else.
- jrockway 16y agoI don't think it has much to do with "cabal init". I've used Haskell and noticed that most libraries are BSD3, so I make my libraries BSD3 also. I did not know that there was such a thing as "cabal init" until just now :) 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.)
- ionfish 16y agoFor me it's a conscious choice. On general principle, I think that open-sourced library code at least should almost always be BSD-licensed. Furthermore, there are many good libraries on Hackage which I might well want to use in a commercial product some day, and a BSD license will make that easy, no matter where my code ends up running. Releasing my own code under the BSD license is therefore also a small gesture towards maintaining this state of affairs.
- ionfish 16y agoYour question intrigued me, so I ran a quick script against the current Hackage database (the list of packages you download from Hackage when you run `cabal update`). Here are my results: 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.
- sigzero 16y agoWas it a Haskell script? :-)
- ionfish 16y agohttps://gist.github.com/943054 https://gist.github.com/943054 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.
- pmr_ 16y agoI honestly think that the title of this article is a misnomer and probably the cause of most of the negative comments. "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.
- deleted 16y ago[deleted]
- DasIch 16y agoI barely know the basics of Haskell and this is very easy to understand. This is supposed to show you which tools you should use, how to organize and publish your project. This tutorials does this quite well. If you want to learn Haskell read http://learnyouahaskell.com http://learnyouahaskell.com or something similar, it explains the language and how to build a simple program using GHC, if you do anything more advanced you should start reading the documentation of your compiler anyway.
- davidw 16y agoI deleted my comment because I couldn't get the tone quite right. The gist of it was that this article reflects a certain mentality... along the lines of starting to learn how to drive by reading about the physics of internal combustion engines. That's hyperbole and the article clearly doesn't go that far, but it seems to be a bit neither here nor there; it's not a tutorial like 'learnyouahaskell' nor is it simply a reference for useful haskell tools.
- ionfish 16y agoIt's an overview of the process of writing a program, covering program and file system structure, build tools, libraries, testing, and revision control. It's not "simply a reference for useful haskell tools" because it has a normative aspect: it says, "This is the way things should be done." It's the document to read when you understand the language well enough to write something larger than a single file solving a Project Euler problem, and want to know what the best practices are in writing a library or executable that could be—for example—published on Hackage or used in production. And while it's not perfect in its presentation, it actually does a pretty good job of what it sets out to do; it was certainly helpful to me when I was in that situation.
- deleted 16y ago[deleted]
- kolektiv 16y agoContrary to some of the other comments appearing, for me this kind of thing is excellent. The biggest mental hurdle I find myself facing when learning new languages and having got beyond the "hello world" stage is "how do I go from here to structuring an app?" An opinionated prescriptive guide is what I need then. When I know more later I can choose to go against the grain if I feel I understand the risks, but structuring projects varies a lot, and being helped to find the idiomatic way is great. It's a whole class of problem I now can ignore and concentrate on the design of my code. 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.
- cabalamat 16y ago> An opinionated prescriptive guide is what I need then. 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?
- ionfish 16y agoThat assumes that Lisp is a (singular) language. Lisp, to my mind, is a family of languages of a certain type, much like the statically-typed functional languages are a family. Choosing one Lisp over another is not like choosing which C compiler to use, it's more like choosing whether to use Python or Ruby.
- cabalamat 16y agoOK, let's say I decide to use Common Lisp. Then I have to decide what implementation to use. There isn't a default one like there is with Python or Ruby. Whichever one I choose, how can I know (and remember at this point I don't actually know CL) what libraries it has, what quality they are, whether there are libraries that work on other CLs but not this one, what debugging tools are available and what quaslity, whether it will work on the OS I use, whether it will work on the OS I will use in 5 years time (and I don't know what that will be), whether there are any other pitfalls with my choice, etc. For me to be sure I've made the right choice, I'd have to do weeks or months of research, including trying out the major varients. Fuck that. If I do learn a Lisp it'll be Clojure, because there's only one implementation.
- dons 16y agoRemember guys, this is an introduction to the Haskell ecosystem, and expected coding practices. It's not a tutorial about Haskell. Also, needs a couple of little updates (e.g. github didn't exist when we wrote this).