algebra
TypeTag is runtime reflection, so is not/will not be in scala.js, hence the macro implementation.