I've recently been learning Haskell. As part of that, I'm implementing Huffman Coding. This is my first real project in the language. It's been overall quite pleasant, and has taught me a lot.

The biggest lesson has been thoroughly meta: compression tasks are a great way to learn a language/environment. For this project, I had to learn how to use modules, do I/O, mangle arrays, and define tree structures. It might not look like too much, but that's actually a huge amount of stuff to shove into a couple weekends of hacking.

Other things I've learned (or relearned), in no particular order: