Paul Hudak, Co-creator of Haskell, Has Died
Esther Schindler writes: Yale is reporting that Paul Hudak, professor of computer science and master of Saybrook College, died last night after a long battle with leukemia. He was known as one of the principal designers of Haskell, which you probably don't need to be told he defined as "a purely functional programming language."
You're either trolling or you've missed out on one of the hottest languages since Lisp.
I posted on one of the Usenet groups (probably sci.lang.functional or sci.lang.haskell) about his book The Haskell School of Expression. It's been awhile, but I vaguely remember posting about a mistake or typo, and he replied right there on Usenet acknowledging the error. He was generally very generous and helpful on the newsgroup.
In theory, theory and practice are the same; in practice they're different. (Yogi Berra & A. Einstein)
(lazy evaluation)
Why would someone develop a language that didn't work?
It's a strictly typed, lazy, purely functional language with abstractions built around category theory. These are very hard to grasp, but once you do you can use them for things.
It's not just a different syntax.
The others bring almost nothing new to the party. Lisp, Erlang and Haskell all brought something new. Python, PHP and Rust didn't. Being functionally proficient in Lisp, Erlang and Haskell gives you skills that vastly improves your Java/C++/Whatever. Being proficient in Python and PHP gives you no new skills other than Python or PHP and perhaps some hipster cred.
I've got a 'kind of bingo card that I use to keep track of languages. I place checkmarks for each language depending on how it's different from all the other languages.
Help me out. Does Haskell require or not require a block after an "if" statement? Is the block introduced by brace, bracket, "then" or something else?
Or... does it use some completely lateral way to specify an "if" statement?
I may have to update my bingo card to accommodate.
I urge you (in the friendliest terms possible) to learn one of Lisp, Erlang or Haskell. Until you do you are going to continue assuming that the only differences between languages are purely cosmetic ones ("where does the brace go?", "how do you start a block?", etc). If you're going the Lisp route, pick a dialect of scheme.
TLDR; If the only language differences that you can imagine ever existing are cosmetic ones such as those in your post, then you have not been exposed to enough other languages.
As a quick example, using any language you know... can you /add/ to that language a feature that implements say... a switch/case statement (assuming that it didn't already exist, of course). How about an object system based on ... classes? If your language did not offer a way to define, create and instantiate objects would you be able to add the "class" keyword in? How about new operators? Every language lets you add functions, few let you add operators.
As it turns out, even though I hardly ever use those languages for anything these days, the deep possibility tree they open your eyes to gives you a more than passing mastery of concepts that all the other languages implement in an incomplete, half-assed way (looking at C++ lambdas here, btw).
I'm a minority race. Save your vitriol for white people.
Haskell doesn't really have an "if" statement as such. It has an "if" expression (analogous to C's [expr] ? [expr] : [expr] conditional expression) but it's not widely used in my experience. Haskell folks would rather use guards and pattern matching to do the same job.
Ita erat quando hic adveni.
my foundation of "that old crap" is what gives me an edge over all of these kids out there who can't program without pretty pictures.
However, I really do think that the subset of tasks where a functional approach will help is significantly smaller than you think.
While you may never use the functional approach, I find that knowledge of that functional approach is what gives me an edge ;-) It's not the functional approach that you use, it's the problem-solving ability that you gain that helps. For example, writing mini-DSL's in C++ is a damn sight faster if you're already used to the Lispish way of doing things. Writing anonymous functions in Java is a great deal easier after scheme thumped home the concept of closures (and lexical vs dynamic scoping).
Quite frankly, I find that the functional programming enthusiast crowd is a group of people who only know how to use hammers and they're trying to convince the world that every problem is a nail.
They are quite an annoying bunch, aren't they? I long ago stopped reading/posting to comp.lang.lisp purely because of the hostile and aggressive nature of that community. The NIH syndrome is especially strong with the lisp programmers - there's a reason that Lisp hasn't taken over the world even though it has all the language functionality present in almost every language that came after it (including Javascript, Java, C++, C#, Python, etc).
I'm a minority race. Save your vitriol for white people.
For those who never heard of Haskell and are looking for an example project written using this language check out Pandoc: http://pandoc.org/. Other examples are Darcs (version control) and xmonad (tiling window manager).
Perl Programmer for hire
That he knows about incredibly common, often-used languages? Have fun coding in Lisp with the five other people that use it.
I suspect there's only four of us :-)
I'm a minority race. Save your vitriol for white people.
Facebook, Google, Microsoft, Intel, see: Haskell in industry: https://wiki.haskell.org/Haske... I don't know when you were in school, but if it was in the 90s (like me); the FP landscape has changed quite a bit since then. I did the edX course FP101x Introduction to Functional Programming (98%), which I can highly recommend to get a feel for Haskell.
Perl Programmer for hire
It's not that niche. For those of us who are programmers I'm sure the majority haven't used it. But I'm sure most HAVE at least heard of it!
I know I heard of it in college although it was only a passing reference. I can't say where I have heard of it since until yesterday but I know it gets mentioned often enough not to forget it. As for yesterday.. I keep hearing people tell me I should check out this tiling window manager, xmonad. http://xmonad.org/ Guess what, it's not only written in Haskell, it is configured in Haskell! So.. I guess anyone who uses xmonad and changes anything about the configuration has at least a tiny little exposure to Haskell.
Further.. Who cares if it is obscure? This is Slashdot! Everything here is obscure to the majority of the population. We all have some obscure interests or we wouldn't be here! We don't all share the exact same obscure interests though. I know I never click on the majority of the articles here although I do read several per day. If he doesn't know what Haskel is then why even bother clicking? Why bother commenting that you aren't interested in an article? Because you are interested in every other article and this one is uniquely dull to you? BS! The only reason to make that kind of comment is b/c you know that programming languages like operating systems and text editors have rabid fanbois who will get all hot and bothered and post back. Obscure ones are best because they already feel cornered and will be extra defensive.
Yup... textbook troll!
Put away the bingo card. Some languages, like Lisp and Haskell, actually DO bring seriously different ideas to the table, and there are tasks where their ideas are useful. A few examples may help. Once a "variable" is set, you cannot change its value (though it CAN go out of scope). This has serious reasoning and optimization advantages, but it requires a different way of thinking. Haskell has lazy evaluation, i.e., it computes nothing until you ask for it. It's routine to define infinitely-large data structures, which is a non-problem because only the parts you need are calculated. If you're only familiar with the ALGOL language family (C, C++, Objective-C, Java, C#, PHP, Python, etc.), you'll need to do some real learning.
- David A. Wheeler (see my Secure Programming HOWTO)
But you have to, since output has been demanded.
sub f{($f)=@_;print"$f(q{$f});";}f(q{sub f{($f)=@_;print"$f(q{$f});";}f});
You've more or less described almost every functional programming language. And many of them, quite old, are gaining in popularity well past their introduction, in no small part because functional programming turns out to be well suited for parallel computing (and therefore to distributed computing and multiple processor cores). It should not be surprising to hear more about languages like Erlang (1986) and Haskell (1990), or to see new functional languages introduced going forward.