The most important qualities of scientific code are correctness and performance (in that order), and we rightly burn a lot of calories in their pursuit. Unfortunately we seem to be less concerned with how our software is used, and our tools have a reputation for bad manners. Mostly this is due to sloppiness, tight deadlines, non-existent budgets, and the fact that usability is a distant consideration compared to getting a result for a paper. Having worked in the field for five years now I've observed that there are many little details about how we write and distribute our programs that could easily be improved.
This document was written primarily as a source of information for people who are new to Unix, however the concepts are applicable to a much wider audience. A small number of points are specific to our systems, but most of the document applies to any computer running a version of Unix. The aims of the document are twofold: 1. To help you become a productive Unix user. 2. To show you the “Unix Way”, so that you can go off and discover the rest of the system on your own. It is impossible for a such a short document to explain the entirety of Unix, so we focus on the key issues from a user’s perspective. We make no attempt to be exhaustive in our explanations, instead we prefer to use examples to demonstrate how things work. We hope that you will experiment on your own, and where necessary, follow up a topic with further reading on the internet, in a book, or in the online Unix manual.
The Scott Encoding of algebraic data types into the Lambda Calculus
In this article, we give a brief overview of the Haskell-MPI library and show how it can be used to write distributed parallel programs. We use the trapezoid method for approximating definite integrals as a motivating example and compare the per- formance of an implementation using Haskell-MPI to three variations of the same algorithm: a sequential Haskell program, a multi-threaded Haskell program, and a C program also using MPI.
Major releases of GHC are highly anticipated events, especially because of all the exciting new features they bring. The 6.8 series was a particularly impressive example, which came with lots of goodies, including a shiny new debugger. In this article we take the debugger out for a test run, and see what it can do.
What can you do with foldr? This is a seemingly innocent question that will confront most functional programmers at some point in their life. I was recently posed a "folding challenge" by a teaching colleague. The challenge was to write dropWhile using foldr. We gave the challenge to our first-year students, and awarded a small prize to the author of the first working solution. I have since passed the challenge on to other "functional" friends, and the results have been illuminating. That prompted me to write this article.