Persistent does make use TH, but it only requires you to use it as a consumer. That is: you define your schema using its DSL, and then it generates your migrations, data types, instances, etc. for you (which uses TH under the hood).
To give you an idea of what to expect, here's a psuedo-code version of a schema definition: