One step closer towards a poor mans GADT, need to work out how to implement guards, but should make it easier for pattern matching in JS.