The phantom type doesn't appear on the actual constructors, only on the type signatures. In the function convertToReq, you are changing the following
1. The type.
2. The value of the price record (actually returning a new value with the price record changed to one and the rest of the fields being the same.
That said, I don't see the point of a phantom on a record structure like this. Phantoms are more useful when you have multiple data constructors for a given type and you want to make sure you don't have constructions that don't make sense. Like in an interpreter, you don't want to create expressions that can give rise to an expressions like add a integer to a string and that sort of thing.
In fact, that set of lecture notes as well as the 2014 class notes are amazingly good.