FYI branded types and newtypes are kind of the same thing, branded types just use a unique symbol that's expressed explicitly.