As of 10 AM today I am officially…unemployed.
Just over a year ago I quit my job, changing fields, completely new technology and just about everything else.
While everyone in college was using TI, I was using an HP 38g. The story of its arrival is kinda interesting.
Going back to the todo.txt haskell project, this post will continue on with more advanced parsers and how to test them.
Unit Testing is a great way to try to verify consistent functionality over the life of our code. Typically we design our tests to cover ranges and edge cases of our code making sure that we can handle all inputs. This is made easy when we write in Functional Languages as there (should be) no side effects. But when you want to deal with IO and side affect code in Haskell, this becomes much more difficult.
This problem has been fixed many times, but often with very complex solutions. Let’s see if we can make it really simple (even if the post is long).
I’ve always liked self hosting as it gives you the most flexability. With projects like gitolite you can ditch the heavy database, the server side scripting languages and run a nicely configured and feature rich server on something as small as a Raspberry Pi.
Gitolite supports gitweb, but when running on Debian it required me to install apache2, and configure CGI. Other distros I’ve tried were even worse with dependencies. All I want to is give public, read-only access via http. Can’t be too difficult, right?
Continuing with the todo.txt haskell project, this post will introduce parsers.
I created a URL shortner and bookmark CGI script…in Bash! Because who doesn’t love making their own version of free services just for the heck of it?
Up to this point we have written some code, explained type classes, and done a little pattern matching. But we haven’t written anything that really does anything. Until we have some IO to perform, we will have to find another way to interact with our code. This is a perfect chance to introduce Unit Testing.
Now that we have a few basic types we should start working on making their interaction nicer. It is pretty important to be able to print and compare data types so we will start there. Once we are able to compare, we should be able to filter lists of data types.