In principle, this is not possible. Even if you can get constructors for your values, they are not comparable, because they are functions. The template bit is involved there, but you can define tag values and a function to bind to tags:
let thingCase thing =
match thing with
| One _ -> 1
| Two _ -> 2
| Three _ -> 3
let comp a b = thingCase a = thingCase b
It is flexible enough to work with sequences:
let compSeq things =
things
|> Seq.map thingCase
|> Seq.pairwise
|> Seq.forall (fun (a, b) -> a = b)
: , .