This also allows people to write ill-formed jobs, and that will happen frequently. The confusion around why online stores are different from offline stores will be amplified.

This kind of type parameter is called a phantom type, and it is there to ensure that everything is consistent. Without this, you will just have to fail at runtime.

I know java users are used to that, but our goal in summingbird (scala) is that if it compiles, it runs.