Log in

No account? Create an account
Previous Entry Share Next Entry
Here's one for the serious programming geeks: the Scalaz Homepage.

Scalaz is a big, complex library written on top of Scala, that adds a wealth of higher-level data structures and tools. But it is driven by the functional-programming side of the Scala community, and it is hardcore. It not only tends to assume that you understand Monads, it introduces data structures for Applicative Functors, the newer and lighter-weight cousin of Monads that have been the hot topic over the past two years. It has a zillion datatypes like Monoids and Kleislis, an implementation for a totally different way of managing iterators, and just plain cool structures like B-K trees. On the concurrency side, it argues that Futures and Actors are lovely toys, but don't compose properly, so they lift out the concept of Promises -- fully composable lazy evaluation without blocking.

Seriously: the page is concise, but has lots of pointers to code, examples, and some of the papers that the ideas are taken from. I've been digging through it in the cracks of the past couple of days, and have barely even begun to understand all of it -- it's basically a course in advanced, modern computer science, all wrapped up into a single library.

This stuff is not for the faint of heart, but my intuition is that a firm grasp of this library and the concepts embodied in it will stand you in very good stead in the next decade, as many of these ideas begin to come into the mainstream by necessity.

(It should also be noted that I think most of this stuff is considered relatively conventional in Haskell. But Scalaz brings it to the Scala world, bringing Scala more into parity with Haskell on the functional side, matching the way it is already state-of-the-art on the OO side. And I'll warn that they leverage Unicode heavily for this library: I hadn't even realized you could use arbitrary Unicode for function names in Scala until I got to the operators here. They use all sorts of weird mathematical symbols that I don't even know...)

  • 1
I find it difficult to use any symbol when I do not know its name. And yes, I mentally pronounce $var as "string var".

You can deduce what I think the worst part of APL is.

Having started a rather interesting discussion over on scala-debate, I now get the impression that the heavy use of Unicode-symbol aliases may have been a passing fad. (I specifically made your point, BTW, that symbols are hard to learn if you can't pronounce them -- I hadn't noticed that, but I find it's quite true for me as well...)

I am still trying to get my head around monads. I will get there sooner or later. I think Simon Payton Jones was right when he said they should have been named "Warm fuzzy things"

Heh. Yeah, I'm about halfway there -- I occasionally Get It, but can't quite hold the concept in my head for more than a few minutes. I think I'm going to have to do more with them before I really grok the concept...

Wow. Your second paragraph alone contains more data structures I've never heard of than I've seen together in some time...

Yeah, it's quite a head-turner. I think of myself as pretty hip to modern programming, but Scalaz is a reminder that there is a *lot* of state of the art stuff that's way beyond common practice, especially once you get into higher-order typeclasses...

  • 1